takanaoの作業ログ

takanaoの作業のログなどをつづってみます

netbsd on Raspberry Pi2 日記(6)

distccでパッケージを作る

ここまでで、NetBSD的にはだいたい動く状態なので、ここからは普通に使っていく。

netbsdのパッケージシステムは、pkgsrcなのだが、BSD系のパッケージシステムは、伝統的にはソースからビルドする系のシステムになっていて、pkgsrcもその例に漏れない。

Raspberry Pi2 が ARM core x 4 @900MHzとはいっても、パッケージをガンガンコンパイルするにはちょっと非力なため、パッケージコンパイルのために分散コンパイル環境を作っていく。

ここまでで、母艦側でクロスコンパイラを使ってカーネルなどのコンパイルをしているので、クロスコンパイラはすでにあるから、これを使って、分散コンパイル環境を設定していく。

母艦側の設定

母艦側はFreeBSDだったので、pkgでdistccを入れる。

# pkg install distcc

母艦側の /opt/NetBSD-7.0/usr/toolsarm/bin/ の下にクロスコンパイラ群がある。このうち、c++, cc, g++, gccがdistcc側から呼ばれる様なので、/opt/NetBSD-7.0/distcc/にsymbolicリンクを貼ってみる

# mkdir /opt/NetBSD-7.0/distcc
# cd /opt/NetBSD-7.0/distcc
# ln -s ../usr/toolsarm/bin/armv7--netbsdelf-eabihf-c++ c++
# ln -s ../usr/toolsarm/bin/armv7--netbsdelf-eabihf-gcc cc
# ln -s ../usr/toolsarm/bin/armv7--netbsdelf-eabihf-g++ g++
# ln -s ../usr/toolsarm/bin/armv7--netbsdelf-eabihf-gcc gcc

これで、 /opt/NetBSD-7.0/distcc にコンパイラ類が置かれたことになるので、母艦側のdistccdの distccd_pathに設定する。

rc.confに以下を設定

distccd_enable="YES"
distccd_flags="--listen 母艦のIPアドレス --user distcc --daemon -P /var/run/distccd.pid -a 受け付けるネットワークアドレス(192.168.0.0/24など)"
distccd_path="/opt/NetBSD-7.0/distcc"

で、distccdを起動しておく

# service distccd restart

raspberry pi2 側

まず、distccをいれるために、pkgsrcを展開して最新化する

$ ftp ftp://ftp.NetBSD.org/pub/pkgsrc/current/pkgsrc.tar.gz
$ su -
# tar -xzpf pkgsrc.tar.gz -C /usr
# cd /usr/pkgsrc
# cvs update -Pd

詳しくは、以下の公式あたり http://www.jp.netbsd.org/ja/docs/pkgsrc/getting.html#getting-first

次に、distccをインストール。

# cd /usr/pkgsrc/devel/distcc
# make install
# make clean clean-depends

mk.confを書き換え

PKGSRC_COMPILER=distcc gcc
DISTCC_HOSTS=母艦のIPアドレス

ここまでできると、次のコンパイルから、ある程度大きなソースはdistccの母艦側で処理されるようになる。

母艦側のsyslogに、以下の様に出ているはず(unicornは母艦のホスト名)

Oct 19 23:23:27 unicorn distccd[819]: (dcc_job_summary) client: 192.168.10.11:65516 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:327ms gcc gm_qnx4.c
Oct 19 23:23:27 unicorn distccd[957]: (dcc_job_summary) client: 192.168.10.11:65515 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:383ms gcc gm_beos.c
Oct 19 23:23:28 unicorn distccd[957]: (dcc_job_summary) client: 192.168.10.11:65514 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:353ms gcc gm_xfs.c