hotoolong's blog

プログラムのことやエンジニアリングに関することを記事にしています。

rbenv で Ruby3.0.4のインストールで失敗する

新しいPCにrbenvでRubyのインストールを試みたのですが、エラーになってしまったのですが、 あまり他でみかけない解決方法で解決したのでブログに残しておこうかと思います。

エラーの内容

エラーの内容は以下の通りでopenssl の影響でエラーになってました。

installing bundled gem cache:       /Users/hotoolong/.rbenv/versions/3.0.4/lib/ruby/gems/3.0.0/cache
The Ruby openssl extension was not compiled.
ERROR: Ruby install aborted due to missing extensions
Configure options used:
  --prefix=/Users/hotoolong/.rbenv/versions/3.0.4
  --enable-shared
  --with-readline-dir=/opt/homebrew/opt/readline
  --with-libyaml-dir=/opt/homebrew/opt/libyaml
  --with-gmp-dir=/opt/homebrew/opt/gmp
  --with-openssl-dir=/opt/homebrew/opt/openssl@1.1
  CC=clang
  LDFLAGS=-L/Users/hotoolong/.rbenv/versions/3.0.4/lib
  CPPFLAGS=-I/Users/hotoolong/.rbenv/versions/3.0.4/include

環境変数

RUBY_CONFIGURE_OPTS を設定しているのでうまくいきそうなのですが、エラーになってました。

$ echo $RUBY_CONFIGURE_OPTS
--with-openssl-dir=/opt/homebrew/opt/openssl@1.1

openssl のバージョン

$ openssl version
OpenSSL 1.1.1u  30 May 2023

ちなみにマシンの チップ は Apple M1 Max OS が mac OS Ventura 13.4 M2でも同様のエラーが出ることを確認してるので Mac 以外でも同様の問題になりそうです。

GitHubのrbenv に似たような情報

github.com

調べていくとGitHubに解決できる情報がありそうかなと思ったのですが、 LDFLAGS と CPPFLAGS を設定すると解決したような内容になっていました。 私のケースでは駄目でした。 で以下で対処して解決するのですが、その場合もこれらの環境変数は不要でした。

brewでのインストールされているopenssl

$ brew list | grep openssl
openssl@1.1
openssl@3

openssl@1.1 と openssl@3 両方がインストールされている状態でした。 今回のケースでは駄目かもしれないと思い 一旦 openssl@3 をアンインストールしてみました。

依存関係があるケースもあるので、 brew uninstall --ignore-dependencies openssl@3 でアンインストールします。 私の環境では 3.1.1 が インストールされていましたが、 3系の他のバージョンもインストールされている場合は brew uninstall --force openssl@3 ですべてアンインストールしておくことをお薦めします。

brew でインストールされている opensslが1.1系だけになっていることを確認します。

$ brew list | grep openssl
openssl@1.1

再度 install

この状態で 再度 rbenv install 3.0.4 をするとインストールが完了しました!

ということで インストールしたい openssl 以外のバージョンが影響するケースがあるようなのでアンインストールしてからインストールするとインストールできるということでした。

ちなみに

エラーになる状態で 3.0.4の次のバージョンの3.0.5 をインストールすると エラーは出ずに インストールできました。 手元で 3.1.4 も大丈だったので 3.0.5 以降で何かしらの変更があり今回のエラーが出ている模様です。

過去のバージョン(3.0.0, 3.0.1, 3.0.2, 3.0.3) を確認したところエラー内容は違っていますが、同様にインストールできなかったので、 opensslが 1.1 と 3 をインストールしてしまっていると3.0.4 以前のバージョンはダメそうでした。 (2系は確認してないです。) インストール失敗している場合は opensslの1.1系と3系が入っていないか確認しておくといいかもしれないです。