Mise à jour régulière Debian/Ubuntu via la supervision

Objectif :

Il y a plusieurs façons de décharger de l’administrateur la mise à jour des serveurs Linux Debian et Ubuntu, et ce de façon automatique et régulière.

On peut utiliser le CRON, en veillant à supprimer le retour texte des commandes si on ne veut pas recevoir un message à chaque fois que la tâche CRON est lancée. Lors d’une mise à jour, tous les serveurs envoient un message…

On peut aussi utiliser un serveur qui centralise le lancement des commandes (via CRON) sur les différents serveurs et remonte le résultat à chaque fois. On reçoit donc un message régulièrement.

Une autre solution et d’utiliser la supervision. Celle-ci vérifier très régulièrement certains services, ajoutons aux checks la mise à jour du système. En plus, quand ça merde on est tout de suite prévenu par les circuits d’alerte de la supervision.

Nagios (et les outils qui utilisent la même base) permettent d’utiliser à distance un agent NRPE pour interroger des états internes à un serveur (donc non accessible via le réseau). Toutes sortes de choses peuvent être interrogé pourvu qu’il existe un plugin correspondant. Et si le plugin manque, on peut faire son propre script. C’est ce qui est réalisé ici.

Techniquement, que ce soit via un plugin sur le réseau ou via NRPE, un test remonte une valeur numérique de retour traduisant l’état de réussite du test, et un texte informatif. Les états numériques sont au nombre de 4 et correspondent aux états : OK, Warning, Critical, et Unknown.

Volontairement, la mise à jour se contente d’un safe-upgrade, c’est à dire sans mise à jour qui nécessite une modification des paquets en dépendance (impact potentiel fort du système et des services). Cela entraîne que si une mise à jour (noyau par exemple) nécessite plus que le le mode safe-upgrade, tous les serveurs seront en rouge sur la supervision. On contrôle ainsi parfaitement ces mises à jours qui peuvent poser problème…

Installation :

Sur chaque serveur, il faut installer au minimum le paquet nagios-nrpe-server, c’est le démon qui va permettre à distance de lancer le script de mise à jour.

Vérifier aussi que les mises à jours sont fonctionnelles manuellement.

Droits SUDO :

Par défaut, le script du plugin va tourner sous le compte Nagios. Ca n’est pas suffisant pour réaliser la mise à jour du système, on fait dont lancer ce script via le mécanisme du SUDO. En fait, le script se relance lui-même via SUDO.

Si SUDO n’est pas installer, il est nécessaire :

aptitude install sudo

Ajouter au fichier /etc/sudoers :

nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_update

Script :

créer le fichier /usr/lib/nagios/plugins/check_update (par exemple) :

#!/bin/bash
if [ "$(id | grep root)" == "" ]
then sudo $0
exit $?
fi

UPDATE="$(aptitude update 2>&1)"
UPDATE_RT=$?
UPDATE_ERR="$(echo $UPDATE | grep Err | wc -l)"
[ "$UPDATE_ERR" != "0" ] && echo "CRITICAL UPDATE - Fail to update from mirror!" && exit 2
[ "$UPDATE_RT" != "0" ] && echo "WARNING UPDATE - Fail to update!" && exit 1
echo -n "OK UPDATE - "

UPGRADE="$(aptitude safe-upgrade -y 2>&1 | grep upgraded | grep newly)"
UPGRADE_RT=$?
[ "$UPGRADE_RT" != "0" ] && echo "WARNING UPGRADE - Fail to upgrade!" && exit 1
UPGRADE_CODE=$(echo $UPGRADE | cut -d ' ' -f 11)
[ "$UPGRADE_CODE" != "0" ] && echo "CRITICAL UPGRADE - Fail to upgrade some packages!" && exit 2

# 0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
echo "OK $UPGRADE"

Le rendre exécutable :

chmod 755 /usr/lib/nagios/plugins/check_update

Ajout à la configuration NRPE :

On ajoute la commande utilisable à distance via NRPE, ajouter dans le fichier /etc/nagios/nrpe_local.cfg la ligne :

command[check_update]=/usr/lib/nagios/plugins/check_update

Utilisation à distance :

Sur le serveur de supervision ou via un relais NRPE, on peut lancer le test via la commande :

/usr/lib/nagios/plugins/check_nrpe -H serveur -c check_update

Et on peut l’utiliser dans Nagios!

C’est terminé :-)

4 réflexions sur « Mise à jour régulière Debian/Ubuntu via la supervision »

  1. Attention, la simple cote et la double cote «  sont transformées à certains endroits par le blog.
    Il faut la remplacer à la main partout dans le script…

  2. Nouvelle version du script /usr/lib/nagios/plugins/check_update pour les serveurs en Français :


    #!/bin/bash
    if [ "$(id | grep root)" == "" ]
    then sudo $0
    exit $?
    fi

    UPDATE="$(aptitude update 2>&1)"
    UPDATE_RT=$?
    UPDATE_ERR="$(echo $UPDATE | grep Err | wc -l)"
    [ "$UPDATE_ERR" != "0" ] && echo "CRITICAL UPDATE - Fail to update from mirror!" && exit 2
    [ "$UPDATE_RT" != "0" ] && echo "WARNING UPDATE - Fail to update!" && exit 1
    echo -n "OK UPDATE - "

    UPGRADE="$(aptitude safe-upgrade -y 2>&1 | grep "mis à jour" | grep nouvellement)"
    UPGRADE_RT=$?
    [ "$UPGRADE_RT" != "0" ] && echo "WARNING UPGRADE - Fail to upgrade!" && exit 1
    UPGRADE_CODE=$(echo $UPGRADE | cut -d ' ' -f 13)
    [ "$UPGRADE_CODE" != "0" ] && echo "CRITICAL UPGRADE - Fail to upgrade some packages!" && exit 2

    # 0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
    # 0 paquets mis à jour, 0 nouvellement installés, 0 à enlever et 0 non mis à jour.
    echo "OK $UPGRADE"

    Toujours faire attention aux simple et double cotes…

  3. Si on ne veut que vérifier l’état de mise à jour et non faire la mise à jour via le plugin check_update, et donc aussi à ne pas avoir besoin de configurer SUDO, il suffit de rajouter l’option -s à la commande :
    … aptitude safe-upgrade -y …
    Cette option indique de simuler les mises à jour. Cela implique d’avoir un autre moyen en place de gérer les mises à jours, comme CRON par exemple.

  4. Sur certaines machines, c’est un peu compliqué… en ligne de commande c’est en Français, et donc il faut la version en conséquence, mais quand c’est lancé par la supervision c’est en anglais :-/

Les commentaires sont fermés.