summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorChristian Marangi <ansuelsmth@gmail.com>2022-10-01 01:36:48 +0200
committerChristian Marangi <ansuelsmth@gmail.com>2022-10-20 00:35:19 +0200
commitf17608ddca299dc617595247f2ad30a73390dbd7 (patch)
tree6b40d3a290fe403c8bb4f1ddd016b54ad0b82da3 /scripts
parent3268f7b9fa627d33e98261386fb8a8e9dabac2d4 (diff)
downloadopenwrt-f17608ddca299dc617595247f2ad30a73390dbd7.tar.gz
scripts/download.pl: make the download tool configurable
Introduce a new option in the "Advanced configuration options" to configure a custom download tool. By declaring a string in "Use custom download tool" an user can force what command to use to download package. With the string empty the default tool used is curl, with wget as a fallback if not available. download.pl supports 3 tools officially aria2c, curl and wget. If one of the tool is used in this config, download.pl will use the default args to make use of them. If the provided string is different than aria2c, curl or wget, the command is used as is and the download url will be appended at the end of such command. While at it also tweak the tool selection logic and chose the tool only once when the script is called and move aria2c specific variables in the relevant section. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/download.pl48
1 files changed, 35 insertions, 13 deletions
diff --git a/scripts/download.pl b/scripts/download.pl
index 2b193ff5b6..79ad8bfea0 100755
--- a/scripts/download.pl
+++ b/scripts/download.pl
@@ -25,6 +25,8 @@ my @mirrors;
my $ok;
my $check_certificate = $ENV{DOWNLOAD_CHECK_CERTIFICATE} eq "y";
+my $custom_tool = $ENV{DOWNLOAD_TOOL_CUSTOM};
+my $download_tool;
$url_filename or $url_filename = $filename;
@@ -85,16 +87,42 @@ sub tool_present {
return $present
}
+sub select_tool {
+ $custom_tool =~ tr/"//d;
+ if ($custom_tool) {
+ return $custom_tool;
+ }
+
+ # Try to use curl if available
+ if (tool_present("curl", "curl")) {
+ return "curl";
+ }
+
+ # No tool found, fallback to wget
+ return "wget";
+}
+
sub download_cmd {
my $url = shift;
my $filename = shift;
- my $additional_mirrors = join(" ", map "$_/$filename", @_);
- my @chArray = ('a'..'z', 'A'..'Z', 0..9);
- my $rfn = join '', "${filename}_", map{ $chArray[int rand @chArray] } 0..9;
+ if ($download_tool eq "curl") {
+ return (qw(curl -f --connect-timeout 20 --retry 5 --location),
+ $check_certificate ? () : '--insecure',
+ shellwords($ENV{CURL_OPTIONS} || ''),
+ $url);
+ } elsif ($download_tool eq "wget") {
+ return (qw(wget --tries=5 --timeout=20 --output-document=-),
+ $check_certificate ? () : '--no-check-certificate',
+ shellwords($ENV{WGET_OPTIONS} || ''),
+ $url);
+ } elsif ($download_tool eq "aria2c") {
+ my $additional_mirrors = join(" ", map "$_/$filename", @_);
+ my @chArray = ('a'..'z', 'A'..'Z', 0..9);
+ my $rfn = join '', "${filename}_", map{ $chArray[int rand @chArray] } 0..9;
- if (tool_present('aria2c', 'aria2')) {
@mirrors=();
+
return join(" ", "[ -d $ENV{'TMPDIR'}/aria2c ] || mkdir $ENV{'TMPDIR'}/aria2c;",
"touch $ENV{'TMPDIR'}/aria2c/${rfn}_spp;",
qw(aria2c --stderr -c -x2 -s10 -j10 -k1M), $url, $additional_mirrors,
@@ -104,16 +132,8 @@ sub download_cmd {
"-d $ENV{'TMPDIR'}/aria2c -o $rfn;",
"cat $ENV{'TMPDIR'}/aria2c/$rfn;",
"rm $ENV{'TMPDIR'}/aria2c/$rfn $ENV{'TMPDIR'}/aria2c/${rfn}_spp");
- } elsif (tool_present('curl', 'curl')) {
- return (qw(curl -f --connect-timeout 20 --retry 5 --location),
- $check_certificate ? () : '--insecure',
- shellwords($ENV{CURL_OPTIONS} || ''),
- $url);
} else {
- return (qw(wget --tries=5 --timeout=20 --output-document=-),
- $check_certificate ? () : '--no-check-certificate',
- shellwords($ENV{WGET_OPTIONS} || ''),
- $url);
+ return join(" ", $download_tool, $url);
}
}
@@ -326,6 +346,8 @@ if (-f "$target/$filename") {
};
}
+$download_tool = select_tool();
+
while (!-f "$target/$filename") {
my $mirror = shift @mirrors;
$mirror or die "No more mirrors to try - giving up.\n";