Packaging Automation/Преобразование Пакетов: различия между версиями
м (→Возможности) |
|||
Строка 5: | Строка 5: | ||
В системах автоматизации за преобразование пакетов отвечают утилиты, | В системах автоматизации за преобразование пакетов отвечают утилиты, | ||
использующие библиотеку {{pkg|RPM::Source::Transform}} (сейчас в пакете {{pkg|perl-RPM-Source-Editor}}). | использующие библиотеку {{pkg|RPM::Source::Transform}} (сейчас в пакете {{pkg|perl-RPM-Source-Editor}}). | ||
=== Основные понятия. === | |||
Объект src rpm пакета. | |||
$spec | |||
=== Возможности === | === Возможности === |
Версия от 19:08, 14 октября 2016
Введение.
В системах автоматизации за преобразование пакетов отвечают утилиты, использующие библиотеку RPM::Source::Transform (сейчас в пакете perl-RPM-Source-Editor).
Основные понятия.
Объект src rpm пакета.
$spec
Возможности
Библиотеку RPM::Source::Transform можно расширять различными плагинами, с помощью которых можно решать следующие задачи:
- различные операции по редактированию пакета, включая редактирование любых тегов, секций, переименование, добавление и удаление подпакетов, переименование пакета.
- автообновление пакета до следующей версии Gear/gear-uupdate, Gear/cronbuild, cronbuild, croncopy, cronport
- импорт пакета в формате другого диалекта rpm (fedora, mageia, suse, pld, ...)
- импорт пакета в формате deb из Debian/Ubuntu (в планах).
Принципы работы библиотеки
В библиотеке имеется контейнер ресурсов, контейнер фабрик преобразований, и объекты, имеющие роли READER, PLAYER, WRITER.
Загружаемые плагины добавляют свои объекты в контейнер ресурсов и(ли) контейнер фабрик преобразований, и при необходимости переопределяют объекты для ролей READER, PLAYER, WRITER.
При запуске
- библиотека осуществляет инициализацию объектов из контейнера ресурсов, контейнера фабрик преобразований, текущих READER, PLAYER, WRITER.
- для каждого входящего аргумента
- READER возвращает объект преобразуемого пакета (класс RPM::Source::Editor).
- библиотека опрашивает объекты из контейнера фабрик преобразований, которые в ответ генерируют и возвращают объекты преобразований.
- Библиотека создает объект шины обмена сообщений и передает объект преобразуемого пакета, контейнер ресурсов, шину обмена сообщений и набор объектов преобразований в текущий объект PLAYER.
- PLAYER последовательно применяет к преобразуемому пакету каждый из объектов преобразований в порядке, отсортированными по приоритету, а с одинаковым приоритетом -- по порядку загрузки плагинов.
- WRITER сохраняет изменения.
Каждый плагин может экспортировать независимо от других плагинов свой набор опций командной строки (при этом названия опций должны быть уникальными для каждого плагина) и свой фрагмент вывода --help.
В свою очередь, библиотека RPM::Source::Transform может выступать обработчиком событий для библиотеки масовой обработки.
Базовый набор плагинов
Опишем здесь некоторые плагины, идущие в одном пакете с библиотекой RPM::Source::Transform, которые видны пользователю.
Плагины из контейнера ресурсов
Плагин | Назначение | Опции |
Resource:: Datapath | указывает список каталогов, в которых ищутся подгружаемые ресурсы |
Filesystem resources options: --datapath /path1:/path2:... colon separated list of directories to search for hooks/, patches/, etc... |
Parent | указывает пакет-родитель (пакет, от которого наследуется %changelog, Epoch:, и т.д.) |
Parent package input options: --parent[-rpm] /path/to/parent/src.rpm --parent[-spec] /path/to/parent/spec Supplying parent spec/srpm is optional. If parent spec is supplied, parent changelog, Serial/Epoch and possibly Packager tag will be merged. --parent-sourcedir /path/to/parent/SOURCEDIR (optional) parent-sourcedir option can be used together with --parent-spec to provide a location for parent source files, if required. |
Плагины из контейнера фабрик трансформаций
Плагины имеют общий префикс RPM::Source::Transformation::Factory::*
Плагин | Назначение | Опции |
CommandLine | делает некоторые команды редактирования доступными в командной строке |
Editing options: --macrodef '<name> <value>' set the value of an rpm macro. --macroundef <name> undefine rpm macro. It does not change spec but influence spec processing. --add-source <file> (can be specified multiple times) --copy_to_sources <file> (can be specified multiple times) --copy-to-sources <file> - alias for --copy_to_sources --rename 'new name of source rpm package' --spec_apply_patch <patch file> -- apply <patch file> to spec --repack -- repack src.rpm archives to plain tar (saves space with native xz) --uupdate -- perform a version update using a source watch file |
DependencyFilter | Фреймворк для фильтров зависимостей в тегах (Build) Requires, Conflicts, etc. | (без опций) |
Flags | загружает настройки пакетов из каталога flags | экспериментальная фича |
GroupTranslation | замены в теге Group:, как указвнные вручную, так и из каталога groups |
Group Editing options: --group-translate 'group translation' |
Hook | загружает пользовательские скрипты редактирования (hooks) |
Hook load options: --hook /path/to/<hook code> - load a subroutine hook. Multiple --hook options are allowed. --no-default-hook do not look for the default hook '\%{name}.pl' Синтаксис hook-файлов см. Embedded_Language. |
ParentI18NMerge | добавляет, если нет, summary(ru), description -l ru и т.д. из пакета 'parent' | (без опций) |
RaiseRelease | Увеличение релиза, смена версии, релиза, Epoch. |
Release options: --tag-packager-replace 'new value' set Packager: tag to a new value. special values are: auto - use rpm's \%{packager} value none - clear tag parent - use parent's value of Packager: --tag-packager-default 'new value' - if the Packager: tag is not defined set it to the new value. This option allows comma separated list of multiple sources, for example, 'parent,A. R. <ar\@b.org>' --changelog '- changelog entry' --epoch 'new value' --version 'version' - set new package version --release 'release' - if we need to adjust the package release --nextrel|--next-release-policy <policy> --refresh-timestamp update timestamp in existing changelog |
Замечания:
- --macrodef используется для изменения значения макроса <name> внутри библиотеки (в таблице значений определенных в спеке макросов). Это нужно в случаях, когда внутренне вычесленные значения макросов некорректны.
Пример: пусть в спеке есть конструкция
%if %time_of_peace
%define PI 3.1415926
%else
%define PI 4
%endif
Source10: extra-%PI.tar
Пусть в сборочном окружении макрос %time_of_peace был определен, и в пакет был упакован файл extra-3.1415926.tar. Если библиотека обработает эту конструкцию некорректно, то во внутренней таблице значений макросов будет PI=4. Как следствие, например, библиотеке SourceAnalyzer не удастся найти файл extra-4.tar для анализа. --macrodef PI=3.1415926 это подправит. См. также altbug:32597.
Базовые утилиты
hashertarbuild
hashertarbuild -- frontend к default WRITER, "улучшенный" аналог rpmbuild -bs --nodeps.
Даже если spec файл полностью корректен, rpmbuild -bs --nodeps может завершиться неудачей, если в host системе не установлены пакеты с использованными в spec файле макросами. hashertarbuild -bs в таком случае соберет исходники в tar файл в формате ALT Linux hasher, который можно напрямую передать в hsh для пересборки.
Рекомендую для краткости ввести
alias htbuild=hashertarbuild
srpmnmu, srpmtool
Утилиты являются фронтендом к базовому набору плагинов.
srpmtool не имеет действий по умолчанию, все ее операции надо задать явно в виде опций.
srpmnmu то же, что и srpmtool, но имеет действие по умолчанию --- инкрементирование релиза как при NMU и добавление умолчального малосодержательного changelog (лучше всегда явно указывать changelog опцией --ch (--changelog).
Более подробно эти утилиты описаны на странице Packaging_Automation/Embedded_Language.
buildroot2files
buildroot2files
TODO