core/main.c: add "--switchedroot" parameter
If systemd serializes from a switch_root, it adds "--switchedroot" to the systemd in the real root. If "--switchedroot" is found, then we do not skip all the stuff, which is skipped for normal rexecs.
This commit is contained in:
parent
f38ed06060
commit
d03bc1b814
|
@ -746,6 +746,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
ARG_SHOW_STATUS,
|
||||
ARG_SYSV_CONSOLE,
|
||||
ARG_DESERIALIZE,
|
||||
ARG_SWITCHEDROOT,
|
||||
ARG_INTROSPECT,
|
||||
ARG_DEFAULT_STD_OUTPUT,
|
||||
ARG_DEFAULT_STD_ERROR
|
||||
|
@ -770,6 +771,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
{ "sysv-console", optional_argument, NULL, ARG_SYSV_CONSOLE },
|
||||
#endif
|
||||
{ "deserialize", required_argument, NULL, ARG_DESERIALIZE },
|
||||
{ "switchedroot", no_argument, NULL, ARG_SWITCHEDROOT },
|
||||
{ "introspect", optional_argument, NULL, ARG_INTROSPECT },
|
||||
{ "default-standard-output", required_argument, NULL, ARG_DEFAULT_STD_OUTPUT, },
|
||||
{ "default-standard-error", required_argument, NULL, ARG_DEFAULT_STD_ERROR, },
|
||||
|
@ -941,6 +943,10 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
break;
|
||||
}
|
||||
|
||||
case ARG_SWITCHEDROOT:
|
||||
/* Nothing special yet */
|
||||
break;
|
||||
|
||||
case ARG_INTROSPECT: {
|
||||
const char * const * i = NULL;
|
||||
|
||||
|
@ -1278,6 +1284,13 @@ int main(int argc, char *argv[]) {
|
|||
break;
|
||||
}
|
||||
|
||||
/* If we have switched root, do all the special things */
|
||||
for (j = 1; j < argc; j++)
|
||||
if (streq(argv[j], "--switchedroot")) {
|
||||
is_reexec = false;
|
||||
break;
|
||||
}
|
||||
|
||||
/* If we get started via the /sbin/init symlink then we are
|
||||
called 'init'. After a subsequent reexecution we are then
|
||||
called 'systemd'. That is confusing, hence let's call us
|
||||
|
@ -1693,7 +1706,7 @@ finish:
|
|||
if (switch_root)
|
||||
do_switch_root(switch_root);
|
||||
|
||||
args_size = MAX(5, argc+1);
|
||||
args_size = MAX(6, argc+1);
|
||||
args = newa(const char*, args_size);
|
||||
|
||||
if (!switch_root_init) {
|
||||
|
@ -1712,6 +1725,8 @@ finish:
|
|||
|
||||
i = 0;
|
||||
args[i++] = SYSTEMD_BINARY_PATH;
|
||||
if (switch_root)
|
||||
args[i++] = "--switchedroot";
|
||||
args[i++] = arg_running_as == MANAGER_SYSTEM ? "--system" : "--user";
|
||||
args[i++] = "--deserialize";
|
||||
args[i++] = sfd;
|
||||
|
|
Loading…
Reference in a new issue