複数のコンピュータで同じソースツリーを追いかけていて、 全部のマシンにソースをダウンロードして全部を再構築するのは、 ディスクスペース、ネットワーク帯域、そして CPU サイクルの無駄使いです。 解決策は 1 つのマシンに仕事のほとんどをさせ、 残りのマシンは NFS 経由でそれをマウントする、というものです。 このセクションではそのやり方を概観します。
まず初めに、同じバイナリで動かそうとするマシンたちを決めます。
このマシンたちのことをビルドセットと呼びます。
それぞれのマシンはカスタムカーネルを持っているかもしれませんが、
同じユーザランドバイナリを動かそうというのです。
このビルドセットから、
ビルドマシンとなるマシンを 1 台選びます。
ベースシステムとカーネルを構築するのはこのマシンになります。
理想的には、このマシンは make buildworld
と make buildkernel
を実行するのに十分な CPU を持った速いマシンであるべきです。
テストマシンとなるべきマシンも選んでください。
更新されたソフトウェアを使う前にそのマシンでテストするのです。
テストマシンはかなり長い時間落ちていても
だいじょうぶなマシンであったほうがいいでしょう。
ビルドマシンでもかまいませんが、ビルドマシンである必要はありません。
このビルドセットのマシンはすべて
/usr/obj
と
/usr/src
を同じマシンの同じ場所からマウントする必要があります。
理想的にはビルドマシンの 2 つの違うドライブ上にあるとよいのですが、
ビルドマシンに NFS マウントされていてもかまいません。
ビルドセット自体が複数ある場合は、
/usr/src
はひとつのビルドマシン上にあるべきです。
他のマシンからはそれを NFS マウントするようにしましょう。
最後にビルドセットのすべてのマシン上の
/etc/make.conf
と
/etc/src.conf
がビルドマシンと一致していることを確認してください。
つまり、ビルドマシンはビルドセットのどのマシンもインストールしようとしている
ベースシステムを全部ビルドしなければならないということです。
また、各ビルドマシンは /etc/make.conf
にそれぞれのビルドマシンのカーネル名を
KERNCONF
で指定し、
ビルドマシンは自分自身のカーネルから順に全部のカーネル名を
KERNCONF
にリストアップしてください。
各マシンのカーネルもビルドするのであれば、
ビルドマシンは各マシンのカーネル設定ファイルを /usr/src/sys/arch/conf
に持っていなければなりません。
ビルドマシンにて、
「ベースシステムの構築」
に書いてあるようにカーネルとベースシステムを構築してください。
でも、まだインストールしないでください。
ビルドが終わったら、テストマシンに移り、
ビルドしたカーネルをインストールしてください。
テストマシンが NFS 経由で
/usr/src
と
/usr/obj
をマウントしているなら、
シングルユーザで再起動したときにネットワークを使えるようにして、
これらのディレクトリをマウントするようにしてください。
もっとも簡単な方法は、
マルチユーザモードで起動して、shutdown now
を実行してシングルユーザモードに移行することです。
そうしたら、カーネルとベースシステムをインストールし、
いつもするように
mergemaster
を実行してください。
終わったら、
テストマシンを再起動して通常のマルチユーザ動作に戻します。
テストマシンにあるものすべてがちゃんと動いている確信が得られたら、 同じ手順でビルドセットの他のマシンにも新しいソフトウェアをインストールします。
ports ツリーにも同じアイデアが使えます。
最初に重要な点は、
ビルドセットのすべてのマシンに同じマシンの /usr/ports
をマウントすることです。
そして、distfiles を共有するように
/etc/make.conf
を適切に設定します。
NFS マウントによってマップされる root
ユーザが何であれ、DISTDIR
はそのユーザが書き込める共通の共有ディレクトリに設定する必要があります。
各マシンは WRKDIRPREFIX
を自分のマシンのビルドディレクトリに設定しなければなりません。
最後に、packages をビルドして配布するのであれば、
DISTDIR
と同じように
PACKAGES
ディレクトリも設定してください。
本文書、および他の文書は ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ からダウンロードできます。
FreeBSD に関する質問がある場合には、
ドキュメント を読んだ上で
<questions@FreeBSD.org> まで (英語で) 連絡してください。
本文書に関する質問については、
<doc@FreeBSD.org> まで電子メールを (英語で) 送ってください。