« APT » : différence entre les versions

Aucun résumé des modifications
 
(9 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
== Paquets APT ==
== Paquets APT ==
Sur Debian (et ses dérivés comme Ubuntu), '''<code>apt</code>''' est un outil en ligne de commande pour gérer les paquets logiciels. Il permet d’installer, mettre à jour, supprimer et gérer les logiciels provenant des dépôts officiels de Debian.
Sur Debian (et ses dérivés comme Ubuntu), '''<code>apt</code>''' est un outil en ligne de commande pour gérer les paquets logiciels. Il permet d’installer, mettre à jour, supprimer et gérer les logiciels provenant des dépôts officiels de Debian.
=== 📋 Historique des mises à jour APT ===
Ce script '''AWK''' permet de reformater le contenu du fichier <code>/var/log/apt/history.log</code> afin d’obtenir une vue claire et lisible des opérations réalisées par '''APT'''. Les sessions sont regroupées par date et les paquets installés ou mis à jour sont affichés sous forme de liste, facilitant ainsi le suivi des modifications effectuées sur le système.
- Ligne de commande
<syntaxhighlight lang="bash" line copy>
awk '/^Start-Date:/ {print "\n📅 " substr($0,13)} /^Upgrade:/ {sub(/^Upgrade: /,""); gsub(/, /,"\n  - "); print "⬆️  " $0} /^Install:/ {sub(/^Install: /,""); gsub(/, /,"\n  - "); print "📦 " $0}' /var/log/apt/history.log
</syntaxhighlight>
- Dans fichier bash
<syntaxhighlight lang="bash" line copy>
#!/bin/bash
awk '
/^Start-Date:/ {print "\n📅 " substr($0,13)}
/^Upgrade:/ {
    sub(/^Upgrade: /,"")
    gsub(/, /,"\n  - ")
    print "⬆️  " $0
}
/^Install:/ {
    sub(/^Install: /,"")
    gsub(/, /,"\n  - ")
    print "📦 " $0
}
' /var/log/apt/history.log
</syntaxhighlight>
{| class="wikitable"
|-
! Élément
! Rôle
|-
| <code>/^Start-Date:/</code>
| Détecte le début d’une session APT et affiche la date et l’heure de l’opération.
|-
| <code>/^Upgrade:/</code>
| Détecte la liste des paquets mis à jour lors de la session.
|-
| <code>/^Install:/</code>
| Détecte la liste des nouveaux paquets installés.
|-
| <code>sub()</code>
| Supprime le préfixe (<code>Start-Date:</code>, <code>Upgrade:</code> ou <code>Install:</code>) afin d’alléger l’affichage.
|-
| <code>gsub()</code>
| Remplace les séparateurs <code>,</code> par des retours à la ligne pour présenter les paquets sous forme de liste.
|-
| <code>print</code>
| Affiche le résultat final en ajoutant des icônes et une mise en forme plus lisible.
|-
| <code>substr()</code>
| Extrait uniquement la partie utile de la date, sans afficher le libellé <code>Start-Date:</code>.
|}
==== 🗃️ Historique complet (journaux archivés) ====
Affiche l'historique complet des installations et des mises à jour APT, en incluant les journaux archivés (<code>history.log.*</code>). Les sessions sont présentées dans un format lisible, de la plus récente à la plus ancienne.
<syntaxhighlight lang="bash" line copy>
printf '%s\n' /var/log/apt/history.log* \
| sort -Vr \
| xargs zgrep -h -E "Start-Date|Upgrade:|Install:" \
| awk '/^Start-Date:/ {print "\n📅 " substr($0,13)} /^Upgrade:/ {sub(/^Upgrade: /,""); gsub(/, /,"\n  - "); print "⬆️  " $0} /^Install:/ {sub(/^Install: /,""); gsub(/, /,"\n  - "); print "📦 " $0}'
</syntaxhighlight>
=== Check services à redémarrer ===
permet de vérifier quels services ou processus utilisent encore d’anciennes bibliothèques après une mise à jour système.
<syntaxhighlight lang="bash" line copy>
sudo needrestart
</syntaxhighlight>
=== Mise à jour de la liste des paquets ===
=== Mise à jour de la liste des paquets ===
<syntaxhighlight lang="bash" line copy>
<syntaxhighlight lang="bash" line copy>
Ligne 160 : Ligne 237 :
done
done
</syntaxhighlight>
</syntaxhighlight>


<syntaxhighlight lang="bash" line>
<syntaxhighlight lang="bash" line>
Ligne 170 : Ligne 246 :


==== 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>
<syntaxhighlight lang="bash" line>
#check_phased_updates.sh
#!/bin/bash
#!/bin/bash


# =====================================================
: '
# 🔍 Rapport sur les mises à jour phasées - Fusionné
============================================================
# =====================================================
Script : check-phased-list.sh
# Ce script liste tous les paquets Ubuntu en phase de mise à jour (phased updates).
Objet  : Générer un rapport clair sur les mises à jour phasées APT Ubuntu
# 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>
Ligne 297 : Ligne 332 :
chmod +x check_phased_updates.sh
chmod +x check_phased_updates.sh
./check_phased_updates.sh
./check_phased_updates.sh
</syntaxhighlight>
-----
== Lister toutes les installations (avec filtrage) ==
Pour voir tous les paquets installés manuellement (pas les dépendances automatiques)
<syntaxhighlight lang="bash" line copy>
apt-mark showmanual | sort
</syntaxhighlight>
Pour voir tous les paquets installés automatiques
<syntaxhighlight lang="bash" line copy>
apt-mark showauto
</syntaxhighlight>
</syntaxhighlight>