summaryrefslogtreecommitdiffstats
path: root/vboxinit
diff options
context:
space:
mode:
Diffstat (limited to 'vboxinit')
-rw-r--r--vboxinit99
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