Finden aller Softwarepakete in Debian, die eine bestimmte Alternative bieten

12

Die Debian-Distribution verfügt über das Debian Alternatives System . Aus dem Wiki:

Das Debian-Alternativsystem bietet die Möglichkeit, mehrere Programme, die dieselben oder ähnliche Funktionen erfüllen, als alternative Implementierungen aufzulisten, die gleichzeitig installiert werden, wobei jedoch eine bestimmte Implementierung als Standard festgelegt ist. Beispielsweise sind auf vielen Systemen mehrere Texteditoren gleichzeitig installiert. Das vi-Programm ist ein klassisches Beispiel für einen Editor mit vielen Implementierungen wie nvi, elvis, vim usw., aber welches sollte als Standard festgelegt werden?

Im Allgemeinen gibt es in Debian mehrere Pakete, die eine bestimmte Alternative bieten. Wie erhält man eine vollständige Liste aller solcher Pakete, die in den Debian-Repositorys existieren? Nehmen wir als Beispiel die vi-Alternative.

ANMERKUNG: Eine solche Abfrage anhand der Liste der installierten Pakete durchzuführen ist einfach, aber diese Frage wird nicht gestellt.

Faheem Mitha
quelle

Antworten:

9

Ich weiß, dass dies etwas spät ist, aber dieser Beitrag ist derzeit einer der Top-Suchhits im Zusammenhang mit der Suche nach Alternativen in Debian.

Das Problem bei der Verwendung update-alternativeshier ist, dass nur installierte Optionen angezeigt werden, soweit ich das beurteilen kann (die Manpage ist ziemlich spärlich).

Um die im Titel gestellte Frage zu beantworten, dh alle verfügbaren Pakete zu finden, die eine Alternative bieten (ob installiert oder nicht), können Sie Folgendes verwenden:

aptitude search '?provides(pattern)'

was auch abgekürzt werden kann zu:

aptitude search '~Ppattern'

Wo patternist die Alternative, nach der Sie suchen, ganz oder teilweise? Im speziellen Fall vifunktioniert dies nicht wirklich. Wenn Sie die Pakete nviund vimmit aptitude showoder überprüfen apt-cache show, werden Sie feststellen, dass keiner der beiden "vi" im Abschnitt "Provides:" auflistet. Tatsächlich fehlt in der Beschreibung von nvi dieser Abschnitt vollständig.

Es funktioniert jedoch recht gut für andere Alternativen, wie zum Beispiel 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) 

Auch wenn dies nicht perfekt ist, aptitudeverfügt es über unglaublich flexible Suchfunktionen , mit denen Sie häufig das Problem umgehen können, dass Pakete nicht korrekt auflisten, welche Alternativen sie anbieten. Wenn Sie beispielsweise "~seditors ~dvi\s"ein Suchmuster verwenden, werden alle Pakete im Abschnitt "Editoren" aufgelistet, deren Beschreibung enthält die Zeichenfolge "vi".

Eine andere Möglichkeit ist die Verwendung der Debian-Paketwebsite , auf der ähnliche Pakete im Abschnitt rechts aufgeführt sind.

Daniel
quelle
1
Danke für die Antwort. Was ist jedoch aps ~Peditor? Wenn apses eine Abkürzung für Eignung sein soll, gut, aber bitte verwenden Sie das nicht in einer Antwort, es wird nur alle verwirren. Wenn Sie der Meinung sind, dass fehlende Angebote vorhanden sind, können Sie einen Fehlerbericht für die entsprechenden Pakete einreichen.
Faheem Mitha
Aus dem Kontext denke ich apsmuss stehen aptitude search. Aber Sie sollten das explizit verwenden. Ich denke jedoch nicht, dass dies eine praktikable Antwort ist, unabhängig davon - vielleicht funktioniert es mit etwas Verfeinerung. aptitude search -Pvigibt eine Menge irrelevanter Sachen. Ich vermute, es durchsucht die gesamte Paketbeschreibung.
Faheem Mitha
aptitude search ~P(Beachten Sie die Tilde) sucht nur in Provides, vistimmt aber mit anderen ProvidesEinträgen überein ; Sie müssen eine genaue Übereinstimmung mit angeben aptitude search '~P^vi$'. Dieses Beispiel zeigt eine grundlegende Einschränkung bei diesem Ansatz: Während es eine viAlternative gibt, gibt es kein vivirtuelles Paket ...
Stephen Kitt
5

Das hängt davon ab. Es gibt einige Alternativen, wie x-www-browser, verwenden kein Paket und werden über Betreuerskripte zu den Update-Alternativen hinzugefügt:

/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

Es gibt andere, die ein einzelnes Metapaket verwenden, um eine beliebige Version derselben Binärdatei zu installieren (auch Java / OpenJRE-Pakete fallen mir ein init). Andere verwenden ein virtuelles Paket, indem sie die "Provides" ausfüllen (dies wird normalerweise mit einem Update der alternativen DPKG-Datenbank geliefert). In diesem Fall sollte jedes dieser Pakete dieselbe Binärdatei bereitstellen.

Wie finde ich alle Pakete, die eine bestimmte Datei enthalten? Ich würde die Angebote verwenden, wenn Sie ein Paket kennen, das dies tut, und apt-file search filefür alles andere.

Braiam
quelle
Beispiel für vim?
Faheem Mitha
1
@FaheemMitha vim bietet editor.
Braiam
Es tut. So auch viele andere Pakete, einschließlich solcher, die nichts mit vim zu tun haben. Wie würde ein Beispiel in diesem Fall aussehen?
Faheem Mitha
4

Virtuelle Pakete und das Debian-Alternativsystem (in dem Binärdateien ins Spiel kommen) sind miteinander verbunden, aber nicht dasselbe. Bei virtuellen Paketen können Sie ermitteln apt-cache, welche (realen) Pakete es "bereitstellen":

$ 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

Für Display-Manager lautet das virtuelle Paket 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

Das alternative System wird durch Aufrufe update-alternativesin Betreuerskripten behandelt, wie die Antwort von Braiam zeigt, und der Rest des Verpackungssystems ist sich dieser glücklicherweise nicht bewusst. Das ProvidesFeld ist auch allgemeiner als Alternativen, da ein Paket ein anderes Paket in Bezug auf angebotene Dienste oder Bibliotheken bereitstellen kann, nicht nur über Binärdateien.

Ohne Paketbetreuer, die Informationen zu Alternativen zum ProvidesFeld hinzufügen (und virtuelle Pakete für alle Endpunkte von Alternativen erstellen - wie z. B. vi) und ohne die Pakete selbst zu überprüfen, gibt es derzeit keinen allgemeinen Weg, bis welches Paket eine Alternative bietet.

muru
quelle
2

Streng auf die Frage bezogen, finden vi Alternative:

 update-alternatives --list editor

Ausgabe:

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

Oder:

update-alternatives --config vi

Ausgabe:

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
quelle
3
Richtig, aber das funktioniert nur für installierte Pakete. In der Frage wird gefragt, wie das für alle Pakete gemacht werden soll. Vielleicht hätte ich in der Frage expliziter sein sollen.
Faheem Mitha
1
Richtig. Aber ich poste dies, bevor ich Ihr erstes Post-Update überprüfe ... den Teil, in dem Sie "die in den Debian-Repositories existieren" hinzufügen
Andy
Nun, ich hatte "all diese Pakete", was ich für klar hielt, aber anscheinend nicht. Das tut mir leid. Wie auch immer, willkommen bei unix.sx. Ich sehe dich heute beigetreten.
Faheem Mitha
1

In Ubuntucommand-not-found enthält das Paket eine Datenbank, die auch viele Alternativen enthält. Nach der Installation kann es mit abgefragt werden /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(um Alternativen für aufzulisten mail).
Vorsicht, wenn Sie die automatischen Vorschläge für fehlende Befehle in bash nicht möchten, schreiben Sie unset -f command_not_found_handlein Ihre ~ / .bashrc oder entfernen Sie die Definition global in /etc/bash.bashrc. (Machen Sie es ähnlich für zsh.)

In Debian verwendet dieses Tool nur apt-file, um die Datenbank zu erstellen, sodass keine Alternativen bekannt sind (nicht getestet). Dort sagt es das gleiche wie apt-file search ....

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

simohe
quelle
Ich folge nicht dem, was Sie vorschlagen. Können Sie expliziter sein? Insbesondere /usr/lib/command-not-found /usr/bin/mailsieht es nach einer Art Rezept aus, aber ich verstehe nicht, was es tun soll. Eine Erklärung wäre hilfreich.
Faheem Mitha
Einige Wörter zur Verdeutlichung hinzugefügt und /usr/bin/aus dem Befehl entfernt, da dies nicht funktioniert.
Simohe
Nun, meine Frage bezieht sich auf Debian, nicht auf Ubuntu. Obwohl ich nicht verstehe, warum sich Debian und Ubuntu hier unterscheiden würden. Und tatsächlich macht der Befehl, den Sie auflisten, hier nichts Nützliches. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found.
Faheem Mitha
Die Antwort sagt, dass mailbereits installiert ist. Diese Prüfung kann mit der Option übersprungen werden --ignore-installed. Aber auch danach erhalten Sie nicht mehr Informationen (in Debian) als von apt-file search mail.
Simohe