vboxdrv.sh.in revision dd770e74b6654ce0e5584dbd4ec72e90fd4cc58f
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#! /bin/sh
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# innotek VirtualBox
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Linux kernel module init script
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Copyright (C) 2006-2007 innotek GmbH
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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# chkconfig: 35 30 60
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# description: VirtualBox Linux kernel module
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync#
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync### BEGIN INIT INFO
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Provides: vboxdrv
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Required-Start: $syslog
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Required-Stop:
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Default-Start: 3 5
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Default-Stop:
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# Short-Description: VirtualBox Linux kernel module
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync### END INIT INFO
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncPATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncDEVICE=/dev/vboxdrv
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncMODNAME=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"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync BUILDINTMP="$INSTALL_DIR/src/build_in_tmp"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncelse
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync VBOXMANAGE="/usr/share/virtualbox/VBoxManage"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync BUILDINTMP="/usr/share/virtualbox/src/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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync[ -r /etc/default/virtualbox ] && . /etc/default/virtualbox
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncif [ -z "$NOLSB" ]; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync . /lib/lsb/init-functions
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo ""
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync log_failure_msg "$1"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync 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() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo_failure
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo " ($1)"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg() {
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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync . /sbin/functions.sh
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync eerror $1
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync eend $?
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg() {
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync 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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo -n "$1:"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync return
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo -n "$1: $2"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync }
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncfi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncfailure()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fail_msg "$1"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync exit 0
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncrunning()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync lsmod | grep -q "$MODNAME[^_-]"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstart()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Starting VirtualBox kernel module"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! running; 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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! modprobe $MODNAME > /dev/null 2>&1; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "modprobe $MODNAME 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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync rmmod $MODNAME 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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync rmmod $MODNAME 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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync rmmod $MODNAME 2>/dev/null
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot change owner $GROUPNAME for device $DEVICE"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncstop()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Stopping VirtualBox kernel module"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if running; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! rmmod $MODNAME 2>/dev/null; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot unload module $MODNAME"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! rm -f $DEVICE; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Cannot unlink $DEVICE"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync# 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"
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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync wait=15
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
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Removing old VirtualBox kernel module"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2>/dev/null
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync begin_msg "Recompiling VirtualBox kernel module"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if ! $BUILDINTMP install > $LOG 2>&1; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync failure "Look at $LOG to find out what went wrong"
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync fi
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync succ_msg
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync start
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync}
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsyncdmnstatus()
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync{
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync if running; then
dd770e74b6654ce0e5584dbd4ec72e90fd4cc58fvboxsync echo "VirtualBox kernel module is 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"
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