Merge pull request #185116 from NickCao/udev

nixos/udev: enable initrd-udevadm-cleanup-db.service in systemd stage 1

Changed files
+13 -1
nixos
modules
services
hardware
tests
+8 -1
nixos/modules/services/hardware/udev.nix
···
SUBSYSTEM=="input", KERNEL=="mice", TAG+="systemd"
'';
+
nixosInitrdRules = ''
+
# Mark dm devices as db_persist so that they are kept active after switching root
+
SUBSYSTEM=="block", KERNEL=="dm-[0-9]*", ACTION=="add|change", OPTIONS+="db_persist"
+
'';
+
# Perform substitutions in all udev rules files.
udevRulesFor = { name, udevPackages, udevPath, udev, systemd, binPackages, initrdBin ? null }: pkgs.runCommand name
{ preferLocalBuild = true;
···
EOF
'';
+
boot.initrd.services.udev.rules = nixosInitrdRules;
+
boot.initrd.systemd.additionalUpstreamUnits = [
-
# TODO: "initrd-udevadm-cleanup-db.service" is commented out because of https://github.com/systemd/systemd/issues/12953
+
"initrd-udevadm-cleanup-db.service"
"systemd-udevd-control.socket"
"systemd-udevd-kernel.socket"
"systemd-udevd.service"
+5
nixos/tests/systemd-initrd-luks-password.nix
···
cryptroot2.device = "/dev/vdd";
};
virtualisation.bootDevice = "/dev/mapper/cryptroot";
+
# test mounting device unlocked in initrd after switching root
+
virtualisation.fileSystems."/cryptroot2".device = "/dev/mapper/cryptroot2";
};
};
···
machine.wait_for_unit("multi-user.target")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdc -")
machine.succeed("echo -n supersecret | cryptsetup luksFormat -q --iter-time=1 /dev/vdd -")
+
machine.succeed("echo -n supersecret | cryptsetup luksOpen -q /dev/vdd cryptroot2")
+
machine.succeed("mkfs.ext4 /dev/mapper/cryptroot2")
# Boot from the encrypted disk
machine.succeed("bootctl set-default nixos-generation-1-specialisation-boot-luks.conf")
···
machine.wait_for_unit("multi-user.target")
assert "/dev/mapper/cryptroot on / type ext4" in machine.succeed("mount")
+
assert "/dev/mapper/cryptroot2 on /cryptroot2 type ext4" in machine.succeed("mount")
'';
})