VirtualBox

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

Last change on this file since 19089 was 19030, checked in by vboxsync, 16 years ago

#2954: Updated Linux installers for vboxnetadp.ko

  • Property svn:eol-style set to LF
  • Property svn:keywords set to Author Date Id Revision
File size: 10.4 KB
Line 
1#! /bin/sh
2# Sun VirtualBox
3# Linux kernel module init script
4
5#
6# Copyright (C) 2006-2009 Sun Microsystems, Inc.
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 30 70
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
31GROUPNAME=vboxusers
32LOG="/var/log/vbox-install.log"
33NOLSB=%NOLSB%
34
35[ -f /lib/lsb/init-functions ] || NOLSB=yes
36[ -f /etc/vbox/vbox.cfg ] && . /etc/vbox/vbox.cfg
37
38if [ -n "$INSTALL_DIR" ]; then
39 VBOXMANAGE="$INSTALL_DIR/VBoxManage"
40 BUILDVBOXDRV="$INSTALL_DIR/src/vboxdrv/build_in_tmp"
41 BUILDVBOXNETFLT="$INSTALL_DIR/src/vboxnetflt/build_in_tmp"
42 BUILDVBOXNETADP="$INSTALL_DIR/src/vboxnetadp/build_in_tmp"
43else
44 VBOXMANAGE="/usr/lib/%PACKAGE%/VBoxManage"
45 BUILDVBOXDRV="/usr/share/%PACKAGE%/src/vboxdrv/build_in_tmp"
46 BUILDVBOXNETFLT="/usr/share/%PACKAGE%/src/vboxnetflt/build_in_tmp"
47 BUILDVBOXNETADP="/usr/share/%PACKAGE%/src/vboxnetadp/build_in_tmp"
48fi
49
50if [ -n "$NOLSB" ]; then
51 if [ -f /etc/redhat-release ]; then
52 system=redhat
53 elif [ -f /etc/SuSE-release ]; then
54 system=suse
55 elif [ -f /etc/gentoo-release ]; then
56 system=gentoo
57 fi
58fi
59
60[ -r /etc/default/%PACKAGE% ] && . /etc/default/%PACKAGE%
61
62if [ -z "$NOLSB" ]; then
63 . /lib/lsb/init-functions
64 fail_msg() {
65 echo ""
66 log_failure_msg "$1"
67 }
68 succ_msg() {
69 log_success_msg " done."
70 }
71 begin_msg() {
72 log_daemon_msg "$@"
73 }
74else
75 if [ "$system" = "redhat" ]; then
76 . /etc/init.d/functions
77 fail_msg() {
78 echo -n " "
79 echo_failure
80 echo
81 echo " ($1)"
82 }
83 succ_msg() {
84 echo -n " "
85 echo_success
86 echo
87 }
88 elif [ "$system" = "suse" ]; then
89 . /etc/rc.status
90 fail_msg() {
91 rc_failed 1
92 rc_status -v
93 echo " ($1)"
94 }
95 succ_msg() {
96 rc_reset
97 rc_status -v
98 }
99 elif [ "$system" = "gentoo" ]; then
100 if [ -f /sbin/functions.sh ]; then
101 . /sbin/functions.sh
102 elif [ -f /etc/init.d/functions.sh ]; then
103 . /etc/init.d/functions.sh
104 fi
105 fail_msg() {
106 eerror "$1"
107 }
108 succ_msg() {
109 eend "$?"
110 }
111 begin_msg() {
112 ebegin "$1"
113 }
114 if [ "`which $0`" = "/sbin/rc" ]; then
115 shift
116 fi
117 else
118 fail_msg() {
119 echo " ...failed!"
120 echo " ($1)"
121 }
122 succ_msg() {
123 echo " ...done."
124 }
125 fi
126 if [ "$system" != "gentoo" ]; then
127 begin_msg() {
128 [ -z "${1:-}" ] && return 1
129 if [ -z "${2:-}" ]; then
130 echo -n "$1"
131 else
132 echo -n "$1: $2"
133 fi
134 }
135 fi
136fi
137
138failure()
139{
140 fail_msg "$1"
141 exit 0
142}
143
144running()
145{
146 lsmod | grep -q "$1[^_-]"
147}
148
149start()
150{
151 begin_msg "Starting VirtualBox kernel module"
152 if ! running vboxdrv; then
153 if ! find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
154 failure "No suitable module for running kernel found"
155 fi
156 if ! rm -f $DEVICE; then
157 failure "Cannot remove $DEVICE"
158 fi
159 if ! modprobe vboxdrv > /dev/null 2>&1; then
160 failure "modprobe vboxdrv failed. Please use 'dmesg' to find out why"
161 fi
162 sleep .2
163 fi
164 # ensure the character special exists
165 if [ ! -c $DEVICE ]; then
166 MAJOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/devices`
167 if [ ! -z "$MAJOR" ]; then
168 MINOR=0
169 else
170 MINOR=`sed -n 's;\([0-9]\+\) vboxdrv;\1;p' /proc/misc`
171 if [ ! -z "$MINOR" ]; then
172 MAJOR=10
173 fi
174 fi
175 if [ -z "$MAJOR" ]; then
176 rmmod vboxdrv 2>/dev/null
177 failure "Cannot locate the VirtualBox device"
178 fi
179 if ! mknod -m 0660 $DEVICE c $MAJOR $MINOR 2>/dev/null; then
180 rmmod vboxdrv 2>/dev/null
181 failure "Cannot create device $DEVICE with major $MAJOR and minor $MINOR"
182 fi
183 fi
184 # ensure permissions
185 if ! chown :$GROUPNAME $DEVICE 2>/dev/null; then
186 rmmod vboxnetadp 2>/dev/null
187 rmmod vboxnetflt 2>/dev/null
188 rmmod vboxdrv 2>/dev/null
189 failure "Cannot change owner $GROUPNAME for device $DEVICE"
190 fi
191 if ! modprobe vboxnetflt > /dev/null 2>&1; then
192 failure "modprobe vboxnetflt failed. Please use 'dmesg' to find out why"
193 fi
194 if ! modprobe vboxnetadp > /dev/null 2>&1; then
195 failure "modprobe vboxnetadp failed. Please use 'dmesg' to find out why"
196 fi
197 succ_msg
198}
199
200stop()
201{
202 begin_msg "Stopping VirtualBox kernel module"
203 if running vboxnetadp; then
204 if ! rmmod vboxnetadp 2>/dev/null; then
205 failure "Cannot unload module vboxnetadp"
206 fi
207 fi
208 if running vboxdrv; then
209 if running vboxnetflt; then
210 if ! rmmod vboxnetflt 2>/dev/null; then
211 failure "Cannot unload module vboxnetflt"
212 fi
213 fi
214 if ! rmmod vboxdrv 2>/dev/null; then
215 failure "Cannot unload module vboxdrv"
216 fi
217 if ! rm -f $DEVICE; then
218 failure "Cannot unlink $DEVICE"
219 fi
220 fi
221 succ_msg
222}
223
224# enter the following variables in /etc/default/%PACKAGE%:
225# SHUTDOWN_USERS="foo bar"
226# check for running VMs of user foo and user bar
227# SHUTDOWN=poweroff
228# SHUTDOWN=acpibutton
229# SHUTDOWN=savestate
230# select one of these shutdown methods for running VMs
231stop_vms()
232{
233 wait=0
234 for i in $SHUTDOWN_USERS; do
235 # don't create the ipcd directory with wrong permissions!
236 if [ -d /tmp/.vbox-$i-ipc ]; then
237 export VBOX_IPC_SOCKETID="$i"
238 VMS=`$VBOXMANAGE -nologo list runningvms 2>/dev/null`
239 if [ -n "$VMS" ]; then
240 if [ "$SHUTDOWN" = "poweroff" ]; then
241 begin_msg "Powering off remaining VMs"
242 for v in $VMS; do
243 $VBOXMANAGE -nologo controlvm $v poweroff
244 done
245 succ_msg
246 elif [ "$SHUTDOWN" = "acpibutton" ]; then
247 begin_msg "Sending ACPI power button event to remaining VMs"
248 for v in $VMS; do
249 $VBOXMANAGE -nologo controlvm $v acpipowerbutton
250 wait=30
251 done
252 succ_msg
253 elif [ "$SHUTDOWN" = "savestate" ]; then
254 begin_msg "Saving state of remaining VMs"
255 for v in $VMS; do
256 $VBOXMANAGE -nologo controlvm $v savestate
257 done
258 succ_msg
259 fi
260 fi
261 fi
262 done
263 # wait for some seconds when doing ACPI shutdown
264 if [ "$wait" -ne 0 ]; then
265 begin_msg "Waiting for $wait seconds for VM shutdown"
266 sleep $wait
267 succ_msg
268 fi
269}
270
271setup()
272{
273 stop
274 if find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|grep -q vboxnetadp; then
275 begin_msg "Removing old VirtualBox netadp kernel module"
276 find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2>/dev/null
277 succ_msg
278 fi
279 if find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|grep -q vboxnetflt; then
280 begin_msg "Removing old VirtualBox netflt kernel module"
281 find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|xargs rm -f 2>/dev/null
282 succ_msg
283 fi
284 if find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then
285 begin_msg "Removing old VirtualBox kernel module"
286 find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2>/dev/null
287 succ_msg
288 fi
289 begin_msg "Recompiling VirtualBox kernel module"
290 if ! $BUILDVBOXDRV \
291 --save-module-symvers /tmp/vboxdrv-Module.symvers \
292 --no-print-directory install > $LOG 2>&1; then
293 failure "Look at $LOG to find out what went wrong"
294 fi
295 if ! $BUILDVBOXNETFLT \
296 --use-module-symvers /tmp/vboxdrv-Module.symvers \
297 --no-print-directory install >> $LOG 2>&1; then
298 failure "Look at $LOG to find out what went wrong"
299 fi
300 if ! $BUILDVBOXNETADP \
301 --use-module-symvers /tmp/vboxdrv-Module.symvers \
302 --no-print-directory install >> $LOG 2>&1; then
303 failure "Look at $LOG to find out what went wrong"
304 fi
305 rm -f /etc/vbox/module_not_compiled
306 succ_msg
307 start
308}
309
310dmnstatus()
311{
312 if running vboxdrv; then
313 if running vboxnetflt; then
314 if running vboxnetadp; then
315 echo "VirtualBox kernel modules (vboxdrv, vboxnetflt and vboxnetadp) are loaded."
316 else
317 echo "VirtualBox kernel modules (vboxdrv and vboxnetflt) are loaded."
318 fi
319 else
320 echo "VirtualBox kernel module is loaded."
321 fi
322 for i in $SHUTDOWN_USERS; do
323 # don't create the ipcd directory with wrong permissions!
324 if [ -d /tmp/.vbox-$i-ipc ]; then
325 export VBOX_IPC_SOCKETID="$i"
326 VMS=`$VBOXMANAGE -nologo list runningvms 2>/dev/null`
327 if [ -n "$VMS" ]; then
328 echo "The following VMs are currently running:"
329 for v in $VMS; do
330 echo " $v"
331 done
332 fi
333 fi
334 done
335 else
336 echo "VirtualBox kernel module is not loaded."
337 fi
338}
339
340case "$1" in
341start)
342 start
343 ;;
344stop)
345 stop_vms
346 stop
347 ;;
348stop_vms)
349 stop_vms
350 ;;
351restart)
352 stop && start
353 ;;
354force-reload)
355 stop
356 start
357 ;;
358setup)
359 setup
360 ;;
361status)
362 dmnstatus
363 ;;
364*)
365 echo "Usage: $0 {start|stop|stop_vms|restart|force-reload|status|setup}"
366 exit 1
367esac
368
369exit 0
Note: See TracBrowser for help on using the repository browser.

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