Après une mise à jour de sécurité, il est important de vérifier que les services en fonctionnements n'utilisent plus les anciennes versions de librairies. Un petit utilitaire nommé CheckRestart permet de vérifier très simplement quels services doivent être redémarré.

logo-debian.png


C'est quoi le problème ?

Sur la plupart des systèmes d'exploitation, on trouve des bibliothèques qui sont utilisées par de multiples logiciels.

Après avoir mis à jour son système, il est fréquent de devoir redémarrer l'un des logiciels mis à jour pour profiter de la mise à jour. C'est par exemple souvent le cas avec FireFox, qui doit être redémarré après sa mise à jour ou celle de l'un des modules complémentaires installés.
Par contre, lors de la mise à jour d'une bibliothèque, il ne sera pas demandé de redémarrer les logiciels qui l'utilise.

Sur un serveur ou une machine qui est rarement éteinte, c'est un réel problème, dans la mesure ou un logiciel peu continuer à fonctionner longtemps en utilisant encore l'ancienne version, chargée en mémoire, de la bibliothèque pourtant mise à jour.
Pour ce problème spécifique, aucune procédure automatique de redémarrage n'existe pour le moment, et il faut alors chercher soi-même les services qui utilisent la ou les bibliothèque-s pour les redémarrer.
Si par exemple "libxml2" a été mise à jour, la commande suivante vous fournira la liste des processus l'utilisant :

# lsof | grep libxml2
gdm-simpl 1227 /usr/lib/libxml2.so.2.7.7
apache2 1367 /usr/lib/libxml2.so.2.7.7
indicator 2334 /usr/lib/libxml2.so.2.7.7
[...]
conky 2380 /usr/lib/libxml2.so.2.7.7
claws-mai 2436 /usr/lib/libxml2.so.2.7.7
firefox-b 2450 /usr/lib/libxml2.so.2.7.7
gwibber-s 2686 /usr/lib/libxml2.so.2.7.7
update-ma 3175 /usr/lib/libxml2.so.2.7.7

Reste ensuite à redémarrer chaque services de la liste. C'est bien mais pas très efficace...

Heureusement, l'utilitaire CheckRestart est là pour nous aider !


Installation

Sous Debian et Ubuntu, CheckRestart est fournit par le paquet debian-goodies :

#apt-get install debian-goodies

À noter que le paquet debian-goodies installe plusieurs autres petits logiciels. En voici la liste :

  • /usr/bin/which-pkg-broke
  • /usr/bin/debman
  • /usr/bin/dglob
  • /usr/bin/dgrep
  • /usr/bin/debget
  • /usr/bin/debmany
  • /usr/bin/dpigs
  • /usr/bin/popbugs
  • /usr/bin/dzgrep
  • /usr/bin/degrep
  • /usr/bin/dfgrep

Mais revenons à CheckRestart...


Utilisation

Seulement deux options pour cet outil :

  • -v pour activer le mode verbeux...
  • -h pour visualiser l'aide...

Pour vérifier qu'aucun service n'a besoin d'être redémarré :

#checkrestart -v
Found 0 processes using old versions of upgraded files

Ici tout va bien !

Si des services doivent être redémarré, vous en obtiendrez la liste, accompagnée du chemin du script init de chacun d'entre eux :

Found 13 processes using old versions of upgraded files
(7 distinct programs)
(7 distinct packages)

Of these, 6 seem to contain init scripts which can be used to restart them:
The following packages seem to have init scripts that could be used
to restart them:
openssh-server:
	27806	/usr/sbin/sshd
udev:
	475	/sbin/udevd
cron:
	1132	/usr/sbin/cron
polipo:
	27832	/usr/bin/polipo
knockd:
	2474	/usr/sbin/knockd
rsyslog:
	1094	/usr/sbin/rsyslogd

These are the init scripts:
/etc/init.d/ssh restart
/etc/init.d/udev restart
/etc/init.d/udev-mtab restart
/etc/init.d/cron restart
/etc/init.d/polipo restart
/etc/init.d/knockd restart
/etc/init.d/rsyslog restart

These processes do not seem to have an associated init script to restart them:
util-linux:
	1177	/sbin/getty
	1160	/sbin/getty
	1163	/sbin/getty
	1154	/sbin/getty
	1157	/sbin/getty
	1151	/sbin/getty
	1150	/sbin/getty

Le mode verbeux permet d'obtenir en plus le chemin des fichiers incriminés :

Process /usr/sbin/sshd (PID: 27806) 
List of deleted files in use:
	/lib/libnss_files-2.7.so
	/lib/libnss_nis-2.7.so
	/lib/libnss_compat-2.7.so
	/lib/libpthread-2.7.so
	/lib/libc-2.7.so
	/lib/libcrypt-2.7.so
	/lib/libnsl-2.7.so
	/lib/libutil-2.7.so
	/usr/lib/i686/cmov/libcrypto.so.0.9.8
	/lib/libresolv-2.7.so
	/lib/libdl-2.7.so
	/lib/ld-2.7.so

Simple et pratique !

Commentaires

1. Le 15 mars 2012, 21:24 par zilito

Sympa je viens de voir ton article. Le plus interessant ça serait qu'il se lance apres un cron-apt et qu'il envoie son rapport juste après.

Bonne continuation.