分布式日志系統Scribe編譯安裝
最近准備整合多個系統的日志,因而想到構建一套分布式日志存儲系統,首先考慮的是Scribe,不過編譯安裝耗費了很多時間(Scribe相關文檔確實少了點,相比Flume)
環境:Ubuntu13.04 32bit
組件:
scribe 2.x(最新版)
thrift 0.9.0
boost 1.54
fb303 thrift自帶
至於其他所依賴的相關包(如libevent、automake、flex、bison等)可根據configure的結果進行安裝或更新。
1、安裝boost
官網下載boost,版本要求高於1.36(作者用的是1.54.0),按照文檔中給出的方法編譯:
$tar --bzip2 -xf /home/vincent/Download/boost_1_54_0.tar.bz2
$cd /home/vincent/Download/boost_1_54_0
$./bootstrap.sh --help
$./bootstrap.sh --prefix=opt/boost_1.54
$./b2 install
至此,boost庫編譯完成,編譯時無需指定其他選項,在--prefix參數指定的目錄下生成include和lib文件夾存放頭文件和庫文件。
2、安裝thrift
下載thrift包,安裝是經典的三大步:
$tar zxvf thrift-0.9.0.tar.gz
$cd thrift-0.9.0/
$sudo ./configure CPPFLAGS="-DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H"
$sudo make
$sudo make install
configure時CPPFLAGS參數不可少,否則make時會產生諸如“uint_32未定義”之類錯誤。另外,configure時如找不到boost庫,則需使用--with-boost參數指定boost庫位置。thrift安裝後可以進行簡單的測試以確認是否安裝成功。
3、安裝fb303
fb303包含在thrift安裝包裡,直接make安裝:
$cd contrib/fb303
$sudo ./bootstrap.sh --with-boost=/opt/boost_1.54/lib/
$sudo make
$sudo make install
此處--with-boost即是指定boost庫位置
4、安裝scribe
依賴組件安裝完畢,即可開始編譯scribe:
$./bootstrap.sh
$sudo ./configure --with-boost=/opt/boost_1.54/lib/ --prefix=/opt/scribe
$sudo make
$sudo make install
編譯時可能會產生相關錯誤:
1)configure若遇到如下錯誤
checking whether the Boost::System library is available… yes
checking whether the Boost::Filesystem library is available… yes
configure: error: Could not link against !
則需在configure時加上參數
--with-boost-system=lboost_system
--with-boost-filesystem=lboost_filesystem
筆者的configure如下:
sudo ./configure --prefix=/opt/scribe --with-boost=/usr/local/lib --with-boost-system=boost_system --with-boost-filesystem=boost_filesystem CPPFLAGS="-DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H -DBOOST_FILESYSTEM_VERSION=3"
2)make時若遇到:
undefined reference to 'boost::system::generic_category()'
undefined reference to 'boost::system::system_category()'
在確認boost::system庫存在且路徑正確後,檢查GCC鏈接代碼(根據make輸出),筆者的如下:
g++ -Wall -O3 -L/usr/local/lib/ -lboost_system -lboost_filesystem -o scribed store.o store_queue.o conf.o file.o conn_pool.o scribe_server.o network_dynamic_config.o dynamic_bucket_updater.o env_default.o -L/usr/local/lib -L/usr/local/lib -L/usr/local/lib -lfb303 -lthrift -lthriftnb -levent -lpthread libscribe.a libdynamicbucketupdater.a
此時需將-lboost_system -lboost_filesystem兩個選項放在最後,並在src目錄下手動執行鏈接即可完成編譯。