Как установить 64-битный файл .deb на 32-битный компьютер?

17

У меня Ubuntu 14.04. Я недавно скачал Viber . Файл .deb Viber имеет 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-битную ОС.
Muru
Я слышал, что некоторые программы делают эту работу ... Вот что я спрашиваю
Умар Муктар
Вам нужно будет использовать виртуальные машины
muru
Какой вывод работает lscpuв Терминале?
αғsнιη
7
Да, ваша система является 64-разрядной, и вы должны переустановить его при первых же возможностях, потому что вы снова столкнетесь с этой проблемой , и это будет еще более болезненным , чтобы иметь дело с более поздними.
Майкл Хэмптон

Ответы:

22

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

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

и пакет был подготовлен для использования multiarch, что также верно:

 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-битное ядро.

Braiam
источник
root @ umar: / home / umar / Desktop # sudo dpkg -i viber.deb dpkg: архив обработки ошибок viber.deb (--install): архитектура пакета (amd64) не соответствует системе (i386) При обработке возникли ошибки: viber.deb
Умар Муктар
@AUmarMukthar sudo dpkg --add-architecture amd64.
Брайам
Я попробовал вашу команду. Никакого дальнейшего прогресса
Умар Муктар
2
«Вероятно, вам нужно установить и 64-битное ядро». - это не вероятно, это на 100% точно. У 32-битного ядра просто нет того, что нужно для настройки 64-процессной среды.
Мат
11

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

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

Амританшу Пандей
источник
1
Вы можете установить 64-битную виртуальную машину на 32-битную машину точно так же, как вы можете установить любую архитектуру, например , посмотрите на qemu . Обратите внимание, однако, что это будет чрезвычайно медленно.
Vality
@Vality Ваш ответ, кажется, хороший. Не могли бы вы еще улучшить ответ.
Умар Муктар
@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 .

αғsнιη
источник
Это правильно, если я сделаю так, я потеряю другие приложения, установленные до сих пор .. Так что только я ищу решение. В любом случае, спасибо за вашу информацию. +1 за ваши усилия
Умар Муктар
10

Вы можете установить 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
источник
5
Этот тип виртуализации с «динамическим переводом» будет мучительно медленным . А поскольку у него в первую очередь 64-битная система, лучше всего установить 64-битную ОС.
Майкл Хэмптон
@MichaelHampton Я знаю, что это будет медленно, и действительно отметил, что я также отметил, что ему может быть лучше с 64-битной ОС, однако я также хотел дать ответ, который отвечал бы на заданный вопрос.
Vality
Я не думаю, что «снижение производительности» адекватно объясняет, насколько медленным оно будет. :)
Майкл Хэмптон
@MichaelHampton Правда. Счастлив теперь? ;)
Vality
Да, теперь мне это нравится. :)
Майкл Хэмптон
1

Прочитайте о 32-битных (x86) и 64-битных приложениях:
http://www.techsupportalert.com/content/32-bit-and-64-bit-explained.htm

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

наивный
источник
Также возможно установить x86 application on x64 OS.
αғsнιη
-1

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

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

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

стан
источник
На самом деле тоже не работает. скачать viber для windows и установить его с вином, у меня сработало.
Стан