Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

8 réponses
Avatar
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

8 réponses

Avatar
Luc.Habert.00__arjf
Francois Lafont :

En revanche, l'administrateur du système peut modifier le contenu des
sous-répertoires perso1/ et perso2/ comme il le souhaite.



Il vaudrait mieux les mettre sous /etc.

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.



Il doit falloir les spécifier comme fichier de conf du package. J'ai jamais
fait, donc je ne peux pas t'aider plus.
Avatar
Francois Lafont
Le 31/07/2012 15:15, Luc Habert a écrit :

En revanche, l'administrateur du système peut modifier le contenu des
sous-répertoires perso1/ et perso2/ comme il le souhaite.



Il vaudrait mieux les mettre sous /etc.



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.

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.



Il doit falloir les spécifier comme fichier de conf du package. J'ai jamais
fait,



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 !?

donc je ne peux pas t'aider plus.



Pas de souci.

--
François Lafont
Avatar
Luc.Habert.00__arjf
Francois Lafont :

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.



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.

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 !?



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.
Avatar
Damien Wyart
* (Luc Habert) in fr.comp.os.linux.configuration:
Il vaudrait mieux les mettre sous /etc.



+1

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

Il doit falloir les spécifier comme fichier de conf du package. J'ai
jamais fait, donc je ne peux pas t'aider plus.



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
Avatar
Francois Lafont
Le 31/07/2012 15:52, Luc Habert a écrit :

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 !?



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.



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
Avatar
Francois Lafont
Le 31/07/2012 16:12, Francois Lafont a écrit :

fichier de conf puisqu'il sera présent dans le conffiles du paquet.


^^^^^^^
Il faut lire « puisqu'il ne sera pas présent ».



--
François Lafont
Avatar
Damien Wyart
* Francois Lafont
in fr.comp.os.linux.configuration:
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.)



Oui.

Par exemple un contenu comme celui-ci dans le conffiles ne suffirait-il
pas ?

/usr/share/mon-paquet/perso1
/usr/share/mon-paquet/perso2



Non, on ne peut pas lister de répertoires ni de caractères jokers (?, *).

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 » ?



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
Avatar
Luc.Habert.00__arjf
Regarde voir comment sont fichus les packages qui ont un ploum.d dans
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.