OpenStack设计与实现(第3版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3 部署开发环境

对于开源项目来说,所谓的开发环境应该包括两部分:一是源码,二是运行测试源码的环境。

如果我们只是希望了解实现原理与框架,那么从源码仓库下载源码,通过合适的浏览工具阅读即可。如前文所述,OpenStack使用Git管理源码,这就意味着我们起码要能够使用Git工具。

而如果我们希望能够成为一个开发者并贡献自己的代码,则搭建一个运行、测试自己代码的环境是必需的,对于OpenStack而言,这部分的工作通常由Devstack来完成。

2.3.1 Git

要成为一名OpenStack开发者,贡献自己的代码,我们必须能够与其他众多的开发者协同工作,则熟练使用Git管理代码便成为一个必备的基础条件。

1.Git的由来

Linus于2002年2月开始使用BitKeeper作为Linux内核的版本控制工具。但是BitMover公司在商业版的BitKeeper之外所提供的BitKeeper是仅可免费使用但不允许加以修改、开放的精简版,因此,包括GNU之父Richard Stallman之内的很多人,对Linus使用BitKeeper感到不满。

然而,当时市场上并没有其他具备BitKeeper类似功能的自由软件可用,有些人就尝试对其进行逆向工程,这惹恼了BitMover公司,于是该公司决定停止提供BitKeeper的免费版本。为解决无工具可用的窘境,Linus便自行开发Git,希望在适当的工具出现前,暂时地充当解决方案。当时Linus将Git称为“the stupid content tracker”(愚蠢的内容管理器)。当Git获得迅速成长之后,Linus就建议将其作为长期的解决方案,并于之后的2.6.12-rc3内核第一次采用Git进行发布。

2.一段录像

关于Git的历史有一段很著名的录像,是Linus在Google的一个演讲。在这段录像中,Linus说明了设计Git的原因、基本的设计哲学,以及与其他版本控制工具的比较。

从技术的观点上,Linus非常尖锐地批判了CVS与SVN。虽然Linus从来没有使用过CVS去管理内核代码,但是他在商业公司曾对其有过一段时间不短的使用经历,并且对其非常厌恶。同时他批判SVN是毫无意义的,因为SVN尝试从各方面去改善CVS的一些缺点,却无法根本地解决一些基本的使用限制。具体来说,SVN改善了创建分支所耗费的成本,与CVS相比,利用了比较少的系统资源,却无法解决合并分支的需求。但是在许多项目的开发过程中,经常需要为不同的新功能创建分支、合并分支,如此一来,SVN就成了一个没有未来的项目。

Git作为一个分布式的版本控制工具,用户可以随意创建新分支,进行修改、测试、提交,这些在本地的提交完全不会影响到其他人,可以等到工作完成后再提交给公共的仓库。这样就可以支持离线工作,稍后再将本地的提交内容提交到服务器上。

3.获取OpenStack源码

OpenStack源码仓库位于GitHub,可以使用git命令将源码仓库复制一份到本地系统上,例如:

img

此外,我们也可以从Launchpad上获取稳定的发布版。

2.3.2 Devstack

Devstack是一套用来给开发人员快速部署OpenStack开发环境的脚本,它并不适用于生产环境。

在使用Devstack部署OpenStack开发环境时,我们不必再使用git命令手动获取OpenStack源码,因为这是Devstack工作的一部分。除此之外,Devstack自动化部署还包括:自动执行所有服务的安装脚本;自动生成正确的配置文件;自动安装依赖的软件包。Devstack自动化部署如图2-1所示。

img

图2-1 Devstack自动化部署

1.获取Devstack源码

img

· stack.sh:Devstack自动化部署工具的主执行脚本。判断是否存在localrc配置文件,如果不存在,则会进入交互模式,需要输入一些参数,如数据库的密码、Rabbit MQ的密码等。

· openrc:环境变量脚本。OpenStack命令在执行时需要依赖环境变量,如OS_USERNAME等,我们可以执行下面的命令导入环境变量:

img

· unstack.sh:卸载所有已经启动的服务。

· lib/:在这个目录下存放了每个服务的自动化安装脚本,如Nova、Swift等,包含了手动安装时执行的所有命令。

在旧的版本里,有一个脚本文件rejoin-stack.sh用于重启所有服务,但是在新的版本里已经将它删除,如果用户仍然需要它,则可以自己手动创建。

2.配置local.conf

在devstack目录下创建一个名称为local.conf 的文件:

img

这个简单的local.conf文件仅仅设置了一些密码。如果没有这个local.conf文件,则在Devstack执行过程中会要求输入相应的密码。

3.执行

img

整个执行过程无须干预,根据过程中输出的信息我们可以总结为:

· 下载并安装OpenStack运行所需要的系统软件,包括一些Python的组件、MySQL、rabbitmq-server等。

· 获取OpenStack各个项目的源码,包括Nova、Keystone、Glance、Horizon等。

· 安装OpenStack源码所依赖的Python库和框架。

· 安装OpenStack各组件。

· 启动各项服务。

整个安装过程所花费的时间依赖于网络状况,中间遇到较多的问题就是某些软件无法下载,但是脚本会比较清楚地报出错误信息,可以将安装出错的软件进行手动安装,之后重新执行脚本。

在stack.sh脚本成功执行后,Web服务会被自动启动,我们在浏览器地址栏中输入Devstack安装所在的服务器地址,就可以打开OpenStack Dashboard登录页面,如图2-2所示。

img

图2-2 OpenStack Dashboard登录页面

在首次执行 ./stack.sh 命令并获得成功之后,我们可以执行./unstack.sh 命令关闭所有服务。

从上述Devstack的安装过程可知,除了可能的local.conf文件配置,并不需要我们进行干预。