vboxdrv.sh.in revision 25798ffda5d17be278d15c265ade35ac15b2146b
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#! /bin/sh
332d68e9666b04a5aa788a586d9f4c6b1f19c700vboxsync# Sun VirtualBox
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Linux kernel module init script
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#
332d68e9666b04a5aa788a586d9f4c6b1f19c700vboxsync# Copyright (C) 2006-2009 Sun Microsystems, Inc.
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
dcd68204fbfce8a2703fde4a6decb9ccb2054b39vboxsync# 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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncGROUPNAME=vboxusers
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncLOG="/var/log/vbox-install.log"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncNOLSB=%NOLSB%
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"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync BUILDVBOXDRV="$INSTALL_DIR/src/vboxdrv/build_in_tmp"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync BUILDVBOXNETFLT="$INSTALL_DIR/src/vboxnetflt/build_in_tmp"
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync BUILDVBOXNETADP="$INSTALL_DIR/src/vboxnetadp/build_in_tmp"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncelse
5b802b5e11fed6e163afca32e9118d2599d312fbvboxsync VBOXMANAGE="/usr/lib/%PACKAGE%/VBoxManage"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync BUILDVBOXDRV="/usr/share/%PACKAGE%/src/vboxdrv/build_in_tmp"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync BUILDVBOXNETFLT="/usr/share/%PACKAGE%/src/vboxnetflt/build_in_tmp"
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync BUILDVBOXNETADP="/usr/share/%PACKAGE%/src/vboxnetadp/build_in_tmp"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncfi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
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() {
526dfa543052a069767fbb88f438459378bef5fcvboxsync log_success_msg " done."
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{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Starting VirtualBox kernel module"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if ! running vboxdrv; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "No suitable module for running kernel found"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! rm -f $DEVICE; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot remove $DEVICE"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync 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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! chown :$GROUPNAME $DEVICE 2>/dev/null; then
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync rmmod vboxnetadp 2>/dev/null
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync rmmod vboxnetflt 2>/dev/null
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync rmmod vboxdrv 2>/dev/null
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot change owner $GROUPNAME for device $DEVICE"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
a0a9f39e8864357c2e1e61106958411240f5bf6bvboxsync if ! modprobe vboxnetflt > /dev/null 2>&1; then
a0a9f39e8864357c2e1e61106958411240f5bf6bvboxsync failure "modprobe vboxnetflt failed. Please use 'dmesg' to find out why"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync fi
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync 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{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Stopping VirtualBox kernel module"
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"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync VMS=`$VBOXMANAGE -nologo list runningvms 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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync $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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync $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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync $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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncsetup()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync stop
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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Recompiling VirtualBox kernel module"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync if ! $BUILDVBOXDRV \
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync --save-module-symvers /tmp/vboxdrv-Module.symvers \
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync --no-print-directory install > $LOG 2>&1; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Look at $LOG to find out what went wrong"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
a0a9f39e8864357c2e1e61106958411240f5bf6bvboxsync if ! $BUILDVBOXNETFLT \
a0a9f39e8864357c2e1e61106958411240f5bf6bvboxsync --use-module-symvers /tmp/vboxdrv-Module.symvers \
a0a9f39e8864357c2e1e61106958411240f5bf6bvboxsync --no-print-directory install >> $LOG 2>&1; then
a0a9f39e8864357c2e1e61106958411240f5bf6bvboxsync failure "Look at $LOG to find out what went wrong"
d766e56621531afa7cc104d93a53697d293f4bfbvboxsync fi
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync if ! $BUILDVBOXNETADP \
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync --use-module-symvers /tmp/vboxdrv-Module.symvers \
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync --no-print-directory install >> $LOG 2>&1; then
25798ffda5d17be278d15c265ade35ac15b2146bvboxsync failure "Look at $LOG to find out what went wrong"
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"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync VMS=`$VBOXMANAGE -nologo list runningvms 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