[Rpm-maint] How to get RPM requires quickly
Richard W.M. Jones
rjones at redhat.com
Mon Sep 15 12:55:24 UTC 2014
On Mon, Sep 15, 2014 at 03:42:37PM +0300, Panu Matilainen wrote:
> On 09/13/2014 04:13 PM, Richard W.M. Jones wrote:
> >
> >We have a program[1] that needs to take a list of installed RPM
> >package names, and quickly generate all of the installed dependencies
> >(recursively).
> >
> >*Note* this is NOT a question about yum/dnf/zypper/etc depsolving.
> >It's about doing 'rpm -qR' quickly on installed packages only.
> >
> >At the moment we run the following command:
> >
> > rpm -qR <current set of packages> |
> > awk '{print $1}' |
> > xargs rpm -q --qf '%%{name}\n' --whatprovides |
> > grep -v 'no package provides' |
> > sort -u
> >
> >The output is added to the current set, and we repeat the process
> >until the set of packages reaches a fixpoint.
> >
> >To give you an idea, on a typical starting set this takes around 20 seconds,
> >which is over half the total running time of the program.
> >
> >Does anyone have any suggestions about how to do this more quickly
> >and/or cleverly? Maybe using rpmlib (which unfortunately seems to
> >lack any documentation)?
>
> That kind of usage is pretty much worst case behavior for rpm as it
> defies almost all caching etc.
I never claimed it was clever :-)
> For immediate speed gain with no
> other changes, add --nosignature to stop rpm from
> re-re-re-re-revalidating header signatures over and over again. In
> the average 'rpm -qa' time --nodigest doesn't help much but the
> cumulative effect might be worth it here.
That helps a bit. Just adding --nosignature --nodigest to every
invocation of RPM has reduced the time from 20 seconds to 17 seconds.
I guess the next step is rpmlib ...
Thanks,
Rich.
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine. Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/
More information about the Rpm-maint
mailing list