M1 MacでHomebrewを使っていたところ以下のようなエラーが出るようになりました
Error: formulae require at least a URL
/opt/homebrew/Library/Homebrew/formula.rb:253:in `determine_active_spec'
/opt/homebrew/Library/Homebrew/formula.rb:206:in `initialize'
/opt/homebrew/Library/Homebrew/formulary.rb:153:in `new'
/opt/homebrew/Library/Homebrew/formulary.rb:153:in `get_formula'
/opt/homebrew/Library/Homebrew/formulary.rb:305:in `get_formula'
/opt/homebrew/Library/Homebrew/formulary.rb:366:in `factory'
/opt/homebrew/Library/Homebrew/formulary.rb:413:in `from_keg'
/opt/homebrew/Library/Homebrew/formulary.rb:386:in `from_rack'
/opt/homebrew/Library/Homebrew/diagnostic.rb:739:in `block in check_for_unreadable_installed_formula'
/opt/homebrew/Library/Homebrew/diagnostic.rb:738:in `each'
/opt/homebrew/Library/Homebrew/diagnostic.rb:738:in `check_for_unreadable_installed_formula'
/opt/homebrew/Library/Homebrew/cmd/doctor.rb:64:in `block in doctor'
/opt/homebrew/Library/Homebrew/cmd/doctor.rb:57:in `each'
/opt/homebrew/Library/Homebrew/cmd/doctor.rb:57:in `doctor'
/opt/homebrew/Library/Homebrew/brew.rb:122:in `<main>'
起きる条件は brew install xx
brew upgrade
などbrewコマンドを使うと必ず最後に表示される、という現象です。
brewコマンドの最後で表示されるだけでinstall等が失敗するわけではないので実害はありません。
とは言っても、毎回出られると困るしな、と思って調べてみました。
結論としては brew untap <リポジトリ名>
で解消する事が出来ました!
レアケースな気もしますが、備忘録も兼ねて残しておきます。
検証した環境
1 | M1 Mac | macOS Big Sur | 11.2 |
2 | Homebrew | 3.0.5 |
起きたこと
brewコマンドを使うと必ず最後にエラーが起きるようになりました。
$ brew install vips
==> Downloading https://homebrew.bintray.com/bottles/cfitsio-3.490.arm64_big_sur.bottle.tar.gz
・・・
Removing: /Users/yuu/Library/Caches/Homebrew/gdbm--1.18.1_1.arm64_big_sur.bottle.tar.gz... (208.4KB)
Error: formulae require at least a URL
/opt/homebrew/Library/Homebrew/formula.rb:253:in `determine_active_spec'
・・・
brew doctor
を実行してもエラーが起きるので参りましたw
$ 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 or file an issue; just ignore this. Thanks!
Warning: "config" scripts exist outside your system or Homebrew directories.
・・・
Error: formulae require at least a URL
/opt/homebrew/Library/Homebrew/formula.rb:253:in `determine_active_spec'
・・・
Warningが出てるからまずそれ解消しようぜ!ていう話でもあります。笑
やったこと
2013年にOpenしたIssueなので参考にならないんじゃないか?と思ったらまさにこれでした ↓
この画像に書かれているbrew readall
を実行します
$ brew readall
Error: Invalid formula: /opt/homebrew/Library/Taps/git-chglog/homebrew-git-chglog/git-chglog.rb
formulae require at least a URL
brew readall
が何をしているか分からないのでhelpを見ます
$ brew readall -h
Usage: brew readall [--aliases] [--syntax] [tap ...]
Import all items from the specified tap, or from all installed taps if none is
provided. This can be useful for debugging issues across all items when making
significant changes to formula.rb, testing the performance of loading all
items or checking if any current formulae/casks have Ruby issues.
google先生で日本語に翻訳すると、
指定されたタップから、またはインストールされているすべてのタップからすべてのアイテムをインポートします。
これは、作成時にすべてのアイテムの問題をデバッグするのに役立ちます。
というわけでTapしたリポジトリのデバッグが出来るということ、なんですね。
思い返してみると、私git-chglog
というCHAGELOGを作成するのを支援してくれるツールを利用してまして、
git-chglog/git-chglog: CHANGELOG generator implemented in Go (Golang).
このコマンドをインストールする時にtap
を実行してたんですね。
$ brew tap git-chglog/git-chglog
この時は特段問題が起きていなかったと記憶しているんですが、その後に何かがぶつかってこのようにエラーが出るようになってしまったのかもしれません。
解決する(untapする)
リポジトリの登録を解除するuntap
を実行します
$ brew untap git-chglog/git-chglog
Untapping git-chglog/git-chglog...
Untapped 1 formula (40 files, 45.7KB).
これで改めてbrew readall
を実行すると
$ brew readall
何も表示されなくなった!
じゃあ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 or file an issue; just ignore this. Thanks!
・・・
Warningは表示されるけど、エラーメッセージは表示されなくなりました ☺️