RPM specfile 中 值的研究
研究这个问题是因为论坛上的一个讨论:zypper reinstall package
略过楼主的实现是否正确不谈(因为他不给我看 specfile 估计是公司的软件),简单来说可以分成几个子问题:
第一个是 RPM specfile 的 %postun 部分的 $1 变量到底是什么:
if [ $1 == 0 ] ; then $1 的值当然是有意义的,它代表安装在你系统上的同名软件包的版本数。比如你升级软件包,那默认是 1,但在某个状态是 2,因为这时新包装上旧包还没卸载,0 就代表这个包在你系统上已经不存在了。
http://stackoverflow.com/questions/7398834/rpm-upgrade-uninstalls-the-rpm
第二个是 RPM reinstall 的作业流程是怎样的,是遵循升级的流程也就是:
软件包升级的过程是先安装新包后卸载旧包,只有来自旧包的差异文件会被删除。也就是 pre -> install -> post; preun -> uninstall -> postun
还是另有一个流程。$1 值的变化可以推测出这个问题的答案。
第三个是使用 zypper 和 rpm 分别进行重装,$1 值的变动是不是一致的。
这个问题我们需要做一个实证,代码在这里:
https://build.opensuse.org/package/show/home:MargueriteSu/rpm-reinstall-demo
相应的测试用 RPM 也可以在那边取得。下面直接上结果:
sudo zypper --no-refresh install --force rpm-reinstall-demo-0.0.0-5.1.x86_64.rpm drwxr-xr-x 1 root root 0 8 月 2 22:25 demo 通过 /var/tmp/demo 的时间戳记可以发现安装前后 demo 没有被删除重建。
Read more...