From 3eb1716dd80c245a2883da04156af79fb9097519 Mon Sep 17 00:00:00 2001 From: Andreas Rammhold Date: Fri, 2 Nov 2018 21:15:42 +0100 Subject: [PATCH 19/27] 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 d9114bb0c5..22c3b6ff76 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -3868,9 +3868,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.24.1