Aller au contenu

« APT » : différence entre les versions

De Marmits Wiki
Ligne 198 : Ligne 198 :
* '''<code>apt-get</code>''' : Outil plus ancien, toujours utilisé dans les scripts pour sa stabilité.
* '''<code>apt-get</code>''' : Outil plus ancien, toujours utilisé dans les scripts pour sa stabilité.
* '''<code>aptitude</code>''' : Alternative avec une interface en mode texte (interactive) et une gestion avancée des dépendances.
* '''<code>aptitude</code>''' : Alternative avec une interface en mode texte (interactive) et une gestion avancée des dépendances.
== Script SH historique ==
<syntaxhighlight lang="bash" line copy>
#!/bin/bash
# Permet de consulter l'historique APT sur un système debian
#Usage: ./apt_log_history0.sh [OPTIONS]
#Options:
#  -f, --upgrades    Affiche uniquement les mises à jour
#  -i, --installs    Affiche uniquement les installations
#  -u, --removals    Affiche uniquement les suppressions
#  -r, --reset      Affiche tout (réinitialise le filtre)
#  -h, --help        Affiche ce message d'aide
# Fonction pour traiter les fichiers
process_apt_history() {
    local file="$1"
    local filter="${2:-.*}"  # Filtre par défaut : tout afficher
    echo -e "\033[1;35m\nFichier: ${file##*/}\033[0m"
    if [[ "$file" == *.gz ]]; then
        zcat "$file"
    else
        cat "$file"
    fi | awk -v filter="$filter" '
        /Start-Date:/ {
            start_pos = index($0, "Start-Date:") + 11;
            date = substr($0, start_pos, 19);
            current_date = "\033[1;32m[" date "]\033[0m";
            has_matching_action = 0;
        }
        /Commandline:/ {
            cmd = substr($0, index($0, "Commandline:") + 12);
            current_cmd = cmd;
        }
        /Install:|Upgrade:|Remove:|Installation:|Mise à jour:|Suppression:/ {
            action = $1;
            details = substr($0, index($0, ": ") + 2);
            if (action ~ filter) {
                if (!has_matching_action) {
                    print current_date;
                    if (current_cmd != "") {
                        printf "  \033[33m● Commande: %s\033[0m\n", current_cmd;
                    }
                    has_matching_action = 1;
                }
                # Couleurs
                color = "\033[36m"; # Par défaut (bleu cyan)
                if (action ~ /Install|Installation/) color = "\033[32m"; # Vert
                if (action ~ /Remove|Suppression/) color = "\033[31m";  # Rouge
                printf "  %s%-12s\033[0m %s\n", color, action, details;
            }
        }
    '
}
# Affichage de l'aide
display_help() {
    echo "Usage: $0 [OPTIONS]"
    echo "Options:"
    echo "  -f, --upgrades    Affiche uniquement les mises à jour"
    echo "  -i, --installs    Affiche uniquement les installations"
    echo "  -u, --removals    Affiche uniquement les suppressions"
    echo "  -r, --reset      Affiche tout (réinitialise le filtre)"
    echo "  -h, --help        Affiche ce message d'aide"
    exit 0
}
# Paramètres
FILTER=".*"  # Affiche tout par défaut
# Traitement des options
while getopts "fiurh" opt; do
    case $opt in
        f) FILTER="Upgrade|Mise à jour";;
        i) FILTER="Install|Installation";;
        u) FILTER="Remove|Suppression";;
        r) FILTER=".*";;
        h) display_help;;
        *) display_help;;
    esac
done
# Affichage
echo -e "\033[1;34m=== HISTORIQUE APT (Filtre: ${FILTER}) ===\033[0m"
# D'abord les archives (.gz)
for f in $(ls -v /var/log/apt/history.log*.gz 2>/dev/null); do
    process_apt_history "$f" "$FILTER"
done
# Puis le fichier courant
[ -f "/var/log/apt/history.log" ] && process_apt_history "/var/log/apt/history.log" "$FILTER"
</script>


[[Catégorie:Linux]] [[Catégorie:Debian]]
[[Catégorie:Linux]] [[Catégorie:Debian]]

Version du 21 mai 2025 à 23:09

Paquets APT

Sur Debian (et ses dérivés comme Ubuntu), apt 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.

Mise à jour de la liste des paquets

sudo apt update

Voir ce qui peut être mis à jour

sudo apt list --upgradable

Installation

sudo apt install --only-upgrade firefox

Ne gère pas les dépendances

sudo apt upgrade

Gère les dépendances

(permet l'installation de nouveaux paquets pour résoudre les dépendances)

sudo apt --with-new-pkgs upgrade

(peut également supprimer des paquets pour satisfaire les dépendances) => plus agressive

sudo apt full-upgrade

Supprimez tous les paquets devenus obsolètes et qui ne sont plus nécessaires

Supprime les anciens noyaux installés

sudo apt-get autoremove --purge

Supprimez le cache des paquets qui ne peuvent plus être téléchargés

sudo apt autoclean

Télécharge et installe les dépendances manquantes pour réparer les paquets cassés.

sudo apt --fix-broken install

Affichage des infos d'un paquet

apt show firefox

Recherche de paquets

apt search mot-clé


Termine la configuration des paquets interrompus.

Voir commande

voir tous les paquets

dpkg --list

ou

dpkg --get-selections

ou

apt list --installed

voir si un paquet est à jour

apt-cache policy firefox

compter les paquets installés sur Ubuntu

sudo dpkg-query -f '${binary:Package}\n' -W | wc -l
# ou
sudo apt list --installed | wc -l

voir si des paquets sont cassés

 apt-get check
 dpkg -l | grep -v ^ii
 dpkg -l | grep ^rc #(installé et reste des fichiers de configuration)
 dpkg -l | grep ^iB #(installé et avec des dépendances cassées)

phased => déféré (retardé)

Cette commande permet de calculer un score entre 0 et 99 à partir de votre machine-id, utilisé par Ubuntu pour les phased updates (mises à jour progressives).

1 .Calcul du Score de Phase

echo $((0x$(cut -c1-16 /etc/machine-id | head -c 8) % 100))

ou

awk '{print strtonum("0x" substr($0,1,8)) % 100}' /etc/machine-id

2. Résumé

Étape Action Exemple
1 Extraire les 16 premiers caractères de /etc/machine-id a1b2c3d4e5f6g7h
2 Garder les 8 premiers caractères a1b2c3d4
3 Convertir en décimal (hexadécimal 0x...) 2712849364
4 Appliquer % 100 64
5 Score final 64

3. À Quoi Sert Ce Score ?

  • Phased Updates : Ubuntu déploie les mises à jour par vagues (ex : 10%, 30%, 50% des machines).
  • Votre score (64) détermine si vous recevez une mise à jour :
    • Si la phase actuelle est ≤ 64 → Vous l’obtenez.
    • Si la phase est > 64 → Vous devrez attendre.

4. Pourquoi Cette Méthode ?

  • Déterminisme : Le score est toujours le même pour votre machine (car basé sur machine-id).
  • Répartition uniforme : Les scores sont distribués entre 0 et 99 pour équilibrer le déploiement.

5. Lister tous les fichiers phased

#check_phased_updates.sh
#!/bin/bash

# Liste des paquets en phased updates
PACKAGES=$(apt list --upgradable | grep -E "*" | cut -d'/' -f1)
echo "Checking phased updates"
# Parcourir chaque paquet et extraire le pourcentage de phased updates
for PACKAGE in $PACKAGES; do
    echo $PACKAGE
    apt-cache policy $PACKAGE | grep "phased"
done
chmod +x check_phased_updates.sh
./check_phased_updates.sh

DPKG

Voir DPKG

APTITUDE

sudo aptitude update
aptitude search '~U'
sudo aptitude upgrade



apt vs apt-get vs aptitude

  • apt : Version moderne et conviviale, combinant les fonctionnalités de apt-get et apt-cache avec des couleurs et une barre de progression.
  • apt-get : Outil plus ancien, toujours utilisé dans les scripts pour sa stabilité.
  • aptitude : Alternative avec une interface en mode texte (interactive) et une gestion avancée des dépendances.

Script SH historique

<syntaxhighlight lang="bash" line copy>

  1. !/bin/bash
  2. Permet de consulter l'historique APT sur un système debian
  3. Usage: ./apt_log_history0.sh [OPTIONS]
  4. Options:
  5. -f, --upgrades Affiche uniquement les mises à jour
  6. -i, --installs Affiche uniquement les installations
  7. -u, --removals Affiche uniquement les suppressions
  8. -r, --reset Affiche tout (réinitialise le filtre)
  9. -h, --help Affiche ce message d'aide


  1. Fonction pour traiter les fichiers

process_apt_history() {

   local file="$1"
   local filter="${2:-.*}"  # Filtre par défaut : tout afficher
   echo -e "\033[1;35m\nFichier: ${file##*/}\033[0m"
   if "$file" == *.gz ; then
       zcat "$file"
   else
       cat "$file"
   fi | awk -v filter="$filter" '
       /Start-Date:/ {
           start_pos = index($0, "Start-Date:") + 11;
           date = substr($0, start_pos, 19);
           current_date = "\033[1;32m[" date "]\033[0m";
           has_matching_action = 0;
       }
       /Commandline:/ {
           cmd = substr($0, index($0, "Commandline:") + 12);
           current_cmd = cmd;
       }
       /Install:|Upgrade:|Remove:|Installation:|Mise à jour:|Suppression:/ {
           action = $1;
           details = substr($0, index($0, ": ") + 2);
           if (action ~ filter) {
               if (!has_matching_action) {
                   print current_date;
                   if (current_cmd != "") {
                       printf "  \033[33m● Commande: %s\033[0m\n", current_cmd;
                   }
                   has_matching_action = 1;
               }
               # Couleurs
               color = "\033[36m"; # Par défaut (bleu cyan)
               if (action ~ /Install|Installation/) color = "\033[32m"; # Vert
               if (action ~ /Remove|Suppression/) color = "\033[31m";   # Rouge
               printf "  %s%-12s\033[0m %s\n", color, action, details;
           }
       }
   '

}

  1. Affichage de l'aide

display_help() {

   echo "Usage: $0 [OPTIONS]"
   echo "Options:"
   echo "  -f, --upgrades    Affiche uniquement les mises à jour"
   echo "  -i, --installs    Affiche uniquement les installations"
   echo "  -u, --removals    Affiche uniquement les suppressions"
   echo "  -r, --reset       Affiche tout (réinitialise le filtre)"
   echo "  -h, --help        Affiche ce message d'aide"
   exit 0

}

  1. Paramètres

FILTER=".*" # Affiche tout par défaut

  1. Traitement des options

while getopts "fiurh" opt; do

   case $opt in
       f) FILTER="Upgrade|Mise à jour";;
       i) FILTER="Install|Installation";;
       u) FILTER="Remove|Suppression";;
       r) FILTER=".*";;
       h) display_help;;
       *) display_help;;
   esac

done

  1. Affichage

echo -e "\033[1;34m=== HISTORIQUE APT (Filtre: ${FILTER}) ===\033[0m"

  1. D'abord les archives (.gz)

for f in $(ls -v /var/log/apt/history.log*.gz 2>/dev/null); do

   process_apt_history "$f" "$FILTER"

done

  1. Puis le fichier courant

[ -f "/var/log/apt/history.log" ] && process_apt_history "/var/log/apt/history.log" "$FILTER"

</script>