Ceph 编译(Giant版本)

如今入门Ceph的时候,大家一般用ceph-deploy工具比较多,这个工具的确很强大,很方便,对应的也就是很无脑。如果之后想深入Ceph或者想在生产环境中部署Ceph的话,就得熟悉Ceph源码编译了。这对我们熟悉Cephfeature的变化,component的相互关系以及围绕Ceph各种定制化扩展都大有裨益。本文就笔者Ceph源码编译过程和遇到的问题作出分享,希望有人能够得益于此。

原文地址: Ceph 编译(Giant版本)

环境声明

  • 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

下载地址:https://www.gnu.org/software/...

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手动源码编译遇到的问题还是蛮多的,如果不自己动手经历一下的话很多东西都不知道,当然这都是经验的积累,不断地锻炼自己解决问题的能力,要学会见招拆招,通过问题发现原理和本质。

你可能感兴趣的:(编译,存储技术,ceph)