Como posso saber se um pacote virtual está “instalado” em um sistema Debian?

16

Alguns pacotes têm um cabeçalho Provides: . Por exemplo, o pacote postfix no Debian Wheezy tem Provides: mail-transport-agent .

O pacote mail-transport-agent que não existe fisicamente é considerado como um pacote "virtual".

Como posso saber, em um sistema baseado em Debian, se um determinado pacote virtual é "instalado" (ou "fornecido")? Posso listar todos os pacotes virtuais "fornecidos"?

Dica : para listar todos os pacotes virtuais existentes, instalados ou não, faça: aptitude search "~v"

    
por Totor 16.10.2013 / 15:24

4 respostas

14

Para listar os pacotes que fornecem 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

Faça com que aptitude search '~Pmail-transport-agent ~i' liste apenas os pacotes instalados (se houver).

Para listar todos os pacotes virtuais fornecidos pelos pacotes atualmente instalados:

aptitude search '~Rprovides:~i ~v'

Consulte o manual do aptitude para obter uma explicação dos padrões de pesquisa.

    
por 17.10.2013 / 02:40
9

o problema aqui é que existe uma diferença sutil entre pacotes virtuais e pacotes fornecidos por outros pacotes.

a diferença é que um pacote pode fornecer um pacote real , não apenas um pacote virtual .

de qualquer forma, o seguinte irá procurar por todos os pacotes que forneçam um pacote e imprimirão o nome do pacote e os pacotes que ele fornece:

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

para descobrir se algum pacote está instalado em seu sistema que forneça um determinado (por exemplo, mail-transport-agent), use

grep-status -sPackage -sProvides -FProvides "mail-transport-agent"
    
por 16.10.2013 / 16:53
0

Você pode detectar a presença de um determinado pacote virtual usando apt-cache showpkg <virtual> para exibir uma lista de pacotes candidatos e, em seguida, dpkg -l <canddate> <candidate> ... para exibir o status de instalação dos candidatos.

Por exemplo:

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

Aqui está uma impressão completa:

$ 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

Acredito que dpkg e apt-cache são ferramentas de nível inferior a aptitude , grep-available e grep-status . Usar ferramentas de nível inferior pode ou não ser um benefício, dependendo de suas necessidades particulares.

    
por 24.03.2018 / 00:07
-1

Você pode obter todos os pacotes virtuais da LISTA AUTORITÁRIA DO PACOTE VIRTUAL NOMES . Quanto a determinar se um pacote virtual está instalado, eu uso dpkg -l e o fato de que ele tem um código de saída 0 se o pacote estiver instalado e um código de saída 1 se ele não estiver instalado.

dpkg -l mail-transport-agent &> /dev/null; echo $?
    
por 17.10.2013 / 11:12