IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    试用 zimg服务器

    lytsing发表于 2013-12-20 14:43:27
    love 0

    同事推荐这个库做图片服务器,一看作者是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 结合倒是不错的选择。



沪ICP备19023445号-2号
友情链接