如今入门Ceph的时候,大家一般用ceph-deploy工具比较多,这个工具的确很强大,很方便,对应的也就是很无脑。如果之后想深入Ceph或者想在生产环境中部署Ceph的话,就得熟悉Ceph源码编译了。这对我们熟悉Ceph的feature的变化,component的相互关系以及围绕Ceph各种定制化扩展都大有裨益。本文就笔者Ceph源码编译过程和遇到的问题作出分享,希望有人能够得益于此。
环境声明
OS: Centos 6.8
Ceph: Giant
源码下载
指定 giant 分支
git clone -b giant git://github.com/ceph/ceph.git
下载子模块
git submodule update --init --recursive
这一步我始终更新不了,尝试了一些办法未果,所以就去直接手动下载了源码,这个问题以后有时间看下
预检
cd ceph
./autogen.sh
./configure
Autogen
这一步会频繁的报错一些m4文件没有,这需要我们手动创建这些m4文件夹即可,
一开始我在ceph根目录创建了m4文件夹,并生成了包括acx_pthread.m4在内的文件,但是还是报错:acx_pthread.m4 not exist,后来发现这时候已经切换目录了,不止一个地方需要m4文件夹,一共有这几个地方需要手动创建目录:mkdir m4
./src/rocksdb/m4
./src/gtest/m4
./src/erasure-code/jerasure/jerasure/m4
./src/erasure-code/jerasure/gf-complete/m4
./m4
如果还是报错一些文件不存在,并且通过上述方法不能自行初始化生成的话,可以从网上或者已经编译过的ceph环境拷贝过来
报错:umdefined macro
Configure
这一步是编译过程中可能出错的次数最多的,因为可能会因为你的环境缺少相应的包不断报错。不过数量虽多,解决起来还是比较容易的,就根据报错的缺包对应下载安装就好了,下面我先给出一个所有包的安装步骤,然后再针对每个报错环节给出具体的解决方案
总体解决方案
# 1. 通过yum安装所有可以安装的包
yum install -y yasm libuuid-devel libblkid-devel libudev-devel cryptopp-devel fuse-devel libunwind-devel libedit-devel libatomic_ops-devel snappy-devel leveldb-devel libaio-devel xfsprogs-devel boost*
# 2. 部分yum不能安装的可以通过rpm安装
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.2.1/gperftools-2.2.1.tar.gz
tar -zxvf gperftools-2.2.1.tar.g
cd gperftools-2.2.1
./configure
make
make install
具体解决方案
1.yasm
报错:
yasm command not found
解决:
yum install yasm -y
2.libuuid
报错:
configure: error: libuuid not found
解决:
yum install libuuid-devel -y
3.libblkid
报错:
configure: error: blkid/blkid.h not found (libblkid-dev, libblkid-devel)
解决:
yum install libblkid-devel -y
4.libudev
报错
configure: error: libudev.h not found (libudev-dev, libudev-devel)
解决:
yum install libudev-devel -y
5.crypto
报错:
configure: error: no suitable crypto library found
解决:
yum install cryptopp-devel -y
6.fuse
报错:
configure: error: no FUSE found (use --without-fuse to disable)
解决:
yum install fuse-devel -y
7.tcmalloc
报错:
configure: error: no tcmalloc found (use --without-tcmalloc to disable)
解决:
# 1. 需要先安装libunwind-devel,被gperftools依赖
yum install libunwind-devel -y
# 2. 安装tcmalloc(yum无法安装,需要通过rpm的方式)
wget https://github.com/gperftools/gperftools/releases/download/gperftools-2.2.1/gperftools-2.2.1.tar.gz
tar -zxvf gperftools-2.2.1.tar.g
cd gperftools-2.2.1
./configure
make
make install
8.libedit
报错:
configure: error: No usable version of libedit found.
解决:
yum install libedit-devel -y
9.libatomic-ops
报错:
configure: error: no libatomic-ops found (use --without-libatomic-ops to disable)
解决:
yum install libatomic_ops-devel -y
10.libsnappy
报错:
configure: error: libsnappy not found
解决:
yum install snappy-devel -y
or
wget ftp://195.220.108.108/linux/centos/6.9/os/x86_64/Packages/snappy-devel-1.1.0-1.el6.x86_64.rpm
rpm -ivh snappy-devel-1.1.0-1.el6.x86_64.rpm
11.libleveldb
报错:
configure: error: libleveldb not found
解决:
yum install leveldb-devel
12.libaio
报错:
configure: error: libaio not found
解决:
yum install libaio-devel -y
13.libxfs
报错:
configure: error: xfs/xfs.h not found (--without-libxfs to disable)
解决:
yum -y install xfsprogs-devel
14.boost
报错:
Can't find boost spirit headers
解决:
yum install boost* -y
编译安装
机器配置不好的话,编译需要时间比较长。可以使用make -j增加并发度,4表示同时执行的make方法数。
make -j4
make install(可选)
小结
ceph手动源码编译遇到的问题还是蛮多的,如果不自己动手经历一下的话很多东西都不知道,当然这都是经验的积累,不断地锻炼自己解决问题的能力,要学会见招拆招,通过问题发现原理和本质。