postinst 总是因为 debconf 而失败

postinst 总是因为 debconf 而失败

我在使用 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

我已经在谷歌上搜索过但似乎找不到太多关于此的有用信息。

答案1

所以我终于让它工作了。如果 debconf 已经有了值,那么当我在 postinst 中获取第一个问题时,debconf 总是会失败。我终于有了一个(显而易见的)想法,即检查系统上其他软件包的 postinst 和配置文件,这就是诀窍:

在你的配置中

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

就是这样。当我请求 postinst 中的值时,debconf 很顺利。显然,您需要处理未获取任何值的情况。

另外,我db_stop在我的帖子中添加了一个,我不知道是否有必要,但为了完整起见,我会添加它。

上传时间:2018-03-23

. /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

希望有一天这能帮助到别人。

干杯

相关内容