如何处理 dpkg 降级后本应存在但被删除的文件

如何处理 dpkg 降级后本应存在但被删除的文件

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

相关内容