Packagea.deb
当前提供了一个文件/etc/file.conf
,我们希望更新此包,使其不再提供此文件,而是由 package 提供b.deb
。
dpkg: error processing archive /root/b.deb (--unpack):
trying to overwrite '/etc/file', which is also in package a
现在dpkg
不喜欢这样——我们必须a
先删除软件包,但我们实际上无法控制升级过程。我们不能只添加一个--force-overwrite
选项或类似的东西,我们只能控制存储库和包本身。
我们可以用预安装脚本做一些恶作剧吗?也许有适当的方法来进行这种所有权转移?
答案1
要将文件从一个包 ( a
) 移动到另一个包 ( b
),您需要更新a
以便它不再安装该文件,然后更新b
以便它安装该文件,并在其control
文件中声明它
Breaks: a (<< ...)
Replaces: a (<< ...)
哪里...
有更新的版本a
。
然后dpkg
将接受b
允许替换(的一部分)a
,并且不允许将a
和b
安装在冲突的版本中(IE都尝试安装移动文件的版本)。Replaces
可能会令人困惑——即使只是部分替换,它也适用。升级时,apt
会知道要做什么:a
先升级,再升级b
。
看Debian 政策了解详情。