Arch Linuxのpacmanでオプションの依存関係を一覧表示する


23

私はArch Linuxを使用しています。

インストールされているすべてのパッケージのオプションの依存関係をリストする方法はありますか?はいの場合、このリストをフィルタリングして、欠落している(インストールされていない)パッケージのみを表示できますか?


1
私はArchを使用していませんが、「dependency」はオプションではありません(他のディストリビューションにはありません)。
ヨルダン

知る限りでは、すぐにpacmanでできるとは思いません。しかし、それを行うための小さなスクリプトを書くことは非常に可能です。pacmanにインストール済みパッケージのリストを照会します。YaourtにPKGBUILDをフェッチさせ、optdepsのリストを読み取らせます。pacman-gitの最新バージョンには、optdepsが既にインストールされているかどうかを示すコミットがあります。
ダーニル

@jordanm:ビルドの依存関係とオプションの依存関係があります。optdepsは、パッケージの特定の機能にのみ必要です。そのため、その機能を使用している場合を除き、依存関係の負荷でシステムを肥大化する必要はありません。
darnir

私が使用pacman -Qi | grep "Optional Deps" | grep -v None | grep -v installed
stewSquared

回答:


5

expacを使用して、pacmanデータベースを照会できます。

何かのようなもの:

awk 'NF>=2' <(expac "%n %O") > optdeps

お使いのマシンにインストールされているすべてのパッケージのリストを印刷しますoptdepends各1(のために%O1と呼ばれるファイルにoptdeps。次に、インストール済みのoptdependsパッケージのリストに対してこれをソートできます。

man expacオプションの完全なリストを参照してください。


1.これは大文字のOであり、ゼロではありません。私たちは2つを区別するフォントを持つことができないため...


[poke]現在、このようなフォントがあります。:)
ムル14

4

AURリポジトリ(aur / pacdep)には便利なユーティリティがあります。

pacdepには多くのオプションがあります-ほんの一例-「thunar-archive-plugin」のオプションパッケージを見つけてください:

> pacdep -oppp thunar-archive-plugin
[...]
Optional dependencies:    6.16 MiB
  extra/file-roller     3.89 MiB
  extra/kdeutils-ark    1.12 MiB
  community/xarchiver   1.16 MiB
[...]

上記の出力は、オプションパッケージがインストールされていないことを意味します。「xarchiver」をインストールすると、出力は次のようになります

[...]
Optional dependencies:    6.16 MiB
 local:    1.16 MiB
  xarchiver            1.16 MiB
 sync:     5.01 MiB
  extra/file-roller    3.89 MiB
  extra/kdeutils-ark   1.12 MiB
[...]

私はhttp://mywaytoarch.tumblr.com/post/34979742718/easily-list-package-dependenciesでこの答えを見つけました(最初の部分)


3

これは正確には効率的ではありませんが、必要なものを見つけることができます(色で!):

pacman -Q > /tmp/paccache
for pkg in $(awk '{print $1}' /tmp/paccache) ; do 
   echo -n "$pkg => "; 
   for dep in $(pacman -Qi $pkg | awk -F: '/Optional Deps/{gsub(/[\<\>=].*/,"");print $NF;}' ) ; do 
       grep -q "$dep" /tmp/paccache && COLOR=32 ; echo -en "\e[1;${COLOR:-31}m${dep}\e[0;m " ; unset COLOR ; 
   done 
   echo
done 

よくわかりませんが||、の&&後にではなくgrep、残りの行を括弧で囲む必要がありますか?
ロルド

さらに重要なことは、おそらくpacman出力の「Depends On」セクションの代わりに「Optional Deps」セクションを使用する必要があることです。
ロード

たとえば、xmms2の場合pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1
i336_

2

@DarkHeartのソリューションは実際には機能しないことに気づかなければなりませんでしたが、実際に機能するようになりました。(ただし、色なし)

@acsonwryanによって提案されたexpacの代わりに似たツールであるpackage-queryを使用しています。既にインストールされているためです(yaourtの依存関係です)。代わりにexpacを使用するように変更するのは簡単です。

すべてのオプションの依存関係のリストは、ほとんどがpackage-queryの呼び出しによって行われます。最初のforループは説明を削除するため、オプションの依存関係のパッケージ名のみが残ります。2番目のforループは、2行目の結果を出力する前に、1行目のインストール済みの依存関係を削除します。

#!/usr/bin/perl
use strict;
use warnings;

my %deps;
for (`package-query -Q -f'%n %O'`) {
    $deps{ (/^(\S+)/)[0] } = [/(\S+):/g];
}
my @pkgs = keys %deps;
for my $pkg (@pkgs) {
    my @missing_deps = grep { !($_ ~~ @pkgs) } @{ $deps{$pkg} };
    print "$pkg => @missing_deps\n" if @missing_deps;
}

2

これでうまくいくはずです:

comm -23 <(expac -l"\n" "%o" | sort -u) <(expac -l"\n" "%n\n%S" | sort -u)

commすべてのオプションの依存関係をリストする最初の入力、2番目にインストールされたすべてのパッケージおよびそれらの「提供」属性を入力 両方のリストはソートされ、各要素はのために1回のみ含まれsort -uます。次に、最初のリストに含まれるが2番目のリストには含まれない行のみが表示されます。

(@Archemarの提案を組み込むために編集)


0

時には後方に作業しなければならない場合があります...最初にオプションではないすべての依存関係を見つけ、次に完全なリストと相互参照してから、uniqを使用します。これにより、インストールされているオプションの依存関係のリストが生成されます。

インストールされているすべてを見つける

pacman -Q

オプションではないものをすべて検索します。

pacman -Qent

したがって、一意のエントリはオプションである必要があります。

(pacman -Q; pacman -Qent) | sort | uniq -u 

欠落しているオプションのリストを生成するのは、説明ではなく、きれいではありませんが、機能します。

pacman -Q > /tmp/paccache; for pkg in $(awk '{print $1}' /tmp/paccache); do pacman -Qi $pkg | grep "^Optional Deps" | grep -v None >/dev/null && echo $pkg >> /tmp/hasdeps; done

for pkg in $(awk '{print $1}' /tmp/hasdeps); do echo -ne "Package: $pkg ___ "; (pacman -Qi $pkg | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1) | grep -v installed; echo ___; done | grep -v "___ ___" | sed -e 's/Optional Deps/ /' -e 's/___//' | sed -e 's/ \+/ /g'

0

GNU sedでのみ試しましたが、

yay -Qi | sed -n '/Optional Deps/{:l s/.* \([a-zA-Z0-9.\-]\+\):.*/\1/p; n; /Required By/!bl}'

これはうまくいきました(sort / uniqを好きなように使用してください)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.