From: Yu Watanabe Date: Tue, 13 May 2025 17:56:21 +0000 (+0900) Subject: units: kill only udev services and keep udev sockets on switching root X-Git-Tag: v258-rc1~576 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d766c75acdd825abe1bcfd45406ae2e609a008b6;p=thirdparty%2Fsystemd.git units: kill only udev services and keep udev sockets on switching root 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. --- diff --git a/units/initrd-cleanup.service b/units/initrd-cleanup.service index 08ab5039627..9c7914e3410 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 6c0a1e16ae6..b53d1f130aa 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 7c71243a4a1..658c19b278e 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=