51 lines
2.1 KiB
Diff
51 lines
2.1 KiB
Diff
From 18eb87fdddbcb03940b2009e6cb43852e8735e9a Mon Sep 17 00:00:00 2001
|
|
From: Franck Bui <fbui@suse.com>
|
|
Date: Wed, 23 Nov 2016 16:31:24 +0100
|
|
Subject: [PATCH] core: consider SIGTERM as a clean exit status for
|
|
initrd-switch-root.service (#4713)
|
|
|
|
Since commit 1f0958f640b8717, systemd considers SIGTERM for short-running
|
|
services (aka Type=oneshot) as a failure.
|
|
|
|
This can be an issue with initrd-switch-root.service as the command run by this
|
|
service (in order to switch to the new rootfs) may still be running when
|
|
systemd does the switch.
|
|
|
|
However PID1 sends SIGTERM to all remaining processes right before
|
|
switching and initrd-switch-root.service can be one of those.
|
|
|
|
After systemd is reexecuted and its previous state is deserialized, systemd
|
|
notices that initrd-switch-root.service was killed with SIGTERM and considers
|
|
this as a failure which leads to the emergency shell.
|
|
|
|
To prevent this, this patch teaches systemd to consider a SIGTERM exit as a
|
|
clean one for this service.
|
|
|
|
It also removes "KillMode=none" since this is pretty useless as the service is
|
|
never stopped by systemd but it either exits normally or it's killed by a
|
|
SIGTERM as described previously.
|
|
(cherry picked from commit a4021390fef27f4136497328f2e35e79bc88855d)
|
|
---
|
|
units/initrd-switch-root.service.in | 8 +++++++-
|
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/units/initrd-switch-root.service.in b/units/initrd-switch-root.service.in
|
|
index 82893dafb1..b89f2348c7 100644
|
|
--- a/units/initrd-switch-root.service.in
|
|
+++ b/units/initrd-switch-root.service.in
|
|
@@ -17,4 +17,10 @@ AllowIsolate=yes
|
|
Type=oneshot
|
|
# we have to use "--force" here, otherwise systemd would umount /run
|
|
ExecStart=@rootbindir@/systemctl --no-block --force switch-root /sysroot
|
|
-KillMode=none
|
|
+
|
|
+# Just before switching to the new rootfs, systemd might send us a TERM signal
|
|
+# depending on how fast we are to execute the main command and exit. If we get
|
|
+# the SIGTERM signal that simply means that we succeed but haven't got enough
|
|
+# time to exit properly. Since systemd considers SIGTERM as a failure for
|
|
+# short-running process (aka Type=oneshot), instruct it to ignore this case.
|
|
+SuccessExitStatus=SIGTERM
|
|
--
|
|
2.9.3
|
|
|