initramfs

FC5(rawhideだけど)のkernelのrpmを調べてみると、


#rpm -q --scripts --package kernel-2.6.16-1.2224_FC6.x86_64.rpm
postinstall scriptlet (using /bin/sh):
if [ `uname -i` == "x86_64" ]; then
if [ -f /etc/sysconfig/kernel ]; then
/bin/sed -i -e 's/^DEFAULTKERNEL=kernel-smp$/DEFAULTKERNEL=kernel/' /etc/sysconfig/kernel
fi
fi
[ ! -x /usr/sbin/module_upgrade ] || /usr/sbin/module_upgrade 2.6.16-1.2224_FC6
/sbin/new-kernel-pkg --package kernel --mkinitrd --depmod --install 2.6.16-1.2224_FC6
こんなかんじ。で、/sbin/new-kernel-pkgを見てみると(scriptファイルだからcatで読める)mkinitrdを呼んでるから、今度はmkinitrdを見てみる(これもscript)。わかったことは、/etc/fstabと/etc/modprobe.confをmkinitrdは読み込んでinitrd(ほんとはinitramfs)を作ってるってこと。たしかにkernelのrpmをinstallしたときは/etc/modprobe.confがなかった。で、まぁ、/etc/modprobe.confをちゃんと作ってからreinstallすればいいんだけど、ちょいとめんどいから、

mkinitrd --with=raid0 --with=raid1 --with=raid5 --fstab=/mnt/etc/fstab initrd.gz `uname -r`
としてinitrdだけ作成した。これにちゃんとraid[015].koとrsata_nv.koとかが含まれていることを確認するには、今回作ったinitrdはcpioファイル形式であることに注意すると、

gunzip initrd.gz
cat initrd | cpio --list
でファイル一覧が見れる。ループバックでマウントしようとしてもだめです(ここでけっこうはまった。。。)。
このinitrdを使ったらちゃんと起動できました。ただ、いろいろインストールされてないパッケージがあったり、設定もほとんどなされていないので、起動中にいろいろエラーが出るけど。ま、とりあえずOK.


今日のまとめ。
・kernelのrpmのinstallは/etc/modprobe.confを作ってから。
・今のinitrdファイルはcpio形式。