#!/bin/bash # $Header: /root/magellan-cvs/src/virtualbox/vboxsf.sh,v 1.2 2010-08-22 18:40:26 niro Exp $ # Compiles vboxsf 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/vboxsf/vboxsf-${PVER}.tar.bz2" SRCDIR="${BUILDROOT}/vboxsf" KERNEL_MODULE="vboxsf" 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}/misc" 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} ..." make -C ${KERNEL_SOURCES} V=0 M="$(pwd)" 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 -a ${KERNEL_VERSION} exit 0