From 140a3d416fef83765c15f0cbaa1175c133246b3f Mon Sep 17 00:00:00 2001 From: Sander van der Burg Date: Tue, 14 Apr 2009 13:29:19 +0000 Subject: [PATCH] Added wrapper script and desktop item support to VirtualBox svn path=/nixpkgs/trunk/; revision=15030 --- .../virtualization/virtualbox/2.2.0.nix | 24 +++++-- .../virtualization/virtualbox/VBox.sh | 66 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 +- 3 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 pkgs/applications/virtualization/virtualbox/VBox.sh diff --git a/pkgs/applications/virtualization/virtualbox/2.2.0.nix b/pkgs/applications/virtualization/virtualbox/2.2.0.nix index accee6eb28a..8931d61e564 100644 --- a/pkgs/applications/virtualization/virtualbox/2.2.0.nix +++ b/pkgs/applications/virtualization/virtualbox/2.2.0.nix @@ -1,5 +1,7 @@ -{stdenv, fetchurl, iasl, dev86, libxslt, libxml2, libX11, xproto, libXext, libXcursor, qt3, qt4, libIDL, SDL, hal, libcap, zlib, libpng, glib, kernel, python}: +{stdenv, fetchurl, iasl, dev86, libxslt, libxml2, libX11, xproto, libXext, libXcursor, qt3, qt4, libIDL, SDL, hal, libcap, zlib, libpng, glib, kernel, python, which}: +let vboxScript = ./VBox.sh; +in stdenv.mkDerivation { name = "virtualbox-2.2.0"; @@ -34,14 +36,14 @@ stdenv.mkDerivation { END_PATHS ''; - buildPhase = " + buildPhase = '' source env.sh kmk cd out/linux.*/release/bin/src export KERN_DIR=${kernel}/lib/modules/*/build make cd ../../../../.. - "; + ''; installPhase = '' cd out/linux.*/release/bin @@ -50,8 +52,22 @@ stdenv.mkDerivation { cd src kernelVersion=$(cd ${kernel}/lib/modules; ls) export MODULE_DIR=$out/lib/modules/$kernelVersion/misc - ensureDir $MODULE_DIR + ensureDir $MODULE_DIR make install + ensureDir $out/bin + cp -v ${vboxScript} $out/bin/VBox.sh + sed -i -e "s|@INSTALL_PATH@|$out/virtualbox|" \ + -e "s|@QT4_PATH@|${qt4}/lib|" \ + -e "s|which|${which}/bin/which|" \ + -e "s|gawk|${stdenv.gawk}/bin/gawk|" \ + $out/bin/VBox.sh + chmod 755 $out/bin/VBox.sh + for file in VirtualBox VBoxManage VBoxSDL + do + [ -f "$out/virtualbox/$file" ] && ln -sfv $out/bin/VBox.sh $out/bin/$file + done + ensureDir $out/share/applications + ln -sfv $out/virtualbox/VirtualBox.desktop $out/share/applications ''; meta = { diff --git a/pkgs/applications/virtualization/virtualbox/VBox.sh b/pkgs/applications/virtualization/virtualbox/VBox.sh new file mode 100644 index 00000000000..407f376cc70 --- /dev/null +++ b/pkgs/applications/virtualization/virtualbox/VBox.sh @@ -0,0 +1,66 @@ +#!/bin/sh + +INSTALL_PATH="@INSTALL_PATH@" +export LD_LIBRARY_PATH="@INSTALL_PATH@:@QT4_PATH@" + +export USER=$(whoami) + +if [ ! -c /dev/vboxdrv ]; then + echo "/dev/vboxdrv does not exist. Load the kernel module then try again." + exit 1 +fi +if [ ! -r /dev/vboxdrv -o ! -w /dev/vboxdrv ]; then + echo "User $USER can not read and/or write to /dev/vboxdrv." + exit 1 +fi + +echo "/dev/vboxdrv exists and $USER can access it." + +SERVER_PID=$(ps -U $USER | grep VBoxSVC | awk '{ print $1 }') +if [ "$1" = "shutdown" ]; then + if [ -n "$SERVER_PID" ]; then + echo "Terminating VBoxSVC with PID $SERVER_PID." + kill -TERM $SERVER_PID + else + echo "VBoxSVC Not Currently Running." + fi + exit 0 +fi + +if [ ! -x "$INSTALL_PATH/VBoxSVC" ]; then + echo "$INSTALL_PATH/VBoxSVC does not exist! Can not continue." + exit 1 +fi + +APP=$(which $0) +APP=${APP##/*/} + +if [ ! -x "$INSTALL_PATH/$APP" ]; then + echo "$INSTALL_PATH/$APP does not exist!" + exit 1 +fi +case "$APP" in + VirtualBox|VBoxManage|VBoxSDL|VBoxVRDP) + EXEC_APP="$INSTALL_PATH/$APP" + ;; + *) + echo "Unknown application - $APP." + ;; +esac + +if [ -z "$SERVER_PID" ]; then + rm -rf /tmp/.vbox-$USER-ipc + echo "Starting VBoxSVC for $USER." + "$INSTALL_PATH/VBoxSVC" --daemonize +fi + +SERVER_PID=$(ps -U $USER | grep VBoxSVC | awk '{ print $1 }') +if [ -z "$SERVER_PID" ]; then + echo "VBoxSVC failed to start! Can not continue" + exit 1 +fi + +echo "VBoxSVC is running for user $USER with PID $SERVER_PID." + +echo "Starting $EXEC_APP." +exec "$EXEC_APP" "$@" diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1f2bdfe74e4..8c3f53472cb 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -7263,7 +7263,7 @@ let virtualbox = import ../applications/virtualization/virtualbox/2.2.0.nix { inherit stdenv fetchurl iasl dev86 libxslt libxml2 qt3 qt4 SDL hal - libcap libpng zlib kernel python; + libcap libpng zlib kernel python which; inherit (gtkLibs) glib; inherit (xlibs) xproto libX11 libXext libXcursor; inherit (gnome) libIDL;