NetBSD grub経由のシリアルコンソールでのbreak

わおー,やっとわかったー。

Xenするためには,現状ブートローダをgrubにする必要がある。 それと並行してリモート管理を確実にするために シリアルコンソール化したいのだが, これまでgrubにするとtipからBreak信号送ってもDDBプロンプトに落ちてくれな くて,あやうい操作しがちなXenホストのDOM0がハングったときに対処できなく てとても不安だった。諦めて長いことほったらかしだったが man ddb(4)したらちゃーんとわかった。これまではgrub側から色々調べてたから 答がみつからなかったのかー。

grubで module (hd0,a)/netbsd console=tty0 みたいに 起動した場合,DDBに落ちるシーケンスを決めるsysctl変数がこんな感じに なっちゃってるのだ。

sysctl hw.cnmagic
hw.cnmagic = \x2b\x2b\x2b\x2b\x2b

なんじゃらほい? デフォルトは \x27\x02 である。 これを設定するには,コマンドラインで生の 0x27 0x02 のコードを 文字列として指定しないといけないようだ。えーと,えーと, zshでやっちゃえー!

zshsysctl -w hw.cnmagic=$'\x27\x02'
hw.cnmagic: \x2b\x2b\x2b\x2b\x2b -> \x27\x02

$'…' というのが16進で文字列を書ける記法ね。 で,tipを繋いだ端末からそれ ~# っとな。

login: ~Stopped at      netbsd:cpu_Debugger+0x4:        popl     %ebp
db>

いえーい。やっとできた。これで常用マシンをXenサーバにできるぞー。 /etc/rc.local でいっか。こんな風。

/bin/zsh -c "sysctl -w hw.cnmagic=\$'\x27\x02'"

キーワード: grub netbsd bsd ブートローダ シリアルコンソール break信号 sysrq ブレーク tip ターミナル カーネルデバッガ