git.alt/Справочник

Материал из ALT Linux Wiki

< Git.alt(Различия между версиями)
Перейти к: навигация, поиск
(build: --test-only перед -b)
(acl show)
 
(60 промежуточных версий не показаны.)
Строка 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
   User git_USERNAME
   User git_USERNAME
 +
  # if stored separately
 +
  #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>.
Строка 36: Строка 85:
  $ git config --global user.email dottedmag@altlinux.org
  $ git config --global user.email dottedmag@altlinux.org
  $ git config --global user.name "Mikhail Gusarov"
  $ git config --global user.name "Mikhail Gusarov"
 +
 +
Чтобы узнать свой <tt>user.signingkey</tt>, выполните команду
 +
$ gpg --list-secret-keys
 +
Искомое значение находится в секции sec выхлопа команды. Его-то и следует прописать в переменную <tt>user.signingkey</tt>, предварительно снабдив символами <tt>0x</tt>
 +
 +
(Замечание: конфигурация может быть проще. Мне не потребовалось устанавливать значение <tt>user.signingkey</tt>; подписи в git и так работают, наверное, благодаря совпадению email с UID у gpg.)
Список команд выдаётся при ssh-логине с командой <tt>help</tt>:
Список команд выдаётся при ssh-логине с командой <tt>help</tt>:
 +
<!---
 +
$ ssh git.alt help
 +
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>
 +
task {--help|ls|show|new|add|delsub|run|share|approve|rm} ...
 +
build [-b <binary_repository_name>] <gear_repo_1> <gear_tag_1> ...
 +
acl {--help|<binary_repository_name> ...}
 +
-->
-
$ ssh git.alt help
+
<source lang=bash>
-
Available commands:
+
$ ssh git.alt help
-
help
+
Enter passphrase for key '....ssh/id_dsa':
-
git-receive-pack <directory>
+
Available commands:
-
git-upload-pack <directory>
+
help
-
charset <path to git repository> [<charset>]
+
charset <path to git repository> [<charset>]
-
clone <path to git repository> [<path to directory>]
+
clone <path to git repository> [<path to directory>]
-
find-package <pattern>
+
default-branch <path to git repository> [<branch>]
-
init-db <path to directory>
+
find-package <pattern>
-
ls [<path to directory>]
+
init-db <path to directory>
-
mv-db <path to source directory> <path to destination directory>
+
ls [<path to directory>]
-
quota
+
mv-db <path to source directory> <path to destination directory>
-
rm-db <path to git repository>
+
quota
-
task {list|new|show|drop|add|run} ...
+
repack <path to git repository> [<value>]
-
build <path to gear repository> <tag name> [<binary package repository name>] [<project name>]
+
rm-db <path to git repository>
-
acl {--help|<binary package repository name> ...}
+
 
-
$
+
$ 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> присутствует всегда.
Строка 62: Строка 144:
<div id="git"></div>
<div id="git"></div>
=== Управление git-репозиториями ===
=== Управление git-репозиториями ===
-
 
+
<div id="ls"></div>
==== ls ====
==== ls ====
Строка 94: Строка 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 ====
Строка 118: Строка 200:
хотя бы один git push.  Репозитории, не изменившиеся после
хотя бы один git push.  Репозитории, не изменившиеся после
первичного создания/клонирования, в эту базу не попадают.
первичного создания/клонирования, в эту базу не попадают.
-
 
+
<div id="clone"></div>
==== clone ====
==== clone ====
Строка 127: Строка 209:
Без второго аргумента — клонирует в директорию <tt>packages</tt>:
Без второго аргумента — клонирует в директорию <tt>packages</tt>:
-
  $ ssh git.alt clone /people/ldv/packages/glibc.git
+
  $ ssh git.alt clone /people/ldv/packages/glibc
-
  Initialized empty Git repository in /people/dottedmag/packages/glibc.git/
+
  girar-clone: /people/dottedmag/packages/glibc.git
  $
  $
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:
-
  $ ssh git.alt clone /people/ldv/glibc.git public
+
  $ ssh git.alt clone /people/ldv/packages/glibc public/test
-
Initialized empty Git repository in /people/dottedmag/public/glibc.git/
+
  girar-clone: /people/dottedmag/public/test.git
-
$ ssh git.alt clone /people/ldv/glibc.git public/test
+
-
  Initialized empty Git repository in /people/dottedmag/public/test.git/
+
  $
  $
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>:
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>:
-
  $ ssh git.alt clone <nowiki>http://github.com/dottedmag/madshelf.git</nowiki> public
+
  $ ssh git.alt clone <nowiki>git://git.fedorahosted.org/chkconfig.git</nowiki>
-
  Initialized empty Git repository in /people/dottedmag/packages/public.git/
+
  girar-clone: /people/dottedmag/packages/chkconfig.git
-
Getting alternates list for <nowiki>http://github.com/dottedmag/madshelf.git</nowiki>
+
-
...
+
-
walk 03d18e21d85fa30fc3ac8d921eb391e2a7bb242a
+
  $
  $
-
 
+
<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
-
Initialized empty Git repository in ./
 
  girar-init-db: /people/dottedmag/packages/test.git
  girar-init-db: /people/dottedmag/packages/test.git
При указании пути создаёт репозиторий по указанному пути:
При указании пути создаёт репозиторий по указанному пути:
  $ ssh git.alt init-db public/test
  $ ssh git.alt init-db public/test
-
Initialized empty Git repository in ./
 
  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 ====
Строка 174: Строка 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: Строка 262:
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.''
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.''
-
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. На данный момент существует только репозиторий Sisyphus с меткой <tt>sisyphus</tt>.
+
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. Список доступных репозиториев можно узнать у <tt>gitalt</tt>:
 +
 
 +
$ 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 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'''
 +
< keyjnote add peet
 +
> OK: keyjnote: dottedmag peet
  '''keyjnote add raorn'''
  '''keyjnote add raorn'''
 +
< keyjnote add raorn
 +
> OK: keyjnote: dottedmag peet raorn
  '''^D'''
  '''^D'''
  girar-acl: 2 command(s) queued
  girar-acl: 2 command(s) queued
  $
  $
-
Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Все такие операции выполняются асинхронно и результат их выполнения сообщается по email.
+
Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Набор из нескольких команд выполняется транзакционно. Результат выполнения acl-команд сообщается по email всем, кого они затрагивают.
 +
<div id="acl_show"></div>
==== 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
 +
> OK: keyjnote: dottedmag damir
  girar-acl: 1 command(s) queued
  girar-acl: 1 command(s) queued
-
  $ ssh git.alt acl sisyphus keyjnote del damir
+
  '''$ ssh git.alt acl sisyphus keyjnote del damir'''
 +
< keyjnote del damir
 +
> OK: keyjnote: dottedmag
  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 ns add @python
+
  '''$ 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
  girar-acl: 1 command(s) queued
-
  $ ssh git.alt acl sisyphus ns del @python
+
  '''$ 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
  girar-acl: 1 command(s) queued
==== 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
-
==== acl nmu ====
+
<div id="build_tasks"></div>
-
'''$ ssh git.alt acl <binary repository> <package> nmu add|del [<login> [<start date> [<end date>]]]'''
 
-
Выдаёт/снимает разрешение на проведение [[NMU]] указанного пакета.
 
-
 
-
Параметры:
 
-
* '''login''' — аккаунт, которому даётся разрешение на NMU. '''*''' или отсутствие параметра означает «кому угодно»
 
-
* '''start date''' — дата начала действия NMU, в формате unixtime. Отсутствие параметра означает «немедленно»
 
-
* '''end date''' — дата окончания действия NMU, в формате unixtime. Отсутствие параметра означает «никогда».
 
-
 
-
Удаление разрешения происходит по точному соответствию имени аккаунта, так что <tt>del *</tt> не приведёт к отмене всех NMU, выданных на пакет. С другой стороны, <tt>del user</tt> приведёт к отмене всех NMU, выданных данному пользователю.
 
-
 
-
'''$ ssh git.alt acl <binary repository> <package> nmu show'''
 
-
Выдаёт список NMU для указанного пакета, в формате
 
-
<package> <login> <start date> <end date>
 
-
 
-
0 в поле ''end date'' означает «без ограничения».
 
-
 
-
<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>] repo <gear_repo> <gear_tag>'''
+
  '''$ ssh girar task add [<task_id> [<before_subtask_id>]] repo <gear_repo> <gear_tag>'''
Добавляет в задание пакет, который необходимо собрать.<br />
Добавляет в задание пакет, который необходимо собрать.<br />
-
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.
+
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br />
-
  '''$ ssh git.alt task add [<task_id>] srpm <srpm file>'''
+
По умолчанию новые подзадания добавляются в конец списка подзаданий, с шагом 0100 (восьмеричное 100).  Новое подзадание, добавляемое перед подзаданием номер N, получает восьмеричный номер (K+N)/2, где K — это номер подзадания, идущего непосредственно перед подзаданием номер N<ref>http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html</ref>.
 +
  '''$ 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>] 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>] 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 при необходимости повторного теста.  
+
Показывает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
-
  '''$ 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''.
-
  '''$ ssh git.alt task approve <task_id> <subtask_id>'''
+
<div id="task_approve"></div>
 +
  '''$ 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
Строка 340: Строка 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
через некоторое время вывод последней команды изменится на
через некоторое время вывод последней команды изменится на
Строка 349: Строка 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>.
+
==== Отчёты о сборке ====
==== Отчёты о сборке ====
Строка 389: Строка 516:
степени доступно и по rsync.
степени доступно и по rsync.
-
=== Вспомогательные команды ===
+
==== Лимиты сборочницы ====
 +
См. [[Hasher/Справочник#Лимиты на сборку у инкамингера]].
 +
 +
=== Вспомогательные команды ===
 +
<div id="charset"></div>
==== charset ====
==== charset ====
Строка 403: Строка 534:
  cp1252
  cp1252
  $
  $
 +
<div id="quota"></div>
==== quota ====
==== quota ====
Строка 439: Строка 571:
Располагается по адресу http://git.altlinux.org/
Располагается по адресу http://git.altlinux.org/
-
Предоставляет навигацию по публичным репозиториям пользователей (директории <tt>/people/$USERNAME/{packages,public}</tt>) и <tt>gitweb</tt>-интерфейс к этим репозиториям.
+
Предоставляет навигацию по
-
 
+
* публичным репозиториям пользователей (по каталогам вида <tt>/people/$USERNAME/{packages,public}</tt>)
-
Кроме этого, в web-интерфейсе представлены репозитории <tt>/archive</tt>, списки <tt>/acl</tt> и файл <tt>people-packages-list</tt>, содержащий все репозитории из директорий <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime).
+
* кэширующим репозиториям <tt>/gears</tt> и <tt>/srpms</tt>
 +
* базе данных [[ACL]]
 +
* файлу <tt>people-packages-list</tt>, содержащий все репозитории из каталогов <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime)
 +
* сборочным заданиям
 +
* логам тестовых пересборок Сизифа и бранчей
 +
* статистике непересобираемости пакетов в Сизифе и бранчах
== Структура репозиториев ==
== Структура репозиториев ==
Строка 448: Строка 585:
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя
-
* репозитории <tt>/gears</tt> с исходным кодом для пакетов Sisyphus, собранных с помощью <tt>git.alt</tt>.
+
* репозитории <tt>/gears</tt> с исходным кодом для пакетов, собранных из gear-репозиториев.
-
* репозитории <tt>/archive</tt> с исходным кодом для пакетов Sisyphus, прошедших [[incoming]].
+
* репозитории <tt>/srpms</tt> с исходным кодом для пакетов, собранных из SRPM-пакетов.
=== /people ===
=== /people ===
Строка 457: Строка 594:
==== /people/$USERNAME/etc ====
==== /people/$USERNAME/etc ====
-
Содержит репозитории <tt>packages.git</tt>, <tt>private.git</tt>, <tt>public.git</tt>, с помощью которых можно управлять [[#Почтовая подписка|почтовой подпиской]]. Эти репозитории доступны на чтение только владельцу.
+
Содержит репозитории <tt>packages.git</tt>, <tt>private.git</tt>, <tt>public.git</tt>, с помощью которых можно управлять [[#Почтовая подписка|подпиской на почтовые оповещения]]. Эти репозитории доступны на чтение только владельцу.
==== /people/$USERNAME/packages ====
==== /people/$USERNAME/packages ====
Строка 463: Строка 600:
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.
Директория предназначена для хранения gear-репозиториев для пакетов Сизифа. Публично доступна.
-
git-репозитории в этой директории будут искаться при выполнении команды <tt>find-package</tt>, и эта директория будет использоваться по умолчанию в командах <tt>init-db</tt>, <tt>clone</tt>, <tt>build</tt>.
+
git-репозитории в этой директории будут искаться при выполнении команды <tt>find-package</tt>, и эта директория будет использоваться по умолчанию в командах <tt>init-db</tt>, <tt>clone</tt>, <tt>build</tt> и <tt>task add repo</tt>
==== /people/$USERNAME/private ====
==== /people/$USERNAME/private ====
Строка 479: Строка 616:
=== /gears ===
=== /gears ===
-
В эту директорию помещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>git.alt</tt> <tt>task</tt> или <tt>build</tt>.
+
В эту директорию помещаются gear-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>git.alt</tt> <tt>task</tt> или <tt>build</tt>.
-
Каждый git-репозиторий в <tt>/gears</tt> назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (<tt>sisyphus</tt>, <tt>branch5.0</tt> и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (<tt>1.0-alt1</tt>, <tt>1.0-alt0.M50.1</tt> и т.д.).
+
Каждый git-репозиторий в <tt>/gears</tt> назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (<tt>sisyphus</tt>, <tt>t6</tt> и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (<tt>1.0-alt1</tt>, <tt>1.0-alt0.M50.1</tt> и т.д.).
=== /srpms ===
=== /srpms ===
-
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных с помощью [[Incoming]].
+
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных из SRPMS-пакетов.
После первой сборки пакета из <tt>gear</tt>, <tt>git.alt</tt> репозиторий в <tt>/srpms</tt> замораживается.
После первой сборки пакета из <tt>gear</tt>, <tt>git.alt</tt> репозиторий в <tt>/srpms</tt> замораживается.
-
 
-
Поскольку git-репозитории <tt>/srpms</tt> создаются на основе <tt>src.rpm</tt>-пакетов, а сборка с помощью [[Incoming]] объявлена устаревшей, то использовать их стоит только из исторического интереса.
 
<div id="email"></div>
<div id="email"></div>
Строка 537: Строка 672:
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.
 +
=== Примечания ===
 +
<references />
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}}

Текущая версия на 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|public)/$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|packages|public|private)/$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
 
Личные инструменты
На других языках