summary refs log tree commit diff
path: root/pkgs/build-support/build-fhs-userenv/default.nix
diff options
context:
space:
mode:
authorNikolay Amiantov <ab@fmap.me>2015-04-22 15:50:49 +0300
committerNikolay Amiantov <ab@fmap.me>2015-04-22 17:50:41 +0300
commit19c497050e4fd2081e8bbbc8c125a66b3e2cb9aa (patch)
tree6c95e7f24ff8846e2a1e6b0724d87de474848203 /pkgs/build-support/build-fhs-userenv/default.nix
parent508ef7e629488376e75803fc757115cbfc0992fc (diff)
downloadnixpkgs-19c497050e4fd2081e8bbbc8c125a66b3e2cb9aa.tar
nixpkgs-19c497050e4fd2081e8bbbc8c125a66b3e2cb9aa.tar.gz
nixpkgs-19c497050e4fd2081e8bbbc8c125a66b3e2cb9aa.tar.bz2
nixpkgs-19c497050e4fd2081e8bbbc8c125a66b3e2cb9aa.tar.lz
nixpkgs-19c497050e4fd2081e8bbbc8c125a66b3e2cb9aa.tar.xz
nixpkgs-19c497050e4fd2081e8bbbc8c125a66b3e2cb9aa.tar.zst
nixpkgs-19c497050e4fd2081e8bbbc8c125a66b3e2cb9aa.zip
fhs-userenv: refactor and try to chdir to the current directory
runScript now expects a filename instead of a Bash snippet; thus, "exec" should be
omitted.
Diffstat (limited to 'pkgs/build-support/build-fhs-userenv/default.nix')
-rw-r--r--pkgs/build-support/build-fhs-userenv/default.nix44
1 files changed, 14 insertions, 30 deletions
diff --git a/pkgs/build-support/build-fhs-userenv/default.nix b/pkgs/build-support/build-fhs-userenv/default.nix
index 67484857ee1..546345c7e6c 100644
--- a/pkgs/build-support/build-fhs-userenv/default.nix
+++ b/pkgs/build-support/build-fhs-userenv/default.nix
@@ -1,37 +1,21 @@
-{ writeTextFile, stdenv, ruby } : { env, runScript } :
+{ writeText, writeScriptBin, stdenv, ruby } : { env, runScript } :
 
 let
   name = env.pname;
 
   # Sandboxing script
-  chroot-user = writeTextFile {
-    name = "chroot-user";
-    executable = true;
-    destination = "/bin/chroot-user";
-    text = ''
-      #! ${ruby}/bin/ruby
-      ${builtins.readFile ./chroot-user.rb}
-    '';
-  };
+  chroot-user = writeScriptBin "chroot-user" ''
+    #! ${ruby}/bin/ruby
+    ${builtins.readFile ./chroot-user.rb}
+  '';
 
-in stdenv.mkDerivation {
-  name = "${name}-userenv";
-  buildInputs = [ ruby ];
-  preferLocalBuild = true;
-  buildCommand = ''
-    mkdir -p $out/bin
-    cat > $out/bin/${name} <<EOF
-    #! ${stdenv.shell}
-    exec ${chroot-user}/bin/chroot-user ${env} $out/libexec/run "\$@"
-    EOF
-    chmod +x $out/bin/${name}
+  init = writeText "init" ''
+           [ -d "$1" ] && [ -r "$1" ] && cd "$1"
+           shift
+           exec "${runScript}" "$@"
+         '';
 
-    mkdir -p $out/libexec
-    cat > $out/libexec/run <<EOF
-    #! ${stdenv.shell}
-    source /etc/profile
-    ${runScript} "\$@"
-    EOF
-    chmod +x $out/libexec/run
-  '';
-}
+in writeScriptBin name ''
+  #! ${stdenv.shell}
+  exec ${chroot-user}/bin/chroot-user ${env} bash -l ${init} "$(pwd)" "$@"
+''