Crossroads » WINE » Как соблюсти 32-х битные зависимости при сборке Wine

Как соблюсти 32-х битные зависимости при сборке Wine

  • Dislike
  • -1
  • Like
«Инструкция по сборке Wine» описывает процесс компиляции WoW-сборки Wine. Процесс подразумевает наличие всех 32-х битных зависимостей, необходимых для компиляции. В ряде дистрибутивов этого достаточно.

Часто 32-х битные пакеты конфликтуют с нативными, 64-х битными. То есть параллельно они установлены быть не могут. Для сборки Wine нужны обе разрядности. Обойти это ограничение можно при помощи «контейнера». Так называемая «виртуализация на уровне операционной системы» позволяет скомпилировать 32-х битную версию Wine внутри 32-х битного контейнера, что позволит соблюсти все необходимые зависимости.

Ниже я расскажу как это сделать на примере Ubuntu. По сути это «пересказ» статьи «Building Biarch Wine On Ubuntu», размещённой на официальном сайте WineHQ. Статья помечена как «устаревшая», однако в последней на сегодня TLS версии Ubuntu (18.04) соблюсти все зависимости по-прежнему проблематично.

Я буду использовать LXC контейнер, так как о нём идёт речь в «Building Biarch Wine On Ubuntu» и LXC проще, чем другие системы, такие как Chroot, Docker и прочие.

Для начала компилируем 64-х битную версию Wine в штатном режиме так, как описано в «Инструкции по сборке Wine». Для удобства предположим, что исходники Wine у нас в ~/build/source, относительно домашнего каталога. В папке с исходниками у нас папка «wine64», в которой скомпилированная 64-х битная сборка Wine. Далее готовим контейнер.

Стоит учесть, что в контейнере будет находиться минимальная 32-х битная версия Ubuntu со всеми, необходимыми для компиляции Wine, зависимостями. То есть в корневой файловой системе на вашем диске должно быть достаточно места. Теоретически, при соблюдении определённых условий, дистрибутив в контейнере не обязательно должен быть тот же, что и на хосте. Но на практике у вас наверняка возникнут проблемы при компиляции Wine, так как 64-х битная часть сборки скомпилирована в окружении дистрибутива хоста. Так что, если на ПК у вас Ubuntu, то и в контейнере должна быть Ubuntu.
sudo apt install lxc lxc-utils lxc-templates lxctl lxcfs

LXC использует шаблоны. Пакет «lxc-templates» есть не во всех дистрибутивах. Если у вас такой дистрибутив, то поищите в Сети информацию на тему создания контейнера при помощи команды «lxc-create». Создаём контейнер.
sudo lxc-create -t ubuntu -n 32bit -- --bindhome $LOGNAME -a i386

Где «ubuntu» - шаблон, «32bit» - имя нашего контейнера. Имя может быть любым. Параметр --bindhome должен привязать home-директорию контейнера к реальной home-директории хоста. То есть «$LOGNAME» указывает на имя пользователя, от которого вы работаете. Архитектура — i386. Таким образом будет создан контейнер «32bit» 32-х битной архитектуры. Процесс займёт какое-то время, так как будут скачены и установлены соответствующие пакеты. В итоге вы получите контейнер с базовой установкой Ubuntu той же версии, что и у вас на хосте. В данном примере — 18.04.

Далее скопируйте настройки APT из хоста в контейнер, если у вас подключены какие-то дополнительные репозитории.
sudo cp -R /etc/apt /var/lib/lxc/32bit/rootfs/etc

Запускаем контейнер.
sudo lxc-start -n 32bit

Теоретически должно появиться приглашений на вход. Мне ни разу не удалось его увидеть. Если у вас то же самое, то нужно ввести следующую команду.
sudo lxc-attach -n 32bit

После чего информация о пользователе и системе, в командной строке, должна измениться (user@32bit). Убедитесь, что в контейнере вы не под ROOT. Если вместо имени вашего пользователя отображается «root», то перейдите в режим обычного пользователя с помощью команды «su user_name», где «user_name» - пользователь, пот которым вы работаете. Таким образом вы окажетесь в вашей обычной home-директории, работая при этом в окружении контейнера. То есть из контейнера вам будет доступна файловая система хоста. Так же как и на хосте, используйте «sudo» для повышения прав. Обновите пакеты в контейнере. Обычно они «релизной» версии, не обновлённые.
sudo apt update
sudo apt upgrade

Установите все зависимости для компиляции Wine. То есть всё то, что вы устанавливали на хосте для компиляции 64-х битной версии, включая сам компилятор и «ccache», если хотите использовать кэширование. «:i386» к именам пакетов добавлять не нужно. Пакет «ccache» рекомендуется, так как 32-х битную версию Wine придётся компилировать два раза. Кэширование ускорит этот процесс на «втором заходе».

Приступаем к компиляции 32-х битной сборки Wine. Так же как и при «штатной» компиляции WoW-версии, в папке с исходниками у вас папка «wine64», с уже скомпилированной 64-х битной версией и пустая папка «wine32», для 32-х битной версии. Создайте так же папку «wine32tools» и перейдите в неё.
cd ~/build/source/wine32tools

Компилируем с теми же параметрами, с которыми компилировали 64-х битную версию и с теми же, с которыми будет компилировать основную 32-х битную версию. Путь до директории установки указывать не нужно. Пример:
../configure --without-oss --without-vkd3d --with-gstreamer --with-x --disable-tests --CFLAGS="${CFLAGS}" CC="ccache gcc"

После удачного завершения компиляции, перейдите в папку «wine32» для компиляции основной 32-х битной версии.
../configure --prefix="путь до локальной директории установки" --without-oss --without-vkd3d --with-gstreamer --with-x --disable-tests --with-wine64=$HOME/build/source/wine64 --with-wine-tools=$HOME/build/source/wine32tools CFLAGS="${CFLAGS}" CC="ccache gcc"

Параметр «--prefix=» указывает на путь, по которому будет установлена готовая сборка. Параметр «--with-wine64» указывает на путь к скомпилированной заранее 64-х битной версии. Параметр «--with-wine-tools=» указывает на только что скомпилированную 32-х битную версию, с так называемыми «инструментами разработчика».

После удачного завершения компиляции, установите 32-х битную версию так, как это описано в «Инструкции по сборке Wine», всё так же находясь в контейнере. После чего можно закрыть контейнер. Убедитесь, что вы ещё в нём и введите «shutdown -h now». Система в контейнере будет выключена и вы снова окажетесь в системе хоста. Установите 64-х битную версию в штатном режиме, следуя «Инструкции по сборке Wine».

Таким образом вы получите готовую WoW-сборку Wine, собранную со всеми 32-х битными зависимостями.
Like Dislike

___
Tatyana K.



Tags: Linux, Wine, Ubuntu


 
  • Creative Commons Licence
  • Norton Safeweb
  • Website Uptime Monitoring By ServiceUptime.com