zoukankan      html  css  js  c++  java
  • Mint17下安装TFS(taobao file sysytem)(带gcc4.8.2版本)

    最近研究了一下淘宝的分布式文件系统TFS(Taobao file system)。

    TFS(taobao file system)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据的存储;TFS使用C++语言开发,需要运行在64bit Linux OS上,本文介绍如何在Linux环境编译安装TFS。

    在安装的过程中,遇到了许多奇葩的问题,在此吐槽一下淘宝的团队真是懒。TFS介绍里面提到他们团队是用的gcc4.1.2进行编译的,高版本可能会报错,不过经过一般摸索,还是在gcc4.8.2中安装成功了。

    Min17自带了gcc4.8.2,在开始安装TFS之前先安装一下g++(sudo apt-get install g++)

    安装依赖的软件包

    automake TFS基于automake工具构建
    apt-get install automake

    libtool automake需要使用libtool
    apt-get install libtool

    realine 用于命令行编辑的库
    apt-get install libreadline-dev

    libz-devel 用于数据压缩/解压缩
    apt-get install zlib1g-dev

    uuid-devel 用于生成全局唯一ID
    apt-get install uuid-dev
    这里我遇到了问题,我使用的是Mint17,使用apt-get安装以后在/usr/include/uuid里面已经有了uuid.h文件,但是,找了个遍都没有找到相关的库文件,也导致在make的时候报错了,所报的错误就是uuid.h文件中声明的几个函数。决定自己下载源代码安装:
    在https://answers.launchpad.net/ubuntu/+source/util-linux/2.20.1-1ubuntu1中下载到util-linux_2.20.1.orig.tar.gz包
    使用以下命令安装:
    tar xzvf util-linux_2.20.1.orig.tar.gz
    cd util-linux-2.20.1
    ./configure --without-ncurses
    cd libuuid
    make
    make install
    这样发现在/usr/lib里面有了动态静态的lib文件(.a,.la,.so等文件)

    tcmalloc google的内存管理库
    apt-get install libgoogle-perftools-dev

    安装tb-common-utils
    TFS使用tb-common-utils软件包,tb-common-utils包含淘宝使用的基础系统库tbsys和网络库tbnet两个组件;安装tb-common-utils前需要设置环境变量TBLIB_ROOT,tbsys和tbnet将会被安装TBLIB_ROOT对应的路径(必须是绝对路径)下,TFS会在这个路径下查找tbsys、tbnet头文件和库。
    设置TBLIB_ROOT环境变量
    在~/.bash_profile文件中加入,export TBLIB_ROOT=path_to_tbutil , 然后执行source ~/.bash_profile 注意这样导入并不是永久的,如果把terminal关了重新开再去编译tfs得先运行source ~/.bash_profile一下。

    下载源码
    # svn co -r 18 http://code.taobao.org/svn/tb-common-utils/trunk tb-common-utils
    注意: 这里不要checkout最新版本,version18以后的修改导致部分接口不能前向兼容。

    编译安装
    # cd tb-common-utils
    # sh build.sh
    如果一切顺利,tb-common-utils已经安装成功到$TBLIB_ROOT路径下

    安装TFS

    TFS开源用户大都只使用TFS的基本功能,所以这个版本我们默认只编译TFS的nameserver,dataserver,client和tool,以去除对mysql的依赖,需要使用到rcserver(全局资源管理服务),metaserver(TFS自定义文件名服务)的用户请自行编译安装这两个服务。
    下载源码
    # svn co http://code.taobao.org/svn/tfs/branches/dev_for_outer_users tfs
    编译安装
    # cd tfs
    # sh build.sh init
    # ./configure --prefix=path_to_tfs --with-release
    # make
    # make install
    --prefix 指定tfs安装路径,默认会被安装到~/tfs_bin目录
    --with-release 指定按release版本的参数进行编译,如果不指定这个参数,则会按开发版本比较严格的参数编译,包含-Werror参数,所有的警告都会被当错误,在高版本gcc下会导致项目编译不过,很多开源用户反馈的编译问题都跟这个有关,因为gcc高版本对代码的检查越来越严格,淘宝内部使用的gcc版本是gcc-4.1.2。

    嗯,上面是安装文档里面的步骤,如果你安装成功了,那么恭喜你。不过我要说的是在安装过程中遇到的各种问题

    问题都出现在执行make命令的时候:

    1、__GNU_CXX::abs报错,解决方法是直接找到报错的地方把__GNU_CXX注释掉

    2、报如下的错误

    •  undefined reference to `uncompress'
    •  undefined reference to `uuid_generate'
    •  undefined reference to `uuid_unparse'

    这个错误我真心找了很久,因为一直以为uuid-dev安装成功了,实际上我被欺骗的好惨,万恶的apt-get install uuid-dev命令欺骗了善良的我,它居然就安装了一个.h文件真是醉了。所以一定要下载源代码安装。

    ok,安装成功以后还是报错。嗯。makefile文件里面没有指名使用uuid。so,修改tfs/src/tools/nameserver/makefile以及tfs/src/tools/transfer/makefile文件,总之看哪里报错就去哪里修改,报错的时候第一个make[×]: Leaving directory `××××'就是报错的地方。修改那个文件夹下面的makefile文件:

    找到LIBS的定义,到后面添加   -lz -luuid

    3、 error:curses.h: No such file or directory

    ncurses是字符终端下屏幕控制的基本库。可能很多新开发的程序都不使用了,不过如果要编译一些老程序,还经常遇得到。
    执行命令
     sudo apt-get install libncurses5-dev

    总结

    在安装的过程中真的遇到很多的问题,基本上都是gcc版本问题,依赖库没有安装好的问题。

    gcc版本问题可以尝试安装一下gcc4.1.2版本,gcc官网有两个gcc版本共存的教程。用高版本的gcc来编译的话就看人品了。出现什么错误就去改代码吧。

    依赖库没有安装好也是一件很×疼的事情,主要是遇到了uuid_dev只装了个.h文件这样的奇葩问题。

  • 相关阅读:
    二分法查找
    全排列 递归实现 c 语言实现
    南阳oj 题目290 动物统计加强版 字典树
    蛇形填数
    南阳理工oj 题目289 苹果 01背包
    南阳理工 oj 题目38 布线问题
    南阳理工oj 题目85 有趣的数 Cantor数表
    CSU-1110 RMQ with Shifts (单点更新+区间最小值 zkw线段树)
    POJ-2387 Til the Cows Come Home
    HDU-2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/starlitnext/p/4132069.html
Copyright © 2011-2022 走看看