Historique: de apt_perf à apt-test
Un script apt_perf a déjà été proposé début 2023 dans le sujet [apt] Dépôts Debian (qui pose des difficultés de maintenance pour raison d’ancienneté, remarque secondaire qui sera traitée plus tard)
Plutôt que de faire évoluer apt_perf un peu perdu dans cet ancien fil, je propose de l’extraire en le renommant apt-test (nom en analogie à [apt] sl-test / script d’analyse des fichiers sources apt).
apt-test
Description:
apt-test vérifie très rapidement l’état de disponibilité de 22 miroirs Debian.
apt-test 20260817
#!/bin/bash
# apt-test: vérification disponibilité dépôts apt Debian fr » 20260817 «
ping -c1 -W1 example.com >/dev/null || { echo 'Réseau inaccessible'; exit 1;}
set -- D.{proxad.net,mirrors.ovh.net,obspm.fr,polytech-lille.fr}/D \
ftp.{fr.D.org,ec-m.fr,rezopole.net,univ-pau.fr,u-picardie.fr,u-strasbg.fr}/D \
{ftp.lip6.fr/pub/linux/distributions,apt.tetaneutral.net}/D \
{miroir.univ-lorraine.fr,deb.D.org,deb-mir1.naitways.net}/D \
mirror.{abaclouda.net,gitoyen.net,johnnybegood.fr,plusserver.com/D}/D \
mirror.D.ikoula.com cdn-{aws,fastly}.deb.D.org/D
n=$# ; i=0 ; R=
for H in ${@//D/debian} 'sec.' ; do h=${H%%/*} ; ((i==n && i--))
printf "\r\e[1;37m %-24s\e[0;32m[%2d/%2d]\e[m %-30s" 'Test sites Debian' $((++i)) $n $h
((${#H}<5)) && break || x=${EPOCHREALTIME/,/.}
curl -s --connect-timeout 1 http://$H/dists/stable/ | grep -q 'Release.gpg'
R+="$? $(mawk -v x=$x -v y=${EPOCHREALTIME/,/.} 'BEGIN{printf "%.3f",y-x}') $h\n"
done ; echo
printf "$R" |sort| mawk 'NF==3{t+=$2;printf "%3d %-28s",NR,$3;print($1==0)?$2:"--"}
END{printf "%31s:%7.3f\n","Temps d\x27exécution",t}'
exit 0
apt-test 20260815
#!/bin/bash
# apt-test : mesure performance dépôts apt Debian fr » 20260815 «
ping -c1 -W1 example.com >/dev/null || { echo 'Réseau inaccessible'; exit 1;}
L=(debian.{proxad.net,mirrors.ovh.net,obspm.fr,polytech-lille.fr} \
ftp.{fr.debian.org,ec-m.fr,rezopole.net,univ-pau.fr,u-picardie.fr,u-strasbg.fr} \
ftp.lip6.fr/pub/linux/distributions {cdn-aws.,}deb.debian.org apt.tetaneutral.net \
mirror.{abaclouda.net,gitoyen.net,debian.ikoula.com,johnnybegood.fr,plusserver.com} \
miroir.univ-lorraine.fr cdn-fastly.deb.debian.org deb-mir1.naitways.net)
LC_ALL=C ; T0=${EPOCHREALTIME} ; n=${#L[@]} ; i=0 ; R=
for H in ${L[@]} 'sec.' ; do h=${H%%/*} ; ((i==n && i--)) ; a=down
printf "\r\e[1;37m %-24s\e[0;32m[%2d/%2d]\e[m %-30s" 'Test sites Debian' $((++i)) $n $h
((${#H}==4)) && break || x=${EPOCHREALTIME}
curl -s --connect-timeout 2.2 http://$H/debian/dists/stable/Release >/dev/null && \
a=$(mawk -v x=$x -v y=${EPOCHREALTIME} 'BEGIN{d=y-x;if(d>2){printf ">2"}else{printf "%1.3f",d}}')
R+="$a $h\n"
done ; echo
printf "$R" |sort| mawk '{printf "%3d %-28s%s\n",++i,$2,$1}
END{printf "%31s: %3.3f\n","Temps d\x27exécution",y-x}' x=$T0 y=${EPOCHREALTIME}
exit 0
apt-test 20260811
#!/bin/bash
# apt-test : mesure performance dépôts apt Debian fr » 20260811 «
ping -c1 -W5 1.1.1.1 >/dev/null || { echo ' Réseau inaccessible'; exit 1;}
i=0 ; R=
for H in debian.{proxad.net,mirrors.ovh.net,obspm.fr,polytech-lille.fr} \
ftp.{fr.debian.org,ec-m.fr,rezopole.net,univ-pau.fr,u-picardie.fr,u-strasbg.fr,lip6.fr/pub/linux/distributions} \
{cdn-aws.,}deb.debian.org miroir.univ-lorraine.fr apt.tetaneutral.net ‒ ; do
h=${H%%/*} ; ((i==15 && i--))
printf "\r\e[1;37m %-24s\e[0;32m[$((++i))/15]\e[m %-30s" 'Test sites Debian' $h
[ $H == ‒ ] || { ping -c1 -W2 $h >/dev/null 2>&1 && \
R+="$((time curl -s --connect-timeout 3 http://$H/debian/dists/stable/Release{,}) 2>&1 | \
mawk -F'm' '/^r/{print $2}') $h\n" || R+="no-ping $h\n";}
done ; echo
printf "$R" |sort| mawk '$2~/./{printf "%3d %-28s%s\n",++i,$2,$1}'
exit
apt-test 20260808-2
#!/bin/bash
# apt-test : mesure performance dépôts apt Debian fr » 20260808-2 «
if ! ping -c1 -W5 1.1.1.1 >/dev/null; then # test accès réseau
echo ' Réseau inaccessible'
exit 1
fi
if ! grep -qs proxad ${l:=/dev/shm/_mirror-list} ; then
echo ' Recherche liste miroirs Debian'
curl -s --retry-delay 5 --retry-max-time 5 'https://www.debian.org/mirror/list' |\
sed -n '/<tr.*Fr/,/<tr.*<hr/{/http/{/de\//d;s~.*//~~;s~".*~~;p}}' > $l
printf "%s\n%s\n%s\n★\n" {deb,cdn-fastly.deb,cdn-aws.deb}.debian.org/debian/ >> $l
fi
P=$(mawk '/^F.*c.cron.cron_/{print $2;exit}' /var/lib/apt/lists/*main_binary*s)
n=$(mawk '{i++;next}END{print i-1}' $l); i=0 ; R=
while read H ; do ((i==n)) && i=$((--i))
printf "\r\e[1;37m Test sites Debian apt \e[0;32m[$((++i))/$n]\e[m %-26s" "${H%%/*}"
((${#H}==1)) && break
if ping -c1 -W5 ${H%%/*} >/dev/null ; then
R+="$((time wget -t1 -T5 --no-dns-cache http://${H}$P -O /dev/null) 2>&1 | \
mawk -F'm|\.|,' '/^r/{printf ($2>4)?"5+":$2","$3}') ${H%%/*}\n"
else
R+="no-ping ${H%%/*}\n"
fi
done < $l
printf "\n\n"
printf "$R" |sort| mawk 'BEGIN{i=1}($2!=""){printf "%3d %-28s%s\n",i++,$2,$1}'
echo
for H in {ftp.fr,deb}.debian.org
do ping -c1 $H | mawk '{printf "%18s -> %-24s\n",h,$2;exit}' h=$H
done
exit
Exemple de sortie:

Remarque: il arrive que des miroirs Debian ne soient pas accessibles pour raisons techniques temporaires. Ce n’est donc pas parce-que le réseau global d’un PC est parfaitement fonctionnel, qu’apt ne peut pas être bloqué, ce qui conduit à de mauvaises interprétations (vu dans un sujet récent).
Avec sl-test qui teste les dépôts usagers ainsi que l’état des domaines à accéder, apt-test + sl-test sont deux outils complémentaires qui permettront une analyse sans faille d’apt dont le réseau est bloqué, alors que le réseau global ne l’est pas.
!! NOTE !!: étant blasé/saturé des intervenants qui ne peuvent s’empêcher à peine un sujet ouvert d’intervenir pour raconter ce que pense ‹ Chatgpt › ou équivalent, et de ne pas transformer rapidement ce sujet en troll ou poubelle comme on le voit parfois, merci de respecter un minimum les lieux, dans l’intérêt des usagers Debian.
