Menemukan semua paket perangkat lunak di Debian yang menyediakan alternatif tertentu

12

Distribusi Debian memiliki Sistem Alternatif Debian . Dari Wiki:

Sistem alternatif Debian menciptakan cara bagi beberapa program yang memenuhi fungsi yang sama atau serupa untuk dicantumkan sebagai implementasi alternatif yang diinstal secara bersamaan tetapi dengan satu implementasi tertentu yang ditunjuk sebagai default. Misalnya banyak sistem memiliki beberapa editor teks yang diinstal pada saat yang sama. Program vi adalah contoh klasik dari editor yang memiliki banyak implementasi seperti nvi, elvis, vim, dll. Tetapi mana yang harus ditetapkan sebagai default?

Secara umum, ada beberapa paket di Debian yang menyediakan alternatif tertentu. Bagaimana cara mendapatkan daftar lengkap dari semua paket yang ada di repositori Debian? Mari kita gunakan alternatif vi sebagai contoh.

CATATAN: Melakukan kueri terhadap daftar paket yang diinstal itu mudah, tapi bukan itu yang ditanyakan.

Faheem Mitha
sumber

Jawaban:

9

Saya tahu ini agak terlambat, tetapi posting ini saat ini adalah salah satu hit pencarian teratas yang terkait dengan mencari alternatif di Debian.

Masalah dengan menggunakan di update-alternativessini adalah bahwa itu hanya akan menunjukkan kepada Anda opsi yang diinstal sejauh yang saya tahu (halaman manualnya cukup jarang).

Untuk menjawab pertanyaan sebagaimana diajukan dalam judul, yaitu menemukan semua paket yang tersedia yang memberikan alternatif (apakah diinstal atau tidak), Anda dapat menggunakan:

aptitude search '?provides(pattern)'

yang juga bisa disingkat menjadi:

aptitude search '~Ppattern'

di mana patternsemua atau sebagian dari alternatif yang Anda cari. Dalam kasus khusus vi, ini tidak benar-benar berfungsi. Jika Anda memeriksa paket nvidan vimdengan aptitude showatau apt-cache show, Anda akan melihat bahwa tidak ada yang mencantumkan "vi" di bagian "Menyediakan:". Bahkan, deskripsi nvi tidak ada bagian itu sepenuhnya.

Namun, ini bekerja dengan cukup baik untuk alternatif lain, seperti editor:

$ aptitude search '~Peditor'
p   deutex                         - composition tool for doom-style WAD files
p   edbrowse                       - /bin/ed-alike webbrowser written in C    
p   emacs24                        - GNU Emacs editor (with GTK+ GUI support) 
p   emacs24-lucid                  - GNU Emacs editor (with Lucid GUI support)
p   emacs24-nox                    - GNU Emacs editor (without GUI support)   
p   fte-console                    - Text editor for programmers - console edi
p   fte-terminal                   - Text editor for programmers - version for
p   fte-xwindow                    - Text editor for programmers - X Window Sy
p   jed                            - editor for programmers (textmode version)
p   jove                           - Jonathan's Own Version of Emacs - a compa
p   jupp                           - user friendly full screen text editor    
p   le                             - Text editor with block and binary operati
p   ledit                          - line editor for interactive programs     
p   levee                          - very small vi clone                      
p   mg                             - microscopic GNU Emacs-style editor       
p   nano                           - small, friendly text editor inspired by P
p   nano-tiny                      - small, friendly text editor inspired by P
p   ne                             - easy-to-use and powerful text editor     
p   pluma                          - official text editor of the MATE desktop 
p   rlfe                           - Front-end using readline to "cook" input 
p   rlwrap                         - readline feature command line wrapper    
p   scite                          - Lightweight GTK-based Programming Editor 
p   vigor                          - nvi with the evil paperclip              
p   vile                           - VI Like Emacs - vi work-alike            
p   vim                            - Vi IMproved - enhanced vi editor         
p   vim-athena                     - Vi IMproved - enhanced vi editor - with A
p   vim-gnome                      - Vi IMproved - enhanced vi editor - with G
i   vim-gtk                        - Vi IMproved - enhanced vi editor - with G
p   vim-nox                        - Vi IMproved - enhanced vi editor - with s
i   vim-tiny                       - Vi IMproved - enhanced vi editor - compac
p   xjed                           - editor for programmers (x11 version)     
p   xul-ext-password-editor        - edit password manager entries in Mozilla 
p   xvile                          - VI Like Emacs - vi work-alike (X11) 

Meskipun ini tidak sempurna, aptitudememiliki kemampuan pencarian yang sangat fleksibel yang akan sering membuat Anda mengatasi masalah paket yang tidak mencantumkan alternatif mana yang mereka sediakan - misalnya menggunakan "~seditors ~dvi\s"sebagai pola pencarian akan mencantumkan semua paket di bagian "editor" yang memiliki deskripsi berisi string "vi".

Pilihan lain adalah menggunakan situs web paket Debian , di mana paket serupa tercantum di bagian di sebelah kanan.

Daniel
sumber
1
Terima kasih atas jawabannya. Namun, apa itu aps ~Peditor? Jika apsdimaksudkan sebagai jalan pintas untuk bakat, baik-baik saja, tapi tolong jangan gunakan itu dalam jawaban, itu hanya akan membingungkan semua orang. Selain itu, jika Anda merasa ada persediaan yang hilang, Anda dapat mengajukan laporan bug terhadap paket yang sesuai.
Faheem Mitha
Dari konteks, saya pikir apsharus berdiri untuk aptitude search. Tetapi Anda harus menggunakannya secara eksplisit. Namun, saya tidak berpikir itu jawaban yang bisa diterapkan, terlepas - mungkin itu akan bekerja dengan beberapa perbaikan. aptitude search -Pvimemberi banyak hal yang tidak relevan. Saya kira itu mencari seluruh deskripsi paket.
Faheem Mitha
aptitude search ~P(perhatikan tilde) hanya mencari di Provides, tetapi vicocok dengan Providesentri lain ; Anda harus menentukan kecocokan persis dengan aptitude search '~P^vi$'. Contoh ini menyoroti keterbatasan mendasar dengan pendekatan ini: sementara ada vialternatif, tidak ada vipaket virtual ...
Stephen Kitt
5

Ini tergantung. Ada beberapa alternatif, seperti x-www-browser, tidak menggunakan paket dan ditambahkan melalui skrip pengelola ke pembaruan-alternatif:

/var/lib/dpkg/info/iceweasel.postinst:    update-alternatives --install /usr/bin/x-www-browser \
/var/lib/dpkg/info/iceweasel.postinst:    update-alternatives --remove mozilla /usr/bin/iceweasel
/var/lib/dpkg/info/iceweasel.postinst:    update-alternatives --install /usr/bin/gnome-www-browser \
/var/lib/dpkg/info/iceweasel.prerm:    update-alternatives --remove x-www-browser /usr/bin/iceweasel
/var/lib/dpkg/info/iceweasel.prerm:    update-alternatives --remove gnome-www-browser /usr/bin/iceweasel
/var/lib/dpkg/info/chromium.postinst:    update-alternatives --install /usr/bin/x-www-browser \
/var/lib/dpkg/info/chromium.postinst:    update-alternatives --install /usr/bin/gnome-www-browser \
/var/lib/dpkg/info/chromium.prerm:    update-alternatives --remove x-www-browser /usr/bin/chromium
/var/lib/dpkg/info/chromium.prerm:    update-alternatives --remove gnome-www-browser /usr/bin/chromium

Ada yang lain yang menggunakan metapackage tunggal untuk menginstal versi biner yang sama (paket Java / OpenJRE terlintas dalam pikiran, juga init). Lainnya menggunakan paket virtual, dengan mengisi "Menyediakan" (ini biasanya dilengkapi dengan pembaruan ke basis data DPKG alternatif) dalam hal ini, salah satu paket tersebut harus menyediakan biner yang sama.

Jadi, bagaimana menemukan semua paket yang menyediakan file tertentu? Saya akan menggunakan Provides jika Anda tahu paket mana yang melakukannya, dan apt-file search fileuntuk semua yang lainnya.

Braiam
sumber
Contoh untuk vim?
Faheem Mitha
1
@FaheemMitha vim menyediakan editor.
Braiam
Itu benar. Begitu juga banyak paket lain, termasuk yang tidak ada hubungannya dengan vim. Jadi, seperti apa contohnya dalam kasus ini?
Faheem Mitha
4

Paket virtual dan sistem alternatif Debian (yang merupakan tempat binari berperan) terkait tetapi tidak sama. Untuk paket virtual, Anda dapat menggunakan apt-cacheuntuk menemukan paket mana ("nyata") yang menyediakannya:

$ 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

Untuk manajer tampilan, paket virtual adalah x-display-manager:

$ apt-cache showpkg x-display-manager
Package: x-display-manager
Versions: 

Reverse Depends: 
  utf8-migration-tool,x-display-manager
  razorqt,x-display-manager
  lxde,x-display-manager
  numlockx,x-display-manager
  ltsp-client-core,x-display-manager
Dependencies: 
Provides: 
Reverse Provides: 
gdm 3.10.0.1-0ubuntu3.1
lightdm 1.10.6-0ubuntu1
kdm 4:4.11.11-0ubuntu0.2
xdm 1:1.1.11-1ubuntu1
wdm 1.28-16
slim 1.3.4-2.1
lxdm 0.4.1-0ubuntu6
kdm 4:4.11.8-0ubuntu6
gdm 3.10.0.1-0ubuntu3
lightdm 1.10.0-0ubuntu3

Sistem alternatif ditangani oleh panggilan ke update-alternativesskrip pengelola seperti yang ditunjukkan jawaban Braiam, dan sisanya dari sistem pengemasan tidak menyadari hal ini. The Provideslapangan juga lebih umum daripada alternatif, karena paket dapat memberikan lain dalam hal layanan atau perpustakaan yang ditawarkan, tidak hanya melalui binari.

Tanpa pengelola paket menambahkan informasi tentang alternatif ke Provideslapangan (dan membuat paket virtual untuk semua titik akhir dari alternatif - seperti vi) dan tanpa memeriksa paket sendiri, tidak ada cara umum saat ini untuk sampai paket mana yang mungkin memberikan alternatif.

muru
sumber
2

Terkait erat dengan pertanyaan, untuk menemukan vi alternatif:

 update-alternatives --list editor

Keluaran:

/bin/ed
/bin/nano
/usr/bin/mcedit
/usr/bin/vim.basic
/usr/bin/vim.tiny

Atau:

update-alternatives --config vi

Keluaran:

There are 2 choices for the alternative vi (providing /usr/bin/vi).



Selection    Path                Priority   Status

------------------------------------------------------------

* 0            /usr/bin/vim.basic   30        auto mode

  1            /usr/bin/vim.basic   30        manual mode

  2            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number:
Andy
sumber
3
Benar, tetapi itu hanya berfungsi untuk paket yang diinstal. Pertanyaannya adalah bagaimana melakukan itu untuk semua paket. Mungkin saya seharusnya lebih eksplisit dalam pertanyaan itu.
Faheem Mitha
1
Benar. Tapi saya memposting ini sebelum memeriksa pembaruan posting awal Anda ... bagian di mana Anda menambahkan "yang ada di repositori Debian"
Andy
Yah, saya punya "semua paket seperti itu", yang saya pikir sudah jelas, tetapi ternyata tidak. Maaf soal itu. Bagaimanapun, selamat datang di unix.sx. Saya melihat Anda bergabung hari ini.
Faheem Mitha
1

Di Ubuntu , paket command-not-foundberisi database yang berisi banyak alternatif. Setelah instalasi, dapat ditanyakan dengan /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(untuk daftar alternatif untuk mail).
Hati-hati, ketika Anda tidak ingin saran otomatis pada perintah yang hilang di bash, tulis unset -f command_not_found_handledi ~ / .bashrc Anda atau hapus definisi secara global di /etc/bash.bashrc. (Lakukan serupa untuk zsh.)

Di Debian , alat ini hanya menggunakan file apt untuk membuat database, jadi tidak ada alternatif yang diketahui (tidak diuji). Itu menceritakan hal yang sama seperti apt-file search ....

Sumber Ubuntu: https://launchpad.net/command-not-found

simohe
sumber
Saya tidak mengikuti apa yang Anda sarankan. Bisakah Anda lebih eksplisit? Secara khusus /usr/lib/command-not-found /usr/bin/mailterlihat seperti semacam resep, tetapi saya tidak mengerti apa yang seharusnya dilakukan. Penjelasan akan sangat membantu.
Faheem Mitha
Menambahkan beberapa kata untuk memperjelas, dan dihapus /usr/bin/dari perintah karena ini tidak berfungsi.
simohe
Nah, pertanyaan saya adalah tentang Debian, bukan Ubuntu. Meskipun saya tidak mengerti mengapa Debian dan Ubuntu berbeda di sini. Dan memang perintah yang Anda daftarkan tidak berguna di sini. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found.
Faheem Mitha
Jawabannya memberitahu yang mailsudah diinstal. Pemeriksaan ini dapat dilewati dengan opsi --ignore-installed. Tetapi juga setelah ini, Anda tidak akan mendapatkan informasi lebih banyak (dalam bahasa debian) daripada dari apt-file search mail.
simohe