Apacheの動的画像リサイズモジュール「smalllight」のmakeが通らなかったのを直してみた。
画像のリサイズを動的に行いたいとの要望があり、ミドルウェアで吸収できたら良いよねーということで、
クックパッドさんの「mod_tofu」とかいいなぁーと思っていたら、ライブドアさんから求めていたモジュールが
出ていたので、そちらを評価するために導入調査していたところ、makeが通らなかったので、その調査背景と対策方法を。。。
ちなみに、かなりの環境依存っぽいので、あまり当てはまらない方の方が多い気がします。。。(^_^;)
本当にこれでいいのかは不明で、通ったということだけで、アヤシイところ等不明な点をツッコミ頂くと幸いです。
導入方法については、xcirさんがまとめられていますので、そちらを基本参考に頂ければと思います。
OSのバージョンが違うこともあってか、ほとんどEPELリポジトリで対応が出来ました。(ibjpeg-turboは入れました)
■環境
Scientific Linux 6.0 x86_64(アップデートして6.1にも試してみました)
Apache 2.2.15(yumで導入)
EPELリポジトリは、http://download.fedora.redhat.com/pub/epel/6/x86_64/epel-release-6-5.noarch.rpm を使用。
使用マザー: ASUS P7F-M(intel3420 1156 DDR3 mATX)
CPU:Core i3-560
■現象
make後に不明なオプションと怒られる。。。
./configure --with-apxs=/usr/sbin/apxs make /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>=<val>] -n <modname> apxs -q [-S <var>=<val>] <query> ... apxs -c [-S <var>=<val>] [-o <dsofile>] [-D <name>[=<value>]] [-I <incdir>] [-L <libdir>] [-l <libname>] [-Wc,<flags>] [-Wl,<flags>] [-p] <files> ... apxs -i [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ... apxs -e [-S <var>=<val>] [-a] [-A] [-n <modname>] <dsofile> ... make: *** [all] エラー 1
ここから、気づくまでにいろいろかかりましたが。。。(ImageMagick最新にしてみたりとか。。。imlib2最新にしてみたりとか。。。)
そもそも、makeのオプションおかしいんだからと、改めて見直す。。。
./configureで作成されたMakefile
APXS=/usr/sbin/apxs ifneq ("/usr/bin/imlib2-config","") IMLIB2_INCLUDES=`/usr/bin/imlib2-config --cflags` IMLIB2_LIBS=`/usr/bin/imlib2-config --libs` endif ifneq ("/usr/bin/Wand-config","") WAND_INCLUDES=`/usr/bin/Wand-config --cppflags` WAND_LIBS=`/usr/bin/Wand-config --libs` endif CFLAGS=-DENABLE_IMLIB2 -DENABLE_WAND -DENABLE_JPEG LIBS=-ljpeg all: $(APXS) -c $(CFLAGS) $(LIBS) $(IMLIB2_INCLUDES) $(IMLIB2_LIBS) $(WAND_INCLUDES) $(WAND_LIBS) \ mod_small_light.c mod_small_light_*.c install: $(APXS) -ia mod_small_light.la clean: rm -rf *.o *.a *.so *.lo *.la *.slo a.out .libs .deps distclean: clean rm -rf Makefile config.cache config.log config.status autom4te.cache $(PACKAGETGZ) $(PACKAGEDIR) dist: mkdir $(PACKAGEDIR) autoconf cp mod_small_light.c mod_small_light.h mod_small_light_*.c mod_small_light_*.h $(PACKAGEDIR) cp configure configure.in Makefile.in README README.* LICENSE ChangeLog $(PACKAGEDIR) tar cvzf $(PACKAGETGZ) $(PACKAGEDIR) rm -rf $(PACKAGEDIR)
apxsのモジュール追加処理がおかしいので、
そこだけ、抜き出して実行しても、そりゃ、上と同じ結果。。。っていうかそもそも各変数に何入ってるの??と調べて解決に至りました。
まずは、IMLIB2_INCLUDESから。。。
# /usr/bin/imlib2-config --cflags
うげぇ。。。何もない。。。まぁ、とりあえず無視して、
IMLIB2_LIBS と。。。
# /usr/bin/imlib2-config --libs -lImlib2 -lfreetype -lX11 -lXext -ldl -lm
ふむふむ。
WAND_INCLUDEこれは。。。
# /usr/bin/Wand-config --cppflags -fopenmp -I/usr/include/ImageMagick
おぉ。。。
WAND_LIBSを念の為。。。
# /usr/bin/Wand-config --libs -lMagickWand -lMagickCore
ということで、WAND_INCLUDEが返す環境変数で、apxsが解釈できないものが入っているのが原因ですねと。。。
そもそも -f openmpオプションをちゃんと使えるようにしたほうがよいというか、(並列系のopenmpだよね??)
どうしたらいいかわからないので、先にapxsが通るかをチェック。。。
# usr/sbin/apxs -c '-lImlib2 -lfreetype -lX11 -lXext -ldl -lm' '-lMagickWand -lMagickCore' '-I/usr/include/ImageMagick' -ljpeg mod_small_light.c mod_small_light_*.c /usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wformat-security -fno-strict-aliasing -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/include/apr-1 -I/usr/include/ImageMagick -c -o mod_small_light.lo mod_small_light.c && touch mod_small_light.slo /usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wformat-security -fno-strict-aliasing -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/include/apr-1 -I/usr/include/ImageMagick -c -o mod_small_light_dummy.lo mod_small_light_dummy.c && touch mod_small_light_dummy.slo mod_small_light_dummy.c: In function ‘small_light_filter_dummy_receive_data’: mod_small_light_dummy.c:71: 警告: format ‘%d’ expects type ‘int’, but argument 7 has type ‘apr_size_t’ mod_small_light_dummy.c: In function ‘small_light_filter_dummy_output_data’: mod_small_light_dummy.c:89: 警告: pointer targets in passing argument 1 of ‘apr_bucket_pool_create’ differ in signedness /usr/include/apr-1/apr_buckets.h:1373: note: expected ‘const char *’ but argument is of type ‘unsigned char *’ /usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wformat-security -fno-strict-aliasing -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/include/apr-1 -I/usr/include/ImageMagick -c -o mod_small_light_ext_jpeg.lo mod_small_light_ext_jpeg.c && touch mod_small_light_ext_jpeg.slo mod_small_light_ext_jpeg.c: In function ‘load_exif_from_memory’: mod_small_light_ext_jpeg.c:70: 警告: operation on ‘data’ may be undefined mod_small_light_ext_jpeg.c:88: 警告: operation on ‘data’ may be undefined mod_small_light_ext_jpeg.c: In function ‘exif_brigade_insert_tail’: mod_small_light_ext_jpeg.c:125: 警告: pointer targets in passing argument 1 of ‘apr_bucket_pool_create’ differ in signedness /usr/include/apr-1/apr_buckets.h:1373: note: expected ‘const char *’ but argument is of type ‘unsigned char *’ /usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wformat-security -fno-strict-aliasing -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/include/apr-1 -I/usr/include/ImageMagick -c -o mod_small_light_imagemagick.lo mod_small_light_imagemagick.c && touch mod_small_light_imagemagick.slo /usr/lib64/apr-1/build/libtool --silent --mode=compile gcc -prefer-pic -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic -Wformat-security -fno-strict-aliasing -DLINUX=2 -D_REENTRANT -D_GNU_SOURCE -pthread -I/usr/include/httpd -I/usr/include/apr-1 -I/usr/include/apr-1 -I/usr/include/ImageMagick -c -o mod_small_light_imlib2.lo mod_small_light_imlib2.c && touch mod_small_light_imlib2.slo /usr/lib64/apr-1/build/libtool --silent --mode=link gcc -o mod_small_light.la -lImlib2 -lfreetype -lX11 -lXext -ldl -lm -lMagickWand -lMagickCore -ljpeg -rpath /usr/lib64/httpd/modules -module -avoid-version mod_small_light_imlib2.lo mod_small_light_imagemagick.lo mod_small_light_ext_jpeg.lo mod_small_light_dummy.lo mod_small_light.lo
おぉ。。。通った。。。
なので、無理やりMakefileを変更してとりあえず、installしました。これはおかしいとか、こうすればいいのにみたいなのがありましたら、ご教授下さいm(_ _)m
APXS=/usr/sbin/apxs PACKAGE=mod_small_light VERSION=1.1.1 PACKAGEDIR=$(PACKAGE)-$(VERSION) PACKAGETGZ=$(PACKAGE)-$(VERSION).tar.gz all: /usr/sbin/apxs -c '-lImlib2 -lfreetype -lX11 -lXext -ldl -lm' '-lMagickWand -lMagickCore' '-I/usr/include/ImageMagick' -ljpeg mod_small_light.c mod_small_light_*.c install: $(APXS) -ia mod_small_light.la clean: rm -rf *.o *.a *.so *.lo *.la *.slo a.out .libs .deps distclean: clean rm -rf Makefile config.cache config.log config.status autom4te.cache $(PACKAGETGZ) $(PACKAGEDIR) dist: mkdir $(PACKAGEDIR) autoconf cp mod_small_light.c mod_small_light.h mod_small_light_*.c mod_small_light_*.h $(PACKAGEDIR) cp configure configure.in Makefile.in README README.* LICENSE ChangeLog $(PACKAGEDIR) tar cvzf $(PACKAGETGZ) $(PACKAGEDIR) rm -rf $(PACKAGEDIR)