diff options
Diffstat (limited to 'community/virtualbox/vboxdrv.sh')
-rwxr-xr-x | community/virtualbox/vboxdrv.sh | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/community/virtualbox/vboxdrv.sh b/community/virtualbox/vboxdrv.sh new file mode 100755 index 000000000..8de14b97f --- /dev/null +++ b/community/virtualbox/vboxdrv.sh @@ -0,0 +1,80 @@ +#!/bin/bash + +. /etc/rc.conf +. /etc/rc.d/functions +. /etc/vbox/vbox.cfg + +MODLIST=() +LOG="/var/log/vbox-install.log" + +if [ -n "$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" +else + echo "missing vbox.cfg" + exit 0 +fi + +case "$1" in + setup) + stat_busy "Unloading VirtualBox kernel modules" + for module in vbox{netflt,netadp,drv}; do + if grep -q "^${module}" /proc/modules; then + MODLIST+=($module) + modprobe -r $module + fi + done + stat_done + for p in /lib/modules/*; do + if [ ! -d "$p/kernel" ]; then + if [ -e "$p/misc/vboxdrv.ko" ]; then + stat_busy "Removing old VirtualBox kernel modules from $p" + rm -f "$p/misc/vbox"{drv,netadp,netflt}.ko 2>/dev/null + rmdir -p --ignore-fail-on-non-empty "$p/misc/" 2>/dev/null + stat_done + fi + fi + done + if find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|grep -q vboxnetadp; then + stat_busy "Removing old VirtualBox netadp kernel module" + find /lib/modules/`uname -r` -name "vboxnetadp\.*" 2>/dev/null|xargs rm -f 2>/dev/null + stat_done + fi + if find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|grep -q vboxnetflt; then + stat_busy "Removing old VirtualBox netflt kernel module" + find /lib/modules/`uname -r` -name "vboxnetflt\.*" 2>/dev/null|xargs rm -f 2>/dev/null + stat_done + fi + if find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|grep -q vboxdrv; then + stat_busy "Removing old VirtualBox kernel module" + find /lib/modules/`uname -r` -name "vboxdrv\.*" 2>/dev/null|xargs rm -f 2>/dev/null + stat_done + fi + stat_busy "Recompiling VirtualBox kernel modules" + if ! $BUILDVBOXDRV \ + --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" + fi + if ! $BUILDVBOXNETFLT \ + --use-module-symvers /tmp/vboxdrv-Module.symvers \ + --no-print-directory install >> $LOG 2>&1; then + echo "Look at $LOG to find out what went wrong" + fi + if ! $BUILDVBOXNETADP \ + --use-module-symvers /tmp/vboxdrv-Module.symvers \ + --no-print-directory install >> $LOG 2>&1; then + echo "Look at $LOG to find out what went wrong" + fi + stat_done + stat_busy "Reloading VirtualBox kernel modules" + for module in "${MODLIST[@]}"; do + modprobe $module + done + stat_done + ;; + *) + echo "usage: $0 {setup}" +esac |