VirtualBox

source: vbox/trunk/src/VBox/Installer/linux/vboxdrv.sh.in@ 39334

Last change on this file since 39334 was 39334, checked in by vboxsync, 13 years ago

Installers/linux: restore debug logging in kernel modules (host).

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 12.1 KB
Line 
1#! /bin/sh
2# Oracle VM VirtualBox
3# Linux kernel module init script
4
5#
6# Copyright (C) 2006-2010 Oracle Corporation
7#
8# This file is part of VirtualBox Open Source Edition (OSE), as
9# available from http://www.virtualbox.org. This file is free software;
10# you can redistribute it and/or modify it under the terms of the GNU
11# General Public License (GPL) as published by the Free Software
12# Foundation, in version 2 as it comes in the "COPYING" file of the
13# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
14# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
15#
16
17# chkconfig: 35 20 80
18# description: VirtualBox Linux kernel module
19#
20### BEGIN INIT INFO
21# Provides: vboxdrv
22# Required-Start: $syslog
23# Required-Stop:
24# Default-Start: 2 3 4 5
25# Default-Stop: 0 1 6
26# Short-Description: VirtualBox Linux kernel module
27### END INIT INFO
28
29PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
30DEVICE=/dev/vboxdrv
31LOG="/var/log/vbox-install.log"
32NOLSB=%NOLSB%
33DEBIAN=%DEBIAN%
34MODPROBE=/sbin/modprobe
35
36if $MODPROBE -c | grep -q '^allow_unsupported_modules *0'; then
37 MODPROBE="$MODPROBE --allow-unsupported-modules"
38fi
39
40[ -f /lib/lsb/init-functions ] || NOLSB=yes
41[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg
42export BUILD_TYPE
43export USERNAME
44export USER=$USERNAME
45
46if [ -n "$INSTALL_DIR" ]; then
47 VBOXMANAGE="$INSTALL_DIR/VBoxManage"
48 MODULE_SRC="$INSTALL_DIR/src/vboxhost"
49else
50 VBOXMANAGE="/usr/lib/%PACKAGE%/VBoxManage"
51 MODULE_SRC="/usr/share/%PACKAGE%/src/vboxhost"
52fi
53BUILDINTMP="$MODULE_SRC/build_in_tmp"
54DODKMS="$MODULE_SRC/do_dkms"
55
56# silently exit if the package was uninstalled but not purged,
57# applies to Debian packages only
58[ -z "$DEBIAN" -o -x $VBOXMANAGE -a -x $BUILDINTMP ] || exit 0
59
60if [ -n "$NOLSB" ]; then
61 if [ -f /etc/redhat-release ]; then
62 system=redhat
63 elif [ -f /etc/SuSE-release ]; then
64 system=suse
65 elif [ -f /etc/gentoo-release ]; then
66 system=gentoo
67 fi
68fi
69
70[ -r /etc/default/%PACKAGE% ] && . /etc/default/%PACKAGE%
71
72if [ -z "$NOLSB" ]; then
73 . /lib/lsb/init-functions
74 fail_msg() {
75 echo ""
76 log_failure_msg "$1"
77 }
78 succ_msg() {
79 log_end_msg 0
80 }
81 begin_msg() {
82 log_daemon_msg "$@"
83 }
84else
85 if [ "$system" = "redhat" ]; then
86 . /etc/init.d/functions
87 fail_msg() {
88 echo -n " "
89 echo_failure
90 echo
91 echo " ($1)"
92 }
93 succ_msg() {
94 echo -n " "
95 echo_success
96 echo
97 }
98 elif [ "$system" = "suse" ]; then
99 . /etc/rc.status
100 fail_msg() {
101 rc_failed 1
102 rc_status -v
103 echo " ($1)"
104 }
105 succ_msg() {
106 rc_reset
107 rc_status -v
108 }
109 elif [ "$system" = "gentoo" ]; then
110 if [ -f /sbin/functions.sh ]; then
111 . /sbin/functions.sh
112 elif [ -f /etc/init.d/functions.sh ]; then
113 . /etc/init.d/functions.sh
114 fi
115 fail_msg() {
116 eerror "$1"
117 }
118 succ_msg() {
119 eend "$?"
120 }
121 begin_msg() {
122 ebegin "$1"
123 }
124 if [ "`which $0`" = "/sbin/rc" ]; then
125 shift
126 fi
127 else
128 fail_msg() {
129 echo " ...failed!"
130 echo " ($1)"
131 }
132 succ_msg() {
133 echo " ...done."
134 }
135 fi
136 if [ "$system" != "gentoo" ]; then
137 begin_msg() {
138 [ -z "${1:-}" ] && return 1
139 if [ -z "${2:-}" ]; then
140 echo -n "$1"
141 else
142 echo -n "$1: $2"
143 fi
144 }
145 fi
146fi
147
148failure()
149{
150 fail_msg "$1"
151 exit 0
152}
153
154running()
155{
156 lsmod | grep -q "$1[^_-]"
157}
158
159start()
160{
161 begin_msg "Starting VirtualBox kernel modules"
162 if [ -d /proc/xen ]; then
163 failure "Running VirtualBox in a Xen environment is not supported"
164 fi
165 if ! running vboxdrv; then
166 if ! rm -f $DEVICE; then
167 failure "Cannot remove $DEVICE"
168 fi
169 if ! $MODPROBE vboxdrv > /dev/null 2>&1; then
170 failure "modprobe vboxdrv failed. Please use 'dmesg' to find out why"
171 fi
172 sleep .2
173 fi
174 # ensure the character special exists
175 if [ ! -c $DEVICE ]; then
176 MAJOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/devices`
177 if [ ! -z "$MAJOR" ]; then
178 MINOR=0
179 else
180 MINOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/misc`
181 if [ ! -z "$MINOR" ]; then
182 MAJOR=10
183 fi
184 fi
185 if [ -z "$MAJOR" ]; then
186 rmmod vboxdrv 2>/dev/null
187 failure "Cannot locate the VirtualBox device"
188 fi
189 if ! mknod -m 0660 $DEVICE c $MAJOR $MINOR 2>/dev/null; then
190 rmmod vboxdrv 2>/dev/null
191 failure "Cannot create device $DEVICE with major $MAJOR and minor $MINOR"
192 fi
193 fi
194 # ensure permissions
195 if ! chown :%GROUP% $DEVICE 2>/dev/null; then
196 rmmod vboxpci 2>/dev/null
197 rmmod vboxnetadp 2>/dev/null
198 rmmod vboxnetflt 2>/dev/null
199 rmmod vboxdrv 2>/dev/null
200 failure "Cannot change group %GROUP% for device $DEVICE"
201 fi
202 if ! $MODPROBE vboxnetflt > /dev/null 2>&1; then
203 failure "modprobe vboxnetflt failed. Please use 'dmesg' to find out why"
204 fi
205 if ! $MODPROBE vboxnetadp > /dev/null 2>&1; then
206 failure "modprobe vboxnetadp failed. Please use 'dmesg' to find out why"
207 fi
208 if ! $MODPROBE vboxpci > /dev/null 2>&1; then
209 failure "modprobe vboxpci failed. Please use 'dmesg' to find out why"
210 fi
211 # Create the /dev/vboxusb directory if the host supports that method
212 # of USB access. The USB code checks for the existance of that path.
213 if grep -q usb_device /proc/devices; then
214 mkdir -p -m 0750 /dev/vboxusb 2>/dev/null
215 chown root:vboxusers /dev/vboxusb 2>/dev/null
216 fi
217 succ_msg
218}
219
220stop()
221{
222 begin_msg "Stopping VirtualBox kernel modules"
223 if running vboxpci; then
224 if ! rmmod vboxpci 2>/dev/null; then
225 failure "Cannot unload module vboxpci"
226 fi
227 fi
228 if running vboxnetadp; then
229 if ! rmmod vboxnetadp 2>/dev/null; then
230 failure "Cannot unload module vboxnetadp"
231 fi
232 fi
233 if running vboxdrv; then
234 if running vboxnetflt; then
235 if ! rmmod vboxnetflt 2>/dev/null; then
236 failure "Cannot unload module vboxnetflt"
237 fi
238 fi
239 if ! rmmod vboxdrv 2>/dev/null; then
240 failure "Cannot unload module vboxdrv"
241 fi
242 if ! rm -f $DEVICE; then
243 failure "Cannot unlink $DEVICE"
244 fi
245 fi
246 succ_msg
247}
248
249# enter the following variables in /etc/default/%PACKAGE%:
250# SHUTDOWN_USERS="foo bar"
251# check for running VMs of user foo and user bar
252# SHUTDOWN=poweroff
253# SHUTDOWN=acpibutton
254# SHUTDOWN=savestate
255# select one of these shutdown methods for running VMs
256stop_vms()
257{
258 wait=0
259 for i in $SHUTDOWN_USERS; do
260 # don't create the ipcd directory with wrong permissions!
261 if [ -d /tmp/.vbox-$i-ipc ]; then
262 export VBOX_IPC_SOCKETID="$i"
263 VMS=`$VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/' 2>/dev/null`
264 if [ -n "$VMS" ]; then
265 if [ "$SHUTDOWN" = "poweroff" ]; then
266 begin_msg "Powering off remaining VMs"
267 for v in $VMS; do
268 $VBOXMANAGE --nologo controlvm $v poweroff
269 done
270 succ_msg
271 elif [ "$SHUTDOWN" = "acpibutton" ]; then
272 begin_msg "Sending ACPI power button event to remaining VMs"
273 for v in $VMS; do
274 $VBOXMANAGE --nologo controlvm $v acpipowerbutton
275 wait=30
276 done
277 succ_msg
278 elif [ "$SHUTDOWN" = "savestate" ]; then
279 begin_msg "Saving state of remaining VMs"
280 for v in $VMS; do
281 $VBOXMANAGE --nologo controlvm $v savestate
282 done
283 succ_msg
284 fi
285 fi
286 fi
287 done
288 # wait for some seconds when doing ACPI shutdown
289 if [ "$wait" -ne 0 ]; then
290 begin_msg "Waiting for $wait seconds for VM shutdown"
291 sleep $wait
292 succ_msg
293 fi
294}
295
296# setup_script
297setup()
298{
299 stop
300 begin_msg "Uninstalling old VirtualBox DKMS kernel modules"
301 $DODKMS uninstall > $LOG
302 succ_msg
303 if find /lib/modules/`uname -r` -name "vboxpci\.*" 2>/dev/null|grep -q vboxpci; then
304 begin_msg "Removing old VirtualBox pci kernel module"
305 find /lib/modules/`uname -r` -name "vboxpci\.*" 2>/dev/null|xargs rm -f 2>/dev/null
306 succ_msg
307 fi
308 if find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|grep -q vboxnetadp; then
309 begin_msg "Removing old VirtualBox netadp kernel module"
310 find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2>/dev/null
311 succ_msg
312 fi
313 if find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|grep -q vboxnetflt; then
314 begin_msg "Removing old VirtualBox netflt kernel module"
315 find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|xargs rm -f 2>/dev/null
316 succ_msg
317 fi
318 if find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
319 begin_msg "Removing old VirtualBox kernel module"
320 find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2>/dev/null
321 succ_msg
322 fi
323 begin_msg "Trying to register the VirtualBox kernel modules using DKMS"
324 if ! $DODKMS install >> $LOG; then
325 fail_msg "Failed, trying without DKMS"
326 begin_msg "Recompiling VirtualBox kernel modules"
327 if ! $BUILDINTMP \
328 --save-module-symvers /tmp/vboxdrv-Module.symvers \
329 --module-source "$MODULE_SRC/vboxdrv" \
330 --no-print-directory install >> $LOG 2>&1; then
331 failure "Look at $LOG to find out what went wrong"
332 fi
333 if ! $BUILDINTMP \
334 --use-module-symvers /tmp/vboxdrv-Module.symvers \
335 --module-source "$MODULE_SRC/vboxnetflt" \
336 --no-print-directory install >> $LOG 2>&1; then
337 failure "Look at $LOG to find out what went wrong"
338 fi
339 if ! $BUILDINTMP \
340 --use-module-symvers /tmp/vboxdrv-Module.symvers \
341 --module-source "$MODULE_SRC/vboxnetadp" \
342 --no-print-directory install >> $LOG 2>&1; then
343 failure "Look at $LOG to find out what went wrong"
344 fi
345 if ! $BUILDINTMP \
346 --use-module-symvers /tmp/vboxdrv-Module.symvers \
347 --module-source "$MODULE_SRC/vboxpci" \
348 --no-print-directory install >> $LOG 2>&1; then
349 failure "Look at $LOG to find out what went wrong"
350 fi
351 fi
352 rm -f /etc/vbox/module_not_compiled
353 succ_msg
354 start
355}
356
357dmnstatus()
358{
359 if running vboxdrv; then
360 str="vboxdrv"
361 if running vboxnetflt; then
362 str="$str, vboxnetflt"
363 if running vboxnetadp; then
364 str="$str, vboxnetadp"
365 fi
366 fi
367 if running vboxpci; then
368 str="$str, vboxpci"
369 fi
370 echo "VirtualBox kernel modules ($str) are loaded."
371 for i in $SHUTDOWN_USERS; do
372 # don't create the ipcd directory with wrong permissions!
373 if [ -d /tmp/.vbox-$i-ipc ]; then
374 export VBOX_IPC_SOCKETID="$i"
375 VMS=`$VBOXMANAGE --nologo list runningvms | sed -e 's/^".*".*{\(.*\)}/\1/' 2>/dev/null`
376 if [ -n "$VMS" ]; then
377 echo "The following VMs are currently running:"
378 for v in $VMS; do
379 echo " $v"
380 done
381 fi
382 fi
383 done
384 else
385 echo "VirtualBox kernel module is not loaded."
386 fi
387}
388
389case "$1" in
390start)
391 start
392 ;;
393stop)
394 stop_vms
395 stop
396 ;;
397stop_vms)
398 stop_vms
399 ;;
400restart)
401 stop && start
402 ;;
403force-reload)
404 stop
405 start
406 ;;
407setup)
408 setup
409 ;;
410status)
411 dmnstatus
412 ;;
413*)
414 echo "Usage: $0 {start|stop|stop_vms|restart|force-reload|status|setup}"
415 exit 1
416esac
417
418exit 0
Note: See TracBrowser for help on using the repository browser.

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