MacPorts+rbenvを使用してRubyをビルドする方法【2022年初頭編】

S 20220116 211604

最近MacPorts環境でrbenvを使用してRubyをビルドできなくなっています。

これまでは、以下のコマンドラインで問題なくビルドできていたのですが、急に失敗するようになったのです。

RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/local --with-readline-dir=/opt/local" rbenv install 2.5.7

調べて見るとopensslのビルドで失敗しており、これは、MacPortsの環境がopenssl3が標準になったのに対し、Rubyがopenssl3に対応していないからのようです。

S 20220116 210951

ビルドに失敗した画面を良く確認すると「The Ruby openssl extension was not compiled」と表示されていることがわかります。

以前は、ruby-buildがopensslを独自にインストールする機能を使用してお茶を濁してしまいましたが、これだと問題が発生したので(詳細は記録し忘れましたがpassengerのpassenger-install-apache2-moduleだったような…)、従来通りシステムのopensslライブラリを使用してRubyをビルドする方法を探してみました。

openssl11を指定すればビルド可能

結論から書くとMacPortsの場合、デフォルトのopenssl(openssl3)と同時に、openssl11をインストールし、こちらを使ってビルドすることでエラーを回避できます。

ビルドが成功するコマンドは以下の通りです。

PKG_CONFIG_PATH=/opt/local/libexec/openssl11/lib/pkgconfig RUBY_CONFIGURE_OPTS="--with-openssl-dir=/opt/local/libexec/openssl11 --with-readline-dir=/opt/local" rbenv install 3.0.3
S 20220116 211535

RUBY_CONFIGURE_OPTSで「–with-openssl-dir=/opt/local/libexec/openssl11」を指定するだけでは不十分で、PKG_CONFIG_PATHで「/opt/local/libexec/openssl11/lib/pkgconfig」を指定する必要があります。

PKG_CONFIG_PATHは「pkg-config」というツールがパッケージの場所を探すための環境変数で、これを指定することでRubyのビルド時にシステム標準ではないopenssl11を使うことができるようになります。

いずれRubyがopenssl3に標準対応すればこのような問題は解決されるはずですが、それまではこの方法で対応するしかないかもしれません。