-
Notifications
You must be signed in to change notification settings - Fork 259
Description
Steps To Reproduce
$ bin/ruby-install truffleruby-graalvm-33.0.0 --prefix /tmp/truffleruby
>>> Installing truffleruby-graalvm 33.0.0 into /tmp/truffleruby ...
>>> Installing dependencies for truffleruby-graalvm 33.0.0 ...
Updating and loading repositories:
Repositories loaded.
Package "make-1:4.4.1-11.fc43.x86_64" is already installed.
Package "gcc-15.2.1-7.fc43.x86_64" is already installed.
Package "zlib-ng-compat-devel-2.3.3-2.fc43.x86_64" is already installed.
Package "ca-certificates-2025.2.80_v9.0.304-1.2.fc43.noarch" is already installed.
Nothing to do.
>>> Downloading https://github.com/truffleruby/truffleruby/releases/download/graal-33.0.0/truffleruby-jvm-33.0.0-linux-amd64.tar.gz into /home/eregon/src ...
HTTP response 302 ...[===========================================================================>] 152.96M 21.96MB/silename%3Dtruffleruby-jvm-3[Files: 1 Bytes: 152.96M [19.22MB/s] Redirects: 1 Todo: 0 Errors: 0 ]
>>> Verifying truffleruby-jvm-33.0.0-linux-amd64.tar.gz ...
>>> Extracting truffleruby-jvm-33.0.0-linux-amd64.tar.gz to /home/eregon/src/truffleruby-33.0.0-linux-amd64 ...
bin/ruby-install: line 53: cd: /home/eregon/src/truffleruby-33.0.0-linux-amd64: No such file or directory
!!! ruby build directory is missing: /home/eregon/src/truffleruby-33.0.0-linux-amd64
zsh: exit 255
Indeed there is no src/truffleruby-33.0.0-linux-amd64, instead there is:
$ ls -l ~/src
...
drwxr-xr-x. 9 eregon eregon 4096 Mar 26 14:20 truffleruby-jvm-33.0.0-linux-amd64
-rw-r--r--. 1 eregon eregon 160400569 Jan 9 12:46 truffleruby-jvm-33.0.0-linux-amd64.tar.gz
The issue here is the name of the folder inside the archive changed, from truffleruby-graalvm 25.0.0+ to include jvm and before it did not:
for f in truffleruby-jvm-*-macos-aarch64.tar.gz; do echo $f; tar tf $f | head -1; echo; done
truffleruby-jvm-23.1.0-macos-aarch64.tar.gz
truffleruby-23.1.0-macos-aarch64/native-image.properties
zsh: broken pipe tar tf $f |
zsh: done head -1
truffleruby-jvm-24.2.2-macos-aarch64.tar.gz
truffleruby-24.2.2-macos-aarch64/LICENSE_TRUFFLERUBY.txt
zsh: broken pipe tar tf $f |
zsh: done head -1
truffleruby-jvm-25.0.0-macos-aarch64.tar.gz
truffleruby-jvm-25.0.0-macos-aarch64/native-image.properties
zsh: broken pipe tar tf $f |
zsh: done head -1
truffleruby-jvm-33.0.1-macos-aarch64.tar.gz
truffleruby-jvm-33.0.1-macos-aarch64/native-image.properties
zsh: broken pipe tar tf $f |
zsh: done head -1
This gets worse because it would accidentally "work wrongly/not fail" if one does:
$ bin/ruby-install truffleruby-33.0.0 --prefix /tmp/truffleruby-native
$ bin/ruby-install truffleruby-graalvm-33.0.0 --prefix /tmp/truffleruby
SUCCESS! BUT:
$ /tmp/truffleruby/bin/ruby -v
truffleruby 33.0.0 (2026-01-09), like ruby 3.3.7, Oracle GraalVM Native [x86_64-linux]
UH-OH that's wrong, should be Oracle GraalVM JVM
because the same folder truffleruby-33.0.0-linux-amd64 gets reused.
Other Ruby installers do not have this problem.
The fundamental issue here is ruby-install does not take much precautions that the archive extracts as the expected name, and requires hardcoding the name of the folder inside the archive which is (as proven by this issue) brittle.
I will make a PR to ensure ruby-install always extract to the proper place without conflicts and no longer needs hardcoded folder names inside the archive.
Found by @nirvdrum