Sélectionner une page

Tous les services qui tournent sous Linux, tous les programmes que nous utilisons, font appel à de nombreuses librairies, au nom en .so, (Sous Windows on appelle cela des DLL). Par exemple /lib/x86_64-linux-gnu/libpcre.so.3 est une librairie de lecture d’expressions rationnelles

Par exemple, si je prends un binaire de base, mettons bash, LE shell, je peux savoir de quelles librairies il dépend :

La commande ldd nous permet donc de savoir non seulement ces librairies, mais aussi si certaines manquent, empêchant le lancement de ce programme.

Conséquence de cette utilisation massive de librairies, si nous mettons à jour, par exemple le package Debian libtinfo5, il faudra redémarrer tous les binaires bash tournant en permanence pour que la nouvelle version de cette librairie soit utilisée partout.

C’est là qu’intervient le package debian-goodies, que je vous recommande d’installer sur toutes vos instances de Debian. Ce package contient entre autre un programme nommé checkrestart, qui permet de vérifier quels services utilisent des librairies mises à jour depuis le lancement du service, et qu’il faudrait donc redémarrer pour prendre en compte ces mises à jour.

Exemple de sortie (raccourcie) de checkrestart :

On remarque que checkrestart cherche les binaires ayant besoin d’un reboot, regarde leur package Debian, et cherche les scripts d’init permettant de redémarrer ces services.

Pour certains d’entre eux, il n’est pas aussi facile de déterminer le service. Ainsi le process au PID 5307 est un script perl, aussi le binaire est perl, même s’il s’agit d’un autre service. ps nous permet d’en savoir plus :

On devine que ce programme est en fait le serveur munin, que l’on peut redémarrer via service munin-node restart

Du code Octopuce

En tant qu’administrateur systèmes de centaines de serveurs, cette commande est donc extrêmement pratique mais manque un peu d’automatismes et d’intelligence. Aussi avons-nous produit notre propre version de checkrestart qui connait mieux les process spéciaux (en perl, python, php, bash etc.) Et qui propose de redémarrer lui-même les services concernés.

À ce jour, ce script connait les services lancés par login, prosody (en lua), amavis, munin-node, sympa (en perl), mailman (en python), dovecot imapd (qui reboote mal), mysqld (que checkrestart ne sait pas analyser) ainsi que fail2ban (qui fait tourner un script python et un gam_server pour la détection des fichiers logs modifiés)

Vous pouvez tout à fait ajouter vos propres cas (c’est du bash) pour gérer vos spécificités serveur individuelles

Le code de checkrestart.octopuce est téléchargeable ici

Note: tous les codes de nos scripts pour administrateurs système sont publiés sous licence CC0 dans un dépôt git public. Retrouvez-les sur notre compte GitHub

Image copyright Official U.S. Navy | CC BY 2.0