$ 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 件のコメント:
コメントを投稿