From e21cd6db9cd21c4b1882b67c5f1ad648b9b45b05 Mon Sep 17 00:00:00 2001 From: Fabian Vogt Date: Tue, 8 Jul 2025 13:02:47 +0200 Subject: [PATCH] units/initrd-cleanup.service: Conflict with emergency.target This is very similar to 327cd2d3db703555f8d572b4cd055fbe55e1068b: If emergency.target is started while initrd-cleanup.service/start is queued, the initrd-cleanup job did not get canceled. In parallel to the emergency units, it eventually runs the service, which in turn isolates and starts initrd-switch-root.target. This stops the emergency units and effectively starts the initrd boot process again, which likely fails again like the initial attempt. The system is thus stuck in a loop, never really reaching emergency.target. This can be triggered if a service in between initrd-parse-etc.service and initrd.target fails. With this conflict added, starting emergency.target automatically cancels initrd-cleanup.service/start, avoiding the loop. --- units/initrd-cleanup.service | 1 + 1 file changed, 1 insertion(+) diff --git a/units/initrd-cleanup.service b/units/initrd-cleanup.service index 08ab5039627..cfe7b4cb024 100644 --- a/units/initrd-cleanup.service +++ b/units/initrd-cleanup.service @@ -14,6 +14,7 @@ AssertPathExists=/etc/initrd-release OnFailure=emergency.target OnFailureJobMode=replace-irreversibly After=initrd-root-fs.target initrd-fs.target initrd.target +Conflicts=emergency.target [Service] Type=oneshot -- 2.47.3