Girar/Internals
Есть два главных компонента системы: girar и girar-builder.
Girar
- girar (git)
- реализует ssh-интерфейс к git.altlinux.org.
Обрабатывает команды, описанные в Git.alt/Справочник и формирует задания для сборки.
Girar Builder
- Задание
- это каталог со специальной структурой (ближайшая аналогия -- каталог /proc/$pid).
Структура каталога описана в файле girar-builder/TASK. Описание может быть неполным или неточным, но оно дает правильное первоначальное представление.
Команды на формирование задания описаны в задания (команда task).
Задание состоит из нескольких стадий, которые выполняются в режиме sh -e (то есть, когда одна из стадий завершается с ошибкой, остальные стадии не выполняются). Последние стадии задания -- это копирование собранных пакетов в репозитарий и перегенерация репозитария.
Процедура сборки задания находится в girar-builder/gb-run-task.
Процедура сборки задания
Сейчас усилиями ldv реализована архитектура girar-builder + nodes. girar-builder находится на одной машине и выполняет всякие централизованные действия.
В каталоге girar-builder/remote/ лежат программы, которые выполняются на remote nodes. В частности, для сборки пакетов на ноде выполняется программа girar-builder/remote/gb-remote-build.
Характерной особенностью girar-builder является то, что у него нету своего хешера. Хешер находятся на remote nodes. Когда нужно что-то от хешера, например сборка или проверка установки, то girar-builder стучится на remote nodes и там всё делает.
Зато girar-builder умеет генерировать репозитарии, а remote nodes могут работать только с готовыми репозитарями. Существует строго ограниченное количество remote nodes, по имени репозитария и по архитектуре.
То есть существуют ноды типа:
- build_sisyphus_i586
- build_sisyphus_x86_64
- build_50_i586
- build_50_x86_64
Как распределены ноды между физическим железом это никто не знает. Предполагается что они каким-то образом балансируют нагрузку.
Есть ещё одна проблема: на ноды приходится целиком копировать временный репозитарий. Сейчас этот репозитарий делается симлинками. Это накладывает дополнительное условие: репозитарий на girar-builder и репозитарий на нодах должен иметь одинаковый путь. Потому что симлинки туда смотрят.
Сборка из source rpm
Недавно была добавлена сборка из source rpm через girar (команда build srpm, анонс: http://lists.altlinux.org/pipermail/devel/2009-May/170472.html).
При сборке из source rpm происходят проверки, запрещающие сборку, если предыдущая версия была собрана из gear.
Обоснование данной проверки: Изначально предполагалось, что переход на сборку из git позволит проверять наследование сборки (от предыдущей сборки) естественным путём, что упрощает совместную разработку и NMU.
К сожалению, srpm не позволяют реализовать такую проверку (точнее говоря, можно реализовать лишь приблизительную проверку, например, путём сравнения %changelog'ов).
По этой причине сборка пакета из srpm после сборки этого пакета из git не допускается.
Источники
Описание скомпилировано из: