実際私が現在追跡しているのはnetbsd-3ブランチなので、正確な題名を付けるとしたら「NetBSD 3.0の追跡」になるかもしれないけど、たいしてやることに変わりがないので題名はcurrentの追跡とした。
まあ、NetBSDのホームページ自体にもcurrentの追跡に関する文献はあるけれども、何となくいろんな要素が混じりあってわかりづらいので、一応私がやっている方法でも紹介しようかと。
ちなみに私はNetBSD currentでサーバを立て始めたんだけど、それは別に私が好奇心旺盛でスリルを味わうことを楽しみにしていたわけではなく、新しく買ったサーバマシンが型が新しすぎてNetBSD 2.0が動かなかったという悲しい経緯による。まあそれなりに勉強になったし、build & installはオープンソースの基本なのでどのみち通る道だったのだと思うけどね。
それで実際の作業についての話。まあまずは何はともあれソースがなければ始まらないので、ソースを取ってくるところから。多分ソースはCVSリポジトリから取るんでいいと思う。anoncvsの負荷がでかいってメーリングリストで問題になっていたけど、毎回FTPっていうのも面倒だし、やっぱり前のバージョンとでdiffが使えると便利なんで。でも1日1回しかupdateしないとか、思いやりは必要かもしれない。
ソースを入れるディレクトリは伝統に従って/usr/srcにすることにして、まずはrootで/usrにsrcを作る。で、オーナーを自分の通常アカウントに変えるかパーミッションを775に変える。個人的には後者の方が好みだが、wheelグループが自分だけならどっちも同じ。
# mkdir /usr/src
# chmod 775 /usr/src
そうしたらrootは抜けて、/usrに移動してからcvsでcheckoutする。サーバはマスターでいいと思う。日本のミラーは落ちていることが多い気がするし、日本を捨てると結局距離的にマスターが一番近い(と思う)。あと一応sshを使うことにする。ていうか普通CVS_RSHってすでにsshになってるよね・・・。 ちなみにシェルは勝手にzshを想定する。
% export CVS_RSH=ssh
% cd /usr
% cvs -q -z3 -d anoncvs@anoncvs.netbsd.org:/cvsroot \
checkout -rnetbsd-3 -P src
まあオプションの指定は比較的どうでも良いけど(-d以外)。でも-z3はやっとかないとかなり時間がかかるかもしれない。-rnetbsd-3
はnetbsd-3ブランチを指定しているので、currentを追いたければこの部分は-A
とする。スペースの都合上バックスラッシュ(もしくは円記号)を使って改行をしたけど、別に1行で書ければそれでOK。
ソースが落ちてきたらビルドをする。これはbuild.shスクリプトを実行するだけなので簡単だけど、多少ファイルを置くためのディレクトリを作成しておいた方がいいかもしれない。私はいつも/usr/objにオブジェクトファイルを、/usr/toolsにビルドツールを、/usr/buildにディストリビューションを入れているので、ここからはそれを前提に進める。
とりあえずは3つのディレクトリの作成と、パーミッションの変更。
# cd /usr
# mkdir build obj tools
# chmod 775 build obj tools
そうしたらあとはbuild.shを実行するだけ。まずはカーネルから作成。
% ./build.sh -j2 -D /usr/build -O /usr/obj -T /usr/tools \
-U -u kernel=GENERIC
とりあえずコンフィギュレーションファイルはGENERICを指定しちゃったけど、実際に私はGENERICは使っていない。カーネルコンフィギュレーションについてはまた今度書くつもり。
そして次にユーザランドの構築。
% ./build.sh -j2 -D /usr/build -O /usr/obj -T /usr/tools \
-U -u distribution
多分distributionじゃなくてbuildでも十分な気がするんだけど(あまりよく調べてない)、何となくdistributionで作っている。
正常にビルドできたらあとはインストール。ビルドできなければ別に自分が悪いわけではなく、ソース自体が不整合を起こしていることも多いので、cvsでupdateをかけながら気長に待とう。インストールについては、まずはカーネル、その後にユーザランドのインストールを行う。
# cp /usr/obj/sys/arch/i386/compile/GENERIC/netbsd /
# cd /usr/src
# ./build.sh -j2 -D /usr/build -O /usr/obj -T /usr/tools \
-U -u install=/
ユーザランド構築後に、postinstallでfixをかけろとか言われることがあるので、言われたら言われた通りにかける。カーネルへのパスの途中の「i386」の部分は、自分の使っているマシンの種類になる。
できれば最後にetcupdateもかけておいた方がいいと思う。これはただルートでetcupdate
コマンドを実行して、あとは対話形式で進める。ただしただ単にetcupdate
をかけると途中で止まってしまうので、多少細工をしておく必要がある。
% cd /usr/src/gnu/usr.sbin/sendmail/cf/cf
% make TOOLDIR=/usr/tools etcsubmit.cf sendmail.cf
このときに作ったファイルは以後cvsでupdateかけた時なんかに表示されてしまうけど、しょうがないので無視する。こうしておくとetcupdateを正常にかけることができる。
etcupdateをかけた場合には最後に
% rm /usr/src/etc/MAKEDEV
として、MAKEDEVを消しておく。これはrootのパーミッションで残るので、次回ユーザ権限でビルドするときに残っているままだとエラーになる。
かなり説明が雑だけど、この手順を踏めば完全にシステムを最新に保つことができる。「もうやってるよ」という人でも、etcupdateのところは役に立つかもしれない(まぁ、ML読んでた人なら知ってるだろうけど)。