CentOSのImageMagickのバグ対応【4/11追記アリ】CentOS5上で運用しているMyNETSのサイトで今年に入ってからしばしば高負荷が発生してアクセス障害になっていたので、友人らと原因を調査。不幸中の幸いというか高負荷発生時に友人がOSにログインしていたため原因が判明。結果、あるパターンの壊れたアニメGIFのファイルがアップロードされた際にImageMagickが変換しようとして高負荷状態を発生させていた。該当ファイルを抽出し、他のCentOS5のマシンで手動でconvertして再現確認。WindowsやMacOSX,Ubuntuでは該当ファイルはconvertでエラー表示で正しく処理中断になるため、CentOS用パッケージの問題と推測。

 既にこちらの内容は役に立ちません
 最新のx86_64版の話題はこちらを参照してください
http://blog.isnext.net/issy/archives/362

■ImageMagickのアップデート
CentOSはextraとepelがリポジトリ追加されているが、ImageMagickは

  1. # rpm -q ImageMagick
  2. ImageMagick-6.2.8.0-4.el5_1.1

と、最新の6.6.0-10には遠く及ばない。

しかたがないので、最新版のtarballを落としてきてインストールしてみた。

  1. # cd ~/download
  2. # wget http://downloads.sourceforge.net/project/imagemagick/ImageMagick/00-6.6.0/ImageMagick-6.6.0-10.tar.gz?use_mirror=jaist
  3. # cd ImageMagick-6.6.0-10
  4. # ./configure
  5. # make
  6. # make install

いろいろ警告は表示されるものの一応インストールできた。…が

  1. # convert broken.gif hoge.gif

とすると変わらず高負荷発生。
おそらく警告が出ていた中に対策に必要なものがあるということだろう。
(4/11追記:コンパイルして導入するとデフォルトでは/usr/local/bin/convertにインストールされるため、CentOSのデフォルト/usr/bin/convertと異なり、そもそもここでの動作確認は適切な状況ではなかった

しかたないので、Fedora用に用意されているrpmファイルをダウンロードしてインストールする。

  1. # cd ~/download
  2. # wget http://www.imagemagick.org/download/linux/fedora/i386/ImageMagick-6.6.0-10.i386.rpm
  3.  
  4. # rpm -Uvh ImageMagick-6.6.0-10.i386.rpm
  5. エラー: 依存性の欠如:
  6. libHalf.so.4 は ImageMagick-6.6.0-10.i386 に必要とされています
  7. libIex.so.4 は ImageMagick-6.6.0-10.i386 に必要とされています
  8. libIlmImf.so.4 は ImageMagick-6.6.0-10.i386 に必要とされています
  9. libImath.so.4 は ImageMagick-6.6.0-10.i386 に必要とされています
  10. libcdt.so.4 は ImageMagick-6.6.0-10.i386 に必要とされています
  11. libdjvulibre.so.21 は ImageMagick-6.6.0-10.i386 に必要とされています
  12. libfftw3.so.3 は ImageMagick-6.6.0-10.i386 に必要とされています
  13. libgraph.so.4 は ImageMagick-6.6.0-10.i386 に必要とされています
  14. libgvc.so.5 は ImageMagick-6.6.0-10.i386 に必要とされています
  15. libltdl.so.3 は ImageMagick-6.6.0-10.i386 に必要とされています

ということで不足しているパッケージの追加をすべく
http://rpm.pbone.net/

で必要なライブラリを含むパッケージの在りかを探す。
必要なのは
OpenEXR
fftw3
Graphviz
djvulibre

epelでなんとかなるものはそこからinstall

  1. # yum install openexr fftw3

graphvizは最新版が必要なので、本家のCentOS用リポジトリを追加。

  1. # wget http://www.graphviz.org/graphviz-rhel.repo
  2. # mv graphviz-rhel.repo /etc/yum.repos.d/
  3. # yum install graphviz

djvulibreはdagリポジトリにあるのでそこから追加。

  1. # vi /etc/yum.repos.d/dag.repo
  2. [dag]
  3. name=Dag RPM Repository for CentOS5
  4. baseurl=http://ftp.riken.jp/Linux/dag/redhat/el5/en/$basearch/dag/
  5. enabled=0
  6. gpgcheck=1
  7.  
  8. # rpm --import http://ftp.riken.jp/Linux/dag/RPM-GPG-KEY.dag.txt
  9. # yum --enablerepo=dag install djvulibre

これで再度(追記を確認してください。これやっちゃいけません)

  1. # rpm -Uvh ImageMagick-6.6.0-10.i386.rpm

今度は無事に導入。

  1. # convert broken.gif hoge.gif
  2. convert: negative or zero image size `broken.gif' @ error/gif.c/ReadGIFImage/1237.
  3. convert: missing an image filename `hoge.gif' @ error/convert.c/ConvertImageCommand/2941.

正しくエラーになったので、これでOK。
これCentOSへのDoSになるんで報告すべきか悩み中。

…と思ったら、MyNETSで動作させてみたところ、GIF以外がリサイズできなくなってることが判明。
正しく動作していないのは、Fedora用を使ったからなのか、バージョンアップでコマンド変更があったのか。
追跡調査中。

— 4/11追記 —
調査の結果、Uvhでインストールしてはいけないことを確認。
そりゃそうか。別OS用だしね。

入れ替え時にやること。
既存のImageMagickをアンインストール

  1. # yum remove ImageMagick

アンインストールの確認

  1. # rpm -q ImageMagick
  2. パッケージ ImageMagick はインストールされていません。

一応他に入っていないか、残存libがないか確認

  1. # updatedb
  2. # localte convert
  3. # locate libMagick

CentOSではconvertsは/usr/bin/convertになるので
コンパイルインストール等を行って他にあったら残存lib含めて消しておく

  1. # rm -f /usr/local/bin/convert
  2. # rm -f /usr/local/lib/libMagick*

Fedora用最新版を新規インストール

  1. # rpm -ivh ImageMagick-6.6.0-10.i386.rpm

念のため再起動

  1. # reboot

これで正しくMyNETSで動作することを確認しました。
CentOSでアニメGIF投稿を受け付けるWebアプリで画像変換にImageMadickを利用している場合には、最新版へのアップデートをオススメします。

, ,
とりあえず付けておく無駄ではなかったなまぁまぁ読めたちょっと役に立ったかなかなり良かったかも (まだ評価されていません)
Loading...
Trackback

no comment untill now

Sorry, comments closed.