OS X MavericksからYosemiteへのアップグレード後、$ brew doctor
を実行したらエラーが発生したので、対処してみました。
同様のエラーメッセージで検索すると、brew.rb
を書き換える等の対応法が出てくるのですが、2015年9月現在ではHomebrew側ですでに対策がされているようなので、むやみに書き換えない方が良さそうです。
下記に経緯と結論をまとめたので、最新版の情報として参考にしてください。
エラー対応の経緯
OS X MavericksからYosemiteへのアップグレード後、$ brew doctor
を実行すると、以下のエラーが発生。
/usr/local/bin/brew: /usr/local/Library/brew.rb: /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby: bad interpreter: No such file or directory
/usr/local/bin/brew: line 21: /usr/local/Library/brew.rb: Undefined error: 0
そこで、下記ページを参考に/usr/local/Library/brew.rb
の記述を編集してみた。
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0
#!/System/Library/Frameworks/Ruby.framework/Versions/current/usr/bin/ruby -W0
すると今度は以下のエラーが発生。
Homebrew requires Leopard or higher. For Tiger support, see:
https://github.com/mistydemeo/tigerbrew
Mac OSの判定をする部分でYosemiteの判別がうまくいっていないようなので、下記ページを参考に/usr/local/Library/brew.rb
の記述を編集してみた。
if MACOS and MACOS_VERSION < 10.5
abort <<-EOABORT.undent
Homebrew requires Leopard or higher. For Tiger support, see:
http://github.com/sceaga/homebrew/tree/tiger
EOABORT
end
if MACOS and MACOS_VERSION < 10.5 and MACOS_VERSION != 10.1 and MACOS_VERSION != 10.11
abort <<-EOABORT.undent
Homebrew requires Leopard or higher. For Tiger support, see:
http://github.com/sceaga/homebrew/tree/tiger
EOABORT
end
すると今度は下記のエラーが出てしまい、うまくいかず。
Mac OS X `10.1' is invalid
そこで、まずは先の記事にあった通り、brew.rb
の変更分をgit commit
することに・・。
cd /usr/local/
git add Library/brew.rb
git commit -m "Fix brew.rb for yosemite update"
[master 7d35673] Fix brew.rb for yosemite update
1 file changed, 2 insertions(+), 2 deletions(-)
それでもエラーメッセージが変わらないので、試しにbrew update
してみた。
$ brew update
error: Your local changes to the following files would be overwritten by merge:
README.md
Please, commit your changes or stash them before you can merge.
Aborting
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
すると、README.md
に差分があるとのことなので、リモートの内容を上書きすることに。
その後、改めてbrew update
を実行。
$ git checkout README.md
$ brew update
Automatic merge failed; fix conflicts and then commit the result.
Error: Failure while executing: git pull -q origin refs/heads/master:refs/remotes/origin/master
すると、今度はbrew.rb
に差分が生まれてしまった模様。
$ git status
(中略)
# Unmerged paths:
# (use "git add <file>..." to mark resolution)
#
# both modified: Library/brew.rb
差分をチェックしたところ、リモート側のbrew.rb
がアップデートされており、
そもそも発生していたエラーに対する対策がなされていた模様。
#!/System/Library/Frameworks/Ruby.framework/Versions/Current/usr/bin/ruby -W0
(中略)
if OS.mac? and MacOS.version < "10.6"
abort <<-EOABORT.undent
Homebrew requires Snow Leopard or higher. For Tiger and Leopard support, see:
https://github.com/mistydemeo/tigerbrew
EOABORT
end
そこで、リモートの内容を強制的に上書きして、最新の状態へ復帰させることに。
$ git reset --hard origin/master
すると、git上の差分はなくなり、当初発生していたエラーはなくなった。
まとめ&結論
Yosemiteのアップグレード直後は、Homebrew側の対応が間に合っておらず、
上記エラーを回避するためにはbrew.rb
を直接編集し、git commit
する必要があったものと思われる。
ただし、2015年9月現在は問題の箇所の記述は修正されており、最新版のbrew.rb
にアップデートすればエラーは解消される模様。
なので、Yosemiteへのアップグレード後に上記のエラーが発生したら、まずは
$ brew update
を実行するか、下記コマンド等によってローカル側の/usr/local/Library/brew.rb
を更新することをお勧めします。
$ git reset --hard origin/master
上記を実行するだけで、問題のエラーは解消するものと思われます。