zoukankan      html  css  js  c++  java
  • CentOS 6安装thrift支持erlang开发

    早前,在我的博文thrift多平台安装介绍了如何在debian/ubuntu下面安装thrift,并支持erlang开发的。而在CentOS平台下,并没有成功安装。经过不断摸索,终于成功了,这篇博文就是介绍如何在CentOS下编译安装thrift,并提供erlang开发支持。

    1.失败原因及解决方法

    我遇到的主要问题是,erlang的crypto模块在调用openssl的共享库的时候失败,从而导致编译thrift的erlang类库失败,整个编译过程无法继续下去。

    在erl终端输入crypto:start()就可以看到下面的情况

    [root@localhost 6]# /usr/local/bin/erl
    Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]
    
    Eshell V5.10.4  (abort with ^G)
    1> crypto:start().
    ** exception error: undefined function crypto:start/0
    2> 
    =ERROR REPORT==== 12-Jan-2014::00:06:29 ===
    Unable to load crypto library. Failed with error:
    "load_failed, Failed to load NIF library: '/usr/local/lib/erlang/lib/crypto-3.2/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'"
    OpenSSL might not be installed on this system.
    
    =ERROR REPORT==== 12-Jan-2014::00:06:29 ===
    The on_load function for module crypto returned {error,
                                                     {load_failed,
                                                      "Failed to load NIF library: '/usr/local/lib/erlang/lib/crypto-3.2/priv/lib/crypto.so: undefined symbol: EC_GROUP_new_curve_GF2m'"}}

    如果你也遇到这个问题,那可以肯定,编译的thrift没法提供erlang开发支持。

    如果你的crypto:start()输出结果是ok的话,那就不会出现问题。

    $erl
    Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:3:3] [async-threads:10] [kernel-poll:false]
    
    Eshell V5.10.4  (abort with ^G)
    1> crypto:start().
    ok
    2> 

    如果出现像上述这样同样问题的话,很可能是Erlang的crypto模块与安装的openssl动态链接库不兼容,可以看Erlang的crypto模块与最新的openssl动态链接库不兼容的问题与解决方案得到详细的信息。

    解决方法有2个,可以重新编译openssl,或者使用Erlang Solutions提供的二进制erlang/otp包.

    另外我遇到的一个小问题是,erlang/otp的版本低,可能小于R14的,都会导致编译通不过。选用最新的erlang/otp版本就不会出现这个问题。

    2.安装erlang/otp

    在安装thrift前,我们要先安装erlang/otp.下面介绍2种方法,源码安装,以及使用Erlang Solutions的二进制包。

    2.1 源码安装erlang/otp

    首先编译安装openssl,我这里选用的版本是openssl-1.0.0l.tar.gz

    wget -c http://www.openssl.org/source/openssl-1.0.0l.tar.gz
    tar xzf openssl-1.0.0l.tar.gz
    cd openssl-1.0.0l
    ./config

    按照Erlang的crypto模块与最新的openssl动态链接库不兼容的问题与解决方案所说的方法编辑Makefile文件,添加-fPIC编译选项

    在vim里面搜索gcc,然后在下面的行添加:

    添加完毕后,我们就可以编译安装了:

    make
    make install

    在config阶段,我使用默认配置,所以openssl安装目录在/usr/local/ssl

    接下来编译erlang/otp

    在CentOS下面编译erlang/otp,可以参考下面2篇博文来安装erlang/otp的依赖项:

    CentOS(Fedora)下源代码编译安装 erlang 环境的 shell 脚本

    CentOS 安装 Erlang

    很好,我们继续前进:

    yum install -y kernel-devel m4 fop ncurses-devel tk unixODBC unixODBC-devel gcc gcc-c++
    wget -c http://www.erlang.org/download/otp_src_R16B03.tar.gz
    tar xzf otp_src_R16B03.tar.gz
    cd otp_src_R16B03

    在configure阶段,指定使用我们定制的openssl

    ./configure --with-ssl=/usr/local/ssl
    make 
    make install

    编译安装erlang/otp大概花费20分钟,安装位置在/usr/local下面。

    2.2 使用Erlang Solutions提供的二进制erlang/otp包

    Erlang Solutions提供了多个平台的erlang/otp的二进制安装包,非常容易使用。

    Erlang Solutions的erlang安装包信息在这里,使用的js文件好像有兼容问题,在linux下的chrome浏览器,只能看到source选项卡.

    需要注意的是,Erlang Solutions编译的erlang/otp包可能会有问题,例如上面的crypto:start()就出现上面的问题。我们在使用的时候,遇到问题,我们可以按照上面源码编译的方法进行安装。

    就在前天,也就是2014-01-10,使用Erlang Solutions的rpm包就出现了crypto:start()启动不成功的现象,然后我昨天检测到它更新了erlang的centos安装包,应该就是修复了这个问题。有图为证:

    使用下面的命令来安装erlang/otp:

    wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
    rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
    yum makecache
    yum install -y erlang

    3.源码编译安装thrift

    下面的步骤跟thrift多平台安装中的Debian/Ubuntu下编译安装thrift差不多。

    yum install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel xz git -y
    git clone -b 0.9.1 https://github.com/apache/thrift thrift-0.9.1
    cd thrift-0.9.1
    ./bootstrap.sh

    在生成configure文件时出错:

    configure.ac:20: error: Autoconf version 2.65 or higher is required
    configure.ac:20: the top level
    autom4te: /usr/bin/m4 failed with exit status: 63
    autoscan: /usr/bin/autom4te failed with exit status: 63

    果然好事多磨,好吧,我们继续源码安装autoconf:

    wget -c http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz
    tar xJf autoconf-2.69.tar.xz
    cd autoconf-2.69
    ./configure
    make
    make install

    升级autoconf后,执行bootstrap.sh,提示信息有大量的warning,但还是生成了configure文件。不管warning,我们继续前进:

    ./configure --with-cpp=no --with-python=no
    make
    make check
    make install

    没有报错,至此终于完成了thrift的安装。

  • 相关阅读:
    C# 操作配置文件
    C# Excel操作类
    没有找到 mspdb100.dll 的解决办法
    工厂方法模式
    .Net互操作2
    The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
    手机抓包xcode自带命令行工具配合wireshark实现
    expecting SSH2_MSG_KEX_ECDH_REPLY ssh_dispatch_run_fatal问题解决
    使用ssh-keygen设置ssh无密码登录
    远程复制文件到服务器
  • 原文地址:https://www.cnblogs.com/getong/p/3515679.html
Copyright © 2011-2022 走看看