On Fri, Feb 23, 2007, Caleb Epstein wrote:

> Are there any tools or best practices for keeping the <openpkg>/RPM
> dir clean?  For example, I'd be insterested in:
>
> * Removing packages from the SRC and PKG directory that are no longer
> referenced by the 00INDEX meta-data.
> * Any other interesting stuff I might be able to do with these artifacts

The RPM/SRC/ and RPM/TMP/ directories you can just clean from anything
without problems. They are just unpacked (SRC) or temporary (TMP) files.
For the RPM/PKG/ it depends what you wish. Some people let every package
stay around for a long time as they want to be able to downgrade to
older versions if necessary. Others (like me) always just keep the last
installed version and prune all others (see the little script below I
run), and others just remove everything there immediately as they don't
want their disk filled at all.

                                       Ralf S. Engelschall
                                       [EMAIL PROTECTED]
                                       www.engelschall.com

#!/usr/opkg/bin/perl

my $n = 1; # keep $n number of last RPMs of each package

#   determine SRPM files
chdir("/usr/opkg/RPM/PKG") || die;
foreach $ext (qw(*.rpm)) {
    my @rpms = glob($ext);
    #   determine releases of each package
    my $db = {};
    foreach $rpm (@rpms) {
        if ($rpm =~ m/^(.+)-([^-]+)-(\d{8})\.[^-]+-[^-]+-[^-]+\.rpm$/) {
            my ($name, $version, $release) = ($1, $2, $3);
            my $mtime = sprintf("%09d", (stat($rpm))[9]);
            $db->{$name} = {} if (not defined($db->{$name}));
            $db->{$name}->{"$release:$mtime"} = $rpm;
        }
    }
    #   perform keep/remove operations
    foreach my $name (sort(keys(%{$db}))) {
        my @releases = reverse(sort(keys(%{$db->{$name}})));
        foreach $release (@releases[0..($n-1)]) {
            next if (not defined($release));
            print "KEEP   ".$db->{$name}->{$release}."\n";
            system("chmod 664 ".$db->{$name}->{$release});
        }
        foreach $release (@releases[$n..$#releases]) {
            next if (not defined($release));
            print "REMOVE ".$db->{$name}->{$release}."\n";
            system("rm -f ".$db->{$name}->{$release});
        }
    }
}

______________________________________________________________________
OpenPKG                                             http://openpkg.org
User Communication List                      openpkg-users@openpkg.org

Reply via email to