macにてrbenv installでOpenSSLのエラーが発生する

2022年7月11日現在、macで rbenv install しようとするとOpenSSLのインストールでエラーが発生してしまいます。

発生している事象

rbenv install すると、まずはruby-buildがOpenSSLをインストールしようとします。
しかし、2022年7月11日時点でOpenSSL 1.1系最新の1.1.1qをmacでビルドしようとするとエラーが発生してしまいます。
この問題はすでにOpenSSLのissueが作られています。
test/v3ext.c fails to compile on MacOS11 arm64
なので待っていれば(1.1.1rがリリースされたら)解決します。

待っていられない人向け解決方法

rbenv install する際に環境変数 RUBY_CONFIGURE_OPTS="--with-openssl-dir=/path/to/openssl" を設定すれば別途インストールしたOpenSSLを使用できます。
このとき使用するOpenSSLはHomebrewで入れたものや、以前に rbenv install した際にインストールされたものを使用しても大丈夫です。
今回は新規インストールしたものを使用します。

OpenSSLを独自にビルドし、rbenv installする

私の環境は以下のとおりです。参考にする場合は適宜読み替えてください。

  • Intel mac
  • rbenvはHomebrew経由で導入
    $ rbenv root
    /Users/fwhy/.rbenv
    
  • 導入しようとしているRubyのバージョンは3.1.2
  • OpenSSLのバージョンは1.1.1系のstableを使用
  • OpenSSLのインストール先は本来 rbenv install が成功していれば配置されていたであろう場所

OpenSSLのビルド

$ curl -OL https://github.com/openssl/openssl/article/refs/heads/OpenSSL_1_1_1-stable.zip
$ unzip -qq OpenSSL_1_1_1-stable.zip
$ cd openssl-OpenSSL_1_1_1-stable
$ ./config \
    '--prefix=/Users/fwhy/.rbenv/versions/3.1.2/openssl' \
    '--openssldir=/Users/fwhy/.rbenv/versions/3.1.2/openssl/ssl' \
    'zlib-dynamic' 'no-ssl3' 'shared'
$ /usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
    "-oMakefile" include/crypto/bn_conf.h.in > include/crypto/bn_conf.h
$ /usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
    "-oMakefile" include/crypto/dso_conf.h.in > include/crypto/dso_conf.h
$ /usr/bin/perl "-I." -Mconfigdata "util/dofile.pl" \
    "-oMakefile" include/openssl/opensslconf.h.in > include/openssl/opensslconf.h
$ make depend && make _all
$ make install

この時点で /Users/fwhy/.rbenv/versions/3.1.2/openssl というディレクトリが作成されているはずです。

rbenv install

$ RUBY_CONFIGURE_OPTS="--with-openssl-dir=/Users/fwhy/.rbenv/versions/3.1.2/openssl" rbenv install 3.1.2

これでRuby 3.1.2が入るはずです。

参考

rbenv installがopensslで失敗する