Mounting root file system ... /init: line 221: arithmetic syntax error
Debianサーバ無限ポチポチのお作法 - NoiseFactoryを参考にDebian sidでVirtFSを用いた仮想環境を設定しようとしたところ、起動中に
Begin: Mounting root file system ... /init: line 221: arithmetic syntax error 以下略Kernel panic
となり停止してしまった。起動時のコマンドは
sudo kvm -virtfs local,path=./debian9p,mount_tag=debian9p,security_model=none \ -kernel ./debian9p/vmlinuz -initrd debian9p/boot/initrd.img-3.2.0-4-amd64 \ -append "rootfstype=9p rootflags=trans=virtio root=debian9p"
である。
initの中で停止しているのでinitrdを展開して追いかけてみる。/initの221行目は
parse_numeric ${ROOT}
であった。ROOTはカーネルのコマンドラインオプションとして渡しているrootパラメータ、つまりdebian9pである。
さらに/scripts/functionsのparse_numericを見てみる。
# lilo compatibility parse_numeric() { case $1 in "") return ;; /*) return ;; [0-9]*:[0-9]*) minor=$(( ${1#*:} )) major=$(( ${1%:*} )) ;; [A-Fa-f0-9]*) value=$(( 0x${1} )) minor=$(( ${value} % 256 )) major=$(( ${value} / 256 )) ;; *) return ;; esac (略) }
つまり、最初の文字が[A-Fa-f0-9]のどれかであればそれを16進数として認識しようとしてしまうわけだ。これはちょっと問題ではないだろうか。書いた人は正規表現の[A-Fa-f0-9]+のつもりで書いたのではないかと思いたくなる条件だ。
bashならともかくbusyboxではパターンマッチではそれを表現するのは無理だが、grepに投げて追加の判定をしたほうがいいのではなかろうか。
とりあえず最初の問題のアドホックな解決策としては、mount_tagを[A-Fa-f0-9]で始まらないような適当な名前に変えればよい。無事起動することが確認できた。