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命令将源码仓库复制一份到本地系统上,例如:
此外,我们也可以从Launchpad上获取稳定的发布版。
2.3.2 Devstack
Devstack是一套用来给开发人员快速部署OpenStack开发环境的脚本,它并不适用于生产环境。
在使用Devstack部署OpenStack开发环境时,我们不必再使用git命令手动获取OpenStack源码,因为这是Devstack工作的一部分。除此之外,Devstack自动化部署还包括:自动执行所有服务的安装脚本;自动生成正确的配置文件;自动安装依赖的软件包。Devstack自动化部署如图2-1所示。
图2-1 Devstack自动化部署
1.获取Devstack源码
· stack.sh:Devstack自动化部署工具的主执行脚本。判断是否存在localrc配置文件,如果不存在,则会进入交互模式,需要输入一些参数,如数据库的密码、Rabbit MQ的密码等。
· openrc:环境变量脚本。OpenStack命令在执行时需要依赖环境变量,如OS_USERNAME等,我们可以执行下面的命令导入环境变量:
· unstack.sh:卸载所有已经启动的服务。
· lib/:在这个目录下存放了每个服务的自动化安装脚本,如Nova、Swift等,包含了手动安装时执行的所有命令。
在旧的版本里,有一个脚本文件rejoin-stack.sh用于重启所有服务,但是在新的版本里已经将它删除,如果用户仍然需要它,则可以自己手动创建。
2.配置local.conf
在devstack目录下创建一个名称为local.conf 的文件:
这个简单的local.conf文件仅仅设置了一些密码。如果没有这个local.conf文件,则在Devstack执行过程中会要求输入相应的密码。
3.执行
整个执行过程无须干预,根据过程中输出的信息我们可以总结为:
· 下载并安装OpenStack运行所需要的系统软件,包括一些Python的组件、MySQL、rabbitmq-server等。
· 获取OpenStack各个项目的源码,包括Nova、Keystone、Glance、Horizon等。
· 安装OpenStack源码所依赖的Python库和框架。
· 安装OpenStack各组件。
· 启动各项服务。
整个安装过程所花费的时间依赖于网络状况,中间遇到较多的问题就是某些软件无法下载,但是脚本会比较清楚地报出错误信息,可以将安装出错的软件进行手动安装,之后重新执行脚本。
在stack.sh脚本成功执行后,Web服务会被自动启动,我们在浏览器地址栏中输入Devstack安装所在的服务器地址,就可以打开OpenStack Dashboard登录页面,如图2-2所示。
图2-2 OpenStack Dashboard登录页面
在首次执行 ./stack.sh 命令并获得成功之后,我们可以执行./unstack.sh 命令关闭所有服务。
从上述Devstack的安装过程可知,除了可能的local.conf文件配置,并不需要我们进行干预。