RELEASE(7) | FreeBSD Miscellaneous Information Manual | RELEASE(7) |
名称
release — リリース構築基盤解説
FreeBSD は、 FreeBSD オペレーティングシステムのすべてのリリースを行うためにユーザに対して適切な完備した構築環境を提供しています。リリースを構築するために必要なツールのすべては、 src/release の FreeBSD ソースコードリポジトリで利用可能です。実際に、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 を使用するとき、必要です。
ターゲットのリリース構築が異なるアーキテクチャまたはマシンタイプ向けであるなら、 TARGET と TARGET_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
-
リリースのためのターゲットのマシンアーキテクチャ。
TARGET と TARGET_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.iso と bootonly.iso 呼ばれるファイルを作ります。
- dvdrom
- インストール DVD-ROM イメージを構築します。これは、 md(4) (メモリディスク) デバイスドライバが (コンパイルされることによって、またはモジュールとして利用可能であるかのいずでかで) カーネルに存在することを必要とします。このターゲットは、その出力として dvd1.iso ファイルを生成します。
- memstick
- memstick.img と名前が付けられたインストールメモリスティックイメージを構築します。すべてのプラットフォームで、適用できません。 md(4) (メモリディスク) デバイスドライバが (モジュールとしてコンパイルされているか、または利用可能であるかのいずれかで) カーネルに存在していることを必要とします。
- ftp
- ネットワークのインストールで使用され、FTP ミラーへのアップロードに適した配布ファイルを含む ftp と名前が付けられたディレクトリを作成します。
上記のターゲットによって呼び出される、主要なサブターゲットは、次の通りです:
- packagesystem
- このプラットフォームで適切な、すべての配布アーカイブ (base, kernel, ports, doc) を生成します。
- system
- packagesystem ターゲットによってパッケージ化され、 cdrom, dvdrom と memstick ターゲットによってイメージ化するのに適している、すべての配布ファイルを含むブート可能なインストールシステムを構築します。
- 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=
i386
と TARGET=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.conf
の CHROOTDIR 変数を指定することによって、ターゲットディレクトリを変更することができます。
関連項目
cc(1), install(1), make(1), svn(1) ( ports/devel/subversion), uname(1), md(4), make.conf(5), build(7), ports(7), chroot(8), mtree(8), sysctl(8) FreeBSD Release Engineering, http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng/. FreeBSD Release Engineering of Third Party Packages, http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/releng-packages/. FreeBSD Developers' Handbook, http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/developers-handbook/.歴史
FreeBSD 1.x は、リリースを作成するために によってコンパイルされた手動のチェックリストを使用しました。不完全であることは別として、リストには、利用可能なファイルシステムに多くの特有の要求が置かれ、実行するためにかなり拷問のようでした。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/Makefile の svn(1) ログは、リリースエンジニアが経験したいくつかの苦難の生き生きとした歴史的な記録を含んでいます。
作者
src/release/Makefile は、元々、 , と によって書かれました。このマニュアルページは、最初に
<murray@FreeBSD.org>. によって書かれました。それは、 FreeBSD 9.0 リリースサイクルのために使用された generate-release.sh スクリプトを含めるために、 <nwhitehorn@FreeBSD.org>によって更新されました。
それは、 FreeBSD 9.2 リリースサイクルのために使用された release.sh スクリプトを含めるために、 <gjb@FreeBSD.org>によって更新されました。
December 2, 2013 | FreeBSD |