Реализация перепаковки сторонних пакетов в epm play (Виталий Липатов, OSSDEVCONF-2023) — различия между версиями
Материал из 0x1.tv
StasFomin (обсуждение | вклад) |
StasFomin (обсуждение | вклад) |
||
== 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:43, 11 января 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]