У меня установлена 64-битная (amd64 или x86_64) Debian или Ubuntu. Мне нужно время от времени запускать 32-битные (i386 / i686) программы или компилировать программы для 32-битной системы. Как я могу сделать это с минимумом суеты?
Бонус: что делать, если я хочу запустить или протестировать более старый или более новый выпуск дистрибутива?
Ответы:
Родная поддержка
Начиная с Ubuntu 11.04 и Debian wheezy (7.0), Debian и Ubuntu имеют поддержку multiarch: вы можете напрямую смешивать пакеты x86_32 (i386) и x86_64 (amd64) в одной системе. Это называется поддержкой multiarch. См. Подробности в ответе warl0ck .
В более старых выпусках Debian и Ubuntu поставляются с рядом 32-битных библиотек на amd64. Установите пакет, чтобы иметь базовый набор 32-разрядных библиотек и, возможно, другие пакеты, которые зависят от этого. Ваши 32-битные исполняемые файлы должны просто запускаться, если у вас есть все необходимые библиотеки. Для разработки установите и снова, возможно, другие пакеты, которые зависят от него, такие как . Вы также можете найти полезные и на Debian. Передайте опцию gcc для компиляции для ix86.
ia32-libs
gcc-multilib
g++-multilib
binutils-multiarch
ia32-libs-dev
-m32
Обратите внимание, что
uname -m
все равно будет отображаться,x64_64
если вы используете 64-битное ядро, независимо от того, какие 32-битные компоненты пользовательского режима вы установили. Schroot, описанный ниже, заботится об этом.Schroot
Этот раздел является руководством по установке Debian-подобного дистрибутива «внутри» другого дистрибутива Linux. Он сформулирован с точки зрения установки 32-битной Ubuntu внутри 64-битной Ubuntu, но его следует применять с небольшими изменениями в других ситуациях, таких как установка нестабильной версии Debian внутри стабильной версии Debian или наоборот.
Введение
Идея состоит в том, чтобы установить альтернативный дистрибутив в поддереве и запустить из него. Таким образом, вы можете установить 32-битную систему в 64-битную систему, или другой выпуск вашего дистрибутива, или среду тестирования с различными наборами пакетов.
chroot
Вызов команды и система начинает процесс с точки зрения файловой системы , которая ограничивается поддерева дерева каталогов. Debian и Ubuntu поставляют schroot , утилиту, которая использует эту функцию для создания более удобной суб-среды.Установите
schroot
пакет ( Debian ) иdebootstrap
пакет ( 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 загружает и устанавливает базовый набор пакетов для указанного дистрибутива и архитектуры.
У вас уже есть работающая система; то, что следует, является незначительными улучшениями. При запуске Schroot автоматически перезаписывает несколько файлов
/32/etc
, в частности конфигурацию DNS/etc/resolv.conf
и базу данных пользователей/etc/passwd
и другие файлы (это можно переопределить, см. Документацию). Есть еще несколько файлов, которые вы можете скопировать вручную раз и навсегда:Там не будет файла
/etc/mtab
или/etc/fstab
в chroot. Я не рекомендую использоватьmount
команду вручную в chroot, делайте это снаружи. Но создайте достаточно хорошо,/etc/mtab
чтобы заставить команды, такие какdf
работать разумно.С
directory
типом, schroot будет выполнять привязку монтирование ряда каталогов, то есть эти каталоги будут совместно с родительской установкой:/proc
,/dev
,/home
,/tmp
.Службы в 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 отправлял почту, но вы определенно не хотите, чтобы она получала).Идти дальше
Для получения дополнительной информации см.
schroot
Руководство , часто задаваемые вопросы по schroot иschroot.conf
руководство . Schroot является частью проекта Debian autobuilder (buildd) . На странице сообщества Ubuntu могут быть дополнительные полезные советы о debootstrap .Виртуальная машина
Если вам нужна полная изоляция альтернативной среды, используйте виртуальную машину, такую как KVM ( qemu-kvm ) или VirtualBox .
источник
[ "$(stat -c %d:%i /)" != "$(stat -c %d:%i /proc/1/root/.)" ]
делает условие?users=faheem
в вашем примере. По умолчанию, по крайней мере для меня, я не являюсь членом группы пользователей. Я бы ожидал, однако.Поскольку в Ubuntu 11.04 (natty) и Debian 7.0 (wheezy) появилась поддержка многоархитектуры , 32-битные и 64-битные библиотеки могут сосуществовать в одной системе. Чтобы установить 32-битную библиотеку libXX, сначала добавьте в вашу систему необходимую 32-битную архитектуру:
Для Ubuntu:
И для Debian:
Затем установите 32-битную библиотеку:
Пакет ia32-libs. Начиная с Ubuntu 12.04, он больше не содержит библиотек, он только загружает
libXX:i386
пакеты как зависимости.Компиляция довольно проста для программ на C и C ++, добавьте
-m32
вCFLAG
илиCXXFLAG
, что сделает сгенерированную программу 32-битной, напримерЭто работает и для проектов на основе makefile.
источник
apt-get install ia32-libs
работал для меня (13.04)!Если у вас просто 32-битный бинарный файл, который вы хотите запустить в современной 64-битной системе Debian / Ubuntu, сделайте следующее:
Это было протестировано на Debian 9.
источник
sudo apt-get install lib32z1
для моего конкретного 32-разрядного исполняемого файла, если это поможет. Ошибка:sqlite3: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
. Да, сейчас 2019 год, и я не могу найти предварительно скомпилированный 64-разрядный клиент sqlite3, поддерживаемый проектом sqlite :( Я довольно ограничен в том, что мне разрешено устанавливать на этом общем ресурсе, поэтому мне приходится снимать скомпилированные пакеты sqlite. К счастью, я могу установитьlib32z1
.