一直对于分布式文件存储非常兴趣。比如在09年时自己也参考之前工作过公司中也涉及分布式存储,当中也参考很多这里代码。还有加上自己平时参与新的事物研究,应该在这个基础上进行一系列修改,自己重新写一个分布式存储系统相关代码在http://www.github.com/oscar810429/pndfs,所以最近有些心情就对淘宝TFS这个存储编译和安装方法记录下来提供给大家参考。当中也有可能会写的错地方请大家不要太在意。闲话少说现在开始下载,编译,安装介绍如下:
1.下载tfs ---- https://github.com/alibaba/tfs/archive/release-2.2.13.tar.gz
我就直接从github中下载一个正式版了。不从他们代码库中拿下这个软件了,采用git clone来提取这个项目软件。
2.编译tfs 这个步骤有些麻烦。在不能gc编译版本会出现不同情况,说说我在gcc-4.7中编译过程如下:
1)首先就是下载和安装这些依赖包gcc,readline,libz,uuid,tcmalloc google的内存管理库
其实也就是用一个yum install gcc readline-devel libz-devl uuid-devel 这样子基本会相关可能存在依赖都安装完毕。
yum -y install automake.noarch
yum -y install libtool.x86_64
yum -y install readline-devel.x86_64
yum -y install zlib-devel.x86_64
yum -y install e2fsprogs-devel.x86_64
yum -y install google-perftools.x86_64
2)tcmalloc google的内存管理库,说在这个大家都知道这个管理库功能,其实就是可以让你的应用服务程序更好使用内存管理一个东东。
64位编译地编译和安装如下:(这里还是先讲我的在64位操作系统上编译和安装)
1:首先下载libunwind-1.1
wget http://down.yunwei8.com/soft/linux/libunwind-1.1.tar.gz
然后安装
tar zxvf libunwind-1.1.tar.gz
cd libunwind-1.1
./configure
make && make install
2:安装google-perftools:
首先下载gperftools-2.1
wget https://gperftools.googlecode.com/files/gperftools-2.1.tar.gz
然后安装
tar zxvf gperftools-2.1.tar.gz
cd gperftools-2.1/
./configure
make && make install
echo "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf
/sbin/ldconfig
3) wget https://github.com/alibaba/tfs/archive/release-2.2.13.tar.gz
tar zxvf release-2.2.13.tar.gz
cd release-2.2.13
./configure --prefix=/usr/local/tbfs --with-release --with-tcmalloc=/usr/local/lib --with-mysql
make && make install
如果没有意外的话你的编译会很成功,在约10-20分钟会编译完成
不过我还是说说有编译中碰到问题:
1. svn co -r 18 http://code.taobao.org/svn/tb-common-utils/trunk tb-common-utils
首先编译安装tblib(tb-common-utils),里面含有tbsys和tbnet,tfs依赖这二个库,安装tfs一定要使用。所以也就是照做编译 cd tb-common-utils
./configure --prefix=/usr/local/tblib
2.jemalloc 动态库文件找不到,一时半会想不出来这个是什么。只能google和百度也是我在技术研究最常用在网上找资料工具,查了一下应该也是一个内存管理东西。不过我点不想不明白已经有了tcmalloc,为什么还有使用jemalloc。所以也就照做了。安装这个东东
一般来说yum install jemalloc可能还安装不了,所以得安装第三方yum资源库
rpm -Uvh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install jemalloc-devel 等个几秒后这个问题解决以为可以很快完成这个可是还是后面问题很多
3.接下来听官方编译提示说明可能是gcc版本-4.7 高版本比较严密语法排查 在编译中出现一个问题就是数据类型换问题,在/src/name_meta_server/meta_server_service.cpp 1548行会出现报数据类型错误不是警告。说明如下:
char* pos = strstr(sub_dir, parents_dir); ===>> char* pos = (char *) strstr(sub_dir, parents_dir);
要把这个修改为后面这个才编译成功,想想应该可以成功了吧还是在tfs上面可能在rpc上面会使用DB原因这下出来mysql.h,errmsg.h找不到原因。
4.mysql.h,errmsg.h找不到原因应该是我的mysql安装采用percona rpm mysql,先先用rpm如何安装的,当然是一个shell脚本我把相关定义给大家看一下:
PERCONA_SHARED=Percona-Server-shared-56-5.6.21-rel70.0.el6.x86_64
PERCONA_SHARED_DOWNLOAD_PATH=http://www.percona.com/downloads/Percona-Server-5.6/LATEST/binary/redhat/6/x86_64/$PERCONA_SHARED.rpm
PERCONA_CLIENT=Percona-Server-client-56-5.6.21-rel70.0.el6.x86_64
PERCONA_CLIENT_DOWNLOAD_PATH=http://www.percona.com/downloads/Percona-Server-5.6/LATEST/binary/redhat/6/x86_64/$PERCONA_CLIENT.rpm
PERCONA_SERVER=Percona-Server-server-56-5.6.21-rel70.0.el6.x86_64
PERCONA_SERVER_DOWNLOAD_PATH=http://www.percona.com/downloads/Percona-Server-5.6/LATEST/binary/redhat/6/x86_64/$PERCONA_SERVER.rpm
PERCONA_DEVEL=Percona-Server-devel-56-5.6.21-rel70.0.el6.x86_64
PERCONA_SERVER_DOWNLOAD_PATH=http://www.percona.com/downloads/Percona-Server-5.6/LATEST/binary/redhat/6/x86_64/$PERCONA_DEVEL.rpm
下面接着大家都知道如何写了。就是采用wget 下载rpm,然后采用rpm来安装这个包就可以了。不过我到时把这个shell打个包给大家分享。
采用这个方式安装完成后/usr/include/mysql一般在大家会问这是做什么用的。不过大家linux能玩C的人都会当然是我们C库头文件库目录。
在/src/rcserver/mysql_database_helper.cpp中文件修改如下:
#include
#include
不过有人会说为什么要修改他的代码呢。有这样问的人我认为是很正确的。只不过我想很快编译成功想看看这个版本中加入什么东东。所以就是先这个样子。不用我后面采用./configure --help查到可以在编译中使用指定CPPFLAGS=-I/usr/include/mysql应该可以不用修改这个代码了。题外话。回主题中。编译通过了。其实应该离这个成功就是不远了。心想会不会还有什么问题。结果是太多虑了。等一下make编译成功了。然后make install后这个编译和安装也算是大功告成。
相关编译中问题可以查看如下资料:
https://github.com/alibaba/tfs/blob/master/INSTALL.md
文章评论