rpmスクリプトレットから削除するバージョンを取得するには?

rpmスクリプトレットから削除するバージョンを取得するには?

次のシナリオがあります。

  1. インストール後にカスタムタスクを実行するパッケージバージョン1をインストールしました(一部のファイルを特定の場所にコピー)。
  2. 同じパッケージのバージョン2をインストールしました。
  3. バージョン1を削除したいです。クリーンアップするには、コピーされたファイルをクリーンアップするためにアンインストール後に正しいバージョンを知る必要があります。

rpmスクリプトレットからバージョン番号を取得する方法はありますか?

答え1

%ファイルの関連バージョンでスクリプトを呼び出しますrpm。したがって、バージョン 1.0 から 1.1 にアップグレードする場合、事前/事後インストールスクリプトはバージョン 1.1 rpms で実行され、事前/事後削除スクリプトはバージョン 1.0 で実行されます。

これにより、スクリプトが独自のバージョンを正しく処理しやすくなります。

たとえば、次はSPECファイルから抜粋したものです。

%pre
echo Pre called with version %{version}-%{release}

%post
echo Post called with version %{version}-%{release}

%preun
echo Pre-un called with version %{version}-%{release}

%postun
echo Post-un called with version %{version}-%{release}

それらは非常に簡単で、これを示すためのものです。この値は、rpmを構築するときにrpmに含まれます。

例えば

% rpm -q --scripts -p sweh-test-1.0-0.x86_64.rpm 
preinstall scriptlet (using /bin/sh):
echo Pre called with version 1.0-0
postinstall scriptlet (using /bin/sh):
echo Post called with version 1.0-0
preuninstall scriptlet (using /bin/sh):
echo Pre-un called with version 1.0-0
postuninstall scriptlet (using /bin/sh):
echo Post-un called with version 1.0-0

それでは、このパッケージのバージョン1.0.0をインストールしてみましょう。

% sudo rpm -i sweh-test-1.0-0.x86_64.rpm 
Pre called with version 1.0-0
Post called with version 1.0-0

これまではとても面白かったです。インストール前/インストール後にスクリプトを実行します。

それでは、バージョン1.1にアップグレードしてみましょう。

% sudo rpm -U sweh-test-1.1-0.x86_64.rpm
Pre called with version 1.1-0
Post called with version 1.1-0
Pre-un called with version 1.0-0
Post-un called with version 1.0-0

呼び出しの順序とバージョン番号に注意してください。インストール前/インストール後を呼び出すと、バージョンリリースは新しいバージョンと一致します。次に、以前のバージョン番号を使用してインストール前/削除後を呼び出します。

だからアイデアはあなたが必要ではないということです派生%マクロを使用して、この情報をrpm仕様ファイルに直接含めることができます。

答え2

間接的。インストールすると、rpmデータベースがロックされます。最も簡単な方法は、この情報を維持するためにrpmにテキストファイルとして提供することです。

関連情報