Automatically test dependencies of complex RPM set
I have a software suite of ~150 custom RPMs, with fairly complex dependencies between them:
- the tree of dependencies for each package is usually about five levels deep
- there are several packages that (deliberately) conflict with one another
- most packages depend on one or more Red Hat packages as well as other custom packages
My Continuous Integration machine builds all my packages and creates a yum repository from them, and then spins an ISO of the yum repo - which is how my software is distributed.
My problem: I'd like the CI machine to verify, for every package in the ISO, that all its dependencies are met either by other custom packages in the ISO, or by Red Hat packages. This is intended to trap not only bugs in the underlying software but also developers who have forgotten to push their changes to the release branch in source control.
Here's how I'd like to solve it (so you guys can tell me there's a better way!): 开发者_如何学Pythonfor each package, create a clean virtual machine with:
- a basic install of RHEL or CentOS
- package repos pointing at a RHEL mirror and my ISO (mounted via loop device)
...and call "yum install xxx" in the Virtual Machine.
The trouble is, this takes too long - doing each package install modifies the state of the Virtual Machine. Each RPM really needs to be tested on a "clean" OS, and recreating that takes ~10 minutes per package. Can I test my package install without modifying the VM or recreating the VM from scratch every time? I was hoping there was a "--test" command line argument to yum in a similar way to "rpm -i --test", but I don't see one. I can't use "rpm" directly because it doesn't automatically download dependencies.
The questions:
- does anyone know of a way to run yum in "simulated" mode?
- is there a better way to solve my problem?
Bear in mind I'm on RHEL here (yum 3.2.22), not Fedora, but EPEL is probably all right to use.
You pretty much described the OSB: https://build.opensuse.org/
It is not distro specific, you might be able to make it work for you w/o too much hassle.
You could use a tool I wrote called mach. It sets up a chroot for a distribution. You could
- set up the basic chroot
- mach -r (your root) yum install 'rpm 1'
- mach -r (your root) setup base (which will uninstall all installed rpms)
- mach -r (your root) yum install 'rpm 2'
It would be faster than doing it on a vm.
精彩评论