2016年1月5日火曜日

Mac OSX (El Captian)でbrew updateが動かなかった時に確認すべき対処法

年末の休暇を使ってやっとMacのOS更新をやったのですが、 Mac OS XをEl Captianにアップデートしてから、brew updateがうまく動きませんでした。 下記対処でbrew updateできたのでメモ。

ステップ1:PATHを確認。

しょっぱなからつまずき。なんでコマンドが無いんだよ〜


% brew update
zsh: command not found: brew
% echo $PATH
/usr/bin:/bin:/usr/sbin:/sbin

brewコマンドへのPATHが通っていないみたいですね。私の場合は「/usr/local/bin」がなかったので、一時的に追加して様子を見ます。


% PATH=/usr/local/bin:${PATH}
% export PATH
% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
% which brew
/usr/local/bin/brew
% brew --help
Example usage:
....省略....

うん、動いておる。

毎回PATHを設定するわけにも行かないので、次回以降のためにPATHの設定をしてしまいましょう。
~/.zshenvをエディタで開いて、
PATH=/usr/local/bin:${PATH}
または
path=(/usr/local/bin(N-/) $path)
とします。
この「(N-/)」の意味はつぎのサイトを参照。ディレクトリパスが存在しない時に空白に置換することで、無視させるテクニックです。複数のPCで.zshenvを共有する場合に便利なので、何も考えずにとにかくつけまくっておけば良いと思う。
(参考)http://qiita.com/mollifier/items/42ae46ff4140251290a7.

ステップ2:パーミッションを確認

ようやくbrewコマンドが実行できるのでためしてみると、エラーが出ますね。


% brew update
error: unable to unlink old '.gitignore' (Permission denied)
error: unable to create file .travis.yml (Permission denied)
error: unable to unlink old '.yardopts' (Permission denied)
error: unable to unlink old 'CODEOFCONDUCT.md' (Permission denied)
error: unable to unlink old 'CONTRIBUTING.md' (Permission denied)
error: unable to unlink old 'LICENSE.txt' (Permission denied)
error: unable to unlink old 'README.md' (Permission denied)
error: unable to unlink old 'SUPPORTERS.md' (Permission denied)
Checking out files: 100% (3823/3823), done.
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master

% brew update
Error: The /usr/local directory is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. Some versions of the
"InstantOn" component of Airfoil or running Cocktail cleanup/optimizations
are known to do this.

You should probably change the ownership and permissions of /usr/local
back to your user account.
  sudo chown -R $(whoami):admin /usr/local

パーミッションがrootになっているのが原因のようです。brewコマンドのエラーメッセージ通り、chownコマンドを実行してやります。


% sudo chown -R $(whoami):admin /usr/local
Password:
% ls -ld /usr/local

うん、パーミッション変わりました。

ステップ3:アップデート実行!


% brew doctor
% brew update
% brew upgrade

brew upgradeコマンドでは途中でmake bootstrapが走るため数十分くらいかかりましたが、無事成功です!

最後に

それにしてもbrewコマンドのエラーメッセージは優秀ですね。エラーとなる要因(機械的)を示すだけでなく、オペレータ(作業者)が読める形でのエラー説明があり、次に取るべきアクション・解決策をも提示してくれています。こんなエラーメッセージを設計できるなんて、すごいエンジニアだと思います。

0 件のコメント:

コメントを投稿