Gentoo Logo

Gentoo distcc ドキュメント

Content:

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
(Nにはここの設定に適した数値を入力してください)
(一般的にはCPUの合計数+1の二倍をNに設定します)
MAKEOPTS="-jN"
(FEATURESにdistccを追加します)
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
(ホストの設定にはいくつもの他の方法があります。詳しくはdistccのmanpageをご覧ください。)
ローカルマシンでコンパイルしたいのなら、ホストリストに'localhost'を追加します。
逆に、ローカルマシンでコンパイルを行いたくないのであれば(こちらが良くある場合です)、ホストリストから省きます。
遅いマシンでlocalhostを使用するととても遅くなります。
パフォーマンスのため、設定をテストするようにしてください。

それはすべて複雑に見えるかもしれませんが、ほとんどの場合、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デーモンの起動

(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を置いてください。

Code Listing 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を設定します。

Code Listing 4.1: 予備設定

# nano -w /etc/make.conf
(FEATURESにdistccを追加する)
FEATURES="distcc"
(-jN(NはCPUの合計数+1の二倍)を含むようにMAKEOPTSを修正する)
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の最終設定

(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することを忘れないでください。 これはあなたの望む依存関係を正しくインストールするためです。

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

Code Listing 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

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



Print

Updated April 4, 2006

This translation is not maintained anymore

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

Lisa Seelye
Author

Mike Frysinger
Editor

Erwin
Editor

Sven Vermeulen
Editor

Lars Weiler
Editor

Tiemo Kieft
Reviewer

小林弘樹
翻訳

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

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