Gentoo Logo

Gentoo distcc ドキュメント

目次:

1.  はじめに

distccとは?

distccとはコンパイル作業をネットワークに参加しているホストに分散させるプログラムです。 それはサーバである distccdと、クライアントのdistccから成ります。distccはccache、Portage、そしてAutomakeと透過的に動作することができます。

ditccをブートストラップに使う

もしあなたがdistccをGentooのインストールに使用しようと思っている場合は、このドキュメントの下にあるdistccをブートストラップに使うを読んでください。

2.  セットアップ

依存関係

distccを使うには、ネットワーク上の全てのコンピュータのGCCが同じバージョンで無ければなりません。 例えば、3.3.xを混ぜるのは大丈夫ですが、3.3.xと3.2.xを混ぜると、あなたのプログラムはコンパイルエラーやランタイムエラーを起こすでしょう。

distccのインストール

distccのインストールを始める前に意識しているべきオプションがいくつかあります。

distccはコンピュータが送信したコンパイルタスクを監視するグラフィカルモニターを提供します。 もしGnomeを使っているのならUSEフラグに'gnome'を追加してください。しかし、Gnomeを使っていないがモニターを利用したいときはUSEフラグに'gtk'を追加してください。

コード表示 2.1: distccのインストール

# emerge distcc

重要: 関係するマシン全てにdistccをインストールしなければならないことを忘れないでください。

distccを使うようにPortageを設定する

Portageがdistccを使うように設定することは簡単です。 分散コンパイルに参加するシステムごとに次のステップを実行します。

コード表示 2.2: distccとPortageの統合

# emerge distcc
# nano -w /etc/make.conf
(Nにはここの設定に適した数値を入力してください)
(一般的にはCPUの合計数+1の二倍をNに設定します)
MAKEOPTS="-jN"
(FEATURESにdistccを追加します)
FEATURES="distcc"

参加するホストを指定

distcc-configコマンドを使ってホストのリストを設定してください。 これは、あなたのリストにあるかもしれないホストの例です。

コード表示 2.3: ホスト定義の例

192.168.0.1          192.168.0.2                       192.168.0.3
192.168.0.1/2        192.168.0.2                       192.168.0.3/10
192.168.0.1:4000/2   192.168.0.2/1                     192.168.0.3:3632/4
@192.168.0.1         @192.168.0.2:/usr/bin/distccd     192.168.0.3
(ホストの設定にはいくつもの他の方法があります。詳しくはdistccのmanpageをご覧ください。)
ローカルマシンでコンパイルしたいのなら、ホストリストに'localhost'を追加します。
逆に、ローカルマシンでコンパイルを行いたくないのであれば(こちらが良くある場合です)、ホストリストから省きます。
遅いマシンでlocalhostを使用するととても遅くなります。
パフォーマンスのため、設定をテストするようにしてください。

それはすべて複雑に見えるかもしれませんが、ほとんどの場合、1行目または2行目を元に修正すれば動作するでしょう。

ほとんどの人は3、4行目を使わないので、SSHを通してdistccを使う方法も含まれた、詳しい情報(man distcc)を紹介しておきます。

例えば、上記例の最初の行を設定するには以下のようにします。

コード表示 2.4: ホスト設定のコマンド例

# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"

必要に応じて/etc/conf.d/distccdを編集し、あなたが信頼したホストのみを許可するために--allow指示を設定してください。 (ルータ用)追加セキュリティのために、--listen指示を利用して、DistccデーモンにどのIPを受信待機するか指定するべきです。 より多くの情報はDistcc Security Designを参照してください。

重要: --allowと--listenを使うことが重要です。詳しくはdistccdのマニュアルか上記セキュリティドキュメントを参照してください。

では、全ての参加しているコンピュータでdistccデーモンを起動させましょう。

コード表示 2.5: distccデーモンの起動

(distccdをデフォルト実行レベルに追加)
# rc-update add distccd default
(distccデーモンの起動)
# /etc/init.d/distccd start

Automakeと共に実行するようにdistccを設定

これはPortageの設定よりも簡単です。 あなたがすべきことは、PATH変数に/usr/lib/distcc/bingccを含むディレクトリ(/usr/bin)の前に含むように更新します。 しかし、警告があります。もしあなたがccacheを使用しているなら、ccacheの後にdistccを置いてください。

コード表示 2.6: パスを設定する

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
(ログイン時にPATHが設定されるように、.bashrcかそれと同等のファイルにこれを記述することが出来ます。)

そして、通常makeと入力するのと同様に、make -jN(Nは整数)と入力することになります。 Nの数値はあなたのネットワークとコンパイルに使うコンピュータのタイプに左右されます。 あなた自身の設定をテストして最高のパフォーマンスを得る数値を探してください。

3.  クロスコンパイリング

クロスコンパイリングはあるアーキテクチャで他のアーキテクチャ用にプログラムをビルドするために使います。 これは、例えばAthlon(i686)でK6-2(i586)用のプログラムをビルドしたり、Sparcでppc用のプログラムをビルドするために使います。これについては、DistCC Cross-compiling Guide(日本語訳)に記載されています。

4.  distccをブートストラップに使う

Step 1: Portageの設定

新しいコンピュータをGentoo Linux LiveCDで起動し、installation instructions(日本語訳)に従ってブートストラップの部分まで進めてください。 (ブートストラップに関するより詳しい情報はGentoo FAQ(日本語訳)を参照してください) その後distccを使うようにPortageを設定します。

コード表示 4.1: 予備設定

# nano -w /etc/make.conf
(FEATURESにdistccを追加する)
FEATURES="distcc"
(-jN(NはCPUの合計数+1の二倍)を含むようにMAKEOPTSを修正する)
MAKEOPTS="-jN"

コード表示 4.2: パスの設定

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

Step 2: distccのインストール

distccをインストールします。

コード表示 4.3: distccをコンピュータにインストール

# USE='-*' emerge --nodeps sys-devel/distcc

Step 3: distccの設定

distcc-config --installを起動してdistccを設定します。

コード表示 4.4: distccの最終設定

(host1, host2, ...は参加しているホストのIPアドレスに置き換える)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
例: /usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.6"

これでdistccがブートストラップ用に設定されました! 公式のインストールの説明に沿って続けてください。 ただし、emerge systemの後にもう一度distccをemergeすることを忘れないでください。 これはあなたの望む依存関係を正しくインストールするためです。

注意: ブートストラップとemerge systemの間distccが使われないかもしれません。 これは恐らく、いくつかのebuildはdistccとはうまく動作しないため、意図的に使用しないようにしているためです。

5.  トラブルシューティング

Distccを使ってはいけないいくつかのパッケージ

様々なパッケージをemergeしていると、いくつかが配布されない(そして並列ビルドが行われない)ことに気付くでしょう。 これはパッケージのMakefileが並列ビルドをサポートしていなかったり、 ebuild開発者が既知の問題のため意図的に使用しないようにしているためです

時々distccがパッケージのコンパイルに失敗するかもしれません。 もし起こった場合には、私たちに報告してください。

GCCバージョンの混在

もしホストで異なったバージョンのGCCを使用していると、とても奇妙な問題を起こすでしょう。解決するには全てのホストが同じバージョンのGCCを使用するようにしなければなりません。

最近のPortageの更新で、gccの代わりに${CHOST}-gccを使用するようになりました。 これは、i686マシンとその他(i386、i586)を混在させると問題が起こると言うことを意味しています。 この回避策は、たぶんexport CC='gcc' CXX='c++'を実行するか、それを/etc/make.confに追加することです。

重要: これを行うとPortageの振る舞いのいくつかを再定義し、将来おかしな事が起こるかもしれません。 CHOSTを混合させるときのみ行ってください。

-march=native

GCC 4.3.0で始める場合、コンパイラは、GCCが動作するプロセッサ上で有効であるときに有益なCPU自動認識と最適化を実行する--march=nativeスイッチをサポートしています。。これは、(AMD AthronとIntel Peniumのような)ことなるプロセッサに対して最適化されたコードの混在がありえる場合、distccでは問題になります。distccでコンパイルを行う場合、CFLAGSCXXFLAGSのなかで-march=nativeまたは-mtune=naative使わないでください。

6.  distccその他

distccモニター

distccは2つのモニターを提供します。テキストベースのものは常にビルドされ、distccmon-textと呼ばれています。初めてそれを実行する時は少し混乱するかもしれませんが、それを使用することは実際にはとても容易です。 もし引数なしで実行すれば一度だけ起動します。しかし、数字を渡してやればあなたが与えた数字秒ごとに更新します。

他のモニターはUSEフラグでgtkgnomeを有効にしているときにのみ現れます。 これはGTK+ベースで、X環境で実行されとてもすばらしいです。 GentooではGUIモニタは混乱を避けるためにdistccmon-guiと呼ばれています。 distccmon-gnomeと言われているかもしれません。

コード表示 6.1: モニターを起動させる

# distccmon-text N
(もしくは)
# distccmon-gui
Portageのdistccの処理を監視するにはこうします:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(もしくは)
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui

重要: もしdistccのディレクトリが別の所にあるのなら、DISTCC_DIR変数を正しく修正してください。



印刷

ページの更新日 2009年 6月 14日

この翻訳はすでにメンテナンスされていません。

要約: このドキュメントではGentooでのdistccの使い方を説明します。

Lisa Seelye
Author

Mike Frysinger
Editor

Erwin
Editor

Sven Vermeulen
Editor

Lars Weiler
Editor

Tiemo Kieft
Reviewer

Joshua Saddler
Editor

小林弘樹
翻訳

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.