summaryrefslogtreecommitdiffstats
path: root/systemtools/updateDistroInfo.suse
diff options
context:
space:
mode:
authorSebastian Schmelzer2010-09-02 17:50:49 +0200
committerSebastian Schmelzer2010-09-02 17:50:49 +0200
commit416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5 (patch)
tree4715f7d742fec50931017f38fe6ff0a89d4ceccc /systemtools/updateDistroInfo.suse
parentFix for the problem reported on the list (sed filter forgotten for the (diff)
downloadcore-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.tar.gz
core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.tar.xz
core-416ab8a37f1b07dc9f6c0fb3ff1a8ff2036510b5.zip
change dir structure
Diffstat (limited to 'systemtools/updateDistroInfo.suse')
-rwxr-xr-xsystemtools/updateDistroInfo.suse347
1 files changed, 0 insertions, 347 deletions
diff --git a/systemtools/updateDistroInfo.suse b/systemtools/updateDistroInfo.suse
deleted file mode 100755
index b877ab55..00000000
--- a/systemtools/updateDistroInfo.suse
+++ /dev/null
@@ -1,347 +0,0 @@
-#!/usr/bin/perl
-# Copyright (c) 2009 - OpenSLX GmbH
-#
-# This program/file is free software distributed under the GPL version 2.
-# See http://openslx.org/COPYING
-#
-# If you have any feedback please consult http://openslx.org/feedback and
-# send your feedback to feedback@openslx.org
-#
-# General information about OpenSLX can be found at http://openslx.org
-#
-
-use strict;
-use warnings;
-
-use threads ('yield',
- 'stack_size' => 64*4096,
- 'exit' => 'threads_only',
- 'stringify');
-use Time::HiRes qw(sleep);
-use Switch;
-use Net::HTTP;
-use Net::FTP;
-#use Data::Dumper;
-
-
-# Configuration ###############################################################
-
-my @supportedVersions = (
- {
- ver =>
- '10.3',
- source =>
- 'http://mirrors.opensuse.org/list/all.html',
- supporedArch =>
- 'i586 x86_64',
- packageKeysLocation =>
- 'http://download.opensuse.org/distribution/10.3/repo/oss/'
- },
- {
- ver =>
- '11.0',
- source =>
- 'http://mirrors.opensuse.org/list/11.0.html',
- supporedArch =>
- 'i586 x86_64',
- packageKeysLocation =>
- 'http://download.opensuse.org/distribution/11.0/repo/oss/'
- },
- {
- ver =>
- '11.1',
- source =>
- 'http://mirrors.opensuse.org/list/11.1.html',
- supporedArch =>
- 'i586 x86_64',
- packageKeysLocation =>
- 'http://download.opensuse.org/distribution/11.1/repo/oss/'
- }
- {
- ver =>
- '11.2',
- source =>
- 'http://mirrors.opensuse.org/list/11.2.html',
- supporedArch =>
- 'i586 x86_64',
- packageKeysLocation =>
- 'http://download.opensuse.org/distribution/11.2/repo/oss/'
- }
- {
- ver =>
- '11.3',
- source =>
- 'http://mirrors.opensuse.org/list/11.3.html',
- supporedArch =>
- 'i586 x86_64',
- packageKeysLocation =>
- 'http://download.opensuse.org/distribution/11.3/repo/oss/'
- }
-);
-
-my %sourceLists = (
- 'base' =>
- {
- path => 'distribution/#ver#/repo/oss',
- archpath => 'distribution/#ver#/repo/oss/suse/#arch#'
- },
- 'base_non-oss' =>
- {
- path => 'distribution/#ver#/repo/non-oss',
- archpath => 'distribution/#ver#/repo/oss/suse/#arch#'
- },
- 'base_update' =>
- {
- path => 'update/#ver#',
- archpath => 'update/#ver#/rpm/#arch#'
- },
-);
-
-###############################################################################
-
-my $cmd;
-my $out = {};
-my $statistics = {};
-
-# set autoflush
-$| = 1;
-
-sub checkHttpMirror {
- my $checkurl = shift;
- my $mirrorurl = shift;
- my $outfile = shift;
-
- $SIG{'KILL'} = sub { threads->exit(); };
-
- $checkurl = m/http:\/\/([^\/]*)(\/.*)/;
- my $s = Net::HTTP->new(Host => $1, Timeout => 10, Debug => 0) or return ( "status:1" );
- $s->write_request(GET => $2, 'User-Agent' => "Mozilla/5.0");
-
- my($code, $mess, %h) = $s->read_response_headers;
-
- if ($code == 200) {
- return ( "status:0", "mirror:$mirrorurl", "outfile:$outfile" );
- } else {
- return ( "status:2" );
- }
-}
-
-sub checkFtpMirror {
- my $checkurl = shift;
- my $mirrorurl = shift;
- my $outfile = shift;
-
- $SIG{'KILL'} = sub { threads->exit(); };
-
- $checkurl = m/ftp:\/\/([^\/]*)(\/.*)/;
- my $ftp = Net::FTP->new(Host => $1, Timeout => 10, Debug => 0) or return ( "status:1" );
- $ftp->login("anonymous",'-anonymous@') or return ( "status:2" );
- $ftp->cwd($2) or return ( "status:3" );
- $ftp->quit;
-
- return ( "status:0", "mirror:$mirrorurl", "outfile:$outfile" );
-}
-
-sub cleanupThreads {
-
- my @joinable = threads->list(threads::joinable);
- while (@joinable) {
- my @ret = shift(@joinable)->join();
- my $response = {};
-
- while (my $param = shift(@ret)) {
- $param =~ m/^([^:]*):(.*)$/;
- $response->{$1} = $2;
- }
-
- switch ($response->{status}) {
- case 0 {
- push(@{$out->{$response->{outfile}}},
- $response->{mirror});
- print "o"
- }
- else {
- print "x";
- $statistics->{errors}++;
- }
- }
- #print "j";
- }
-
- my $running = threads->list(threads::running);
- return $running;
-}
-
-my $startTime = time();
-my $endTime;
-
-my $oldtime;
-if ( -e "$ENV{'HOME'}/.update-suse-distro-info" ) {
- $oldtime = qx(cat $ENV{'HOME'}/.update-suse-distro-info);
-}
-
-# cleanup
-system ("rm -rf out");
-
-print "\n ** OpenSLX distro-info Updater - OpenSUSE **\n\n";
-print "Notice: running the checks takes some time, so it's enough time for a coffee\n break ;)";
-
-if ($oldtime) {
- my ($min, $sec) = split(/:/, $oldtime);
- printf (" - last run took %i min %i sec ..\n", $min, $sec);
-} else {
- print "\n";
-}
-
-while (my $version = shift(@supportedVersions)) {
- print "\nopenSUSE $version->{ver} \n";
-
- print "fetching mirror list..\n";
- system("wget -q -O suse-$version->{ver} $version->{source}");
-
- print "extracting mirrors.. \n";
- $cmd = "grep -P -e \"<a href=.*>(HT|F)TP</a>\" suse-$version->{ver} | ";
- $cmd .= "sed -e \"s/^[^\\\"]*\\\"//\" -e \"s/\\\".*\$//\" >";
- $cmd .= "suse-$version->{ver}-mirrors && rm suse-$version->{ver}";
- system $cmd;
-
- my @sa = split(/ /,$version->{supporedArch});
-
- # empty out
- $out = {};
- $statistics = {};
-
-
- while (my $arch = shift(@sa)) {
- $arch = "_$arch";
- # if we have ix86 arch name is not used..
- $arch =~ s/_i.?86//;
- $cmd = "mkdir -p out/suse-$version->{ver}$arch/mirrors";
- $cmd .= " out/suse-$version->{ver}$arch/trusted-package-keys";
- system ($cmd);
- }
-
- print "check mirrors .. \n";
- my $running;
- $statistics->{numMirrors} = qx(cat suse-$version->{ver}-mirrors | wc -l);
- open FILE, "< suse-$version->{ver}-mirrors", or die "couldn't open file: $!";
- while (<FILE>) {
- chomp;
- my $mirror = $_;
- my $skipmirror = 0;
- @sa = split(/ /,$version->{supporedArch});
- while (my $arch = shift(@sa)) {
- while (my($type, $parameters) = each %sourceLists) {
- my $checkpath = $parameters->{archpath};
- $checkpath =~ s/#ver#/$version->{ver}/;
- $checkpath =~ s/#arch#/$arch/;
-
- my $mirrorpath = $parameters->{path};
- $mirrorpath =~ s/#ver#/$version->{ver}/;
-
- my $local_arch = "_$arch";
- # if we have ix86 arch name is not used..
- $local_arch =~ s/_i.?86//;
-
- my @running = threads->list(threads::running);
- my $numRunning = scalar @running;
- $running = cleanupThreads();
-
- while( $running > 50 ) { sleep 0.1; $running = cleanupThreads();}
- if ($mirror =~ m/^http:/) {
- threads->create({context => 'list'},
- 'checkHttpMirror',
- "$mirror$checkpath",
- "$mirror$mirrorpath",
- "suse-$version->{ver}$local_arch/mirrors/$type"
- );
- }
- if ($mirror =~ m/^ftp:/) {
- threads->create({context => 'list'},
- 'checkFtpMirror',
- "$mirror$checkpath",
- "$mirror$mirrorpath",
- "suse-$version->{ver}$local_arch/mirrors/$type"
- );
- }
- }
- }
- #print "$mirror \n";
- }
- close FILE;
- system ("rm suse-$version->{ver}-mirrors");
-
- $running = cleanupThreads();
- printf ("\n-- waiting for %i unfinished check(s) ..\n", $running);
- my $counter = 120;
- my $exit = 0;
- while( $exit == 0 ) {
- sleep 0.5;
- $running = cleanupThreads();
- $counter--;
- if ( $counter < 1 && $running > 0 ) {
- printf ("\n-- %i check(s) still running.. \n", $running);
- print ("\n-- cleanup remaining check(s)..");
- my @runningthreads = threads->list();
- while (@runningthreads) {
- shift(@runningthreads)->kill('KILL')->detach();
- }
- $exit = 1;
- }
- }
-
- print "\nfinished.\n\n";
- print "writing active mirrors to file.\n";
-
- while (my($file, $mirrorlist) = each %{$out}) {
- open(OUTFILE, ">>", "out/$file") or die ("something went wrong");
- while (@$mirrorlist) {
- #print Dumper($mirrorlist);
- $statistics->{files}->{$file}++;
- print OUTFILE shift(@$mirrorlist);
- print OUTFILE "\n";
- }
- close(OUTFILE);
- }
-
- print "\nStatistics:\n";
- printf ("-- checked %i mirrors \n", $statistics->{numMirrors});
- while (my($f, $num) = each(%{$statistics->{files}})) {
- printf ("-- found %i entries for: %s \n", $num, $f);
- }
-
- print "\nGet package keys\n";
- system("wget -q -O index http://download.opensuse.org/distribution/$version->{ver}/repo/oss/");
- my @files = qx(cat index | grep -P -e "(gpg-pubkey|pubring)");
- while (@files) {
- my $file = shift(@files);
- $file =~ m/href=\"([^\"]*)\"/;
- my $cmd = "wget -q -O out/suse-$version->{ver}/trusted-package-keys/$1 ";
- $cmd .= "http://download.opensuse.org/distribution/$version->{ver}/repo/oss/$1";
- system ("sh", "-c", $cmd);
- }
- system ("rm index");
-
- @sa = split(/ /,$version->{supporedArch});
- while (@sa) {
- my $arch = shift(@sa);
- my $cmd = "cp out/suse-$version->{ver}/trusted-package-keys/* ";
- $cmd .= " out/suse-$version->{ver}_$arch/trusted-package-keys/";
- $arch =~ m/i.?86/ or system ($cmd);
- }
-}
-
-$endTime = time();
-my $totalTime = $endTime - $startTime;
-
-system("cd out && tar cf ../distro-info.suse.tar * && cd ..");
-system("rm -rf out");
-
-printf ("\nUpdated distro info in %i min %i sec \n", $totalTime/60, $totalTime%60);
-printf ("Data written to distro-info.suse.tar, go to <oslx-source>/lib/distro-info \n and extract it.");
-
-open(FH, ">", "$ENV{'HOME'}/.update-suse-distro-info") or die ($!);
-printf FH ("%i:%i", $totalTime/60, $totalTime%60);
-close(FH);
-
-exit 1;