postinst 中的 db_input 不起作用

Posted

技术标签:

【中文标题】postinst 中的 db_input 不起作用【英文标题】:db_input in postinst doesn't work 【发布时间】:2012-04-25 17:35:22 【问题描述】:

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

postinst:

#!/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)

【问题讨论】:

db_get 的同样问题... 【参考方案1】:

如果您将其更改为,则可能是您的 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。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

配置脚本在 .deb 包安装之前工作,即如果系统没有 mysql 并且包依赖于 mysql 配置脚本会在安装 mysql 之前询问 mysql 密码。无论如何,db_input 在 postinst 脚本中正常工作,问题出在 postinst 正文中。

以上是关于postinst 中的 db_input 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用命令行dpkg选项解压缩conf并跳过postinst脚本

为啥调整应用程序的 postinst 脚本会导致应用程序图标消失?

是否可以在 postinst 中读取 CMAKE_INSTALL_PREFIX 变量的值?

为什么我的debian postinst脚本没有运行?

研究永中Office的LINUX postinst脚本,是用jar处理的

安装软件后,在postinst中执行ldconfig无效?