2014-09-04 (木)
* 無償版ライセンスのESXiで仮想マシンのシリアルコンソールを使う
ゲストOSのネットワークやファイヤーウォールの設定をいじったりするときに,SSHログインだけだと不安です.最悪 vSphere Clientからコンソールにアクセス出来ますが,vSphere Clientがすぐ使えない場合(Windowsマシンが無いとか)もあるので可能なら避けたいところ.
というわけでゲストOSのシリアルコンソールにアクセスしたいわけですが,無償版ESXiはネットワークを介したリモートシリアルポートが使えないです.設定はできるので,使えるものとばかり思って試行錯誤したのですが,起動時のログをよく見ると,ライセンスが必要ですとメッセージが出ていました.
解決策を探したところ,仮想マシン間でブリッジはできるという記述が.
http://qiita.com/albatross/items/aa94951f70557b5c677e
これで解決ですが,ゲスト間での接続だと作業用のVMを起動しなければいけないので,ちょっと面倒.
そこで,名前付きパイプはどこに作られるのか探したら,
/var/run/vmware 以下に作られているのを見つけました.
最初は,mkfifoで名前付きパイプが作成されるものだと思ってファイルをfindしていたのですが,unix domain socketでした.
シリアルコンソールを使うためには上記サイトにある通り,ゲストのOSのinittabか,gurubとかの設定でカーネルオプションを追加する必要があります.
あとは,vmxファイルを修正するなり,vShpere Clientとかで色々してシリアルポートを追加してください.名前付きパイプをサーバとして作る必要があります.
vmxだと以下の様な感じ.
serial0.present = "TRUE" serial0.yieldOnMsrRead = "TRUE" serial0.fileType = "pipe" serial0.fileName = "vm01-console" serial0.tryNoRxLoss = "FALSE"
たとえば,vm01-consoleという名前でゲストにシリアルポートデバイスを追加しておき,ESXiのシェル上から,
nc -U /var/run/vmware/vm01-console
で接続できます.
名前付きパイプを作れるディレクトリは設定で制限されてるので「/hoge」とかは怒られます.ただし,/vmfs/volumes/とかは大丈夫なので,フルパスで,/vmfs/volumes/datastore1/vm01/console とかにするのもアリかもしれません.
これでネットワーク設定もvSphere Client不要になりました.
余談ですが,名前付きパイプどこに作られるのかネットで探してもなかなか出てこなかったので,試しに proxysvc/service_list すると,他のサービスが/var/run/vmwareにパイプ作ってる感じだったので,なんとなく試したら当たりでした.netstatで探そうとしたら,ESXiにはnetstat無いんですね...
そもそもncコマンドがあるなら,
mkfifo /tmp/vm01fifo nc -U vm01-console < /tmp/vm01fifo | nc -l 10001 > /tmp/vm01fifo
とかしてしまうと良いことあるかも?