Encontrar todos los paquetes de software en Debian que ofrecen una alternativa particular

12

La distribución de Debian tiene el sistema de alternativas de Debian . De la Wiki:

El sistema de alternativas de Debian crea una forma para que varios programas que cumplen las mismas funciones o funciones similares se enumeren como implementaciones alternativas que se instalan simultáneamente pero con una implementación particular designada como predeterminada. Por ejemplo, muchos sistemas tienen varios editores de texto instalados al mismo tiempo. El programa vi es un ejemplo clásico de un editor que tiene muchas implementaciones como nvi, elvis, vim, etc., pero ¿cuál debería designarse como predeterminado?

En general, hay múltiples paquetes en Debian que proporcionan una alternativa particular. ¿Cómo se obtiene una lista completa de todos esos paquetes que existen en los repositorios de Debian? Usemos la alternativa vi como ejemplo.

NOTA: Hacer una consulta de este tipo en la lista de paquetes instalados es fácil, pero esa no es la pregunta.

Faheem Mitha
fuente

Respuestas:

9

Sé que esto es un poco tarde, pero esta publicación es actualmente uno de los principales resultados de búsqueda relacionados con la búsqueda de alternativas en Debian.

El problema con el uso update-alternativesaquí es que solo le mostrará las opciones instaladas hasta donde puedo decir (su página de manual es bastante escasa).

Para responder la pregunta tal como se plantea en el título, es decir, encontrar todos los paquetes disponibles que ofrecen una alternativa (ya sea instalada o no), puede usar:

aptitude search '?provides(pattern)'

que también se puede abreviar para:

aptitude search '~Ppattern'

¿Dónde patternestá todo o parte de la alternativa que está buscando? En el caso específico de vi, esto realmente no funciona. Si inspecciona los paquetes nviy vimcon aptitude showo apt-cache show, verá que ninguno enumera "vi" en su sección "Proporciona:". De hecho, en la descripción de nvi falta esa sección por completo.

Sin embargo, funciona razonablemente bien para otras alternativas, como 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) 

Aunque esto no es perfecto, aptitudetiene capacidades de búsqueda increíblemente flexibles que a menudo le permitirán solucionar el problema de que los paquetes no enumeren correctamente las alternativas que ofrecen, por ejemplo, el uso "~seditors ~dvi\s"como patrón de búsqueda enumerará todos los paquetes en la sección "editores" La descripción contiene la cadena "vi".

Otra opción es utilizar el sitio web de paquetes de Debian , donde se enumeran paquetes similares en la sección de la derecha.

Daniel
fuente
1
Gracias por la respuesta. Sin embargo, ¿qué es aps ~Peditor? Si apsestá destinado a ser un atajo para la aptitud, está bien, pero no lo use en una respuesta, simplemente confundirá a todos. Además, si cree que faltan ofertas, puede presentar un informe de error contra los paquetes correspondientes.
Faheem Mitha
Desde el contexto, creo que apsdebe ser sinónimo aptitude search. Pero deberías usar eso explícitamente. Sin embargo, no creo que sea una respuesta viable, independientemente de que tal vez funcione con cierto refinamiento. aptitude search -Pvida una carga de cosas irrelevantes. Supongo que busca en la descripción completa del paquete.
Faheem Mitha
aptitude search ~P(tenga en cuenta la tilde) solo busca Provides, pero vicoincide con otras Providesentradas; debes especificar una coincidencia exacta con aptitude search '~P^vi$'. Sin embargo, este ejemplo resalta una limitación fundamental con este enfoque: si bien existe una vialternativa, no hay viun paquete virtual ...
Stephen Kitt
5

Esto depende Hay algunas alternativas, como x-www-browser, que no usan un paquete y se agregan mediante scripts de mantenedor a las alternativas de actualización:

/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

Hay otros que usan un metapaquete único para instalar cualquier versión del mismo binario (también me vienen a la mente los paquetes Java / OpenJRE init). Otros usan un paquete virtual, rellenando los "Proporciona" (esto normalmente viene con una actualización de la base de datos alternativa DPKG) en cuyo caso, cualquiera de esos paquetes debe proporcionar el mismo binario.

Entonces, ¿cómo encontrar todos los paquetes que proporcionan un archivo específico? Usaría los Provides si conoces un paquete que lo haga, y apt-file search filepara todo lo demás.

Braiam
fuente
Ejemplo para vim?
Faheem Mitha
1
@FaheemMitha vim proporciona editor.
Braiam
Lo hace. Lo mismo ocurre con muchos otros paquetes, incluidos los que no tienen nada que ver con vim. Entonces, ¿cómo sería un ejemplo en este caso?
Faheem Mitha
4

Los paquetes virtuales y el sistema de alternativas de Debian (que es donde entran en juego los binarios) están relacionados pero no son lo mismo. Para los paquetes virtuales, puede usar apt-cachepara encontrar qué paquetes (reales) lo "proporcionan":

$ 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

Para los administradores de pantallas, el paquete virtual es 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

El sistema de alternativas se maneja mediante llamadas a update-alternativesscripts de mantenedor, como lo muestra la respuesta de Braiam, y el resto del sistema de empaque no lo sabe. El Providescampo también es más general que las alternativas, ya que un paquete puede proporcionar otro en términos de servicios o bibliotecas ofrecidos, no simplemente a través de binarios.

Sin los mantenedores de paquetes agregando información sobre alternativas al Providescampo (y creando paquetes virtuales para todos los puntos finales de alternativas, como vi) y sin inspeccionar los paquetes en sí, no hay una forma general en la actualidad de determinar qué paquete podría proporcionar una alternativa.

muru
fuente
2

Estrictamente relacionado con la pregunta, para encontrar la alternativa vi :

 update-alternatives --list editor

Salida:

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

O:

update-alternatives --config vi

Salida:

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
fuente
3
Correcto, pero eso solo funciona para el paquete instalado. La pregunta pregunta cómo hacer eso para todos los paquetes. Quizás debería haber sido más explícito en la pregunta.
Faheem Mitha
1
Correcto. Pero publico esto antes de verificar la actualización inicial de su publicación ... la parte donde agrega "que existe en los repositorios de Debian"
Andy
Bueno, tenía "todos esos paquetes", lo que pensé que era claro, pero aparentemente no. Lo siento por eso. De todos modos, bienvenidos a unix.sx. Te veo unido hoy.
Faheem Mitha
1

En Ubuntu , el paquete command-not-foundcontiene una base de datos que también contiene muchas alternativas. Después de la instalación, se puede consultar con /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(para enumerar alternativas para mail).
Cuidado, cuando no desee las sugerencias automáticas sobre los comandos que faltan en bash, escriba unset -f command_not_found_handlesu ~ / .bashrc o elimine la definición globalmente /etc/bash.bashrc. (Hacer similar para zsh.)

En Debian , esta herramienta usa solo apt-file para crear la base de datos, por lo que no se conocen alternativas (no probadas). Ahí dice lo mismo que apt-file search ....

Fuente de Ubuntu: https://launchpad.net/command-not-found

simohe
fuente
No entiendo lo que estás sugiriendo. ¿Puedes ser más explícito? En particular, /usr/lib/command-not-found /usr/bin/mailparece una especie de receta, pero no entiendo lo que se supone que debe hacer. Una explicación sería útil.
Faheem Mitha
Se agregaron algunas palabras para aclarar y se eliminaron /usr/bin/del comando ya que esto no funciona.
simohe
Bueno, mi pregunta es sobre Debian, no Ubuntu. Aunque no entiendo por qué Debian y Ubuntu serían diferentes aquí. Y, de hecho, el comando que enumera no hace nada útil aquí. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found.
Faheem Mitha
La respuesta dice que mailya está instalado. Esta verificación se puede omitir con la opción --ignore-installed. Pero también después de esto, no obtendrá más información (en debian) que de apt-file search mail.
simohe