C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

distccで分散こんぱいりんぐするにゃ・w・

たびたび興味を持っても実際に環境構築して試していなかったdistccが遂に兎の国でも使用可能になりました(・∀・)

f:id:USAGI-WRP:20120527114955p:plain

兎の国のPCは9割方archlinuxなので、

とか読めばさっくり環境構築完了・w・b

・・・じゃ、備忘録として微妙なので要点を掻い摘んで書いとく。

必要なもの

  • 同じツールチェインを揃えたarchlinuxたち
  • まともな速度のネットワーク

distcc の準備

導入
# pacman -S distcc --noconfirm
DAEMON 設定

`/etc/conf.d/distccd`にデーモン起動時のコマンドラインオプションをごにょごにょできるので、

DISTCC_ARGS="--user nobody --allow 127.0.0.1 --allow 192.168.100.0/24 --allow 10.20.40.80 --log-level info log-file /var/log/distccd.log"

とかいじっておく。最も重要なポイントは --allow でdistccクライアントからの接続を受け付けるIPまたはネットワークを許可しておくこと。ログの設定はお好みで。(必要に応じて作成するログファイルのアクセス権を許可しておくことも忘れずに)

makepkg.conf 設定
  • BUILDENV の !distcc の ! を外して有効化。
  • MAKEFLAGS="-j32" とかdistccに参加する分散コンパイラー全体の並行数を設定。
  • DISTCC_HOSTSにdistccに参加するマシンを列挙。

DISTCC_HOSTSへの列挙は"10.20.40.80 192.168.100.20 MY-PC1 MY-PC2:12345 distcc.example.com @MY-PC"とか設定する。先頭に書いたものほど分散で投げる優先順位が高くなる。マシンの指定はIPアドレス直接、DNS解決可能な名前を基本として、MY-PC2:12345の様にdistccの接続待受ポートを指示したり、ssh接続を用いたい場合には@MY-PCの様に指示したりする。(sshのポート指定までは出来ない様だ)

*** (makepkg以外に直接distccコマンドを叩いて使うなら)

`/etc/distcc/`以下の設定ファイルも同様に編集しておく。またはユーザーホームのドットファイルないし環境変数への設定を行う事も可能。

DAEMON 起動
rc.d start distccd

必要に応じて`/etc/rc.conf`のDAEMONSにも追加しておく。

試す

とりあえず大きめのビルドが必要なパッケージを、

yaourt boost-svn --noconfirm

とか普通にインストールしようとすれば早速distccが使われる。

状況確認

distccmon-text/distccmon-gnomeで状況を確認できるはずなんだけど、makepkgからのdistccはモニターできない様だった。仕方がないので各distccクライアントへ端末エミュレーターからsshして`tail -f /var/log/distccd.log`とかして状況を確認した。

自分でソースを用意してdistccコマンドを直接叩いた際にはdistccmonにも表示が出るのだけど、それにしたってmakeを使うとdistccmonに出なくなったりとかまあ、モニタリングは少々微妙な状況。でもまあ分散ビルドはログなど見れば環境構築できている様だ。

うーむ、distccmonでなんで見れないのやら・w・;