次のシナリオがあります。
- インストール後にカスタムタスクを実行するパッケージバージョン1をインストールしました(一部のファイルを特定の場所にコピー)。
- 同じパッケージのバージョン2をインストールしました。
- バージョン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にテキストファイルとして提供することです。