distcc とは

distcc は ports やカーネルの再構築をする際に、ネットワーク上のサーバにコンパイルを手伝わせる事ができます。
例えば処理能力が遅いノート PC の代わりにサーバ側でコンパイルする事によって、処理時間を短縮できたりと、便利なソフトウェアです。
注意事項として、 distcc を使っている場合に一部 ports のコンパイルが失敗する事や、ホスト <=> クライアントの関係なので、それぞれ設定内容が違うということです。

インストール

ホスト、クライアントどちらもまずは distcc のインストールからです。

% sudo portinstall devel/distcc

WARNING: distcc[d] performs NO AUTHENTICATION at all and should
ONLY be used in trusted networks!

NEW in 2.18
Distccd now requires the --allow (-a) argument when running
in daemon mode. This option restricts distcc to a specific
network, by default this port uses 127.0.0.0/8, you should
change this by specifying your own distccd_flags in
/etc/rc.conf, see the script in etc/rc.d/distccd.sh for a
template.

Additionally it is recommended that you add entries to
/etc/syslog.conf to record all distccd log messages to a file
such as /var/log/distccd.log.

Example syslog.conf entry:

!distccd
*.*                                     /var/log/distccd.log

The daemon runs on port 3632 by default. You can change that
value by calling distccd with the -p parameter, e.g.
`distccd -p 4711'. Do not edit the rc.d script to achieve this
instead override the value of distccd_flags in /etc/rc.conf.

Note that remote daemons currently won't work if they cannot
resolve the reverse DNS of the master machine

ホストサーバの設定

処理を手伝うホストサーバの設定を行います。

と言っても、ログとデーモンの設定だけなので、難解な設定等はありません。

ログの設定

まずはデーモン監視の為のログの設定を行います。

# touch /var/log/distccd.log
# chmod 640 /var/log/distccd.log
# printf "\041distccd\n\052\056\052\t\t\t\t\t\t\057var\057log\057distccd\056log\n" >> /etc/syslog.conf
# grep distccd /etc/syslog.conf

!distccd
*.*						/var/log/distccd.log

syslogd を再起動します。

# /etc/rc.d/syslogd restart

ログローテーションの設定

ログファイルが肥大するとシステムのレスポンスが遅くなってしまうので、ログローテーションを行います。

# printf "/var/log/distccd.log\t\t\t640  3\t   100\t\052     JC    /var/run/distccd.pid\n" >> /etc/newsyslog.conf
# grep distccd /etc/newsyslog.conf

/var/log/distccd.log			640  3	   100	*     JC    /var/run/distccd.pid

起動時に立ち上げる

起動時に distccd が立ち上がるようにします。

# vi /etc/rc.conf

distccd_enable=YES
distccd_flags="-a 192.168.1.0/24 --user distcc --daemon -P /var/run/distccd.pid"

distccd を立ち上げます。

# /usr/local/etc/rc.d/distccd start

環境変数 CC と CXX を distcc に置き換える

ここからはホスト、クライアント共通の設定になります。

CC と CXX ( コンパイラ ) を distcc に置き換える為に make.conf を書き換えます。

% sudo vi /etc/make.conf

CC=/usr/local/bin/distcc cc
CXX=/usr/local/bin/distcc c++

分散先の設定

環境変数 DISTCC_HOSTS を設定し、分散先を決定します。

% sudo vi /etc/csh.cshrc

setenv DISTCC_HOSTS "localhost server1 server2"

処理能力が遅い PC の場合は localhost を除いて記述 してください。

動作確認

buildkernel で正常にコンパイルできるかどうか確認します。

なお -jN分散先のコンピュータの CPU の数 ( localhost を指定している場合は localhost の CPU 数を足して ) を指定してください。

# cd /usr/src
# ( date && make -jN buildkernel ; date ) |& tee ~/MakeBuildKernel.log
# head -n 1 ~/MakeBuildKernel.log && tail -n 1 ~/MakeBuildKernel.log
# grep Warning ~/MakeBuildKernel.log