MacにRuby3.0.7を入れようとした時、エラーになってしまった。
❯ rbenv install 3.0.7
/opt/homebrew/bin/ruby-build: line 1158: versions: bad array subscript
==> Downloading openssl-1.1.1w.tar.gz...
-> curl -q -fL -o openssl-1.1.1w.tar.gz https://dqw8nmjcqpjn7.cloudfront.net/cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 9661k 100 9661k 0 0 34.2M 0 --:--:-- --:--:-- --:--:-- 34.1M
==> Installing openssl-1.1.1w...
-> ./config "--prefix=$HOME/.rbenv/versions/3.0.7/openssl" "--openssldir=$HOME/.rbenv/versions/3.0.7/openssl/ssl" --libdir=lib zlib-dynamic no-ssl3 shared
-> make -j 8
-> make install_sw install_ssldirs
==> Installed openssl-1.1.1w to /Users/k_tetsuhiro/.rbenv/versions/3.0.7
==> Downloading ruby-3.0.7.tar.gz...
-> curl -q -fL -o ruby-3.0.7.tar.gz https://cache.ruby-lang.org/pub/ruby/3.0/ruby-3.0.7.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 20.2M 100 20.2M 0 0 11.3M 0 0:00:01 0:00:01 --:--:-- 11.3M
==> Installing ruby-3.0.7...
WARNING: ruby-3.0.7 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.
ruby-build: using libyaml from homebrew
-> ./configure "--prefix=$HOME/.rbenv/versions/3.0.7" "--with-openssl-dir=$HOME/.rbenv/versions/3.0.7/openssl" --enable-shared --with-libyaml-dir=/opt/homebrew/opt/libyaml --with-ext=openssl,psych,+
-> make -j 8
BUILD FAILED (macOS 15.1 on arm64 using ruby-build 20241105)
どうやらbuildにopenssl1.1系が必要らしい。
また、さらにpatchを当てるなどひと工夫しないとbuildができなかった。
そこでこの記事ではどのように解決したかを記載していきます。
openssl 1.1のインストール
brew install openssl@1.1
で本来ならインストールできるのだが、2024/10/24をもってEOLされてしまった。openssl1.1系が入ってない場合はこの記事を参考にインストールする
Ruby 3.0.7をpatchを当てながらインストールする
■ patchを当てるために、まずは下記内容をそのままコピーして、ruby-3.0.x.patchという名前でファイルを作って保存する
ruby-3.0.x.patch
--- ext/bigdecimal/bigdecimal.c.orig 2024-09-25 16:24:50
+++ ext/bigdecimal/bigdecimal.c 2024-09-25 16:25:15
@@ -65,7 +65,7 @@
static ID id_half;
/* MACRO's to guard objects from GC by keeping them in stack */
-#define ENTER(n) volatile VALUE RB_UNUSED_VAR(vStack[n]);int iStack=0
+#define ENTER(n) volatile VALUE vStack[n];int iStack=0
#define PUSH(x) (vStack[iStack++] = (VALUE)(x))
#define SAVE(p) PUSH((p)->obj)
#define GUARD_OBJ(p,y) ((p)=(y), SAVE(p))
■ patchを当てながらインストールする、またLDFLAGSとCPPFLAGSをhomebrewで入れたopenssl@1.1のものを使うように指定する
cat /path/to/ruby-3.0.x.patch | LDFLAGS="-L/opt/homebrew/opt/openssl@1.1/lib" CPPFLAGS="-I/opt/homebrew/opt/openssl@1.1/include" rbenv install --patch 3.0.7
※/path/to/ruby-3.0.x.patch
はあなたが保存したMacのファイルパスを指定する
これでbuildが通りruby3.0.7がインストールされる
参考サイト
https://github.com/rbenv/ruby-build/discussions/2185
を参考にpatchを当てました