首先的要求是 gcc 的版本要一致,Gentoo 的穩定版是 gcc 7.3.0,而筆電還是 gcc 4.9.4。在 emerge --sync 同步 portage 後,大約 13:30 開始更新 gcc,約 15:30 完成,花了 2 個鐘頭的時間。
安裝和服務設定
安裝,很簡單# emerge -av sys-devel/distcc
服務設定,修改 /etc/systemd/system/distccd.service.d/00gentoo.conf
Environment="ALLOWED_SERVERS=10.161.80.1/20"
雖然叫 ALLOWED_SERVERS,但也指 client 端,照做就對了。然後啟動服務
# systemctl daemon-reload
# systemctl start distccd
只是暫時使用,所以沒有 enable 此服務。
測試
# cat main.c--------------------------------------------
#include <stdio.h>
int main() {
printf("Hello distcc!\n");
return 0;
}
--------------------------------------------
# /usr/bin/distcc-config --set-hosts 10.161.81.162# export DISTCC_VERBOSE=1
# distcc gcc -c main.c -o main.o
# gcc main.o -o main
# ./main
Hello distcc!
筆電的安裝
年久失修,只好按照 "To bootstrap" 的說明來做。USE='-*' PYTHON_TARGETS="python2_7" emerge --nodeps sys-devel/distcc
export PATH="/usr/lib/distcc/bin:${PATH}"
/usr/bin/distcc-config --set-hosts 10.161.81.162
使用 pump mode,速度會加快很多,
/usr/bin/distcc-config --set-hosts "10.161.81.162/20,cpp,lzo"
鈄線後面的數字 (即 '/20'),是可以接受的最大 job 數,預設是 4。跑 distccd 的 server 是雙 CPU,各 8 core,共 32 thread,平時沒在用,就設到 20 job,給它盡情的操吧。
修改 /etc/portage/make.conf,其中 j 的選項為 total (local + remote) CPU cores,l 的選項為 local CPU cores。
FEATURES="distcc distcc-pump"
MAKEOPTS="-j20 -l2"
# gcc-config --list-profiles
[1] x86_64-pc-linux-gnu-4.9.4 *
[2] x86_64-pc-linux-gnu-5.4.0
[3] x86_64-pc-linux-gnu-7.3.0
# gcc-config 3
# source /etc/profile
# emerge --ask --oneshot --usepkg=n sys-devel/libtool sys-apps/sandbox
接下來,就只好慢慢的,一個一個 package 依次升級了。
emerge 失敗的問題
有時,會發生像下面錯誤訊息而安裝失敗,例如 kde-frameworks/kpty,將 distcc 取消就成功了。fatal error: sys/filio.h: No such file or directory
#include <sys/filio.h>
所以,碰到 emerge 失敗時,就試著將 distcc 取消,也許問題就解決了。
最後,實在太慢了,而且,太多的失敗與錯誤,乾脆拔硬碟,用 PC 來更新。原來折騰了一個週末,都搞不定,裝到 PC 上更新,一天就跑完了。
也許,原來的版本太舊了,隔了一年多才更新,有很多 package 都是被 mask 掉的。使用 distcc 時,發生很多衝突的狀況,都直接用 --nodeps 的選項來裝,造成程式潛伏的問題。
沒有留言:
張貼留言