为什么 rpm 重新安装在 %post 部分之后执行 %postun

why does rpm reinstall executes %postun after %post section

我有一个示例 rpm 规格文件,例如

Name:           helloworld
Version:        2.0
Release:        2%{?dist}
Summary:        Simple Hello World rpm
License:        Internal
Source0:        helloworld-src.tar.bz2

%description

%prep
%setup -c -q -T -D -a 0

%build

%install
echo "Install command ..."

%post
echo "post command..."

%postun
echo "postun command..."


%files
%doc
%changelog

当我执行rpm -i helloworld.rpm时,输出是

post command...

但是当我执行rpm --reinstall helloworld时,输出是

post command...
postun command...

这是为什么?我期待 postunpost 被调用之前被调用。 我在哪里可以找到 rpm --reinstall 期间将调用哪些 scriplet?

因为重装就像是升级;安装新的,卸载旧的,触发 %postun。来自 Fedora's excellent packaging guidelines 的完整序列显示您正在执行第 4 步和第 11 步:

  1. 新包的 %pretrans
  2. 新包的 %pre
  3. (软件包安装)
  4. %post 的新包
  5. 其他包的触发因素(通过安装新包触发)
  6. 新包的 %triggerin(如果有的话)
  7. 旧包的%triggerrun(如果是卸载旧包触发的)
  8. 其他包的%triggerrun(卸载旧包触发)
  9. 旧包的 %preun
  10. (删除旧包)
  11. %postun 旧包
  12. %triggerpostun of old package(如果是卸载旧包引起的)
  13. %triggerpostun 其他软件包(如果它们是通过卸载旧软件包触发的)
  14. %post新包的传输