在卸载 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 完成所有工作为你记账...
安装 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 完成所有工作为你记账...