EN JA
RELEASE(7)
RELEASE(7) FreeBSD Miscellaneous Information Manual RELEASE(7)

名称

releaseリリース構築基盤

解説

FreeBSD は、 FreeBSD オペレーティングシステムのすべてのリリースを行うためにユーザに対して適切な完備した構築環境を提供しています。リリースを構築するために必要なツールのすべては、 src/releaseFreeBSD ソースコードリポジトリで利用可能です。実際に、CD-ROM を焼くために適切な ISO イメージの作成、メモリステックイメージと FTP インストールディレクトリを含んで、単一のコマンドだけで完全なリリースを構築することができます、このコマンドは、適切な名前の“ make release”です。

何人かのユーザにとって、ソースツリーまたは make.conf(5) へのローカルな変更なしで、および doc、src と ports ツリーの特有のバージョンのクリーンなチェックアウトで、絶対にクリーンな構築環境を提供することは望ましくないかもしれません。このために、スクリプト ( src/release/release.sh) は、これらのチェックアウトを自動化して、次に、クリーンな chroot(8) で“ make release”を実行するために提供されます。

リリースの構築を試みる前に、ユーザは、 build(7) の内容に詳しいことが期待され、ソースからシステムをアップグレードするという経験があるべきです。

リリース構築プロセスは、“ make buildworld”と“ make buildkernel”の出力が /usr/obj に置かれることを必要とします。これは、クリーンな chroot(8) 環境に全部のシステムのためのオブジェクトファイルをインストールできるように、リリースのためのオブジェクトファイルを提供するか、 release.sh を使用するとき、必要です。

ターゲットのリリース構築が異なるアーキテクチャまたはマシンタイプ向けであるなら、 TARGETTARGET_ARCH 変数が使用されなければなりません。詳細については、サポートされた release.conf 変数を参照してください。

また、いくつかのアーキテクチャでのリリース手順は、 md(4) (メモリディスク) デバイスドライバが (モジュールとしてコンパイルされているか、または利用可能であるかのいずれかで) カーネルに存在していることを必要とします。

この文書は、ソースコードの管理、品質保証、またはリリースエンジニアリングプロセスの他の局面を取り上げていません。

クリーンなリリースの生成

FreeBSD の公式なリリースは、src、ports と doc ツリーのバージョンの間の一貫性を保証し、ホストシステム (ローカルパッチのような、 make.conf(5) などへの変更) からの汚染を避けるために完全にクリーンな環境で作成されます。これは、ラッパスクリプト src/release/release.sh を使用して達成されます。

release.sh [ -c release.conf]

release.sh は、 CHROOTDIR への src/, ports/doc/ ツリーをチェックアウトして、次に chroot(8) 環境を生成するために“ make buildworld”と“ make installworld”を呼び出します。次に、“ make release”は、 chroot(8) 環境内で実行され、 $CHROOTDIR/R に結果を置きます。

オプションの release.conf 設定ファイルは、次の変数をサポートしています:

CHROOTDIR
リリースが構築されるディレクトリ。
SVNROOT
様々なツリーをチェックアウトするために使用される svn(1) ホスト。デフォルトは、 svn://svn.FreeeBSD.org です。
SRCBRANCH
使用する src/ ブランチ。デフォルトは、 head/@rHEAD です。
DOCBRANCH
使用する doc/ ブランチ。デフォルトは、 head/@rHEAD です。
PORTBRANCH
使用する ports/ ブランチ。デフォルトは、 head/@rHEAD です。
TARGET
リリースをクロス構築するためのマシンタイプ。
TARGET_ARCH
リリースのためのターゲットのマシンアーキテクチャ。

TARGETTARGET_ARCH の組み合わせのサポートされたリストについては、 build(7) で文書化されている“make targets”の出力を調べてください。

KERNEL
使用するターゲットのカーネル設定。デフォルトは、 GENERIC です。複数の KERNEL エントリが指定されます。
MAKE_CONF
リリースの構築のために使用する make.conf(5)。デフォルトは、ローカルシステムの変更でリリースを汚染することを防ぐために /dev/null です。
SRC_CONF
リリースの構築のために使用する src.conf(5)。デフォルトは、ローカルシステムの変更でリリースを汚染することを防ぐために /dev/null です。
MAKE_FLAGS
make(1) に渡す追加のフラグ。
WORLD_FLAGS
“buildworld”フェーズの間に make(1) に渡す追加のフラグ。デフォルトは、 make(1) ジョブ ( -j) の数を SMP 可能なシステムで利用可能な CPU の数に設定することです。
KERNEL_FLAGS
“buildkernel”フェーズの間に make(1) に渡す追加のフラグ。デフォルトは、 make(1) jobs ( -j) の数を SMP 可能なシステムで利用可能な CPU の数の半分に設定することです。
NODOC
空でない値を doc/ ツリーチェックアウトをスキップするように設定します。設定されるとき、 NODOC は、作成される doc.txz 配布パッケージを抑制します。
NOPORTS
空でない値を ports/ ツリーチェックアウトをスキップするように設定します。設定されるとき、 NOPORTS は、作成される ports.txz 配布パッケージを抑制します。また、この設定は、 NODOC を設定します。
WITH_DVD
dvdrom ターゲットを含める空でない値に設定します。

MAKEFILE ターゲット

リリース makefile ( src/release/Makefile) は、かなり難解です。ほとんどの開発者は、 release ターゲットと install ターゲットのみに関心があります。
release
すべてのリリースメディアを構築するためのメタターゲットとこのプラットフォームに適用できる配布。
install
すべての作成されたリリースメディアを ${DESTDIR} にコピーします。
cdrom
インストール CD-ROM イメージを構築します。これは、 md(4) (メモリディスク) デバイスドライバが (モジュールとしてコンパイルされているか、または利用可能であるかのいずれかで) カーネルに存在していることを必要とします。このターゲットは、出力として disc1.isobootonly.iso 呼ばれるファイルを作ります。
dvdrom
インストール DVD-ROM イメージを構築します。これは、 md(4) (メモリディスク) デバイスドライバが (コンパイルされることによって、またはモジュールとして利用可能であるかのいずでかで) カーネルに存在することを必要とします。このターゲットは、その出力として dvd1.iso ファイルを生成します。
memstick
memstick.img と名前が付けられたインストールメモリスティックイメージを構築します。すべてのプラットフォームで、適用できません。 md(4) (メモリディスク) デバイスドライバが (モジュールとしてコンパイルされているか、または利用可能であるかのいずれかで) カーネルに存在していることを必要とします。
ftp
ネットワークのインストールで使用され、FTP ミラーへのアップロードに適した配布ファイルを含む ftp と名前が付けられたディレクトリを作成します。

上記のターゲットによって呼び出される、主要なサブターゲットは、次の通りです:

packagesystem
このプラットフォームで適切な、すべての配布アーカイブ (base, kernel, ports, doc) を生成します。
system
packagesystem ターゲットによってパッケージ化され、 cdrom, dvdrommemstick ターゲットによってイメージ化するのに適している、すべての配布ファイルを含むブート可能なインストールシステムを構築します。
reldoc
リリース文書を構築します。これは、リリースノート、ハードウェアガイドとインストール説明書を含んでいます。ハンドブックのような、他の文書は、 packagesystem によって呼び出された base.txz ターゲットの間に構築されます。

環境変数

オプションの変数は、次の通りです:
OSRELEASE
生成されたメディアイメージのためのオプションの基本名 (例えば、FreeBSD-9.0-RC2-amd64)。デフォルトは、chroot 内の `uname -s`-`uname -r`-`uname -p` の出力です。
WORLDDIR
src ツリーを含むディレクトリの位置。デフォルトで、makefile ( src) を含む上記のディレクトリ。
PORTSDIR
ports ツリーを含むディレクトリの位置。デフォルトは、 /usr/ports です。設定されていないか、または見つけることができないなら、 ports は、リリースに含まれません。
DOCDIR
doc ツリーを含むディレクトリの位置。デフォルトは、 /usr/doc です。設定されていないか、または見つけることができないなら、ほとんどの文書は、リリースに含まれません。下記の NODOC を参照してください。
NOPORTS
定義されるなら、Ports Collection は、リリースから除外されます。
NOSRC
設定されるなら、リリースにシステムソースコードを含めません。
NODOC
定義されるなら、 FreeBSD Documentation Project の SGML ベースの文書は、構築されません。しかしながら、それでも、“doc”配布は、 src/share/doc で提供される最小の文書セットを含んで作成されます。
TARGET
ターゲットのハードウェアプラットフォーム。これは、“ uname -m”の出力に類似しています。これは、いくつかのターゲットアーキテクチャをクロス構築するために必要です。例えば、PC98 マシンのためのクロス構築は、 TARGET_ARCH= i386TARGET= pc98 を必要とします。設定されないなら、 TARGET は、現在のハードウェアプラットフォームをデフォルトとします。
TARGET_ARCH
ターゲットマシンのプロセッサアーキテクチャ。これは、“ uname -p”の出力に類似しています。異なったアーキテクチャのためのクロス構築のためにこれを設定します。また設定されていないなら、 TARGET_ARCH は、現在のマシンアーキテクチャをデフォルトとし、 TARGET も設定されていないなら、そのプラットフォームのための適切な値をデフォルトとします。通常、 TARGET のみを設定する必要があります。

関連ファイル

/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
/usr/src/release/Makefile
/usr/src/release/release.sh
/usr/src/release/release.conf.sample

使用例

“-CURRENT snapshot”: を構築するために、次のコマンドのシーケンスを使用することができます:

cd /usr 
svn co svn://svn.freebsd.org/base/head src 
cd src 
make buildworld buildkernel 
cd release 
make release 
make install DESTDIR=/var/freebsd-snapshot

これらのコマンドを実行した後に、すべての作成された配布ファイル (FTP、CD-ROM イメージなどのための tarball) は、 /var/freebsd-snapshot ディレクトリで利用可能です。

ports と文書を含む、クリーンな環境で“-CURRENT snapshot”を構築するために次のコマンドのシーケンスを使用することができます:

cd /usr/src/release 
sh release.sh

オプションで、使用する subversion リビジョン、 src/, ports/doc/ のための subversion ツリーのブランチのような、リリースの構築をカスタマイズするために、設定ファイルを使用することができます、

cd /usr/src/release 
sh release.sh -c $HOME/release.conf

これらのコマンドを実行した後に、すべての準備されたリリースファイルは、 /scratch ディレクトリで利用可能です。 release.confCHROOTDIR 変数を指定することによって、ターゲットディレクトリを変更することができます。

歴史

FreeBSD 1.x は、リリースを作成するために Rod Grimes によってコンパイルされた手動のチェックリストを使用しました。不完全であることは別として、リストには、利用可能なファイルシステムに多くの特有の要求が置かれ、実行するためにかなり拷問のようでした。

FreeBSD 2.0 リリースの技術的な取り組みの一部として、特筆すべき取り組みは、無菌の環境でリリースを構築する退屈さのほとんどを少なくとも自動化できた形態の src/release/Makefile を得るために費やされました。

FreeBSD 9.0 リリースに関して、 src/release/Makefile は、オーバホール (overhaul) され、ラッパスクリプト src/release/generate-release.sh は、新しいインストーラの導入をサポートするために取り入れました。

FreeBSD 9.2 のリリースのために、 src/release/release.sh は、構築ごとの設定ファイルをサポートするために導入されました。 src/release/release.sh は、 src/release/generate-release.sh スクリプトに大きく基づいています。

複数のブランチに広がる 1000 近い改訂で、 src/release/Makefilesvn(1) ログは、リリースエンジニアが経験したいくつかの苦難の生き生きとした歴史的な記録を含んでいます。

作者

src/release/Makefile は、元々、 Rod Grimes, Jordan HubbardPoul-Henning Kamp によって書かれました。

このマニュアルページは、最初に Murray Stokely <murray@FreeBSD.org>. によって書かれました。

それは、 FreeBSD 9.0 リリースサイクルのために使用された generate-release.sh スクリプトを含めるために、 Nathan Whitehorn <nwhitehorn@FreeBSD.org>によって更新されました。

それは、 FreeBSD 9.2 リリースサイクルのために使用された release.sh スクリプトを含めるために、 Glen Barber <gjb@FreeBSD.org>によって更新されました。

December 2, 2013 FreeBSD