rpm -Vf 不报告更改的文件

rpm -Vf 不报告更改的文件

我正在尝试编写一个木偶模块,该模块可以写出模板化配置,但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既不是库存也不是配置管理指定的版本的情况。

相关内容