Beispiel:awk
ist ein virtuelles Paket, das von original-awk
bereitgestellt wird , mawk
und gawk
.
Der Versuch, es direkt zu installieren, ergibt:
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
Allerdings werden viele virtuelle Pakete als Abhängigkeiten von den standardmäßig installierten Paketen benötigt, zum Beispiel awk
selbst wird von base-files
benötigt , das das Überprüfen der APT-Protokolle zusammen mit einer Reihe anderer Pakete über apt-get --yes
installiert; Irgendwie wählt APT automatisch einen der drei aus (ich bin mir ziemlich sicher, dass das mawk
ist , aber das ist nicht der Sinn der Frage).
Wie wählt APT in diesem Fall das spezifische zu installierende Paket aus?
Akzeptierte Antwort:
Wie wählt APT in diesem Fall das spezifische zu installierende Paket aus?
APT wählt kein Paket aus. Es sagt:
Sie sollten ausdrücklich eine auswählen zu installieren.
Wenn Sie versuchen, ein Paket manuell auszuwählen, wird es nicht installiert.
Bei Basisdateien, die von awk abhängen, ist es irrelevant. Erstens hängt es tatsächlich von awk ab und zwingt dpkg, awk zu installieren, bevor es mit der Installation der Basisdateien beginnt; zweitens haben mawk Priorität, die bei der Systeminstallation installiert werden, und apt nervt Sie, wenn Sie versuchen, es zu entfernen. Also lass es einfach.
Jetzt versucht apt laut Quellen zuerst, die Abhängigkeit zu erfüllen, bevor es mit virtuellen Paketen versucht wird (d.h. wenn abhängig sind firefox | www-browser
, überprüft, ob eines der Pakete installiert ist, und versucht dann, Firefox zu installieren, wenn keines der beiden installiert ist). Wenn das nicht-virtuelle Paket nicht verfügbar ist, scheint es nur alle Pakete zu durchlaufen, die das virtuelle Paket bereitstellen, wenn keine anderen Abhängigkeiten unterbrochen sind. Andere Kommentare, die dieses Verhalten belegen, sind diese, die zur GrpIterator::FindPreferredPkg-Funktion führen.