Packaging Automation/DistroMap: различия между версиями

Материал из ALT Linux Wiki
(Новая страница: «Категория:Справочники {{Category navigation|title=Автоматизация работы с пакетами|category=Packaging Automation}}...»)
 
 
(не показано 10 промежуточных версий 2 участников)
Строка 5: Строка 5:


== DistroMap ==
== DistroMap ==
База данных DISTROMAP предназначена для трансляции пространств имен между дистрибутивами. DISTROMAP включает в себя собственно базы данных, утилиты генерации и сопровождения  баз данных, shell интерфейс и perl интерфейс.  Для удобства расширения и сопровождения база данных сделана модульной.
=== Введение. ===
Дистрибутивы различаются в политике именования пакетов, а также деления программного кода на исходные и бинарные пакеты. Различие в пространствах имен приводит к необходимости трансляции имен, а также, при необходимости, и версий, бинарных пакетов в установочных и сборочных зависимостях пакетов, а также трансляции имен исходных пакетов при сравнении пакетной базы репозиториев.
Также, при портировании сторонних пакетов в Sisyphus возникает проблема трансляции групп пакетов. Это связано с тем, что для попадания пакета в  Sisyphus его rpm группа должна принадлежать списку групп, указанных в /usr/lib/rpm/GROUPS.
Утилиты пакета [[etersoft-build-utils]] поддерживают трансляцию установочных и сборочных зависимостей пакетов 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» репозитория СПО доступно с сайта http://repocop.altlinux.ru, БД текущего состояния  стабильной ветви «t6» репозитория СПО доступно с сайта http://autoports.altlinux.ru.
Интерфейсный модуль perl переписан для использования новых  классов данных, добавленых для БД состояния репозитория и БД трансляции пространства имен репозитариев.
{| class="wide"
| Разработано при поддержке [http://www.fasie.ru/ Фонда содействия развитию МП НТС] в рамках НИОКР 01201066526
| [[Изображение:Logo_FASIE_preview.jpg|200px|rigft]]
|}

Текущая версия от 16:15, 24 декабря 2018


DistroMap

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

Введение.

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

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

Утилиты пакета etersoft-build-utils поддерживают трансляцию установочных и сборочных зависимостей пакетов 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» репозитория СПО доступно с сайта http://repocop.altlinux.ru, БД текущего состояния стабильной ветви «t6» репозитория СПО доступно с сайта http://autoports.altlinux.ru. Интерфейсный модуль perl переписан для использования новых классов данных, добавленых для БД состояния репозитория и БД трансляции пространства имен репозитариев.

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