我希望通过 bash 脚本自动安装一些软件包;它们将被安装到预先存在的 chroot 文件系统中。然而,有些软件包涉及交互式用户输入(即 ddclient 要求选择动态 DNS 服务提供商),我无法轻松实现自动化。
debconf 预置似乎是自动化交互式软件包安装的最常见方法,但我读过的所有示例都表明它适用于整个 Debian 安装,而不仅仅是单个软件包。
我一直在关注这个如何自动化交互式 Debian 软件包安装但它并没有真正解释具体细节。
提前致谢!
答案1
如果不使用“适当的”部署和配置管理工具(例如 Ansible 或 Salt),debconf
预置就足以预配置 Debian 软件包。它完全不限于完整的安装;它可以应用于任意数量的包。
最简单的开始方法是通过安装包并回答问题来手动配置要安装的包。然后运行debconf-get-selections
(从debconf-utils
包中);这将列出所有存储的设置,包括您刚刚安装的软件包的设置,以及评论中的问题文本 - 这样您就可以轻松找到您想要预置的问题。格式为
<package> <debconf key> <type> <value>
例如
# System's default paper size:
# Choices: letter, a4, note, legal, executive, halfletter, halfexecutive, 11x17, statement, folio, quarto, 10x14, ledger, tabloid, a0, a1, a2, a3, a5, a6, a7, a8, a9, a10, b0, b1, b2, b3, b4, b5, c5, DL, Comm10, Monarch, archE, archD, archC, archB, archA, flsa, flse, csheet, dsheet, esheet
libpaper1 libpaper/defaultpaper select a4
将要预置的设置存储在文件中,然后在目标系统上运行debconf-set-selections
(在debconf
包中),可以使用本地可用的文件并命名为第一个参数,也可以使用管道传输其内容:
cat preseed-file | ssh remotehost debconf-set-selections
做这个前在目标系统上安装软件包。