23.6. 多部機器追蹤

Contributed by Mike Meyer.

當有多部主機需要追蹤相同的原始碼樹,要在每一部主機的系統下載原始碼與重新編譯所有的東西會耗費不少磁碟空間、網路頻寬與 CPU 運算,要解決這個問題的方法是先在一部主機上做完大部份的工作,而其餘的主機透過 NFS 掛載使用編譯完的成果。本節會介紹如何做這件事。要取得更多有關使用 NFS 的資訊請參考 節 28.3, “網路檔案系統 (NFS)”

首先,要先確認要執行同一組 Binary 的一群主機,這群主機又稱作 建置集 (Build set),其中每部主機可以有自己的自訂核心,但會執行相同的 Userland binary。建置集中需挑選一部做為建置主機 (Build machine),這部主機將會拿來編譯 World 與核心 (Kernel),理想情況下,要挑選一部速度較快、有足夠的 CPU 能夠執行 make buildworldmake buildkernel 的主機。

再挑選一部主機做為測試主機 (Test machine),這部主機,要在將系統更新上正式運作的環境前做測試,這必須一部能夠承受服務停止一段時間的主機,它也可是同時是建置主機,但不是一定要。

所有在此建置集中的主機需要透過 NFS 掛載在建置主機上的 /usr/obj/usr/src。在有多個建置集時,/usr/src 也應放在其中一部建置主機,然後由其他主機使用 NFS 掛載。

確保在建置集中的所有主機的 /etc/make.conf/etc/src.conf 與建置主機一致,這是由於建置主機必須編譯整個基礎系統 (Base system) 給所有建置集中的主機安裝。此外,每一部建置主機應在 /etc/make.conf 使用 KERNCONF 設定其核心名稱,且建置主機應列出所有要編譯的核心名稱在 KERNCONF,並且把自己要用的核心放在第一個。建置主機也必須有每部主機的核心設定檔在其 /usr/src/sys/arch/conf

在建置主機上,編譯核心與 World 如 節 23.5, “從原始碼更新 FreeBSD” 所述,但不要在建置主機上安裝所有編譯好的東西,而是要將編譯好的核心安裝到測試主機,在測試主機透過 NFS 掛載 /usr/src/usr/obj。然後執行 shutdown now 進入單使用者模式來安裝新的核心與 World 並如同往常執行 mergemaster。完成之後,重新開機回到正常的多使用者模式運作。

在測試主機上檢驗完所有東西皆運作正常之後,使用相同的程序將編譯好的結果安裝到在建置集中的其他主機。

同樣的方法也可用在 Port 樹,第一個步驟是透過 NFS 共享 /usr/ports 給所有在建置集中的主機。要設定 /etc/make.conf 使用共享的 distfiles,可設定 DISTDIR 為由 NFS 掛載對應到的使用者 root 可寫入的通用共享目錄。每一台主機應設定 WRKDIRPREFIX 到一個本地的編譯目錄,若 Port 要在本地編譯。或者,若建置系統要編譯並散佈套件到建置集中的主機可在建置系統上設定 PACKAGES 到一個類似 DISTDIR 的目錄。

本文及其他文件,可由此下載: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/

若有 FreeBSD 方面疑問,請先閱讀 FreeBSD 相關文件,如不能解決的話,再洽詢 <questions@FreeBSD.org>。

關於本文件的問題,請洽詢 <doc@FreeBSD.org>。