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