カテゴリー
Linux

【Ruby】Gem インストール!RMagick インストール出来ない、動かないエラー記録!

bundle install --without development test

Redmine で使用する Gem を上記コマンドでインストールいたします。。。なのですけれども、エラーのためにうまく行きません。

  • CentOS 5.10
  • RMagick がインストールできない

今回は、そのエラーの記録と、対処メモを記録いたします。

下記はエラーまとめですわ。

  • ImageMagick がインストールされていないためダメ
  • ImageMagick のバージョンが低いためダメ
  • ImageMagick-lib の依存性を無視して ImageMagick、ImageMagick-devel をインストールしたらダメ
  •  2 つ以上 ImageMagick があると「警告」
  • PKG_CONFIG_PATH が設定されていないからダメ

また、bundle console でもエラーとなりました。

  • ダイナミックリンクライブラリのパス設定がなくてbundle console エラー

これにも、対処いたしましたの。

1. ImageMagick がインストールされていないためダメ

ImageMagick、ImageMagick-devel がインストールされておりませんと、次のようなエラーとなりました。

対処としては、yum install imagemagick imagemagick-devel でインストールいたします。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /root/.rbenv/versions/2.1.0/bin/ruby extconf.rb 
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... no
Can't install RMagick 2.13.2. Can't find Magick-config in /root/.rbenv/versions/2.1.0/bin:/root/.rbenv/libexec:/root/.rbenv/plugins/ruby-build/bin:/root/.rbenv/shims:/root/.rbenv/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

*** 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=/root/.rbenv/versions/2.1.0/bin/ruby

extconf failed, exit code 1

Gem files will remain installed in /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/rmagick-2.13.2 for inspection.
Results logged to /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/extensions/x86-linux/2.1.0-static/rmagick-2.13.2/gem_make.out
An error occurred while installing rmagick (2.13.2), and Bundler cannot continue.

Make sure that `gem install rmagick -v '2.13.2'` succeeds before bundling.

「Can’t install RMagick 2.13.2. Can’t find Magick-config」という記述からも ImageMagick が入っていない、という雰囲気が漂ってきておりますわね♪

2.  ImageMagick のバージョンが低いためダメ

ImageMagick のバージョンが低い時のエラーですわ♪

対処はもちろん、ImageMagick のバージョンを上げることですの♪先の投稿で取り組みました!

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /root/.rbenv/versions/2.1.0/bin/ruby extconf.rb 
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... no
Can't install RMagick 2.13.2. You must have ImageMagick 6.4.9 or later.

*** 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=/root/.rbenv/versions/2.1.0/bin/ruby

extconf failed, exit code 1

Gem files will remain installed in /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/rmagick-2.13.2 for inspection.
Results logged to /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/extensions/x86-linux/2.1.0-static/rmagick-2.13.2/gem_make.out
An error occurred while installing rmagick (2.13.2), and Bundler cannot continue.
Make sure that `gem install rmagick -v '2.13.2'` succeeds before bundling.

「Can’t install RMagick 2.13.2. You must have ImageMagick 6.4.9 or later.」から、バージョン 6.4.9 以上が必要なことがわかります。

3. ImageMagick-lib の依存性を無視して ImageMagick、ImageMagick-devel をインストールしたらダメ

RPM で ImageMagick-devel のインストールを試みました。そのとき、ImageMagick-lib が足りないためにできませんでした。

ImageMagick-lib をインストールすればそれで解決なのですが、RPM が見つかりません。仕方がありませんので一度依存性を無視して ImageMagick-devel をインストールしてみました。

その結果が、次のエラーです。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /root/.rbenv/versions/2.1.0/bin/ruby extconf.rb 
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
checking for stdint.h... *** 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=/root/.rbenv/versions/2.1.0/bin/ruby
/root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:587:in `try_cpp'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:1067:in `block in have_header'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:918:in `block in checking_for'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:351:in `block (2 levels) in postpone'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:321:in `open'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:351:in `block in postpone'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:321:in `open'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:347:in `postpone'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:917:in `checking_for'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:1066:in `have_header'
from extconf.rb:194:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/rmagick-2.13.2 for inspection.
Results logged to /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/extensions/x86-linux/2.1.0-static/rmagick-2.13.2/gem_make.out
An error occurred while installing rmagick (2.13.2), and Bundler cannot continue.
Make sure that `gem install rmagick -v '2.13.2'` succeeds before bundling.

「Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers.」というメッセージが、ImageMagick、ImageMagick-devel をインストールしているにもかかわらず、出ています。

メッセージに明言されておりませんが、依存性を無視してインストールした場合のメッセージですので、おそらくこれが原因と考えております。

4. 2 つ以上 ImageMagick があると「警告」

これは、エラーではございませんけれども。

RPM で依存性を無視してインストールしたものと、ソースをコンパイルして入れたものの 2 つが認識されてしまっておりますの。

そして、依存性無視の部分がエラーとなっております。

解決方法は、もちろん ImageMagick をひとつだけにすることですわね♪

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /root/.rbenv/versions/2.1.0/bin/ruby extconf.rb 
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... yes

Warning: Found more than one ImageMagick installation. This could cause problems at runtime.
         /usr/local/bin/Magick-config reports version 6.8.7 Q16 is installed in /usr/local
         /usr/bin/Magick-config reports version 6.8.8 Q16 is installed in /usr
Using 6.8.7 Q16 from /usr/local.

checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
checking for stdint.h... *** 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=/root/.rbenv/versions/2.1.0/bin/ruby
/root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:456:in `try_do': The compiler failed to generate an executable file. (RuntimeError)
You have to install development tools first.
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:587:in `try_cpp'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:1067:in `block in have_header'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:918:in `block in checking_for'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:351:in `block (2 levels) in postpone'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:321:in `open'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:351:in `block in postpone'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:321:in `open'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:347:in `postpone'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:917:in `checking_for'
from /root/.rbenv/versions/2.1.0/lib/ruby/2.1.0/mkmf.rb:1066:in `have_header'
from extconf.rb:194:in `<main>'

extconf failed, exit code 1

Gem files will remain installed in /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/rmagick-2.13.2 for inspection.
Results logged to /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/extensions/x86-linux/2.1.0-static/rmagick-2.13.2/gem_make.out
An error occurred while installing rmagick (2.13.2), and Bundler cannot continue.

Make sure that `gem install rmagick -v '2.13.2'` succeeds before bundling.

「Warning: Found more than one ImageMagick installation. This could cause problems at runtime.」2 つ以上インストールされていると、実行時に問題が発生するそうですわ♪

5. PKG_CONFIG_PATH が設定されていないからダメ

ソースをからインストールした ImageMagick を使用した時に発生いたしましたエラーです。

対処方法は、PKG_CONFIG_PATH を設定することですの。具体的には「export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 」とコマンドいたしました。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /root/.rbenv/versions/2.1.0/bin/ruby extconf.rb 
checking for Ruby version >= 1.8.5... yes
checking for gcc... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.13.2. Can't find MagickWand.h.
*** 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=/root/.rbenv/versions/2.1.0/bin/ruby

extconf failed, exit code 1

Gem files will remain installed in /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/rmagick-2.13.2 for inspection.
Results logged to /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/extensions/x86-linux/2.1.0-static/rmagick-2.13.2/gem_make.out
An error occurred while installing rmagick (2.13.2), and Bundler cannot continue.

Make sure that `gem install rmagick -v '2.13.2'` succeeds before bundling.

「Package MagickCore was not found in the pkg-config search path. Perhaps you should add the directory containing `MagickCore.pc’ to the PKG_CONFIG_PATH environment variable」を例に上げますと、PKG_CONFIG_PATH に MagickCore.pc へのパスが設定されていないために起きている、という理解でよさそうですわね。

成功時のログ

以上のエラーを経て、ようやく、bundle を使って RMagick を Gem インストールすることができました♪

そのときのログがこちらですわ♪

Your bundle is complete!
Gems in the groups development and test were not installed.
Use `bundle show [gemname]` to see where a bundled gem is installed.

ダイナミックリンクライブラリのパス設定がなくてbundle console エラー

bundle で RMagick を Gem インストールしましても、実はまだ問題が発生いたしました。

わたくし、はじめて使いました。「bundle console」です。

Ruby の何かができるようですけれども、よくわかりませんし、ここでは掘り下げません。次のようなコマンドを実行いたしました。

[root@localhost redmine]# bundle console
irb(main):001:0> require "RMagick"

そうしましたら、次のようなエラーが出ました。対処方法は、エラーの後で取り組みます。

LoadError: libMagickCore-6.Q16.so.1: cannot open shared object file: No such file or directory - /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/extensions/x86-linux/2.1.0-static/rmagick-2.13.2/RMagick2.so
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:251:in `require'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:251:in `block in require'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:236:in `load_dependency'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:251:in `require'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/rmagick-2.13.2/lib/RMagick.rb:11:in `<top (required)>'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:251:in `require'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:251:in `block in require'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:236:in `load_dependency'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/activesupport-3.2.16/lib/active_support/dependencies.rb:251:in `require'
from (irb):1
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/lib/bundler/cli.rb:666:in `console'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/lib/bundler/vendor/thor/command.rb:27:in `run'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/lib/bundler/vendor/thor/invocation.rb:121:in `invoke_command'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/lib/bundler/vendor/thor.rb:363:in `dispatch'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/lib/bundler/vendor/thor/base.rb:440:in `start'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/lib/bundler/cli.rb:10:in `start'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/bin/bundle:20:in `block in <top (required)>'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/lib/bundler/friendly_errors.rb:5:in `with_friendly_errors'
from /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/gems/bundler-1.5.2/bin/bundle:20:in `<top (required)>'
from /root/.rbenv/versions/2.1.0/bin/bundle:23:in `load'

エラーのメイン部分は「LoadError: libMagickCore-6.Q16.so.1: cannot open shared object file: No such file or directory – /root/.rbenv/versions/2.1.0/lib/ruby/gems/2.1.0/extensions/x86-linux/2.1.0-static/rmagick-2.13.2/RMagick2.so」ですわね。shared object file が開けない、と書かれております。これは、ファイルはあるのに鍵がかかっていて開けない、、、ではなく、ファイルそのものが見つからない、ですわね♪

対処方法は、ダイナミックリンクライブラリのパスを設定いたします!

といいましても、わたくし実は、よくわかっておりません。参考ページを参考に取り組みましたらできました♪

そのただしさは未検証ですけれども、一旦その方法を記録します。

新しく設定ファイルを作成します。もともと、 /etc/ld.so.conf という設定ファイルがございます。けれども、/etc/ld.so.conf.d/ に MySQL の設定ファイルがございましたので、同様に ImageMagick の設定ファイルを作れば有効にできると考えました。

vim /etc/ld.so.conf.d/ImageMagick.conf

中に書いた記述は次のとおりです。記述したディレクトリに ImageMagick の「.so」ファイルなどがございます。

/usr/local/lib

そして、反映コマンド

/sbin/ldconfig

最後に確認コマンドです。

/sbin/ldconfig -p | grep Magick

次のように、反映されていることが確認できました。

libMagickWand-6.Q16.so.1 (libc6) => /usr/local/lib/libMagickWand-6.Q16.so.1
libMagickWand-6.Q16.so (libc6) => /usr/local/lib/libMagickWand-6.Q16.so
libMagickCore-6.Q16.so.1 (libc6) => /usr/local/lib/libMagickCore-6.Q16.so.1
libMagickCore-6.Q16.so (libc6) => /usr/local/lib/libMagickCore-6.Q16.so
libMagick++-6.Q16.so.3 (libc6) => /usr/local/lib/libMagick++-6.Q16.so.3
libMagick++-6.Q16.so (libc6) => /usr/local/lib/libMagick++-6.Q16.so

では、もう一度 bundle console を試してみます!

[root@localhost redmine]# bundle console
irb(main):001:0> require "RMagick"
=> true

irb(main):002:0>

OK ですわね♪

おわりに

本投稿は、次の投稿の RMagick インストール部分をより詳細に見たものとなります。

先の投稿でも触れましたけれども、次のページに解決方法のほとんどが書かれておりました。大変たすかり、そして勉強になりましたの!以前もとりあげましたけれども、あらためてありがとう存じます♪

以上です。

コメントを残す