ceph编译_ceph源代码编译

本文详细介绍了如何在CentOS 7环境下,针对Ceph Jewel版本进行源代码编译。首先,确认操作系统和编译器版本,然后从GitHub克隆特定版本的Ceph源码,更新子模块,解决编译过程中遇到的依赖问题和选项设置。通过执行`autogen.sh`、`configure`和`make`命令完成编译,并安装到本地。最后,通过RGW测试验证Ceph的上传和下载功能。
摘要由CSDN通过智能技术生成

当前生产环境中我们所使用的ceph版本为jewel版本:

# ceph --version

ceph version 10.2.10 (5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe)

因此,这里我们也以该版本为例来介绍ceph源代码的编译。当前我们的操作系统环境如下(ceph编译时需要耗费极大量的内存,建议内存至少4G以上):

# lsb_release -a

LSB Version: :core-4.1-amd64:core-4.1-noarch

Distributor ID: CentOS

Description: CentOS Linux release 7.3.1611 (Core)

Release: 7.3.1611

Codename: Core

# uname -a

Linux localhost.localdomain 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

# free -h

total used free shared buff/cache available

Mem: 3.7G 1.2G 520M 65M 2.0G 2.0G

Swap: 4.9G 0B 4.9G

所使用的编译器版本为:

# gcc --version

gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)

Copyright (C) 2015 Free Software Foundation, Inc.

This is free software; see the source for copying conditions. There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ceph的源码可以去Github之上clone下来,或者去Ceph官网下载。这里重点提一下Ceph的版本问题,Ceph在Hammer版本之后,采取了新的版本命名规则:

x.0.z - 开发版

x.1.z - 候选版

x.2.z - 稳定、修正版

1. 编译安装Jewel ceph

1.1 下载ceph源码

这里我们下载ceph-10.2.10版本。我们有如下几种方法:

1) 直接克隆指定版本

# git clone https://github.com/ceph/ceph.git -b v10.2.10 --depth 1

# cd ceph

# ls -al .

./ .git/ .gitmodule_mirrors .mailmap .peoplemap

../ .gitignore .gitmodules .organizationmap

# git submodule update --force --init --recursive

# git log -s

commit 5dc1e4c05cb68dbf62ae6fce3f0700e4654fdbbe

Author: Jenkins Build Slave User

Date: Wed Oct 4 14:17:25 2017 +0000

10.2.10

2) 克隆整个ceph工程

在ceph官网下载的tar.gz包缺少文件,用git clone下载的ceph包比较全,因此我们采用如下方法

# git clone --recursive https://github.com/ceph/ceph.git

下载ceph的其他子模块,否则在编译过程中会出现缺少库:

# git submodule update --force --init --recursive

克隆完成后,我们使用git branch -a命令来查看所有的分支:

# git branch -a

* master

remotes/origin/BZ-1650306

remotes/origin/HEAD -> origin/master

remotes/origin/argonaut

remotes/origin/bobtail

remotes/origin/ceph-facts-role

remotes/origin/cuttlefish

remotes/origin/dumpling

remotes/origin/emperor

remotes/origin/firefly

remotes/origin/giant

remotes/origin/guits-add_dep

remotes/origin/guits-fix_simple_activate_fs

remotes/origin/hammer

remotes/origin/hammer-next

remotes/origin/infernalis

remotes/origin/jewel

remotes/origin/jewel-next

remotes/origin/joscollin-patch-1

remotes/origin/joscollin-patch-2

remotes/origin/kraken

remotes/origin/luminous

remotes/origin/luminous-no-scripts

remotes/origin/master

remotes/origin/mimic

remotes/origin/mimic-new

remotes/origin/nautilus

remotes/origin/revert-26048-luminous-37977

remotes/origin/rh-luminous

remotes/origin/rh-luminous_old

remotes/origin/v

remotes/origin/v10.2.0

remotes/origin/wip-36686-luminous

remotes/origin/wip-41038-nautilus

remotes/origin/wip-41238-nautilus

remotes/origin/wip-add-diag-suite

remotes/origin/wip-cd-vol-size

remotes/origin/wip-ceph-volume-tests-no-dashboard

remotes/origin/wip-daemonwatchdog-testing6

remotes/origin/wip-ldapauth-wusui

remotes/origin/wip-luminous-conf-error-message

remotes/origin/wip-pcuzner-testing

remotes/origin/wip-perf-keys

remotes/origin/wip-qa-rgw-swift-server

remotes/origin/wip-qa-rgw-swift-server-nautilus

remotes/origin/wip-rm37865

remotes/origin/wip-smoke-use-ca

remotes/origin/wip-zafman-26971-diag

另外也可以通过git tag命令来查询所有标签:

# git tag -l

mark-v0.70-wip

v0.1

v0.10

v0.11

v0.12

v0.13

v0.14

v0.15

v0.16

v0.16.1

v0.17

v0.18

v0.19

v0.19.1

v0.2

v0.20

v0.20.1

v0.20.2

然后使用如下命令切换到10.2.10版本:

# git checkout v10.2.10

3) 克隆指定tag或commitID

对于一个大工程,我们很适合采用此方法。

首先新建一个文件夹ceph-10.2.10

# mkdir ceph-10.2.10

# cd ceph-10.2.10

接着在当前目录ceph-10.2.10创建一个空repository:

# git init

之后将其添加到一个远程仓库:

# git remote add my-ceph https://github.com/ceph/ceph.git

之后fetch一个commit(或branch 或tag)

# git fetch my-ceph v10.2.10 //注意此处v10.2.10为远程ceph仓库对应的一个tag

将本地仓库的master分支reset为指定的commit

# git reset --hard FETCH_HEAD

最后再更新submodules

# git submodule update --force --init --recursive

# git log -s

1.2 编译ceph

下载完ceph源码,我们先参看一下README.md的说明(或查看官网ceph编译说明),以了解大体编译步骤(请保持环境干净,否则可能引起不必要的麻烦。笔者编译时就因为事先安装过rocksdb而出现问题)。

1) 安装依赖项

执行如下命令检测并安装相应的依赖项:

# ./install-deps.sh

2) 编译ceph

其实ceph编译有两种方式,一种是运行autogen.sh后接着运行configure,接着运行make编译,编译完成后用make install安装。还有另外一种是直接编译成deb包。下面我们就分别介绍一下这两种方式。

方式1

1.1 生成相关编译文件

执行如下命令预先生成编译时需要的相关文件:

# ./autogen.sh

在执行过程中提示没有libtoolize,及gcc,g++等工具,执行如下命令进行安装:

# yum install libtool

# yum install gcc

# yum install gcc-c++

1.2 生成Makefile文件

执行如下命令生成编译对应的Makefile文件:

# ./configure --with-rbd --with-debug --with-rados --with-radosgw --with-cephfs --enable-client --enable-server --enable-xio --enable-pgrefdebugging --enable-valgrind

上面我们enable一些选项,主要是为了便于我们后边在研究ceph源代码时可以对相关的单元测试脚本进行测试。

在执行configure过程中可能会提示需要安装相应的软件包,执行如下命令安装:

# yum install snappy-devel

# yum install leveldb-devel

# yum install libuuid-devel

# yum install libblkid-devel

# yum install libudev-devel

# yum install keyutils-libs-devel

# yum install cryptopp-devel

# yum install fuse-devel

# yum install libatomic_ops-devel

# yum install libaio-devel

# yum install xfsprogs-devel

# yum install boost-devel

# yum install libedit-devel

# yum install expat-devel

如果不想要依赖于google-perftools,请使用: ./configure –without-tcmalloc;如果需要调试以及编译测试程序可以加上--with-debug选项

此外还可以设置--prefix=

--prefix=/usr/local/ceph --sysconfdir=/etc/ceph

如果我们想要使用GDB来进行调试的话,我们需要修改Makefile文件,找到所有O2行,把它替换成-O0-Wall -g:

# pwd

/root/ceph-inst/ceph

# grep -nw "O2" ./Makefile

431:CCASFLAGS = -g -O2

433:CFLAGS = -D_LARGEFILE64_SOURCE -g -O2

443:CXXFLAGS = -g -O2 -std=gnu++11

532:PYTHON_CFLAGS = -I/usr/include/python2.7 -I/usr/include/python2.7 -fno-strict-aliasing -O2 -g ...

如果需要进行更深层次调试的话,可以执行如下命令安装调试依赖包:

# yum install lttng-tools* lttng-ust* lttng*

1.3 编译

在编译时我们最好将src目录设置到PATH中,以防在编译过程中对ceph-authtool等工具找不到:

# pwd

/root/ceph-inst/ceph

# export PATH=$PATH:/r

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>