根据 Debian 软件包维护者脚本文档install
,可以使用第一个参数或第一个参数调用预安装脚本upgrade
:
该
preinst
脚本可以通过以下方式调用:
new-preinst
安装new-preinst
安装旧版本 新版本new-preinst
升级旧版本 新版本
install old-version new-version
和 和有什么区别upgrade old-version new-version
?第一种形式(只是install
)似乎很清楚,但我不明白旧版本号和新版本号之间的区别install
以及指定的位置。upgrade
答案1
这在中进行了解释“详细信息”部分:
- 如果软件包已经完全安装,则使用旧版本和新版本
preinst
进行调用;upgrade
- 如果该软件包之前已安装,并且仍然具有其配置文件(处于“Config-Files”状态,IE它显示为
rc
的dpkg -l
输出),preinst
用install
和 旧版本和新版本调用; - 如果软件包是新安装的,或者之前被清除的,
preinst
则调用时install
不带版本信息。
由于preinst
在解包阶段之前运行,upgrade
表示包内容的先前版本可用,而install
表示包内容不存在任何版本(配置文件除外)。另外,如果提供版本信息,则表明可能有配置文件需要处理。
upgrade
和之间的差异并不install
显着,但确实令人想到的一种情况是涉及导出数据的升级。例如,在upgrade
模式下,slapd
导出preinst
其数据库;它无法在install
模式下执行此操作,因为不存在适当的工具。
答案2
考虑:
- 您安装软件包 A,版本 x。
- 您删除了软件包 A,但没有清除,因此配置文件、用户、组等仍然存在。
- 您安装软件包 A,版本 y。
现在维护者脚本需要处理这些配置文件、用户、组等,尽管严格来说,您不是在升级,而只是在安装。您可以在第二个流程图中看到这一点:“安装之前已删除但未清除的软件包”