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

Материал из ALT Linux Wiki
(clone /gears)
(не показана 41 промежуточная версия 9 участников)
Строка 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 ====


Строка 133: Строка 210:


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


Строка 139: Строка 216:


  $ ssh git.alt clone /people/ldv/packages/glibc public/test
  $ ssh git.alt clone /people/ldv/packages/glibc public/test
  girar-clone: /people/dottedmag/public/test.git
  gitery-clone: /people/dottedmag/public/test.git
$
 
Помимо /people, можно клонировать локальные репозитории, размещённые в /gears и /srpms:
 
$ ssh git.alt clone /gears/s/strace
gitery-clone: /people/dottedmag/packages/strace.git
  $
  $


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


  $ ssh git.alt clone <nowiki>git://git.fedorahosted.org/chkconfig.git</nowiki>
  $ ssh git.alt clone <nowiki>git://git.fedorahosted.org/chkconfig.git</nowiki>
  girar-clone: /people/dottedmag/packages/chkconfig.git
  gitery-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
  gitery-init-db: /people/dottedmag/packages/test.git
При указании пути создаёт репозиторий по указанному пути:
При указании пути создаёт репозиторий по указанному пути:
  $ ssh git.alt init-db public/test
  $ ssh git.alt init-db public/test
  girar-init-db: /people/dottedmag/public/test.git
  gitery-init-db: /people/dottedmag/public/test.git
 
<div id="mv-db"></div>
==== mv-db ====
==== mv-db ====


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


Строка 187: Строка 270:
Команда <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: Строка 281:


Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:
  $ 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: Строка 298:
==== 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 sisyphus @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: Строка 336:
  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: Строка 350:
==== 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-файла (Пример: <code>rsync grace-5.1.22-alt6.src.rpm girar:</code>).
  '''$ 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 add [<task_id> [<before_subtask_id>]] rebuild <package>'''
  '''$ ssh girar task add [<task_id> [<before_subtask_id>]] rebuild <package>'''
Добавляет в задание имя пакета, который необходимо пересобрать.
Добавляет в задание имя пакета, который необходимо пересобрать.
Эта операция реализована только для тех пакетов, которые были собраны из git-репозиториев.
Эта операция реализована только для тех пакетов, которые были собраны из git-репозиториев.
  '''$ ssh git.alt task add [<task_id> kmodules <kflavour>'''
  '''$ ssh girar task add [<task_id> kmodules <kflavour>'''
Добавляет в задание подзадания по пересборке всех актуальных модулей для указанного ядра.
Добавляет в задание подзадания по пересборке всех актуальных модулей для указанного ядра.
Эта операция имеет смысл только для модулей, которые были собраны из git-репозиториев с использованием gear specsubst.
Эта операция имеет смысл только для модулей, которые были собраны из git-репозиториев с использованием gear specsubst.
  '''$ ssh git.alt task delsub <task_id> <subtask_id>'''
  '''$ ssh girar task delsub <task_id> <subtask_id>'''
Удаляет из указанного задания подзадание с указанным номером.
Удаляет из указанного задания подзадание с указанным номером.
  '''$ ssh git.alt task deps [<task_id>] show'''
  '''$ ssh girar task deps [<task_id>] show'''
Показывает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
Показывает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
  '''$ ssh git.alt task deps [<task_id>] clear'''
  '''$ ssh girar task deps [<task_id>] clear'''
Очищает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
Очищает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
  '''$ ssh git.alt task deps [<task_id>] add <required task id1> ...'''
  '''$ ssh girar task deps [<task_id>] add <required task id1> ...'''
Добавляет перечисленные задания в список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
Добавляет перечисленные задания в список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
  '''$ ssh git.alt task deps [<task_id>] del <required task id1> ...'''
  '''$ ssh girar task deps [<task_id>] del <required task id1> ...'''
Удаляет указанные задания из списка заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
Удаляет указанные задания из списка заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
  '''$ ssh git.alt task deps [<task_id>] set <required task id1> ...'''
  '''$ ssh girar task deps [<task_id>] set <required task id1> ...'''
Задает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
Задает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
  '''$ ssh git.alt task run [--test-only] [<task_id>]'''
  '''$ ssh girar task run [--test-only|--swift] [<task_id>]'''
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br />
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br />
Если задан опциональный параметр --test-only, то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка).<br />
Если задан опциональный параметр <code>--test-only</code> или <code>--swift</code>, то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка; с опцией <code>--swift</code> -- ещё и без пересборки подзаданий в новой сборочной среде, что может ускорить получение отчёта о тесте, но и исказить его результаты).<br />
Не забудьте указать --test-only при необходимости повторного теста.<br />
Не забудьте указать <code>--test-only</code> (или <code>--swift</code>) при необходимости повторного теста! Иначе будет считаться, что Вы хотите выложить собранное в репозиторий.<br />
Задание, отправленное на выполнение, начинает обрабатываться только после того, как успешно завершена обработка всех заданий, от которых оно зависит.<br />
Задание, отправленное на выполнение, начинает обрабатываться только после того, как успешно завершена обработка всех заданий, от которых оно зависит.<br />
Задания, успешно собравшиеся в репозиторий (со статусом обработки <tt>DONE</tt>), архивируются сразу по окончании обработки.<br />
Задания, успешно собравшиеся в репозиторий (со статусом обработки <tt>DONE</tt>), архивируются сразу по окончании обработки<ref>NB: делитель для вычисления префикса в архиве по номеру задания составляет в данный момент 1024</ref>.<br />
Остальные задания автоматически архивируются через 5 суток после завершения обработки.
Остальные задания автоматически архивируются через установленное количество суток после завершения обработки (раньше: 5; сейчас: 14).
  '''$ ssh git.alt task share [<task_id>] status|enabled|disabled'''
  '''$ 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 check-git-inheritance <task_id> <subtask_number> disable <commit_sha_id>'''
  '''$ ssh girar task check-git-inheritance <task_id> <subtask_number> disable <commit_sha_id>'''
Для подзадания с номером <tt><subtask_number></tt>, входящего в состав задания <tt><task_id></tt>,
Для подзадания с номером <tt><subtask_number></tt>, входящего в состав задания <tt><task_id></tt>,
выключается обязательность проверки наследования от git-коммита <commit_sha_id>.<br />
выключается обязательность проверки наследования от git-коммита <commit_sha_id>.<br />
Используется при необходимости осознанного обхода проверки наследования.
Используется при необходимости осознанного обхода проверки наследования.
  '''$ ssh git.alt task rm [<task_id>]'''
  '''$ ssh girar task rm [<task_id>]'''
Удаляет указанное (по умолчанию последнее созданное) задание.
Удаляет указанное (по умолчанию последнее созданное) задание.
  '''$ ssh git.alt task abort <task_id>'''
  '''$ ssh girar task abort <task_id>'''
Досрочно прерывает обработку указанного задания.<br />
Досрочно прерывает обработку указанного задания.<br />
Если задание еще не находится на обработке, то оно снимается с очереди на обработку сразу.<br />
Если задание еще не находится на обработке, то оно снимается с очереди на обработку сразу.<br />
Строка 356: Строка 444:


Пример:
Пример:
  $ 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
Строка 374: Строка 462:
   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
через некоторое время вывод последней команды изменится на
через некоторое время вывод последней команды изменится на
Строка 383: Строка 471:
  #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>] [--deps <deps>] <build source 1> <build name 1> ...'''
  '''$ ssh girar build [--test-only] [-b <binary repository name>] [--deps <deps>] <build source 1> <build name 1> ...'''
Эта команда создаёт задание по сборке указанных пакетов и отправляет его на выполнение,<br />
Эта команда создаёт задание по сборке указанных пакетов (их копированию и/или удалению, в зависимости от параметров) и отправляет его на выполнение, последовательно запуская <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 deps</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>.
Параметр ''deps'' имеет тот же смысл, что и в команде <tt>task deps</tt>.<br />
 
Параметры ''build source N'' и ''build name N'' имеют тот же смысл, что и в команде <tt>task add</tt>.<br />
Параметр ''deps'' имеет тот же смысл, что и в команде <code>task deps</code>.
Параметр ''--test-only'' имеет тот же смысл, что и в команде <tt>task run</tt>.
 
Параметры ''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
 
<div id="reports"></div>


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


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


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


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

Версия от 17:25, 10 ноября 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
gitery-clone:	/people/dottedmag/packages/glibc.git
$

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

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

Помимо /people, можно клонировать локальные репозитории, размещённые в /gears и /srpms:

$ ssh git.alt clone /gears/s/strace
gitery-clone:	/people/dottedmag/packages/strace.git
$

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

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

init-db

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

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

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

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

$ ssh git.alt init-db public/test
gitery-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|--swift] [<task_id>]

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

$ 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