APT元のホスト名(元のラベルの代わりに)を使用してインストールされているすべてのパッケージを一覧表示するにはどうすればよいですか?

APT元のホスト名(元のラベルの代わりに)を使用してインストールされているすべてのパッケージを一覧表示するにはどうすればよいですか?

サードパーティのAPTリポジトリを使用するリスクを制限しようとしています。私が回避しようとしているのは、私がDebianからインストールしたものよりも最新のバージョンを使用しているサードパーティのリポジトリに悪意のあるパッケージが侵入していることです。

最近、新しいAPTソースを追加するたびに、次のようにAPT固定を使用してそのソースの特定のパッケージのみをインストールします。

Package: *
Pin: origin debian.nabijaczleweli.xyz
Pin-Priority: -1

Package: systemd-zram
Pin: origin debian.nabijaczleweli.xyz
Pin-Priority: 500

Pin: origin <hostname>これを行う代わりに使用していますOrigin: <tag>。私が正しく理解した場合、元のタグはリポジトリ自体(リリースファイル内)によって制御され、悪意debianや無知のために簡単に設定される可能性があります。 (私はこれが実際に起こっているのを見ました。)対照的に、ソースホスト名は指定されたURIから派生しますsources.list

これはうまく機能しているようで、今ではすべてのサードパーティのAPTソースに適用したいと思います。これを行うには、各サードパーティのリポジトリからどのパッケージをインストールしたかを知る必要があります。問題は、インストールされたパッケージのリストと元のURIまたはホスト名を取得する方法が見つからないことです。

Origin URI適性はこれを発表することを嬉しく思います。パッケージ情報画面1(含まない)検索述語それも表示されませんパッケージ一覧

dpkg-queryapt-cacheパッケージに関する多くの情報を提供できますが、元のURIまたはホスト名を取得する方法が見つかりませんでした。

私はファイル名の最初の部分を元のホスト名として使用してコンテンツを解決できると仮定しています/var/lib/apt/lists/*_Packagesが、これは影響を受けたくありません。

だから:

  1. この状況を考えてみる価値はありますか?破損したリポジトリがさまざまな方法で私を台無しにする可能性があるので、心配を止め、爆弾を愛する方法を学ぶ必要があります。

  2. パッケージソースを表すReleasesファイルのフィールドが、ここで使用されている元のホスト名よりも信頼性が低いと思うのは正しいですか?OriginPin: origin <hostname>

  3. インストールされているすべてのパッケージのリストと元のホスト名を取得する方法はありますか?

ありがとうございます!

¹該当するページのスクリーンショットは表示されているフィールドを説明するには古すぎますが、Origin-URI最新バージョンのAptitudeはここにパッケージの完全なURIを表示します。

答え1

aptitude欲しいロジックに愚かなようです。

解決策はPythonに切り替えることです。

import apt

CACHE = apt.Cache()

for pkg in CACHE:
    if not pkg.installed:
        continue
    for orig in pkg.candidate.origins if pkg.candidate else []:
        if len(orig.site) == 0:
            continue
        print(pkg, pkg.candidate.version, orig.site)

修正するパッケージaptには以下が含まれます。

bash# dpkg -S /usr/lib/python3/dist-packages/apt/__init__.py
python3-apt: /usr/lib/python3/dist-packages/apt/__init__.py

関連情報