preinst 和 prerm 脚本应该停止哪些服务?

preinst 和 prerm 脚本应该停止哪些服务?

Debian 手册 (https://www.debian.org/doc/manuals/debian-faq/ch-pkg_basics.en.html#s-maintscripts) 说以下内容preinst

许多“preinst”脚本会停止正在升级的软件包的服务,直到其安装或升级完成

这关于prerm

此脚本通常会停止与包关联的任何守护程序。

据我了解,升级将调用prerm旧包和preinst新包,并且仅在删除包时prerm才会调用。

那么,如果我创建一个包含服务的 debian 软件包,是否有任何充分的理由更喜欢preinst使用prerm?或者我两者都需要?

答案1

您链接到的文档是常见问题解答,虽然相关,但不一定被视为权威(尽管区别可能很微妙,任何不一致实际上都是一个错误)。权威文档是 Debian Policy Manual,其中有一个整章专门讨论维护者脚本。因为这并不那么容易阅读,所以有wiki 上有用的图表它解释了维护者脚本之间的关系。

基本上,唯一的脚本需要停止匹配包中的服务是prerm;正如您所指出的,在删除软件包以及升级软件包时会调用此脚本。在某些情况下,重要的一点是prerm默认使用已安装包的脚本;如果在升级之前失败,打包系统也会尝试升级的prerm脚本。

preinst总是在升级期间出现prerm,并且在运行时服务应该停止。为了确定起见,某些软件包的preinst脚本确实会尝试再次停止服务;这方面的例子包括mysql-server-5.6timidity,但数量并不多。

所以总而言之,你必须在 中停止你的服务prerm,你也可以在 中这样做preinst(尽管实际上没有必要);你一定不能偏爱preinst这个prerm,而且你不需要两者兼而有之。我只想用prerm.

(严格来说,我应该澄清,《政策手册》是描述性的而不是规定性的,因为它记录了当前的实践而不是定义它——所以它并不像你想象的那样具有权威性,并且实践在记录之前确实在发展。但是在这种特殊情况下,策略是准确的,因为知道prerm是否需要升级,所以可能会尝试一些巧妙的技巧并让服务保持运行状态,直到稍后的脚本可以重新启动它们,以减少服务。停机;但这只是自找麻烦。)

相关内容