summary refs log tree commit diff
path: root/pkgs/os-specific/linux/systemd/0017-inherit-systemd-environment-when-calling-generators.patch
blob: f4925437aa58ae2803cde8042c2a211058f11b8f (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Yuriy Taraday <yorik.sar@gmail.com>
Date: Fri, 17 Jun 2022 12:45:10 +0000
Subject: [PATCH] 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 | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/core/manager.c b/src/core/manager.c
index 71ef7f27b4..33ded94a7c 100644
--- a/src/core/manager.c
+++ b/src/core/manager.c
@@ -3704,9 +3704,17 @@ static int build_generator_environment(Manager *m, char ***ret) {
          * adjust generated units to that. Let's pass down some bits of information that are easy for us to
          * determine (but a bit harder for generator scripts to determine), as environment variables. */
 
+        // 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 we ignore transient_environment that
+        // overrides the PATH variable. This propagates systemd's
+        // environment (e.g. PATH) that was setup
+        // before calling systemd from stage-2-init.sh.
+#if 0
         nl = strv_copy(m->transient_environment);
         if (!nl)
                 return -ENOMEM;
+#endif
 
         r = strv_env_assign(&nl, "SYSTEMD_SCOPE", MANAGER_IS_SYSTEM(m) ? "system" : "user");
         if (r < 0)