Запуск 32‑битных программ на 64‑битном Linux
Кратко
Если у вас 64‑битная система Linux и нужно запустить единичное 32‑битное приложение (например, игру или закрытую программу), обычно достаточно установить 32‑битные библиотеки. Если это не помогает, есть альтернативы: исправить проблемы с GTK, настроить переменные окружения, или создать 32‑битный chroot. В крайнем случае — виртуальная машина с 32‑битной ОС.
Введение
Большинство современных дистрибутивов Linux предлагают 64‑битные сборки для процессоров x86_64 (AMD, Intel). Они могут запускать 32‑битные приложения нативно — без аппаратной эмуляции — потому что архитектура x86_64 обратно совместима с x86. Но помимо совместимости процессора, нужно иметь соответствующие 32‑битные библиотеки и иногда небольшие правки в окружении.
Определение: ia32‑libs — пакет, содержащий набор общих 32‑битных библиотек, нужных некоторым приложениям на 64‑битных системах.
Когда это нужно
- Коммерческие игры и некоторые проприетарные приложения поставляются только в 32‑битном варианте.
- Пакет отсутствует в репозитории или приложение ожидает библиотеки в нестандартном каталоге.
- Приложение использует собственные GTK‑движки или расширения, доступные только как 32‑битные модули.
Установка 32‑битных библиотек (быстрый путь)
Во многих дистрибутивах 32‑битные библиотеки упакованы для простого установки. В Ubuntu исторически это был пакет ia32‑libs. Откройте терминал и выполните:
sudo apt-get install ia32-libsТакже его можно установить через графические менеджеры пакетов, например Synaptic, если предпочитаете GUI.
После установки такие приложения, как Skype или некоторые игры (например, World of Padman), обычно запускаются без дополнительной настройки.
Важно: в современных версиях Ubuntu и других дистрибутивов пакет ia32‑libs заменён механизмом multiarch (apt с :i386 архитектурой). Если ваш дистрибутив использует multiarch, вместо ia32‑libs добавляйте архитектуру и устанавливайте пакеты с суффиксом :i386.
Пример для multiarch (Ubuntu/Debian):
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libstdc++6:i386Проблемы с GTK и «wrong ELF class»
При запуске 32‑битных программ в 64‑битной системе иногда появляется ошибка «wrong ELF class» — приложение ожидает 32‑битные GTK‑движки в определённом каталоге, а те физически установлены в другом.
Ubuntu устанавливает 32‑битные GTK‑модули в /usr/lib32/gtk-2.0. Но многие темы и движки поставляются только в 32‑битных пакетах, и их нужно поместить в соответствующую директорию.
Типичный рабочий порядок при проблемах с темой (например, qtcurve):
- Найдите 32‑битный пакет темы в репозиториях (ubuntu packages) или скачайте .deb.
- Распакуйте пакет как обычный архив (ar/xz или dpkg‑debpkg tools).
- Найдите файл движка темы, например: ~/download-directory/usr/lib/gtk-2.0/2.10.0/engines/libqtcurve.so
- Скопируйте файл в /usr/lib32/gtk-2.0/2.10.0/engines/:
sudo cp ~/download-directory/usr/lib/gtk-2.0/2.10.0/engines/libqtcurve.so /usr/lib32/gtk-2.0/2.10.0/engines/Если стартовый скрипт приложения (например, Chromium) уже проверяет /usr/lib32/gtk-2.0, этого достаточно. Если программа ищет /usr/lib/gtk-2.0, можно либо изменить стартовый скрипт, либо экспортировать переменную окружения перед запуском:
export GTK_PATH=/usr/lib32/gtk-2.0
command-to-start-appЕсли у приложения нет стартового скрипта, создайте небольшой скрипт-обёртку, который выставляет GTK_PATH и запускает программу.
Если всё остальное не помогает — chroot и виртуализация
Некоторые программы отказываются корректно работать в 64‑битной среде даже при установленном ia32‑libs. Тогда практичные варианты:
- Запустить 32‑битный chroot: это устанавливает полноценную 32‑битную систему в подкаталоге и позволяет запускать приложения в «чистом» 32‑битном окружении. Плюсы: совместимость; минусы: занимает больше места, требует настройки (bind‑mount /dev, /proc, /sys).
- Использовать виртуальную машину (например, VirtualBox или KVM) с 32‑битной гостевой ОС. Плюсы: изоляция, простая откатимость; минусы: накладные расходы по ресурсам.
Пример быстрой схемы создания chroot с помощью debootstrap (Debian/Ubuntu):
- Установите debootstrap: sudo apt-get install debootstrap
- Создайте директорию и выполните debootstrap для i386:
sudo debootstrap --arch=i386 focal /srv/chroot/focal-i386 http://archive.ubuntu.com/ubuntu/- Смонтируйте необходимые pseudo‑FS и chroot:
sudo mount --bind /dev /srv/chroot/focal-i386/dev
sudo mount -t proc /proc /srv/chroot/focal-i386/proc
sudo chroot /srv/chroot/focal-i386 /bin/bashВнутри chroot вы получите 32‑битную среду, где можно установить все требуемые библиотеки и модули (включая 3D‑драйверы, при их поддержке).
Альтернативные подходы и когда они лучше
- Multiarch (:i386) — современный и компактный способ работы в Ubuntu/Debian. Предпочтителен при возможности устанавливать отдельные 32‑битные пакеты.
- chroot — когда нужен полный 32‑битный стэк и совместимость на уровне системных модулей.
- Виртуальная машина — когда важно полное изолированное окружение или требуется GUI с полной поддержкой драйверов.
- Статическая сборка или перенос библиотек — возможна для простых утилит, но опасна и не рекомендуется для сложных приложений.
Контрпример/когда это не работает: приложения, требующие закрытых 32‑битовых драйверов ядра (вендорские модули), часто нельзя просто «подтолкнуть» библиотеками — нужен полноценный 32‑битный стэк или виртуалка.
Пошаговая методика (мини‑методология)
- Выясните архитектуру приложения: file /path/to/app или ldd /path/to/app.
- Попробуйте установить необходимые 32‑битные пакеты (ia32‑libs или через multiarch).
- Запустите приложение и посмотрите ошибки (journalctl, stderr).
- Если ошибка связана с GTK, установите 32‑битные движки в /usr/lib32/gtk-2.0 или экспортируйте GTK_PATH.
- Если проблема — драйверы/ядро, переходите к chroot или виртуальной машине.
- Документируйте решения (скрипт‑обёртка, список пакетов) для повторного использования.
Критерии приёмки
- Приложение запускается и выполняет основные функции без аварийного завершения.
- Графический интерфейс корректно отображается (темы/движки не рвут интерфейс).
- Производительность в приемлемых пределах (без заметной деградации в сравнении с эталоном).
- Нет требований к закрытым 32‑битным модулям ядра, которые не устанавливаются в вашей сборке.
Чек‑лист для сисадмина
- Определил архитектуру бинарника (32/64).
- Добавил архитектуру i386 (если используется multiarch).
- Установил необходимые :i386 пакеты или ia32‑libs.
- Проверил наличие 32‑битных GTK‑движков в /usr/lib32/gtk-2.0.
- При необходимости создал обёртку со «export GTK_PATH=/usr/lib32/gtk-2.0».
- Если требуется — настроил chroot или виртуальную машину.
- Задокументировал решение для повторного использования.
Быстрый справочник команд
- Установка ia32‑libs (исторический): sudo apt-get install ia32-libs
- Multiarch: sudo dpkg –add-architecture i386; sudo apt-get update; sudo apt-get install libc6:i386
- Копирование GTK‑движка:
sudo cp ~/download-directory/usr/lib/gtk-2.0/2.10.0/engines/libqtcurve.so /usr/lib32/gtk-2.0/2.10.0/engines/- Экспорт переменной окружения и запуск приложения:
export GTK_PATH=/usr/lib32/gtk-2.0
command-to-start-app- Быстрый debootstrap chroot (пример для Ubuntu focal i386):
sudo apt-get install debootstrap
sudo debootstrap --arch=i386 focal /srv/chroot/focal-i386 http://archive.ubuntu.com/ubuntu/
sudo mount --bind /dev /srv/chroot/focal-i386/dev
sudo mount -t proc /proc /srv/chroot/focal-i386/proc
sudo chroot /srv/chroot/focal-i386 /bin/bashДиаграмма принятия решения
flowchart TD
A[Нужно запустить 32‑битное приложение?] --> B{Да}
B --> C[Проверить архитектуру бинарника]
C --> D{Приложение 32‑битное?}
D -->|Нет| E[Запускать как 64‑бит]
D -->|Да| F[Попробовать установить ia32‑libs / multiarch]
F --> G{Запустилось?}
G -->|Да| H[Готово]
G -->|Нет| I[Проверить ошибки 'GTK, драйверы']
I --> J{GTK?}
J -->|Да| K[Установить 32‑битные движки; экспортировать GTK_PATH]
J -->|Нет| L{Требуются 32‑битные модули ядра?}
L -->|Да| M[Использовать chroot или VM]
L -->|Нет| N[Искать другие зависимости или патчи]Риски и рекомендации
- Риск: смешивание 32‑ и 64‑битных библиотек может привести к конфликтам версий. Рекомендуется избегать ручного копирования библиотек в системные каталоги, если есть возможность установить пакет правильно через менеджер пакетов.
- Рекомендуется создавать резервные копии перед изменением системных директорий и использовать chroot/VM для экспериментальных приложений.
Заключение
Запуск 32‑битных программ на 64‑битном Linux обычно сводится к установке нужных 32‑битных библиотек (ia32‑libs или multiarch), корректировке GTK_PATH для тем и, в сложных случаях, использованию chroot или виртуальной машины. Следуйте пошаговой методике, документируйте решения и выбирайте наиболее простое и безопасное решение для вашей инфраструктуры.
Важно
Если вы не уверены в последствиях ручного копирования системных библиотек, используйте управляемые инструменты пакетов (apt/dpkg) или переходите на изолированное окружение (chroot/VM).
Похожие материалы
Как восстановить ключ Windows 10 — полное руководство
Как использовать AI Backdrops в Instagram
Организация фото на iPhone: альбомы и удаление
Share Play на PS5: как использовать и советы
Слайд‑шоу Google Images — как смотреть и настраивать