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
irbandrubycommands in both paths.
Updated by xtkoba (Tee KOBAYASHI) over 3 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]).