On 09/07/2014 18:14, Les Mikesell wrote:
On Wed, Jul 9, 2014 at 11:56 AM, Jonathan Dieter jdieter@gmail.com wrote:
On 07/09/2014 07:38 AM, Les Mikesell wrote:
Is there any way to use deltarpms to get repeatable updates out of yum? That is can you tell yum to only use the deltas from a particular run/time even if newer ones or newer rpm packages exist in the repository?
I've never heard of them used this way, and I don't think the code has been written to do this. It could possibly be implemented as a yum/dnf plugin.
So there's no way to force yum to only use deltas - or better, one set of deltas? I've been looking for a sane way to get repeatable updates out of yum forever (i.e. update production to match your last QA update after testing is complete), and no, I don't consider keeping a snapshot copy of a repository in every state that I might want to reproduce to be a sane approach.
Deltarpms are nothing magical in this regard. They're a patch (changed files, new header data) between RPM N-V1-R1 and N-V2-R2. If yum decides it can use a drpm as part of a transaction, it downloads it, and passes it to applydeltrarpm. applydeltarpm reconstructs the RPM N-V2-R2 using existing on-disk contents of N-V1-R1 and the drpm. The reconstructed RPM is put into yum's download directory, where the normal package installation routines (and librpm) pick it up and install it, no differently than if yum had downloaded the entire RPM. It's just a different way of getting that new RPM onto disk, ready for librpm to install it.
What you want sounds like a couple of fairly simple python scripts using the yum api. On box A, run a script that dumps a list of installed packages, with full N-V-R for each. Move the list to box B. Pass it to another script that creates a yum transaction to upgrade (or downgrade) packages to those versions, and install any missing packages. For bonus points it could remove extra packages it finds. None of this requires drpms. Hell, if you don't feel like going near the yum api, I reckon you could do it with a bash script to generate an input file to pass to "yum shell".
Actual implementation of said scripts is of course an exercise for the reader ;) And probably quite a fun and rewarding one, too.