[MacOS X El Capitan]Homebrewのupdateが出来なくなった?と思ったときの対処法

  • 公開日:2016/5/25
この記事は最終更新日から7年以上が経過しています。

最近あまり使っていなかったHomebrewをupdateしたら下のようなエラーが出ました。
どうやらOSをEI Capitanにアップデートしたことが原因らしいです。どんだけ使ってなかったんだ?と思いつつも対処法をメモ。

$ brew update
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- mach (LoadError)
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/Library/Homebrew/extend/pathname.rb:2:in `<top (required)>'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/Library/Homebrew/global.rb:3:in `<top (required)>'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
    from /usr/local/Library/brew.rb:15:in `<main>'

このエラーが出ると、brewコマンドが全て使用できなくなるそうです。なので、brewのディレクトリを元の状態に戻します。
まずは移動。

$ cd /usr/local

ファイルを全て巻き戻します。

$ git reset --hard && git clean -df

ちょっと落ち着いて brew doctor してみると・・・

$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: 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 are known to do this.

エラーです。
EI Capitanから追加された新しいセキュリティ機能「Rootless」ってやつが原因らしいです。
なんでもrootユーザーですら、アクセス制限がかかっているそうな。
そんなわけですから、/usr/local以下の権限を変更します。

$ sudo chown -R $(whoami):admin /usr/local

実行後に以下をしてオーナーが変わっていればOK。

$ ls -ld /usr/local

これで、brew update 出来るようになりました。
そもそも久々の場合は、いきなり brew update とはせずに、まずは brew doctor すればよかったなー。と、ちょっと反省。