FreeBSD ハンドブック
Prev | Chapter 17. 開発の最前線 | Next

# 17.5. 複数のマシンで追いかける

寄稿: Mike Meyer.

同じソースツリーを追いかけたいマシンを複数持っているなら、 全部のマシンにソースをダウンロードして全部再構築するのは資源、 つまりディスクスペース、ネットワーク帯域、そして CPU サイクルの無駄使いに思えます。 実際これは無駄で、解決策は 1 つのマシンに仕事のほとんどをさせ、 残りのマシンは NFS 経由でそれをマウントする、というものです。 このセクションではそのやり方を概観します。

## 17.5.1. 準備

まず初めに、同じバイナリで動かそうとするマシンたちを決めます。 このマシンたちのことをビルドセットと呼びましょう。 それぞれのマシンはカスタムカーネルを持っているかもしれませんが、 同じユーザランドバイナリを動かそうというのです。 このビルドセットから、 ビルドマシンとなるマシンを 1 台選びます。 ベースシステムとカーネルを構築するのはこのマシンになります。 理想的には、このマシンは `make buildworld` と `make buildkernel` を実行するのに十分な CPU を持った速いマシンであるべきです。 テストマシンとなるべきマシンも選びたいでしょう。 更新されたソフトウェアを使う前にそのマシンでテストするのです。 テストマシンはかなり長い時間落ちていても だいじょうぶなマシンであったほうがいいでしょう。 ビルドマシンでもかまいませんが、ビルドマシンである必要はありません。

このビルドセットのマシンはすべて `/usr/obj` と `/usr/src` を同じマシンの同じ場所からマウントする必要があります。 理想的にはビルドマシンの 2 つの違うドライブ上にあるとよいのですが、 ビルドマシンに NFS マウントされていてもかまいません。 ビルドセット自体が複数ある場合は、 `/usr/src` はひとつのビルドマシン上にあるべきです。 他のマシンからはそれを NFS マウントするようにしましょう。

最後にビルドセットの全てのマシン上の `/etc/make.conf` がビルドマシンと一致していることを確認してください。 つまり、ビルドマシンはビルドセットのどのマシンもインストールしようとしている ベースシステムを全部ビルドしなければならないということです。 また、各ビルドマシンは `/etc/make.conf` にそれぞれのビルドマシンのカーネル名を `KERNCONF` で指定し、 ビルドマシンは自分自身のカーネルから順に全部のカーネル名を `KERNCONF` にリストアップしてください。 各マシンのカーネルもビルドするのであれば、 ビルドマシンは各マシンのカーネル設定ファイルを `/usr/src/sys/`arch`/conf` に持っていなければなりません。

## 17.5.2. ベースシステム

さて、準備は整ったので、ビルドしましょう。 Section 17.4.7.2 に書いてあるようにカーネルとベースシステムを構築してください。 でも、まだインストールしないでください。 ビルドが終わったら、テストマシンに移り、 ビルドしたばかりのカーネルをインストールしてください。 テストマシンが NFS 経由で `/usr/src` と `/usr/obj` をマウントしているなら、 シングルユーザで再起動したときネットワークを使えるようにしてマウントする必要があります。 もっとも簡単な方法は、 マルチユーザモードで起動して、`shutdown now` を実行してシングルユーザモードに移行することです。 そうしたら、カーネルとベースシステムをインストールし、 いつもするように `mergemaster` を実行できます。 終わったら、 テストマシンを再起動して通常のマルチユーザ動作に戻します。

テストマシンにあるものすべてがちゃんと動いている確信が得られたら、 同じ手順でビルドセットの他のマシンにも新しいソフトウェアをインストールします。

## 17.5.3. Ports

ports ツリーにも同じアイデアが使えます。 最初に重要な点は、 ビルドセットのすべてのマシンに同じマシンの `/usr/ports` をマウントすることです。 そして、distfiles を共有するために、 `/etc/make.conf` を適切に設定します。 NFS マウントによってマップされる `root` ユーザが何であれ、`DISTDIR` はそのユーザが書き込める共通の共有ディレクトリに設定する必要があります。 各マシンは `WRKDIRPREFIX` を自分のマシンのビルドディレクトリに設定しなければなりません。 最後に、パッケージをビルドして配布しようとしているなら、 `DISTDIR` と同じように `PACKAGES` ディレクトリも設定してください。

Prev | Home | Next
“World” の再構築 | Up | ネットワーク通信