指定虚拟包作为依赖时,apt/dpkg 如何选择安装哪个真实包?

the*_*fog 5 aptitude dpkg apt

例如,如果包指定

Depends: www-browser
Run Code Online (Sandbox Code Playgroud)

apt/dpkg 如何决定安装哪个真正的包?

Non*_*ose 5

根据Ask Ubuntu 上的这个答案,apt 将首先尝试安装作为选项列出的任何非虚拟软件包:

现在,根据消息来源,apt尝试使用虚拟包之前首先尝试满足依赖关系(即,如果depends 是firefox | www-browser,则检查是否安装了任何包,如果都没有,则尝试安装firefox)。

如果没有,它将简单地迭代提供虚拟包的包列表,并安装第一个它可以:

如果非虚拟包不可用,它似乎只是迭代提供虚拟包的所有包,如果没有其他依赖项被破坏。这种行为的其他评论证据是this这导致GrpIterator::FindPreferredPkg function