Come installare il file .deb a 64 bit su un computer a 32 bit?

16

Ho Ubuntu 14.04. Recentemente ho scaricato Viber . Il file .deb di Viber ha un'architettura a 64 bit. Voglio installarlo sul mio computer, ma il mio computer supporta solo 32 bit.

L'output dell'esecuzione di lscpu è il seguente:

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
    
posta A Umar Mukthar 19.08.2014 - 08:55

6 risposte

20

A condizione che l'hardware supporti 64 bit, ovvero:

  

Modalità op / CPU opzionali: 32-bit, 64-bit

e il pacchetto è stato preparato per utilizzare il multiarch, il che è anche vero:

 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

è possibile installare solo le librerie e i binari a 64 bit necessari che dipendono dal pacchetto (che non è più, più avanti) che è necessario eseguire l'applicazione, con impatto di prestazioni pari a zero virtuale. Nel mio caso, ho appena installato il pacchetto bene:

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

E poi ha iniziato a imbattersi in problemi ...

I gestori dei pacchetti hanno deciso che non dovrebbero elencare alcuna dipendenza per il loro pacchetto,

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

di cui hanno effettivamente bisogno:

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

quindi devi trovare e installare le librerie mancanti manualmente! Questo è facile se conosci gli strumenti corretti. apt-file è utile qui, anche la link funzionalità "Cerca il contenuto dei pacchetti" va bene anche. Ma sono andato avanti e li ho cercati:

Questi file sono già installati nel mio sistema, è sufficiente copiare il nome del pacchetto, quello prima dei due punti che termina con amd64 . Dovresti copiare i nomi dei pacchetti così come sono:

dpkg -S $(ldd /opt/viber/Viber | awk '{print }' | 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

Questi non li avevo installati, che ho ottenuto usando ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", }' | apt-file search -x -a amd64 -f - | sed 's/\:/:amd64:/' :

$ ldd /opt/viber/Viber | grep 'not found' | awk '{printf "%s$\n", }' | 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 è stato un tentativo di darmi i pacchetti a 64 bit, quindi ho dovuto fare sudo apt-file -a amd64 update per forzare l'elenco dei file a 64 bit.

Ora lasciami spiegare cosa è tutto quanto sopra:

  • ldd /path/to/binary : legge un binario e ti dice quali sono le librerie, i simboli, ecc. richiesti
  • dpkg -S : cerca quali pacchetti forniscono uno specifico file installato.
  • awk , sed e grep : stai modificando il flusso del testo per elaborare solo le parti interessanti o mostrare l'output desiderato.
  • | , $(...) : il primo mi consente di reindirizzare l'output di un comando a un altro, e più tardi mi consente di eseguire / valutare un comando prima che i principali vengano eseguiti.

TL; dr installa semplicemente questi pacchetti:

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

Devi anche installare il kernel a 64-bit.

    
risposta data Braiam 20.08.2014 - 03:33
12

Non è possibile installare un software che supporti solo 64 bit arch su un sistema operativo a 32 bit mentre il contrario è vero. Per installare un software a 64 bit è necessario un hardware che supporti 64 bit e un sistema operativo a 64 bit in esecuzione su di esso.

Vorrei anche ricordare che non è possibile installare il sistema operativo a 64 bit come una macchina virtuale su un hardware che supporta solo l'architettura a 32 bit. L'hardware deve supportare l'architettura a 64 bit e il supporto della virtualizzazione per creare macchine virtuali a 64 bit.

    
risposta data Amritanshu Pandey 19.08.2014 - 09:03
10

Devo dire che non sei sincero su

  

il mio computer solo supporta 32 bit

In base all'output dell'esecuzione di lscpu la tua versione di Ubuntu installata è a 32 bit mentre il tuo sistema può supportare un'applicazione a 64 bit se vuoi installare un'applicazione a 64 bit devi installare 64 bit di Ubuntu OS. vedi queste righe qui sotto:

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

Scarica e install 64 bit Ubuntu 14.04.1 e quindi installare Viber .

    
risposta data αғsнιη 19.08.2014 - 12:17
9

È possibile installare software a 64 bit su una macchina costruita con hardware a 32 bit nello stesso modo in cui è possibile eseguire il software ARM su un target x86, utilizzando la conversione dinamica.

In sostanza, un pezzo di software come qemu si trova tra i programmi e il computer, eseguendo una traduzione da AMD64 istruzioni impostate su x86 (probabilmente i686) (con un hit delle prestazioni molto severo , che nel tuo caso potrebbe essere totalmente evitabile).

Dato che stai usando Ubuntu hai un eccellente pezzo di documentazione su come impostarlo . Fondamentalmente si ha una delle due scelte, è possibile eseguire il programma in un ambiente VM a 64 bit completo con il proprio kernel o, quello che penso che si tratti qui è la visualizzazione dello spazio utente, questo usa thunking (non penso che sia comunemente chiamato thunking in questi giorni ma dimentica la nuova parola) per tradurre le chiamate di sistema da 64 bit a 32 bit in modo da poter utilizzare il proprio kernel.

Ora la guida lo spiega meglio di me, ma in breve è necessario installare qemu e i pacchetti qemu-kvm-extras-static, quindi utilizzare qemu-debootstrap per configurare un ambiente e le librerie per il proprio programma a 64 bit. Quindi è necessario utilizzare binfmt_misc e l'interprete qemu statico (qemu-arch-static, nel tuo caso probabilmente x86_64, x64 o AMF64) per eseguire il programma all'interno del suo ambiente.

Si noti che, tuttavia, la CPU sembra supportare le istruzioni a 64 bit, quindi potrebbe essere possibile installare ubuntu a 64 bit, è possibile senza emulazione eseguire codice x86 su una macchina AMD64 e, se si è in grado di farlo, potrebbe essere più facile, se invece vuoi scoprire qemu e il mondo dell'emulazione dell'architettura (potrebbe succedere più tardi se hai un programma costruito per dire ... ARM come qualcosa costruito per un telefono) ti consiglio di andare avanti avanti, ma attenzione, le cose a volte richiedono un po 'di manipolazione o debugging prima che funzionino bene.

    
risposta data Vality 19.08.2014 - 11:55
1

Informazioni su applicazioni a 32 bit (x86) e 64 bit:
link

A volte è possibile che un'applicazione o un singolo pacchetto [un file .deb] agiscano entrambi dopo l'installazione.
cioè, x86 app on x86 OS e x64 app on x64 OS

    
risposta data Naive 19.08.2014 - 09:53
-1

Se usi il sistema a 32 bit

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

link: Come installare Viber su Ubuntu 13.10, 32 bit

    
risposta data stan 13.05.2015 - 22:02

Leggi altre domande sui tag