Bug #18608
open`require': cannot load such file -- ripper (LoadError) after `make distclean`
Description
When compiling multiple instances of Ruby (In our case, two separate prefixes), using the following build code causes the 2nd installed Ruby to throw an error on any ruby/irb call.
Changing the code to delete the extracted ruby-3.1.0
folder and re-extract from the tarball fixes this issue, so I believe it's something in the make distclean
that's causing issues. This was not an issue for ruby 2.6.3 or 2.6.7, just on 3.0+ versions.
Build code:
# Build Ruby
RUN set -e ; \
. /etc/profile.d/ccache.sh ; \
wget -q https://cache.ruby-lang.org/pub/ruby/${RUBY_VERSION%.*}/ruby-${RUBY_VERSION}.tar.gz ; \
tar zxf ruby-${RUBY_VERSION}.tar.gz ; \
rm -f ruby-${RUBY_VERSION}.tar.gz ; \
pushd ruby-${RUBY_VERSION} ; \
type -p gcc ; \
for prefix in /usr/local /opt/vendored_ruby ; do \
./configure --prefix=$prefix --with-compress-debug-sections=no --disable-install-doc ; \
make ; \
make install ; \
make distclean ; \
done ; \
popd ; \
ccache --show-stats ; \
rm -rf ruby-${RUBY_VERSION} /root/.ccache
Error:
<internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require': cannot load such file -- ripper (LoadError)
from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /opt/vendored_ruby/lib/ruby/3.1.0/irb.rb:12:in `<top (required)>'
from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from <internal:/opt/vendored_ruby/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
from /opt/vendored_ruby/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:9:in `<top (required)>'
from /opt/vendored_ruby/bin/irb:25:in `load'
from /opt/vendored_ruby/bin/irb:25:in `<main>'
[root@cc75157e1b69 /]# /usr/local/bin/irb
irb(main):001:0>
This error pops up on any reference to ruby or irb, including the base commands.
Steps to reproduce:
- Compile/make/make install Ruby 3.0+ with the 1st prefix
- Run
make distclean
- Compile/make/make install Ruby 3.0+ with the 2nd prefix
- run the
irb
andruby
commands in both paths.
Updated by xtkoba (Tee KOBAYASHI) over 2 years ago
I guess this is because either bison
is not installed in the build environment or the environment variable YACC
is not correctly set. Note that make distclean
among other things removes ext/ripper/ripper.c
which requires YACC
(typically bison
) to re-generate.
FWIW, in my environment in-place make distclean
followed by ./configure && make
results in another build failure due to Bison version mismatch with pre-generated parse.[ch]
, but I suppose that is a separate issue (a workaround is to rm -f parse.[ch]
).