LoginSignup
11
11

More than 5 years have passed since last update.

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

Posted at

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

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

11
11
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11