--- trunk/virtualbox/virtualbox-config.sh 2010/02/21 20:06:45 988 +++ trunk/virtualbox/virtualbox-config.sh 2010/06/09 22:29:52 1049 @@ -1,12 +1,14 @@ #!/bin/bash -# $Header: /root/magellan-cvs/src/virtualbox/virtualbox-config.sh,v 1.12 2010-02-21 20:06:45 niro Exp $ +# $Header: /root/magellan-cvs/src/virtualbox/virtualbox-config.sh,v 1.13 2010-06-09 22:29:52 niro Exp $ # Configures virtualbox for Magellan-Linux LIBDIR=/usr/lib INSTDIR=${LIBDIR}/virtualbox -VBOXMODULE=vboxdrv.ko -VBOXNETMODULE=vboxnetflt.ko -VBOXNETADPMODULE=vboxnetadp.ko +VBOXVERSION="$(< ${INSTDIR}/version)" +VBOXMODEXT=ko +VBOXMODULE=vboxdrv +VBOXNETMODULE=vboxnetflt +VBOXNETADPMODULE=vboxnetadp COLRED="\033[1;6m\033[31m" COLGREEN="\033[1;6m\033[32m" @@ -41,54 +43,76 @@ 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 - +# check module version an recompile if it doesen't fit else break here +compile="no" for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} do - if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module} ]] + myver=$(modinfo -k ${KERNEL_VERSION} -F version ${module} | sed "s:\(.*\)_.*:\1:") + if [[ ${VBOXVERSION} != ${myver} ]] + then + compile="yes" + fi +done + +for module in ${VBOXNETADPMODULE} ${VBOXNETMODULE} ${VBOXMODULE} +do + if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]] 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/} + mecho "Unloading ${module} module ..." + modprobe -r ${module} fi - rm -f /lib/modules/${KERNEL_VERSION}/misc/${module} fi done -for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} -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} ]] || [[ ${module} = ${VBOXNETADPMODULE} ]] +if [[ ${compile} = yes ]] +then + if [ ! -f ${KERNEL_SOURCES}/include/linux/version.h ] then - [[ -f ../${VBOXMODULE/.ko/}/Module.symvers ]] && cp ../${VBOXMODULE/.ko/}/Module.symvers . + die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting." fi - make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) modules || die "mod-compile ${module}" + for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} + do + if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]] + then + mecho "Removing old ${module} module ..." + rm -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} + fi + done + + for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} + do + # compile the module + cd ${INSTDIR}/src/${module} + + make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) clean || 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 + # need some symver from vboxmodule (must be run after clean!) + if [[ ${module} = ${VBOXNETMODULE} ]] || [[ ${module} = ${VBOXNETADPMODULE} ]] + then + [[ -f ../${VBOXMODULE}/Module.symvers ]] && cp ../${VBOXMODULE}/Module.symvers . + fi -# calc module dependencies -mecho "Calculating module dependencies ..." -depmod -a ${KERNEL_VERSION} + make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) modules || die "mod-compile ${module}" -# re-read udev rules to grant the right permissions -if [[ -x $(which udevadm) ]] -then - mecho "Reloading udev configuration ..." - $(which udevadm) control --reload-rules + # install the modules + install -d /lib/modules/${KERNEL_VERSION}/misc + install -m0644 ${module}.${VBOXMODEXT} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}" + done + + # calc module dependencies + mecho "Calculating module dependencies ..." + depmod -a ${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 fi # load the module @@ -97,7 +121,7 @@ for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} do mecho "Loading kernel-module ${module} ..." - modprobe $(basename ${module} .ko) + modprobe ${module} done if [ $(echo ${KERNEL_VERSION%%-*} | sed 's:\.::g') -ge 2631 ]