![如何处理 dpkg 降级后本应存在但被删除的文件](https://linux22.com/image/167532/%E5%A6%82%E4%BD%95%E5%A4%84%E7%90%86%20dpkg%20%E9%99%8D%E7%BA%A7%E5%90%8E%E6%9C%AC%E5%BA%94%E5%AD%98%E5%9C%A8%E4%BD%86%E8%A2%AB%E5%88%A0%E9%99%A4%E7%9A%84%E6%96%87%E4%BB%B6.png)
我们有一个基于 Raspberry Pi/Raspbian 的产品,并使用 Debian 软件包来推出软件升级(用 Python 编写)。
我在正确安装新软件包时遇到问题,特别是在提供有效的降级路径方面。我是 Debian 的普通用户,但对包管理领域还是个新手。
我们的包中有一些文件和脚本/usr/local/bin
。然而,这些文件是不是DEBIAN
包文件夹的一部分。它们在我们产品的生产过程中被复制到 SD 卡上。
我现在创建的包需要替换这些文件之一,因此我DEBIAN/usr/local/bin
在包中创建了一个文件夹,其中包含新文件。
这对于使用我的新软件包进行升级来说效果很好,但是当降级,dpkg
删除新文件并尝试删除该/usr/local/bin
文件夹,因为就其而言,它们以前不存在。旧版本的软件包需要该文件,因此无法正确安装和运行。
我尝试使用pre\post inst\rm
新包中的脚本在安装时复制文件,然后在删除时将其复制回来,但我的理解是,操作的顺序意味着这不会成功,因为删除发生在新包之后包已运行其所有脚本。
有没有办法防止降级期间删除该文件?
我希望我已经把问题说清楚了。
答案1
我的解决方案几乎是@muru 在评论中建议的:
- 将新文件放入
/opt/appname/bin
包中 - 在 中
postinst
,备份文件/usr/local/bin
并替换为 的符号链接/opt/appname/bin
。 - 在 中
postrm
,删除符号链接并恢复备份(如果存在)。