Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023)
Материал из 0x1.tv
- Докладчик
- Виталий Липатов
Поддержка в epm play установки пакетов из различных сторонних источников и форматов потребовала реализации трёхступенчатого преобразования исходного пакета. Стремление сделать правила перепаковки едиными для различных систем приводит к использованию дистроуниверсальных зависимостей. Переносимые пакеты собираются отдельным rpmbuild, не привязанным к системе.
Содержание
Видео
Презентация
Thesis
Концепция epm play добавляет недостающее звено (или улучшает его) между производителями дистрибутивов на основе GNU/Linux и производителями программного обеспечения (ISV), решая задачу совместимости для бинарно поставляемого ПО.
Рассмотрим применение epm play на платформе ALT.
Как правило, поставщик ПО предоставляет своё ПО в одном из следующих вариантов:
- tar-архив с исполняемыми файлами;
- AppImage, snap;
- deb-пакет для Debian/Ubuntu;
- rpm-пакет для родственных Fedora систем;
- rpm-пакет для конкретного дистрибутива (например, для основанного на бранче ALT p10).
Результатом работы epm play должен быть rpm-пакет, устанавливаемый в систему (и удаляемый) штатными средствами.
Для адаптации стороннего ПО в epm реализовано несколько механизмов, которые могут быть использованы по отдельности:
- epm play [--download-only] — загрузить и установить приложение (указанной версии);
- epm pack [--install] — преобразовать архив от поставщика в файловую структуру, пригодную для сборки пакета (или
же просто извлечь пакет из архива);
- epm repack [--install] — перепаковать пакет для целевой платформы.
Помимо бинарной совместимости исполняемого кода и формата пакетов приходится контролировать ещё:
- зависимости пакетов (как правило, формируются заново);
- скрипты, выполняемые после установки / перед удалением пакета (выключаются);
- репозитории, откуда производится установка (не добавляются в sources.list).
В общем случае просто выполняется перепаковка в rpm. Поскольку штатный rpmbuild имеет свою специфику (тянет среду сборки
C-программ (ALT bug 34308), имеет сложный автопоиск зависимостей, уникален для платформы ALT), было принято решение
собрать апстримный rpmbuild в пакет eepm-rpm-build. В перспективе это позволит обеспечить идентичность сборки
независимых от дистрибутива пакетов на различных системах.
В последней версии epm автоматический поиск зависимостей по умолчанию выключен, и применяется простой скрипт, вычитающий из списка требуемых soname список предоставляемых пакетов и результат добавляющий в качестве Requires.
Получилось перейти к использованию дистрибутиво-независи\-мых зависимостей для библиотек и команд (вида libX11.so.6()(64bit) и /usr/bin/less) при ручном указании зависимостей пакета, что позволяет использовать одни и те же правила перепаковки для всех rpm-based систем.
Также потребовалось добавить проверку доступной в дистрибутиве версии glibc и libstdc++, поскольку некоторые программы перешли на версию glibc выше, чем в p10. Для них устанавливается последняя совместимая версия.
Есть перспективы облегчить установку поддержки принтеров и сканеров. Как правило, вручную требуется достаточно много манипуляций, описываемых на вики. Для проверки концепции добавлены
brscanads2200ads2700w cnrdrvcups-ufr2-uk epsonscan2 hplip-plugin kyodialog sane-panakvs pantum
и получены положительные отзывы.
Для каждой версии epm для каждой платформы выполняется автоматическая проверка устанавливаемости приложений через epm play, после чего проверенная версия записывается в список рекомендуемых к обновлению.
Это позволяет пользователю, выполняя epm play --update all, обновиться до последних проверенных версий. Что не мешает, выполнив epm play приложение, установить самую последнюю версию.
На данный момент epm play только упрощает скачивание ПО с официальных сайтов. Планируется добавить проверку контрольных сумм, чтобы ввести независимый контроль (предварительное тестирование) устанавливаемых бинарников.
За прошедший год в epm play добавлена поддержка межпланетной файловой системы IPFS (epm play --ipfs ), которая обеспечивает адресацию файла по хэшу его содержимого. Уже сейчас это позволяет обходить запреты на доступ к иностранным сайтам, а при дальнейшем развитии позволит реализовать защиту от подмены содержимого.
EPM и epm play это свободные проекты, необходимые сценарии можно как присылать в виде pull request на [1] или иным способом, так и паковать в отдельные пакеты.
Cсылки
- OSDAY-2021 — Дистрибутив ROSA и стороннее ПО — Михаил Новосёлов [2]
- Разработка прикладного ПО, совместимого с продуктами экосистемы РОСА (OSDAY-2023) + [3]