Skip to content

Instantly share code, notes, and snippets.

@wtnabe
Last active February 21, 2024 23:22
Show Gist options
  • Save wtnabe/eeb77935e8fd4363d10919a9ac55cf38 to your computer and use it in GitHub Desktop.
Save wtnabe/eeb77935e8fd4363d10919a9ac55cf38 to your computer and use it in GitHub Desktop.
特定の Intel Mac + macOS Ventura で rbenv + ruby-build では Ruby が install できない、できたとしてもまともに動かない問題

環境

  • MacBook Pro 16" ( Intel Core i9 )
  • macOS Ventura 13.4.1 ( Darwin Kernel Version 22.5.0 )
  • Homebrew 4.1.3
  • Apple clang version 14.0.3 (clang-1403.0.22.14.1)
  • rbenv 1.2.0
  • ruby-build 20230717
  • ruby-install 0.9.0
  • llvm 15 && 16

※ MacBook Air 2019 ( Intel Core i5 ) では同様の現象は起きない。同マシンも clang 15 + llvm 17 になったら問題なく動作するようになった。

結論

  • chruby + ruby-install で ruby 3.0 以降なら戦える
  • ruby-build でも compile までは通せるようになるが、なぜか所定の場所に欲しいファイルが存在せずに install に失敗という問題については原因に思い当たるフシがなく、断念
  • 順番的に ruby-build ( llvm 16 ) -> ruby-build ( llvm 15 ) -> ruby-install ( llvm 15 ) で試したため、ruby-install ( llvm 16 ) の試行はナシ

Ruby

llvm 16 + rbenv + ruby-build

  • NG 2.7.x
  • NG 3.0.x
  • NG 3.1.x
  • NG 3.2.x

llvm 15 + rbenv + ruby-build

configure のログを読むと明らかに llvm の辺りで必要なものが足りてなさそうなログが流れるので、試しに llvm 15 を入れて link し直し。configure は option っを与えないとうまく動かない(他の Intel Mac の環境では特に与えなくても動作する)。Homebrew 版も git clone 版も試したが動作に根本的な違いは見られない。なぜか compile できたはずのファイルが意図した場所に存在しないというエラーになる。

  • NG 3.1.4
    • RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" rbenv install --verbose -k 3.1.4
ld: can't open output file for writing: ../../../../../.bundle/extensions/x86_64-darwin-22/3.1.0/rbs-2.7.0/rbs_extension.bundle, errno=2
ld: can't open output file for writing: ../../../../../.bundle/extensions/x86_64-darwin-22/3.1.0/debug-1.6.3/debug/debug.bundle, errno=2
clang-15clang-15: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: make[2]: *** [../../../../../.bundle/extensions/x86_64-darwin-22/3.1.0/rbs-2.7.0/rbs_extension.bundle] Error 1
*** [../../../../../.bundle/extensions/x86_64-darwin-22/3.1.0/debug-1.6.3/debug/debug.bundle] Error 1
make[1]: *** [.bundle/gems/debug-1.6.3/ext/debug/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make[1]: *** [.bundle/gems/rbs-2.7.0/ext/rbs_extension/all] Error 2
  • OK 3.2.2
    • RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl@3)" rbenv install --verbose -k 3.2.2

ruby-build

  • OK 3.1.4
    • ただしsourceの中で手動make; make installした場合。/usr/local に直接installされ、切り替えはできない。

llvm 15 + ruby-install + chruby

恐らく openssl のパスは全バージョンで明示してあげないとそれが理由で死ぬっぽい

  • NG 2.7.8
    • checking size of size_t... configure: error: in `~/src/ruby-2.7.8': configure: error: cannot compute sizeof (size_t)
  • OK 3.0.6
    • ruby-install 3.0.6 -- --enable-shared --with-openssl-dir=$(brew --prefix [email protected])
  • OK 3.1.4
    • ruby-install 3.1.4 -- --enable-shared --with-openssl-dir=$(brew --prefix openssl@3)
  • OK 3.2.2
    • ruby-install 3.2.2 -- --enable-shared --with-openssl-dir=$(brew --prefix openssl@3)

Bundler

rbenv で install した Ruby について、たまたま Ruby が動いても bundler は以下のように死ぬ場合がある

Could not reach host index.rubygems.org. Check your network connection and try again.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment