たとえば、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は3つのうちの1つを自動的に選択することになります(mawk
だと確信しています) 、しかしそれは問題のポイントではありません。
この場合、APTはインストールする特定のパッケージをどのように選択しますか?
承認された回答:
この場合、APTはインストールする特定のパッケージをどのように選択しますか?
APTはパッケージを選択しません。伝えます:
明示的に選択する必要があります インストールします。
パッケージを手動で選択しようとすると、インストールされません。
awkに依存するベースファイルの場合、それは無関係です。まず、実際にはawkにPreDependsし、ベースファイルのインストールを開始する前にdpkgにawkのインストールを強制します。第二に、mawkにはシステムのインストール時にインストールされる優先順位が必要であり、それを削除しようとするとaptがあなたを悩ませます。だから、それをしないでください。
現在、情報源によると、aptは、仮想パッケージを試す前に、まず依存関係を満たそうとします(つまり、依存関係がfirefox | www-browser
の場合 、パッケージのいずれかがインストールされているかどうかを確認し、インストールされていない場合はFirefoxのインストールを試みます)。非仮想パッケージが利用できない場合、他の依存関係が壊れていなければ、仮想パッケージを提供するすべてのパッケージを反復処理するように見えます。この動作のその他のコメントの証拠は、GrpIterator::FindPreferredPkg関数につながるこれです。