在ansible (版本)中2.10)攻略我需要调用dpkg-reconfigure openssh-server命令来重新创建SSH服务器密钥。
- name: Create new SSH host's keys
shell: dpkg-reconfigure openssh-server
notify: restart sshd问题是dpkg-reconfigure openssh-server会打开一个对话框,并且脚本会被截断...
查看ansible文档,似乎可以通过debconf模块管理dpkg-reconfigure:
与locales模块相关的代码示例:
- name: Set default locale to fr_FR.UTF-8
debconf:
name: locales
question: locales/default_environment_locale
value: fr_FR.UTF-8
vtype: select来自openssh-server debconf模块的问题是:您希望如何处理修改后的配置文件sshd_config?答案是:保持当前安装的本地版本。
我如何使用ansible debconf模块来管理它?
发布于 2021-05-16 17:11:21
TL;DR;是,在重新配置时使用Ansible debconf,但mv /var/lib/dpkg/info/<package>.config文件放在一边。
这篇文章的其余部分是为那些想深入了解debconf和Ansible的debconf模块的人准备的。
我花了一些时间研究这一点,并向Ansible debconf模块提交了一些文档,我为这个答案编辑了一些内容。
在Debian中使用debconf重新配置包并不简单!
Ansible debconf模块不会重新配置包,它只是更新debconf数据库。需要一个额外的playbook步骤(通常通过notify if debconf make change)来重新配置包并应用更改。
现在,debconf主要用于安装前的种子预置配置。
因此,虽然dpkg-reconfigure确实使用了debconf数据,但它并不总是权威的,您可能需要检查您的包是如何处理的。
dpkg-reconfigure是一个分三个阶段的过程。它使用以下参数从/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.2source的/usr/share/debconf/confmodule,其中exec()是强制执行<package>.config配置阶段的/usr/share/debconf/frontend。
这是基于.config文件的存在(即使用外壳-e)而完成的,无法避免。
解决方案是在dpkg-reconfigure (或其他相关的debconf代码)运行时使用mv /var/lib/dpkg/info/<package>.config。
注Debian程序员手册上说,配置脚本的唯一目的是填充debconf,并且不能影响其他文件;因此,在剧本中这样做(据我所知)符合debian的策略:http://www.fifi.org/doc/debconf-doc/tutorial.html#AEN113
HTH
https://stackoverflow.com/questions/64686729
复制相似问题