поддержка 32 битных приложений в 64 битной ubuntu

Как мне запустить 32-битные программы на 64-битном Debian / Ubuntu?

У меня установлена ​​64-битная (amd64 или x86_64) Debian или Ubuntu. Мне нужно время от времени запускать 32-битные (i386 / i686) программы или компилировать программы для 32-битной системы. Как я могу сделать это с минимумом суеты?

Бонус: что делать, если я хочу запустить или протестировать более старый или более новый выпуск дистрибутива?

Родная поддержка

Schroot

Этот раздел является руководством по установке Debian-подобного дистрибутива «внутри» другого дистрибутива Linux. Он сформулирован с точки зрения установки 32-битной Ubuntu внутри 64-битной Ubuntu, но его следует применять с небольшими изменениями в других ситуациях, таких как установка нестабильной версии Debian внутри стабильной версии Debian или наоборот.

Введение

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

Установите schroot пакет поддержка 32 битных приложений в 64 битной ubuntu. M0p7o. поддержка 32 битных приложений в 64 битной ubuntu фото. поддержка 32 битных приложений в 64 битной ubuntu-M0p7o. картинка поддержка 32 битных приложений в 64 битной ubuntu. картинка M0p7o. ( Debian ) и debootstrap пакет поддержка 32 битных приложений в 64 битной ubuntu. M0p7o. поддержка 32 битных приложений в 64 битной ubuntu фото. поддержка 32 битных приложений в 64 битной ubuntu-M0p7o. картинка поддержка 32 битных приложений в 64 битной ubuntu. картинка M0p7o. ( Debian ). Debootstrap необходим только для установки альтернативного дистрибутива и может быть удален впоследствии.

Настроить schroot

В этом примере описывается, как настроить 32-разрядную альтернативную среду Ubuntu 10.04LTS (lucid lynx). Подобная установка должна работать с другими выпусками Debian и Ubuntu. Создайте файл /etc/schroot/chroot.d/lucid32 со следующим содержимым:

Строка directory=/32 сообщает schroot, куда мы поместим файлы 32-битной установки. Строка username=yourusername говорит, что пользователю yourusername будет разрешено использовать schroot. В строке groups=users,admin говорится, что пользователям в любой группе будет разрешено использовать schroot; Вы также можете поставить users=… директиву.

Установите новый дистрибутив

Создайте каталог и начните заполнять его debootstrap. Debootstrap загружает и устанавливает базовый набор пакетов для указанного дистрибутива и архитектуры.

Там не будет файла /etc/mtab или /etc/fstab в chroot. Я не рекомендую использовать mount команду вручную в chroot, делайте это снаружи. Но создайте достаточно хорошо, /etc/mtab чтобы заставить команды, такие как df работать разумно.

Службы в chroot

Как описано здесь, schroot не подходит для запуска демонов. Программы в Schroot будут убиты, когда вы выйдете из Schroot. Используйте «простой» schroot вместо «directory», если вы хотите, чтобы он был более постоянным, и настройте постоянное монтирование в /etc/fstab родительской установке.

В Debian и Ubuntu сервисы запускаются автоматически при установке. Чтобы этого избежать (что может нарушить работу служб вне chroot, в частности из-за того, что сетевые порты являются общими), установите политику неиспользуемых служб в chroot. Поместите следующий скрипт как /32/usr/sbin/policy-rc.d и сделайте его исполняемым ( chmod a+rx /32/usr/sbin/policy-rc.d ).

Заполните новую систему

Теперь мы можем начать использовать chroot. Вы хотите установить еще несколько пакетов на этом этапе.

Вам может потребоваться создать несколько локалей, например

Если schroot предназначен для более ранней версии Ubuntu, такой как 8.04 (hardy), обратите внимание, что пакет ubuntu-standard включает MTA. Выберите nullmailer вместо значения по умолчанию postfix (вы можете захотеть, чтобы ваш chroot отправлял почту, но вы определенно не хотите, чтобы она получала).

Идти дальше

Виртуальная машина

Источник

Блог начинающего сисадмина

Здесь уже не будет ничего интересного, лучше загляните сюда: https://medium.com/@Amet13

понедельник, 16 апреля 2018 г.

Как запускать 32-битные программы на 64-битном дистрибутиве Linux

На сегодняшний день все выпускаемые процессоры так или иначе поддерживают 64-битную архитектуру. В связи с тем, что 32-битные процессоры могут адресовать 232 бита данных, они не могут работать с памятью более 4 Гб, однако процессоры на архитектуре x86-64, могут работать с гораздо более большим объемом памяти. Отличительными особенностями новых процессоров является поддержка 64-битных регистров общего назначения (РОН), арифметических и логических операций над целыми числами и поддержкой 64-битных виртуальных адресов.

В GNU Linux для того чтобы узнать разрядность процессора, существует команда lscpu :
$ lscpu | grep Architecture
Architecture: x86_64

Поле Architecture отображает разрядность процессора ( x86_64 ), в случае 32-битного процессора значение этого поля было бы i686 ( i386 ).
Для того, чтобы узнать разрядность операционной системы, существует команда arch :
$ arch
x86_64

В довольно редких случае необходимо запускать программы, написанные под 32х-битную ОС когда-то давно на новых операционных системах. Существует несколько способов запуска 32-битных программ на 64-битной системе:
— с использованием нативной поддержки (multiarch)
— с использованием технологий ядра Linux: chroot, Docker, OpenVZ
— с использованием виртуальных машин

chroot

С помощью технологии chroot, поддержку которой имеет ядро Linux, возможно организовать запуск 32-битных программ в изолированном окружении (песочнице) в уже имеющейся 64-битной операционной системе. Идея состоит в том, чтобы установить необходимое окружение в поддереве каталогов и запустить приложения из под него. В основном chroot используется для тестирования различных приложений, в том числе для 32- и 64-битных архитектур.
Команда chroot и одноименный системный вызов запускают процессы, с учетом того, что на самом деле запускаемое окружение является всего лишь системным подкаталогом.

Утилита debootstrap позволяет установить базовую систему Debian в необходимый подкаталог. Пакет dbus позволяет некоторым приложениям в операционной системе общаться друг с другом.

После создания окружения, создаем конфигурационный файл для его запуска:
# vim /etc/schroot/chroot.d/test
[test]
description=Installing 32-bit env
aliases=test
type=directory
directory=/chroot
users=root
root-groups=root
profile=desktop
personality=linux
preserve-environment=true

После этого можно устанавливать необходимые программы в данное окружение chroot.

Технология chroot является полезной, однако распространение таких технологий как OpenVZ и Docker позволяют не только изолировать окружения в каталогах, но и изолировать ресурсы для каждого контейнера. В данный момент множество людей во всем мире использую Docker для запуска множества контейнеров, в основном для тестирования различных версий ПО.

У Docker и OpenVZ есть один недостаток, так как это технология виртуализации уровня операционной системы, то он может запускать только приложения, поддерживающие ядро хост-системы. Например Вы не сможете запустить Windows или FreeBSD на ядре Linux.

KVM / VirtualBox / Hyper-V / ESXi

Для того, чтобы запустить любые операционные системы существуют технологии полной виртуализации, такие как KVM, VirtualBox и другие. С помощью KVM можно запускать любую x64-совместимую операционную систему поверх Linux, поэтому любую 32-битную систему можно установить в гостевую виртуальную машину без использования multiarch, chroot и Docker, достаточно лишь скачать необходимый образ операционной системы и установить ее на виртуальную машину.

Пример установки дистрибутива Linux Mint в виртуальную машину KVM.
Создадим виртуальный жесткий диск размером 10 Гб:
$ dd if=/dev/zero of=/vdisk_qemu bs=10000000 count=1000

Источник

Ubuntu решила отказаться от поддержки 32-разрядных пакетов (i386), но потом одумалась

поддержка 32 битных приложений в 64 битной ubuntu. 1923 teaser ubuntu 32. поддержка 32 битных приложений в 64 битной ubuntu фото. поддержка 32 битных приложений в 64 битной ubuntu-1923 teaser ubuntu 32. картинка поддержка 32 битных приложений в 64 битной ubuntu. картинка 1923 teaser ubuntu 32.

Отказ от 32-bit

18 июня 2019 г. на сайте Ubuntu появилось довольно громкое заявление о том, что разработчики системы приняли решение полностью отказаться от поддержки 32-разрядной архитектуры i386.

Они сообщили, что уже, начиная с Ubuntu 19.10 в репозиториях больше не будет паркетов для архитектуры i386. Также было принято решение отключить обновление Ubuntu 18.04 до версии 18.10 для архитектуры i386.

поддержка 32 битных приложений в 64 битной ubuntu. 01 ubuntu 32. поддержка 32 битных приложений в 64 битной ubuntu фото. поддержка 32 битных приложений в 64 битной ubuntu-01 ubuntu 32. картинка поддержка 32 битных приложений в 64 битной ubuntu. картинка 01 ubuntu 32.

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

Что предложили взамен

Естественно, такое решение не может пройти незаметно для многих пользователей. Отказ от поддержки 32-х разрядных пакетов влечет за собой неработоспособность определенного количества используемого пользователями 32-разрядного программного обеспечения и игр.

Разработчики Ubuntu предложили для таких пользователей использовать Ubuntu 18.04 LTS, которая пока продолжит нативную поддержку i386 до апреля 2023 года (дата окончания поддержки Ubuntu 18.04 LTS). Для более новых версий Ubuntu предлагалось использовать chroot или контейнеры Ubuntu 18.04. Также высказалось предположение, что готовые snap-пакеты (с использованием 18.04-derived library runtime) предположительно будут работать в более поздних выпусках Ubuntu.

Скандал

После такого заявления в среде линуксоидов разгорелся не шуточный скандал. Множество пользователей остались недовольны таким решением. На форумах и профильных ресурсах разгорелись обширные дискуссии.

20 июня в mail-листе Wine Розана ДиМезио (Wine Community admin) опубликовала сообщение с опасениями о том, что собрать Wine с поддержкой 32-bit под Ubuntu 19.04 будет невозможно. Она высказала предположение, что придется формировать Wine для Ubuntu только с поддержкой 64-разрядных пакетов. На текущий момент стабильной полностью 64-разрядной версия Wine не существует. Также переход на 64-разрядную версию приведет к неработоспособности всех 32-разрядных программ и игр, которыми активно пользуются пользователи через Wine.

поддержка 32 битных приложений в 64 битной ubuntu. 02 ubuntu 32. поддержка 32 битных приложений в 64 битной ubuntu фото. поддержка 32 битных приложений в 64 битной ubuntu-02 ubuntu 32. картинка поддержка 32 битных приложений в 64 битной ubuntu. картинка 02 ubuntu 32.

поддержка 32 битных приложений в 64 битной ubuntu. 03 ubuntu 32. поддержка 32 битных приложений в 64 битной ubuntu фото. поддержка 32 битных приложений в 64 битной ubuntu-03 ubuntu 32. картинка поддержка 32 битных приложений в 64 битной ubuntu. картинка 03 ubuntu 32.

Аналогичные опасения высказали разработчики Steam. 20 июня было опубликовано соответствующее сообщение mail-листе. Под угрозу попало множество игр, которые используют 32-разрядные библиотеки.

В Ubuntu решили провести тесты

21 июня на форуме Ubuntu Алан Попе (Community Manager в Ubuntu) опубликовал результаты тестирования запуска нескольких 32-разрядных игр в Ubuntu 19.10, в которой были полностью удалены пакеты i386 и отключены репозитории для i386.

Алан выбрал 6 игр из своей коллекции, некогда купленных на GOG.

В качестве тестовой площадки использовалась Ubuntu 19.10 (64-bit), работающая в VirtualBox. Были выполнены команды по удалению i386 и отключению репозиториев:

Затем была выполнена установка Wine64:

Результаты тестирования оказались ожидаемыми. Ни одна из игр не заработала. Некоторые не установились, некоторые установились, но не запустились.

Установились но не запустились (ошибки или черный экран):

Canonical пересмотрела свое решение

24 июня на сайте Ubuntu появилось новое сообщение от Canonical. Они отменили свое решение о прекращении поддержки 32-разрядных пакетов.

Было принято новое решение — оставить поддержку только необходимых 32-разрядных пакетов для архитектуры i386 в Ubuntu 19.10 и Ubuntu 20.04 LTS.

поддержка 32 битных приложений в 64 битной ubuntu. 04 ubuntu 32. поддержка 32 битных приложений в 64 битной ubuntu фото. поддержка 32 битных приложений в 64 битной ubuntu-04 ubuntu 32. картинка поддержка 32 битных приложений в 64 битной ubuntu. картинка 04 ubuntu 32.

Было решено выбрать определенные 32-разрядные пакеты, которые необходимы для поддержки устаревшего программного обеспечения. Для составления списка таких пакетов будет привлечено сообщество, включая сообщества Wine и UbuntuStudio. Также в Canonical указали на то, что если после релиза Ubuntu каких-то пакетов окажется недостаточно, то они будут включены после релиза.

В будущем Canonical планирует совместно с Wine, UbuntuStudio и игровыми сообществами обеспечить переход на контейнерную технологию для поддержи 32-разрядных библиотек.

Источник

How to Compile 32-bit Apps on 64-bit Ubuntu?

3 Answers 3

Ubuntu 16.04

For some reason, on Ubuntu 17.04, I also needed to install the version specific one:

Then a minimal hello world:

compiles without warning with:

but fails on an x86_64 executable with:

Furthermore, I have:

So I think it works 🙂

It is a shame that this package conflicts with the cross compilers like gcc-arm-linux-gnueabihf https://bugs.launchpad.net/ubuntu/+source/gcc-defaults/+bug/1300211

Running versions of the question:

We are able to run 32-bit programs directly on 64-bit Ubuntu because the Ubuntu kernel is configured with:

whose help on the kernel source tree reads:

This is in turn possible because x86 64 bit CPUs have a mode to run 32-bit programs that the Linux kernel uses.

поддержка 32 битных приложений в 64 битной ubuntu. jhDFt. поддержка 32 битных приложений в 64 битной ubuntu фото. поддержка 32 битных приложений в 64 битной ubuntu-jhDFt. картинка поддержка 32 битных приложений в 64 битной ubuntu. картинка jhDFt.

To get Ubuntu Server 12.04 LTS 64-bit to compile gcc 4.8 32-bit programs, you’ll need to do two things.

Make sure all the 32-bit gcc 4.8 development tools are completely installed:

sudo apt-get install lib32gcc-4.8-dev

Multiarch installation is supported by adding the architecture information to the package names you want to install (instead of installing these packages using alternative names, which might or might not be available).

See this answer for more information on (modern) multiarch installations.

In your case you’d be better off installing the 32bit gcc and libc:

It will install the 32-bit libc development and gcc packages, and all depending packages (all 32bit versions), next to your 64-bit installation without breaking it.

Источник

Используем 32битные библиотеки в 64битных программах

Можно ли использовать 32битные библиотеки в 64битных программах? Скорее нет. А если очень нужно? Тогда скорее да!

Для одного проекта мне нужно работать с 32битными проприетарными библиотеками. Под виндой нет проблем — компилируем все в 32 бита и вперед. Но под линуксом дела обстоят хуже. Собирать все в 32 бита и цеплять в RPM 32битные версии свободных библиотек некрасиво, более того у меня есть API для плагинов. Совсем не хочется заставлять юзеров ставить ради несчастного плагина 32битный компилятор. Поэтому я решил сделать переходник из кота в мышь, который будет вызывать функции из 32битных библиотеке в отдельном процессе. Сначала я хотел сделать его на питоне, но скомпилировать питон в бинарник у меня не получилось. Потом добрые люди на IRC канале PyPy подсказали мне, что можно использовать libffi прямо из C! Дальше дело за малым.

В итоге получилась программа runso32. Она работает в двух режимах. В первом режиме в аргументах командной строки задается библиотека, функция, строка описания параметров и собственно сами параметры. На данный момент поддерживаются параметры типа int, unsigned int, double, указатель и последовательность байтов (буфер). Программа вызывает функцию, печатает возвратное значение и завершается. Второй вариант — интерактивный. Программа читает команды из стандартного ввода или файла. Сначала регистрируются все интересные нам функции. Потом каждая запись, начинающаяся с «CALL», вызывает функцию с заданным номером. в интерактивном режиме перед тем как отправить буфер необходимо указать его длину. В интерактивном режиме все все величины отсылаются в бинарном формате Little Endian

После того как мы определились какие функции нам нужны, можно сделать 64бит библиотеку. Вызов каждой функции будет отсылать в runso32 идентификатор нужной функции и параметры и получать из runso32 результат. Таким образом, мы как бы вызываем функции из 32бит библиотеки в 64бит приложении. Это происходит хоть и с задержкой, но практически незаметно для остальной программы.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *