Les mises à jour système sont essentielles pour la sécurité et les performances, mais elles peuvent être fastidieuses à gérer manuellement. Dans cet article, nous allons découvrir Topgrade, un outil puissant qui unifie toutes vos mises à jour, puis créer un système d’automatisation complet avec redémarrage intelligent.
Qu’est-ce que Topgrade ?
Topgrade est un outil en ligne de commande qui révolutionne la gestion des mises à jour sur Linux. Contrairement aux gestionnaires de paquets traditionnels qui ne s’occupent que des paquets système, Topgrade adopte une approche holistique en mettant à jour :
- 📦 Paquets système (apt, snap, flatpak…)
- 🐍 Gestionnaires de langages (pip, npm, cargo, gem…)
- 🛠️ Outils de développement (VS Code extensions, vim plugins…)
- 🐳 Containers (Docker images)
- 💻 Applications tierces (GitHub releases, AppImages…)
L’avantage ? Une seule commande pour tout mettre à jour !
Installation de Topgrade sur Ubuntu
Méthode 1 : Installation via Cargo (recommandée)
# Installer Rust et Cargo si pas déjà fait
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env
# Installer Topgrade
cargo install topgrade
Méthode 2 : Téléchargement direct depuis GitHub
# Télécharger la dernière version
wget https://github.com/topgrade-rs/topgrade/releases/latest/download/topgrade-v10.3.1-x86_64-unknown-linux-gnu.tar.gz
# Extraire et installer
tar xzf topgrade-*.tar.gz
sudo mv topgrade /usr/local/bin/
chmod +x /usr/local/bin/topgrade
Méthode 3 : Via les paquets Ubuntu (si disponible)
# Vérifier la disponibilité
apt search topgrade
# Installer si disponible
sudo apt install topgrade
Vérification de l’installation
topgrade --version
Configuration initiale de Topgrade
Première exécution
Lancez Topgrade une première fois pour voir ce qu’il détecte :
topgrade --dry-run
Cette commande affiche toutes les mises à jour possibles sans les appliquer.
Configuration personnalisée
Créez un fichier de configuration pour adapter Topgrade à vos besoins :
mkdir -p ~/.config/topgrade
nano ~/.config/topgrade/topgrade.toml
Configuration de base recommandée :
[misc]
assume_yes = true
no_retry = true
disable = ["system"] # Optionnel : désactiver certains modules
[linux]
apt_arguments = "--yes --force-yes"
Le défi de l’automatisation
Maintenant que Topgrade est installé, le défi est de l’automatiser complètement pour un serveur. Les obstacles principaux sont :
- Demandes de mot de passe pour sudo
- Confirmations interactives
- Gestion des redémarrages nécessaires après certaines mises à jour
- Monitoring et logging des opérations
Solution complète : Script d’automatisation intelligent
Étape 1 : Éliminer les demandes de mot de passe
Configurez sudo pour permettre les commandes de mise à jour sans mot de passe :
sudo visudo
Ajoutez cette ligne (remplacez votre_utilisateur
par votre nom d’utilisateur) :
votre_utilisateur ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/bin/snap, /sbin/reboot, /sbin/shutdown, /usr/bin/systemctl
Étape 2 : Configuration de Topgrade pour l’automatisation
Modifiez la configuration pour éviter toute interaction :
nano ~/.config/topgrade/topgrade.toml
[[misc]
assume_yes = true
no_retry = true
disable = ["system"] # Optionnel : désactiver certains modules
[linux]
apt_arguments = "--yes --force-yes"rtains modules
Étape 3 : Le script d’automatisation complet
Ce script gère tout automatiquement : mises à jour, détection du besoin de redémarrage, et redémarrage intelligent.
#!/bin/bash
# Script de mise à jour automatique avec topgrade et redémarrage
# Auteur: Assistant
# Date: $(date +%Y-%m-%d)
# Configuration
LOG_FILE="/var/log/topgrade-auto.log"
LOCK_FILE="/tmp/topgrade-auto.lock"
MAX_LOG_SIZE=10485760 # 10MB
# Fonction de logging
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# Fonction de nettoyage
cleanup() {
log "Nettoyage et suppression du fichier de verrouillage"
rm -f "$LOCK_FILE"
exit $1
}
# Gestion des signaux
trap 'cleanup 1' INT TERM
# Vérification si le script est déjà en cours d'exécution
if [ -f "$LOCK_FILE" ]; then
log "ERREUR: Le script est déjà en cours d'exécution (fichier de verrouillage présent)"
exit 1
fi
# Création du fichier de verrouillage
echo $$ > "$LOCK_FILE"
log "=== DÉBUT DE LA MISE À JOUR AUTOMATIQUE ==="
# Rotation du log si nécessaire
if [ -f "$LOG_FILE" ] && [ $(stat -f%z "$LOG_FILE" 2>/dev/null || stat -c%s "$LOG_FILE" 2>/dev/null) -gt $MAX_LOG_SIZE ]; then
log "Rotation du fichier de log"
mv "$LOG_FILE" "${LOG_FILE}.old"
touch "$LOG_FILE"
fi
# Vérification que topgrade est installé
if ! command -v topgrade &> /dev/null; then
log "ERREUR: topgrade n'est pas installé"
cleanup 1
fi
# Vérification de la connectivité réseau
log "Vérification de la connectivité réseau..."
if ! ping -c 1 8.8.8.8 &> /dev/null; then
log "ERREUR: Pas de connectivité réseau"
cleanup 1
fi
log "Connectivité réseau OK"
# Sauvegarde des informations système avant mise à jour
log "Sauvegarde des informations système..."
dpkg -l > "/tmp/packages_before_$(date +%Y%m%d_%H%M%S).txt" 2>/dev/null || true
# Exécution de topgrade
log "Début de l'exécution de topgrade..."
if topgrade --yes --no-retry 2>&1 | tee -a "$LOG_FILE"; then
TOPGRADE_EXIT_CODE=0
log "topgrade s'est exécuté avec succès"
else
TOPGRADE_EXIT_CODE=$?
log "AVERTISSEMENT: topgrade s'est terminé avec le code de sortie: $TOPGRADE_EXIT_CODE"
fi
# Sauvegarde des informations système après mise à jour
log "Sauvegarde des informations post-mise à jour..."
dpkg -l > "/tmp/packages_after_$(date +%Y%m%d_%H%M%S).txt" 2>/dev/null || true
# Nettoyage du système
log "Nettoyage du système..."
sudo apt autoremove -y &>> "$LOG_FILE" || true
sudo apt autoclean -y &>> "$LOG_FILE" || true
# Vérification si un redémarrage est nécessaire
REBOOT_REQUIRED=false
# Vérification du fichier Ubuntu standard
if [ -f /var/run/reboot-required ]; then
log "Redémarrage requis détecté (/var/run/reboot-required)"
REBOOT_REQUIRED=true
fi
# Vérification des services en attente de redémarrage
if command -v needrestart &> /dev/null; then
log "Vérification avec needrestart..."
if needrestart -b &> /dev/null; then
REBOOT_REQUIRED=true
log "needrestart recommande un redémarrage"
fi
fi
# Vérification des processus utilisant des bibliothèques supprimées
if [ -n "$(sudo lsof +c 15 | grep '(deleted)' | grep -v '/tmp\|/var/tmp\|/dev/zero')" ]; then
log "Des processus utilisent des bibliothèques supprimées - redémarrage recommandé"
REBOOT_REQUIRED=true
fi
# Programmation du redémarrage
if [ "$REBOOT_REQUIRED" = true ]; then
log "Redémarrage du système programmé dans 2 minutes..."
log "=== FIN DE LA MISE À JOUR AUTOMATIQUE - REDÉMARRAGE IMMINENT ==="
# Nettoyage avant redémarrage
cleanup 0
# Redémarrage avec délai - essayer plusieurs méthodes
log "Tentative de programmation du redémarrage..."
# Méthode 1: shutdown classique
if sudo shutdown -r +2 "Redémarrage automatique après mise à jour système" 2>&1 | tee -a "$LOG_FILE"; then
log "Redémarrage programmé avec shutdown"
else
log "Échec avec shutdown, essai avec systemctl..."
# Méthode 2: systemctl
if sudo systemctl reboot 2>&1 | tee -a "$LOG_FILE"; then
log "Redémarrage initié avec systemctl"
else
log "Échec avec systemctl, essai avec reboot..."
# Méthode 3: commande reboot directe
sudo reboot 2>&1 | tee -a "$LOG_FILE" || log "ERREUR: Impossible de redémarrer le système"
fi
fi
else
log "Aucun redémarrage nécessaire détecté"
log "=== FIN DE LA MISE À JOUR AUTOMATIQUE ==="
cleanup 0
fi
Fonctionnalités du script :
- 🔒 Sécurisé : Utilise un verrou pour éviter les exécutions multiples
- 📝 Logging complet : Enregistre toutes les opérations avec horodatage
- 🔍 Vérifications préalables : Connectivité réseau, présence de topgrade
- 💾 Sauvegarde : Liste des paquets avant/après mise à jour
- 🧠 Détection intelligente : Détermine automatiquement si un redémarrage est nécessaire
- 🔄 Redémarrage automatique : Uniquement si requis
- 🧹 Nettoyage : Supprime les paquets inutiles après mise à jour
Étape 4 : Installation et configuration
# Rendre le script exécutable
chmod +x topgrade-auto.sh
sudo cp topgrade-auto.sh /usr/local/bin/
sudo chown root:root /usr/local/bin/topgrade-auto.sh
# Créer le fichier de log
sudo touch /var/log/topgrade-auto.log
sudo chown $USER:$USER /var/log/topgrade-auto.log
Étape 5 : Automatisation avec Cron
Programmez l’exécution automatique :
crontab -e
Exemples de planification :
# Tous les dimanches à 3h du matin
0 3 * * 0 /usr/local/bin/topgrade-auto.sh
# Tous les jours à 2h du matin (plus fréquent)
0 2 * * * /usr/local/bin/topgrade-auto.sh
# Une fois par semaine le mercredi à 4h
0 4 * * 3 /usr/local/bin/topgrade-auto.sh
Monitoring et maintenance
Surveillance des logs
# Voir les dernières opérations
tail -50 /var/log/topgrade-auto.log
# Surveillance en temps réel
tail -f /var/log/topgrade-auto.log
# Rechercher des erreurs
grep -i error /var/log/topgrade-auto.log
Vérification du bon fonctionnement
# Test manuel du script
sudo /usr/local/bin/topgrade-auto.sh
# Vérifier les tâches cron
crontab -l
# Voir l'historique des exécutions cron
grep topgrade /var/log/syslog
Avantages de cette solution
✅ Complètement autonome
- Aucune intervention manuelle requise
- Redémarrage automatique uniquement si nécessaire
- Gestion des erreurs et récupération automatique
✅ Sécurisé et fiable
- Vérifications multiples avant chaque opération
- Logging complet pour audit et débogage
- Prévention des exécutions concurrentes
✅ Intelligent
- Détection fine du besoin de redémarrage
- Sauvegarde automatique des états système
- Nettoyage automatique après mise à jour
✅ Flexible
- Configuration personnalisable
- Planification adaptable selon vos besoins
- Compatible avec tous types de serveurs Ubuntu
Cas d’usage pratiques
Cette solution est particulièrement utile pour :
- 🖥️ Serveurs domestiques (Raspberry Pi, NAS…)
- ☁️ Serveurs cloud (VPS, instances AWS/Azure…)
- 🏢 Serveurs d’entreprise en environnement de développement
- 🤖 Stations de travail automatisées
Conclusion
Avec Topgrade et ce script d’automatisation, vous obtenez un système de mise à jour complètement autonome et intelligent. Votre serveur Ubuntu restera toujours à jour, sécurisé, et redémarrera automatiquement uniquement quand c’est nécessaire.
Plus besoin de vous connecter régulièrement pour faire les mises à jour ! Le système se maintient tout seul, vous n’avez plus qu’à consulter les logs de temps en temps pour vérifier que tout se passe bien.
Un gain de temps considérable et une tranquillité d’esprit totale ! 🚀
Cet article vous a été utile ? N’hésitez pas à le partager et à laisser un commentaire avec vos retours d’expérience !