postinst schlägt immer wegen debconf fehl

postinst schlägt immer wegen debconf fehl

Ich habe einige Probleme bei der Verwendung von Debconf für mein Paket. Ich frage in der Datei package.config nach dem MySQL-Passwort:

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

Dann frage ich in postinst Debconf nach dem Passwort und schreibe es in eine Konfigurationsdatei:

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

Das funktioniert, wenn ich das mache dpkg-reconfigure --force mypkg. Wenn ich jedoch benutze apt-get -f install(was ich tun muss, weil es sagt, dass mein Paket defekt ist), schlägt es immer fehl:

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

Ich habe die Skripte bearbeitet /var/lib/dpkg/info/mypkg.postinstund der Fehler tritt in der Zeile auf, in der ich die Debconf-Bibliothek als Quelle verwende:

. /usr/share/debconf/confmodule

Dies liegt wahrscheinlich daran, dass Debconf bereits den Wert aus der ursprünglichen Installation hat und die Frage nicht erneut anzeigt. Aber wie kann ich die Frage überspringen, wenn ich ihn bereits habe, und warum schlägt es in dieser Zeile fehl und nicht, wenn ich ihn habe db_get?

Ich habe bei Google gesucht, kann aber scheinbar nicht viele nützliche Informationen hierzu finden.

Antwort1

Endlich habe ich es zum Laufen gebracht. Debconf würde immer fehlschlagen, wenn die erste Frage in meinem Postinst gestellt wird, wenn Debconf den Wert bereits hat. Endlich kam ich auf die (offensichtliche) Idee, die Postinst- und Konfigurationsdateien anderer Pakete auf meinem System zu überprüfen, und das ist der Trick:

In Ihrer Konfiguration

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

Das ist es. Wenn ich die Werte in meinem Postinst anfordere, ist Debconf zufrieden. Natürlich müssen Sie eine Vorgehensweise haben, wenn Sie keine Werte erhalten.

Außerdem habe ich db_stopmeinem Postinst ein hinzugefügt. Ich weiß nicht, ob es notwendig ist, aber ich werde es der Vollständigkeit halber hinzufügen.

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

Hoffe, dass dies irgendwann jemand anderem hilft.

Prost

verwandte Informationen