Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023)

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

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

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

Видео

Презентация

Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf

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сылки


Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023)!.jpg

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