Update of /cvsroot/fink/scripts/distfiles In directory sc8-pr-cvs17:/tmp/cvs-serv13889
Added Files: generate-distfiles-and-finkinfo-mirror.pl ssh.sh Removed Files: newmirror Log Message: work in progress, need to figure out the password for [EMAIL PROTECTED] --- newmirror DELETED --- --- NEW FILE: ssh.sh --- #!/bin/sh /usr/bin/ssh -i /opt/fink-mirroring/id_nopasswd "$@" --- NEW FILE: generate-distfiles-and-finkinfo-mirror.pl --- #!/usr/bin/perl $|++; BEGIN { # finch our $CHECKOUTDIR = '/var/www/finkinfo'; our $DOWNLOADDIR = '/var/www/distfiles'; our $FINKROOT = '/opt/fink-mirroring/fink'; our $SSHSCRIPT = '/opt/fink-mirroring/ssh.sh'; our $WORKDIR = '/tmp/mirror-work'; } use lib $FINKROOT . '/perlmod'; use lib $WORKDIR; use Data::Dumper; use Fcntl qw(:DEFAULT :flock); use File::Copy; use File::Find; use File::Path; use Fink::NetAccess 1.10 qw(fetch_url_to_file); use Fink::Package; use Fink::PkgVersion; use Fink::Services qw(&find_subpackages); use Storable; unshift(@INC, $WORKDIR); mkpath($WORKDIR . '/Fink'); open (LOCKFILE, '>>' . $WORKDIR . '/mirror.lock') or die "could not open lockfile for append: $!"; my $return = flock(LOCKFILE, LOCK_EX | LOCK_NB); die "another process is already running" if (not $return); open (LOG, '>/tmp/mirror.log'); print LOG "- $0 starting " . scalar(localtime(time)) . "\n"; use vars qw( $COUNT $CVSROOT $DEBUG $LAST_UPDATE_CACHE $VALIDATE_EXISTING_FILES ); $VALIDATE_EXISTING_FILES = 0; $COUNT = 0; $CVSROOT=':ext:[EMAIL PROTECTED]:/cvsroot/fink'; $DEBUG = 0; $ENV{CVS_RSH} = $SSHSCRIPT; if (-f $WORKDIR . '/update.cache') { $LAST_UPDATE_CACHE = retrieve($WORKDIR . '/update.cache'); } open (FILEIN, $FINKROOT . '/VERSION') or die "could not read VERSION: $!"; chomp(my $finkversion = <FILEIN>); close (FILEIN); open (FILEIN, $FINKROOT . '/perlmod/Fink/FinkVersion.pm.in') or die "could not read FinkVersion.pm.in: $!"; open (FILEOUT, '>' . $WORKDIR . '/Fink/FinkVersion.pm') or die "could not write to FinkVersion.pm: $!"; while (<FILEIN>) { $_ =~ s/[EMAIL PROTECTED]@/${finkversion}/gs; print FILEOUT; } close (FILEOUT); close (FILEIN); # set up Fink require Fink::FinkVersion; require Fink::Config; $Fink::Config::ignore_errors++; # create the temporary cvs checkout mkpath($CHECKOUTDIR); mkpath($DOWNLOADDIR); chdir($CHECKOUTDIR); if (not grep(/^--s/, @ARGV)) { print LOG "- updating cvs\n"; if (run_cvs_command('checkout', 'dists')) { system('rsync', '-avr', '--exclude=CVS', '--exclude=.cvsignore', '--delete-excluded', '--delete', '--delete-after', 'dists/', 'dists.public/'); if (open (FILEOUT, '>dists.public/TIMESTAMP.new')) { print FILEOUT time(), "\n"; close (FILEOUT); move('dists.public/TIMESTAMP.new', 'dists.public/TIMESTAMP'); } else { die "unable to write TIMESTAMP.new: $!"; } } } print LOG "- scanning info files\n"; opendir(DIR, $CHECKOUTDIR . '/dists') or die "unable to read from $CHECKOUTDIR/dists: $!"; for my $dir (readdir(DIR)) { if ($dir =~ /^10/) { next if ($dir =~ /^10.2/); print LOG "searching $dir\n"; finddepth( { wanted => \&find_fetch_infofile, follow => 1 }, $CHECKOUTDIR . '/dists/' . $dir); } } closedir(DIR); store($LAST_UPDATE_CACHE, $WORKDIR . '/update.cache'); print LOG "- $0 finished " . scalar(localtime(time)) . "\n"; sub find_fetch_infofile { my $shortname = $_; my $dist; my $all_downloads_passed = 1; return unless ( $File::Find::name =~ m#\.info$# ); return if ( $File::Find::name =~ m#/CVS/# ); return if ( $File::Find::name =~ m#/10.2(-gcc3.3)?/# ); if ( $File::Find::name =~ m#/dists/([^/]+)/# ) { $dist = $1; } else { return; } $COUNT++; if ($DEBUG and $COUNT > 50) { print LOG "debug: already tried $COUNT files\n"; return; } my @stat = stat($File::Find::name); if (exists $LAST_UPDATE_CACHE->{$File::Find::name} and $LAST_UPDATE_CACHE->{$File::Find::name} == $stat[9]) { print LOG $File::Find::name, " has not changed\n"; return; } my @arches; if ($dist =~ /^10.3/) { @arches = ('powerpc'); } else { @arches = ('powerpc', 'i386'); } for my $arch (@arches) { $Fink::Config::config = Fink::Config->new_from_properties({ basepath => $WORKDIR, distribution => $dist, downloadmethod => 'lftpget', architecture => $arch, downloadtimeout => 3600, # try up to 1 hour to download something }); $Fink::Config::libpath = $FINKROOT; my ($tree) = $File::Find::name =~ m#/dists/[^/]+/([^/]+)/#; print LOG "- fetching files for $shortname ($dist/$tree)\n"; for my $package ( Fink::PkgVersion->pkgversions_from_info_file( $File::Find::name ) ) { next if ( $package->get_license() =~ /Restrictive$/ ); for my $suffix ($package->get_source_suffices) { my $tarball = $package->get_tarball($suffix); print LOG " - $tarball... "; my $checksums = {}; $checksums->{'MD5'} = $package->param('Source' . $suffix . '-MD5'); my($checksum_type, $checksum) = Fink::Checksum->parse_checksum($package->get_checksum($suffix)); $checksums->{$checksum_type} = $checksum; if (not -l $DOWNLOADDIR . '/' . $tarball) { my $file_checksums = Fink::Checksum->get_all_checksums($DOWNLOADDIR . '/' . $tarball); my $master_checksum_type = 'MD5'; if (exists $file_checksums->{$master_checksum_type}) { mkpath($DOWNLOADDIR . '/md5/' . $file_checksums->{$master_checksum_type}); move($DOWNLOADDIR . '/' . $tarball, $DOWNLOADDIR . '/md5/' . $file_checksums->{$master_checksum_type} . '/' . $tarball); for my $checksum_type (keys %$file_checksums) { next if ($key eq $master_checksum_type); mkpath($DOWNLOADDIR . '/' . lc($checksum_type) . '/' . lc($file_checksums->{$checksum_type})); symlink( '../../' . lc($master_checksum_type) . '/' . lc($file_checksums->{$master_checksum_type}) . '/' . $tarball, $DOWNLOADDIR . '/' . lc($checksum_type) . '/' . lc($file_checksums->{$checksum_type}) . '/' . $tarball ); unlink( $DOWNLOADDIR . '/' . $tarball ); symlink( lc($master_checksum_type) . '/' . lc($file_checksums->{$master_checksum_type}) . '/' . $tarball, $DOWNLOADDIR . '/' . $tarball, ); } } } my $do_download = 0; for $checksum_type (keys %$checksums) { next if (not defined $checksum_type or $checksum_type =~ /^\s*$/); my $check_file = $DOWNLOADDIR . '/' . lc($checksum_type) . '/' . lc($checksums->{$checksum_type}) . '/' . $tarball; if (not -f $check_file) { print LOG "$check_file does not exists, downloading\n"; $do_download = 1; } elsif ($VALIDATE_EXISTING_FILES) { if (not Fink::Checksum->validate($check_file, $checksums->{$checksum_type}, $checksum_type)) { print LOG "checksum on $check_file does not match, downloading\n"; $do_download = 1; } } } if ($do_download) { print LOG "downloading\n"; my $master_checksum_type = 'MD5'; if (not exists $checksums->{'MD5'}) { my @types = sort keys %$checksums; $master_checksum_type = shift(@types); } my $download_path = $DOWNLOADDIR . '/' . lc($master_checksum_type) . '/' . $checksums->{$master_checksum_type}; my $url = $package->get_source($suffix); my $returnval = &fetch_url_to_file({ url => $url, filename => $tarball, custom_mirror => $package->get_custom_mirror($suffix), skip_master_mirror => 1, download_directory => $download_path, checksum => $checksums->{$master_checksum_type}, checksum_type => $master_checksum_type, try_all_mirrors => 1, }); if ($returnval != 0) { unlink($download_path . '/' . $tarball); print LOG "unable to download $url to $download_path\n"; $all_downloads_passed = 0; next; } my $file_checksums = Fink::Checksum->get_all_checksums($download_path . '/' . $tarball); for my $checksum_type (keys %$file_checksums) { if ($checksum_type eq $master_checksum_type) { if ($file_checksums->{$checksum_type} ne $checksums->{$checksum_type}) { print LOG "downloaded file has a different checksum than expected ($file_checksums->{$checksum_type} ne $checksums->{$checksum_type})\n"; } } else { mkpath($DOWNLOADDIR . '/' . lc($checksum_type) . '/' . lc($file_checksums->{$checksum_type})); symlink( '../../' . lc($master_checksum_type) . '/' . lc($checksums->{$master_checksum_type}) . '/' . $tarball, $DOWNLOADDIR . '/' . lc($checksum_type) . '/' . lc($file_checksums->{$checksum_type}) . '/' . $tarball ); unlink( $DOWNLOADDIR . '/' . $tarball ); symlink( lc($master_checksum_type) . '/' . lc($checksums->{$master_checksum_type}) . '/' . $tarball, $DOWNLOADDIR . '/' . $tarball, ); } } } else { print LOG "exists\n"; } } } } if ($all_downloads_passed) { $LAST_UPDATE_CACHE->{$File::Find::name} = $stat[9]; } } sub run_cvs_command { my @command = @_; my $returnval = system('/usr/bin/cvs', '-q', '-z3', '-d', $CVSROOT, @command); if ($returnval == -1) { die "failed to execute: $!"; } elsif ($returnval & 127) { die sprintf('cvs failed: child died with signal %d', ($returnval & 127)); } elsif (($returnval >> 8) != 0) { die sprintf('cvs failed: child exited with value %d', ($returnval >> 8)); } return 1; } ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Fink-commits mailing list Fink-commits@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/fink-commits