💎
Ubuntu 22.10 に rbenv を使わずに Ruby をインストールする
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 を使うのがいいと思う。
Discussion