Rpm
如何在 rpm scriptlet 中獲取要解除安裝的版本?
我有以下情況:
- 我安裝了一個包的第 1 版,它在安裝後執行自定義操作(將一些文件複製到某個位置)
- 我安裝了同一個包的第 2 版
- 我想解除安裝版本 1。為了能夠進行清理,我需要在解除安裝後知道確切的版本,以清理複製的文件。
有沒有辦法在 rpm scriptlet 中獲取版本號?
從文件的
%
相關版本呼叫腳本rpm
。因此,如果您從 1.0 版升級到 1.1,則安裝前/安裝後腳本從 rpm 的 1.1 版執行,解除安裝前/後安裝腳本從 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
注意呼叫順序和版本號;呼叫 pre/post install 並且 version-release 匹配新版本,然後使用舊版本號呼叫 pre/post uninstall。
所以想法是您不需要派生此資訊,您可以通過使用
%
宏將其直接包含在 rpm 規範文件中。