Gentoo Logo

Gentoo Distcc 文件

內容:

1.  介紹

什麼是 distcc?

Distcc 是個設計讓您可以在不同的電腦上編譯程序的程式。它包含了伺服器端 distccd 以及客服端 distcc 程式。經由一些小小的設定, Distcc 將可以配合著 ccache 以及 Portage 還有 Automake 一起運作。

使用 distcc 來 bootstrap

如果您計畫用 distcc 幫助您的 Gentoo bootstrap,請記得閱讀 使用 distcc 來 bootstrap 這一節,它位於本文件的下方。

2.  設定

相依性

在開始之前,所有在您網路裡使用 Distcc 的電腦必需有相同的 GCC 版本。若是混著 3.3.x (x 為版本號) 不會有問題,但是若是混著 3.3.x 以及 3.2.x 可能會導致 你的程式有錯誤。

安裝 Distcc

在您開始安裝 distcc 之前,這裡有許多選項您該知道的。

Distcc 內建了圖型介面的監視器讓您監視從您的電腦傳送出去編譯的程序。如果您使 用 Gnome 的話,在您的 USE 參數裡加入 "gnome"。如果您不使用 Gnome 但您還是想 要有一個監視器功能,則請在您的 USE 參數裡加入 "gtk"。

原始碼 2.1: 安裝 distcc

# emerge distcc

設定讓 Portage 使用 Distcc

這個設定也非常簡單,您只要跟著下列步驟既可:

原始碼 2.2: 整合 Distc 和 Portage

# emerge distcc
# nano -w /etc/make.conf
(將 N 改為適合您的數值)
(您可以使用 2 * CPU 總數 + 1 這個公式)
MAKEOPTS="-jN"
(將 distcc 加入您的 FEATURES 參數裡)
FEATURES="distcc"

指定使用的主機

使用 distcc-config 來設定主機列表。下面的例子將告訴您如何設定主機列表:

原始碼 2.3: 主機列表定義範例

192.168.0.1          192.168.0.2                       192.168.0.3
192.168.0.1/2        192.168.0.2                       192.168.0.3/10
192.168.0.1:4000/2   192.168.0.2/1                     192.168.0.3:3632/4
@192.168.0.1         @192.168.0.2:/usr/bin/distccd     192.168.0.3
這裡還有許多其他的方法設定主機。請查閱 distcc 的 manpage 來觀看
更詳細的資訊。
如果你想要用自己的機器編譯,要在主機列表中加入 'localhost'。相反的如果
你不想用自己的機器編譯(這很常見),在主機列表中略掉。緩慢的機器如果加上
localhost 常常讓事情更慢。確定你的設定效能都很正常。

這看起來可能有點複雜,不過大部分的人只需要用第一或第二行的設定既可。

因為一般的人不會使用到第三和第四行的設定方式,我將 指引您至 distcc 的文件,請自行查看更多的資訊。

舉例來說,我們要設定上面範例中的第一行:

原始碼 2.4: 設定主機範例

# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"

依照您的需要修改 /etc/conf.d/distccd,並確認 --allow 選項只 允許您信任的主機。為了增強安全性,你應該使用 --listen 選項告訴 distcc 監 聽哪個 IP。更多的資訊請參閱 Distcc Security Design

重要: 使用 --allow 及 --listen 相當重要。請閱讀 distccd 手冊頁及上面的安全文件取得更多 資訊。

再來便是在所有有安裝 distcc 的電腦中,啟動 distcc 服務:

原始碼 2.5: 啟動 distcc 服務

(將 distccd 加入預設的 runlevel)
# rc-update add distccd default
(啟動 distcc 服務)
# /etc/init.d/distccd start

設定讓 Automake 使用 Distcc

這個設定在某些情況下比 Portage 設定還要簡單些。您只要把您的 PATH 參數 加入 /usr/lib/distcc/bin,並確定把它放在包含 gcc 的目錄 /usr/lib/distcc/bin 之前既可。然而,這裡您要注意一個地方,如果 您使用 ccache 的話,您將需要把 distcc 放在 ccache 的後面。像這樣:

原始碼 2.6: 設定您的 path

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
你可以把這放在 .bashrc 或類似的檔案讓他在每次你登入時自動設定

然後,在您平常時輸入 make 的地方,請改為使用 make -jN (N 是一個整 數)。N 通常用來指的是您全部用來編譯程序的電腦。建議您自行測試並找出一個最適合您 的一個數值。

3.  跨平台編譯

跨平台編譯的註釋

跨平台編譯 (Cross-Compiling) 是使用一種架構來為另一種架構編譯軟體。簡單的來說, 您可以將它想為利用一台 Athlon (i686) 的電腦來為一台 K6-2 (i586) 的電腦編譯 程式,或是使用一台 Sparc 來幫 PPC 編譯程式。

跨平台編譯介紹

如果您想要試試跨平台編譯,您可以 emerge 套件 crossdev。我無法提供相關支援,因為這個套件不是我寫的,但是這是接觸跨平台編譯一個好的起始點。

4.  使用 Distcc 來 Bootstrap

第一步:設定 Portage

使用 Gentoo Linux LiveCD 為您的新電腦開機並依著 安裝說明 直到 步驟至 bootstrap 部分。接下來請照著下面的方法做修改 讓 Portage 使用 Distcc:

原始碼 4.1: 初步設定

# nano -w /etc/make.conf
(加入 distcc 至 FEATURES 參數)
FEATURES="distcc"
(編輯 MAKEOPTS 使用 -jN 參數, N CPU 數目*2+1)
MAKEOPTS="-jN"

原始碼 4.2: 設定您的路徑

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

第二步:安裝 Distcc

在您開始安裝 distcc 之前,一個叫作 distcc 的使用者必需先加至 /etc/passwd:

原始碼 4.3: 建立一個叫 distcc 的使用者

# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >> /etc/passwd

重要: 要注意的一點就是這是非常差的新增使用者方法。我們在這裡使用的原因是在這個安裝階 段時,沒有 useradd 工具(常常用來新增使用者的工具)。

安裝 distcc:

原始碼 4.4: 安裝 Distcc 至新的電腦

# USE='-*' emerge --nodeps sys-devel/distcc

第三步:設定 Distcc

執行 distcc-config --install 來設定 distcc:

原始碼 4.5: 最後的 distcc 設定

(取代 host1, host2, ... 成參與的主機的 IP 位置)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
一個範例:/usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.6"

distcc 現在應該可以 bootstrap 了!請繼續接著官方的安裝指南,並請別忘了emerge system 之後再重新 emerge distcc,這是為了確保所有您要的 依存性套件都有安裝。

注意: 請記住,在 bootstrap 和 emerge system 時,distcc 可能不會被使用,這是因 為某些 ebuilds 或是套件並無法好好的在 distcc 編輯,所以它們取消使用 distcc。

5.  解決問題

Mozilla 和 Xfree

在您 emerge 套件時,您會發現它們並不會平行編譯。這是因為 Mozilla 和 Xfree 的 .ebuilds 開發者關閉了平行編譯的功能,因為平行編譯將會造成錯誤。

有時候 distcc 在某個套件上會發生編譯錯誤的問題,如果您遇到這個問題,請 通知我們。

混著 hardened-gcc 和非 hardened-gcc 主機會造成錯誤

如果您計畫在有 PaX/hardened-gcc 和沒有 hardened-gcc 的主機群間進行平行編譯,您將會有許多 的問題。

這個問題的解決方法在於,您必需在有 PaX/hardened-gcc 的主機上執行 hardened-gcc -R,或著是在該主機的核心裡啟動 PaX 保護並 emerge hardened-gcc 。這兩種都是很好的解決辦法,因為這兩種辦法提供了大部分的防護,而且這對一般的使用者 沒有任何影響。

不同的 GCC 版本

如果在您的主機群間有著不同的 GCC 版本,您將會有非常詭異的問題發生。唯一的解決辦法就是 所有的主機均使用相同版本的 GCC。

最近 Portage 的更新讓 Portage 使用 ${CHOST}-gcc 而不是 gcc。這代 表說如果你把 i686 和其他類別的機器混合(i386,i586)你會碰到一些問題。一個解決方 法是 export CC='gcc' CXX='c++' 或是把這放在 /etc/make.conf

重要: 這樣做會重新定義 Portage 一些行為,可能會有一些問題或奇怪的結果。只有在你有混合 的 CHOST 才用。

6.  額外的 Distcc 工具

Distcc 監視器

Distcc 包含兩個監視器。文字介面的是內建的,它叫作 distccmon-text。 第一次執行它可能會有點困擾,不過它是非常容易使用的。如果您執行它並且沒有加任何 的參數的話,它只會執行一次。然而,如果您在後面加入一個數值 N 的話,它會每 N 秒 更新一次。

另一個監視器只有在您的 USE 參數中啟動 gtkgnome 才會打開。 它是建立於 GTK+ 並需執行於 X 的環境下。在 Gentoo 裡為了減少誤解,他叫作 distccmon-gui。其他地方可能稱為 distccmon-gnome

原始碼 6.1: 啟動監視器

# distccmon-text N
(或是)
# distccmon-gui
要監測 Portage distcc 的執行,您可以使用:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(或是)
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gui

重要: 如果你的 distcc 放在別的目錄,依你的狀況改變 DISTCC_DIR 變數。



列印

最後更新 2005年 7月 1日

這份文件的原始版本已不再被維護

大綱: 這份文件將教您如何在 Gentoo 上使用 distcc 功能。

Lisa Seelye
Author

Mike Frysinger
Editor

Erwin
Editor

Sven Vermeulen
Editor

Lars Weiler
Editor

Tiemo Kieft
Reviewer

Rick Lan
Translator

Benny Chuang
Reviewer

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Bytemark

Bytemark

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.