web-dev-qa-db-fra.com

postinst échoue toujours à cause de debconf

J'ai du mal à utiliser debconf pour mon paquet. Je demande le mysql pw dans le fichier package.config:

. /usr/share/debconf/confmodule
db_input high mypkg/mysql_root_pw
db_go

Ensuite, dans postinst, je demande le mot de passe à debconf et l'écris dans un fichier de configuration:

. /usr/share/debconf/confmodule
db_get mypkg/mysql_root_pw
# write pw to config file

Cela fonctionne quand je fais dpkg-reconfigure --force mypkg. Cependant, lorsque vous utilisez apt-get -f install (ce que je dois faire car il dit que mon paquet est cassé) il échoue toujours:

Setting up mypkg (1.5.4-3) ...
debconf (developer): frontend started
debconf (developer): frontend running, package name is mypkg
debconf (developer): starting /var/lib/dpkg/info/mypkg.config configure 
debconf (developer): <-- INPUT low mypkg/mysql_root_pw
debconf (developer): --> 30 question skipped
dpkg: error processing mypkg (--configure):
 subprocess installed post-installation script returned error exit status 30
Errors were encountered while processing:
 mypkg

J'ai édité les scripts dans /var/lib/dpkg/info/mypkg.postinst et l'erreur se produit sur la ligne où je source la bibliothèque debconf:

. /usr/share/debconf/confmodule

C'est probablement parce que debconf a déjà la valeur de l'installation d'origine et n'affiche plus la question. Mais comment puis-je éviter de lui demander si je l'ai déjà et pourquoi cela échoue-t-il sur cette ligne au lieu de quand quand je le fais db_get?

J'ai une recherche sur Google et ne semble pas trouver beaucoup d'informations utiles à ce sujet.

1
Christof

Alors j'ai finalement réussi à faire fonctionner ça. debconf échouerait toujours lors de l'obtention de la première question dans mon postinst si debconf avait déjà la valeur. J'ai finalement eu l'idée (évidente) de vérifier les fichiers postinst et config des autres packages sur mon système et voici l'astuce:

Dans votre config

. /usr/share/debconf/confmodule
db_input high mypkg/mysql_root_pw || true
db_go || true

C'est ça. Quand je demande les valeurs dans mon postconst debconf est content. De toute évidence, vous devez avoir une gestion lorsque vous n'obtenez aucune valeur.

J'ai également ajouté un db_stop à mon postinst, je ne sais pas si c'est nécessaire mais je vais l'ajouter pour le plaisir de terminer.

mypkg.postinst

. /usr/share/debconf/confmodule
db_get mypkg/mysql_root_pw
mysql_root_pw=$RET
db_get mypkg/some_other_value
some_other_value=$RET
db_stop
# do something with the $mysql_root_pw and $some_other_value vars

J'espère que cela aidera quelqu'un d'autre un jour.

À votre santé

1
Christof