当前位置: 首页>>技术教程>>正文


apt – 为什么我的 64 位系统会寻找 32 位存储库?

,

问题描述

我的笔记本电脑上安装了 64 位 12.10。运行 apt-get 更新时,它会下载 32 位软件包的软件包列表(以及源和 64 位软件包列表)。为什么它要在 64 位系统上寻找 32 位包列表?我在下面包含了它试图找到的项目之一。

http://us.archive.ubuntu.com/ubuntu/dists/quantal-backports/multiverse/binary-i386/Packages

最佳方法

令人困惑,不是吗?让我解释一下。

为什么?

  • 32 位软件在具有 64 位硬件的 64 位内核上运行良好。

  • 一些软件仍然依赖特定的 32 位库。这不好,但有时我们没有能力改变它。

  • 32 位软件必须可用于系统以满足依赖性,因此它也使用 32 位存储库。

我来自 2011 年初。发生了什么事?

在 11.10 之前的 64 位版本的 Ubuntu 中,一些常见的 32 位库集被打包在一个 ia32-libs 包中,表示 APT/Dpkg 是 64 位的,并且在存储库中的这样一个位置。如果您的应用程序恰好需要一个库,这将取决于 150+ MB 的 32 位库1。显然,这不是一个好的设计。

多种架构?

新想法是将 so-called “Multiarch” 功能引入 APT/Dpkg 及其相关工具。这在 Launchpad here is one of them 上的几个蓝图中有所体现。 Oneiric (11.10) 成为第一个支持 Multiarch 的版本。

它是如何工作的?

您可以告诉 Dpkg 您的系统能够运行哪些架构。在我的 12.04 64 位安装中,这是在这里:

$ cat /etc/dpkg/dpkg.cfg.d/multiarch 
foreign-architecture i386

它打开了 i386 包的整个世界,amd64 仍然是默认包:

$ apt-cache show libqt4-core                   | grep -E "^(Filename|Architecture)"
Architecture: amd64
Filename: pool/universe/q/qt4-x11/libqt4-core_4.8.1-0ubuntu4.3_amd64.deb

$ apt-cache show libqt4-core:i386              | grep -E "^(Filename|Architecture)"
Architecture: i386
Filename: pool/universe/q/qt4-x11/libqt4-core_4.8.1-0ubuntu4.3_i386.deb

上面的示例表明,Multiarch 使包维护者能够简单地使他们的包依赖于 libqt4-core:i386,并且可以安装任何 32 位库/包(因此可以安装任何依赖于任何 32 位库/包的包),而不是预选集。

ia32-libs兼容性

如果您习惯于将 ia32-libs 包安装为一个方便的包来安装一组通用的基本 32 位库,那么您现在可以使用 ia32-libs-multiarch 。这是一个简单的元数据包,它依赖于相同(或至少非常相似)的一组库,但它将借助 Multiarch 的强大功能进行安装。

更多相关阅读

1 对于 Lucid (10.04),ia32-libs 软件包安装大小为 155,812.0 kB。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13503.html,未经允许,请勿转载。