summaryrefslogtreecommitdiff
path: root/community-testing/virtualbox/vboxbuild
diff options
context:
space:
mode:
Diffstat (limited to 'community-testing/virtualbox/vboxbuild')
-rw-r--r--community-testing/virtualbox/vboxbuild86
1 files changed, 86 insertions, 0 deletions
diff --git a/community-testing/virtualbox/vboxbuild b/community-testing/virtualbox/vboxbuild
new file mode 100644
index 000000000..e6fb94edd
--- /dev/null
+++ b/community-testing/virtualbox/vboxbuild
@@ -0,0 +1,86 @@
+#!/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/[2-3]*; do
+ if [[ ! -d $kdir/kernel ]]; then
+ # found a stale kernel
+ mods=("$kdir/extramodules"{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 "$kdir/extramodules" 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
+ export MODULE_DIR=/lib/modules/$kernver/extramodules
+ 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)"
+ 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"
+ stat_fail
+ fi
+ for build in BUILDVBOX{NETFLT,NETADP,PCI}; do
+ if ! ${!build} \
+ --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"
+ stat_fail
+ fi
+ done
+ gzip -f9 "$MODULE_DIR"/*.ko
+ depmod "$kernver"
+ stat_done
+done
+
+if (( ${#MODLIST[*]} )); then
+ stat_busy "Reloading VirtualBox kernel modules"
+ modprobe -a "${MODLIST[@]}" && stat_done || stat_fail
+fi
+