Contents of /trunk/virtualbox/virtualbox-config.sh
Parent Directory | Revision Log
Revision 1672 -
(show annotations)
(download)
(as text)
Sat Mar 3 02:48:55 2012 UTC (12 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 4534 byte(s)
Sat Mar 3 02:48:55 2012 UTC (12 years, 8 months ago) by niro
File MIME type: application/x-sh
File size: 4534 byte(s)
-compile missing vboxpci module, get virtualbox location from vbox.cfg, fixed noisyness and some other issues
1 | #!/bin/bash |
2 | # $Id$ |
3 | # Configures virtualbox for Magellan-Linux |
4 | |
5 | # get INSTALL_DIR location |
6 | source /etc/vbox/vbox.cfg |
7 | |
8 | VBOXVERSION="$(< ${INSTALL_DIR}/version)" |
9 | VBOXMODEXT=ko |
10 | VBOXMODULE=vboxdrv |
11 | VBOXNETMODULE=vboxnetflt |
12 | VBOXNETADPMODULE=vboxnetadp |
13 | VBOXPCIMODULE=vboxpci |
14 | KERNELMODULES="${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE} ${VBOXPCIMODULE}" |
15 | |
16 | COLRED="\033[1;6m\033[31m" |
17 | COLGREEN="\033[1;6m\033[32m" |
18 | COLDEFAULT="\033[0m" |
19 | |
20 | if [[ ${NOCOLORS} = true ]] |
21 | then |
22 | COLRED="" |
23 | COLGREEN="" |
24 | COLDEFAULT="" |
25 | fi |
26 | |
27 | die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; } |
28 | mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; } |
29 | |
30 | # must be root |
31 | [[ $(id -u) != 0 ]] && die "You must be r00t!" |
32 | |
33 | # check for given argvs |
34 | for i in $* |
35 | do |
36 | case $1 in |
37 | --kernel-version) shift; KERNEL_VERSION="$1" ;; |
38 | --kernel-sources) shift; KERNEL_SOURCES="$1" ;; |
39 | esac |
40 | shift |
41 | done |
42 | |
43 | # some sane defaults |
44 | [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)" |
45 | [[ -z ${KERNEL_SOURCES} ]] && KERNEL_SOURCES="/lib/modules/${KERNEL_VERSION}/source" |
46 | |
47 | mecho "Running $(basename $0) for kernelversion ${KERNEL_VERSION} ..." |
48 | |
49 | # check module version and recompile if it doesen't fit else break here |
50 | compile="yes" |
51 | for module in ${KERNELMODULES} |
52 | do |
53 | if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]] |
54 | then |
55 | myver=$(modinfo -k ${KERNEL_VERSION} -F version ${module} | sed "s:\(.*\)_.*:\1:") |
56 | if [[ ${VBOXVERSION} = ${myver} ]] |
57 | then |
58 | compile="no" |
59 | fi |
60 | done |
61 | |
62 | for module in ${KERNELMODULES} |
63 | do |
64 | if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]] |
65 | then |
66 | # try to unload the modules |
67 | if [[ -n $(grep "${module} " /proc/modules 2> /dev/null) ]] |
68 | then |
69 | mecho "Unloading ${module} module ..." |
70 | modprobe -r ${module} |
71 | fi |
72 | fi |
73 | done |
74 | |
75 | if [[ ${compile} = yes ]] |
76 | then |
77 | if [ ! -f ${KERNEL_SOURCES}/include/linux/version.h ] |
78 | then |
79 | die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting." |
80 | fi |
81 | |
82 | for module in ${KERNELMODULES} |
83 | do |
84 | if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]] |
85 | then |
86 | mecho "Removing old ${module} module ..." |
87 | rm -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} |
88 | fi |
89 | done |
90 | |
91 | # compile the modules |
92 | pushd ${INSTALL_DIR}/src |
93 | for module in ${KERNELMODULES} |
94 | do |
95 | make -C ${module} KBUILD_VERBOSE=1 clean || die "mod-compile ${module}" |
96 | |
97 | # need some symver from vboxmodule (must be run after clean!) |
98 | if [[ ${module} = ${VBOXNETMODULE} ]] || |
99 | [[ ${module} = ${VBOXNETADPMODULE} ]] || |
100 | [[ ${module} = ${VBOXPCIMODULE} ]] |
101 | then |
102 | [[ -f ${VBOXMODULE}/Module.symvers ]] && cp ${VBOXMODULE}/Module.symvers ${module} |
103 | fi |
104 | |
105 | make -C ${module} KBUILD_VERBOSE=1 || die "mod-compile ${module}" |
106 | |
107 | # install the modules |
108 | install -d /lib/modules/${KERNEL_VERSION}/misc |
109 | install -m0644 ${module}/${module}.${VBOXMODEXT} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}" |
110 | |
111 | # clean up |
112 | make -C ${module} KBUILD_VERBOSE=1 clean || die "mod-compile ${module}" |
113 | done |
114 | popd |
115 | |
116 | # calc module dependencies |
117 | mecho "Calculating module dependencies ..." |
118 | depmod -a ${KERNEL_VERSION} |
119 | |
120 | # re-read udev rules to grant the right permissions |
121 | if [[ -x $(which udevadm) ]] |
122 | then |
123 | mecho "Reloading udev configuration ..." |
124 | udevadm control --reload-rules |
125 | fi |
126 | fi |
127 | |
128 | # load the module |
129 | if [[ x$(uname -r) = x${KERNEL_VERSION} ]] |
130 | then |
131 | for module in ${KERNELMODULES} |
132 | do |
133 | mecho "Loading kernel-module ${module} ..." |
134 | modprobe ${module} |
135 | done |
136 | |
137 | if [ $(echo ${KERNEL_VERSION%%-*} | sed 's:\.::g') -ge 2639 ] |
138 | then |
139 | # fixes NMI warnings with kernels >=2.6.31: |
140 | # vboxdrv: Warning: 2.6.31+ kernel detected. Most likely the hardware performance |
141 | # vboxdrv: counter framework which can generate NMIs is active. |
142 | mecho "Disabled hardware performance counter NMIs ..." |
143 | echo 2 > /proc/sys/kernel/perf_event_paranoid |
144 | |
145 | elif [ $(echo ${KERNEL_VERSION%%-*} | sed 's:\.::g') -ge 2631 ] |
146 | then |
147 | # fixes NMI warnings with kernels >=2.6.31: |
148 | # vboxdrv: Warning: 2.6.31+ kernel detected. Most likely the hardware performance |
149 | # vboxdrv: counter framework which can generate NMIs is active. |
150 | mecho "Disabled hardware performance counter NMIs ..." |
151 | echo 2 > /proc/sys/kernel/perf_counter_paranoid |
152 | fi |
153 | else |
154 | echo -e ${COLRED} |
155 | echo "Your current running kernel does not match the the module target." |
156 | echo "You must boot into your target kernel and load the modules manually," |
157 | echo "before you can use virtualbox." |
158 | echo -en ${COLDEFAULT} |
159 | fi |
160 | |
161 | echo |
162 | mecho "Virtualbox is now configured for your system." |
163 | mecho "Do not forget to add your users to the 'vboxusers' group." |
164 | echo |
165 | |
166 | exit 0 |