如何在 RPM 中模拟 Debian 软件包的“替换:”功能?

dir*_*hex 7 suse rpm packaging

我需要在 SLES10 系统上使用 NSCD(名称服务缓存守护程序)来减少 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 包中的任何文件。

如果不重新编译我自己的 apparmor-profiles 包并删除文件,或者通过 rpm 命令强制包(这会在将来出现问题),我将如何对 RPM 执行相同的操作?

wzz*_*zrd 2

我不认为 RPM 具有模拟功能。RPM 具有“过时”功能,但这是用另一个名称不同的包替换一个包。您可以让多个 RPM 拥有一个对象,但这主要用于目录,例如 /etc/bash_completion.d,具体取决于您使用的发行版:它们的打包准则都略有不同。