在%{pre}脚本部分的maximum rpm下,它提到使用%pre脚本很少见。实际上,它进一步指出(当时无论如何)400+ RedHat软件包中没有一个使用%pre脚本。
我认为%pre脚本是在当前安装的版本之上安装文件之前停止现有服务的理想位置。
我的想法错了吗? RedHat在任何服务包中为此目的从未在升级期间使用%pre而离开了吗?
答案 0 :(得分:2)
是%pre比使用"最大RPM"更常用。是在1997年写的。这并没有改变%pre应该被使用的事实"很少"。
原因是%pre会阻止安装(并可能导致整个安装 如果需要安装时间依赖性,则事务失败。)
在%pre中停止服务并在%post中重新启动会打开一个更大的窗口 服务未运行的地方而不是简单地在%post
中重新启动服务已在运行的服务通常会读取其配置文件 仅在启动时(因此rpm可以在守护程序运行时替换文件)。
运行的可执行文件在文件系统上有引用计数等等 即使已删除/替换已执行的文件,也会继续运行 通过更新的包装。
答案 1 :(得分:0)
嗯,在问这个问题之前,我去做了我应该做的研究。我从RedHat 7.1下载了几个服务包并运行:
rpm -qp --scripts <package-name>.rpm
我发现1)不再使用%pre不再是真的。即使在我检查过的少数几个使用%pre之前,2)似乎大多数服务只允许rpm在升级期间覆盖他们的数据文件和二进制文件,然后使用%postun的升级部分(卸载后)重启(或尝试重启)服务的脚本。
我原本以为这是相当不安全的,因为当您在升级过程中重写数据文件(尤其是)时,旧的运行服务可能会感到困惑。在我看来,最终在%pre升级期间停止服务更安全,并在%postun期间再次启动它...但那只是我。