配布CDのファイルを作成する(make release)


Last Update: 2005/01/04
3805 th Visitor

配布CDを作成する

FreeBSDをある程度触り、make worldで最新のFreeBSDにしたりしていると、配布されている4.7-RELEASEなどのISOイメージや、FTPにある配布ファイルのツリーはどうやって作るんだろうか?と、ふと疑問に思うことがあります。
現実にsnapshotsプロジェクトなどで毎日最新のCURRENTとSTABLEが簡単に手に入るので、なんらかのシステムを使って配布イメージなどが作られていることはなんとなく理解できますが、実際にどうやって作るのか詳しく解説しているサイト等は調べてもなかなかありません。
情報が余りないけど可能であるということで、興味が沸いてオリジナル配布CDを作ってみたくなって試行錯誤した結果、無事オリジナル配布CDを作成することが出来ましたので、それについて解説していきます。
ただ、あくまでその時はこうやったらできた。というものですので、やはり試行錯誤する必要があるかもしれません(^^。

このコンテンツでは、最終的にはFreeBSDの配布ファイルに自分の好きなports等を組み合わせた、いわゆるディストリビューションの作成を目的に書いていきたいと思います。

注意点等

適当なFreeBSDの配布CDのファイル構成を見てみると、binディレクトリ等を開くとdfやls等のファイルではなく、bin.aa、bin.ab等の分割ファイルが入っている事に気が付くと思います。
これはbinディレクトリ全体を1つのファイルに固めて、それを適当な大きさに分割したものなんですが、結論からすると普通にbuildworld等をして作ったファイルをそのままCDに焼いても配布CDは出来ないことを意味します。
この配布CDはmake releaseというコマンドを使って作成するのですが、この作業の過程でbin.aa等のファイルが作られるようになっています。

make releaseする前に注意する点としては、空き容量が4GB程度以上必要だということがまず挙げられます。
また、少々特殊な作業なため、日々作業しているFreeBSDの環境をおかしくする可能性があるので、慣れるまで(慣れてからもか?)別の場所、あるいは別のPCにインストールしたFreeBSDで作業することをお奨めしておきます。

また、このコンテンツでの作業はdeveloperを選択してクリーンインストールしたFreeBSD 4.xに「cvsup-without-gui(net/cvsup-without-gui)」のみを入れた状態から開始することとします。

cvsup

配布CDの作成は、cvsupでソースとCVSレポジトリを同期し、その後make releaseでftpツリーやCDを作成といった手順となります。
まずはcvsupを使って目的のFreeBSDのソースを取得します。

> su
# cp /usr/share/examples/cvsup/stable-supfile /etc
# vi /etc/stable-supfile

として、stable用のsupfileを編集します。
まず、接続するCVSサーバーを自分の近い所に変更します。
例えば、

*default host=CHANGE_THIS.FreeBSD.org

*default host=cvsup2.jp.FreeBSD.org

とします。
次に、

*default release=cvs tag=RELENG_4

のtagの部分を自分の目的のFreeBSDのバージョンに変更します。
5-CURRENTならばHEADあるいは.、5.0-RELEASEならばRELENG_5_0_0_RELEASE、5.0-RELEASE-p*ならばRELENG_5_0、4-STABLEならRELENG_4、4.7-RELEASEなら、RELENG_4_7_0_RELEASE、4.7-RELEASE-p*ならRELENG_4_7と言った具合です。
ここではセキュリティFixされたFreeBSDの配布CDが欲しいため、RELENG_4_7としたことにします。

*default release=cvs tag=RELENG_4_7

次に取得するソースのカテゴリですが、4-STABLEにした時にはsrc-allをコメントアウトして必要なものだけを取得しましたが、今回は配布CDを作るためにすべて取得する必要があります。
よって、src-allをコメントアウトせずにそのままにします。
これで編集は終了ですが、一応これらの設定をしたstable-supfileを以下に掲載しておきます。

*default host=cvsup2.jp.FreeBSD.org
*default base=/usr
*default prefix=/usr

*default release=cvs tag=RELENG_4_7
*default delete use-rel-suffix

*default compress

src-all

編集できたら、早速cvsupでソースを同期します。

# cvsup -g /etc/stable-supfile

ソースが同期できたら、次はCVSレポジトリを取得します。
CVSレポジトリというのは、要するにFreeBSDのこれまでの修正等はCVSというシステムで管理しているのですが、そのCVS全体のログだと理解してください。
例えば、/usr/src/release/Makefileというファイルが何時にどの部分が変わったという情報を全て持っていて、どの日付の/usr/src/release/Makefileを取得するといったことが簡単にできるのがCVSなので、それを元にRELENG_4はどの修正、RELENG_4_7はどの修正と、1つのファイルから目的のバージョンのファイルを取得するための元のデータということです。
詳しくは検索等で調べてもらうのが良いと思います。

CVSレポジトリを取得するのにも、やはりcvsupを用います。
用意するsupfileは、cvs-supfileがひな形として使えますので、これを編集して使用することにします。

> su
# cp /usr/share/examples/cvsup/cvs-supfile /etc
# vi /etc/cvs-supfile

編集する箇所ですが、いつも通り取得するサーバーを変更します。

*default host=cvsup2.jp.FreeBSD.org

次にCVSレポジトリを保存する場所を指定します。
ports-supfileやstable-supfile等ではここが/usrとなっていて、取得したものがその下に保存されるのですが、CVSレポジトリを/usrの下に保存したら/usr/ports、/usr/srcがえらいことになってしまいますので、別の場所に保存する必要があります。
cvs-supfileの標準では/home/ncvsとなっているので、問題ある場合は各自変更してください。

*default prefix=/home/ncvs

後は取得するコンテンツを指定します。
ただ、細かく指定するとmake releaseの途中でエラーが出てしまうことがあるので、今回は標準的な配布CDを作成することを目的としていますので確実に行きたいと思います。

必要なのは以下の4つです。

cvsroot-all
src-all
ports-all
doc-all

ちょっと前まではcvsroot-allは必要無かったのですが、つい1ヶ月ほど前にCVSレポジトリの構成が変更されたため、現在はcvsroot-allが必要になっていますので書き加える必要があります。
またcvs-supfileにはwwwが書いてありますが、make releaseに直接は使いませんので削ってしまっても問題ありません。
これで設定は終わりですが、一応これらの設定を記述したcvs-supfileを以下に掲載しておきます。

*default host=cvsup2.jp.FreeBSD.org
*default base=/usr
*default prefix=/usr/home/ncvs

*default release=cvs
*default delete use-rel-suffix

*default compress

cvsroot-all
src-all
ports-all
doc-all

準備出来たら早速cvsupしてCVSレポジトリを取得します。

# cvsup -g /etc/cvs-supfile

これで下準備は終わりです。

make release

これからmake releaseして配布ファイルを作成するわけなんですが、make releaseの前にmake buildworldしてコンパイル済みのバイナリを作成する必要があります。
make releaseはこのバイナリをmake releaseする先にmake installworldする所から始まるので、まずはmake buildworldする必要があるのです。

# cd /usr/src
# make -j4 buildworld

これが終わったらmake releaseします。
make relaseには指定するオプションがいくつかあります。
まずCHROOTDIRに、配布ファイルを置くための場所を指定します。
例えば今回は/home/releaseに置くとします。
次に配布するFreeBSDのバージョンとしてBUILDNAMEを指定する必要があります。
これは、uname -aした時に出るバージョンです。
あとは、CVSレポジトリの位置を指定するCVSROOT、どのバージョンを作成するか指定するRELEASETAGがあります。当然ですがRELEASETAGはbuildworldしたものとバージョンを合わせる必要があります。
これらを指定してmake releaseします。

なお、make releaseにはvnモジュールが必要ですので、kernelで使える状態にしておくか、

# kldload vn

として事前にモジュールをロードしておく必要があります。
これらをふまえてmake releaseは、

# make release CHROOTDIR=/home/release BUILDNAME=4.7-RELEASE-p4-myu. CVSROOT=/usr/home/ncvs RELEASETAG=RELENG_4_7

の様な感じで実行してやります。
これが問題なく終了すれば/home/release/R/ftp以下にFTPツリーが、/home/release/R/cdrom/disc1以下に配布CDのツリーができあがっているはずです。

なおmake releaseの段階でISOイメージを作成する場合は、MAKE_ISOSオプションを指定してやればmake releaseの段階でISOイメージが作成されます。

# make release CHROOTDIR=/home/release BUILDNAME=4.7-RELEASE-p4-myu. CVSROOT=/usr/home/ncvs RELEASETAG=RELENG_4_7 MAKE_ISOS=YES

また、もしmake releaseが途中でエラーが出て終わってしまった場合、エラーの箇所を修正して再度make releaseするとまた膨大な時間がかかってしまいます。
そういう時はmake rereleaseを使います。

# make rerelease CHROOTDIR=/home/release BUILDNAME=4.7-RELEASE-p4-myu. CVSROOT=/usr/home/ncvs RELEASETAG=RELENG_4_7

としてやれば、エラーが出た部分からmake releaseしてくれるので作業時間が非常に少なくなって便利です。

これで配布ファイルの作成自体は終わりですが、この状態だとpackage等がありませんので、次はpackage等を入れて配布CDを作ってみたいと思います。


配布CDの作成


もどるにゅ

トップにもどるにゅ