vuls: init at 0.27.0 (#348530)
[NixPkgs.git] / pkgs / build-support / build-fhsenv-chroot / default.nix
blobb1d9630ae8f91ed81aa7f5fd178c6c35e31854ec
1 { lib, callPackage, runCommandLocal, writeScript, stdenv, coreutils }:
3 let buildFHSEnv = callPackage ./env.nix { }; in
5 args@{ name, version ? null, runScript ? "bash", nativeBuildInputs ? [], extraInstallCommands ? "", meta ? {}, passthru ? {}, ... }:
7 let
8   env = buildFHSEnv (removeAttrs args [ "version" "runScript" "extraInstallCommands" "meta" "passthru" ]);
10   chrootenv = callPackage ./chrootenv {};
12   init = run: writeScript "${name}-init" ''
13     #! ${stdenv.shell}
14     for i in ${env}/* /host/*; do
15       path="/''${i##*/}"
16       [ -e "$path" ] || ${coreutils}/bin/ln -s "$i" "$path"
17     done
19     [ -d "$1" ] && [ -r "$1" ] && cd "$1"
20     shift
22     source /etc/profile
23     exec ${run} "$@"
24   '';
26   versionStr = lib.optionalString (version != null) ("-" + version);
28   nameAndVersion = name + versionStr;
30 in runCommandLocal nameAndVersion {
31   inherit nativeBuildInputs meta;
33   passthru = passthru // {
34     env = runCommandLocal "${name}-shell-env" {
35       shellHook = ''
36         exec ${chrootenv}/bin/chrootenv ${init runScript} "$(pwd)"
37       '';
38     } ''
39       echo >&2 ""
40       echo >&2 "*** User chroot 'env' attributes are intended for interactive nix-shell sessions, not for building! ***"
41       echo >&2 ""
42       exit 1
43     '';
44   };
45 } ''
46   mkdir -p $out/bin
47   cat <<EOF >$out/bin/${name}
48   #! ${stdenv.shell}
49   exec ${chrootenv}/bin/chrootenv ${init runScript} "\$(pwd)" "\$@"
50   EOF
51   chmod +x $out/bin/${name}
52   ${extraInstallCommands}