Debian - 如何覆盖包的文件

Debian - how to overwrite a package's file

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

Provides: my-config
Replaces: my-config

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

当我尝试安装 configB.deb 而 configA.deb 已经安装时,我收到以下错误:

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

我想先安装 configB.deb 而不使用 deleting/purging configA.deb,并且不使用选项 --force-overwrite。可能吗?

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

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