summaryrefslogtreecommitdiffstats
path: root/debian/virtualbox.init
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/virtualbox.init247
1 files changed, 247 insertions, 0 deletions
diff --git a/debian/virtualbox.init b/debian/virtualbox.init
new file mode 100644
index 00000000..1136b866
--- /dev/null
+++ b/debian/virtualbox.init
@@ -0,0 +1,247 @@
+#! /bin/sh
+# Sun VirtualBox
+# Linux kernel module init script
+
+#
+# Copyright (C) 2006-2009 Sun Microsystems, Inc.
+#
+# This file is part of VirtualBox Open Source Edition (OSE), as
+# available from http://www.virtualbox.org. This file is free software;
+# you can redistribute it and/or modify it under the terms of the GNU
+# General Public License (GPL) as published by the Free Software
+# Foundation, in version 2 as it comes in the "COPYING" file of the
+# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
+# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
+#
+
+# chkconfig: 35 30 70
+# description: VirtualBox Linux kernel module
+#
+### BEGIN INIT INFO
+# Provides: virtualbox
+# Required-Start: $remote_fs $network
+# Required-Stop: $remote_fs
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: VirtualBox Linux kernel module
+### END INIT INFO
+
+. /lib/lsb/init-functions
+
+test -d /usr/share/doc/virtualbox -a -x /usr/bin/VBoxHeadless || exit 0
+
+# Include virtualbox defaults if available
+[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
+
+# set list of all active users if asked to do so
+if [ "$SHUTDOWN_USERS" = "all" ]; then
+ SHUTDOWN_USERS=""
+ for i in /tmp/.vbox-*-ipc; do
+ SHUTDOWN_USERS="$SHUTDOWN_USERS $(echo $i|cut -d'-' -f2)"
+ done
+fi
+
+if [ "$LOAD_VBOXDRV_MODULE" != 1 ]; then
+ log_success_msg "virtualbox disabled; edit /etc/default/virtualbox"
+ exit 0
+fi
+
+running()
+{
+ lsmod | grep -q "$1[^_-]"
+}
+
+start()
+{
+ log_begin_msg "Loading VirtualBox kernel modules..."
+
+ if ! running vboxdrv; then
+ if ! modprobe vboxdrv > /dev/null 2>&1; then
+ if ! find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
+ log_failure_msg "No suitable module for running kernel found"
+ else
+ log_failure_msg "modprobe vboxdrv failed. Please use 'dmesg' to find out why"
+ fi
+ log_end_msg 1
+ return 1
+ else
+ log_progress_msg "vboxdrv"
+ fi
+ fi
+
+ if ! running vboxnetflt; then
+ if ! modprobe vboxnetflt > /dev/null 2>&1; then
+ if ! find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|grep -q vboxnetflt; then
+ log_failure_msg "No suitable vboxnetflt module for running kernel found"
+ else
+ log_failure_msg "modprobe vboxnetflt failed. Please use 'dmesg' to find out why"
+ fi
+ log_end_msg 1
+ return 1
+ else
+ log_progress_msg "vboxnetflt"
+ fi
+ fi
+
+ if ! running vboxnetadp; then
+ if ! modprobe vboxnetadp > /dev/null 2>&1; then
+ if ! find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|grep -q vboxnetadp; then
+ log_failure_msg "No suitable vboxnetadp module for running kernel found"
+ else
+ log_failure_msg "modprobe vboxnetadp failed. Please use 'dmesg' to find out why"
+ fi
+ log_end_msg 1
+ return 1
+ else
+ log_progress_msg "vboxnetadp"
+ fi
+ fi
+
+ log_end_msg 0
+}
+
+stop()
+{
+ log_begin_msg "Unloading VirtualBox kernel modules..."
+
+ if running vboxnetadp; then
+ if ! rmmod vboxnetadp 2>/dev/null; then
+ log_failure_msg "Cannot unload module vboxnetadp"
+ log_end_msg 1
+ return 1
+ else
+ log_progress_msg "vboxnetadp"
+ fi
+ fi
+
+ if running vboxnetflt; then
+ if ! rmmod vboxnetflt 2>/dev/null; then
+ log_failure_msg "Cannot unload module vboxnetflt"
+ log_end_msg 1
+ return 1
+ else
+ log_progress_msg "vboxnetflt"
+ fi
+ fi
+
+ if running vboxpci; then
+ if ! rmmod vboxpci 2>/dev/null; then
+ log_failure_msg "Cannot unload module vboxpci"
+ log_end_msg 1
+ return 1
+ else
+ log_progress_msg "vboxpci"
+ fi
+ fi
+
+ if running vboxdrv; then
+ if ! rmmod vboxdrv 2>/dev/null; then
+ log_failure_msg "Cannot unload module vboxdrv"
+ log_end_msg 1
+ return 1
+ else
+ log_progress_msg "vboxdrv"
+ fi
+ fi
+
+ log_end_msg 0
+}
+
+# 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
+stop_vms()
+{
+ if ! pidof VBoxSVC > /dev/null; then
+ return 0
+ fi
+
+ wait=0
+
+ for i in $SHUTDOWN_USERS; do
+ if [ -d /tmp/.vbox-$i-ipc ]; then
+ export VBOX_IPC_SOCKETID="$i"
+ VMS=`VBoxManage --nologo list runningvms 2>/dev/null`
+ if [ $? -eq 0 -a -n "$VMS" ]; then
+ VMS=`echo "$VMS" | sed -e 's/^".*".*{\(.*\)}/\1/'`
+ if [ "$SHUTDOWN" = "poweroff" ]; then
+ log_action_msg "Powering off remaining VMs from user $i"
+ for v in $VMS; do
+ VBoxManage --nologo controlvm $v poweroff
+ wait=10
+ done
+ elif [ "$SHUTDOWN" = "acpibutton" ]; then
+ log_action_msg "Sending ACPI power button event to remaining VMs from user $i"
+ for v in $VMS; do
+ VBoxManage --nologo controlvm $v acpipowerbutton
+ wait=30
+ done
+ elif [ "$SHUTDOWN" = "savestate" ]; then
+ log_action_msg "Saving state of remaining VMs from user $i"
+ for v in $VMS; do
+ VBoxManage --nologo controlvm $v savestate
+ wait=30
+ done
+ fi
+ fi
+ fi
+ done
+
+ # wait for some seconds when doing ACPI shutdown
+ if [ "$wait" -ne 0 ]; then
+ log_action_begin_msg "Waiting for $wait seconds for VM shutdown"
+ sleep $wait
+ log_action_end_msg 0
+ fi
+ return 0
+}
+
+dmnstatus()
+{
+ if running vboxdrv && running vboxnetflt && running vboxnetadp && running vboxpci; then
+ echo "VirtualBox kernel modules are loaded."
+
+ for i in $SHUTDOWN_USERS; do
+ if [ -d /tmp/.vbox-$i-ipc ]; then
+ export VBOX_IPC_SOCKETID="$i"
+ VMS=`VBoxManage --nologo list runningvms 2>/dev/null`
+ if [ $? -eq 0 -a -n "$VMS" ]; then
+ VMS=`echo "$VMS" | sed -e 's/^".*".*{\(.*\)}/\1/'`
+ echo "The following VMs are currently running:"
+ for v in $VMS; do
+ echo " $v"
+ done
+ fi
+ fi
+ done
+ return 0
+ else
+ echo "VirtualBox kernel module is not loaded."
+ return 3
+ fi
+}
+
+case "$1" in
+start)
+ start
+ ;;
+stop)
+ stop_vms && stop
+ ;;
+stop_vms)
+ stop_vms
+ ;;
+restart|force-reload)
+ stop_vms && stop && start
+ ;;
+status)
+ dmnstatus
+ ;;
+*)
+ echo "Usage: $0 {start|stop|stop_vms|restart|force-reload|status}"
+ exit 1
+esac