![如何在 RPM 中模拟 Debian 软件包的“替换:”功能?](https://linux22.com/image/10/%E5%A6%82%E4%BD%95%E5%9C%A8%20RPM%20%E4%B8%AD%E6%A8%A1%E6%8B%9F%20Debian%20%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%E2%80%9C%E6%9B%BF%E6%8D%A2%EF%BC%9A%E2%80%9D%E5%8A%9F%E8%83%BD%EF%BC%9F.png)
我需要使用 NSCD(名称服务缓存守护进程)来减少 SLES10 系统上 LDAP 服务器的负载。根据我的经验,作为 GNU LibC 一部分提供的默认 nscd 是垃圾,每隔几个小时就会严重崩溃。因此,必须使用替代品,例如 unscd 或 gnscd。
SLES10 中没有针对这两者的软件包,因此需要编译一个软件包。然而,AppArmor 存在一个问题 - 在 SLE10 中,每个应用程序都将其 AppArmor 配置文件合并到一个大的“apparmor-profiles”包中,而不是让每个包提供自己的配置文件 - 并且 unscd/gnscd 无法使用apparmor-profiles 中的配置文件。
在制作 Debian 软件包时,可以指定一个名为 Replaces: 的关系,它表示“我知道我包含与另一个软件包相同的文件,但只要它们的版本与此检查匹配,我就可以覆盖它们的文件”。因此,我可以在规范文件中说“替换:apparmor-profiles (<= 2.0.1-20.20.16)”之类的内容,并且我可以干净地替换 apparmor-profiles 包中的任何文件。
我该如何对 RPM 执行相同的操作,而不是重新编译我自己的 apparmor-profiles 软件包并删除文件,或者通过 rpm 命令强制该软件包(这会在将来出现问题)?
答案1
我不认为 RPM 具有模拟功能。 RPM 具有“过时”功能,但这是用另一个名称不同的包替换一个包。您可以让多个 RPM 拥有一个对象,但这主要用于目录,例如 /etc/bash_completion.d,具体取决于您使用的发行版:它们的打包准则都略有不同。