CentOS下搭建Teuthology Ceph自动化测试平台

介绍Gitbuilder与Ceph编译环境,之前的paddles与pulpiti等都是处于一台机器上的,他们不怎么吃资源,我这里是重新选择了一台性能较好的节点来作为编译节点,当然也可以找一台性能好的,把paddles、pulpito、gitbuilder编译工作都放在一台机器里。

该模块的用处是编译Ceph成rpm包,然后发布到自建的仓库中,做成一个局域网源。这样只需要在slave节点配置或者修改teuthology的代码,就可以让slave跑任务的时候,使用该源来安装ceph。

编译需要较好的机器,多核的比较好,并且内存总量平均下来最好每个核有2G内存。例如我搭建的测试环境是16核心,32G内存的,一台CentOS 7的虚拟机。

为了更高的自动化,会修改一些代码。实现自动编译打包,自动发布到repo上,并更新repo。

  • Gitbuilder与Ceph编译环境
  • Repo服务器
  • NTP服务器
  • 可能遇到的错误

Gitbuilder与Ceph编译环境

首先克隆gitbuilder到本地

#git clone https://github.com/ceph/gitbuilder.git

  • 1

将ceph克隆下来,这里建议先将ceph fork到自己的仓库(还有teuthology 、ceph-cm-ansible 等),我是将ceph fork到了自己github里面的仓库,因为社区上的ceph是在变化的,在任务节点跑任务的时候,依然会从网上拉ceph的源码,使用ceph/qa 目录下的一些测试脚本,如果你编译的ceph是之前的,任务节点跑任务安装了这个版本的ceph,而社区更新的ceph代码,加入新增了功能,那么在ceph/qa 中会多出一些内容,这时使用旧版本的ceph来测试自然就不可能通过新功能测试。所以后面的地方应该相应的也改成自己的仓库,例如teuthology的配置(本人就遇到了,又多花了时间,不多如果遇到这个问题,其实部署也就接近尾声了)

这里我依然克隆社区的ceph。

#cd gitbuilder

#git clone https://github.com/ceph/ceph.git build //gitbuilder只编译build目录下的代码

  • 1
  • 2
  • 3

修改gitbuilder 的代码。修改文件gitbuiler/run-build.sh

#vi run-build.sh

//if ../build.sh 2>&1; then 修改为下面这样

// if ../build.sh $commit 2>&1; then//传递一个参数给build.sh

  • 1
  • 2
  • 3
  • 4

修改build.sh

#mv build.sh.example build.sh

#vi build.sh //删除原本的例子,将内容改为下面的

  • 1
  • 2
  • 3

#!/bin/bash -x

#

# Copy this file to build.sh so that gitbuilder can run it.

#

# What happens is that gitbuilder will checkout the revision of your software

# it wants to build in the directory called gitbuilder/build/. Then it

# does "cd build" and then "../build.sh" to run your script.

#

# You might want to run ./configure here, make, make test, etc.

#

cp ../make-srpm.sh .

chmod 777 make-srpm.sh

./make-srpm.sh $1

exit 0

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

新建文件make-srpm.sh。创建目录并复制相关的包到对应的目录下,然后创建repo。相关目录结构需要与ceph官方的gitbuilder一样,不然teuthology运行的时候会报错。可以参看http://gitbuilder.ceph.com/ ,参照这个来创建目录,下面简单的写了写,并不包含错误处理之类的,只是简单的完成创建,可以基于下面我写的来修改。

#vi make-srpm.sh

内容如下:

#!/bin/sh

#

# Create a SRPM which can be used to build Ceph

#

# ./make-srpm.sh <version>

# rpmbuild --rebuild /tmp/ceph/ceph-<version>-0.el7.centos.src.rpm

#

./make-dist

rpmbuild -D"_sourcedir `pwd`" -D"_specdir `pwd`" -D"_srcrpmdir `pwd`" -bs ceph.spec

version=`git describe --match 'v*' | sed 's/^v//'`

commit=$1

rpmbuild --rebuild ceph-$version-0.el7.centos.src.rpm

#

mkdir -p /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/noarch

mkdir -p /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/SRPMS

mkdir -p /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/x86_64

touch /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/name

touch /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/sha1

touch /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/version

echo "ceph" > /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/name

echo $commit > /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/sha1

echo $version > /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/version

cp ~/rpmbuild/RPMS/x86_64/*$version* /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/x86_64

cp ceph-$version-0.el7.centos.src.rpm /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/SRPMS

cp /ceph_repos/ceph-release/* /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/noarch

mkdir -p /ceph_repos/ceph-rpm-centos7-x86_64-basic/sha1/

ln -s /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version /ceph_repos/ceph-rpm-centos7-x86_64-basic/sha1/$commit

createrepo --update /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/noarch/

createrepo --update /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/x86_64/

createrepo --update /ceph_repos/ceph-rpm-centos7-x86_64-basic/ref/v$version/SRPMS/

rm -rf /ceph_repos/ceph-rpm-centos7-x86_64-basic/repodata

createrepo --update /ceph_repos/ceph-rpm-centos7-x86_64-basic/

rm -rf /ceph_repos/repodata

createrepo --update /ceph_repos/

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

安装rpmbuild,并创建rpmbuild的工作目录于/root目录下

#yum install rpm-build rpmdevtools

#rpmdev-setuptree

  • 1
  • 2
  • 3

现在可以直接运行了,但是可以看看branches.sh,他将获取编译的版本,通过处理git show-ref 获取commit 和 branch,它会将所有的版本都包含进去,对于搭建一个demo,这个编译下来不知道多少次,又要多久!所以可以修改一下,只编译某一个版本,例如v14.0.0,还有那些可以去ceph下使用git show-ref看。

#vi branches.sh

……………………

cd “$DIR/build”

echo “v14.0.0”

exit 0

……………………

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

运行Gitbuilder

#./start

  • 1

Repo服务器

Ceph被编译成rpm包之后,已经复制到了相应的目录下,而且目录树的结构与ceph官方的gitbuilder一致。接下来就是将这个目录发布到局域网上,让其他的节点可以通过网络使用他们。

这里采用nginx来构建服务器。

安装nginx:

#yum install nginx

  • 1

启动 nginx:

#systemctl start nginx

  • 1

进入浏览器,输入本机的IP地址,可以看到nginx的欢迎界面,说明安装成功了。接下来就修改配置文件,将我们之前的目录发布出去。

#vi /etc/nginx/nginx.conf

修改两个地方:

default_type text/plain

………

location / {

# 打开目录控制,使我们的页面能以目录方式呈现给用户

autoindex on;

root /ceph_repos;

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

启动nginx:

#systemctl restart nginx

  • 1

使用浏览器访问 http://192.168.122.251(本机IP),就可以看到gitbuilder的目录树结构的界面了。

NTP服务器

#yum install ntp

#vi /etc/ntp.conf

修改

restrict 172.16.100.0 mask 255.255.0.0 nomodify

server 127.127.1.0

fudge 127.127.1.0 stratum 10

重启ntpd服务

#systemctl restart ntpd

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

可能遇到的错误

  • Can’t locate LockFile/Simple.pm in……………..

#yum install perl-CPAN

#perl -MCPAN -e ‘install “LockFile::Simple”’ //按照提示让其自动安装

#./start

  • 1
  • 2
  • 3
  • 4
  • Ceph编译环境没搞好

#yum groupinstall "Development Tools"

#yum install rpm-build python-virtualenv//看报错,缺什么安装什么

在Ceph下有编译的环境检测安装脚本,运行该脚本即可

#cd ~/gitbuilder/build

#bash run-make-check.sh

CentOS下搭建Teuthology Ceph自动化测试平台

相关推荐