Merge pull request #5192 from keszybz/systemctl-ignore-sigterm

Fix for initrd-switch-root failing and causing emergency.target to be started.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2017-01-31 10:36:30 -05:00
committed by GitHub
3 changed files with 16 additions and 7 deletions
+15 -6
View File
@@ -5655,16 +5655,22 @@ static int switch_root(int argc, char *argv[], void *userdata) {
}
/* Instruct PID1 to exclude us from its killing spree applied during
* the transition from the initrd to the main system otherwise we would
* exit with a failure status even though the switch to the new root
* has succeed. */
if (in_initrd())
argv_cmdline[0] = '@';
* the transition. Otherwise we would exit with a failure status even
* though the switch to the new root has succeed. */
argv_cmdline[0] = '@';
r = acquire_bus(BUS_MANAGER, &bus);
if (r < 0)
return r;
/* If we are slow to exit after the root switch, the new systemd instance
* will send us a signal to terminate. Just ignore it and exit normally.
* This way the unit does not end up as failed.
*/
r = ignore_signals(SIGTERM, -1);
if (r < 0)
log_warning_errno(r, "Failed to change disposition of SIGTERM to ignore: %m");
log_debug("Switching root - root: %s; init: %s", root, strna(init));
r = sd_bus_call_method(
@@ -5676,8 +5682,11 @@ static int switch_root(int argc, char *argv[], void *userdata) {
&error,
NULL,
"ss", root, init);
if (r < 0)
if (r < 0) {
(void) default_signals(SIGTERM, -1);
return log_error_errno(r, "Failed to switch root: %s", bus_error_message(&error, r));
}
return 0;
}
-1
View File
@@ -16,4 +16,3 @@ AllowIsolate=yes
[Service]
Type=oneshot
ExecStart=@rootbindir@/systemctl --no-block switch-root /sysroot
KillMode=none
+1
View File
@@ -9,6 +9,7 @@
Description=Setup Virtual Console
Documentation=man:systemd-vconsole-setup.service(8) man:vconsole.conf(5)
DefaultDependencies=no
Before=initrd-switch-root.target shutdown.target
ConditionPathExists=/dev/tty0
[Service]