lol

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

+47 -14
+10 -1
nixos/modules/virtualisation/virtualbox-host.nix
··· 5 let 6 cfg = config.virtualisation.virtualbox.host; 7 virtualbox = config.boot.kernelPackages.virtualbox.override { 8 - inherit (cfg) enableHardening; 9 }; 10 11 in ··· 45 Disabling this can put your system's security at risk, as local users 46 in the vboxusers group can tamper with the VirtualBox device files. 47 </para></important> 48 ''; 49 }; 50 };
··· 5 let 6 cfg = config.virtualisation.virtualbox.host; 7 virtualbox = config.boot.kernelPackages.virtualbox.override { 8 + inherit (cfg) enableHardening headless; 9 }; 10 11 in ··· 45 Disabling this can put your system's security at risk, as local users 46 in the vboxusers group can tamper with the VirtualBox device files. 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. 57 ''; 58 }; 59 };
+11
nixos/tests/virtualbox.nix
··· 314 315 test2.vmFlags = hostonlyVMFlags; 316 test2.vmScript = dhcpScript; 317 }; 318 319 mkVBoxTest = name: testScript: makeTest { ··· 400 }); 401 402 shutdownVM_simple; 403 ''; 404 405 host-usb-permissions = ''
··· 314 315 test2.vmFlags = hostonlyVMFlags; 316 test2.vmScript = dhcpScript; 317 + 318 + headless.virtualisation.virtualbox.headless = true; 319 + headless.services.xserver.enable = false; 320 }; 321 322 mkVBoxTest = name: testScript: makeTest { ··· 403 }); 404 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; 414 ''; 415 416 host-usb-permissions = ''
+21 -13
pkgs/applications/virtualization/virtualbox/default.nix
··· 1 { stdenv, fetchurl, lib, iasl, dev86, pam, libxslt, libxml2, libX11, xproto, libXext 2 , libXcursor, libXmu, qt4, libIDL, SDL, libcap, zlib, libpng, glib, kernel, lvm2 3 , which, alsaLib, curl, libvpx, gawk, nettools, dbus 4 , xorriso, makeself, perl, pkgconfig, nukeReferences 5 , javaBindings ? false, jdk ? null ··· 7 , enableExtensionPack ? false, requireFile ? null, patchelf ? null, fakeroot ? null 8 , pulseSupport ? false, libpulseaudio ? null 9 , enableHardening ? false 10 }: 11 12 with stdenv.lib; ··· 67 }; 68 69 buildInputs = 70 - [ iasl dev86 libxslt libxml2 xproto libX11 libXext libXcursor qt4 libIDL SDL 71 libcap glib lvm2 python alsaLib curl libvpx pam xorriso makeself perl 72 pkgconfig which libXmu nukeReferences ] 73 ++ optional javaBindings jdk 74 ++ optional pythonBindings python 75 - ++ optional pulseSupport libpulseaudio; 76 77 hardeningDisable = [ "fortify" "pic" "stackprotector" ]; 78 ··· 129 ''} 130 LOCAL_CONFIG 131 132 - ./configure --with-qt4-dir=${qt4} \ 133 ${optionalString (!javaBindings) "--disable-java"} \ 134 ${optionalString (!pythonBindings) "--disable-python"} \ 135 ${optionalString (!pulseSupport) "--disable-pulse"} \ ··· 180 EXTHELPER 181 ''} 182 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 193 194 # Get rid of a reference to linux.dev. 195 nuke-refs $out/lib/modules/*/misc/*.ko
··· 1 { stdenv, fetchurl, lib, iasl, dev86, pam, libxslt, libxml2, libX11, xproto, libXext 2 , libXcursor, libXmu, qt4, libIDL, SDL, libcap, zlib, libpng, glib, kernel, lvm2 3 + , libXrandr 4 , which, alsaLib, curl, libvpx, gawk, nettools, dbus 5 , xorriso, makeself, perl, pkgconfig, nukeReferences 6 , javaBindings ? false, jdk ? null ··· 8 , enableExtensionPack ? false, requireFile ? null, patchelf ? null, fakeroot ? null 9 , pulseSupport ? false, libpulseaudio ? null 10 , enableHardening ? false 11 + , headless ? false 12 }: 13 14 with stdenv.lib; ··· 69 }; 70 71 buildInputs = 72 + [ iasl dev86 libxslt libxml2 xproto libX11 libXext libXcursor libIDL 73 libcap glib lvm2 python alsaLib curl libvpx pam xorriso makeself perl 74 pkgconfig which libXmu nukeReferences ] 75 ++ optional javaBindings jdk 76 ++ optional pythonBindings python 77 + ++ optional pulseSupport libpulseaudio 78 + ++ optionals (headless) [ libXrandr libpng ] 79 + ++ optionals (!headless) [ qt4 SDL ]; 80 81 hardeningDisable = [ "fortify" "pic" "stackprotector" ]; 82 ··· 133 ''} 134 LOCAL_CONFIG 135 136 + ./configure \ 137 + ${optionalString headless "--build-headless"} \ 138 + ${optionalString (!headless) "--with-qt4-dir=${qt4}"} \ 139 ${optionalString (!javaBindings) "--disable-java"} \ 140 ${optionalString (!pythonBindings) "--disable-python"} \ 141 ${optionalString (!pulseSupport) "--disable-pulse"} \ ··· 186 EXTHELPER 187 ''} 188 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 + ''} 201 202 # Get rid of a reference to linux.dev. 203 nuke-refs $out/lib/modules/*/misc/*.ko
+5
pkgs/top-level/all-packages.nix
··· 11345 enableHardening = true; 11346 }); 11347 11348 virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions { }; 11349 11350 wireguard = callPackage ../os-specific/linux/wireguard { };
··· 11345 enableHardening = true; 11346 }); 11347 11348 + virtualboxHeadless = lowPrio (virtualbox.override { 11349 + enableHardening = true; 11350 + headless = true; 11351 + }); 11352 + 11353 virtualboxGuestAdditions = callPackage ../applications/virtualization/virtualbox/guest-additions { }; 11354 11355 wireguard = callPackage ../os-specific/linux/wireguard { };