スポンサーリンク

RELEASE(7) FreeBSD 多方面の情報マニュアル RELEASE(7)

名称

release − リリース構築基盤

解説

FreeBSD は、ユーザが FreeBSD オペレーティングシステムのリリース全てを作成 できるような完全な構築環境を提供しています。リリースを構築するために必要 なツールの全ては、 CVS リポジトリ中の src/release に揃っています。実のと ころ、 CD-ROM を焼く際に使える ISO イメージ、インストール用フロッピ、 FTP インストール用ディレクトリの生成をはじめとして、完全なリリースをコマンド 一発で構築できます。このコマンドは、 ‘‘make release’’ と、うまい名前が付 けられています。

リリースを構築する前に、 build(7) の内容によく馴染んでおいてください。ま た、ソースからのシステムアップグレードの経験も必須です。リリース構築プロ セスでは、現在動作しているカーネルに対応したソースから、そのシステム上で ‘‘make buildworld’’ によってコンパイルされた結果を、 /usr/obj に置いてお くことが必要です。完全なシステムのためのオブジェクトファイルを、まっさら の chroot(8) 環境にインストールできるようにするために、これが必要となりま す。リリースを進めるには、 md(4) (メモリディスク) デバイスドライバがカー ネルに存在する (コンパイル済み、またはモジュールとして利用可能のいずれも 可) ことも必要です。

この文書は、ソースコード管理、品質管理など、リリースエンジニアリングプロ セスに関するその他の側面は扱いません。

ターゲット

リリース用 makefile (src/release/Makefile) は、かなり難解です。ほとんどの 場合、 release ターゲットのことを考えるだけで済むと思います。

       release

‘‘make installworld’’ を用いて、ファイルシステムの chroot(8) 環境にまっさらのシステムをインストールします。指 定したバージョンのソースコードをチェックアウトし、 ‘‘make buildworld’’ を用いて、まっさらの環境に完全なシステムを再 構築します。そのあとに、ディストリビューション別のパッケー ジング(まとめ上げ)、インストール用フロッピディスクの構築、 リリース文書の構築などの細かいステップが続きます。

このターゲットは、 kern.securelevel sysctl を −1 (デフォル ト) とした root で構築する必要があります。

rerelease
このターゲットは、リリース構築作業の結果を手で修正し、前の ‘‘make release’’ の中間結果を使い、最小のステップ数でリ リースを再構築することを想定したものです。

floppies
新規のブートおよび fixit フロッピの組を作成します。 release.4, release.8, floppies.1, floppies.2, floppies.3 ターゲットを呼び、直前の ‘‘make release’’ のフロッピイメー ジを再作成します。このターゲットは、カスタムブートフロッピ の作成にもっとも良く使用されます。

package-split
ディスク 1 およびディスク 2 のイメージの、パッケージ関連部 分を作成します。 ports チームが提供するパッケージビルドか らパッケージを取り出して適切に編成するため、 src/release/package-split.py スクリプトから作られる必要な パッケージのリストを使用します。この結果得られるディレクト リは、 iso.1 ターゲットで適切なパッケージ関連素材とともに ISO イメージを構築するように、 CD_PACKAGE_TREE 変数を介し て ‘‘make release’’ に渡すことができます。

‘‘make release’’ により呼び出されるターゲットは次のとおりです。

release.1
ディレクトリ ${CHROOTDIR}/R をまっさらにし、 mtree(8) を 用いてシステム用のディレクトリ階層を構築します。

release.2
システムをディストリビューション用ディレクトリにインス トールします。

release.3
GENERIC
カーネルを作り、インストールします。同時に KERNELS にリストされた他のカーネルも、作成しインストール します。

release.4
crunchgen(1) を用いて、インストール用フロッピに収容する ‘‘crunched’’ バイナリを構築します。

release.5
合成ディストリビューションを構築し、また、作成されたディ ストリビューションツリーを掃除しきれいにします。

release.6
組み立てられたディストリビューションツリーの tarball を 生成します。

release.7
ソースディストリビューションを作成します。

release.8
MFS root ファイルシステムを生成します。

floppies.1
boot と kernel フロッピを生成します。

floppies.2
fixit フロッピを生成します。

floppies.3
${CHROOTDIR}/R/ftp/stage/floppies
ステージディレクトリで の作業の仕上げをします。

ftp.1
FTP インストールに適切な領域を ${CHROOTDIR}/R/ftp に整え ます。

cdrom.1
live ファイルシステム CD-ROM イメージ用の配置を、 ${CHROOTDIR}/R/cdrom 以下に作成します。

cdrom.2
1 枚目および 2 枚目の CD-ROM イメージ用の配置を作成しま す。

cdrom.3
ブート専用 CD-ROM イメージおよびブート専用 UFS miniroot イメージ用の配置を作成します。

iso.1
CD-ROM リリース領域から ISO イメージを構築します (インス トール用と ‘‘live’’ ファイルシステムの 2 つ)。デフォルト では無効になっています。以下の MAKE_ISOS を参照してくだ さい。

fetch-distfiles
リリースビルドに必要な distfile で RELEASEDISTFILES には まだ無いものを取得します。

doc.1
FreeBSD ドキュメンテーションプロジェクトのソースドキュメ ント (SGML, XML) をリリースに含める HTML / テキストド キュメントに変換するために必要なツール全てを構築します。 また、現在存在するユーザドキュメントも構築、インストール します。これには、Handbook, FAQ, article などが含まれま す。

doc.2
リリースドキュメントを構築します。これには、リリースノー ト、ハードウェアガイド、インストール作業説明書 (installation instructions) が含まれます。

環境変数

指定しなければならない環境変数は以下のとおりです。

       BUILDNAME

構築するリリースの名前。この名前は、 sys/conf/newvers.sh の中 で RELEASE の値を設定するのに使用します。この値は uname(1) の 出力を変更します。

CHROOTDIR
chroot(8) 環境として、全リリース構築に使用するディレクトリ。 i386 アーキテクチャの場合、これが存在するファイルシステムには 少なくとも 3.2GB の空き領域が必要です。

CVSROOT
FreeBSD CVS リポジトリの位置です。このパス名は、実システムルー トから参照され、 chroot(8) されたディレクトリツリーのルートか らの参照では ありません。

オプションの変数は次のとおりです。

CD_PACKAGE_TREE
1 枚目および 2 枚目の CD-ROM イメージに追加する素材 を含んだディレクトリです。 1 枚目のディスクの追加 ファイルは ${CD_PACKAGE_TREE}/disc1 に、2 枚目の ディスクの追加ファイルは ${CD_PACKAGE_TREE}/disc2 に置きます。典型的には、この変数には、事前に呼び出 した package-split ターゲットの出力ディレクトリを設 定します。

CVSARGS
cvs(1) への追加の引数で、 ‘‘-qR’’ といったサブコマ ンドの前に置かれます。

CVSCMDARGS
cvs(1) のコマンド checkoutupdate への追加の引数 です。例えば、この変数を ‘‘-D ’01/01/2002 00:00:00 GMT’’’ に設定して ‘‘make release’’ または ‘‘make rerelease’’ すると、 cvs(1) はそれぞれ 2002 年 1 月 1 日 00:00:00 GMT のソースをチェックアウトまたは アップデートするよう cvs(1) に指示します。

DOC_LANG
構築すべき SGML ベースドキュメンテーションの、言語 とコード。設定されないと、使用可能なすべての言語に 対し、ドキュメンテーションが構築されます。

DOCRELEASETAG
ドキュメンテーションツリーのチェックアウト時に使用 する CVS タグ。通常、デフォルトで、ドキュメンテー ションツリーの先頭が使用されます。 RELEASETAG がリ リースタグを指定する場合、関連付けられたリリース バージョンがデフォルトの代りに使用されます。

EXTLOCALDIR
${CHROOTDIR}/usr/local
にコピーされるディレクトリ。

EXTSRCDIR
この変数で指定されるディレクトリは、 CVS checkout によって置かれたディレクトリの代わりに、 ${CHROOTDIR}/usr/src へとコピーされます。 ‘‘rerelease’’ では、このディレクトリはコピーされま せん。 cvs update が代わりに使用されます。

KERNEL_FLAGS
リリース構築中のカーネル構築時に、この変数の内容が make(1) に渡されます。例えば、この変数を ‘‘-j 4’’ に設定すると、 make(1) に最大 4 プロセスまで同時に 実行することを指示することになります。

KERNELS
コンパイルして ‘‘base’’ ディストリビューションにイ ンストールする、追加のカーネル設定のリストを指定し ます。各カーネルは、 /boot/<config> にインストール され、ローダから ‘‘boot <config>’’ でブートできるよ うになります。

LOCAL_PATCHES
/usr/src
に対するパッチファイル。このパッチは、リ リース構築を開始する前に、 chroot(8) 環境で適用され ます。

PATCH_FLAGS
パッチファイル LOCAL_PATCHES を適用する際に用いる patch(1) コマンドに渡す引数。

LOCAL_SCRIPT
chroot(8) 環境で、ローカルパッチ適用直後に実行され るスクリプト。

MAKE_ISOS
これを定義した場合、CD-ROM ステージのディレクトリの 内容から、ブータブル ISO CD-ROM イメージを生成しま す。

NOCDROM
定義した場合、CD-ROM ステージのディレクトリを生成し ません。

NODOC
定義した場合、 FreeBSD ドキュメンテーションプロジェ クトの SGML ベースのドキュメントを生成しません。し かしながら、 src/share/doc にある最小のドキュメン テーションセットから ‘‘doc’’ ディストリビューション が依然として作成されます。

NO_FLOPPIES
定義した場合、boot と fixit フロッピディスクイメー ジファイルを生成しません (これらをサポートするプ ラットフォーム用)。

NOPORTS
定義した場合、Ports Collection はリリースから省略さ れます。

PORTSRELEASETAG
ports ツリーのチェックアウト時に使用する CVS タグ。 通常、デフォルトで、ports ツリーの先頭が使用されま す。 RELEASETAG がリリースタグを指定する場合、関連 付けられたリリースバージョンがデフォルトの代りに使 用されます。

NO_PREFETCHDISTFILES
この変数が定義されている場合、 chroot(8) 環境に入る 前に、リリース構築に必要な distfile がダウンロード されません。 NO_PREFETCHDISTFILES が設定されていな い場合、取得が行われるのは、 RELEASEDISTFILES から distfile を取得完了した後であることに注意してくださ い。

RELEASEDISTFILES
ports 用として、リリース構築に必要となるディストリ ビューションファイルが存在するディレクトリです。こ れにより、低速なリンク経由で distfiles をダウンロー ドする際に費やされる莫大な時間を節約することができ ます。

RELEASENOUPDATE
‘‘make rerelease’’ の際にこの変数の値を設定した場 合、 ‘‘cvs update’’ によるソースコード更新を行ない ません。

RELEASETAG
構築するリリースに相当する CVS タグ。未定義の場 合、CVS ツリーの HEAD (‘‘-CURRENT スナップショッ ト’’) から構築されます。

SEPARATE_LIVEFS
live ファイルシステムを、1 枚目のディスクではなく、 専用の CD-ROM 上に記録します。

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

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

WORLDDIR
‘‘make buildworld’’ が実行されたディレクトリです。 デフォルトは ${.CURDIR}/.. であり、通常は /usr/src を指します。

WORLD_FLAGS
リリース構築中の世界 (world) 構築時に、この変数の内 容が make(1) に渡されます。例えば、この変数を ‘‘-j 4’’ に設定すると、 make(1) に最大 4 プロセスまで同 時に実行することを指示することになります。

関連ファイル

       /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
/usr/src/release/Makefile
/usr/src/release/${arch}/boot_crunch.conf
/usr/src/release/${arch}/fixit_crunch.conf

使用例

以下のコマンド列は FreeBSD 4.9 release を構築する際に使用したものです。

      cd /usr
      cvs co -rRELENG_4_9_0_RELEASE src
      cd src
      make buildworld
      cd release
      make release CHROOTDIR=/local3/release BUILDNAME=4.9-RELEASE \
        CVSROOT=/host/cvs/usr/home/ncvs RELEASETAG=RELENG_4_9_0_RELEASE

これらのコマンドを実行すると、FTP ディストリビューション用と、 CD-ROM ディストリビューション用として使える完全なシステムがディレクトリ /local3/release/R にできます。

次のコマンド列は、ローカルで修正したソースツリーの ‘‘-CURRENT スナップ ショット’’ を構築するために使用できます。

      cd /usr/src
      cvs diff -u > /path/to/local.patch
      make buildworld
      cd release
      make release CHROOTDIR=/local3/release BUILDNAME=6.0-CURRENT \
        CVSROOT=/host/cvs/usr/home/ncvs LOCAL_PATCHES=/path/to/local.patch

関連項目

cc(1), crunchgen(1), cvs(1), install(1), make(1), patch(1), 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 では、チェックリストを手でチェックしながら、 Rod Grimes によ りコンパイルされ、リリースが作成されました。不完全さはさておくにしても、 このチェックリストには、ファイルシステムを使えるようにするためのこまごま とした要求が大量に含まれており、その実行は拷問としかいいようがないもので した。

FreeBSD 2.0 リリースエンジニアリングを続ける中で、 src/release/Makefile を直して、隔離された無菌環境でリリースを構築する際の退屈な作業のほとんど を自動的に行なえるようにすることに、顕著な努力が払われました。

複数のブランチにまたがる 1000 回近くの改版を経て、 src/release/Makefilecvs(1) ログには、リリースエンジニアたちが経験した苦難のいくばくかを示 す生々しい歴史の記録が刻み込まれています。

作者

src/release/Makefile は、もともとは Rod Grimes, Jordan Hubbard, Poul-Henning Kamp によって書かれました。このマニュアルページは、 Murray Stokely ⟨murray@FreeBSD.org⟩ によって書かれました。

バグ

FreeBSD ドキュメンテーションに対するインフラストラクチャ変更は頻繁で、こ れが原因でセキュリティブランチ上のリリース構築が失敗することがあります。 最後に完全にサポートされた FreeBSD リリースからドキュメンテーションを チェックアウトし、リリース構築することで、この問題を回避できます。例:

make release RELEASETAG=RELENG_4_9 DOCRELEASETAG=RELEASE_4_9_0 ...

FreeBSD 10.0 September 6, 2004 FreeBSD 10.0

スポンサーリンク