BlueStore源码编译笔记

613 阅读3分钟
需要运行ceph然后看下blustore相关的debug信息,看看这些数据结构怎么工作的。

源码安装

费劲周折,从开始第一次下载ceph的源码到build成功,换了2次环境,3个编译器,源码从最新master拉取到换到最终的v12.2.2,也是在下班时间弄的,断断续续折腾了一周,写下来方便后边直接复用之前的安装方法。
源码安装,我所遇到的现在总结下来看起来环境是比较费时间的,因为环境的不同,哪怕是相同代码版本,相同gcc,g++版本,相同make版本,相同的Linux版本,但是可能依赖的本地.so版本不同或者是被不同的g++编译器编译导致的可能在ABI上存在不兼容的情况都会导致编译失败,如果机器不够强悍,每次花费的时间还是挺多的,所以,如果按照下边的环境没有编译成功的,可以从上边说到的这些点进行尝试,下边我作为记录操作记录下我编译使用的所有重要环境信息,方便后续快速安装,不在这上边再次花费过多无用功。

环境准备

安装ceph源码下边只是说其中一个我真实操作的情况,实现编译成功的环境有无数种,不一定非要我这种哈。
  • Linux
Linux instance-yhipg98g 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
  • 依赖包
yum install libtool gcc gcc-c++ libuuid-devel keyutils-libs-devel libblkid-devel redhat-lsb libedit-*
yum install libatomic_ops-devel snappy-devel leveldb-devel libudev-devel cryptopp-* fuse-devellibaio-devel xfsprogs-devel

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


  • gcc/g++
Using built-in specs.
COLLECT_GCC=/usr/bin/gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux
Thread model: posix
gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
  • cmake

cmake version 3.13.0
  • ceph

编译源码

tar -xvf ceph_12.2.2.orig.tar.gz

cd ceph_12.2.2

./install-deps.sh

./do_cmake.sh

cd build/

make -jxxx 看你内存和机器核数,我虚拟机4核8GB,慢慢弄吧,晚上弄正好,make -j2

运行实例

cd build

MON=1 MDS=0 OSD=3 ../src/vstart.sh -d -n -x --bluestore

参数说明:
-m 指出monitor节点的ip地址和默认端口6789;
-n 指出此次部署为全新部署;
-d 指出使用debug模式(便于调试代码);
-r 指出启动radosgw进程;
--mon_num 指出部署的monitor个数;
--osd_num 指出部署的OSD个数;
--mds_num 指出部署的MDS个数;
--bluestore 指出ceph后端存储使用最新的bluestore;

停止实例

cd build
../src/stop.sh all

其它

在gcc安装的时候,因为>=5.1版本之后ABI不兼容之前的,所以可能会有问题,如果你非要设置关闭C++11的ABI去兼容旧的话,可能有些C++11代码编译不过去,具体没细看原因,它就是认为语法不对。
我编译gcc4.9.3的时候还改了源码,按照人家提交的diff代码补上去的,所以可能也是一个坑。
在依赖环境安装上,可能pip有些会拉取超时,可以随便上网上找下,设置pip超时,然后配置清华的源,我的下载速度从<1KB到了80MB/s,节省了许多时间。
另,从ceph的git上拉取的代码,总是会提示在cmakelist中设置的宏找不到,从上边的tar包拉取就OK,这个也是可以后边规避的。