如何在 Ubuntu 上可靠地确定软件包的最新版本何时可用?

如何在 Ubuntu 上可靠地确定软件包的最新版本何时可用?

如何在 Ubuntu 上创建一个命令来报告给定软件包的最新版本的发布时间?

(我需要检查这一点,以证明我们在规定时间内在某些服务器上安装了某些更新。)

现在,我的脚本执行以下操作:

  • 问题apt-cache policy <packagename>
  • 提取最新版本的存储库 URL
  • 问题apt-cache show <packagename>
  • 提取最新版本的 URL 路径
  • 连接它们
  • 对结果 URL 发出 HTTP HEAD 请求
  • 报告 Last-Modified 标头值

这假设本地索引是最新的(即sudo apt-get update或等效索引最近已运行足够长的时间)。这对我来说没问题。

除了这个假设之外,这个方法有多可靠?还有更好的方法吗?

答案1

发射台,用于跟踪 Ubuntu 软件包的构建和发布的主要平台,提供了一个 API。

您可能对该对象感兴趣出版历史

Python 中的示例 - 如果你需要映射,你可能需要稍微复杂化一下二进制包名称源包名称第一的:

from launchpadlib.launchpad import Launchpad
lp = Launchpad.login_anonymously("https://github.com/example/ex")
ubuntu = lp.distributions["ubuntu"]
archive = ubuntu.main_archive
focal = ubuntu.getSeries(name_or_version="focal")
firefox_releases = archive.getPublishedSources(
     distro_series=focal,
     source_name="firefox", exact_match=True,
     status="Published")
for s in firefox_releases:
    print(s.source_package_version, s.pocket, s.date_published)

如果这不符合你的需要,只要你能说明一个令人信服的理由,它就有可能被改变。

警告:使用此方法可以优雅地处理一些你的方法令人讨厌的失败模式。但无论你对结果数据做什么,你的工作仍然是决定如何处理已取代已删除状态。例如:今天查询的最新包可能是较旧比昨天最新的包查询要多,所以不要假设严格的单调增量。

答案2

如果您愿意抓取 HTML,您可以从启动板获取任何软件包的发布日期。

考虑最近发布的sudo软件包。在此示例中,假设您使用的是 Ubuntu 20.04 LTS (focal)。您拥有最新的软件包,版本 1.8.31-1ubuntu1.2。然后您可以获取:

https://launchpad.net/ubuntu/+source/sudo/1.8.31-1ubuntu1.2/+publishinghistory

您可以在此页面的多个位置找到其发布日期。请选择您认为最容易解析脚本的日期。

相关内容