70 lines
2.6 KiB
Diff
70 lines
2.6 KiB
Diff
|
From 4c2d98c75b0dd3dad45430becb78c9d40bc6be1b Mon Sep 17 00:00:00 2001
|
||
|
From: Martin Wilck <mwilck@suse.com>
|
||
|
Date: Mon, 9 Oct 2017 14:39:12 +0200
|
||
|
Subject: [PATCH] emergency.service: use Type=idle
|
||
|
MIME-Version: 1.0
|
||
|
Content-Type: text/plain; charset=UTF-8
|
||
|
Content-Transfer-Encoding: 8bit
|
||
|
|
||
|
Type=oneshot, as currently set in dracut's emergency service file,
|
||
|
causes an awkward situation if emergency mode is entered e.g. because
|
||
|
of a root device timeout, and the root device appears later because it
|
||
|
just has taken longer than the timeout. In that situation, my
|
||
|
expectation (backed by past positive experience) is that the user should
|
||
|
be able to simply exit the emergency shell and resume normal boot.
|
||
|
|
||
|
:/# systemctl status sysroot.mount
|
||
|
● sysroot.mount - /sysroot
|
||
|
Loaded: loaded (/proc/cmdline; bad; vendor preset: enabled)
|
||
|
Active: active (mounted) since Mon 2017-10-09 14:32:15 CEST; 16s ago
|
||
|
Where: /sysroot
|
||
|
What: /dev/mapper/3600601600a30200024fbbaf3f500e411-part5
|
||
|
Docs: man:fstab(5)
|
||
|
man:systemd-fstab-generator(8)
|
||
|
Process: 1873 ExecMount=/usr/bin/mount /dev/disk/by-uuid/63751805-6abc-46a3-a66f-427920dece4d /sysroot -o ro (code=exited, status=0/SUCCESS)
|
||
|
Tasks: 0 (limit: 512)
|
||
|
|
||
|
:/# systemctl list-jobs
|
||
|
JOB UNIT TYPE STATE
|
||
|
56 emergency.target start waiting
|
||
|
57 emergency.service start running
|
||
|
|
||
|
2 jobs listed.
|
||
|
:/# exit
|
||
|
logout
|
||
|
Failed to start default.target: Transaction is destructive.
|
||
|
|
||
|
(system keeps idling from this point on, user has no chance to
|
||
|
do anything).
|
||
|
|
||
|
This results from the combination of two effects:
|
||
|
1) initrd-root-fs.target sets "OnFailureJobMode=replace-irreversibly",
|
||
|
2) emergency.service's Type=oneshot causes the start jobs for both
|
||
|
emergency.service and emergency.target to persist while the user is in
|
||
|
the emergency shell.
|
||
|
|
||
|
When the shell is exited, systemd tries to isolate "initrd.target"
|
||
|
again, but this fails with "the transaction is destructive" error
|
||
|
because of the still pending jobs.
|
||
|
|
||
|
This patch fixes this by changing the Type of "emergency.service" from
|
||
|
"oneshot" to "idle".
|
||
|
---
|
||
|
modules.d/98dracut-systemd/emergency.service | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/modules.d/98dracut-systemd/emergency.service b/modules.d/98dracut-systemd/emergency.service
|
||
|
index 288aac39..100146a3 100644
|
||
|
--- a/modules.d/98dracut-systemd/emergency.service
|
||
|
+++ b/modules.d/98dracut-systemd/emergency.service
|
||
|
@@ -17,7 +17,7 @@ Environment=NEWROOT=/sysroot
|
||
|
WorkingDirectory=/
|
||
|
ExecStart=/bin/dracut-emergency
|
||
|
ExecStopPost=-/usr/bin/systemctl --fail --no-block default
|
||
|
-Type=oneshot
|
||
|
+Type=idle
|
||
|
StandardInput=tty-force
|
||
|
StandardOutput=inherit
|
||
|
StandardError=inherit
|
||
|
|