揮発性のメモ2

http://d.hatena.ne.jp/iww/

ホストのシャットダウン時に全てのVirtualBoxを停止する

Debian squeeze / VirtualBox 4.0.4
/etc/default/virtualbox に次の行を書いておくと、ホストのシャットダウン時に自動的に 現在稼動中の仮想マシンを一時停止・保存する

SHUTDOWN_USERS="hoge"
SHUTDOWN=savestate

書ける内容は次のとおり

# enter the following variables in /etc/default/virtualbox:
#   SHUTDOWN_USERS="foo bar"
#     check for running VMs of user foo and user bar
#   SHUTDOWN=poweroff
#   SHUTDOWN=acpibutton
#   SHUTDOWN=savestate
#     select one of these shutdown methods for running VMs

ただしホストの起動時には 自動的に復旧しない


今動作中の仮想マシンの一覧の表示

$ vboxmanage list runningvms
"Onet" {181384bb-8c1b-4389-89ba-1a00837a434b}
"Twoson" {b81559f9-7dff-4ee6-8eab-04aa3fdb2c4b}
"Threek" {6896afda-8060-4293-a9de-99e17afc2c57}

仮想マシンの一時停止、保存

$ vboxmanage controlvm 181384bb-8c1b-4389-89ba-1a00837a434b savestate

仮想マシンの起動

$ vboxmanage startvm 181384bb-8c1b-4389-89ba-1a00837a434b

perlワンライナーでuuidを抽出する

set LINE='"Onet" {181384bb-8c1b-4389-89ba-1a00837a434b}'
echo $LINE | perl -pe 's/.*\{(.*)\}.*/\1/'

bashでuuidを抽出する

set LINE='"Onet" {181384bb-8c1b-4389-89ba-1a00837a434b}'
set ${LINE#*\{};echo ${1%%\}*}

一般ユーザーでプログラムを実行する

su - hoge -c "ls /tmp"
sudo -u hoge ls /tmp

自動で全ての稼動中の仮想マシンを停止したり再開したりするスクリプト

稼動中の仮想マシンの一覧を/var/tmp/runningvmsに出力して、全部停止する
次回起動時に/var/tmp/runningvmsを読んで、止めた分を再開する。

#!/bin/sh

# for Cygwin
#PATH=/usr/local/bin:/usr/bin:/bin:/cygdrive/c/Program\ Files/Oracle/VirtualBox
#RUNNINGVMS=/var/tmp/runningvms
#VBOXMANAGE=VBoxManage

# for Linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin
RUNNINGVMS=/var/tmp/runningvms
VBOXMANAGE=sudo -u hoge vboxmanage 

case "$1" in
  start)
    while read LINE; do
        $VBOXMANAGE startvm $LINE
    done < $RUNNINGVMS
    rm $RUNNINGVMS
    ;;
  stop)
    $VBOXMANAGE list runningvms | perl -pe 's/.*\{(.*)\}.*/\1/' > $RUNNINGVMS
    while read LINE; do
        $VBOXMANAGE controlvm $LINE savestate
    done < $RUNNINGVMS
    ;;
  *)
    echo "Usage: $0 {start|stop}"
    exit 3
    ;;
esac

と、ここまで書いて ググッてみたら
http://www.revulo.com/blog/20090516.html
にすでにスクリプトがあった。こっちの方が複数ユーザに対応してて格好いい。


と、思ってから ふと /etc/init.d/vboxdrv を見たらすでに何もかも書いてあった。