Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) |
||
(не показаны 2 промежуточные версии этого же участника) | |||
…9|800|450}} {{youtubelink|}} |yw5AsDnepdk}} {{SlidesSection}} [[File:Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023).pdf|left|page=-|300px]] {{----}} == Thesis == Концепция <tt>epm play</tt> добавляет недостающее звено (или улучшает его) между производителями дистрибутивов на основе GNU/Linux и производителями программного обеспечения (ISV), решая задачу совместимости для бинарно поставляемого ПО. Рассмотрим применение <tt>epm play</tt> на платформе ALT. Как правило, поставщик ПО предоставляет своё ПО в одном из следующих вариантов: * tar-архив с исполняемыми файлами; * AppImage, snap; * deb-пакет для Debian/Ubuntu; * rpm-пакет для родственных Fedora систем; * rpm-пакет для конкретного дистрибутива (например, для основанного на бранче ALT p10). Результатом работы <tt>epm play</tt> должен быть rpm-пакет, устанавливаемый в систему (и удаляемый) штатными средствами. Для адаптации стороннего ПО в epm реализовано несколько механизмов, которые могут быть использованы по отдельности: * <tt>epm play [--download-only] </tt> — загрузить и установить приложение (указанной версии); * <tt>epm pack [--install] </tt> — преобразовать архив от поставщика в файловую структуру, пригодную для сборки пакета (или же просто извлечь пакет из архива); * <tt>epm repack [--install] </tt> — перепаковать пакет для целевой платформы. Помимо бинарной совместимости исполняемого кода и формата пакетов приходится контролировать ещё: * зависимости пакетов (как правило, формируются заново); * скрипты, выполняемые после установки / перед удалением пакета (выключаются); * репозитории, откуда производится установка (не добавляются в sources.list). В общем случае просто выполняется перепаковка в <tt>rpm</tt>. Поскольку штатный <tt>rpmbuild</tt> имеет свою специфику (тянет среду сборки C-программ (ALT bug 34308), имеет сложный автопоиск зависимостей, уникален для платформы ALT), было принято решение собрать апстримный rpmbuild в пакет <tt>eepm-rpm-build</tt>. В перспективе это позволит обеспечить идентичность сборки независимых от дистрибутива пакетов на различных системах. В последней версии <tt>epm</tt> автоматический поиск зависимостей по умолчанию выключен, и применяется простой скрипт, вычитающий из списка требуемых soname список предоставляемых пакетов и результат добавляющий в качестве Requires. Получилось перейти к использованию дистрибутиво-независи\-мых зависимостей для библиотек и команд (вида <tt>libX11.so.6()(64bit)</tt> и <tt>/usr/bin/less</tt>) при ручном указании зависимостей пакета, что позволяет использовать одни и те же правила перепаковки для всех rpm-based систем. Также потребовалось добавить проверку доступной в дистрибутиве версии <tt>glibc</tt> и <tt>libstdc++</tt>, поскольку некоторые программы перешли на версию <tt>glibc</tt> выше, чем в p10. Для них устанавливается последняя совместимая версия. Есть перспективы облегчить установку поддержки принтеров и сканеров. Как правило, вручную требуется достаточно много манипуляций, описываемых на вики. Для проверки концепции добавлены <pre> brscanads2200ads2700w cnrdrvcups-ufr2-uk epsonscan2 hplip-plugin kyodialog sane-panakvs pantum </pre> и получены положительные отзывы. Для каждой версии epm для каждой платформы выполняется автоматическая проверка устанавливаемости приложений через epm play, после чего проверенная версия записывается в список рекомендуемых к обновлению. Это позволяет пользователю, выполняя <tt>epm play --update all</tt>, обновиться до последних проверенных версий. Что не мешает, выполнив <tt>epm play </tt> приложение, установить самую последнюю версию. На данный момент <tt>epm play</tt> только упрощает скачивание ПО с официальных сайтов. Планируется добавить проверку контрольных сумм, чтобы ввести независимый контроль (предварительное тестирование) устанавливаемых бинарников. За прошедший год в <tt>epm play</tt> добавлена поддержка межпланетной файловой системы IPFS (<tt>epm play --ipfs </tt>), которая обеспечивает адресацию файла по хэшу его содержимого. Уже сейчас это позволяет обходить запреты на доступ к иностранным сайтам, а при дальнейшем развитии позволит реализовать защиту от подмены содержимого. EPM и <tt>epm play</tt> это свободные проекты, необходимые сценарии можно как присылать в виде pull request на [https://github.com/Etersoft/eepm] или иным способом, так и паковать в отдельные пакеты. === Cсылки === * OSDAY-2021 — Дистрибутив ROSA и стороннее ПО — Михаил Новосёлов [https://www.youtube.com/watch?v=6tCL2MPnS-o] * [[Разработка прикладного ПО, совместимого с продуктами экосистемы РОСА (OSDAY-2023)]] + [https://nixtux.ru/1268] {{----}} [[File:{{#setmainimage:Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023)!.jpg}}|center|640px]] {{LinksSection}} <!-- <blockquote>[©]</blockquote> --> <references/> [[Категория:OSSDEVCONF-2023]] [[Категория:Open-source projects]] [[Категория:Draft]] |
Текущая версия на 11:33, 16 июня 2024
- Докладчик
- Виталий Липатов
Поддержка в 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]