Magellan Linux

Contents of /trunk/virtualbox/virtualbox-config.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 988 - (show annotations) (download) (as text)
Sun Feb 21 20:06:45 2010 UTC (14 years, 2 months ago) by niro
File MIME type: application/x-sh
File size: 3517 byte(s)
-fixed module compilation and nmi issues with kernels >=2.6.31

1 #!/bin/bash
2 # $Header: /root/magellan-cvs/src/virtualbox/virtualbox-config.sh,v 1.12 2010-02-21 20:06:45 niro Exp $
3 # Configures virtualbox for Magellan-Linux
4
5 LIBDIR=/usr/lib
6 INSTDIR=${LIBDIR}/virtualbox
7 VBOXMODULE=vboxdrv.ko
8 VBOXNETMODULE=vboxnetflt.ko
9 VBOXNETADPMODULE=vboxnetadp.ko
10
11 COLRED="\033[1;6m\033[31m"
12 COLGREEN="\033[1;6m\033[32m"
13 COLDEFAULT="\033[0m"
14
15 if [[ ${NOCOLORS} = true ]]
16 then
17 COLRED=""
18 COLGREEN=""
19 COLDEFAULT=""
20 fi
21
22 die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; }
23 mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; }
24
25 # must be root
26 [[ $(id -u) != 0 ]] && die "You must be r00t!"
27
28 # check for given argvs
29 for i in $*
30 do
31 case $1 in
32 --kernel-version) shift; KERNEL_VERSION="$1" ;;
33 --kernel-sources) shift; KERNEL_SOURCES="$1" ;;
34 esac
35 shift
36 done
37
38 # some sane defaults
39 [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)"
40 [[ -z ${KERNEL_SOURCES} ]] && KERNEL_SOURCES="/lib/modules/${KERNEL_VERSION}/source"
41
42 mecho "Running $(basename $0) for kernelversion ${KERNEL_VERSION} ..."
43
44 if [ ! -f ${KERNEL_SOURCES}/include/linux/version.h ]
45 then
46 die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting."
47 fi
48
49 for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE}
50 do
51 if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module} ]]
52 then
53 mecho "Removing old ${module} module ..."
54 # try to unload the modules
55 if [[ -n $(grep "${module} " /proc/modules 2> /dev/null) ]]
56 then
57 modprobe -r ${module/.ko/}
58 fi
59 rm -f /lib/modules/${KERNEL_VERSION}/misc/${module}
60 fi
61 done
62
63 for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE}
64 do
65 # compile the module
66 cd ${INSTDIR}/src/${module/.ko/}
67
68 make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) clean || die "mod-compile ${module}"
69
70 # need some symver from vboxmodule (must be run after clean!)
71 if [[ ${module} = ${VBOXNETMODULE} ]] || [[ ${module} = ${VBOXNETADPMODULE} ]]
72 then
73 [[ -f ../${VBOXMODULE/.ko/}/Module.symvers ]] && cp ../${VBOXMODULE/.ko/}/Module.symvers .
74 fi
75
76 make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) modules || die "mod-compile ${module}"
77
78 # install the modules
79 install -d /lib/modules/${KERNEL_VERSION}/misc
80 install -m0644 ${module} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}"
81 done
82
83 # calc module dependencies
84 mecho "Calculating module dependencies ..."
85 depmod -a ${KERNEL_VERSION}
86
87 # re-read udev rules to grant the right permissions
88 if [[ -x $(which udevadm) ]]
89 then
90 mecho "Reloading udev configuration ..."
91 $(which udevadm) control --reload-rules
92 fi
93
94 # load the module
95 if [[ x$(uname -r) = x${KERNEL_VERSION} ]]
96 then
97 for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE}
98 do
99 mecho "Loading kernel-module ${module} ..."
100 modprobe $(basename ${module} .ko)
101 done
102
103 if [ $(echo ${KERNEL_VERSION%%-*} | sed 's:\.::g') -ge 2631 ]
104 then
105 # fixes NMI warnings with kernels >=2.6.31:
106 # vboxdrv: Warning: 2.6.31+ kernel detected. Most likely the hardware performance
107 # vboxdrv: counter framework which can generate NMIs is active.
108 mecho "Disabled hardware performance counter NMIs ..."
109 echo 2 > /proc/sys/kernel/perf_counter_paranoid
110 fi
111 else
112 echo -e ${COLRED}
113 echo "Your current running kernel does not match the the module target."
114 echo "You must boot into your target kernel and load the modules manually,"
115 echo "before you can use virtualbox."
116 echo -en ${COLDEFAULT}
117 fi
118
119 echo
120 mecho "Virtualbox is now configured for your system."
121 mecho "Do not forget to add your users to the 'virtualbox' group."
122 echo
123
124 exit 0