web-dev-qa-db-ja.com

特定の代替手段を提供するDebianのすべてのソフトウェアパッケージを見つける

Debianディストリビューションには Debian Alternatives System があります。 Wikiから:

Debian代替システムは、同じまたは類似の機能を実行する複数のプログラムを、同時にインストールされるが、デフォルトとして指定された1つの特定の実装を持つ代替実装としてリストする方法を作成します。たとえば、多くのシステムには、同時に複数のテキストエディタがインストールされています。 viプログラムは、nvi、elvis、vimなどの多くの実装を持つエディターの典型的な例ですが、デフォルトとして指定する必要があるのはどれですか?

一般に、Debianには特定の代替手段を提供する複数のパッケージがあります。 Debianリポジトリに存在するそのようなすべてのパッケージの完全なリストを取得するにはどうすればよいですか?例としてviの代替を使用しましょう。

注:インストールされているパッケージのリストに対してこのようなクエリを実行するのは簡単ですが、それはこの質問が尋ねるものではありません。

12
Faheem Mitha

これは少し遅れていることは知っていますが、この投稿は現在、Debianでの代替案の検索に関連する検索ヒットのトップの1つです。

ここでupdate-alternativesを使用する際の問題は、私が知る限り、インストールされているオプションしか表示されないことです(そのマニュアルページはかなりまばらです)。

タイトルで提示された質問に答える、つまり、代替手段(インストールされているかどうかに関係なく)を提供するすべての利用可能なパッケージを見つけるには、次を使用できます。

aptitude search '?provides(pattern)'

これは次のように省略できます。

aptitude search '~Ppattern'

ここで、patternは、探している選択肢のすべてまたは一部です。 viの特定のケースでは、これは実際には機能しません。パッケージnviおよびvimaptitude 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」が含まれる「editors」セクションのすべてのパッケージが一覧表示されます。

もう1つのオプションは、 DebianのパッケージWebサイト を使用することです。ここで、同様のパッケージが右側のセクションにリストされています。

9
Daniel

これは状況によって異なります。 x-www-browserのように、パッケージを使用せず、メンテナスクリプトを介してupdate-alternativesに追加される代替手段がいくつかあります。

/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もあります)。 "Provides" (これは通常、代替DPKGデータベースへの更新が付属しています)を埋めることによって仮想パッケージを使用するものもあります。その場合、これらのパッケージはいずれも同じバイナリを提供する必要があります。

では、特定のファイルを提供するすべてのパッケージを見つける方法は?あなたがそうするパッケージを知っているなら、私はProvidesを使います、そしてapt-file search file他のすべてのために。

5
Braiam

仮想パッケージ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

代替システムは、Braiamの回答が示すように、メンテナスクリプトでupdate-alternativesを呼び出すことによって処理され、パッケージングシステムの残りの部分はこれらを幸いにも認識していません。 Providesフィールドは、単にバイナリを介してではなく、提供されるサービスまたはライブラリの観点から別のパッケージを提供する可能性があるため、代替よりも一般的です。

パッケージメンテナがProvidesフィールドに代替案に関する情報を追加し(そしてviのような代替案のすべてのエンドポイントの仮想パッケージを作成し)、パッケージ自体を検査しなければ、現時点では一般的な方法はありません。どのパッケージが代替手段を提供するかまで。

4
muru

質問に厳密に関連して、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:
2
Andy

Ubuntuでは、パッケージcommand-not-foundに多くの選択肢を含むデータベースが含まれています。インストール後、/usr/lib/command-not-found --no-failure-msg --ignore-installed mailで照会できます(mailの代替をリストするため)。
bashでコマンドが欠落していることを自動的に提案したくない場合は、〜/ .bashrcにunset -f command_not_found_handleを書き込むか、/etc/bash.bashrcで定義をグローバルに削除してください。 (zshについても同様に行います。)

Debianでは、このツールはapt-fileのみを使用してデータベースを作成するため、代替手段は不明です(テストされていません)。そこではapt-file search ...と同じように伝えます。

Ubuntuソース: https://launchpad.net/command-not-found

1
simohe