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

preinstもしそうなら、サービスが含まれているDebianパッケージを作成するときに使用することを好む理由はありますかprerm?それとも両方が必要ですか?

答え1

あなたがリンクした文書はよくある質問であり、関連性があるとしても必ずしも信頼できると見なされるわけではありません(違いが微妙であり、不一致が実際にはバグであるにもかかわらず)。権威ある文書はDebian Policy Manualです。章全体は管理者スクリプトに専念しています。。読みにくいので、Wikiの便利な図管理者スクリプト間の関係を説明します。

基本的に唯一のスクリプトは必要一致するパッケージでサービスを停止することは、指摘したprermようにパッケージがアップグレードされたときだけでなく、パッケージが削除されたときにもこのスクリプトが呼び出されます。場合によっては、インストールされているprermパッケージのスクリプトをデフォルトで使用することが重要です。アップグレード前に失敗した場合、パッケージングシステムもアップグレードされたprermスクリプトを試みます。

preinstアップグレード中は常に発生し、prerm実行中はサービスを停止する必要があります。確実にするために、一部のパッケージのpreinstスクリプトはサービスを再び停止しようとします。mysql-server-5.6そしてtimidity、しかし、多くはありません。

したがって、要約すると、サービスを停止する必要がありますが、prermこれを行うことができますpreinst(実際には必ずしも必要ではありません)。preinstこれを好むべきではなく、両方の操作をprerm実行する必要はありません。私はprerm

(厳密に言えば、政策マニュアルは、現在の慣行を定義するのではなく文書化するという点で、規定的ではなく説明的であることを明確にしなければなりませんprerm。が必要かどうかを把握するので、いくつかの賢い方法を試して、後でスクリプトがサービスを再起動できるまでサービスを実行状態にしてサービスのダウンタイムを短縮することです。

関連情報