Skip to content

ruby-install truffleruby-graalvm-33.0.0 is broken #522

@eregon

Description

@eregon

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions