Proxmox Mises à jour automatiques des VM (qm + vzdump) avec tests réseau et restauration automatique

Dans cet article, je présente un script simple (mais très efficace) pour automatiser les mises à jour des machines virtuelles sur Proxmox VE. Le script peut :

  • créer une sauvegarde de la VM (optionnel),
  • démarrer la VM si elle était arrêtée au départ,
  • effectuer une mise à niveau complète via apt et redémarrer la VM,
  • lancer des tests réseau avant et après la mise à jour,
  • restaurer automatiquement depuis la sauvegarde en cas de problème (optionnel),
  • éteindre la VM à la fin si elle était initialement arrêtée.

Où télécharger le script

Vous pouvez télécharger le script directement depuis mon site :

soban.pl/bash/upgrade_proxmox_qm.sh

Dossiers requis

Avant de lancer l’automatisation, créez deux dossiers : un pour les scripts et un pour les logs :

Installer le script

Téléchargez le script dans /root/automate_scripts/ et rendez-le exécutable :

Comment ça marche (version courte)

  • D’abord, une sauvegarde est créée (vzdump snapshot + zstd) si l’option est activée.
  • Si la VM était en état stopped, le script la démarre et attend WAIT_TIME secondes.
  • Ensuite, le script exécute des tests réseau AVANT la mise à jour :
  • Le script exécute apt update/upgrade/dist-upgrade/autoremove/clean puis redémarre la VM (reboot).
  • Après le redémarrage, il attend à nouveau (WAIT_TIME) et relance les tests APRÈS la mise à jour.
  • Si les tests échouent et qu’une sauvegarde est disponible, la VM est restaurée automatiquement via qmrestore.
  • Enfin, la VM est arrêtée si elle était initialement arrêtée.

Lancer le script manuellement

Le script attend exactement deux arguments :

  • VMID – l’ID de la VM dans Proxmox
  • TIME_SEC – le temps d’attente après démarrage/redémarrage (en secondes)

Astuce : adaptez WAIT_TIME au temps réel de démarrage de la VM et à la durée de la mise à jour. En pratique, 300 à 1000 secondes fonctionnent très bien selon la VM.

Script complet (référence)

Ci-dessous, le script complet (code et commentaires restent en anglais) :

Cron (planning hebdomadaire + logs séparés par VM)

Voici un exemple de crontab : une VM différente est mise à jour chaque jour de la semaine, et les logs sont enregistrés dans des fichiers séparés sous /root/logs/.

Modifier le crontab root :

Collez les règles ci-dessous (les commentaires restent en anglais) :

Vérifications rapides / Dépannage

  • Assurez-vous que root peut se connecter en SSH depuis l’hôte Proxmox vers la VM (le script utilise ssh root@<vm-hostname>).
  • Vérifiez que DNS (ou /etc/hosts) résout correctement le hostname de la VM sur l’hôte Proxmox.
  • Si apt demande des confirmations, configurez des mises à niveau non interactives ou bloquez les paquets problématiques.

Voilà ! Déposez le script dans /root/automate_scripts/, envoyez les journaux dans /root/logs/, et la maintenance hebdomadaire de votre machine virtuelle devient quasiment automatique.