0

我有一个包含约 150 个自定义 RPM 的软件套件,它们之间的依赖关系相当复杂:

  • 每个包的依赖树通常大约有五层深
  • 有几个包(故意)相互冲突
  • 大多数软件包依赖于一个或多个 Red Hat 软件包以及其他自定义软件包

我的持续集成机器构建了我所有的包并从中创建了一个 yum 存储库,然后旋转 yum 存储库的 ISO——这就是我的软件的分发方式。

我的问题:我希望 CI 机器为 ISO 中的每个包验证其所有依赖项是否由 ISO 中的其他自定义包或 Red Hat 包满足。这不仅旨在捕获底层软件中的错误,还旨在捕获忘记将更改推送到源代码控制中的发布分支的开发人员。

这是我想解决的方法(所以你们可以告诉我有更好的方法!):对于每个包,创建一个干净的虚拟机:

  • RHEL 或 CentOS 的基本安装
  • 指向 RHEL 镜像和我的 ISO 的包 repos(通过循环设备安装)

...并在虚拟机中调用“yum install xxx”。

问题是,这需要很长时间 - 安装每个软件包都会修改虚拟机的状态。每个 RPM 确实需要在“干净”的操作系统上进行测试,并且重新创建每个包大约需要 10 分钟。我可以在不修改 VM 或每次都从头开始重新创建 VM 的情况下测试我的包安装吗?我希望 yum 有一个与“rpm -i --test”类似的“--test”命令行参数,但我没有看到。我不能直接使用“rpm”,因为它不会自动下载依赖项。

问题:

  • 有人知道在“模拟”模式下运行 yum 的方法吗?
  • 有没有更好的方法来解决我的问题?

请记住,我在这里使用的是 RHEL(yum 3.2.22),而不是 Fedora,但 EPEL 可能可以使用。

4

2 回答 2

0

你可以使用我写的一个叫做 mach 的工具。它为分发设置了 chroot。你可以

  • 设置基本的chroot
  • mach -r (你的根) yum install 'rpm 1'
  • mach -r(你的根)安装基础(将卸载所有已安装的 rpm)
  • mach -r (你的根) yum install 'rpm 2'

它会比在虚拟机上做更快。

于 2012-08-30T16:46:35.587 回答
0

您几乎描述了 OSB:https ://build.opensuse.org/

它不是特定于发行版的,您可以让它为您工作而无需太多麻烦。

于 2010-11-15T23:07:39.667 回答