如何在32位计算机上安装64位.deb文件?


17

我有Ubuntu 14.04。我最近下载了Viber。Viber .deb文件具有64位体系结构。我想在计算机上安装它,但是我的计算机仅支持32位。

运行的输出lscpu如下:

Architecture: i686
CPU op-mode(s): 32-bit, 64-bit 
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1 
Core(s) per socket: 2 
Socket(s): 1 
Vendor ID: GenuineIntel 
CPU family: 6 
Model: 23 
Stepping: 10 
CPU MHz: 2800.000 
BogoMIPS: 5586.12 
Virtualization: VT-x 
L1d cache: 32K 
L1i cache: 32K 
L2 cache: 2048K

3
您如何确定它不支持64位?如果必须运行64位程序,则必须安装64位OS。
muru

我听说有些软件可以完成这项工作...那就是我要问的问题
Umar Mukthar,2014年

您将必须使用虚拟机:askubuntu.com/questions/180761/…–
muru

lscpu在Terminal 中运行的输出是什么?
αғsнιη

7
是的,您的系统具有 64位功能,应该尽早重新安装它,因为您将再次遇到此问题,以后处理起来会更加痛苦。
2014年

Answers:


22

前提是您的硬件支持64位,则可以:

CPU操作模式:32位,64位

并且该软件包准备使用多体系结构,这也是事实:

 dpkg -I viber.deb
 new debian package, version 2.0. <--- here
 size 57046082 bytes: control archive=8024 bytes.
       0 bytes,     0 lines      0                    
    1210 bytes,    29 lines      control              
    9475 bytes,    33 lines   *  copyright            
    7404 bytes,    85 lines      md5sums              
      39 bytes,     2 lines   *  postinst             #!/bin/bash
     800 bytes,    35 lines   *  preinst              #!/bin/bash
     500 bytes,    24 lines   *  prerm                #!/bin/bash
 Package: viber
 Version: 4.2.2.6
 Section: non-free/net
 Priority: extra
 Architecture: amd64 <---- and here

您只需安装必要的64位库和二进制文件即可,这些文件和二进制文件是运行该应用程序所需的程序包的依赖项(以后不再介绍),对虚拟性能的影响为零。就我而言,我刚刚安装了软件包:

$ sudo dpkg --add-architecture amd64
## adding 64-bits architecture package, in my system I didn't need to
## but it's likely you have
$ sudo apt-get update # this downloads the package list for amd64 arch
$ sudo dpkg -i viber.deb
Selecting previously unselected package viber.
(Reading database ... 268703 files and directories currently installed.)
Preparing to unpack viber.deb ...
Unpacking viber (4.2.2.6) ...
Setting up viber (4.2.2.6) ...
Processing triggers for hicolor-icon-theme (0.13-1) ...
Processing triggers for gnome-menus (3.13.3-1) ...
Processing triggers for mime-support (3.56) ...
Processing triggers for desktop-file-utils (0.22-1) ...

然后开始遇到问题...

程序包管理者决定,他们不应列出其程序包的任何依赖关系,

 Installed-Size: 141336
 Conflicts: Viber (<< 4.2.2.6)
 Replaces: Viber (<< 4.2.2.6)
 Maintainer: Viber Media Inc <support@viber.com>

他们实际需要的是:

ldd /opt/viber/Viber | grep 'not found'
    libXcomposite.so.1 => not found
    libxslt.so.1 => not found
    libxml2.so.2 => not found
    libgstreamer-0.10.so.0 => not found
    libgstapp-0.10.so.0 => not found
    libgstbase-0.10.so.0 => not found
    libgstinterfaces-0.10.so.0 => not found
    libgstpbutils-0.10.so.0 => not found
    libgstvideo-0.10.so.0 => not found
    libsqlite3.so.0 => not found

因此,您必须手动查找并安装缺少的库如果您知道正确的工具,这将很容易。apt-file在这里很方便,http://packages.ubuntu.com的功能“搜索软件包的内容”也很好用。但是我继续搜索它们:

这些文件已经安装在我的系统中,您只需复制软件包名称,即以冒号结尾的名称amd64。您应该按原样复制软件包名称:

dpkg -S $(ldd /opt/viber/Viber | awk '{print $3}' | grep -vP 'not|viber')
libc6:amd64: /lib/x86_64-linux-gnu/libpthread.so.0
libc6:amd64: /lib/x86_64-linux-gnu/libdl.so.2
libc6:amd64: /lib/x86_64-linux-gnu/librt.so.1
libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6
libc6:amd64: /lib/x86_64-linux-gnu/libm.so.6
libgcc1:amd64: /lib/x86_64-linux-gnu/libgcc_s.so.1
libc6:amd64: /lib/x86_64-linux-gnu/libc.so.6
libx11-6:amd64: /usr/lib/x86_64-linux-gnu/libX11.so.6
libxext6:amd64: /usr/lib/x86_64-linux-gnu/libXext.so.6
zlib1g:amd64: /lib/x86_64-linux-gnu/libz.so.1
libgl1-mesa-glx:amd64: /usr/lib/x86_64-linux-gnu/libGL.so.1
libxrender1:amd64: /usr/lib/x86_64-linux-gnu/libXrender.so.1
libglib2.0-0:amd64: /lib/x86_64-linux-gnu/libglib-2.0.so.0
libglib2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
libxcb1:amd64: /usr/lib/x86_64-linux-gnu/libxcb.so.1
libglapi-mesa:amd64: /usr/lib/x86_64-linux-gnu/libglapi.so.0
libxdamage1:amd64: /usr/lib/x86_64-linux-gnu/libXdamage.so.1
libxfixes3:amd64: /usr/lib/x86_64-linux-gnu/libXfixes.so.3
libx11-xcb1:amd64: /usr/lib/x86_64-linux-gnu/libX11-xcb.so.1
libxcb-glx0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-glx.so.0
libxcb-dri2-0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-dri2.so.0
libxcb-dri3-0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-dri3.so.0
libxcb-present0:amd64: /usr/lib/x86_64-linux-gnu/libxcb-present.so.0
libxcb-sync1:amd64: /usr/lib/x86_64-linux-gnu/libxcb-sync.so.1
libxshmfence1:amd64: /usr/lib/x86_64-linux-gnu/libxshmfence.so.1
libxxf86vm1:amd64: /usr/lib/x86_64-linux-gnu/libXxf86vm.so.1
libdrm2:amd64: /usr/lib/x86_64-linux-gnu/libdrm.so.2
libpcre3:amd64: /lib/x86_64-linux-gnu/libpcre.so.3
libffi6:amd64: /usr/lib/x86_64-linux-gnu/libffi.so.6
libxau6:amd64: /usr/lib/x86_64-linux-gnu/libXau.so.6
libxdmcp6:amd64: /usr/lib/x86_64-linux-gnu/libXdmcp.so.6

这些我没有安装它们,可以使用ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", $1}' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/'以下命令获得:

$ ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", $1}' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/'
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstapp-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstinterfaces-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstpbutils-0.10.so.0
libgstreamer-plugins-base0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstvideo-0.10.so.0
libgstreamer0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstbase-0.10.so.0
libgstreamer0.10-0:amd64: /usr/lib/x86_64-linux-gnu/libgstreamer-0.10.so.0
libsqlite3-0:amd64: /usr/lib/x86_64-linux-gnu/libsqlite3.so.0
libxcomposite1:amd64: /usr/lib/x86_64-linux-gnu/libXcomposite.so.1
libxml2:amd64: /usr/lib/x86_64-linux-gnu/libxml2.so.2
libxslt1.1:amd64: /usr/lib/x86_64-linux-gnu/libxslt.so.1

apt-file给我提供64位程序包是一种挑逗,所以我不得不sudo apt-file -a amd64 update强迫它具有64位文件列表。

现在,让我解释一下以上内容:

  • ldd /path/to/binary:读取二进制文件,并告诉您所需的库,符号等。
  • dpkg -S:搜索哪些软件包提供了特定的安装文件。
  • awksedgrep:修改的文本流,以仅处理感兴趣的部分或显示所希望的输出。
  • |$(...):第一个让我管一个命令到另一个输出,以及后来让我执行/的主要的被执行之前评估的命令。

TL; dr只需安装以下软件包:

sudo dpkg --add-architecture amd64 ## adding 64-bits architecture package
sudo apt-get update
sudo apt-get install libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer-plugins-base0.10-0:amd64 libgstreamer0.10-0:amd64 libgstreamer0.10-0:amd64 libsqlite3-0:amd64 libxcomposite1:amd64 libxml2:amd64 libxslt1.1:amd64 libc6:amd64 libdrm2:amd64 libffi6:amd64 libgcc1:amd64 libgl1-mesa-glx:amd64 libglapi-mesa:amd64 libglib2.0-0:amd64 libpcre3:amd64 libstdc++6:amd64 libx11-6:amd64 libx11-xcb1:amd64 libxau6:amd64 libxcb1:amd64 libxcb-dri2-0:amd64 libxcb-dri3-0:amd64 libxcb-glx0:amd64 libxcb-present0:amd64 libxcb-sync1:amd64 libxdamage1:amd64 libxdmcp6:amd64 libxext6:amd64 libxfixes3:amd64 libxrender1:amd64 libxshmfence1:amd64 libxxf86vm1:amd64 zlib1g:amd64

您还需要安装64位内核。


root @ umar:/ home / umar / Desktop#sudo dpkg -i viber.deb dpkg:处理归档文件viber.deb(--install)时出错:软件包体系结构(amd64)与系统(i386)不匹配在处理时遇到错误: viber.deb
Umar Mukthar,

@AUmarMukthar sudo dpkg --add-architecture amd64
Braiam 2014年

我尝试了您的命令。没有进一步的进展
Umar Mukthar 2014年

2
“可能还需要安装64位内核。” -不太可能,可以100%确定。32位内核根本不需要设置64个进程环境。
2014年


11

无法在32位OS上安装仅支持64位arch的软件,反之亦然。为了安装64位软件,您需要一个支持64位的硬件,并在其顶部运行一个64位OS。

我还要提及的是,不可能在仅支持32位体系结构的硬件上将64位OS作为虚拟机安装。您的硬件应支持64位架构以及虚拟化支持,以创建64位虚拟机。


1
您可以在32位计算机上安装64位vm,就像可以安装任何体系结构之一一样,例如qemu。请注意,但是它会非常慢。

@Vality您的回答似乎很好。您能否进一步改善答案。
Umar Mukthar,2014年

@AUmarMukthar我好用吗?如果仍然缺乏,请发表评论,我会看看是否可以改善。

10

我不得不说你不是真的

我的电脑支持32位

根据运行lscpu已安装的Ubuntu版本的输出,结果是32位,而您的系统可以支持64位应用程序,如果要安装64位应用程序,则必须安装64位Ubuntu OS。看到下面这行:

Architecture: i686              # <-- your kernel is 32 bit (32 bit Ubuntu)
CPU op-mode(s): 32-bit, 64-bit  # <-- your cpu can handle 32 or 64 bit instructions
Byte Order: Little Endian
CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 1 
Core(s) per socket: 2 
Socket(s): 1 
Vendor ID: GenuineIntel 
CPU family: 6 
Model: 23 
Stepping: 10 
CPU MHz: 2800.000 
BogoMIPS: 5586.12 
Virtualization: VT-x 
L1d cache: 32K 
L1i cache: 32K 
L2 cache: 2048K

下载安装 64位Ubuntu 14.04.1,然后也安装Viber


如果我这样做是正确的,那么到目前为止我会丢失其他已安装的应用程序。所以只有我在寻找解决方案。多么感谢您的信息。+1为您的努力
Umar Mukthar 2014年

10

您可以在使用32位硬件构建的计算机上安装64位软件,就像使用动态转换在x86目标上运行ARM软件一样。

基本上,诸如qemu之类的软件位于程序与计算机之间,执行从AMD64指令集到x86(可能是i686)的转换(非常严重)。承认性能,在您情况下可能是完全可以避免)。

鉴于您正在使用ubuntu,您将获得有关如何进行设置的出色文档。基本上,您有两个选择之一,您可以在具有自己的内核的完整64位VM环境中运行程序,或者,我想在这里想要的是用户空间可视化,它使用了thunk(我不认为这通常是如今称为thunk,但忘记了新词)将系统调用从64位转换为32位,以便您可以使用自己的内核。

现在,该指南比我更好地解释了此问题,但简而言之,您需要安装qemu和qemu-kvm-extras-static软件包,然后使用qemu-debootstrap为您的64位程序设置环境和库。然后,您需要使用binfmt_misc和静态qemu解释器(qemu-arch-static,在您的情况下可能是x86_64,x64或AMF64)在其环境中运行程序。

但是请注意,您的CPU似乎支持64位指令,因此您可以安装64位ubuntu,而无需在AMD64计算机上运行x86代码进行任何仿真,并且如果能够做到这一点,则可能会更容易,另一方面,如果您想了解qemu和体系结构仿真的世界(如果您有一个专门为说而构建的程序……可能会在以后出现……ARM,例如为手机构建的程序),我建议您继续但要当心,有时可能需要一些摆弄或调试才能使其正常运行。


5
这种“动态翻译”虚拟化将非常缓慢。并且由于他首先拥有64位系统,因此最好只安装64位OS。
迈克尔·汉普顿

@MichaelHampton我知道它会很慢,确实已经指出,我也注意到他使用64位OS可能会更好,但是我也想给出一个答案,可以回答所问的问题。

我认为“性能下降”不足以说明它会变得多么慢。:)
迈克尔·汉普顿

@MichaelHampton是的。现在开心?;)
价2014年

是的,现在我喜欢。:)
迈克尔·汉普顿


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.