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 变量的值?