virtualbox: add headless build (without Qt dependency) (#18026)

+47 -14
+10 -1
nixos/modules/virtualisation/virtualbox-host.nix
··· 5 5 let 6 6 cfg = config.virtualisation.virtualbox.host; 7 7 virtualbox = config.boot.kernelPackages.virtualbox.override { 8 - inherit (cfg) enableHardening; 8 + inherit (cfg) enableHardening headless; 9 9 }; 10 10 11 11 in ··· 45 45 Disabling this can put your system's security at risk, as local users 46 46 in the vboxusers group can tamper with the VirtualBox device files. 47 47 </para></important> 48 + ''; 49 + }; 50 + 51 + headless = mkOption { 52 + type = types.bool; 53 + default = false; 54 + description = '' 55 + Use VirtualBox installation without GUI and Qt dependency. Useful to enable on servers 56 + and when virtual machines are controlled only via SSH. 48 57 ''; 49 58 }; 50 59 };
+11
nixos/tests/virtualbox.nix
··· 314 314 315 315 test2.vmFlags = hostonlyVMFlags; 316 316 test2.vmScript = dhcpScript; 317 + 318 + headless.virtualisation.virtualbox.headless = true; 319 + headless.services.xserver.enable = false; 317 320 }; 318 321 319 322 mkVBoxTest = name: testScript: makeTest { ··· 400 403 }); 401 404 402 405 shutdownVM_simple; 406 + ''; 407 + 408 + headless = '' 409 + createVM_headless; 410 + $machine->succeed(ru("VBoxHeadless --startvm headless & disown %1")); 411 + waitForStartup_headless; 412 + waitForVMBoot_headless; 413 + shutdownVM_headless; 403 414 ''; 404 415 405 416 host-usb-permissions = ''
+21 -13
pkgs/applications/virtualization/virtualbox/default.nix
··· 1 1 { stdenv, fetchurl, lib, iasl, dev86, pam, libxslt, libxml2, libX11, xproto, libXext 2 2 , libXcursor, libXmu, qt4, libIDL, SDL, libcap, zlib, libpng, glib, kernel, lvm2 3 + , libXrandr 3 4 , which, alsaLib, curl, libvpx, gawk, nettools, dbus 4 5 , xorriso, makeself, perl, pkgconfig, nukeReferences 5 6 , javaBindings ? false, jdk ? null ··· 7 8 , enableExtensionPack ? false, requireFile ? null, patchelf ? null, fakeroot ? null 8 9 , pulseSupport ? false, libpulseaudio ? null 9 10 , enableHardening ? false 11 + , headless ? false 10 12 }: 11 13 12 14 with stdenv.lib; ··· 67 69 }; 68 70 69 71 buildInputs = 70 - [ iasl dev86 libxslt libxml2 xproto libX11 libXext libXcursor qt4 libIDL SDL 72 + [ iasl dev86 libxslt libxml2 xproto libX11 libXext libXcursor libIDL 71 73 libcap glib lvm2 python alsaLib curl libvpx pam xorriso makeself perl 72 74 pkgconfig which libXmu nukeReferences ] 73 75 ++ optional javaBindings jdk 74 76 ++ optional pythonBindings python 75 - ++ optional pulseSupport libpulseaudio; 77 + ++ optional pulseSupport libpulseaudio 78 + ++ optionals (headless) [ libXrandr libpng ] 79 + ++ optionals (!headless) [ qt4 SDL ]; 76 80 77 81 hardeningDisable = [ "fortify" "pic" "stackprotector" ]; 78 82 ··· 129 133 ''} 130 134 LOCAL_CONFIG 131 135 132 - ./configure --with-qt4-dir=${qt4} \ 136 + ./configure \ 137 + ${optionalString headless "--build-headless"} \ 138 + ${optionalString (!headless) "--with-qt4-dir=${qt4}"} \ 133 139 ${optionalString (!javaBindings) "--disable-java"} \ 134 140 ${optionalString (!pythonBindings) "--disable-python"} \ 135 141 ${optionalString (!pulseSupport) "--disable-pulse"} \ ··· 180 186 EXTHELPER 181 187 ''} 182 188 183 - # Create and fix desktop item 184 - mkdir -p $out/share/applications 185 - sed -i -e "s|Icon=VBox|Icon=$libexec/VBox.png|" $libexec/virtualbox.desktop 186 - ln -sfv $libexec/virtualbox.desktop $out/share/applications 187 - # Icons 188 - mkdir -p $out/share/icons/hicolor 189 - for size in `ls -1 $libexec/icons`; do 190 - mkdir -p $out/share/icons/hicolor/$size/apps 191 - ln -s $libexec/icons/$size/*.png $out/share/icons/hicolor/$size/apps 192 - done 189 + ${optionalString (!headless) '' 190 + # Create and fix desktop item 191 + mkdir -p $out/share/applications 192 + sed -i -e "s|Icon=VBox|Icon=$libexec/VBox.png|" $libexec/virtualbox.desktop 193 + ln -sfv $libexec/virtualbox.desktop $out/share/applications 194 + # Icons 195 + mkdir -p $out/share/icons/hicolor 196 + for size in `ls -1 $libexec/icons`; do 197 + mkdir -p $out/share/icons/hicolor/$size/apps 198 + ln -s $libexec/icons/$size/*.png $out/share/icons/hicolor/$size/apps 199 + done 200 + ''} 193 201 194 202 # Get rid of a reference to linux.dev. 195 203 nuke-refs $out/lib/modules/*/misc/*.ko
+5
pkgs/top-level/all-packages.nix
··· 11345 11345 enableHardening = true; 11346 11346 }); 11347 11347 11348 + virtualboxHeadless = lowPrio (virtualbox.override { 11349 + enableHardening = true; 11350 + headless = true; 11351 + }); 11352 + 11348 11353 virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions { }; 11349 11354 11350 11355 wireguard = callPackage ../os-specific/linux/wireguard { };