为什么我的64位系统会寻找32位回购?

我的笔记本电脑上安装了64位12.10。 运行apt-get update时,它会下载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 。 显然,这不是一个好的设计。

多种架构?

新的想法是为APT / Dpkg及其周围的工具引入所谓的“Multiarch”function。 这是在Launchpad上的几个蓝图中呈现的, 这是其中之一 。 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 安装ia32-libs-multiarch 。 这是一个简单的元数据包,取决于相同(或至少非常相似)的库集,但它将使用Multiarch的强大function进行安装。

进一步的相关读物

  • 为什么我不能安装“ia32-libs”(没有候选人)?
  • MultiArch上的Ubuntu社区Wiki
  • 关于技术细节和确切规范的Ubuntu官方Wiki

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