Big Sur にアップグレード後、rbenvでrubyのバージョンをあげようとしたらハマった話です。
根本原因は特定できていませんが、これで出来たという結果だけ書いておこうと思います。同じような症状で何日も悩む人が一人でも減りますよう・・・🙏
やったことと現象
rbenv install -v 2.7.3
(3.0系でも同じでしたが) したら次のようなエラーがログに出力されていました。システムによって強制終了されている?っぽい。
-e:4:in `write': Interrupted system call @ rb_sysopen - failure.failed (Errno::EINTR)
解決した方法と原因かもしれないこと
方法その1
検索してみると、アンチウィルスソフトを無効化すると解消した、といったコメントがチラホラありました。私の環境では無効化が出来ないため試してはいませんが、まずはそれで解消するか確認してみると良いかもしれません。
方法その2
https://github.com/rbenv/ruby-build/issues/1706#issuecomment-758235089
↑このissueを社内の賢者から教えていただき、私はこれで解決しました。(圧倒的感謝)
ビルドオプションにopensslのディレクトリなどを指定していますが、おそらくそれだけでは解決しなくて(何度か試した時に解決しなかったので)、肝は MAKE_OPTS=-j1
の部分かなと思われます。思われますが確証はありません。
$ MAKE_OPTS=-j1 RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix openssl) --with-readline-dir=$(brew --prefix readline) --with-libyaml-dir=$(brew --prefix libyaml)" ruby-build --verbose 2.7.3 ~/.rbenv/versions/2.7.3/
$ rbenv rehash
MAKE_OPTS=-j1
でmakeの並列数を1に限定するようです。これが必要だったように思われます。思われるだけで確証は(以下略
Big Surでアンチウィルスソフトが入っている環境では、makeのプロセス数と何か関係があるのかも?といった推測があがっていましたが、原因はまったく分かりません。分かりませんが、とにかくこれで解決しました。(それしか言えない)
ちなみに sudo rbenv install ...
をしたらインストール自体は成功したのですが、rootによるインストールは様々な弊害をもたらし、railsの起動時にもっと困ったことになった・・・ということだけ書き残しておきます。(私と同じ轍は踏みませぬよう🙏)