Fabrication d'un modeste paquet debian : pb avec la gestion de fichiers « pe rsistants »
Le
Francois Lafont

Bonjour à tous,
Voici mon problème. J'essaye de fabriquer un paquet Debian assez simple
puisqu'au final il ne consiste qu'en des données. Pour faire simple, mon
paquet revient à créer un répertoire mon-paquet/ dans /usr/share/ afin
d'avoir un truc comme ça par exemple :
/usr/share/mon-paquet/
|-- d1/
|-- d2/
|-- perso1/
`-- perso2/
L'idée c'est que l'administrateur du système n'est pas censé toucher aux
sous-répertoires d1/ et d2/ (ainsi qu'à leur contenu). En revanche,
l'administrateur du système peut modifier le contenu des
sous-répertoires perso1/ et perso2/ comme il le souhaite. Et c'est là
que pour moi les choses se compliquent. Je n'arrive pas à gérer
correctement le fait que les sous-répertoires perso1/ et perso2/ soient
conservés lors d'une réinstallation du paquet ou bien lors d'un upgrade.
Précisément, je voudrais ceci :
1) Lors d'une primo-installation (apt-get install mon-paquet), je
voudrais que perso1/ et perso2/ possèdent un contenu par défaut prévu
par le paquet.
Entre temps, l'administrateur du système modifie perso1/ et perso2/ à sa
guise
2) Ensuite, après :
apt-get remove mon-paquet
apt-get install mon-paquet
ou bien après un :
apt-get reinstall mon-paquet
je voudrais que l'administrateur du système conserve perso1/ et perso2/
exactement tels qu'il les a modifiés.
3) Idem après un :
apt-get upgrade mon-paquet
je voudrais que l'administrateur du système conserve perso1/ et perso2/
exactement tels qu'il les a modifiés.
4) En revanche, après :
apt-get purge mon-paquet
apt-get install mon-paquet
je voudrais que l'administrateur du système retrouve les contenus par
défaut de perso1/ et perso2/ tels qu'ils sont prévus dans le paquet.
J'ai tenté des choses avec les scripts prerm, postrm, preinst, et
postinst en m'aidant de cette page :
http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html
Mais je crois que je m'emmêle pas mal des pinceaux et j'apprécierais un
petit coup de main.
Merci d'avance pour votre aide.
--
François Lafont
Voici mon problème. J'essaye de fabriquer un paquet Debian assez simple
puisqu'au final il ne consiste qu'en des données. Pour faire simple, mon
paquet revient à créer un répertoire mon-paquet/ dans /usr/share/ afin
d'avoir un truc comme ça par exemple :
/usr/share/mon-paquet/
|-- d1/
|-- d2/
|-- perso1/
`-- perso2/
L'idée c'est que l'administrateur du système n'est pas censé toucher aux
sous-répertoires d1/ et d2/ (ainsi qu'à leur contenu). En revanche,
l'administrateur du système peut modifier le contenu des
sous-répertoires perso1/ et perso2/ comme il le souhaite. Et c'est là
que pour moi les choses se compliquent. Je n'arrive pas à gérer
correctement le fait que les sous-répertoires perso1/ et perso2/ soient
conservés lors d'une réinstallation du paquet ou bien lors d'un upgrade.
Précisément, je voudrais ceci :
1) Lors d'une primo-installation (apt-get install mon-paquet), je
voudrais que perso1/ et perso2/ possèdent un contenu par défaut prévu
par le paquet.
Entre temps, l'administrateur du système modifie perso1/ et perso2/ à sa
guise
2) Ensuite, après :
apt-get remove mon-paquet
apt-get install mon-paquet
ou bien après un :
apt-get reinstall mon-paquet
je voudrais que l'administrateur du système conserve perso1/ et perso2/
exactement tels qu'il les a modifiés.
3) Idem après un :
apt-get upgrade mon-paquet
je voudrais que l'administrateur du système conserve perso1/ et perso2/
exactement tels qu'il les a modifiés.
4) En revanche, après :
apt-get purge mon-paquet
apt-get install mon-paquet
je voudrais que l'administrateur du système retrouve les contenus par
défaut de perso1/ et perso2/ tels qu'ils sont prévus dans le paquet.
J'ai tenté des choses avec les scripts prerm, postrm, preinst, et
postinst en m'aidant de cette page :
http://www.debian.org/doc/debian-policy/ch-maintainerscripts.html
Mais je crois que je m'emmêle pas mal des pinceaux et j'apprécierais un
petit coup de main.
Merci d'avance pour votre aide.
--
François Lafont
Il vaudrait mieux les mettre sous /etc.
Il doit falloir les spécifier comme fichier de conf du package. J'ai jamais
fait, donc je ne peux pas t'aider plus.
Ah sans doute, mais dans l'esprit perso1/ et perso2/ ne contiennent en
rien des fichiers de conf. Il s'agit vraiment de données.
Moi non plus. :-)
Au départ, je pensais que tous ce qui était dans /etc/ dans un paquet
était considéré comme conf et ne disparaissait pas après un « apt-get
remove le-paquet ». Je viens de faire un essai et chez moi ça disparaît
quand même !?
Pas de souci.
--
François Lafont
Mouais. J'imagine que l'esprit d'apt serait que chaque admin doive fabriquer
un package avec le contenu qu'il veut y mettre, mais c'est de l'arrachage de
cheveux. Tu pourrais aussi le mettre dans /usr/local, ça serait toujours
moins moche.
Non, il y a vraiment une liste de fichiers de conf dans le package. Une fois
installé, on la trouve dans /var/lib/dpkg/info/nomdupackage.conffiles. Pour
le spécifier à la création du package, j'ai l'impression qu'il faut mettre
un fichier «DEBIAN/conffiles» contenant les fichiers de conf un par ligne.
+1
Oui, c'est sans doute le plus simple.
Un peu de doc sur le sujet :
http://raphaelhertzog.com/2010/09/21/debian-conffile-configuration-file-managed-by-dpkg/
http://wiki.debian.org/ConfigPackages (indigeste...)
et l'outil ucf qui permet de gérer des conffiles en externe d'un paquet :
http://packages.debian.org/fr/sid/ucf
Sinon une bonne doc sur le packaging en général (n'aborde pas les
conffiles) :
http://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.en.pdf
--
DW
Ah en effet, mais ici perso1/ et perso2/ sont des répertoires qui
peuvent contenir une bonne cinquantaine de fichiers chacun. Il faut que
je mette tous les fichiers/répertoires qui sont dedans dans le fichier
DEBIAN/conffiles, c'est ça ? (Si oui, techniquement, ce ne sera pas un
problème.)
Par exemple un contenu comme celui-ci dans le conffiles ne suffirait-il
pas ?
/usr/share/mon-paquet/perso1
/usr/share/mon-paquet/perso2
Par ailleurs, autre problème : si l'administrateur du système *ajoute*
un fichier "toto" dans perso1/, celui-ci ne sera pas considéré comme un
fichier de conf puisqu'il sera présent dans le conffiles du paquet. Du
coup, le fichier "toto" ne va-t-il pas disparaître après un « apt--get
remove le-paquet » ?
--
François Lafont
^^^^^^^
Il faut lire « puisqu'il ne sera pas présent ».
--
François Lafont
Oui.
Non, on ne peut pas lister de répertoires ni de caractères jokers (?, *).
Non car toto ne sera pas considéré comme faisant partie du paquet donc
par précaution le fichier ne sera pas effacé.
Et avec --purge ça va effacer les conffiles mais s'il reste des
fichiers, par précaution, /usr/share/mon-paquet/perso1/ et
/usr/share/mon-paquet/ ne seront pas supprimés (il y aura un message
d'avertissement).
A tester pour être sûr mais je pense que cela fonctionne comme cela.
--
DW
lequels d'autres packages, mais aussi l'administrateur directement peuvent
ajouter des fichiers (de conf/hook, en général). Par exemple, sudo avec
/etc/sudoers.d.