[CentOS] Cleaning up an RPM repository.

Wed Jan 7 15:54:36 UTC 2009
Greg Bailey <gbailey at lxpro.com>

Friedrich Clausen wrote:
> Hello All,
>
> At my $WORK we have lots of in-house applications used to support the
> services we offer to customers and we deploy these to servers as RPMS.
> This works well for us except we have thousands of obsolete packages
> in our Yum repository that need to be cleaned up. What I would like to
> achieve is to keep the latest version + the last 3 revisions of a
> package and delete the older revisions.
>
> I was attempting to do this based on file timestamps but they are not
> reliable and in some cases packages were restored from backup in a way
> that did not preserve timestamps. So I am investigating writing a Perl
> script to do this but it is far from trivial due to the vast variety
> of version and release strings used. And there are certain situations
> in which the version strings are completely ambiguous (even to me)
> but, even if those have to be handled manually, then great time
> savings in cleaning up the rest automatically can still be achieved.
>
> So, before I start (re)inventing this particular wheel, I thought I
> would check with the folks on this list since I cannot be the only
> person with this problem. Are there any ready to use tools available
> to trim down an overwheight RPM repository by deleting obsolete
> packages?
>
> Many thanks!
>
> Fred.

Hi,

I've also faced this problem, and you're right:  relying on timestamps 
and/or sort order of the RPM filenames doesn't work.

The best tool I've found is "repomanage.py" from the yum-utils package 
available at:
http://yum.baseurl.org/download/yum-utils/

Even though yum-utils claims it needs a newer version of yum than I 
usually have, I've run the repomanage.py script that's included without 
any problems.

My typical use has been:

repomanage.py -o RPMS | xargs rm -f

where 'RPMS' is a directory with a whole mess of RPMs.  The 
repomanage.py script with '-o' as an argument spits out only obsoleted 
RPMs, so the above command removes all but the most recent version.

I see that there's a '--keep' option that *might* do what you're looking 
for (keeping the last 3 or 4 versions), but I have not used this option 
before.

-Greg