たまたま立ち上げた VM に仮想コンソールが無くて IP も分からないのでシリアルでコンソールにアクセスする方法。
シリアルコンソールを作る
- なんでもいいので一つシリアルポートを作る。
- Virtual Machine > Setings... > Add Device... > Serial Port > Add...
- とりあえずデフォルトで良い
- Create a file to save the output of the virtual serial port
- Save as: Untitled
- Where: Virtual Machines
- シリアル出力を観察するだけなら、ここで出来たファイルを読むだけで十分。
- コマンド入力をしたいなら VM の vmx ファイルを直接編集して、ファイルの代わりに名前付きパイプにする。
- 変更前
- serial1.fileType = "file"
- serial1.fileName = "xxxx/Untitled"
- 変更後
- serial1.fileType = "pipe"
- serial1.fileName = "/tmp/serial1"
- 変更前
Guest のシリアルを Mac の標準入出力に転送
VM を起動した後で、socat というプログラムで /tmp/serial1 と標準入出力を対応づける。
socat /tmp/serial1 stdout
これでひとまず用はたせる。ifconfig などして IP を調べたりする。IP が分かって ssh 出来るなら下の screen は不要。
Guest のシリアルに screen でアクセス
stdout だと、制御文字がそのまま表示されたり、何かと使いづらいので screen でコンソールにアクセスするには、まず socat で stdout ではなく pty に転送する。-d をつけるとその分デバッグメッセージが増える。
socat -d -d /tmp/serial1 pty
2018/01/11 18:05:05 socat[7475] N opening connection to LEN=14 AF=1 "/tmp/serial1"
2018/01/11 18:05:05 socat[7475] N successfully connected from local address LEN=16 AF=1 ""
2018/01/11 18:05:05 socat[7475] N successfully connected via
2018/01/11 18:05:05 socat[7475] N PTY is /dev/ttys003
2018/01/11 18:05:05 socat[7475] N starting data transfer loop with FDs [5,5] and [6,6]
socat の出力を読むと /dev/ttys003 に割り当てられているようなので、そこに screen で接続する。
screen /dev/ttys003