我的应用程序位于三个不同的rpm
包中,我编写了它的.spec
文件,安装按预期工作,dnf remove
删除包并清理其配置文件等,根据需要引入依赖项等等。但是我注意到,dnf upgrade
这样做时确实会用新文件覆盖旧文件(如预期的那样),但也会以某种方式删除我的配置文件。我的理解是,dnf upgrade
不会先删除然后安装软件包,而是在旧文件之上安装新文件。这是交易日志dnf
:
Running transaction
Preparing : 1/1
Running scriptlet: my-app-libs-0.1.0.0-0071.x86_64 1/1
Upgrading : my-app-libs-0.1.0.0-0071.x86_64 1/6
Upgrading : my-app-hooks-0.1.0.0-0071.x86_64 2/6
Upgrading : my-app-0.1.0.0-0071.x86_64 3/6
Running scriptlet: my-app-0.1.0.0-0071.x86_64 3/6
Running scriptlet: my-app-0.1.0.0-0048.x86_64 4/6
Cleanup : my-app-0.1.0.0-0048.x86_64 4/6
Running scriptlet: my-app-0.1.0.0-0048.x86_64 4/6
Cleanup : my-app-hooks-0.1.0.0-0048.x86_64 5/6
Cleanup : my-app-libs-0.1.0.0-0048.x86_64 6/6
Running scriptlet: my-app-libs-0.1.0.0-0048.x86_64 6/6
Verifying : my-app-libs-0.1.0.0-0071.x86_64 1/6
Verifying : my-app-libs-0.1.0.0-0048.x86_64 2/6
Verifying : my-app-hooks-0.1.0.0-0071.x86_64 3/6
Verifying : my-app-hooks-0.1.0.0-0048.x86_64 4/6
Verifying : my-app-0.1.0.0-0071.x86_64 5/6
Verifying : my-app-0.1.0.0-0048.x86_6 6/6
我想知道什么是清理上面的阶段正在做。以及脚本的作用运行脚本实际上调用?
答案1
在安装、升级和卸载时调用触发器。 “升级”实际上是卸载旧版本,然后安装新版本。触发器有一个标志 ( $1
),指示是否升级。完整的描述位于https://docs.fedoraproject.org/en-US/packaging-guidelines/Scriptlets/
我在规范文件中使用以下内容:
%post
if [ $1 == 1 ]
then
# first time install, rather than upgrade
fi
%postun
if [ $1 == 0 ]
then
# actual uninstall, rather than upgrade
fi