代码之家  ›  专栏  ›  技术社区  ›  Stephen

rpm:如何允许w/o触摸旧包在具有不同名称的旧包和新包之间无缝切换

  •  -1
  • Stephen  · 技术社区  · 6 年前

    简而言之,我想实现不同名称的新旧包之间的无缝切换。但是,我希望在不接触旧包的spec文件的情况下实现这一点。无缝交换包括依赖于新的或旧的包的其他包不必仅仅因为交换而被移除和重新安装。

    我将要向一个基于Redhat的Linux发行版添加Y。然而,发行版中早就有一个包X了。它们是同一套软件,有许多文件安装在同一个位置,等等。唯一的主要区别是版本。X是一个相对古老和稳定的版本。Y与开源社区刚刚发布的版本几乎相同。比如说,软件是Foo,X是foo1.4,而Y是foo2.1。

    问题是我想尽量避免修改X。我可以用Y的规范文件做任何事,等等。

    将“Obsoletes:X”添加到Y允许安装Y自动删除X,而无需接触依赖于X或Y的任何其他软件包。我真的很想做同样的X,但不能触摸的规格文件的X。

    将“Conflicts:X”添加到Y会强制用户在安装X之前先“remove”Y。问题是,当用户删除Y时,所有依赖于X或Y的软件包都会随Y一起消失。X还没有安装,Y就要消失了。因此,它们既没有X也没有Y。这就是我想避免的。

    how to make an existing rpm obsolete a new rpm without modify the existing rpm's spec file

    那是几天前的事了,我几乎一无所知。有人建议我在Y的spec文件中使用“Conflicts:X”。后来,我发现了另一个问题,即应该删除第三方包&当我从Y切换回X时重新安装。这让我提出了这个新问题。这里的答案确实解决了我的问题。我老问题的答案对我帮助很大,但并没有完全解决我的问题。

    1 回复  |  直到 6 年前
        1
  •  1
  •   msuchy    6 年前

    如中所述 https://fedoraproject.org/wiki/Packaging:Guidelines#Renaming.2FReplacing_Existing_Packages :

    Provides: oldpackagename = $provEVR
    Obsoletes: oldpackagename < $obsEVR
    

    yum swap package_to_remove package_to_install
    

    用你的术语来说:

    yum swap Y X
    

    然而,如果你的回购中有Y,那么 yum upgrade

    如果你想去那里和回来,并有精确的控制什么你安装在一台机器上,我建议卡泰洛项目-或红帽卫星,如果你想要支持。