Changeset 7515 in vbox
- Timestamp:
- Mar 21, 2008 9:38:32 AM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 28984
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/debian/vboxdrv.init.in ¶
r6332 r7515 1 #! /bin/bash 2 # 1 #! /bin/sh 3 2 # innotek VirtualBox 4 3 # Linux kernel module init script 4 5 5 # 6 6 # Copyright (C) 2006-2007 innotek GmbH … … 15 15 # 16 16 17 18 17 # chkconfig: 35 30 60 19 18 # description: VirtualBox Linux kernel module … … 28 27 ### END INIT INFO 29 28 30 KDIR="/lib/modules/`uname -r`/misc" 29 PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH 31 30 DEVICE=/dev/vboxdrv 32 31 MODNAME=vboxdrv … … 35 34 NOLSB=%NOLSB% 36 35 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 39 if [ -n "$INSTALL_DIR" ]; then 40 VBOXMANAGE="$INSTALL_DIR/VBoxManage" 41 BUILDINTMP="$INSTALL_DIR/src/build_in_tmp" 42 else 43 VBOXMANAGE="/usr/lib/virtualbox-ose/VBoxManage" 44 BUILDINTMP="/usr/share/virtualbox-ose/src/build_in_tmp" 39 45 fi 40 46 41 if [ -z "$NOLSB" -a -f /lib/lsb/init-functions ]; then 42 . /lib/lsb/init-functions 47 if [ -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 55 fi 56 57 [ -r /etc/default/virtualbox-ose ] && . /etc/default/virtualbox-ose 58 59 if [ -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 } 43 71 else 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 60 110 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 72 129 fi 73 130 74 131 failure() 75 132 { 76 echo "" 77 log_failure_msg "$1" 78 exit 0 133 fail_msg "$1" 134 exit 0 79 135 } 80 136 81 137 running() 82 138 { 83 lsmod | grep -q "$MODNAME[^_-]"139 lsmod | grep -q "$MODNAME[^_-]" 84 140 } 85 141 86 142 start() 87 143 { 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 185 stop() 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 206 stop_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 246 setup() 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 262 dmnstatus() 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 104 279 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 140 282 } 141 283 142 284 case "$1" in 143 285 start) 144 286 start 145 287 ;; 146 stop) 288 stop) 289 stop_vms 147 290 stop 148 291 ;; 149 restart|reload|force-reload) 292 stop_vms) 293 stop_vms 294 ;; 295 restart) 296 stop && start 297 ;; 298 force-reload) 150 299 stop 151 300 start 152 301 ;; 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 302 setup) 303 setup 304 ;; 305 status) 306 dmnstatus 307 ;; 308 *) 309 echo "Usage: $0 {start|stop|stop_vms|restart|force-reload|status|setup}" 310 exit 1 177 311 esac 178 312
Note:
See TracChangeset
for help on using the changeset viewer.