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 でインストールして下さい。
rpmbuild 環境の準備
rpmbuild用のユーザーにスイッチ
作業ディレクトリの作成
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の のようなパラメータを指定することで画像を動的にリサイズとかしてくれるモジュールです。元?livedoor ラボ「EDGE」がオープンソースとしてGoogleCode上で公開しています。 は ドキュメントにそって行えば大抵は問題ないはずです。
依存パッケージのインストール
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
確認
small_light_module (shared) が出力されていることを確認できたら無事完了です。 使い方はに記載されているのでそちらを見たほうが早いと思います。
参考