繰り返すカーネルリコンフィグ時にテストカーネルでブートする

今までは、考えるのが面倒でいっぱいモジュールの入ったdebパッケージを作っていた。
しかし、カーネルコンパイル時間がもっとももったいないことに気がついた。
微調整をして、実行するマシンに最適な小さいカーネルでもいいじゃないか。
まずは動かすことが先決。モジュールのいっぱい入ったdebは最後に作ればいい。

ということでカーネルソースを取得する。
ftp://ftp.kernel.org/pub/linux/kernel
ここから最新カーネルを取得する。今回は2.6.23.1を入手し、/usr/srcに展開し、/usr/src/linuxシンボリックリンクをはる。

#cd /usr/src
#wget ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.1.tar.bz2
#ln -s linux-2.6.23.1 linux

リコンフィグに必要なパッケージを取得する

aptitude install libncurses5-dev kernel-package bzip2 modutils module-init-tools initramfs-tools

最小限のパッケージを作るために、menuconfigが参照してしまう/boot/config-2.6.* をリネームし、make menuconfigを実行し、最小限のパラメータを設定する。モジュールは必ずOFFにする。ほとんどのデバイスドライバをOFFすればコンパイル時間は10分程度になる。

#mv /boot/config-2.6.18-5-686 /boot/config-2.6.18-5-686.bak
#cd /usr/src/linux
#make menuconfig
#time make bzImage

できあがったら、grubにいれて早速実験。

現在の/boot/grub/menu.lstから 最初の定義を END DEBIAN AUTOMAGIC KERNELS LIST以下にコピーし、kernel部分を/usr/src/linux/arch/i386/boot/bzImage へ置換する。

## ## End Default Options ##

title           Debian GNU/Linux, kernel 2.6.18-5-686
root            (hd0,6)
kernel          /boot/vmlinuz-2.6.18-5-686 root=/dev/sda7 ro
initrd          /boot/initrd.img-2.6.18-5-686
savedefault

title           Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode)
root            (hd0,6)
kernel          /boot/vmlinuz-2.6.18-5-686 root=/dev/sda7 ro single
initrd          /boot/initrd.img-2.6.18-5-686
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

これを以下のように定義する。

## ## End Default Options ##

title           Debian GNU/Linux, kernel 2.6.18-5-686
root            (hd0,6)
kernel          /boot/vmlinuz-2.6.18-5-686 root=/dev/sda7 ro
initrd          /boot/initrd.img-2.6.18-5-686
savedefault

title           Debian GNU/Linux, kernel 2.6.18-5-686 (single-user mode)
root            (hd0,6)
kernel          /boot/vmlinuz-2.6.18-5-686 root=/dev/sda7 ro single
initrd          /boot/initrd.img-2.6.18-5-686
savedefault

### END DEBIAN AUTOMAGIC KERNELS LIST

title           test kernel
root            (hd0,2)
kernel           /usr/src/linux/arch/i386/boot/bzImage root=/dev/sda7 ro
savedefault

で最後にgrubを再インストールする。
再インストールじゃなくてもいいんだが、今まで動いていたのなら不要。
リブート

#grub-install /dev/sda
#reboot

起動したら test kernelを選択してきちんと立ち上がればOK

繰り返すのはmake menuconfig と time make bzImageのみ。
すごく時間が短縮されるようになった。(make cleanは不要)
コンパイルを含め、たぶん数分の作業となる。

このようにしてカーネルの実験ができるようになる。

で、自信が持てたら debパッケージをつくってインストール。めでたしめでたし。

#cd /usr/src/linux
#make-dpkg clean
#make-dpkg --initrd kernel_image kernel_headers
# cd ..
# dpkg --install *.deb