X-Git-Url: http://git.pld-linux.org/?a=blobdiff_plain;f=VirtualBox-vboxdrv.init;h=2df64fe782cfa3b7662969e2b93d8b45004b6cda;hb=3b729c5ca703d643dc6054fc985fd602ac8fad2f;hp=51cd2cf3a437f6ad309f4add1d99f3eea151b6c1;hpb=a27062a24be2505d8bd604eba829213dff9a0804;p=packages%2FVirtualBox.git diff --git a/VirtualBox-vboxdrv.init b/VirtualBox-vboxdrv.init index 51cd2cf..2df64fe 100644 --- a/VirtualBox-vboxdrv.init +++ b/VirtualBox-vboxdrv.init @@ -2,9 +2,9 @@ # # virtualbox VirtualBox virtualizer for x86 hardware # -# chkconfig: 345 84 25 +# chkconfig: 345 82 27 # -# description: InnoTek VirtualBox is a general-purpose full virtualizer for x86 +# description: Oracle VirtualBox is a general-purpose full virtualizer for x86 \ # hardware. Targeted at server, desktop and embedded use. # # $Id$ @@ -18,44 +18,65 @@ VBOX_MODULE="vboxdrv" # Get service config - may override defaults [ -f /etc/sysconfig/virtualbox ] && . /etc/sysconfig/virtualbox -start() { - if [ ! -f /var/lock/subsys/virtualbox ]; then - modprobe -s $VBOX_MODULE - # set proper /dev/vboxdrv for systems with static dev - if ! [ -d /dev/.udev/ ]; then - show "Setting $VBOX_DEVICE entry" - busy - rm -f $VBOX_DEVICE - VBOX_MAJOR=$(awk '$2 == "vboxdrv" {print $1}' /proc/devices) - if [ -n "$VBOX_MAJOR" ]; then - VBOX_MINOR=0 - else - VBOX_MINOR=$(awk '$2 == "vboxdrv" {print $1}' /proc/misc) - if [ -n "$VBOX_MINOR" ]; then - VBOX_MAJOR=$(awk '$2 == "misc" {print $1}' /proc/devices) - fi - fi - if [ -z "$VBOX_MAJOR" ]; then - /sbin/rmmod $VBOX_MODULE - fail - elif ! mknod -m 0660 $VBOX_DEVICE c $VBOX_MAJOR $VBOX_MINOR; then - rmmod $VBOX_MODNAME - fail - elif ! chown root:vbox $VBOX_DEVICE; then - fail - else - ok - fi +setup() { + modprobe -s $VBOX_MODULE + RETVAL=$? + + if [ -d /dev/.udev ] || [ -d /run/udev/rules.d ]; then + return $RETVAL + fi + + # set proper $VBOX_DEVICE for systems with static dev + show "Setting $VBOX_DEVICE entry"; busy + rm -f $VBOX_DEVICE + VBOX_MAJOR=$(awk -vdevice="${VBOX_DEVICE#/dev/}" '$2 == device {print $1}' /proc/devices) + if [ -n "$VBOX_MAJOR" ]; then + VBOX_MINOR=0 + else + VBOX_MINOR=$(awk -vdevice="${VBOX_DEVICE#/dev/}" '$2 == device {print $1}' /proc/misc) + if [ -n "$VBOX_MINOR" ]; then + VBOX_MAJOR=$(awk '$2 == "misc" {print $1}' /proc/devices) fi + fi - touch /var/lock/subsys/virtualbox + if [ -z "$VBOX_MAJOR" ]; then + /sbin/rmmod $VBOX_MODULE + RETVAL=1 + elif ! mknod -m 0660 $VBOX_DEVICE c $VBOX_MAJOR $VBOX_MINOR; then + RETVAL=$? + rmmod $VBOX_MODNAME + fail + elif ! chown root:vbox $VBOX_DEVICE; then + RETVAL=$? + fail + else + ok fi + return $RETVAL +} + +start() { + if [ -f /var/lock/subsys/$VBOX_MODULE ]; then + return + fi + + setup || exit $? + touch /var/lock/subsys/$VBOX_MODULE } stop() { - # NOTE: rmmod will wait if device is in use, so automatic rmmod probably not the best idea + # NOTE: rmmod will wait if device is in use, so automatic rmmod probably is not the best idea /sbin/rmmod $VBOX_MODULE - rm -f /var/lock/subsys/virtualbox + rm -f /var/lock/subsys/$VBOX_MODULE +} + +condrestart() { + if [ -f /var/lock/subsys/$VBOX_MODULE ]; then + stop + start + else + RETVAL=$1 + fi } RETVAL=0 @@ -71,6 +92,15 @@ case "$1" in stop start ;; + try-restart) + condrestart 0 + ;; + force-reload) + condrestart 7 + ;; + setup) + setup + ;; status) if ! is_module $VBOX_MODULE; then echo "$VBOX_MODULE module is loaded" @@ -86,7 +116,7 @@ case "$1" in fi ;; *) - msg_usage "$0 {start|stop|restart|status}" + msg_usage "$0 {start|stop|restart|try-restart|force-reload|setup|status}" exit 3 esac