103 lines
2.7 KiB
Plaintext
103 lines
2.7 KiB
Plaintext
|
--- /usr/bin/apt-mirror.old 2017-05-29 14:02:33.000000000 +0200
|
||
|
+++ /usr/bin/apt-mirror 2020-04-11 02:08:01.820901199 +0200
|
||
|
@@ -722,6 +722,99 @@
|
||
|
}
|
||
|
|
||
|
######################################################################################
|
||
|
+## by-hash SHA256 files download
|
||
|
+
|
||
|
+%urls_to_download = ();
|
||
|
+
|
||
|
+sub find_by_hash_sha256_files_in_release
|
||
|
+{
|
||
|
+ # Look in the dists/$DIST/Release file for the by-hash SHA256 files that belong
|
||
|
+ # to the given component and architecture.
|
||
|
+
|
||
|
+ my $dist_uri = shift;
|
||
|
+ my $component = shift;
|
||
|
+ my $arch = shift;
|
||
|
+ my ( $release_uri, $release_path, $line ) = '';
|
||
|
+
|
||
|
+ $release_uri = $dist_uri . "Release";
|
||
|
+ $release_path = get_variable("skel_path") . "/" . sanitise_uri($release_uri);
|
||
|
+
|
||
|
+ unless ( open STREAM, "<$release_path" )
|
||
|
+ {
|
||
|
+ warn( "Failed to open Release file from " . $release_uri );
|
||
|
+ return;
|
||
|
+ }
|
||
|
+
|
||
|
+ my $checksums = 0;
|
||
|
+ while ( $line = <STREAM> )
|
||
|
+ {
|
||
|
+ chomp $line;
|
||
|
+ if ($checksums)
|
||
|
+ {
|
||
|
+ if ( $line =~ /^ +(.*)$/ )
|
||
|
+ {
|
||
|
+ my @parts = split( / +/, $1 );
|
||
|
+ if ( @parts == 3 )
|
||
|
+ {
|
||
|
+ my ( $sha256, $size, $filename ) = @parts;
|
||
|
+ my $dirname = dirname($filename);
|
||
|
+ my $sha256_filename = '/'.$dirname.'/by-hash/SHA256/'.$sha256;
|
||
|
+ {
|
||
|
+ add_url_to_download( $dist_uri . $sha256_filename );
|
||
|
+ }
|
||
|
+ }
|
||
|
+ else
|
||
|
+ {
|
||
|
+ warn("Malformed checksum line \"$1\" in $release_uri");
|
||
|
+ }
|
||
|
+ }
|
||
|
+ else
|
||
|
+ {
|
||
|
+ $checksums = 0;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ if ( not $checksums )
|
||
|
+ {
|
||
|
+ if ( $line eq "SHA256:" )
|
||
|
+ {
|
||
|
+ $checksums = 1;
|
||
|
+ }
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+print "Processing SHA256 by-hash files ["
|
||
|
+ if $progress;
|
||
|
+
|
||
|
+foreach (@config_binaries)
|
||
|
+{
|
||
|
+ my ( $arch, $uri, $distribution, @components ) = @{$_};
|
||
|
+ print "D" if $progress;
|
||
|
+ if (@components)
|
||
|
+ {
|
||
|
+ $url = $uri . "/dists/" . $distribution . "/";
|
||
|
+
|
||
|
+ my $component;
|
||
|
+ foreach $component (@components)
|
||
|
+ {
|
||
|
+ find_by_hash_sha256_files_in_release( $url, $component, $arch );
|
||
|
+ }
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+print "]\n\n" if $progress;
|
||
|
+
|
||
|
+push( @index_urls, sort keys %urls_to_download );
|
||
|
+download_urls( "by-hash-SHA256", sort keys %urls_to_download );
|
||
|
+
|
||
|
+foreach ( keys %urls_to_download )
|
||
|
+{
|
||
|
+ s[^(\w+)://][];
|
||
|
+ s[~][%7E]g if get_variable("_tilde");
|
||
|
+ $skipclean{$_} = 1;
|
||
|
+}
|
||
|
+
|
||
|
+######################################################################################
|
||
|
## Main download preparations
|
||
|
|
||
|
%urls_to_download = ();
|