我们有一个基于 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
,删除符号链接并恢复备份(如果存在)。