Поиск всех пакетов программного обеспечения в Debian, которые предоставляют конкретную альтернативу

12

В дистрибутиве Debian есть система альтернатив Debian . Из вики:

Система альтернатив Debian позволяет нескольким программам, выполняющим одинаковые или аналогичные функции, указывать их как альтернативные реализации, устанавливаемые одновременно, но с одной конкретной реализацией, обозначенной по умолчанию. Например, во многих системах установлено несколько текстовых редакторов одновременно. Программа vi является классическим примером редактора, который имеет много реализаций, таких как nvi, elvis, vim и т. Д., Но какую из них следует обозначить по умолчанию?

В общем, в Debian есть несколько пакетов, которые предоставляют конкретную альтернативу. Как получить полный список всех таких пакетов, которые существуют в репозиториях Debian? Давайте использовать альтернативу vi в качестве примера.

ПРИМЕЧАНИЕ. Выполнить такой запрос по списку установленных пакетов очень просто, но это не то, что задает этот вопрос.

Фахим Митха
источник

Ответы:

9

Я знаю, что это немного поздно, но этот пост в настоящее время является одним из самых популярных поисковых запросов, связанных с поиском альтернатив в Debian.

Проблема с использованием update-alternativesздесь в том, что он покажет вам только установленные параметры, насколько я могу судить (его справочная страница довольно скудна).

Чтобы ответить на вопрос, изложенный в заголовке, то есть найти все доступные пакеты, которые предоставляют альтернативу (независимо от того, установлена ​​она или нет), вы можете использовать:

aptitude search '?provides(pattern)'

который также может быть сокращен до:

aptitude search '~Ppattern'

где patternнаходится вся или часть альтернативы, которую вы ищете. В конкретном случае viэто действительно не работает. Если вы проверите пакеты nviи vimс помощью aptitude showили apt-cache show, вы увидите, что ни один из них не перечисляет «vi» в разделе «Обеспечивает:». На самом деле, в описании nvi этот раздел полностью отсутствует.

Тем не менее, он работает достаточно хорошо для других альтернатив, таких как 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) 

Несмотря на то, что это не идеально, он aptitudeобладает невероятно гибкими возможностями поиска , которые часто позволяют вам обойти проблему с неправильным перечислением пакетов, в которых указаны альтернативы, которые они предоставляют, например, использование "~seditors ~dvi\s"в качестве шаблона поиска приведет к перечислению всех пакетов в разделе «редакторы», чьи описание содержит строку "vi".

Другой вариант - использовать веб-сайт пакетов Debian , где похожие пакеты перечислены в разделе справа.

Даниил
источник
1
Спасибо за ответ. Однако что это aps ~Peditor? Если apsэто предназначено для краткого описания способностей, хорошо, но, пожалуйста, не используйте это в ответе, это просто смущает всех. Кроме того, если вы считаете, что отсутствуют предложения, вы можете отправить отчет об ошибке в соответствующий пакет (ы).
Фахим Митха
Из контекста, я думаю, apsдолжно стоять aptitude search. Но вы должны использовать это явно. Тем не менее, я не думаю, что это выполнимый ответ, во всяком случае - возможно, он будет работать с некоторым уточнением. aptitude search -Pviдает массу ненужных вещей. Я предполагаю, что он ищет все описание пакета.
Фахим Митха
aptitude search ~P(обратите внимание на тильду) поиск только в Provides, но viсоответствует другим Providesзаписям; вам нужно указать точное соответствие с aptitude search '~P^vi$'. Этот пример подчеркивает фундаментальное ограничение этого подхода: хотя есть viальтернатива, viвиртуального пакета не существует ...
Стивен Китт
5

Это зависит Существуют некоторые альтернативы, такие как x-www-browser, которые не используют пакет и добавляются через сценарии сопровождающего к альтернативам update:

/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

Есть и другие, которые используют один метапакет для установки любой версии того же самого двоичного файла (на ум приходят также пакеты Java / OpenJRE init). Другие используют виртуальный пакет, заполняя «Обеспечивает» (обычно это происходит с обновлением альтернативной базы данных DPKG), и в этом случае любой из этих пакетов должен предоставлять тот же двоичный файл.

Итак, как найти все пакеты, которые предоставляют определенный файл? Я бы использовал Provides, если вы знаете пакет, который делает, и apt-file search fileдля всего остального.

Braiam
источник
Пример для vim?
Фахим Митха
1
@FaheemMitha vim предоставляет editor.
Braiam
Оно делает. Как и многие другие пакеты, включая те, которые не имеют ничего общего с vim. Итак, как будет выглядеть пример в этом случае?
Фахим Митха
4

Виртуальные пакеты и система альтернатив Debian (в которую входят двоичные файлы) связаны, но не совпадают. Для виртуальных пакетов вы можете использовать, apt-cacheчтобы найти, какие (реальные) пакеты «предоставляют» его:

$ 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

Для менеджеров отображения виртуальный пакет 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

Как update-alternativesпоказывает ответ Брайама, система альтернатив обрабатывается вызовами в сценариях сопровождающего, а остальная часть системы упаковки, к счастью, об этом не знает. Эта Providesобласть также является более общей, чем альтернативы, поскольку пакет может предоставлять другую с точки зрения предлагаемых услуг или библиотек, а не только через двоичные файлы.

Без сопровождающих пакетов, добавляющих информацию об альтернативах в Providesполе (и создающих виртуальные пакеты для всех конечных точек альтернатив - например vi), и без проверки самих пакетов, в настоящее время нет общего способа определить, какой пакет может предоставить альтернативу.

Мур
источник
2

Строго связано с вопросом, чтобы найти альтернативу vi :

 update-alternatives --list editor

Выход:

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

Или:

update-alternatives --config vi

Выход:

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
Да, но это работает только для установленного пакета. Вопрос спрашивает, как это сделать для всех пакетов. Возможно, мне следовало быть более ясным в этом вопросе.
Фахим Митха
1
Верный. Но я отправляю это перед проверкой вашего первоначального пост-обновления ... той части, где вы добавляете «которые существуют в репозиториях Debian»
Энди
Ну, у меня были "все такие пакеты", которые я думал, было ясно, но, видимо, нет. Прости за это. В любом случае, добро пожаловать в unix.sx. Я вижу, ты присоединился сегодня.
Фахим Митха
1

В Ubuntu пакет command-not-foundсодержит базу данных, содержащую также много альтернатив. После установки его можно запросить /usr/lib/command-not-found --no-failure-msg --ignore-installed mail(перечислить альтернативы для mail).
Осторожно, если вы не хотите, чтобы автоматические предложения по отсутствующим командам в bash, напишите unset -f command_not_found_handleв ~ / .bashrc или удалите определение глобально в /etc/bash.bashrc. (Делай подобное для зш.)

В Debian этот инструмент использует только apt-файл для создания базы данных, поэтому альтернативы не известны (не проверены). Там это говорит так же, как apt-file search ....

Источник Ubuntu: https://launchpad.net/command-not-found

simohe
источник
Я не понимаю, что вы предлагаете. Можете ли вы быть более явным? Особенно /usr/lib/command-not-found /usr/bin/mailпохоже на какой-то рецепт, но я не понимаю, что он должен делать. Объяснение было бы полезно.
Фахим Митха
Добавил несколько слов для уточнения и удалил /usr/bin/из команды, так как это не работает.
simohe
Ну, мой вопрос касается Debian, а не Ubuntu. Хотя я не понимаю, почему Debian и Ubuntu отличаются здесь. И действительно, команда, которую вы перечисляете, не делает здесь ничего полезного. # /usr/lib/command-not-found mail Command 'mail' is available in '/usr/bin/mail' mail: command not found,
Фахим Митха
Ответ рассказывает, что mailуже установлено. Эта проверка может быть пропущена с опцией --ignore-installed. Но также после этого вы не получите больше информации (в Debian), чем из apt-file search mail.
simohe