diff --git a/src/core/main.c b/src/core/main.c index 89b283cca2..0368ec891f 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -2124,22 +2124,23 @@ static int do_reexecute( args[0] = "/sbin/init"; (void) execv(args[0], (char* const*) args); r = -errno; - - manager_status_printf(NULL, STATUS_TYPE_EMERGENCY, - ANSI_HIGHLIGHT_RED " !! " ANSI_NORMAL, - "Failed to execute /sbin/init"); + *ret_error_message = "Failed to execute /sbin/init"; if (r == -ENOENT) { + manager_status_printf(NULL, STATUS_TYPE_EMERGENCY, + ANSI_HIGHLIGHT_RED " !! " ANSI_NORMAL, + "%s", *ret_error_message); + log_warning_errno(r, "No /sbin/init, trying fallback shell"); args[0] = "/bin/sh"; args[1] = NULL; (void) execve(args[0], (char* const*) args, saved_env); r = -errno; + *ret_error_message = "Failed to execute fallback shell"; } - *ret_error_message = "Failed to execute fallback shell"; - return log_error_errno(r, "Failed to execute /bin/sh, giving up: %m"); + return log_error_errno(r, "%s, giving up: %m", *ret_error_message); } static int invoke_main_loop(