aboutsummaryrefslogtreecommitdiff
path: root/infra/libkookie/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions
diff options
context:
space:
mode:
Diffstat (limited to 'infra/libkookie/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions')
-rw-r--r--infra/libkookie/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix166
1 files changed, 166 insertions, 0 deletions
diff --git a/infra/libkookie/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix b/infra/libkookie/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
new file mode 100644
index 000000000000..180970d51dac
--- /dev/null
+++ b/infra/libkookie/nixpkgs/pkgs/applications/virtualization/virtualbox/guest-additions/default.nix
@@ -0,0 +1,166 @@
+{ stdenv, fetchurl, lib, patchelf, cdrkit, kernel, which, makeWrapper
+, zlib, xorg, dbus, virtualbox}:
+
+let
+ version = virtualbox.version;
+ xserverVListFunc = builtins.elemAt (stdenv.lib.splitVersion xorg.xorgserver.version);
+
+ # Forced to 1.18 in <nixpkgs/nixos/modules/services/x11/xserver.nix>
+ # as it even fails to build otherwise. Still, override this even here,
+ # in case someone does just a standalone build
+ # (not via videoDrivers = ["vboxvideo"]).
+ # It's likely to work again in some future update.
+ xserverABI = let abi = xserverVListFunc 0 + xserverVListFunc 1;
+ in if abi == "119" || abi == "120" then "118" else abi;
+
+ # Specifies how to patch binaries to make sure that libraries loaded using
+ # dlopen are found. We grep binaries for specific library names and patch
+ # RUNPATH in matching binaries to contain the needed library paths.
+ dlopenLibs = [
+ { name = "libdbus-1.so"; pkg = dbus; }
+ { name = "libXfixes.so"; pkg = xorg.libXfixes; }
+ { name = "libXrandr.so"; pkg = xorg.libXrandr; }
+ ];
+
+in stdenv.mkDerivation rec {
+ name = "VirtualBox-GuestAdditions-${version}-${kernel.version}";
+
+ src = fetchurl {
+ url = "http://download.virtualbox.org/virtualbox/${version}/VBoxGuestAdditions_${version}.iso";
+ sha256 = "88db771a5efd7c048228e5c1e0b8fba56542e9d8c1b75f7af5b0c4cf334f0584";
+ };
+
+ KERN_DIR = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/build";
+ KERN_INCL = "${kernel.dev}/lib/modules/${kernel.modDirVersion}/source/include";
+
+ hardeningDisable = [ "pic" ];
+
+ NIX_CFLAGS_COMPILE = "-Wno-error=incompatible-pointer-types -Wno-error=implicit-function-declaration";
+
+ nativeBuildInputs = [ patchelf makeWrapper ];
+ buildInputs = [ cdrkit ] ++ kernel.moduleBuildDependencies;
+
+
+ prePatch = ''
+ substituteInPlace src/vboxguest-${version}/vboxvideo/vbox_ttm.c \
+ --replace "<ttm/" "<drm/ttm/"
+ '';
+
+ patchFlags = [ "-p1" "-d" "src/vboxguest-${version}" ];
+
+ unpackPhase = ''
+ ${if stdenv.hostPlatform.system == "i686-linux" || stdenv.hostPlatform.system == "x86_64-linux" then ''
+ isoinfo -J -i $src -x /VBoxLinuxAdditions.run > ./VBoxLinuxAdditions.run
+ chmod 755 ./VBoxLinuxAdditions.run
+ # An overflow leads the is-there-enough-space check to fail when there's too much space available, so fake how much space there is
+ sed -i 's/\$leftspace/16383/' VBoxLinuxAdditions.run
+ ./VBoxLinuxAdditions.run --noexec --keep
+ ''
+ else throw ("Architecture: "+stdenv.hostPlatform.system+" not supported for VirtualBox guest additions")
+ }
+
+ # Unpack files
+ cd install
+ ${if stdenv.hostPlatform.system == "i686-linux" then ''
+ tar xfvj VBoxGuestAdditions-x86.tar.bz2
+ ''
+ else if stdenv.hostPlatform.system == "x86_64-linux" then ''
+ tar xfvj VBoxGuestAdditions-amd64.tar.bz2
+ ''
+ else throw ("Architecture: "+stdenv.hostPlatform.system+" not supported for VirtualBox guest additions")
+ }
+ '';
+
+ buildPhase = ''
+ # Build kernel modules.
+ cd src
+ find . -type f | xargs sed 's/depmod -a/true/' -i
+ cd vboxguest-${version}
+ # Run just make first. If we only did make install, we get symbol warnings during build.
+ make
+ cd ../..
+
+ # Change the interpreter for various binaries
+ for i in sbin/VBoxService bin/{VBoxClient,VBoxControl} other/mount.vboxsf; do
+ patchelf --set-interpreter ${stdenv.cc.bintools.dynamicLinker} $i
+ patchelf --set-rpath ${lib.makeLibraryPath [ stdenv.cc.cc stdenv.cc.libc zlib
+ xorg.libX11 xorg.libXt xorg.libXext xorg.libXmu xorg.libXfixes xorg.libXrandr xorg.libXcursor ]} $i
+ done
+
+ for i in lib/VBoxOGL*.so
+ do
+ patchelf --set-rpath ${lib.makeLibraryPath [ "$out"
+ xorg.libXcomposite xorg.libXdamage xorg.libXext xorg.libXfixes ]} $i
+ done
+
+ # FIXME: Virtualbox 4.3.22 moved VBoxClient-all (required by Guest Additions
+ # NixOS module) to 98vboxadd-xclient. For now, just work around it:
+ mv other/98vboxadd-xclient bin/VBoxClient-all
+
+ # Remove references to /usr from various scripts and files
+ sed -i -e "s|/usr/bin|$out/bin|" other/vboxclient.desktop
+ sed -i -e "s|/usr/bin|$out/bin|" bin/VBoxClient-all
+ '';
+
+ installPhase = ''
+ # Install kernel modules.
+ cd src/vboxguest-${version}
+ make install INSTALL_MOD_PATH=$out KBUILD_EXTRA_SYMBOLS=$PWD/vboxsf/Module.symvers
+ cd ../..
+
+ # Install binaries
+ install -D -m 755 other/mount.vboxsf $out/bin/mount.vboxsf
+ install -D -m 755 sbin/VBoxService $out/bin/VBoxService
+
+ mkdir -p $out/bin
+ install -m 755 bin/VBoxClient $out/bin
+ install -m 755 bin/VBoxControl $out/bin
+ install -m 755 bin/VBoxClient-all $out/bin
+
+ wrapProgram $out/bin/VBoxClient-all \
+ --prefix PATH : "${which}/bin"
+
+ # Don't install VBoxOGL for now
+ # It seems to be broken upstream too, and fixing it is far down the priority list:
+ # https://www.virtualbox.org/pipermail/vbox-dev/2017-June/014561.html
+ # Additionally, 3d support seems to rely on VBoxOGL.so being symlinked from
+ # libGL.so (which we can't), and Oracle doesn't plan on supporting libglvnd
+ # either. (#18457)
+ ## Install OpenGL libraries
+ #mkdir -p $out/lib
+ #cp -v lib/VBoxOGL*.so $out/lib
+ #mkdir -p $out/lib/dri
+ #ln -s $out/lib/VBoxOGL.so $out/lib/dri/vboxvideo_dri.so
+
+ # Install desktop file
+ mkdir -p $out/share/autostart
+ cp -v other/vboxclient.desktop $out/share/autostart
+
+ # Install Xorg drivers
+ mkdir -p $out/lib/xorg/modules/{drivers,input}
+ install -m 644 other/vboxvideo_drv_${xserverABI}.so $out/lib/xorg/modules/drivers/vboxvideo_drv.so
+ '';
+
+ # Stripping breaks these binaries for some reason.
+ dontStrip = true;
+
+ # Patch RUNPATH according to dlopenLibs (see the comment there).
+ postFixup = lib.concatMapStrings (library: ''
+ for i in $(grep -F ${lib.escapeShellArg library.name} -l -r $out/{lib,bin}); do
+ origRpath=$(patchelf --print-rpath "$i")
+ patchelf --set-rpath "$origRpath:${lib.makeLibraryPath [ library.pkg ]}" "$i"
+ done
+ '') dlopenLibs;
+
+ meta = {
+ description = "Guest additions for VirtualBox";
+ longDescription = ''
+ Various add-ons which makes NixOS work better as guest OS inside VirtualBox.
+ This add-on provides support for dynamic resizing of the X Display, shared
+ host/guest clipboard support and guest OpenGL support.
+ '';
+ license = "GPL";
+ maintainers = [ lib.maintainers.sander ];
+ platforms = lib.platforms.linux;
+ };
+}