我正在创建一个 Debian 包foo
,它需要替换bar
安装它的系统上的现有包。
我读了:
https://www.debian.org/doc/debian-policy/ch-relationships.html
并得出结论,正确的条款DEBIAN/control
应该是这样的:
Provides: foo
Conflicts: bar
Replaces: bar
但是,当我尝试foo
在已安装的系统上安装该包时bar
,系统由于foo
与冲突而失败bar
。
如果我删除该Conflicts: bar
条目,则dpkg
允许两个包并排安装,这是一个问题,因为foo
必须替换bar
。
control
实现此目的的适当的文件子句是什么?
我已经尝试Breaks
过Conflicts
:
dpkg: regarding foo_DEV-22._i386.deb containing foo:
foo breaks bar
bar (version 3.2.2.1-x86NX4.4-x86) is present and installed.
bar provides bar and is present and installed.
dpkg: error processing foo_DEV-22._i386.deb (--install):
installing foo would break existing software
Errors were encountered while processing:
foo_DEV-22._i386.deb
答案1
dpkg
是一个低级工具。要获得所需的效果,应将包放入存储库并添加到存储库,sources.list(5)
然后apt install foo
才能执行正确的操作。
答案2
为什么不先将其重命名为现有的包,然后再将其替换为您想要的包?
为此,您必须按照以下 Debian 官方 wiki 页面中的方法/方式:
https://wiki.debian.org/Renaming_a_Package