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