VirtualBoxをいちいち立ち上げるのが面倒なので、windowsのservice + coLinuxみたいに自動起動がしたい。
それには今まで避けてきたlaunchdを使わなくてはいけない。
Mac OS X 10.4(Tiger)から標準になったlaunchdは要はinit + inetd + daemontoolと理解。システム起動時にroot権限で動くLaunchDaemonsとログインしたときにユーザー毎に動くLaunchAgentsがあるそうです。(厳密には少し違うけど)
それぞれ指定のディレクトリにplist(プロパティリスト)というXMLの設定ファイルを作って、launchctlでloadするという流れ。
VirtualBoxはCUIでもVBoxManageコマンドでほとんどの操作が出来るのでLaunchAgentsで、
% VBoxManage startvm "仮想マシン名" --type headless
が動くようにしてやれば良いハズ。
~/Library/LaunchAgents/org.komagata.balloon.virtualbox-debian.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>Label</key>
<string>org.komagata.balloon.virtualbox-debian</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/VBoxManage</string>
<string>startvm</string>
<string>debian</string>
<string>--type</string>
<string>headless</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
基本、ProgramArgumentsにargvを渡すだけみたいです。
% launchctl load ~/Library/LaunchAgents/org.komagata.balloon.virtualbox-debian.plist
これで設定が読み込まれたので再起動してみる。
すると立ち上がってはいるけど何故か"中断"の状態。
OnDemandをfalseにすると立ち上がるが、監視して終了しても自動的に起動する状態になるので、固定でメモリを確保するVirtualBoxでは気軽に落としたりしたいのでちょっと面倒。メモリが2Gなので増設すれば256MBぐらい気にならなくなるかな?
参照:Undocumented Mac OS X:第1回 initを置き換えるlaunchd【前編】 (1/3) - ITmedia エンタープライズ