Build environment isolation and file system diffing

build, debian, isolation, linux, rpm

Solution

I would definitely consider something along the lines of:

A)

- yum list (select your packages/dependencies whatever)

- use yumdownloader on the previous list (or use th pkgs you have already downloaded)

- createrepo

- ship on media with install script that adds the cd repo to repolist, etc.

or B)

first two steps as above, then pack the rpms into an archive build a package that contains all of the above and kicks off the actual install of the rpms (along the lines of rpm -Uvh /tmp/repo/*) as a late script (in the cleanup phase, maybe). Dunno if this can be done avoiding locks on the rpm database.

Problem

Alright so after trying to chase down the dependencies for various pieces of software for the n-th time and replicating work that various people do for all the different linux distributions I would like to know if there is a better way of bundling various pieces of software into one .rpm or .deb file for easier distribution. My current set up for doing this is a frankenstein monster of various tools but mainly Vagrant and libguestfs (built from source running in Fedora because none of the distributions actually ship it with `virt-diff`). Here are the steps I currently follow: - Spin up a base OS using either a Vagrant box or by create one from live CDs. - Export the `.vmdk` and call it `base-image`. - Spin up an exact replica of the previous image and go to town: use the package manager, or some other means, to download, compile, and install all the pieces that I need. Once again, export the `.vmdk` and call it `non-base-image`. - Make both base images available to the Fedora guest OS that has libguestfs. - Use `virt-diff` to diff the two images and dump that data to file called `diff`. - Run several ruby scripts to massage `diff` into another format that contains the information I need and none of the stuff I don't like things in `/var`. - Run another script to generate a command script for `guestfish` with a bunch of `copy-out` commands. - Run the `guestfish` script. - Run another script to regenerate the symlinks from `diff` because `guestfish` can't do it. - Turn the resulting folder structure into a .deb or .rpm file and ship it. I would like to know if there is a better way to do this. You'd think there would be but I haven't figured it out.

Original source