Yosemiteアップグレード後に発生したHomebrewのエラー対応(2015年9月版)

  • 11
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

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の記述を編集してみた。

/usr/local/Library/brew.rb(変更前)
#!/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby -W0
/usr/local/Library/brew.rb(変更後)
#!/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の記述を編集してみた。

/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
/usr/local/Library/brew.rb(変更後)
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がアップデートされており、
そもそも発生していたエラーに対する対策がなされていた模様。

/usr/local/Library/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

上記を実行するだけで、問題のエラーは解消するものと思われます。