vboxdrv.sh.in revision f144a2a5ac41bbf38b05ba22e4f817f6bb620d3e
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#! /bin/sh
0887a65d2e1f7d938381bed11e859caed56cb47evboxsync# Oracle VM VirtualBox
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Linux kernel module init script
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#
0887a65d2e1f7d938381bed11e859caed56cb47evboxsync# Copyright (C) 2006-2010 Oracle Corporation
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# This file is part of VirtualBox Open Source Edition (OSE), as
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# available from http://www.virtualbox.org. This file is free software;
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# you can redistribute it and/or modify it under the terms of the GNU
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# General Public License (GPL) as published by the Free Software
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Foundation, in version 2 as it comes in the "COPYING" file of the
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
3fc17454dc709b89e326d2cbe0ec35a607154f08vboxsync# chkconfig: 35 20 80
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# description: VirtualBox Linux kernel module
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync### BEGIN INIT INFO
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Provides: vboxdrv
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Required-Start: $syslog
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Required-Stop:
dcd68204fbfce8a2703fde4a6decb9ccb2054b39vboxsync# Default-Start: 2 3 4 5
4d84b0abe9a18ef4e6d8b7d97cf6fbfbfef1e5edvboxsync# Default-Stop: 0 1 6
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Short-Description: VirtualBox Linux kernel module
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync### END INIT INFO
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncPATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncDEVICE=/dev/vboxdrv
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncLOG="/var/log/vbox-install.log"
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsyncMODPROBE=/sbin/modprobe
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsync
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsyncif $MODPROBE -c | grep -q '^allow_unsupported_modules *0'; then
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsync MODPROBE="$MODPROBE --allow-unsupported-modules"
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsyncfi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
fe7115bba580b609cb1a233f8e08947d0ee0af8dvboxsync[ -f /etc/debian_release -a -f /lib/lsb/init-functions ] || NOLSB=yes
f144a2a5ac41bbf38b05ba22e4f817f6bb620d3evboxsync[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg
6d5616f0c3abb36055e12bca6e5d7cf065358e25vboxsyncexport BUILD_TYPE
6d5616f0c3abb36055e12bca6e5d7cf065358e25vboxsyncexport USERNAME
6d5616f0c3abb36055e12bca6e5d7cf065358e25vboxsyncexport USER=$USERNAME
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncif [ -n "$INSTALL_DIR" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync VBOXMANAGE="$INSTALL_DIR/VBoxManage"
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync MODULE_SRC="$INSTALL_DIR/src/vboxhost"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncelse
fe7115bba580b609cb1a233f8e08947d0ee0af8dvboxsync VBOXMANAGE="/usr/lib/virtualbox/VBoxManage"
fe7115bba580b609cb1a233f8e08947d0ee0af8dvboxsync MODULE_SRC="/usr/share/virtualbox/src/vboxhost"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncfi
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsyncBUILDINTMP="$MODULE_SRC/build_in_tmp"
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsyncDODKMS="$MODULE_SRC/do_dkms"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
ed5e4f6195dae44fd45ec21052b1931eb8c5d313vboxsync# silently exit if the package was uninstalled but not purged,
fe7115bba580b609cb1a233f8e08947d0ee0af8dvboxsync# applies to Debian packages only (but shouldn't hurt elsewhere)
fe7115bba580b609cb1a233f8e08947d0ee0af8dvboxsync[ ! -f /etc/debian_release -o -x $VBOXMANAGE -a -x $BUILDINTMP ] || exit 0
ed5e4f6195dae44fd45ec21052b1931eb8c5d313vboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncif [ -n "$NOLSB" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ -f /etc/redhat-release ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync system=redhat
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync elif [ -f /etc/SuSE-release ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync system=suse
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync elif [ -f /etc/gentoo-release ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync system=gentoo
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncfi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
fe7115bba580b609cb1a233f8e08947d0ee0af8dvboxsync[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
a996fbbf1ca46be54ed995ceddf1e6b035b6ef6cvboxsyncif [ -z "$NOLSB" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync . /lib/lsb/init-functions
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo ""
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync log_failure_msg "$1"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg() {
1b782fdb15aefa60d14641e47eda880841174653vboxsync log_end_msg 0
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync log_daemon_msg "$@"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncelse
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ "$system" = "redhat" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync . /etc/init.d/functions
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg() {
6df37320db2ea21e05e1f89e5824022b449b387dvboxsync echo -n " "
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo_failure
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo " ($1)"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg() {
6df37320db2ea21e05e1f89e5824022b449b387dvboxsync echo -n " "
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo_success
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync elif [ "$system" = "suse" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync . /etc/rc.status
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync rc_failed 1
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync rc_status -v
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo " ($1)"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync rc_reset
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync rc_status -v
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync elif [ "$system" = "gentoo" ]; then
b26266e64cc81dd32722cade8418604d66f2ac3avboxsync if [ -f /sbin/functions.sh ]; then
b26266e64cc81dd32722cade8418604d66f2ac3avboxsync . /sbin/functions.sh
b26266e64cc81dd32722cade8418604d66f2ac3avboxsync elif [ -f /etc/init.d/functions.sh ]; then
b26266e64cc81dd32722cade8418604d66f2ac3avboxsync . /etc/init.d/functions.sh
b26266e64cc81dd32722cade8418604d66f2ac3avboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg() {
a996fbbf1ca46be54ed995ceddf1e6b035b6ef6cvboxsync eerror "$1"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg() {
a996fbbf1ca46be54ed995ceddf1e6b035b6ef6cvboxsync eend "$?"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg() {
a996fbbf1ca46be54ed995ceddf1e6b035b6ef6cvboxsync ebegin "$1"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ "`which $0`" = "/sbin/rc" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync shift
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync else
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo " ...failed!"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo " ($1)"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo " ...done."
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ "$system" != "gentoo" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync [ -z "${1:-}" ] && return 1
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ -z "${2:-}" ]; then
a996fbbf1ca46be54ed995ceddf1e6b035b6ef6cvboxsync echo -n "$1"
a996fbbf1ca46be54ed995ceddf1e6b035b6ef6cvboxsync else
a996fbbf1ca46be54ed995ceddf1e6b035b6ef6cvboxsync echo -n "$1: $2"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncfi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncfailure()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg "$1"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync exit 0
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncrunning()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync lsmod | grep -q "$1[^_-]"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstart()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
aca7a56d52c58d8b388343450503c22822fd6620vboxsync begin_msg "Starting VirtualBox kernel modules"
1b782fdb15aefa60d14641e47eda880841174653vboxsync if [ -d /proc/xen ]; then
1b782fdb15aefa60d14641e47eda880841174653vboxsync failure "Running VirtualBox in a Xen environment is not supported"
1b782fdb15aefa60d14641e47eda880841174653vboxsync fi
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if ! running vboxdrv; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! rm -f $DEVICE; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot remove $DEVICE"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsync if ! $MODPROBE vboxdrv > /dev/null 2>&1; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync failure "modprobe vboxdrv failed. Please use 'dmesg' to find out why"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync sleep .2
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync # ensure the character special exists
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ ! -c $DEVICE ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync MAJOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/devices`
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ ! -z "$MAJOR" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync MINOR=0
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync else
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync MINOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/misc`
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ ! -z "$MINOR" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync MAJOR=10
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ -z "$MAJOR" ]; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync rmmod vboxdrv 2>/dev/null
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot locate the VirtualBox device"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! mknod -m 0660 $DEVICE c $MAJOR $MINOR 2>/dev/null; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync rmmod vboxdrv 2>/dev/null
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot create device $DEVICE with major $MAJOR and minor $MINOR"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync # ensure permissions
b723b174d7132ab6bbff3abcd83c92530065f7davboxsync if ! chown :%GROUP% $DEVICE 2>/dev/null; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync rmmod vboxpci 2>/dev/null
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync rmmod vboxnetadp 2>/dev/null
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync rmmod vboxnetflt 2>/dev/null
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync rmmod vboxdrv 2>/dev/null
b723b174d7132ab6bbff3abcd83c92530065f7davboxsync failure "Cannot change group %GROUP% for device $DEVICE"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsync if ! $MODPROBE vboxnetflt > /dev/null 2>&1; then
a0a9f39e8864357c2e1e61106958411240f5bf6bvboxsync failure "modprobe vboxnetflt failed. Please use 'dmesg' to find out why"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync fi
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsync if ! $MODPROBE vboxnetadp > /dev/null 2>&1; then
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync failure "modprobe vboxnetadp failed. Please use 'dmesg' to find out why"
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync fi
f5253a692b2a71d484d5daff564934d85501ae28vboxsync if ! $MODPROBE vboxpci > /dev/null 2>&1; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync failure "modprobe vboxpci failed. Please use 'dmesg' to find out why"
f5253a692b2a71d484d5daff564934d85501ae28vboxsync fi
2915a0b5ad777707014e05b15f65d309d95eabd3vboxsync # Create the /dev/vboxusb directory if the host supports that method
2915a0b5ad777707014e05b15f65d309d95eabd3vboxsync # of USB access. The USB code checks for the existance of that path.
2915a0b5ad777707014e05b15f65d309d95eabd3vboxsync if grep -q usb_device /proc/devices; then
37445cb3c8e0ac8323cfb0f7e4b17c0e091efd62vboxsync mkdir -p -m 0750 /dev/vboxusb 2>/dev/null
2915a0b5ad777707014e05b15f65d309d95eabd3vboxsync chown root:vboxusers /dev/vboxusb 2>/dev/null
2915a0b5ad777707014e05b15f65d309d95eabd3vboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstop()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
aca7a56d52c58d8b388343450503c22822fd6620vboxsync begin_msg "Stopping VirtualBox kernel modules"
f5253a692b2a71d484d5daff564934d85501ae28vboxsync if running vboxpci; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync if ! rmmod vboxpci 2>/dev/null; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync failure "Cannot unload module vboxpci"
f5253a692b2a71d484d5daff564934d85501ae28vboxsync fi
f5253a692b2a71d484d5daff564934d85501ae28vboxsync fi
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync if running vboxnetadp; then
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync if ! rmmod vboxnetadp 2>/dev/null; then
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync failure "Cannot unload module vboxnetadp"
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync fi
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync fi
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if running vboxdrv; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if running vboxnetflt; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if ! rmmod vboxnetflt 2>/dev/null; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync failure "Cannot unload module vboxnetflt"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync fi
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync fi
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if ! rmmod vboxdrv 2>/dev/null; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync failure "Cannot unload module vboxdrv"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! rm -f $DEVICE; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot unlink $DEVICE"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
fe7115bba580b609cb1a233f8e08947d0ee0af8dvboxsync# enter the following variables in /etc/default/virtualbox:
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# SHUTDOWN_USERS="foo bar"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# check for running VMs of user foo and user bar
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# SHUTDOWN=poweroff
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# SHUTDOWN=acpibutton
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# SHUTDOWN=savestate
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# select one of these shutdown methods for running VMs
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstop_vms()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync wait=0
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync for i in $SHUTDOWN_USERS; do
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync # don't create the ipcd directory with wrong permissions!
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ -d /tmp/.vbox-$i-ipc ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync export VBOX_IPC_SOCKETID="$i"
2ca14cdabd16f1875ec36b3ac814f704779eef7avboxsync VMS=`$VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/' 2>/dev/null`
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ -n "$VMS" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ "$SHUTDOWN" = "poweroff" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Powering off remaining VMs"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync for v in $VMS; do
cf8fa49133dc7d885c6e8da467c7335d6f45327fvboxsync $VBOXMANAGE --nologo controlvm $v poweroff
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync done
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync elif [ "$SHUTDOWN" = "acpibutton" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Sending ACPI power button event to remaining VMs"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync for v in $VMS; do
cf8fa49133dc7d885c6e8da467c7335d6f45327fvboxsync $VBOXMANAGE --nologo controlvm $v acpipowerbutton
bab303519e7c15bdfd5f4d1ee6a07c5444b985a3vboxsync wait=30
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync done
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync elif [ "$SHUTDOWN" = "savestate" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Saving state of remaining VMs"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync for v in $VMS; do
cf8fa49133dc7d885c6e8da467c7335d6f45327fvboxsync $VBOXMANAGE --nologo controlvm $v savestate
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync done
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync done
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync # wait for some seconds when doing ACPI shutdown
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ "$wait" -ne 0 ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Waiting for $wait seconds for VM shutdown"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync sleep $wait
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync# setup_script
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncsetup()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync stop
b6e643cb88c6c603d6f312853765977e587c2574vboxsync DKMS=`which dkms 2>/dev/null`
b6e643cb88c6c603d6f312853765977e587c2574vboxsync if [ -n "$DKMS" ]; then
b6e643cb88c6c603d6f312853765977e587c2574vboxsync begin_msg "Uninstalling old VirtualBox DKMS kernel modules"
b6e643cb88c6c603d6f312853765977e587c2574vboxsync $DODKMS uninstall vboxhost vboxdrv vboxnetflt vboxnetadp > $LOG
b6e643cb88c6c603d6f312853765977e587c2574vboxsync succ_msg
b6e643cb88c6c603d6f312853765977e587c2574vboxsync fi
f5253a692b2a71d484d5daff564934d85501ae28vboxsync if find /lib/modules/`uname -r` -name "vboxpci\.*" 2>/dev/null|grep -q vboxpci; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync begin_msg "Removing old VirtualBox pci kernel module"
f5253a692b2a71d484d5daff564934d85501ae28vboxsync find /lib/modules/`uname -r` -name "vboxpci\.*" 2>/dev/null|xargs rm -f 2>/dev/null
f5253a692b2a71d484d5daff564934d85501ae28vboxsync succ_msg
f5253a692b2a71d484d5daff564934d85501ae28vboxsync fi
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync if find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|grep -q vboxnetadp; then
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync begin_msg "Removing old VirtualBox netadp kernel module"
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2>/dev/null
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync succ_msg
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync fi
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|grep -q vboxnetflt; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync begin_msg "Removing old VirtualBox netflt kernel module"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|xargs rm -f 2>/dev/null
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync succ_msg
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync begin_msg "Removing old VirtualBox kernel module"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2>/dev/null
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
044244c48c49edcd59906ea8741688b9c7e7bdb6vboxsync if [ -n "$DKMS" ]; then
044244c48c49edcd59906ea8741688b9c7e7bdb6vboxsync begin_msg "Trying to register the VirtualBox kernel modules using DKMS"
044244c48c49edcd59906ea8741688b9c7e7bdb6vboxsync if ! $DODKMS install vboxhost $INSTALL_VER >> $LOG; then
044244c48c49edcd59906ea8741688b9c7e7bdb6vboxsync fail_msg "Failed, trying without DKMS"
044244c48c49edcd59906ea8741688b9c7e7bdb6vboxsync DKMS=""
044244c48c49edcd59906ea8741688b9c7e7bdb6vboxsync fi
044244c48c49edcd59906ea8741688b9c7e7bdb6vboxsync fi
044244c48c49edcd59906ea8741688b9c7e7bdb6vboxsync if [ -z "$DKMS" ]; then
aca7a56d52c58d8b388343450503c22822fd6620vboxsync begin_msg "Recompiling VirtualBox kernel modules"
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync if ! $BUILDINTMP \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --save-module-symvers /tmp/vboxdrv-Module.symvers \
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync --module-source "$MODULE_SRC/vboxdrv" \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --no-print-directory install >> $LOG 2>&1; then
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync failure "Look at $LOG to find out what went wrong"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync fi
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync if ! $BUILDINTMP \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --use-module-symvers /tmp/vboxdrv-Module.symvers \
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync --module-source "$MODULE_SRC/vboxnetflt" \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --no-print-directory install >> $LOG 2>&1; then
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync failure "Look at $LOG to find out what went wrong"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync fi
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync if ! $BUILDINTMP \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --use-module-symvers /tmp/vboxdrv-Module.symvers \
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync --module-source "$MODULE_SRC/vboxnetadp" \
b39c3fa81cadaec00ebb2e7170a8db96998b7032vboxsync --no-print-directory install >> $LOG 2>&1; then
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync failure "Look at $LOG to find out what went wrong"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync fi
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync if ! $BUILDINTMP \
9a85b295947ea692debe4c2eb394d5277f0dca3bvboxsync --use-module-symvers /tmp/vboxdrv-Module.symvers \
73e8df2e481cb3697372a3cf4acffd068a7f1296vboxsync --module-source "$MODULE_SRC/vboxpci" \
9a85b295947ea692debe4c2eb394d5277f0dca3bvboxsync --no-print-directory install >> $LOG 2>&1; then
9a85b295947ea692debe4c2eb394d5277f0dca3bvboxsync failure "Look at $LOG to find out what went wrong"
9a85b295947ea692debe4c2eb394d5277f0dca3bvboxsync fi
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync fi
ceac9502f79429220abff899f1cd07e7aba68cb9vboxsync rm -f /etc/vbox/module_not_compiled
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync start
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncdmnstatus()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if running vboxdrv; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync str="vboxdrv"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if running vboxnetflt; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync str="$str, vboxnetflt"
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync if running vboxnetadp; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync str="$str, vboxnetadp"
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync fi
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync fi
f5253a692b2a71d484d5daff564934d85501ae28vboxsync if running vboxpci; then
f5253a692b2a71d484d5daff564934d85501ae28vboxsync str="$str, vboxpci"
f5253a692b2a71d484d5daff564934d85501ae28vboxsync fi
f5253a692b2a71d484d5daff564934d85501ae28vboxsync echo "VirtualBox kernel modules ($str) are loaded."
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync for i in $SHUTDOWN_USERS; do
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync # don't create the ipcd directory with wrong permissions!
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ -d /tmp/.vbox-$i-ipc ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync export VBOX_IPC_SOCKETID="$i"
15d50b518d1362724dc104162d5ec2de6a0becaavboxsync VMS=`$VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/' 2>/dev/null`
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if [ -n "$VMS" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo "The following VMs are currently running:"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync for v in $VMS; do
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo " $v"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync done
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync done
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync else
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo "VirtualBox kernel module is not loaded."
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsynccase "$1" in
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstart)
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync start
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync ;;
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstop)
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync stop_vms
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync stop
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync ;;
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstop_vms)
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync stop_vms
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync ;;
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncrestart)
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync stop && start
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync ;;
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncforce-reload)
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync stop
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync start
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync ;;
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncsetup)
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync setup
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync ;;
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstatus)
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync dmnstatus
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync ;;
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync*)
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo "Usage: $0 {start|stop|stop_vms|restart|force-reload|status|setup}"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync exit 1
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncesac
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncexit 0