1

我的 postinst 脚本有问题,我必须询问 MySQL 的 root 密码才能为我的应用程序创建一些用户。我知道,在 postinst 中使用 db_input 是不好的做法,但我真的需要它。为什么当我安装我的应用程序表单存储库时此 postinst 不起作用,但当我将其安装为 .deb 包时正常工作?

后勤:

#!/bin/bash -e

. /usr/share/debconf/confmodule

db_input high my_app/mysql_root_password || true
db_go

错误:

dpkg: error processing my-app (--configure):
 subprocess installed post-installation script returned error exit status 30
configured to not write apport reports
                                      Errors were encountered while processing:
 my-app
E: Sub-process /usr/bin/dpkg returned an error code (1)
4

2 回答 2

3

差异可能与运行 postinst 时终端的设置方式有关;可能 apt 做的事情与你自己运行 dpkg 时发生的事情不同。也许 apt-wrapped postinst 调用甚至没有分配 TTY;我不确定,随便。

但是我认为db_input甚至不支持放入 postinst,因此您可能很难按原样修复它。如果您真的非常需要从 postinst 脚本本身提出问题,您可以通过$DEBCONF_DEBUG在运行 debhelper 命令的环境中设置为“开发人员”来进行调试。

但是,我认为更有用的解决方案是:您确实应该按照建议使用debian/config脚本db_input。是什么阻止了你?

于 2012-05-08T15:09:09.763 回答
0

如果您将其更改为,您的 postinst 中的问题可能会得到解决

#!/bin/sh -e
. /usr/share/debconf/confmodule
db_version 2.0
db_beginblock
db_input high my_app/mysql_root_password || true
db_endblock
db_go

看看我的旧debian/postinst文件包含有 db_input。它工作正常,但我更改了它,因为 lintian 不喜欢 postinst 中的 db_input,并告诉我将其移动到 debian/config。

于 2016-11-19T23:41:51.987 回答