我需要以编程方式收集某个包的 aptOrigin
和Suite
信息,以便进行配置unattended-upgrades
。
我可以手动找到相应的 apt 状态信息文件,然后处理它,但是,我需要自动化该过程。
例如,如果我:
- 添加 PPA
ppa: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
文件名,从包开始,或者更好的是,从那里Origin
和Suite
值开始?
编辑:额外输出如下:
$ 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
(这是具有外部签名的状态文件的替代命名)