runsisi's

technical notes

ceph 编译、打包

2018-12-24 runsisi#ceph

1.获取源代码

获取源代码有多种途径,其中 ceph 官方发布的源代码路径如下:

http://ceph.com/download/

在该路径下下载相应发行版本的源代码 tar 包即可,同时也可以使用 git 版本管理工具获取最新的开发版本的源代码:

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

2.建立编译环境

编译打包 ceph 需要相应的工具链以及一系列的第三方库,基于 deb 的发行版和基于 rpm 的发行版所需要的依赖并不尽相同,如果使用 git 从 github 获取的源代码,则在源代码的根目录有两个文件: deps.deb.txt, deps.rpm.txt,这两个文件分别记录了这两种类型的发行版建立编译环境所需的工具及第三方依赖库,但是这两个文件所记录的依赖关系并不一定完全准确, 如果有缺失的依赖,编译体系进行构建时会报错,再安装相应的依赖即可。

如果需要生成 deb 或 rpm 包,则还需要安装相应的打包工具,不同类型的发行版自然有所不同,deb 发行版需要安装: debhelper 或 pbuilder,rpm 发行版需要安装:rpm-build, rpmdevtools。

下面对编译打包的过程基于 rpm 包发行版 Centos6.5 进行介绍(如果只需要打包当前机器运行发行版的 deb 包则相当简单,可以参考官方的文档,如果需要在同一台机器上打包多个发行版的包则过程稍有复杂,可以参考 ceph-build 相关的脚本)。

3.官方发行版源代码编译打包

该过程实际上主要是 rpm 相关工具的使用,与 ceph 本身并无关系。执行 rpmdev-setuptree 生成 rpm 打包工具所需要的 ~/rpmbuild 目录与一系列子目录以及 ~/.rpmmacros 文件,当然如果不使用工具的话,也可以手工进行创建这些目录与文件。

从官网下载的源代码包中解压 ceph.spec 文件到 ~/rpmbuild/SPECS 文件夹中,同时将源代码包放到~/rpmbuild/SOURCES 文件夹中,注意 ceph.spec 文件中默认要求的源代码是.tar.bz2 格式的,如果下载的是 .tar.gz 格式的包,需要修改解压出来的 ceph.spec 文件中 Source0 所在的行,将改行中要求的源代码包后缀修改为 .tar.gz 即可。

执行 rpmbuild --ba ~/rpmbuild/SPECS/ceph.spec 开始编译打包,如果一切顺利,会在 ~/rpmbuild/RPMS 及 ~/rpmbuild/SRPMS 分别生成所有的二进制 rpm 包和源代码 rpm 包,如果需要生成非当前机器使用的发行版或 CPU 架构的 rpm 包,则需要在相应的系统上执行编译打包操作。

最后生成的二进制 rpm 包如下(针对每个 rpm 包的介绍可以参考 ceph.spec 中的相关描述):

ceph-0.84-0.el6.x86_64.rpm
ceph-common-0.84-0.el6.x86_64.rpm
ceph-devel-0.84-0.el6.x86_64.rpm
cephfs-java-0.84-0.el6.x86_64.rpm
ceph-fuse-0.84-0.el6.x86_64.rpm
ceph-radosgw-0.84-0.el6.x86_64.rpm
ceph-test-0.84-0.el6.x86_64.rpm
libcephfs1-0.84-0.el6.x86_64.rpm
libcephfs_jni1-0.84-0.el6.x86_64.rpm
librados2-0.84-0.el6.x86_64.rpm
libradosstriper1-0.84-0.el6.x86_64.rpm
librbd1-0.84-0.el6.x86_64.rpm
python-ceph-0.84-0.el6.x86_64.rpm
rbd-fuse-0.84-0.el6.x86_64.rpm
rest-bench-0.84-0.el6.x86_64.rpm

源代码 rpm 包如下(注意源代码不区分 CPU 架构):

ceph-0.84-0.el6.src.rpm

4.git 源代码编译打包

在使用 rpm 打包工具之前,首先需要生成所需的源代码 tar 包,然后的编译打包过程就和使用官方发布的源代码包进行编译打包过程一样的了,下面介绍如何生成源代码 tar 包。

首先使用 git 切换到所需编译的分支或版本,然后执行:./do_autogen.sh,从而生成临时 Makefile 以及打包 rpm 所需的 spec 文件 ceph.spec。执行:make dist_bzip2 在当前目录生成源代码 tar 包(tar 包里同样有 ceph.spec 文件)。

剩下的过程和上节介绍的一样,拷贝需要的文件到相应的目录,然后执行 rpm 打包命令即可。

5.参考资料

[1] https://github.com/ceph/ceph

[2] http://ceph.com/docs/master/install/build-ceph/

[3] https://github.com/ceph/ceph-build

[4] http://ceph.com/docs/master/dev/release-process/