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


17

Ho Ubuntu 14.04. Di recente 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 di esecuzione 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

3
Come puoi essere sicuro che non supporti 64-bit? Se devi eseguire programmi a 64 bit devi installare un sistema operativo a 64 bit.
Muru,

Ho sentito che alcuni software fanno quel lavoro ... Ecco cosa sto chiedendo
A Umar Mukthar,

Dovrai utilizzare le macchine virtuali: askubuntu.com/questions/180761/…
muru,

Qual è l'output di esecuzione lscpuin Terminal?
αғsнιη,

7
Sì, il tuo sistema è a 64 bit e dovresti reinstallarlo il prima possibile, perché ti imbatterai di nuovo in questo problema e sarà ancora più doloroso affrontarlo in seguito.
Michael Hampton,

Risposte:


22

A condizione che il tuo hardware supporti 64 bit, che fa:

Modalità operative CPU: 32 bit, 64 bit

e il pacchetto è stato preparato per utilizzare 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

potresti semplicemente installare le librerie e i binari a 64 bit necessari che dipendono dal pacchetto (che è nessuno, ne parleremo più avanti) di cui hai bisogno per eseguire l'applicazione, con impatto virtuale zero sulle prestazioni. 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 incorrere in problemi ...

I gestori dei pacchetti hanno deciso di non 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 <support@viber.com>

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 funzionalità http://packages.ubuntu.com "Cerca nel contenuto dei pacchetti" è perfetta. Ma sono andato avanti e li ho cercati:

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

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

Questi non li avevo installati, che ho ottenuto 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-fileè stato uno scherzo darmi i pacchetti a 64 bit, quindi ho dovuto fare sudo apt-file -a amd64 updateper forzarlo ad avere 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, sedE grep: si modifica il flusso di testo per elaborare solo le parti interessanti o visualizza uscita desiderata.
  • |, $(...): il primo mi consente di reindirizzare l'output di un comando a un altro, e il successivo mi consente di eseguire / valutare un comando prima che vengano eseguiti quelli principali.

TL; dr installa 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

È inoltre necessario installare il kernel a 64 bit.


root @ umar: / home / umar / Desktop # sudo dpkg -i viber.deb dpkg: archivio elaborazione errori viber.deb (--install): l'architettura del pacchetto (amd64) non corrisponde al sistema (i386) Si sono verificati errori durante l'elaborazione: viber.deb
A Umar Mukthar,

@AUmarMukthar sudo dpkg --add-architecture amd64.
Braiam,

Ho provato il tuo comando. Nessun ulteriore progresso
A Umar Mukthar,

2
"È probabile che sia necessario installare anche il kernel a 64 bit." - non è probabile, è sicuro al 100%. Un kernel a 32 bit non ha proprio quello che serve per configurare un ambiente di processo a 64.
Mat


11

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

Inoltre, vorrei menzionare che non è possibile installare un sistema operativo a 64 bit come macchina virtuale su un hardware che supporta solo l'architettura a 32 bit. L'hardware dovrebbe supportare l'architettura a 64 bit insieme al supporto di virtualizzazione per creare macchine virtuali a 64 bit.


1
Puoi installare una VM a 64 bit su una macchina a 32 bit così come puoi installare una di qualsiasi architettura, guarda ad esempio qemu . Si noti tuttavia che sarà straordinariamente lento.
Valità,

@Valità La tua risposta sembra essere buona. Potresti migliorare ulteriormente la risposta.
A Umar Mukthar,

@AUmarMukthar I che utile a tutti? Se manca ancora, commenta e vedrò se riesco a migliorarlo.
Valità,

10

Devo dire che non sei sincero

il mio computer supporta solo 32 bit

Secondo l'output dell'esecuzione lscpudella versione di Ubuntu installata a 32 bit, il sistema può supportare un'applicazione a 64 bit se si desidera installare un'applicazione a 64 bit, è necessario installare il sistema operativo Ubuntu a 64 bit. vedere queste righe di seguito:

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 installa Ubuntu 14.04.1 a 64 bit e quindi installa anche Viber .


Proprio così, se lo faccio, perderò altre applicazioni finora installate .. Quindi solo io sto cercando una soluzione. Comunque grazie per le tue informazioni. +1 per i tuoi sforzi
A Umar Mukthar,

10

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

Fondamentalmente, un software come qemu si trova tra i programmi e il computer, eseguendo una traduzione dall'istruzione AMD64 impostata su x86 (probabilmente i686) (con un colpo di prestazioni molto grave , che nel tuo caso potrebbe essere totalmente evitabile).

Dato che stai usando Ubuntu hai un'ottima documentazione su come configurarlo . Fondamentalmente hai una delle due scelte, puoi eseguire il programma in un ambiente VM a 64 bit completo con il suo kernel o, quello che penso che tu voglia qui è la visualizzazione dello spazio utente, questo usa il 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 usare il proprio kernel.

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

Tieni presente che, tuttavia, la tua CPU sembra supportare le istruzioni a 64 bit, quindi potrebbe essere possibile installare Ubuntu a 64 bit, puoi senza emulazione eseguire il codice x86 su una macchina AMD64 e se sei in grado di farlo potrebbe essere più facile, se d'altra parte vuoi scoprire qemu e il mondo dell'emulazione dell'architettura (potrebbe venire in seguito più tardi se ottieni un programma creato per dire ... ARM come qualcosa costruito per un telefono) ti consiglio di andare avanti ma attenzione , a volte le cose richiedono un po 'di armeggi o debug prima che funzionino bene.


5
Questo tipo di virtualizzazione della "traduzione dinamica" sarà dolorosamente lenta . E poiché ha un sistema a 64 bit in primo luogo, sarebbe meglio installare un sistema operativo a 64 bit.
Michael Hampton,

@MichaelHampton So che sarà lento e in effetti l'ho notato, ho anche notato che potrebbe stare meglio con un sistema operativo a 64 bit, tuttavia volevo anche dare una risposta che rispondesse alla domanda posta.
Valità,

Non pensavo che il "hit delle prestazioni" spiegasse adeguatamente quanto sarà lento. :)
Michael Hampton,

@MichaelHampton True. Felice adesso? ;)
Valità,

Sì, ora mi piace. :)
Michael Hampton,


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.