From a4556a7346524a0be578db98edfe788ab454e000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 8 Sep 2014 10:43:57 -0700 Subject: [PATCH] Verify that TMPDIR can hold executables before installing This detects when `/tmp` has been mounted with "noexec" mode and avoids the cryptic error: ./configure: Permission denied Hopefully the information provided will be enough for the user to know that they have to change TMPDIR to another location. --- bin/ruby-build | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/bin/ruby-build b/bin/ruby-build index c687dfad..51a54164 100755 --- a/bin/ruby-build +++ b/bin/ruby-build @@ -1016,10 +1016,22 @@ else TMP="${TMPDIR%/}" fi -if [ ! -w "$TMP" ] || [ ! -x "$TMP" ]; then +# Check if TMPDIR is accessible and can hold executables. +tmp_executable="${TMP}/ruby-build-test.$$" +noexec="" +if mkdir -p "$TMP" && touch "$tmp_executable" 2>/dev/null; then + cat > "$tmp_executable" <<<"#!$BASH" + chmod +x "$tmp_executable" +else echo "ruby-build: TMPDIR=$TMP is set to a non-accessible location" >&2 exit 1 fi +"$tmp_executable" 2>/dev/null || noexec=1 +rm -f "$tmp_executable" +if [ -n "$noexec" ]; then + echo "ruby-build: TMPDIR=$TMP cannot hold executables (partition possibly mounted with \`noexec\`)" >&2 + exit 1 +fi # Work around warnings building Ruby 2.0 on Clang 2.x: # pass -Wno-error=shorten-64-to-32 if the compiler accepts it.