APT如何决定查找哪些“binary-”目录?

4
使用树莓派,我正在尝试使用比提供的2.7版本更新的puppet版本,通过添加puppetlabs存储库来实现,该存储库没有'binary-armhf'文件夹。(对于非Raspbian用户-Raspbian基于wheezy。)此存储库的结构如下:
dists - hardy - ... - ... - wheezy - dependencies - ... - main - binary-all - binary-amd64 - binary-i386 - source 我的期望是APT应该在看到wheezy/Release文件中没有main/binary-armhf目录时,回退到main/binary-all;但是,apt-get update打印出一个错误。
W: Failed to fetch http://apt.puppetlabs.com/dists/wheezy/Release  Unable to find expected entry 'main/binary-armhf/Packages' in Release file (Wrong sources.list entry or malformed file)

当使用apt-cache madison puppet命令时,没有显示任何二进制软件包(仅源代码)可从apt.puppetlabs.com进行安装。

通过检查从默认存储库正确安装的其他软件包,此平台上的apt似乎接受“all”作为在binary-armhf/Packages文件中列出的软件包的架构;但是,在查找要下载的Packages(.gz)时,它似乎不接受“all”作为架构。

以下是实际问题:

  1. 是否有任何客户端将其自己的架构视为“all”?
  2. 是否有一种方法可以配置APT以检查main/binary-all以及main/binary-$native_arch?编辑:有(在sources.list中使用deb [arch=all]),但不清楚这样做是否总是安全的(例如,如果您说[arch=i386],是否会使您的系统认为它可以安装i386软件包,还是只会获取Packages列表?)。
  3. 如果以上两个答案都是否定的,那么没有客户端实际提取的main/binary-all发行版的预期效用是什么?

接受了答案:您能确认[arch=all]是否奏效吗?这将是其他受影响用户的好提示 :) - Izzy
啊 - 是的,我能够做到。补充到答案中。 - azernik
非常感谢!猜想你刚刚在IRC上解救了某个人的一天。现在必须让他知道,如果他再次进入频道 :) - Izzy
刚遇到了类似的问题,apt-get 想要获取 i386 架构的软件包。我找到了这个解决方案:dpkg --remove-architecture i386。 - D.Bugger
1个回答

2
只有警告(W:),而不是错误。 Release 文件仅包含其他索引文件的校验和。 binary-all 用于与架构无关的软件包,例如使用perl或python编写的软件包。
我认为Packages文件应该正确指定二进制软件包的查找位置。我已经检查过了,puppet软件包似乎在binary-all/Packages文件中指定。但主要问题可能是aptitude不允许您使用来自不知道您的架构的存储库的任何软件包。也许只需空的binary/arm-hf/Packages文件+在Release文件中的Architectures:i386 amd64 all中提到arm-hf就足够了。在那之前,您必须手动下载.deb文件并使用dpkg -i安装它们。
现在回答您的3个问题:我想说默认情况下没有客户端架构“all”。APT还会检查“binary-all”目录,但它可能无法在不知道其架构的存储库的情况下运行。说到这一点,使用[arch=all]的解决方法应该有效,但我不会尝试除“all”以外的任何其他内容。
这是一个关于Debian存储库格式的文档:Debian Repository Format

对于好奇的人来说,definitely works(无论架构); 我不能确认[arch=ANYTHING_ELSE]是否安全。 - azernik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接