2013/01/31

distcc 加快網樂通編譯程式速度

[2013/04/22 更新]
網樂通 CPU 相當慢, 因此若將程式放在網樂通上編譯會很耗時,所以若可能盡量使用 cross-compile 在 PC 上編譯。這幾天快要打通 Porting Arch Linux  任督二脈(pacman & yaourt)
如果將編譯過程放到 cross compiler 編譯, 那麼需要花功夫調整 Arch Linux 的 PKGBUILD, 甚至若該套件不是採用 autoconf 配置,則還要手動改寫 Makefile. 這也就是為什麼還是換到網樂通這個慢速 CPU 上編譯的主因。

因為要編譯 pacman yaourt 必須準備好約10多個套件, 這部份工程還不小, 因此我透過  shpkg 先從 STLinux 及 fedora 引入基本編譯套件. 並割捨部份套件功能以求節省所需套件數量, 例如先編出 pacman 就不具備 gpg 功能。

當編好 pacman 及 yaourt 之後, 在重新以標準 Arch Linux 的方式 makepkg 編譯之前的套件準備重編 pacman 及 yaourt 相依套件。

目前編譯單個 Arch Linux 套件方法如下(以 acl 為例)

$ youart -G acl # 取得 PKGBUILD script
$ cd acl
$ makepkg -As --skippgpcheck -d --nocheck # 編譯

$ sudo pacman -Udd ~/repo/acl-2.2.51-3-sh4.pkg.tar.xz # 安裝
$ rm -rf /var/lib/shpkg/local/acl-[0-9]*  # 刪除之前暫時使用 shpkg 安裝的套件

2013/04/22 增加說明, 由於網樂通採用  CPU 架構不同, 若直接使用 sh4 /etc/pacman.conf 將會造成 pacman 錯亂, 所以 sh4twbox 採用下列方式區分:

  • /etc/pacman.conf: 設定 sh4twbox repository 專屬於 sh4 CPU
  • /etc/pacman.src.conf: 設定 core,extra,community i686 和 Arch Linux 官網一致
因此使用時若要自己編譯使用下列方式:
  1. yaourt --conf /etc/pacman.src.conf -Sy  # 更新到官方 release 的最新套件列表
  2. yaourt  --conf /etc/pacman.src.conf -G <套件名稱> # 取得想使用的套件
那麼要透過 distcc 這個分散式編譯工具將程式碼分到各主機(各主機上必須有相同的 gcc 版本), 因為還沒有編新版的 distcc, 先借用 fedora 的, 方法如下:

裝好 sh4twbox 之後先裝基本編譯工具
shpkg -S hello
cd /hello-*
./inst_st23_dev.sh box
shpkg -S stlinux23-sh4-glibc

再裝 distcc
shpkg -S distcc distcc-server avahi stlinux23-sh4-dbus popt (要移除 stlinux23-sh4-popt)
rm /usr/bin/distccmon-gnome # 不需圖形界面
shpkg -E
echo 'OPTIONS="--nice 5 --jobs 2 --allow 10.0.0.0/24"' >> /etc/sysconfig/distccd
echo 'USER="nobody"' >> /etc/sysconfig/distccd
# vi /etc/init.d/distccd # 若沒有 fedora 啟動 script 環境, 可以手動修正 script
 /etc/init.d/distccd start

接著在主要編譯的主機設定 /etc/makepkg.conf
BUILDENV=(... distcc ...)
DISTCC_HOSTS="a/2 b/2 c/2" # 此處 a,b,c 分為三台主機
MAKEFLAGS="-j7" # 7=2+2+2

可以在主要編譯的主機啟動監控功能, 看 distcc 自動把工作分配到哪些主機
watch distccmon-text

1 則留言:

匿名 提到...

這個好玩,你有試過幾個機上盒一起編譯呢? 多個與一個編譯的時間差多少?