如何编译安装

SF1R安装包包括二进制文件和所有依赖的动态链接库,还有一些资源文件, 这些文件主要是用于查询纠错,TG,命名实体识别,文本分类等特征。

依赖包安装

需要在打包和编译之前安装的依赖包如下:

cmake build-essential ruby rubygems ruby1.8-dev rake
libxml2-dev libcurl3 libcurl4-openssl-dev libbz2-dev
doxygen bzip2 libsqlite3-dev pkg-config libmysqlclient15-dev libnuma-dev

对于Debian/Ubuntu系统,使用命令:

sudo apt-get install xxx xxx xxx

对于CentOS/Fedora/Redhat系统,使用命令:

sudo yum install libjpeg-devel libpng-devel libxml2-devel sqlite-devel bzip2-devel libcurl-devel libuuid-devel pcre-devel readline-devel mysql-devel

Note

需要特别指出的是,对于CentOS 6系统,上述的yum不应当包含mysql-devel, 因为默认的libmysqlclient(版本号为libmysqlclient.so.16)是无法工作的, SF1在连接MySQL时会出现段错误,需要手动升级到新版本, 例如libmysqlclient.so.18,下载地址在 这里, 并且需要手动安装:

sudo rpm -Uvh mysqlclient18-5.5.28-6.el6.art.x86_64.rpm
cd /usr/lib64/mysql
sudo ln -s libmysqlclient.so.18.0.0 libmysqlclient.so

Note

最近,我们已经把全部项目升级到C++ 11,因此编译SF1R需要GCC 4.8版本, 同时,我们不推荐采用Ubuntu系统,因为链接器对于系统循环依赖要求较高。 推荐使用CentOS/Redhat系统进行编译。

第三方库安装

需要手动安装的第三方库包括:

boost 1.56

Tokyo Cabinet

google-glog

另外,不建议采用系统默认的方式安装boost,而应当采用编译安装:

./booststrap.sh
./b2 cxxflags="-std=c++11"
./b2 install

因为默认复制的方式安装boost,会导致符号链接被覆盖,从而影响CMake在打包过程中的依赖判断.

安装SF1的Ruby Driver

F1的Ruby driver有2个用途:通过socket向SF1发送API;同步资源文件。安装方法如下:

git clone https://github.com/izenecloud/driver-ruby.git
cd driver-ruby
rake install

Note

这里需要ruby 1.9.3版本方可运行。

如何下载SF1代码

例如,在本地新建目录codebase,在该目录下,新建一个脚本clone.sh,内容如下。 运行该脚本后,所有SF1相关的代码库都会被下载。

#!/usr/bin/env bash

projects=(driver-ruby cmake izenelib icma ijma ilplib idmlib sf1r-lite)

element_count=${#projects[@]}
index=0
while [ "$index" -lt "$element_count" ]
do
    name=${projects[$index]}
    if [ ! -d $name ];then
        echo "clone $name ..."
        git clone https://github.com/izenecloud/$name.git
    fi

    let "index = $index + 1"
done

如何编译SF1代码

在sf1r-lite目录下,运行如下命令,会编译SF1相关的代码库。

./compile_all.sh 4

Note

参数4代表启动4个线程同时编译,加快编译速度,可以根据自己机器的配置,选择合适的参数值。

也可以自行用cmake分别编译每个代码仓库,例如:

cd izenelib
mkdir build
cd build
cmake ..
make

Note

需要说明的是,安装开发环境,所有代码仓库都会依赖相应的环境变量设置,在相应的.bashrc或者.bash_profile里需要有如下设置:

export IZENELIB="/home/yourname/codebase/izenelib"
export ILPLIB="/home/yourname/codebase/ilplib"
export IDMLIB="/home/yourname/codebase/idmlib"
export IZENECMA="/home/yourname/codebase/icma"
export IZENEJMA="/home/yourname/codebase/ijma"
export EXTRA_CMAKE_MODULES_DIRS="/home/yourname/codebase/cmake"
export LIBXML2="/usr/include/libxml2"
export WKO_BUILD="ia64-glibc27-gcc41"
export LD_LIBRARY_PATH=/usr/local/lib:$IZENELIB/lib:$IDMLIB/lib:$IZENECMA/lib:$IZENEJMA/lib:$LD_LIBRARY_PATH

如何打包

打包好的SF1是针对线上环境,区分于上边描述的开发环境。

cd $SF1_ROOT
cd build
make
make package

运行上面的命令后,会在目录$SF1_ROOT/build下生成压缩包sf1r-engine.tar.gz。

编辑打包脚本

当你要添加其它的第三方库的时候,必须要编辑打包脚本, 请参考 $SF1_ROOT/source/Packaging.cmake

如何运行二进制文件

tar xf sf1r.tar.gz
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PACKAGE_DIR/lib:$PACKAGE_DIR/lib-thirdparty
cd $PACKAGE_DIR
./CobraProcess -F config

Note

需要设置环境变量 LD_LIBRARY_PATH