是否有 apt --force-overwrite 选项?

是否有 apt --force-overwrite 选项?

我有一个源包(foo),它生成两个二进制包(foo-afoo-b)。

在 2.0 版本中,文件/etc/foo从 移动foo-afoo-b.这会导致apt upgrade失败:

$ sudo apt upgrade 
...
dpkg: error processing archive /var/cache/apt/archives/foo-b_2.0_amd64.deb (--unpack):
 trying to overwrite '/etc/foo', which is also in package foo-a 1.0.

有没有客户端解决方案可以apt解决这个问题?

答案1

正确的(tm)解决方案是通过修复以下内容来修复foo-a和的依赖性:foo-bdebian/control

Package: foo-b
Replaces: foo-a (<< 2.0)
Breaks: foo-a (<< 2.0)

参考:https://www.debian.org/doc/debian-policy/ch-relationships.html#overwriting-files-in-other-packages

但是,如果您不是此包的开发人员或存储库的维护者,则您将需要客户端解决方案。


有效的客户端解决方案是使用--force-overwrite以下选项dpkg

$ apt download foo-{a,b}
$ dpkg --force-overwrite -i foo-{a,b}_2.0_amd64.deb

参考:https://man7.org/linux/man-pages/man1/dpkg.1.html#OPTIONS


但是,如果您正在寻找apt-only 1-liner,那么您需要apt--force-overwrite选项转发到dpkg。这可以通过使用--option中简要描述的来完成apt-get(8)apt.conf(5)DPkg::options可用于将选项转发到dpkg.

这些手册页都没有清楚地定义整个语法,所以经过一些实验,我发现可以像这样完成:

$ sudo apt upgrade -o DPkg::options::="--force-overwrite"
...
Unpacking foo-b (2.0) over (1.0) ...
dpkg: warning: overriding problem because --force enabled:
dpkg: warning: trying to overwrite '/etc/foo', which is also in package foo-a 1.0
...

相关内容