【问题标题】: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)? [closed]我如何告诉 debian 包忘记文件(这样文件在清除或删除期间不会被删除)? [关闭]
【发布时间】:2021-04-21 22:42:27
【问题描述】:

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

我需要 dpkg 忘记我的包曾经知道这些文件,这样我就可以删除/清除/安装,而无需再次考虑这些文件。

请注意,这个包只打算部署在我控制的系统上,而不是分发给客户端,所以修补已经安装的包是可以接受的,只要我能把它恢复到一个没有搞砸的状态。

在 stackoverflow 或 here 上找不到答案,感谢任何帮助或我错过的类似问题的链接。

【问题讨论】:

  • 我很欣赏提出问题的方式,它的重点和更清晰。

标签: dpkg


【解决方案1】:

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

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

    sudo dpkg -r --force-depends

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

    sudo dpkg -P --force-depends

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

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

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

修复损坏的包

sudo apt install -f

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

【讨论】:

    【解决方案2】:

    发现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

    【讨论】:

      猜你喜欢
      • 2014-12-09
      • 1970-01-01
      • 2013-04-01
      • 2018-10-24
      • 2015-09-29
      • 1970-01-01
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多