Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 126 by niro, Fri Apr 13 21:55:56 2007 UTC revision 2059 by niro, Wed Jan 30 13:43:50 2013 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2  # $Header: /root/magellan-cvs/src/virtualbox/virtualbox-config.sh,v 1.1 2007-04-13 21:55:56 niro Exp $  # $Id$
3  # Configures virtualbox for Magellan-Linux  # Configures virtualbox for Magellan-Linux
4    
5  LIBDIR=/usr/lib  # get INSTALL_DIR location
6  INSTDIR=${LIBDIR}/virtualbox  source /etc/vbox/vbox.cfg
 VBOXMODULE=vboxdrv.ko  
7    
8  echo "Running $(basename $0) for kernelversion $(uname -r) ..."  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 [ ! -f /lib/modules/$(uname -r)/source/include/linux/version.h ]  if [[ ${NOCOLORS} = true ]]
21  then  then
22   echo "No includes for $(uname -r) found! Aborting."   COLRED=""
23   exit 1   COLGREEN=""
24     COLDEFAULT=""
25  fi  fi
26    
27  if [[ -f /lib/modules/$(uname -r)/misc/${VBOXMODULE} ]]  die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; }
28    mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; }
29    usage()
30    {
31     echo "Usage: $(basename $0 .sh) [opts]"
32     echo "Options are:"
33     echo " --kernel-version - build modules for given kernel version not current"
34     echo " --kernel-sources - use kernel sources different from default path"
35     echo " --force          - force a rebuild of the kernel modules even if they exist"
36     echo " --verbose        - be verbose while building the modules"
37     echo " --help           - show this help"
38     exit
39    }
40    
41    # must be root
42    [[ $(id -u) != 0 ]] && die "You must be r00t!"
43    
44    # check for given argvs
45    for i in $*
46    do
47     case $1 in
48     --kernel-version) shift; KERNEL_VERSION="$1" ;;
49     --kernel-sources) shift; KERNEL_SOURCES="$1" ;;
50     --force) FORCED_REBUILD="1" ;;
51     --verbose) VERBOSE="1" ;;
52     --help) usage ;;
53     esac
54     shift
55    done
56    
57    # some sane defaults
58    [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)"
59    [[ -z ${KERNEL_SOURCES} ]] && KERNEL_SOURCES="/lib/modules/${KERNEL_VERSION}/source"
60    [[ -z ${FORCED_REBUILD} ]] && FORCED_REBUILD="0"
61    [[ -z ${VERBOSE} ]] && VERBOSE="0"
62    [[ ${VERBOSE} = 0 ]]  && makequiet="-s"
63    
64    mecho "Running $(basename $0) for kernelversion ${KERNEL_VERSION} ..."
65    
66    # check module version and recompile if it doesen't fit else break here
67    compile="yes"
68    for module in ${KERNELMODULES[*]}
69    do
70     if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]
71     then
72     myver=$(modinfo -k ${KERNEL_VERSION} -F version ${module} | sed "s:\(.*\)_.*:\1:")
73     if [[ ${VBOXVERSION} = ${myver} ]] && [[ ${FORCED_REBUILD} = 0 ]]
74     then
75     compile="no"
76     fi
77     fi
78    done
79    
80    # try to unload the modules in reverse order to honor dependencies
81    count=${#KERNELMODULES[*]}
82    for (( i=count-1; i>=0; i-- ))
83    do
84     if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${KERNELMODULES[${i}]}.${VBOXMODEXT} ]]
85     then
86     if [[ -n $(grep "${KERNELMODULES[${i}]} " /proc/modules 2> /dev/null) ]]
87     then
88     mecho "Unloading ${KERNELMODULES[${i}]} module ..."
89     modprobe -r ${KERNELMODULES[${i}]}
90     fi
91     fi
92    done
93    
94    if [[ ${compile} = yes ]]
95  then  then
96   echo "Removing old module ..."   if [ ! -f ${KERNEL_SOURCES}/include/linux/version.h ] &&
97   rm -f /lib/modules/$(uname -r)/misc/${VBOXMODULE}   [ ! -f ${KERNEL_SOURCES}/include/generated/uapi/linux/version.h ]
98     then
99     die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting."
100     fi
101    
102     for module in ${KERNELMODULES[*]}
103     do
104     if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]
105     then
106     mecho "Removing old ${module} module ..."
107     rm -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT}
108     fi
109     done
110    
111     # compile the modules
112     pushd ${INSTALL_DIR}/src > /dev/null
113     for module in ${KERNELMODULES[*]}
114     do
115     mecho "Compiling ${module} module ..."
116     make ${makequiet} -C ${module} KBUILD_VERBOSE=${VERBOSE} clean || die "mod-compile ${module}"
117    
118     # need some symver from vboxmodule (must be run after clean!)
119     if [[ ${module} = ${VBOXNETMODULE} ]] ||
120     [[ ${module} = ${VBOXNETADPMODULE} ]] ||
121     [[ ${module} = ${VBOXPCIMODULE} ]]
122     then
123     [[ -f ${VBOXMODULE}/Module.symvers ]] && cp ${VBOXMODULE}/Module.symvers ${module}
124     fi
125    
126     make ${makequiet} -C ${module} KBUILD_VERBOSE=${VERBOSE} || die "mod-compile ${module}"
127    
128     # install the modules
129     install -d /lib/modules/${KERNEL_VERSION}/misc
130     install -m0644 ${module}/${module}.${VBOXMODEXT} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}"
131     done
132     # do no clean before all modules are build, or required symbols and objects get deleted
133     for module in ${KERNELMODULES[*]}
134     do
135     # clean up
136     make ${makequiet} -C ${module} KBUILD_VERBOSE=${VERBOSE} clean || die "mod-compile ${module}"
137     done
138     popd > /dev/null
139    
140     # calc module dependencies
141     mecho "Calculating module dependencies ..."
142     depmod -a ${KERNEL_VERSION}
143  fi  fi
144    
145  # compile the module  # re-read udev rules to grant the right permissions
146  cd ${INSTDIR}/src  if [[ -x $(type -P udevadm) ]]
147  make -C /lib/modules/$(uname -r)/source SUBDIRS=$(pwd) SRCROOT=$(pwd) clean modules  then
148     mecho "Reloading udev configuration ..."
149  # install the module   if [ -x /usr/lib/systemd/systemd-udevd ]
150  install -d /lib/modules/$(uname -r)/misc   then
151  install -m0644 ${VBOXMODULE} /lib/modules/$(uname -r)/misc   udevadm control --reload
152     else
153  # calc module dependencies   udevadm control --reload-rules
154  depmod -ae   fi
155    fi
156    
157  # load the module  # load the module
158  echo "Loading module ${VBOXMODULE} ..."  if [[ x$(uname -r) = x${KERNEL_VERSION} ]]
159  modprobe $(basename ${VBOXMODULE} .ko)  then
160     for module in ${KERNELMODULES[*]}
161     do
162     mecho "Loading kernel-module ${module} ..."
163     modprobe ${module}
164     done
165    
166     if [ $(echo ${KERNEL_VERSION%%-*} | sed 's:\.::g') -ge 2639 ]
167     then
168     # fixes NMI warnings with kernels >=2.6.31:
169     # vboxdrv: Warning: 2.6.31+ kernel detected. Most likely the hardware performance
170     # vboxdrv: counter framework which can generate NMIs is active.
171     mecho "Disabled hardware performance counter NMIs ..."
172     echo 2 > /proc/sys/kernel/perf_event_paranoid
173    
174     elif [ $(echo ${KERNEL_VERSION%%-*} | sed 's:\.::g') -ge 2631 ]
175     then
176     # fixes NMI warnings with kernels >=2.6.31:
177     # vboxdrv: Warning: 2.6.31+ kernel detected. Most likely the hardware performance
178     # vboxdrv: counter framework which can generate NMIs is active.
179     mecho "Disabled hardware performance counter NMIs ..."
180     echo 2 > /proc/sys/kernel/perf_counter_paranoid
181     fi
182    else
183     echo -e ${COLRED}
184     echo "Your current running kernel does not match the the module target."
185     echo "You must boot into your target kernel and load the modules manually,"
186     echo "before you can use virtualbox."
187     echo -en ${COLDEFAULT}
188    fi
189    
190  echo  echo
191  echo "Virtualbox is now configured for your system."  mecho "Virtualbox is now configured for your system."
192  echo "Do not forget to add you users to the 'virtualbox' group."  mecho "Do not forget to add your users to the 'vboxusers' group."
193  echo  echo
194    
195  exit 0  exit 0

Legend:
Removed from v.126  
changed lines
  Added in v.2059