我有一个包含约 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 可能可以使用。