brew cleanupで Permission denied @ apply2files が出た

  • Homebrew
  • macOS

この記事は、構成と文章の整理にAIを使っています。
あくまで読みやすくするための補助で、内容そのものをAIにすべて任せて書いているわけではありませんが、ところどころ相談しながら整えています。

何が起きたか

brew upgrade のあとに自動で走った brew cleanup で、こんなエラーが出た。

Error: Permission denied @ apply2files - /usr/local/lib/docker/cli-plugins

パスは環境によって ghostscript の中のフォントファイルだったり docker 関連だったりバラバラらしい。共通してるのは /usr/local 配下のどこか、というところ。

原因

エラーが出てるパスの所有者を見ると root になってた。Homebrewはユーザー権限で動く前提なので、root所有のファイルに当たると書き込めずに止まる。

自分の場合は、以前入れたDocker Desktopをアンインストールした際に、/usr/local/lib/docker/cli-plugins 配下だけrootのまま残ってたのが原因だった。他にも、他のインストーラ(pkg形式のものとか)がsudoでファイルを置いた場合に同じ現象が起きるらしい。

apply2files というのはHomebrew内部でファイル変更を適用する処理の名前っぽいが、そこは未確認。

直し方

一番手っ取り早いのはHomebrewのprefix配下を丸ごと自分のユーザーに戻すやつ。

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

$(brew --prefix) を使ってるので、Intel Mac(/usr/local)でもApple Silicon(/opt/homebrew)でも同じコマンドで通る。

グループも合わせて直しておく方が後々のトラブルが減る。

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

補足

  • prefix全体をchownするのは応急処置。本来はエラーメッセージに出てる該当パスだけ直す方が安全(無関係なファイルの権限まで変えたくない場合)。
  • brew install や brew upgrade そのものにsudoを付けるのはNG。Homebrew公式もそう言ってる。今回のchownはあくまで壊れた所有権を戻すための一回限りの操作。
  • 該当ディレクトリがアンインストール済みアプリの残骸で、そもそも中身が要らない場合は mkdir -p でダミーのディレクトリを作るだけで直ることもあるらしい(今回は試してない)。