【发布时间】:2010-08-23 14:27:36
【问题描述】:
我有一个包含约 150 个自定义 RPM 的软件套件,它们之间的依赖关系相当复杂:
- 每个包的依赖关系树通常大约有五级深度
- 有几个包(故意)相互冲突
- 大多数软件包依赖于一个或多个 Red Hat 软件包以及其他自定义软件包
我的持续集成机器构建我的所有包并从中创建一个 yum 存储库,然后旋转 yum 存储库的 ISO - 这就是我的软件的分发方式。
我的问题:我希望 CI 机器为 ISO 中的每个包验证其所有依赖项是否由 ISO 中的其他自定义包或 Red Hat 包满足。这不仅旨在捕获底层软件中的错误,还旨在捕获忘记将更改推送到源代码控制中的发布分支的开发人员。
这是我想解决的方法(所以你们可以告诉我有更好的方法!):为每个包创建一个干净的虚拟机:
- RHEL 或 CentOS 的基本安装
- 包存储库指向 RHEL 镜像和我的 ISO(通过循环设备安装)
...并在虚拟机中调用“yum install xxx”。
问题是,这需要很长时间 - 安装每个软件包都会修改虚拟机的状态。每个 RPM 确实需要在“干净”的操作系统上进行测试,并且重新创建需要大约 10 分钟每个包。我可以在不修改 VM 或每次都从头开始重新创建 VM 的情况下测试我的包安装吗?我希望 yum 有一个与“rpm -i --test”类似的“--test”命令行参数,但我没有看到。我不能直接使用“rpm”,因为它不会自动下载依赖项。
问题:
- 有人知道在“模拟”模式下运行 yum 的方法吗?
- 有没有更好的方法来解决我的问题?
请记住,我在这里使用的是 RHEL (yum 3.2.22),而不是 Fedora,但 EPEL 可能可以使用。
【问题讨论】:
-
您是否尝试过使用 vmware 工具制作虚拟机的快照,运行 yum 事务然后恢复为快照?
-
这是我听到的最好的建议,无论是在这里还是离线。我在 KVM 而不是 VMWare 上,所以我会使用 LVM 快照,但结果是一样的。谢谢!