Homebrewでインストール済みパッケージが更新後に「already installed, it's just not linked」と言われた時の対応

Byraimon, 2014-11-18(火), in category Mac

Homebrew, Mac, Mercurial

少しの間触っていなかったMac miniで、パッケージ管理ツールHomebrewで入れているコマンド群を brew update && brew upgrade を実行したところ、分散バージョン管理システムMercurialの hg コマンドを実行しようとすると「already installed, it's just not linked」怒られるようになってしまった。

対応方法

次のように brew link を実行したら、 最新の hg コマンドが使えるように解決した。

$ brew link --overwrite mercurial

原因

多分だけど、HomebrewのMercurialパッケージがbottle化されたことが原因のように考えられる。

bottleというのは、いわゆるaptやyumのようなバイナリ配布形式で、Mercurial 2.xまでは brew install mercurial を実行した時はソースコードをダウンロードして来てビルドする挙動だったように記憶している。これがバイナリ配布形式に変わって、 brew link --overwrite が必要になったのではないか。現にFormula/mercurial.rbのコミットログを参照すると、Mercurial 3.0.1前後にbottle云々というものが登場する。

Homebrewも使い始めた頃は大半のパッケージが手元でビルドされていて、単なるMakefileラッパー + 管理システムのような印象のツールだったけど、2014-11現在ではbottleとしてバイナリ配布されるパッケージが増えているのを感じる。サクサクと短い時間でインストールが完了するようになって便利だ。