Любителям Linux-like систем наверняка приходилось устанавливать приложения по найденным руководствам в сети. В итоге описание оказывалось устаревшим/нерабочим, и для получения конечного результата приходилось собирать по крупицам и сводить воедино сведения из различных источников для "похожих" ОС. Иногда вам везло и все заводилось с первого раза. Либо пытались поиграть в свою любимую игру детства, где для запуска важно установить нужную версию Wine с правильными настройками, или пошаманить с монтированием образов в Dosbox... Предлагается очередной способ решения подобных проблем. Для игр существует, конечно, единственный правильный способ — установка Windows на отдельный диск. Но в мире насчитывается 1.3 миллиарда PC-геймеров. Из них — пользователи MacOS (3%) и Linux (1%) — 50 миллионов человек. Поэтому эта статья для них. Сегодня существует огромное разнообразие средств, упрощающих установку и запуск игр и, скорее всего, вы уже нашли все любимые игры детства на Steam и давно наслаждаетесь ими в своем Ubuntu. Но не все так просто. Например, любителей старых Point-n-Click адвенчур ждет разочарование: очень многих шедевров нет в наличии ни у одного дистрибьютора (distributor) видеоигр. Дистрибьюторов можно условно разделить на: Универсальные: Узко-специальные: Дружественнее всех зарекомендовал себя GOG. Именно они предоставляют игры в т.н. DRM-free формате. Но, в последнее время, их инициатива с Galaxy клиентом тоже попахивает неудобствами и привязками. Все основные дистрибьюторы поставляют собственные мульти-платформенные клиенты. Разнообразие клиентов породило дополнительную прослойку абстракции для конечных пользователей — т.н. менеджеров игр (game managers). Вот самые известные из них:  Менеджеры игр, в свою очередь, используют т.н. запускатели (runners) для запуска на конечном устройстве пользователя, иногда с дополнительными прослойками (например, Vulkan для Wine). Основные запускатели: Пациент скорее мертв. Судя по активности на github, четвертая версия давно мертва, а пятая никогда не родится. Хотя, кто его знает... Достоинства:  Недостатки:  На сегодняшний день — лидер и стандарт для Linux. Достоинства: Недостатки: Пошли по граблям Lutris-а, сделали решение исключительно под одну ОС (в данном случае FreeBSD), адовый bash-скриптинг внутри, при этом небольшая база с играми. Также непонятно с добавлением игр. Разработаем свою собственную систему, удовлетворяющую следующим критериям: В первую очередь, необходимо избавиться от недостатков существующих решений, для этого реализуем следующий функционал: Нечто способное объединить и заменить apt в Ubuntu и pkg в FreeBSD (и при этом еще обладать возможностями Lutris). Предлагается реализовать всю систему на базе Ansible и его мощной скриптовой поддержкой в виде плей-буков (playbooks). Почему Ansible? Хотя бы потому, что для достижения всех вышеназванных целей вам в любом случае придется разработать свой собственный Ansible-like движок, а это весьма затратно по времени. Полученное решение (yag) выложено в свободный доступ на github. Рассмотрим примеры добавления новых игр в базу. Старая, мультяшная Point-n-Click адвенчура. Распространялась на 1CD. Для добавление поддержки создаем папку в ports/games со следующей структурой: Структура остается на усмотрение автора, обязательными являются лишь info.yml (описание игры) и main.yml (точка входа). Код можете посмотреть в репозитории, опишу лишь суть.
Установка производиться с помощью команды: В install_image.yml передается путь к образу (/path/to/CD1.iso), где производится распаковка и копирование. Источником может быть как исполнимый файл с GOG-а (конкретно этой игры там нет), так и любой другой формат носителя. Запуск: Игра требует наличия save-ов в основной папке, поэтому запускающий скрипт (run.yml) копирует save-ы из постоянного хранилища и запускает wine с правильными параметрами. При выходе новые save-ы копируются обратно в хранилище. За сейвами во всех играх нужно внимательно следить и не забывать их сохранять (save your saves), создавая символические ссылки там, где это возможно. Также для запуска именно этой игры нужно включить virtual desktop: Обо всех поддерживаемых параметрах модуля wine читайте здесь. Тоже классика, в которой вам предлагается вжиться в роль милой букашки. Структура папок аналогична первому примеру: Здесь уже поддерживается несколько вариантов установки: Игра требует точного указания путей к ресурсам, поэтому создаем Jinja-совместимый шаблон конфига (BADMOJO.j2). Запуск: Как видите, внутри скриптов нам доступна вся мощь Ansible, к тому же мы можем спокойно дописывать свои модули. Другие примеры можно посмотреть здесь И все-таки Ansible — это в первую очередь про развертывание микросервисов на "тысячах нод". Использовать его для локальной установки игр, а тем более заменять им apt/pkg, с одной стороны, забивание гвоздей микроскопом, но с другой, если вся необходимая функциональность имеется — почему бы и нет? Более того, недостаток может легко превратиться в достоинство при реализации, например, онлайн сервиса видеоигр, где развертывание приложений на удаленные сервера станет необходимостью (кстати, если кто-то умеет звук\видео в VNC — пишите в личку, есть идея для неплохого стартапа). Следствие главного недостатка — задержки при выполнении скриптов. Не критично при инсталляции, но может раздражать при запуске. Также для добавления новых приложений требуется опыт в написании Ansible-playbooks. Но этого не избежать в любом подобном менеджере. А здесь вы хотя бы сможете применить полученные знания в другой области (к примеру, устроиться на работу в сферу devops). Описанный подход открывает много возможностей. Выше упоминалось о полноценной замене apt/pkg во всех дистрибутивах всех ОС. Согласитесь, было бы здорово, если бы, например, для установки Skype вам не пришлось качать deb-файл в Ubuntu, шаманить с pacman в Archlinux или мучиться с эмулятором linux в FreeBSD, а просто выполнить, например: и получить одинаковый результат в любой ОС. При этом все скрипты установки для разных ОС версионированы и поддерживаются в актуальном состоянии сообществом пользователей! А мощь Ansible-playbooks позволяет гибко реализовывать любые механизмы добавления в любой ОС. Теперь самое важное: если вам понравилась идея, важно чтобы именно вы добавили свою любимую игру\программу в репозиторий, оформив простой PR на github. Спасибо! Software Architect