ceph编译_ceph 源码编译in redhat6.4

一.背景

由于某地项目需要需要ceph支持redhat6.4,因此需要在redhat6.4 basic server进行源码的编译以及rpm包的生成。

二.获取ceph源码

获取ceph源码有几种方式,可以选择从git库上获取,也可以在官网获取,值得一提的是,如果在git库上获取时,默认是只clone 主分支源码到当前工作目录,并不会递归clone ceph submodule里的代码,因此在编译时常出现模块代码不存在的问题。

这里采用git库的方式获取代码:

1.获取ceph git主分支

git clone –recursive https://github.com/ceph/ceph.git

2.获取ceph redhat分支

git checkout -b local origin/rh-jewel

可以从ceph 官网下载打包好的

http://download.ceph.com/tarballs/

三 编译源码

在生成rpm包之前,我们需要保证源码编译环境正常,因此我们先编译ceph源码,这里获取的是10.2.5的代码。

执行

./autogen.sh

按照提示对libtool进行安装

yum install libtool

执行

./configure –with-radosgw

按照提示安装gcc-c++

yum install gcc-c++

再次执行configure,我们发现提示如下错误

这里写图片描述

很明显,jewel版本的代码要求支持c++11特性,因此我们升级gcc。

获取gcc-4.8.1

wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.1/gcc-4.8.1.tar.gz

tar xzf gcc-4.8.1.tar.gz

cd gcc-4.8.1

./contrib/download_prerequisites //依赖库

cd ..

mkdir build_gcc4.8.1

cd build_gcc4.8.1

../gcc-4.8.1/configure --prefix=/usr -enable-checking=release --enable-languages=c,c++ --disable-multilib

make -j4

make install

到此,我们gcc升级完成,可以重新编译ceph源码。

回到ceph源码目录,重新执行configure –with-radosgw,报以下错误

这里写图片描述

这个错误是缺少cython包

在安装此安装包以前需要安装python2.7,默认系统自带2.6,需要进行升级。

获取epel源

wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm

wget https://rhel6.iuscommunity.org/ius-release.rpm

安装源

rpm -Uvh epel-release-latest-6.noarch.rpm ius-release.rpm

重新执行configure还会报比较多的包缺失,这里不一一赘述。在我的系统中,安装以下安装包:

yum install snappy-devel leveldb-devel libblkid-devel libudeve-dev expat-devel keyutils-libs-devel cryptopp cryptopp-devel cryptopp fuse-devel fuse-libs libuuid-devel libedit-devel libatomic_ops-devel libatomic libaio-devel xfsprogs-devel openldap-devel fuse-python libudev libudev-devel boost boost-devel openssl openssl-devel libcurl libidn-devel curl fcgi-devel fcgi libcurl-devel

在这里,需要注意的是boost的版本应该是1.53:

默认boost-random安装完后 生成的so名字为 libboost_random-mt.so.1.46.0,但是configure扫描环境变量扫描文件名为libboost_random-mt.so,因此需要生成软链接。

ln -s /usr/lib64/libboost_random.so.1.53.0 /usr/lib64/libboost_random-mt.so

ln -s /usr/lib64/libboost_random.so.1.53.0 /usr/lib64/libboost_random.so

boost安装完成后,重新编译ceph

重新configure –with-radosgw再make源码,在这之前需要修改rbd-nbd,在redhat6.4版本上内核不支持nbd,如果需要编译rbd-nbd需要对内核进行升级到3.10以上。

rpm -Uvh kernel-3.10.105-1.el6.x86_64.rpm

然而,这次又出错了,报 gcc rados.c cephfs.c No such file,很困惑,提示里看到一个关键词pybind。

百度了一下pybind这个工具,是将python代码转换为c代码的,rados.c cephfs.c是通过这个工具转换出来的,然后再进行编译,另外在代码里看到很多python2.6的字眼,我们不是将2.6升级成2.7了么,怎么还是2.6?

因此决定将rpm包卸载,进行源码安装。

rpm -e python27 python27-libs

源码编译安装python2.7源码 ,

tar xvf Python-2.7.13.tgz

./configure –prefix=/usr/local/python27 --enable-shared

如果要生成共享库libpython2.7.so、libpython2.7.so.1.0、libpython2.7.a(.so为动态库,.a为静态库),加上--enable-shared

修改 Modules/Setup 文件

vi Modules/Setup

# Socket module helper for SSL support; you must comment out the other

# socket line above, and possibly edit the SSL variable:

#SSL=/usr/local/ssl

_ssl _ssl.c \

-DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \

-L$(SSL)/lib -lssl -lcrypto

默认这块是注释的,放开注释即开。这块功能是开启SSL模块,不然会出现安装完毕后,提示找不到ssl模块的错误。

make 添加-j4使用多核加速.

make -j4

make install

用软连接进行2.6 2.7版本转换

ln -sf /usr/local/python2.7/bin/python /usr/bin/python

ln -sf /usr/local/python2.7/lib/libpython2.7.so /usr/lib64/libpython2.7.so

ln -sf /usr/local/python2.7/lib/libpython2.7.so.1.0 /usr/lib64/libpython2.7.so.1.0

添加python2.7的环境变量:

vi /etc/profile

export PYTHON_HOME=/usr/local/python2.7/bin;

export PATH=$PATH:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值