Запуск 32-х битных приложений в 64-х битной системе Ubuntu Linux

В частности при попытке выполнить в командной строке файл, предназначенный для битной системы, может возникать ошибка вида:
./somefile: Нет такого файла или каталога (No such file or directory)
Чтобы битные приложения могли запускаться в битной системе Linux нужно установить соответствующие библиотеки (в Ubuntu пакет, который содержит эти библиотеки, называется ia32-libs ). Для их установки выполните команду:
Данное решение не является рецептом от всех проблем, связанных с запуском разрядных программ в битной системе Linux. Некоторые приложения по прежнему не будут запускаться, а некоторым могут потребоваться и еще какие-нибудь дополнительные битные библиотеки. Но для многих случаев установка ia32-libs в Debian based Linux системах значительно помогает.
запуск 32 битного приложения на 64 битном debian
Здравствуйте. У меня debian jessy 64 бит. В тырнетах советуют ставить ia32-libs для таких случаев но в репозиториях его нет. Подскажите что делать. Спасибо.
dpkg —add-architecture i386
aptitude update
я добавил архитектуру i386 и всеравно aptitude пишет «Нет подходящей версии для ia32-libs»
Читать надо было по сслыкам. ia32-libs больше не нужен.
вроде поставил нужные либы но при запуске приложения пишет ./X3AP_config: error while loading shared libraries: libGL.so.1: wrong ELF class: ELFCLASS64 похоже ей не нравятся 64 битные дрова. как поставить 32 битные чтобы они были по соседству с 64 битными
Сейчас же уже вроде multiarch ?
Давайте обо всём по порядку:
- Что за программа будет использоваться?
- Какая видеокарта стоит в компе?
программа — x 3 albion prelude видеокарта radeon hd 6970
Блог начинающего сисадмина
Здесь уже не будет ничего нового интересного, лучше загляните сюда: 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
— с использованием виртуальных машин
Multiarch
В то время, как 64-битные программы не могут работать в 32-битных операционных системах, 32-битные программы могут работать в 64-битных операционных системах, однако они нуждаются в соответствующих 32-битных библиотеках. Со времен появления дистрибутивов Ubuntu 11.04 (Natty) и Debian 7.0 (Wheezy) было объявлено о поддержке multiarch, где 32-битные и 64-битные библиотеки могут сосуществовать вместе в одной системе. Пакет под названием ia32-libs включает в себя множество версий разделяемых библиотек.
Пример установки 32-битной программы в Debian/Ubuntu:
# dpkg —add-architecture i386
# apt update
# apt install -y ia32-libs
# apt install package-name:i386
chroot
С помощью технологии chroot, поддержку которой имеет ядро Linux, возможно организовать запуск 32-битных программ в изолированном окружении (песочнице) в уже имеющейся 64-битной операционной системе. Идея состоит в том, чтобы установить необходимое окружение в поддереве каталогов и запустить приложения из под него. В основном chroot используется для тестирования различных приложений, в том числе для 32- и 64-битных архитектур.
Команда chroot и одноименный системный вызов запускают процессы, с учетом того, что на самом деле запускаемое окружение является всего лишь системным подкаталогом.
Для организации удобного управления подобным окружением существует утилита schroot :
# apt update
# apt install -y schroot debootstrap dbus
Утилита debootstrap позволяет установить базовую систему Debian в необходимый подкаталог. Пакет dbus позволяет некоторым приложениям в операционной системе общаться друг с другом.
Пример установки 32-битного окружения в chroot:
# mkdir /chroot
# debootstrap —arch=i386 stable /chroot http://deb.debian.org/debian/
После создания окружения, создаем конфигурационный файл для его запуска:
# 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:
# schroot -c test
(test)[email protected]:
После этого можно устанавливать необходимые программы в данное окружение chroot.
Технология chroot является полезной, однако распространение таких технологий как OpenVZ и Docker позволяют не только изолировать окружения в каталогах, но и изолировать ресурсы для каждого контейнера. В данный момент множество людей во всем мире использую Docker для запуска множества контейнеров, в основном для тестирования различных версий ПО.
К примеру команда:
# docker run -i -t ubuntu:12.04 /bin/bash
запускает контейнер с операционной системой Ubuntu 12.04.
Аналогично для OpenVZ 7:
# prlctl create ct1 —ostemplate debian-8.0-x86_64 —vmtype=ct
У 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
Запуск виртуальной машины:
$ kvm -k ru -cdrom /linuxmint-32bit.iso -hda /vdisk_qemu -m 1024 -boot d -name TEST32
где:
-cdrom указывает путь к iso-образу операционной системы
-hda /vdisk_qemu путь к виртуальному жесткому диску
-m 1024 оперативная память указанная в мегабайтах
-boot d порядок загрузки оборудования (с cdrom)
-name TEST32 имя виртуальной машины
После установки операционной системы, можно отключить виртуальную машину и запустить ее с виртуального жесткого диска.
$ kvm -hda /vdisk_qemu -m 1024
Как запускать 32х разрядные приложения (Linux) в 64х битном окружении?
Под 64 разрядной ОС (Ubuntu 10.04 x86_64) нужно запустить 32х разрядное приложение (CAD пакет Medusa Personal). Немного сомневаюсь, как поступать в таких случаях. При попытке запустить выдает
/opt/medusa4_personal_v5_0/medcolraster/m2d/run/draft: error while loading shared libraries: libtiff.so.3: wrong ELF class: ELFCLASS64
насколько я понимаю, это из за разрядности. Вообще вопрос более общий. Как вообще запускать приложения в таких случаях (не конкретно Медузу)? Доставлять библиотеки 32х? Откуда доставлять и какие?
2 ответа 2
Из репозитариев. Вот взять skype, например. Это стандартная проприетарная программа в rpm-пакете. Под 32-бита работает отлично, под 64-битной системой не запускается с выдачей сообщения об ошибке. Приходится вручную доставлять библиотеки. На разных системах — разные. Но списочек может получиться, например, такой: ia32-libs, lib32asound2, libasound2-plugins. Как видно из названий библиотеки 32-битные. Проблема с проприетарностью лишь та, что просто не все зависимости прописаны.
По медузе решение тоже есть. Необходимо в файле /medusa4/master_project/login добавить строчки с указанием путей к 32-битным библиотекам
Затем сделать ссылку на 32-битную версию библиотеки
32-битное приложение в Wine64
Привет, 
Вопрос: могу ли я запустить 32-битное приложение в твоей 64-битной сборке Wine на 64-битной системе?
Исходные данные:
Debian 10 64-bit
wine-4.11-8-proton-amd64.tar.xz
32-битное приложение
amd64 — for 64-bit systems, it can run both 32-bit and 64-bit applications
Что я делаю не так? Чего не хватает?
Да, 32-битные приложения без проблем работают. Но нужно, чтобы в системе были 32-битные библиотеки установлены. То есть, как минимум, нужны 32-битные glibc, freetype и видеодрайвер (на самом деле, зависимостей больше).
Ну и попробуй, любопытства ради, вот так запустить winecfg:
На чистой 64-битной ОС без 32-битных библиотек не получится запустить 32-битные приложения (ни нативные, ни через Wine).
Но нужно, чтобы в системе были 32-битные библиотеки установлены. То есть, как минимум, нужны 32-битные glibc, freetype и видеодрайвер
А, блин, ясно. Пробовал ставить через apt, полсистемы прилетает. Думал, есть возможность все-таки без этого 🙂
Думал, есть возможность все-таки без этого 🙂
Может быть, когда-нибудь сделают прослойку для таких целей, но пока что Wine именно так устроен.
Пробовал ставить через apt, полсистемы прилетает.
Это да, много чего устанавливается.
Понял, спасибо. Тему удалить не могу 🙂 Ну да ладно.
Если хочешь, можешь попробовать мой Wine Standalone со встроенными библиотеками.
С ним, по идее, в систему придется установить не так много библиотек (только базовые).
squashfs установил, если что.
Какой у тебя дистрибутив?
Нет, такая же ошибка.
Я расписал все. Debian 10 64-bit.
Кстати, самый первый раз запускал без установленного squashfs. В /tmp создались временные файлы с /mnt и т.д. Удалить от рута не вышло. Перезагрузился, запустил, теперь так:
От рута чет стремно запускать твою штуковину 🙂
Я расписал все. Debian 10 64-bit.
Точно, невнимательный я 🙂
Кстати, самый первый раз запускал без установленного squashfs. В /tmp создались временные файлы с /mnt и т.д.
Так и должно быть, но странно, что они не удалились потом сами.
Перезагрузился, запустил, теперь так:
Хорошо, значит образ все-таки смонтировался. А эта ошибка из-за того, что у тебя 32-битный glibc не установлен. Базовые бибилотеки все равно нужны.
От рута чет стремно запускать твою штуковину 🙂
От рута и не нужно, она задумана так, чтобы запускать с правами пользователя.
32-битный glibc не установлен. Базовые бибилотеки все равно нужны.
Понятно, ну, в общем, это притянет все то, что ставишь через пакетный менеджер. Не хотел просто в системе сорить всем этим. Ладно, отбой. И спасибо за старания 🙂






