Suivre ses modifications de configuration avec etckeeper et git

Un logiciel de suivi de version permet de conserver toutes les versions d’un même fichier. Chaque modification est accompagné d’un message de « commit » expliquant la nature de la modification.

Indispensable pour les développeurs, cet outil peut s’avérer intéressant pour un sysadmin soucieux de tracer les modifications apportées à son système :

  • connaître l’historique des modifications du fichier /etc/httpd/conf/httpd.conf
  • ne plus avoir à faire une copie de sauvegarde « au cas où » avant une modification de configuration
  • Pouvoir revenir rapidement à la « dernière bonne configuration connue »
  • Savoir qui est à l’origine de la boulette dans la conf de bind (et donc qui va payer l’apéro à midi)

J’utilise pour cela etckeeper, une surcouche à différents outils de gestion de version (darcs, mercurial, git) adaptée au suivi de notre répertoire /etc (notamment la bonne gestion des permissions).

Installation

L’installation sur une CentOS / RHEL se fait simplement en utilisant les dépots EPEL:

yum install etckeeper git

Puis on initialise l’outil de suivi de version dans /etc:

etckeeper init
etckeeper commit -m "$HOSTNAME : initial commit"

Configuration

Au niveau de la configuration, 2 petites choses à régler dans le fichier /etc/etckeeper/etckeeper.conf:

AVOID_DAILY_AUTOCOMMITS=1
AVOID_COMMIT_BEFORE_INSTALL=1

La première empêche un commit automatique quotidien des modifications non validées. La 2ème fera s’échouer toute installation de logiciel s’il y a des modifications non validées. C’est pénible, mais c’est pour vous faire prendre de bonnes habitudes.

Utilisation

Désormais, avant toute modification sur un fichier de /etc:

  1. on vérifie qu’il n’y a pas de modifications non validées (etckeeper vcs status) et on les valide le cas échéant.
  2. on fait ses modifications
  3. une fois terminées, on les valide, en leur associant un message explicatif (etckeeper commit « ajout du vhost www.tartempion.org »)

Commandes utiles

etckeeper vcs status

et_status

Vérifie l’état du répertoire /etc par rapport au contenu du gestionnaire de version. Si vous avez du rouge, c’est que des modifications ont été apportées à votre configuration sans avoir été « commitées ».

etckeeper vcs log

et_log
Affiche la liste des différents commit, du plus récent au plus ancien, accompagnée de l’auteur du commit, de la date et du message.

 

etckeeper vcs diff fichier
et_diff

Affiche les différences entre la version actuelle de fichier et la dernière version enregistrée auprès du gestionnaire de version. Dans mon exemple, le fichier /etc/crontab contient une ligne de plus (en vert) que la version connue du gestionnaire de version.

Notez que l’on ne spécifie pas le répertoire /etc dans le chemin du fichier à examiner.

 

sudo etckeeper vcs checkout -- fichier

Annule les modifications apportées à fichier et le restaure à la dernière version connue du gestionnaire de version.

Les 2 précédentes opérations peuvent également prendre un id de commit en paramètre pour comparer / récupérer un fichier à une date spécifique. Par exemple si je veux récupérer la version de /etc/crontab datant du 6 février, je vais faire un

sudo etckeeper vcs checkout c5ef3e40fa77042aebd6b793baeb6b5a31c84666 crontab

L’id (C5ef3…) a été récupéré via un etckeeper vcs log

 

Conclusion

etckeeper est un outil qui nécessite de prendre de bonnes habitudes (on n’oublie pas de commiter ses modifications !) mais qui apporte un réel plus dans mon activité de sysadmin, en charge de multiples machines sur lesquelles je ne suis pas forcément le seul à intervenir, et sur lesquelles je n’interviens pas tous les jours.

Dans un prochain épisode, j’expliquerai comment avoir d’un coup d’oeil tout l’historique de toutes vos machines en utilisant un dépôt centralisé, et une simple application web…

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *