#!/bin/bash # $Header: /root/magellan-cvs/src/virtualbox/vboxguest.sh,v 1.1 2010-08-09 20:31:47 niro Exp $ # Compiles vboxguest module for given kernel die() { echo -e "${COLRED}$@${COLDEFAULT}"; exit 1; } mecho() { echo -e "${COLGREEN}$@${COLDEFAULT}"; } kernel_major_version() { local ksrc="$@" local kv if [[ -z ${ksrc} ]] then kv="$(uname -r|cut -d. -f1-2)" else local version local patchlevel # get version from makefile version=$(grep "^VERSION[[:space:]]*=[[:space:]]*[[:digit:]]" ${ksrc}/Makefile | sed "s/^.*=[[:space:]]*\([[:digit:]]\+\)/\1/g") # get patchlevel from makefile patchlevel=$(grep "^PATCHLEVEL[[:space:]]*=[[:space:]]*[[:digit:]]" ${ksrc}/Makefile | sed "s/^.*=[[:space:]]*\([[:digit:]]\+\)/\1/g") # kernelversion kv="${version}.${patchlevel}" fi echo "${kv}" } mod_suffix() { local ksrc="$@" local mod_suffix if [[ $(kernel_major_version ${ksrc}) = 2.6 ]] then mod_suffix="ko" else mod_suffix="o" fi echo "${mod_suffix}" } PVER="@@PVER@@" BUILDROOT="$(mktemp -d)" SRCTARBALL="/usr/src/vboxguest/vboxguest-${PVER}.tar.bz2" SRCDIR="${BUILDROOT}/vboxguest" KERNEL_MODULE="vboxguest" COLRED="\033[1;6m\033[31m" COLGREEN="\033[1;6m\033[32m" COLDEFAULT="\033[0m" if [[ ${NOCOLORS} = true ]] then COLRED="" COLGREEN="" COLDEFAULT="" fi # must be root [[ $(id -u) != 0 ]] && die "You must be r00t!" # check for given argvs for i in $* do case $1 in --kernel-version) shift; KERNEL_VERSION="$1" ;; --kernel-sources) shift; KERNEL_SOURCES="$1" ;; esac shift done # some sane defaults [[ -z ${KERNEL_VERSION} ]] && KERNEL_VERSION="$(uname -r)" [[ -z ${KERNEL_SOURCES} ]] && KERNEL_SOURCES="/lib/modules/${KERNEL_VERSION}/source" KERNEL_MODULE_DEST="/lib/modules/${KERNEL_VERSION}/video" KERNEL_MODULE_SUFFIX="$(mod_suffix ${KERNEL_SOURCES})" if [[ -f ${KERNEL_MODULE_DEST}/${KERNEL_MODULE}.${KERNEL_MODULE_SUFFIX} ]] then mecho "Removing old ${KERNEL_MODULE}-module ..." # try to unload the module if [[ -n $(grep "${KERNEL_MODULE} " /proc/modules 2> /dev/null) ]] then modprobe -r ${KERNEL_MODULE} fi rm -f ${KERNEL_MODULE_DEST}/${KERNEL_MODULE}.${KERNEL_MODULE_SUFFIX} fi # unpack src-tarball mecho "Uncompressing src-tarball ..." tar xjpf ${SRCTARBALL} -C ${BUILDROOT} || die cd ${SRCDIR} mecho "Compiling ${KERNEL_MODULE}-module for kernel ${KERNEL_VERSION} ..." gcc_major="$(gcc --version | grep gcc | cut -d' ' -f3|cut -d. -f1)" export _POSIX2_VERSION="199209" [[ $(kernel_major_version ${KERNEL_SOURCES}) = 2.6 ]] && cp 2.6.x/Makefile ${SRCDIR} make -C ${KERNEL_SOURCES} V=0 M="$(pwd)" GCC_VER_MAJ="${gcc_major}" modules || die mecho "Installing ${KERNEL_MODULE}-module into ${KERNEL_MODULE_DEST} ..." install -d ${KERNEL_MODULE_DEST} || die install -m0644 ${KERNEL_MODULE}.${KERNEL_MODULE_SUFFIX} ${KERNEL_MODULE_DEST} || die mecho "Calculating module dependencies ..." depmod -ae ${KERNEL_VERSION} exit 0