我正在尝试编写一个木偶模块,该模块可以写出模板化配置,但onlyif
它是来自 RPM 的库存配置(以免破坏它们正在进行的任何格式)。其余的配置管理是通过 augeas 完成的。以前这是有效的,但由于某种原因rpm -Vf
没有打印出 smb.conf 确实与第一次安装时有所不同。例如,我已经对其及其时间戳进行了重大更改:
[root@vlmat ~]# rpm -Vf /etc/samba/smb.conf
[root@vlmat ~]# echo $?
0
并不反映 md5sum 发生任何变化,也不改变返回码。
smb.conf 在 rpm 数据库中,但验证整个包不会产生任何结果:
[root@vlmat ~]# rpm -qf /etc/samba/smb.conf
samba-common-3.6.23-35.el6_8.x86_64
[root@vlmat ~]# rpm -V samba-common
[root@vlmat ~]#
编辑该 rpm 中的另一个配置文件后:
[root@vlmat ~]# rpm -V samba-common
S.5....T. c /etc/sysconfig/samba
SHA256 总和确实与数据库的不同:
[root@vlmat ~]# rpm -ql --dump samba-common | grep smb
/etc/samba/smb.conf 9778 1461617087 2474992be3adf11ef60aa754151f19b5756aaf9919cd6eacbd3f6b75c303dbb1 0100644 root root 1 0 0 X
[...snip..]
[root@vlmat ~]# sha256sum /etc/samba/smb.conf
270cd0ca5bce64448c31dc6c8e01d12f3d1217b8c208008a1dd1ddc976714774 /etc/samba/smb.conf
我似乎记得这个方法以前有效,但不确定会发生什么变化。
编辑:
我已经解决了这个问题bash 脚本如果文件上的 sha256 校验和与数据库中的 sha256 校验和相同,则复制模板,但我想要上述方法的解释/解决方法,因为我认为它应该有效。为什么它看到一个配置文件的更改,而不是我正在查看的那个?
答案1
rpm 规范文件的创建者可以覆盖默认的内容来检查给定文件的验证。例如,
%config(noreplace) %verify(not md5 size mtime) %{_sysconfdir}/samba/smb.conf
表示不检查文件的 md5sum(大小或 mtime)。这些仍然记录在数据库中,但在-V
操作过程中变化将被抑制。您仍然可以通过添加-v
到您的列表来列出所有验证-V
(尽管我的 rpm 显示 md5 差异,如果有一个没有这个)。
$ rpm -Vvf /etc/samba/smb.conf | grep /etc/samba/smb.conf
......... c /etc/samba/smb.conf
答案2
诸如此类的配置文件smb.conf
经常被系统管理员摆弄,因此rpm
验证将要更改的内容是没有意义的。 “stock”也只是第一次安装时安装的内容smb.conf
;如果首次安装的版本samba
对其进行了更改smb.conf
,则此文件的内容可能会有所不同,并且如果系统管理员进行了修改/etc/smb.conf
,则这些(新!)库存值可能会出现在 中/etc/smb.conf.rpmnew
。
为什么不让配置管理指定smb.conf
应包含的内容,并且仅在偏离该状态时才更改配置?这将避免随着时间的推移必须维护库存配置列表的复杂性,并且可以更好地处理某些内容创建的smb.conf
既不是库存也不是配置管理指定的版本的情况。