BUILD(7)

名称
build - システムの構築方法についての情報

解説
FreeBSD システムおよびアプリケーションのソースコードは、異なる 3 つの ディレクトリに格納されています。通常は、 /usr/src, /usr/doc, /usr/ports です。 /usr/src には “ベースシステム” のソースが含まれています。ベースシステムとは、システムを使える 状態に構築し直すのに必要なものとして大雑把に定義されています。 /usr/doc にはシステムドキュメントのソースが含まれています。ただし、マニュアル ページは除きます。 /usr/ports は、サードパーティのアプリケーションを構築し、インストールするための 一貫したインタフェースを提供しているツリーです。

これら 3 つのディレクトリそれぞれに格納されているものを構築し インストールするには、 make(1) コマンドを使用します。これら 3 つのディレクトリ、もしくは サブディレクトリ内のどこででも make(1) コマンドを実行すれば、 そのディレクトリ配下のサブディレクトリ内すべてで同一のコマンドを 発行したのと同じ効果があります。 ターゲットを指定しなければ、make コマンドを実行した ディレクトリ内にあるものを単純に構築します。 次のリストはその他のターゲットの名称およびアクションを示した ものです:

clean
    構築プロセス中で生成されたファイルをすべて消去します。

install
    このディレクトリに対する構築結果をインストールします。

update
    更新されたソースを /etc/make.conf で設定されている通りに取得します。

その他の /usr/src での make ターゲットは次のものがあります:

buildworld
    カーネル以外のすべてのものを再構築し、 /etc ディレクトリ内のファイルを設定してリリースします。

installworld
    buildworld で構築したものすべてをインストールします。

world
    buildworld と installworld を足したものです。

buildkernel
    カーネルとカーネルモジュールを再構築します。

installkernel
    カーネルとカーネルモジュールをインストールします。

reinstallkernel
    カーネルとカーネルモジュールを再インストールします。

ports の構築プロセスに関する情報については、 ports(7) を参照してください。

環境変数

TARGET_ARCH
    ターゲットとなるマシンプロセッサアーキテクチャ。 この環境変数は “uname -p” の出力と同じものです。 異なるアーキテクチャ用にクロスビルドするにはこの 環境変数を設定してください。

TARGET
    ターゲットとなるハードウェアプラットフォーム。 この環境変数は “uname -m” の出力と同じものです。 ターゲットアーキテクチャをクロスビルドするのに必要な 変数です。 例えば、PC98 マシン用にクロスビルドを行うには TARGET_ARCH=i386 と TARGET=pc98 が必要です。

NO_WERROR
    定義されている場合、警告が出ても構築が停止することはありません。 makefile が別のことを言ってきても停止しません。

DESTDIR
    生成したバイナリをインストールするディレクトリ階層を指します。

関連ファイル
/etc/make.conf
/usr/doc/Makefile
/usr/doc/share/mk/doc.project.mk
/usr/ports/Mk/bsd.port.mk
/usr/ports/Mk/bsd.sites.mk
/usr/share/examples/etc/make.conf
/usr/src/Makefile
/usr/src/Makefile.inc1

使用例
最新のソースからシステムを更新するのには 次のようにするのが “よい” とされています:

    make buildworld
    make buildkernel KERNCONF=FOO
    make installkernel KERNCONF=FOO
    <新規カーネルをシングルユーザモードでリブート>
    make installworld
    mergemaster

“FOO” のところは、カーネルを構築する際に必要となるカーネル設定ファイル名で 置き換える必要があります。 この代わりに、 /etc/make.conf ファイル中にある KERNCONF 変数を構築するカーネル名に設定することができます。 この場合、 buildkernel および installkernel コマンドの KERNCONF=FOO の部分は省略可能です。

これらのコマンドの実行後は、システムをリブートする必要があります。 リブートしないと、再構築されたプログラムの多く ( ps(1) や top(1) 等) は、まだ動作している古いカーネルでは動かない可能性が あります。 極最近のソースからアップグレードするほとんどの場合には 厳密には必要とはならないのですが、 古いカーネルからのアップグレード時や、そのカーネルで “奇妙な現象” が発生することが分かっている時には、 シングルユーザモードでのリブートは非常に重要です。

i386 のホストで Alpha アーキテクチャ用のシステムをクロスビルド するには、次のコマンドシーケンスを使用できます:

    cd /usr/src
    make TARGET_ARCH=alpha buildworld
    make TARGET_ARCH=alpha DESTDIR=/clients/axp installworld

関連項目
cc(1), install(1), make(1), make.conf(5), ports(7), release(7), mergemaster(8), reboot(8), shutdown(8)

作者
Mike W. Meyer <mwm@mired.org> です。