自动测试复杂RPM集的依赖关系

时间:2010-08-23 14:27:36

标签: redhat rpm yum

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

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

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

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

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

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

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

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

问题:

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

请记住我在RHEL(第3.2.22节),而不是Fedora,但EPEL可能也可以使用。

2 个答案:

答案 0 :(得分:0)

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

这不是特定于发行版的,你或许可以让它为你工作而不会太麻烦。

答案 1 :(得分:0)

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

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

这比在虚拟机上进行更快。