Categories
SysOps

How to determine fastest APT server using the ICMP

Determine fastest APT server using the Internet Control Message Protocol (ICMP).

Install netselect-apt utility.

$ sudo apt install netselect netselect-apt

Display usage information.

$ netselect --help
Usage: netselect-apt [OPTIONS] [ debian_release ]
       debian_release is one of stable, testing, unstable, experimental
       or a codename etch, lenny, squeeze, wheezy, jessie, stretch, sid
Options:
   -a, --arch ARCH        Use mirrors containing arch (amd64)
   -s, --sources          Include deb-src lines in generated file (no)
   -i, --infile INFILE    Use INFILE as the input file (temp file)
   -o, --outfile OUTFILE  Use OUTFILE as the output file (sources.list)
   -n, --nonfree          Use also non-free packages in OUTFILE (no)
   -f, --ftp              Use FTP as the protocol for OUTFILE (http)
   -t, --tests #          Number of hosts to test (10)
   -c, --country COUNTRY  Restrict search to servers in that country
   -d, --debug            Enable debugging

Create sources.list for the fastest Debian mirrors in Germany using official mirror list.

$ netselect-apt --arch amd64 --nonfree --country de --outfile /tmp/sources.list
Using distribution stable.
Retrieving the list of mirrors from www.debian.org...

URL transformed to HTTPS due to an HSTS policy
--2022-03-30 23:24:03--  https://www.debian.org/mirror/mirrors_full
Resolving www.debian.org (www.debian.org)... 130.89.148.77, 2001:67c:2564:a119::77
Connecting to www.debian.org (www.debian.org)|130.89.148.77|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 113671 (111K) [text/html]
Saving to: ‘/tmp/netselect-apt.Owg2Hv’

/tmp/netselect-apt.Owg2Hv                  100%[========================================================================================>] 111.01K  --.-KB/s    in 0.1s    

2022-03-30 23:24:04 (1.08 MB/s) - ‘/tmp/netselect-apt.Owg2Hv’ saved [113671/113671]

Choosing a main Debian mirror using netselect.
(will filter only for mirrors in country de)
netselect: 7 (7 active) nameserver request(s)...         
Duplicate address 141.76.2.4 (http://ftp.de.debian.org/debian/, http://debian.inf.tu-dresden.de/debian/); keeping only under first name.
netselect: 6 (6 active) nameserver request(s)...       
Duplicate address 137.226.34.46 (http://ftp.halifax.rwth-aachen.de/debian/, http://ftp2.de.debian.org/debian/); keeping only under first name.
Running netselect to choose 10 out of 37 addresses.     
......................................................................................................................................................................................................................................................................................................................................................
The fastest 10 servers seem to be:

	http://mirrors.xtom.de/debian/
	http://debian.mirror.iphh.net/debian/
	http://ftp.gwdg.de/debian/
	http://ftp.tu-clausthal.de/debian/
	http://de.mirrors.clouvider.net/debian/
	http://debian.uni-duisburg-essen.de/debian/
	http://ftp.uni-stuttgart.de/debian/
	http://mirror.ipb.de/debian/
	http://ftp-stud.hs-esslingen.de/debian/
	http://ftp.uni-stuttgart.de/debian/

Of the hosts tested we choose the fastest valid for http:
        http://mirrors.xtom.de/debian/

Writing /tmp/sources.list.
Done.

Inspect created sources.list file.

$ cat /tmp/sources.list 
# Debian packages for stable
deb http://mirrors.xtom.de/debian/ stable main contrib non-free
# Uncomment the deb-src line if you want 'apt-get source'
# to work with most packages.
# deb-src http://mirrors.xtom.de/debian/ stable main contrib non-free

# Security updates for stable
deb http://security.debian.org/ stable/updates main contrib non-free

You can create your own mirror list.

$ cat << EOF | tee mirror.list
<h3><a name="DE">Germany</a></h3>

Site: ftp.fau.de
Packages over HTTP: <a rel="nofollow" href="http://ftp.fau.de/debian/">/debian/</a>
Includes architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x
<br><br>

Site: ftp-stud.hs-esslingen.de
Packages over HTTP: <a rel="nofollow" href="http://ftp-stud.hs-esslingen.de/debian/">/debian/</a>
Includes architectures: amd64 arm64 armel armhf hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc ppc64el s390 s390x
<br><br>


<h3><a name="PL">Poland</a></h3>

Site: ftp.icm.edu.pl
Packages over HTTP: <a rel="nofollow" href="http://ftp.icm.edu.pl/pub/Linux/debian/">/pub/Linux/debian/</a>
Includes architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x
<br><br>
EOF
<h3><a name="DE">Germany</a></h3>

Site: ftp.fau.de
Packages over HTTP: <a rel="nofollow" href="http://ftp.fau.de/debian/">/debian/</a>
Includes architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x
<br><br>

Site: ftp-stud.hs-esslingen.de
Packages over HTTP: <a rel="nofollow" href="http://ftp-stud.hs-esslingen.de/debian/">/debian/</a>
Includes architectures: amd64 arm64 armel armhf hurd-i386 i386 ia64 kfreebsd-amd64 kfreebsd-i386 mips mipsel powerpc ppc64el s390 s390x
<br><br>


<h3><a name="PL">Poland</a></h3>

Site: ftp.icm.edu.pl
Packages over HTTP: <a rel="nofollow" href="http://ftp.icm.edu.pl/pub/Linux/debian/">/pub/Linux/debian/</a>
Includes architectures: amd64 arm64 armel armhf i386 mips mips64el mipsel powerpc ppc64el s390x
<br><br>

Use created mirror list to simply determine the fastest server.

$ netselect-apt --arch amd64 --nonfree --infile mirror.list --outfile /dev/null
Using distribution stable.
mirror.list has been found.
I'll use that, rather than downloading it again.

Choosing a main Debian mirror using netselect.
Running netselect to choose 10 out of 3 addresses.      
...................................
Only found  3 hosts out of 10 requested.
The fastest 10 servers seem to be:

	http://ftp.icm.edu.pl/pub/Linux/debian/
	http://ftp-stud.hs-esslingen.de/debian/
	http://ftp.fau.de/debian/

Of the hosts tested we choose the fastest valid for http:
        http://ftp.icm.edu.pl/pub/Linux/debian/

Writing /dev/null.
Done.