homebrewでパーミッションにちょっとはまる

MacPortsとhomebrewを微妙に併用していたが、新しく買ったMacBook Airでは完全にhomebrew一筋に切り替えようとしてみた。

homebrewのインストール(https://github.com/mxcl/homebrew/wiki/installation)に書いてある通りであり別にインストールは問題なく動作するのだがbrew updateを唱えた瞬間以下のようなエラーになる。

error: unable to unlink old '.gitignore' (Permission denied)
error: unable to unlink old 'README.md' (Permission denied)
fatal: Could not reset index file to revision 'FETCH_HEAD'.
rm: .git: Permission denied
Error: Failure while executing: rm -rf .git

homebrewはsudoを使わなくても動作する。MacPortsでは/opt/localだったがhomebrewではデフォルトは/usr/localにプログラムをインストールする。で、homebrewでは/usr/localに対してstaffグループの所有権を与えておき、

sudo dscl /Local/Default -append /Groups/staff GroupMembership $USER

によって実行ユーザをstaffグループに追加しておくので、実行ユーザでは/usr/localへの書き込みはstaffグループ権限によって行え、sudoなしで実行できる。

じゃぁ、なんでパーミッションでおこられるのよと思って権限を調べてみると、/usr/localroot:wheel権限になっていた。もともとhomebrewをインストールする前にこの状態になっているとhomebrewのインストールスクリプトでは/usr/local/binなどはstaffグループにしてくれるものの、/usr/localの権限までは変更してくれない様子。それでインストール時に/usr/local直下のファイル(.gitignoreとかREADME.mdとか.gitとか)は所有者がroot:wheelのまま引き継がれたりしている。

というわけで実行ユーザで/usr/local/binへの書き込みはできるのでbrew installは動いたりするけど、/usr/local直下のファイル(.git)にアクセスできないのでbrew updateがこけると。

sudo chgrp staff /usr/local

でインストールしなおして、とりあえず解決した。仕組みをよく理解しないまま使うのはよくないと反省。