![RPM:在 %post 中创建的文件在升级过程中丢失](https://linux22.com/image/209753/RPM%EF%BC%9A%E5%9C%A8%20%25post%20%E4%B8%AD%E5%88%9B%E5%BB%BA%E7%9A%84%E6%96%87%E4%BB%B6%E5%9C%A8%E5%8D%87%E7%BA%A7%E8%BF%87%E7%A8%8B%E4%B8%AD%E4%B8%A2%E5%A4%B1.png)
在我的.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
,然后修补软件以创建该文件(如果该文件不存在)。理想情况下,文件的路径应该是可配置的,以便管理员可以选择将其放置在更快或更不可靠的存储上。