Emergency mode: add emergency-target-holder.service 26/245326/4
authorINSUN PYO <insun.pyo@samsung.com>
Wed, 7 Oct 2020 03:13:45 +0000 (12:13 +0900)
committerHyotaek Shim <hyotaek.shim@samsung.com>
Tue, 20 Oct 2020 07:17:28 +0000 (07:17 +0000)
The emergency-target-holder.service prevents emergency.target from completing.
If emergency.target is not completed,
other services that are not intended can not be run in emergency mode.

Detailed information.
============================================================================================================================
1. If local-fs.target fails, emergency.target is started by 'OnFailure=emergency.target'.

2. By 'OnFailureJobMode=replace-irreversibly' option,
   emergency.target cannot be canceled until completion.

3. When starting a new service by any activation(dbus, path, socket) in emergency mode,
   sysinit.target is always checked and started by 'DefaultDependency=yes'.

4. sysinit.target stops emergency.target because of the 'Conflicts=emergency.target' setting.

5. However, emergency.target can not be stopped
   because it started with 'replace-irreversibly' and not finished yet.

6. So sysinit.target can not be started.

7. New service can not be run because sysinit.target could not be started.
============================================================================================================================

Logs when running new services after applying this patch
=============================================================================================================================
bash-3.2# systemctl start deviced.service
Failed to start deviced.service: Transaction for deviced.service/start is destructive (emergency.target has 'start' job queued, but 'stop' is included in transaction).
See system logs and 'systemctl status deviced.service' for details.

bash-3.2# systemctl start sysinit.target
Failed to start sysinit.target: Transaction for sysinit.target/start is destructive (emergency.target has 'start' job queued, but 'stop' is included in transaction).
See system logs and 'systemctl status sysinit.target' for details.
==============================================================================================================================

Change-Id: I2cefadd7228d463fe1755e0c475f4563d98c8260

units/emergency-target-holder.service [new file with mode: 0644]
units/meson.build

diff --git a/units/emergency-target-holder.service b/units/emergency-target-holder.service
new file mode 100644 (file)
index 0000000..ed25334
--- /dev/null
@@ -0,0 +1,12 @@
+[Unit]
+Description=Emergency Target Holder
+DefaultDependencies=no
+After=emergency.service
+Before=emergency.target
+
+[Service]
+Type=oneshot
+ExecStart=/usr/bin/sleep 365d
+User=system_fw
+Group=system_fw
+SmackProcessLabel=System
index 6c929ee..2f5ed3c 100644 (file)
@@ -11,6 +11,8 @@ units = [
         ['dev-mqueue.mount',                    '',
          'sysinit.target.wants/'],
         ['emergency.target',                    ''],
+        ['emergency-target-holder.service',     '',
+         'emergency.target.wants/'],
         ['exit.target',                         ''],
         ['final.target',                        ''],
         ['getty.target',                        '',