/[adm]/puppet/modules/mirror_cleaner/files/orphans_cleaner.pl
ViewVC logotype

Annotation of /puppet/modules/mirror_cleaner/files/orphans_cleaner.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1854 - (hide annotations) (download)
Tue Jul 19 01:14:54 2011 UTC (12 years, 8 months ago) by misc
File MIME type: text/plain
File size: 2532 byte(s)
add a module to clean orphan, as discussed on the ml :
- move rpm without a corresponding src.rpm to a directory after 2 weeks
- remove files after 1 month

1 misc 1854 #!/usr/bin/perl
2    
3     # this script will look at the list of rpm, and move orphan to a directory, if they are too old
4     # another script should take care of cleaning this directory ( or puppet )
5    
6     use strict;
7     use RPM4;
8     use File::stat;
9     use File::Basename;
10     use File::Copy;
11     use File::Path qw(make_path);
12    
13     my @arches = ('i586','x86_64');
14     my @sections = ('core','nonfree','tainted');
15     my @medias = ('backports', 'backports_testing', 'release', 'updates', 'updates_testing');
16     my $move_delay = 60*60*24*14;
17    
18     my ($path, $dest_path) = @ARGV;
19    
20     my $qf = "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm %{SOURCERPM}";
21    
22     my %hash ;
23     my ($filename, $srpm, $dest_rpm);
24    
25    
26     my ($source_hdlist, $binary_hdlist, $rpm_path);
27    
28     foreach my $a ( @arches ) {
29     foreach my $s ( @sections ) {
30     foreach my $m ( @medias ) {
31    
32     $rpm_path = "$path/$a/media/$s/$m";
33     $binary_hdlist = "$rpm_path/media_info/hdlist.cz";
34     $source_hdlist = "$path/SRPMS/$s/$m/media_info/hdlist.cz";
35    
36     next if not -f $source_hdlist;
37     next if not -f $binary_hdlist;
38    
39     next if stat($source_hdlist)->size() <= 64;
40     next if stat($binary_hdlist)->size() <= 64;
41    
42     open(my $hdfh, "zcat '$binary_hdlist' 2>/dev/null |") or die "Can't open $_";
43     while (my $hdr = stream2header($hdfh)) {
44     ($filename, $srpm) = split(/ /,$hdr->queryformat($qf));
45     push(@{$hash{$srpm}}, $filename);
46     }
47     close($hdfh);
48    
49    
50     open($hdfh, "zcat '$source_hdlist' 2>/dev/null |") or die "Can't open $_";
51     while (my $hdr = stream2header($hdfh)) {
52     $srpm = $hdr->queryformat("%{NAME}-%{VERSION}-%{RELEASE}.src.rpm");
53     delete $hash{$srpm};
54     }
55     close($hdfh);
56    
57     foreach my $v ( values %hash )
58     {
59     foreach my $rpm ( @{$v} ) {
60     $rpm = "$rpm_path/$rpm";
61     # sometimes, packages are removed without hdlist to be updated
62     next if not -f "$rpm";
63     if (time() > $move_delay + stat("$rpm")->ctime()) {
64     ( $dest_rpm = $rpm ) =~ s/$path/$dest_path/;
65     my $dir = dirname $dest_rpm;
66     make_path $dir if not -d $dir;
67     copy($rpm, $dest_rpm)
68     }
69     }
70     }
71     }
72     }
73     }

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.30