Troy Dawson

撰写评论

+1 票给 KSnapshot(对于我们这些仍然运行 KDE 4 的人来说)

非常好的文章,谢谢你。
关于 %pre %post 语句,请非常非常小心。在进行更新时,%pre、%post 和其他脚本的顺序并非按照许多人认为的顺序发生。以下内容可在触发器文档末尾找到 ( cat /usr/share/doc/rpm*/triggers )
----
作为参考,以下是单个
软件包升级时脚本的执行顺序

\verbatim
all-%pretrans
...
any-%triggerprein (由新安装触发的其他软件包的 %triggerprein)
new-%triggerprein
new-%pre 用于正在安装的新软件包版本
... (所有新文件都已安装)
new-%post 用于正在安装的新软件包版本

any-%triggerin (由新安装触发的其他软件包的 %triggerin)
new-%triggerin
old-%triggerun
any-%triggerun (由旧卸载触发的其他软件包的 %triggerun)

old-%preun 用于正在删除的旧软件包版本
... (所有旧文件都已删除)
old-%postun 用于正在删除的旧软件包版本

old-%triggerpostun
any-%triggerpostun (由旧卸载触发的其他软件包的 %triggerpostun)
install)
...
all-%posttrans
\endverbatim
----

当您看到这个时,您的第一个想法应该是 *哎哟*,我怎样才能让我的更新按照我想要的方式工作。
当每个脚本运行时,它们会传递已安装软件包的实例数量。这有什么帮助呢?
它允许您执行 if 语句来确定是否应该运行脚本。

%postun
echo "%name-%version-%release : POSTUN : \$1=$1"
if [ "$1" -eq 0 ] ; then
echo " 我们是最后一个 rpm,我们应该真正运行我们的脚本"
fi
if [ "$1" -ge 1 ] ; then
echo " 我们不是最后一个 rpm,谨慎运行我们的脚本"
fi

我刚刚把我的 testrpm spec 文件上传到 github,如果您想要更好的一组关于脚本何时运行的示例。多年来,每当我对我哪个脚本在何时运行不清楚时,我都会使用这些文件。
https://github.com/tdawson/testrpm

© 2025 open-source.net.cn. All rights reserved.