web-dev-qa-db-ja.com

仮想パッケージがDebianシステムに「インストール」されているかどうかを確認するにはどうすればよいですか?

一部のパッケージにはProvides:ヘッダー。たとえば、Debian WheezyのpostfixパッケージにはProvides: mail-transport-agent

その包み mail-transport-agent物理的に存在しないものは、「仮想」パッケージと見なされます。

Debianベースのシステムで、特定の仮想パッケージが「インストール」されている(または「提供されている」)場合、どのようにして知ることができますか?すべての「提供されている」仮想パッケージをリストできますか?

ヒント:インストールされているかどうかにかかわらず、既存のすべての仮想パッケージを一覧表示するには、次のようにします:aptitude search "~v"

16
Totor

mail-transport-agentを提供するパッケージを一覧表示するには:

$ aptitude search '~Pmail-transport-agent'
p   citadel-mta                     - complete and feature-rich groupware server
p   courier-mta                     - Courier mail server - ESMTP daemon        
p   dma                             - lightweight mail transport agent          
p   esmtp-run                       - user configurable relay-only MTA - the reg
p   exim4-daemon-heavy              - Exim MTA (v4) daemon with extended feature
p   exim4-daemon-light              - lightweight Exim MTA (v4) daemon          
p   masqmail                        - mail transport agent for intermittently co
p   msmtp-mta                       - light SMTP client with support for server 
p   nullmailer                      - simple relay-only mail transport agent    
i   postfix                         - High-performance mail transport agent     
p   sendmail-bin                    - powerful, efficient, and scalable Mail Tra
p   ssmtp                           - extremely simple MTA to get mail off the s
p   xmail                           - advanced, fast and reliable ESMTP/POP3 mai

インストールされているパッケージ(存在する場合)のみを一覧表示するには、そのaptitude search '~Pmail-transport-agent ~i'を作成します。

現在インストールされているパッケージによって提供されるすべての仮想パッケージを一覧表示するには:

aptitude search '~Rprovides:~i ~v'

検索パターンの説明については aptitudeマニュアル を参照してください。

ここでの問題は、他のパッケージによるvirtualパッケージとパッケージprovidedの間に微妙な違いがあることです。

違いは、パッケージは仮想パッケージだけでなく、提供 a リアルパッケージでもよいということです。

とにかく、以下は提供パッケージであるすべてのパッケージを検索し、パッケージ名とそれが提供するパッケージの両方を出力します。

grep-available -sPackage  -sProvides -FProvides -e '^.'

特定のパッケージ(mail-transport-agentなど)を提供するパッケージがシステムにインストールされているかどうかを確認するには、次のコマンドを使用します。

grep-status -sPackage -sProvides -FProvides "mail-transport-agent"
10
umläute

apt-cache showpkg <virtual>を使用して候補パッケージのリストを表示し、次にdpkg -l <canddate> <candidate> ...を使用して候補のインストールステータスを表示することにより、特定の仮想パッケージの存在を検出できます。

例えば:

$ apt-cache showpkg awk
$ dpkg -l original-awk mawk gawk

ここに完全なプリントアウトがあります:

$ apt-cache showpkg awk
Package: awk
Versions: 

Reverse Depends: 
  base-files,awk
  base-files,awk
Dependencies: 
Provides: 
Reverse Provides: 
mawk:i386 1.3.3-17ubuntu2
gawk:i386 1:4.0.1+dfsg-2.1ubuntu2
original-awk 2012-12-20-1
mawk 1.3.3-17ubuntu2
gawk 1:4.0.1+dfsg-2.1ubuntu2

$ dpkg -l original-awk mawk gawk
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  gawk           1:4.0.1+dfsg AMD64        GNU awk, a pattern scanning and p
ii  mawk           1.3.3-17ubun AMD64        a pattern scanning and text proce
dpkg-query: no packages found matching original-awk

dpkgapt-cacheaptitudegrep-availablegrep-statusよりも低レベルのツールだと思います。より低いレベルのツールを使用すると、特定の要件に応じて、メリットがある場合とない場合があります。

1
mpb