Skip to content

Commit d391236

Browse files
bradfordzhangAnsuel
andcommitted
download.pl: add aria2c support
Use aria2c download tool by default on package download if available in the system. aria2c permits to use multiple mirrors and may improve download speed on special context where servers are hard to reach. Co-authored-by: Christian Marangi <[email protected]> Signed-off-by: Bradford Zhang <[email protected]> [ fix wrong var in the script and improve commit description ] Signed-off-by: Christian Marangi <[email protected]>
1 parent a67f484 commit d391236

File tree

1 file changed

+40
-13
lines changed

1 file changed

+40
-13
lines changed

scripts/download.pl

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -70,27 +70,52 @@ ()
7070
return undef;
7171
}
7272

73-
sub download_cmd($) {
73+
sub download_cmd {
7474
my $url = shift;
7575
my $have_curl = 0;
76-
77-
if (open CURL, "curl --version 2>/dev/null |") {
76+
my $have_aria2c = 0;
77+
my $filename = shift;
78+
my @additional_mirrors = @_;
79+
my $mirrors_url = "'$url'";
80+
81+
my @chArray = ('a'..'z', 'A'..'Z', 0..9);
82+
my $rfn = join '', map{ $chArray[int rand @chArray] } 0..9;
83+
if (open CURL, '-|', 'curl', '--version') {
7884
if (defined(my $line = readline CURL)) {
7985
$have_curl = 1 if $line =~ /^curl /;
8086
}
8187
close CURL;
8288
}
89+
if (open ARIA2C, '-|', 'aria2c', '--version') {
90+
if (defined(my $line = readline ARIA2C)) {
91+
$have_aria2c = 1 if $line =~ /^aria2 /;
92+
}
93+
close ARIA2C;
94+
}
8395

84-
return $have_curl
85-
? (qw(curl -f --connect-timeout 20 --retry 5 --location),
96+
for my $mirror (@additional_mirrors ) {
97+
$mirrors_url = $mirrors_url ." '$mirror /$filename'";
98+
}
99+
100+
if ($have_aria2c) {
101+
return join(" ", "touch /dev/shm/${rfn}_spp;",
102+
qw(aria2c --stderr -c -x2 -s10 -j10 -k1M), $mirrors_url ,
103+
$check_certificate ? () : '--check-certificate=false',
104+
"--server-stat-of=/dev/shm/${rfn}_spp",
105+
"--server-stat-if=/dev/shm/${rfn}_spp",
106+
"-d /dev/shm -o $rfn;",
107+
"cat /dev/shm/$rfn;", "rm /dev/shm/$rfn /dev/shm/${rfn}_spp");
108+
} elsif ($have_curl) {
109+
return (qw(curl -f --connect-timeout 20 --retry 5 --location),
86110
$check_certificate ? () : '--insecure',
87111
shellwords($ENV{CURL_OPTIONS} || ''),
88-
$url)
89-
: (qw(wget --tries=5 --timeout=20 --output-document=-),
112+
$url);
113+
} else {
114+
return (qw(wget --tries=5 --timeout=20 --output-document=-),
90115
$check_certificate ? () : '--no-check-certificate',
91116
shellwords($ENV{WGET_OPTIONS} || ''),
92-
$url)
93-
;
117+
$url);
118+
}
94119
}
95120

96121
my $hash_cmd = hash_cmd();
@@ -100,6 +125,7 @@ sub download
100125
{
101126
my $mirror = shift;
102127
my $download_filename = shift;
128+
my @additional_mirrors = @_;
103129

104130
$mirror =~ s!/$!!;
105131

@@ -146,9 +172,9 @@ sub download
146172
}
147173
};
148174
} else {
149-
my @cmd = download_cmd("$mirror/$download_filename");
175+
my @cmd = download_cmd("$mirror/$download_filename", $download_filename, @additional_mirrors);
150176
print STDERR "+ ".join(" ",@cmd)."\n";
151-
open(FETCH_FD, '-|', @cmd) or die "Cannot launch curl or wget.\n";
177+
open(FETCH_FD, '-|', @cmd) or die "Cannot launch aria2c, curl or wget.\n";
152178
$hash_cmd and do {
153179
open MD5SUM, "| $hash_cmd > '$target/$filename.hash'" or die "Cannot launch $hash_cmd.\n";
154180
};
@@ -296,10 +322,11 @@ sub cleanup
296322
my $mirror = shift @mirrors;
297323
$mirror or die "No more mirrors to try - giving up.\n";
298324

299-
download($mirror, $url_filename);
325+
download($mirror, $url_filename, @mirrors);
300326
if (!-f "$target/$filename" && $url_filename ne $filename) {
301-
download($mirror, $filename);
327+
download($mirror, $filename, @mirrors);
302328
}
329+
@mirrors=();
303330
}
304331

305332
$SIG{INT} = \&cleanup;

0 commit comments

Comments
 (0)