Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

2022-07-15 - [非推奨] openssl 1.1.1q で CRuby が build 出来無いので、次の 1.1系リリースが出るまで openssl3 + Ruby 3.1 only で凌ぐ => ruby-build が対応してくれたので asdf-ruby に乗り換えた #180

Closed
kachick opened this issue Jul 15, 2022 · 2 comments

Comments

@kachick
Copy link
Owner

kachick commented Jul 15, 2022

#174 で少し触り出した Pop! OS が Ubuntu 22.04 ベースだった。 WSL で使ってるイメージが 20系 のままだったなと思って Zenn の記事とか見ながら上げてみた。それ自体はサクッと行ったんだけど、しばらくしてから bundle install 時に https 接続しようとしてか OpenSSL エラーが出るのに気づいた。
まぁ入れ直せば良いんだろぐらいに思ってたけどうまくいかない。 chruby + ruby-install からそろそろ asdf-ruby に乗り換えようかなーと思ったけど、こちらは そもそも build 時にコケる(扱いの違いがよくわかってない)

どうやらつい最近上がった [email protected] にバグが合ったのか、結構幅広くコケてるみたい。asdf-ruby も中で ruby-build 使ってた気がするから同じ問題なのかな

Ubuntu 22.04 では [email protected] 系列が標準で入らないようなのだけど、全部 brew なりで突っ込んでたから自分の環境では特に問題にならないのかな。でも Ruby 3.0未満はこれだとビルド出来ないのかー。
ruby-install は brew 使ってる時に [email protected] 系を固定で使うみたい。

自分は mac も linux も brew に寄せてた上にぽんぽん upgrade してたので踏んだ感。

アクティブな ruby-build 側にはもう動きが出ているのでしばらく待てば解消しそうだけど、ローカルで動かせる Ruby が皆無だと困ってしまう。とりあえず Ruby 3.1+ だけ使えれば後は必要に応じて Docker 起動なりで凌げるかなーと、 ruby-install で openssl3 の path 指定して入れ直してしまった。
openssl3 系まで brew で入れる必要あったのかよくわかってない・・・pathがわかんなくなってるだけでどっかにシステム由来のがある筈?。

bundle install

Could not load OpenSSL.
You must recompile Ruby with OpenSSL support or change the sources in your Gemfile from 'https' to 'http'. Instructions
for compiling with OpenSSL using RVM are available at https://rvm.io/packages/openssl.openssl version
OpenSSL 1.1.1q  5 Jul 2022la $(which openssl)
lrwxrwxrwx 1 kachick kachick 40 Jul  9 13:18 /home/linuxbrew/.linuxbrew/bin/openssl -> ../Cellar/[email protected]/1.1.1q/bin/opensslbrew install openssl@3
==> Summary
🍺  /home/linuxbrew/.linuxbrew/Cellar/openssl@3/3.0.5: 6,775 files, 36.2MB
==> Running `brew cleanup openssl@3`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).brew --prefix openssl@3
/home/linuxbrew/.linuxbrew/opt/openssl@3ruby-install ruby 3.1.2 -- --with-openssl-dir=$(brew --prefix openssl@3)
>>> Successfully installed ruby 3.1.2 into /home/kachick/.rubies/ruby-3.1.2bundle install
Fetching gem metadata from https://rubygems.org/...........
Resolving dependencies...
@kachick
Copy link
Owner Author

kachick commented Jul 21, 2022

rbenv/ruby-build#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 が使えるのもちょっと便利そう。

@kachick
Copy link
Owner Author

kachick commented Jul 21, 2022

しかし 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 [email protected]:kachick/asdf-ruby.git
$ RUBY_CONFIGURE_OPTS=--with-openssl-dir=$(brew --prefix [email protected]) 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 [email protected]) asdf install ruby 2.7.6

kachick added a commit to kachick/dotfiles that referenced this issue Jul 22, 2022
kachick added a commit to kachick/dotfiles that referenced this issue Jul 22, 2022
* Standardize language switcher with asdf

I still like chruby & ruby-install 🙏

kachick/times_kachick#180

* Set .default-gems

* Improve link
@kachick kachick changed the title 2022-07-15 - [非推奨] openssl 1.1.1q で CRuby が build 出来無いので、次の 1.1系リリースが出るまで openssl3 + Ruby 3.1 only で凌ぐ 2022-07-15 - [非推奨] openssl 1.1.1q で CRuby が build 出来無いので、次の 1.1系リリースが出るまで openssl3 + Ruby 3.1 only で凌ぐ => ruby-build が対応してくれたので asdf-ruby に乗り換えた Jul 23, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant