Packaging Automation/DistroMap

Материал из ALT Linux Wiki


DistroMap

База данных DISTROMAP предназначена для трансляции пространств имен между дистрибутивами. DISTROMAP включает в себя собственно базы данных, утилиты генерации и сопровождения баз данных, shell интерфейс и perl интерфейс. Для удобства расширения и сопровождения база данных сделана модульной.

Введение.

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

Также, при портировании сторонних пакетов в Sisyphus возникает проблема трансляции групп пакетов. Это связано с тем, что для попадания пакета в Sisyphus его rpm группа должна принадлежать списку групп, указанных в /usr/lib/rpm/GROUPS.

Утилиты пакета etersoft-build-utils [5] поддерживают трансляцию установочных и сборочных зависимостей пакетов Sisyphus. в пакеты широкого круга других дистрибутивов с помощью встроенной базы данных соответствий. Также, предусмотрена возможность трансляция групп rpm, и есть таблица соответствий групп Sisyphus и групп бранчей, используемая для бакпортирования пакетов из Sisyphus в соответствующие бранчи.

Для трансляции в обратном направлении, предыдущая версия библиотеки RPM::Source::Convert содержала таблицы трансляции установочных и сборочных зависимостей пакетов из репозиториев RHEL и Fedora в репозитрий Sisyphus с помощью встроенной базы данных соответствий. Также, имелись таблицы трансляции rpm групп других репозиториев в rpm группы репозитрия пакетов свободного программного обеспечения Sisyphus. Общим недостатком описанных баз данных являлся незначительный объем, недостаточный для использования в общем случае, а также сложность их расширения и повторного использования, несистематический подход к их разработке.

Плагинам fedora-package-compare и fedora-сnucnu для системы агрегации оповещений о появлении новой версии программного пакета для реализации всех их возможностей необходима полноценная база данных трансляции имен исходных пакетов из Fedora Rawhide в репозитарий Sisyphus.

Также, при разработке программного комплекса автоматизации портирования и сопровождения программных пакетов из Fedora Rawhide в Sisyphus, fedoraimport, стало ясно, что для массового использования fedoraimport необходимо иметь как можно более полную база данных трансляции имен бинарных пакетов, которая бы использовалась для трансляции сборочных и установочных зависимостей пакетов. Также, полноценная база данных трансляции имен исходных пакетов из Fedora Rawhide в Sisyphus позволяет явно выделить множество исходных пакетов репозитория Fedora Rawhide, которые отсутствуют в репозитарии Sisyphus, позволяя, таким образом, автоматизировать задачу подбора начальных данных для системы fedoraimport.

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

Эти причины побудили вынести как отдельную подсистему базы данных трансляции пространств имен в репозиториях пакетов из систем, отвечающих за мониторинг upstream-репозитория в случае, когда upstream-репозиторий является сторонним репозиторием пакетов свободного программного обеспечения, и выделить ее в отдельный проект, получивший название DISTROMAP.

Структура проекта DISTROMAP.

DISTROMAP предназначен для трансляции пространств имен в репозиториях пакетов свободного программного обеспечения. DISTROMAP включает в себя собственно базы данных, утилиты генерации и сопровождения баз данных, shell интерфейс и интерфейс в виде модуля perl. Структура баз данных и интерфейс спроектированы таким образом, чтобы поддерживать различные репозитории, а также различные релизы (дистрибутивы, ветви) этих репозиториев. В качестве первой цели проекта выбраны БД трансляции пространства имен репозитариев пакетов свободного программного обеспечения Fedora Rawhide и Sisyphus.

Shell интерфейс представляет собой фильтр конвейера оболочки, в зависимости от опций осуществляющий трансляцию имен исходных либо бинарных пакетов, либо трансляцию сборочных и установочных зависимостей (При трансляции имен пакетов используется трансляция один-к-одному, в то время как при трансляции сборочных и установочных зависимостей используется трансляция один-ко-многим. Это связанно с тем, что при поиске пакета, соответствующего данному, целью является конкретный пакет, например, для сравнения версий. В то же время для удовлетворения сборочных или установочных зависимостей может понадобиться указать сразу несколько пакетов программного обеспечения. Интерфейсный модуль perl реализует стандартный интерфейс хеш-таблиц perl. Он конфигурируется через указание исходного и целевого репозитариев пакетов свободного программного обеспечения а также их подвидов (релизов, дистрибутивов, бранчей). По умолчанию, это (Fedora, Rawhide) в качестве источника и (ALT Linux, Sisyphus) в качестве репозитория назначения. Также указывается режим соответствия трансляция один-к-одному или трансляция один-ко-многим.

Утилиты сопровождения позволяют находить потенциальные соответствия по заданным алгоритмам и заносить их в БД после подтверждения оператором, находить устаревшие соответствия и перемещать их в соответствия релизов и т. д.

Для удобства расширения и сопровождения база данных сделана модульной.

внутренние служебные утилиты DistroMap

Фильтры

Фильтры distromap работают с табличными текстовыми файлами, где колонки разделяются последовательностью пробельных символов (\s+). В каждой строке (кроме пустых и #-комментариев) в указанной колонке значение заменяется на значение из базы distromap. Если замена не найдена, содержимое не меняется. Примеры:

  • замена имен src.rpm fedora -> altlinux (надо установить distromap-fedora-rawhide-altlinux-sisyphus)
echo PyYAML | distromap-filter-translate-source-names --originrepo fedora --destrepo altlinux
python-module-yaml
  • обратная замена имен src.rpm fedora <- altlinux.

Если делать как в прошлом примере, то надо иметь обратную базу distromap-altlinux-sisyphus-fedora-rawhide. Но поскольку такой сейчас нет, можно исхитриться и с имеющейся distromap-fedora-rawhide-altlinux-sisyphus, вызвав другую утилиту:

echo python-module-yaml | distromap-filter-reverse-translate-source-names  --originrepo fedora --destrepo altlinux
PyYAML
  • замена имен бинарных rpm fedora -> altlinux (надо установить distromap-fedora-rawhide-altlinux-sisyphus)
echo argtable-devel | distromap-filter-translate-binary-names --originrepo fedora --destrepo altlinux
libargtable2-devel
  • CPAN, PyPI. distromap-filter-translate-*-names с ними не работают, для них есть отдельные утилиты.
distromap-filter-translate-altlinux2cpan
distromap-filter-translate-altlinux2pypi
distromap-filter-translate-cpan2altlinux
distromap-filter-translate-pypi2altlinux

Пример:

echo Arp | distromap-filter-translate-cpan2altlinux 
perl-Arp

классы данных

Основные:

TODO:

Дополнительно:

В структуре описания репозитария:

  • Допустимые группы rpm
  • файлы конфигурации pkg-config
  • соответствие бинарных и исходных пакетов

В структуре описания трансляции репозитариев:

  • поддержка несравнимых по версиям соответствий пакетов
  • поддержка списка избыточных пакетов, подлежащих удалению из сборочных либо установочных зависимостей
  • поддержка списка избыточных пакетов, для которых из сборочных либо установочных зависимостей должны быть удалены версии (несравнимые по версиям пакеты включаются в этот список автоматически).
  • точные соответствия групп rpm
  • нестрогие соответствия групп rpm.

Продолжена работа по наполнению БД трансляции пространства имен репозитариев пакетов свободного программного обеспечения Fedora Rawhide и Sisyphus. Текущая БД трансляции содержит 1280 записей для случаев, когда имена пакетов или других сущностей различны. БД трансляции пространства имен репозитариев пакетов свободного программного обеспечения Fedora Rawhide и Sisyphus оформлена в виде программного пакета для нестабильной ветви «Sisyphus» репозитория СПО. Дополнительно к уже имеющейся БД трансляции пространства имен репозитариев пакетов свободного программного обеспечения Fedora Rawhide и Sisyphus начата работа по наполнению БД трансляции пространств имен из нестабильной ветви «Sisyphus» в стабильную ветвь t6 репозитария пакетов свободного программного обеспечения. БД состояния репозитория теперь обновляются ежедневно и доступны online: БД текущего состояния нестабильной ветви «Sisyphus» репозитория СПО доступно с сайта repocop.altlinux.ru, БД текущего состояния стабильной ветви «t6» репозитория СПО доступно с сайта autoports.altlinux.ru. Интерфейсный модуль perl переписан для использования новых классов данных, добавленых для БД состояния репозитория и БД трансляции пространства имен репозитариев.

Ссылки

5. http://www.altlinux.org/Etersoft-build-utils

Разработано при поддержке Фонда содействия развитию МП НТС в рамках НИОКР 01201066526 rigft