パッケージに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
(私のパッケージが壊れていると言われているのでやらなければならない)を使用すると、常に失敗します。
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
を行うときではなく、なぜその行で失敗するのですか?
私はグーグルで検索していますが、これに関する有用な情報を見つけることができません。
だから私はついにこれを機能させた。 debconfが既に値を持っている場合、postinstで最初の質問を取得すると、debconfは常に失敗します。私はついに、システム上の他のパッケージのpostinstおよびconfigファイルをチェックアウトする(明白な)アイデアを思いつきました。これが秘trickです:
あなたの設定で
. /usr/share/debconf/confmodule
db_input high mypkg/mysql_root_pw || true
db_go || true
それでおしまい。 postinstの値をリクエストすると、debconfは満足です。明らかに、値を取得できない場合の処理が必要です。
また、db_stop
私のpostinstに、それが必要かどうかはわかりませんが、完了のために追加します。
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
これがいつか他の人に役立つことを願っています。
乾杯