在卸载 rpm 之前检查更新版本

Check for newer version before uninstalling rpm

安装 rpm 时,如果已经安装了更新版本,安装将停止。

如何在规范文件的 %postun 部分实现相同的逻辑?

在上图中,我希望用户只能卸载最新的升级。

编辑以回应 Chris Maes 的评论

是的,这是一种奇怪的方法。但是使用 rpm -Uvh <rpm-name> 升级会卸载以前的版本。但是我们也希望允许用户回滚到以前的版本。

假设,连续升级了3次,分别是升级A、B、C。

用户可能想要卸载 C 并返回 B,甚至可能是 A。

使用rpm -U方式,在升级C之后,我们没有办法逐步从C降级到B,然后再降级到A。所以我们决定通过这种方式,在每次升级安装时,我们将备份更改的文件。在降级时,我们可以简单地替换之前升级的文件。

但是,我们要确保用户在卸载时遵循相同的顺序。

我使用的方法可能是错误的。请随时提出替代方案。

有 upgrade/downgrade 个可执行文件和 upgrade/downgrade 个数据。你把这两者混在一起了。

当然 mayur-upgrade-x-y.x86_64.rpm 会知道任何早于 x-y 的东西。所以我建议你只有一个 mayur-upgrade。如果用户降级 mayur,他应该调用 mayur-upgrade X-Y(甚至可以检测到这个版本),这将 upgrade/downgrade 他的数据。并且您在该脚本的控制之下,然后由您按正确的顺序编写代码。

如果您的更新包含在一个文件(或一堆文件中;为简单起见,下面命名为 upgrade.file),我看不到方法中的问题:

  • 让您的所有 mayur-upgrade-x-y.rpm 在您的存储库中可用
  • mayur-升级安装 upgrade.file

现在,如果你安装 mayur-upgrade-1.4;它将安装 upgrade.file(版本 1.4)。当您现在强制降级时(使用 zypper in -f mayur-upgrade-1-2;然后 rpm 文件管理系统将自动删除您的 upgrade.file(版本 1.4)并重新安装 upgrade.file(版本 1.2)。所以 rpm 完成所有工作为你记账...