Comment installer le fichier .deb 64 bits sur une machine 32 bits?

17

J'ai Ubuntu 14.04. J'ai récemment téléchargé Viber . Le fichier .deb Viber a une architecture 64 bits. Je veux l'installer sur mon ordinateur, mais mon ordinateur ne prend en charge que 32 bits.

La sortie de l'exécution lscpuest la suivante:

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
la source
3
Comment pouvez-vous être sûr qu'il ne prend pas en charge 64 bits? Si vous devez exécuter des programmes 64 bits, vous devez installer un système d'exploitation 64 bits.
muru
J'ai entendu dire que certains logiciels font ce travail ... C'est ce que je demande
Un Umar Mukthar
Vous devrez utiliser des machines virtuelles: askubuntu.com/questions/180761/…
muru
Quelle est la sortie de l'exécution lscpudans Terminal?
αғsнιη
7
Oui, votre système est 64 bits capable, et vous devrait réinstaller le plus tôt possible, parce que vous courrez dans ce problème à nouveau et il sera encore plus pénible à traiter plus tard.
Michael Hampton

Réponses:

22

À condition que votre matériel prenne en charge 64 bits, ce qui:

Mode (s) opérationnel (s) du processeur: 32 bits, 64 bits

et le package a été préparé pour utiliser multiarch, ce qui est également vrai:

 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

vous pouvez simplement installer les bibliothèques et les binaires 64 bits nécessaires qui sont la dépendance du package (qui n'en est pas, plus à ce sujet plus tard) dont vous avez besoin pour exécuter l'application, avec un impact virtuel sur les performances nulles. Dans mon cas, je viens d'installer le package très 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) ...

Et puis a commencé à rencontrer des problèmes ...

Les gestionnaires de packages ont décidé de ne répertorier aucune dépendance pour leur package,

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

dont ils ont réellement besoin:

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

vous devez donc trouver et installer les bibliothèques manquantes manuellement! C'est facile si vous connaissez les bons outils. apt-filevient à portée de main ici, également http://packages.ubuntu.com fonctionnalité "Rechercher le contenu des packages" est également très bien. Mais je suis allé de l'avant et les ai recherchés:

Ces fichiers sont déjà installés sur mon système, il vous suffit de copier le nom du package, celui avant les deux points qui se termine par amd64. Vous devez copier les noms des packages tels qu'ils sont:

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

Celles-ci, je ne les avais pas installées, que j'ai obtenues en utilisant 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était un taquin de me donner les paquets 64 bits, donc je devais le faire sudo apt-file -a amd64 updatepour le forcer à avoir la liste des fichiers 64 bits.

Maintenant, laissez-moi vous expliquer ce qui est tout ce qui précède:

  • ldd /path/to/binary: lit un binaire et vous indique quelles sont les bibliothèques, symboles, etc. requis
  • dpkg -S: recherchez les packages qui fournissent un fichier installé spécifique.
  • awk, sedet grep: modifient le flux de texte pour ne traiter que les parties intéressantes ou afficher la sortie souhaitée.
  • |, $(...): le premier me permet de diriger la sortie d'une commande vers une autre, et le dernier me permet d'exécuter / évaluer une commande avant que les principales ne soient exécutées.

TL; dr installez simplement ces packages:

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

Vous devez également installer le noyau 64 bits.

Braiam
la source
root @ umar: / home / umar / Desktop # sudo dpkg -i viber.deb dpkg: archive de traitement des erreurs viber.deb (--install): l'architecture du package (amd64) ne correspond pas au système (i386) Des erreurs se sont produites lors du traitement: viber.deb
A Umar Mukthar
@AUmarMukthar sudo dpkg --add-architecture amd64.
Braiam
J'ai essayé ta commande. Aucun autre progrès
A Umar Mukthar
2
"Il est probable que vous deviez également installer le noyau 64 bits." - ce n'est pas probable, c'est certain à 100%. Un noyau 32 bits n'a tout simplement pas ce qu'il faut pour configurer un environnement de processus 64.
Mat
11

Il n'est pas possible d'installer un logiciel qui ne prend en charge que l'arc 64 bits sur un système d'exploitation 32 bits alors que l'inverse est vrai. Pour installer un logiciel 64 bits, vous aurez besoin d'un matériel prenant en charge 64 bits et un système d'exploitation 64 bits fonctionnant par-dessus.

Je voudrais également mentionner qu'il n'est pas possible d'installer un système d'exploitation 64 bits en tant que machine virtuelle sur un matériel qui ne prend en charge qu'une architecture 32 bits. Votre matériel doit prendre en charge l'architecture 64 bits ainsi que la prise en charge de la virtualisation afin de créer des machines virtuelles 64 bits.

Amritanshu Pandey
la source
1
Vous pouvez installer une machine virtuelle 64 bits sur une machine 32 bits tout comme vous pouvez installer l'une des architectures, regardez qemu par exemple. Notez cependant que ce sera extrêmement lent.
Vality
@Vality Votre réponse semble bonne. Pourriez-vous améliorer encore la réponse.
Un Umar Mukthar
@AUmarMukthar est-ce que c'est pratique du tout? S'il manque toujours, veuillez commenter et je verrai si je peux l'améliorer.
Vality
10

Je dois dire que tu n'es pas vrai

mon ordinateur ne prend en charge que 32 bits

Selon la sortie de l'exécution de lscpuvotre version d'Ubuntu qui est installée est 32 bits tandis que votre système peut prendre en charge les applications 64 bits si vous souhaitez installer l'application 64 bits, vous devez installer 64 bits du système d'exploitation Ubuntu. voir ces lignes ci-dessous:

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

Téléchargez et installez Ubuntu 14.04.1 64 bits, puis installez également Viber .

αғsнιη
la source
Ce droit si je le fais, je perdrai les autres applications installées jusqu'à présent. Donc, seulement je cherche une solution. Merci pour vos informations. +1 pour vos efforts
A Umar Mukthar
10

Vous pouvez installer un logiciel 64 bits sur une machine construite avec du matériel 32 bits de la même manière que vous pouvez exécuter, par exemple, le logiciel ARM sur une cible x86, en utilisant la traduction dynamique.

Fondamentalement, un logiciel tel que qemu se trouve entre les programmes et votre ordinateur, effectuant une traduction à partir du jeu d'instructions AMD64 vers le x86 (probablement i686) (avec un impact très grave sur les performances, ce qui, dans votre cas, pourrait être totalement évitable).

Étant donné que vous utilisez ubuntu, vous disposez d'une excellente documentation sur la façon de configurer cela . Fondamentalement, vous avez l'un des deux choix, vous pouvez soit exécuter le programme dans un environnement VM 64 bits complet avec son propre noyau ou, ce que je pense que vous voulez ici, c'est la visualisation de l'espace utilisateur, cela utilise le thunking (je ne pense pas que ce soit couramment appelé thunking ces jours-ci mais oubliez le nouveau mot) pour traduire les appels système de 64 bits à 32 bits afin que vous puissiez utiliser votre propre noyau.

Maintenant, le guide l'explique mieux que moi, mais en bref, vous devez installer qemu et les packages qemu-kvm-extras-static, puis utiliser qemu-debootstrap pour configurer un environnement et des bibliothèques pour votre programme 64 bits. Ensuite, vous devez utiliser binfmt_misc et l'interpréteur statique de qemu (qemu-arch-static, dans votre cas probablement x86_64, x64 ou AMF64) pour exécuter votre programme dans son environnement.

Notez cependant que votre CPU semble prendre en charge les instructions 64 bits, il peut donc être possible d'installer Ubuntu 64 bits, vous pouvez sans émulation exécuter du code x86 sur une machine AMD64 et si vous êtes en mesure de le faire, cela peut être plus facile, si d'un autre côté vous voulez découvrir qemu et le monde de l'émulation d'architecture (peut arriver plus tard si vous obtenez un programme construit par exemple ... ARM comme quelque chose de construit pour un téléphone) je vous recommande de continuer mais attention , les choses prennent parfois un peu de tripotage ou de débogage avant de fonctionner correctement.

Vality
la source
5
Ce type de virtualisation de «traduction dynamique» sera douloureusement lent . Et comme il a un système 64 bits en premier lieu, il serait préférable d'installer simplement un système d'exploitation 64 bits.
Michael Hampton
@MichaelHampton Je sais que ce sera lent et j'ai en effet noté que, j'ai également noté qu'il pourrait être mieux avec un système d'exploitation 64 bits, mais je voulais également donner une réponse qui répondrait à la question posée.
Vality
Je ne pensais pas que «performance hit» explique à quel point ce sera lent. :)
Michael Hampton
@MichaelHampton True. Heureux maintenant? ;)
Vality
Oui, maintenant j'aime ça. :)
Michael Hampton
1

Lisez à propos des applications 32 bits (x86) et 64 bits:
http://www.techsupportalert.com/content/32-bit-and-64-bit-explained.htm

Il est parfois possible qu'une application ou un package unique [un fichier .deb] agisse comme les deux après l'installation.
c'est-à-dire, x86 app on x86 OSetx64 app on x64 OS

Naïve
la source
Il est également possible d'installer x86 application on x64 OS.
αғsнιη
-1

Si vous utilisez un système 32 bits, utilisez

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

lien: Comment installer Viber sur Ubuntu 13.10, 32bit

Stan
la source
En fait ne fonctionne pas trop. télécharger viber pour windows et l'installer avec du vin, a fonctionné pour moi.
stan