diff options
Diffstat (limited to 'pkgs/build-support/build-fhs-userenv/default.nix')
-rw-r--r-- | pkgs/build-support/build-fhs-userenv/default.nix | 44 |
1 files changed, 30 insertions, 14 deletions
diff --git a/pkgs/build-support/build-fhs-userenv/default.nix b/pkgs/build-support/build-fhs-userenv/default.nix index b57b687e20f77..9060c073eee32 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} '' |