3.ソースを取って来たら機械的にやる作業


無事ソースが取ってこれたらさっそくビルド作業に入ります。念の為、GENERIC カーネルを先に作成しておいて、無事コンパイルができればシステム全体をコンパイルすることにしています。


1 # cd /export/cvsup/src/sys/i386/conf/GENERIC 2 # config -r GENERIC 3 # cd ../../compile/GENERIC 4 # make -j4 depend 5 # make -j4 6 # cd ../../i386/conf 7 # config -r SMPKERNEL 8 # cd ../../compile/SMPKERNEL 9 # make -j4 kernel-depend 10 # make -j4 kernel 11 # cd ../../../ 12 # make -j4 buildwrold 13 # cp -f /kernel /kernel.safe 14 # cd ../sys/compile/GENERIC 15 # make install 16 # cd ../SMPKERNEL 17 # make kernel-install 18 # mv -f /kernel.old /kernel.GENERIC 19 # shutdown -r now ここで再起動 20 # make installworld 21 # cd etc 22 # mergemaster

では解説しよう(←おおげさ)。

1 〜 5 でカーネルソースのディレクトリに入って、まず GENERIC カーネルの再構築を行います。ただし、コンパイルそのものが完了してもインストールは後回しにします。また、私の環境の場合には SMP を有効にしたカーネルも必要なので、そちらも再構築(6〜10)だけしておきます。GENERIC カーネルを作成する際に、カーネルモジュールもすべて作り直しています。
11 で /export/cvsup/src ディレクトリに移り、make buildworld をかけています。このマシンの場合には、make するマシンとインストールするマシンが同一なので、単に make world でも構いませんが、後述の理由により、慎重にやるなら別にすべきです。

13 からは先にカーネルをインストールしています。これは handbook98 にも載っているように、installworld で放り込まれる新しいユーザランドプログラムが、カーネルの新しい機能に依存しているとまずいことが起こる可能性があるためです。カーネルのインストールが終わったら一度再起動して、新しいカーネルで起動します。失敗した時には古い kernel.safe カーネルで起動し、別のタイミングで cvsup するなり、原因が分かっている時にはソースに手を加えるなりすれば、ダメージは最小限で食い止められます。

さて、私のマシンは SMP 構成なので、モジュールは GENERIC カーネル作成時に全部作っておいて、別途 SMP を有効にしたカーネルを作成し、最初に作ったカーネルを後から /kernel.GENERIC に rename しています。その関係で、動いていたことが確実な古いカーネルはそのままだと消え去ってしまうので 13 でわざわざコピーを取っています。

20 で installworld しています。実際にはシングルユーザモードで起動すべきでしょう。最後の mergemaster では /etc や /root の下の設定ファイルを更新するかどうか尋ねられます。私の場合には、 /root/.cshrc や /root/.login、/etc/group 以外はほとんど新しいファイルに置換してしまいます。/etc/group は merge することが多いです。心配だったらどこか別の名前で取っておくことをお薦めします。

この作業を、ソースをアップデートする度に繰り返すことになります。

さて、リブートして uname -r としてみましょう。


% uname -r 4.5-STABLE

このように表示されれば、めでたしめでたしというわけです。



←前へ      ↑戻る       次へ→