Dependencies 如何拆分现有的Debian包,使其中一个新包预先依赖于另一个?

Dependencies 如何拆分现有的Debian包,使其中一个新包预先依赖于另一个?,dependencies,debian,Dependencies,Debian,Debian策略手册的和部分描述了将Debian包一分为二的正确方法。然而,我有一个更复杂的情况 我目前有两个软件包,比如说,版本1.2.3: Package: foo-base Package: foo-dbserver Depends: foo-base (>= 1.2.3) 起初,这种关系是有道理的,但随着时间的推移,foo-base的元素逐渐依赖于foo-dbserver的元素。更糟糕的是,foobase的元素预先依赖于foodbserver的元素。因此,我现在想将foo-ba

Debian策略手册的和部分描述了将Debian包一分为二的正确方法。然而,我有一个更复杂的情况

我目前有两个软件包,比如说,版本1.2.3:

Package: foo-base

Package: foo-dbserver
Depends: foo-base (>= 1.2.3)
起初,这种关系是有道理的,但随着时间的推移,foo-base的元素逐渐依赖于foo-dbserver的元素。更糟糕的是,foobase的元素预先依赖于foodbserver的元素。因此,我现在想将foo-base分为foo-essentialfoo-base,对于版本1.2.4,如下所示:

Package: foo-essential
Replaces: foo-base (<< 1.2.3)
Breaks: foo-base (<< 1.2.3)

Package: foo-dbserver
Depends: foo-essential (>= 1.2.4)

Package: foo-base
Pre-Depends: foo-dbserver (>= 1.2.4)
Package:foo-essential
替换:foo-base(=1.2.4)
这三个软件包可以在新安装上愉快地安装,但它们不能完全升级:

dpkg: regarding foo-base_1.2.4_all.deb containing foo-base, pre-dependency problem:
 foo-base pre-depends on foo-dbserver (>= 1.2.4)
  foo-dbserver latest configured version is 1.2.3
dpkg: error processing foo-base_1.2.4_all.deb (--install):
 pre-dependency problem - not installing foo-base
dpkg: regarding foo-essential_1.2.4_all.deb containing foo-essential:
 foo-essential breaks foo-base (<< 1.2.3)
  foo-base (version 1.2.3) is present and installed.
dpkg: error processing foo-essential_1.2.4_all.deb (--install):
 installing foo-essential would break foo-base, and
 deconfiguration is not permitted (--auto-deconfigure might help)
(Reading database ... 39107 files and directories currently installed.)
Preparing to replace foo-dbserver 1.2.3 (using foo-dbserver_1.2.4_all.deb) ...
Unpacking replacement foo-dbserver ...
dpkg: dependency problems prevent configuration of foo-dbserver:
 foo-dbserver depends on foo-essential (>= 1.2.4); however:
  Package foo-essential is not installed.
dpkg: error processing foo-dbserver (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 foo-base_1.2.4_all.deb
 foo-essential_1.2.4_all.deb
 foo-dbserver
dpkg:关于包含foo-base的foo-base_1.2.4_all.deb,预依赖问题:
foo base pre依赖于foo dbserver(>=1.2.4)
foodbserver的最新配置版本是1.2.3
dpkg:处理foo-base_1.2.4_all.deb时出错(--安装):
预依赖问题-未安装foo base
dpkg:关于含有foo essential的foo-essential_1.2.4_all.deb:
foo essential打破了foo base(=1.2.4);然而:
未安装软件包foo essential。
dpkg:处理foo dbserver时出错(--install):
依赖关系问题-保持未配置状态
处理时遇到错误:
foo-base_1.2.4_all.deb
foo-essential_1.2.4_all.deb
foodbserver

有没有一种方法可以恰当地表达这种关系,从而可以进行升级?将foo-base完全重命名为其他名称(并使用名称foo-essentialfoo-dbserverfoo-base2)是否是更好的解决方案?

我发现的解决方案是将包从另一个方向拆分。也就是说,将原始包名保留为预依赖的包名,并为进行预依赖的包名使用新的包名

Package: foo-base

Package: foo-dbserver
Depends: foo-essential (>= 1.2.4)

Package: foo-extra
Pre-Depends: foo-dbserver (>= 1.2.4)
Replaces: foo-base (<< 1.2.3)
Breaks: foo-base (<< 1.2.3)
Package:foo-base
包:foodbserver
取决于:foo essential(>=1.2.4)
套餐:foo-extra
Pre-Depends:foo-dbserver(>=1.2.4)
替换:foo base(