-->

2011-05-20

distccの設定

(1) distccクライアントで binutils, gcc, linux-headers, glibc を入っているバージョンに、手動でマスクします。
$ tail -n4 /etc/portage/package.mask
>sys-devel/binutils-2.20.1-r1
>sys-devel/gcc-4.3.4
>sys-kernel/linux-headers-2.6.27-r2
>sys-libs/glibc-2.11.3
$ grep CHOST /etc/make.conf
CHOST="powerpc-unknown-linux-gnu"

(2) distccサーバーで同じバージョンをインストールします。
$ sudo USE="-gtk -multilib -openmp -mudflap -nptl" crossdev -t powerpc-unknown-linux-gnu --binutils 2.20.1-r1 --gcc 4.3.4 --kernel 2.6.27-r2 --libc 2.11.3

(3) 確認します。
distccサーバーの/etc/conf.d/distccdにログファイルを設定します。
DISTCCD_OPTS="${DISTCCD_OPTS} --log-level debug --log-file /var/tmp/distcc.log" など
distccを再起動してログを閲覧します。distccクライアントでemergeを実行します。成功の場合ログが表示されます。
$ tail -f /var/tmp/distcc.log|grep -iP "time:.*ms"
distccd[29406] (dcc_job_summary) client: 192.168.0.150:50257 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:9627ms powerpc-unknown-linux-gnu-gcc builtin/merge.c
...

crossdevの-tはdistccクライアントのCHOSTです。
distccクライアントのCFLAGSには-march=nativeを使えません。
上記は違うCPU用の設定です。



以下はメモです。

### distccホスト。
distccクライアントに合わせて作成します。
$ sudo USE="-gtk -multilib -openmp -mudflap -nptl" crossdev -t powerpc-unknown-linux-gnu --binutils 2.18-r3 --gcc 4.3.4 --kernel 2.6.27-r2 --libc 2.10.1-r1
確認します。
$ emerge -pv cross-powerpc-unknown-linux-gnu/binutils cross-powerpc-unknown-linux-gnu/gcc cross-powerpc-unknown-linux-gnu/linux-headers cross-powerpc-unknown-linux-gnu/glibc
$ tail -n4 /etc/portage/package.mask

### distccクライアント。
確認します。
$ emerge -pv binutils gcc linux-headers glibc

失敗しないようにマスクします。
$ cat /etc/portage/package.mask|tail -n5
>=sys-fs/udev-146
>sys-devel/binutils-2.18-r3
>sys-devel/gcc-4.3.4
>sys-kernel/linux-headers-2.6.27-r2
>sys-libs/glibc-2.10.1-r1

pump用の設定をします。
$ cat /etc/distcc/hosts
192.168.0.100,cpp,lzo 192.168.0.100,cpp,lzo 192.168.0.100,cpp,lzo 192.168.0.100,cpp,lzo 192.168.0.100,cpp,lzo

様子を表示します。
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep 192.168.0.100

パッケージをアップデートします。
$ sudo pump emerge --update --deep --newuse --verbose --tree --with-bdeps=y --jobs=10 --load-average=20 --keep-going world 1>/var/tmp/scriptlog/emerge_`date +%Y-%m-%d_%H-%M-%S`.log 2>&1 &

この場合ロードアベレージが20以下の場合、同時に10個までインストールの動作をします。
コンパイルに失敗しても、できるだけ進みます。

pump emergeの出力を見ます。
$ tail -f /var/tmp/scriptlog/emerge_2011-05-17_00-23-39.log

成功している場合distccmon-textでファイル名が表示されます。
$ sudo DISTCC_DIR=/var/tmp/portage/.distcc distccmon-text 1|grep 192.168.0.100
 20970  Preprocess  huffman.c                                 192.168.0.100[2]
 20970  Preprocess  huffman.c                                 192.168.0.100[2]
 20970  Preprocess  huffman.c                                 192.168.0.100[2]
 21492  Preprocess  crctable.c                                192.168.0.100[1]
 21492  Preprocess  crctable.c                                192.168.0.100[1]
 21492  Preprocess  crctable.c                                192.168.0.100[1]
...

distccホストで確認します。
$ sudo tcpdump port 3632
tcpdump: WARNING: eth0: no IPv4 address assigned
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 68 bytes
01:07:34.635882 IP 192.168.0.150.34107 > amdgentoo.distcc: S 1412879801:1412879801(0) win 5840 <mss 1460,[|tcp]>
01:07:34.635929 IP amdgentoo.distcc > 192.168.0.150.34107: S 2709116734:2709116734(0) ack 1412879802 win 5792 <mss 1460,[|tcp]>
01:07:34.636101 IP 192.168.0.150.34107 > amdgentoo.distcc: . ack 1 win 6 <nop,nop,timestamp[|tcp]>
01:07:34.861439 IP 192.168.0.150.34107 > amdgentoo.distcc: P 1:263(262) ack 1 win 6 <nop,nop,timestamp[|tcp]>
...

distccホストでログを取ります。修正後、再起動します。
$ rcsdiff distccd,v /etc/conf.d/distccd
===================================================================
RCS file: distccd,v
retrieving revision 1.4
diff -r1.4 /etc/conf.d/distccd
24,25c24,25
< DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
< #DISTCCD_OPTS="${DISTCCD_OPTS} --log-level debug --log-file /tmp/distcc.log"
---
> #DISTCCD_OPTS="${DISTCCD_OPTS} --log-level critical"
> DISTCCD_OPTS="${DISTCCD_OPTS} --log-level debug --log-file /var/tmp/distcc.log"

ログを表示します。
$ tail -f /var/tmp/distcc.log|grep -iP "time:.*ms"
distccd[29406] (dcc_job_summary) client: 192.168.0.150:50257 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:9627ms powerpc-unknown-linux-gnu-gcc builtin/merge.c
distccd[25088] (dcc_job_summary) client: 192.168.0.150:50259 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:6624ms powerpc-unknown-linux-gnu-gcc builtin/merge-file.c
distccd[19439] (dcc_job_summary) client: 192.168.0.150:50260 COMPILE_OK exit:0 sig:0 core:0 ret:0 time:6900ms powerpc-unknown-linux-gnu-gcc builtin/merge-index.c
...

### distccの再設定
gcc, linux-headers をそのままにした。他を更新。
distccクライアントでdistccを無効にしなくてもbinutils,glibcの更新はエラーにならなかった。

### distccクライアント
package.maskは手動で追加した。
$ tail -n4 /etc/portage/package.mask
>sys-devel/binutils-2.20.1-r1
>sys-devel/gcc-4.3.4
>sys-kernel/linux-headers-2.6.27-r2
>sys-libs/glibc-2.11.3

入ったバージョンの確認。
$ eix -c "^(binutils|gcc|linux-headers|glibc)$"
[I] sys-devel/binutils (2.20.1-r1@2011年05月19日): Tools necessary to build programs
[I] sys-devel/gcc (4.3.4(4.3)@2011年05月18日): The GNU Compiler Collection
[I] sys-kernel/linux-headers (2.6.27-r2@2010年01月14日): Linux system headers
[I] sys-libs/glibc (2.11.3(2.2)@2011年05月20日): GNU libc6 (also called glibc2) C library
Found 4 matches.

### distccサーバー
CHOSTとそれぞれのバージョンを合わせてcrossdevを実行する。
$ sudo USE="-gtk -multilib -openmp -mudflap -nptl" crossdev -t powerpc-unknown-linux-gnu --binutils 2.20.1-r1 --gcc 4.3.4 --kernel 2.6.27-r2 --libc 2.11.3

入ったバージョンの確認。
$ eix -C cross-powerpc-unknown-linux-gnu -cI
[I] cross-powerpc-unknown-linux-gnu/binutils [1] (2.20.1-r1(powerpc-unknown-linux-gnu)@2011年05月20日): Tools necessary to build programs
[I] cross-powerpc-unknown-linux-gnu/gcc [1] (4.3.4(powerpc-unknown-linux-gnu-4.3)@2011年05月16日): The GNU Compiler Collection
[I] cross-powerpc-unknown-linux-gnu/glibc [1] (2.11.3(powerpc-unknown-linux-gnu-2.2)@2011年05月20日): GNU libc6 (also called glibc2) C library
[I] cross-powerpc-unknown-linux-gnu/linux-headers [1] (2.6.27-r2(powerpc-unknown-linux-gnu)@2011年05月16日): Linux system headers
...

自動で追加される。
$ grep cross-powerpc-unknown-linux-gnu /etc/portage/package.mask
>cross-powerpc-unknown-linux-gnu/binutils-2.20.1-r1
>cross-powerpc-unknown-linux-gnu/gcc-4.3.4
>cross-powerpc-unknown-linux-gnu/linux-headers-2.6.27-r2
>cross-powerpc-unknown-linux-gnu/glibc-2.11.3

0 件のコメント: