我怎样才能告诉 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 上找到答案,感谢任何帮助或指向我错过的类似问题的链接。
我们可以使用一些命令来帮助我们保持包依赖和删除包。
删除包而不删除依赖项。
sudo dpkg -r --force-depends
删除包含配置文件的包,不删除依赖。
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
我制作的一个 debian 包覆盖了属于其他包的文件(使用 --force-overwrite 选项)。我意识到这很糟糕,但在从包中删除这些文件、构建并重新安装后,它将 删除 这些文件,因为它认为我的包拥有这些文件并且不再需要它们。
我需要 dpkg 忘记我的包曾经知道这些文件,这样我就可以 remove/purge/install 而无需再考虑这些文件。
请注意,此软件包仅用于部署在我控制的系统上,而不是分发给客户端,因此可以接受修改已安装的软件包,只要我可以将其恢复到正常状态即可。
无法在 Whosebug 或 here 上找到答案,感谢任何帮助或指向我错过的类似问题的链接。
我们可以使用一些命令来帮助我们保持包依赖和删除包。
删除包而不删除依赖项。
sudo dpkg -r --force-depends
删除包含配置文件的包,不删除依赖。
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