Encontrando todos os pacotes de software no Debian que fornecem uma alternativa específica


12

A distribuição Debian possui o Sistema de Alternativas Debian . Do Wiki:

O sistema de alternativas Debian cria uma maneira de vários programas que cumprem funções iguais ou similares serem listados como implementações alternativas instaladas simultaneamente, mas com uma implementação específica designada como padrão. Por exemplo, muitos sistemas têm vários editores de texto instalados ao mesmo tempo. O programa vi é um exemplo clássico de um editor que possui muitas implementações, como nvi, elvis, vim, etc., mas qual deve ser designada como padrão?

Em geral, existem vários pacotes no Debian que fornecem uma alternativa específica. Como se obtém uma lista completa de todos esses pacotes que existem nos repositórios Debian? Vamos usar a alternativa vi como exemplo.

NOTA: É fácil fazer essa consulta na lista de pacotes instalados, mas não é isso que esta pergunta faz.

Respostas:


9

Eu sei que isso é um pouco tarde, mas este post é atualmente um dos principais hits de pesquisa relacionados à busca de alternativas no Debian.

O problema com o uso update-alternativesaqui é que ele mostra apenas as opções instaladas até onde eu sei (a página de manual é bastante esparsa).

Para responder à pergunta apresentada no título, ou seja, localizando todos os pacotes disponíveis que oferecem uma alternativa (instalada ou não), você pode usar:

aptitude search '?provides(pattern)'

que também pode ser abreviado para:

aptitude search '~Ppattern'

onde patternestá toda ou parte da alternativa que você está procurando. No caso específico de vi, isso realmente não funciona. Se você inspecionar os pacotes nvie vimcom aptitude showou apt-cache show, verá que nenhum deles lista "vi" na seção "Fornece:". De fato, a descrição do nvi está faltando nessa seção completamente.

No entanto, funciona razoavelmente bem para outras 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) 

Mesmo que isso não seja perfeito, aptitudepossui recursos de pesquisa incrivelmente flexíveis que geralmente permitem solucionar o problema de pacotes que não listam corretamente quais alternativas eles fornecem - por exemplo, usar "~seditors ~dvi\s"como padrão de pesquisa listará todos os pacotes na seção "editores" cujos description contém a sequência "vi".

Outra opção é usar o site de pacotes do Debian , onde pacotes semelhantes estão listados na seção à direita.


1
Obrigado pela resposta. No entanto, o que é aps ~Peditor? Se apspretende ser um atalho para a aptidão, tudo bem, mas por favor não use isso em uma resposta, isso apenas confundirá todos. Além disso, se você achar que há suprimentos ausentes, poderá registrar um relatório de bug nos pacotes correspondentes.
Faheem Mitha

Do contexto, acho que apsdeve representar aptitude search. Mas você deve usar isso explicitamente. No entanto, não acho que seja uma resposta viável, independentemente - talvez funcione com algum refinamento. aptitude search -Pvidá uma carga de coisas irrelevantes. Suponho que ele pesquisa a descrição completa do pacote.
Faheem Mitha

aptitude search ~P(observe o til) pesquisa apenas em Provides, mas vicorresponde a outras Providesentradas; você precisa especificar uma correspondência exata com aptitude search '~P^vi$'. Este exemplo evidencia uma limitação fundamental com esta abordagem, porém: enquanto há uma vialternativa, não há nenhum vipacote virtual ...
Stephen Kitt

5

Isso depende Existem algumas alternativas, como x-www-browser, não usam um pacote e são adicionadas por meio de scripts de manutenção às alternativas de atualização:

/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

Existem outros que usam um único metapacote para instalar qualquer versão do mesmo binário (os pacotes Java / OpenJRE também vêm à mente init). Outros usam um pacote virtual preenchendo o "Fornece" (normalmente vem com uma atualização do banco de dados alternativo do DPKG); nesse caso, qualquer um desses pacotes deve fornecer o mesmo binário.

Então, como encontrar todos os pacotes que fornecem um arquivo específico? Eu usaria o Fornece se você conhece um pacote que possui e apt-file search filepara todo o resto.


Exemplo para o vim?
Faheem Mitha

1
@FaheemMitha vim fornece editor.
Braiam 18/09/14

Faz. O mesmo acontece com muitos outros pacotes, incluindo aqueles que não têm nada a ver com o vim. Então, como seria um exemplo nesse caso?
Faheem Mitha

4

Pacotes virtuais e o sistema de alternativas Debian (que é onde os binários entram em jogo) estão relacionados, mas não são os mesmos. Para pacotes virtuais, você pode usar apt-cachepara encontrar quais pacotes (reais) "fornecem":

$ 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 gerenciadores de exibição, o pacote virtual é 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

O sistema de alternativas é tratado por chamadas update-alternativesem scripts de mantenedor, como mostra a resposta de Braiam, e o restante do sistema de empacotamento não os conhece. O Providescampo também é mais geral do que alternativas, pois um pacote pode fornecer outro em termos de serviços ou bibliotecas oferecidos, não apenas via binários.

Sem os mantenedores de pacotes adicionando informações sobre alternativas ao Providescampo (e criando pacotes virtuais para todos os pontos de extremidade das alternativas - como vi) e sem inspecionar os próprios pacotes, não há atualmente uma maneira geral de determinar qual pacote pode oferecer uma alternativa.


2

Estritamente relacionado à questão, para encontrar vi alternativa:

 update-alternatives --list editor

Resultado:

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

Ou:

update-alternatives --config vi

Resultado:

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
Certo, mas isso funciona apenas para o pacote instalado. A pergunta pergunta como fazer isso para todos os pacotes. Talvez eu devesse ter sido mais explícito na pergunta.
Faheem Mitha 17/09/14

1
Corrigir. Mas eu postar isso antes de verificar a sua actualização post inicial ... a parte em que você adicionar "que existem nos repositórios do Debian"
Andy

Bem, eu tinha "todos esses pacotes", o que achei claro, mas aparentemente não. Me desculpe por isso. De qualquer forma, bem-vindo ao unix.sx. Eu vejo você se juntou hoje.
Faheem Mitha 17/09/14

1

No Ubuntu , o pacote command-not-foundcontém um banco de dados contendo também muitas alternativas. Após a instalação, ele pode ser consultado com /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(para listar alternativas para mail).
Cuidado, quando você não desejar as sugestões automáticas sobre comandos ausentes no bash, escreva unset -f command_not_found_handleno seu ~ / .bashrc ou remova a definição globalmente em /etc/bash.bashrc. (Faça o mesmo para zsh.)

No Debian , esta ferramenta usa apenas o apt-file para criar o banco de dados, portanto, nenhuma alternativa é conhecida (não testada). Lá diz o mesmo que apt-file search ....

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


Eu não sigo o que você está sugerindo. Você pode ser mais explícito? Em particular, /usr/lib/command-not-found /usr/bin/mailparece algum tipo de receita, mas não entendo o que é suposto fazer. Uma explicação seria útil.
Faheem Mitha

Foram adicionadas algumas palavras para esclarecer e removidas /usr/bin/do comando, pois isso não funciona.
simohe

Bem, minha pergunta é sobre o Debian, não o Ubuntu. Embora eu não entenda por que o Debian e o Ubuntu diferem aqui. E, de fato, o comando que você lista não faz nada útil aqui. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found.
Faheem Mitha

A resposta diz que mailjá está instalado. Esta verificação pode ser ignorado com a opção --ignore-installed. Mas também depois disso, você não obterá mais informações (no debian) do que a partir de apt-file search mail.
simohe
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.