87901735 2018-07-18
介绍Gitbuilder与Ceph编译环境,之前的paddles与pulpiti等都是处于一台机器上的,他们不怎么吃资源,我这里是重新选择了一台性能较好的节点来作为编译节点,当然也可以找一台性能好的,把paddles、pulpito、gitbuilder编译工作都放在一台机器里。
该模块的用处是编译Ceph成rpm包,然后发布到自建的仓库中,做成一个局域网源。这样只需要在slave节点配置或者修改teuthology的代码,就可以让slave跑任务的时候,使用该源来安装ceph。
编译需要较好的机器,多核的比较好,并且内存总量平均下来最好每个核有2G内存。例如我搭建的测试环境是16核心,32G内存的,一台CentOS 7的虚拟机。
为了更高的自动化,会修改一些代码。实现自动编译打包,自动发布到repo上,并更新repo。
Gitbuilder与Ceph编译环境
首先克隆gitbuilder到本地
#git clone https://github.com/ceph/gitbuilder.git
将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目录下的代码
修改gitbuilder 的代码。修改文件gitbuiler/run-build.sh
#vi run-build.sh
//if ../build.sh 2>&1; then 修改为下面这样
// if ../build.sh $commit 2>&1; then//传递一个参数给build.sh
修改build.sh
#mv build.sh.example build.sh
#vi build.sh //删除原本的例子,将内容改为下面的
#!/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
新建文件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/
安装rpmbuild,并创建rpmbuild的工作目录于/root目录下
#yum install rpm-build rpmdevtools
#rpmdev-setuptree
现在可以直接运行了,但是可以看看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
……………………
运行Gitbuilder
#./start
Repo服务器
Ceph被编译成rpm包之后,已经复制到了相应的目录下,而且目录树的结构与ceph官方的gitbuilder一致。接下来就是将这个目录发布到局域网上,让其他的节点可以通过网络使用他们。
这里采用nginx来构建服务器。
安装nginx:
#yum install nginx
启动 nginx:
#systemctl start nginx
进入浏览器,输入本机的IP地址,可以看到nginx的欢迎界面,说明安装成功了。接下来就修改配置文件,将我们之前的目录发布出去。
#vi /etc/nginx/nginx.conf
修改两个地方:
default_type text/plain
………
location / {
# 打开目录控制,使我们的页面能以目录方式呈现给用户
autoindex on;
root /ceph_repos;
}
启动nginx:
#systemctl restart nginx
使用浏览器访问 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
可能遇到的错误
#yum install perl-CPAN
#perl -MCPAN -e ‘install “LockFile::Simple”’ //按照提示让其自动安装
#./start
#yum groupinstall "Development Tools"
#yum install rpm-build python-virtualenv//看报错,缺什么安装什么
在Ceph下有编译的环境检测安装脚本,运行该脚本即可
#cd ~/gitbuilder/build
#bash run-make-check.sh