systemd-stage-1: Add assertions for unsupported options.

Changed files
+45 -22
nixos
modules
services
hardware
networking
system
tasks
tests
+1 -1
nixos/modules/services/hardware/udev.nix
···
boot.kernelParams = mkIf (!config.networking.usePredictableInterfaceNames) [ "net.ifnames=0" ];
-
boot.initrd.extraUdevRulesCommands = optionalString (!config.boot.initrd.systemd.enable && config.boot.initrd.services.udev.rules != "")
+
boot.initrd.extraUdevRulesCommands = mkIf (!config.boot.initrd.systemd.enable && config.boot.initrd.services.udev.rules != "")
''
cat <<'EOF' > $out/99-local.rules
${config.boot.initrd.services.udev.rules}
+2 -1
nixos/modules/services/networking/multipath.nix
···
# We do not have systemd in stage-1 boot so must invoke `multipathd`
# with the `-1` argument which disables systemd calls. Invoke `multipath`
# to display the multipath mappings in the output of `journalctl -b`.
+
# TODO: Implement for systemd stage 1
boot.initrd.kernelModules = [ "dm-multipath" "dm-service-time" ];
-
boot.initrd.postDeviceCommands = ''
+
boot.initrd.postDeviceCommands = mkIf (!config.boot.initrd.systemd.enable) ''
modprobe -a dm-multipath dm-service-time
multipathd -s
(set -x && sleep 1 && multipath -ll)
+4 -4
nixos/modules/system/boot/initrd-network.nix
···
boot.initrd.kernelModules = [ "af_packet" ];
-
boot.initrd.extraUtilsCommands = ''
+
boot.initrd.extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable) ''
copy_bin_and_libs ${pkgs.klibc}/lib/klibc/bin.static/ipconfig
'';
-
boot.initrd.preLVMCommands = mkBefore (
+
boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) (mkBefore (
# Search for interface definitions in command line.
''
ifaces=""
···
done
''
-
+ cfg.postCommands);
+
+ cfg.postCommands));
-
boot.initrd.postMountCommands = mkIf cfg.flushBeforeStage2 ''
+
boot.initrd.postMountCommands = mkIf (cfg.flushBeforeStage2 && !config.boot.initrd.systemd.enable) ''
for iface in $ifaces; do
ip address flush dev "$iface"
ip link set dev "$iface" down
+21
nixos/modules/system/boot/systemd/initrd.nix
···
};
config = mkIf (config.boot.initrd.enable && cfg.enable) {
+
assertions = map (name: {
+
assertion = lib.attrByPath name (throw "impossible") config.boot.initrd == "";
+
message = ''
+
systemd stage 1 does not support 'boot.initrd.${lib.concatStringsSep "." name}'. Please
+
convert it to analogous systemd units in 'boot.initrd.systemd'.
+
+
Definitions:
+
${lib.concatMapStringsSep "\n" ({ file, ... }: " - ${file}") (lib.attrByPath name (throw "impossible") options.boot.initrd).definitionsWithLocations}
+
'';
+
}) [
+
[ "preFailCommands" ]
+
[ "preDeviceCommands" ]
+
[ "preLVMCommands" ]
+
[ "postDeviceCommands" ]
+
[ "postMountCommands" ]
+
[ "extraUdevRulesCommands" ]
+
[ "extraUtilsCommands" ]
+
[ "extraUtilsCommandsTest" ]
+
[ "network" "postCommands" ]
+
];
+
system.build = { inherit initialRamdisk; };
boot.initrd.availableKernelModules = [
+4 -3
nixos/modules/tasks/encrypted-devices.nix
···
}) earlyEncDevs);
forceLuksSupportInInitrd = true;
};
-
postMountCommands =
-
concatMapStrings (dev:
+
# TODO: systemd stage 1
+
postMountCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
+
(concatMapStrings (dev:
"cryptsetup luksOpen --key-file ${dev.encrypted.keyFile} ${dev.encrypted.blkDev} ${dev.encrypted.label};\n"
-
) lateEncDevs;
+
) lateEncDevs);
};
};
}
+2 -2
nixos/modules/tasks/filesystems/bcachefs.nix
···
copy_bin_and_libs ${pkgs.bcachefs-tools}/bin/bcachefs
copy_bin_and_libs ${mountCommand}/bin/mount.bcachefs
'';
-
boot.initrd.extraUtilsCommandsTest = ''
+
boot.initrd.extraUtilsCommandsTest = lib.mkIf (!config.boot.initrd.systemd.enable) ''
$out/bin/bcachefs version
'';
-
boot.initrd.postDeviceCommands = commonFunctions + concatStrings (mapAttrsToList openCommand bootFs);
+
boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + concatStrings (mapAttrsToList openCommand bootFs));
boot.initrd.systemd.services = lib.mapAttrs' (mkUnits "/sysroot") bootFs;
})
+6 -6
nixos/modules/tasks/filesystems/zfs.nix
···
boot.initrd = mkIf inInitrd {
kernelModules = [ "zfs" ] ++ optional (!cfgZfs.enableUnstable) "spl";
extraUtilsCommands =
-
''
+
mkIf (!config.boot.initrd.systemd.enable) ''
copy_bin_and_libs ${cfgZfs.package}/sbin/zfs
copy_bin_and_libs ${cfgZfs.package}/sbin/zdb
copy_bin_and_libs ${cfgZfs.package}/sbin/zpool
'';
-
extraUtilsCommandsTest = mkIf inInitrd
-
''
+
extraUtilsCommandsTest =
+
mkIf (!config.boot.initrd.systemd.enable) ''
$out/bin/zfs --help >/dev/null 2>&1
$out/bin/zpool --help >/dev/null 2>&1
'';
-
postDeviceCommands = concatStringsSep "\n" ([''
+
postDeviceCommands = mkIf (!config.boot.initrd.systemd.enable) (concatStringsSep "\n" ([''
ZFS_FORCE="${optionalString cfgZfs.forceImportRoot "-f"}"
''] ++ [(importLib {
# See comments at importLib definition.
···
else concatMapStrings (fs: ''
zfs load-key -- ${escapeShellArg fs}
'') (filter (x: datasetToPool x == pool) cfgZfs.requestEncryptionCredentials)}
-
'') rootPools));
+
'') rootPools)));
# Systemd in stage 1
-
systemd = {
+
systemd = mkIf config.boot.initrd.systemd.enable {
packages = [cfgZfs.package];
services = listToAttrs (map (pool: createImportService {
inherit pool;
+2 -2
nixos/modules/tasks/swraid.nix
···
cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
'';
-
extraUtilsCommands = ''
+
extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
# Add RAID mdadm tool.
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdadm
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdmon
'';
-
extraUtilsCommandsTest = ''
+
extraUtilsCommandsTest = lib.mkIf (!config.boot.initrd.systemd.enable) ''
$out/bin/mdadm --version
'';
+3 -3
nixos/tests/common/auto-format-root-device.nix
···
# `virtualisation.fileSystems."/".autoFormat = true;`
# instead.
-
{ config, pkgs, ... }:
+
{ lib, config, pkgs, ... }:
let
rootDevice = config.virtualisation.rootDevice;
in
{
-
boot.initrd.extraUtilsCommands = ''
+
boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
# We need mke2fs in the initrd.
copy_bin_and_libs ${pkgs.e2fsprogs}/bin/mke2fs
'';
-
boot.initrd.postDeviceCommands = ''
+
boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
# If the disk image appears to be empty, run mke2fs to
# initialise.
FSTYPE=$(blkid -o value -s TYPE ${rootDevice} || true)