Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Unternamensraum:

Seiten in diesem Namensraum:

users:werner:getrepolist2

Suche im openSUSE Build Repository

Den begleitenden Text findest Du auf Repository-Suche für openSUSE, hier nur der Versuch, das Script in Perl umzusetzen:

#!/usr/bin/perl -w
 
use strict;
use warnings;
use Net::FTP;
 
# set some variables
our $debug = 0;
my $ftpserver = 'ftp5.gwdg.de';
our $searchbase   = 'pub/opensuse/repositories';
my $verzname = "ftp://$ftpserver/$searchbase";
# get date and time (used for logging) and print them
my @dots;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += 1900;
$mon++;
my $datstempel = sprintf("%04d%02d%02d", $year, $mon, $mday);
my $jetztzeit  = sprintf("%02d:%02d:%02d", $hour, $min, $sec);
print "starting script on $datstempel at $jetztzeit.\n";
# where to put the data - logfiles with timestamp in their names
my $logfilename = ">>findrepo$datstempel\_$jetztzeit.log";
our %allfiles = ('LOG' => $logfilename);
my @versionen = ('101', '102', '103', 'S09', 'S10');
for my $vers (@versionen) {
	$allfiles{"{$vers}apt"}        = ">>aptrepo_$vers\_$datstempel\_$jetztzeit.list";
	$allfiles{"{$vers}home"}  = ">>aptrepo_$vers\_$datstempel\_$jetztzeit\_home.list";
	$allfiles{"{$vers}smart"} = ">>smart_$vers\_$datstempel\_$jetztzeit.sh";
} # for $vers (@versionen)
mkdir 'zypprepos.d';
# the real start :-)
our $ftp = Net::FTP->new($ftpserver, Passive => 1)
           or die "Cannot access FTP server $ftpserver: $@";
print "Access to FTP server $ftpserver is possible\n" if ($debug & 2);
$ftp->login("anonymous",'-anonymous@')
            or die "Cannot login: ", $ftp->message;
print "anonymous login is possible :-)\n" if ($debug & 1);
scan1dir($searchbase);
# post work - write out the time again so one can see how long it takes
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += 1900;
$mon++;
$datstempel = sprintf("%04d%02d%02d", $year, $mon, $mday);
$jetztzeit  = sprintf("%02d:%02d:%02d", $hour, $min, $sec);
print "script ending on $datstempel at $jetztzeit.\n";
 
sub scan1dir {
	our %allfiles;
	our $searchbase;
	our $ftp;
	our $debug;
	my ($thisdir) = @_;
	print "now working on $thisdir\n" if ($debug & 4);
	my $right6  = substr($thisdir, -6);
	my $right5  = substr($thisdir, -5);
	my $right4  = substr($thisdir, -4);
	my $right3  = substr($thisdir, -3);
	my $forget  = length("$searchbase");
	my $shorter = substr($thisdir, $forget);
	my $legible = $shorter;
	my $itsfor  = 'xxx';
	my $usehome = ($thisdir =~ /home:\//);
	# $thisdir is s.th. like home:/dings/openSUSE_10.3 or X11:/XGL/openSUSE_10.3
	# now snip from the last / onward:
	if (length($shorter)) {
		$legible =~ s|(.*)/(.+)|$1|;
		$legible =~ s/\///g;
		$right4  = substr($thisdir, -4);
		$right3  = substr($thisdir, -3);
		$itsfor  = '101' if ( ($right4 eq '10.1' ) or ($right3 eq '101'   ) );
		$itsfor  = '102' if ( ($right4 eq '10.2' ) or ($right3 eq '102'   ) );
		$itsfor  = '103' if ( ($right4 eq '10.3' ) or ($right3 eq '103'   ) );
		$itsfor  = 'S09' if ( ($right5 eq 'SLES9') or ($right6 eq 'SLES_9') );
		$itsfor  = 'S10' if ( ($right5 eq 'SLE10') or ($right6 eq 'SLES10') or ($right6 eq 'SLE_10') );
	} # if (length($shorter))
	$ftp->cwd("/$thisdir")
		or die "Cannot change into working directory $thisdir: ", $ftp->message;
	my @dircontent = $ftp->dir();
	my @unterverz = ();
	my $ftpelem;
	for $ftpelem (@dircontent) {
		my ($rechte, $num, $user, $group, $size, $mon, $day, $time, $name) = split / +/, $ftpelem, 9;
		if (substr($rechte, 0, 1) eq 'd') {
			print "guessed directory: '$name' (itsfor=$itsfor, shorter=$shorter, legible=$legible)\n" if ($debug & 1);
			if (("$itsfor" ne 'xxx') and ("$name" eq 'repodata')) {
				my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
				$year += 1900;
				$mon++;
				my $jetztzeit  = sprintf("%02d:%02d:%02d", $hour, $min, $sec);
				my $MYTOFILE = $allfiles{"LOG"};
				open THISHANDLE, $allfiles{"LOG"}
				     or die "$jetztzeit: Cannot open logfile";
				print THISHANDLE "$jetztzeit: now writing $legible for $thisdir\n";
				close THISHANDLE;
				open THISHANDLE, $allfiles{"{$itsfor}smart"}
				     or die "$jetztzeit: Cannot open smart output file for $itsfor\n";
				print THISHANDLE "smart channel --add $legible ",
				                 "type=repomd name=$legible ",
				                 "baseurl=http://software.opensuse.org/repositories$shorter\n";
				close THISHANDLE;
				if ($usehome) {
					open THISHANDLE, $allfiles{"{$itsfor}home"}
					     or die "$jetztzeit: Cannot open apt-home output file for $itsfor\n";
					print THISHANDLE "repomd http://software.opensuse.org/repositories $shorter\n";
					close THISHANDLE;
				} # if ($usehome)
				my $meld = "Cannot open apt output file »" . $allfiles{"{$itsfor}apt"};
				open THISHANDLE, $allfiles{"{$itsfor}apt"}
				     or die "$jetztzeit: $meld « for $itsfor ($shorter)\n";
					print THISHANDLE "repomd http://software.opensuse.org/repositories $shorter\n";
				close THISHANDLE;
				if ("$itsfor" eq '103') {
					open ZYPPFILE, ">zypprepos.d/$legible"
					               or die "Cannot create file zypprepos.d/$legible: $!";
					print ZYPPFILE "[$legible]\n";
					print ZYPPFILE "name=$legible\n";
					print ZYPPFILE "baseurl=http://software.opensuse.org/repositories$shorter\n";
					print ZYPPFILE "type=rpm-md\n";
					print ZYPPFILE "enabled=1\n";
					print ZYPPFILE "autorefresh=1\n";
					print ZYPPFILE "gpgcheck=1\n";
					close ZYPPFILE;
				} # if ("$itsfor" eq '103')
			} # if (($itsfor ne 'xxx') and ("$name" eq 'repodata'))
			else {
				print ("adding $thisdir/$name to unterverz\n") if ($debug & 2);
				@unterverz = (@unterverz, "$thisdir/$name") if ("$name" ne 'lost+found');
			}
		} # if (substr($rechte, 0, 1) eq 'd')
	} # foreach $elem (@dircontent)
	if ((my $unterverz = @unterverz) > 0) {
		for my $untvz (@unterverz) {
			scan1dir($untvz);
		} # for $untvz (@unterverz)
	} # if (($unterverz = @unterverz) > 0)
	1;
} # sub scan1dir

Übrigens läuft das Script bei mir in genau einer Stunde durch:

starting script on 20080209 at 16:48:09.
script ending on 20080209 at 18:48:05.
users/werner/getrepolist2.txt · Zuletzt geändert: 2008-02-09 22:18 von werner