#!/bin/bash -e VBOXVERSION="`grep -oP '(?<=VBOX_VERSION_STRING=").*(?=")' /opt/VirtualBox/scripts/generated.sh`" SDIR="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")" #TMPDIR="$SDIR/vbox_temp" TMPDIR="/root/vbox_temp" PKGEXT=${1-tgz} [ -d "$TMPDIR" ] && rm -rf $TMPDIR mkdir $TMPDIR cd $TMPDIR cp --parents -rf /opt/VirtualBox $TMPDIR/ cp --parents -f /lib/modules/`uname -r`/misc/vboxdrv.ko $TMPDIR/ cp --parents -f /lib/modules/`uname -r`/misc/vboxnetflt.ko $TMPDIR/ cp --parents -f /lib/modules/`uname -r`/misc/vboxnetadp.ko $TMPDIR/ cp --parents -f /lib/modules/`uname -r`/misc/vboxpci.ko $TMPDIR/ cp --parents -rf /etc/vbox $TMPDIR/ cp --parents -f /etc/udev/rules.d/*-vboxdrv.rules $TMPDIR/ #workaround for vbox5 "unknown init type" issue [ ! -e "/etc/rc.d/rc.vboxdrv" ] && cp /opt/VirtualBox/vboxdrv.sh /etc/rc.d/rc.vboxdrv [ ! -e "/etc/rc.d/rc.vboxballoonctrl-service" ] && cp /opt/VirtualBox/vboxballoonctrl-service.sh /etc/rc.d/rc.vboxballoonctrl-service [ ! -e "/etc/rc.d/rc.vboxautostart-service" ] && cp /opt/VirtualBox/vboxautostart-service.sh /etc/rc.d/rc.vboxautostart-service [ ! -e "/etc/rc.d/rc.vboxweb-service" ] && cp /opt/VirtualBox/vboxweb-service.sh /etc/rc.d/rc.vboxweb-service cp --parents -f /etc/rc.d/rc.vboxdrv $TMPDIR/ cp --parents -f /etc/rc.d/rc.vboxballoonctrl-service $TMPDIR/ cp --parents -f /etc/rc.d/rc.vboxautostart-service $TMPDIR/ cp --parents -f /etc/rc.d/rc.vboxweb-service $TMPDIR/ rename .rules .rules.new $TMPDIR/etc/udev/rules.d/*-vboxdrv.rules [ -d "$TMPDIR/opt/VirtualBox/ExtensionPacks" ] && rm -rf $TMPDIR/opt/VirtualBox/ExtensionPacks mkdir $TMPDIR/install cat >>$TMPDIR/install/doinst.sh << 'THE_END_OF_SCRIPT' # Create users group groupadd -r -f vboxusers 2> /dev/null # Create symlinks to start binaries ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VirtualBox ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxManage ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxSDL ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxVRDP ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxHeadless ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxBalloonCtrl ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxAutostart ln -sf /opt/VirtualBox/VBox.sh /usr/bin/vboxwebsrv ln -sf /opt/VirtualBox/vbox-img /usr/bin/vbox-img if [ -f /opt/VirtualBox/VBoxDTrace ]; then ln -sf /opt/VirtualBox/VBox.sh /usr/bin/VBoxDTrace fi # Convenience symlinks. The creation fails if the FS is not case sensitive ln -sf VirtualBox /usr/bin/virtualbox > /dev/null 2>&1 ln -sf VBoxManage /usr/bin/vboxmanage > /dev/null 2>&1 ln -sf VBoxSDL /usr/bin/vboxsdl > /dev/null 2>&1 ln -sf VBoxHeadless /usr/bin/vboxheadless > /dev/null 2>&1 if [ -f /opt/VirtualBox/VBoxDTrace ]; then ln -sf VBoxDTrace /usr/bin/vboxdtrace > /dev/null 2>&1 fi # Remove old udev description files and rename the .new one rm -f /etc/udev/rules.d/*-vboxdrv.rules 2> /dev/null rename .rules.new .rules /etc/udev/rules.d/*-vboxdrv.rules.new install_create_usb_node_for_sysfs() { # Create a usb device node for a given sysfs path path="$1" # sysfs path for the device usb_createnode="$2" # Path to the USB device node creation script usb_group="$3" # The group to give ownership of the node to if test -r "${path}/dev"; then dev="`cat "${path}/dev" 2> /dev/null`" major="`expr "$dev" : '\(.*\):' 2> /dev/null`" minor="`expr "$dev" : '.*:\(.*\)' 2> /dev/null`" class="`cat ${path}/bDeviceClass 2> /dev/null`" sh "${usb_createnode}" "$major" "$minor" "$class" "${usb_group}" 2>/dev/null fi } # Build usb device tree for i in /sys/bus/usb/devices/*; do install_create_usb_node_for_sysfs "$i" "/opt/VirtualBox/VBoxCreateUSBNode.sh" "vboxusers" done depmod -a /etc/rc.d/rc.vboxdrv start /etc/rc.d/rc.vboxballoonctrl-service start /etc/rc.d/rc.vboxautostart-service start /etc/rc.d/rc.vboxweb-service start THE_END_OF_SCRIPT cd $TMPDIR && makepkg -l n -c n ../vbox-${VBOXVERSION}-unRAID-$(uname -r | cut -d"-" -f1)$([ `uname -m` == 'x86_64' ] && echo '-x64').${PKGEXT} rm -rf $TMPDIR