我应该将模板和配置文件放在 Debian 层次结构中的什么位置

我应该将模板和配置文件放在 Debian 层次结构中的什么位置

我正在为我的应用程序 (foo) 编写一个 debian 二进制包。postinst(安装后)脚本想要向用户询问几个问题并得到答案。我正尝试使用 debconf 实现这一点。但我无法看到提示用户问题的 UI 屏幕。我怀疑我的配置和模板是否被 dpkg 调用。我正在按照链接中的所有说明进行操作debconf 教程 有人可以向我澄清以下问题吗:

  1. 我将“config”脚本和“templates”文件放在 /debian/tmp/DEBIAN/ 中。那么它在 Debian 层次结构中的位置是否正确?名称是否正确?
  2. 我的下面的脚本正确吗?

控制文件片段(我仅发布相关字段)

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 的另一个不错的功能是它向您询问的问题具有优先级。如果您不想被每件小事所困扰,您可以设置 debconf 只向您询问最重要的问题。另一方面,如果您是一个控制狂,您可以让它向您显示所有问题。每个问题都有优先级。按重要性递增顺序排列:

  • 低 非常简单的问题,具有默认值,在绝大多数情况下都适用。
  • 中等 具有合理默认值的正常问题。
  • 没有合理默认值的高问题。
  • 您确实需要看到的关键问题(否则)。

相关内容