【问题标题】:Debian - how to overwrite a package's fileDebian - 如何覆盖一个包的文件
【发布时间】:2019-03-09 17:58:15
【问题描述】:

我有两个不同名称的 Debian 软件包:configA.deb、configB.deb。两者在控制文件中都有以下几行:

Provides: my-config
Replaces: my-config

并且两者都提供相同的内容 - 文件:config

当我尝试在 configA.deb 已安装的情况下安装 configB.deb 时,我收到以下错误:

dpkg: error processing archive configB.deb (--install):
trying to overwrite '/home/user/configs/config', which is also in package configA.deb

我想安装 configB.deb 而不先删除/清除 configA.deb 并且不使用选项 --force-overwrite。有可能吗?

【问题讨论】:

  • 无论如何,一个包在/home 中没有任何业务。同样,正确的解决方案是将文件安装在包拥有的位置,然后让用户选择让包在他们的主目录中执行某些操作。

标签: debian deb


【解决方案1】:

Debian 软件包不能覆盖彼此的文件。使用update-alternatives 之类的东西将文件符号链接到一个包或另一个包提供的文件,而不会破坏任何包安装文件的完整性。或者在尝试安装包 B 时使用Conflicts: 强制删除包 A,反之亦然。作为第三种可能的方法,我不推荐的一个 hacky 解决方法是从每个包的 postinst 用包的受保护资源中正确的副本覆盖此文件。

【讨论】:

    【解决方案2】:

    作为第四个选项,您可以创建一个二进制独立包my-config-common.deb,它提供/home/user/configs/config 并使configA.debconfigB.deb 依赖它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 2018-11-27
      相关资源
      最近更新 更多