Factoring RPM sets (and parsing comps.xml)

Philip Prindeville philipp_subx at redfish-solutions.com
Thu Oct 26 19:25:01 UTC 2006


[previously asked on anaconda-devel without seeing a response...]

I may have asked this question before, but I don't remember seeing
an answer that I grokked.  Maybe I didn't ask the question correctly.

My question is this:

Suppose we have an install disk with a repo on it that specifies the
following package sets (hypothetically)

@SYSTEM = sbin sbin-utils sbin-diags devices core modsupport
@DEVEL-BASE = gcc bin-utils gdb gprof gld
...

I'd like to be able to come up with a compact notation for expressing
what is on an installed system using the package sets with additions/
deletions.  For example, suppose the running system has:

...
sbin
sbin-utils
sbin-diags
devices
core
gcc
bin-utils
gdb
gprof
gld
gas
...

then this could be represented as:

@SYSTEM -modsupport
@DEVEL-BASE
+gas

rather than just the complete list of packages (i.e. it may be
more compact to say "all of SYSTEM except modsupport", rather
than listing out all the individual components of that set).

Why?  I suspect that there might have been some package sets
installed on an FC3 server that are no longer necessary, or that
the composition of certain package sets has changed in FC5,
so that if (for instance) gthumb has been replaced by eog in a
certain package set, that when I install the package set it comes
with the default packages for that distro.

It also would be useful to know what had been removed from
certain package sets (i.e. why modsupport was removed from
the SYSTEM set).

Is there an easy way to compute this?  An easy way to do this
might be to take an inventory of a system via "rpm -qa", and
then parse comps.xml and see if each set has at least 2/3rds
of its constituent elements present.  If it does, then output
the set name with a subtractive list of absence elements.
Otherwise, list the elements individually (or simply skip them
all together, and list them along with all remaining elements
not in a set when all of the sets have been tested).

Make sense?

Are there tools to do this or that can be easily modified to
do this?

Thanks,

-Philip






More information about the Kickstart-list mailing list