如何找到给定包的特定 `*Release` apt 状态信息文件?

如何找到给定包的特定 `*Release` apt 状态信息文件?

我需要以编程方式收集某个包的 aptOriginSuite信息,以便进行配置unattended-upgrades

我可以手动找到相应的 apt 状态信息文件,然后处理它,但是,我需要自动化该过程。

例如,如果我:

  • 添加 PPAppa:qbittorrent-team/qbittorrent-stable
  • 安装qbittorrent-nox

在其他文件中,apt 将创建/var/lib/apt/lists/ppa.launchpad.net_qbittorrent-team_qbittorrent-stable_ubuntu_dists_xenial_InRelease,这是我正在寻找的文件。

我尝试过apt-cache showpkg

$ apt-cache showpkg qbittorrent-nox
Package: qbittorrent-nox
Versions:
4.1.7.99~201908140017-6718-e98f44a~ubuntu16.04.1 (/var/lib/apt/lists/ppa.launchpad.net_qbittorrent-team_qbittorrent-stable_ubuntu_dists_xenial_main_binary-armhf_Packages) (/var/lib/dpkg/status)
[...]

其中不包含_InRelease文件。

是否有一种确切的编程方法来查找*Release文件名,从包开始,或者更好的是,从那里OriginSuite值开始?

编辑:额外输出如下:

$ apt-cache policy qbittorrent-nox  
qbittorrent-nox:
  Installed: 4.1.7.99~201908140017-6718-e98f44a~ubuntu16.04.1
  Candidate: 4.1.7.99~201908140017-6718-e98f44a~ubuntu16.04.1
  Version table:
 *** 4.1.7.99~201908140017-6718-e98f44a~ubuntu16.04.1 500
        500 http://ppa.launchpad.net/qbittorrent-team/qbittorrent-stable/ubuntu xenial/main armhf Packages
        100 /var/lib/dpkg/status
     3.3.1-1 500
        500 http://ports.ubuntu.com/ubuntu-ports xenial/universe armhf Packages
$ grep -r armhf /etc/apt --include="*.list"
# nothing

答案1

根据我所做的研究,没有直接的方法可以解决这个问题。

然而,根据Debian 存储库格式文档,状态信息文件的命名都有精确的规则,可以使用。

_Packages因此,可以通过找到包对应的文件名apt-cache showpkg,然后根据存储库格式规则对其进行处理:

  • 如果存储库有组件,则名称将带有后缀_<component>_binary-<arch>_Packages
  • 否则,后缀将只是_Packages

然后:

  • 将后缀替换为_InRelease,并测试生成的文件名
  • 如果文件存在,则一切完成
  • 如果不是,则将后缀替换为Release(这是具有外部签名的状态文件的替代命名)

相关内容