将RPM包中的二进制文件(.so)从32位更改为64位似乎会导致rpm将其视为multilib包。结果是,当使用" rpm -U"安装新版本时,旧版本的软件包 not 未安装。这对我们来说是一个问题,因为在rpm升级期间必须删除旧版本的文件。手动卸载旧版本不是一种选择
我们可以在rpm spec文件中使用任何配置来防止rpm被视为multilib包吗?我们使用CentOS 7。
我们尝试的一件事是" Obsoletes"在rpm规范文件中标记,但这不会导致卸载旧版本。
答案 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)的东西,然后过时提供。 如果没有这样的提供,您可以分两步完成:
重建您的旧包裹,缓冲释放,手动放置
提供:somethig_just_for_upgrade(x86-32)
然后将此软件包放入您的仓库中,以便客户升级到此软件包。
加入你的64位软件包:
废弃:somethig_just_for_upgrade(x86-32)< = 1.0.0
因此,在下一次升级中,客户将升级到64位版本。