Currently, a self-extracting archive created by makeself will fail to
properly execute on NixOS because the boilerplate Bash code it uses to
clean up the temporary directory it extracted its contents into
assumes that the `rm` command is installed at `/bin/rm`, which is not
the case on NixOS.

This commit, a backport of a pull request I made to the upstream
repository at megastep/makeself#142, fixes the issue by causing the
boilerplate code to call `rm` without specifying an absolute path,
which allows the version of `rm` from one's current Nix environment to
be used instead.
This commit is contained in:
Keshav Kini 2018-08-17 16:59:23 -07:00
parent fe5d78a1f2
commit eb84586cad
2 changed files with 47 additions and 1 deletions

View File

@ -0,0 +1,43 @@
From 81cf57e4653360af7f1718391e424fa05d8ea000 Mon Sep 17 00:00:00 2001
From: Keshav Kini <keshav.kini@gmail.com>
Date: Thu, 9 Aug 2018 18:36:15 -0700
Subject: [PATCH] Use `rm` from PATH
On NixOS (a Linux distribution), there is no `/bin/rm`, but an `rm`
command will generally be available in one's path when running shell
scripts. Here, I change a couple of invocations of `/bin/rm` into
invocations of `rm` to deal with this issue.
Since `rm` is already called elsewhere in the script without an
absolute path, I assume this change will not cause any
regressions. Still, I've tested this on a CentOS machine and a NixOS
machine, though not other platforms.
---
makeself-header.sh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/makeself-header.sh b/makeself-header.sh
index 4d2c005..2babf34 100755
--- a/makeself-header.sh
+++ b/makeself-header.sh
@@ -515,7 +515,7 @@ if test x"\$quiet" = xn; then
fi
res=3
if test x"\$keep" = xn; then
- trap 'echo Signal caught, cleaning up >&2; cd \$TMPROOT; /bin/rm -rf "\$tmpdir"; eval \$finish; exit 15' 1 2 3 15
+ trap 'echo Signal caught, cleaning up >&2; cd \$TMPROOT; rm -rf "\$tmpdir"; eval \$finish; exit 15' 1 2 3 15
fi
if test x"\$nodiskspace" = xn; then
@@ -581,7 +581,7 @@ if test x"\$script" != x; then
fi
if test x"\$keep" = xn; then
cd "\$TMPROOT"
- /bin/rm -rf "\$tmpdir"
+ rm -rf "\$tmpdir"
fi
eval \$finish; exit \$res
EOF
--
2.14.1

View File

@ -11,7 +11,10 @@ stdenv.mkDerivation rec {
sha256 = "1lw3gx1zpzp2wmzrw5v7k31vfsrdzadqha9ni309fp07g8inrr9n";
};
patchPhase = ''
# backported from https://github.com/megastep/makeself/commit/77156e28ff21231c400423facc7049d9c60fd1bd
patches = [ ./Use-rm-from-PATH.patch ];
postPatch = ''
sed -e "s|^HEADER=.*|HEADER=$out/share/${name}/makeself-header.sh|" -i makeself.sh
'';