Crossroads » WINE » Инструкция по сборке Wine

Инструкция по сборке Wine

  • Dislike
  • +3
  • Like
Инструкция по сборке WineWine, как «прослойка» между программами под Windows и средой Unix — не является универсальным средством. Какие-то программы работают под Wine идеально, какие-то с незначительными проблемами, какие-то вовсе не работают.

Подавляющее большинство пользователь используют Wine для запуска игр, написанных под Windows. Если игра достаточно популярна, но работает под Wine «со скрипом», то вполне вероятно, что под неё есть патч. Патчи могу что-то добавлять в Wine, могут что-то исправлять, могут что-то убирать, например, в случаях регрессии. Но подавляющее большинство патчей — это «коммиты», опубликованные участниками разработки и ждущие своей очереди для принятия в мэйнстрим. Далеко не каждый патч станет частью основного кода Wine. В первую очередь из-за того, что патч действительно исправляет что-то определённое, но при этом «ломает» что-то другое. Такие патчи полезны только для запуска отдельно взятой игры. Их не добавляют в публичные сборки Wine, так как делать отдельную сборку под каждую «проблемную» игру практически нереально.

В этой статье я расскажу о том, как собрать собственную сборку Wine. Данный материал рассчитан в первую очередь на новичков, с минимальным опытом работы в Linux.

И так, для начало нам нужен инструмент сборки. Частью проекта Wine является инструмент Winelib для компиляции библиотек win32. Однако, по всеобщему мнению MinGW справляется с этой задачей лучше. Другими словами, не вдаваясь в технические подробности, Wine-сборка, скомпилированная с помощью MinGW быстрее и лучше в плане совместимости. Остановимся на MinGW.

В Debian и дистрибутивах на его основе, таких как Ubuntu и производных, пакет называется «gcc-mingw-w64». В любом случае, поиск по репозиторию должен дать результаты в любом популярном дистрибутиве. Ищите «mingw».

Просидев лет десять на Ubuntu и производных я свято верю, что будущее за Arch. При всеобщей любви к Ubuntu, как к дистрибутиву «для новичков», Manjaro, основанная на Arch, проще и главное — стабильнее. Простота в мире Arch (да и вообще в Linux) — понятие относительное. Но когда тебе становится тесно в дистрибутивах «из коробки» и ты начинаешь копать глубже, Arch даёт больше возможностей. Manjaro же снимает все ограничения, отпугивающие новичков от Arch. К сожалению установка пакета «mingw-w64-gcc» в Arch, навивает мысли о сношениях ежей, особенно у новичков.

Дело в том, что на момент написания этой статьи, пакет присутствует только в AUR. Пакеты из AUR компилируются из исходного кода на стороне компьютера пользователя. Сборка пакета «mingw-w64-gcc» требует соблюдения ряда зависимостей, которые взаимно несовместимы. Другими словами попытка «лобовой» установки «mingw-w64-gcc» из AUR закончится ошибкой. Самый простой способ: использовать скрипт автоматизации процесса. Среди прочих полезностей TK-Glitch есть и такой. Всё, что нужно, это скачать скрипт «mingw-on-arch-automator.sh» и запустить его с правами пользователя. Стоит так же обратить внимание на строку «Using dwarf2 exceptions instead of sjlj exceptions provides a large performance boost to 32-bit DXVK and is enabled by default». По умолчанию указатель на «dwarf2» уже включён в скрипте. Ничего править не нужно. Этого нет в AUR и будет полезно, если вы решите собрать DXVK и D9VK сами. Если же вы решили придерживаться AUR, то соблюдайте последовательность, указанную в описании скрипта. То есть начинайте с установки «cloog» и последовательно подбирайтесь к «mingw-w64-gcc».

После того, как мы разобрались с компилятором, нужно соблюсти остальные зависимости. Установка Wine Staging из репозитория вашего дистрибутива подтянет необходимые зависимости для использования Wine. В AUR указан список всех зависимостей. Их 172. Пусть это вас не пугает. Многое из этого у вас уже установлено. Убедитесь, что у вас установлены зависимости с пометкой «make». Те, что не в скобках. Так же можно заглянуть в PKGBUILD. Всё, что вам нужно, указано между строками «makedepends» и «optdepends». В AUR указаны зависимости для Arch, но пользователям других дистрибутивов список так же будет полезен, так как названия пакетов, как правило, созвучны во всех дистрибутивах. В любом случае этот список покажет то, что нужно искать в своём дистрибутиве. Так или иначе, но в дальнейшем нам предоставится ещё одна возможность проверить наличие всех необходимых зависимостей.

Начиная с версии 4.3 и 4.13 для Staging, Wine поставляется с Faudio. Faudio — это замена устаревшего Xaudio. Faudio решает множество проблем со звуком и избавляет от необходимости в тивиках, связанных с Xaudio, описанных в установках игр на более старые сборки. Убедитесь, что у вас установлены оба пакета Faudio (32-х и 64-х разрядные версии).
Зависимость же «vkd3d» (обеих разрядностей) не обязательна. VKD3D — реализация трансляции вызовов Direct3D 12 в Vulkan. Реализация не идеальна. Игр же с поддержкой DirectX 12 на сегодня не так много и большая их часть поддерживает так же более ранние версии DirectX. То есть нет ничего плохого в наличии «vkd3d», но это не обязательно.
Ccache кэширует код при сборке, что в разы увеличивает скорость компиляции при повторной сборке. Если вы планируете собрать несколько вариантов одной и той же версии Wine, ccache вам в помошь. В любом случае, сcache полезен при сборке любых программ. Установите этот пакет.

После разрешения всех зависимостей, скачиваем исходники Wine с официального сайта проекта. Если вы хотите собрать Wine с патчами Staging, то скачиваем так же и их. Я рекомендую именно архив с чётко обозначенной версией, нежели клонирования всего репозитория со всеми промежуточными коммитами. Уточните под какую версию Wine ваш патч и есть ли более свежие версии. Версия может быть не так важна, если патч не вносит много изменений во множество файлов исходного кода Wine. Узнать это можно там, где вы брали этот патч. Это единственная причина, по которой вы можете захотеть более старую версию Wine. Во всех остальных случаях скачивайте последнюю версию. Убедитесь, что версии Wine и Wine Staging совпадают.

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

Шаг первый. Применение патчей.
Распаковываем исходники Wine. Рядом (в отдельную папку) распаковываем архив со Staging, если хотите Staging версию. Так же, неподалёку, размещаем ваш патч, или патчи. Для наглядности предположим, что всё это у нас в папке «build», в домашней директории. В «build» у нас папка «source» с исходниками Wine, папка «patches» с патчами и папка «staging» с патчами Staging. В папке с исходниками Wine создаём ещё две пустые папки с названием «wine32» и «wine64». В них мы будем собирать Wine соответствующих разрядностей.

Если вы хотите Staging версию, то переходим в папку «patches» в папке «staging». Туда, где файл «patchinstall.sh».

Патчи Staging всей кучей не всегда полезны. Разобраться в том, какой из них может испортить жизнь очень не просто. Если вы точно знаете, что какой-то из них мешает игре, которую вы планируете запускать, то применять стоит без него. Исключения можно указать в команде.
./patchinstall.sh DESTDIR="/home/user/build/source" -W winepulse-PulseAudio_Support --all

Где «user» - имя вашего пользователя, под которым вы работаете. В данном примере я собираю сборку без патчсета «PulseAudio». Причин на это две: Данный набор нередко является причиной проблем со звуком в различных играх и Faudio конфликтует с этим патчсетом. Я не знаю почему он до сих пор здесь, но со Staging это не редкость. Это не значит, что сборка не будет работать с Pulse Audio. Будет. И даже лучше, чем с этим патчсетом. Вы можете исключить любы другие патчи. Просто скопируйте имя папки патчсета в команду и используйте параметр «-W» перед каждым из них. Параметр «DESTDIR=» указывает на папку с исходниками Wine.

Процесс не займёт много времени. По завершении убедитесь, что все патчи применены без ошибок. Промотайте выдачу назад. Если хоть один из них вызвал ошибку, то в лучшем случае сборка просто не соберётся. В худшем же у вас будут с ней проблемы и поиски помощи на всяческих форумах, кроме намёков на кривизну рук, значимых результатов не принесут.

После удачного применения Staging переходим в папку с исходниками Wine и применяем наш сторонний патч, или патчи, если у вас их несколько. Если это патчсет, то патчи в нём, как правило, пронумерованы. Применять их нужно соблюдая очерёдность.
patch -p1 < /home/user/build/patches/some_game_fix.patch

Думаю, что с вышеуказанной командой всё ясно. Так же, как и в случае со Staging, убедитесь, что все патчи применены без ошибок. После применения патчей, можно приступать к конфигурации и сборке.

Шаг второй. Конфигурация и сборка.
Переходим в папку «wine64», которая в папке с исходниками Wine.
cd ~/build/source/wine64

Приступаем к конфигурации. Команда «../configure --help» покажет все возможные опции.
../configure --prefix="путь до локальной директории установки" --with-x --with-gstreamer --disable-tests --enable-win64 CFLAGS="${CFLAGS}" CC="ccache gcc"

Из обязательных тут только опция «--enable-win64», указывающая на то, что сборка 64-х разрядная. По предыдущим видно, что сборка с поддержкой X и Gstreamer. «CC="ccache gcc"» указывает на то, что в системе есть ccache и он должен быть использован. Параметр «--prefix=» нужен только в том случае, если вы планируете установить сборку не в систему, а держать её локально, в какой-либо директории. Укажите путь до этой директории.

Конфигурация пройдёт быстро и по окончании, в выдаче, будет указано чего именно не хватает и можно ли приступать к сборке. Это последний рубеж проверки всех необходимых зависимостей.
configure: libhal 64-bit development files not found, no legacy dynamic device support.

configure: Finished. Do 'make' to compile Wine.

Последняя строка — основная. В ней сказано, что конфигурация завершена и я могу приступать к сборке. То есть критических ошибок не обнаружено. Отсутствует «libhal», но мне начхать. Я не знаю для чего может понадобится поддержка устаревших «динамичных устройств», но вся периферия, такая как мышь, клавиатура, контроллер Xbox One (включая старый контроллер Logitech, купленный лет семь назад) — всё работает.

Собираем командой «make». Сам make-файл подразумевает, что у вас однопоточый процессор (какой-нибудь из ранних версий Pentium 4). Сборка займёт часы. Для ускорения процесса используйте параметр «-jX», где «Х» - количество потоков. Количество потоков обычно равно количеству ядер вашего процессора. Некоторые четырёх ядерные процессоры имеют по два потока на каждое ядро. Пример для моего, уже давно устаревшего, FX-8350:
make -j8

На моём процессоре сборка занимает чуть меньше 15-ти минут. Убедитесь, что последняя строка выдачи сообщает о том, что сборка завершена. Если сборка просто прекратилась без ошибок, но и без соответствующего уведомления, то что-то пошло не так. Скорее всего дело в патчах. Удалите пропатченные исходники и начинайте всё заново. Если же сборка завершилась удачно, то переходим в раннее созданную папку «wine32» и готовимся к сборке 32-х битных библиотек.
PKG_CONFIG_PATH=/usr/lib32/pkgconfig ../configure --prefix="путь до локальной директории установки" --with-x --with-gstreamer --disable-tests --with-wine64=../wine64 CFLAGS="${CFLAGS}" CC="ccache gcc"

«PKG_CONFIG_PATH=» указывает на «pkgconfig» в системе, где содержатся сведения о наличии 32-х битных библиотек, нужных для сборки соответствующих компонентов. Параметр требуется не во всех дистрибутивах. Например, в Ubuntu он, похоже, не нужен. Параметр «--with-wine64=» указывает на относительный путь к 64-х битной сборке.
Выдача конфигурации 32-х битной сборки может оказаться веселее предыдущей.
configure: libhal 32-bit development files not found, no legacy dynamic device support.
configure: libsane 32-bit development files not found, scanners won't be supported.
configure: libgphoto2 32-bit development files not found, digital cameras won't be supported.
configure: libgphoto2_port 32-bit development files not found, digital cameras won't be auto-detected.
configure: libcapi20 32-bit development files not found, ISDN won't be supported.

configure: Finished. Do 'make' to compile Wine.

Опять же, последняя строка говорит о том, что всё в порядке и можно приступать к компиляции. Самое страшное, что меня ждёт, это то, что 32-х битный фотошоп лохматой версии не сможет связаться с принтером, появившемся на свет десятилетием ранее. Мало того, камера, ровесница принтера, не будет распознана и как следствие — будет недоступна. Что же касается ISDN, то моё понимание: Если я поставлю какую-нибудь хитрую звонилку в 32-х разрядный префикс, то так же не смогу воспользоваться всеми её преимуществами перед современными нативными аналогами. Если выдача выглядит совсем весело, то процесс сборки может пойти в ином русле и слегка осложниться.

Собираем с помощью команды «make» и не забываем про параметр «-j».

После удачного завершения сборки приступаем к установке.

Шаг третий. Установка.
Установка собственной сборки в качестве системной, на мой взгляд, не имеет практического смысла. Наверняка у вас уже установлена сборка из репозитория. Ручная установка чего-либо в «пакетный» дистрибутив тоже не является канонической. Устанавливаем в любой удобный каталог. Для наглядности назовём его «wine» и пусть он будет в той же папке, где располагается всё наше хозяйство.
make DESTDIR=/home/user/build/wine install

Убедитесь, что путь в «DESTDIR=» совпадает с путём в «--prefix=», используемым при конфигурации.

Процесс закончится быстро без каких-либо сообщений о результате. По сути, это просто копирование. После чего возвращаемся в каталог с 64-х разрядной сборкой и вводим ту же команду. Папка «wine» и есть наша сборка. Вы можете переименовать её и положить в любое удобное место. Её можно использовать с Lutris, можно использовать отдельно. Не забывайте указывать полный путь до бинарника при работе со сборкой, вместо команды «wine».

На этом всё. Ваша собственная сборка Wine готова.
Like Dislike

___
Tatyana K.



Tags: Wine, Linux


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