Posted at

MacOS High SierraでHomebrewの更新(`brew update`)ができない場合の対処

ひさしぶりにbrew updateしようとしたら、エラーが出た。

$ brew update

warning: unable to unlink .travis.yml: Permission denied
warning: unable to unlink .yardopts: Permission denied
warning: unable to unlink CONTRIBUTING.md: Permission denied
warning: unable to unlink SUPPORTERS.md: Permission denied
fatal: cannot create directory at '.github': Permission denied
Error: Failure while executing: git pull --ff --no-rebase --quiet origin refs/heads/master:refs/remotes/origin/master

調べてみるとHigh Sierraになってから/usr/localのパーミッションが変えられなくなったのが問題らしい。


対処方法

結論からいうと、Homebrewの再インストールで直りました。アンインストールはしませんでした。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

インストール済みだったパッケージもそのまま残り、今のところ問題も起きていません。

解決までに色々試して、少し問題も起きたので、備忘のために経緯も残しておきます。


対処の経緯

久々にHomebrewでインストールしたパッケージのupgradeをしたかったのでbrew updateしたらエラーで実行できなかった。


Correct. /usr/local can no longer be chown'd in High Sierra. Instead use

sudo chown -R $(whoami) $(brew --prefix)/*

Can't chown /usr/lo'brew update' errors on MacOS 10.13 (High Sierra) · Issue #3285 · Homebrew/brewcal in High Sierra · Issue #3228 · Homebrew/brew


$ sudo chown -R $(whoami) $(brew --prefix) もしくは $ sudo chown -R $(whoami) $(brew --prefix)/* で解決するということなので実行してみる。

$ sudo chown -R $(whoami) $(brew --prefix)

chown: /usr/local: Operation not permitted

解決せず。


The following worked to re-install:

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

Brew now works entirely as expected..

'brew update' errors on MacOS 10.13 (High Sierra) · Issue #3285 · Homebrew/brew


再インストールをすると直るらしい。

アンインストール/インストールするという情報もあったけど、アンインストールするとインストール済みパッケージもアンインストールされるらしいのでできればアンインストールはしたくない。再インストールでやってみる。

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

・・・
==> Installation successful!

成功!インストール済みパッケージもそのまま残って、今のところ動作も問題なし。やったね!


検証作業時の役立ちメモ


brew updateが失敗したときの対処

brew updateが途中で失敗すると、brewコマンドが打てなくなりました。

その場合は以下のコマンドで戻ります。

$ cd /usr/local

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

mac でbrew がおかしくなった(brew updateができない)のを解決 - Qiita


権限の書き換えをしたあとにmysqlが動かなくなったときの対処

$ sudo chown -R $(whoami) $(brew --prefix)を実行したときに、mysql関連の変えちゃいけないディレクトリまで権限が書き換わっていたっぽい。下記のコマンドで解決しました。

$ sudo chown -RL root:mysql /usr/local/mysql

$ sudo chown -RL mysql:mysql /usr/local/mysql/data

'warning the user/local/mysql/data directory is not owned by the mysql user', you have to: