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'を追加してください。
Code Listing 2.1: distccのインストール |
# emerge distcc
|
distccを使うようにPortageを設定する
Portageがdistccを使うように設定することは簡単です。
分散コンパイルに参加するシステムごとに次のステップを実行します。
Code Listing 2.2: distccとPortageの統合 |
# emerge distcc
# nano -w /etc/make.conf
MAKEOPTS="-jN"
FEATURES="distcc"
|
参加するホストを指定
distcc-configコマンドを使ってホストのリストを設定してください。
これは、あなたのリストにあるかもしれないホストの例です。
Code Listing 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
|
それはすべて複雑に見えるかもしれませんが、ほとんどの場合、1行目または2行目を元に修正すれば動作するでしょう。
ほとんどの人は3、4行目を使わないので、詳しい情報が載っているdistccドキュメント(man distcc)の場所を提示しておきます。
例えば、上記例の最初の行を設定するには以下のようにします。
Code Listing 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を参照してください。
Important:
--allowと--listenを使うことが重要です。詳しくはdistccdのマニュアルか上記セキュリティドキュメントを参照してください。
|
では、全ての参加しているコンピュータでdistccデーモンを起動させましょう。
Code Listing 2.5: distccデーモンの起動 |
# rc-update add distccd default
# /etc/init.d/distccd start
|
Automakeと共に実行するようにdistccを設定
これはPortageの設定よりも簡単です。
あなたがすべきことは、PATH変数に/usr/lib/distcc/binをgccを含むディレクトリ(/usr/bin)の前に含むように更新します。
しかし、警告があります。もしあなたがccacheを使用しているなら、ccacheの後にdistccを置いてください。
Code Listing 2.6: パスを設定する |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
そして、通常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を設定します。
Code Listing 4.1: 予備設定 |
# nano -w /etc/make.conf
FEATURES="distcc"
MAKEOPTS="-jN"
|
Code Listing 4.2: パスの設定 |
# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
|
Step 2: distccのインストール
distccをインストールする前に、distccというユーザーを/etc/passwdに追加しなければなりません。
Code Listing 4.3: ユーザー distcc を追加 |
# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >> /etc/passwd
|
Important:
この様にユーザを追加することはとても悪いことに注意することが重要です。
このstageのインストール過程では、一般ユーザを追加するのに使うuseraddユーティリティが存在しないため、ここでだけこの様にします。
|
distccをインストールします。
Code Listing 4.4: distccをコンピュータにインストール |
# USE='-*' emerge --nodeps sys-devel/distcc
|
Step 3: distccの設定
distcc-config --installを起動してdistccを設定します。
Code Listing 4.5: distccの最終設定 |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
これでdistccがブートストラップ用に設定されました!
公式のインストールの説明に沿って続けてください。
ただし、emerge systemの後にもう一度distccをemergeすることを忘れないでください。
これはあなたの望む依存関係を正しくインストールするためです。
Note:
ブートストラップと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に追加することです。
Important:
これを行うとPortageの振る舞いのいくつかを再定義し、将来おかしな事が起こるかもしれません。
CHOSTを混合させるときのみ行ってください。
|
6.
distccその他
distccモニター
distccは2つのモニターを提供します。テキストベースのものは常にビルドされ、distccmon-textと呼ばれています。初めてそれを実行する時は少し混乱するかもしれませんが、それを使用することは実際にはとても容易です。
もし引数なしで実行すれば一度だけ起動します。しかし、数字を渡してやればあなたが与えた数字秒ごとに更新します。
他のモニターはUSEフラグでgtkかgnomeを有効にしているときにのみ現れます。
これはGTK+ベースで、X環境で実行されとてもすばらしいです。
GentooではGUIモニタは混乱を避けるためにdistccmon-guiと呼ばれています。
distccmon-gnomeと言われているかもしれません。
Code Listing 6.1: モニターを起動させる |
# distccmon-text N
# distccmon-gui
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui
|
Important:
もしdistccのディレクトリが別の所にあるのなら、DISTCC_DIR変数を正しく修正してください。
|
The contents of this document are licensed under the Creative Commons -
Attribution / Share Alike license.
|