我试图了解包(rpm、deb、dpkg)的创建如何工作以及该架构支持和不支持什么。
现在,我很难弄清楚当软件包的安装或升级在过程的不同点失败时会发生什么 - 即,脚本错误,没有足够的磁盘空间(在开始之前检查过吗?) -。
根据我目前的理解,如果有的话,不会自动回滚到以前的工作版本。所以我的问题是,包如何处理这种情况?如果发生某些错误,脚本是否根本不用于备份文件并在事务后恢复它们? (到目前为止我找不到例子)
谢谢。
答案1
对于 Debian(通常是衍生版本),这在有关维护者脚本的 Debian 政策章节和相应的流程图。错误由dpkg
(处理包提取等的工具)和维护者脚本结合处理。
升级包时:
- 调用现有包的预删除脚本
- 新软件包的预安装脚本被调用
- 新包的文件已解压
- 调用现有包的删除后脚本
- 现有包的文件被删除
- 新软件包的安装后脚本被称为
在任何时候,都会处理错误,并使用“撤消”参数调用各种维护者脚本来恢复之前步骤中所做的更改。最终,包可能会处于以下状态之一:
- 在新版本中完全安装(当一切顺利时)
- 完全安装在现有版本中(当出现故障但所有更改都可以撤销时)
- 已解压,需要配置
- 失败,需要重新安装
对于许多包来说,默认处理就足够了,不需要维护者脚本的帮助。其他包要复杂得多,例如那些在版本之间数据库和架构发生变化的版本(请参阅维护者slapd
脚本例如);在某些情况下,他们实际上不会自己处理中止的升级,而是会留下现有状态的备份并要求管理员解决问题。