diff --git a/units/initrd-cleanup.service b/units/initrd-cleanup.service index 08ab503962..9c7914e341 100644 --- a/units/initrd-cleanup.service +++ b/units/initrd-cleanup.service @@ -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 diff --git a/units/initrd-udevadm-cleanup-db.service b/units/initrd-udevadm-cleanup-db.service index 6c0a1e16ae..b53d1f130a 100644 --- a/units/initrd-udevadm-cleanup-db.service +++ b/units/initrd-udevadm-cleanup-db.service @@ -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] diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in index 7c71243a4a..658c19b278 100644 --- a/units/systemd-udevd.service.in +++ b/units/systemd-udevd.service.in @@ -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=