前言:之前一直做ceph存储管理平台开发,最近开始下沉。项目用的ceph是改造后打成的run包。那么开源的代码是如何从源码开始编译-安装-部署的呢?本文记录了整个编译过程,不得不说,对不熟悉的大型开源项目来说,一个干净的环境是多么重要,都是泪。在一台物理机上装,疲于解决各种环境依赖的我,在机器被征用做压力测试后,终于佛了。好在我有一个天赐的老大,这个时候分给我一台空闲的物理机,OMG,立刻马上装了一个虚拟机,配置了代理,走起。
1.获取源码
首先当然是获取源码,这里可以选定版本进行克隆,我选的是14.2.9,也就是N版,放置在single目录下
git clone -b v14.2.9 --single-branch https://github.com/ceph/ceph.git single
2.安装依赖
社区很贴心的提供了脚本
sh install-deps.sh
3.CMAKE
因为高版本Ceph都是采用cmake来管理的,所以do_cmake走起
./do_cmake.sh
哈哈,报错开始了
看了下报错信息,原来是gcc版本太低了,需要使用gcc 7+,OK,那就升级gcc呗。通过查阅资料【1】,原来高版本的gcc是通过SCLo库装的,这个SCLo就是比epel更丰富的软件包集合。即需要安装devtoolset,而它和常规软件不太一样,是装在opt下面的。好嘞,那就开始装devtoolset工具吧
yum install -y centos-release-scl
yum install -y devtoolset-7
scl enable devtoolset-7 bash
执行完scl enable devtoolset-7 bash或source /opt/rh/devtoolset-7/enable再gcc --verion,就可以看到版本使用的已经是高版本gcc了。是的,你想的没错,重启一个session这个gcc版本又恢复默认的低版本了,所以启动高版本gcc就要每次都enable一下。
好啦,gcc升上去了,继续do_cmake吧
./do_cmake.sh
do_cmake完成,我们构建了一个带debug的版本,当然因为是刚开始学习嘛,都用默认好了。
4.编译
上一步执行完,会生成一个build目录,我们进入build开始make(一大波报错即将袭来)
cd build/
make
(1)遇到pthread错误
/root/single/build/CMakeFiles/CMakeError.log日志中看到,一大波未定义的引用,unbelievable,why?
难道是因为中午吃了个饭,session重开导致gcc版本用的不对了?
果不其然,好吧,enable一下,再来
scl enable devtoolset-7 bash
make
(2)遇到has no member named ‘merge’的问题
下一个报错如约而至...
根据https://tracker.ceph.com/issues/19271所说,可能是linux内核导致
./run-make-check.sh
呦吼,自己开始cmake了?好的,那重来一次吧
rm -rf build/
./run-make-check.sh
然后发现,它编译了起来,好的吧,先等等看
(3)缺libasan
https://stackoverflow.com/questions/38176407/cannot-find-lasan-and-libasan-preinit-o
https://bugzilla.redhat.com/show_bug.cgi?id=1303766
根据上述回答,看样子是缺libasan这个库,装装装
yum install devtoolset-7-libasan-devel
继续,编译走起
cd build
make -j8
libasam已经装了呀,why?好吧,没有source /opt/rh/devtoolset-7/enable,所以没找到,行吧。
source /opt/rh/devtoolset-7/enable
make
终于make好了,撒花~~
为什么要走一下源码编译的流程呢?readme是这样写的:
Note that these instructions are meant for developers who are compiling the code for development and testing. To build binaries suitable for installation we recommend you build deb or rpm packages, or refer to the`ceph.spec.in` or `debian/rules` to see which configuration options arespecified for production builds.
可见编译步骤走一遍是必要的,源码可以玩起来了。
接下去make install就可以安装了
参考: