{ stdenv, buildEnv, fetchurl, lib, iasl, dev86, pam, libxslt, libxml2, libX11, xproto, libXext , libXcursor, libXmu, qt5, libIDL, SDL, libcap, zlib, libpng, glib, kernel, lvm2 , libXrandr, libXinerama , which, alsaLib, curl, libvpx, gawk, nettools, dbus , xorriso, makeself, perl, pkgconfig, nukeReferences , javaBindings ? false, jdk ? null , pythonBindings ? false, python ? null , enableExtensionPack ? false, requireFile ? null, patchelf ? null, fakeroot ? null , pulseSupport ? false, libpulseaudio ? null , enableHardening ? false , headless ? false }: with stdenv.lib; let buildType = "release"; # When changing this, update ./guest-additions and the extpack # revision/hash as well. See # http://download.virtualbox.org/virtualbox/${version}/SHA256SUMS # for hashes. version = "5.1.4"; forEachModule = action: '' for mod in \ out/linux.*/${buildType}/bin/src/vboxdrv \ out/linux.*/${buildType}/bin/src/vboxpci \ out/linux.*/${buildType}/bin/src/vboxnetadp \ out/linux.*/${buildType}/bin/src/vboxnetflt do if [ "x$(basename "$mod")" != xvboxdrv -a ! -e "$mod/Module.symvers" ] then cp -v out/linux.*/${buildType}/bin/src/vboxdrv/Module.symvers \ "$mod/Module.symvers" fi INSTALL_MOD_PATH="$out" INSTALL_MOD_DIR=misc \ make -j $NIX_BUILD_CORES -C "$MODULES_BUILD_DIR" DEPMOD=/do_not_use_depmod \ "M=\$(PWD)/$mod" BUILD_TYPE="${buildType}" ${action} done ''; # See https://github.com/NixOS/nixpkgs/issues/672 for details extpackRevision = "110228"; extensionPack = requireFile rec { name = "Oracle_VM_VirtualBox_Extension_Pack-${version}-${extpackRevision}.vbox-extpack"; # IMPORTANT: Hash must be base16 encoded because it's used as an input to # VBoxExtPackHelperApp! sha256 = "9462ff1b567c37ad9a33c0c7ca1925776615ec89b5a72563f29a8cc8514cf316"; message = '' In order to use the extension pack, you need to comply with the VirtualBox Personal Use and Evaluation License (PUEL) available at: https://www.virtualbox.org/wiki/VirtualBox_PUEL Once you have read and if you agree with the license, please use the following command and re-run the installation: nix-prefetch-url http://download.virtualbox.org/virtualbox/${version}/${name} ''; }; vbox-qt5-env = buildEnv { name = "vbox-qt5-env-${version}"; paths = [ qt5.qtbase.dev qt5.qtbase.out qt5.qtx11extras.dev qt5.qtx11extras.out qt5.qttools.dev ]; }; in stdenv.mkDerivation { name = "virtualbox-${version}-${kernel.version}"; src = fetchurl { url = "http://download.virtualbox.org/virtualbox/${version}/VirtualBox-${version}.tar.bz2"; sha256 = "b9a14a7771059c55c44b97f8d4eef9bea84544f3e215e0caa563bc35e2f16aaf"; }; buildInputs = [ iasl dev86 libxslt libxml2 xproto libX11 libXext libXcursor libIDL libcap glib lvm2 python alsaLib curl libvpx pam xorriso makeself perl pkgconfig which libXmu nukeReferences libpng ] ++ optional javaBindings jdk ++ optional pythonBindings python ++ optional pulseSupport libpulseaudio ++ optionals (headless) [ libXrandr ] ++ optionals (!headless) [ vbox-qt5-env libXinerama SDL ]; hardeningDisable = [ "fortify" "pic" "stackprotector" ]; prePatch = '' set -x MODULES_BUILD_DIR=`echo ${kernel.dev}/lib/modules/*/build` sed -e 's@/lib/modules/`uname -r`/build@'$MODULES_BUILD_DIR@ \ -e 's@MKISOFS --version@MKISOFS -version@' \ -e 's@PYTHONDIR=.*@PYTHONDIR=${if pythonBindings then python else ""}@' \ -i configure ls kBuild/bin/linux.x86/k* tools/linux.x86/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.glibc.out}/lib/ld-linux.so.2 ls kBuild/bin/linux.amd64/k* tools/linux.amd64/bin/* | xargs -n 1 patchelf --set-interpreter ${stdenv.glibc.out}/lib/ld-linux-x86-64.so.2 find . -type f -iname '*makefile*' -exec sed -i -e 's/depmod -a/:/g' {} + sed -i -e ' s@"libdbus-1\.so\.3"@"${dbus.lib}/lib/libdbus-1.so.3"@g s@"libasound\.so\.2"@"${alsaLib.out}/lib/libasound.so.2"@g ${optionalString pulseSupport '' s@"libpulse\.so\.0"@"${libpulseaudio.out}/lib/libpulse.so.0"@g ''} ' src/VBox/Main/xml/Settings.cpp \ src/VBox/Devices/Audio/{alsa,pulse}_stubs.c \ include/VBox/dbus-calls.h export USER=nix set +x ''; patches = optional enableHardening ./hardened.patch ++ [ ./libressl.patch ]; postPatch = '' sed -i -e 's|/sbin/ifconfig|${nettools}/bin/ifconfig|' \ src/VBox/HostDrivers/adpctl/VBoxNetAdpCtl.cpp ''; # first line: ugly hack, and it isn't yet clear why it's a problem configurePhase = '' NIX_CFLAGS_COMPILE=$(echo "$NIX_CFLAGS_COMPILE" | sed 's,\-isystem ${lib.getDev stdenv.cc.libc}/include,,g') cat >> LocalConfig.kmk <