Homebrew

【Homebrew】マイナーバージョン指定でパッケージをインストールする

brew installでインストールできる fomula には基本的に過去のマイナーバージョンは保持していないようなので、指定してインストールしたい場合にはひと手間必要になります。
今回はそのやり方について解説していきます。

この記事で分かること

  • homebrew で過去のマイナーバージョンを指定してパッケージをインストールする方法

環境

  • Homebrew 3.2.13

大まかな流れ

  1. git リポジトリからインストールしたいバージョンのコミットを探す
  2. HEAD の位置を対象コミットに移動する
  3. 通常通りインストールする

手順

git リポジトリからインストールしたいバージョンのコミットを探す

コミットログを遡るために、まずは諸々の fomula が入っているディレクトリに移動します。

cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula

ここで、インストールしたい fomula のログを見るために下記コマンドを実行します。

git log --oneline <formula名>

mysql がインストールしたいとすれば、

$ ls -la | grep mysql
-rw-r--r--     1 hiroya  admin    2175  2  2 21:49 automysqlbackup.rb
-rw-r--r--     1 hiroya  admin    2205 10 24 21:39 mysql++.rb
-rw-r--r--     1 hiroya  admin    2939  2  2 21:49 mysql-client.rb
-rw-r--r--     1 hiroya  admin    2006 12  9 22:14 mysql-client@5.7.rb
-rw-r--r--     1 hiroya  admin    2095  2  2 21:49 mysql-connector-c++.rb
-rw-r--r--     1 hiroya  admin    1812 12 28 10:40 mysql-sandbox.rb
-rw-r--r--     1 hiroya  admin     714  9 23  2021 mysql-search-replace.rb
-rw-r--r--     1 hiroya  admin    6771  3 12 11:53 mysql.rb
-rw-r--r--     1 hiroya  admin    5769 12  9 22:14 mysql@5.6.rb
-rw-r--r--     1 hiroya  admin    6060  2  2 21:49 mysql@5.7.rb
-rw-r--r--     1 hiroya  admin    1643 12 28 10:40 mysqltuner.rb
-rw-r--r--     1 hiroya  admin    2865  3 12 11:53 qt-mysql.rb

みたいな感じで fomula を見つけたあと、その fomula 名でログを確認します。

$ git log --oneline mysql.rb
4ba1f77d74e mysql: fix brew style.
cd29ac513f3 mysql: update 8.0.26 bottle.
e98c18fe315 mysql: replace `plist` with `service`
82a4096bb3a mysql: update 8.0.26 bottle.
928d0e34b94 mysql 8.0.26
4ba9cfde5ea mysql: update 8.0.25_1 bottle.
dce48126f9f mysql: add Linux dependencies and flags (#77731)
82c63e45d50 mysql: update 8.0.25_1 bottle.
ae52ac7b8de mysql: uses brewed libraries
886cb09a223 mysql: update license
700eb16dda5 mysql: update 8.0.25 bottle.
5c8163730d8 mysql 8.0.25
58946207e43 mysql: update 8.0.23_2 bottle.
63cc56f5fe2 mysql: revision bump (protobuf 3.17.0)
ee2c110d65b mysql: update 8.0.23_1 bottle.
23a9325d1da mysql: revision bump
d27db589abf mysql: fix ENV["CI"] usage.
e2c833d326c formulae: use new bottle syntax
268962f7d9b mysql: update 8.0.23 bottle.
352d1fce0a3 mysql 8.0.23

HEAD の位置を対象コミットに移動する

これで目的のバージョンの fomula が見つかったので、そのバージョンのコミットに HEAD を移動します。

$ git sw -d <戻りたいコミットID>
  • 例(8.0.25 に戻したい場合)

    8.0.26 の一個手前のコミット(4ba9cfde5ea)に移動

$ git sw -d 4ba9cfde5ea
HEAD is now at 4ba9cfde5ea mysql: update 8.0.25_1 bottle.

通常通りインストールする

あとは普通にインストールするだけです。

brew install <formula名>

すでにインストール済みなら

brew reinstall <formula名>
$ brew reinstall mysql
==> Downloading https://ghcr.io/v2/homebrew/core/mysql/manifests/8.0.25_1
Already downloaded: /Users/hiroya/Library/Caches/Homebrew/downloads/0acaae4c8ab8eb92efa33f8278849d7f2ddac598e28411452ca4de60f8c57400--mysql-8.0.25_1.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/mysql/blobs/sha256:db388d333de4224dcc9ca54917069c75805801f00bc1355c9dcf
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:db388d333de4224dcc9ca54917069c75805
######################################################################## 100.0%
==> Reinstalling mysql
==> Pouring mysql--8.0.25_1.big_sur.bottle.tar.gz
==> Caveats
We've installed your MySQL database without a root password. To secure it run:
    mysql_secure_installation

MySQL is configured to only allow connections from localhost by default

To connect run:
    mysql -uroot

To have launchd start mysql now and restart at login:
  brew services start mysql
Or, if you don't want/need a background service you can just run:
  mysql.server start
==> Summary
🍺  /usr/local/Cellar/mysql/8.0.25_1: 300 files, 293.6MB

インストールできたら現在のバージョンを確認してみましょう。

$ mysql --version
mysql  Ver 8.0.25 for macos11.3 on x86_64 (Homebrew)

これで過去のマイナーバージョンのパッケージがインストールできました。

-Homebrew