这不是 debconf
问题。该文件被 Debian 打包标记为配置文件,dpkg
正在通用级别处理它。 dpkg --configure
有 --force-confold
但 dpkg-reconfigure
没有。
https://wiki.debian.org/ConfigPackages 也可能有用。
,
我正在寻找自己的解决方案,但我还没有找到可以通过 debconf 和 ansible 实现的解决方案。
问题是,debconf 在 sshd_config 方面没有“选择”。
当您查找 debconf 和 preseed(Debian 无人值守安装)时,根本没有您可以指定保留当前 sshd_config 的参数。
例如活动的 debconf 设置:
sudo debconf-show openssh-server
openssh-server/permit-root-login: false
openssh-server/password-authentication: false
这些是 ansible debconf 模块的问题。
我们正在寻找什么,但那是不可能的:
- debconf:
name: openssh-server
question: openssh-server/keep-current-sshd-config
value: true
不幸的是,我们必须找到一种解决方法。
就我而言,我想在我的树莓派上重新配置 openssh-server
幸运的是,在 raspbian 操作系统 /lib/systemd/system/regenerate_ssh_host_keys.service 上有一个 systemd 文件,它按照名称进行操作。
要使用它,只需删除 ssh_host_* 文件并重新启动机器即可。
如果您需要为不同的主机获取它,您需要找到另一种解决方法。也许通过 ansible 导入新的 ssh_host 密钥文件,或者构建一个小脚本。
,
TL;博士;是的,使用 Ansible debconf,但在重新配置时将 mv /var/lib/dpkg/info/<package>.config
文件放在一边。
剩下的内容供其他人使用,以深入了解 debconf 和 Ansible 的 debconf 模块。
我花了一些时间对此进行了深入研究,并向 Ansible debconf 模块提交了一些文档,我为此答案对其进行了一些编辑。
在 Debian 中使用 debconf
重新配置软件包并不简单!
Ansible debconf 模块不会重新配置包,它只是更新 debconf 数据库。需要一个额外的剧本步骤(通常通过通知如果 debconf 进行更改)来重新配置包并应用更改。
现在 debconf
主要用于安装前的预播种配置。
因此,虽然 dpkg-reconfigure
确实使用 debconf 数据,但它并不总是权威的,您可能需要检查您的包是如何处理的。
dpkg-reconfigure
是一个 3 阶段的过程。它使用以下参数从 /var/lib/dpkg/info
目录调用控制脚本:
<package>.prerm reconfigure <version>
<package>.config reconfigure <version>
<package>.postinst control <version>
主要问题是许多软件包的 <package>.config
重新配置步骤将首先通过检查磁盘配置来重置 debconf 数据库(覆盖 Ansible 模块所做的更改)。如果您的包是这种情况,那么 dpkg-reconfigure
将有效地忽略此 debconf
模块所做的更改。
尽管 dpkg-reconfigure
最终调用:
/var/lib/dpkg/info/<package>.postinst configure <version>
实际配置包;事实证明,使用它并不是那么简单。该脚本应从“debconf 前端”运行,并使用 IPC 响应脚本中的 _db_cmd
语句。
要更详细地查看此内容
export DPKG_MAINTSCRIPT_PACKAGE=<package>
export DPKG_MAINTSCRIPT_NAME=<script path>
export DEBIAN_HAS_FRONTEND=1
并运行脚本。我试图设置无人值守升级,所以我跑了:
sh -x /var/lib/dpkg/info/unattended-upgrades.postinst configure 1.11.2
然后停止等待前端的响应。
运行
/usr/share/debconf/frontend /var/lib/dpkg/info/unattended-upgrades.postinst configure 1.11.2
有效...但与 dpkg-reconfigure
有完全相同的问题 - 它会重置 debconf 数据库 :(
这是因为跑步
/var/lib/dpkg/info/unattended-upgrades.postinst configure 1.11.2
source
s /usr/share/debconf/confmodule
which exec()s /usr/share/debconf/frontend
强制执行 <package>.config
配置阶段。
这是基于 .config 文件的存在(即使用 shell [-e])完成的,无法避免。
解决方案是在 mv /var/lib/dpkg/info/<package>.config
(或其他相关的 debconf 代码)运行时让 dpkg-reconfigure
不碍事。
注意 Debian 程序员手册说配置脚本的唯一目的是填充 debconf 并且不能影响其他文件;所以在剧本中这样做(据我所知)符合 debian 政策:http://www.fifi.org/doc/debconf-doc/tutorial.html#AEN113
HTH
本文链接:https://www.f2er.com/1272588.html