前提条件

基本的にはGentoo distcc ドキュメントDistCC クロスコンパイルガイド、この2つのドキュメントの通り行う。気をつけなきゃいけないのは、「資源を借りる側」と「資源を貸す側」で若干設定が異なる点。ここでは借りる側はi686(192.168.0.4)、貸す側はamd64(192.168.0.3)とする。

貸す側と借りる側で、gccのバージョンは同じであること。3.3.x同時はOKだが、3.3.xと3.2.xは混ぜないこと。

また、資源を借りる側は一方的に借りるだけで、相互に助け合わない設定とした。これは、貸す側はサーバなので24時間稼働しているが、借りる側はノートなのでそうした。

資源を貸す側の設定

# emerge distcc crossdev
# vi /etc/make.conf
MAKEOPTS="-j8" #(CPUの数+1)*2 ここは全体じゃなくてサーバ単体で計算すべきなのかも。詳細不明…もしかしたら-j6が当たりなのかも?
FEATURES="distcc"
DISTCC_DIR="/var/tmp/.distcc"
PORTDIR_OVERLAY="/usr/local/portage"
# distcc-config --set-hosts "localhost 192.168.0.4"
# vi /etc/conf.d/distccd
DISTCCD_OPTS="${DISTCCD_OPTS} --allow localhost --allow 192.168.0.4" #--allow 192.168.0.0/24でも可
# /etc/init.d/distcc start
# rc-update add distcc default
# crossdev -t i686

資源を借りる側の設定

# emerge distcc
# vi /etc/make.conf
MAKEOPTS="-j8" #(CPUの数+1)*2
FEATURES="distcc"
DISTCC_DIR="/var/tmp/.distcc"
# vi /etc/conf.d/distccd
DISTCCD_OPTS="${DISTCCD_OPTS} --allow localhost" #相互に助け合いたい場合は--allow 192.168.0.3を足すか--allow 192.168.0.0/24にする
# cd /usr/lib/distcc/bin
# rm c++ g++ gcc cc
# echo '#!/bin/bash' > i686-pc-linux-gnu-wrapper
# echo 'exec /usr/lib/distcc/bin/sparc-unknown-linux-gnu-${0##*/} "$@"' >> i686-pc-linux-gnu-wrapper
# chmod a+x i686-pc-linux-gnu-wrapper
# ln -s i686-pc-linux-gnu-wrapper cc
# ln -s i686-pc-linux-gnu-wrapper gcc
# ln -s i686-pc-linux-gnu-wrapper g++
# ln -s i686-pc-linux-gnu-wrapper c++
# /etc/init.d/distcc start
# rc-update add distcc default
# export CC="i686-pc-linux-gnu-gcc"

実際に試す

借りる側から何か(それなりに時間のかかりそうなものを)emergeし、貸す側でtopコマンドで見てみる。distccというUSERでdistccやcc1というプロセスが見えれば成功している。当たり前だがコンパイルは速くなるが、configureやアーカイブのunpackは速くならないのであしからず。また、貸す側ではデフォルトでnice -15で実行されている。これは /etc/conf.d/distccdのDISTCCD_NICEで設定されているので、貸す側が暇なマシンなら変更してもいい。

, ,

Leave a Reply