--- /usr/bin/apt-mirror.old 2017-05-29 14:02:33.000000000 +0200 +++ /usr/bin/apt-mirror 2020-04-11 02:09:10.913855091 +0200 @@ -8,7 +8,7 @@ =head1 SYNOPSIS -apt-mirror [configfile] +apt-mirror [--[no-]progress] [--verbose] [configfile] =head1 DESCRIPTION @@ -16,14 +16,34 @@ the whole Debian GNU/Linux distribution or any other apt sources. Main features: - * It uses a config similar to APT's F - * It's fully pool compliant - * It supports multithreaded downloading - * It supports multiple architectures at the same time - * It can automatically remove unneeded files - * It works well on an overloaded Internet connection - * It never produces an inconsistent mirror including while mirroring - * It works on all POSIX compliant systems with Perl and wget + +=over + +=item * +It uses a config similar to APT's F + +=item * +It's fully pool compliant + +=item * +It supports multithreaded downloading + +=item * +It supports multiple architectures at the same time + +=item * +It can automatically remove unneeded files + +=item * +It works well on an overloaded Internet connection + +=item * +It never produces an inconsistent mirror including while mirroring + +=item * +It works on all POSIX compliant systems with Perl and wget + +=back =head1 COMMENTS @@ -94,6 +114,7 @@ use File::Path qw(make_path); use File::Basename; use Fcntl qw(:flock); +use Getopt::Long; my $config_file; @@ -128,11 +149,17 @@ my @childrens = (); my %skipclean = (); my %clean_directory = (); +my $verbose = 0; +my $progress = 1; ###################################################################################### ## Setting up $config_file variable $config_file = "/etc/apt/mirror.list"; # Default value +GetOptions('verbose|v+', \$verbose, + 'progress|p!', \$progress, + ) or die "Usage: apt-mirror [--verbose] [--[no-]progress] [configfile]\n"; + if ( $_ = shift ) { die("apt-mirror: invalid config file specified") unless -e $_; @@ -256,7 +283,9 @@ open URLS, ">" . get_variable("var_path") . "/$stage-urls.$i" or die("apt-mirror: can't write to intermediate file ($stage-urls.$i)"); foreach (@part) { print URLS "$_\n"; } close URLS or die("apt-mirror: can't close intermediate file ($stage-urls.$i)"); - + if ($verbose >= 2) { + print join("\n ", "Downloading batch $i:", @part), "\n"; + } $pid = fork(); die("apt-mirror: can't do fork in download_urls") if !defined($pid); @@ -274,14 +303,17 @@ $nthreads--; } - print "Begin time: " . localtime() . "\n[" . scalar(@childrens) . "]... "; + print "Begin time: " . localtime() . "\n[" . scalar(@childrens) . "]... " + if $progress; while ( scalar @childrens ) { my $dead = wait(); @childrens = grep { $_ != $dead } @childrens; - print "[" . scalar(@childrens) . "]... "; + print "[" . scalar(@childrens) . "]... " + if $progress; } - print "\nEnd time: " . localtime() . "\n\n"; + print "\nEnd time: " . localtime() . "\n\n" + if $progress; } ## Parse config @@ -600,12 +632,13 @@ close STREAM; } -print "Processing translation indexes: ["; +print "Processing translation indexes: [" + if $progress; foreach (@config_binaries) { my ( $arch, $uri, $distribution, @components ) = @{$_}; - print "T"; + print "T" if $progress; if (@components) { $url = $uri . "/dists/" . $distribution . "/"; @@ -618,7 +651,7 @@ } } -print "]\n\n"; +print "]\n\n" if $progress; push( @index_urls, sort keys %urls_to_download ); download_urls( "translation", sort keys %urls_to_download ); @@ -691,12 +724,13 @@ } } -print "Processing DEP-11 indexes: ["; +print "Processing DEP-11 indexes: [" + if $progress; foreach (@config_binaries) { my ( $arch, $uri, $distribution, @components ) = @{$_}; - print "D"; + print "D" if $progress; if (@components) { $url = $uri . "/dists/" . $distribution . "/"; @@ -709,7 +743,7 @@ } } -print "]\n\n"; +print "]\n\n" if $progress; push( @index_urls, sort keys %urls_to_download ); download_urls( "dep11", sort keys %urls_to_download ); @@ -815,12 +849,16 @@ { # Packages index $skipclean{ remove_double_slashes( $path . "/" . $lines{"Filename:"} ) } = 1; print FILES_ALL remove_double_slashes( $path . "/" . $lines{"Filename:"} ) . "\n"; + print "ALL: " . remove_double_slashes( $path . "/" . $lines{"Filename:"} ) . "\n" + if $verbose >= 3; print FILES_MD5 $lines{"MD5sum:"} . " " . remove_double_slashes( $path . "/" . $lines{"Filename:"} ) . "\n" if defined $lines{"MD5sum:"}; print FILES_SHA1 $lines{"SHA1:"} . " " . remove_double_slashes( $path . "/" . $lines{"Filename:"} ) . "\n" if defined $lines{"SHA1:"}; print FILES_SHA256 $lines{"SHA256:"} . " " . remove_double_slashes( $path . "/" . $lines{"Filename:"} ) . "\n" if defined $lines{"SHA256:"}; if ( need_update( $mirror . "/" . $lines{"Filename:"}, $lines{"Size:"} ) ) { print FILES_NEW remove_double_slashes( $uri . "/" . $lines{"Filename:"} ) . "\n"; + print "NEW: " . remove_double_slashes( $uri . "/" . $lines{"Filename:"} ) . "\n" + if $verbose >= 1; add_url_to_download( $uri . "/" . $lines{"Filename:"}, $lines{"Size:"} ); } } @@ -833,10 +871,14 @@ die("apt-mirror: invalid Sources format") if @file != 3; $skipclean{ remove_double_slashes( $path . "/" . $lines{"Directory:"} . "/" . $file[2] ) } = 1; print FILES_ALL remove_double_slashes( $path . "/" . $lines{"Directory:"} . "/" . $file[2] ) . "\n"; + print "ALL: " . remove_double_slashes( $path . "/" . $lines{"Directory:"} . "/" . $file[2] ) . "\n" + if $verbose >= 3; print FILES_MD5 $file[0] . " " . remove_double_slashes( $path . "/" . $lines{"Directory:"} . "/" . $file[2] ) . "\n"; if ( need_update( $mirror . "/" . $lines{"Directory:"} . "/" . $file[2], $file[1] ) ) { print FILES_NEW remove_double_slashes( $uri . "/" . $lines{"Directory:"} . "/" . $file[2] ) . "\n"; + print "NEW: " . remove_double_slashes( $uri . "/" . $lines{"Directory:"} . "/" . $file[2] ) . "\n" + if $verbose >= 1; add_url_to_download( $uri . "/" . $lines{"Directory:"} . "/" . $file[2], $file[1] ); } } @@ -846,12 +888,13 @@ close STREAM; } -print "Processing indexes: ["; +print "Processing indexes: [" + if $progress; foreach (@config_sources) { my ( $uri, $distribution, @components ) = @{$_}; - print "S"; + print "S" if $progress; if (@components) { my $component; @@ -869,7 +912,7 @@ foreach (@config_binaries) { my ( $arch, $uri, $distribution, @components ) = @{$_}; - print "P"; + print "P" if $progress; if (@components) { my $component; @@ -886,7 +929,8 @@ clear_stat_cache(); -print "]\n\n"; +print "]\n\n" + if $progress; close FILES_ALL; close FILES_NEW; @@ -1019,6 +1063,7 @@ foreach (@rm_files) { print CLEAN "rm -f '$_'\n"; + print " $_\n" if $verbose >= 1; print CLEAN "echo -n '[" . int( 100 * $i / $total ) . "\%]'\n" unless $i % 500; print CLEAN "echo -n .\n" unless $i % 10; $i++;