IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux | Open source  >

在 Linux KVM 上创建一个 ooRexx 构建环境

内核虚拟机改善构建性能

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

样例代码

英文原文

英文原文


级别: 高级

W. David Ashley, 高级 IT 专家, IBM

2009 年 8 月 10 日

使用 ooRexx 开发随需应变的软件构建服务,ooRexx 使用 Linux® 内核虚拟机(KVM)提升性能。KVM 充当客户操作系统的主机,为用户构建目标软件。Apache Web 服务器控制构建并存储结果,供用户在以后检索结果。通过本文了解如何设置构建服务器和创建客户机,定制构建请求,以及组织和访问构建结果。

最近,Open Object Rexx 项目(ooRexx;参见本文后面的 参考资料 了解更多信息)将其旧的随需应变软件构建系统从由 VMware 托管的客户操作系统转移到由 Linux Kernel Virtual Machine (KVM) 托管的客户机上。这一改变提供了一个更加高效的构建环境,并且为用户减少了构建时间。

ooRexx 软件构建系统允许开发人员针对多个基于 x86 的平台和操作系统构建 ooRexx 软件包。目前,受支持的客户操作系统包括 Windows® XP (i386)、Fedora 10(i386 和 x86_64)和 Ubuntu 8.04(i386)。这些客户操作系统为 Windows (EXE)、Fedora 和 openSUSE (RPM) 以及 Ubuntu (DEB) 生成 ooRexx 安装和文档包。其他基于 x86 的操作系统也将根据 ooRexx 开发人员和用户的需求得到支持。

本文将展示如何创建自己的软件构建系统,使用 ooRexx 开发团队的设置作为例子,并为 ooRexx、Apache 和 Linux 开发人员提供了技巧和指导。您可以在本文结束部分 下载服务器和客户机脚本。该系统专门用于构建 ooRexx 软件,但是其中的概念可以应用于通用的软件构建系统。

本系统包括以下需求:

  • 需要一个 Web 接口来生成构建请求。
  • 需要一个 Web 接口来检索构建结果。
  • 需要支持多客户操作系统。
  • 客户操作系统必须执行完全自动化的构建。
  • 在构建结束时,应当生成电子邮件并发送给请求用户。

要满足这些需求,开发团队和我使用了一个四核的基于 Xeon 的服务器。该服务器包含 4GB 内存和 250GB 磁盘。我们选择 Fedora 10 x86_64 发行版作为主操作系统,主要是考虑到该发行版使用的 KVM 具有良好的稳定性,并且是最新版本。选择的硬件和软件可能有所不同,但是主要的硬件标准是您的处理器应当具有硬件虚拟化特性 — 这是使用 KVM 的必要条件。

设置服务器

设置构建服务器的第一步是确定分区模式。我们决定将客户操作系统的 Web 存储和映像分离到单独的分区中。我们为 Web 存储分配 50GB 的硬盘,为客户操作系统映像所在的 /var 分区分配 150GB 硬盘。其余硬盘空间被分配给 /home 分区和 /root 分区。

构建系统的一般需求

构建系统包含以下一些基本需求:

  • 频繁构建以尽早发现问题
  • 加快构建(速度越快,所做的越多)
  • 增量式构建处理(或构建避免)来反映较小的开发更新
  • 支持(至少在较低级别)管理源代码依赖关系,以尽可能地保持系统灵活性
  • 关于构建、编译和链接的提取/报告功能
  • 跟踪源代码和二进制文件匹配的报告系统(有效地比较新旧代码)
  • 报告有关构建状态或测试结果(成功或失败)的功能
  • 创建发行说明和系统文档的功能

接下来,我们将使用 Fedora 10 x86_64 发行版安装主操作系统。如果您要设置自己的系统,那么执行下面的操作可以避免很多麻烦:

  • 在启动安装之前通过机器的 BIOS 启用硬件虚拟化功能,这样 Fedora 将发现 KVM 是可用的。
  • 执行软件组件的定制安装,这样就可以选择 Fedora 虚拟化选项。

安装好服务器操作系统后,我们将它配置为可由客户操作系统访问。这包括对 Windows 客户机启用 Samba,以及对 Linux 客户机启用 NFS。这可以支持客户机访问构建结果分区,从而可以存储构建文件以供用户访问。主要 Samba 共享和主要 NFS 导出针对所有客户机都指向同一位置。

接下来,我们将配置 Apache Web 服务器以提供对构建请求系统(我将在 构建请求 中加以解释)和构建结果库的访问。

需要确定的一项配置决策与客户机的网络选项有关。默认安装被配置为对所有客户机应用一个私有的内部网。C 类网和 DHCP 服务器一起提供,来为客户机提供 IP 地址。另一个选择是设置系统,以将其中一个网络设备作为通向服务器外部网的网桥。这需要进行手动配置。您可以在 libvirt Wiki 中找到如何为服务器配置这一选项的示例(见 参考资料 中的链接)。





回页首


创建客户机

有两种方法可以为 KVM 创建客户机。对于第一种方法,只需要创建所需的客户机来满足需求。第二种方法采取更加长远的方式创建客户机。我们使用第二种方法创建客户机,并且如果具有必需的资源的话,那么推荐以该方法作为标准方法。

我们首先根据需求确定客户机的数量和类型。我们需要操作系统来为这些环境创建软件构建,并使用另一个操作系统创建文档。结果证明,在我们的例子当中,文档和 i386 RPM 任务可以被结合起来并由一个客户机处理。下面是所分配的客户机和任务:

  • Windows XP (i386):构建 Windows 安装可执行文件。
  • Fedora 10 (i386):构建 i386 RPM 文件和文档 ZIP 文件。
  • Fedora 10 (x86_64):构建 x86_64 RPM 文件。
  • Ubuntu 8.04 (i386):构建 DEB 文件。

我们采用的方法以映像的形式创建前面提到的客户机,这些映像稍后可以进行克隆。因此,每个客户机都拥有一个基本版本,可以在稍后克隆,定制后的克隆版本将执行实际的构建任务。

克隆 KVM 客户机非常简单。Fedora 10 提供的 virt-clone 脚本可以完全自动化这个任务。


清单 1. Fedora 10 的 virt-clone 脚本
				
$ virt-clone --original=Fedora10-i386-Base \
             --name=Fedora10-i386-Build    \
             --file=/var/lib/libvirt/images/Fedora10-i386-Build.img

original 选项指定客户操作系统的名称,因为它对于虚拟机管理器是已知的。name 选项指定新的客户机的名称。file 选项指定客户机的新映像文件的文件名。这将完全克隆一个已有客户机并将其复制到一个新的客户机版本。它还将修改新客户机的 MAC 地址和 UUID。因此,如果必要的话,将保存原始的客户机以供以后进行克隆,并且为您的定制提供一个新的客户机版本。

有关 virt-clone 脚本需要注意的一点是:如果原始客户机有一个未被连接的设备,比如 CD-ROM,那么脚本将失败。在对客户机进行克隆之前,必须删除所有未连接的设备。如果必要的话,可以在克隆完成后将它们重新添加到客户机中。

一旦创建好基本的构建客户机,那么将针对构建任务对每个客户机进行定制。此时,Windows XP 客户机是最具有挑战性的,因为 Visual C++ 编译器和 Software Development Kit 需要作为定制的一部分安装。除了在 Ubuntu 客户机上安装 NFS 之外,Linux 客户机基本上不需要定制。





回页首


构建请求

所有构建客户机需要进行一项额外的定制:Open Object Rexx 版本 3.2 必须安装在每一个客户机上。为什么?因为使用 ooRexx 编写的脚本控制每个客户机上的请求和构建过程。该脚本访问构建机器服务器上的 TCP/IP 端口,以搜索构建请求。如果找到某个请求,那么构建过程将被调用,并将创建一组安装文件(RPM、DEB、EXE)以及一个构建报告,并且这些内容被存储到构建机器服务器上,供用户通过 HTTP 访问。

ooRexx 构建请求脚本具有足够的智慧,它不会复制软件的已有构建版本。它还通过电子邮件通知用户构建已经完成,并提供一个 URL 指向构建机器服务器上存储构建的位置。

构建请求在构建机器服务器上通过 CGI 脚本生成。用户访问一个 HTTP Web 页面并请求一个针对他们所选的操作系统的构建。Apache 服务器随后调用 CGI 脚本,后者将请求放到一个队列中。构建客户机随后负责访问这些请求并执行所请求的操作。构建结果也可以通过 Web 站点下载获得。

如前所述,服务器和 build guest 客户机的代码可从下面 下载 获得。所有脚本都使用 ooRexx 编写,应当很容易执行。包含的文件包括:

  • buildserver.rex:该脚本运行在 Web 服务器上并维护客户操作系统用于查找工作的队列。
  • buildd.rex:该脚本运行在每个客户操作系统上并访问 Web 服务器上的队列来查找工作。每个客户机只具有一个队列,因此将只构建一种输出文件。
  • simq.cls:这个文件并不属于脚本,但是是由 buildserver.rex 脚本使用的类文件。
  • socket.cls:这个类文件由 buildd.rex 脚本使用。
  • streamsocket.cls:这个类文件也由 buildd.rex 脚本使用。




回页首


构建结果

构建结果由构建客户机放到 Web 站点中。构建进行了组织,因此每个 Subversion 修订具有自己的子目录,包含针对这个修订的所有平台客户机构建。同样,每个平台客户机生成一个构建报告,也存储在修订子目录中。

构建报告对于所有内容的正常工作是必不可少的。如果在构建期间出现一个错误,并且最终的输出文件并没有生成,那么用户必须通过某种方式来找到错误。因此,每个客户机上的构建过程将始终生成一个构建报告,并将其存储到构建库中。

构建库位置将 ooRexx 软件构建与文档构建分离开来。文档构建生成大量的输出文件,因此将文档构建与软件构建分离将非常方便。

目前,还没有出现自动化的构建清理过程。项目当前的输出并不是很多,因此暂时没有自动化需求。





回页首


结束语

通过将 VMware 构建客户机转换为 Linux KVM 客户机,每个客户机的构建时间最多可以减少 50%。这意味着 ooRexx 的开发周期也相应缩短。

ooRexx 开发团队目前为止是最大的构建机器用户群,但是在主要发行版的 alpha 和 beta 期间,大量 ooRexx 用户也将利用这个环境。这允许用户提供及时的反馈,并获得针对 ooRexx 的 bug 修复和增强。

使用最多的构建客户机之一就是文档构建器。所有 ooRexx 文档都使用 DocBook 编码。因此,如果不具备 DocBook 经验的话,在 Windows 系统上构建文档将非常困难。这对于大多数开发人员和用户来说确实是一个难题。通过提供所有人都可以访问的文档构建过程,我们确保开发人员和用户可以为文档做出贡献并进行维护。这为 ooRexx 生成了远远好于其他大多数开源项目的文档,这也是我们的开发团队引以为豪的地方。






回页首


下载

描述名字大小下载方法
构建服务器和客户脚本buildserver.zip23KBHTTP
关于下载方法的信息


参考资料

学习

获得产品和技术

讨论
  • 加入 My developerWorks 社区;您可以通过个人档案和定制主页获得符合自己的兴趣的 developerWorks 文章,并与其他 developerWorks 用户进行交流。


关于作者

David 是 IBM Lab Services 的高级 IT 专家。他拥有超过 25 年的 IT 软件开发经验。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款