首页 文章

如何创建一个废弃32位软件包的64位rpm软件包?

提问于
浏览
0

我有一个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 .

1 回答

  • 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 .

相关问题