diff --git a/pkgs/build-support/build-fhs-userenv/default.nix b/pkgs/build-support/build-fhs-userenv/default.nix index b57b687e20f7..9060c073eee3 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 <$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 51d8f2431cc9..2350118b810a 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 {};