我有一个32位应用程序,我最近移植到64位并为它创建了一个新的x86_64 rpm包。我希望有能力用新的x86_64软件包替换旧的i386软件包,作为64位机器上正常升级过程的一部分。
但是,当我尝试将旧的i386软件包升级到x86_64软件包(rpm -Uv MyPackage.version-release.x86_64)时,由于文件冲突,升级失败。如果我在升级命令中添加了--replacefiles标志,升级成功,但当我查询rpm DB(rpm -q MyPackage)时,我看到两个已安装的软件包:
MyPackage.version-release.i386
MyPackage.version-release.x86_64
我尝试在x86_64包的spec文件中添加“Obsoletes”标签,但似乎一个arch的包不能从另一个arch中淘汰包。
我还尝试显式删除x86_64%postinstall脚本的i386软件包,因为rpm锁定机制失败了(无法从rpm内部调用rpm ...)
有没有办法在软件包安装\升级过程中执行此操作?
谢谢, Tzippi。
答案 0 :(得分:2)
假设你的i386的最后一个包有1.1版。创建这个新包:
BridgeForMyPackage.spec:
Version: 1
BuildArch: noarch
Obsoletes: MyPackage < 1.2
Provides: MyPackage = 1.2
Provides: AnyOtherProvideWhichAreInOriginalPackage
这将成为迁移的桥梁,甚至可能都没有安装。然后创建:
MyPackage.spec:
Version: 1.3
Obsoletes: BridgeForMyPackage < 2
因此,Yum将选择从MyPackage-1.1.i386迁移到BridgeForMyPackage-1.noarch并立即迁移到MyPackage-1.3.x86_64。