VirtualBox 自動起動
ホストOSが起動した時に、ゲストOSも自動的に起動して欲しい!そう思ってやってみました。
動作確認は Ubuntu 12.04 LTS および Ubuntu 13.04 で行なっています。
- VirtualBox 本家からダウンロードしてインストールした場合
- Ubuntu 13.04 で apt-get でインストールした場合
- Ubuntu 12.04LTS で apt-get でインストールした場合
の順番に説明します。たぶん、最初のが正式?なやり方。
本家からダウンロードする場合
http://www.virtualbox.org/manual/ch09.html#autostart-linux に記載があるのですが、VirtualBox 4.2 から autostart に対応しています。
一応、Ubuntu でやってみましたが、同じやり方でほぼすべてのディストリビューションで動くはず。
インストール方法
https://www.virtualbox.org/wiki/Downloads のページに行き、 自分のディストリビューション用のパッケージをダウンロードしてきて、インストールする。 (現時点では VirtualBox 4.2.12 for Linux というのがダウンロードできるようだ。)
設定方法
$ sudo -i
# mkdir -p /etc/vbox/autostart_db
# chmod 1777 /etc/vbox/autostart_db
# echo "default_policy = allow" > /etc/vbox/autostart.cfg
みたいな感じで、データベースディレクトリ /etc/vbox/autostart_db およびコンフィグファイル /etc/vbox/autostart.cfg を作ります。
名前は必ずしもこの通りでなくてもいいです。
後で VBOXAUTOSTART_DB 変数と VBOXAUTOSTART_CONFIG 変数にこれらのパスをセットするので。
/etc/vbox/autostart_db ディレクトリは一般ユーザーが設定ファイルを作成したり、削除したりするので、全員に書き込み権限を与えます。
ただし、他のユーザーの設定ファイルを勝手に削除できないように、sticky ビットを立てておきます。
/etc/vbox/autostart.cfg のコンフィグファイルは
# Default policy is to deny starting a VM, the other option is "allow".
default_policy = deny
# Bob is allowed to start virtual machines but starting them
# will be delayed for 10 seconds
bob = {
allow = true
startup_delay = 10
}
# Alice is not allowed to start virtual machines, useful to exclude certain users
# if the default policy is set to allow.
alice = {
allow = false
}
みたいな感じでユーザーごとに設定することもできるが、とりあえず
default_policy = allow
の1行だけ書いておけば動きます。
次に、 /etc/vbox/vbox.cfg (または /etc/default/virtualbox) というファイルを作って、データベースディレクトリと設定ファイルへのパスを追加します。
VBOXAUTOSTART_DB=/etc/vbox/autostart_db
VBOXAUTOSTART_CONFIG=/etc/vbox/autostart.cfg
みたいに追加します。
続いて、ユーザーごとの設定をします。
$ VBoxManage setproperty autostartdbpath /etc/vbox/autostart_db
$ VBoxManage modifyvm VM_NAME --autostart-enabled on
とします。 (VM_NAME の部分は動かしたい仮想マシン名に置きかえてください。)
上記をすると、 ~/VirtualBox VMs/VM_NAME/VM_NAME.vbox に以下のように Autostart enabled の設定が書き込まれます。
<AttachedDevice passthrough="false" type="DVD" port="0" device="0"/>
</StorageController>
</StorageControllers>
+ <Autostart enabled="true" delay="0" autostop="Disabled"/>
</Machine>
</VirtualBox>
さらに /etc/vbox/autostart_db/ 以下に USER_NAME.start というファイルが作られ 中身は 1 が書かれています。
ファイルの中身は、自動起動する仮想マシンの台数を表しています。
もう一台 --autostart-enabled on すると 2 になります。
中身が 0 になるとファイル削除されます。
VM_NAME.vbox とか /etc/vbox/autostart_db/ 以下のファイルを直接いじると辻褄が合わなくなるので、理屈を理解しないうちは
$ VBoxManage modifyvm VM_NAME --autostart-enabled on
とか
$ VBoxManage modifyvm VM_NAME --autostart-enabled off
とかコマンドで操作するのがよいです。面倒ですけどね。。
ちなみに
$ VBoxManage modifyvm VM_NAME --autostop-type acpishutdown
として autostop の設定もすることはできますが、現時点では autostop は動かないらしい。。
以上で、設定は完了です。
再起動すると、VirtualBox も自動起動するはず、、、と思ったら起動しない。
ちょっと落とし穴がありました。
/etc/init.d/vboxautostart-service の中身を見てみると
vboxdrvrunning() {
lsmod | grep -q "vboxdrv[^_-]"
}
のように vboxdrv モジュールがロードされているかどうかを確認するコードがあります。
vboxdrv をロードしているのは /etc/init.d/vboxdrv です。
つまり、 /etc/init.d/vboxdrv より後に /etc/init.d/vboxautostart-service が実行されないといけません。
/etc/rc2.d/ の下を ls -l で見てみると、
S20vboxautostart-service -> ../init.d/vboxautostart-service
S20vboxdrv -> ../init.d/vboxdrv
となっています。怪しいな。。
そこで S20vboxdrv を S19vboxdrv にリネームしてみました。
S19vboxdrv -> ../init.d/vboxdrv
S20vboxautostart-service -> ../init.d/vboxautostart-service
これで再起動すると、、バンザーイ。動きました。
/etc/init.d/virtualbox は簡単なシェルスクリプトなので読んでみると、起動時のシーケンスは
/etc/init.d/vboxautostart-serviceを実行/etc/vbox/vbox.cfgと/etc/default/virtualbox読み込む/etc/vbox/autostart_db/*.startを見て、ユーザーを確認- ユーザーごとに
/usr/lib/virtualbox/VBoxAutostartを実行。引数に/etc/vbox/autostart.cfgを渡す
という感じになっているようです。
Ubuntu 13.04 で apt-get でインストールした場合
Ubuntu 13.04 で
$ sudo apt-get install virtualbox
でインストールした場合です。
この場合、VirtualBox4.2.10 がインストールされますが、本家サイトからパッケージをダウンロードしてきた場合と、 etc ファイルの構成がかなり異なります。
本家パッケージをインストールしたときにあった
/etc/init.d/vboxautostart-service/etc/init.d/vboxballoonctrl-service/etc/init.d/vboxdrv/etc/init.d/vboxweb-service/etc/vboxディレクトリ
が、Ubuntu 13.04 で apt でインストールした場合にはありません。
その代わり、
/etc/init.d/virtualbox:/etc/init.d/vboxdrvの代わり/etc/defauult/virtualbox
があります。
/etc/init.d/vboxautostart-service が存在しませんので、代わりとして /etc/rc.local に VBoxAutostart を叩くコードを追加してみました。以下のような感じです。
binary=/usr/lib/virtualbox/VBoxAutostart
/sbin/start-stop-daemon --background --chuid USER_NAME --start --exec $binary -- --background --start --config /etc/vbox/autostart.cfg
USER_NAME の部分は、動かしたい仮想マシンの所有者に置き換えてください。
次に /etc/vbox/autostart.cfg を作り、以下の内容を記載。
default_policy = allow
あとは自動起動したい仮想マシンの VirtualBox VMs/VM_NAME/VM_NAME.vbox を開き、以下のように1行追加。
<AttachedDevice passthrough="false" type="DVD" port="0" device="0"/>
</StorageController>
</StorageControllers>
+ <Autostart enabled="true" delay="0" autostop="Disabled"/>
</Machine>
</VirtualBox>
Ubuntu 12.04LTS で apt-get でインストールした場合
Ubuntu 12.04 LTS で
$ sudo apt-get install virtualbox
でインストールした場合です。
VirtualBox のバージョンは 4.1.12 で /usr/lib/virtualbox/VBoxAutostart も存在しないので、上記のやり方は使えません。
/etc/rc.local に以下の行を追加しておきます。
su - USER_NAME -c "VBoxHeadless -startvm VM_NAME &"
USER_NAME の部分はユーザー名に、VM_NAME の部分は動かしたいバーチャルマシンに置き換えてください。
というか、これが一番簡単かも。VirtualBox 4.2 以前でも使えるし。
blog comments powered by Disqus