Trouver tous les progiciels dans Debian qui fournissent une alternative particulière

12

La distribution Debian a le système d'alternatives Debian . Du Wiki:

Le système d'alternatives Debian permet à plusieurs programmes remplissant des fonctions identiques ou similaires d'être répertoriés comme des implémentations alternatives qui sont installées simultanément mais avec une implémentation particulière désignée par défaut. Par exemple, de nombreux systèmes ont plusieurs éditeurs de texte installés en même temps. Le programme vi est un exemple classique d'un éditeur qui a de nombreuses implémentations telles que nvi, elvis, vim, etc. mais laquelle devrait être désignée comme défaut?

En général, il existe plusieurs paquets dans Debian qui fournissent une alternative particulière. Comment obtenir une liste complète de tous ces paquets qui existent dans les référentiels Debian? Prenons l'exemple vi.

REMARQUE: effectuer une telle requête sur la liste des packages installés est facile, mais ce n'est pas ce que cette question demande.

Faheem Mitha
la source

Réponses:

9

Je sais que c'est un peu tard, mais ce message est actuellement l'un des meilleurs résultats de recherche liés à la recherche d'alternatives dans Debian.

Le problème avec l'utilisation update-alternativesici est qu'il ne vous montrera que les options installées pour autant que je sache (sa page de manuel est assez clairsemée).

Pour répondre à la question posée dans le titre, c'est-à-dire trouver tous les packages disponibles qui offrent une alternative (installée ou non), vous pouvez utiliser:

aptitude search '?provides(pattern)'

qui peut également être abrégé en:

aptitude search '~Ppattern'

où se patterntrouve tout ou partie de l'alternative que vous recherchez. Dans le cas particulier de vi, cela ne fonctionne pas vraiment. Si vous inspectez les packages nviet vimavec aptitude showou apt-cache show, vous verrez que ni l'un ni l'autre ne répertorie "vi" dans sa section "Fournit:". En fait, la description de nvi manque complètement cette section.

Cependant, cela fonctionne assez bien pour d'autres alternatives, telles que 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) 

Même si ce n'est pas parfait, aptitudepossède des capacités de recherche incroyablement flexibles qui vous permettront souvent de contourner le problème des packages qui ne répertorient pas correctement les alternatives qu'ils fournissent - par exemple, en utilisant "~seditors ~dvi\s"comme modèle de recherche, tous les packages de la section «éditeurs» description contient la chaîne "vi".

Une autre option consiste à utiliser le site Web des paquets de Debian , où des paquets similaires sont répertoriés dans la section à droite.

Daniel
la source
1
Merci pour la réponse. Mais qu'est-ce que c'est aps ~Peditor? Si apsest destiné à être un raccourci pour l'aptitude, très bien, mais s'il vous plaît ne l'utilisez pas dans une réponse, cela ne fera que confondre tout le monde. De plus, si vous pensez qu'il manque des offres, vous pouvez déposer un rapport de bogue sur le ou les packages correspondants.
Faheem Mitha
Du contexte, je pense que apsdoit représenter aptitude search. Mais vous devez l'utiliser explicitement. Cependant, je ne pense pas que ce soit une réponse viable, peu importe - peut-être que cela fonctionnera avec un certain raffinement. aptitude search -Pvidonne une charge de choses non pertinentes. Je suppose qu'il recherche la description complète du paquet.
Faheem Mitha
aptitude search ~P(notez le tilde) recherche uniquement dans Provides, mais vicorrespond à d'autres Providesentrées; vous devez spécifier une correspondance exacte avec aptitude search '~P^vi$'. Cet exemple met en évidence une limitation fondamentale de cette approche: bien qu'il existe une vialternative, il n'y a pas vide package virtuel ...
Stephen Kitt
5

Cela dépend. Il existe des alternatives, comme x-www-browser, n'utilisez pas de package et sont ajoutées via des scripts de maintenance aux alternatives de mise à jour:

/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

Il y en a d'autres qui utilisent un seul métapaquet pour installer n'importe quelle version du même binaire (les packages Java / OpenJRE viennent également à l'esprit init). D'autres utilisent un package virtuel, en remplissant les "Provides" (cela vient normalement avec une mise à jour de la base de données DPKG alternative) auquel cas, n'importe lequel de ces packages devrait fournir le même binaire.

Alors, comment trouver tous les packages qui fournissent un fichier spécifique? J'utiliserais le Provides si vous connaissez un paquet qui le fait, et apt-file search filepour tout le reste.

Braiam
la source
Exemple pour vim?
Faheem Mitha
1
@FaheemMitha vim fournit editor.
Braiam
Cela fait. Il en va de même pour de nombreux autres packages, y compris ceux qui n'ont rien à voir avec vim. Alors, à quoi ressemblerait un exemple dans ce cas?
Faheem Mitha
4

Les paquets virtuels et le système alternatif Debian (qui est l'endroit où les binaires entrent en jeu) sont liés mais pas identiques. Pour les packages virtuels, vous pouvez utiliser apt-cachepour trouver quels packages (réels) le «fournissent»:

$ 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

Pour les gestionnaires d'affichage, le package virtuel est 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

Le système alternatif est géré par des appels à update-alternativesdes scripts de maintenance, comme le montre la réponse de Braiam, et le reste du système d'emballage n'en est absolument pas conscient. Le Providesdomaine est également plus général que les alternatives, puisqu'un package peut en fournir un autre en termes de services ou de bibliothèques proposés, et pas seulement via des binaires.

Sans les responsables de package ajoutant des informations sur les alternatives au Provideschamp (et créant des packages virtuels pour tous les points de terminaison des alternatives - comme vi) et sans inspecter les packages eux-mêmes, il n'y a actuellement aucun moyen général de savoir quel package pourrait fournir une alternative.

muru
la source
2

Strictement lié à la question, pour trouver vi alternative:

 update-alternatives --list editor

Production:

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

Ou:

update-alternatives --config vi

Production:

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
la source
3
D'accord, mais cela ne fonctionne que pour le package installé. La question demande comment procéder pour tous les packages. J'aurais peut-être dû être plus explicite dans la question.
Faheem Mitha
1
Correct. Mais je poste ceci avant de vérifier votre mise à jour initiale ... la partie où vous ajoutez "qui existent dans les dépôts Debian"
Andy
Eh bien, j'avais "tous ces paquets", ce que je pensais être clair, mais apparemment pas. Désolé pour ça. Quoi qu'il en soit, bienvenue sur unix.sx. Je vois que vous vous êtes joint à nous aujourd'hui.
Faheem Mitha
1

Dans Ubuntu , le paquet command-not-foundcontient une base de données contenant également de nombreuses alternatives. Après l'installation, il peut être interrogé avec /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(pour lister les alternatives pour mail).
Attention, lorsque vous ne voulez pas les suggestions automatiques sur les commandes manquantes dans bash, écrivez unset -f command_not_found_handledans votre ~ / .bashrc ou supprimez la définition globalement dans /etc/bash.bashrc. (Faites de même pour zsh.)

Dans Debian , cet outil utilise uniquement apt-file pour créer la base de données, donc aucune alternative n'est connue (non testée). Là, il dit la même chose que apt-file search ....

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

simohe
la source
Je ne suis pas ce que vous proposez. Pouvez-vous être plus explicite? En particulier, cela /usr/lib/command-not-found /usr/bin/mailressemble à une sorte de recette, mais je ne comprends pas ce qu'elle est censée faire. Une explication serait utile.
Faheem Mitha
Ajout de quelques mots pour clarifier et suppression /usr/bin/de la commande car cela ne fonctionne pas.
simohe
Eh bien, ma question concerne Debian, pas Ubuntu. Bien que je ne comprenne pas pourquoi Debian et Ubuntu différeraient ici. Et en effet, la commande que vous listez ne fait rien d'utile ici. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found.
Faheem Mitha
La réponse indique qu'il mailest déjà installé. Cette vérification peut être ignorée avec l'option --ignore-installed. Mais aussi après cela, vous n'obtiendrez pas plus d'informations (dans debian) que de apt-file search mail.
simohe