例如,awk
是通过提供一个虚拟包original-awk
,mawk
和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
但是,默认安装的软件包需要许多虚拟软件包作为依赖项,例如,awk
本身需要base-files
,虚拟软件包通过检查APT日志是否与其他软件包一起安装apt-get --yes
;某种程度上,APT最终自动选择了这三个中的一个(我很确定那是mawk
,但这不是问题的重点)。
在这种情况下,APT如何选择要安装的特定软件包?
在这种情况下,APT如何选择要安装的特定软件包?
APT未选择包。它说:
您应该明确选择一个进行安装。
如果尝试手动选择软件包,则不会安装。
对于取决于awk的基本文件,这是无关紧要的。首先,它实际上预依赖awk,迫使dpkg在开始安装基本文件之前先安装awk;其次,mawk具有系统安装时必须安装的优先级,如果尝试删除它,apt nags。所以,只是不要这样做。
现在,根据消息来源,apt会先尝试满足依赖关系,然后再尝试使用虚拟软件包(即,如果depends是firefox | www-browser
,请检查是否已安装任何软件包,然后再尝试安装Firefox)(如果没有安装)。如果非虚拟程序包不可用,那么如果没有其他依赖项被破坏,它似乎只会对提供虚拟程序包的所有程序包进行迭代。这种行为其他意见的证据是这导致GrpIterator :: FindPreferredPkg功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句