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 ./
コメントやシェアをお願いします!