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


16

一部のパッケージにはProvides:ヘッダーがあります。たとえば、postfixDebian Wheezy のパッケージにはProvides: mail-transport-agentます。

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

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

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


1
現在、Debianはありませんが、ドライランインストールではうまくいきませんか?
jthill

回答:


15

提供するパッケージをリストするには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のマニュアルを参照してください。


isは標準を使用しているため、この回答を受け入れaptitudeます。しかし、@umläuteの説明が好きです。
トーター

Debianのジェシーには、私はちょうどしようとしたaptitude search '~Pmysql-server ~i'与えるmariadb-server-10.0mariadb-server-core-10.0、私が行うときaptitude search '~Rprovides:~i ~v'、私は表示されませんmysql-serverリストに...しかし、私は見ていますvirtual-mysql-clientvirtual-mysql-client-corevirtual-mysql-serverおよびvirtual-mysql-client-coreリストに。
トーター


10

ここでの問題は、仮想パッケージと提供されるパッケージの間に微妙な違いがあることです他のパッケージがする。

違いは、パッケージが仮想パッケージだけでなく実際のパッケージも提供する可能性があることです。パッケージを。

とにかく、以下はパッケージを提供するすべてのパッケージを検索し、パッケージ名とそれが提供するパッケージの両方を印刷します:

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

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

grep-status -sPackage -sProvides -FProvides "mail-transport-agent"

3
注:コマンドgrep-availablegrep-statusは、dctrl-tools パッケージをインストールすると使用可能になります。
トーター

1

を使用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-cacheより低いレベルのツールでありaptitudegrep-availableそしてgrep-status。下位レベルのツールを使用すると、特定の要件に応じて、利点がある場合とない場合があります。


-1

仮想パッケージ名の正式なリストからすべての仮想パッケージを取得できます。仮想パッケージがインストールされているかどうかを判断するために、パッケージがインストールされdpkg -lている場合は終了コード0、インストールされていない場合は終了コード1 を使用するという事実を使用します。

dpkg -l mail-transport-agent &> /dev/null; echo $?

いいえ、これは機能しません。dpkg -l mail-transport-agent現在インストールされているパッケージを提供するパッケージがない場合でも、0を返すことができます。存在感に基づいていると思います/var/dpkg/lib/availableが、よくわかりません。dpkg -l foo一度もインストールしたことのないパッケージでは1を返し、パージしたばかりのパッケージでは0を返すことを確認しました。
ジル 'SO-悪であるのをやめる'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.