$ bundle install
での nokogiri のインストールエラーがよく起きるようです。
nokogiri のインストールエラー系の記事を調べ尽くしたくらいハマり、ほぼ全部の対応をやりましたが最終的には brew doctor
の指示で解消されました。
記載している対応方法はどれも実際に解消されている人もいるので、一個ずつ試していったら良いかと思います。
最初に発生したエラーは下記になります。
Installing nokogiri 1.6.7.rc4 with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking if the C compiler accepts ... yes
checking if the C compiler accepts -Wno-error=unused-command-line-argument-hard-error-in-future... no
Building nokogiri using packaged libraries.
Using mini_portile version 2.0.0.rc2
checking for iconv.h... yes
checking for gzdopen() in -lz... yes
checking for iconv... no
-----
libiconv is missing. Please locate mkmf.log to investigate how it is failing.
-----
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
--help
--clean
--use-system-libraries
--enable-static
--disable-static
--with-zlib-dir
--without-zlib-dir
--with-zlib-include
--without-zlib-include=${zlib-dir}/include
--with-zlib-lib
--without-zlib-lib=${zlib-dir}/lib
--enable-cross-build
--disable-cross-build
Gem files will remain installed in /Path/to/.bundler/ruby/2.0.0/gems/nokogiri-1.6.7.rc4 for inspection.
Results logged to /Path/to/.bundler/ruby/2.0.0/gems/nokogiri-1.6.7.rc4/ext/nokogiri/gem_make.out
An error occurred while installing nokogiri (1.6.7.rc4), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.7.rc4'` succeeds before bundling.
環境
- OSX Yosemite 10.10.5
-
$ brew --version
0.9.5 (git revision 7cfd3e61; last commit 2015-11-27) -
$ ruby --version
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin14] -
gem --version
2.0.14
nokogiri インストールするためにやったこと
事前準備
nokogiri で必要なパッケージをインストール
libxml2, libxslt, libiconv が必要なので brew でインストールします。
※ 成功の箇所に記載していますが、 link はいらないのかも。結局私は unlink するとインストールできましたが、複合的な要因がありそうなので一応メジャーなやり方を書いています。
$ brew tap homebrew/dupes
$ brew install libxml2 libxslt libiconv
$ brew link --force libxml2 libxslt libiconv
正常にインストールされたか確認。
$ xml2-config --version
2.9.3
$ xslt-config --version
1.1.28
$ iconv --version
iconv (GNU libiconv 1.14)
ちなみに、私の環境は /opt/local/bin
(macportsのパッケージ)が優先パスになっており、そちらにも同じパッケージが入っていて少しはまっていました。
brew は /usr/local/bin
にシンボリックリンクを作成するので、そこを優先PATHにします。
1. --use-system-libraries
を設定してみた
まずはメジャーな対応です。
$ bundle config build.nokogiri --use-system-libraries
$ bundle install
結果は失敗
今度は libxml2 でエラーが。
libxml2 is missing. Please locate mkmf.log to investigate how it is failing.
2. xml2-config, xslt-config を指定してみた
config を直接指定。
オプション例にはこんなオプションないのですが、やっている記事があったのでやってみました。
$ bundle config build.nokogiri \
--use-system-libraries \
--with-xml2-config=/usr/local/bin/xml2-config \
--with-xslt-config=/usr/local/bin/xslt-config
$ bundle install
結果は失敗
変化なし!
libxml2 is missing. Please locate mkmf.log to investigate how it is failing.
3. Xcode の libxml を指定してみた
参考:
http://stackoverflow.com/questions/19643153/error-to-install-nokogiri-on-osx-10-9-maverick
http://qiita.com/mist_dev/items/be2efa5913fa0fc861af
bundle config build.nokogiri \
--use-system-libraries \
--with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2/libxml
結果は失敗
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb --use-system-libraries --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2/libxml
checking if the C compiler accepts ... yes
checking if the C compiler accepts -Wno-error=unused-command-line-argument-hard-error-in-future... no
Building nokogiri using system libraries.
libxml2 version 2.6.21 or later is required!
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
... 略
--without-libexslt-config
Gem files will remain installed in /var/folders/z8/5vc_44kj15zd8zdsrb0z3th80000gn/T/bundler20151129-14117-10ziz4wnokogiri-1.6.7.rc4/gems/nokogiri-1.6.7.rc4 for inspection.
Results logged to /var/folders/z8/5vc_44kj15zd8zdsrb0z3th80000gn/T/bundler20151129-14117-10ziz4wnokogiri-1.6.7.rc4/gems/nokogiri-1.6.7.rc4/ext/nokogiri/gem_make.out
An error occurred while installing nokogiri (1.6.7.rc4), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.7.rc4'` succeeds before bundling.
3. lib と include ディレクトリを指定してみた
参考:
http://www.nokogiri.org/tutorials/installing_nokogiri.html#freebsd
bundle config build.nokogiri \
--use-system-libraries \
--with-xml2-lib=/usr/local/lib \
--with-xml2-include=/usr/local/include/libxml2/libxml \
--with-xslt-lib=/usr/local/lib \
--with-xslt-include=/usr/local/include/libxslt \
--with-iconv-lib=/usr/local/lib \
--with-iconv-include=/usr/local/include
結果は失敗
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb '--use-system-libraries --with-xml2-lib=/usr/local/lib --with-xml2-include=/usr/local/include/libxml2/libxml --with-xslt-lib=/usr/local/lib --with-xslt-include=/usr/local/include/libxslt --with-iconv-lib=/usr/local/lib
Gem files will remain installed in /var/folders/z8/5vc_44kj15zd8zdsrb0z3th80000gn/T/bundler20151129-14696-nm7tqmnokogiri-1.6.7.rc4/gems/nokogiri-1.6.7.rc4 for inspection.
Results logged to /var/folders/z8/5vc_44kj15zd8zdsrb0z3th80000gn/T/bundler20151129-14696-nm7tqmnokogiri-1.6.7.rc4/gems/nokogiri-1.6.7.rc4/ext/nokogiri/gem_make.out
An error occurred while installing nokogiri (1.6.7.rc4), and Bundler cannot continue.
Make sure that `gem install nokogiri -v '1.6.7.rc4'` succeeds before bundling.
4. lib と include ディレクトリを変数で指定してみた
$ bundle config build.nokogiri --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"
結果は失敗
libxml2 is missing. Please locate mkmf.log to investigate how it is failing.
5. gem で入れてみようとする
$ sudo NOKOGIRI_USE_SYSTEM_LIBRARIES=1 gem install nokogiri -- --use-system-libraries --with-iconv-dir="$(brew --prefix libiconv)" --with-xml2-config="$(brew --prefix libxml2)/bin/xml2-config" --with-xslt-config="$(brew --prefix libxslt)/bin/xslt-config"
結果は失敗
libxml2 is missing. Please locate mkmf.log to investigate how it is failing.
6. macports をアンインストールしてみた
brew でインストールしたパッケージと競合とかしていたので。
参考:
http://macperson.net/macports-uninstall/
結果は変化なし
うん、、何も変わりませんでした。
7. Xcode のパッケージで全部指定
参考:
http://stackoverflow.com/questions/6277456/nokogiri-installation-fails-libxml2-is-missing
bundle config build.nokogiri \
--use-system-libraries \
--with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2/libxml \
--with-xml2-lib=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib \
--with-iconv-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include \
--with-iconv-lib=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/lib
結果は失敗
エラーメッセージをメモするのを忘れましたが、失敗しました。
8. gem nokogiri をアンインストール
どこかの記事にあったローカルの nokogiri を削除すれといった内容。
$ sudo gem uninstall nokogiri
ERROR: While executing gem ... (Gem::InstallError)
nokogiri is not installed in GEM_HOME, try:
gem uninstall -i /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0 nokogiri
$ sudo gem uninstall -i /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0 nokogiri
Remove executables:
nokogiri
in addition to the gem? [Yn] Y
Removing nokogiri
Successfully uninstalled nokogiri-1.5.6
結果は失敗
何も変わりませんでした。
9. brew doctor
をしてみた(nokogiriインストールに成功)
brew でパッケージが正常にインストールできていないのかと思い、 brew doctor
をしてみたら、libiconv とかでエラーがでてました。
指示の通り brew unlink
をそれぞれ行いました。
$ 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 and just ignore them. Thanks!
Warning: Some keg-only formula are linked into the Cellar.
Linking a keg-only formula, such as gettext, into the cellar with
`brew link <formula>` will cause other formulae to detect them during
the `./configure` step. This may cause problems when compiling those
other formulae.
Binaries provided by keg-only formulae may override system binaries
with other strange results.
You may wish to `brew unlink` these brews:
homebrew/dupes/libiconv
libxml2
libxslt
結果は大成功!!
nokogiri のための config 設定を何もしない状態でインストールできました!
$ bundle config
Settings are listed in order of priority. The top value will be used.
$ bundle install
Installing nokogiri 1.6.7.rc4 with native extensions
Bundle complete!
色々とやり過ぎてよくわからなくなっているが、以下が原因だったんでしょうか。
- macports でパッケージが競合していた
- brew でインストールした際になんかおかしくなった
疲れた
色々調べまくりつかれました。
正直 nokogiri が嫌いになりそうでした。便利なんですけどね、こんなにハマると辛かったです。
nokogori のインストールにハマっているという人達が、少しでもこの記事で救われれば幸いです。
その他: bundle install
でのバーミッションエラー
私はどこかで sudo で何かをやったようで、以下パーミッションエラーでもハマりました。
/Library/Ruby/Gems/2.0.0/bundler/gems
配下の対象ディレクトリ別名にするなどで退避すると解消されましたが、それが正解かは不明です。
参考まで。
error: cannot open .git/FETCH_HEAD: Permission denied
Retrying git fetch --force --quiet --tags "/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53" due to error (2/4): Bundler::Source::Git::GitCommandError Git error: command `git fetch --force --quiet --tags "/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53"` in directory /Library/Ruby/Gems/2.0.0/bundler/gems/fastlane_core-aef11ae30b25 has failed.
If this error persists you could try removing the cache directory '/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53'
error: cannot open .git/FETCH_HEAD: Permission denied
Retrying git fetch --force --quiet --tags "/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53" due to error (3/4): Bundler::Source::Git::GitCommandError Git error: command `git fetch --force --quiet --tags "/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53"` in directory /Library/Ruby/Gems/2.0.0/bundler/gems/fastlane_core-aef11ae30b25 has failed.
If this error persists you could try removing the cache directory '/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53'
error: cannot open .git/FETCH_HEAD: Permission denied
Retrying git fetch --force --quiet --tags "/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53" due to error (4/4): Bundler::Source::Git::GitCommandError Git error: command `git fetch --force --quiet --tags "/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53"` in directory /Library/Ruby/Gems/2.0.0/bundler/gems/fastlane_core-aef11ae30b25 has failed.
If this error persists you could try removing the cache directory '/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53'
error: cannot open .git/FETCH_HEAD: Permission denied
Git error: command `git fetch --force --quiet --tags "/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53"` in directory
/Library/Ruby/Gems/2.0.0/bundler/gems/fastlane_core-aef11ae30b25 has failed.
If this error persists you could try removing the cache directory '/Users/whoami/.bundler/cache/git/fastlane_core-736319f988b46dd2ce999c7e428ab29293f12d53'