summary refs log tree commit diff
path: root/pkgs/build-support/build-fhs-userenv/default.nix
diff options
context:
space:
mode:
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)" "$@"
+''