Rpm

如何在 rpm scriptlet 中獲取要解除安裝的版本?

  • August 21, 2016

我有以下情況:

  1. 我安裝了一個包的第 1 版,它在安裝後執行自定義操作(將一些文件複製到某個位置)
  2. 我安裝了同一個包的第 2 版
  3. 我想解除安裝版本 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 規範文件中。

引用自:https://unix.stackexchange.com/questions/304836