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.
dpkg
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é.
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.