Skąd mam wiedzieć, czy pakiet wirtualny jest „zainstalowany” w systemie Debian?


16

Niektóre pakiety mają Provides:nagłówek. Na przykład pakiet postfixna Debian Wheezy ma Provides: mail-transport-agent.

Pakiet, mail-transport-agentktóry nie istnieje fizycznie, jest uważany za pakiet „wirtualny”.

Skąd mam wiedzieć, w systemie opartym na Debianie, czy dany pakiet wirtualny jest „zainstalowany” (lub „dostarczony”)? Czy mogę wymienić wszystkie „dostarczone” pakiety wirtualne?

Wskazówka : aby wyświetlić listę wszystkich istniejących pakietów wirtualnych, zainstalowanych lub nie, wykonaj:aptitude search "~v"


1
W tej chwili nie mam debiana, ale czy instalacja na sucho nie zadziała?
jthill

Odpowiedzi:


15

Aby wyświetlić listę pakietów pod warunkiem 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

Zrób to, aptitude search '~Pmail-transport-agent ~i'aby wyświetlać tylko listę zainstalowanych pakietów (jeśli istnieją).

Aby wyświetlić listę wszystkich pakietów wirtualnych dostarczanych przez aktualnie zainstalowane pakiety:

aptitude search '~Rprovides:~i ~v'

Patrz podręcznik umiejętności dla wyjaśnienia wzorców wyszukiwania.


Zaakceptowanie tej odpowiedzi, ponieważ używa standardu aptitude. Lubię jednak wyjaśnienie @ umläute.
Totor

Na Debianie Jessie, właśnie próbowałem aptitude search '~Pmysql-server ~i'co daje mariadb-server-10.0a mariadb-server-core-10.0, ale kiedy to robię aptitude search '~Rprovides:~i ~v', nie widzę mysql-serverna liście ... Jednak ja widzę virtual-mysql-client, virtual-mysql-client-core, virtual-mysql-servera virtual-mysql-client-corena liście.
Totor

1
@figtrap Jest to szybsze, jasne, ale nie działa .
Gilles „SO- przestań być zły”

10

Problem polega na tym, że istnieje subtelna różnica między pakietami wirtualnymi a pakietami dostarczanymi przez inne pakiety.

różnica jest taka, że pakiet może dostarczyć do prawdziwego pakietu, jak również, a nie tylko wirtualnego pakietu.

w każdym razie następujące polecenie wyszuka wszystkie pakiety, które dostarczają pakiet i wydrukuje zarówno nazwę pakietu, jak i dostarczone przez niego pakiety:

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

aby sprawdzić, czy w systemie jest zainstalowany jakiś pakiet, który udostępnia dany pakiet (np. mail-transport-agent), użyj

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

3
Uwaga: polecenia grep-availablei grep-statussą dostępne po zainstalowaniu dctrl-tools pakietu.
Totor

1

Możesz wykryć obecność danego pakietu wirtualnego, używając apt-cache showpkg <virtual>do wyświetlenia listy pakietów kandydatów, a następnie dpkg -l <canddate> <candidate> ...do wyświetlenia statusu instalacji kandydatów.

Na przykład:

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

Oto pełny wydruk:

$ 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

Wierzę dpkgi apt-cachesą narzędzia poziomie niższym niż aptitude, grep-availablei grep-status. Korzystanie z narzędzi niższego poziomu może, ale nie musi, być zaletą, w zależności od konkretnych wymagań.


-1

Wszystkie wirtualne pakiety można uzyskać z AUTORYZOWANEGO WYKAZU WIRTUALNYCH NAZW PAKIETÓW . Jeśli chodzi o ustalenie, czy pakiet wirtualny jest zainstalowany, używam go dpkg -li faktu, że ma kod wyjścia 0, jeśli pakiet jest zainstalowany, i kod wyjścia 1, jeśli nie jest zainstalowany.

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

Nie, to nie działa. dpkg -l mail-transport-agentmoże zwrócić 0, nawet jeśli nie ma pakietu, który jest aktualnie zainstalowany. Myślę, że opiera się na obecności, /var/dpkg/lib/availableale nie jestem pewien. Sprawdziłem, czy dpkg -l foozwraca 1 dla pakietu, którego nigdy nie instalowałem, ale 0 dla pakietu, który właśnie wyczyściłem.
Gilles „SO- przestań być zły”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.