rpm: 如何允许 w/o touching the old package seamless switch between old and new packages w/ different name
rpm: how to allow w/o touching the old package seamless switch between the old and new packages w/ different name
总之,我想实现不同名称的新旧包的无缝切换。但是,我想在不触及旧包的规范文件的情况下实现这一点。无缝切换包括依赖于新包或旧包的其他包将不必仅仅因为切换而被删除和重新安装。
我正准备将 Y 添加到基于 Redhat 的 Linux 发行版中。但是,发行版中早就有一个包 X。它们是同一套软件,在同一位置安装了很多文件等等。唯一的主要区别是版本。 X 是一个相对较旧且稳定的版本。 Y与开源社区刚刚发布的版本几乎相同。比如说,软件是 Foo,X 是 Foo 1.4,而 Y 是 Foo 2.1。
由于 Y 是一个实验版本,我们希望允许用户在 X 和 Y 之间来回无缝切换。换句话说,由于用户有一些依赖于 X 或 Y 的包,我们不希望用户在从 X 切换到 Y 以及从 Y 切换到 X 时必须删除并重新安装这些包。
问题是我想尽可能避免修改 X。我可以用 Y 的规范文件等做任何事情。
向 Y 添加 "Obsoletes: X" 允许安装 Y 自动删除 X,而无需触及依赖于 X 或 Y 的任何其他软件包。我真的很想对 X 做同样的事情,但不能触及规范X 的文件。
将"Conflicts: X"添加到Y会强制用户在安装X之前先"remove"Y。问题是当用户删除Y时,所有依赖于X或Y的软件包都随Y一起消失. X 尚未安装,Y 即将消失。因此,他们既没有X也没有Y。这是我想避免的。
%P.S。我在这里确实有一个类似的问题:
几天前的事了,一知半解。有人建议我在 Y 的规范文件中使用 "Conflicts: X"。后来,我发现了另一个问题,当我从 Y 切换回 X 时,应该删除并重新安装第三方包。这让我 post 有了这个新问题。这里的答案确实解决了我的问题。我的老问题的答案对我帮助很大,但并没有完全解决我的问题。
如https://fedoraproject.org/wiki/Packaging:Guidelines#Renaming.2FReplacing_Existing_Packages所述:
Provides: oldpackagename = $provEVR
Obsoletes: oldpackagename < $obsEVR
如果您想回到旧 X,可以使用:
yum swap package_to_remove package_to_install
在您的术语中:
yum swap Y X
但是,如果您的存储库中有 Y,那么 yum upgrade
将始终希望升级到 Y。
如果您想往返并精确控制您在机器上安装的内容,我推荐 Katello 项目 - 如果您需要支持,则推荐 Red Hat Satellite。
总之,我想实现不同名称的新旧包的无缝切换。但是,我想在不触及旧包的规范文件的情况下实现这一点。无缝切换包括依赖于新包或旧包的其他包将不必仅仅因为切换而被删除和重新安装。
我正准备将 Y 添加到基于 Redhat 的 Linux 发行版中。但是,发行版中早就有一个包 X。它们是同一套软件,在同一位置安装了很多文件等等。唯一的主要区别是版本。 X 是一个相对较旧且稳定的版本。 Y与开源社区刚刚发布的版本几乎相同。比如说,软件是 Foo,X 是 Foo 1.4,而 Y 是 Foo 2.1。
由于 Y 是一个实验版本,我们希望允许用户在 X 和 Y 之间来回无缝切换。换句话说,由于用户有一些依赖于 X 或 Y 的包,我们不希望用户在从 X 切换到 Y 以及从 Y 切换到 X 时必须删除并重新安装这些包。
问题是我想尽可能避免修改 X。我可以用 Y 的规范文件等做任何事情。
向 Y 添加 "Obsoletes: X" 允许安装 Y 自动删除 X,而无需触及依赖于 X 或 Y 的任何其他软件包。我真的很想对 X 做同样的事情,但不能触及规范X 的文件。
将"Conflicts: X"添加到Y会强制用户在安装X之前先"remove"Y。问题是当用户删除Y时,所有依赖于X或Y的软件包都随Y一起消失. X 尚未安装,Y 即将消失。因此,他们既没有X也没有Y。这是我想避免的。
%P.S。我在这里确实有一个类似的问题:
几天前的事了,一知半解。有人建议我在 Y 的规范文件中使用 "Conflicts: X"。后来,我发现了另一个问题,当我从 Y 切换回 X 时,应该删除并重新安装第三方包。这让我 post 有了这个新问题。这里的答案确实解决了我的问题。我的老问题的答案对我帮助很大,但并没有完全解决我的问题。
如https://fedoraproject.org/wiki/Packaging:Guidelines#Renaming.2FReplacing_Existing_Packages所述:
Provides: oldpackagename = $provEVR
Obsoletes: oldpackagename < $obsEVR
如果您想回到旧 X,可以使用:
yum swap package_to_remove package_to_install
在您的术语中:
yum swap Y X
但是,如果您的存储库中有 Y,那么 yum upgrade
将始终希望升级到 Y。
如果您想往返并精确控制您在机器上安装的内容,我推荐 Katello 项目 - 如果您需要支持,则推荐 Red Hat Satellite。