同事推荐这个库做图片服务器,一看作者是88年的,好小,在百度工作过,稍微看了一下,照着 zimg服务器搭建手记 安装,还是遇到一些麻烦,我使用的系统是 CentOS release 6.2,64bit。
安装依赖包 libmemcached,ImageMagick,openssl, libevent:
yum install gcc-c++ gcc automake git libmemcached-devel ImageMagick-devel openssl-devel libevent-devel
安装 cmake
如果使用 yum install cmake 安装,版本太低,编译libevhtp-1.2.6 会报错:
# cmake -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr/
CMake Error at CMakeLists.txt:1 (cmake_minimum_required):
CMake 2.8 or higher is required. You are running version 2.6.4
需要手动下载安装
wget http://www.cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
tar xvf cmake-2.8.10.2.tar.gz
cd cmake-2.8.10.2
./bootstrap --prefix=/usr && make && make install
wget https://github.com/ellzey/libevhtp/archive/1.2.6.tar.gz -O libevhtp-1.2.6.tar.gz
tar xvf libevhtp-1.2.6.tar.gz
cd libevhtp-1.2.6
cmake -DCMAKE_PREFIX_PATH=/usr -DCMAKE_INSTALL_PREFIX=/usr -DLIBEVENT_PTHREADS_LIBRARY=/usr/lib -DLIBEVENT_OPENSSL_LIBRARY=/usr/lib64/openssl/
make && make install
wget https://github.com/buaazp/zimg/archive/master.zip
unzip zimg-master.zip
cd zimg-master
make
报错:
cc -Wall -c -o zimg.o zimg.c
zimg.c:27:29: error: wand/MagickWand.h: No such file or directory
这个 Makefile 写的确实不是很专业,需要手动修改才可以编译通过,至少起码应该使用 automake或cmake。手动添加 MagickWand 头文件路径。然后链接的时候又报错:
zhttpd.o: In function `guess_type’:
zhttpd.c:(.text+0x28): undefined reference to `evutil_ascii_strcasecmp’
zhttpd.o: In function `guess_content_type’:
zhttpd.c:(.text+0xb8): undefined reference to `evutil_ascii_strcasecmp’
需要指定 -L/usr/lib 才行,下面是给Makefile打的补丁:
[root@dmzsrv01 zimg]# git diff Makefile
diff --git a/Makefile b/Makefile
index 315a8c4..05295b1 100644
--- a/Makefile
+++ b/Makefile
@@ -4,10 +4,10 @@ MAC = Darwin
ifeq ($(OS),Darwin)
LIBS = -levent -levent_openssl -levent_pthreads -lssl -lcrypto -levhtp -lMagickWand-6.Q16 -lmemcached
else
- LIBS = -levent -levent_openssl -levent_pthreads -lssl -lcrypto -levhtp -lMagickWand -lmemcached
+ LIBS = -L /usr/lib -levent -levent_openssl -levent_pthreads -lssl -lcrypto -levhtp -lMagickWand -lmemcached
endif
OBJS = zhttpd.o zspinlock.o zlog.o zmd5.o zutil.o zcache.o zimg.o main.o
-CFLAGS = -Wall
+CFLAGS = -Wall -g -I /usr/include/ImageMagick -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16
all: ${OBJS}
gcc ${CFLAGS} -o zimg ${OBJS} ${LIBS}
使用还是比较简单的,help 就可以了。需要注意的是,这个 zimg 不能运行两次,会 core dump,程序本身没处理好。最后,fork 这个项目,花了一会时间写 CMakeLists.txt 使用cmake编译,已经 pull request给作者。现在安装更方便了,在 Ubuntu 13.10 Server 测试通过:
sudo apt-get install cmake libssl-dev libevent-dev libmagickwand-dev libmemcached-dev
wget https://github.com/ellzey/libevhtp/archive/1.2.6.tar.gz
tar xvf libevhtp-1.2.6.tar.gz
cd libevhtp-1.2.6/
cmake .
make
sudo make install
cd ..
git clone https://github.com/lytsing/zimg
cd zimg/
cmake .
跑了 test目录下的测试脚本,发现性能还是挺不错的,目前这个版本还不支持访问认证以及https,支持https需要手动写,参考 libevhtp 提供的example添加不是难事。至于生产与访问文件的 url名称 是文件的 md5 值,可以在这基础上稍微做个变化,显得更专业一些。文件存储与MooseFS 结合倒是不错的选择。