文档章节

CentOS 6安装thrift支持erlang开发

格通
 格通
发布于 2016/02/22 12:41
字数 1271
阅读 4
收藏 0

早前,在我的博文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的安装。

 

 

 

© 著作权归作者所有

下一篇: linux设置时间
格通

格通

粉丝 6
博文 156
码字总数 39155
作品 0
广州
程序员
私信 提问
centos 6.5(centos7)下安装thrift 0.9.1详细教程

进行Thrift的最小化安装,在Centos 6.5 上下面的步骤必不可少. 我们给出从源代码编译Thrift的例子。这些介绍对Thrift0.9.2 的 releases版本同样有效。 更新系统 安装平台开发工具 升级autoc...

双月通天
2015/12/29
2.1K
3
centos 6.8 源码安装 erlang/otp 19.0.2

最近一直都是在debian jessie下开发erlang代码,但部署环境一直都是在centos 6上面,发现centos 6系列的软件版本还是比较落后的, 但centos的健壮性的确很好。所以开始了在centos 6.8下面源码...

格通
2016/07/19
36
0
Thrift多语言,Server(C++) Client(Java)

摘要: Thrift安装和使用方法 安装 1. 安装Boost 下载地址: http://sourceforge.net/projects/boost/files/boost/ cd boost_version ./bootstrap.sh ./b2 install 注意: linux程序运行时加载......

满小茂
2016/10/30
72
0
Erlang中使用Thrift

如今每个领域都有相对成熟解决方案,不需要重复性的开发。但是也带来了一些问题,单一语言开发已经变的越来越困难。 我们使用Ruby on Rails来做API的开发,但是很多业务并不适合Ruby on Rai...

通九互联科技
2012/12/27
0
1
PHP Thrift Rpc 远程调用框架 --workerman-thrift

workerman thrift rpc 是一个以workerman作为服务器容器,使用Thrift协议及其传输层模块搭建起来的跨语言的RPC远程调用框架。 workerman-thrift-rpc的目标是解决异构系统之间通信的问题,wor...

domr
2014/04/13
2.4K
1

没有更多内容

加载失败,请刷新页面

加载更多

抽象同步队列AQS——AbstractQueuedSynchronizer锁详解

AQS——锁的底层支持 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资...

须臾之余
今天
2
0
springboot配置百度UEditor 富文本详解

富文本简介 UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码... 准备工作 ueditor需要单独文...

wotrd
昨天
3
0
mysql 5.7之my.cnf配置大全

[client]port = 3306socket = /tmp/mysql.sock[mysqld]###############################基础设置######################################Mysql服务的唯一编号 每个mysql服务...

Online_Reus
昨天
2
0
MAVEN打包时引入外部链接的包

1.项目引入了ORACLE的jar包,MAVEN配置如下 2.打jar包的时候需要指定下main入口函数mainClass <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> ......

Cobbage
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部