はじめに
古いRuby(2.3) * 最新のLinux環境 = ビルドエラー
の方程式にハマったので、メモ。2017年6月現在の状況であり、半年過ぎたら確実に状況が変わっているとおもわれる。
動作確認環境
- ArchLinux
- rbenv(+ruby-build)
- Ruby2.3.1
GCC
Rubyをビルドするとき、gcc7.1.1が良く分からないけどあらゆるところでエラーする。素直に6.x系に落とす。
ArchLinuxでは、
ここを参考にしてダウングレードを行う。自分は6.3.1を downgrader
を使って引っ張ってきて、一旦gccとgcc-libsをアンインストール、 pacman -U
コマンドで古いバージョンを選択的にインストールしたあと /etc/pacman.conf
の IgnorePkg
に gcc gcc-libs
を追加した。
OpenSSL
Ruby2.3系はOpenSSLの最新版との問題がつきまとう。ネットにパッチが転がったりしているので、それで解決できそうならそれでも良い。今回はOpenSSL側で解決する方法を見つけたのでそれでやる。
まず、AURに古いOpenSSLのパッケージ openssl-1.0
があるのでそれを落とす。次に
PKG_CONFIG_PATH=/usr/lib/openssl-1.0/pkgconfig
を環境変数にセットしてRubyをコンパイルすれば良い。
(参考にしたstackoverflow) https://stackoverflow.com/questions/44116005/openssl-error-installing-ruby-2-1-x-and-2-3-x-on-archlinux-with-ruby-install-rub
補足:OpenSSL1.0->1.1の非互換はとてもでかいらしく、また殆んどのディストリが1.0を同時にインスコできるのでバックポートしてないという話を伺ったので、開発者サイドが想定している解はこちららしい(常に正しいと言うつもりもないが
補足 Ruby2.2.6
Ruby2.2.6も2.3系と同様にインストールできた。