我计划对在几台服务器上供内部使用的 Debian 软件包进行连续更新。
现在,更新必须在不同时间相继进行,并且某些服务器可能会跳过多个版本,因此不能假设给定的服务器已经发生了更新。
所以,我知道 Debian 打包的基础知识,但我可能会跳过一些可以帮助我的高级功能。
我现在唯一的想法是使用一个相当复杂的 preinst 和 postinst 脚本来完全处理 oldversion-newversion 的所有范围。
有更好的主意吗?
答案1
作为一名 Debian 开发人员,通常您在存档中只会有一个版本的软件包,因此拥有多个必须按顺序安装的版本并不是理想的解决方案,也不是任何接近优雅的解决方案。安装前和安装后脚本可用于自动执行某些升级功能,但您需要在不同版本之间密切维护这些脚本才能使其正常工作,并且如果您尝试删除或降级,除非您对脚本进行了适当的验证,否则可能会导致问题。
如果您有需要单独维护的更改以确保它们按顺序完成,您可以使用可以安装并依赖于最新实际包的主“元”包。然后,您需要为每个更改生成单独的包,并设置适当的控件以确保正确的顺序。这需要对Debian 政策完成,特别注意部分5.6.10Pre-Depend
关于包关系,就像您在以前的更新包中需要的那样。
单独的软件包可能需要更多工作,但可以让您逐步完成工作,但最理想的方式是让软件包能够自动识别并进行必要的更改。如果配置文件尚未使用,则ucf
建议这样做,因为如果以后执行手动修改/更新,这将使在软件包中管理它们变得更容易。
编辑更新:
当我睡醒后回来重读这篇文章时,我注意到你正在谈论正在更新的数据库。在这种情况下,我认为打包可能会简单得多,前提是你的数据库本身具有某种形式的版本控制模式,并且顺序更新位于单独的文件中,只需针对数据库执行即可。然后,只需添加一个新的命令文件,以根据存储在数据库表中的版本按顺序执行即可。这不再一定是打包问题,而是数据库管理问题。包所要做的就是有适当的前置和后置脚本来检查现有数据库版本,并执行包中必要的 SQL 命令脚本以使其更新。