Aller au contenu

APT

De Marmits Wiki

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

#!/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"