OpenStack是一个开源的云计算管理平台, 当前最新的版本是Stein. 当前OpenStack整体已经非常的稳定和成熟了。但是作为开源软件,在使用的过程当中难免的会遇到一些Bug,而了解OpenStack最好的方式就是在使用的过程当中遇到Bug后加以分析和解决。并且最好是能够把自己的Fix Commit到社区,使自己也慢慢的参与到OpenStack的开发中去。我在刚接触OpenStack,提交第一个patch的时候也是走了不少弯路的,所以本文主要讲述了如何构筑自己的OpenStack开发环境,如何向社区提交代码。
前提条件
创建Container
以CentOS为例
# 拉取docker image
docker pull ubuntu
# 启动Container
docker run -it -d --network host --name openstack_deloyment ubuntu
跑完上述命令,我们会直接进入到容器中。这个时候我们就可以直接在容器里面安装我们需要用到的软件包了。
安装依赖包
# 在容器里面
apt-get update
apt-get install iputils-ping
apt-get install net-tools
apt-get install git
apt-get install git-review
apt-get install libbz2-dev
配置Git
git config --global user.email <Email>
git config --global user.name <Name>
git config --global --add gitreview.username <自己Gerrit帐号的Profile里的Username>
配置公钥
由于向Gerrit提交Review的时候需要通过密钥进行认证,所以我们需要在本地创建一个密钥对,并且将公钥上传到Gerrit。
# 生成ssh密钥对,执行ssh-keygen后一路回车
ssh-keygen
# 在~/.ssh可以找到自己生成的密钥对
ls ~/.ssh
> id_rsa id_rsa.pub known_hosts
将公钥id_rsa.pub的内容通过Add Key添加到Gerrit。
构建Python测试环境
由于现在Python有Python2和Python3两个版本,在提交代码的时候OpenStack的各个组件都会针对Python2和Python3分别进行Unit Test. 由于上传代码后Gerrit那边的Zuul check比较缓慢。所以我们可以在自己本地构建Unit Test的测试环境,这样就可以更高效的进行开发了。
# OpenStack的Unit Test是基于Tox的
apt-get install tox
apt-get install vim
apt-get install wget
# 分别下载2.7和3.5两个版本的Python代码
wget https://www.python.org/ftp/python/3.5.6/Python-3.5.6.tgz
wget https://www.python.org/ftp/python/2.7.15/Python-2.7.15.tgz
# 安装编译Python代码需要的依赖包
apt-get install gcc
apt-get install g++
apt-get install make
# 安装libssl-dev,不然编译出来的python不支持ssl
apt-get install libssl-dev
# 编译Python3
tar zxf Python-3.5.6.tgz
cd Python-3.5.6
./configure --prefix=$HOME/.python3.5
make install
# 编译Python2
tar zxf Python-2.7.15.tgz
cd Python-2.7.15
./configure --prefix=$HOME/.python2.7
make install
# 创建Python2运行时环境
virtualenv py27 -p .python2.7/bin/python2.7
# 创建Python3运行时环境
virtualenv py35 -p .python3.5/bin/python3.5
# 这个时候我们就可以非常简单的在python2和python3之间切换了
# 并且由于我们是跑在Container里面,所以和底层的操作系统也是没有关系的
# 切换成Python2运行时环境
. /root/py27/bin/activate
# 切换成Python3运行时环境
. /root/py35/bin/activate
提交代码到Gerrit
首先我们要找一个我们想要参与的Project,然后把它的源码通过Git下载下来。
git clone ssh://xxx@review.openstack.org:29418/openstack/nova
cd nova
git checkout -b TOPIC-BRANCH # Ex: fix_bug_11111, 11111可以是这个bug在launchpad里的bug编号
# 修改完后
git commit -a
# 添加Commit Message,之后通过git review提交Review
# Commit Message怎么写可以参考:https://docs.openstack.org/infra/manual/developers.html
git review
# 如果有人在Gerrit上留了Comment,需要再次修改代码,则修改完成后通过下述命令更新需要Review的代码
git commit -a --amend
git review
# 如果是backport已经提交到master的代码到某一个branch,譬如说要backport到Queens Release
git checkout -t origin/stable/queens
git cherry-pick -x 4e627004f6a21bfe248d82a32818faabf1834c06
Unit Test
每次改完代码后,在提交代码之前我们可以跑一下Unit Test,这样可以更快的发现问题。
cd nova
# 修改完代码后
# 针对Python2跑Unit Test
. /root/py27/bin/activate
tox -e py27
# 针对Python3跑Unit Test
. /root/py35/bin/activate
tox -e py35