Help us understand the problem. What is going on with this article?

Homebrew.jl で git 周りのエラーに遭遇したときの対処法

More than 1 year has passed since last update.

TL;DR

  • Homebrew.jl でエラーが出たら以下の2つを試す:
    • Homebrew.jl のパッケージディレクトリを手動で物理削除して、再インストールする
    • 別途 Homebrew で入れていた(システムの)git をアップグレードする

環境

  • Mac OSX 10.11.6 El Capitan12
  • Julia v0.6.1
  • git v2.x.x(Homebrew でインストール → /usr/local/bin/git

改めて説明

macOS で Julia 使ってて、色々な外部パッケージをインストールしてると、パッケージによっては Homebrew.jl に依存していていつの間にかインストールされたりします。
そしてこれが、長く使ってるとエラーが出ることがよくあります。どのようなエラーなのかというと、状況としてはパッケージのアップデート時や他のパッケージインストール時、エラーの種類は、git 関連。

最近遭遇したエラーと、それをどう解決したかのメモを残しておきます。
全ての人に当てはまるとは限りませんが、誰かの何かしらの参考になれば。

ケース1

以下のようなエラーが出ることがありました。

julia> Pkg.build("Homebrew")
INFO: Building Homebrew
 : 《中略》
Error: git: /path/to/userhome/.julia/v0.6/Homebrew/deps/usr/Library/Taps/homebrew/homebrew-core/Formula/git.rb:190: syntax error, unexpected $undefined, expecting keyword_end
      \thelper = osxkeychain
       ^
==============================[ ERROR: Homebrew ]===============================

LoadError: ArgumentError: `brew info` failed for String["git"]!
while loading /path/to/userhome/.julia/v0.6/Homebrew/deps/build.jl, in expression starting on line 2

================================================================================

================================[ BUILD ERRORS ]================================

WARNING: Homebrew had build errors.

 - packages with build errors remain installed in /path/to/userhome/.julia/v0.6
 - build the package(s) and all dependencies with `Pkg.build("Homebrew")`
 - build a single package by running its `deps/build.jl` script

================================================================================

julia> 

つまり Homebrew.jl のビルド時に「`brew info` が失敗する」というもの。
「パッケージをビルドし直すには Pkg.build("Homebrew") してみてね」と言われるんですけれど、何度実行しても同じエラーが出ます。

解決策

よく分からないのですが、このエラーが出たら「最初から作り直す」のが正解っぽいです。
参考→ https://github.com/JuliaPackaging/Homebrew.jl/issues/206

手順としては以下:

  • パッケージディレクトリ内の、Homebrew ディレクトリを(物理)削除する。
    • 通常、ユーザホームディレクトリ直下の .julia/v0.6/Homebrew/ となります。
  • Julia の REPL に戻って、Pkg.update() を実行する。
    • 依存関係から Homebrew.jl を再インストール・再ビルドしてくれる。
$ cd ~/.julia/v0.6
$ rm -rf Homebrew
julia> Pkg.update()
INFO: Updating METADATA...
 : 《中略》
INFO: Installing Homebrew v0.5.9
INFO: Building Homebrew
INFO: Downloading brew...
 : 《後略》

julia>

何事もなく完了すればOK。

ケース2

なんかもっとやばそうな「git コマンドがそもそもまともに動いてなさそう」なエラー↓が出る場合もありました。

julia> Pkg.build("Homebrew")
INFO: Building Homebrew
fatal: Unable to find remote helper for 'https'
fatal: Unable to find remote helper for 'https'
Error: Fetching /path/to/userhome/.julia/v0.6/Homebrew/deps/usr failed!
Fetching /path/to/userhome/.julia/v0.6/Homebrew/deps/usr/Library/Taps/homebrew/homebrew-core failed!
git: 'rebase' is not a git command. See 'git --help'.
git: 'rebase' is not a git command. See 'git --help'.
==============================[ ERROR: Homebrew ]===============================

LoadError: failed process: Process(`/path/to/userhome/.julia/v0.6/Homebrew/deps/usr/bin/brew update --force`, ProcessExited(1)) [1]
while loading /path/to/userhome/.julia/v0.6/Homebrew/deps/build.jl, in expression starting on line 2

================================================================================

================================[ BUILD ERRORS ]================================

WARNING: Homebrew had build errors.

 - packages with build errors remain installed in /path/to/userhome/.julia/v0.6
 - build the package(s) and all dependencies with `Pkg.build("Homebrew")`
 - build a single package by running its `deps/build.jl` script

================================================================================

julia>

実際に git --help するとちゃんと rebase はちゃんとあるのに、このエラーが出る。

解決策

この場合は、私が別に Homebrew でインストール3していた git の側に問題があったようで、そちらをアップグレードしたら治りました。

参考→ https://github.com/JuliaPackaging/Homebrew.jl/issues/211#issuecomment-347919388

shell> brew upgrade git
Updating Homebrew...
==> Auto-updated Homebrew!
 : 《中略》
==> Upgrading 1 outdated package, with result:
git 2.15.1
==> Upgrading git
==> Downloading https://homebrew.bintray.com/bottles/git-2.15.1.el_capitan.bottl
Already downloaded: /path/to/userhome/Library/Caches/Homebrew/git-2.15.1.el_capitan.bottle.tar.gz
==> Pouring git-2.15.1.el_capitan.bottle.tar.gz
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d

zsh completions and functions have been installed to:
  /usr/local/share/zsh/site-functions

Emacs Lisp files have been installed to:
  /usr/local/share/emacs/site-lisp/git
==> Summary
🍺  /usr/local/Cellar/git/2.15.1: 1,488 files, 34.4MB

julia> Pkg.build("Homebrew")
INFO: Building Homebrew
Already up-to-date.

julia> 

まとめに変えて

これでやっと眠れる…。


  1. おそらく Sierra/High Sierra でも同様です(ていうかまだ Sierra 以降にアップグレードしてなかったりする…) 

  2. (ていうか Sierra 以降にアップグレードしたら同じ問題がまた起きそうな気がする…) 

  3. /usr/local/〜 以下で各種コマンドや shared library を管理する(システムレベルの)Homebrew と、Julia で管理している Homebrew とが混在(しかも複数バージョン Julia インストールしていたり JULIA_PKGDIR 指定して環境を分けている場合はさらに複数存在)していると、色々めんどくさいことになります…。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした