MacのVMware Fusion (2.0.7)のゲストOSのシリアルポートに繋ぎたい
GUIで設定できるシリアルポートは、ホストOS側からはただのファイルにしかみえない。なので、tail -f するぐらいならいいけど、シリアルコンソールとしては使えない。(VMware Fusion 3ではGUIで設定できるんですかね?)
ホスト側にUNIXドメインソケットとして見せるには、設定ファイル(*.vmx)を手で編集する必要がある。既存の「serial0.*」の行を消して、こんなのを追記すればOK
serial0.present = "TRUE" serial0.fileType = "pipe" serial0.fileName = "/tmp/serial-guest01" serial0.tryNoRxLoss = "TRUE" serial0.startConnected = "TRUE"
これで、ゲストOSのttyS0がホストOSでは/tmp/serial-guest01としてみえるようになる。
ゲストOS(ぼくの場合はLinux)のシリアルコンソール(grubとかbootparamとかgettyとか)の設定は、Remote Serial Console HOWTO (JFの日本語訳)を参照のこと。
次に/tmp/serial-guest01にどうやって繋げるか。
socatを使う。古いsocatだと、MacでUNIXドメインソケットのハンドリングができないっぽいので、最新のsocat 1.7.1.2をソールからビルドした。
接続方法その一。socatを使って、UNIXドメインソケットをptyにブリッジして、
(ptyのlink=がなぜか効かないので、デバイスファイル名を確認するため-d -d でデバッグメッセージ表示するようにしている)
$ socat -d -d unix-connect:/tmp/serial-guest01 pty:raw,echo=0
socatが作ったデバイスに、jermやcuなどでptyに接続する。
$ jerm /dev/ttys008
接続方法その二。socatを使って、とあるポートのTCP接続をUNIXドメインソケットにブリッジして、
$ unix-connect:/tmp/serial-guest01 tcp4-listen:1919,reuseaddr
telnetとかncとかで、繋げる。
$ telnet hostOS 1919 $ nc hostOS 1919