Русский
Русский
English
Статистика
Реклама

Универсальный менеджер приложений (игр)

Любителям 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;
  • Blizzards 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 репозиторий;
  • Отказ от серверной части. База с приложениями должна быть частью самого менеджера и обновляться вместе с ним;
  • Предоставление удобного API\CLI для создания сторонних 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.


Спасибо!

Источник: habr.com
К списку статей
Опубликовано: 20.12.2020 22:09:52
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

*nix

Игры и игровые приставки

Games

Ansible

Packet manager

Linux

Freebsd

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru