blob: 1058744c57a32f64f0cfcb8c167c1927fbeec08a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
. /etc/vbox/vbox.cfg
MODLIST=()
LOG="/var/log/vbox-install.log"
>| "$LOG"
if [[ $INSTALL_DIR ]]; then
VBOXMANAGE=$INSTALL_DIR/VBoxManage
BUILDVBOXDRV=$INSTALL_DIR/src/vboxdrv/build_in_tmp
BUILDVBOXNETFLT=$INSTALL_DIR/src/vboxnetflt/build_in_tmp
BUILDVBOXNETADP=$INSTALL_DIR/src/vboxnetadp/build_in_tmp
BUILDVBOXPCI=$INSTALL_DIR/src/vboxpci/build_in_tmp
else
echo "error: missing vbox.cfg"
exit 1
fi
if [[ -f /proc/modules ]]; then
IFS=$'\n' read -r -d '' -a MODLIST < \
<(grep -oE '^vbox(pci|netflt|netadp|drv)' /proc/modules)
fi
if (( ${#MODLIST[*]} )); then
stat_busy "Unloading VirtualBox kernel modules"
modprobe -ar "${MODLIST[@]}" && stat_done || stat_fail
fi
for kdir in /lib/modules/*; do
if [[ ! -d $kdir/kernel ]]; then
# found a stale kernel
mods=("$kdir/misc/vbox"{drv,netadp,netflt,pci}.ko*)
if (( ${#mods[@]} )); then
stat_busy "Removing all old VirtualBox kernel modules"
if rm -f "${mods[@]}" &&
rmdir -p --ignore-fail-on-non-empty "$p/misc/" 2>/dev/null; then
stat_done
else
stat_fail
fi
fi
fi
done
# default to the currently running kernel
if (( ! $# )); then
set -- $(uname -r)
fi
for kernver; do
export KERN_DIR=/lib/modules/$kernver/build
if [[ ! -d $KERN_DIR ]]; then
printf "error: \`%s' does not appear to be a valid kernel build directory.\n" \
"$KERN_DIR"
continue
fi
stat_busy "Recompiling VirtualBox kernel modules ($kernver)"
for build in BUILDVBOX{DRV,NETFLT,NETADP,PCI}; do
if ! ${!build} \
--save-module-symvers /tmp/vboxdrv-Module.symvers \
--no-print-directory install >> $LOG 2>&1; then
echo "Look at $LOG to find out what went wrong"
stat_fail
continue
fi
done
stat_done
done
if (( ${#MODLIST[*]} )); then
stat_busy "Reloading VirtualBox kernel modules"
modprobe -a "${MODLIST[@]}" && stat_done || stat_fail
fi
|