Screaming Loud

日々是精進

MacのYosemiteからEI Capitanにアップデートした際のbrewの対応

特に問題なくアップデートできました。

EI Captianから/usr/localを自分で作れなくなったので、EI Capitanからbrewのデフォルトである/usr/local/Cellarが使えません。
ただ、Yosemiteからの移行の場合は、すでに/usr/local/Cellarが作られているはずで、問題なくアップデートできました。

その際、いくつかやるべき手順があったので、メモしておきます。

EI Capitanからのアップデート

そもそもbrew cask updateをかけても以下のエラーが出ており、困っていたので実行しました。

$ brew cask update
==> error: Ref refs/remotes/origin/master is at 3eaf298cbbe8fc31d5f022e742c8b5dc
==> error: Cannot lock ref 'refs/remotes/origin/master':
==> Error: Failure while executing: git pull --ff --no-rebase --quiet origin ref
error: Ref refs/remotes/origin/master is at 3eaf298cbbe8fc31d5f022e742c8b5dcd0ef06aa but expected cd5cc7e2d6be6d657a749570551f71564da06437
error: Cannot lock ref 'refs/remotes/origin/master':
Error: Failure while executing: git pull --ff --no-rebase --quiet origin refs/heads/master:refs/remotes/origin/master
brew cask update  2.98s user 2.25s system 42% cpu 12.327 total

そもそも、その前にEI CapitanからRootlessという概念が加わり、操作できないディレクトリが増えました。
OS X 10.11 El Capitanにアップデートするさいの注意点まとめ。

なので、その対応がbrewに関しても必要となっています。

1. brewが使う/usr/localの権限を変更する。
homebrew/El_Capitan_and_Homebrew.md at master · Homebrew/homebrew · GitHubに書いてあるとおり、実行します。
そこそこ時間がかかります。

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

2. brewレポジトリを最新にする。
/usr/localの権限を変えただけだと、まだ$ brew cask updateのfetchエラーが出ていたので、以下を実行しました。

$ cd `brew --prefix`
$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
        precomposeunicode = false
        autocrlf = false
[remote "origin"]
        url = https://github.com/Homebrew/homebrew.git
        fetch = +refs/heads/*:refs/remotes/origin/*

$ git fetch origin
$ git rebase origin/master

これで、repositoryを最新にして動かすことができました。

参考:qiita.com