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/localがroot: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
でインストールしなおして、とりあえず解決した。仕組みをよく理解しないまま使うのはよくないと反省。