Trovare tutti i pacchetti software in Debian che forniscono una particolare alternativa


12

La distribuzione Debian ha il sistema Debian Alternatives . Dal Wiki:

Il sistema di alternative Debian crea un modo per diversi programmi che soddisfano le stesse funzioni o simili per essere elencati come implementazioni alternative installate simultaneamente ma con una particolare implementazione designata come predefinita. Ad esempio, molti sistemi dispongono di più editor di testo installati contemporaneamente. Il programma vi è un classico esempio di editor che ha molte implementazioni come nvi, elvis, vim, ecc. Ma quale dovrebbe essere designato come predefinito?

In generale, ci sono più pacchetti in Debian che forniscono una particolare alternativa. Come si ottiene un elenco completo di tutti questi pacchetti che esistono nei repository Debian? Usiamo l'alternativa vi come esempio.

NOTA: eseguire una query di questo tipo sull'elenco dei pacchetti installati è semplice, ma non è questo che si pone questa domanda.

Risposte:


9

So che è un po 'tardi, ma questo post è attualmente uno dei migliori risultati di ricerca relativi alla ricerca di alternative in Debian.

Il problema con l'utilizzo update-alternativesqui è che mostrerà solo le opzioni installate per quanto ne so (la sua pagina man è piuttosto scarsa).

Per rispondere alla domanda come posta nel titolo, ovvero trovare tutti i pacchetti disponibili che forniscono un'alternativa (installata o no), è possibile utilizzare:

aptitude search '?provides(pattern)'

che può anche essere abbreviato in:

aptitude search '~Ppattern'

dove si patterntrova tutta o parte dell'alternativa che stai cercando. Nel caso specifico di vi, questo non funziona davvero. Se controlli i pacchetti nvie vimcon aptitude showo apt-cache show, vedrai che nessuno dei due elenca "vi" nella sua sezione "Fornisce:". In effetti, nella descrizione di nvi manca completamente quella sezione.

Tuttavia, funziona abbastanza bene per altre alternative, come 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) 

Anche se questo non è perfetto, aptitudeha funzionalità di ricerca incredibilmente flessibili che spesso ti permetteranno di aggirare il problema dei pacchetti che non elencano correttamente le alternative che forniscono, ad esempio usando "~seditors ~dvi\s"come modello di ricerca elencherà tutti i pacchetti nella sezione "editor" il cui la descrizione contiene la stringa "vi".

Un'altra opzione è usare il sito Web dei pacchetti di Debian , dove pacchetti simili sono elencati nella sezione a destra.


1
Grazie per la risposta. Tuttavia, cos'è aps ~Peditor? Se apssi intende che sia una scorciatoia per l'attitudine, va bene, ma per favore non usarlo in una risposta, confonderà semplicemente tutti. Inoltre, se ritieni che manchino delle offerte, puoi presentare una segnalazione di bug nei confronti dei pacchetti corrispondenti.
Faheem Mitha,

Dal contesto, penso che apsdebba rappresentare aptitude search. Ma dovresti usarlo esplicitamente. Tuttavia, non credo sia una risposta praticabile, a prescindere - forse funzionerà con un certo raffinamento. aptitude search -Pvidà un carico di cose irrilevanti. Immagino che cerchi l'intera descrizione del pacchetto.
Faheem Mitha,

aptitude search ~P(nota la tilde) cerca solo in Provides, ma vicorrisponde ad altre Providesvoci; devi specificare una corrispondenza esatta con aptitude search '~P^vi$'. Questo esempio evidenzia una limitazione fondamentale con questo approccio: sebbene ci sia viun'alternativa, non esiste viun pacchetto virtuale ...
Stephen Kitt,

5

Questo dipende. Esistono alcune alternative, come x-www-browser, che non utilizzano un pacchetto e vengono aggiunte tramite gli script del manutentore alle alternative di aggiornamento:

/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

Ci sono altri che usano un singolo metapacchetto per installare qualsiasi versione dello stesso binario (mi vengono in mente anche i pacchetti Java / OpenJRE init). Altri usano un pacchetto virtuale, compilando il "Fornisce" (questo normalmente viene fornito con un aggiornamento al database DPKG alternativo) nel qual caso, ciascuno di questi pacchetti dovrebbe fornire lo stesso binario.

Quindi, come trovare tutti i pacchetti che forniscono un file specifico? Vorrei usare il Provides se conosci un pacchetto che lo fa, e apt-file search fileper tutto il resto.


Esempio per vim?
Faheem Mitha,

1
@FaheemMitha vim fornisce editor.
Braiam,

Lo fa. Quindi fai molti altri pacchetti, compresi quelli che non hanno nulla a che fare con Vim. Quindi, come sarebbe un esempio in questo caso?
Faheem Mitha,

4

I pacchetti virtuali e il sistema di alternative Debian (che è dove entrano in gioco i binari) sono correlati ma non uguali. Per i pacchetti virtuali, è possibile utilizzare apt-cacheper trovare quali pacchetti (reali) "forniscono":

$ 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

Per i gestori display, il pacchetto virtuale è 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

Il sistema di alternative è gestito da chiamate agli update-alternativesscript del manutentore, come mostra la risposta di Braiam, e il resto del sistema di packaging è beato inconsapevole di questi. Il Providescampo è anche più generale delle alternative, poiché un pacchetto può fornirne un altro in termini di servizi o librerie offerti, non semplicemente tramite binari.

Senza i manutentori dei pacchetti che aggiungono informazioni sulle alternative al Providescampo (e creano pacchetti virtuali per tutti gli end point di alternative - come vi) e senza ispezionare i pacchetti stessi, non esiste attualmente un modo generale per stabilire quale pacchetto potrebbe fornire un'alternativa.


2

Strettamente correlato alla domanda, per trovare un'alternativa vi :

 update-alternatives --list editor

Produzione:

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

O:

update-alternatives --config vi

Produzione:

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:

3
Giusto, ma funziona solo per il pacchetto installato. La domanda chiede come farlo per tutti i pacchetti. Forse avrei dovuto essere più esplicito nella domanda.
Faheem Mitha,

1
Corretta. Ma inserisco questo prima di controllare il tuo post iniziale di aggiornamento ... la parte in cui aggiungi "che esiste nei repository Debian"
Andy,

Bene, avevo "tutti questi pacchetti", che pensavo fosse chiaro, ma apparentemente no. Mi dispiace per quello. Ad ogni modo, benvenuto su unix.sx. Vedo che ti sei unito oggi.
Faheem Mitha,

1

In Ubuntu , il pacchetto command-not-foundcontiene un database contenente anche molte alternative. Dopo l'installazione, può essere interrogato con /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(per elencare le alternative per mail).
Attento, quando non vuoi i suggerimenti automatici sui comandi mancanti in bash, scrivi unset -f command_not_found_handlenel tuo ~ / .bashrc o rimuovi la definizione a livello globale in /etc/bash.bashrc. (Fai simile per zsh.)

In Debian , questo strumento usa solo apt-file per creare il database, quindi non sono note alternative (non testate). Lì dice lo stesso di apt-file search ....

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


Non seguo quello che stai suggerendo. Puoi essere più esplicito? In particolare /usr/lib/command-not-found /usr/bin/mailsembra una specie di ricetta, ma non capisco cosa dovrebbe fare. Una spiegazione sarebbe utile.
Faheem Mitha,

Aggiunte alcune parole per chiarire e rimosse /usr/bin/dal comando poiché non funziona.
simohe

Bene, la mia domanda riguarda Debian, non Ubuntu. Anche se non capisco perché Debian e Ubuntu differiscano qui. E infatti il ​​comando che elenchi non fa nulla di utile qui. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found.
Faheem Mitha,

La risposta dice che mailè già installato. Questo controllo può essere ignorato con l'opzione --ignore-installed. Ma anche dopo questo, non otterrai più informazioni (in debian) che da apt-file search mail.
simohe
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.