カーネルを再構築する必要があったので、ついでにシステムも再構築(というか最新版に)してみた。その備忘録。
本作業をするにあたって、AirKnights(by みゅ。さん)の記事を、かなり参考にさせて頂きました(他にもFreeBSD関連の役立つ記事を沢山公開されてます。興味のある方は、ゴーゴゴー!)。
本記事の内容は現在のFreeBSDのシステム再構築には適合しない可能性があります。現在の情報については、FreeBSDハンドブックの内容をご参照下さい。
cvsupを用いて行う。
/usr/share/examples/cvsup/stable-supfile
をコピーし、自分の環境に合せて書き換えて、cvsupをする。
$ cp /usr/share/examples/cvsup/stable-supfile /etc/release-supfile $ cd /etc $ su # chmod 644 release-supfile # emacs release-supfile *default host=CHANGE_THIS.FreeBSD.org → cvsup2.jp *default release=cvs tag=RELENG_6 → RELENG_6_0 # cvsup -g /etc/release-supfile
変更箇所は、前者がソースの更新に使うサーバ、後者が更新するシステムのバージョンを表す。今回は6.0-RELEASEを更新するので「RELENG_6_0」となる。「RELENG_6」のままだと、6.x-RELEASEの更新となってしまうので要注意。最初、この設定で更新したら、6.1-PRERELEASEにアップデートされてしまい、orzとなった。
独自設定のカーネルにしたい場合は、コンフィグファイルの雛形 /usr/src/sys/i386/conf/GENERIC をコピーし、自分の環境に合せて書き換える。カスタマイズしたコンフィグファイル名は、マシン名を大文字にしたものにするのが慣例っぽい。俺は 慣例+年月日 にした。無論、デフォルトのカーネル(GENERIC)でよければ、この作業は必要ない。
# cd /usr/src/sys/i386/conf # cp GENERIC YGGDRASIL20060330 # emacs 最低限 ident GENERIC を ident コンフィグファイル名 に書き換える。
オプションの依存関係(コンフィグファイルのコメントに「require hoge」と書いてある)には注意しよう。さもないと、コンパイルで失敗する。
尚、VIA C3(Samule 2)の場合「cpu I686_CPU」にしないと、CPU class not configured というカーネルパニックが発生するので要注意!!(ただ、C3はCMOVをサポートしていないので、厳密にはi586クラス。portsなどをi686指定でコンパイルすると、未定義命令が入って落ちることがあるとか。カーネルのコンパイルについては、ログを見るとI686_CPUと設定しても -march=pentium となってるので問題にはならないのかな。詳しい事はわかりません)。
いくつかスレッドを立ててやると、早く終わるらしい(4スレッドが一番効率的だとか)。
# cd /usr/src # make -j4 buildworld
コンパイル時間はマシン性能に左右される。参考までに VIA C3(800MHz) + 256MB では6時間程かかった。
カスタマイズしたカーネルを作る場合、KERNCONFでコンフィグファイル名を設定する。特に設定がなければ、GENERICのカーネルが作られる。
# make KERNCONF=YGGDRASIL20060330 buildkernel
コンパイル時間はマシン性能に左右される。参考までに VIA C3(800MHz) + 256MB では1時間程かかった。
コンパイルが無事に終わったら、新しいカーネルをインストールする。カスタマイズしたカーネルの場合は、上で指定したKERNCONFを再度指定しなければならない。
初めてカーネルを再インストールする際に、GENERICのカーネルのバックアップを取っておくと良い。
# cp -Rp /boot/kernel /boot/kernel.GENERIC (最初の1度だけ) # make KERNCONF=YGGDRASIL20060330 installkernel
シングルユーザーモードで起動し、作業を行う。
まず、起動項目選択画面(1.Boot FreeBSD with ACPI とか、そんなメニューがある画面)で、プロンプトへ抜けるメニュー(6.0-RELEASEでは6番)を選択する。そして、以下のコマンドでシングルユーザーモードでOSを起動する。
OK boot -s
カーネルがうまく出来ていないと、この段階でこける。その時は上のコマンドに代わって、以下のコマンドでGENERICなカーネルを起動し、対策を図る。
OK boot kernel.GENERIC
次に、シェルのパスが聞かれるので入力。その後、パーティションをマウントし、システムをインストールする。
Enter full pathname of shell or RETURN for [/bin/sh] : /bin/sh # sbin/mount -a # su # cd /usr/src # make installworld