29

プロジェクトの RPM をアップグレードしています。問題は、projectname-1.0-0 から projectname-1.0-1 にアップグレードすると、最初に新しいプロジェクトがインストールされ、古いプロジェクトがアンインストールされるため、全体としてプロジェクトが完全に削除されることです。アップグレード中に「vv」オプションを使用したところ、インストール後にアンインストールが行われたことが出力に示されました。

誰かこの問題を助けてください。RPM 仕様または rpmbuild オプションで特に変更する必要があるものはありますか?

4

4 に答える 4

64

はい。RPM アップグレードが発生すると、RPM は最初にパッケージの新しいバージョンをインストールし、次にパッケージの古いバージョンをアンインストールします。古いパッケージのファイルのみが削除されます。ただし、スクリプト (つまり、%pre、%post、%preun、%postun) は、アップグレードを処理しているのか、単純なインストールまたはアンインストールを処理しているのかを知る必要があります。

rpm コマンドは、1 つの引数 ($1) をスクリプトに渡します。これは、インストールされているパッケージのバージョン数のカウントです。以下の表 (Eric Foster-Johnston による RedHat RPM ガイドから) は、可能な値のサンプルを提供します。

Install the first time:          1
Upgrade:                         2 or higher 
                                 (depending on the number of versions installed)
Remove last version of package:  0

したがって、%preun では、サービスを削除する前に "$1 = 0" かどうかを確認する必要があります。

詳細 (およびより良い表) については、http: //docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s04s05.htmlを参照してください。

于 2011-11-09T22:19:27.370 に答える
6

はい。rpmのインストール中に、%installスクリプトと%postスクリプトが呼び出されます。インストールが正常に完了すると、%preunスクリプトと%postunスクリプトが呼び出され、以前のバージョンのrpmがアンインストールされます。適切に処理されない場合、これらの%preunおよび%postunスクリプトは、%installおよび%postスクリプトによってもたらされた変更を操作する可能性があります。

rpmは、インストールされているrpmバージョンの数を区別するために、適切な値で$1引数を設定します。projectname-1.0-0の新規インストール中に、%installおよび%postスクリプトが呼び出されます。$ 1は1に設定され、これが唯一のアクティブなバージョンであることを示します。projectname-1.0-1にアップグレードすると、%installおよび%postスクリプトが$ 1を2に設定して呼び出されます。その後、%preunおよび%postunスクリプトが$ 1を1に設定して呼び出され、projectnameの内容がクリーンアップされます。 -1.0-0。したがって、$ 1の値に基づいてスペックファイルを作成することで、アップグレードを効果的に処理できます。

于 2011-10-07T20:14:47.807 に答える
0

アップグレード時にアンインストール セクションがどのように機能するかを理解することが重要です。

pre、post、unpre、unpost でチェックできる変数 $1 があります (その値は、インストール、アップグレード、アンインストールによって異なります)。

例えば:

In Pre/post
if $1 == 1 initial installation
if $1 == 2 upgrade

In preun/postun
if $1 == 0 uninstall
if $1 == 1 upgrade

abc-1 をバージョン 1 からバージョン 2 (abc-2) にアップグレードすることを検討してください

Run %pre from "abc-2".
Run %post from "abc-2".
Run %preun from "abc-1".
Run %postun from "abc-1".
于 2018-08-19T11:46:05.710 に答える