Come posso sapere se un pacchetto virtuale è "installato" su un sistema Debian?


16

Alcuni pacchetti hanno Provides:un'intestazione. Ad esempio, il pacchetto postfixsu Debian Wheezy ha Provides: mail-transport-agent.

Il pacchetto mail-transport-agentche non esiste fisicamente viene considerato come un pacchetto "virtuale".

Come posso sapere, su un sistema basato su Debian, se un determinato pacchetto virtuale è "installato" (o "fornito")? Posso elencare ogni pacchetto virtuale "fornito"?

Suggerimento : per elencare tutti i pacchetti virtuali esistenti, installati o meno, eseguire:aptitude search "~v"


1
Non ho un debian al momento, ma un'installazione a secco non farebbe il lavoro?
jillill

Risposte:


15

Per elencare i pacchetti che forniscono 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

Fallo aptitude search '~Pmail-transport-agent ~i'per elencare solo i pacchetti installati (se presenti).

Per elencare tutti i pacchetti virtuali forniti dai pacchetti attualmente installati:

aptitude search '~Rprovides:~i ~v'

Consulta il manuale di aptitude per una spiegazione dei modelli di ricerca.


Accettare questa risposta perché usa gli standard aptitude. Mi piace la spiegazione di @ umläute però.
Totor

Su Debian Jessie, ho appena provato aptitude search '~Pmysql-server ~i'che dà mariadb-server-10.0e mariadb-server-core-10.0, ma quando lo faccio aptitude search '~Rprovides:~i ~v', non vedo mysql-servernella lista ... Tuttavia, io vedo virtual-mysql-client, virtual-mysql-client-core, virtual-mysql-servere virtual-mysql-client-corenella lista.
Totor

1
@figtrap È più veloce, certo, ma non funziona .
Gilles 'SO- smetti di essere malvagio' il

10

il problema qui è che esiste una sottile differenza tra pacchetti virtuali e pacchetti forniti da altri pacchetti.

la differenza è che un pacchetto può fornire anche un pacchetto reale , non solo un pacchetto virtuale .

in ogni caso, quanto segue cercherà tutti i pacchetti che forniscono un pacchetto e stamperanno sia il nome del pacchetto sia i pacchetti che fornisce:

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

per sapere se nel tuo sistema è installato un pacchetto che ne fornisce uno specifico (ad es. agente di trasporto posta), usa

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

3
Nota: i comandi grep-availablee grep-statussono disponibili dopo aver installato il dctrl-tools pacchetto.
Totor,

1

È possibile rilevare la presenza di un determinato pacchetto virtuale utilizzando apt-cache showpkg <virtual> per visualizzare un elenco di pacchetti candidati e quindi dpkg -l <canddate> <candidate> ...per visualizzare lo stato di installazione dei candidati.

Per esempio:

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

Ecco una stampa 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

Credo dpkge apt-cachesono strumenti di livello inferiore rispetto a aptitude, grep-availablee grep-status. L'uso di strumenti di livello inferiore può essere o meno un vantaggio, a seconda delle esigenze particolari.


-1

Puoi ottenere tutti i pacchetti virtuali dall'ELENCO AUTORITATIVO DEI NOMI DEI PACCHETTI VIRTUALI . Per quanto riguarda la determinazione se un pacchetto virtuale è installato io uso dpkg -le il fatto che abbia un codice di uscita di 0 se il pacchetto è installato e un codice di uscita di 1 se non è installato.

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

No, questo non funziona. dpkg -l mail-transport-agentpuò restituire 0 anche se non esiste un pacchetto che lo fornisce attualmente installato. Penso che sia basato sulla presenza /var/dpkg/lib/availablema non ne sono sicuro. Ho verificato che dpkg -l foorestituisca 1 per un pacchetto che non ho mai installato ma 0 per un pacchetto che ho appena eliminato.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.