VirtualBox

Changeset 7515 in vbox


Ignore:
Timestamp:
Mar 21, 2008 9:38:32 AM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
28984
Message:

debian-ose: sync vboxdrv.init.in

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/debian/vboxdrv.init.in

    r6332 r7515  
    1 #! /bin/bash
    2 #
     1#! /bin/sh
    32# innotek VirtualBox
    43# Linux kernel module init script
     4
    55#
    66# Copyright (C) 2006-2007 innotek GmbH
     
    1515#
    1616
    17 
    1817# chkconfig: 35 30 60
    1918# description: VirtualBox Linux kernel module
     
    2827### END INIT INFO
    2928
    30 KDIR="/lib/modules/`uname -r`/misc"
     29PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
    3130DEVICE=/dev/vboxdrv
    3231MODNAME=vboxdrv
     
    3534NOLSB=%NOLSB%
    3635
    37 if [ -r /etc/default/virtualbox-ose ]; then
    38   . /etc/default/virtualbox-ose
     36[ -f /lib/lsb/init-functions ] || NOLSB=yes
     37[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg
     38
     39if [ -n "$INSTALL_DIR" ]; then
     40    VBOXMANAGE="$INSTALL_DIR/VBoxManage"
     41    BUILDINTMP="$INSTALL_DIR/src/build_in_tmp"
     42else
     43    VBOXMANAGE="/usr/lib/virtualbox-ose/VBoxManage"
     44    BUILDINTMP="/usr/share/virtualbox-ose/src/build_in_tmp"
    3945fi
    4046
    41 if [ -z "$NOLSB" -a -f /lib/lsb/init-functions ]; then
    42   . /lib/lsb/init-functions
     47if [ -n "$NOLSB" ]; then
     48    if [ -f /etc/redhat-release ]; then
     49        system=redhat
     50    elif [ -f /etc/SuSE-release ]; then
     51        system=suse
     52    elif [ -f /etc/gentoo-release ]; then
     53        system=gentoo
     54    fi
     55fi
     56
     57[ -r /etc/default/virtualbox-ose ] && . /etc/default/virtualbox-ose
     58
     59if [ -z "$NOLSB" ]; then
     60    . /lib/lsb/init-functions
     61    fail_msg() {
     62        echo ""
     63        log_failure_msg "$1"
     64    }
     65    succ_msg() {
     66        log_success_msg " done."
     67    }
     68    begin_msg() {
     69        log_daemon_msg "$@"
     70    }
    4371else
    44   log_daemon_msg()
    45   {
    46     if [ -z "${1:-}" ]; then
    47       return 1
    48     fi
    49     if [ -z "${2:-}" ]; then
    50       echo -n "$1:"
    51       return
    52     fi
    53     echo -n "$1: $2"
    54   }
    55   log_end_msg()
    56   {
    57     [ -z "${1:-}" ] && return 1
    58     if [ $1 -eq 0 ]; then
    59       echo "."
     72    if [ "$system" = "redhat" ]; then
     73        . /etc/init.d/functions
     74        fail_msg() {
     75            echo -n " "
     76            echo_failure
     77            echo
     78            echo "  ($1)"
     79        }
     80        succ_msg() {
     81            echo -n " "
     82            echo_success
     83            echo
     84        }
     85    elif [ "$system" = "suse" ]; then
     86        . /etc/rc.status
     87        fail_msg() {
     88            rc_failed 1
     89            rc_status -v
     90            echo "  ($1)"
     91        }
     92        succ_msg() {
     93            rc_reset
     94            rc_status -v
     95        }
     96    elif [ "$system" = "gentoo" ]; then
     97        . /sbin/functions.sh
     98        fail_msg() {
     99            eerror "$1"
     100        }
     101        succ_msg() {
     102            eend "$?"
     103        }
     104        begin_msg() {
     105            ebegin "$1"
     106        }
     107        if [ "`which $0`" = "/sbin/rc" ]; then
     108            shift
     109        fi
    60110    else
    61       echo " failed!"
    62     fi
    63   }
    64   log_success_msg()
    65   {
    66     echo "$@"
    67   }
    68   log_failure_msg()
    69   {
    70     echo "$@"
    71   }
     111        fail_msg() {
     112            echo " ...failed!"
     113            echo "  ($1)"
     114        }
     115        succ_msg() {
     116            echo " ...done."
     117        }
     118    fi
     119    if [ "$system" != "gentoo" ]; then
     120        begin_msg() {
     121            [ -z "${1:-}" ] && return 1
     122            if [ -z "${2:-}" ]; then
     123                echo -n "$1"
     124            else
     125                echo -n "$1: $2"
     126            fi
     127        }
     128    fi
    72129fi
    73130
    74131failure()
    75132{
    76   echo ""
    77   log_failure_msg "$1"
    78   exit 0
     133    fail_msg "$1"
     134    exit 0
    79135}
    80136
    81137running()
    82138{
    83   lsmod | grep -q "$MODNAME[^_-]"
     139    lsmod | grep -q "$MODNAME[^_-]"
    84140}
    85141
    86142start()
    87143{
    88   log_daemon_msg "Starting VirtualBox kernel module" "$MODNAME";
    89   # ensure the module is loaded
    90   if ! running; then
    91     if [ ! -f "$KDIR/$MODNAME.o" -a ! "$KDIR/$MODNAME.ko" ]; then
    92       failure "No suitable module for running kernel found."
    93     fi
    94     if ! modprobe $MODNAME > /dev/null 2>&1; then
    95       failure "Modprobe $MODNAME failed. Please use 'dmesg' to find out why."
    96     fi
    97     sleep .2
    98   fi
    99   # ensure the character special exists
    100   if [ ! -c $DEVICE ]; then
    101     MAJOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/devices`
    102     if [ -n "$MAJOR" ]; then
    103       MINOR=0
     144    begin_msg "Starting VirtualBox kernel module"
     145    if ! running; then
     146        if ! find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
     147            failure "No suitable module for running kernel found"
     148        fi
     149        if ! rm -f $DEVICE; then
     150            failure "Cannot remove $DEVICE"
     151        fi
     152        if ! modprobe $MODNAME > /dev/null 2>&1; then
     153            failure "modprobe $MODNAME failed. Please use 'dmesg' to find out why"
     154        fi
     155        sleep .2
     156    fi
     157    # ensure the character special exists
     158    if [ ! -c $DEVICE ]; then
     159        MAJOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/devices`
     160        if [ ! -z "$MAJOR" ]; then
     161            MINOR=0
     162        else
     163            MINOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/misc`
     164            if [ ! -z "$MINOR" ]; then
     165                MAJOR=10
     166            fi
     167        fi
     168        if [ -z "$MAJOR" ]; then
     169            rmmod $MODNAME 2>/dev/null
     170            failure "Cannot locate the VirtualBox device"
     171        fi
     172        if ! mknod -m 0660 $DEVICE c $MAJOR $MINOR 2>/dev/null; then
     173            rmmod $MODNAME 2>/dev/null
     174            failure "Cannot create device $DEVICE with major $MAJOR and minor $MINOR"
     175        fi
     176    fi
     177    # ensure permissions
     178    if ! chown :$GROUPNAME $DEVICE 2>/dev/null; then
     179        rmmod $MODNAME 2>/dev/null
     180        failure "Cannot change owner $GROUPNAME for device $DEVICE"
     181    fi
     182    succ_msg
     183}
     184
     185stop()
     186{
     187    begin_msg "Stopping VirtualBox kernel module"
     188    if running; then
     189        if ! rmmod $MODNAME 2>/dev/null; then
     190            failure "Cannot unload module $MODNAME"
     191        fi
     192        if ! rm -f $DEVICE; then
     193            failure "Cannot unlink $DEVICE"
     194        fi
     195    fi
     196    succ_msg
     197}
     198
     199# enter the following variables in /etc/default/virtualbox-ose:
     200#   SHUTDOWN_USERS="foo bar" 
     201#     check for running VMs of user foo and user bar
     202#   SHUTDOWN=poweroff
     203#   SHUTDOWN=acpibutton
     204#   SHUTDOWN=savestate
     205#     select one of these shutdown methods for running VMs
     206stop_vms()
     207{
     208    wait=0
     209    for i in $SHUTDOWN_USERS; do
     210        # don't create the ipcd directory with wrong permissions!
     211        if [ -d /tmp/.vbox-$i-ipc ]; then
     212            export VBOX_IPC_SOCKETID="$i"
     213            VMS=`$VBOXMANAGE -nologo list runningvms 2>/dev/null`
     214            if [ -n "$VMS" ]; then
     215                if [ "$SHUTDOWN" = "poweroff" ]; then
     216                    begin_msg "Powering off remaining VMs"
     217                    for v in $VMS; do
     218                        $VBOXMANAGE -nologo controlvm $v poweroff
     219                    done
     220                    succ_msg
     221                elif [ "$SHUTDOWN" = "acpibutton" ]; then
     222                    begin_msg "Sending ACPI power button event to remaining VMs"
     223                    for v in $VMS; do
     224                        $VBOXMANAGE -nologo controlvm $v acpipowerbutton
     225                        wait=30
     226                    done
     227                    succ_msg
     228                elif [ "$SHUTDOWN" = "savestate" ]; then
     229                    begin_msg "Saving state of remaining VMs"
     230                    for v in $VMS; do
     231                        $VBOXMANAGE -nologo controlvm $v savestate
     232                    done
     233                    succ_msg
     234                fi
     235            fi
     236        fi
     237    done
     238    # wait for some seconds when doing ACPI shutdown
     239    if [ "$wait" -ne 0 ]; then
     240        begin_msg "Waiting for $wait seconds for VM shutdown"
     241        sleep $wait
     242        succ_msg
     243    fi
     244}
     245
     246setup()
     247{
     248    stop
     249    if find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
     250      begin_msg "Removing old VirtualBox kernel module"
     251      find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2>/dev/null
     252      succ_msg
     253    fi
     254    begin_msg "Recompiling VirtualBox kernel module"
     255    if ! $BUILDINTMP install > $LOG 2>&1; then
     256        failure "Look at $LOG to find out what went wrong"
     257    fi
     258    succ_msg
     259    start
     260}
     261
     262dmnstatus()
     263{
     264    if running; then
     265        echo "VirtualBox kernel module is loaded."
     266        for i in $SHUTDOWN_USERS; do
     267            # don't create the ipcd directory with wrong permissions!
     268            if [ -d /tmp/.vbox-$i-ipc ]; then
     269                export VBOX_IPC_SOCKETID="$i"
     270                VMS=`$VBOXMANAGE -nologo list runningvms 2>/dev/null`
     271                if [ -n "$VMS" ]; then
     272                    echo "The following VMs are currently running:"
     273                    for v in $VMS; do
     274                       echo "  $v"
     275                    done
     276                fi
     277            fi
     278        done
    104279    else
    105       MINOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/misc`
    106       if [ -n "$MINOR" ]; then
    107         MAJOR=10
    108       fi
    109     fi
    110     if [ -z "$MAJOR" ]; then
    111       rmmod $MODNAME
    112       failure "Cannot locate device major."
    113     fi
    114     if ! mknod -m 0660 $DEVICE c $MAJOR $MINOR; then
    115       rmmod $MODNAME
    116       failure "Cannot create device $DEVICE with major $MAJOR and minor $MINOR."
    117     fi
    118   fi
    119   # ensure permissions
    120   if ! chown :$GROUPNAME $DEVICE; then
    121     rmmod $MODNAME
    122     failure "Cannot change owner $GROUPNAME for device $DEVICE."
    123   fi
    124   log_end_msg 0
    125 }
    126 
    127 stop()
    128 {
    129   log_daemon_msg "Stopping VirtualBox kernel module" "$MODNAME";
    130   killall -q VBoxSVC
    131   if running; then
    132     if ! rmmod $MODNAME 2>/dev/null; then
    133       failure "Cannot unload module $MODNAME."
    134     fi
    135     if ! rm -f $DEVICE; then
    136       failure "Cannot unlink $DEVICE."
    137     fi
    138   fi
    139   log_end_msg 0
     280        echo "VirtualBox kernel module is not loaded."
     281    fi
    140282}
    141283
    142284case "$1" in
    143   start)
     285start)
    144286    start
    145287    ;;
    146   stop)
     288stop)
     289    stop_vms
    147290    stop
    148291    ;;
    149   restart|reload|force-reload)
     292stop_vms)
     293    stop_vms
     294    ;;
     295restart)
     296    stop && start
     297    ;;
     298force-reload)
    150299    stop
    151300    start
    152301    ;;
    153   setup)
    154     stop
    155     if find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
    156       log_action_begin_msg "Removing old VirtualBox kernel module"
    157       find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2>/dev/null
    158       log_action_end_msg 0
    159     fi
    160     log_daemon_msg "Recompiling VirtualBox kernel module" "$MODNAME"
    161     if ! /usr/share/virtualbox-ose/src/build_in_tmp install > $LOG 2>&1; then
    162       failure "Look at $LOG to find out what went wrong"
    163     fi
    164     log_end_msg 0
    165     start
    166     ;;
    167   status)
    168     if running; then
    169       log_success_msg "VirtualBox kernel module is loaded."
    170     else
    171       log_failure_msg "VirtualBox kernel module is not loaded."
    172     fi
    173     ;;
    174   *)
    175     log_failure_msg "Usage: $0 {start|stop|restart|status|setup}"
    176     exit 3
     302setup)
     303    setup
     304    ;;
     305status)
     306    dmnstatus
     307    ;;
     308*)
     309    echo "Usage: $0 {start|stop|stop_vms|restart|force-reload|status|setup}"
     310    exit 1
    177311esac
    178312
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette