APT 如何选择要安装的特定包以提供作为依赖项所需的虚拟包?

kos*_*kos 6 apt

例如,awk是由original-awkmawk和提供的虚拟包gawk

尝试直接安装它会产生:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Package awk is a virtual package provided by:
  original-awk:i386 2012-12-20-4
  mawk:i386 1.3.3-17ubuntu2
  gawk:i386 1:4.1.1+dfsg-1
  original-awk 2012-12-20-4
  mawk 1.3.3-17ubuntu2
  gawk 1:4.1.1+dfsg-1
You should explicitly select one to install.

E: Package 'awk' has no installation candidate
Run Code Online (Sandbox Code Playgroud)

然而,默认安装的包需要许多虚拟包作为依赖项,例如awk它自己需要base-files,它检查 APT 日志与一堆其他包一起安装apt-get --yes;不知何故,APT 最终会自动选择三个中的一个(我很确定那是mawk,但这不是问题的重点)。

在这种情况下,APT 如何选择特定的包进行安装?

Bra*_*iam 4

在这种情况下,APT 如何选择要安装的特定软件包?

APT 不选择包。它说:

您应该明确选择一个进行安装。

如果您尝试手动选择软件包,则不会安装它。

对于依赖 awk 的基本文件来说,这是无关紧要的。首先,它实际上PreDependsawk,强制 dpkg 在开始安装基础文件之前安装 awk;其次,mawk 具有优先级要求,它是在系统安装时安装的,如果您尝试删除它,它会困扰您。所以,就不要这样做。

现在,根据消息来源, apt在尝试使用虚拟软件包之前首先尝试满足依赖关系(即,如果 dependent 是,则检查是否安装了任何软件包,如果都没有安装,则尝试安装 firefox)。如果非虚拟包不可用,如果没有其他依赖项被破坏,它似乎只是迭代提供虚拟包的所有包。此行为的其他评论证据是导致GrpIterator::FindPreferredPkg functionfirefox | www-browser