🍺

Homebrewで任意のバージョンのパッケージをインストールする

2024/05/03に公開

過去のバージョンのImageMagick6をHomebrewでインストールしたかったのですが、色々と手順が必要だったのでまとめておきます。

# 環境
$ brew -v
Homebrew 4.2.20-83-gc09ef9a

Homebrewの用語が出てきますが、公式のドキュメントを参照してください。

課題

Homebrewでは最新のfomula(パッケージ)のみが保持されます。
https://docs.brew.sh/FAQ#how-do-i-keep-old-versions-of-a-formula-when-upgrading

Homebrew automatically uninstalls old versions of each formula that is upgraded with brew upgrade, and periodically performs additional cleanup every 30 days.

Homebrew は、brew upgrade でアップグレードされた各式の古いバージョンを自動的にアンインストールし、30 日ごとに追加のクリーンアップを定期的に実行します。

fomulaは Homebrew/homebrew-core/Fomula リポジトリで管理されています。

formula名@バージョン のようにバージョン管理されているformulaもありますが、あくまで別パッケージとして提供されているだけのようです。

$ brew search imagemagick
==> Formulae
imagemagick
imagemagick@6
...

今回は imagemagick@66.9.12 をインストールしたかったのですが、普通に brew install すると、現在の最新版である 6.9.13-9 がインストールされます。

$ brew install imagemagick@6
$ brew info imagemagick@6
...
Installed
/opt/homebrew/Cellar/imagemagick@6/6.9.13-9 (769 files, 27.9MB)
  Poured from bottle using the formulae.brew.sh API on 2024-05-03 at 17:02:58
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/i/imagemagick@6.rb
License: ImageMagick
...

以前はfomuraのコミットハッシュを指定してインストールできたようですが、現在は使えません。

$ brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/8edbb4ffad0cb7a41eaf508f6b5d90b15222d458/Formula/i/imagemagick@6.rb
Error: Non-checksummed download of imagemagick@6 formula file from an arbitrary URL is unsupported! `brew extract` or `brew create` and `brew tap-new` to create a formula file in a tap on GitHub instead.

今回、ローカルにtap(formulaを入れるディレクトリ)とformulaを作成することで、過去バージョンのimagemagick@6を利用できました。

ローカルにtapを作成する

tapの説明は、ドキュメントの通りです。

directory (and usually Git repository) of formulae, casks and/or external commands

foluma、cask、外部コマンドのディレクトリ (通常は Git リポジトリ)

使用したいバージョンのfomulaを格納するためのディレクトリです。
brew tap-new ユーザー名/formura名 のように指定してください。
tapが作成されると、作成先のパスが表示されます。

$ brew tap-new mito/imagemagick@6
...
==> Created mito/imagemagick@6
/opt/homebrew/Library/Taps/mito/homebrew-imagemagick@6
...

tapに任意のformulaを保存する

先ほど作成したtapに、任意のバージョンのfomulaを格納します。
今回はこちらのコミットから欲しいバージョンを持ってきます。
(欲しいバージョンのコミットは git log | grep などで良しなに探してください)

rawデータを先ほど作成したtapに保存します。

$ curl \
  https://raw.githubusercontent.com/Homebrew/homebrew-core/8edbb4ffad0cb7a41eaf508f6b5d90b15222d458/Formula/i/imagemagick%406.rb \
  -o /opt/homebrew/Library/Taps/mito/homebrew-imagemagick@6/Formula/imagemagick@6.rb

ローカルのfomulaをインストール

ローカルに保存したfomulaをインストールします。

$ brew install mito/imagemagick@6/imagemagick@6
$ brew info imagemagick@6
...
Installed
/opt/homebrew/Cellar/imagemagick@6/6.9.12-98 (767 files, 27.5MB)
  Poured from bottle on 2024-05-03 at 16:58:12
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/i/imagemagick@6.rb
License: ImageMagick
...

無事に 6.9.12 がインストールできました!
用語もすべてビール関係で面白いですね。

Discussion