apt Python API 中的组件或档案“现在”是什么意思?

apt Python API 中的组件或档案“现在”是什么意思?

我有一个在 Ubuntu 上运行的 Python 脚本。脚本使用以下命令获取所有已安装的 apt 包:

apt_cache = apt.cache.Cache()

我想获取每个已安装软件包的存储库名称。虽然我期望看到xenial/主页xenial/宇宙xenial-更新/主要等等,有些包有现在/现在作为存储库名称。

('linux-headers-generic', [<Origin component:'now' archive:'now' origin:'' label:'' site:'' isTrusted:False>])

大多数其他包如下:

('zip', [<Origin component:'main' archive:'xenial' origin:'Ubuntu' label:'Ubuntu' site:'de.archive.ubuntu.com' isTrusted:True>, <Origin component:'now' archive:'now' origin:'' label:'' site:'' isTrusted:False>])

现在这里的意义是什么?

答案1

仔细研究源代码,版本now来自dpkgstatus文件,其中不包括软件包的原始来源。因此,您将看到now当前安装的任何软件包的带有存档的版本。您还可以在 的输出中看到这一点apt-cache policy

$ apt-cache policy
Package files:
 100 /var/lib/dpkg/status
     release a=now
...

例如:

$  apt-cache policy apt
apt:
  Installed: 1.2.25
  Candidate: 1.2.25
  Version table:
 *** 1.2.25 500
        500 http://jp.archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages
        100 /var/lib/dpkg/status

安装的版本将在 API 中具有以下来源:

<Origin component:'main' archive:'xenial-updates' origin:'Ubuntu' label:'Ubuntu' site:'jp.archive.ubuntu.com' isTrusted:True>
<Origin component:'now' archive:'now' origin:'' label:'' site:'' isTrusted:False>

但是,如果您获取的版本为now唯一来源,则意味着apt无法在任何来源中找到它。这可能发生在:

  • 已安装的版本不再存在于任何源中(是时候更新了!)
  • 使用 deb 文件安装的软件包,但存储库中没有相应的软件包
  • 从随后被禁用的源安装的软件包

相关内容