私のパッケージに debconf を使用する際に問題が発生しています。package.config ファイルで mysql pw を要求します。
. /usr/share/debconf/confmodule
db_input high mypkg/mysql_root_pw
db_go
次に、postinst で debconf にパスワードを要求し、それを設定ファイルに書き込みます。
. /usr/share/debconf/confmodule
db_get mypkg/mysql_root_pw
# write pw to config file
を実行すると、これは機能しますdpkg-reconfigure --force mypkg
。ただし、 を使用するとapt-get -f install
(pkg が壊れていると表示されるため、実行する必要があります)、常に失敗します。
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
スクリプトを編集したところ/var/lib/dpkg/info/mypkg.postinst
、debconf ライブラリをソースする行でエラーが発生します。
. /usr/share/debconf/confmodule
これはおそらく、debconf に元のインストールからの値がすでに設定されており、再度質問が表示されないためです。しかし、すでに設定されている場合、どうすればこの質問をスキップできるのでしょうか。また、設定しているのに、なぜその行で失敗するのではなく、失敗するのでしょうかdb_get
。
Googleで検索してみましたが、これに関してあまり役に立つ情報は見つからないようです。
答え1
それで、ようやくこれが機能するようになりました。debconf にすでに値がある場合、postinst の最初の質問を取得するときに debconf は常に失敗します。最終的に、システム上の他のパッケージの postinst および config ファイルを確認するという (当然の) アイデアが浮かびました。これがそのトリックです。
あなたの設定で
. /usr/share/debconf/confmodule
db_input high mypkg/mysql_root_pw || true
db_go || true
以上です。postinst で値を要求すると、debconf は正常に動作します。当然、値が取得されない場合の処理が必要です。
また、投稿に を追加しましたdb_stop
。必要かどうかはわかりませんが、完成のために追加しておきます。
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
これがいつか他の誰かの役に立つことを願っています。
乾杯