如何防止将RPM视为multilib包

时间:2015-08-12 15:31:10

标签: linux rpm rpmbuild centos7 rpm-spec

将RPM包中的二进制文件(.so)从32位更改为64位似乎会导致rpm将其视为multilib包。结果是,当使用" rpm -U"安装新版本时,旧版本的软件包 not 未安装。这对我们来说是一个问题,因为在rpm升级期间必须删除旧版本的文件。手动卸载旧版本不是一种选择
我们可以在rpm spec文件中使用任何配置来防止rpm被视为multilib包吗?我们使用CentOS 7。

我们尝试的一件事是" Obsoletes"在rpm规范文件中标记,但这不会导致卸载旧版本。

2 个答案:

答案 0 :(得分:0)

Conflicts会强制最终用户删除之前的包。

答案 1 :(得分:0)

E.g。在我的系统上,我有这两个multilib包:

$ rpm -q --provides libpcap-1.7.3-1.fc22.i686
libpcap = 14:1.7.3-1.fc22
libpcap(x86-32) = 14:1.7.3-1.fc22
libpcap.so.1
$ rpm -q --provides libpcap
libpcap = 14:1.7.3-1.fc22
libpcap(x86-32) = 14:1.7.3-1.fc22
libpcap.so.1
libpcap = 14:1.7.3-1.fc22
libpcap(x86-64) = 14:1.7.3-1.fc22
libpcap.so.1()(64bit)

我的系统是64位。所以当我使用时:

Obsolete: libpcap

rpm只会试图淘汰64位版本。你必须使用:

Obsolete: libpcap(x86-32)

哪个应该取代32位版本。 所以只要查询你的旧包,如果它提供(x86-32)的东西,然后过时提供。 如果没有这样的提供,您可以分两步完成:

  1. 重建您的旧包裹,缓冲释放,手动放置

    提供:somethig_just_for_upgrade(x86-32)

    然后将此软件包放入您的仓库中,以便客户升级到此软件包。

  2. 加入你的64位软件包:

    废弃:somethig_just_for_upgrade(x86-32)< = 1.0.0

    因此,在下一次升级中,客户将升级到64位版本。