Технологии и инструменты автоматизации разработки в ROSA
LVEE 2013
Разработка сложного многокомпонентного программного обеспечения, включающего сотни тысяч файлов с исходными кодами и тысячи модулей, требует специальных средств автоматизации.
Для автоматизации разработки продуктов компании ROSA применяется набор инструментов, которые являются свободными и могут быть использованы разработчиками других дистрибутивов для автоматизации следующих задач:
- Проверка замкнутости и непротиворечивости репозиториев.
- Тестирование обратной совместимости ABI/API дистрибутива.
- Отслеживание эволюции upstream компонентов и поддержка принятия решений по обновлению.
- Анализ отличий различных версий пакетов.
- Интегрированная система разработки и сборки ABF.
Разработка сложногого многокомпонентного программного обеспечения, включающего сотни тысяч файлов с исходными кодами и тысячи модулей, требует специальных средств автоматизации.
Для автоматизации разработки продуктов компании ROSA применяется набор инструментов, которые являются свободными и могут быть использованы разработчиками других дистрибутивов для автоматизации следующих задач:
- Проверка замкнутости и непротиворечивости репозиториев.
- Тестирование обратной совместимости ABI/API дистрибутива.
- Отслеживание эволюции upstream компонентов и поддержка принятия решений по обновлению.
- Анализ отличий различных версий пакетов.
- Интегрированная система разработки и сборки 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
Назад