FEATURES='distcc'っていうのがとても捗る
RaspberryPIにGentooを入れて遊び始めたが,emergeが遅すぎてつらい.まあcross compile前提だよねーと思って環境を作ってみたものの,/以下まるっとrsyncとかなんか怖いしqpkgとか使い方しらんし覚えたくねーなって思っていたところ,Portageがdistccをサポートしているという事を知ったので使ってみている.
ref: http://wiki.gentoo.org/wiki/Raspberry_Pi_Cross_building#distcc
マシンパワーのあるGentooマシンをWorkerと呼ぶことにする.
- RaspberryPIとWorkerにdistccをemergeする.
- RaspberryPIの
/etc/distcc/hosts
にWorkerのIPアドレスををコンパイラワーカとして追加.左にあるほど優先的に使われるらしい.
# /etc/distcc/hosts 192.168.1.xxx 127.0.0.1
- RaspberryPIの
/etc/portage/make.conf
にFEATURES追記.emergeがdistccに対応してくれる.
# /etc/portage/make.conf FEATURES='distcc'
- Workerの
/etc/conf.d/distccd
に--allow
オプションを追加.RaspberryPIからのリクエストのみ受け付ける.
DISTCC_OPTS="... --allow 192.168.1.yyy"
- Workerの
/usr/lib/distcc/bin/
以下をcross-compile対応する.symlinkじゃなくてwrapperを用意しているのは,distccがargv[0]に応じて動作を変えるから.
cd /usr/lib/distcc/bin sudo rm gcc g++ cc c++ cat <<'EOS' | sudo tee armv6j-hardfloat-linux-gnueabi-wrapper #!/bin/bash exec /usr/lib/distcc/bin/armv6j-hardfloat-linux-gnueabi-g${0:$[-2]} "$@" EOS sudo chmod +x armv6j-hardfloat-linux-gnueabi-wrapper sudo ln -s armv6j-hardfloat-linux-gnueabi-wrapper gcc sudo ln -s armv6j-hardfloat-linux-gnueabi-wrapper g++ sudo ln -s gcc cc sudo ln -s g++ c++ sudo ln -s /usr/bin/distcc armv6j-hardfloat-linux-gnueabi-gcc sudo ln -s /usr/bin/distcc armv6j-hardfloat-linux-gnueabi-g++ sudo ln -s /usr/bin/distcc armv6j-hardfloat-linux-gnueabi-c++
TODO: なんかmakeが並列化されてる様子がなくて全然Workerのパワー使いきってないのでどうやるのか調べる