about summary refs log tree commit diff
path: root/tools/nixery/prepare-image
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@google.com>2021-08-25T10·53+0300
committerVincent Ambo <mail@tazj.in>2021-08-25T13·49+0300
commitaf337010e964671e2f8568a0167a4f8f9eb08216 (patch)
treef9b17cc7d0ceeefe8a8d2b8bd758131bcdf251ed /tools/nixery/prepare-image
parent02455bd0fdf42c698524320c8d43b2bd7ef11c3b (diff)
feat(prepare-image): Ensure /usr/bin/env is always present
This is required by common patterns in shell scripts.

There are some caveats around this. Adding logic to filter whether
coreutils is included in an image would slow down the Nix evaluation,
so the link is currently created even in cases where it doesn't point
to anything.

Fixes #109
Diffstat (limited to 'tools/nixery/prepare-image')
-rw-r--r--tools/nixery/prepare-image/prepare-image.nix12
1 files changed, 12 insertions, 0 deletions
diff --git a/tools/nixery/prepare-image/prepare-image.nix b/tools/nixery/prepare-image/prepare-image.nix
index 316bfbbf27..56f9e7a3bf 100644
--- a/tools/nixery/prepare-image/prepare-image.nix
+++ b/tools/nixery/prepare-image/prepare-image.nix
@@ -132,6 +132,18 @@ let
   contentsEnv = symlinkJoin {
     name = "bulk-layers";
     paths = allContents.contents;
+
+    # Ensure that there is always a /usr/bin/env for shell scripts
+    # that require it.
+    #
+    # Note that images which do not actually contain `coreutils` will
+    # still have this symlink, but it will be dangling.
+    #
+    # TODO(tazjin): Don't link this if coreutils is not included.
+    postBuild = ''
+      mkdir -p $out/usr/bin
+      ln -s ${coreutils}/bin/env $out/usr/bin/env
+    '';
   };
 
   # Image layer that contains the symlink forest created above. This