使用 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_BASE
和DIST
由源文件中的行确定:
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 存储库上的目录列表是愚蠢的。存储库存在的唯一原因就是提供这些信息,因此禁用另一种方便人性化的方式来查看它是我无法理解的。