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

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

== 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

Докладчик
Виталий Липатов.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

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