L’objectif est d’assurer que votre serveur de sauvegarde reste sécurisé et à jour sans intervention manuelle quotidienne, tout en vous notifiant immédiatement de l’état de l’opération.
Note importante : L’automatisation des mises à jour, en particulier celles du noyau, comporte un risque. Ce script est conçu pour ne pas redémarrer automatiquement l’hôte.
| Composant | Description |
|---|---|
| Script | /usr/local/bin/update_pbs.sh |
| Planification | Tâche Cron exécutée par l’utilisateur root |
| Fichier journal | /var/log/proxmox_update.log |
Le script utilise les commandes apt-get update et apt-get dist-upgrade mais n’inclut jamais la commande reboot.
Après chaque exécution planifiée du script, vous devez :
/var/log/proxmox_update.log).curl et configuration Gotify 🔔curlSi ce paquet n’est pas installé sur votre hôte Proxmox Backup Server, exécutez :
apt-get install curl -y
Vous aurez besoin de deux informations :
https://gotify.mondomaine.com).update_pbs.shConnectez-vous à votre hôte PBS en SSH (en tant que root) et utilisez nano pour créer et éditer le fichier :
nano /usr/local/bin/update_pbs.sh
Collez le contenu suivant. ⚠️ Remplacez VOTRE_URL_GOTIFY et VOTRE_TOKEN_GOTIFY par vos propres valeurs.
#!/bin/bash
# --- PARAMÈTRES DE GOTIFY ---
# IMPORTANT : Remplacez ces valeurs !
GOTIFY_URL="VOTRE_URL_GOTIFY"
GOTIFY_TOKEN="VOTRE_TOKEN_GOTIFY"
# --- PARAMÈTRES DU SCRIPT ---
LOGFILE="/var/log/proxmox_update.log"
HOSTNAME=$(hostname)
UPDATE_SUCCESS=0
PACKAGES_TO_UPGRADE=0 # Compteur pour les paquets à mettre à jour
# Redirection de toute la sortie vers le fichier journal
exec 1>>$LOGFILE 2>&1
# --- FONCTION DE NOTIFICATION GOTIFY (MÉTHODE FORM-DATA) ---
# Le token est passé dans l'URL et l'option -k est utilisée pour ignorer les erreurs SSL/TLS.
send_gotify_notification() {
local title="$1"
local message="$2"
local priority="$3"
# Envoi de la notification via curl
curl -k -s -X POST "$GOTIFY_URL/message?token=$GOTIFY_TOKEN" \
-F "title=$title" \
-F "message=$message" \
-F "priority=$priority" > /dev/null 2>&1
}
# --- DÉBUT DU PROCESSUS DE MISE À JOUR ---
echo "======================================================"
echo "Début du processus de mise à jour Proxmox Backup Server (PBS) sur $HOSTNAME : $(date)"
echo "======================================================"
# 1. Mise à jour de la liste des paquets (apt-get update)
echo "--- Étape 1 : apt-get update (Mise à jour des listes de paquets) ---"
apt-get update
if [ $? -ne 0 ]; then
echo "Échec de la mise à jour des listes de paquets. Arrêt du script."
UPDATE_SUCCESS=1
else
# 2. Vérification s'il y a des mises à jour disponibles (Simulation)
echo "--- Étape 2 : apt-get dist-upgrade -s (Simulation de mise à jour) ---"
# Simuler dist-upgrade et compter les paquets qui seront installés (Inst),
# mis à jour (Upgr) ou supprimés (Remv)
PACKAGES_TO_UPGRADE=$(apt-get -s --assume-no dist-upgrade 2>/dev/null | grep -E '^(Inst|Upgr|Remv)' | wc -l)
echo "Nombre de paquets à mettre à jour/installer/supprimer : $PACKAGES_TO_UPGRADE"
if [ "$PACKAGES_TO_UPGRADE" -gt 0 ]; then
echo "Des mises à jour sont disponibles. Démarrage de l'installation..."
# 3. Mise à niveau des paquets installés (apt-get dist-upgrade)
echo "--- Étape 3 : apt-get dist-upgrade (Mise à niveau des paquets) ---"
apt-get dist-upgrade -y
# 4. Suppression des dépendances inutiles (apt-get autoremove)
echo "--- Étape 4 : apt-get autoremove (Nettoyage des dépendances et anciens noyaux) ---"
apt-get autoremove -y
# 5. Nettoyage du cache APT
echo "--- Étape 5 : apt-get clean (Nettoyage du cache APT) ---"
apt-get clean
else
echo "Aucune mise à jour de paquet disponible. Les étapes d'installation seront ignorées."
fi
fi
echo "======================================================"
echo "Fin du processus Proxmox Backup Server (PBS) : $(date)"
echo "======================================================"
# --- ENVOI DE LA NOTIFICATION FINALE ---
# On envoie la notification UNIQUEMENT si (il y a eu des MAJ) OU (il y a eu un ÉCHEC)
if [ "$PACKAGES_TO_UPGRADE" -gt 0 ] || [ $UPDATE_SUCCESS -ne 0 ]; then
if [ $UPDATE_SUCCESS -eq 0 ]; then
# Succès
NOTIFICATION_TITLE="✅ PBS Update SUCCÈS sur $HOSTNAME"
NOTIFICATION_MESSAGE="La mise à jour de $PACKAGES_TO_UPGRADE paquet(s) s'est terminée. Redémarrage nécessaire si nouveau noyau."
NOTIFICATION_PRIORITY=4 # Priorité moyenne
else
# Échec
NOTIFICATION_TITLE="❌ PBS Update ÉCHEC sur $HOSTNAME"
NOTIFICATION_MESSAGE="La mise à jour de PBS a ÉCHOUÉ (apt-get update). Consultez $LOGFILE sur l'hôte."
NOTIFICATION_PRIORITY=8 # Haute priorité
fi
send_gotify_notification "$NOTIFICATION_TITLE" "$NOTIFICATION_MESSAGE" $NOTIFICATION_PRIORITY
else
# Aucune mise à jour et pas d'échec
echo "Aucun paquet mis à jour et aucun échec. Aucune notification Gotify envoyée."
fi
exit $UPDATE_SUCCESS
chmod +x /usr/local/bin/update_pbs.sh
crontab -e
Ajoutez la ligne suivante à la fin du fichier. Cet exemple planifie l’exécution du script tous les dimanches à 3h30 du matin.
# Mettre à jour Proxmox Backup Server (PBS) tous les dimanches à 3h30 du matin
30 3 * * 0 /usr/local/bin/update_pbs.sh
| Champ | Valeur | Description |
|---|---|---|
| Minute | 30 |
30e minute |
| Heure | 3 |
3h du matin |
| Jour de la semaine | 0 ou 7 |
Dimanche (0 et 7 sont des alias pour le dimanche) |
Après l’heure planifiée, vous recevrez une notification Gotify confirmant le statut.
tail -f /var/log/proxmox_update.log
Si le journal mentionne l’installation de paquets pbs-kernel-*, ou si la commande suivante retourne des informations, un redémarrage est nécessaire :
apt-get install -s | grep "reboot is required"
Si un nouveau noyau a été installé, redémarrez l’hôte PBS via l’interface Web ou en SSH :
reboot