我怎样才能告诉 debian 包忘记一个文件(这样文件就不会在清除或删除过程中被删除)?

How can I tell a debian package to forget about a file (such that the file doesn't get deleted during a purge or remove)?

我制作的一个 debian 包覆盖了属于其他包的文件(使用 --force-overwrite 选项)。我意识到这很糟糕,但在从包中删除这些文件、构建并重新安装后,它将 删除 这些文件,因为它认为我的包拥有这些文件并且不再需要它们。

我需要 dpkg 忘记我的包曾经知道这些文件,这样我就可以 remove/purge/install 而无需再考虑这些文件。

请注意,此软件包仅用于部署在我控制的系统上,而不是分发给客户端,因此可以接受修改已安装的软件包,只要我可以将其恢复到正常状态即可。

无法在 Whosebug 或 here 上找到答案,感谢任何帮助或指向我错过的类似问题的链接。

我们可以使用一些命令来帮助我们保持包依赖和删除包。

  1. 删除包而不删除依赖项。

    sudo dpkg -r --force-depends

  2. 删除包含配置文件的包,不删除依赖。

    sudo dpkg -P --force-depends

我强烈不推荐这个东西,因为有时 依赖性可能会在未来造成问题。

我总是喜欢在卸载软件包时卸载所有依赖项

如果您的包损坏了,那么您可以使用以下命令来解决问题。

修复损坏的包

sudo apt install -f

我已经根据这个article回答了这个问题。

发现 dpkg 在此处存储了每个已安装包的文件列表:

/var/lib/dpkg/info/mydpkg.list

似乎是软件包安装的每个目录和文件的列表,例如

/etc/udev
/etc/udev/rules.d
/etc/udev/rules.d/95-serial485-pi3.rules
/etc/udev/rules.d/97-serial485-pi4.rules

修复: sudo vim /var/lib/dpkg/info/mydpkg.list 并删除我希望我的包忘记的文件行,因此在卸载(或安装新版本的不再有这些文件的包。)不清楚是否有必要删除引用父目录的行(例如上面的 /etc/udev 和 /etc/udev/rules.d)。

奖励: 我通过在列出这些文件的命令上使用 strace 找到了这个,找出它从哪里获取信息:

strace dpkg-query -L mydpkg

取自此处: https://unix.stackexchange.com/questions/200171/where-does-dpkg-l-gather-its-information