dpkg
peut faire une certaine quantité de manipulation automatique
sur les fichiers de configuration de paquet.
Pour que ce mécanisme soit adéquate, cela dépend d'un certain nombre de facteurs, mais fondamentalement, il y a deux approches pour n'importe quel fichier de configuration particulier.
La méthode facile est de transposer un meilleur effort de configuration dans le
paquet et utiliser le mécanisme de fichier de configuration de
dpkg
pour manipuler les mises à jour. Il est peu probable que
l'utilisateur veuille éditer le fichier, mais il faut que cela soit possible
sans perdre leur modification, et un nouveau paquet avec une version modifiée
du fichier est seulement mis à jour rarement, c'est la meilleure approche.
La méthode dure est de construire le fichier de configuration à partir du script postinst, et de prendre la responsabilité de résoudre automatiquement les erreurs des versions précédentes du paquet. Ceci est justifié si le fichier est nécessairement différent sur chaque système.
Un paquet peut contenir un fichier de zone de contrôle appelé
conffiles
. Ce fichier doit être une liste de noms de fichier de
configuration nécessitant une manipulation automatique, séparée par un retour
chariot. Les noms de fichiers doivent avoir des noms absolus, et les fichiers
référencés doivent réellement exister dans le paquet.
Quand un paquet est mis à jour, dpkg
traitera les fichiers de
configuration pendant l'étape de configuration, juste avant d'exécuter le
script postinst du paquet.
Pour chaque fichier, il vérifie si la version du fichier inclus dans le paquet
est la même que celle qui était insérée dans la dernière version du paquet
(celui à partir duquel on fait la mise à jour). dpkg
compare
aussi les versions courantes installées sur le système avec celle transportée
avec la dernière version.
Si ni l'utilisateur, ni le mainteneur du paquet n'ont changé le fichier, il est laissé tel quel. Sinon si l'un ou l'autre a changé sa version, alors les nouvelles versions sont prises en compte, c'est à dire si l'utilisateur édite son fichier, mais le mainteneur n'a pas amené une version différente, les modifications de l'utilisateur demeurent (silencieusement), mais si le mainteneur amène une nouvelle version et l'utilisateur ne l'a pas édité, la nouvelle version sera installée (avec un message d'avertissement). Si les deux ont changé leurs versions, l'utilisateur est averti du problème et doit résoudre les différences lui-même.
La comparaison est faite en calculant le MD5 des fichiers et en stockant ce MD5 comme s'il était inclus dans la plus récente version du paquet.
Quand un paquet est installé pour la première fois, dpkg
installera le fichier qui l'accompagne, à moins que cela pourrait signifier un
écrasement d'un fichier existant sur le système de fichier.
Cependant, notons que dpkg
ne remplacera pas un fichier de
configuration qui a été enlevé par l'utilisateur (ou par un script). Cela est
nécessaire parce que avec certains programmes, un fichier manquant produit un
effet dur ou impossible à réaliser d'une autre manière, un fichier manquant ne
sera pas remplacé si l'utilisateur l'a décidé ainsi.
Notons qu'un paquet ne doit pas modifier un fichier de configuration manipulé
par dpkg
dans son script de maintenance. Faire cela amènera
dpkg
à donner à l'utilisateur, des options confuses ou dangereuse
pour la mise à jour des fichiers de configuration quand le paquet est révisé.
Pour les fichiers qui contiennent des informations spécifiques telles que le nom de l'hôte et les détails réseau et ainsi de suite, il est préférable de créer le fichier dans le script postinst du paquet.
Ceci impliquera typiquement, l'examen de l'état du reste du système pour déterminer les valeurs et autres informations, et peut aussi impliquer une saisie par l'utilisateur des informations qui n'ont pas pu être obtenues autrement.
Quand on utilise cette méthode, il y a un nombre important de problèmes à considérer:
Si tu découvres une erreur dans un programme qui génère le fichier de configuration, ou si le format d'un fichier change d'une version à la suivante, tu devras modifier le script postinst pour le corriger, habituellement cela veut dire, éditer le fichier de configuration installé et enlever le problème ou changer la syntaxe. Tu devras faire ça avec attention étant donné que l'utilisateur peut avoir changé le fichier, peut être pour fixer le problème que ton script est en train de traiter, tu devras détecter ces situations et les traiter correctement.
Si tel est ton choix, c'est alors probablement une bonne idée de rendre le programme qui génère le fichier de configuration en un programme séparé dans /usr/sbin, appelé par convention paquetconfig et l'exécuter si approprié, à partir du script de post-installation. Le programme paquetconfig ne doit pas écraser une configuration existante - si son mode opératoire est tourné vers le positionnement d'un paquet pour la première fois (plutôt que n'importe quelle reconfiguration arbitraire ultérieure), tu dois vérifier si la configuration existe déjà, et utiliser l'option --force pour l'écraser.
Le manuel de programmation de dpkg
15 avril 2002cure@cnam.fr
jacolot@ubolib.univ-brest.fr