Международная конференция разработчиков
и пользователей свободного программного обеспечения

Технологии и инструменты автоматизации разработки в ROSA

Владимир Рубанов, Москва, Russia

LVEE 2013

The talk presents a set of technologies and tools used at ROSA to develop its products, first of all Linux distributions. These tools are open source and can be used by other distribution developers to automate various tasks, such as checking repository consistency, ABI compatibility analysis, tracking of upstream components evolution, package difference analysis and, finally, the ABF integrated development and build system.

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

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

  1. Проверка замкнутости и непротиворечивости репозиториев.
  2. Тестирование обратной совместимости ABI/API дистрибутива.
  3. Отслеживание эволюции upstream компонентов и поддержка принятия решений по обновлению.
  4. Анализ отличий различных версий пакетов.
  5. Интегрированная система разработки и сборки ABF.

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

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

  1. Проверка замкнутости и непротиворечивости репозиториев.
  2. Тестирование обратной совместимости ABI/API дистрибутива.
  3. Отслеживание эволюции upstream компонентов и поддержка принятия решений по обновлению.
  4. Анализ отличий различных версий пакетов.
  5. Интегрированная система разработки и сборки ABF.

URPM Repoclosure (реализация на Perl, распространяется под GPLv2) контролирует замкнутость репозитория по зависимостям и может использоваться как для статического, так и для динамического анализа собранного репозитория. Замкнутость репозитория является необходимым условием корректной установки пакетов. В статическом режиме анализа производится быстрая проверка атрибутов пакетов — предоставляемых (provides) и требуемых (requires и suggests) зависимостей, с целью выявления сломанных зависимостей, т. е. требуемых пакетами, но не предоставляемых ни одним из них. В динамическом режиме происходит реальная установка всех пакетов и анализ ошибок менеджера пакетов. Регулярные запуски инструмента на стадии активной разработки репозитория позволяют избавиться от большинства проблем с установкой пакетов. Инструмент входит в состав пакета URPM Tools, в котором можно найти много других полезных инструментов для анализа репозитория, такие как URPM Repograph (Python, GPLv2) для визуализации графов зависимостей и поиска кольцевых зависимостей, URPM Repodiff (Python, GPLv2) для сравнения репозиториев и др.

ABI Compliance Checker (Perl, LGPLv2) ориентирован на разработчиков библиотек и мэйнтейнеров пакетов и позволяет проводить анализ обратной совместимости версий системных библиотек. Современные дистрибутивы Linux содержат тысячи библиотек, имеющие огромное число зависимостей между собой. Обновление любой из них может нарушить работу многих других и в итоге привести к некорректной работе пользовательских приложений. Инструмент позволяет выявить опасные изменения в API и ABI библиотеки и помочь мэйнтейнеру адаптировать компоненты дистрибутива к новой версии библиотеки или принять решение по изменению ее soname. Разработчики же библиотек могут использовать инструмент для выпуска обратно совместимых новых версий, чтобы у их пользователей не было проблем с обновлением. Инструмент анализирует либо заголовочные файлы библиотеки путем построения их синтаксического дерева разбора с помощью компилятора GCC, либо ее debug-информацию с помощью дополнительного инструмента ABI Dumper (Perl, LGPLv2) и состав виртуальных таблиц с помощью инструмента Vtable Dumper (C, GPLv2).

Для мониторинга и анализа библиотек в апстриме применяется Upstream Tracker, что позволяет своевременно отслеживать новые версии и изменения в API/ABI. Инструмент представляет собой online ресурс, предоставляющий в публичный доступ отчеты инструмента ABI Compliance Checker об изменениях в API и ABI новых версий более чем 500 самых популярных библиотек в Linux. В первую очередь инструмент используется мэйнтейнерами для принятия решения об обновлении библиотеки или о выборе более подходящей версии библиотеки для конкретной версии дистрибутива. Также инструмент используется разработчиками библиотек и помогает им выпускать обратно совместимые версии, которые затем легче обновлять мэйнтейнерам дистрибутивов. Новые библиотеки добавляются незамедлительно и безвозмездно по запросу пользователей, заинтересованных в анализе этих библиотек.

Для поддержания актуальности дистрибутива важно иметь свежие, но при этом стабильные версии программ. Поэтому важно отслеживать не только апстрим, но и использование различных версий определенного пакета в других дистрибутивах, что косвенно служит показателем стабильности той или иной версии. Для этого необходимо уметь систематически сравнивать версии пакетов в своем дистрибутиве с версиями у коллег и определять устаревшие. Эта задача выполняется инструментом Updates Tracker.

Визуализация и классификация изменений в пакетах осуществляется с помощью инструмента PkgDiff (Perl, GPLv2). Основной задачей мэйнтейнеров в повседневной работе является обновление пакетов. Чтобы убедиться в безопасности обновления пакета для системы, мэйнтейнеру необходимо просмотреть изменения в определенных файлах пакета. Инструмент разделяет файлы по группам, так чтобы мэйнтейнер мог выбрать нужную ему группу и просмотреть изменения в файлах этой группы с помощью удобного визуального отчета. Инструмент может сравнивать как бинарные пакеты RPM или Deb, так и архивы с исходными кодами. На основе этого инструмента построен также инструмент DistDiff (Perl, GPLv2) для комплексного сравнения различных версий дистрибутива посредством анализа всех его старых и новых пакетов.

Система разработки и сборки ROSA ABF представляет собой систему для хостинга и разработки дистрибутивов на основе Linux и приложений для них, предоставляет безопасную среду, позволяющую собирать пакеты под множество дистрибутивов. В числе возможностей следует уопмянуть встроенный трекер задач, контекстную WIKI, а также интеграцию с системой контроля версий Git. Система также включает функцию централизованной доставки обновлений для клиентских машин (как пользовательских, так и серверных) и может быть использована в качестве сервера непрерывной интеграции.

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Назад