[apt] sl-test / script d'analyse des fichiers sources apt

Tags: #<Tag:0x00007fb5d80dbea8> #<Tag:0x00007fb5d80dbd90>

sl-test


Description:

sl-test est un outil de diagnostique des fichiers sources apt au format ‹ *.list ›, et ‹ *.sources › (DEB822). Par défaut, sl-test liste les fichiers list/sources actifs ou non, teste les domaines associés ainsi que leur éventuel redirection.

sl-test détecte aussi les lignes ‹ pseudo-vides › (contenant des espaces) des fichiers multi-sources, cause de dysfonctionnement apt difficile à diagnostiquer, signalé par «  |◄ !! » (avertissement seulement, sans correction) et fichier(s) concerné(s).

Options:
  -c , –content : liste le contenu numéroté des lignes non commentées des fichiers list/sources
  -e , –enabled : liste les [domaines + branches] uniquement activés, et teste leur éventuel redirection.

sl-test 20260822

#!/bin/bash
# sl-test : liste des fichiers source apt + test domaines # 20260822 #
grep -lm1 '^ ' /etc/apt/s*d/*s && \
  printf '\e[38;5;215m !! lignes commençant pas un espace à corriger !!\e[m\n'

if [[ $1 == *c* ]] ; then
  for F in $(grep -slm1 '^[dU]' /etc/apt/s*{t,d/*[st]}) ; do
    printf "%0.s―" {1..23}
    printf "\n${F%/*}/\e[38;5;85m${F##*/}\e[m\n"
    mawk '!/#/{sub("^ "," |◄ !!")
          printf "\x1b[38;5;228m%3d\x1b[m %s\n",NR,$0}' $F
  done ; exit
fi

R="$(for F in $(grep -sl '^d' /etc/apt/s*{t,*d/*t}) ; do printf "${F##*/}\n"
     sed '/^deb /!d;s~.*//~~;s~/[^ ]*~~' $F ; done
  for F in $(grep -sl '^U' /etc/apt/s*d/*.sources ) ; do printf "${F##*/}\n"
   mawk -v n=$(sed -n $= $F) '/^U/{gsub("h.*//|/.*","");u=$2};/^Su/{s=$2}
   /^C/{$1="";c=$0}/^E.*no/{e="N"}{if((/^$/)||(NR==n)){print u,s,c,e;e=""}}' $F
  done)"

if [[ $1 == *e* ]] ; then e=N
     printf "$R" |sort| mawk 'NF>1{if($0!~"N"){printf " %-30s",$1; $1="";print $0}}'
else printf "$R" | mawk '{if(NF==1){printf "\x1b[1;32m%s\x1b[m\n",$1}
           if(NF>1){sub("N","");printf " %-30s",$1; $1="";print $0}}'
     e=X
fi
echo
while read H ; do printf "\e[38;5;117m %-38s\e[m" $H
 ping -c1 $H | \
 mawk 'NR==1{if($2!=h)printf "\n  ↳ %-35s",$2}/%/{print (/0%/?": OK":": ?")}' h=$H
done < <(printf "$R" |sed "/$e/d" | mawk 'NF>1{print $1}' |sort -u)
echo
exit 0

Exemple:

sl-test-20260822

Test exclusivement des sources actives (option -e):

sl-test_20260822_114818

Contenu des fichiers sources (option -c)

sl-test-c


Note: afin que ce fil ne devienne pas une demande de support général, ou demande d’explication sur du code bash, je suggère que toute question/observation soit adressée @Commentaires sur sl-test. Ce sujet est exclusivement réservé aux utilisateurs de sl-test qui auraient un ‹ vrai bug › à signaler, démonstration factuelle à l’appui, ou une suggestion d’amélioration fonctionnelle.

Bonsoir @Verner,

Cette ligne serait à remplacer par une ligne telle que celle-ci qui rejette plus de fichiers et de dossiers. Sans cela, l’ajout de certains noms de répertoires ou de fichiers viendrait perturber votre script d’analyse en générant des faux positifs.

L=$(ls -1 /etc/apt/sources.list{,.d/*{.sources,.list}} 2>/dev/null)

« serait, viendrait… » Message qui n’a pas sa place ici (= à supprimer) puisque ne répond pas à la définition d’un bug (voir Note), mais donne l’occasion d’ouverture du sujet Commentaires sur sl-test où la réponse détaillée d’hypothèse théorique à probabilité nulle aura sa place, et où la définition d’un ‹ bug › sera rappelée.

MAJ 20260730 (1er message)
Formatage de sortie plus compact permettant de mieux identifier les redirections de domaine dans le cas de longue liste de fichiers sources.

J’ai relaté un dysfonctionnement et proposé une amélioration. Un bogue pour parler français. « Serait, viendrait » invite et n’impose pas. Il n’en reste pas moins vrai que l’expression régulière dans le script est à remplacer pour la corriger. Mon message n’est donc pas à supprimer comme vous l’écrivez, au regard du seul titre et du soin particulier visant à résoudre des erreurs notables dans le script.

Déclarer que l’hypothèse est théorique et que sa probabilité est nulle sans argument réel et sérieux revient à discréditer et donc à exclure des messages pertinents. Cela laisse ainsi supposer à tort que le script n’a pas de bogue, ce qui n’est pas le cas.

Rappelons la définition de bogue (Larousse): Défaut de conception ou de réalisation d’un programme informatique, qui se manifeste par des anomalies de fonctionnement de l’ordinateur.

Certains bogues nécessitent davantage de réflexion que d’autres qui ne peuvent être résolus que par une communication et des échanges de qualité et qui ont toutes leur place ici, et non pas par un transfert ou un renvoi dans une section pause café.

Je pense qu’il faudrait améliorer ceci, car dans la specification du format DEB822, la ligne Enabled n’est pas nécessairement en début de pavé, elle peut être ailleurs (moi par exemple c’est en bas).

Bonne remarque partagée prise en compte dans la version à venir qui intégrera aussi une détection des lignes ‹ pseudo-vides › des fichiers multi-sources causant un dysfonctionnement particulièrement difficile à diagnostiquer, et qui ajoutera une fonction.
En attendant, je propose du supprimer les échanges suivants relatifs au sujet VLC ayant servi d’argumentation qui auraient plutôt dû prendre place dans le sujet ‹ commentaires sl-test ›.
Merci de la contribution de chacun pour maintenir ce fil le plus propre possible.

Pas tout à fait : en réalité le conversion chez moi n’a pas mis la ligne Enabled, c’est moi qui l’ai rajoutée à la mano en me disant que ce serait sûrement utile un jour. L’absence de ligne Enabled est considérée comme Enabled: yes.

D’ailleurs ça me fait penser, c’est utile que le script sache détecter une suspicion de pavés mal séparés, comme ça m’était arrivé. Ça serait chaud à implémenter, peut-être qu’il faudrait détecter la présence anormale de plusieurs lignes concurrentes dans chaque pavé, mais très utile pour la personne qui s’arrache les cheveux sans comprendre ce qui se passe.

Certes, mais c’est l’outil de migration des sources qui m’a fait ce fichier unique, donc je ne dois pas être seul dans ce cas. Il vaut mieux que ton script s’adapte aux utilisateurs plutôt que l’inverse.

NOTE d’information de ce sujet et Commentaires sur sl-test mises à jour.


Mise à jour sl-test 20260815

Différences 20260815 / 20260806
* ajout numéro lignes option -c, en précisant que les lignes uniquement non commentées des fichiers sources sont listées.

* La détection des lignes ‹ pseudo-vides › est faite quelque-soit l’option.


Mise à jour sl-test 20260822 (1er message)

* technique interne: abandon de l’usage d’apt-cache (= process trop lourd)
* fonctionnement plus léger