Ruby 3.1.3 / 3.0.5 / 2.7.7 が出たので普段使いの Ubuntu 22.10 にインストールした。 rbenv とかを使えばいいんだけど、自分は普段から rbenv は使ってないので。
Ruby 3.1.3
特別なことは何もしていない。
% tar xf ruby-3.1.3.tar.xz % cd ruby-3.1.3 % ./configure --prefix=$HOME/ruby31 --with-ext=openssl,zlib,psych,dbm,gdbm,+ % make -j % make install
Ruby 3.0.5
OpenSSL 3.0 に対応してないので openssl ライブラリはコンパイルできない。
% tar xf ruby-3.0.5.tar.xz % cd ruby-3.0.5 % ./configure --prefix=$HOME/ruby30 --with-ext=openssl,zlib,psych,dbm,gdbm,+ % make -j ... *** Following extensions are not compiled: openssl: Could not be configured. It will not be installed. /tmp/ruby-3.0.5/ext/openssl/extconf.rb:113: OpenSSL >= 1.0.1, < 3.0.0 or LibreSSL >= 2.5.0 is required Check ext/openssl/mkmf.log for more details. *** Fix the problems, then remove these directories and try again if you want. make[1]: *** [exts.mk:2234: note] エラー 1 make[1]: ディレクトリ '/tmp/ruby-3.0.5' から出ます make: *** [uncommon.mk:301: build-ext] エラー 2
一旦 --with-ext
から openssl を外してインストールする。
% ./configure --prefix=$HOME/ruby30 --with-ext=zlib,psych,dbm,gdbm,+ % make -j % make install
最新の openssl gem は OpenSSL 3.0 に対応しているので、それをインストールする。
ただし https://rubygems.org に接続するのに openssl ライブラリが必要なので gem install openssl
ではインストールできない。
% ~/ruby30/bin/gem install openssl ERROR: While executing gem ... (Gem::Exception) OpenSSL is not available. Install OpenSSL and rebuild Ruby (preferred) or use non-HTTPS sources
なので wget や curl で openssl gem をダウンロードする。
% wget -q https://rubygems.org/downloads/openssl-3.0.1.gem
% curl -s https://rubygems.org/downloads/openssl-3.0.1.gem --output openssl-3.0.1.gem
その後ファイルを指定して gem install
すればOK。
% ~/ruby30/bin/gem install openssl-3.0.1.gem Building native extensions. This could take a while... Successfully installed openssl-3.0.1 Parsing documentation for openssl-3.0.1 Installing ri documentation for openssl-3.0.1 Done installing documentation for openssl after 0 seconds 1 gem installed
Ruby 2.7.7
Ruby 3.0 と同じように openssl をビルドしないようにしてインストールしてみると make install
でエラーになる。
% tar xf ruby-2.7.7.tar.xz % cd ruby-2.7.7 % ./configure --prefix=$HOME/ruby27 --with-ext=zlib,psych,dbm,gdbm,+ % make -j % make install ... /tmp/ruby-2.7.7/lib/rubygems/core_ext/kernel_require.rb:83:in `require': cannot load such file -- openssl (LoadError) make: *** [uncommon.mk:373: do-install-all] エラー 1
ちょっと強引かもしれないけど、ビルド前に ext/openssl
を openssl gem に置き換えたらできた。
ext/digest
が openssl に依存してるみたいなので一緒に置き換えておく。
% curl -s https://rubygems.org/downloads/openssl-3.0.1.gem --output openssl-3.0.1.gem % curl -s https://rubygems.org/downloads/digest-3.1.0.gem --output digest-3.1.0.gem % gem unpack openssl-3.0.1.gem % gem unpack digest-3.1.0.gem % tar xf ruby-2.7.7.tar.xz % cd ruby-2.7.7 % rm -rf ext/openssl ext/digest % rsync -a ../openssl-3.0.1/ext/openssl ./ext/ % rsync -a ../openssl-3.0.1/lib ./ext/openssl/ % rsync -a ../digest-3.1.0/ext/digest ./ext/ % rsync -a ../digest-3.1.0/lib ./ext/digest/ % ./configure --prefix=$HOME/ruby27 --with-ext=openssl,zlib,psych,dbm,gdbm,+ % make -j % make install
ちなみに rbenv は openssl-1.1.1s をインストールしてそれを使ってビルドしてるっぽい。 まあ普通は rbenv を使うのがいいと思う。