Как установить 64-разрядный файл .deb на 32-разрядную машину?

16

У меня 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
    
задан A Umar Mukthar 19.08.2014 в 08:55
источник

6 ответов

20

При условии, что ваше аппаратное обеспечение поддерживает 64-битные, что делает:

  

CPU op-mode (s): 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 <[email protected]>

, которые им действительно нужны:

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 пригодится здесь, а также Ссылка функциональность «Поиск содержимого пакетов» также прекрасна. Но я пошел вперед и искал их:

Эти файлы уже установлены в моей системе, вам нужно только скопировать имя пакета, то есть перед двоеточием, заканчивающимся amd64 . Вы должны скопировать имена пакетов, как они:

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

Я не установил их, которые я получил, используя 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 было дразнить, чтобы дать мне 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-битное ядро.

    
ответ дан Braiam 20.08.2014 в 03:33
источник
12

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

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

    
ответ дан Amritanshu Pandey 19.08.2014 в 09:03
10

Я должен сказать, что вы не верны о

  

мой компьютер только поддерживает 32-разрядный

По результатам работы lscpu ваша версия Ubuntu, установленная на 32 бита, в то время как ваша система может поддерживать 64-битное приложение, если вы хотите установить 64-битное приложение, вам нужно установить 64-разрядную версию Ubuntu OS. см. следующие строки:

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

Загрузить и install 64-разрядный Ubuntu 14.04.1, а затем установите Viber .

    
ответ дан αғsнιη 19.08.2014 в 12:17
9

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

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

Учитывая, что вы используете ubuntu, у вас есть отличная часть документации о том, как установить это . В принципе у вас есть один из двух вариантов: вы можете либо запустить программу в полной 64-битной виртуальной среде с собственным ядром, либо, я думаю, вы хотите здесь визуализировать пространство пользователя, это использует thunking (я не думаю, что это обычно называемый thunking в эти дни, но забыть новое слово), чтобы перевести системные вызовы с 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, например, что-то построенное для телефона). Я рекомендую вам продолжить впереди, но будьте осторожны, вещи иногда занимают немного времени или отладки, прежде чем они будут хорошо работать.

    
ответ дан Vality 19.08.2014 в 11:55
1

Читайте о 32-битных (x86) и 64-битных приложениях:
Ссылка

Иногда возможно, что приложение или отдельный пакет [один файл .deb] действуют как после установки.
т.е. x86 app on x86 OS и x64 app on x64 OS

    
ответ дан Naive 19.08.2014 в 09:53
-1

Если вы используете 32-битную систему, используйте

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

link: Как установить Viber на Ubuntu 13.10, 32bit     

ответ дан stan 13.05.2015 в 22:02