Například awk
je virtuální balíček poskytovaný original-awk
, mawk
a gawk
.
Pokus o instalaci přímo vede k:
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
Nicméně mnoho virtuálních balíčků je potřeba jako závislosti na balících nainstalovaných ve výchozím nastavení, například awk
samotný je potřeba pro base-files
, která kontrola protokolů APT je nainstalována spolu s řadou dalších balíčků pomocí apt-get --yes
; nějak APT nakonec automaticky vybere jednu ze tří (jsem si docela jistý, že je to mawk
, ale to není smyslem otázky).
Jak APT v tomto případě vybere konkrétní balíček k instalaci?
Přijatá odpověď:
Jak APT v tomto případě vybere konkrétní balíček k instalaci?
APT nevybírá balíček. Říká:
Měli byste jednou explicitně vybrat nainstalovat.
Pokud se pokusíte ručně vybrat balíček, nebude nainstalován.
V případě základních souborů závislých na awk je to irelevantní. Za prvé, ve skutečnosti předem závisí na awk, což nutí dpkg k instalaci awk před zahájením instalace základních souborů; za druhé, mawk má prioritu, která se instaluje při instalaci systému, a apt vás otravuje, když se jej pokusíte odstranit. Tak to prostě nedělej.
Nyní, podle zdrojů, se apt nejprve pokusí uspokojit závislost, než to zkusí s virtuálními balíčky (tj. pokud závisí jsou firefox | www-browser
, zkontroluje, zda je nainstalován některý z balíčků, a pokud žádný z nich není, zkuste nainstalovat firefox). Pokud nevirtuální balíček není k dispozici, zdá se, že pouze iteruje všechny balíčky, které poskytují virtuální balíček, pokud nejsou porušeny žádné další závislosti. Další komentáře svědčící o tomto chování jsou tyto, které vedou k funkci GrpIterator::FindPreferredPkg.