Skip to content

Gear

Вступление

Gear (Get Every Archive from Git package Repository) - это инструмент для создания пакетов RPM из репозиториев Git. Gear, также, система для работы с произвольными архивами программ.

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

Идея Gear заключается в том, чтобы с помощью одного файла с простыми правилами, для обработки которых достаточно sed и Git, можно было собирать пакеты из произвольно устроенного git-репозитория, по аналогии с Hasher, который был задуман как средство для сборки пакетов из произвольных SRPM-пакетов.

Структура репозитория

Хотя Gear не накладывает ограничений на внутреннюю организацию git-репозитория (не считая требования наличия файла с правилами), есть несколько рекомендаций для более эффективной организовации:

Одна сущность — один репозиторий

Не стоит помещать в один репозиторий несколько разных пакетов, за исключением случаев, когда у этих пакетов есть общий пакет-предок.

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

Однако, в связи с этим правилом сложнее выполнять операции fetch и push в случае, когда репозиториев, много.

Несжатый исходный код

Сжатый разными средствами (gzip, bzip2 и другими) исходный код лучше хранить в git-репозитории в несжатом виде. Изменение файлов, которые помещены в репозиторий в сжатом виде, менее удобно отслеживать с помощью diff.

К тому же, Git самостоятельно сжимает данные, поэтому дополнительно сжатие обычно не даёт эффекта.

Алгоритм, применяемый для минимизации трафика при обновлении репозитория по протоколу Git, более эффективен на несжатых данных.

Поскольку некоторые виды сжатия одних и тех же данных могут приводить к разным результатам, может уменьшиться степень первозданности исходного кода.

Распакованный исходный код

Исходный код, запакованный архиваторами (tar, cpio, zip и другими), лучше хранить в git-репозитории в распакованном виде.

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

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

Помимо потери первозданности, изменение прав доступа и даты модификации теоретически может повлиять на результат сборки пакета.

Форматированная история изменений

В истории изменений релизного коммита желательно включать соответствующий текст из истории изменений пакета, как это делают утилиты gear-commit (обёртка git commit, специально предназначенная для этих целей) и gear-srpmimport.

Благодаря этому можно узнать об изменениях в очередном релизе пакета, не заглядывая в Spec-файл самого пакета.

Правила экспорта

Правила должны сочетать в себе два свойства:

  1. Выразительность для большей свободы действий;
  2. Простота для лёгкого чтения сборки чужих gear-репозиториев.

Файл правил экспорта (по умолчанию, .gear/rules) состоит из строк формата директива: параметры. Параметры разделяются пробельными символами.

Директивы позволяют экспортировать:

  1. Любой файл из дерева, соответствующего коммиту;
  2. Любой каталог из дерева, соответствующего коммиту в виде архива .tar или .zip;
  3. Сравнение файлов (unified diff) между любыми каталогами, соответствующими коммитам.

Файлы на выходе могут быть сжаты разными средствами (gzip, bzip2 и другими). В качестве коммита может быть указан как целевой коммит (значение флага -t утилиты gear), так и любой из его предков при соблюдении условий, гарантирующих однозначное вычисление полного имени коммита-предка по целевому коммиту.

Правила экспорта из gear-репозитория описаны детально в Руководстве по Gear на сайте ALT Linux.

Основные типы устройства gear-репозитория

Правила экспорта реализуют основные типы устройства gear-репозитория следующим образом:

Архив с модифицированным исходным кодом

Всё дерево исходного кода экспортируется в один tar-архив:

tar: .

Если у проекта есть upstream, публикующий tar-архивы, то добавление релиза в имя tar-архива позволяет избежать коллизий:

tar: . name=@name@-@version@-@release@

Архив с оригинальным исходным кодом и патчем, содержащим локальные изменения

Если дерево с оригинальным исходным кодом хранится в отдельном подкаталоге, а локальные изменения хранятся в gear-репозитории в виде отдельных патч-файлов, то правила экспорта могут выглядеть следующим образом:

tar: package_name
copy: *.patch

Такое устройство репозитория получается при использовании утилиты gear-srpmimport, предназначенной для быстрой миграции от srpm-файла к gear-репозиторию.

Смешанные типы

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

Быстрый старт Gear

Создание gear-репозитория путём импорта созданного ранее srpm-пакета

Пусть у нас есть srpm-пакет foobar-1.0-alt1.src.rpm, и, к примеру, в нём находится следующее:

shell
$ rpm -qpl foobar-1.0-alt1.src.rpm
Вывод
shell
foobar-1-fix.patch
foobar-2-fix.patch
foobar.icon.png
foobar-1.0.tar.bz2
foobar-plugins.tar.gz

Создание gear-репозитория из srpm-пакета

Создайте каталог, в котором будет располагаться архив:

shell
$ mkdir foobar
$ cd foobar

Инициализируйте git-репозиторий:

shell
$ git init

В проекте gear есть утилита gear-srpmimport, предназначенная для автоматизации импортирования srpm-пакета в git-репозиторий:

shell
$ gear-srpmimport foobar-1.0-alt1.src.rpm
Вывод
shell
Committing initial tree deadbeefdeadbeefdeadbeefdeadbeefdeadbeef
gear-srpmimport: Imported foobar-1.0-alt1.src.rpm
gear-srpmimport: Created master branch

После выполнения импорта, git-репозиторий будет выглядеть следующим образом:

shell
$ ls -Alog
Вывод
shell
drwxr-xr-x 1 4096 Aug 12 34:56 .gear
drwxr-xr-x 1 4096 Aug 12 34:56 .git
-rw-r--r-- 1 6637 Aug 12 34:56 foobar.spec
drwxr-xr-x 3 4096 Aug 12 34:56 foobar
drwxr-xr-x 3 4096 Aug 12 34:56 foobar-plugins
-rw-r--r-- 1  791 Aug 12 34:56 foobar-1-fix.patch
-rw-r--r-- 1 3115 Aug 12 34:56 foobar-2-fix.patch
-rw-r--r-- 1  842 Aug 12 34:56 foobar.icon.png

Подсказка

При необходимости в файл правил можно вносить изменения. Например, можно убрать сжатие исходников (соответствующие изменения следует вносить и в .gear/rules).

Создание gear-репозитория на основе готового git-репозитория

  1. Создать и добавить в git-репозиторий Spec-файл.
  2. Создать и добавить в git-репозиторий файл с правилами .gear/rules.

Сборка пакета из gear-репозитория

Сборка пакета при помощи Hasher осуществляется командой gear-hsh:

shell
$ gear-hsh

Чтобы собрать старый пакет, который не содержит директивы Packager в Spec-файле, следует отключить соответствующую проверку:

shell
$ gear-hsh --no-sisyphus-check=gpg,packager

Сборка пакета при помощи rpmbuild(8) осуществляется командой gear-rpm:

shell
$ gear-rpm -ba

Фиксация изменений в репозитории

Для того, чтобы сделать коммит очередной сборки пакета, необходимо использовать gear-commit, для формирования списка изменений на основе записи в Spec-файле:

shell
$ gear-commit -a

Подсказка

Для отдельно взятого git-репозитория сконфигурировать адрес можно, прописав соответствующие значения в .git/config этого git-репозитория:

shell
$ git config user.name 'Your Name'
$ git config user.email '<login>@altlinux.org'

Авторы

The avatar of contributor named as Valentin Sokolov Valentin Sokolov
The avatar of contributor named as x1z53 x1z53
The avatar of contributor named as Олег Щавелев Олег Щавелев

История изменений

Макет страницы

Измените стиль оформления документации, выберите максимально удобный вариант в зависимости от размера вашего экрана и типа устройства.

Развёрнутый
Страница и область содержимого занимают всю ширину экрана.
Настраиваемая ширина страницы
Управление максимальной шириной страницы, область содержимого будет зафиксирована.
Полностью настраиваемый
Управление максимальной шириной страницы, область содержимого будет зафиксирована.
Оригинальная ширина
Ширина страницы, предусмотренная разработчиками VitePress.

Максимальная ширина содержимого

Точное значение ширины содержимого можно настроить для различных экранов и адаптировать условиям чтения.

Регулеровка максимальной ширины содержимого
Ползунок, позволяющий настроить максимальную ширину содержимого. Может быть изменён в зависимости от размера экрана.

Максимальная ширина страницы

Точное значение ширины страницы можно настроить для различных экранов и адаптировать условиям чтения.

Регулеровка максимальной ширины страницы
Ползунок, позволяющий настроить максимальную ширину страницы. Может быть изменён в зависимости от размера экрана.

Подсветка

Выделите блок содержимого, на котором находится курсор.

ONВключить
Включите подсветку.
OFFВыключить
Выключите подсветку.