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で失敗する