カーネルの再構築

以下の作業中にカーネルの再構築が必要になったので、方法を調べて実施する。
jail内でのmount - 英語とプログラミング気まぐれ日記

現在のカーネルのバージョンを確認しておく

この作業は必須ではない。念の為。

$ sysctl kern.version
kern.version: FreeBSD 7.3-RELEASE-p2 #0: Mon Jul 12 19:04:04 UTC 2010
    root@i386-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC

使用されているカーネルモジュールを調べる。

$ kldstat 
Id Refs Address    Size     Name
 1    5 0xc0400000 a220cc   kernel
 2    1 0xc0e23000 6a500    acpi.ko
 3    1 0xc277a000 4000     nullfs.ko
 4    1 0xc27b6000 4000     fdescfs.ko

カーネルモジュールは /boot/kernel/ディレクトリ 以下に大量に存在するが、現在使用されているのは"acpi"、"nullfs"、"fdescfs"だけであることが分かった。

これらのモジュールだけコンパイルされるよう設定する

カーネルの設定ファイルを編集する。
ここでは、GENERICカーネルの設定ファイル "/usr/src/sys/i386/conf/GENERIC" をコピーして編集することにする。

GENERICカーネルの設定ファイル(GENERIC)(CUSTOM_NULLFS)にコピー
$ cd /usr/src/sys/i386/conf/
$ sudo cp GENERIC CUSTOM_NULLFS

コピーしたファイルを編集。
kldstatで調べたモジュール名を空白区切りで指定する。
$ sudo vim CUSTOM_NULLFS
makeoptions  MODULES_OVERRIDE="linux acpi/acpi nullfs fdescfs"
    ※ モジュール名は /usr/src/sys/modules 以下にあるディレクトリ名らしい

カーネルのコンパイル

configの実行
コンパイル用のディレクトリが作成される
$ cd /usr/src/sys/i386/conf/
$ sudo config CUSTOM_NULLFS

コンパイル用のディレクトリに移動
$ cd /usr/src/sys/compile/CUSTOM_NULLFS

コンパイルの実行
$ sudo make depend
$ sudo make

現在のカーネルと入れ替える

$ sudo make install

再起動して、カーネルが変更されていることを確認。

$ sysctl kern.version
kern.version: FreeBSD 7.3-RELEASE-p4 #0: Sun Apr  3 20:26:57 JST 2011
    root@test-freebsd.dip.jp:/usr/src/sys/i386/compile/CUSTOM_NULLFS

おお、うまくいったみたい。