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