mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
scripts/download.pl: Make the download tool configurable (#10291)
* rules.mk: Move DOWNLOAD_CHECK_CERTIFICATE to include/download.mk Move DOWNLOAD_CHECK_CERTIFICATE to include/download.mk as it's a better place than exporting it in the global rules.mk makefile. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> * 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> * scripts/download.pl: Pass aria2 config in ENV only The aria2c command tries to load config from ${XDG_CONFIG_HOME:-${HOME}/.config}/aria2/aria2.conf by default, which may result unexpected behavior. As a replacement, people can use environment variable ARIA2C_OPTIONS to custom arguments passed to aria2c like curl and wget below. Including --conf-path=/path/to/config.conf in ARIA2C_OPTIONS can also set a custom config file path easily if needed. Signed-off-by: Zhang Hua <zhanghuadedn@gmail.com> Signed-off-by: Christian Marangi <ansuelsmth@gmail.com> Signed-off-by: Zhang Hua <zhanghuadedn@gmail.com> Co-authored-by: Christian Marangi <ansuelsmth@gmail.com> Co-authored-by: Zhang Hua <zhanghuadedn@gmail.com>
This commit is contained in:
parent
bc34ef9154
commit
6c4e5d7b47
@ -17,6 +17,20 @@ menuconfig DEVEL
|
|||||||
Store built firmware images and filesystem images in this directory.
|
Store built firmware images and filesystem images in this directory.
|
||||||
If not set, uses './bin/$(BOARD)'
|
If not set, uses './bin/$(BOARD)'
|
||||||
|
|
||||||
|
config DOWNLOAD_TOOL_CUSTOM
|
||||||
|
string "Use custom download tool" if DEVEL
|
||||||
|
default ""
|
||||||
|
help
|
||||||
|
Use and force custom download tool instead of relying on autoselection
|
||||||
|
between curl if available and wget as a fallback.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
config DOWNLOAD_FOLDER
|
config DOWNLOAD_FOLDER
|
||||||
string "Download folder" if DEVEL
|
string "Download folder" if DEVEL
|
||||||
default ""
|
default ""
|
||||||
|
@ -18,6 +18,10 @@ endif
|
|||||||
|
|
||||||
DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED)
|
DOWNLOAD_RDEP=$(STAMP_PREPARED) $(HOST_STAMP_PREPARED)
|
||||||
|
|
||||||
|
# Export options for download.pl
|
||||||
|
export DOWNLOAD_CHECK_CERTIFICATE:=$(CONFIG_DOWNLOAD_CHECK_CERTIFICATE)
|
||||||
|
export DOWNLOAD_TOOL_CUSTOM:=$(CONFIG_DOWNLOAD_TOOL_CUSTOM)
|
||||||
|
|
||||||
define dl_method_git
|
define dl_method_git
|
||||||
$(if $(filter https://github.com/% git://github.com/%,$(1)),github_archive,git)
|
$(if $(filter https://github.com/% git://github.com/%,$(1)),github_archive,git)
|
||||||
endef
|
endef
|
||||||
|
@ -25,6 +25,8 @@ my @mirrors;
|
|||||||
my $ok;
|
my $ok;
|
||||||
|
|
||||||
my $check_certificate = $ENV{DOWNLOAD_CHECK_CERTIFICATE} eq "y";
|
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;
|
$url_filename or $url_filename = $filename;
|
||||||
|
|
||||||
@ -85,35 +87,54 @@ sub tool_present {
|
|||||||
return $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 {
|
sub download_cmd {
|
||||||
my $url = shift;
|
my $url = shift;
|
||||||
my $filename = shift;
|
my $filename = shift;
|
||||||
my $additional_mirrors = join(" ", map "$_/$filename", @_);
|
|
||||||
|
|
||||||
my @chArray = ('a'..'z', 'A'..'Z', 0..9);
|
if ($download_tool eq "curl") {
|
||||||
my $rfn = join '', "${filename}_", map{ $chArray[int rand @chArray] } 0..9;
|
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=();
|
@mirrors=();
|
||||||
|
|
||||||
return join(" ", "[ -d $ENV{'TMPDIR'}/aria2c ] || mkdir $ENV{'TMPDIR'}/aria2c;",
|
return join(" ", "[ -d $ENV{'TMPDIR'}/aria2c ] || mkdir $ENV{'TMPDIR'}/aria2c;",
|
||||||
"touch $ENV{'TMPDIR'}/aria2c/${rfn}_spp;",
|
"touch $ENV{'TMPDIR'}/aria2c/${rfn}_spp;",
|
||||||
qw(aria2c --stderr -c -x2 -s10 -j10 -k1M), $url, $additional_mirrors,
|
qw(aria2c --stderr -c -x2 -s10 -j10 -k1M), $url, $additional_mirrors,
|
||||||
$check_certificate ? () : '--check-certificate=false',
|
$check_certificate ? () : '--check-certificate=false',
|
||||||
"--server-stat-of=$ENV{'TMPDIR'}/aria2c/${rfn}_spp",
|
"--server-stat-of=$ENV{'TMPDIR'}/aria2c/${rfn}_spp",
|
||||||
"--server-stat-if=$ENV{'TMPDIR'}/aria2c/${rfn}_spp",
|
"--server-stat-if=$ENV{'TMPDIR'}/aria2c/${rfn}_spp",
|
||||||
|
"--daemon=false --no-conf", shellwords($ENV{ARIA2C_OPTIONS} || ''),
|
||||||
"-d $ENV{'TMPDIR'}/aria2c -o $rfn;",
|
"-d $ENV{'TMPDIR'}/aria2c -o $rfn;",
|
||||||
"cat $ENV{'TMPDIR'}/aria2c/$rfn;",
|
"cat $ENV{'TMPDIR'}/aria2c/$rfn;",
|
||||||
"rm $ENV{'TMPDIR'}/aria2c/$rfn $ENV{'TMPDIR'}/aria2c/${rfn}_spp");
|
"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 {
|
} else {
|
||||||
return (qw(wget --tries=5 --timeout=20 --output-document=-),
|
return join(" ", $download_tool, $url);
|
||||||
$check_certificate ? () : '--no-check-certificate',
|
|
||||||
shellwords($ENV{WGET_OPTIONS} || ''),
|
|
||||||
$url);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -328,6 +349,8 @@ if (-f "$target/$filename") {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$download_tool = select_tool();
|
||||||
|
|
||||||
while (!-f "$target/$filename") {
|
while (!-f "$target/$filename") {
|
||||||
my $mirror = shift @mirrors;
|
my $mirror = shift @mirrors;
|
||||||
$mirror or die "No more mirrors to try - giving up.\n";
|
$mirror or die "No more mirrors to try - giving up.\n";
|
||||||
|
Loading…
Reference in New Issue
Block a user