以前、古い Ruby を AppleSillicon な環境でどうするか、みたいなアレ第二弾。
第一弾の時は「ふーんやるじゃん!」みたいな気持ちだったのだけど、いざやってみるとちょっとコツが必要だった。
これまでの流れ
素朴にやる
2.5 系が欲しかったので 2.5 を例にする。 (無理やり 2.5.x とか 2.6.x をインストールしていたけど、なんか動きが怪しかったので)
❯ git clone https://github.com/hsbt/old-ruby-build.git ❯ cd old-ruby-build ❯ ruby ./build.rb 2.5 ~/.rbenv/versions ... snip ... (ワイの環境では homebrew の update と bison のインストールが走った) ==> Running `brew cleanup bison`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
これで 2.5.9 が追加されているはず。
❯ rbenv versions * system 2.5.1 2.6.3 2.6.5 2.6.10 2.7.6 2.7.7 3.1.0 3.1.2 3.1.4
無い。 ナンデ!?
ここで一旦ビルド先を見てみましょう。
❯ gls ~/.rbenv/versions total 0 drwxr-xr-x 3 donbulinux staff 96 4 3 17:12 . drwxr-xr-x 3 donbulinux staff 96 4 3 17:12 .. drwxr-xr-x 6 donbulinux staff 192 4 3 17:12 2.5.9
ああ〜ん? 他バージョンもないやんけ、で気付いたんだけど、anyenv を利用しているのでこのパスだと認識しねえわ!
僕の環境では正しくは以下のパスに放り込む必要がある。
❯ gls ~/.anyenv/envs/rbenv/versions total 0 drwxr-xr-x 11 donbulinux staff 352 6 27 2023 . drwxr-xr-x 21 donbulinux staff 672 1 26 19:52 .. drwxr-xr-x 7 donbulinux staff 224 12 9 2022 2.5.1 drwxr-xr-x 7 donbulinux staff 224 2 26 2023 2.6.10 drwxr-xr-x 7 donbulinux staff 224 2 26 2023 2.6.3 drwxr-xr-x 7 donbulinux staff 224 1 5 2023 2.6.5 drwxr-xr-x 7 donbulinux staff 224 12 9 2022 2.7.6 drwxr-xr-x 7 donbulinux staff 224 2 14 2023 2.7.7 drwxr-xr-x 7 donbulinux staff 224 12 23 2022 3.1.0 drwxr-xr-x 7 donbulinux staff 224 2 2 2023 3.1.2 drwxr-xr-x 7 donbulinux staff 224 6 27 2023 3.1.4
anyenv 環境下でやる
というわけでやり直す。 同じ様に ~/.rbenv/versions
にビルドしちゃった人、そちらは削除しておいてください。
❯ ruby ./build.rb 2.5 ~/.anyenv/envs/rbenv/versions ==> Downloading https://formulae.brew.sh/api/formula.jws.json ###################################################################################################################################################### 100.0% ==> Downloading https://formulae.brew.sh/api/cask.jws.json Warning: rbenv/tap/openssl@1.0 1.0.2u is already installed and up-to-date. To reinstall 1.0.2u, run: brew reinstall openssl@1.0 Warning: openssl@1.1 1.1.1w is already installed and up-to-date. To reinstall 1.1.1w, run: brew reinstall openssl@1.1 Uninstalling /opt/homebrew/Cellar/bison/3.8.2... (99 files, 3.7MB) Unlinking /opt/homebrew/Cellar/openssl@3/3.2.0_1... 5802 symlinks removed. ... snip ... ==> Summary 🍺 /opt/homebrew/Cellar/bison/3.8.2: 99 files, 3.7MB ==> Running `brew cleanup bison`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). ❯ rbenv versions * system 2.5.1 2.5.9 2.6.3 2.6.5 2.6.10 2.7.6 2.7.7 3.1.0 3.1.2 3.1.4 ❯ gem install bundler -v=1.17.1 --no-ri --no-rdoc Fetching: bundler-1.17.1.gem (100%) Successfully installed bundler-1.17.1 1 gem installed
無事 2.5.9 が生えましたね! bundler の 1.x 系も入ったのでこれにて平定。
注意点
ログをちょっと書いたけど、 OpenSSL の reinstall と unlink -> link が走っているので、これらに影響があるアプリケーションを使っている場合、ワンチャン壊れている可能性があります。 (MySQL とかね)
大丈夫だと思うけど各々の環境によるので、一応プロセス再起動なりなんなりして確認しておこう!
とはいえ古い環境が必要ならコンテナなり VM でやれよ、と言われたら時代の流れ的にはそうなんだけど、理解しているからこそちょいちょい辛くなりますね。
続きを書いた
この流れを踏まえて実際に古いプロジェクトで動かせるか試してみた。
bundle 周りでちょっと詰まったけど、今のトコロ概ね動いているので感謝感謝である。
(一応バージョンアップブランチもあるんだけど、ビジネスロジック由来の spec が落ちまくっていて修正にめっちゃ手間取っていたりしているのだった)