Як встановити 64-розрядний .deb файл на 32-бітній машині?


17

У мене є Ubuntu 14.04. Нещодавно я завантажив Viber . Файл Viber .deb має 64-бітну архітектуру. Я хочу встановити його на комп’ютер, але мій комп'ютер підтримує лише 32-розрядні.

Вихід бігу lscpuтакий:

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
Як ви можете бути впевнені, що він не підтримує 64-бітну версію? Якщо вам потрібно запустити 64-бітні програми, вам доведеться встановити 64-бітну ОС.
муру

Я почув, що деякі програми роблять цю роботу ... Ось що я прошу
A Umar Mukthar,

Вам доведеться використовувати VM: askubuntu.com/questions/180761/…
1414

Який вихід працює lscpuв Terminal?
αғsnιη

7
Так, ваша система має 64-бітну здатність, і вам слід перевстановити її при першій же можливості, тому що ви знову зіткнетеся з цією проблемою, і потім буде ще болючіше впоратися.
Майкл Хемптон,

Відповіді:


22

За умови, що ваша апаратура підтримує 64-розрядну версію, яка:

Операційні режими процесора: 32-розрядні, 64-бітні

і пакет був готовий до використання мультиарха, що також вірно:

 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

ви можете просто встановити необхідні 64-бітні бібліотеки та бінарні файли, які є залежністю пакету (чого немає, більше про це пізніше), що вам потрібно запустити додаток з віртуальним нульовим впливом на продуктивність. У моєму випадку я просто встановив пакет:

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

А потім почав стикатися з проблемами ...

Керівники пакунків вирішили, що вони не повинні перелічувати будь-яку залежність для свого пакету,

 Installed-Size: 141336
 Conflicts: Viber (<< 4.2.2.6)
 Replaces: Viber (<< 4.2.2.6)
 Maintainer: Viber Media Inc <support@viber.com>

що їм насправді потрібно:

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

тому ви повинні знайти та встановити бібліотеки, які відсутні вручну! Це легко, якщо ви знаєте правильні інструменти. apt-fileТут стане в нагоді також функціональність http://packages.ubuntu.com "Пошук вмісту пакетів" також чудово підійде. Але я пішов і шукав їх:

Ці файли вже встановлені в моїй системі, вам потрібно лише скопіювати назву пакета, таку, перед двокрапкою, на якій закінчується amd64. Ви повинні скопіювати назви пакунків такими, якими вони є:

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

Їх у мене не було встановлено, що я отримав, використовуючи 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було дражнити, щоб дати мені 64-бітні пакети, тому мені довелося це зробити, sudo apt-file -a amd64 updateщоб мати 64-бітний список файлів.

Тепер дозвольте мені пояснити, що все вищезазначене:

  • ldd /path/to/binary: читає двійковий файл і повідомляє, які потрібні бібліотеки, символи тощо.
  • dpkg -S: пошук, які пакети надають певний встановлений файл.
  • awk, sedі grep: змінюють текстовий потік, щоб обробити лише цікаві частини або показати потрібний вихід.
  • |, $(...): перший дозволяє мені передавати висновок команди іншому, а пізніше дозволяє виконувати / оцінювати команду до того, як будуть виконані основні.

TL; dr просто встановіть ці пакунки:

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

Також потрібно встановити 64-бітове ядро.


root @ umar: / home / umar / Desktop # sudo dpkg -i viber.deb dpkg: архів обробки помилок viber.deb (--встановлення): архітектура пакета (amd64) не відповідає системі (i386) Під час обробки виникали помилки: viber.deb
A Umar Mukthar

@AUmarMukthar sudo dpkg --add-architecture amd64.
Брайам

Я спробував твою команду. Подальшого прогресу немає
A Umar Mukthar

2
"Ймовірно, що вам також потрібно встановити 64-бітове ядро." - це не вірогідно, це на 100% певно. У 32-бітовому ядрі просто немає необхідного для створення 64-процесного середовища.
Мат


11

Неможливо встановити програмне забезпечення, яке підтримує лише 64-бітну арку на 32-бітній ОС, тоді як зворотне - це правда. Для того щоб встановити 64-бітове програмне забезпечення, вам знадобиться апаратне забезпечення, яке підтримує 64-бітну і 64-бітну ОС, що працює над ним.

Також хотілося б зазначити, що не можна встановити 64-бітну ОС як віртуальну машину на апаратне забезпечення, яке підтримує лише 32-бітну архітектуру. Для створення 64-бітових віртуальних машин ваша апаратура повинна підтримувати 64-бітну архітектуру разом із підтримкою віртуалізації.


1
Ви можете встановити 64-бітний vm на 32-бітній машині так само, як ви можете встановити одну з будь-якої архітектури, подивіться, наприклад, qemu . Зауважте, проте це буде надзвичайно повільним.
Vality

@Vality Ваша відповідь здається хорошою. Чи можете ви далі вдосконалити відповідь.
A Umar Mukthar

@AUmarMukthar Я це взагалі зручно? Якщо його все ще бракує, будь ласка, прокоментуйте, і я побачу, чи зможу це вдосконалити.
Vality

10

Треба сказати, що ви не правда

тільки мій комп’ютер підтримує 32-розрядну

Відповідно до випуску lscpuвашої версії Ubuntu, що встановлена ​​32-бітна, тоді як ваша система може підтримувати 64-бітну програму, якщо ви хочете встановити 64-бітну програму, вам доведеться встановити 64-бітну ОС Ubuntu. дивіться цей рядок нижче:

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

Завантажте та встановіть 64-бітний Ubuntu 14.04.1, а потім також встановіть Viber .


Це право, якщо я це зроблю, я втрачу інші застосовані досі додатки. Тож я лише шукаю рішення. Як би дякую за вашу інформацію. +1 за ваші зусилля
A Umar Mukthar

10

Ви можете встановити 64-бітне програмне забезпечення на машину, побудовану з 32-розрядним обладнанням, таким же чином, як запустити, наприклад, програмне забезпечення ARM, на ціль x86, використовуючи динамічний переклад.

В основному, частина програмного забезпечення, наприклад qemu, знаходиться між програмами та комп'ютером, виконуючи переклад з інструкції AMD64, встановленої на x86 (можливо, i686) та (з дуже суворим ефективність, яка у вашому випадку може бути повністю уникнути).

З огляду на те, що ви використовуєте ubuntu, у вас є чудова документація про те, як це налаштувати . В основному у вас є один з двох варіантів: ви можете запустити програму в повному 64-бітовому середовищі VM зі своїм власним ядром, або, на мою думку, ви хочете тут - візуалізація простору користувача, для цього використовується громіздкість (я не думаю, що це зазвичай закликає грозити в ці дні, але забудьте нове слово) для перекладу системних викликів з 64 біт на 32 біт, щоб ви могли використовувати власне ядро.

Тепер посібник пояснює це краще, ніж я, але коротше кажучи, вам потрібно встановити qemu та пакети qemu-kvm-extras-static, а потім використовувати qemu-debootstrap для налаштування середовища та бібліотек для вашої 64-бітної програми. Тоді вам потрібно використовувати binfmt_misc та статичний інтерпретатор qemu (qemu-arch-static, у вашому випадку, ймовірно, x86_64, x64 або AMF64), щоб запустити свою програму в її середовищі.

Зауважте, що, здається, ваш процесор підтримує 64-бітні інструкції, тому вам може бути можливим встановити 64-бітний ubuntu, ви можете без емуляції запустити код x86 на машині AMD64, і якщо ви зможете це зробити, це може бути простіше, якщо, з іншого боку, ви хочете відкрити qemu і світ емуляції архітектури (можливо, прийде в руки пізніше, якщо ви отримаєте програму, побудовану для скажімо ... ARM, наприклад, щось побудоване для телефону), я рекомендую вам продовжувати, але будьте обережні , речі іноді потребують невеликого хитання або налагодження, перш ніж вони працюватимуть добре.


5
Цей тип віртуалізації "динамічного перекладу" буде болісно повільним . А оскільки у нього в першу чергу 64-розрядна система, найкраще було б просто встановити 64-бітну ОС.
Майкл Хемптон

@MichaelHampton Я знаю, що це буде повільно, і я справді зазначив, що я також зазначив, що йому може бути краще 64-бітної ОС, однак я також хотів дати відповідь, яка відповіла б на поставлене запитання.
Vality

Я не думав, що "ударний показник" адекватно пояснює, наскільки це буде повільно. :)
Майкл Хемптон

@MichaelHampton True. Щасливий зараз? ;)
Vality

Так, зараз мені це подобається. :)
Майкл Хемптон


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.