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のパワー使いきってないのでどうやるのか調べる