Универсальный менеджер приложений (игр)
Любителям Linux-like систем наверняка приходилось устанавливать приложения по найденным руководствам в сети. В итоге описание оказывалось устаревшим/нерабочим, и для получения конечного результата приходилось собирать по крупицам и сводить воедино сведения из различных источников для «похожих» ОС. Иногда вам везло и все заводилось с первого раза.
Либо пытались поиграть в свою любимую игру детства, где для запуска важно установить нужную версию Wine с правильными настройками, или пошаманить с монтированием образов в Dosbox…
Предлагается очередной способ решения подобных проблем.
Для игр существует, конечно, единственный правильный способ — установка Windows на отдельный диск. Но в мире насчитывается 1.3 миллиарда PC-геймеров. Из них — пользователи MacOS (3%) и Linux (1%) — 50 миллионов человек. Поэтому эта статья для них.
Сегодня существует огромное разнообразие средств, упрощающих установку и запуск игр и, скорее всего, вы уже нашли все любимые игры детства на Steam и давно наслаждаетесь ими в своем Ubuntu. Но не все так просто. Например, любителей старых Point-n-Click адвенчур ждет разочарование: очень многих шедевров нет в наличии ни у одного дистрибьютора (distributor) видеоигр.
Дистрибьюторов можно условно разделить на:
Универсальные:
- Steam — сервис цифровой дистрибуции, изначально для игр и апдейтов от Valve, но позже расширен и для других разработчиков;
- GOG — платформа дистрибуции видеоигр и фильмов, подразделение CD Project (которые Ведьмак и Cyberpunk), расположенное в Польше;
- Humble Store — онлайн магазин игр.
Узко-специальные:
- Origin — игры Electronic Arts;
- Uplay — игры Ubisoft;
- Epic Games Store — игры Epic Games;
- Blizzard’s Battle.net — игры Blizzard.
Дружественнее всех зарекомендовал себя GOG. Именно они предоставляют игры в т.н. DRM-формате. Но, в последнее время, их инициатива с Galaxy клиентом тоже попахивает неудобствами и привязками.
Все основные дистрибьюторы поставляют собственные мульти-платформенные клиенты.
Разнообразие клиентов породило дополнительную прослойку абстракции для конечных пользователей — т.н. менеджеров игр (game managers). Вот самые известные из них:
- PlayOnLinux/BSD/Mac
- Lutris
- Homura
Менеджеры игр, в свою очередь, используют т.н. запускатели (runners) для запуска на конечном устройстве пользователя, иногда с дополнительными прослойками (например, Vulkan для Wine).
Основные запускатели:
- Wine — эмулятор Windows
- Dosbox — эмулятор DOS
- ScummVM — виртуальная машина для многих старых квестов
- Эмуляторы консолей
PlayOnLinux/BSD/Mac
Пациент скорее мертв. Судя по активности на github, четвертая версия давно мертва, а пятая никогда не родится. Хотя, кто его знает…
Достоинства:
- Приличная база поддерживаемого софта и игр.
Недостатки:
- Оборачивает исключительно Wine;
- Кодовая база не обновляется;
- Вся логика построена на полусотне функций адового bash-скриптинга;
- Новые скрипты принимаются через веб-форму (ссылку на сайте найти не удалось).
Lutris
На сегодняшний день — лидер и стандарт для Linux.
Достоинства:
- Ansible-like скриптинг;
- Добавление игр из gog и steam аккаунтов одним кликом.
Недостатки:
- Вся база с играми вынесена на отдельный полузакрытый сервер;
- Неудобная форма для добавления новых скриптов (нет версионности и т.п., решение по добавлению выносит непонятный комитет);
- Поддержка только Linux;
- Создает отдельный Wine-префикс для каждой новой игры (а они довольно увесисты);
- Нет клиентского API, отсюда UI довольно уныл;
- Нет возможности установки из образов (актуально для старых игр).
Homura
Пошли по граблям Lutris-а, сделали решение исключительно под одну ОС (в данном случае FreeBSD), адовый bash-скриптинг внутри, при этом небольшая база с играми. Также непонятно с добавлением игр.
Разработаем свою собственную систему, удовлетворяющую следующим критериям:
- Расширяемость;
- Гибкость;
- Функциональность;
- Кроссплатформенность.
В первую очередь, необходимо избавиться от недостатков существующих решений, для этого реализуем следующий функционал:
- Удобство добавления новых игрприложений. Любой пользователь может без труда добавить поддержку нового софта через github репозиторий;
- Отказ от серверной части. База с приложениями должна быть частью самого менеджера и обновляться вместе с ним;
- Предоставление удобного APICLI для создания сторонних UI;
- Отделение изменяемых данных (например, save-ов для игр) от остальных ресурсов приложения;
- Предоставление базовой возможности инсталляции с медиа-носителя. Важно для редких старых игр, которых не найти через онлайн дистрибьюторов, зато относительно легко найти их медиа-образы;
- Никакой черной магии в скриптах, каждый шаг должен быть понятен без изучения исходников.
Нечто способное объединить и заменить apt в Ubuntu и pkg в FreeBSD (и при этом еще обладать возможностями Lutris).
Предлагается реализовать всю систему на базе Ansible и его мощной скриптовой поддержкой в виде плей-буков (playbooks). Почему Ansible? Хотя бы потому, что для достижения всех вышеназванных целей вам в любом случае придется разработать свой собственный Ansible-like движок, а это весьма затратно по времени.
Полученное решение (yag) выложено в свободный доступ на github.
Рассмотрим примеры добавления новых игр в базу.
Ace Ventura Pet Detective
Старая, мультяшная Point-n-Click адвенчура. Распространялась на 1CD.
Для добавление поддержки создаем папку в ports/games со следующей структурой:
aceventura:
tasks:
install_image.yml
main.yml
run.yml
info.yml
Структура остается на усмотрение автора, обязательными являются лишь info.yml (описание игры) и main.yml (точка входа). Код можете посмотреть в репозитории, опишу лишь суть.
Установка производиться с помощью команды:
yag install aceventura --source=/path/to/CD1.iso
В install_image.yml передается путь к образу (/path/to/CD1.iso), где производится распаковка и копирование. Источником может быть как исполнимый файл с GOG-а (конкретно этой игры там нет), так и любой другой формат носителя.
Запуск:
yag run aceventura
Игра требует наличия save-ов в основной папке, поэтому запускающий скрипт (run.yml) копирует save-ы из постоянного хранилища и запускает wine с правильными параметрами. При выходе новые save-ы копируются обратно в хранилище. За сейвами во всех играх нужно внимательно следить и не забывать их сохранять (save your saves), создавая символические ссылки там, где это возможно. Также для запуска именно этой игры нужно включить virtual desktop:
- wine:
exec: "{{ app_folder }}/Ace.exe"
virtual_desktop: "800x600"
Обо всех поддерживаемых параметрах модуля wine читайте здесь.
Bad Mojo (redux)
Тоже классика, в которой вам предлагается вжиться в роль милой букашки.
Структура папок аналогична первому примеру:
badmojo_redux:
tasks:
main.yml
run.yml
install_image.yml
install_innosetup.yml
templates:
BADMOJO.j2
vars:
main.yml
info.yml
Здесь уже поддерживается несколько вариантов установки:
yag install badmojo_redux --source=/path/to/CD.iso
- запустит install_image.yml (распаковка CD образа)
yag install badmojo_redux --source=/path/to/badmojo_gog_setup.exe
- запустит install_innosetup.yml (распаковка GOG-овского innosetup exe-шника).
Игра требует точного указания путей к ресурсам, поэтому создаем Jinja-совместимый шаблон конфига (BADMOJO.j2).
Запуск:
yag run badmojo_redux
Как видите, внутри скриптов нам доступна вся мощь Ansible, к тому же мы можем спокойно дописывать свои модули.
Другие примеры можно посмотреть здесь
Недостатки
И все-таки Ansible — это в первую очередь про развертывание микросервисов на «тысячах нод». Использовать его для локальной установки игр, а тем более заменять им apt/pkg, с одной стороны, забивание гвоздей микроскопом, но с другой, если вся необходимая функциональность имеется — почему бы и нет? Более того, недостаток может легко превратиться в достоинство при реализации, например, онлайн сервиса видеоигр, где развертывание приложений на удаленные сервера станет необходимостью (кстати, если кто-то умеет звуквидео в VNC — пишите в личку, есть идея для неплохого стартапа).
Следствие главного недостатка — задержки при выполнении скриптов. Не критично при инсталляции, но может раздражать при запуске.
Также для добавления новых приложений требуется опыт в написании Ansible-playbooks. Но этого не избежать в любом подобном менеджере. А здесь вы хотя бы сможете применить полученные знания в другой области (к примеру, устроиться на работу в сферу devops).
Возможности
Описанный подход открывает много возможностей. Выше упоминалось о полноценной замене apt/pkg во всех дистрибутивах всех ОС. Согласитесь, было бы здорово, если бы, например, для установки Skype вам не пришлось качать deb-файл в Ubuntu, шаманить с pacman в Archlinux или мучиться с эмулятором linux в FreeBSD, а просто выполнить, например:
yag install skype
и получить одинаковый результат в любой ОС.
При этом все скрипты установки для разных ОС версионированы и поддерживаются в актуальном состоянии сообществом пользователей! А мощь Ansible-playbooks позволяет гибко реализовывать любые механизмы добавления в любой ОС.
Теперь самое важное: если вам понравилась идея, важно чтобы именно вы добавили свою любимую игрупрограмму в репозиторий, оформив простой PR на github.
Спасибо!
Аналитики оценили реформы Microsoft на фоне возможного усугубления кризиса Xbox
Дюна: Обуславливание добралась до консолей — даже Xbox Series S держит 60 кадров в секунду
Bungie признала провал Marathon словами «Мы старались»
Сотрудник id Software раскритиковал руководство Xbox
Owlcat представила первое дополнение Processional of the Damned для Warhammer 40,000 Rogue Trader
Бывший разработчик Bethesda усомнился в выходе Starfield 2 из-за недостаточного успеха первой части
Студия GamesVoice анонсировала русскую озвучку для Control Resonant и открыла сбор средств
CD Projekt RED назвала точное время выхода ремастера The Witcher 3 по московскому времени