使用 deb (apt) 软件包存储库时,有时可以通过 http 浏览它们,以确定不同架构(amd64、arm64 等)上可用的内容。例如,Ubuntu 提供了一个文件列表来帮助浏览存储库
但是,其他来源(例如此 Elastic 存储库)不允许常规浏览。
我唯一的选择似乎是将存储库添加到我的源中(对我的系统进行修改):
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
确认存储库提供arm64软件包(因为我在arm64主机上):
Get:7 https://artifacts.elastic.co/packages/7.x/apt stable/main arm64 Packages [78.8 kB]
但是,我想确认存储库提供的所有可用发布架构,并且我想在不必修改我的主机系统的情况下执行此操作。我怎样才能做到这一点?
在此用例中,我必须启动测试 arm64 主机才能确定软件包是否可用。我真的很想避免将来必须做此类事情,而只需远程浏览回购产品。
您不需要将存储库作为目录来浏览。了解所有存储库属性(来自用于添加存储库的字符串),您就可以保证知道发布文件的精确 URL(直接链接)。然后您下载它,它是一个文本文件,其中包含基本存储库信息的列表。wiki 中解释了存储库及其控制文件的结构。
您将从文件开始
$REPO_BASE/dists/$DIST/InRelease
。这些REPO_BASE
和DIST
由源文件中的行确定:在这种情况下,发布文件具有以下直接 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 存储库上的目录列表是愚蠢的。存储库存在的唯一原因正是为了提供该信息,因此禁用另一种方便人类查看它的方式超出了我的理解。