我正在为我的应用程序 (foo) 编写一个 debian 二进制包。postinst(安装后)脚本想要向用户询问几个问题并得到答案。我正尝试使用 debconf 实现这一点。但我无法看到提示用户问题的 UI 屏幕。我怀疑我的配置和模板是否被 dpkg 调用。我正在按照链接中的所有说明进行操作debconf 教程 有人可以向我澄清以下问题吗:
- 我将“config”脚本和“templates”文件放在 /debian/tmp/DEBIAN/ 中。那么它在 Debian 层次结构中的位置是否正确?名称是否正确?
- 我的下面的脚本正确吗?
控制文件片段(我仅发布相关字段)
Depends: debconf (>= 0.2.17)
配置文件片段
#!/bin/sh
set -e
#echo "Config being called"
# Source debconf library.
. /usr/share/debconf/confmodule
# Do you like debian?
db_input medium foo/like_debian || true
db_go
# Check their answer.
db_get foo/like_debian
if [ "$RET" = "false" ]; then
# Poor misguided one..
db_input high foo/why_debian_is_great || true
db_go
fi
模板文件片段
Template: foo/like_debian
Type: boolean
Description: Do you like Debian?
We'd like to know if you like the Debian GNU/Linux system.
Template: foo/why_debian_is_great
Type: note
Description: Poor misguided one. Why are you installing this package?
Debian is great. As you continue using Debian, we hope you will
discover the error in your ways.
preinst 的片段:
#!/bin/sh
set -e
#echo "Stage preinst" $1
exit 0
postinst 的片段:
#!/bin/sh
set -e
#echo "Stage postinst" $1
# Source debconf library.
. /usr/share/debconf/confmodule
db_get foo/like_debian
if [ "$RET" = "false" ]; then
touch "/home/myhome/ITWORKED"
fi
exit 0
prerm 的片段:
#!/bin/sh
set -e
#echo "Stage prerm" $1
exit 0
postrm 的片段:
#!/bin/sh
set -e
#echo "postrm" $1
exit 0
谢谢,-Sandeep
答案1
我发表了一篇关于创建自己的 Debian 软件包的博客文章:
http://www.leaseweblabs.com/2013/06/creating-custom-debian-packages/
为了节省您的阅读时间,目录结构应如下所示:
- 德比安
- 控制(必需)
- 模板(可选)
- preinst (可选,chmod 0755)
- postinst (可选,chmod 0755)
- prerm (可选,chmod 0755)
- postrm (可选,chmod 0755)
- …(要安装在指定位置的文件)
确保权限和位置如下,它就应该可以工作了:)
答案2
我遇到了同样的问题,我的问题只问了dpkg-reconfigure
而不是安装dpkg -i
。我的解决方案是添加
db_fset package-name/question_name seen false
前
db_input high package-name/question_name || true
db_go
答案3
我通过输入解决了这个问题
echo PURGE | debconf-communicate <packagename>
此命令清除数据库中的所有选择debconf
。我意识到,当数据库中存在选择时debconf
,包安装程序永远不会执行文件中的输入命令config
。因此,我将purge
命令放在文件中postrm
。
答案4
问题来自于问题优先级。
默认情况下,界面只会显示优先级别较高的问题high
,您可以在文件中critical
检查debconf/priority
/var/cache/debconf/config.dat
因此,要显示你的问题,请输入
db_input high foo/like_debian || true
代替
db_input medium foo/like_debian || true
debconf 的另一个不错的功能是它向您询问的问题具有优先级。如果您不想被每件小事所困扰,您可以设置 debconf 只向您询问最重要的问题。另一方面,如果您是一个控制狂,您可以让它向您显示所有问题。每个问题都有优先级。按重要性递增顺序排列:
- 低 非常简单的问题,具有默认值,在绝大多数情况下都适用。
- 中等 具有合理默认值的正常问题。
- 没有合理默认值的高问题。
- 您确实需要看到的关键问题(否则)。