概要
以前以下の記事でhomebrewの過去バージョンの使い方を紹介しました。
あれからHomebrewも変わり、以前の方法ではうまくいかなくなったため新しい過去バージョンのインストール方法を紹介します。
環境
- macOS Catalina 10.15.6
- Homebrew 2.5.2
課題
以下の課題により以前の手法が使えなくなりました。
brewは最新版しか保持しない方針
Homebrew automatically uninstalls old versions of a formula after that formula is upgraded with brew upgrade, and periodically performs additional cleanup every 30 days.
とあるように、brew upgrade
時に最新版以外は削除されます。またupgradeを使わなくても30日ごとのcleanupで削除されます。
export HOMEBREW_NO_INSTALL_CLEANUP=1
を設定すれば削除されなくなりますが、brewの方針として最新バージョン以外サポートしないようです。
なので基本的にbrew switch
によるバージョン変更はできないものと考えます。
brew install formula_raw_pathも使えなくなった
How to Install an Older Brew Package | by Nassos Michas | ITNEXT
で紹介されているようにhomebrewのgitのコミットハッシュを使って
$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/35e6655f86a253e44648060df15c93b0867f5e14/Formula/circleci.rb Error: Calling Installation of circleci from a GitHub commit URL is disabled! Use 'brew extract circleci' to stable tap on GitHub instead.
のように過去バージョンをインストールする手段がありました。しかし現在のbrewでは以下のように怒られます。
Error: Calling Installation of xxx from a GitHub commit URL is disabled! Use 'brew extract xxx' to stable tap on GitHub instead.
対応方法
brew extract
で旧バージョンのformulaを独自tapに登録してそこからインストールします。
例としてcircleci-cliの旧バージョンをインストールします。
現時点の最新版は0.1.9578
ですが、過去のバグが再発していたため0.1.9066
に戻します。
1. tap用リポジトリの用意
githubで空リポジトリを用意するか、tap-new
で用意します。今回はtap-new
で。
今回はjun06t/homebrew-taps
というリポジトリにします。名前は任意です。ちなみにtapの命名規則としてhomebrew-
を省略できます。
$ brew tap-new jun06t/taps ==> Created jun06t/taps /usr/local/Homebrew/Library/Taps/jun06t/homebrew-taps
2. brewの古いformulaをtapに展開
brew extract
で公式のformulacircleci
を先程用意したtapへ展開します。
その際に--version
オプションでインストールしたい旧バージョンを指定します。
$ brew extract circleci jun06t/taps --version 0.1.9066 ==> Searching repository history ==> Writing formula for circleci from revision 35e6655 to: /usr/local/Homebrew/Library/Taps/jun06t/homebrew-taps/Formula/circleci@0.1.9066.rb
3. tapからインストール
$ brew install jun06t/taps/circleci@0.1.9066 Updating Homebrew... ==> Installing circleci@0.1.9066 from jun06t/taps ==> Cloning https://github.com/CircleCI-Public/circleci-cli.git Updating /Users/jun06t/Library/Caches/Homebrew/circleci@0.1.9066--git ==> Checking out tag v0.1.9066 HEAD is now at 8a3435b Unhide `orb pack` (#445) HEAD is now at 8a3435b Unhide `orb pack` (#445) ==> make pack ==> go build -ldflags -s -w -X github.com/CircleCI-Public/circleci-cli/version.packageManager=homebrew -X github.com/CircleCI-Public/circleci-cli/version.Version=0.1.9066 -X github.com/CircleCI-Public/circleci-cli/version.Commit=8a3435b / 🍺 /usr/local/Cellar/circleci@0.1.9066/0.1.9066: 5 files, 12.6MB, built in 21 seconds
これで古いバージョンをインストールできました。
$ circleci version 0.1.9066+8a3435b (homebrew)
アンインストールは
$ brew uninstall circleci@0.1.9066 Uninstalling /usr/local/Cellar/circleci@0.1.9066/0.1.9066... (5 files, 12.6MB)
とすればOKです。