Loading nixos/modules/system/boot/stage-1.nix +1 −1 Original line number Diff line number Diff line Loading @@ -688,7 +688,7 @@ in config = mkIf config.boot.initrd.enable { assertions = [ { assertion = any (fs: fs.mountPoint == "/") fileSystems; { assertion = !config.boot.initrd.systemd.enable -> any (fs: fs.mountPoint == "/") fileSystems; message = "The ‘fileSystems’ option does not specify your root file system."; } { assertion = let inherit (config.boot) resumeDevice; in Loading nixos/modules/system/boot/systemd/initrd.nix +25 −4 Original line number Diff line number Diff line Loading @@ -212,6 +212,19 @@ in { default = []; }; root = lib.mkOption { type = lib.types.enum [ "fstab" "gpt-auto" ]; default = "fstab"; example = "gpt-auto"; description = '' Controls how systemd will interpret the root FS in initrd. See {manpage}`kernel-command-line(7)`. NixOS currently does not allow specifying the root file system itself this way. Instead, the `fstab` value is used in order to interpret the root file system specified with the `fileSystems` option. ''; }; emergencyAccess = mkOption { type = with types; oneOf [ bool (nullOr (passwdEntry str)) ]; description = lib.mdDoc '' Loading Loading @@ -342,7 +355,12 @@ in { }; config = mkIf (config.boot.initrd.enable && cfg.enable) { assertions = map (name: { assertions = [ { assertion = cfg.root == "fstab" -> any (fs: fs.mountPoint == "/") (builtins.attrValues config.fileSystems); message = "The ‘fileSystems’ option does not specify your root file system."; } ] ++ map (name: { assertion = lib.attrByPath name (throw "impossible") config.boot.initrd == ""; message = '' systemd stage 1 does not support 'boot.initrd.${lib.concatStringsSep "." name}'. Please Loading Loading @@ -371,7 +389,12 @@ in { "autofs" # systemd-cryptenroll ] ++ lib.optional cfg.enableTpm2 "tpm-tis" ++ lib.optional (cfg.enableTpm2 && !(pkgs.stdenv.hostPlatform.isRiscV64 || pkgs.stdenv.hostPlatform.isArmv7)) "tpm-crb"; ++ lib.optional (cfg.enableTpm2 && !(pkgs.stdenv.hostPlatform.isRiscV64 || pkgs.stdenv.hostPlatform.isArmv7)) "tpm-crb" ++ lib.optional cfg.package.withEfi "efivarfs"; boot.kernelParams = [ "root=${config.boot.initrd.systemd.root}" ] ++ lib.optional (config.boot.resumeDevice != "") "resume=${config.boot.resumeDevice}"; boot.initrd.systemd = { initrdBin = [pkgs.bash pkgs.coreutils cfg.package.kmod cfg.package]; Loading Loading @@ -554,7 +577,5 @@ in { serviceConfig.Type = "oneshot"; }; }; boot.kernelParams = lib.mkIf (config.boot.resumeDevice != "") [ "resume=${config.boot.resumeDevice}" ]; }; } nixos/tests/hibernate.nix +1 −1 Original line number Diff line number Diff line Loading @@ -24,8 +24,8 @@ makeTest { virtualisation.useNixStoreImage = true; swapDevices = lib.mkOverride 0 [ { device = "/dev/vdc"; options = [ "x-systemd.makefs" ]; } ]; boot.resumeDevice = "/dev/vdc"; boot.initrd.systemd.enable = systemdStage1; virtualisation.useEFIBoot = true; }; }; Loading nixos/tests/installer-systemd-stage-1.nix +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ clevisLuksFallback clevisZfs clevisZfsFallback gptAutoRoot ; } nixos/tests/installer.nix +40 −2 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ let testScriptFun = { bootLoader, createPartitions, grubDevice, grubUseEfi, grubIdentifier , postInstallCommands, preBootCommands, postBootCommands, extraConfig , testSpecialisationConfig, testFlakeSwitch, clevisTest, clevisFallbackTest , disableFileSystems }: let qemu-common = import ../lib/qemu-common.nix { inherit (pkgs) lib pkgs; }; Loading Loading @@ -163,7 +164,7 @@ let ${createPartitions} with subtest("Create the NixOS configuration"): machine.succeed("nixos-generate-config --root /mnt") machine.succeed("nixos-generate-config ${optionalString disableFileSystems "--no-filesystems"} --root /mnt") machine.succeed("cat /mnt/etc/nixos/hardware-configuration.nix >&2") machine.copy_from_host( "${ makeConfig { Loading Loading @@ -433,6 +434,7 @@ let , testFlakeSwitch ? false , clevisTest ? false , clevisFallbackTest ? false , disableFileSystems ? false }: makeTest { inherit enableOCR; Loading Loading @@ -541,7 +543,8 @@ let testScript = testScriptFun { inherit bootLoader createPartitions postInstallCommands preBootCommands postBootCommands grubDevice grubIdentifier grubUseEfi extraConfig testSpecialisationConfig testFlakeSwitch clevisTest clevisFallbackTest; testSpecialisationConfig testFlakeSwitch clevisTest clevisFallbackTest disableFileSystems; }; }; Loading Loading @@ -1414,4 +1417,39 @@ in { }; }; }; gptAutoRoot = let rootPartType = { ia32 = "44479540-F297-41B2-9AF7-D131D5F0458A"; x64 = "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"; arm = "69DAD710-2CE4-4E3C-B16C-21A1D49ABED3"; aa64 = "B921B045-1DF0-41C3-AF44-4C6F280D3FAE"; }.${pkgs.stdenv.hostPlatform.efiArch}; in makeInstallerTest "gptAutoRoot" { disableFileSystems = true; createPartitions = '' machine.succeed( "sgdisk --zap-all /dev/vda", "sgdisk --new=1:0:+100M --typecode=0:ef00 /dev/vda", # /boot "sgdisk --new=2:0:+1G --typecode=0:8200 /dev/vda", # swap "sgdisk --new=3:0:+5G --typecode=0:${rootPartType} /dev/vda", # / "udevadm settle", "mkfs.vfat /dev/vda1", "mkswap /dev/vda2 -L swap", "swapon -L swap", "mkfs.ext4 -L root /dev/vda3", "udevadm settle", "mount /dev/vda3 /mnt", "mkdir -p /mnt/boot", "mount /dev/vda1 /mnt/boot" ) ''; bootLoader = "systemd-boot"; extraConfig = '' boot.initrd.systemd.root = "gpt-auto"; boot.initrd.supportedFilesystems = ["ext4"]; ''; }; } Loading
nixos/modules/system/boot/stage-1.nix +1 −1 Original line number Diff line number Diff line Loading @@ -688,7 +688,7 @@ in config = mkIf config.boot.initrd.enable { assertions = [ { assertion = any (fs: fs.mountPoint == "/") fileSystems; { assertion = !config.boot.initrd.systemd.enable -> any (fs: fs.mountPoint == "/") fileSystems; message = "The ‘fileSystems’ option does not specify your root file system."; } { assertion = let inherit (config.boot) resumeDevice; in Loading
nixos/modules/system/boot/systemd/initrd.nix +25 −4 Original line number Diff line number Diff line Loading @@ -212,6 +212,19 @@ in { default = []; }; root = lib.mkOption { type = lib.types.enum [ "fstab" "gpt-auto" ]; default = "fstab"; example = "gpt-auto"; description = '' Controls how systemd will interpret the root FS in initrd. See {manpage}`kernel-command-line(7)`. NixOS currently does not allow specifying the root file system itself this way. Instead, the `fstab` value is used in order to interpret the root file system specified with the `fileSystems` option. ''; }; emergencyAccess = mkOption { type = with types; oneOf [ bool (nullOr (passwdEntry str)) ]; description = lib.mdDoc '' Loading Loading @@ -342,7 +355,12 @@ in { }; config = mkIf (config.boot.initrd.enable && cfg.enable) { assertions = map (name: { assertions = [ { assertion = cfg.root == "fstab" -> any (fs: fs.mountPoint == "/") (builtins.attrValues config.fileSystems); message = "The ‘fileSystems’ option does not specify your root file system."; } ] ++ map (name: { assertion = lib.attrByPath name (throw "impossible") config.boot.initrd == ""; message = '' systemd stage 1 does not support 'boot.initrd.${lib.concatStringsSep "." name}'. Please Loading Loading @@ -371,7 +389,12 @@ in { "autofs" # systemd-cryptenroll ] ++ lib.optional cfg.enableTpm2 "tpm-tis" ++ lib.optional (cfg.enableTpm2 && !(pkgs.stdenv.hostPlatform.isRiscV64 || pkgs.stdenv.hostPlatform.isArmv7)) "tpm-crb"; ++ lib.optional (cfg.enableTpm2 && !(pkgs.stdenv.hostPlatform.isRiscV64 || pkgs.stdenv.hostPlatform.isArmv7)) "tpm-crb" ++ lib.optional cfg.package.withEfi "efivarfs"; boot.kernelParams = [ "root=${config.boot.initrd.systemd.root}" ] ++ lib.optional (config.boot.resumeDevice != "") "resume=${config.boot.resumeDevice}"; boot.initrd.systemd = { initrdBin = [pkgs.bash pkgs.coreutils cfg.package.kmod cfg.package]; Loading Loading @@ -554,7 +577,5 @@ in { serviceConfig.Type = "oneshot"; }; }; boot.kernelParams = lib.mkIf (config.boot.resumeDevice != "") [ "resume=${config.boot.resumeDevice}" ]; }; }
nixos/tests/hibernate.nix +1 −1 Original line number Diff line number Diff line Loading @@ -24,8 +24,8 @@ makeTest { virtualisation.useNixStoreImage = true; swapDevices = lib.mkOverride 0 [ { device = "/dev/vdc"; options = [ "x-systemd.makefs" ]; } ]; boot.resumeDevice = "/dev/vdc"; boot.initrd.systemd.enable = systemdStage1; virtualisation.useEFIBoot = true; }; }; Loading
nixos/tests/installer-systemd-stage-1.nix +1 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ clevisLuksFallback clevisZfs clevisZfsFallback gptAutoRoot ; }
nixos/tests/installer.nix +40 −2 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ let testScriptFun = { bootLoader, createPartitions, grubDevice, grubUseEfi, grubIdentifier , postInstallCommands, preBootCommands, postBootCommands, extraConfig , testSpecialisationConfig, testFlakeSwitch, clevisTest, clevisFallbackTest , disableFileSystems }: let qemu-common = import ../lib/qemu-common.nix { inherit (pkgs) lib pkgs; }; Loading Loading @@ -163,7 +164,7 @@ let ${createPartitions} with subtest("Create the NixOS configuration"): machine.succeed("nixos-generate-config --root /mnt") machine.succeed("nixos-generate-config ${optionalString disableFileSystems "--no-filesystems"} --root /mnt") machine.succeed("cat /mnt/etc/nixos/hardware-configuration.nix >&2") machine.copy_from_host( "${ makeConfig { Loading Loading @@ -433,6 +434,7 @@ let , testFlakeSwitch ? false , clevisTest ? false , clevisFallbackTest ? false , disableFileSystems ? false }: makeTest { inherit enableOCR; Loading Loading @@ -541,7 +543,8 @@ let testScript = testScriptFun { inherit bootLoader createPartitions postInstallCommands preBootCommands postBootCommands grubDevice grubIdentifier grubUseEfi extraConfig testSpecialisationConfig testFlakeSwitch clevisTest clevisFallbackTest; testSpecialisationConfig testFlakeSwitch clevisTest clevisFallbackTest disableFileSystems; }; }; Loading Loading @@ -1414,4 +1417,39 @@ in { }; }; }; gptAutoRoot = let rootPartType = { ia32 = "44479540-F297-41B2-9AF7-D131D5F0458A"; x64 = "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709"; arm = "69DAD710-2CE4-4E3C-B16C-21A1D49ABED3"; aa64 = "B921B045-1DF0-41C3-AF44-4C6F280D3FAE"; }.${pkgs.stdenv.hostPlatform.efiArch}; in makeInstallerTest "gptAutoRoot" { disableFileSystems = true; createPartitions = '' machine.succeed( "sgdisk --zap-all /dev/vda", "sgdisk --new=1:0:+100M --typecode=0:ef00 /dev/vda", # /boot "sgdisk --new=2:0:+1G --typecode=0:8200 /dev/vda", # swap "sgdisk --new=3:0:+5G --typecode=0:${rootPartType} /dev/vda", # / "udevadm settle", "mkfs.vfat /dev/vda1", "mkswap /dev/vda2 -L swap", "swapon -L swap", "mkfs.ext4 -L root /dev/vda3", "udevadm settle", "mount /dev/vda3 /mnt", "mkdir -p /mnt/boot", "mount /dev/vda1 /mnt/boot" ) ''; bootLoader = "systemd-boot"; extraConfig = '' boot.initrd.systemd.root = "gpt-auto"; boot.initrd.supportedFilesystems = ["ext4"]; ''; }; }