installer-utils.sh revision d87ec738bd7d30635ddd129a1beb7eadb6658aa9
# Oracle VM VirtualBox
# VirtualBox installer shell routines
#
# Copyright (C) 2007-2011 Oracle Corporation
#
# This file is part of VirtualBox Open Source Edition (OSE), as
# available from http://www.virtualbox.org. This file is free software;
# you can redistribute it and/or modify it under the terms of the GNU
# General Public License (GPL) as published by the Free Software
# Foundation, in version 2 as it comes in the "COPYING" file of the
# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
#
setup_normal_input_install_udev() {
TEST_UDEV_VERSION="$1" # udev version to simulate
eval 'my_which() { which "$@" ; }'
eval 'my_test() { test "$@" ; }'
eval 'my_rm() { rm "$@" ; }'
}
setup_normal_input_install_udev
setup_test_input_install_udev() {
TEST_NAME="$1" # used to identify the current test
TEST_UDEV_VERSION="$2" # udev version to simulate
eval 'my_which() { echo test_udev ; }'
eval 'my_test() { true ; }'
eval 'my_rm() { case "$2" in "/etc/udev/rules.d/60-vboxdrv.rules") true ;; *) echo "rm: bad file name \"$2\"!"; false ;; esac ; }'
eval 'test_udev() { echo "$TEST_UDEV_VERSION" ; }'
DELETED_UDEV_FILE=""
}
udev_write_vboxdrv() {
VBOXDRV_GRP="$1"
VBOXDRV_MODE="$2"
echo "KERNEL==\"vboxdrv\", NAME=\"vboxdrv\", OWNER=\"root\", GROUP=\"$VBOXDRV_GRP\", MODE=\"$VBOXDRV_MODE\""
}
udev_write_usb() {
INSTALLATION_DIR="$1"
USB_GROUP="$2"
echo "SUBSYSTEM==\"usb_device\", ACTION==\"add\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}${USB_GROUP}\""
echo "SUBSYSTEM==\"usb\", ACTION==\"add\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh \$major \$minor \$attr{bDeviceClass}${USB_GROUP}\""
echo "SUBSYSTEM==\"usb_device\", ACTION==\"remove\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\""
echo "SUBSYSTEM==\"usb\", ACTION==\"remove\", ENV{DEVTYPE}==\"usb_device\", RUN+=\"$INSTALLATION_DIR/VBoxCreateUSBNode.sh --remove \$major \$minor\""
}
install_udev() {
# install udev rule (disable with INSTALL_NO_UDEV=1 in /etc/default/virtualbox) for distribution packages
VBOXDRV_GRP="$1" # The group owning the vboxdrv device
VBOXDRV_MODE="$2" # The access mode for the vboxdrv device
INSTALLATION_DIR="$3" # The directory VirtualBox is installed in
USB_GROUP="$4" # The group that has permission to access USB devices
NO_INSTALL="$5" # Set this to "1" to remove but not re-install rules
# Extra space!
case "$USB_GROUP" in ?*) USB_GROUP=" $USB_GROUP" ;; esac
case "$NO_INSTALL" in
"1") ;;
*)
if my_test -d /etc/udev/rules.d; then
udev_call=""
udev_app=`my_which udevadm 2> /dev/null`
if [ $? -eq 0 ]; then
udev_call="${udev_app} version 2> /dev/null"
else
udev_app=`my_which udevinfo 2> /dev/null`
if [ $? -eq 0 ]; then
udev_call="${udev_app} -V 2> /dev/null"
fi
fi
udev_fix=""
if [ "${udev_call}" != "" ]; then
udev_out=`${udev_call}`
udev_ver=`expr "$udev_out" : '[^0-9]*\([0-9]*\)'`
if [ "$udev_ver" = "" -o "$udev_ver" -lt 55 ]; then
udev_fix="1"
fi
udev_do_usb=""
if [ "$udev_ver" -ge 59 ]; then
udev_do_usb="1"
fi
fi
case "$udev_fix" in
"1")
udev_write_vboxdrv "$VBOXDRV_GRP" "$VBOXDRV_MODE" |
sed 's/\([^+=]*\)[+=]*\([^"]*"[^"]*"\)/\1=\2/g'
;;
*)
udev_write_vboxdrv "$VBOXDRV_GRP" "$VBOXDRV_MODE"
case "$udev_do_usb" in "1")
udev_write_usb "$INSTALLATION_DIR" "$USB_GROUP" ;;
esac
;;
esac
fi
;;
esac
# Remove old udev description file
if my_test -f /etc/udev/rules.d/60-vboxdrv.rules; then
my_rm -f /etc/udev/rules.d/60-vboxdrv.rules 2> /dev/null
fi
}
cleanup_test_input_install_udev() {
setup_normal_input_install_udev
unset test_udev
DELETED_UDEV_FILE=""
}