RPM:在 %post 中创建的文件在升级过程中丢失

RPM:在 %post 中创建的文件在升级过程中丢失

在我的.spec文件中,我创建目录并在阶段中触摸文件%post

%post
mkdir -p %{sharedstatedir}/my_app
touch %{sharedstatedir}/my_app/my_app_file.txt

但是dnf upgrade my_app /var/lib/my_app,其内容将被删除并且不会再次重新创建。我想我可以制作%{sharedstatedir}/my_app%{sharedstatedir}/my_app/my_app_file.txt的一部分,即将它们添加到部分中,但是还有另一种方法,例如%files重新创建文件吗?%post我并不关心 my_app_file.txt 的内容是否丢失,它用作临时存储。

答案1

您可以添加一个空文件,声明一个安装对象%config属性,以便在执行更新之前其内容在磁盘上发生更改时保持不变。

但老实说:不要滥用%config命令或运行代码来%post创建可变的共享状态文件(最终位于 /var/lib 中);我的猜测是 rpmlint 会抱怨你打算做什么,并且它会注意它,至少当你使用时%config。当临时文件不存在时,应该由软件本身创建一个临时文件!因此,只需%file创建目录%{sharedstatedir}/my_app,然后修补软件以创建该文件(如果该文件不存在)。理想情况下,文件的路径应该是可配置的,以便管理员可以选择将其放置在更快或更不可靠的存储上。

相关内容