postinst siempre falla debido a debconf

postinst siempre falla debido a debconf

Tengo problemas al usar debconf para mi paquete. Pregunto por el pw mysql en el archivo package.config:

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

Luego, en postinst, le pido a debconf la contraseña y la escribo en un archivo de configuración:

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

Esto funciona cuando lo hago dpkg-reconfigure --force mypkg. Sin embargo, cuando lo uso apt-get -f install(lo cual tengo que hacer porque dice que mi paquete está roto) siempre falla:

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

Edité los scripts /var/lib/dpkg/info/mypkg.postinsty el error ocurre en la línea donde obtengo la biblioteca debconf:

. /usr/share/debconf/confmodule

Probablemente esto se deba a que debconf ya tiene el valor de la instalación original y no vuelve a mostrar la pregunta. Pero, ¿cómo puedo evitar preguntarlo si ya lo tengo y por qué falla en esa línea en lugar de cuando lo tengo db_get?

He buscado en Google y parece que no puedo encontrar mucha información útil sobre esto.

Respuesta1

Así que finalmente logré que esto funcionara. debconf siempre fallaría al recibir la primera pregunta en mi postinst si debconf ya tuviera el valor. Finalmente tuve la idea (obvia) de revisar los archivos postinst y de configuración de otros paquetes en mi sistema y este es el truco:

En tu configuración

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

Eso es todo. Cuando solicito los valores en mi postinst, debconf está contento. Obviamente necesitas tener un manejo para cuando no obtienes ningún valor.

También agregué un db_stopa mi postinst, no sé si es necesario pero lo agregaré para completarlo.

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

Espero que esto ayude a alguien más algún día.

Salud

información relacionada