Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1672 - (show annotations) (download) (as text)
Sat Mar 3 02:48:55 2012 UTC (12 years, 2 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