Bagaimana saya bisa tahu jika paket virtual "diinstal" pada sistem Debian?

16

Beberapa paket, memiliki Provides:tajuk. Sebagai contoh, paket postfixdi Debian Wheezy telah Provides: mail-transport-agent.

Paket mail-transport-agentyang tidak ada secara fisik dianggap sebagai paket "virtual".

Bagaimana saya bisa tahu, pada sistem berbasis Debian, jika paket virtual yang diberikan "diinstal" (atau "disediakan")? Bisakah saya mendaftar setiap paket virtual "yang disediakan"?

Petunjuk : untuk mendaftar setiap paket virtual yang ada, diinstal atau tidak, lakukan:aptitude search "~v"

Totor
sumber
1
Saya tidak memiliki debian saat ini, tetapi bukankah instalasi dry-run melakukan tugasnya?
jthill

Jawaban:

15

Untuk daftar paket yang menyediakan 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

Buat itu aptitude search '~Pmail-transport-agent ~i'hanya mencantumkan paket yang diinstal (jika ada).

Untuk membuat daftar semua paket virtual yang disediakan oleh paket yang diinstal saat ini:

aptitude search '~Rprovides:~i ~v'

Lihat manual bakat untuk penjelasan tentang pola pencarian.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Menerima jawaban ini karena menggunakan standar aptitude. Saya suka penjelasan dari @ umläute.
Totor
Pada Debian Jessie, aku hanya mencoba aptitude search '~Pmysql-server ~i'yang memberikan mariadb-server-10.0dan mariadb-server-core-10.0, tetapi ketika saya lakukan aptitude search '~Rprovides:~i ~v', saya tidak melihat mysql-serverdalam daftar ... Namun, saya melihat virtual-mysql-client, virtual-mysql-client-core, virtual-mysql-serverdan virtual-mysql-client-coredalam daftar.
Totor,
1
@figtrap Lebih cepat, tentu saja, tetapi tidak berhasil .
Gilles 'SO- stop being evil'
10

masalahnya di sini adalah bahwa ada perbedaan halus antara paket virtual dan paket yang disediakan oleh paket lain.

perbedaannya adalah, bahwa paket dapat memberikan suatu yang nyata paket juga, tidak hanya maya paket.

bagaimanapun, berikut ini akan mencari semua paket yang menyediakan paket dan akan mencetak nama paket dan paket yang disediakannya:

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

untuk menemukan apakah ada paket yang diinstal pada sistem Anda yang menyediakan yang diberikan (mis. agen pengiriman-surat), gunakan

grep-status -sPackage -sProvides -FProvides "mail-transport-agent"
umläute
sumber
3
Catatan: perintah grep-availabledan grep-statustersedia setelah Anda menginstal dctrl-tools paket.
Totor
1

Anda dapat mendeteksi keberadaan paket virtual yang diberikan dengan menggunakan apt-cache showpkg <virtual>untuk menampilkan daftar paket kandidat, dan kemudian dpkg -l <canddate> <candidate> ...untuk menampilkan status instalasi kandidat.

Sebagai contoh:

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

Ini adalah cetakan lengkap:

$ 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

Saya percaya dpkgdan apt-cachemerupakan alat tingkat lebih rendah dari aptitude, grep-availabledan grep-status. Menggunakan alat tingkat yang lebih rendah mungkin bermanfaat atau tidak, tergantung pada persyaratan khusus Anda.

mpb
sumber
-1

Anda bisa mendapatkan semua paket virtual dari DAFTAR OTOMATIS NAMA PAKET VIRTUAL . Adapun untuk menentukan apakah paket virtual diinstal saya menggunakan dpkg -ldan fakta bahwa ia memiliki kode keluar 0 jika paket diinstal dan kode keluar 1 jika tidak diinstal.

dpkg -l mail-transport-agent &> /dev/null; echo $?
StrongBad
sumber
Tidak, ini tidak berhasil. dpkg -l mail-transport-agentdapat mengembalikan 0 bahkan jika tidak ada paket yang menyediakannya yang saat ini diinstal. Saya pikir ini didasarkan pada kehadiran /var/dpkg/lib/availabletapi saya tidak yakin. Saya melakukan pengecekan yang dpkg -l foomengembalikan 1 untuk paket yang belum pernah saya instal tetapi 0 untuk paket yang baru saja saya bersihkan.
Gilles 'SANGAT berhenti menjadi jahat'