Closed kachick closed 2 years ago
https://github.com/rbenv/ruby-build/discussions/2009
ruby-build 側が自動でOpenSSL側にパッチを当てる方向で対応したみたい。凄いなぁとは思ったけど、OpenSSL側が修正パッチリリースしないみたいなので、使えないバージョンが入っているよりはマシな気がする・・・
with-openssl-dir 指定も ruby-build 側で指定できるみたいだし、この機会に asdf-ruby に乗り変えてみようかな
https://github.com/rbenv/ruby-build/wiki
RUBY_CONFIGURE_OPTS=--with-openssl-dir=/opt/local rbenv install
asdf-ruby には rbenv とかで提供されてたっぽい? .default-gems
が使えるのもちょっと便利そう。
しかし asdf-ruby の ruby-build 依存性が上がってなかったので fork して v20220721 に上げてみたけどあかんかった。 OpenSSL を linuxbrew の 3.x 指定すれば 3.1 が入り、 1.1 指定だと 2.7.6 とか install できないという状況が変わらず。 詳細なログ比較まではしていないけど、 指定の仕方次第で ssl っぽいのと default gem の stringio でコケてるっぽいのと2パターン合ってよくわからない・・・
generating x86_64-linux-fake.rb
x86_64-linux-fake.rb updated
./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems -r./x86_64-linux-fake ./tool/rbinstall.rb --make="make" --dest-dir="" --extout=".ext" --mflags="" --make-flags="" --data-mode=0644 --prog-mode=0755 --installed-list .installed.list --mantype="doc" --rdoc-output=".ext/rdoc" --html-output=".ext/html"
/tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require': libssl.so.1.1: cannot open shared object file: No such file or directory - /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/.ext/x86_64-linux/openssl.so (LoadError)
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/.ext/common/openssl.rb:13:in `<top (required)>'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/security.rb:12:in `<top (required)>'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/package.rb:44:in `<top (required)>'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/installer.rb:11:in `<top (required)>'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from /tmp/ruby-build.20220721212310.6896.XKrOxR/ruby-2.7.6/lib/rubygems/core_ext/kernel_require.rb:83:in `require'
from ./tool/rbinstall.rb:713:in `<module:RbInstall>'
from ./tool/rbinstall.rb:649:in `<main>'
installing default gems from ext: /home/kachick/.asdf/installs/ruby-kachick/2.7.6/lib/ruby/gems/2.7.0 (build_info, cache, doc, extensions, gems, specifications)
bigdecimal 2.0.0
date 3.0.3
dbm 1.1.0
etc 1.1.0
fcntl 1.0.0
fiddle 1.0.0
gdbm 2.1.0
io-console 0.5.6
json 2.3.0
openssl 2.1.3
psych 3.1.0
readline-ext 0.1.0
sdbm 1.0.0
stringio 0.1.0
strscan 1.0.3
zlib 1.1.0
installing bundled gems: /home/kachick/.asdf/installs/ruby-kachick/2.7.6/lib/ruby/gems/2.7.0 (build_info, cache, doc, extensions, gems, specifications)
test-unit 3.3.4
xmlrpc 0.3.0
minitest 5.13.0
rake 13.0.1
net-telnet 0.2.0
power_assert 1.1.7
/home/kachick/.asdf/installs/ruby-kachick/2.7.6/bin/ruby: symbol lookup error: /home/kachick/.gem/ruby/3.1.2/gems/stringio-3.0.2/lib/stringio.so: undefined symbol: rb_ext_ractor_safe
https://github.com/ruby/stringio/blob/16847fea32bda8262bd8bc81ad5297de39592c9c/ext/stringio/stringio.c#L1778-L1780 このコード2年前に追加されてるんだけど、2.7 系なのに Ractor 関係の定義が有る・・・? と思ったら、2.7.6 の ruby から 3.1.2 の gems を読みに行ってるの・・・?どうして・・・? 🤷♂️ asdf-ruby の bug かなー
なんかコネコネしてたらうまく行ったっぽい!
$ asdf plugin-add ruby-kachick git@github.com:kachick/asdf-ruby.git
$ RUBY_CONFIGURE_OPTS=--with-openssl-dir=$(brew --prefix openssl@1.1) asdf install ruby-kachick 2.7.6
Downloading ruby-2.7.6.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.6.tar.bz2
Installing ruby-2.7.6...
ruby-build: using readline from homebrew
Installed ruby-2.7.6 to /home/kachick/.asdf/installs/ruby-kachick/2.7.6
zsh 上げ直した状態でうまく行った感だから、 chruby の PATH が残ってたのかも・・・?何もわからないけどなんか良さそう。後は早く本家がこの ruby-build バージョン入れてほしいけど、あんますぐ最新版に上げないというか、一個前のバージョンを stable みたいに扱ってる感なので難しいかも。しばらく fork したやつを使うか・・・
と思ったら ASDF_RUBY_BUILD_VERSION
で ruby-build の ref を指定できるらしい。
ASDF_RUBY_BUILD_VERSION=v20220721 RUBY_CONFIGURE_OPTS=--with-openssl-dir=$(brew --prefix openssl@1.1) asdf install ruby 2.7.6
https://github.com/kachick/times_kachick/issues/174 で少し触り出した Pop! OS が Ubuntu 22.04 ベースだった。 WSL で使ってるイメージが 20系 のままだったなと思って Zenn の記事とか見ながら上げてみた。それ自体はサクッと行ったんだけど、しばらくしてから bundle install 時に https 接続しようとしてか OpenSSL エラーが出るのに気づいた。 まぁ入れ直せば良いんだろぐらいに思ってたけどうまくいかない。 chruby + ruby-install からそろそろ asdf-ruby に乗り換えようかなーと思ったけど、こちらは そもそも build 時にコケる(扱いの違いがよくわかってない)
どうやらつい最近上がった openssl@1.1.1q にバグが合ったのか、結構幅広くコケてるみたい。asdf-ruby も中で ruby-build 使ってた気がするから同じ問題なのかな
Ubuntu 22.04 では openssl@1.1 系列が標準で入らないようなのだけど、全部 brew なりで突っ込んでたから自分の環境では特に問題にならないのかな。でも Ruby 3.0未満はこれだとビルド出来ないのかー。 ruby-install は brew 使ってる時に openssl@1.1 系を固定で使うみたい。
自分は mac も linux も brew に寄せてた上にぽんぽん upgrade してたので踏んだ感。
アクティブな ruby-build 側にはもう動きが出ているのでしばらく待てば解消しそうだけど、ローカルで動かせる Ruby が皆無だと困ってしまう。とりあえず Ruby 3.1+ だけ使えれば後は必要に応じて Docker 起動なりで凌げるかなーと、 ruby-install で openssl3 の path 指定して入れ直してしまった。 openssl3 系まで brew で入れる必要あったのかよくわかってない・・・pathがわかんなくなってるだけでどっかにシステム由来のがある筈?。