Выступление на OSDAY-2023. Как сделать дистрибутивоуниверсальный пакет

Разработка прикладного программного обеспечения (ПО) для операционных систем и формирование «экосистемы» имеет большое значение для удовлетворения растущих потребности на российском рынке. Это позволит не только уменьшить зависимость от иностранных технологий, но и обеспечить большую суверенность в области информационных технологий, предоставляя государственным организациям и различным предприятиям надежные и безопасные решения.

Использование прикладного программного обеспечения невозможно без операционной системы, на которой оно будет функционировать. С другой стороны, ОС сама по себе не имеет большой полезности без установленного в ней прикладного ПО. Поэтому для обеспечения эффективной работы необходимо развивать готовые «экосистемы», где операционная система и прикладное ПО взаимодействуют синергетически и обеспечивают полную функциональность и производительность.

Важной составляющей развития «экосистемы» является технически правильная упаковка стороннего программного обеспечения. Большинство представленных на российском рынке операционных систем являются дистрибутивами GNU/Linux и используют пакетные менеджеры для управления программным обеспечением, поэтому стороннее ПО обычно упаковывают в пакеты, обычно в формате RPM и DEB. Дистрибутивы ROSA используют формат RPM. По сравнению с операционными системами без пакетного менеджера, например, Windows, в построенных с использованием пакетного менеджера операционных системах можно выделить следующие преимущества:

  • почти все файлы и каталоги принадлежат какому-либо пакету;
  • при удалении пакета точно удаляются все эти файлы и каталоги, независимо от написанного разработчиком удяляемого ПО кода;
  • аналогично, при обновлении пакета не остается более не нужных фрагментов старой версии;
  • установка пакета полностью автоматизирована, не требует вмешательства администратора, а значит можно централизованно устанавливать, обновлять и удалять пакеты;
  • каждый файл принадлежит одному конкретному пакету, пакетный менеджер предотвращает конфликты между пакетами и изменение компонентов одного пакета при установке другого;
  • пакетный менеджер знает контрольную сумму и режим доступа каждого файла и способен контролировать целостность файлов на диске (rpm -Va);
  • в зависимостях пакета указываются переиспользуемые библиотеки и иные компоненты ОС (другие пакеты), что позволяет при необходимости исправлять ошибки и уязвимости лишь в одном пакете — пакете с библиотекой — без пересборки всех использующих ее пакетов.

Практика показывает, что разработчики стороннего ПО часто имеют недостаточный опыт сборки прикладного ПО для операционных систем на базе Linux, включая отечественные дистрибутивы, а в собранных ими пакетами встречаются проблемы, мешающие реализовывать описанные выше преимущества пакетного подхода, например:

  • копирование файлов скриптами в обход пакетной системы там, где можно было бы просто сразу
    упаковать их внутри пакета в нужном каталоге;

  • вмешательство в принадлежащие другим пакетам файлы;
  • использование нестандартный каталогов (нарушение FHS);
  • использование недистрибутивоуниверсальных зависимостей в RPM-пакетах там, где можно было бы сделать дистрибутивоуниверсально, то есть делать один пакет для нескольких дистрибутивов;
  • неправильная метаинформация пакета, например, лишние Provides, запутывающая пакетный менеджер при работе с другими пакетами.

Помимо проблем с упаковкой в пакет, часто встречаются проблемы со сборкой упаковываемого
ПО, например:

  • использование LD_LIBRARY_PATH вместо RUNPATH (RPATH);
  • нарушение цепочки зависимостей в своих и системных библиотеках;
  • нарушение таких стандартов и спецификаций, как FHS, XDG FreeDesktop и других.

Раньше, когда стороннего ПО для отечественных ОС было меньше, проблема разрешения последствий таких ошибок стояла менее остро. Сейчас же происходит взрывной рост его количества, поэтому представляется очень важным передать опыт упаковки и сопровождения пакетов и видение устройства ОС от тех, кто этим занимается профессионально в репозиториях дистрибутивов, тем, для кого это не основной вид деятельности — разработчикам стороннего ПО для GNU/Linux. На российском рынке существуют несколько операционных систем на базе Linux, используемых простыми пользователями, бизнесом и госструктурами для выполнения повседневных задач в разных сферах. И для разработчиков стороннего ПО остро стоит вопрос совместимости с различными ОС и процессом сопровождения при появлении новых версий. В экосистеме РОСА сейчас есть несколько разных продуктов (такие как операционные системы общего назначения, мобильная операционная система, система виртуализации, система оркестрации и управления ресурсами и другие), объединенных в одно информационное поле.

В этом докладе рассмотрены общие принципы, которых стоит придерживаться для написания сторонних приложений, чтобы они было совместимы и с разными продуктами компании, и с дистрибутивами других разработчиков. Освещены проблемы с обоснованием их причин и приведены возможные варианты их решения.

Презентация в PDF

Запись выступления:

Слайды презентации картинками:

















Полная запись первого дня OSDAY-2023
Полная запись второго дня OSDAY-2023

Отправить ответ

avatar
  Subscribe  
Сообщать по почте