Jak zainstalować 64-bitowy plik .deb na komputerze 32-bitowym?

17

Mam Ubuntu 14.04. Niedawno pobrałem Viber . Plik .deb Viber ma architekturę 64-bitową. Chcę zainstalować na swoim komputerze, ale mój komputer obsługuje tylko wersje 32-bitowe.

Wynik działania lscpujest następujący:

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
Umar Mukthar
źródło
3
Skąd możesz mieć pewność, że nie obsługuje 64-bitów? Jeśli musisz uruchomić 64-bitowe programy, musisz zainstalować 64-bitowy system operacyjny.
muru
Słyszałem, że niektóre programy wykonują tę pracę ... O to pytam
A Umar Mukthar,
Będziesz musiał używać maszyn wirtualnych: askubuntu.com/questions/180761/…
muru
Jaka jest wydajność działania lscpuw terminalu?
αғsнιη
7
Tak, twój system jest zdolny do pracy w wersji 64-bitowej i powinieneś go ponownie zainstalować przy najbliższej okazji, ponieważ ponownie napotkasz ten problem, a problem będzie jeszcze trudniejszy.
Michael Hampton

Odpowiedzi:

22

Pod warunkiem, że twój sprzęt obsługuje 64 bity, co:

Tryby pracy procesora: 32-bitowy, 64-bitowy

i pakiet został przygotowany do używania multiarch, co również jest prawdą:

 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

możesz po prostu zainstalować niezbędne 64-bitowe biblioteki i pliki binarne, które zależą od pakietu (czego już nie ma, więcej o tym później), które musisz uruchomić, z wirtualnym zerowym spadkiem wydajności. W moim przypadku właśnie zainstalowałem pakiet:

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

A potem zaczęły się pojawiać problemy ...

Menedżerowie pakietów zdecydowali, że nie powinni wymieniać żadnych zależności dla swojego pakietu,

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

których tak naprawdę potrzebują:

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

więc musisz znaleźć i zainstalować brakujące biblioteki ręcznie! Jest to łatwe, jeśli znasz odpowiednie narzędzia. apt-fileprzydaje się tutaj, również funkcjonalność http://packages.ubuntu.com „Przeszukaj zawartość pakietów” również jest w porządku. Ale poszedłem naprzód i szukałem ich:

Te pliki są już zainstalowane w moim systemie, wystarczy skopiować nazwę pakietu, przed dwukropkiem, który kończy się amd64. Powinieneś skopiować nazwy pakietów takimi, jakimi są:

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

Nie miałem ich zainstalowanych, które uzyskałem za pomocą 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-filebyło złośliwie podarować mi pakiety 64-bitowe, więc musiałem to zrobić, sudo apt-file -a amd64 updateaby zmusić go do posiadania listy plików 64-bitowych.

Teraz pozwól mi wyjaśnić, co to wszystko:

  • ldd /path/to/binary: czyta plik binarny i informuje, jakie są wymagane biblioteki, symbole itp.
  • dpkg -S: wyszukaj, które pakiety zapewniają konkretnie zainstalowany plik.
  • awk, sedi grep: modyfikują strumień tekstu, aby przetwarzać tylko interesujące części lub wyświetlać pożądany wynik.
  • |, $(...): pierwszy pozwala mi przesyłać dane wyjściowe polecenia do drugiego, a później pozwala mi wykonać / ocenić polecenie, zanim główne zostaną wykonane.

TL; dr wystarczy zainstalować te pakiety:

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

Musisz także zainstalować 64-bitowe jądro.

Braiam
źródło
root @ umar: / home / umar / Desktop # sudo dpkg -i viber.deb dpkg: błąd przetwarzania archiwum viber.deb (--install): architektura pakietu (amd64) nie pasuje do systemu (i386) Podczas przetwarzania napotkano błędy: viber.deb
A Umar Mukthar,
@AUmarMukthar sudo dpkg --add-architecture amd64.
Braiam
Próbowałem twojego polecenia. Brak dalszych postępów
A Umar Mukthar,
2
„Prawdopodobnie musisz także zainstalować 64-bitowe jądro.” - to mało prawdopodobne, jest w 100% pewne. Jądro 32-bitowe po prostu nie ma tyle, ile potrzeba do skonfigurowania środowiska 64-procesowego.
Mat.
11

Nie jest możliwe zainstalowanie oprogramowania obsługującego tylko 64-bitowy arch w 32-bitowym systemie operacyjnym, podczas gdy jest odwrotnie. Aby zainstalować 64-bitowe oprogramowanie, potrzebujesz sprzętu obsługującego 64-bitowy i 64-bitowy system operacyjny działający na nim.

Chciałbym również wspomnieć, że nie można zainstalować 64-bitowego systemu operacyjnego jako maszyny wirtualnej na sprzęcie obsługującym tylko architekturę 32-bitową. Twój sprzęt powinien obsługiwać architekturę 64-bitową wraz z obsługą wirtualizacji w celu tworzenia 64-bitowych maszyn wirtualnych.

Amritanshu Pandey
źródło
1
Możesz zainstalować 64-bitową maszynę wirtualną na maszynie 32-bitowej, tak jak możesz zainstalować dowolną architekturę, na przykład qemu . Pamiętaj jednak, że będzie on wyjątkowo wolny.
Vality
@Vality Twoja odpowiedź wydaje się być dobra. Czy możesz jeszcze bardziej poprawić odpowiedź.
A Umar Mukthar,
@AUmarMukthar W ogóle jestem przydatny? Jeśli nadal brakuje, proszę o komentarz, a zobaczę, czy mogę to poprawić.
Rzeczywistość
10

Muszę powiedzieć, że nie jesteś prawdą

mój komputer obsługuje tylko 32-bit

Zgodnie z wynikami działania lscpuzainstalowanej wersji Ubuntu, która jest 32-bitowa, podczas gdy Twój system może obsługiwać 64-bitową aplikację, jeśli chcesz zainstalować 64-bitową aplikację, musisz zainstalować 64-bitowy system operacyjny Ubuntu. zobacz poniższe linie poniżej:

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

Pobierz i zainstaluj 64-bitowy Ubuntu 14.04.1, a następnie zainstaluj również Viber .

αғsнιη
źródło
To prawda, jeśli to zrobię, utracę inne zainstalowane aplikacje. Więc szukam tylko rozwiązania. Jakkolwiek dzięki za informacje. +1 za twoje starania
A Umar Mukthar,
10

Możesz zainstalować 64-bitowe oprogramowanie na maszynie zbudowanej z 32-bitowym sprzętem w taki sam sposób, w jaki możesz uruchomić powiedzmy oprogramowanie ARM na celu x86, używając translacji dynamicznej.

Zasadniczo oprogramowanie, takie jak qemu, znajduje się pomiędzy programami a komputerem, wykonując tłumaczenie z zestawu instrukcji AMD64 na zestaw x86 (prawdopodobnie i686) ( co prawda z bardzo poważnym spadkiem wydajności, co w twoim przypadku może być całkowicie możliwe do uniknięcia).

Biorąc pod uwagę, że używasz Ubuntu, masz doskonałą dokumentację, jak to skonfigurować . Zasadniczo masz jedną z dwóch opcji, możesz albo uruchomić program w kompletnym 64-bitowym środowisku VM z własnym jądrem lub, co myślę, że chcesz tutaj, to wizualizacja przestrzeni użytkownika, używa to thunkowania (nie sądzę, że jest to powszechne o nazwie thunking, ale zapomnij o nowym słowie), aby przetłumaczyć wywołania systemowe z 64 do 32 bitów, abyś mógł użyć własnego jądra.

Teraz przewodnik wyjaśnia to lepiej niż ja, ale w skrócie musisz zainstalować pakiety qemu i qemu-kvm-extras-static, a następnie użyć qemu-debootstrap do skonfigurowania środowiska i bibliotek dla swojego 64-bitowego programu. Następnie musisz użyć binfmt_misc i statycznego interpretera qemu (qemu-arch-static, w twoim przypadku prawdopodobnie x86_64, x64 lub AMF64), aby uruchomić swój program w jego środowisku.

Pamiętaj jednak, że twój procesor wydaje się obsługiwać instrukcje 64-bitowe, więc może być możliwe zainstalowanie 64-bitowego systemu Ubuntu, możesz bez emulacji uruchomić kod x86 na maszynie AMD64, a jeśli możesz to zrobić, może to być łatwiejsze, jeśli z drugiej strony chcesz odkryć qemu i emulację świata architektury (może przyjść później, jeśli dostaniesz program zbudowany na przykład ... ARM, taki jak coś zbudowanego dla telefonu) Polecam iść dalej, ale uważaj , rzeczy czasem wymagają trochę majstrowania lub debugowania, zanim zaczną działać.

Rzeczywistość
źródło
5
Tego rodzaju wirtualizacja „tłumaczenia dynamicznego” będzie boleśnie powolna . A ponieważ ma on przede wszystkim system 64-bitowy, najlepiej byłoby po prostu zainstalować 64-bitowy system operacyjny.
Michael Hampton
@MichaelHampton Wiem, że będzie powolny i rzeczywiście zauważyłem, że zauważyłem, że może mu być lepiej z 64-bitowym systemem operacyjnym, ale chciałem również udzielić odpowiedzi, która odpowiedziałaby na zadane pytanie.
Vality
Nie sądziłem, że „hit wydajności” odpowiednio wyjaśnia, jak wolno będzie. :)
Michael Hampton
@MichaelHampton True. Szczęśliwa teraz? ;)
Vality
Tak, teraz mi się podoba. :)
Michael Hampton
-1

Jeśli korzystasz z 32-bitowego systemu

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

link: Jak zainstalować Viber na Ubuntu 13.10, 32bit

stan
źródło
W rzeczywistości też nie działa. pobierz Viber na Windows i zainstaluj go z winem, pracował dla mnie.
stan