(The first version of this change, in commit 39fad297fd, broke
`nix-build -A nixosTests.installer.simpleUefiSystemdBoot`. This is the
2nd version, which hopefully does not break anything.)
`nixos-rebuild build-vm-with-bootloader` currently fails with the
default NixOS EFI configuration:
  $ cat >configuration.nix <<EOF
  {
    fileSystems."/".device = "/dev/sda1";
    boot.loader.systemd-boot.enable = true;
    boot.loader.efi.canTouchEfiVariables = true;
  }
  EOF
  $ nixos-rebuild build-vm-with-bootloader -I nixos-config=$PWD/configuration.nix -I nixpkgs=https://github.com/NixOS/nixpkgs/archive/nixos-20.09.tar.gz
  [...]
  insmod: ERROR: could not insert module /nix/store/1ibmgfr13r8b6xyn4f0wj115819f359c-linux-5.4.83/lib/modules/5.4.83/kernel/fs/efivarfs/efivarfs.ko.xz: No such device
  mount: /sys/firmware/efi/efivars: mount point does not exist.
  [    1.908328] reboot: Power down
  builder for '/nix/store/dx2ycclyknvibrskwmii42sgyalagjxa-nixos-boot-disk.drv' failed with exit code 32
  [...]
Fix it by setting virtualisation.useEFIBoot = true when needed.
Before:
* release-20.03: successful build, unsuccessful run
* release-20.09 (and master): unsuccessful build
After:
* Successful build and run.
Fixes #107255
		
	
			
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ configuration ? import ./lib/from-env.nix "NIXOS_CONFIG" <nixos-config>
 | 
						|
, system ? builtins.currentSystem
 | 
						|
}:
 | 
						|
 | 
						|
let
 | 
						|
 | 
						|
  eval = import ./lib/eval-config.nix {
 | 
						|
    inherit system;
 | 
						|
    modules = [ configuration ];
 | 
						|
  };
 | 
						|
 | 
						|
  # This is for `nixos-rebuild build-vm'.
 | 
						|
  vmConfig = (import ./lib/eval-config.nix {
 | 
						|
    inherit system;
 | 
						|
    modules = [ configuration ./modules/virtualisation/qemu-vm.nix ];
 | 
						|
  }).config;
 | 
						|
 | 
						|
  # This is for `nixos-rebuild build-vm-with-bootloader'.
 | 
						|
  vmWithBootLoaderConfig = (import ./lib/eval-config.nix {
 | 
						|
    inherit system;
 | 
						|
    modules =
 | 
						|
      [ configuration
 | 
						|
        ./modules/virtualisation/qemu-vm.nix
 | 
						|
        { virtualisation.useBootLoader = true; }
 | 
						|
        ({ config, ... }: {
 | 
						|
          virtualisation.useEFIBoot =
 | 
						|
            config.boot.loader.systemd-boot.enable ||
 | 
						|
            config.boot.loader.efi.canTouchEfiVariables;
 | 
						|
        })
 | 
						|
      ];
 | 
						|
  }).config;
 | 
						|
 | 
						|
in
 | 
						|
 | 
						|
{
 | 
						|
  inherit (eval) pkgs config options;
 | 
						|
 | 
						|
  system = eval.config.system.build.toplevel;
 | 
						|
 | 
						|
  vm = vmConfig.system.build.vm;
 | 
						|
 | 
						|
  vmWithBootLoader = vmWithBootLoaderConfig.system.build.vm;
 | 
						|
}
 |