rpmのアンインストール/アップグレードの前にinitvサービスを停止する必要がありますか?

rpmのアンインストール/アップグレードの前にinitvサービスを停止する必要がありますか?

サービスを中断する必要がありますか?今後サービス用RPMパッケージを削除またはアップグレードしますか?

通常、RPMパッケージマネージャは新しいパッケージをインストールし、アップグレードを実行すると古いパッケージを削除します。抜粋:

Run %pre from "software-2".
Place files from "software-2".
Run %post from "software-2".
Run %preun from "software-1".
Delete files unique to "software-1".
Run %postun from "software-1".

このような場合、新しいパッケージをインストールする前に%preでサービスを停止しないでください。

以下は参照用の仕様ファイルの一部です。

%preun
# do not run if this is an upgrade
if [ $1 -eq 0 ]; then
  /sbin/service myservice stop > /dev/null 2>&1
  /sbin/chkconfig --del /etc/init.d/myservice
fi
exit 0

%post
/sbin/chkconfig --add /etc/init.d/myservice
exit 0

私が持っているのは誰もがやっているようですが、まず%preでサービスを停止せずにアップグレードする場合、これが機能する理由を理解できません。

答え1

UNIXファイルシステムの動作方法を忘れました。リンクローダーがオブジェクトファイルを開いたままにする限り、プロセスは現在削除されているファイルへのハンドルを保持しているため、開始されたオブジェクトファイルを表示できます。ハンドルがclose()されると、ファイルは実際に削除されます。したがって、新しいオブジェクトファイルの削除とインストール中にデーモンを実行状態にしておくことは安全です。

もちろん、以前のバージョンのデーモンが実行されているため、セキュリティ上の問題を解決するためのアップグレードであれば、「セキュリティ」はそれほど安全ではありません。これがDebian APTが異なるポリシーを持ってアップグレードするときにデーモンを停止/起動する理由です。

あなたはこれを見つけることができます仕様パッケージのポリシーを変更したい場合は、RPMスクリプトレットが便利です。

関連情報