我的笔记本电脑上安装了 64 位 12.10。运行 apt-get update 时,它会下载 32 位软件包的软件包列表(以及源和 64 位软件包列表)。为什么它会在 64 位系统上查找 32 位软件包列表?我已将其尝试查找的项目之一包含在下方。
http://us.archive.ubuntu.com/ubuntu/dists/quantal-backports/multiverse/binary-i386/Packages
答案1
是不是有点令人困惑?让我解释一下。
为什么?
- 32 位软件可以在具有 64 位硬件的 64 位内核上良好运行。
- 有些软件仍然依赖特定的 32 位库。这不太好,但有时我们无力改变这一点。
- 系统必须有 32 位软件才能满足依赖关系,因此它也使用 32 位存储库。
我来自 2011 年初。发生了什么事?
在 Ubuntu 11.10 之前的 64 位版本中,一些常用的 32 位库被打包在一个单独的ia32-libs
包中,对 APT/Dpkg 来说,这个包是 64 位的,并且位于存储库中的某个位置。如果你碰巧需要一个应用程序的库,那么它将依赖于 150+ MB 的 32 位库1。显然,这不是一个好的设计。
多种架构?
新的想法是将所谓的“多架构”功能引入 APT/Dpkg 及其周边工具。这在 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
。这是一个依赖于相同(或至少非常相似)的一组库的简单元包,但它将借助 Multiarch 的强大功能进行安装。
更多相关阅读
1 对于 Lucid (10.04)ia32-libs
包裹安装大小为 155,812.0 kB。