1. ホーム
  2. installation

[解決済み】Homebrewは特定のバージョンのformulaをインストールしますか?

2022-03-18 22:52:47

質問

homebrewで特定のバージョンの数式をインストールするにはどうしたらいいですか? 例えば、最新の9.0ではなく、postgresql-8.4.4など。

解決方法を教えてください。

TLDR: brew install [email protected] 参照 回答は以下の通りです。 をご覧ください。


*( 古いバージョンのソフトウェアをhomebrewでインストール/使用するための、より徹底したワークフローを提供するために、私の回答を再編集しています。もし、古いバージョンの方が良いと思われたなら、遠慮なくメモを追加してください。 )

まずは一番シンプルなケースから。

1) 既にインストールされている(アクティベートされていない)バージョンかどうかを確認します。

homebrewが新しい数式をインストールするとき、それをバージョン管理されたディレクトリに置きます。 /usr/local/Cellar/postgresql/9.3.1 . このフォルダーへのシンボリックリンクのみがグローバルにインストールされます。原理的には、インストールされた2つのバージョンを切り替えるのは非常に簡単です。(*)

homebrewを長く使っていて、古いバージョンを削除したことがない場合(たとえば brew cleanup ) 、あなたのプログラムの古いバージョンがまだ残っている可能性があります。もし、その旧バージョンを単純に有効にしたいのであれば brew switch が最も簡単な方法です。

でチェック brew info postgresql (または brew switch postgresql <TAB> ) 古いバージョンがインストールされているかどうかを確認します。

$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M)
  Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more

すでに古いバージョンがインストールされていることがわかります。それを有効にするには brew switch :

$ brew switch postgresql 9.1.5
Cleaning /usr/local/Cellar/postgresql/9.1.5
Cleaning /usr/local/Cellar/postgresql/9.3.2
384 links created for /usr/local/Cellar/postgresql/9.1.5

起動したものを再確認してみましょう。

$ brew info postgresql
postgresql: stable 9.3.2 (bottled)
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.1.5 (2755 files, 37M) *
  Built from source
/usr/local/Cellar/postgresql/9.3.2 (2924 files, 39M)
  Poured from bottle
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/postgresql.rb
# … and some more

なお、スター * は、新しくアクティベートされたバージョンに移動しました

(*) ご注意ください brew switch は、古いバージョンの依存関係がすべて残っている限り、動作します。場合によっては、古いバージョンのリビルドが必要になるかもしれません。そのため brew switch は、あまり離れていない2つのバージョンを切り替えたいときに便利です。

2) そのバージョンがタップで利用可能かどうか確認する

特に大規模なソフトウェアプロジェクトでは、あるソフトウェアの複数のメジャーバージョン(API非互換の可能性あり)に対する需要が十分に高い可能性があります。2012年3月現在 ホームブリュー0.9 は、そのための仕組みを提供しています。 brew tap となります。 自作版 レポジトリを使用します。

そのバージョン・リポジトリには、いくつかのフォーミュラについて、古いバージョンのバックポートが含まれている可能性があります。(大抵は大規模で有名なものだけですが、もちろんpostgresqlのいくつかの数式も入っているでしょう)。

brew search postgresql を見れば、どこを見ればいいのかがわかります。

$ brew search postgresql
postgresql
homebrew/versions/postgresql8    homebrew/versions/postgresql91
homebrew/versions/postgresql9    homebrew/versions/postgresql92

と入力すれば、簡単にインストールできます。

$ brew install homebrew/versions/postgresql8
Cloning into '/usr/local/Library/Taps/homebrew-versions'...
remote: Counting objects: 1563, done.
remote: Compressing objects: 100% (943/943), done.
remote: Total 1563 (delta 864), reused 1272 (delta 620)
Receiving objects: 100% (1563/1563), 422.83 KiB | 339.00 KiB/s, done.
Resolving deltas: 100% (864/864), done.
Checking connectivity... done.
Tapped 125 formula
==> Downloading http://ftp.postgresql.org/pub/source/v8.4.19/postgresql-8.4.19.tar.bz2
# …

この場合、自動的に タップ その homebrew/versions をタップします。(チェックは brew tap で削除します。 brew untap homebrew/versions .) 以下が相当したでしょう。

$ brew tap homebrew/versions
$ brew install postgresql8

バックポートされたバージョンの公式が最新である限り、この方法は古いソフトウェアに対処するための最良の方法でしょう。

3) 過去の数式を試してみる

以下のアプローチは、ほぼ完全な形でリストアップされています。いずれも brew リポジトリから不死身の数式を復活させようとするものです。依存関係の変更、フォーミュラ仕様の API 変更、あるいは単にダウンロード URL の変更により、うまくいくこともあれば、うまくいかないこともあります。

formula ディレクトリ全体が git リポジトリなので、普通の git コマンドで特定のバージョンをインストールすることができます。しかし、古いバージョンが利用可能であったコミットにアクセスする方法を見つける必要があります。

a) 歴史的な時間

2011年8月~2014年10月 は、homebrewには brew versions コマンドを実行すると、利用可能なすべてのバージョンとそれぞれの SHA ハッシュが吐き出されます。2014年10月現在、あなたは brew tap homebrew/boneyard を使用してからにしましょう。タップの名前が示すように、これは最後の手段としてのみ行うべきでしょう。

$ brew versions postgresql
Warning: brew-versions is unsupported and may be removed soon.
Please use the homebrew-versions tap instead:
  https://github.com/Homebrew/homebrew-versions
9.3.2    git checkout 3c86d2b Library/Formula/postgresql.rb
9.3.1    git checkout a267a3e Library/Formula/postgresql.rb
9.3.0    git checkout ae59e09 Library/Formula/postgresql.rb
9.2.4    git checkout e3ac215 Library/Formula/postgresql.rb
9.2.3    git checkout c80b37c Library/Formula/postgresql.rb
9.2.2    git checkout 9076baa Library/Formula/postgresql.rb
9.2.1    git checkout 5825f62 Library/Formula/postgresql.rb
9.2.0    git checkout 2f6cbc6 Library/Formula/postgresql.rb
9.1.5    git checkout 6b8d25f Library/Formula/postgresql.rb
9.1.4    git checkout c40c7bf Library/Formula/postgresql.rb
9.1.3    git checkout 05c7954 Library/Formula/postgresql.rb
9.1.2    git checkout dfcc838 Library/Formula/postgresql.rb
9.1.1    git checkout 4ef8fb0 Library/Formula/postgresql.rb
9.0.4    git checkout 2accac4 Library/Formula/postgresql.rb
9.0.3    git checkout b782d9d Library/Formula/postgresql.rb

見ての通り、使用しないようにと忠告しています。Homebrewは内部のヒューリスティックで見つけられたすべてのバージョンを吐き出し、古い数式を取り出す方法を示しています。試してみましょう。

# First, go to the homebrew base directory
$ cd $( brew --prefix )
# Checkout some old formula
$ git checkout 6b8d25f Library/Formula/postgresql.rb
$ brew install postgresql
# … installing

古いバージョンのpostgresqlがインストールされたので、リポジトリをきれいに保つために、最新の式を再インストールすることができます。

$ git checkout -- Library/Formula/postgresql.rb

brew switch は、古いものと新しいものの間を行き来するあなたの味方です。

b) 先史時代

特別なニーズがある場合は、homebrewのレポから自分たちで掘ってみることもあります。

$ cd Library/Taps/homebrew/homebrew-core && git log -S'8.4.4' -- Formula/postgresql.rb

git log -S という文字列が含まれるすべてのコミットを探します。 '8.4.4' に追加または削除されました。 Library/Taps/homebrew/homebrew-core/Formula/postgresql.rb . その結果、2つのコミットを得ることができました。

commit 7dc7ccef9e1ab7d2fc351d7935c96a0e0b031552
Author: Aku Kotkavuo
Date:   Sun Sep 19 18:03:41 2010 +0300

    Update PostgreSQL to 9.0.0.

    Signed-off-by: Adam Vandenberg

commit fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
Author: David Höppner
Date:   Sun May 16 12:35:18 2010 +0200

    postgresql: update version to 8.4.4

明らかに fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422 が気になるコミットです。このコミットはかなり古いので、完全な homebrew インストールをダウングレードしてみます (そうすれば、数式 API が有効であることが多少なりとも保証されます)。

$ git checkout -b postgresql-8.4.4 fa992c6a82eebdc4cc36a0c0d2837f4c02f3f422
$ brew install postgresql
$ git checkout master
$ git branch -d postgresql-8.4.4

最後のコマンドは、git リポジトリに参照を残すため、省略することができます。

注意点:古いコミットをチェックアウトすると、一時的にhomebrewのインストールをダウングレードすることになります。そのため、homebrewのコマンドの一部が最新版と異なる可能性がありますので、注意が必要です。

4) 手動で数式を書く

難しくない で、それを自分のリポジトリにアップロードすることができます。以前は ホームブリューバージョン が、現在では廃止されています。

A.) ボーナス:ピン留め

例えばpostgresqlの特定のバージョンを維持し、自然な形で更新されないようにしたい場合は、次のようにします。 brew update; brew upgrade という手順を踏むと ピン という数式を作成します。

$ brew pin postgresql

ピン留めされた数式は /usr/local/Library/PinnedKegs/ で、一度、最新の変更や更新を取り込みたい場合は アンピン を再び表示します。

$ brew unpin postgresql