#!/bin/bash # $Header: /root/magellan-cvs/src/virtualbox/virtualbox-config.sh,v 1.9 2009-07-01 18:02:28 niro Exp $ # Configures virtualbox for Magellan-Linux LIBDIR=/usr/lib INSTDIR=${LIBDIR}/virtualbox VBOXMODULE=vboxdrv.ko VBOXNETMODULE=vboxnetflt.ko COLRED="\033[1;6m\033[31m" COLGREEN="\033[1;6m\033[32m" COLDEFAULT="\033[0m" if [[ ${NOCOLORS} = true ]] then COLRED="" COLGREEN="" COLDEFAULT="" fi die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; } mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; } # must be root [[ $(id -u) != 0 ]] && die "You must be r00t!" # check for given argvs for i in $* do case $1 in --kernel-version) shift; KERNEL_VERSION="$1" ;; --kernel-sources) shift; KERNEL_SOURCES="$1" ;; esac shift done # some sane defaults [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)" [[ -z ${KERNEL_SOURCES} ]] && KERNEL_SOURCES="/lib/modules/${KERNEL_VERSION}/source" mecho "Running $(basename $0) for kernelversion ${KERNEL_VERSION} ..." if [ ! -f ${KERNEL_SOURCES}/include/linux/version.h ] then die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting." fi for module in ${VBOXMODULE} ${VBOXNETMODULE} do if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module} ]] then mecho "Removing old ${module} module ..." # try to unload the modules if [[ -n $(grep "${module} " /proc/modules 2> /dev/null) ]] then modprobe -r ${module/.ko/} fi rm -f /lib/modules/${KERNEL_VERSION}/misc/${module} fi done for module in ${VBOXMODULE} ${VBOXNETMODULE} do # compile the module cd ${INSTDIR}/src/${module/.ko/} make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) clean || die "mod-compile ${module}" # need some symver from vboxmodule (must be run after clean!) if [[ ${module} = ${VBOXNETMODULE} ]] && [[ -f ../${VBOXMODULE/.ko/}/Module.symvers ]] then cp ../${VBOXMODULE/.ko/}/Module.symvers . fi make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) modules || die "mod-compile ${module}" # install the modules install -d /lib/modules/${KERNEL_VERSION}/misc install -m0644 ${module} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}" done # calc module dependencies mecho "Calculating module dependencies ..." depmod -ae ${KERNEL_VERSION} # re-read udev rules to grant the right permissions if [[ -x $(which udevadm) ]] then mecho "Reloading udev configuration ..." $(which udevadm) control --reload-rules fi # load the module if [[ x$(uname -r) = x${KERNEL_VERSION} ]] then for module in ${VBOXMODULE} ${VBOXNETMODULE} do mecho "Loading kernel-module ${module} ..." modprobe $(basename ${module} .ko) done else echo -e ${COLRED} echo "Your current running kernel does not match the the module target." echo "You must boot into your target kernel and load the modules manually," echo "before you can use virtual box." echo -en ${COLDEFAULT} fi echo mecho "Virtualbox is now configured for your system." mecho "Do not forget to add your users to the 'virtualbox' group." echo exit 0