From: Zbigniew Jędrzejewski-Szmek Date: Wed, 14 Sep 2022 11:39:10 +0000 (+0100) Subject: units: add ordering dependencies on initrd-switch-root.target X-Git-Tag: v252-rc1~164^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7c0e2b555968d70ac563a37e32a6931ee90961a6;p=thirdparty%2Fsystemd.git units: add ordering dependencies on initrd-switch-root.target For shutdown, we queue shutdown.target/start, so in every unit which should be stopped *before* shutdown, we need both Conflicts and an ordering dependency with shutdown.target (either Before= or After= would work, because stop jobs are always ordered before start jobs). For initrd transition, we queue initrd-switch-root.service/isolate. This automatically creates a /stop job for every running unit without IgnoreOnIsolate. But no ordering dependency is created, unless the unit has a (possibly transitive) ordering dependency on initrd-switch-root.service. Since most units must stop before the transition, we should add the ordering dependency. It is nicer to use Before=initrd-switch-root.target for this. initrd-switch-root.target is ordered before initrd-switch-root.service, so the effect it the same when both are in a transaction. Fixes #23745. To also cover the case where somebody is emergency mode in the initrd and queues initrd-switch-root.service/start (not isolate), also add Conflicts=initrd-switch-root.target, so various units are stopped properly. This extends 2525682565b372b9b83c848bfe89c025fed47a1d to cover all the other services that are touched. It could be consider "operator error", but it's easy to make and it's nicer if we can make this more foolproof. --- diff --git a/units/ldconfig.service b/units/ldconfig.service index cb887ae8659..53c6d4ecb16 100644 --- a/units/ldconfig.service +++ b/units/ldconfig.service @@ -17,8 +17,8 @@ ConditionFileNotEmpty=|!/etc/ld.so.cache DefaultDependencies=no After=local-fs.target Before=sysinit.target systemd-update-done.service -Conflicts=shutdown.target -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target [Service] Type=oneshot diff --git a/units/systemd-ask-password-console.service b/units/systemd-ask-password-console.service index 97c651f0090..9360bf1d5ab 100644 --- a/units/systemd-ask-password-console.service +++ b/units/systemd-ask-password-console.service @@ -16,8 +16,8 @@ ConditionPathExists=!/run/plymouth/pid DefaultDependencies=no After=plymouth-start.service systemd-vconsole-setup.service Conflicts=emergency.service -Conflicts=shutdown.target -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target [Service] ExecStart=systemd-tty-ask-password-agent --watch --console diff --git a/units/systemd-boot-system-token.service b/units/systemd-boot-system-token.service index 56d3c8ad471..662a1fda04b 100644 --- a/units/systemd-boot-system-token.service +++ b/units/systemd-boot-system-token.service @@ -12,9 +12,9 @@ Description=Store a System Token in an EFI Variable Documentation=man:systemd-boot-system-token.service(8) DefaultDependencies=no -Conflicts=shutdown.target After=local-fs.target systemd-random-seed.service -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target # Don't run this in a VM environment, because there EFI variables are not # actually stored in NVRAM, independent of regular storage. diff --git a/units/systemd-network-generator.service.in b/units/systemd-network-generator.service.in index 41c27c50d89..2b79ca6b8a8 100644 --- a/units/systemd-network-generator.service.in +++ b/units/systemd-network-generator.service.in @@ -14,8 +14,8 @@ Documentation=man:systemd-network-generator.service(8) DefaultDependencies=no Before=network-pre.target systemd-udevd.service Wants=network-pre.target -Conflicts=shutdown.target -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target [Service] Type=oneshot diff --git a/units/systemd-sysext.service b/units/systemd-sysext.service index 245c0e5a0d4..254de2b623b 100644 --- a/units/systemd-sysext.service +++ b/units/systemd-sysext.service @@ -21,8 +21,8 @@ ConditionDirectoryNotEmpty=|/usr/lib/extensions DefaultDependencies=no After=local-fs.target Before=sysinit.target systemd-tmpfiles.service -Conflicts=shutdown.target -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target [Service] Type=oneshot diff --git a/units/systemd-sysusers.service b/units/systemd-sysusers.service index 8b9335ff28a..0eb40294b21 100644 --- a/units/systemd-sysusers.service +++ b/units/systemd-sysusers.service @@ -14,8 +14,8 @@ Documentation=man:sysusers.d(5) man:systemd-sysusers.service(8) DefaultDependencies=no After=systemd-remount-fs.service Before=sysinit.target systemd-update-done.service -Conflicts=shutdown.target -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target ConditionNeedsUpdate=|/etc ConditionCredential=|sysusers.extra diff --git a/units/systemd-tmpfiles-clean.service b/units/systemd-tmpfiles-clean.service index 7f1b7ec594e..4163aef729b 100644 --- a/units/systemd-tmpfiles-clean.service +++ b/units/systemd-tmpfiles-clean.service @@ -12,9 +12,9 @@ Description=Cleanup of Temporary Directories Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) DefaultDependencies=no -Conflicts=shutdown.target initrd-switch-root.service After=local-fs.target time-set.target -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target [Service] Type=oneshot diff --git a/units/systemd-tmpfiles-setup-dev.service b/units/systemd-tmpfiles-setup-dev.service index d202a7568f3..c65539aa797 100644 --- a/units/systemd-tmpfiles-setup-dev.service +++ b/units/systemd-tmpfiles-setup-dev.service @@ -14,8 +14,8 @@ Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) DefaultDependencies=no After=systemd-sysusers.service Before=sysinit.target local-fs-pre.target systemd-udevd.service -Conflicts=shutdown.target -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target [Service] Type=oneshot diff --git a/units/systemd-tmpfiles-setup.service b/units/systemd-tmpfiles-setup.service index baed27df758..7e11eb94144 100644 --- a/units/systemd-tmpfiles-setup.service +++ b/units/systemd-tmpfiles-setup.service @@ -12,10 +12,10 @@ Description=Create Volatile Files and Directories Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) DefaultDependencies=no -Conflicts=shutdown.target initrd-switch-root.service After=local-fs.target systemd-sysusers.service systemd-journald.service Before=sysinit.target -Before=shutdown.target +Conflicts=shutdown.target initrd-switch-root.target +Before=shutdown.target initrd-switch-root.target RefuseManualStop=yes [Service]