VMware上のLinuxにシリアルコンソールで接続する
ちょっとした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
以上、これだけ。たごーさんの記事のおかげで、手間のほとんどをはぶくことができた。