#!/bin/bash ##SlackBuild style build script CWD=`pwd` NAME=VirtualBox-OSE VERSION=1.4.0 ARCH=i586 BUILD=1vl58 VL_PACKAGER=easuter if [ "$TMP" = "" ]; then TMP=/tmp fi if [ $UID != 0 ]; then echo "You need to be root to run this script." exit fi if [ ! -d $TMP/finished-packages ]; then mkdir -p $TMP/finished-packages fi PKG=$TMP/package-$NAME KMODPKG=$TMP/kmodpackage-$NAME rm -rf $PKG rm -rf $KMODPKG mkdir -p $PKG/usr mkdir $PKG/install mkdir -p $KMODPKG/install if [ "$ARCH" = "i386" ]; then export CFLAGS="-O2 -march=i386 -mcpu=i686" elif [ "$ARCH" = "i486" ]; then export CFLAGS="-O2 -march=i486 -mtune=i686" elif [ "$ARCH" = "i586" ]; then export CFLAGS="-O2 -march=i586 -mtune=i686" elif [ "$ARCH" = "s390" ]; then export CFLAGS="-O2" elif [ "$ARCH" = "x86_64" ]; then export CFLAGS="-O2" fi CXXFLAGS="$CFLAGS" cd $TMP rm -rf $NAME-$VERSION tar xvf $CWD/$NAME-$VERSION.tar.bz2 cd $NAME-$VERSION chown -R root:root . #VirtualBox won't build unless it uses a glibc iconv header if [ ! -f /usr/include/iconv.h-libiconv ]; then mv /usr/include/iconv.h /usr/include/iconv.h-libiconv cat $CWD/iconv.h-glibc-2.3.6 > /usr/include/iconv.h fi ./configure --without-hal --with-qt-dir=/usr/lib/qt source env.sh kmk all -j3 if ( ! kmk ); then echo "make failed" exit fi #Build the stable kernel module cd out/linux.x86/release/bin/src make if ( ! make ); then echo "error building kernel module!" exit fi cd $TMP/$NAME-$VERSION cp $CWD/slack-desc . cat >> slack-desc << EOF #---------------------------------------- BUILDDATE: `date` PACKAGER: $VL_PACKAGER HOST: `uname -srm` DISTRO: `cat /etc/vector-version` CFLAGS: $CFLAGS CONFIGURE: `awk "/\.\/configure\ /" config.log` EOF #Create the VirtualBox package first, then the kernel module package mkdir -p $PKG/opt/$NAME-$VERSION mkdir $PKG/opt/$NAME-$VERSION/bin mkdir $PKG/opt/$NAME-$VERSION/kmod-src mkdir -p $PKG/usr/bin mkdir -p $PKG/usr/share/applications mkdir $PKG/usr/share/pixmaps cp -r out/linux.x86/release/bin/src/* $PKG/opt/$NAME-$VERSION/kmod-src/ rm -f $PKG/opt/$NAME-$VERSION/kmod-src/*.o \ $PKG/opt/$NAME-$VERSION/kmod-src/*.ko cat $CWD/vl-kmod-build.sh > $PKG/opt/$NAME-$VERSION/kmod-src/vl-kmod-build.sh chmod 755 $PKG/opt/$NAME-$VERSION/kmod-src/vl-kmod-build.sh cat $CWD/vl-kmod-README > $PKG/opt/$NAME-$VERSION/kmod-src/README cp -r out/linux.x86/release/bin $PKG/opt/$NAME-$VERSION/ cp -r out/linux.x86/release/lib $PKG/opt/$NAME-$VERSION/ rm -rf $PKG/opt/$NAME-$VERSION/bin/src rm -rf $PKG/opt/$NAME-$VERSION/bin/*.ko cat $CWD/virtualbox.sh > $PKG/usr/bin/virtualbox chmod 755 $PKG/usr/bin/virtualbox cat $CWD/virtualbox.desktop > \ $PKG/usr/share/applications/virtualbox.desktop cat $CWD/vbox_logo.png > $PKG/usr/share/pixmaps/vbox_logo.png ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) mkdir -p $PKG/usr/doc/$NAME-$VERSION cp -a \ AUTHORS COPYING ChangeLog NEWS README TODO \ $PKG/usr/doc/$NAME-$VERSION cp slack-desc $PKG/install cd $PKG cat $CWD/doinst.sh_main > install/doinst.sh cat $CWD/slack-required_main > install/slack-required makepkg -p -l y -c n $NAME-$VERSION-$ARCH-$BUILD.tlz cp $NAME-$VERSION-$ARCH-$BUILD.tlz $TMP/finished-packages echo "$NAME-$VERSION package is in $TMP/finished-packages" #Build the kernel module package (this will be the same as the box it was #built on, so make sure you are using a stock kernel! cd - mkdir -p $KMODPKG/lib/modules/`uname -r`/misc cp out/linux.x86/release/bin/src/vboxdrv.ko \ $KMODPKG/lib/modules/`uname -r`/misc cd $KMODPKG cat $CWD/doinst.sh_kmod > install/doinst.sh echo "VirtualBox-OSE >= 1.4.0" > install/slack-required cat >> install/slack-desc << EOF VirtualBox-OSE-kmod: VirtualBox kernel module VirtualBox-OSE-kmod: VirtualBox-OSE-kmod: For use with kernel `uname -r` only! VirtualBox-OSE-kmod: VirtualBox-OSE-kmod: Website: http://www.virtualbox.org/ VirtualBox-OSE-kmod: License: GNU General Public License, version 2 EOF makepkg -p -l y -c n $NAME-kmod-${VERSION}_`uname -r`-$ARCH-$BUILD.tlz mv $NAME-kmod-${VERSION}_`uname -r`-$ARCH-$BUILD.tlz /tmp/finished-packages echo "$NAME-kmod-${VERSION}_`uname -r` is in /tmp/finshed_packages" rm -rf $TMP/$NAME-$VERSION rm -rf $PKG rm -rf $KMODPKG rm /usr/include/iconv.h mv /usr/include/iconv.h-libiconv /usr/include/iconv.h