无需添加源即可确定 apt repo 的可用体系结构

无需添加源即可确定 apt repo 的可用体系结构

使用 deb (apt) 软件包存储库时,有时可以通过 http 浏览它们,以确定不同体系结构(amd64、arm64 等)中可用的软件包。例如,Ubuntu 提供了一个文件列表以帮助浏览仓库

然而,其他来源,例如这个 Elastic 仓库,不允许常规浏览。

我唯一的选择似乎是将 repo 实际添加到我的源中(对我的系统进行修改):

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

添加后,运行apt update确认 repo 提供 arm64 软件包(因为我在 arm64 主机上):

Get:7 https://artifacts.elastic.co/packages/7.x/apt stable/main arm64 Packages [78.8 kB]

然而,我想确认 repo 提供的所有可用发布架构,并且我想在不修改我的主机系统的情况下完成此操作。我怎样才能做到这一点?

在这个用例中,我不得不启动一个测试 arm64 主机来确定软件包是否可用。我真的希望以后避免做这种事情,只需远程浏览 repo 产品即可。

答案1

您无需将存储库作为目录浏览。了解所有存储库属性(从您用于添加存储库的字符串中),您一定知道发布文件的精确 URL(直接链接)。然后下载它,它是一个文本文件,其中包含基本存储库信息列表。存储库及其控制文件的结构已解释在 wiki 中

您可以从文件开始$REPO_BASE/dists/$DIST/InRelease。这些REPO_BASEDIST由源文件中的行确定:

deb https://artifacts.elastic.co/packages/7.x/apt stable main
#   REPO_BASE                                     DIST   COMPONENT

在这种情况下,发布文件具有以下直接 URL:。https://artifacts.elastic.co/packages/7.x/apt/dists/stable/InRelease它包含其他存储库文件列表,包括每个体系结构的内容和包文件。

每个 Packages 文件都是一个文本文件,其中包含组件存储库中所有软件包的描述。例如,https://artifacts.elastic.co/packages/7.x/apt/dists/stable/main/binary-arm64/Packages列出存储库的所有 ARM64 二进制编译软件包。链接的格式为$REPO_BASE/dists/$DIST/$COMPONENT/binary-$ARCH/Packages

然后,您还可以计算存储库中每个 deb 文件的链接。上述 Packages 文件中的每个包都有一个Filename项目。您可以使用以下公式构建 deb 链接:$REPO_BASE/$Filename。例如,对于它packetbeat恰好是https://artifacts.elastic.co/packages/7.x/apt/pool/main/p/packetbeat/packetbeat-7.8.0-arm64.deb

这正是 Apt 本身的工作方式,也是您提到的 Ubuntu 实用程序的工作方式。


禁用 Debian 存储库上的目录列表是愚蠢的。存储库存在的唯一原因就是提供这些信息,因此禁用另一种方便人性化的方式来查看它是我无法理解的。

相关内容