UsesGitEtersoft
Gear + SSH = Girar
Git.Etersoft like Git.ALT
Gear — это Git-репозиторий SRPM-пакета. Girar расположен на ресурсе git.etersoft.ru, организованном аналогично git.altlinux.org, и представляет среду для использования Gear в рамках построения инфраструктуры (
). По сути Girar — это ряд скриптов на сервере, которые позволяют создавать удалённым пользователям среду для работы со своими Git-репозиториями. Среда, которую предоставляет Girar, достаточно гибка. Но, тем не менее, для её эффективного использования стоит придерживаться определённой политики, которая определяет порядок совместной работы.
Пользователю
Получение аккаунта на git.etersoft.ru.
Пользователю необходимо прописать в ~/.ssh/config строки:
Host git.eter HostName git.etersoft.ru User git_LOGIN
Она должна быть вида:
git_sin или
git_lav или
git_boris
Администратору
Администратор создаёт на сервере учётную запись для удалённого git_пользователя, получив от него публичный ssh-ключ (обычно находится в файле ~/.ssh/id_dsa.pub).
Администратор добавляет пользователя командой:
$ sudo girar-add LOGIN pub.key "Ivan Petrov"
где LOGIN - логин пользователя, pub.key - файл с публичным ключом.
Принципиально использовать sudo и положить pub.key в домашний каталог.
Для разрешения сборки пользователю используется команда вида
# girar-build-enable LOGIN
Список доступных команд
Далее можно посмотреть список доступных команд:
$ ssh git.eter help Available commands: help git-receive-pack <directory> git-upload-pack <directory> charset <path to git repository> [<charset>] clone <path to git repository> [<path to directory>] find-package <pattern> init-db <path to directory> ls [<path to directory>] mv-db <path to source directory> <path to destination directory> quota rm-db <path to git repository> build <path to git repository> <tag name> <binary package repository name> [<project name>]
По сути можно искать, создавать, перемещать, удалять, клонировать удалённые репозитории. Причём на сервере выделяются следующие каталоги:
$ ssh git.eter ls total 0 drwxr-x--- 4 43 Feb 21 23:03 etc drwxr-xr-x 5 109 Mar 1 04:11 packages drwxr-x--x 2 6 Feb 21 23:03 private
etc - это каталог с настройками, packages - каталог с общедоступными репозиториями и private - каталог с ограниченным набором видимости.
После выписывания (клонирования) удалённого репозитория работа ведётся как с обычным git- или Gear-репозиторием, после завершения работы результаты отправляются на сервер.
Создание репозитория с нуля
- Создаём каталог NEW-PROJECT
- Делаем в нём git init-db
- Копируем в него нужные каталоги и файлы
- Назначем к добавлению в репозиторий все файлы через git add -A
- Помещаем все файлы в репозиторий: git commit -a
(это будет initial commit)
Всё, локальный репозиторий готов. Для публикации смотрим раздел "Публикация репозитория"
Поиск репозитория
ssh git.eter find-package СТРОКА выводит список репозиториев, в чьи названия входит строка
Клонирование другого репозитория
git clone git.eter:/people/OTHER_USER/packages/PROJECT.git
OTHER_USER - это логин другого пользователя, например shpigor
PROJECT - название репозитория
Публикация после клонирования из другого репозитория
- git remote -v (смотрим, какие есть алиасы для удалённых репозиториев)
- git remote rename origin OTHER_USER (переименовываем origin в OTHER_USER)
- далее смотрим раздел публикация ниже
Публикация репозитория
- ssh git.eter init-db packages/NEW-PROJECT.git (создаём удалённый репозиторий)
- git remote add origin git.eter:packages/NEW_PROJECT.git (создаём для него псевдоним origin)
- Публикуем git push origin --all
= Ограничение на публикацию merge
Для общих проектов разработан запрет публикации merge-коммитов.
$ ssh git.eter help|grep merges merges <path to git repository> [yes|no]
Посмотреть текущее состояние:
$ ssh git.eter merges <repo>
Запретить публикацию merge:
$ ssh git.eter merges <repo> no
Работа с карманами
Git Etersoft Pockets - это механизм совместной работы над набором пакетов. Этот механизм предоставляет возможность создать дополнительный специализированный репозиторий, сборка в который будет проходить с помощью стандартных средств сборки Git.Etersoft.
Каждый карман привязан к базовому репозиторию (sisyphus, 5.1, 5.0, 4.1), который указывается при создании кармана:
$ ssh git.eter pocket create special special new pocket special: owner=sin repo=sisyphus $ ssh git.eter pocket create special-5.1 5.1 special-5.1 new pocket special-5.1: owner=sin repo=5.1
Для сборки в карман используются стандартные команды task new и build, которым, через параметр -p, указывается имя кармана:
$ ssh git.eter task new -p special new task #264: owner=sin repo=sisyphus pocket=special 264 $ ssh git.eter build -p special-5.1 girar 0.3-alt1.eter18 new task #267: owner=sin repo=5.1 pocket=special-5.1 task #267: added #1: build tag 0.3-alt1.eter18 from /people/sin/packages/girar.git task #267: queued, result will be emailed to sin@etersoft.ru
Далее, над задачами, выполняются стандартные операции в Girar:
$ ssh git.eter task add 265 repo girar-builder 0.1-alt1.eter19 task #265: added #1: build tag 0.1-alt1.eter19 from /people/sin/packages/girar-builder.git $ ssh git.eter task show 265 id=265 locked=no shared=no test_only=no repo=5.1 owner=sin seq= rc= 1:dir=/people/sin/packages/girar-builder.git 1:tag_name=0.1-alt1.eter19 1:tag_id=bcdac675de69cee22472b6abad6ec89e278bc1c8 1:tag_author=Evgeny Sinelnikov (Sin) <sin@altlinux.ru> 1:userid=sin $ ssh git.eter task rm 265 removing task #265 ... done
Упрощённый вариант, с использованием команды build, будет выглядеть следующим образом:
$ ssh git.eter build -p special girar-builder 0.1-alt1.eter19
Пересборка пакетов из веток
Часто возникает задача пересобрать пакет во время разработки, чтобы организовать его комплексное тестирование всей командой. Затруднительным оказывается необходимость постоянного создания тегов и соответствующая необходимость увеличить релиз и запись в об изменениях (changelog).
Чтобы решить эту проблему в GitEter расширен дополнительной командой добавления сборки репозиториев из веток. Таким образом, собирается последний коммит в заданной ветке, а не тег.
$ ssh git.eter task add --help 2>&1 | grep branch or: girar-task add [<task_id>] branch <gear_repo> [<gear_branch>]
Пример использования :
$ ssh git.eter task new 729 new task #729: owner=sin repo=sisyphus $ ssh git.eter task add 729 branch /projects/asu/uniset fetching branch "master" from /projects/asu/uniset.git... done Cloning into /tmp/.private/git_sin/girar-autorelease.n6fHdG3IDL/git... done. [master e2d188c] Girar automatic build with version-release: 1.0-alt6.Build1 1 files changed, 4 insertions(+), 1 deletions(-) generating pkg.tar for uniset.git tag "1.0-alt6.Build1"... done task #729: added #1: build branch "master" with tag "1.0-alt6.Build1" from /projects/asu/uniset.git $ ssh git.eter task run 729 task #729: queued, result will be emailed to sin@etersoft.ru
Упрощённый вариант использования выглядит так:
$ ssh git.eter rebuild /projects/asu/uniset new task #730: owner=sin repo=sisyphus fetching branch "master" from /projects/asu/uniset.git... done Cloning into /tmp/.private/git_sin/girar-autorelease.8xqLqboBkh/git... done. [master 7199c7e] Girar automatic build with version-release: 1.0-alt6.Build1 1 files changed, 4 insertions(+), 1 deletions(-) generating pkg.tar for uniset.git tag "1.0-alt6.Build1"... done task #730: added #1: build branch "master" with tag "1.0-alt6.Build1" from /projects/asu/uniset.git task #730: queued, result will be emailed to sin@etersoft.ru
Таким образом, пересборка пактов упрощена до минимума.:
$ ssh git.eter rebuild REPO [BRANCH] или $ ssh git.eter task new #NTASK $ ssh git.eter task add NTASK branch REPO [BRANCH] $ ssh git.eter task run NTASK
Например, пересборка в карман standpm пакета standpm-weblog выглядит так:
$ ssh git.office rebuild -p standpm /projects/asu/standpm-weblog
Перед сборкой робот делает новый временный commit и тег. Логика установки релиза выглядит следующим образом:
- автоинкремент релиза (alt1 -> alt1.Build1, если такой есть, то alt1.Build2 и т.д.);
- сборка с меньшим версией-релизом не допускается (alt2.Build3 -/> alt1.Build1);
- в changelog указывается sha1 commit'а, на котором происходит сборка;
- при сборке не в сизиф или карман не на основе сизифа, к релизу добавляется суффикс бекпорта (alt1 -> alt0.M50.1.Build1, alt2 -> alt1.M50.2.Build1, alt1.M50.2.Build1 -> alt1.M50.2.Build2 и т.д.)
Публикация из Korinf в nonfree
Добавлен механизм перегенерации баз для репозиториев:
$ ssh git.eter genbases [-b <binary_repository_name>]
где <binary_repository_name>, по умолчанию sisyphus, но может принимать значения:
- sisyphus
- 5.1
- 4.1
Этот механизм предназначен для ручной правки содержимого каталогов RPMS.nonfree.
Другие каталоги править вручную не рекомендуется.
Эта команда действует на репозиторий nonfree, файлы в который выкладываются вручную, и который не обрабатывается girar-builder.
Замечания sin@:
В идеале научить работа собирать пакеты самому, но это противоречит схеме korinf'а.
Первичный источник Korinf. Ему откуда-то дали (здесь вот я вижу несоответствие коринфа,
как первичного источника. (
) src.rpm-пакет. Он его собирает в разных средах.
Далее бинарные файлы, собранные на определённых средах (Sisyphus, 4.1, 5.1), нужно
добавить в публичные репозитории наших дополнений к этим средам. На деле, бинарные
файлы подкладываются не в ту же среде, а в похожую... Это меня смущает. (
)