Homebrewが壊れたら

はじめに

OS X のパッケージマネージャーといえば、もちろん Homebrew だ。
Homebrew — OS X用パッケージマネージャー

開発ツールの管理を非常に便利に行うことができる。

ところが、この Homebrew、ふとした拍子によく壊れる (気がする) 。
特に、OS のアップデートなどで動かなくなるといったケースが散見されるようだ。

今回も次のようなエラーが表示され動かなくなってしまった。

MacBookAir:homebrew admin$ brew update
/usr/local/bin/brew: /usr/local/src/homebrew/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 21: /usr/local/src/homebrew/Library/brew.rb: Undefined error: 0

もちろん、brew.rbなんて弄った覚えはないのだが。

Homebrew の構成

Homebrew は通常、

/usr/local/src/homebrew

に必要なファイルがインストールされる。
実行ファイルである /usr/local/bin/brew も、この src/homebrew 以下のファイルへのシンボリックリンクとなっている。
ということは、この src/homebrew 以下のファイルを正しい状態へ戻してやれば直るはずである。

そして、src/homebrew は Git によってバージョン管理されている。

つまり、個別にファイルを修正する必要はなく、ファイルが壊れたなら git コマンドで HEAD に戻す、あるいはアップデートが必要なら remote から最新バージョンにしてやれば良いということになる。

直す

何はともあれ、まずは念のため git reset をかけておく。

MacBookAir:homebrew admin$ git reset --hard HEAD

次にリポジトリの情報を確認する。

MacBookAir:homebrew admin$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
autocrlf = false
[remote "origin"]
url = https://github.com/Homebrew/homebrew.git
fetch = +refs/heads/*:refs/remotes/origin/*

見ての通り、Githubリポジトリが origin として登録されている。
そこで、ここから pull を行う。

MacBookAir:homebrew admin$ git pulll origin master

詳細は割愛するが、大量の更新ファイルがあったようだ。

git log を確認すると、かなりの頻度で更新されているので、現状の OS に合わせたアップデートが必要だったようだ。

MacBookAir:homebrew admin$ tig
2015-09-24 21:04 BrewTestBot o [master] [origin/master] poppler: update 0.36.0 bottle.
2015-09-24 21:04 BrewTestBot o pdf2htmlex: update 0.13.6_3 bottle.
2015-09-24 21:04 BrewTestBot o diff-pdf: update 0.2_3 bottle.
2015-09-21 19:05 Ed Porras o poppler 0.36.0
2015-09-25 12:37 BrewTestBot o nghttp2: update 1.3.4 bottle.
2015-09-25 17:04 Guo Xiao o nghttp2 1.3.4
2015-09-25 13:09 Dominyk Tiller o lynx: update url
2015-09-25 05:08 BrewTestBot o miller: add 2.2.1 bottle.
2015-09-24 20:19 Dominyk Tiller o miller 2.2.1 (new formula)
2015-09-25 03:05 BrewTestBot o librsvg: update 2.40.10_1 bottle.
2015-09-25 03:05 BrewTestBot o gdk-pixbuf: update 2.32.0 bottle.
2015-09-24 20:20 Tom Schoonjans o gdk-pixbuf: relocations now optional, off by default
2015-09-22 14:00 Tom Schoonjans o gdk-pixbuf: disable relocatable library support
2015-09-21 18:46 Tom Schoonjans o gdk-pixbuf 2.32.0

冒頭の brew コマンドをもう一度打って、無事動作を確認することができた。
Homebrew が壊れたら、この方法で直すことができるはずだ。

MacBookAir:homebrew admin$ brew update
Already up-to-date.