¿Cómo instalar el archivo .deb de 64 bits en una máquina de 32 bits?

17

Tengo Ubuntu 14.04. Recientemente descargué Viber . El archivo .deb de Viber tiene una arquitectura de 64 bits. Quiero instalarlo en mi computadora, pero mi computadora solo admite 32 bits.

El resultado de la ejecución lscpues el siguiente:

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
A Umar Mukthar
fuente
3
¿Cómo puede estar seguro de que no es compatible con 64 bits? Si tiene que ejecutar programas de 64 bits, debe instalar un sistema operativo de 64 bits.
muru
Escuché que algunos softwares hacen ese trabajo ... Eso es lo que estoy preguntando
un Umar Mukthar
Tendrá que usar máquinas virtuales: askubuntu.com/questions/180761/…
muru
¿Cuál es el resultado de correr lscpuen la Terminal?
αғsнιη
77
Sí, su sistema es capaz de 64 bits, y debe reinstalarlo lo antes posible, porque se encontrará con este problema nuevamente y será aún más doloroso tratarlo más adelante.
Michael Hampton

Respuestas:

22

Siempre que su hardware sea compatible con 64 bits, lo que hace:

Modo (s) de operación de CPU: 32 bits, 64 bits

y el paquete fue preparado para usar multiarch, que también es cierto:

 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

simplemente puede instalar las bibliotecas y binarios de 64 bits necesarios que dependen del paquete (que es ninguno, más sobre eso más adelante) que necesita para ejecutar la aplicación, con un impacto virtual cero en el rendimiento. En mi caso, acabo de instalar el paquete muy bien:

$ 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) ...

Y luego comenzó a tener problemas ...

Los administradores de paquetes decidieron que no deberían enumerar ninguna dependencia para su paquete,

 Installed-Size: 141336
 Conflicts: Viber (<< 4.2.2.6)
 Replaces: Viber (<< 4.2.2.6)
 Maintainer: Viber Media Inc <[email protected]>

que realmente necesitan:

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

¡así que debe encontrar e instalar las bibliotecas que faltan manualmente! Esto es fácil si conoce las herramientas correctas. apt-filees útil aquí, también la funcionalidad http://packages.ubuntu.com "Buscar en el contenido de los paquetes" también está bien. Pero seguí adelante y los busqué:

Estos archivos ya están instalados en mi sistema, solo necesita copiar el nombre del paquete, el que está antes de los dos puntos que termina con amd64. Debe copiar los nombres de los paquetes tal como están:

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

Estos no los tuve instalados, que obtuve usando 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-filefue una provocación para darme los paquetes de 64 bits, así que tuve que hacer sudo apt-file -a amd64 updatepara forzarlo a tener la lista de archivos de 64 bits.

Ahora, déjame explicarte qué es todo lo anterior:

  • ldd /path/to/binary: lee un binario y le dice cuáles son las bibliotecas, símbolos, etc.
  • dpkg -S: busca qué paquetes proporcionan un archivo instalado específico.
  • awk, sedy grep: están modificando la secuencia de texto para procesar solo las partes interesantes o mostrar el resultado deseado.
  • |, $(...): el primero me permite canalizar la salida de un comando a otro, y el segundo me permite ejecutar / evaluar un comando antes de que se ejecuten los principales.

TL; dr solo instala estos paquetes:

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

También necesita instalar el núcleo de 64 bits.

Braiam
fuente
root @ umar: / home / umar / Desktop # sudo dpkg -i viber.deb dpkg: archivo de procesamiento de errores viber.deb (--install): la arquitectura del paquete (amd64) no coincide con el sistema (i386) Se encontraron errores durante el procesamiento: viber.deb
Un Umar Mukthar
@AUmarMukthar sudo dpkg --add-architecture amd64.
Braiam
Intenté tu orden. Ningún progreso adicional
un Umar Mukthar
2
"Es probable que también necesite instalar el núcleo de 64 bits". - eso no es probable, es 100% seguro. Un kernel de 32 bits simplemente no tiene lo necesario para configurar un entorno de 64 procesos.
Mat
11

No es posible instalar un software que admita solo un arco de 64 bits en un sistema operativo de 32 bits, mientras que lo contrario es cierto. Para instalar un software de 64 bits, necesitará un hardware que admita un sistema operativo de 64 bits y un sistema operativo de 64 bits que se ejecute en la parte superior.

También me gustaría mencionar que no es posible instalar el sistema operativo de 64 bits como una máquina virtual en un hardware que solo admite arquitectura de 32 bits. Su hardware debe admitir la arquitectura de 64 bits junto con el soporte de virtualización para crear máquinas virtuales de 64 bits.

Amritanshu Pandey
fuente
1
Puede instalar una máquina virtual de 64 bits en una máquina de 32 bits del mismo modo que puede instalar una de cualquier arquitectura, consulte qemu, por ejemplo. Sin embargo, tenga en cuenta que será extraordinariamente lento.
Vality
@Vality Tu respuesta parece ser buena. ¿Podría mejorar aún más la respuesta?
Un Umar Mukthar
@AUmarMukthar ¿Soy tan útil? Si aún falta, comente y veré si puedo mejorarlo.
Vality
10

Tengo que decir que no eres verdad sobre

mi computadora solo admite 32 bits

Según la salida de correr lscpu su versión de Ubuntu que se instaló es de 32 bits, mientras que su sistema puede admitir aplicaciones de 64 bits si desea instalar la aplicación de 64 bits, debe instalar 64 bits del sistema operativo Ubuntu. ver estas líneas a continuación:

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

Descargue e instale Ubuntu 14.04.1 de 64 bits y luego instale Viber también.

αғsнιη
fuente
Eso sí, si lo hago, perderé otras aplicaciones instaladas hasta ahora. Así que solo estoy buscando una solución. De todos modos, gracias por tu información. +1 por tus esfuerzos
Un Umar Mukthar
10

Puede instalar software de 64 bits en una máquina construida con hardware de 32 bits de la misma manera que puede ejecutar dicho software ARM en un objetivo x86, utilizando traducción dinámica.

Básicamente, una pieza de software como qemu se encuentra entre los programas y su computadora, realizando una traducción del conjunto de instrucciones AMD64 al x86 (probablemente i686) (con un impacto de rendimiento muy severo , lo que en su caso podría ser totalmente evitable).

Dado que está utilizando ubuntu, tiene una excelente documentación sobre cómo configurar esto . Básicamente, tiene una de dos opciones: puede ejecutar el programa en un entorno VM completo de 64 bits con su propio kernel o, lo que creo que desea aquí es la visualización del espacio del usuario, esto utiliza thunking (no creo que sea comúnmente llamó a thunking en estos días, pero olvide la nueva palabra) para traducir las llamadas del sistema de 64 bits a 32 bits para que pueda usar su propio núcleo.

Ahora la guía explica esto mejor que yo, pero en resumen necesitas instalar qemu y los paquetes qemu-kvm-extras-static y luego usar qemu-debootstrap para configurar un entorno y bibliotecas para tu programa de 64 bits. Luego debe usar binfmt_misc y el intérprete estático qemu (qemu-arch-static, en su caso probablemente x86_64, x64 o AMF64) para ejecutar su programa dentro de su entorno.

Sin embargo, tenga en cuenta que su CPU parece admitir instrucciones de 64 bits, por lo que es posible que instale ubuntu de 64 bits, sin emulación, puede ejecutar el código x86 en una máquina AMD64 y si puede hacerlo, puede ser más fácil, si, por otro lado, desea descubrir qemu y el mundo de la emulación de la arquitectura (puede venir más adelante si obtiene un programa creado para decir ... ARM como algo construido para un teléfono) Le recomiendo que siga adelante, pero tenga cuidado , las cosas a veces toman un poco de violín o depuración antes de que funcionen bien.

La realidad
fuente
55
Este tipo de virtualización de "traducción dinámica" será muy lenta . Y dado que tiene un sistema de 64 bits en primer lugar, sería mejor instalar un sistema operativo de 64 bits.
Michael Hampton
@MichaelHampton Sé que será lento y de hecho lo he notado, también he notado que puede estar mejor con un sistema operativo de 64 bits, sin embargo, también quería dar una respuesta que respondiera a la pregunta formulada.
Vality
No pensé que el "golpe de rendimiento" explica adecuadamente lo lento que será. :)
Michael Hampton
@MichaelHampton Verdadero. ¿Feliz ahora? ;)
Vality
Sí, ahora me gusta. :)
Michael Hampton
-1

Si está utilizando el sistema de 32 bits, use

sudo dpkg --force-architecture -i viber.deb

enlace: Cómo instalar Viber en Ubuntu 13.10, 32 bits

Stan
fuente
En realidad no está funcionando también. Descargar Viber para Windows e instalarlo con Wine, funcionó para mí.
Stan