Installation
À faire dès la première prise en main d'un système, et avant toute autre modification :
sudo apt-get install etckeeper
Il se peut que d'autres paquets soient installés en même temps que etckeeper, mais ne soient configurés qu'après la configuration de etckeeper (c'était le cas de rsync lors de l'installation de bulbe). Il est donc préférable de lancer tout de suite :
sudo etckeeper commit
Configuration
Dans /etc/etckeeper/etckeeper.conf
, pour que les changements soient
référencés manuellement et que manuellement, désactivation des commits
automatiques :
AVOID_DAILY_AUTOCOMMITS=1
AVOID_COMMIT_BEFORE_INSTALL=1
On ajoute également certains fichiers manquants à /etc/.gitignore
et on
les retire de la gestion de versions (etckeeper vcs rm --cached fichier
) :
group-
passwd-
shadow-
gshadow-
subuid-
subgid-
Automatisations
Si les commits eux-mêmes sont manuels, d'autres actions ont été automatisées à l'aide de hooks :
- /etc/etckeeper/init.d/30initial-package-list
- /etc/etckeeper/post-install.d/10refresh-package-list
- Afin de garder trace de toutes les installations/suppressions de paquets
Debian (même ceux qui n'installent rien dans /etc), ces deux petits scripts
vont tout simplement écrire un fichier
/etc/.package-list
qui sera mis dans le dépôt au même titre que les autres fichiers de configuration. Sa modification par le script10refresh-package-list
entraînera donc systématiquement un changement, et ce dernier sera enregistré par/etc/etckeeper/post-install.d/50vcs-commit
. - /etc/etckeeper/commit.d/10postalias
- Pour éviter de laisser tourner Postfix avec une
configuration obsolète quant aux destinataires et aliases locaux,
les databases binaires (
*.db
) sont recompilées si leur source (version texte) a été modifiée, ceci afin de nous épargner quelques soucis consécutifs à nos oublis récurrents. - /etc/cron.hourly/etckeeper-warn-changes
Toutes les heures, ce script analyse l'état du dépôt git
/etc
. En fonction du résultat de cette analyse, il envoie un message àroot@localhost
(aliasmachines@nos-oignons.net
) pour signaler que des changements n'ont pas été enregistrés, ou synchronise un dépôt de sauvegarde si des modifications ont été enregistrées, ou bien ne fait rien. Si des modifications n'ont pas été commitées, le sujet du message peut varier en fonction d'un marqueur/var/lib/etckeeper/last-warning
; pour que cela fonctionne, il ne faut pas oublier de créer le répertoire/var/lib/etckeeper
lors de l'installation du script cron.Un clone du dépôt git est situé dans
/var/backups/etc.git
. À chaque synchronisation, un e-mail sera envoyé avec le résumé des nouvelles modifications enregistrées. Cette synchronisation a lieu une heure après le dernier enregistrement afin de ne pas recevoir de trop nombreux e-mails./usr/local/bin/wheezy-post-receive-email
- Il s'agit d'une copie de la version précédente (Debian 7 Wheezy) du hook
/usr/share/git-core/contrib/hooks/post-receive-email
, dont la version actuelle cause quelques soucis (bounces) à notre système de messagerie.
Utilisation
Il est préférable de commettre les modifications aussi souvent que possible pour profiter pleinement de cet outil, en ayant un commit (donc aussi un log et un diff) distinct pour chaque modification ou ensemble cohérent de modifications.
Les commandes qui vont bien
sudo etckeeper commit
- est préférable à
sudo git commit
ouetckeeper commit
exécuté depuis un shell root, parce que ça permet de savoir qui a fait la modification. sudo etckeeper vcs log
- permet de suivre l'historique des changements.
log
peut être remplacée par toute autre commande interne degit
(status
oudiff
par exemple).
NOTES
sudo a été configuré pour que les membres du groupe
sudo
n'aient pas à s'authentifier lors de l'invocation des commandes de consultation suivantes :sudo etckeeper vcs status
sudo etckeeper vcs diff
sudo etckeeper vcs log
sudo etckeeper unclean
Avec ZSH, il est facile de faire un script
zlogout
qui signale la présence de modifications pas encore commitées :
#!/usr/bin/zsh
if sudo etckeeper unclean; then
cat <<-EOF
Des fichiers n'ont pas été enregistrés avec etckeeper :
$(sudo etckeeper vcs status)
Les dernières connections sont :
$(last -5)
EOF
fi