vboxdrv.sh.in revision b39c3fa81cadaec00ebb2e7170a8db96998b7032
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
41a5daa2596de76f4977055944c7ff54a0afdc3avboxsync# chkconfig: 35 30 70
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
31620f279590f4ccc82e9e8ca1d81961095e9404vboxsync# Default-Stop: 1
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"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncNOLSB=%NOLSB%
ed5e4f6195dae44fd45ec21052b1931eb8c5d313vboxsyncDEBIAN=%DEBIAN%
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsyncMODPROBE=/sbin/modprobe
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsync
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsyncif $MODPROBE -c | grep -q '^allow_unsupported_modules *0'; then
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsync MODPROBE="$MODPROBE --allow-unsupported-modules"
c705e4282ea0c4e6b1f4a9b9c9183ebf2955ebe5vboxsyncfi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync[ -f /lib/lsb/init-functions ] || NOLSB=yes
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncif [ -n "$INSTALL_DIR" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync VBOXMANAGE="$INSTALL_DIR/VBoxManage"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync DODKMS="$INSTALL_DIR/src/vboxhost/do_dkms"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync BUILDVBOXDRV="$INSTALL_DIR/src/vboxhost/vboxdrv/build_in_tmp"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync BUILDVBOXNETFLT="$INSTALL_DIR/src/vboxhost/vboxnetflt/build_in_tmp"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync BUILDVBOXNETADP="$INSTALL_DIR/src/vboxhost/vboxnetadp/build_in_tmp"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncelse
5b802b5e11fed6e163afca32e9118d2599d312fbvboxsync VBOXMANAGE="/usr/lib/%PACKAGE%/VBoxManage"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync DODKMS="/usr/share/%PACKAGE%/src/vboxhost/do_dkms"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync BUILDVBOXDRV="/usr/share/%PACKAGE%/src/vboxhost/vboxdrv/build_in_tmp"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync BUILDVBOXNETFLT="/usr/share/%PACKAGE%/src/vboxhost/vboxnetflt/build_in_tmp"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync BUILDVBOXNETADP="/usr/share/%PACKAGE%/src/vboxhost/vboxnetadp/build_in_tmp"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncfi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
ed5e4f6195dae44fd45ec21052b1931eb8c5d313vboxsync# silently exit if the package was uninstalled but not purged,
ed5e4f6195dae44fd45ec21052b1931eb8c5d313vboxsync# applies to Debian packages only
3f6ec43ead6f462c8c747c3f6671842aa8ad672avboxsync[ -z "$DEBIAN" -o -x $VBOXMANAGE -a -x $BUILDVBOXDRV ] || 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
5b802b5e11fed6e163afca32e9118d2599d312fbvboxsync[ -r /etc/default/%PACKAGE% ] && . /etc/default/%PACKAGE%
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
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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstop()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
aca7a56d52c58d8b388343450503c22822fd6620vboxsync begin_msg "Stopping VirtualBox kernel modules"
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
5b802b5e11fed6e163afca32e9118d2599d312fbvboxsync# enter the following variables in /etc/default/%PACKAGE%:
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
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync begin_msg "Uninstalling old VirtualBox DKMS kernel modules"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync $DODKMS uninstall > $LOG
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync succ_msg
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
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync begin_msg "Trying to register the VirtualBox kernel modules using DKMS"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync if ! $DODKMS install >> $LOG; then
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync fail_msg "Failed, trying without DKMS"
aca7a56d52c58d8b388343450503c22822fd6620vboxsync begin_msg "Recompiling VirtualBox kernel modules"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync if ! $BUILDVBOXDRV \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --save-module-symvers /tmp/vboxdrv-Module.symvers \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --no-print-directory install >> $LOG 2>&1; then
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync failure "Look at $LOG to find out what went wrong"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync fi
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync if ! $BUILDVBOXNETFLT \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --use-module-symvers /tmp/vboxdrv-Module.symvers \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --no-print-directory install >> $LOG 2>&1; then
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync failure "Look at $LOG to find out what went wrong"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync fi
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync if ! $BUILDVBOXNETADP \
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync --use-module-symvers /tmp/vboxdrv-Module.symvers \
b39c3fa81cadaec00ebb2e7170a8db96998b7032vboxsync --no-print-directory install >> $LOG 2>&1; then
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync failure "Look at $LOG to find out what went wrong"
7eaaa8a4480370b82ef3735994f986f338fb4df2vboxsync 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
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if running vboxnetflt; then
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync if running vboxnetadp; then
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync echo "VirtualBox kernel modules (vboxdrv, vboxnetflt and vboxnetadp) are loaded."
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync else
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync echo "VirtualBox kernel modules (vboxdrv and vboxnetflt) are loaded."
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync fi
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync else
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync echo "VirtualBox kernel module is loaded."
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync fi
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