如何在 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
您可以在此页面的多个位置找到其发布日期。请选择您认为最容易解析脚本的日期。