debianのカーネルを使う

apt-get install linux-image-2.6.21-2-686

した後liloしてrebootした後いきなりKernel panicに襲われた。

Switch to high resolution mode on CPU 0
VFS: Cannot open root device "303" or unknown-block (3,3)
Please add a correct "root=" boot option
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block

あ、そうかdebianized kernelはinitrdを使ってるんだな。ということで/etc/lilo.confをこんな感じに書き換える。

image=/boot/vmlinuz
label=Linux
initrd=/boot/initrd.img
read-only
root=/dev/hda3

そしたら、あっさり起動。DHCP接続もサウンドも問題なし。squashfsも問題なく使用できた。IP MasqueradeもOK。やっぱりパッケージシステムでしっかり管理されていると安心できる♪

と思ったらテレビの録画ができんかった。

v4l2: open /dev/video0: No such file or directory
v4l2: open /dev/video0: No such file or directory
v4l: open /dev/video0: No such file or directory
no grabber device available

ぐぐったらmknodすればいいことがわかったので、

# cd /dev/
# mknod /dev/video0 c 81 0
# ln -s /dev/video0 /dev/video

あっさり録画できた。こんなにとんとん拍子でいっていいのだろうか…

ついでにdebianizeされた最新カーネル2.6.22へ移行してみる。

# apt-get install linux-image-2.6.22-1-686
# lilo

あっさり完了。liloは自分で実行しないといけないようだ。aptもそこまでは面倒見てくれない。

aptは/boot/vmlinuz, /boot/initrd.imgのsymlinkを更新してくれる。けど、/boot/configや/boot/System.mapのsymlinkは更新してくれてない!不備か?

まあカーネルの更新といった大がかりな作業も一発でやってくれるから助かるね。Pentium4用にコンパイルされていないとか勝手にSMPが有効になってるとか不満点は残るのだが…

しまった!debianized squashfsは2.6.18と2.6.21しか対応してない!仕方ないので2.6.21に戻す。まあ2.6.22を消して2.6.21に戻せばいい。消すときにブートできなくなるので危険と言われたが承知でやった。そしてすぐにdpkg-reconfigureしておいたので無事に。

apt-get remove linux-image-2.6.22-1-686
dpkg-reconfigure linux-image-2.6.21-2-686
lilo

><


あら、再起動したら録画ができない!そうか、/devはtmpfsだから再起動したら消えてしまうんだ…
/etc/init.d/udevを読んでると、新しくノードを作る部分を見つけた。そうか、/etc/udev/links.confを書き換えればいいのか。

make_extra_nodes() {
  if [ "$(echo /lib/udev/devices/*)" != "/lib/udev/devices/*" ]; then
    cp --archive --update /lib/udev/devices/* /dev/
  fi

  [ -e /etc/udev/links.conf ] || return 0
  grep '^[^#]' /etc/udev/links.conf | \
  while read type name arg1; do
    [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
    case "$type" in
      L) ln -s $arg1 /dev/$name ;;
      D) mkdir -p /dev/$name ;;
      M) mknod -m 600 /dev/$name $arg1 ;;
      *) log_warning_msg "links.conf: unparseable line ($type $name $arg1)" ;;
    esac
    if [ -x /sbin/restorecon ]; then
      /sbin/restorecon /dev/$name >/dev/null 2>/dev/null
    fi
  done
}

/etc/udev/links.confに以下を追加。/devがtmpfsって今のGNU/Linuxのスタイルなのかな。

L cdr 		/dev/hdd
M video0	c  81 0
L video		/dev/video0