ImageMagick + 画像サムネイル作成 Apache モジュール SMALL LIGHT をインストール

notoです。 cookpadの「tofu」のような画像キャッシュサーバを作る機会があるとかないとか言われているので、small_light でも検証してみようとインストールしてみました。

構成は、Short-term Edge Cache (フロントサーバでの一時キャッシュ) + Apache(small_light) を想定しています。

環境

  • CentOS 6.2 (64bit)
  • Apache 2.2.15
  • ImageMagick 6.7.6
  • small_light 1.1.1

ImageMagickのインストール

yumでインストールできるバージョンが古い & ImageMagickはリリース頻度が高い為、rpmbuildしてインストールします。

rpmbuild用のユーザー作成

rootで rpmbuildを行うとシステムにダメージ与える可能性がある為、専用のユーザーを作成します。 rpmbuild がインストールされていない場合は、yum でインストールして下さい。

1
useradd rpmbuilder

rpmbuild 環境の準備

rpmbuild用のユーザーにスイッチ

1
su rpmbuilder

作業ディレクトリの作成

1
2
mkdir -p ~/rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
echo "%_topdir $HOME/rpm" >> $HOME/.rpmmacros

ImageMagickのsrc.rpmをダウンロード

1
2
wget http://www.imagemagick.org/download/linux/SRPMS/ImageMagick-6.7.6-9.src.rpm
rpm -Uvh ImageMagick-6.7.6-9.src.rpm

src.rpmは以下のURLで確認してください。

http://www.imagemagick.org/download/linux/SRPMS/

specファイルの編集

ImageMagickのパフォーマンス低下防止の為、openmpを無効化します。 また、openmpを有効化すると small_light の makeでこけます。

1
2
3
4
5
6
7
cd ~/rpm/SPECS/
vi ImageMagick.spec
155行目あたり
%configure --enable-shared \
  --disable-static \
  --disable-openmp \  ← 追加
  ~ 中略 ~

rpmbuild

ビルド依存性の失敗することは分かっていますがビルドします。

1
rpmbuild -bb ImageMagick.spec

はいはい。ビルド依存性の失敗。ビルド依存性の失敗。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
エラー: ビルド依存性の失敗:
  bzip2-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  libtiff-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  giflib-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  ghostscript-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  djvulibre-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  libwmf-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  jasper-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  libtool-ltdl-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  libXext-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  libXt-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  lcms-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  librsvg2-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています
  OpenEXR-devel は ImageMagick-6.7.6-9.x86_64 に必要とされています

依存パッケージのインストール

必要なパッケージをインストールします。 djvulibre-devel のみ標準リポジトリではインストールできない為、rpmforgeを利用しています。

1
sudo yum install --enablerepo=rpmforge bzip2-devel freetype-devel libtiff-devel giflib-devel perl ghostscript-devel libwmf-devel libtool-ltdl-devel libX11-devel libXext-devel libXt-devel lcms-devel librsvg2-devel jasper-devel OpenEXR-devel djvulibre-devel

再度rpmbuild

1
rpmbuild -bb ImageMagick.spec

インストール

出来上がったrpmファイルをインストールします。

1
2
cd ../RPMS/x86_64/
sudo rpm -Uvh  ImageMagick-6.7.6-9.x86_64.rpm  ImageMagick-c++-6.7.6-9.x86_64.rpm ImageMagick-devel-6.7.6-9.x86_64.rpm ImageMagick-c++-devel-6.7.6-9.x86_64.rpm ImageMagick-djvu-6.7.6-9.x86_64.rpm ImageMagick-doc-6.7.6-9.x86_64.rpm ImageMagick-perl-6.7.6-9.x86_64.rpm

確認

1
2
3
4
convert --version
Version: ImageMagick 6.7.6-9 2012-05-18 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2012 ImageMagick Studio LLC
Features:

SMALL LIGHTのインストール

small_light は、少し前に話題になったCookPadの tofu のようなパラメータを指定することで画像を動的にリサイズとかしてくれるモジュールです。元?livedoor ラボ「EDGE」がオープンソースとしてGoogleCode上で公開しています。 smalllightのインストール は ドキュメントにそって行えば大抵は問題ないはずです。

依存パッケージのインストール

1
yum install --enablerepo=remi,epel httpd-devel imlib2-devel

libjpeg tarboのインストール

遅いより速いほうがいい!ということで libjpeg tarbo をインストールします。

1
2
wget http://sourceforge.net/projects/libjpeg-turbo/files/1.2.0/libjpeg-turbo-1.2.0.x86_64.rpm/download
rpm -Uvh libjpeg-turbo-1.2.0.x86_64.rpm

ソースからいれたい方は以下のURLからダウンロードしてください。

http://sourceforge.net/projects/libjpeg-turbo/files/

libjpegの確認

1
ldd /usr/lib64/libMagick*|grep jpeg

libjpeg tarbo への切り替え

1
2
echo /opt/libjpeg-turbo/lib64/ > /etc/ld.so.conf.d/libjpeg-turbo.conf
ldconfig

libjpegの確認

1
2
3
4
5
6
7
8
9
10
11
ldd /usr/lib64/libMagick*|grep jpeg

libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007fa23d141000)
libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007f0f99e9f000)
libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007f71e69cc000)
libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007facbdf95000)
libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007ff7c823f000)
libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007fa045bbd000)
libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007fd0af276000)
libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007fe7e5a21000)
libjpeg.so.62 => /opt/libjpeg-turbo/lib64/libjpeg.so.62 (0x00007f09969b0000)

SMALL LIGHTのインストール

1
2
3
4
5
6
7
cd /usr/local/src
wget http://smalllight.googlecode.com/files/mod_small_light-1.1.1.tar.gz
tar zxf mod_small_light-1.1.1.tar.gz
cd mod_small_light-1.1.1
./configure --with-apxs=/usr/sbin/apxs
make
make install

makeで失敗する場合

ボクの場合は一度 make で失敗しました。 現象は Apacheの動的画像リサイズモジュール「smalllight」のmakeが通らなかったのを直してみた。 と同じだと思います。

1
2
3
4
5
6
7
8
9
10
11
/usr/sbin/apxs -c -DENABLE_IMLIB2 -DENABLE_WAND -DENABLE_JPEG -ljpeg `/usr/bin/imlib2-config --cflags` `/usr/bin/imlib2-config --libs` `/usr/bin/Wand-config --cppflags` `/usr/bin/Wand-config --libs` \
        mod_small_light.c mod_small_light_*.c
apxs:Error: Unknown option: f.
Usage: apxs -g [-S <var>=] -n
       apxs -q [-S <var>=]  ...
       apxs -c [-S <var>=] [-o ] [-D [=]]
               [-I ] [-L ] [-l ] [-Wc,]
               [-Wl,] [-p]  ...
       apxs -i [-S <var>=] [-a] [-A] [-n ]  ...
       apxs -e [-S <var>=] [-a] [-A] [-n ]  ...
make: *** [all] エラー 1

上記エラーが出力されたら、ImageMagickのopenmpが有効になっていないか確認して下さい。 きっと有効になっているので無効化後、small_lightのインストールを行って下さい。

パーミッションの変更

1
chmod 755 /usr/lib64/httpd/modules/mod_small_light.so

確認

1
httpd -M

small_light_module (shared) が出力されていることを確認できたら無事完了です。 使い方はsmall_light wikiに記載されているのでそちらを見たほうが早いと思います。

参考

Comments