カテゴリー
Linux

ImageMagick をソースからインストールして Ruby の Gem の RMagick が動くまで実践!

本投稿のクライマックス

「試行錯誤。最終手段その2!パッケージ管理できなくなることを許容してソースからインストールしてみます♪★【成功】★」を実践すれば OK ですの。

ただし、本投稿のやり方では ImageMagick の yum や RPM でのパッケージ管理はできません。

きっかけ。Gem パッケージのインストールが失敗する

Gem(Ruby のライブラリ)の依存関係解決ツールである Bundler を利用して、Redmine に必要な Gem をインストールしたいのです!

その時に、ImageMagick のそこそこバージョンが新しい物が必要でした><。簡単にインストール出来ませんでしたので、その奮闘記を残します!

Gem パッケージインストールできなかった具体的な記録

cd /var/lib/redmine/
bundle install --without development test

上述の bundle コマンドを試してみますと、、、エラーですの><。

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.

gem の rmagick がインストールされていないのか、バージョンが変なのか、そういった印象を受けます。エラーメッセージにあった、コマンドを実行してみます。

gem install rmagick -v '2.13.2'

エラーです><。どうやら CentOS にインストールした ImageMagic のバージョンが低いようですの><。

Can't install RMagick 2.13.2. You must have ImageMagick 6.4.9 or later.

調べてみましたところ、CentOS で yum インストールできるバージョンは次でした。

  • ImageMagick  6.2.8.0-15.el5_8

インストールしたいもの振り返り

本投稿のゴールです。ImageMagick だけでなく、もう一つインストールしたいのです。

  • ImageMagick 6.4.9  以上
  • ImageMagick-devel

ImageMagick-devel は ImageMagick と対になるパッケージですので、バージョンを揃えてインストールいたします。

参考ページ探しました♪

試行錯誤。RPM で最新の ImageMagick をインストールします!【失敗】

まずは yum でインストールした ImageMagick、ImageMagick-devel を削除します。

# 一旦 ImageMagick、ImageMagick-devel を削除
yum remove ImageMagick

続いて、作業場所に移動し、2つのパッケージをダウンロードし、最新版(6.8.8-4)をインストールしてみます。

# 作業場所に移動
cd /tmp/
# ダウンロード
wget ftp://ftp.imagemagick.org/pub/ImageMagick/linux/CentOS/i386/ImageMagick-6.8.8-4.i386.rpm
wget ftp://ftp.imagemagick.org/pub/ImageMagick/linux/CentOS/i386/ImageMagick-devel-6.8.8-4.i386.rpm
# インストール
rpm -Uvh ImageMagick-6.8.8-4.i386.rpm

ここでエラーです><。

エラー: 依存性の欠如:
	libfftw3.so.3 は ImageMagick-6.8.8-4.i386 に必要とされています

libfftw3.so.3、つまり fftw3 が足りないとのことですので、yum でインストールいたしました。

yum install fftw3

これで無事に ImageMagic をインストールできました。

# インストール
rpm -Uvh ImageMagick-6.8.8-4.i386.rpm

次は ImageMagic-devel ですけれども、、、次のエラーとなりました><。

エラー: 依存性の欠如:
	ImageMagick-libs = 6.8.8-4 は ImageMagick-devel-6.8.8-4.i386 に必要とされています
	freetype-devel は ImageMagick-devel-6.8.8-4.i386 に必要とされています
	jasper-devel は ImageMagick-devel-6.8.8-4.i386 に必要とされています

むむむ。か、解決すべく、これらをインストールします!

yum install freetype-devel jasper-devel

しかし、「ImageMagick-libs = 6.8.8-4 」がどうしても見つかりません。仕方ありませんので、ImageMagic を一旦アンインストールします。

# アンインストール
rpm -e ImageMagick-6.8.8-4
# アンインストールの確認
rpm -q ImageMagick.i386
パッケージ ImageMagick.i386 はインストールされていません。

試行錯誤。ImageMagic-lib をインストールするために、バージョンを落としてインストールを試みます!【失敗】

ImageMagic-lib のバージョンと揃った ImageMagic をインストールする必要がありそうです。

Fedora の RPM ページを見まして、ImageMagic-lib の最も新しいバージョンを探しました。そして同じバージョンの ImageMagic、ImageMagic-devel もダウンロードいたします。

# 別のバージョンのパッケージをダウンロード
wget ftp://rpmfind.net/linux/fedora/linux/development/rawhide/armhfp/os/Packages/i/ImageMagick-libs-6.8.7.0-4.fc21.armv7hl.rpm
wget ftp://rpmfind.net/linux/fedora/linux/development/rawhide/armhfp/os/Packages/i/ImageMagick-6.8.7.0-4.fc21.armv7hl.rpm
wget ftp://rpmfind.net/linux/fedora/linux/development/rawhide/armhfp/os/Packages/i/ImageMagick-devel-6.8.7.0-4.fc21.armv7hl.rpm

ではインストールしていきます。

rpm -Uvh ImageMagick-libs-6.8.7.0-4.fc21.armv7hl.rpm
rpm -Uvh ImageMagick-6.8.7.0-4.fc21.armv7hl.rpm
rpm -Uvh ImageMagick-devel-6.8.7.0-4.fc21.armv7hl.rpm

最初の「ImageMagick-libs」で出た「エラー: 依存性の欠如」で、26 のパッケージが足りないと言われました><。

  • ld-linux-armhf.so.3
  • ld-linux-armhf.so.3(GLIBC_2.4)
  • libHalf.so.11
  • libIex-2_1.so.11
  • libIexMath-2_1.so.11
  • libIlmImf-Imf_2_1.so.21
  • libIlmThread-2_1.so.11
  • libImath-2_1.so.11
  • libc.so.6(GLIBC_2.11)
  • libgcc_s.so.1(GCC_3.5)
  • libgio-2.0.so.0
  • libgs.so.9
  • libjpeg.so.62(LIBJPEG_6.2)
  • liblcms2.so.2
  • libltdl.so.7
  • liblzma.so.5
  • liblzma.so.5(XZ_5.0)
  • libpng16.so.16
  • libpng16.so.16(PNG16_0)
  • libtiff.so.5
  • libtiff.so.5(LIBTIFF_4.0)
  • libwebp.so.5
  • libxml2.so.2(LIBXML2_2.4.30)
  • libz.so.1(ZLIB_1.2.3.3)
  • rpmlib(FileDigests) <= 4.6.0-1
  • rpmlib(PayloadIsXz) <= 5.2-1

yum whatprovides で足りないソフトがどの yum パッケージに含まれているか調べる!【意味なかった】

これらをひとつひとつインストールしていくわけですが、どうやって調べましょうか?

できれば、yum でインストールしたいですわね。でも、足りていないものが、一体どのパッケージに含まれていか調べる必要があります。

次のページが参考になりそうです。ありがとう存じます。

結論から申し上げますと、うまく行きませんでした。10近くを以下のように調べたのですけれども、1つとしてヒットいたしませんでした。

yum whatprovides ld-linux-armhf.so.3
yum whatprovides */ld-linux-armhf.so.3
yum whatprovides *bin/ld-linux-armhf.so.3

なお、「*/ld-linux-armhf.so.3」や「*bin/ld-linux-armhf.so.3」は最初に実行した時に次のようなアドバイスが表示されたため実行したのでした。

Warning: 3.0.x versions of yum would erroneously match against filenames.
 You can use "*/ld-linux-armhf.so.3" and/or "*bin/ld-linux-armhf.so.3" to get that behaviour
No Matches found

試行錯誤。yum で RPM を指定してインストールを試みる!【失敗】

途方に暮れてから、気を取り直し、またいろいろ調べて目に入ったページですわ。ヒントになるかしら!と思ったのは次の部分です。

  • yum install RPM名
    指定したRPMをインストールする。

早速、ダウンロードしたもののインストールできる気配のない ImageMagick-libs で試してみました。

[root@localhost tmp]# yum install ImageMagick-libs-6.8.7.0-4.fc21.armv7hl.rpm
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * epel: ftp.tsukuba.wide.ad.jp
 * extras: www.ftp.ne.jp
 * remi: remi.kazukioishi.net
 * rpmforge: mirror-fpt-telecom.fpt.net
 * updates: www.ftp.ne.jp
Setting up Install Process
Examining ImageMagick-libs-6.8.7.0-4.fc21.armv7hl.rpm: ImageMagick-libs-6.8.7.0-4.fc21.armv7hl
Cannot add package ImageMagick-libs-6.8.7.0-4.fc21.armv7hl.rpm to transaction. Not a compatible architecture: armv7hl
Nothing to do
[root@localhost tmp]#

「Not a compatible architecture: armv7hl」が気になります。。。もしかして、CentOS 5.10、32bit の OS にこの RPM はインストールすることができないのではないでしょうか?そのため、さきほど yum whatprovides でもまったく情報が得られなかった、、、のではないかしら?

今度は、最初にインストールしようとした、ImageMagick-devel の最新版で同じ操作をしてみました。そうしますと、単純に ImageMagick-libs が無いと言われます。「Not a compatible architecture」ではございません。

[root@localhost tmp]# yum install ImageMagick-devel-6.8.8-4.i386.rpm
…略…
Error: Missing Dependency: ImageMagick-libs = 6.8.8-4 is needed by package ImageMagick-devel-6.8.8-4.i386 (/ImageMagick-devel-6.8.8-4.i386)
Error: Missing Dependency: ImageMagick = 6.8.8-4 is needed by package ImageMagick-devel-6.8.8-4.i386 (/ImageMagick-devel-6.8.8-4.i386)
 You could try using --skip-broken to work around the problem
 You could try running: package-cleanup --problems
                        package-cleanup --dupes
                        rpm -Va --nofiles --nodigest
[root@localhost tmp]#

試行錯誤。package-cleanup をインストールして依存性にどこか問題がないか試しました!【効果なし】

先ほどのエラー表示の最後、「package-cleanup –problems」「package-cleanup –dupes」「rpm -Va –nofiles –nodigest」が気になりました。rpm -V は検査ですのでなにかが変わるようなものではなさそうです。実行してみましょう。

その前に、「package-cleanup」は yum-utils に含まれているそうですので、こちらをインストールいたしました。

yum install yum-utils

それでは実行してみましょう。。。特にエラー表示はされませんわね。。。

[root@localhost tmp]# package-cleanup --problems
Setting up yum
Reading local RPM database
Processing all local requires
No problems found
[root@localhost tmp]# package-cleanup --dupes
Setting up yum
[root@localhost tmp]# rpm -Va --nofiles --nodigest
[root@localhost tmp]#

わかりません><。

試行錯誤。最終手段その1!依存性を無視して RPM インストールしてみます♪【失敗】

  • 依存性を無視してインストールする
  • パッケージ管理できなくなることを許容してソースからインストールする

いよいよこれらを試そうと思います。まずは、パッとできる依存性の無視からです。

まずは素直にインストールしてみます。

[root@localhost tmp]# rpm -ivh ImageMagick-6.8.8-4.i386.rpm 
準備中...                ########################################### [100%]
   1:ImageMagick            ########################################### [100%]
[root@localhost tmp]# rpm -ivh ImageMagick-devel-6.8.8-4.i386.rpm
エラー: 依存性の欠如:
	ImageMagick-libs = 6.8.8-4 は ImageMagick-devel-6.8.8-4.i386 に必要とされています

ImageMagick はインストール出来ましたが、ImageMagick-devel は libs が無いため失敗しました。予想通りです。

そこで、–nodebs を付けてインストールしました。

[root@localhost tmp]# rpm -ivh --nodeps ImageMagick-devel-6.8.8-4.i386.rpm
準備中...                ########################################### [100%]
   1:ImageMagick-devel      ########################################### [100%]

インストール出来ました。そして、yum で確認しました。パッケージ管理できていることがわかります。

[root@localhost tmp]# yum list installed | grep ImageMagick
ImageMagick.i386                     6.8.8-4                           installed
ImageMagick-devel.i386               6.8.8-4                           installed
[root@localhost tmp]#

また、アンインストールができる、RPM でもアンインストールされていることも確かめました。

[root@localhost tmp]# yum remove ImageMagick
…略…
Removed:
  ImageMagick.i386 0:6.8.8-4                                                                            

Dependency Removed:
  ImageMagick-devel.i386 0:6.8.8-4                                                                      

Complete!
[root@localhost tmp]# rpm -q ImageMagick-devel-6.8.8-4.i386.rpm
パッケージ ImageMagick-devel-6.8.8-4.i386.rpm はインストールされていません。
[root@localhost tmp]# rpm -q ImageMagick-6.8.8-4.i386.rpm
パッケージ ImageMagick-6.8.8-4.i386.rpm はインストールされていません。
[root@localhost tmp]#

この後、Gem パッケージの RMagick のインストールを試みましたが、エラーでダメでしたの><。

この方法は使えません!

試行錯誤。最終手段その2!パッケージ管理できなくなることを許容してソースからインストールしてみます♪★【成功】★

ポイントです。

以下のコマンドでインストール出来ました♪

が、その前に、./configure の結果を見ますと、このままですと PNG 画像が扱えません。

                  Option                        Value
-------------------------------------------------------------------------------
…略…
PNG               --with-png=yes          no

ぜひとも PNG 画像も扱いたく思います。そこで、事前に libpng-devel を yum インストールします。

yum install libpng-devel

そして、./configure をやり直すのですわ。

最初からコマンドをまとめますと、ImageMagick 6.8.7-10 インストールは次で完了できました♪

cd ~
wget http://sourceforge.net/projects/imagemagick/files/old-sources/6.x/6.8/ImageMagick-6.8.7-10.tar.gz/download
tar xzf ImageMagick-6.8.7-10.tar.gz
cd ImageMagick-6.8.7-10
./configure
make
make install

確認してみましょう。

# 確認用に適当に画像をコピーして入手
cp -a /var/www/icons/world2.png /tmp/world2.png
# ImageMagick による変換
convert world2.png world2.jpg

これでエラーが出ず、world2.jpg が作成されました。どうやら成功ですわね♪

Gem パッケージの RMagick のインストール、試すところまでやってみますの!

そしてこの後、Gem パッケージの RMagick のインストールを試みましたが、エラーでダメでしたの><。

しかし、今回は対処ができそうです。PKG_CONFIG_PATH を設定すれば、きっとうまくいきますわ。

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

PKG_CONFIG_PATH を設定しました。少し不安なことがございます。exit 後、設定したパスはリセットされてしまいます。大丈夫でしょうか?bundle 時のみこのパス設定が必要なのであればこれでよいですわね。

わかりませんのでここでメモのみいたしまして、続けます。

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

こうして、無事に bundle で RMagic をインストールすることができました!

続いて、bundle console で試してみますと、やはりエラーが!

[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'
…略…

これは、ダイナミックリンクライブラリのパスが設定されいないからだそうですの。

次のように設定しました。/etc/ld.so.conf に設定しても良いのですけれども、/etc/ld.so.conf.d/ に設定ファイルを置くこともできるようですのでこちらに新規ファイルを作成する方法をとりました。

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

次の内容を書きました。この場所に、ImageMagick の so ファイルがございます。

/usr/local/lib

反映いたしましょう。

/sbin/ldconfig

確認いたしました。

/sbin/ldconfig -p | grep Magick

次のように結果が表示されました。OK ですわね♪

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>

やりました!成功ですの!これで、ソースからの ImageMagick インストールが成功したと、そう言えますわね♪

おわりに

本投稿は、Redmine をインストールしたいのですけれども、Ruby を触ったことがありませんから Ruby のインストールから。Gem も触ったことありませんから、それも触ります。

そんな中で、ImageMagick のバージョンが低いために、bundle でエラーが発生、次に進めない事態に躓いておりました。

そこで、本投稿で満足いくまで調べました。

最後に、次のページのおかげでインストールと動作の確認をすることができました。もう一度御礼申し上げます。ありがとう存じます!

これでようやく、Redmine 2.4 のインストールを続けることができますの♪

以上です。

「ImageMagick をソースからインストールして Ruby の Gem の RMagick が動くまで実践!」への1件の返信