homebrewでバージョンを固定してインストールしたい

homebrewがバージョン指定してインストールできないので
packageを作成してインストールする方法を記載します。

バージョン指定してインストールできるようにするissueとかp-rあるだろう
と思って探してみたんですが見つからなかった。探し方が悪いかもしれない。

TL;DR

Brewfileなどでバージョン指定してインストールできないので
自分で利用したいバージョンのpackageを作成してそれをインストールする

Ref

brew tap - Homebrew/homebrew
Formula Cookbook - Homebrew/homebrew
HomeBrewで自作ツールを配布する - SOTA
Homebrew vs Boxen を比較して、brewproj に着手 - ja.ngs.io

How To

例えばnginxの1.2.8のバージョンを静的に指定してインストールしたい場合

  1. GitHubの自分の利用したいアカウントにて、homebrew-fooというリポジトリを作成する。
  2. brew versions nginxを実行してgitのハッシュを取得する
  3. /usr/local/Library/配下にて2.で取得したハッシュをcheckout
  4. /usr/local/Library/Formula/nginx.rbhomebrew-foo/nginx128.rbという名前で保存
  5. nginx128.rb

  6. before

class Nginx < Formula
  • after
class Nginx128 < Formula

上記のようにclass名を変更

  1. nginx128.rb をcommitしてpush
  2. brew tap username/fooのコマンドを発行してnginx128.rbを取得
  3. brew search nginxのコマンドを発行して
nginx          nginx128

と出れくれば成功。

  1. brew install nginx128のコマンドを発行してインストール
  2. nginx -v でバージョンを確認
    (/etc/pathsで/usr/bin/より先に/usr/local/bin/を見に行くようにしておく)

上記流れで、自前のtapリポジトリを作成し、
そこに必要な分の静的なバージョンを指定したソフトウェアの設定を格納することで
バージョン指定がバリバリの環境も無難に構築することが可能になります。

ちなみに既存のhomebrewでインストールしたnginxを上書きしたくない場合は
nginx128.rbの中身をよしなに変更することで可能です。

こちらからは以上です。