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
。が必要かどうかを把握するので、いくつかの賢い方法を試して、後でスクリプトがサービスを再起動できるまでサービスを実行状態にしてサービスのダウンタイムを短縮することです。