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


19

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

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

Answers:


28

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

为什么?

  • 32位软件可以在具有64位功能的硬件的64位内核上正常运行。
  • 某些软件仍然依赖特定的32位库。这不是很好,但有时我们无权更改。
  • 系统必须具备32位软件才能满足依赖性,因此它也使用32位存储库。

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

在11.10之前的64位版本的Ubuntu中,一些通用的32位库集打包在一个ia32-libs软件包中,表示为APT / Dpkg,为64位,位于存储库中的此类位置。如果您碰巧需要一个应用程序库,则取决于150+ MB的32位库1。显然,这不是一个好的设计。

多种架构?

新的想法是向APT / Dpkg及其周围的工具引入所谓的“ Multiarch”功能。这是在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位库,则现在可以使用。这是一个简单的元软件包,取决于相同(或至少非常相似)的库集,但是它将使用Multiarch的功能进行安装。ia32-libs-multiarch 安装ia32-libs-multiarch

其他相关阅读

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


5
我建议跑步,dpkg --print-foreign-architectures而不是养猫/etc/dpkg/dpkg.cfg.d/multiarch。12.04之后不存在。
风滚草

我刚刚在家里设置了apt-mirror,希望镜像64位存储库。不幸的是,我无法做到这一点,但我知道现在为什么这样做,并且这样做很有意义。答案已接受!
tgm4883 2013年

@ tgm4883如果您只想运行,则可以删除外部体系结构配置amd64。类似于运行不可用的旧版Ubuntu ia32-libs
gertvdijk 2013年

1
我开始阅读,在我的脑海中它说:嗯,看起来像是gertvdijk的帖子:+)Goede帖子;)
Rinzwind 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.