Dispatch-conf par TGL

Dispatch-conf par TGL

Au delà des aspects cosmétiques de l’interface, il y a quand mème quelques différences plus fondamentales entre “dispatch-conf” et “etc-update”.

Tout d’abord, “dispatch-conf” effectue des sauvegarde à chaque intervention, soit sous forme de copies “fichier.version” dans un répertoire donné, soit sous forme RCS (un gestionnaire de version mono utilisateur, un genre de mini cvs). Ces sauvegardes permettent de retrouver les fichiers écrasés un peu trop vite, ou encore les fichiers tels qu’ils avaient été installés par le paquet si on a fait n’importe quoi dedans.

Mais surtout, dispatch-conf repose pour les mises à jour sur un diff à 3 fichiers entre :

  1. l’ancien fichier source (le /etc/toto.conf tel qu’installé par le paquet toto-1.0)
  2. le nouveau fichier source (le /etc/._cfg0001_toto.conf qu’y vient d’ètre installé par votre mise à jour vers toto-1.1)
  3. votre fichier modifié, dérivé de (1) (votre /etc/toto.conf actuellement en usage)

Ce que dispatch-conf propose donc, ça n’est pas simplement comme etc-update de remplacer (3) par (2) en oubliant tout au passage, mais plutà´t d’intégrer à (3) les différences entre (1) et (2) :

  • si il n’y a pas de différence (toto-1.0 et toto-1.1 propose la mème config par défaut), il n’y a donc rien à faire, et “dispatch-conf” ne vous parlera mème pas de ce fichier, quand bien mème vous l’auriez configuré.
  • si les différences ne concernent que des lignes de commentaires, alors “dispatch-conf” en fera aussi silencieusement l’intégration (pour peu qu’il soit configuré pour, voir plus bas).
  • sinon, il vous proposera un “merge” interactif ou ce genre de choses, comme “etc-update”. Mais attention, il y aura moins de lignes à “merger”, puisque vos modifications portant sur des lignes communes à la conf 1.0 et 1.1 seront elles déjà automatiquement intégrées.

Bon, ça sera plus clair sur un exemple…

Commençons par configurer dispatch-conf, dans /etc/dispatch-conf.conf :

Code:
#
# dispatch-conf.conf
## Directory to archive replaced configs
archive-dir=/var/archive/config# Use rcs for storing files in the archive directory?
# (yes or no)
use-rcs=no# Diff for display
diff=”colordiff -Nu %s %s”# Pager for diff display
pager=”less –no-init –QUIT-AT-EOF -R”# Automerge files comprising only CVS interpolations (e.g. Header or Id)
# (yes or no)
replace-cvs=yes# Automerge files comprising only whitespace and/or comments
# (yes or no)
replace-wscomments=yes# Automerge files that the user hasn’t modified
# (yes or no)
replace-unmodified=yes# Per-session log file of changes made to configuration files
log-file=/var/log/dispatch-conf.log

Ici, j’ai choisi une sauvegarde sous forme de fichiers dans le répertoire /var/archive/config, et j’ai activé toutes les options qui facilitent la vie. Oh, et puis oui, j’ai remplacé “diff” par “colordiff”, parce que c’est plus joli ; si vous le faites aussi, pensez à installer ce programme (“emerge colordiff”).

Maintenant, il faut savoir que dispatch-conf peut travailler sur un répertoire bidon qu’on lui passe en paramètre, au lieu des habituels /etc/ et compagnie. C’est ce qu’on va utiliser pour le test, comme ça on fait pas de bètises. Mais dans la vraie vie, au lieu de “dispatch-conf /foo/bar/”, on ferait juste “dispatch-conf”.

Code:
% mkdir /tmp/etc
% <éditeur> /tmp/etc/toto.conf

On va commencer avec un “toto.conf” comme si on venait d’installer un paquet toto-1.0 :

Code:
# This is configuration file for toto
# This option roxor:
roxor=yes
# This option puxor:
puxor=no

Comme c’est une première installation, il n’y a pas dispatch-conf ou autre etc-update à faire. Imaginons maintenant qu’on met à jour vers toto-1.1. ça installe un fichier de config légèrement différent :

Code:
% cp /tmp/etc/toto.conf /tmp/etc/._cfg0001_toto.conf
% <éditeur> /tmp/etc/._cfg0001_toto.conf

Disons que la nouvelle version aura quelques commentaire en plus à la fin :

Code:
# This is configuration file for toto
# This option roxor:
roxor=yes
# This option puxor:
puxor=no
# Optionally, you can set TGL’s verbosity here:
# tglverb=3


Il est tant de faire un premier merge avec cette nouvelle configuration :

Code:
% dispatch-conf /tmp/etc/

Ici, on n’a pas eu à intervenir, parce qu’il ne s’agit que de merger des commentaires. Mais pourtant, le boulot est bel et bien fait, les lignes ayant été ajoutées :

Code:
% <éditeur> /tmp/etc/toto.conf

Et on voit :

Code:
# This is configuration file for toto
# This option roxor:
roxor=yes
# This option puxor:
puxor=no
# Optionally, you can set TGL’s verbosity here:
#tglverb=3

Bon bah on va en profiter pour augmenter un peu la valeur de “tglverb”, avant d’enregistrer :

Code:
# Optionally, you can set TGL’s verbosity here:
tglverb=9

Bon, maintenant, et c’est là qu’on découvre la vraie puissance de dispatch-conf, on va faire une mise à jour vers un toto-1.2, dont la conf par défaut (roxor=yes et puxor=no) a été inversée. On se refait donc encore un “._cfg0001_toto.conf” qui ressemble cette fois à ça :

Code:
# This is configuration file for toto
# This option roxor:
roxor=no
# This option puxor:
puxor=yes
# Optionally, you can set TGL’s verbosity here:
#tglverb=3

Et on le fusionne :

Code:
% dispatch-conf /tmp/etc/
— /tmp/etc/toto.conf 2005-09-03 02:10:51.000000000 +0200
+++ /tmp/etc/._mrg0001_toto.conf 2005-09-03 02:11:34.000000000 +0200
@@ -1,10 +1,10 @@
# This is configuration file for toto
# This option roxor:
-roxor=yes
+roxor=no
# This option puxor:
-puxor=no
+puxor=yes
# Optionaly, you can set TGL’s verbosity here:
tglverb=9>> (1 of 1) — /tmp/etc/toto.conf
>> q quit, h help, n next, e edit-new, z zap-new, u use-new
m merge, t toggle-merge, l look-merge:

On voit dispatch-conf afficher les modifications qu’il propose (changer les valeurs de “roxor” et “puxor”, puisqu’elle sont changées dans la conf par défaut). Mais ce qu’il convient surtout de remarquer, c’est que notre customisation de “tglverb”, elle, est conservée. Ici, etc-update aurait proposé de revenir à un ligne “#tglverb=3” telle qu’elle est dans la conf par défaut. ça ne vous impressionne pas ? Et bah dites vous que si les lignes customizées c’était vos entrées de /etc/fstab, vous apprécieriez qu’on ne vous propose mème pas de les massacrer.
Bon, après cet intermède, il est temps d’accepter les modifs proposées. On appuie donc sur “u” (use-new), et dispatch-conf quitte en enregistrant la nouvelle version. Je vous laisse regarder “man dispatch-conf” pour les autres commandes. On a donc maintenant :

Code:
% cat /tmp/etc/toto.conf
# This is configuration file for toto
# This option roxor:
roxor=no
# This option puxor:
puxor=yes
# Optionaly, you can set TGL’s verbosity here:
tglverb=9

Et on peut aussi jeter un Å“il aux sauvegardes, où l’on retrouve nos précédentes versions de toto.conf, et la version d’origine (celle en “.dist”) :

Code:
% ls /var/archive/config/etc/tmp
toto.conf toto.conf.1 toto.conf.dist


Et voilà pour la démo… en espérant qu’elle rend la chose un peu plus compréhensible. Mais si vous avez rien capté, retenez quand mème au moins ça :
– dispatch-conf fait des sauvegardes, et c’est Bien© ;
– dispatch-conf est plus malin qu’etc-update, vous laissant moins de travail à faire manuellement, et donc moins de chances de faire des fausses manips.

Ah oui, pour finir, un bémol tout de mème : la première fois qu’il voit un fichier, dispatch-conf n’a pas encore dans ces archive de sauvegarde de la précédente version du fichier standard, et ne peut donc pas faire grand chose d’intelligent (sinon les petits trucs comme la fusion de commentaires)… ça n’est donc que à partir de la 2ème mise-à -jour d’un fichier qu’il devient intéressant. Bref, il faut l’utiliser régulièrement depuis quelques temps pour bien le juger.

Ceci est une copie de l’article créé par TGL(ici)

Leave a Reply

Your email address will not be published. Required fields are marked *