ちょっとしたkernelのテストをするためにVMwareの環境を作って、シリアルコンソールで接続できるようにした。やり方はRemote Serial Console HOWTOと、たごーさんのシリアルコンソールを仕込んでみるに従った。
VMware上のLinuxでの設定はHOWTOに従う。GRUBを使っているので、menu.lstに以下のようなものを書き加える。
password --md5 $1$..... serial --unit=0 --speed=9600 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console
さらに、kernelのブートパラメータにconsole=tty0 console=ttyS0,9600n8を加えておく。Debian環境ならkopt=にも書いておく。
## ## Start Default Options ## ## default kernel options # [...] # kopt=root=/dev/sda1 ro console=tty0 console=ttyS0,9600n8 # [...] ## ## End Default Options ## title Debian GNU/Linux, kernel 2.6.18-4-686 root (hd0,0) kernel /boot/vmlinuz-2.6.18-4-686 root=/dev/sda1 ro console=tty0 console=ttyS0,9600n8 initrd /boot/initrd.img-2.6.18-4-686 savedefault
次にinittabでgettyを起動する設定をするのだが、サンプルの記述がコメントとして用意されているので、これを生かせばよい。T0のコメントを外す。
# Example how to put a getty on a serial line (for a terminal) # T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100 #T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100
続いてVMware上のマシンのシリアルポートをVMware外部に接続するための設定と、それにアクセスするための準備をする。こちらはたごーさんの記事に従う。
シリアルポートをひとつずつ追加し、Use named pipeを選択、pipeの名前は後で識別しやすいように/tmp/serial-hostname portとした。また、今回このシリアルポートはhostから使うので、This end is the serverおよびThe other end is an applicationを選択。
[The day-to-day thoughts: シリアルコンソールを仕込んでみるより引用] さらに、同記事のスクリプトをほとんどそのまま使わせてもらう。socatパッケージはインストールされていない可能性が高そうなので、これをインストールしておくことを忘れない。
#! /bin/sh
# http://blog.tagoh.jp/archives/id/1271
set -e
if [ $# -eq 0 ]; then
echo "$0 <short hostname>"
exit 1
fi
PORT=$2
if [ "x$PORT" = "x" ]; then
PORT=0
fi
if [ ! -S /tmp/vmware-serial-$1-$PORT ]; then
echo "Unknown hostname"
exit 1
fi
socat unix-connect:/tmp/vmware-serial-$1-$PORT \
pty:link=/tmp/ttyv$1$PORT,raw,echo=0,waitslave &
SOPID=$!
if ls /proc/$SOPID > /dev/null 2>&1; then
while [ ! -h /tmp/ttyv$1$PORT ]; do
sleep 1;
done
cu -l /tmp/ttyv$1$PORT
else
echo failed.
fi
以上、これだけ。たごーさんの記事のおかげで、手間のほとんどをはぶくことができた。