--- builds_bin/update_repos 2012/07/27 18:07:11 1.70 +++ builds_bin/update_repos 2013/02/13 19:36:25 1.71 @@ -26,11 +26,10 @@ my $repotag = 'sme'; my @archs = ( 'i386', 'x86_64' ); -my $distrepo = { '7' => { active => 1, +my $distrepo = { '7' => { active => 0, centos => 4, repo => '/build/smeserver/repo/7/', - os => 'RPMS/', - builds => '/build/builds/smeserver-7-core/', + builds => ['/build/builds/smeserver-7-core/'], community => '/build/builds/smeserver-7-contribs/', stage => '/build/smeserver/stage/7/', sign => 1, @@ -39,13 +38,21 @@ my $distrepo = { '7' => { active => 1 '8' => { active => 1, centos => 5, repo => '/build/smeserver/repo/8/', - os => '', - builds => '/build/builds/smeserver-8-core/', + builds => ['/build/builds/smeserver-8-core/'], community => '/build/builds/smeserver-8-contribs/', stage => '/build/smeserver/stage/8/', sign => 1, checksum => 'sha', }, + '9' => { active => 1, + centos => 6, + repo => '/build/smeserver/repo/testing/9/', + builds => ['/build/builds/smeserver-9-core/'], + community => '/build/builds/smeserver-9-contribs/', + stage => '/build/smeserver/stage/9/', + sign => 0, + checksum => 'sha256', + }, }; my $repos = { "${repotag}os" => { prio => 19, inc => 1, ver => 1, rel => 1, os => 1 }, @@ -65,27 +72,27 @@ my $repos = { "${repotag}os" 'stage' => { prio => 1, inc => 0, ver => 0, rel => 0, stage => 1, os => 1 }, }; -my $baserepo = { "~S${repotag}os/~A/$osdir/~O" => "${repotag}os", - "~S${repotag}updates/~A/RPMS/" => "${repotag}updates", - "~S${repotag}updates-testing/~A/RPMS/" => "${repotag}updates-testing", - "~S${repotag}extras/~A/RPMS/" => "${repotag}extras", - "~S${repotag}addons/~A/RPMS/" => "${repotag}addons", - "~S${repotag}contribs/~A/RPMS/" => "${repotag}contribs", - "~S${repotag}test/~A/RPMS/" => "${repotag}test", - "~S${repotag}dev/~A/RPMS/" => "${repotag}dev", - "/build/smeserver/stage/~s/~A/$osdir/~O" => 'stage', - '/mirrors/centos/~C/fasttrack/~A/RPMS/' => 'centos', - '/mirrors/centos/~C/updates/~A/RPMS/' => 'centos', - '/mirrors/centos/~C/os/~A/CentOS/~O' => 'centos', - '/mirrors/centos/~C/extras/~A/RPMS/' => 'centos', - '/mirrors/centos-vault/~C/fasttrack/~A/RPMS/' => 'centos', - '/mirrors/centos-vault/~C/updates/~A/RPMS/' => 'centos', - '/mirrors/centos-vault/~C/os/~A/CentOS/~O' => 'centos', - '/mirrors/centos-vault/~C/extras/~A/RPMS/' => 'centos', +my $baserepo = { "~S${repotag}os/~A/" => "${repotag}os", + "~S${repotag}updates/~A/" => "${repotag}updates", + "~S${repotag}updates-testing/~A/" => "${repotag}updates-testing", + "~S${repotag}extras/~A/" => "${repotag}extras", + "~S${repotag}addons/~A/" => "${repotag}addons", + "~S${repotag}contribs/~A/" => "${repotag}contribs", + "~S${repotag}test/~A/" => "${repotag}test", + "~S${repotag}dev/~A/" => "${repotag}dev", + "/build/smeserver/stage/~s/~A/" => 'stage', + '/mirrors/centos/~C/fasttrack/~A/' => 'centos', + '/mirrors/centos/~C/updates/~A/' => 'centos', + '/mirrors/centos/~C/os/~A/' => 'centos', + '/mirrors/centos/~C/extras/~A/' => 'centos', + '/mirrors/centos-vault/~C/fasttrack/~A/' => 'centos', + '/mirrors/centos-vault/~C/updates/~A/' => 'centos', + '/mirrors/centos-vault/~C/os/~A/' => 'centos', + '/mirrors/centos-vault/~C/extras/~A/' => 'centos', '/mirrors/fedora/epel/~C/~A/' => 'epel', '/mirrors/fedora/epel/testing/~C/~A/' => 'epel', - '/mirrors/rpmforge/redhat/el~C/en/~A/dag/RPMS/' => 'rpmforge', - '/mirrors/rpmforge/redhat/el~C/en/~A/extras/RPMS/' => 'rpmforge', + '/mirrors/rpmforge/redhat/el~C/en/~A/dag/' => 'rpmforge', + '/mirrors/rpmforge/redhat/el~C/en/~A/extras/' => 'rpmforge', '/mirrors/rpmforge/source/' => 'rpmforge', '/mirrors/atrpms/el~C-~A/atrpms/stable/' => 'atrpms', '/mirrors/atrpms/el~C-~A/atrpms/testing/' => 'atrpms', @@ -94,10 +101,10 @@ my $baserepo = { "~S${repotag}os/~A/$osd }; if ( $opts{q} ) { - $baserepo->{'/mirrors/centos-qa/CentOS/~C/fasttrack/~A/RPMS/'} = 'centos'; - $baserepo->{'/mirrors/centos-qa/CentOS/~C/updates/~A/RPMS/'} = 'centos'; - $baserepo->{'/mirrors/centos-qa/CentOS/~C/os/~A/CentOS/~O'} = 'centos'; - $baserepo->{'/mirrors/centos-qa/CentOS/~C/extras/~A/RPMS/'} = 'centos'; + $baserepo->{'/mirrors/centos-qa/CentOS/~C/fasttrack/~A/'} = 'centos'; + $baserepo->{'/mirrors/centos-qa/CentOS/~C/updates/~A/'} = 'centos'; + $baserepo->{'/mirrors/centos-qa/CentOS/~C/os/~A/'} = 'centos'; + $baserepo->{'/mirrors/centos-qa/CentOS/~C/extras/~A/'} = 'centos'; } my $skippkg = { '7' => { 'centos' => { map { $_ => 1 } ( 'horde', 'imp-h3', 'ingo-h3', 'turba-h3' ) }, @@ -110,6 +117,10 @@ my $skippkg = { '7' => { 'centos' 'epel' => { map { $_ => 1 } ( 'clamav', 'fping', 'html2ps', 'horde', 'libtalloc', 'libtdb', 'oidentd', 'perl-Compress-Bzip2', 'perl-Compress-Raw-Zlib', 'perl-Compress-Raw-Bzip2', 'perl-Crypt-OpenSSL-Bignum', 'perl-Crypt-OpenSSL-Random', 'perl-Crypt-OpenSSL-RSA', 'perl-Razor-Agent', 'smolt' ) }, 'rpmforge' => { map { $_ => 1 } ( 'dovecot', 'libtalloc', 'mod_auth_tkt', 'perl-Test-Inline', 'spamassassin' ) }, }, + '9' => { 'atrpms' => { map { $_ => 1 } ( 'perl-Pod-Escapes', 'perl-Pod-Simple' ) }, + 'epel' => { map { $_ => 1 } ( 'oidentd', 'perl-Razor-Agent' ) }, + 'rpmforge' => { map { $_ => 1 } ( 'perl-CGI', 'perl-Compress-Raw-Zlib', 'perl-ExtUtils-ParseXS', 'perl-Pod-Escapes', 'perl-Pod-Simple', 'perl-Time-HiRes', 'perl-version', 'spamassassin' ) }, + }, }; my ($stage) = sort { $repos->{$a}->{stage} <=> $repos->{$b}->{stage} } grep { $repos->{$_}->{stage} } keys %$repos; @@ -127,25 +138,42 @@ foreach my $ver ( sort { $a <=> $b } key foreach my $dir ( sort { $repos->{$baserepo->{$b}}->{prio} <=> $repos->{$baserepo->{$a}}->{prio} || $a cmp $b } keys %$baserepo ) { my $bdir = $dir; - $bdir =~ s/~O/$distrepo->{$ver}->{os}/; $bdir =~ s/~S/$distrepo->{$ver}->{repo}/; $bdir =~ s/~s/$ver/; $bdir =~ s/~C/$distrepo->{$ver}->{centos}/; for my $arch ( @archs, 'SRPMS/' ) { my $adir = $bdir; if ( $arch eq 'SRPMS/' ) { - $adir =~ s/~A.*/$arch/; + $adir =~ s/~A.*//; + if ( -d "${adir}SRPMS" ) { + $adir .= "SRPMS/"; + } elsif ( -d "${adir}Source/SPackages" ) { + $adir .= "Source/SPackages/"; + } } else { $adir =~ s/~A/$arch/; + if ( -d "${adir}CentOS/RPMS" ) { + $adir .= "CentOS/RPMS/"; + } elsif ( -d "${adir}$osdir/RPMS" ) { + $adir .= "$osdir/RPMS/"; + } elsif ( -d "${adir}RPMS" ) { + $adir .= "RPMS/"; + } elsif ( -d "${adir}Packages" ) { + $adir .= "Packages/"; + } elsif ( -d "${adir}CentOS" ) { + $adir .= "CentOS/"; + } elsif ( -d "${adir}$osdir" ) { + $adir .= "$osdir/"; + } } - opendir DIR, $adir or next; next unless -d $adir; + opendir DIR, $adir or next; process_rpm("$adir$_", $ver, $baserepo->{$dir}) foreach readdir DIR; closedir DIR; last unless $dir =~ m{~A}; } } - find( { wanted => sub { process_rpm($_, $ver, 'builds'); }, no_chdir => 1, follow_fast => 1 }, $distrepo->{$ver}->{'builds'} ); + find( { wanted => sub { process_rpm($_, $ver, 'builds'); }, no_chdir => 1, follow_fast => 1 }, "$_" ) foreach @{$distrepo->{$ver}->{'builds'}}; find( { wanted => sub { process_rpm($_, $ver, 'community'); }, no_chdir => 1, follow_fast => 1 }, $distrepo->{$ver}->{'community'} ) if $distrepo->{$ver}->{'community'}; foreach my $base ( sort keys %$rpms ) { @@ -425,7 +453,7 @@ foreach my $ver ( sort { $a <=> $b } key my @d = (); my $head = $distrepo->{$ver}->{repo} . $repo . '/'; $head = $distrepo->{$ver}->{stage} if $repos->{$repo}->{stage}; - my $tail = $repos->{$repo}->{os} ? "$osdir/" . $distrepo->{$ver}->{os} : 'RPMS/'; + my $tail = $repos->{$repo}->{os} ? "$osdir/" : 'RPMS/'; if ( $pkg->{src} ) { push @d, "${head}SRPMS/" . basename($pkg->{rpm}->filename); } elsif ( $pkg->{rpm}->arch eq 'noarch' ) { @@ -476,12 +504,17 @@ foreach my $ver ( sort { $a <=> $b } key foreach my $arch ( @archs ) { my $dir = $distrepo->{$ver}->{repo} . "$repo/$arch"; $dir = qx(readlink -f $dir); - chomp $dir; + if ( $dir ) { + chomp $dir; + } else { + $dir = $distrepo->{$ver}->{repo} . "$repo/$arch"; + } print "rebuild $repo/$arch\n"; unless ( $opts{t} ) { my $checksum = "--checksum $distrepo->{$ver}->{checksum}"; my $exclude = ""; + $exclude .= " --exclude ${osdir}/*" if -d "$dir/Packages"; $exclude = "--exclude *smeserver-release*.rpm" if $dir =~ m{test/|-testing/}; my $groupfile = ""; @@ -499,7 +532,10 @@ foreach my $ver ( sort { $a <=> $b } key } } unless ( $opts{t} ) { - finddepth(sub{rmdir}, $distrepo->{$ver}->{builds}) if -d "$distrepo->{$ver}->{builds}"; + foreach (@{$distrepo->{$ver}->{builds}}) + { + finddepth(sub{rmdir}, "$_") if -d "$_"; + } finddepth(sub{rmdir}, $distrepo->{$ver}->{community}) if -d "$distrepo->{$ver}->{community}"; } } @@ -557,7 +593,7 @@ sub process_rpm { } my ($src, $version, $release) = ($pkg->is_source_package ? $pkg->filename : $pkg->sourcerpm) =~ m{(?:^|/)([^/]*)-([^-]+)-([^-]+)\.\w+\.rpm$}; return if $skippkg->{$ver}->{$repo} && ( $skippkg->{$ver}->{$repo}->{$src} || $skippkg->{$ver}->{$repo}->{$pkg->name} ); - return if $repos->{$repo}->{base} && $nosig && $baserepo->{$ver}->{sign}; + return if $repos->{$repo}->{base} && $nosig && $baserepo->{$ver}->{sign}; if ( $nosig && ! -f "$HOME/.rpmpass" ) { print " * missing signature (" .$pkg->filename . ")\n"; return; } my $arch = 'unknown'; $arch = 'SRPMS' if $pkg->filename =~ m{[/-](SRPMS?|src|source)/};