From bfaa53731ffe984c93c5321099d1341b5059f029 Mon Sep 17 00:00:00 2001 From: Andreas Rammhold Date: Fri, 2 Nov 2018 21:15:42 +0100 Subject: [PATCH 13/18] inherit systemd environment when calling generators. Systemd generators need access to the environment configured in stage-2-init.sh since it schedules fsck and mkfs executions based on being able to find an appropriate binary for the target filesystem. With this commit I am altering the systemd behaviour since upstream tries to gather environments with that they call "environment-generators" and then seems to pass that on to all the other executables that are being called from managers. --- src/core/manager.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/core/manager.c b/src/core/manager.c index 41e0d73736..d02de06f09 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -4095,9 +4095,14 @@ static int manager_run_generators(Manager *m) { argv[4] = NULL; RUN_WITH_UMASK(0022) - (void) execute_directories((const char* const*) paths, DEFAULT_TIMEOUT_USEC, NULL, NULL, - (char**) argv, m->transient_environment, EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS); - + (void) execute_directories((const char* const*) paths, DEFAULT_TIMEOUT_USEC, + // On NixOS we must propagate PATH to generators so they are + // able to find binaries such as `fsck.${fstype}` and + // `mkfs.${fstype}`. That is why the last argument of the + // function (envp) is set to NULL. This propagates systemd's + // environment (e.g. PATH) that was setup + // before calling systemd from stage-2-init.sh. + NULL, NULL, (char**) argv, /* NixOS: use inherited env */ NULL, EXEC_DIR_PARALLEL | EXEC_DIR_IGNORE_ERRORS); r = 0; finish: -- 2.27.0