05-07-2019, 10:03:08
Voici le script permettant de comparer les listes de paquets de deux distributions. C'est celui que j'ai développé pour m'aider à construire la PrimTux RPi.
ATTENTION: en plus de ce qui est indiqué en début de script, il te faudra modifier les lignes 12 et 13 au niveau des architectures:
Il y aura à remplacer le i386 de ton Ubuntu sans doute par amd64 (correspondant à la première ligne), idem pour la PrimTux Lubuntu à la place de armhf (correspondant à la 2ème ligne) si elle est en 64 bits, sinon ce sera i386.
Tu pourras facilement le vérifier par un
où tu verras, sur chaque ligne de paquet, l'indication d'architecture.
Le script te créera, dans le répertoire de travail, les fichiers suivants:
paquets-compares-presents.txt --> paquets présents dans les deux distributions
paquets-compares-absents.txt --> paquets présents dans la distribution de référence, mais pas dans celle comparée
paquets-compares-nouveaux.txt --> paquets présents dans la distribution comparée, mais dans dans la distribution de référence
paquets-compares.html --> synthèse des fichiers précédents, présentée au format html
ATTENTION: en plus de ce qui est indiqué en début de script, il te faudra modifier les lignes 12 et 13 au niveau des architectures:
Code :
cat "$DISTRI1" | sed -e '1,6d' -e "s/[ ][ ]*/#/g" -e "s/i386//g" | cut -d '#' -f 2 > liste1
cat "$DISTRI2" | sed -e '1,6d' -e "s/[ ][ ]*/#/g" -e "s/armhf//g" | cut -d '#' -f 2 > liste2Il y aura à remplacer le i386 de ton Ubuntu sans doute par amd64 (correspondant à la première ligne), idem pour la PrimTux Lubuntu à la place de armhf (correspondant à la 2ème ligne) si elle est en 64 bits, sinon ce sera i386.
Tu pourras facilement le vérifier par un
Code :
dpkg -lLe script te créera, dans le répertoire de travail, les fichiers suivants:
paquets-compares-presents.txt --> paquets présents dans les deux distributions
paquets-compares-absents.txt --> paquets présents dans la distribution de référence, mais pas dans celle comparée
paquets-compares-nouveaux.txt --> paquets présents dans la distribution comparée, mais dans dans la distribution de référence
paquets-compares.html --> synthèse des fichiers précédents, présentée au format html
Code :
#!/bin/bash
# script permettant de comparer les paquets de deux distributions à partir des informations fournies par la commande dpkg
# Sur la distibution de référence on fera dpkg -l > liste1 pour rediriger cette liste vers le fichier liste1 dont on indiquera le nom dans la variable DISTRI1
# Sur la distribution à comparer, on fera dpkg -l > liste2 pour rediriger cette liste vers le fichier liste2 dont on indiquera le nom dans la variable DISTRI2
# Ces deux fichiers doivent ensuite être placés dans le même répertoire que le script
DISTRI1="liste1"
DISTRI2="liste2"
# Filtre les deux listes pour en extraire uniquement les noms de paquets
cat "$DISTRI1" | sed -e '1,6d' -e "s/[ ][ ]*/#/g" -e "s/i386//g" | cut -d '#' -f 2 > liste1
cat "$DISTRI2" | sed -e '1,6d' -e "s/[ ][ ]*/#/g" -e "s/armhf//g" | cut -d '#' -f 2 > liste2
compares_presents_txt="paquets-compares-presents.txt"
compares_absents_txt="paquets-compares-absents.txt"
compares_nouveaux_txt="paquets-compares-nouveaux.txt"
compares_html="paquets-compares.html"
# Crée les différents fichiers contenant les résultats de la comparaison
> "$compares_html"
> "$compares_presents_txt"
> "$compares_absents_txt"
> "compares_nouveaux_txt"
# Effectue la comparaison
PRESENTS=""
PRESENTS_HTML=""
ABSENTS=""
ABSENTS_HTML=""
NOUVEAUX=""
NOUVEAUX_HTML=""
while read ligne
do
if grep ^${ligne}$ liste2 > /dev/null
then PRESENTS="$PRESENTS
$ligne"
PRESENTS_HTML="$PRESENTS_HTML<br/>$ligne"
else ABSENTS="$ABSENTS
$ligne"
ABSENTS_HTML="$ABSENTS_HTML<br/>$ligne"
fi
done < liste1
while read ligne
do
if ! grep ^${ligne}$ liste1 > /dev/null
then NOUVEAUX="$NOUVEAUX
$ligne"
NOUVEAUX_HTML="$NOUVEAUX_HTML<br/>$ligne"
fi
done < liste2
rm liste1 liste2
# Inscrit les résultats dans les différents fichiers
echo '<!doctype html>
<html lang="fr">
<head>
<meta content="fr" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Paquets comparés</title>
</head>
<body>' >> "$compares_html"
echo "<h2>Paquets présents:</h2>" >> "$compares_html"
echo "<p>$PRESENTS_HTML</p>" >> "$compares_html"
echo "Paquets présents:" >> "$compares_presents_txt"
echo "$PRESENTS" >>"$compares_presents_txt"
echo '<br/><hr size="2">' >> "$compares_html"
echo "<h2>Paquets absents:</h2>" >> "$compares_html"
echo "<p>$ABSENTS_HTML</p>" >> "$compares_html"
echo "Paquets absents:" >> "$compares_absents_txt"
echo "$ABSENTS" >> "$compares_absents_txt"
echo '<br/><hr size="2">' >> "$compares_html"
echo "<h2>Nouveaux paquets:</h2>" >> "$compares_html"
echo "<p>$NOUVEAUX_HTML</p>" >> "$compares_html"
echo "Nouveaux paquets:" >> "$compares_nouveaux_txt"
echo "$NOUVEAUX" >> "$compares_nouveaux_txt"
echo "</body></html>" >> "$compares_html"
exit 0
