tokyo tyrant: 如何搭建这个tt server tokyo tyrant and tokyo cabinet
这两天在搭一个tt server,小日本写的一个cache服务器吧,性能据说比memcached要高好多,具体参数不详
这两天的首要任务就是搭建,搭建过程是一路坎坷,主要原因是linux基础太过薄弱
1. 在root账号下面,自己安装,一路顺风,啥都没问题,其实是照葫芦画瓢,最基本的安装,所以也不会有问题
2. 测试环境不可能提供root权限,所以必须要规避root权限进行安装,这样就遇到了各种各样的问题
在安装tokyo cabinet时候报错:
configure: error: bzlib.h is required
解决办法1:
apt-get install libbz2-dev
这样我在root权限下是可以解决的,ok,或者是root下不会遇到问题
但根本愿意是什么呢?
是由于缺少了两个依赖的包安装(叫法不大准确)
1. zlib-1.2.4
2. bzip2-1.0.5
网上说有先后顺去,但我没去验证,仅是按照上面的顺序进行安装的
zlib安装:
./configure
make
make install
bzip安装
make
make install
然后再去安装tokyo cabinet
./configure
这个时候可能还是会报错误,提示configure: error: bzlib.h is required,但是在指定的--prefix中,或许你可以看到,但是还是会报这个错误,看config.log,它找的路径还是在/usr里面,而不是我在./configure中指定的--prefix中的位置,这个时候,在./configure的时候,就需要再添加两个参数
--with-zlib,指定它的路径,具体可以看./configure --help,自己走了好多弯路,主要就是没有自己看configure的help
然后进行configure, 可能还是会报libbz2.h找不到,那就需要在configure中继续挂参数--with-bzip的位置了
安装tokyo tyrant的时候,可能还是会有类似的错误,同样指定位置解决
具体安装顺序,按照tokyo cabinet和tokyo tyrant的文档就可以搞定了
接着遇到的错误是在make install的时候
if uname -a | egrep -i 'SunOS' > /dev/null ; \ then \ gcc -g -O2 -std=c99 -Wall -fPIC -fsigned-char -O2 -shared -Wl,-G,-h,libtokyocabinet.so.9 -o libtokyocabinet.so.9.6.0 \ tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o -L. -L/home/laurence/tt/tc/lib -L/home/laurence/lib -L/usr/local/lib -lbz2 -lz -lrt -lpthread -lm -lc ; \ else \ gcc -g -O2 -std=c99 -Wall -fPIC -fsigned-char -O2 -shared -Wl,-soname,libtokyocabinet.so.9 -o libtokyocabinet.so.9.6.0 \ tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o -L. -L/home/laurence/tt/tc/lib -L/home/laurence/lib -L/usr/local/lib -lbz2 -lz -lrt -lpthread -lm -lc ; \ fi /usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libbz2.a: could not read symbols: Bad value collect2: ld returned 1 exit status make: *** [libtokyocabinet.so.9.6.0] Error 1
为便于被搜索到,再贴一遍,嘿嘿
if uname -a | egrep -i 'SunOS' > /dev/null ; \
then \
gcc -g -O2 -std=c99 -Wall -fPIC -fsigned-char -O2 -shared -Wl,-G,-h,libtokyocabinet.so.9 -o libtokyocabinet.so.9.6.0 \
tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o -L. -L/home/laurence/tt/tc/lib -L/home/laurence/lib -L/usr/local/lib -lbz2 -lz -lrt -lpthread -lm -lc ; \
else \
gcc -g -O2 -std=c99 -Wall -fPIC -fsigned-char -O2 -shared -Wl,-soname,libtokyocabinet.so.9 -o libtokyocabinet.so.9.6.0 \
tcutil.o tchdb.o tcbdb.o tcfdb.o tctdb.o tcadb.o myconf.o md5.o -L. -L/home/laurence/tt/tc/lib -L/home/laurence/lib -L/usr/local/lib -lbz2 -lz -lrt -lpthread -lm -lc ; \
fi
/usr/bin/ld: /usr/local/lib/libbz2.a(bzlib.o): relocation R_X86_64_32S against `a local symbol' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libbz2.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libtokyocabinet.so.9.6.0] Error 1
这个提示很明显了,需要重新编译,加挂参数-fPIC
这个怎么搞呢?
1. zlib-1.2.4
make前,修改Makefile
CC=gcc -fPIC
CFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DDEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
# -Wstrict-prototypes -Wmissing-prototypes
第一处是最外层的貌似,我是在第二处依旧不起作用的时候,在第一处也添加了
记得make前或者configure前,先进行make clean,或者将之前指定的目录prefix参数中的内容全部rm掉,比较彻底和暴力
2. bzip2-1.0.5
同上,修改Makefile,
# To assist in cross-compiling
CC=gcc -fPIC
AR=ar
RANLIB=ranlib
LDFLAGS=
BIGFILES=-D_FILE_OFFSET_BITS=64
CFLAGS=-Wall -Winline -O2 -fPIC -g $(BIGFILES)
然后进行make, make install
这样,和上面的一起,我就没有遇到异常了,可以正常启动了,网上的方法很多,但是这个方法是解决我所遇到的问题的最佳实践了,可能别的问题没有遇到吧都
待跟进的问题:
1. zlib-1.2.4
2. bzip2-1.0.5
上面这两个包的作用,仅知道是linux下的压缩用来
3. -fPIC参数的意义
还没有去进行自己研究
解决问题来自网络google
主要引自:http://henry2009.javaeye.com/blog/462705 这个是我的母版,我基本就是这个解决的
以及:http://blog.csdn.net/pwlazy/archive/2010/02/20/5313405.aspx 解决了我root权限下安装问题,或者说具有较高权限下的是可以的