|
|
| Ligne 170 : |
Ligne 170 : |
| ==== 6. Lister tous les fichiers <code>phased</code> (Version améliorée) ==== | | ==== 6. Lister tous les fichiers <code>phased</code> (Version améliorée) ==== |
|
| |
|
| <syntaxhighlight lang="bash" line>
| |
| #check_phased_updates.sh
| |
| #!/bin/bash | | #!/bin/bash |
|
| |
|
| # =====================================================
| | : ' |
| # 🔍 Rapport sur les mises à jour phasées - Fusionné
| | ============================================================ |
| # =====================================================
| | Objet : Générer un rapport clair sur les mises à jour phasées d'apt ubuntu |
| # Ce script liste tous les paquets Ubuntu en phase de mise à jour (phased updates).
| | ============================================================ |
| # Il fusionne les paquets "différés" et "upgradables phasés" pour éviter les doublons,
| |
| # et affiche l'état réel de chaque paquet.
| |
| # Il gère automatiquement les locales FR/EN pour parser la sortie d'APT.
| |
| # =====================================================
| |
|
| |
|
| echo "=============================================="
| | DESCRIPTION : |
| echo " 🔍 Rapport sur les mises à jour phasées"
| | Ce script analyse les paquets upgradables signalés par APT et |
| echo "=============================================="
| | vérifie s’ils sont soumis au "phasage" (phased updates). |
| echo
| |
|
| |
|
| # ==========================
| | Le phasage est une fonctionnalité d’APT qui déploie certaines |
| # Couleurs pour la sortie
| | mises à jour progressivement (ex: 10%, 20%, ... des machines) |
| # ==========================
| | afin de limiter l’impact d’éventuels bugs. |
| RED='\033[0;31m' # rouge pour pourcentage
| |
| GREEN='\033[0;32m' # vert pour upgradable
| |
| YELLOW='\033[1;33m' # jaune pour différé ou paquet
| |
| BLUE='\033[0;34m' # bleu pour sections
| |
| NC='\033[0m' # reset couleur
| |
|
| |
|
| # ==========================
| | Le script : |
| # Détection de la langue
| | 1. Récupère la liste des paquets upgradables via |
| # ==========================
| | `apt list --upgradable`. |
| # On détecte la locale pour adapter le parsing
| | 2. Pour chaque paquet, interroge `apt-cache show` pour |
| LANGUAGE=$(echo $LANG | cut -d_ -f1)
| | extraire le champ `Phased-Update-Percentage`. |
| | 3. Construit une liste fusionnée des paquets concernés, |
| | en indiquant le pourcentage de phasage appliqué. |
| | 4. Trie et affiche les résultats par ordre alphabétique. |
| | 5. Résume le nombre total de paquets affectés par le phasage. |
|
| |
|
| if [ "$LANGUAGE" == "fr" ]; then
| | AFFICHAGE : |
| REGEX_DEFERRED="Les mises à jour suivantes ont été différées"
| | - Chaque paquet est listé avec son pourcentage de phasage. |
| REGEX_END="0 mis à jour"
| | - Un résumé final indique le total de paquets concernés. |
| else
| |
| REGEX_DEFERRED="The following packages have been kept back"
| |
| REGEX_END="0 upgraded"
| |
| fi
| |
|
| |
|
| # ==========================
| | UTILISATION : |
| # 1) Récupérer les paquets différés par phasage
| | ./rapport-phasage.sh |
| # ==========================
| |
| # On simule un full-upgrade pour capturer les paquets différés
| |
| DEFERRED=$(apt full-upgrade -s 2>/dev/null | awk "/$REGEX_DEFERRED/{flag=1; next} /$REGEX_END/{flag=0} flag")
| |
|
| |
|
| # Nettoyage de la sortie pour extraire les noms de paquets
| | PRÉREQUIS : |
| PKGS_DEFERRED=$(echo "$DEFERRED" | tr -d '\n' | sed 's/ /\n/g' | sed 's/^ *//;s/ *$//' | tr '\n' ' ')
| | - Debian/Ubuntu (ou dérivés) avec apt >= 2.2 |
| | - Droits de lecture sur `apt list` et `apt-cache show` |
| | ============================================================ |
| | ' |
|
| |
|
| # ========================== | | # --- Définition des couleurs pour l'affichage --- |
| # 2) Récupérer les paquets upgradables phasés
| | RED='\033[0;31m' |
| # ==========================
| | GREEN='\033[0;32m' |
| UPGRADABLE=$(apt list --upgradable 2>/dev/null | awk -F/ 'NR>1 {print $1}')
| | YELLOW='\033[1;33m' |
| | BLUE='\033[0;34m' |
| | NC='\033[0m' # Reset couleur (No Color) |
|
| |
|
| # On ne garde que ceux qui ont un pourcentage de phasage | | # --- En-tête --- |
| PHASED_UPGRADABLE=""
| | echo "==============================================" |
| for PKG in $UPGRADABLE; do
| | echo " 🔍 Rapport sur les mises à jour phasées" |
| PERC=$(apt-cache show "$PKG" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}')
| | echo "==============================================" |
| if [ -n "$PERC" ]; then
| | echo |
| PHASED_UPGRADABLE+="$PKG "
| |
| fi
| |
| done
| |
|
| |
|
| # ========================== | | # Étape 1 : récupération des paquets upgradables |
| # 3) Fusionner les listes pour éviter les doublons
| | UPGRADABLE_PKGS=$(apt list --upgradable 2>/dev/null | awk -F/ 'NR>1 {print $1}') |
| # ==========================
| |
| declare -A PACKAGES
| |
|
| |
|
| # Ajouter les paquets différés dans le tableau associatif | | # Étape 2 : carte associative pour stocker les pourcentages |
| for PKG in $PKGS_DEFERRED; do
| | declare -A PHASE_MAP |
| PERC=$(apt-cache show "$PKG" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}')
| |
| PACKAGES["$PKG"]="différé|$PERC"
| |
| done
| |
|
| |
|
| # Ajouter les upgradables phasés seulement si non déjà présent
| | for pkg in $UPGRADABLE_PKGS; do |
| for PKG in $PHASED_UPGRADABLE; do | | PERC=$(apt-cache show "$pkg" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}') |
| PERC=$(apt-cache show "$PKG" 2>/dev/null | awk '/^Phased-Update-Percentage:/ {print $2}') | | if [ -n "$PERC" ]; then |
| if [ -z "${PACKAGES[$PKG]}" ]; then | | PHASE_MAP["$pkg"]="$PERC" |
| PACKAGES["$PKG"]="upgradable|$PERC" | |
| fi | | fi |
| done | | done |
|
| |
|
| # ========================== | | # Étape 3 : affichage trié |
| # 4) Affichage des résultats | | if [ ${#PHASE_MAP[@]} -eq 0 ]; then |
| # ==========================
| | echo -e " ${GREEN}→ Aucun paquet soumis au phasage${NC}" |
| COUNT_DIFF=0
| | else |
| COUNT_UP=0
| | for pkg in $(printf "%s\n" "${!PHASE_MAP[@]}" | sort); do |
| | echo -e " - ${YELLOW}$pkg${NC} → ${RED}${PHASE_MAP[$pkg]}% en phase${NC}" |
| | done |
| | echo |
| | echo "==============================================" |
| | echo -e " ✅ ${GREEN}Analyse terminée${NC}" |
| | echo " Résumé : ${#PHASE_MAP[@]} paquets concernés par le phasage" |
| | echo "==============================================" |
| | fi |
|
| |
|
| echo -e "${BLUE}📦 Paquets phasés fusionnés :${NC}"
| |
| for PKG in "${!PACKAGES[@]}"; do
| |
| STATE=$(echo "${PACKAGES[$PKG]}" | cut -d'|' -f1) # différé / upgradable
| |
| PERC=$(echo "${PACKAGES[$PKG]}" | cut -d'|' -f2) # Pourcentage de phasage
| |
|
| |
| # Déterminer la couleur et compter les totaux
| |
| if [ "$STATE" == "différé" ]; then
| |
| COLOR_STATE="${YELLOW}différé${NC}"
| |
| COUNT_DIFF=$((COUNT_DIFF+1))
| |
| else
| |
| COLOR_STATE="${GREEN}upgradable${NC}"
| |
| COUNT_UP=$((COUNT_UP+1))
| |
| fi
| |
|
| |
| # Affichage du paquet avec son état et pourcentage
| |
| if [ -n "$PERC" ]; then
| |
| echo -e " - ${YELLOW}$PKG${NC} → ${RED}$PERC% en phase${NC} (${COLOR_STATE})"
| |
| else
| |
| echo -e " - ${YELLOW}$PKG${NC} → phasage actif (${COLOR_STATE})"
| |
| fi
| |
| done
| |
|
| |
| # Totaux
| |
| echo
| |
| echo " 🔢 Total différés : $COUNT_DIFF"
| |
| echo " 🔢 Total upgradables phasés : $COUNT_UP"
| |
| echo
| |
| echo "=============================================="
| |
| echo -e " ✅ ${GREEN}Analyse terminée${NC}"
| |
| echo " Résumé : $COUNT_DIFF différés, $COUNT_UP upgradables phasés"
| |
| echo "=============================================="
| |
|
| |
|
| </syntaxhighlight> | | </syntaxhighlight> |