Git.alt/Справочник: различия между версиями

Материал из ALT Linux Wiki
(add id=acl_show ref)
(не показаны 44 промежуточные версии 10 участников)
Строка 18: Строка 18:
== SSH-доступ ==
== SSH-доступ ==


{{Важно|С 01.08.2015г Для работы с git репозиторием надо настроить доступ к двум серверам :
'''gitery.altlinux.org (gitery)''' и '''git.altlinux.org (girar)'''. Ссылка: [https://lists.altlinux.org/pipermail/devel/2015-August/199990.html <nowiki>[devel] I: git.alt ssh interface split</nowiki>].}}
Функции между этими серверами разделены следующим образом:
;git (gitery):
charset <path to git repository> [<charset>]
clone <path to git repository> [<path to directory>]
default-branch <path to git repository> [<branch>]
find-package <pattern>
init-db <path to directory>
ls [<path to directory>]
mv-db <path to source directory> <path to destination directory>
quota
repack <path to git repository> [<value>]
rm-db <path to git repository>
;girar
help
build [-b <binary_repository_name>] <gear_repo_1> <gear_tag_1> ...
task {--help|ls|show|new|add|delsub|run|share|approve|rm} ...
acl {--help|<binary_repository_name> ...}
ls [<path to directory>]
quota
Все операции по
<tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».
<tt>git.alt</tt> доступен по SSH по адресу <tt>git.altlinux.org:222</tt>. Аккаунт для доступа — <tt>git_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».


Пример <tt>~/.ssh/config</tt>:
Пример <tt>~/.ssh/config</tt>:
Host git.alt
<!---
# Host git.alt
   HostName git.altlinux.org
   HostName git.altlinux.org
   Port 222
   Port 222
Строка 27: Строка 56:
   # if stored separately
   # if stored separately
   #IdentityFile ~/.ssh/id_dsa-git.alt
   #IdentityFile ~/.ssh/id_dsa-git.alt
-->
# Управление git
# Host    gitery
  Host    git.alt
    HostName gitery.altlinux.org
    User git_USERNAME
    Port 222
    # if stored separately
    #IdentityFile ~/.ssh/id_dsa-git.alt
    # и если openssh-7.* или новее + ключ dsa, непременно
    #PubkeyAcceptedKeyTypes ssh-dss
    # иначе будет ошибка not in PubkeyAcceptedKeyTypes
# сборочница gear
    Host girar
    HostName git.altlinux.org
    User git_USERNAME
    Port 222


Для работы [[fsi:SSHFirewall|через прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>.
Для работы [[fsi:SSHFirewall|через прокси]] и в других сложных условиях SSH также доступен по адресу <tt>git.altlinux.org:443</tt>.
Строка 42: Строка 89:
  $ gpg --list-secret-keys
  $ gpg --list-secret-keys
Искомое значение находится в секции sec выхлопа команды. Его-то и следует прописать в переменную <tt>user.signingkey</tt>, предварительно снабдив символами <tt>0x</tt>
Искомое значение находится в секции sec выхлопа команды. Его-то и следует прописать в переменную <tt>user.signingkey</tt>, предварительно снабдив символами <tt>0x</tt>
(Замечание: конфигурация может быть проще. Мне не потребовалось устанавливать значение <tt>user.signingkey</tt>; подписи в git и так работают, наверное, благодаря совпадению email с UID у gpg.)


Список команд выдаётся при ssh-логине с командой <tt>help</tt>:
Список команд выдаётся при ssh-логине с командой <tt>help</tt>:
<pre>
<!---
$ ssh git.alt help
$ ssh git.alt help
Available commands:
Available commands:
Строка 61: Строка 110:
build [-b <binary_repository_name>] <gear_repo_1> <gear_tag_1> ...
build [-b <binary_repository_name>] <gear_repo_1> <gear_tag_1> ...
acl {--help|<binary_repository_name> ...}
acl {--help|<binary_repository_name> ...}
</pre>
-->
 
<source lang=bash>
$ ssh git.alt help
Enter passphrase for key '....ssh/id_dsa':
Available commands:
help
charset <path to git repository> [<charset>]
clone <path to git repository> [<path to directory>]
default-branch <path to git repository> [<branch>]
find-package <pattern>
init-db <path to directory>
ls [<path to directory>]
mv-db <path to source directory> <path to destination directory>
quota
repack <path to git repository> [<value>]
rm-db <path to git repository>
 
$ ssh girar help
Enter passphrase for key '....ssh/id_dsa':
Available commands:
help
build [-b <binary_repository_name>] <gear_repo_1> <gear_tag_1> ...
task {--help|ls|show|new|add|delsub|run|share|approve|rm} ...
acl {--help|<binary_repository_name> ...}
ls [<path to directory>]
quota
</source>
 
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда.
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда.


Строка 67: Строка 144:
<div id="git"></div>
<div id="git"></div>
=== Управление git-репозиториями ===
=== Управление git-репозиториями ===
 
<div id="ls"></div>
==== ls ====
==== ls ====


Строка 99: Строка 176:
  drwxr-sr-x 5 4096 Jul  7 18:03 wackoconvert.git
  drwxr-sr-x 5 4096 Jul  7 18:03 wackoconvert.git
  $
  $
 
<div id="find-package"></div>
==== find-package ====
==== find-package ====


Строка 123: Строка 200:
хотя бы один git push.  Репозитории, не изменившиеся после
хотя бы один git push.  Репозитории, не изменившиеся после
первичного создания/клонирования, в эту базу не попадают.
первичного создания/клонирования, в эту базу не попадают.
 
<div id="clone"></div>
==== clone ====
==== clone ====


Строка 147: Строка 224:
  girar-clone: /people/dottedmag/packages/chkconfig.git
  girar-clone: /people/dottedmag/packages/chkconfig.git
  $
  $
 
<div id="init-db"></div>
==== init-db ====
==== init-db ====


  '''$ ssh git.alt init-db <path to directory>'''
  '''$ ssh git.alt init-db <path to directory>'''
Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории <tt>packages</tt>:
Позволяет создать новый git-репозиторий. По умолчанию (при указании только имени репозитория) репозиторий создаётся в директории <tt>packages</tt>:
  $ ssh git.alt init-db test
  $ ssh git.alt init-db test
  girar-init-db: /people/dottedmag/packages/test.git
  girar-init-db: /people/dottedmag/packages/test.git
Строка 157: Строка 234:
  $ ssh git.alt init-db public/test
  $ ssh git.alt init-db public/test
  girar-init-db: /people/dottedmag/public/test.git
  girar-init-db: /people/dottedmag/public/test.git
 
<div id="mv-db"></div>
==== mv-db ====
==== mv-db ====


Строка 172: Строка 249:
  $ ssh git.alt mv-db test megatest
  $ ssh git.alt mv-db test megatest
  $
  $
 
<div id="rm-db"></div>
==== rm-db ====
==== rm-db ====


Строка 187: Строка 264:
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. Список доступных репозиториев можно узнать у <tt>gitalt</tt>:
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. Список доступных репозиториев можно узнать у <tt>gitalt</tt>:


  $ ssh git.alt acl --help
  $ ssh girar acl --help
  Usage: girar-acl --list
  Usage: girar-acl --list
     or: girar-acl <repository> [{<package>|@<group>} {check|show}]
     or: girar-acl <repository> [{<package>|@<group>} {check|show}]
Строка 198: Строка 275:


Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:
  $ ssh git.alt acl sisyphus keyjnote
  $ ssh girar acl sisyphus keyjnote
  girar-acl: Go ahead and type your commands
  girar-acl: Go ahead and type your commands
  '''keyjnote add peet'''
  '''keyjnote add peet'''
Строка 215: Строка 292:
==== acl show ====
==== acl show ====


  '''$ ssh git.alt acl <binary repository> <package> show'''
  '''$ ssh girar acl <binary repository> <package> show'''
Показывает ACL указанного пакета
Показывает ACL указанного пакета


<!-- неудачный пример
  $ ssh git.alt acl sisyphus bugzilla show
  $ ssh git.alt acl sisyphus bugzilla show
  bugzilla      @nobody
  bugzilla      @nobody
-->
$ ssh girar acl sisyphus aMule show
aMule  oddity @qa @everybody


  '''$ ssh git.alt acl <binary repository> @<group> show'''
  '''$ ssh girar acl <binary repository> @<group> show'''
Показывает состав указанной группы майнтайнеров.
Показывает состав указанной группы майнтайнеров.


  $ ssh git.alt acl sisyhpus @python show
  $ ssh girar acl sisyphus @python show
  @python        ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas
  @python        ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas


==== acl check ====
==== acl check ====


  '''$ ssh git.alt acl <binary repository> <package> check'''
  '''$ ssh girar acl <binary repository> <package> check'''
Проверяет ACL указанного пакета
Проверяет ACL указанного пакета


  $ ssh git.alt acl sisyphus bugzilla check
  $ ssh girar acl sisyphus bugzilla check
  girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned
  girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned


==== acl add/del ====
==== acl add/del ====


  '''$ ssh git.alt acl <binary repository> <package> add|del <login>|@<group> ...
  '''$ ssh girar acl <binary repository> <package> add|del <login>|@<group> ...
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.


  '''$ ssh git.alt acl sisyphus keyjnote add damir'''
  '''$ ssh girar acl sisyphus keyjnote add damir'''
  < keyjnote add damir
  < keyjnote add damir
  > OK: keyjnote: dottedmag damir
  > OK: keyjnote: dottedmag damir
Строка 249: Строка 330:
  girar-acl: 1 command(s) queued
  girar-acl: 1 command(s) queued


  '''$ ssh git.alt acl <binary repository> @<group> add|del <login>|@<group> ...
  '''$ ssh girar acl <binary repository> @<group> add|del <login>|@<group> ...
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.


  '''$ ssh git.alt acl sisyphus @python add ns'''
  '''$ ssh girar acl sisyphus @python add ns'''
  < @python add ns
  < @python add ns
  > OK: @python: real ldv george lav swi at hiddenman sin mithraen enp vvk viy vitty ns
  > OK: @python: real ldv george lav swi at hiddenman sin mithraen enp vvk viy vitty ns
  girar-acl: 1 command(s) queued
  girar-acl: 1 command(s) queued
  '''$ ssh git.alt acl sisyphus @python del ns'''
  '''$ ssh girar acl sisyphus @python del ns'''
  < @python del ns
  < @python del ns
  > OK: @python: real ldv george lav swi at hiddenman sin mithraen enp vvk viy vitty
  > OK: @python: real ldv george lav swi at hiddenman sin mithraen enp vvk viy vitty
Строка 263: Строка 344:
==== acl replace ====
==== acl replace ====


  '''$ ssh git.alt acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>'''
  '''$ ssh girar acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>'''
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.


  $ ssh git.alt acl sisyphus keyjnote replace dottedmag @python
  $ ssh girar acl sisyphus keyjnote replace dottedmag @python
Заменяет в ACL пакета <tt>keyjnote</tt> запись <tt>dottedmag</tt> на <tt>@python</tt>.
Заменяет в ACL пакета <tt>keyjnote</tt> запись <tt>dottedmag</tt> на <tt>@python</tt>.


==== acl leader ====
==== acl leader ====


  '''$ ssh git.alt acl <binary repository> <package> leader <login>|@<group>
  '''$ ssh girar acl <binary repository> <package> leader <login>|@<group>
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.


  $ ssh git.alt acl sisyphus keyjnote leader @python
  $ ssh girar acl sisyphus keyjnote leader @python


  '''$ ssh git.alt acl <binary repository> @<group> leader <login>|@<group>
  '''$ ssh girar acl <binary repository> @<group> leader <login>|@<group>
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.


  $ ssh git.alt acl sisyphus @python leader ns
  $ ssh girar acl sisyphus @python leader ns
 
<div id="build_tasks"></div>


<div id="build"></div>
=== Сборка пакетов ===
=== Сборка пакетов ===


Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.
Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.
 
<div id="task"></div>
==== task ====
==== task ====


  '''$ ssh git.alt task ls [--all]'''
  '''$ ssh girar task ls [--all]'''
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br />
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br />
С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей.
С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей.
  '''$ ssh git.alt task show [<task_id>]'''
  '''$ ssh girar task show [<task_id>]'''
Показывает содержимое указанного (по умолчанию последнего созданного) задания.
Показывает содержимое указанного (по умолчанию последнего созданного) задания.
  '''$ ssh git.alt task new [<binary_repository_name>]'''
  '''$ ssh girar task new [<binary_repository_name>]'''
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br />
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br />
Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br />
Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br />
Данная команда выводит идентификатор задания на stdout.
Данная команда выводит идентификатор задания на stdout.
  '''$ ssh git.alt task add [<task_id> [<before_subtask_id>]] repo <gear_repo> <gear_tag>'''
  '''$ ssh girar task add [<task_id> [<before_subtask_id>]] repo <gear_repo> <gear_tag>'''
Добавляет в задание пакет, который необходимо собрать.<br />
Добавляет в задание пакет, который необходимо собрать.<br />
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br />
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br />
По умолчанию новые подзадания добавляются в конец списка подзаданий, с шагом 0100 (восьмеричное 100).  Новое подзадание, добавляемое перед подзаданием номер N, получает восьмеричный номер (K+N)/2, где K — это номер подзадания, идущего непосредственно перед подзаданием номер N<ref>http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html</ref>.
По умолчанию новые подзадания добавляются в конец списка подзаданий, с шагом 0100 (восьмеричное 100).  Новое подзадание, добавляемое перед подзаданием номер N, получает восьмеричный номер (K+N)/2, где K — это номер подзадания, идущего непосредственно перед подзаданием номер N<ref>http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html</ref>.
  '''$ ssh git.alt task add [<task_id> [<before_subtask_id>]] srpm <srpm file>'''
  '''$ ssh girar task add [<task_id> [<before_subtask_id>]] srpm <srpm file>'''
Добавляет в задание пакет, который необходимо собрать.<br />
Добавляет в задание пакет, который необходимо собрать.<br />
Пакет определяется именем предварительно отправленного на сервер путём ''rsync git.alt:'' srpm-файла (Пример: ''rsync grace-5.1.22-alt6.src.rpm git.alt:'').
Пакет определяется именем предварительно отправленного на сервер путём ''rsync'' srpm-файла (Пример: ''rsync grace-5.1.22-alt6.src.rpm girar:'').
  '''$ ssh git.alt task add [<task_id> [<before_subtask_id>]] copy <package> [<binary_repository_name>]'''
  '''$ ssh girar task add [<task_id> [<before_subtask_id>]] copy <package> [<binary_repository_name>]'''
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).


Параметры:
Параметры:
* '''package''' — имя пакета (без версии, релиза и расширения).
* '''package''' — имя пакета (без версии, релиза и расширения).
  '''$ ssh git.alt task add [<task_id> [<before_subtask_id>]] del <package>'''
  '''$ ssh girar task add [<task_id> [<before_subtask_id>]] del <package>'''
Добавляет в задание имя пакета, который необходимо удалить из репозитория.
Добавляет в задание имя пакета, который необходимо удалить из репозитория.
  '''$ ssh git.alt task delsub <task_id> <subtask_id>'''
  '''$ ssh girar task add [<task_id> [<before_subtask_id>]] rebuild <package>'''
Добавляет в задание имя пакета, который необходимо пересобрать.
Эта операция реализована только для тех пакетов, которые были собраны из git-репозиториев.
'''$ ssh girar task add [<task_id> kmodules <kflavour>'''
Добавляет в задание подзадания по пересборке всех актуальных модулей для указанного ядра.
Эта операция имеет смысл только для модулей, которые были собраны из git-репозиториев с использованием gear specsubst.
'''$ ssh girar task delsub <task_id> <subtask_id>'''
Удаляет из указанного задания подзадание с указанным номером.
Удаляет из указанного задания подзадание с указанным номером.
  '''$ ssh git.alt task run [--test-only] [<task_id>]'''
  '''$ ssh girar task deps [<task_id>] show'''
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание. Если задан опциональный параметр --test-only, то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка) (test-only задание, как и failed и eperm будет удалено через 4 дня). Не забудьте про --test-only при необходимости повторного теста.  
Показывает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
  '''$ ssh git.alt task share [<task_id>] <status|enabled|disabled>'''
'''$ ssh girar task deps [<task_id>] clear'''
Очищает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
'''$ ssh girar task deps [<task_id>] add <required task id1> ...'''
Добавляет перечисленные задания в список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
'''$ ssh girar task deps [<task_id>] del <required task id1> ...'''
Удаляет указанные задания из списка заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
'''$ ssh girar task deps [<task_id>] set <required task id1> ...'''
Задает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
'''$ ssh girar task run [--test-only] [<task_id>]'''
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br />
Если задан опциональный параметр --test-only, то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка).<br />
Не забудьте указать --test-only при необходимости повторного теста.<br />
Задание, отправленное на выполнение, начинает обрабатываться только после того, как успешно завершена обработка всех заданий, от которых оно зависит.<br />
Задания, успешно собравшиеся в репозиторий (со статусом обработки <tt>DONE</tt>), архивируются сразу по окончании обработки<ref>NB: делитель для вычисления префикса в архиве по номеру задания составляет в данный момент 1024</ref>.<br />
Остальные задания автоматически архивируются через 5 суток после завершения обработки.
  '''$ ssh girar task share [<task_id>] status|enabled|disabled'''
Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.<br />
Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.<br />
Задание с режимом доступа ''share enabled'' может быть дополнено другими пользователями с помощью команды <tt>task add</tt>.<br />
Задание с режимом доступа ''share enabled'' может быть дополнено другими пользователями с помощью команды <tt>task add</tt>.<br />
По умолчанию задания создаются в режиме доступа ''share disabled''.
По умолчанию задания создаются в режиме доступа ''share disabled''.
<div id="task_approve"></div>
<div id="task_approve"></div>
  '''$ ssh git.alt task approve <task_id> <subtask_id>'''
  '''$ ssh girar task approve <task_id> <subtask_id>'''
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br />
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br />
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).
  '''$ ssh git.alt task rm [<task_id>]'''
  '''$ ssh girar task check-git-inheritance <task_id> <subtask_number> disable <commit_sha_id>'''
Для подзадания с номером <tt><subtask_number></tt>, входящего в состав задания <tt><task_id></tt>,
выключается обязательность проверки наследования от git-коммита <commit_sha_id>.<br />
Используется при необходимости осознанного обхода проверки наследования.
'''$ ssh girar task rm [<task_id>]'''
Удаляет указанное (по умолчанию последнее созданное) задание.
Удаляет указанное (по умолчанию последнее созданное) задание.
'''$ ssh girar task abort <task_id>'''
Досрочно прерывает обработку указанного задания.<br />
Если задание еще не находится на обработке, то оно снимается с очереди на обработку сразу.<br />
В противном случае оно помечается как задание, обработку которого следует прервать при первой возможности.


Пример:
Пример:
  $ ssh git.alt task ls
  $ ssh girar task ls
  girar-task ls: no tasks for ldv
  girar-task ls: no tasks for ldv
  $ ssh git.alt task new
  $ ssh girar task new
  1234
  1234
  new task #1234: owner=ldv repo=sisyphus
  new task #1234: owner=ldv repo=sisyphus
  $ ssh git.alt task ls
  $ ssh girar task ls
  #1234 NEW sisyphus
  #1234 NEW sisyphus
  $ ssh git.alt task show
  $ ssh girar task show
  id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=
  id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=
  $ ssh git.alt task add repo vitmp 1.0-alt4
  $ ssh girar task add repo vitmp 1.0-alt4
  task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git
  task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git
  $ ssh git.alt task show
  $ ssh girar task show
  id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=
  id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=
   1:dir=/people/ldv/packages/vitmp.git
   1:dir=/people/ldv/packages/vitmp.git
Строка 345: Строка 456:
   1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org>
   1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org>
   1:userid=ldv
   1:userid=ldv
  $ ssh git.alt task run
  $ ssh girar task run
  task #1234: queued, result will be emailed to ldv@altlinux.org
  task #1234: queued, result will be emailed to ldv@altlinux.org
  $ ssh git.alt task ls
  $ ssh girar task ls
  #1234 AWAITING sisyphus vitmp.git=1.0-alt4
  #1234 AWAITING sisyphus vitmp.git=1.0-alt4
через некоторое время вывод последней команды изменится на
через некоторое время вывод последней команды изменится на
Строка 354: Строка 465:
  #1234 DONE sisyphus vitmp.git=1.0-alt4
  #1234 DONE sisyphus vitmp.git=1.0-alt4
(или TESTED, если сборка тестовая)
(или TESTED, если сборка тестовая)
<div id="build"></div>


==== build ====
==== build ====


  '''$ ssh git.alt build [--test-only] [-b <binary_repository_name>] <gear_repo_path 1> <gear_tag_name 1> ...'''
  '''$ ssh girar build [--test-only] [-b <binary repository name>] [--deps <deps>] <build source 1> <build name 1> ...'''
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,
Эта команда создаёт задание по сборке указанных пакетов (их копированию и/или удалению, в зависимости от параметров) и отправляет его на выполнение, последовательно запуская <code>task new</code>, <code>task deps</code> (при указании ''--deps''), <code>task add</code> (для каждого ''build source'' и ''build name'') и <code>task run</code>.
последовательно запуская <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt>.<br />
 
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <tt>task new</tt>.<br />
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <code>task new</code>.
Параметры ''gear repo path'' и ''gear tag name'' имеют тот же смысл, что и в команде <tt>task add</tt>. Параметр ''--test-only'' имеет тот же смысл что и в команде <tt>task run</tt>.
 
Параметр ''deps'' имеет тот же смысл, что и в команде <code>task deps</code>.
 
Параметры ''build source N'' и ''build name N'' имеют тот же смысл, что и в команде <code>task add</code>.
 
Параметр ''--test-only'' имеет тот же смысл, что и в команде <code>task run</code>.
 
Примеры:
 
# сборка пакета в Сизиф
$ ssh girar build packages/test.git test-0.1-alt1
# копирование пакета из Сизифа
$ ssh girar build -b t6 copy update-kernel
# удаление пакета
$ ssh girar build -b t6 del linuxwacom


'''$ ssh git.alt build [-b <binary_repository_name>] srpm <srpm file> ...'''
<div id="reports"></div>
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,
последовательно запуская <tt>task new</tt>, <tt>task add</tt> и <tt>task run</tt>.<br />
Параметр ''binary repository name'' имеет тот же смысл, что и в команде <tt>task new</tt>.<br />
Параметр ''srpm file'' имеет тот же смысл, что и в команде <tt>task add</tt>.


==== Отчёты о сборке ====
==== Отчёты о сборке ====
Строка 393: Строка 515:
Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной
Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной
степени доступно и по rsync.
степени доступно и по rsync.
==== Лимиты сборочницы ====
См. [[Hasher/Справочник#Лимиты на сборку у инкамингера]].


=== Вспомогательные команды ===
=== Вспомогательные команды ===
 
<div id="charset"></div>
==== charset ====
==== charset ====


Строка 408: Строка 534:
  cp1252
  cp1252
  $
  $
<div id="quota"></div>


==== quota ====
==== quota ====

Версия от 03:52, 28 апреля 2017

Эта страница документирует команды git.alt, но не является кратким руководством или учебником по нему.

Как воспользоваться git.alt?

git.alt предоставляет несколько видов доступа:

  • ssh-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных.
  • ssh-, git-, rsync-, http-доступ для непосредственной работы с репозиториями.
    git-, rsync- и http-адреса предоставляют r/o доступ, ssh — r/w.
  • Web-интерфейс. Находится по адресу git.altlinux.org, предоставляет навигацию по списку репозиториев и gitweb для индивидуальных репозиториев.

ssh-доступ к git.alt выдаётся после принятия в ALT Linux Team.

SSH-доступ

С 01.08.2015г Для работы с git репозиторием надо настроить доступ к двум серверам : gitery.altlinux.org (gitery) и git.altlinux.org (girar). Ссылка: [devel] I: git.alt ssh interface split.


Функции между этими серверами разделены следующим образом:

git (gitery)
charset <path to git repository> [<charset>]
clone <path to git repository> [<path to directory>]
default-branch <path to git repository> [<branch>]
find-package <pattern>
init-db <path to directory>
ls [<path to directory>]
mv-db <path to source directory> <path to destination directory>
quota
repack <path to git repository> [<value>]
rm-db <path to git repository>
girar
help
build [-b <binary_repository_name>] <gear_repo_1> <gear_tag_1> ...
task {--help|ls|show|new|add|delsub|run|share|approve|rm} ...
acl {--help|<binary_repository_name> ...}
ls [<path to directory>]
quota


Все операции по git.alt доступен по SSH по адресу git.altlinux.org:222. Аккаунт для доступа — git_$USERNAME, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_».

Пример ~/.ssh/config:

# Управление git
# Host    gitery
 Host    git.alt
    HostName gitery.altlinux.org
    User git_USERNAME
    Port 222
    # if stored separately
    #IdentityFile ~/.ssh/id_dsa-git.alt
    # и если openssh-7.* или новее + ключ dsa, непременно
    #PubkeyAcceptedKeyTypes ssh-dss
    # иначе будет ошибка not in PubkeyAcceptedKeyTypes 
# сборочница gear
    Host girar
    HostName git.altlinux.org
    User git_USERNAME
    Port 222

Для работы через прокси и в других сложных условиях SSH также доступен по адресу git.altlinux.org:443.

Для работы с git.alt необходимо настроить свой git — параметры user.name, user.email, user.signingkey:

$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>"
$ git config --global user.email "<ваш email, как мантейнера>"
$ git config --global user.name "FirstName LastName"

Например,

$ git config --global user.signingkey 0xA26F54C8
$ git config --global user.email dottedmag@altlinux.org
$ git config --global user.name "Mikhail Gusarov"

Чтобы узнать свой user.signingkey, выполните команду

$ gpg --list-secret-keys

Искомое значение находится в секции sec выхлопа команды. Его-то и следует прописать в переменную user.signingkey, предварительно снабдив символами 0x

(Замечание: конфигурация может быть проще. Мне не потребовалось устанавливать значение user.signingkey; подписи в git и так работают, наверное, благодаря совпадению email с UID у gpg.)

Список команд выдаётся при ssh-логине с командой help:

$ ssh git.alt help
Enter passphrase for key '....ssh/id_dsa':
Available commands:
help
charset <path to git repository> [<charset>]
clone <path to git repository> [<path to directory>]
default-branch <path to git repository> [<branch>]
find-package <pattern>
init-db <path to directory>
ls [<path to directory>]
mv-db <path to source directory> <path to destination directory>
quota
repack <path to git repository> [<value>]
rm-db <path to git repository>

$ ssh girar help
Enter passphrase for key '....ssh/id_dsa':
Available commands:
help
build [-b <binary_repository_name>] <gear_repo_1> <gear_tag_1> ...
task {--help|ls|show|new|add|delsub|run|share|approve|rm} ...
acl {--help|<binary_repository_name> ...}
ls [<path to directory>]
quota

Во всех командах суффикс директорий репозиториев .git опционален и может быть опущен. В выводе команд .git присутствует всегда.

Управление git-репозиториями

ls

$ ssh git.alt ls [<directory>]

Эта команда позволяет посмотреть содержимое различных директорий на git.alt:

$ ssh git.alt ls /people/dottedmag/public
total 24
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git
...
drwxr-sr-x 5 4096 Jul  7 18:03 wackoconvert.git
$

Без параметров — показывает содержимое /people/$USERNAME:

$ ssh git.alt ls
total 16
drwxr-s---  5 4096 May 30 21:27 etc
drwxr-sr-x 14 4096 Aug 13 23:53 packages
drwxr-s--x  2 4096 Feb 13  2007 private
drwxr-sr-x  8 4096 Aug 13 23:57 public
$

От этой же директории отсчитываются относительные пути:

$ ssh git.alt ls public
total 24
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git
...
drwxr-sr-x 5 4096 Jul  7 18:03 wackoconvert.git
$

find-package

$ ssh git.alt find-package <pattern>

Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — *. Репозитории ищутся в директории packages каждого пользователя, поскольку предполагается, что gear-репозитории располагаются именно там.

$ ssh git.alt find-package glibc*
/people/avm/packages/glibc.git	1216320095
...
/people/peet/packages/glibc-kernheaders.git	1177084354
/people/mike/packages/glibc-kvercheck.git	1160664813
$ ssh git.alt find-package glibc
/people/avm/packages/glibc.git	1216320095
...
/people/peet/packages/glibc.git	1177084600
$

Вторая колонка в выводе find-package — unixtime времени последнего обновления репозитория. Получить время в привычном представлении можно с помощью команды date -d @unixtime.

База данных для find-package обновляется в начале каждого часа. В неё попадают только те репозитории, в которые был сделан хотя бы один git push. Репозитории, не изменившиеся после первичного создания/клонирования, в эту базу не попадают.

clone

$ ssh git.alt clone <path to git repository> [<destination directory>]

Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним. При этом локальные клоны (из /people) задействуют хардлинки, экономя дисковое пространство, а также ваши квоту на git.alt и трафик до него.

Без второго аргумента — клонирует в директорию packages:

$ ssh git.alt clone /people/ldv/packages/glibc
girar-clone:	/people/dottedmag/packages/glibc.git
$

Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:

$ ssh git.alt clone /people/ldv/packages/glibc public/test
girar-clone:	/people/dottedmag/public/test.git
$

Можно также склонировать репозиторий, находящийся вне git.alt:

$ ssh git.alt clone git://git.fedorahosted.org/chkconfig.git
girar-clone:	/people/dottedmag/packages/chkconfig.git
$

init-db

$ ssh git.alt init-db <path to directory>

Позволяет создать новый git-репозиторий. По умолчанию (при указании только имени репозитория) репозиторий создаётся в директории packages:

$ ssh git.alt init-db test
girar-init-db:	/people/dottedmag/packages/test.git

При указании пути создаёт репозиторий по указанному пути:

$ ssh git.alt init-db public/test
girar-init-db:	/people/dottedmag/public/test.git

mv-db

$ ssh git.alt mv-db <path to source directory> <path to destination directory>

Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория packages.

Перемещение packages/test.git в public/newname.git:

$ ssh git.alt mv-db test public/newname
$

Перемещение public/newname.git в packages/test.git:

$ ssh git.alt mv-db public/newname test
$

Переименовывание packages/test.git в packages/megatest.git:

$ ssh git.alt mv-db test megatest
$

rm-db

$ ssh git.alt rm-db <path to git repository>

Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория packages:

$ ssh git.alt rm-db megatest # удаляет packages/megatest.git
$ ssh git.alt rm-db public/test

Управление ACL пакетов

Смотри ACL для общей информации об ACL пакетов в Sisyphus.

Команда acl требует указания репозитория, над которым производится работа. Список доступных репозиториев можно узнать у gitalt:

$ ssh girar acl --help
Usage: girar-acl --list
   or: girar-acl <repository> [{<package>|@<group>} {check|show}]
   or: girar-acl <repository> [{<package>|@<group>} {add|del|leader|replace} {<login>|@<group>}...]
   or: girar-acl <repository>
Valid repositories are: sisyphus t6 p6 c6 p5 5.1 5.0 4.1 4.0
If no package is given, read commands from stdin, one command per line.
See http://www.altlinux.org/Incoming/acl for details.
$

Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:

$ ssh girar acl sisyphus keyjnote
girar-acl: Go ahead and type your commands
keyjnote add peet
< keyjnote add peet
> OK: keyjnote: dottedmag peet
keyjnote add raorn
< keyjnote add raorn
> OK: keyjnote: dottedmag peet raorn
^D
girar-acl: 2 command(s) queued
$

Все команды, меняющие состав группы или ACL пакета, могут производиться только лидером — первым в списке ACL пакета или в составе группы. Набор из нескольких команд выполняется транзакционно. Результат выполнения acl-команд сообщается по email всем, кого они затрагивают.

acl show

$ ssh girar acl <binary repository> <package> show

Показывает ACL указанного пакета

$ ssh girar acl sisyphus aMule show
aMule   oddity @qa @everybody
$ ssh girar acl <binary repository> @<group> show

Показывает состав указанной группы майнтайнеров.

$ ssh girar acl sisyphus @python show
@python        ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas

acl check

$ ssh girar acl <binary repository> <package> check

Проверяет ACL указанного пакета

$ ssh girar acl sisyphus bugzilla check
girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned

acl add/del

$ ssh girar acl <binary repository> <package> add|del <login>|@<group> ...

Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.

$ ssh girar acl sisyphus keyjnote add damir
< keyjnote add damir
> OK: keyjnote: dottedmag damir
girar-acl: 1 command(s) queued
$ ssh git.alt acl sisyphus keyjnote del damir
< keyjnote del damir
> OK: keyjnote: dottedmag
girar-acl: 1 command(s) queued
$ ssh girar acl <binary repository> @<group> add|del <login>|@<group> ...

Добавляет/удаляет указанных пользователей и группы в/из указанной группы.

$ ssh girar acl sisyphus @python add ns
< @python add ns
> OK: @python: real ldv george lav swi at hiddenman sin mithraen enp vvk viy vitty ns
girar-acl: 1 command(s) queued
$ ssh girar acl sisyphus @python del ns
< @python del ns
> OK: @python: real ldv george lav swi at hiddenman sin mithraen enp vvk viy vitty
girar-acl: 1 command(s) queued

acl replace

$ ssh girar acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>

Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.

$ ssh girar acl sisyphus keyjnote replace dottedmag @python

Заменяет в ACL пакета keyjnote запись dottedmag на @python.

acl leader

$ ssh girar acl <binary repository> <package> leader <login>|@<group>

Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.

$ ssh girar acl sisyphus keyjnote leader @python
$ ssh girar acl <binary repository> @<group> leader <login>|@<group>

Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.

$ ssh girar acl sisyphus @python leader ns

Сборка пакетов

Для сборки пакетов используется механизм заданий — пользователь указывает, какие gear-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.

task

$ ssh girar task ls [--all]

Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.
С указанием параметра --all показывает список заданий всех пользователей.

$ ssh girar task show [<task_id>]

Показывает содержимое указанного (по умолчанию последнего созданного) задания.

$ ssh girar task new [<binary_repository_name>]

Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).
Список репозиториев можно узнать с помощью task new --help.
Данная команда выводит идентификатор задания на stdout.

$ ssh girar task add [<task_id> [<before_subtask_id>]] repo <gear_repo> <gear_tag>

Добавляет в задание пакет, который необходимо собрать.
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.
По умолчанию новые подзадания добавляются в конец списка подзаданий, с шагом 0100 (восьмеричное 100). Новое подзадание, добавляемое перед подзаданием номер N, получает восьмеричный номер (K+N)/2, где K — это номер подзадания, идущего непосредственно перед подзаданием номер N[1].

$ ssh girar task add [<task_id> [<before_subtask_id>]] srpm <srpm file>

Добавляет в задание пакет, который необходимо собрать.
Пакет определяется именем предварительно отправленного на сервер путём rsync srpm-файла (Пример: rsync grace-5.1.22-alt6.src.rpm girar:).

$ ssh girar task add [<task_id> [<before_subtask_id>]] copy <package> [<binary_repository_name>]

Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).

Параметры:

  • package — имя пакета (без версии, релиза и расширения).
$ ssh girar task add [<task_id> [<before_subtask_id>]] del <package>

Добавляет в задание имя пакета, который необходимо удалить из репозитория.

$ ssh girar task add [<task_id> [<before_subtask_id>]] rebuild <package>

Добавляет в задание имя пакета, который необходимо пересобрать. Эта операция реализована только для тех пакетов, которые были собраны из git-репозиториев.

$ ssh girar task add [<task_id> kmodules <kflavour>

Добавляет в задание подзадания по пересборке всех актуальных модулей для указанного ядра. Эта операция имеет смысл только для модулей, которые были собраны из git-репозиториев с использованием gear specsubst.

$ ssh girar task delsub <task_id> <subtask_id>

Удаляет из указанного задания подзадание с указанным номером.

$ ssh girar task deps [<task_id>] show

Показывает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.

$ ssh girar task deps [<task_id>] clear

Очищает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.

$ ssh girar task deps [<task_id>] add <required task id1> ...

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

$ ssh girar task deps [<task_id>] del <required task id1> ...

Удаляет указанные задания из списка заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.

$ ssh girar task deps [<task_id>] set <required task id1> ...

Задает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.

$ ssh girar task run [--test-only] [<task_id>]

Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.
Если задан опциональный параметр --test-only, то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка).
Не забудьте указать --test-only при необходимости повторного теста.
Задание, отправленное на выполнение, начинает обрабатываться только после того, как успешно завершена обработка всех заданий, от которых оно зависит.
Задания, успешно собравшиеся в репозиторий (со статусом обработки DONE), архивируются сразу по окончании обработки[2].
Остальные задания автоматически архивируются через 5 суток после завершения обработки.

$ ssh girar task share [<task_id>] status|enabled|disabled

Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.
Задание с режимом доступа share enabled может быть дополнено другими пользователями с помощью команды task add.
По умолчанию задания создаются в режиме доступа share disabled.

$ ssh girar task approve <task_id> <subtask_id>

Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).

$ ssh girar task check-git-inheritance <task_id> <subtask_number> disable <commit_sha_id>

Для подзадания с номером <subtask_number>, входящего в состав задания <task_id>, выключается обязательность проверки наследования от git-коммита <commit_sha_id>.
Используется при необходимости осознанного обхода проверки наследования.

$ ssh girar task rm [<task_id>]

Удаляет указанное (по умолчанию последнее созданное) задание.

$ ssh girar task abort <task_id>

Досрочно прерывает обработку указанного задания.
Если задание еще не находится на обработке, то оно снимается с очереди на обработку сразу.
В противном случае оно помечается как задание, обработку которого следует прервать при первой возможности.

Пример:

$ ssh girar task ls
girar-task ls: no tasks for ldv
$ ssh girar task new
1234
new task #1234: owner=ldv repo=sisyphus
$ ssh girar task ls
#1234 NEW sisyphus
$ ssh girar task show
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=
$ ssh girar task add repo vitmp 1.0-alt4
task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git
$ ssh girar task show
id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc=
 1:dir=/people/ldv/packages/vitmp.git
 1:tag_name=1.0-alt4
 1:tag_id=11c24aa6683506efd89b174de8dbea2af1cebf84
 1:tag_author=Dmitry V. Levin (for packages) <ldv@altlinux.org>
 1:userid=ldv
$ ssh girar task run
task #1234: queued, result will be emailed to ldv@altlinux.org
$ ssh girar task ls
#1234 AWAITING sisyphus vitmp.git=1.0-alt4

через некоторое время вывод последней команды изменится на

#1234 BUILDING [locked] sisyphus vitmp.git=1.0-alt4

а ещё через некоторое время — на

#1234 DONE sisyphus vitmp.git=1.0-alt4

(или TESTED, если сборка тестовая)

build

$ ssh girar build [--test-only] [-b <binary repository name>] [--deps <deps>] <build source 1> <build name 1> ...

Эта команда создаёт задание по сборке указанных пакетов (их копированию и/или удалению, в зависимости от параметров) и отправляет его на выполнение, последовательно запуская task new, task deps (при указании --deps), task add (для каждого build source и build name) и task run.

Параметр binary repository name имеет тот же смысл, что и в команде task new.

Параметр deps имеет тот же смысл, что и в команде task deps.

Параметры build source N и build name N имеют тот же смысл, что и в команде task add.

Параметр --test-only имеет тот же смысл, что и в команде task run.

Примеры:

# сборка пакета в Сизиф
$ ssh girar build packages/test.git test-0.1-alt1
# копирование пакета из Сизифа
$ ssh girar build -b t6 copy update-kernel
# удаление пакета
$ ssh girar build -b t6 del linuxwacom

Отчёты о сборке

Информация о сборках публикуется по адресу http://git.altlinux.org/tasks/

Каждая поддиректория /tasks/ содержит информацию об одной сборочной задаче. Идентификатор задачи выдаётся при её создании и указывается в почтовых оповещениях.

Задача может состоять из нескольких подзадач. Информация о каждой подзадаче публиуется в директориях /tasks/<id>/build/<sid> и /tasks/<id>/gears/<sid>.

Наиболее интересные файлы:

<id>/task/log
краткий лог сборки
<id>/build/<sid>/<arch>/srpm.log
лог сборки подзадачи для архитектуры <arch>, если сборка производилась через incoming
<id>/build/<sid>/<arch>/log
лог сборки подзадачи для архитектуры <arch>, если сборка производилась через git.alt
<id>/gears/<sid>
информация о подзадаче <sid>, если сборка производилась через git.alt
<id>/gears/<sid>/git
частичный git-репозиторий, на основании которго собиралась подзадача <sid>

Более подробное описание структуры задания можно найти в документации на girar-builder.

Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной степени доступно и по rsync.

Лимиты сборочницы

См. Hasher/Справочник#Лимиты на сборку у инкамингера.

Вспомогательные команды

charset

$ ssh git.alt charset <path to git repository> [<charset>]

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

$ ssh git.alt charset packages/glibc
utf-8
$ ssh git.alt charset packages/glibc cp1252
$ ssh git.alt charset packages/glibc
cp1252
$

quota

$ ssh git.alt quota

Позволяет узнать квоту и занимаемое пользователем дисковое пространство.

$ ssh git.alt quota
     Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
     /dev/simfs   16932    977M   1465M             555    100k    150k        
$

git-receive-pack, git-upload-pack

Эти команды используются утилитами git push, git pull и подобными, и не предназначены для вызова пользователем.

Клонирование и работа с репозиториями

Работа с git-репозиториями, расположенными на git.alt, ничем не отличается от работы с другими git-репозиториями.

URL-ы репозиториев на git.alt:

git (r/o)
git://git.altlinux.org/people/$USER/(packages%7Cpublic)/$PACKAGE.git
rsync (r/o)
git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git
http (r/o)
http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git
ssh (r/w)
ssh://git.altlinux.org/people/$USER/(etc%7Cpackages%7Cpublic%7Cprivate)/$PACKAGE.git

HTTP- и git-URL-ы репозиториев можно в любой момент узнать в web-интерфейсе git.alt.

Web-интерфейс

Располагается по адресу http://git.altlinux.org/

Предоставляет навигацию по

  • публичным репозиториям пользователей (по каталогам вида /people/$USERNAME/{packages,public})
  • кэширующим репозиториям /gears и /srpms
  • базе данных ACL
  • файлу people-packages-list, содержащий все репозитории из каталогов /people/$USERNAME/packages и даты их последнего изменения (в unixtime)
  • сборочным заданиям
  • логам тестовых пересборок Сизифа и бранчей
  • статистике непересобираемости пакетов в Сизифе и бранчах

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

git.alt содержит три дерева репозиториев:

  • репозитории /people/$USERNAME для каждого зарегистрированного пользователя
  • репозитории /gears с исходным кодом для пакетов, собранных из gear-репозиториев.
  • репозитории /srpms с исходным кодом для пакетов, собранных из SRPM-пакетов.

/people

Каждому зарегистрированному на git.alt разработчику предоставляется место для git-репозиториев, начинающееся с /people/$USERNAME. Доступ на запись в эти директории даётся только владельцу. Структура для хранения репозиториев жёстко определена:

/people/$USERNAME/etc

Содержит репозитории packages.git, private.git, public.git, с помощью которых можно управлять подпиской на почтовые оповещения. Эти репозитории доступны на чтение только владельцу.

/people/$USERNAME/packages

Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.

git-репозитории в этой директории будут искаться при выполнении команды find-package, и эта директория будет использоваться по умолчанию в командах init-db, clone, build и task add repo

/people/$USERNAME/private

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

Для удобства работают прямые http-ссылки на файлы репозиториев, размещённых в этой директории.

/people/$USERNAME/public

Директория предназначена для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа.

/gears

В эту директорию помещаются gear-репозитории с исходным кодом пакетов Sisyphus и других стабильных веток. Добавление исходного кода в репозиторий /gears происходит после успешной сборки пакета с помощью команд git.alt task или build.

Каждый git-репозиторий в /gears назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (sisyphus, t6 и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (1.0-alt1, 1.0-alt0.M50.1 и т.д.).

/srpms

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

После первой сборки пакета из gear, git.alt репозиторий в /srpms замораживается.

Почтовая подписка

На git.alt реализовано два вида почтовой подписки на события:

  • Пользователь подписывается на события, происходящие в репозиториях packages и public.
  • Пользователь подписывает кого-то на события, происходящие в его репозиториях packages, public и private.

Для подписки используются репозитории из каталога etc: packages.git, public.git, private.git в каталоге пользователя. Схема работы с подписками напоминает работу с CVSROOT из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.

В каждом из трёх репозиториев находится два файла: email-subscription и email-distribution (точнее, в private.git — только email-distribution). git.alt использует бранч master и не обращает внимания на остальные бранчи в этих репозиториях.

email-subscription

Этот файл позволяет подписаться на события в публичных репозиториях git.alt. Формат файла — последовательность строк следующего вида:

$USER $PACKAGE $REFTYPE $REFNAME

где

  • $USER — имя пользователя git.alt,
  • $PACKAGE — имя пакета,
  • $REFTYPE — вид изменения: head — новые/удалённые коммиты, tag — новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки refs/*/*)
  • $REFNAME — имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки refs/*/*).

Каждое из полей может быть полным именем или вайлдкардом *. Для имён пакетов также разрешён вайлдкард в конце имени (например, docs-*).

Примеры

Подписка на все события во всех репозиториях:

* * * *

Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git:

ldv glibc tag *

Действия для осуществления подписки:

git clone git.alt:etc/packages.git
cd packages
echo 'ldv glibc tag *' >> email-subscription
git commit -m "Subscribe to new tags in ldv's glibc repository" email-subscription
git push

email-distribution

Этот файл позволяет подписать других пользователей git.alt на события в ваших репозиториях. Формат файла — последовательность строк вида:

$PACKAGE $REFTYPE $REFNAME $MAILTO

где

  • $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription
  • $MAILTO — разделённый запятыми список имён пользователей git.alt — получателей оповещения.

Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.

Примечания

  1. http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html
  2. NB: делитель для вычисления префикса в архиве по номеру задания составляет в данный момент 1024