]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
units: kill only udev services and keep udev sockets on switching root
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 13 May 2025 17:56:21 +0000 (02:56 +0900)
committerLuca Boccassi <luca.boccassi@gmail.com>
Sat, 17 May 2025 11:47:52 +0000 (12:47 +0100)
This also makes initrd-cleanup.service explicitly start
initrd-switch-root.service with replace-irreversibly mode, to avoid
systemd-udevd.service being triggered by kernel events and the start
job of initrd-switch-root.service being cancelled.

Follow-ups for 676fb42aaec60281651368f083abb3cbaf3c7dc2.
Addresses https://github.com/systemd/systemd/pull/37374#issuecomment-2875990471.

units/initrd-cleanup.service
units/initrd-udevadm-cleanup-db.service
units/systemd-udevd.service.in

index 08ab5039627fc693abfd4d500f88baac5ebc5879..9c7914e34104b9606d469e6bb5842280a6515e46 100644 (file)
@@ -18,3 +18,4 @@ After=initrd-root-fs.target initrd-fs.target initrd.target
 [Service]
 Type=oneshot
 ExecStart=systemctl --no-block isolate initrd-switch-root.target
+ExecStart=systemctl --no-block --job-mode=replace-irreversibly start initrd-switch-root.service
index 6c0a1e16ae6473cc43ba12cc234a0f716c0d8a1e..b53d1f130aadc1cab5bca63d3a4a7dee93ca1867 100644 (file)
@@ -11,8 +11,8 @@
 Description=Cleanup udev Database
 DefaultDependencies=no
 AssertPathExists=/etc/initrd-release
-Conflicts=systemd-udevd.service systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udevd-varlink.socket systemd-udev-trigger.service systemd-udev-settle.service
-After=systemd-udevd.service systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udevd-varlink.socket systemd-udev-trigger.service systemd-udev-settle.service
+Conflicts=systemd-udevd.service systemd-udev-trigger.service systemd-udev-settle.service
+After=systemd-udevd.service systemd-udev-trigger.service systemd-udev-settle.service
 Before=initrd-switch-root.target
 
 [Service]
index 7c71243a4a19728e0fecbceb96f96f4c863538e7..658c19b278ed79bfe0673299c58e44d8e02711ce 100644 (file)
@@ -24,6 +24,14 @@ ConditionPathIsReadWrite=/sys
 Before=soft-reboot.target systemd-soft-reboot.service
 Conflicts=soft-reboot.target
 
+# To avoid this service being triggered by a relevant socket unit during
+# switching root, which easily happens due to kernel events.
+# Note, unlike soft-reboot (and any other shutting down processes),
+# initrd-switching-root.service is started after initrd-switch-root.target.
+# Hence, we need to also add the service to Conflicts=.
+Before=initrd-switch-root.target initrd-switch-root.service
+Conflicts=initrd-switch-root.target initrd-switch-root.service
+
 [Service]
 CapabilityBoundingSet=~CAP_SYS_TIME CAP_WAKE_ALARM
 Delegate=