Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022)

Материал из 0x1.tv

Докладчик
Виталий Липатов.jpg
Виталий Липатов

Размещаемые в репозитории пакеты должны иметь свободную лицензию, разрешающие их публикацию. Установка стороннего,проприетарного ПО зачастую осложнена тем, что оно не предназначено для установки в системы на базе ALT. Команда epm play позволяет устанавливать такое ПО, скачивая его с сайта производителя и производя конвертацию в rpm-пакет, адаптированный для ALT, с помощью команды epm repack. Также в докладе рассматриваются другие подходы к установке стороннего ПО, поддерживаемые в универсальном пакетном менеджере EPM.

Видео

on youtube

Презентация

Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022).pdf Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022).pdf Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022).pdf Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022).pdf Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022).pdf Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022).pdf Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022).pdf

Thesis

О несовместимости

Как правило, подготовленные сторонними разработчиками пакеты собраны и проверены только для нескольких систем, в число которых, особенно если разработчик зарубежный, ALT не входит. С одной стороны, пользователя надо оградить от возможности сломать систему и нарушить безопасность, установив откуда-то скачанный пакет. С другой стороны, нужно предоставить доступ к популярным или необходимым приложениям.

Перепаковка сторонних пакетов

Для адаптации сторонних пакетов к нормам пакетов ALT в epm добавлена команда repack, которая перепаковывает пакет, при этом выполняя заранее заданный рецепт, совпадающий с названием пакета, выполняющий все подготовительные действия так, что установочные скрипты становятся не нужны, а все изменения в файловой системе в итоге делаются устанавливаемым пакетом.

Использовать перепаковку можно либо в виде epm repack (перепакует пакет и создаст рядом новый), либо в виде epm install-repack (установит пакет с перепаковкой на лету).

Важным свойством перепаковки является то, что перепаковывать можно пакеты любых пакетных менеджеров, и даже архивы, а в последних версиях EPM появилась поддержка установки/перепаковки AppImage (формат для распространения переносимых приложений для Linux). Основана перепаковка на использовании alien и rpm-build.

При разработке решения по перепаковке выяснилось, что даже тарболы с программами можно легко перепаковывать в rpm пакет. Например, Telegram поставляется в виде архива tsetup.tar.gz, который, по задумке авторов, может быть распакован и запущен из любого места. Таким образом, он отлично чувствует себя в каталоге /opt.

Задача перепаковки пакета на самом деле является задачей интеграции в систему, поэтому для графических приложений важно исправить упаковку desktop-файла, значков к приложению, а серверные программы должны приобрести корректные unit-файлы.

epm play

Чтобы приступить к перепаковке, пакет с программой ещё нужно скачать, что не всегда является простым занятием: нужно найти, что скачать, выбрать пакет той системы, что лучше подойдёт для ALT...

Чтобы избавить пользователя от этого выбора, придумана команда epm play.

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

В итоге можно ввести команду epm play yandex-browser и Яндекс браузер будет правильным образом установлен в вашу систему.

Реализовано это через набор рецептов для установки в каталоге /etc/eepm/play.d: там указывается название пакета, формируется URL для скачивания, в зависимости от архитектуры процессора, версии системы и т.п, производится установка пакета.

Простейший рецепт выглядит так:

#!/bin/sh
PKGNAME=viber
DESCRIPTION="Viber for Linux from the official site"
. $(dirname $0)/common.sh
[ "$($DISTRVENDOR -a)" != "x86_64" ] && echo "Only x86_64 is supported" && exit 1
epm install "https://download.cdn.viber.com/cdn/desktop/Linux/viber.deb"

Скачивание файлов по маске

В основном установка в скриптах для epm play основана на способности epm устанавливать пакеты по URL, и даже по URL с маской (когда точная версия пакета неизвестна, по wildcard будет выбрана самая новая версия).

Эта способность поддерживается встроенной в epm утилитой eget, которая изначально представляла из себя обёртку вокруг wget, а сейчас работает через curl или wget. Цель в том, чтобы предоставить более свободный доступ к скачиванию по маске.

Например, можно не только написать

eget --latest https://download.example.com/packages/package-*.tar.gz

или

eget --list https://download.example.com/packages/package-*.tar.gz

а скачать пакет со страницы, которая не рассчитана на прямую отдачу:

eget --latest https://example.com/somepage package-*.tar.gz

Обратите внимание на пробел между URL и маской файла — файл будет найден на указанной странице и скачан.

Есть и отдельная поддержка github для скачивания релизов.

Благодаря отделённости этого функционала в eget, скрипт для epm play выглядят достаточно лаконично.

Перспективы и варианты использования

Проект EPM открыт для расширения, необходимые сценарии можно как присылать в виде pull request на github или иным способом, так и паковать в отдельные пакеты.

Также epm и механизм сценариев в нём могут быть применены для создания установочных скриптов. Благодаря тому, что epm хорошо умеет определять систему, дистрибутив и всякие подробности (см. ниже вывод команды epm print info), можно предусматривать различные нюансы, не изобретая велосипед.

$ epm print info
   Pretty distro name (--pretty): ALT Sisyphus Sisyphus (20201124)
    Distro name and version (-e): ALTLinux/Sisyphus
    Package manager/type (-g/-p): apt-rpm / rpm
    Running service manager (-y): systemd
             Virtualization (-i): (host system)
           CPU Cores/MHz (-c/-z): 4 / 3182 MHz
           CPU Architecture (-a): x86_64
    CPU norm register size  (-b): 64
    System memory size (MB) (-m): 5511
               Base OS name (-o): linux
Base distro (vendor) name (-s|-n): alt

Сейчас скрипты установки, а тем более перепаковки недостаточно универсальны, но есть интерес и намерение увидеть epm play достаточно одинаково работающим и на других популярных системах, поскольку важной целью создания EPM было сглаживание различий между различными дистрибутивами перед лицом пользователя и системного администратора.

Управление сторонними пакетами с помощью EPM (Виталий Липатов, OSSDEVCONF-2022)!.jpg

Примечания и ссылки