"dpkg -l"に似ていますが、パッケージソース/ソースを含むDebianのパッケージを一覧表示

"dpkg -l"に似ていますが、パッケージソース/ソースを含むDebianのパッケージを一覧表示

このテーブルのすべてのパッケージを一覧表示したいと思います。

$ dpkg -l libav\*

ただし、この出力に加えて、各パッケージのソース/ソース(希望する用語はわかりません)も必要です。パッケージがどのソースにも対応していない場合は、不明または類似しているとマークする必要があります。私の考えに最も有望なアプローチは、以下を使用することです。dctrlのツールしかし、どうすればいいのかわかりません。背景としてffmpegと一致しないライブラリをデバッグしようとしています。バラよりDebian バグレポート - ffmpeg: 不安定なバージョンで 4:0.6.1-5 をバックポートすると警告が表示される: ライブラリの設定の不一致。エラー報告はもはや問題になりませんが、まだ問題に興味があります。

形式を消去するには、次のようにする必要があります。

ii  libavahi-client-dev  0.6.27-2+squeeze1  Development files for the Avahi client library  squeeze
ii  libavcodec-dev       4:0.6.1-5          Development files for libavcodec                unstable

同じパッケージが複数のカテゴリで利用可能な場合。絞り、テスト中最低/最も古い利用可能なカテゴリを使用する必要があります。この場合は絞ります。

答え1

Dpkgはこの情報を追跡しません。各ファイルのソースは.deb重要ではありません。

Aptはこの情報も追跡しませんが、今すぐパッケージを入手できる場所を知っています。これで十分です。

〜のように9000コメントで作成し、apt-cache policy '^libav'名前が正規表現に一致するパッケージのバージョンがインストールされているか^libav使用可能かどうかを示します。出力は解析するのに特に便利ではありませんが、必要な形式を大まかに提供する最小限のテスト済みスクリプトは次のとおりです。

{ LC_CTYPE=C apt-cache policy '^libav'; echo .; } | perl -l -ne '
    if (!/^ /) {
        if (defined $version) {print "$package: $version unknown"}
        s/: *$//; $package=$_; $installed=1; $version=undef;
    }
    if (/^ *Installed: *\(none\)$/) {$installed=0}
    if ($installed && /^ \*+ +([^ ]+)/) {$version=$1}
    if (/^     [^ ]/) {$version=undef}
    if ($installed && defined $version && /^ +[0-9]+ +[^ ]+ +([^ \/]+)/) {
        print "$package: $version $1";
        $version=undef;
    }
'

要求された情報を取得する別の方法はを使用することですaptitude versions。繰り返しますが、以下の最小限にテストされたコードスニペットはおおよその目的のフォーマットを提供します。パターンは、"^libav" ~i名前付き正規表現に一致するインストール済みパッケージと一致します。

aptitude versions '"^libav" ~i' |
awk -vRS= '{if ($6 !~ /[^0-9]/) {$6="unknown"}
            print $3, $2, $5, $6}'

別々にパッケージ化されたユーティリティもあります。apt-show-versions繰り返しますが、おおよその要求された形式で必要な情報を提供します。

apt-show-versions | grep '^libav'

関連情報