X-Git-Url: https://git.archive.openwrt.org/?p=openwrt.git;a=blobdiff_plain;f=scripts%2Fdownload.pl;h=d6a55b634c4ac58215433ac326dbc890ca06c05b;hp=042b1cce7d79371fc6f8f30f7fe908e0464e626c;hb=15c6ac4ec2d42bb049bc87b392f181cf0c278cd8;hpb=145008f98d1306d2438f37a90adc38076318856c diff --git a/scripts/download.pl b/scripts/download.pl index 042b1cce7d..d6a55b634c 100755 --- a/scripts/download.pl +++ b/scripts/download.pl @@ -9,6 +9,7 @@ use strict; use warnings; use File::Basename; +use File::Copy; @ARGV > 2 or die "Syntax: $0 [ ...]\n"; @@ -51,34 +52,59 @@ sub which($) { return $res; } -my $md5cmd = which("md5sum"); -$md5cmd or $md5cmd = which("md5"); -$md5cmd or die 'no md5 checksum program found, please install md5 or md5sum'; +my $md5cmd = which("md5sum") || which("md5") || die 'no md5 checksum program found, please install md5 or md5sum'; chomp $md5cmd; sub download { my $mirror = shift; - my $options = $ENV{WGET_OPTIONS}; - $options or $options = ""; - - $mirror =~ s/\/$//; - if( $mirror =~ /^file:\/\// ) { - my $cache = $mirror; - $cache =~ s/file:\/\///g; - if(system("test -d $cache")) { - print STDERR "Wrong local cache directory -$cache-.\n"; + my $options = $ENV{WGET_OPTIONS} || ""; + + $mirror =~ s!/$!!; + + if ($mirror =~ s!^file://!!) { + if (! -d "$mirror") { + print STDERR "Wrong local cache directory -$mirror-.\n"; cleanup(); return; } - if(! -d $target) { - system("mkdir -p $target/"); + + if (! -d "$target") { + system("mkdir", "-p", "$target/"); + } + + if (! open TMPDLS, "find $mirror -follow -name $filename 2>/dev/null |") { + print("Failed to search for $filename in $mirror\n"); + return; + } + + my $link; + + while (defined(my $line = readline TMPDLS)) { + chomp ($link = $line); + if ($. > 1) { + print("$. or more instances of $filename in $mirror found . Only one instance allowed.\n"); + return; + } + } + + close TMPDLS; + + if (! $link) { + print("No instances of $filename found in $mirror.\n"); + return; + } + + print("Copying $filename from $link\n"); + copy($link, "$target/$filename.dl"); + + if (system("$md5cmd '$target/$filename.dl' > '$target/$filename.md5sum'")) { + print("Failed to generate md5 sum for $filename\n"); + return; } - system("cp -vf $cache/$filename $target/$filename.dl") == 0 or return; - system("$md5cmd $target/$filename.dl > \"$target/$filename.md5sum\" ") == 0 or return; } else { - open WGET, "wget -t5 --timeout=20 --no-check-certificate $options -O- \"$mirror/$filename\" |" or die "Cannot launch wget.\n"; - open MD5SUM, "| $md5cmd > \"$target/$filename.md5sum\"" or die "Cannot launch md5sum.\n"; + open WGET, "wget -t5 --timeout=20 --no-check-certificate $options -O- '$mirror/$filename' |" or die "Cannot launch wget.\n"; + open MD5SUM, "| $md5cmd > '$target/$filename.md5sum'" or die "Cannot launch md5sum.\n"; open OUTPUT, "> $target/$filename.dl" or die "Cannot create file $target/$filename.dl: $!\n"; my $buffer; while (read WGET, $buffer, 1048576) { @@ -89,7 +115,7 @@ sub download close WGET; close OUTPUT; - if (($? >> 8) != 0 ) { + if ($? >> 8) { print STDERR "Download failed.\n"; cleanup(); return; @@ -107,7 +133,7 @@ sub download } unlink "$target/$filename"; - system("mv \"$target/$filename.dl\" \"$target/$filename\""); + system("mv", "$target/$filename.dl", "$target/$filename"); cleanup(); } @@ -126,14 +152,11 @@ foreach my $mirror (@ARGV) { push @mirrors, "http://downloads.sourceforge.net/$1"; } } elsif ($mirror =~ /^\@GNU\/(.+)$/) { - push @mirrors, "ftp://ftp.gnu.org/gnu/$1"; + push @mirrors, "http://ftpmirror.gnu.org/$1"; + push @mirrors, "http://ftp.gnu.org/pub/gnu/$1"; push @mirrors, "ftp://ftp.belnet.be/mirror/ftp.gnu.org/gnu/$1"; push @mirrors, "ftp://ftp.mirror.nl/pub/mirror/gnu/$1"; push @mirrors, "http://mirror.switch.ch/ftp/mirror/gnu/$1"; - push @mirrors, "ftp://ftp.uu.net/archive/systems/gnu/$1"; - push @mirrors, "ftp://ftp.eu.uu.net/pub/gnu/$1"; - push @mirrors, "ftp://ftp.leo.org/pub/comp/os/unix/gnu/$1"; - push @mirrors, "ftp://ftp.digex.net/pub/gnu/$1"; } elsif ($mirror =~ /^\@KERNEL\/(.+)$/) { my @extra = ( $1 ); if ($filename =~ /linux-\d+\.\d+(?:\.\d+)?-rc/) { @@ -144,10 +167,6 @@ foreach my $mirror (@ARGV) { foreach my $dir (@extra) { push @mirrors, "ftp://ftp.all.kernel.org/pub/$dir"; push @mirrors, "http://ftp.all.kernel.org/pub/$dir"; - push @mirrors, "ftp://ftp.de.kernel.org/pub/$dir"; - push @mirrors, "http://ftp.de.kernel.org/pub/$dir"; - push @mirrors, "ftp://ftp.fr.kernel.org/pub/$dir"; - push @mirrors, "http://ftp.fr.kernel.org/pub/$dir"; } } elsif ($mirror =~ /^\@GNOME\/(.+)$/) { push @mirrors, "http://ftp.gnome.org/pub/GNOME/sources/$1";