久しぶりにVMware上のlinuxでシリアルコンソールを使ったので,手順をメモ.
以下,
についてそれぞれ書きます.
シリアルコンソールが使えると
等が簡単に行えるようになります.
ホスト/ゲスト側が両方とも Linux の場合
ホスト(Linux) -- socat ←→ 名前付きパイプ ←→ VMware ←→ ゲストOSのシリアルポート
という形で接続します.
ゲスト側Linuxの設定
シリアルコンソールを使うためには,linux カーネルをそれ用にコンパイルしておく必要がある.
具体的には以下の設定が必須
- CONFIG_SERIAL_8250=y
- CONFIG_SERIAL_8250_CONSOLE=y
あとは boot ローダで,カーネルの起動オプションを少し変更するだけ.
ブートローダが grub2 の場合は, grub2の設定ファイル /etc/default/grub に
GRUB_TERMINAL="serial console" GRUB_SERIAL_COMMAND="serial --unit=0 --speed=38400" GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,38400"
と書いて, grub.cfg を再生成する.
$ sudo /usr/sbin/update-grub
redhat系なら
$ sudo /usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg
設定の確認は,再起動後
$ cat /proc/cmdline
とする.console=tty0 console=ttyS0,38400 という文字列が含まれていれば成功です.
次に仮想マシンの設定.
仮想マシンの設定画面で
- シリアルポートを追加
- 名前付きパイプを選択
- パイプのファイル名はとりあえず /tmp/vmware-serial-port を設定
- endPoint はサーバを選択
する.
面倒だったら 設定ファイル *.vmx に以下の4行を追加する.
serial0.present = "TRUE" serial0.fileType = "pipe" serial0.fileName = "/tmp/vmware-serial-port" serial0.pipe.endPoint = "server"
以上でゲスト側の設定はおしまい.
ホスト側 Windows ゲスト側 Linux の場合(めんどくさい方法)
(シリアルポートの出力を眺めるだけなら,もっと簡単な方法があります.詳細は後半を見て下さい)
ざっとネットで調べた限りでは,シリアルポートで入出力をする場合はこの方法が定番のようです.
ホストOS(Windows) -- TeraTerm ←→ Named Pipe TCP Proxy Utility ←→ 名前付きパイプ ←→ VMware ←→ ゲストOS(Linux)のシリアルポート
ゲスト側設定
ゲスト側Linuxの設定は,上記と同じでOK.
仮想マシンの設定は少し注意が必要で
- [名前つきパイプを使用]
- パイプ名は "\\.\pipe\vmware-serial-port "
- [名前付きパイプはサーバー]
- [接続先はアプリケーション]
を選択すること.
ホスト側設定
ホスト側は Tera Term と Named Pipe TCP Proxy Utility を組み合わせて使います.詳細は…省略!
- Tera Term (http://sourceforge.jp/projects/ttssh2/)
- Named Pipe TCP Proxy Utility (http://shvechkov.tripod.com/nptp.html)