Magellan Linux

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

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

revision 1389 by niro, Thu Jun 30 20:52:30 2011 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.13 2010-06-09 22:29:52 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
7  VBOXVERSION="$(< ${INSTDIR}/version)"  
8    VBOXVERSION="$(< ${INSTALL_DIR}/version)"
9  VBOXMODEXT=ko  VBOXMODEXT=ko
10  VBOXMODULE=vboxdrv  VBOXMODULE=vboxdrv
11  VBOXNETMODULE=vboxnetflt  VBOXNETMODULE=vboxnetflt
12  VBOXNETADPMODULE=vboxnetadp  VBOXNETADPMODULE=vboxnetadp
13    VBOXPCIMODULE=vboxpci
14    KERNELMODULES=( "${VBOXMODULE}" "${VBOXNETMODULE}" "${VBOXNETADPMODULE}" "${VBOXPCIMODULE}" )
15    
16  COLRED="\033[1;6m\033[31m"  COLRED="\033[1;6m\033[31m"
17  COLGREEN="\033[1;6m\033[32m"  COLGREEN="\033[1;6m\033[32m"
# Line 23  fi Line 26  fi
26    
27  die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; }  die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; }
28  mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; }  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  # must be root
42  [[ $(id -u) != 0 ]] && die "You must be r00t!"  [[ $(id -u) != 0 ]] && die "You must be r00t!"
# Line 33  do Line 47  do
47   case $1 in   case $1 in
48   --kernel-version) shift; KERNEL_VERSION="$1" ;;   --kernel-version) shift; KERNEL_VERSION="$1" ;;
49   --kernel-sources) shift; KERNEL_SOURCES="$1" ;;   --kernel-sources) shift; KERNEL_SOURCES="$1" ;;
50     --force) FORCED_REBUILD="1" ;;
51     --verbose) VERBOSE="1" ;;
52     --help) usage ;;
53   esac   esac
54   shift   shift
55  done  done
# Line 40  done Line 57  done
57  # some sane defaults  # some sane defaults
58  [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)"  [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)"
59  [[ -z ${KERNEL_SOURCES} ]] && KERNEL_SOURCES="/lib/modules/${KERNEL_VERSION}/source"  [[ -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} ..."  mecho "Running $(basename $0) for kernelversion ${KERNEL_VERSION} ..."
65    
66  # check module version an recompile if it doesen't fit else break here  # check module version and recompile if it doesen't fit else break here
67  compile="no"  compile="yes"
68  for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE}  for module in ${KERNELMODULES[*]}
69  do  do
70   myver=$(modinfo -k ${KERNEL_VERSION} -F version ${module} | sed "s:\(.*\)_.*:\1:")   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]
  if [[ ${VBOXVERSION} != ${myver} ]]  
71   then   then
72   compile="yes"   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   fi
78  done  done
79    
80  for module in ${VBOXNETADPMODULE} ${VBOXNETMODULE} ${VBOXMODULE}  # try to unload the modules in reverse order to honor dependencies
81    count=${#KERNELMODULES[*]}
82    for (( i=count-1; i>=0; i-- ))
83  do  do
84   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${KERNELMODULES[${i}]}.${VBOXMODEXT} ]]
85   then   then
86   # try to unload the modules   if [[ -n $(grep "${KERNELMODULES[${i}]} " /proc/modules 2> /dev/null) ]]
  if [[ -n $(grep "${module} " /proc/modules 2> /dev/null) ]]  
87   then   then
88   mecho "Unloading ${module} module ..."   mecho "Unloading ${KERNELMODULES[${i}]} module ..."
89   modprobe -r ${module}   modprobe -r ${KERNELMODULES[${i}]}
90   fi   fi
91   fi   fi
92  done  done
93    
94  if [[ ${compile} = yes ]]  if [[ ${compile} = yes ]]
95  then  then
96   if [ ! -f ${KERNEL_SOURCES}/include/linux/version.h ]   if [ ! -f ${KERNEL_SOURCES}/include/linux/version.h ] &&
97     [ ! -f ${KERNEL_SOURCES}/include/generated/uapi/linux/version.h ]
98   then   then
99   die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting."   die "No kernel sources for kernel ${KERNEL_VERSION} found! Aborting."
100   fi   fi
101    
102   for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE}   for module in ${KERNELMODULES[*]}
103   do   do
104   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]   if [[ -f /lib/modules/${KERNEL_VERSION}/misc/${module}.${VBOXMODEXT} ]]
105   then   then
# Line 83  then Line 108  then
108   fi   fi
109   done   done
110    
111   for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE}   # compile the modules
112     pushd ${INSTALL_DIR}/src > /dev/null
113     for module in ${KERNELMODULES[*]}
114   do   do
115   # compile the module   mecho "Compiling ${module} module ..."
116   cd ${INSTDIR}/src/${module}   make ${makequiet} -C ${module} KBUILD_VERBOSE=${VERBOSE} clean || die "mod-compile ${module}"
   
  make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) clean || die "mod-compile ${module}"  
117    
118   # need some symver from vboxmodule (must be run after clean!)   # need some symver from vboxmodule (must be run after clean!)
119   if [[ ${module} = ${VBOXNETMODULE} ]] || [[ ${module} = ${VBOXNETADPMODULE} ]]   if [[ ${module} = ${VBOXNETMODULE} ]] ||
120     [[ ${module} = ${VBOXNETADPMODULE} ]] ||
121     [[ ${module} = ${VBOXPCIMODULE} ]]
122   then   then
123   [[ -f ../${VBOXMODULE}/Module.symvers ]] && cp ../${VBOXMODULE}/Module.symvers .   [[ -f ${VBOXMODULE}/Module.symvers ]] && cp ${VBOXMODULE}/Module.symvers ${module}
124   fi   fi
125    
126   make -C ${KERNEL_SOURCES} SUBDIRS=$(pwd) SRCROOT=$(pwd) modules || die "mod-compile ${module}"   make ${makequiet} -C ${module} KBUILD_VERBOSE=${VERBOSE} || die "mod-compile ${module}"
127    
128   # install the modules   # install the modules
129   install -d /lib/modules/${KERNEL_VERSION}/misc   install -d /lib/modules/${KERNEL_VERSION}/misc
130   install -m0644 ${module}.${VBOXMODEXT} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}"   install -m0644 ${module}/${module}.${VBOXMODEXT} /lib/modules/${KERNEL_VERSION}/misc || die "mod-install ${module}"
131   done   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   # calc module dependencies
141   mecho "Calculating module dependencies ..."   mecho "Calculating module dependencies ..."
142   depmod -a ${KERNEL_VERSION}   depmod -a ${KERNEL_VERSION}
143    fi
144    
145   # re-read udev rules to grant the right permissions  # re-read udev rules to grant the right permissions
146   if [[ -x $(which udevadm) ]]  if [[ -x $(type -P udevadm) ]]
147    then
148     mecho "Reloading udev configuration ..."
149     if [ -x /usr/lib/systemd/systemd-udevd ]
150   then   then
151   mecho "Reloading udev configuration ..."   udevadm control --reload
152   $(which udevadm) control --reload-rules   else
153     udevadm control --reload-rules
154   fi   fi
155  fi  fi
156    
157  # load the module  # load the module
158  if [[ x$(uname -r) = x${KERNEL_VERSION} ]]  if [[ x$(uname -r) = x${KERNEL_VERSION} ]]
159  then  then
160   for module in ${VBOXMODULE} ${VBOXNETMODULE} ${VBOXNETADPMODULE}   for module in ${KERNELMODULES[*]}
161   do   do
162   mecho "Loading kernel-module ${module} ..."   mecho "Loading kernel-module ${module} ..."
163   modprobe ${module}   modprobe ${module}
# Line 150  fi Line 189  fi
189    
190  echo  echo
191  mecho "Virtualbox is now configured for your system."  mecho "Virtualbox is now configured for your system."
192  mecho "Do not forget to add your 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.1389  
changed lines
  Added in v.2059