summary refs log tree commit diff
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2015-08-26 19:37:48 +0300
committerNikolay Amiantov <ab@fmap.me>2015-08-26 19:39:08 +0300
commit47ea8c097c08ee19f8622eae4e9e3acdc99fce3e (patch)
tree0eb061fec67ce083784d31b3820c7682db21f999
parent9635f89fff80cd243462c20a311f7340031f0f59 (diff)
downloadnixpkgs-47ea8c097c08ee19f8622eae4e9e3acdc99fce3e.tar
nixpkgs-47ea8c097c08ee19f8622eae4e9e3acdc99fce3e.tar.gz
nixpkgs-47ea8c097c08ee19f8622eae4e9e3acdc99fce3e.tar.bz2
nixpkgs-47ea8c097c08ee19f8622eae4e9e3acdc99fce3e.tar.lz
nixpkgs-47ea8c097c08ee19f8622eae4e9e3acdc99fce3e.tar.xz
nixpkgs-47ea8c097c08ee19f8622eae4e9e3acdc99fce3e.tar.zst
nixpkgs-47ea8c097c08ee19f8622eae4e9e3acdc99fce3e.zip
buildFHSUserEnv: add .env support
-rw-r--r--pkgs/build-support/build-fhs-userenv/default.nix44
-rw-r--r--pkgs/top-level/all-packages.nix2
2 files changed, 31 insertions, 15 deletions
diff --git a/pkgs/build-support/build-fhs-userenv/default.nix b/pkgs/build-support/build-fhs-userenv/default.nix
index b57b687e20f..9060c073eee 100644
--- a/pkgs/build-support/build-fhs-userenv/default.nix
+++ b/pkgs/build-support/build-fhs-userenv/default.nix
@@ -1,4 +1,4 @@
-{ writeText, writeScriptBin, stdenv, ruby } : { env, runScript } :
+{ runCommand, writeText, writeScriptBin, stdenv, ruby } : { env, runScript ? "bash" } :
 
 let
   name = env.pname;
@@ -9,21 +9,37 @@ let
     ${builtins.readFile ./chroot-user.rb}
   '';
 
-  init = writeText "init" ''
-           # Make /tmp directory
-           mkdir -m 1777 /tmp
+  init = run: writeText "${name}-init" ''
+    # Make /tmp directory
+    mkdir -m 1777 /tmp
 
-           # Expose sockets in /tmp
-           for i in /host-tmp/.*-unix; do
-             ln -s "$i" "/tmp/$(basename "$i")"
-           done
+    # Expose sockets in /tmp
+    for i in /host-tmp/.*-unix; do
+      ln -s "$i" "/tmp/$(basename "$i")"
+    done
 
-           [ -d "$1" ] && [ -r "$1" ] && cd "$1"
-           shift
-           exec "${runScript}" "$@"
-         '';
+    [ -d "$1" ] && [ -r "$1" ] && cd "$1"
+    shift
+    exec ${run} "$@"
+  '';
 
-in writeScriptBin name ''
+in runCommand name {
+  passthru.env =
+    runCommand "${name}-shell-env" {
+      shellHook = ''
+        exec ${chroot-user}/bin/chroot-user ${env} bash -l ${init "bash"} "$(pwd)"
+      '';
+    } ''
+      echo >&2 ""
+      echo >&2 "*** User chroot 'env' attributes are intended for interactive nix-shell sessions, not for building! ***"
+      echo >&2 ""
+      exit 1
+    '';
+} ''
+  mkdir -p $out/bin
+  cat <<EOF >$out/bin/${name}
   #! ${stdenv.shell}
-  exec ${chroot-user}/bin/chroot-user ${env} bash -l ${init} "$(pwd)" "$@"
+  exec ${chroot-user}/bin/chroot-user ${env} bash -l ${init runScript} "\$(pwd)" "\$@"
+  EOF
+  chmod +x $out/bin/${name}
 ''
diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix
index 51d8f2431cc..2350118b810 100644
--- a/pkgs/top-level/all-packages.nix
+++ b/pkgs/top-level/all-packages.nix
@@ -296,7 +296,7 @@ let
 
   buildFHSUserEnv = args: userFHSEnv {
     env = buildFHSEnv (removeAttrs args [ "runScript" ]);
-    runScript = args.runScript;
+    runScript = args.runScript or "bash";
   };
 
   buildMaven = callPackage ../build-support/build-maven.nix {};