Snow Leopard Server (Mac OS X 10.6 Server) 上でVMware Fusionを使って、Cent OSをヘッドレスで運用できるように設定してみました。公式にはサポートされていない方法だと思われるのですが、備忘録がわりにまとめます。
マシン : Mac mini サーバーモデル
メモリ : 4GB
HDD : 500GB * 2 (RAID 1運用)
OS : Mac OS X Server 10.6.6
Guest OS : Cent OS 5.5 64bit
ヘッドレス運用でログインしないでも、仮想PC上のCent OSが動作して、Cent OS上のサービスが動くように設定するのが目的です。
まず、普通にVMware上にCent OSをインストールします。特別なことは特にしません。VMware Toolsもインストールします。次に、仮想PCをサスペンドします。
VMwareには、コマンドラインから仮想PCを動かしたりサスペンドしたりすることができる「vmrun」というプログラムが付属しています。このプログラムは、「/Library/Application Support/VMware Fusion」ディレクトリにインストールされます。
ヘッドレスで、仮想PCを動かすには、次のコマンドがマシン起動時に動くようにします。
vmrun -T fusion start 仮想PCのvmxファイルへのパス nogui
vmxファイルは、Mac上では普通には表示されませんが、仮想PCのファイルを右クリックして、コンテキストメニューから「パッケージの内容を表示」を選択すると表示されます。
このコマンドをマシン起動時に動くようにするため、「/Library/Launch Daemons」ディレクトリに、「private.myserver.plist」などの名前でファイルを作成し、次の内容を入力します。
— ここから —
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>KeepAlive</key>
<false/>
<key>Label</key>
<string>private.myserver </string>
<key>ProgramArguments</key>
<array>
<string>/Library/Application Support/VMware Fusion/vmrun</string>
<string>-T</string>
<string>fusion</string>
<string>start</string>
<string>仮想PCのvmxファイルへのパス</string>
<string>nogui</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>UserName</key>
<string>admin</string>
</dict>
</plist>
— ここまで —
次に、ターミナルで次のように入力して、ファイルの所有者とグループを変更します。
sudo chown root:wheel /Library/LaunchDaemons/private.myserver.plist
ファイル名やPlistファイルの中の「Label」の値は、適時環境に合わせて変更してください。
後は、再起動すればログインしないでもVMwareが実行されて仮想PCが動作します。動いているかどうかは、仮想PC上のサーバーにsshなどで接続して試してください。
あと、一つ注意点があります。VMwareを実行しているサーバーをシャットダウンするときは、必ず、その前に仮想PCをサスペンドするか、シャットダウンしてください。そのまま、VMwareを実行しているサーバーをシャットダウンすると、仮想PCが強制的に電源を切られた状態になります。Tomcat上で動いているプログラムの場合、pidファイルが残ってしまい、起動しなくなります。(もちろん、pidファイルを消せば起動します)
私の場合は、忘れやすいので、スティッキーズで大きく、デスクトップに「仮想PCをサスペンドすること」と書いておいています。
UPDATE
signal.suspendOnHUPという設定とsignal.powerOffOnTERMという設定を使えばシャットダウン時に安全に仮想PCがシャットダウンするようになるようですが、まだ、検証していません。