AMD64 環境で Image::Magick インストールではまった・・・

会社のお仕事で、ちょっと古めの環境に Image::Magick をインストールするのに非常に苦労しました。ネットで検索しても全然情報がでてこなかったので、同じく苦労している方がいるかもしれないと言うことでメモを公開。

なんだか、RHEL3 × AMD64 環境はいろいろ苦労が多い気がするなぁ〜
RHEL4(CentOS4)だとこんなには苦労しないんだが・・・

- スポンサーリンク -

インストールエラー情報

取りあえず初めの手順はやっぱり cpan だよね。何も考えずにインストールしようとしたらエラーで入らず。

cpan> install Image::Magick
Running install for module Image::Magick
Running make for J/JC/JCRISTY/PerlMagick-6.32.tar.gz
Fetching with LWP:
  http://ftp.nara.wide.ad.jp/pub/CPAN/authors/id/J/JC/JCRISTY/PerlMagick-6.32.tar.gz
CPAN: Digest::SHA loaded ok
CPAN: Module::Signature loaded ok
WARNING: This key is not certified with a trusted signature!
Primary key fingerprint: 2E66 557A B97C 19C7 91AF  8E20 328D A867 450F 89EC
Signature for /root/.cpan/sources/authors/id/J/JC/JCRISTY/CHECKSUMS ok
Fetching with LWP:
  http://ftp.nara.wide.ad.jp/pub/CPAN/authors/id/J/JC/JCRISTY/CHECKSUMS

....snip....

Magick.xs:2122: 警告: 関数 `InitializeMagick' の暗黙の宣言
Magick.xs:2123: 警告: 関数 `SetWarningHandler' の暗黙の宣言
Magick.xs:2124: 警告: 関数 `SetErrorHandler' の暗黙の宣言
make: *** [Magick.o] エラー 1
  /usr/bin/make  -- NOT OK
Running make test
  Can't test without successful make
Running make install
  make had returned bad status, install seems impossible
Failed during this command:
  JCRISTY/PerlMagick-6.32.tar.gz               : make NO

インストール失敗。とりあえずサーバ環境として ImageMagick のインストール状況を見る。

rpm -qa|grep ImageMagick
ImageMagick-5.5.6-15

バージョンが古いので、新しいのをコンパイルしてみることにした。

cd /tmp/rpm/ImageMagick-6.3.5
make
/bin/sh ./libtool --silent --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I./magick -I./wand   -I/usr/include/freetype2 -I/usr/X11R6/include -I/usr/X11R6/include/X11 -I/usr/include/libxml2  -g -O2 -Wall -W -pthread -MT coders/coders_png_la-png.lo -MD -MP -MF coders/.deps/coders_png_la-png.Tpo -c -o coders/coders_png_la-png.lo `test -f 'coders/png.c' || echo './'`coders/png.c
In file included from coders/png.c:78:
/usr/local/include/zlib.h:82: redefinition of `struct z_stream_s'
/usr/local/include/zlib.h:982: conflicting types for `gzwrite'
/usr/include/zlib.h:705: previous declaration of `gzwrite'
/usr/local/include/zlib.h:1189: redefinition of `struct internal_state'
make: *** [coders/coders_png_la-png.lo] エラー 1

う〜ん、そもそも ImageMagick でコンパイルエラーがでる。いろいろバージョンを変更してみたけどダメ。仕方がないので rpm でいれてみようと思い立つ。
ネットでエラー情報検索してみたけど、RHEL3.x + AMD64系でコンパイルエラーになる場合アリと情報がでてたけど解決方法なしだった。他の Intel 系サーバと併せたバージョンを以下のように rpm でインストールしてみた。

rpm -ivh ImageMagick-5.5.6-18.x86_64.rpm
Preparing...                ########################################### [100%]
        file /usr/bin/animate from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/bin/composite from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/bin/conjure from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/bin/convert from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/bin/display from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/bin/identify from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/bin/import from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/bin/mogrify from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/bin/montage from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13
        file /usr/lib64/libMagick-5.5.6-Q16.so.0.0.0 from install of ImageMagick-5.5.6-18 conflicts with file from package ImageMagick-5.5.6-13

なんだか競合が発生。しょうがないので force で upgrade してみる。

rpm --force -U ImageMagick-5.5.6-18.x86_64.rpm
rpm -ivh ImageMagick-perl-5.5.6-18.x86_64.rpm
rpm -ivh ImageMagick-devel-5.5.6-18.x86_64.rpm
rpm -ivh ImageMagick-c++-5.5.6-18.x86_64.rpm
rpm -ivh ImageMagick-c++-devel-5.5.6-18.x86_64.rpm 

テストスクリプト書いてテストしてみると Image::Magick がないとおこられる。ムキーッ!

Can't locate Image/Magick.pm in @INC (@INC contains: /usr/local/lib/perl5/5.8.6/x86_64-linux-thread-multi /usr/local/lib/perl5/5.8.6 /usr/local/lib/perl5/site_perl/5.8.6/x86_64-linux-thread-multi /usr/local/lib/perl5/site_perl/5.8.6 /usr/local/lib/perl5/site_perl) at test.cgi line 4.
BEGIN failed--compilation aborted at test.cgi line 4.

rpm でインストールしたはずなのに・・・と思いつつ tar-ball からインストールを試みるもやっぱりダメ。

cd PerlMagick-6.32/
gcc -c  -I../ -I.. -I/usr/include/librsvg-2 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/gtk-2.0 -I/usr/include/graphviz -I/usr/include/freetype2 -I/usr/include/libxml2 -D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/gdbm -g -O2 -Wall -W -pthread -O2   -DVERSION=\"6.3.2\" -DXS_VERSION=\"6.3.2\" -fpic "-I/usr/local/lib/perl5/5.8.6/x86_64-linux-thread-multi/CORE"  -D_LARGE_FILES=1 -DHAVE_CONFIG_H Magick.c
Magick.xs:64:31: magick/MagickCore.h: そのようなファイルやディレクトリはありません
Magick.xs:154: 文法エラー が "MagickRealType" の前にあります
Magick.xs:154: 警告: struct や union の最後にセミコロンがありません
Magick.xs:161: 文法エラー が '*' トークンの前にあります
Magick.xs:161: 警告: `image_reference' の宣言で型がデフォルトの `int' とされました
Magick.xs:161: 警告: データ定義が型や記憶クラスを持っていません

....snip....

Magick.xs:10929: 警告: 変数 `message' は使われませんでした
Magick.xs:10856: 警告: 変数 `filename' は使われませんでした
Magick.c:10636: 警告: 変数 `ref' は使われませんでした
Magick.c:10629: 警告: 変数 `ix' は使われませんでした
Magick.xs: 関数 `boot_Image__Magick' 内:
Magick.xs:2122: 警告: 関数 `InitializeMagick' の暗黙の宣言
Magick.xs:2123: 警告: 関数 `SetWarningHandler' の暗黙の宣言
Magick.xs:2124: 警告: 関数 `SetErrorHandler' の暗黙の宣言
make: *** [Magick.o] エラー 1

find で Image::Magick を探してみる。rpm ではデフォルトでインストールされている perl の方にぶち込まれるみたい。よく考えれば当然か。

find / -name Magick.pm
/root/.cpan/build/PerlMagick-6.32/Magick.pm
/root/.cpan/build/PerlMagick-6.32/blib/lib/Image/Magick.pm
/usr/lib64/perl5/site_perl/5.8.0/Image/Magick.pm
/usr/local/lib/perl5/site_perl/5.8.6/GD/SecurityImage/Magick.pm

ということで、コンパイルできないものは仕方がないので、rpm でインストールされたものを /usr/local/lib/perl5 配下へコピーしてでっちあげ。
取りあえず動いてるので一件落着・・・という事にしてみる。

cd /usr/local/lib/perl5/site_perl/5.8.6/auto/Image
cp -rf /usr/lib64/perl5/site_perl/5.8.0/auto/Image/Magick ./
cd /usr/local/lib/perl5/site_perl/5.8.6/Image
cp -rf /usr/lib64/perl5/site_perl/5.8.0/Image/Magick.pm ./
- スポンサーリンク -