Annotation of /trunk/virtualbox/virtualbox-config.sh
Parent Directory | Revision Log
Revision 988 -
(hide annotations)
(download)
(as text)
Sun Feb 21 20:06:45 2010 UTC (14 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 3517 byte(s)
Sun Feb 21 20:06:45 2010 UTC (14 years, 8 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 | niro | 126 | #!/bin/bash |
2 | niro | 988 | # $Header: /root/magellan-cvs/src/virtualbox/virtualbox-config.sh,v 1.12 2010-02-21 20:06:45 niro Exp $ |
3 | niro | 126 | # Configures virtualbox for Magellan-Linux |
4 | |||
5 | LIBDIR=/usr/lib | ||
6 | INSTDIR=${LIBDIR}/virtualbox | ||
7 | VBOXMODULE=vboxdrv.ko | ||
8 | niro | 860 | VBOXNETMODULE=vboxnetflt.ko |
9 | niro | 861 | VBOXNETADPMODULE=vboxnetadp.ko |
10 | niro | 126 | |
11 | niro | 129 | COLRED="\033[1;6m\033[31m" |
12 | COLGREEN="\033[1;6m\033[32m" | ||
13 | COLDEFAULT="\033[0m" | ||
14 | |||
15 | if [[ ${NOCOLORS} = true ]] | ||
16 | niro | 127 | then |
17 | niro | 129 | COLRED="" |
18 | COLGREEN="" | ||
19 | COLDEFAULT="" | ||
20 | niro | 127 | fi |
21 | |||
22 | niro | 129 | die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; } |
23 | mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; } | ||
24 | niro | 126 | |
25 | niro | 129 | # must be root |
26 | [[ $(id -u) != 0 ]] && die "You must be r00t!" | ||
27 | |||
28 | niro | 229 | # 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 | niro | 129 | |
38 | niro | 229 | # 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 | niro | 126 | then |
46 | niro | 229 | die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting." |
47 | niro | 126 | fi |
48 | |||
49 | niro | 861 | for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} |
50 | niro | 860 | do |
51 | if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module} ]] | ||
52 | niro | 520 | then |
53 | niro | 860 | 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 | niro | 520 | fi |
61 | niro | 860 | done |
62 | niro | 126 | |
63 | niro | 861 | for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} |
64 | niro | 860 | do |
65 | # compile the module | ||
66 | cd ${INSTDIR}/src/${module/.ko/} | ||
67 | niro | 126 | |
68 | niro | 860 | make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) clean || die "mod-compile ${module}" |
69 | niro | 126 | |
70 | niro | 860 | # need some symver from vboxmodule (must be run after clean!) |
71 | niro | 988 | if [[ ${module} = ${VBOXNETMODULE} ]] || [[ ${module} = ${VBOXNETADPMODULE} ]] |
72 | niro | 860 | then |
73 | niro | 988 | [[ -f ../${VBOXMODULE/.ko/}/Module.symvers ]] && cp ../${VBOXMODULE/.ko/}/Module.symvers . |
74 | niro | 860 | 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 | niro | 126 | # calc module dependencies |
84 | niro | 129 | mecho "Calculating module dependencies ..." |
85 | niro | 988 | depmod -a ${KERNEL_VERSION} |
86 | niro | 126 | |
87 | niro | 129 | # re-read udev rules to grant the right permissions |
88 | niro | 860 | if [[ -x $(which udevadm) ]] |
89 | niro | 129 | then |
90 | mecho "Reloading udev configuration ..." | ||
91 | niro | 860 | $(which udevadm) control --reload-rules |
92 | niro | 129 | fi |
93 | |||
94 | niro | 126 | # load the module |
95 | niro | 230 | if [[ x$(uname -r) = x${KERNEL_VERSION} ]] |
96 | niro | 229 | then |
97 | niro | 861 | for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} |
98 | niro | 860 | do |
99 | mecho "Loading kernel-module ${module} ..." | ||
100 | modprobe $(basename ${module} .ko) | ||
101 | done | ||
102 | niro | 988 | |
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 | niro | 229 | else |
112 | echo -e ${COLRED} | ||
113 | echo "Your current running kernel does not match the the module target." | ||
114 | niro | 860 | echo "You must boot into your target kernel and load the modules manually," |
115 | niro | 986 | echo "before you can use virtualbox." |
116 | niro | 229 | echo -en ${COLDEFAULT} |
117 | fi | ||
118 | niro | 126 | |
119 | echo | ||
120 | niro | 129 | mecho "Virtualbox is now configured for your system." |
121 | niro | 313 | mecho "Do not forget to add your users to the 'virtualbox' group." |
122 | niro | 126 | echo |
123 | |||
124 | exit 0 |