diff options
Diffstat (limited to 'vboxinit')
-rw-r--r-- | vboxinit | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/vboxinit b/vboxinit new file mode 100644 index 0000000..6ed5062 --- /dev/null +++ b/vboxinit @@ -0,0 +1,99 @@ +#!/bin/bash +# +# vboxinit: auto start sessions when booting and save +# sessions when host is stopped +# +# Based on vboxtool. Only tested in Debian. +# +# Debian install: +# copy this script to /etc/init.d +# run: +# chmod u+rx /etc/init.d/vboxinit +# update-rc.d vboxinit defaults + +### BEGIN INIT INFO +# Provides: vboxinit +# Required-Start: vboxdrv $local_fs +# Required-Stop: vboxdrv $local_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Description: Controls VirtualBox sessions +### END INIT INFO + +. /etc/default/virtualbox + +# Enable/disable service +if [ "${VBOXWEB_USER}" == "" ]; then + exit 0 +fi + +# Check for VirtualBox binary path +if [ "$VBOX_BIN_PATH" != "" ]; then + PATH = "$PATH:$VBOX_BIN_PATH"; +fi + +start() +{ + # Get all autostart machines + MACHINES=$($su_command "VBoxManage list vms | awk '{ print \$NF }' | sed -e 's/[{}]//g'") + for UUID in $MACHINES; do + STARTUP=$($su_command "VBoxManage getextradata $UUID 'pvbx/startupMode'" | awk '{ print $NF }') + if [ "${STARTUP}" == "auto" ]; then + VMNAME=$($su_command "VBoxManage showvminfo $UUID | sed -n '0,/^Name:/s/^Name:[ \t]*//p'") + echo "$0: starting machine ${VMNAME} ..." + $su_command "VBoxManage startvm $UUID --type headless" >>/var/log/vb.log + fi + done +} + +stop() +{ + # vms are saved, instead of stopped. + MACHINES=$($su_command "VBoxManage list runningvms | awk '{ print \$NF }' | sed -e 's/[{}]//g'") + for UUID in $MACHINES; do + VMNAME=$($su_command "VBoxManage showvminfo $UUID | sed -n '0,/^Name:/s/^Name:[ \t]*//p'") + echo "$0: saving machine ${VMNAME} state ..." + $su_command "VBoxManage controlvm $UUID savestate" >>/var/log/vb.log + done + +} + +status() +{ + $su_command "VBoxManage list runningvms" +} + +restart() +{ + stop + start +} + + +# Implementation of user control, execute several commands as another (predefined) user, +su_command="su - ${VBOXWEB_USER} -s /bin/bash -c" + +# +# Check for a command line option +# +case "$1" in + + start) + start + ;; + stop) + stop + ;; + status) + status + ;; + restart) + restart + ;; + *) + echo "Usage: $0 {start|stop|restart|status}" + exit 1 + ;; +esac + +exit 0 |