Git.alt/Справочник: различия между версиями
(→Сборка пакетов: (TODO: дописать, почему это происходит)) |
|||
(не показаны 63 промежуточные версии 14 участников) | |||
Строка 13: | Строка 13: | ||
* Web-интерфейс. Находится по адресу [http://git.altlinux.org/ git.altlinux.org], предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев. | * Web-интерфейс. Находится по адресу [http://git.altlinux.org/ git.altlinux.org], предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев. | ||
Доступ по SSH выдаётся после [[Join|принятия]] в ALT Linux Team. | |||
<div id="access"></div> | <div id="access"></div> | ||
=== Функции серверов сборки git.alt === | |||
{{Важно|С 01.08.2015 г. для работы с git репозиторием надо настроить доступ к двум серверам : | |||
'''gitery.altlinux.org (gitery)''' и '''gyle.altlinux.org (girar)'''. См. [https://lists.altlinux.org/pipermail/devel/2015-August/199990.html <nowiki>[devel] I: git.alt ssh interface split</nowiki>] и [https://lists.altlinux.org/pipermail/devel/2019-February/206962.html <nowiki>[devel] I: legacy git.altlinux.org ssh interface is going to be retired soon</nowiki>].}} | |||
Функции между этими серверами разделены следующим образом: | |||
; gitery.altlinux.org: | |||
Для работы с <tt> | 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> | |||
; gyle.altlinux.org | |||
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>gitery.altlinux.org</tt> доступен по SSH по адресу <code>gitery.altlinux.org:222</code> и <code>gitery.altlinux.org:443</code>, gyle.altlinux.org — <code>gyle.altlinux.org:222</code> и <code>gyle.altlinux.org:443</code>. Аккаунт для доступа — <tt>alt_$USERNAME</tt>, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_». Обратите внимание: префикс <code>alt_</code> обязателен! Порт 443 можно использовать в случае, когда выход в интернет осуществляется только через прокси<ref>[[fsi:SSHFirewall|SSH через прокси]] — Freesource.info</ref>. | |||
=== SSH-доступ === | |||
Для ssh доступа, надо отредактировать файл '''$HOME/.ssh/config''' | |||
Пример <tt>~/.ssh/config</tt><ref>Строки с # закомментированы, раскомментируйте, если вам нужен этот функционал</ref>: | |||
<source lang=text> | |||
# Гитовница | |||
Host gitery | |||
HostName gitery.altlinux.org | |||
User alt_USERNAME # а не просто USERNAME! | |||
Port 222 | |||
# Через прокси | |||
#ProxyCommand netcat -X connect -x proxy:3128 %h %p | |||
#Port 443 | |||
# if stored separately | |||
#IdentityFile ~/.ssh/id_ed25519.alt | |||
# и если openssh-7.* или новее + ключ dsa, непременно | |||
#PubkeyAcceptedKeyTypes ssh-dss | |||
# иначе будет ошибка not in PubkeyAcceptedKeyTypes | |||
# Сборочница | |||
Host gyle | |||
HostName gyle.altlinux.org | |||
User alt_USERNAME # а не просто USERNAME! | |||
Port 222 | |||
# Через прокси | |||
#ProxyCommand netcat -X connect -x proxy:3128 %h %p | |||
#Port 443 | |||
</source> | |||
Для работы с <tt>gitery</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>: | |||
$ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>" | $ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>" | ||
$ git config --global user.email "<ваш email, как мантейнера>" | $ git config --global user.email "<ваш email, как мантейнера>" | ||
Строка 42: | Строка 88: | ||
$ 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>: | ||
< | <!--- | ||
$ ssh | $ ssh gitery help | ||
Available commands: | Available commands: | ||
help | help | ||
Строка 61: | Строка 109: | ||
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> ...} | ||
</ | --> | ||
<source lang=bash> | |||
$ ssh gitery 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> | |||
$ ssh gyle help | |||
Available commands: | |||
help | |||
build {--help | [options] <arguments> ... | |||
task {--help | <command> [options] ... | |||
acl {--help | <arguments> ...} | |||
quota | |||
</source> | |||
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда. | Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда. | ||
<!-- please don't remove -- there are links to #git etc --> | <!-- please don't remove -- there are links to #git etc --> | ||
<div id="git"></div> | <div id="git"></div> | ||
== Управление git-репозиториями == | |||
<div id="ls"></div> | <div id="ls"></div> | ||
==== ls ==== | ==== ls ==== | ||
'''$ ssh | '''$ ssh gitery ls [<directory>]''' | ||
Эта команда позволяет посмотреть содержимое различных директорий на <tt> | Эта команда позволяет посмотреть содержимое различных директорий на <tt>gitery</tt>: | ||
$ ssh | $ ssh gitery ls /people/dottedmag/public | ||
total 24 | total 24 | ||
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git | drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git | ||
Строка 83: | Строка 157: | ||
Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>: | Без параметров — показывает содержимое <tt>/people/$USERNAME</tt>: | ||
$ ssh | $ ssh gitery ls | ||
total 16 | total 16 | ||
drwxr-s--- 5 4096 May 30 21:27 etc | drwxr-s--- 5 4096 May 30 21:27 etc | ||
Строка 93: | Строка 167: | ||
От этой же директории отсчитываются относительные пути: | От этой же директории отсчитываются относительные пути: | ||
$ ssh | $ ssh gitery ls public | ||
total 24 | total 24 | ||
drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git | drwxr-sr-x 5 4096 Jun 13 10:22 bugzilla-repo-sync.git | ||
Строка 102: | Строка 176: | ||
==== find-package ==== | ==== find-package ==== | ||
'''$ ssh | '''$ ssh gitery find-package <pattern>''' | ||
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там. | Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — <tt>*</tt>. Репозитории ищутся в директории <tt>packages</tt> каждого пользователя, поскольку предполагается, что <tt>[[gear]]</tt>-репозитории располагаются именно там. | ||
$ ssh | $ ssh gitery find-package 'glibc*' | ||
/people/avm/packages/glibc.git 1216320095 | /people/avm/packages/glibc.git 1216320095 | ||
... | ... | ||
/people/peet/packages/glibc-kernheaders.git 1177084354 | /people/peet/packages/glibc-kernheaders.git 1177084354 | ||
/people/mike/packages/glibc-kvercheck.git 1160664813 | /people/mike/packages/glibc-kvercheck.git 1160664813 | ||
$ ssh | $ ssh gitery find-package glibc | ||
/people/avm/packages/glibc.git 1216320095 | /people/avm/packages/glibc.git 1216320095 | ||
... | ... | ||
Строка 126: | Строка 200: | ||
==== clone ==== | ==== clone ==== | ||
'''$ ssh | '''$ ssh gitery clone <path to git repository> [<destination directory>]''' | ||
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним. При этом локальные клоны (из /people) задействуют хардлинки, экономя дисковое пространство, а также ваши квоту на | Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним. При этом локальные клоны (из /people) задействуют хардлинки, экономя дисковое пространство, а также ваши квоту на gitery и трафик до него. | ||
Без второго аргумента — клонирует в директорию <tt>packages</tt>: | Без второго аргумента — клонирует в директорию <tt>packages</tt>: | ||
$ ssh | $ ssh gitery clone /people/ldv/packages/glibc | ||
gitery-clone: /people/dottedmag/packages/glibc.git | |||
$ | $ | ||
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория: | Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория: | ||
$ ssh | $ ssh gitery clone /people/ldv/packages/glibc public/test | ||
gitery-clone: /people/dottedmag/public/test.git | |||
$ | |||
Помимо /people, можно клонировать локальные репозитории, размещённые в /gears и /srpms: | |||
$ ssh gitery clone /gears/s/strace | |||
gitery-clone: /people/dottedmag/packages/strace.git | |||
$ | $ | ||
Можно также | Можно также клонировать репозиторий, находящийся вне <tt>gitery</tt>: | ||
$ ssh | $ ssh gitery clone <nowiki>git://git.fedorahosted.org/chkconfig.git</nowiki> | ||
gitery-clone: /people/dottedmag/packages/chkconfig.git | |||
$ | $ | ||
<div id="init-db"></div> | <div id="init-db"></div> | ||
==== init-db ==== | ==== init-db ==== | ||
'''$ ssh | '''$ ssh gitery init-db <path to directory>''' | ||
Позволяет создать новый git-репозиторий. По умолчанию (при указании только имени репозитория) репозиторий создаётся в директории <tt>packages</tt>: | Позволяет создать новый git-репозиторий. По умолчанию (при указании только имени репозитория) репозиторий создаётся в директории <tt>packages</tt>: | ||
$ ssh | $ ssh gitery init-db test | ||
gitery-init-db: /people/dottedmag/packages/test.git | |||
При указании пути создаёт репозиторий по указанному пути: | При указании пути создаёт репозиторий по указанному пути: | ||
$ ssh | $ ssh gitery init-db public/test | ||
gitery-init-db: /people/dottedmag/public/test.git | |||
<div id="mv-db"></div> | <div id="mv-db"></div> | ||
==== mv-db ==== | ==== mv-db ==== | ||
'''$ ssh | '''$ ssh gitery mv-db <path to source directory> <path to destination directory>''' | ||
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>. | Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>. | ||
Перемещение packages/test.git в public/newname.git: | Перемещение packages/test.git в public/newname.git: | ||
$ ssh | $ ssh gitery mv-db test public/newname | ||
$ | $ | ||
Перемещение public/newname.git в packages/test.git: | Перемещение public/newname.git в packages/test.git: | ||
$ ssh | $ ssh gitery mv-db public/newname test | ||
$ | $ | ||
Переименовывание packages/test.git в packages/megatest.git: | Переименовывание packages/test.git в packages/megatest.git: | ||
$ ssh | $ ssh gitery mv-db test megatest | ||
$ | $ | ||
<div id="rm-db"></div> | <div id="rm-db"></div> | ||
==== rm-db ==== | ==== rm-db ==== | ||
'''$ ssh | '''$ ssh gitery rm-db <path to git repository>''' | ||
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>: | Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория <tt>packages</tt>: | ||
$ ssh | $ ssh gitery rm-db megatest # удаляет packages/megatest.git | ||
$ ssh | $ ssh gitery rm-db public/test | ||
<div id="acl"></div> | <div id="acl"></div> | ||
=== Управление ACL пакетов === | === Управление ACL пакетов === | ||
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.'' | ''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.'' | ||
Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. Список доступных репозиториев можно узнать у <tt> | Команда <tt>acl</tt> требует указания репозитория, над которым производится работа. Список доступных репозиториев можно узнать у <tt>gyle</tt>: | ||
$ ssh | $ ssh gyle acl --help | ||
This is ACL (Approve Control List) management interface. | |||
Usage: girar-acl --list | Usage: girar-acl --list | ||
or: girar-acl <repository> [{<package>|@<group>} {check|show}] | or: girar-acl <repository> [{<package>|@<group>} {check|show}] | ||
or: girar-acl <repository> [{<package>|@<group>} {add|del|leader|replace} {<login>|@<group>}...] | or: girar-acl <repository> [{<package>|@<group>} {add|del|leader|replace} {<login>|@<group>}...] | ||
or: girar-acl <repository> | or: girar-acl <repository> | ||
Valid repositories are: | |||
Valid repositories are: c7 c8.1 p8 p9 sisyphus | |||
If no package is given, read commands from stdin, one command per line. | If no package is given, read commands from stdin, one command per line. | ||
See | See https://www.altlinux.org/Incoming/acl for details. | ||
$ | $ | ||
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд: | Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд: | ||
$ ssh | $ ssh gyle 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: | Строка 299: | ||
==== acl show ==== | ==== acl show ==== | ||
'''$ ssh | '''$ ssh gyle acl <binary repository> <package> show''' | ||
Показывает ACL указанного пакета | Показывает ACL указанного пакета | ||
$ ssh gyle acl sisyphus aMule show | |||
$ ssh | |||
aMule oddity @qa @everybody | aMule oddity @qa @everybody | ||
'''$ ssh | '''$ ssh gyle acl <binary repository> @<group> show''' | ||
Показывает состав указанной группы майнтайнеров. | Показывает состав указанной группы майнтайнеров. | ||
$ ssh | $ ssh gyle 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 | '''$ ssh gyle acl <binary repository> <package> check''' | ||
Проверяет ACL указанного пакета | Проверяет ACL указанного пакета | ||
$ ssh | $ ssh gyle 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 | '''$ ssh gyle acl <binary repository> <package> add|del <login>|@<group> ... | ||
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета. | Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета. | ||
'''$ ssh | '''$ ssh gyle acl sisyphus keyjnote add damir''' | ||
< keyjnote add damir | < keyjnote add damir | ||
> OK: keyjnote: dottedmag damir | > OK: keyjnote: dottedmag damir | ||
girar-acl: 1 command(s) queued | girar-acl: 1 command(s) queued | ||
'''$ ssh | '''$ ssh gyle acl sisyphus keyjnote del damir''' | ||
< keyjnote del damir | < keyjnote del damir | ||
> OK: keyjnote: dottedmag | > OK: keyjnote: dottedmag | ||
girar-acl: 1 command(s) queued | girar-acl: 1 command(s) queued | ||
'''$ ssh | '''$ ssh gyle acl <binary repository> @<group> add|del <login>|@<group> ... | ||
Добавляет/удаляет указанных пользователей и группы в/из указанной группы. | Добавляет/удаляет указанных пользователей и группы в/из указанной группы. | ||
'''$ ssh | '''$ ssh gyle 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 | '''$ ssh gyle 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 | ||
Строка 267: | Строка 347: | ||
==== acl replace ==== | ==== acl replace ==== | ||
'''$ ssh | '''$ ssh gyle acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>''' | ||
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную. | Заменяет указанную запись в ACL пакета или составе группы на вторую указанную. | ||
$ ssh | $ ssh gyle 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 | '''$ ssh gyle acl <binary repository> <package> leader <login>|@<group> | ||
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды. | Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды. | ||
$ ssh | $ ssh gyle acl sisyphus keyjnote leader @python | ||
'''$ ssh | '''$ ssh gyle acl <binary repository> @<group> leader <login>|@<group> | ||
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды. | Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды. | ||
$ ssh | $ ssh gyle acl sisyphus @python leader ns | ||
<div id="build_tasks"></div> | <div id="build_tasks"></div> | ||
== Сборка пакетов == | |||
Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов. | Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов. | ||
Строка 292: | Строка 373: | ||
==== task ==== | ==== task ==== | ||
'''$ ssh | '''$ ssh gyle task ls [--all]''' | ||
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br /> | Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br /> | ||
С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей. | С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей. | ||
'''$ ssh | '''$ ssh gyle task show [<task_id>]''' | ||
Показывает содержимое указанного (по умолчанию последнего созданного) задания. | Показывает содержимое указанного (по умолчанию последнего созданного) задания. | ||
'''$ ssh | '''$ ssh gyle task new [<binary_repository_name>]''' | ||
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br /> | Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br /> | ||
Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br /> | Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br /> | ||
По умолчанию задание создаётся в тестовом режиме (см. описание опции <tt>--commit</tt> ниже).<br /> | |||
Данная команда выводит идентификатор задания на stdout. | Данная команда выводит идентификатор задания на stdout. | ||
'''$ ssh | '''$ ssh gyle task add [<task_id> [<before_subtask_id>]] repo <gear_repo> <gear_tag>''' | ||
Добавляет в задание пакет, который необходимо собрать.<br /> | Добавляет в задание пакет, который необходимо собрать.<br /> | ||
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git- | Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тега.<br /> | ||
По умолчанию новые подзадания добавляются в конец списка подзаданий, с шагом 0100 (восьмеричное 100). Новое подзадание, добавляемое перед подзаданием номер N, получает восьмеричный номер (K+N)/2, где K — это номер подзадания, идущего непосредственно перед подзаданием номер N<ref>http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html</ref>. | Вместе с указанным git-тегом из gear-репозитория выкачиваются все теги, помечающие достижимые из указанного тега коммиты. | ||
'''$ ssh | По умолчанию новые подзадания добавляются в конец списка подзаданий, с шагом 0100 (восьмеричное 100, или десятичное 64). Новое подзадание, добавляемое перед подзаданием номер N, получает восьмеричный номер (K+N)/2, где K — это номер подзадания, идущего непосредственно перед подзаданием номер N<ref>http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html</ref>. | ||
'''$ ssh gyle task add [<task_id> [<before_subtask_id>]] srpm <srpm file>''' | |||
Добавляет в задание пакет, который необходимо собрать.<br /> | Добавляет в задание пакет, который необходимо собрать.<br /> | ||
Пакет определяется именем предварительно отправленного на сервер путём ''rsync | Пакет определяется именем предварительно отправленного на сервер путём ''rsync'' srpm-файла (Пример: <code>rsync grace-5.1.22-alt6.src.rpm girar:</code>). | ||
'''$ ssh | '''$ ssh gyle task add [<task_id> [<before_subtask_id>]] copy <package> [<binary_repository_name>]''' | ||
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus). | Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus). | ||
Параметры: | Параметры: | ||
* '''package''' — имя пакета (без версии, релиза и расширения). | * '''package''' — имя пакета (без версии, релиза и расширения). | ||
'''$ ssh | '''$ ssh gyle task add [<task_id> [<before_subtask_id>]] del <package>''' | ||
Добавляет в задание имя пакета, который необходимо удалить из репозитория. | Добавляет в задание имя пакета, который необходимо удалить из репозитория. | ||
'''$ ssh | '''$ ssh gyle task add [<task_id> [<before_subtask_id>]] rebuild <package>''' | ||
Добавляет в задание имя пакета, который необходимо пересобрать. | Добавляет в задание имя пакета, который необходимо пересобрать. | ||
Эта операция реализована только для тех пакетов, которые были собраны из git-репозиториев. | Эта операция реализована только для тех пакетов, которые были собраны из git-репозиториев. | ||
'''$ ssh | '''$ ssh gyle task add [<task_id>] kmodules <kflavour>''' | ||
Добавляет в задание подзадания по пересборке всех актуальных модулей для указанного ядра. | Добавляет в задание подзадания по пересборке всех актуальных модулей для указанного ядра. | ||
Эта операция имеет смысл только для модулей, которые были собраны из git-репозиториев с использованием gear specsubst. | Эта операция имеет смысл только для модулей, которые были собраны из git-репозиториев с использованием gear specsubst. | ||
'''$ ssh | '''$ ssh gyle task delsub <task_id> <subtask_id>''' | ||
Удаляет из указанного задания подзадание с указанным номером. | Удаляет из указанного задания подзадание с указанным номером. | ||
'''$ ssh | '''$ ssh gyle task deps [<task_id>] show''' | ||
Показывает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | Показывает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | ||
'''$ ssh | '''$ ssh gyle task deps [<task_id>] clear''' | ||
Очищает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | Очищает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | ||
'''$ ssh | '''$ ssh gyle task deps [<task_id>] add <required task id1> ...''' | ||
Добавляет перечисленные задания в список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | Добавляет перечисленные задания в список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | ||
'''$ ssh | '''$ ssh gyle task deps [<task_id>] del <required task id1> ...''' | ||
Удаляет указанные задания из списка заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | Удаляет указанные задания из списка заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | ||
'''$ ssh | '''$ ssh gyle task deps [<task_id>] set <required task id1> ...''' | ||
Задает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | Задает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание. | ||
'''$ ssh | |||
'''<nowiki>$ ssh gyle task run [[--test-only|--commit]|[--hurry|--unhurry]] [--fail-early|--fail-late] [<task_id>]</nowiki>''' | |||
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br /> | Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<br /> | ||
Если задан опциональный параметр --test-only, то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка | Если ''не'' задан опциональный параметр <code>--commit</code> (либо явно заданы <code>--test-only</code> или <code>--hurry</code>), то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка; с опцией <code>--hurry</code> — ещё и без пересборки подзаданий в новой сборочной среде, что может ускорить получение отчёта о тесте, но и исказить его результаты).<br /> | ||
Задание, отправленное на выполнение, начинает обрабатываться только после того, как успешно завершена обработка всех заданий, от которых оно зависит.<br /> | Задание, отправленное на выполнение, начинает обрабатываться только после того, как успешно завершена обработка всех заданий, от которых оно зависит.<br /> | ||
При сбое сборки на одной из архитектур поведение задания регулируется параметрами <code>--fail-early</code> (по умолчанию) либо <code>--fail-late</code>: в первом случае сборка задания будет при первой возможности прервана на ''всех'' архитектурах после первого же сбоя сборки подзадания на ''любой'' архитектуре; во втором архитектуры собираются независимо, но при наличии хотя бы одного сбоя сборки на ''любой'' из них задание в целом будет признано неудачным после завершения сборки на ''всех'' архитектурах. Кроме того, если установлен атрибут fail-early, то install check заканчивается после первой неудачи.<br /> | |||
Задания, успешно собравшиеся в репозиторий (со статусом обработки <tt>DONE</tt>), архивируются сразу по окончании обработки<ref>NB: делитель для вычисления префикса в архиве по номеру задания составляет в данный момент 1024</ref>.<br /> | Задания, успешно собравшиеся в репозиторий (со статусом обработки <tt>DONE</tt>), архивируются сразу по окончании обработки<ref>NB: делитель для вычисления префикса в архиве по номеру задания составляет в данный момент 1024</ref>.<br /> | ||
Остальные задания автоматически архивируются через | Остальные задания автоматически архивируются через установленное количество суток после завершения обработки (раньше: 14; сейчас: 28). | ||
'''$ ssh | '''$ ssh gyle 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 | '''$ ssh gyle task approve <task_id> <subtask_id>''' | ||
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br /> | Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br /> | ||
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU). | Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).<br /> | ||
'''$ ssh | Для отзыва выданного подтверждения применяется форма <code>task approve --revoke</code>. | ||
'''$ ssh gyle 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 | |||
'''$ ssh gyle task check-lastchange-inheritance <task_id> <subtask_number> disable <lastchange EVR>''' | |||
Для подзадания с номером <tt><subtask_number></tt>, входящего в состав задания <tt><task_id></tt>, | |||
выключается обязательность проверки наличия предыдущей записи changelog <lastchange EVR>.<br /> | |||
Используется при необходимости осознанного обхода проверки наследования. | |||
'''$ ssh gyle task rm [<task_id>]''' | |||
Удаляет указанное (по умолчанию последнее созданное) задание. | Удаляет указанное (по умолчанию последнее созданное) задание. | ||
'''$ ssh | '''$ ssh gyle task abort <task_id>''' | ||
Досрочно прерывает обработку указанного задания.<br /> | Досрочно прерывает обработку указанного задания.<br /> | ||
Если задание еще не находится на обработке, то оно снимается с очереди на обработку сразу.<br /> | Если задание еще не находится на обработке, то оно снимается с очереди на обработку сразу.<br /> | ||
Строка 360: | Строка 451: | ||
Пример: | Пример: | ||
$ ssh | $ ssh gyle task ls | ||
girar-task ls: no tasks for ldv | girar-task ls: no tasks for ldv | ||
$ ssh | $ ssh gyle task new | ||
1234 | 1234 | ||
new task #1234: owner=ldv repo=sisyphus | new task #1234: owner=ldv repo=sisyphus | ||
$ ssh | $ ssh gyle task ls | ||
#1234 NEW sisyphus | #1234 NEW sisyphus | ||
$ ssh | $ ssh gyle 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 | $ ssh gyle 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 | $ ssh gyle 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 | ||
Строка 378: | Строка 469: | ||
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 | $ ssh gyle 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 | $ ssh gyle task ls | ||
#1234 AWAITING sisyphus vitmp.git=1.0-alt4 | #1234 AWAITING sisyphus vitmp.git=1.0-alt4 | ||
через некоторое время вывод последней команды изменится на | через некоторое время вывод последней команды изменится на | ||
Строка 388: | Строка 479: | ||
(или TESTED, если сборка тестовая) | (или TESTED, если сборка тестовая) | ||
<div id="build"></div> | <div id="build"></div> | ||
==== build ==== | ==== build ==== | ||
'''$ ssh | '''$ ssh gyle build [--test-only|--commit] [--fail-early|--fail-late] [-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>. | ||
последовательно запуская < | |||
Параметр ''binary repository name'' имеет тот же смысл, что и в команде < | Параметр ''binary repository name'' имеет тот же смысл, что и в команде <code>task new</code>. | ||
Параметр ''deps'' имеет тот же смысл, что и в команде < | |||
Параметры ''build source N'' и ''build name N'' имеют тот же смысл, что и в команде < | Параметр ''deps'' имеет тот же смысл, что и в команде <code>task deps</code>. | ||
Параметры ''build source N'' и ''build name N'' имеют тот же смысл, что и в команде <code>task add</code>. | |||
Параметры <code>--test-only</code>, <code>--commit</code>, <code>--fail-early</code>, <code>--fail-late</code> имеют тот же смысл, что и в команде <code>task run</code>. | |||
Примеры: | |||
# сборка пакета в Сизиф | |||
$ ssh gyle build packages/test.git test-0.1-alt1 | |||
# копирование пакета из Сизифа | |||
$ ssh gyle build -b t6 copy update-kernel | |||
# удаление пакета | |||
$ ssh gyle build -b t6 del linuxwacom | |||
<div id="reports"></div> | <div id="reports"></div> | ||
==== Отчёты о сборке ==== | ==== Отчёты о сборке ==== | ||
Строка 407: | Строка 513: | ||
Наиболее интересные файлы: | Наиболее интересные файлы: | ||
; <id>/ | ; <id>/logs/ | ||
: | : краткие логи сборки | ||
; <id>/build/<sid>/<arch>/srpm.log | ; <id>/build/<sid>/<arch>/srpm.log | ||
: лог сборки подзадачи для архитектуры <arch> | : лог подготовки сборки подзадачи для архитектуры <arch> | ||
; <id>/build/<sid>/<arch>/log | ; <id>/build/<sid>/<arch>/log | ||
: лог сборки подзадачи для архитектуры <arch> | : лог сборки подзадачи для архитектуры <arch> | ||
; <id>/gears/<sid> | ; <id>/gears/<sid> | ||
: информация о подзадаче <sid>, если сборка производилась | : информация о подзадаче <sid>, если сборка производилась из gear-репозитория | ||
; <id>/gears/<sid>/git | ; <id>/gears/<sid>/git | ||
: частичный git-репозиторий, на основании которго собиралась подзадача <sid> | : частичный git-репозиторий, на основании которго собиралась подзадача <sid> | ||
Строка 423: | Строка 529: | ||
степени доступно и по rsync. | степени доступно и по rsync. | ||
=== Вспомогательные команды | ==== Лимиты сборочницы ==== | ||
См. [[Hasher/Справочник#Лимиты на сборку у инкамингера]]. | |||
== Вспомогательные команды == | |||
<div id="charset"></div> | <div id="charset"></div> | ||
==== charset ==== | ==== charset ==== | ||
'''$ ssh | '''$ ssh gitery charset <path to git repository> [<charset>]''' | ||
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория: | Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория: | ||
$ ssh | $ ssh gitery charset packages/glibc | ||
utf-8 | utf-8 | ||
$ ssh | $ ssh gitery charset packages/glibc cp1252 | ||
$ ssh | $ ssh gitery charset packages/glibc | ||
cp1252 | cp1252 | ||
$ | $ | ||
<div id="quota"></div> | <div id="quota"></div> | ||
==== quota ==== | ==== quota ==== | ||
'''$ ssh | '''$ ssh gitery quota''' | ||
'''$ ssh gyle quota''' | |||
Позволяет узнать квоту и занимаемое пользователем дисковое пространство. | Позволяет узнать квоту и занимаемое пользователем дисковое пространство. | ||
$ ssh | $ ssh gitery quota | ||
Filesystem blocks quota limit grace files quota limit grace | Filesystem blocks quota limit grace files quota limit grace | ||
/dev/simfs 16932 977M 1465M 555 100k 150k | /dev/simfs 16932 977M 1465M 555 100k 150k | ||
Строка 455: | Строка 567: | ||
=== Клонирование и работа с репозиториями === | === Клонирование и работа с репозиториями === | ||
Работа с git-репозиториями, расположенными на <tt> | Работа с git-репозиториями, расположенными на <tt>gitery</tt>, ничем не отличается от работы с другими git-репозиториями. | ||
URL-ы репозиториев на | URL-ы репозиториев на gitery: | ||
; '''git''' (r/o) | ; '''git''' (r/o) | ||
: <tt>git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</tt> | : <tt><nowiki>git://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt> | ||
; '''rsync''' (r/o) | ; '''rsync''' (r/o) | ||
: <tt>git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git</tt> | : <tt><nowiki>git.altlinux.org::people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt> | ||
; '''http''' (r/o) | ; '''http/https''' (r/o) | ||
: <tt><nowiki>http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt> | : <tt><nowiki>http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt> | ||
или | |||
: <tt><nowiki>https://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git</nowiki></tt> | |||
; '''ssh''' (r/w) | ; '''ssh''' (r/w) | ||
: <tt>ssh:// | : <tt><nowiki>ssh://gitery:/people/$USER/(etc|packages|public|private)/$PACKAGE.git</nowiki></tt> | ||
При этом хост <code>gitery</code> должен быть описан в <code>~/.ssh/config</code> так, как указано в статье [[Git.alt/Справочник#SSH-доступ]]. | |||
URL-ы http:// и git:// репозиториев можно в любой момент узнать в [http://git.altlinux.org web-интерфейсе] <tt>git.alt</tt>. | |||
Внимание! Пустые (только что созданные через init-db) репозитории через http/https склонировать нельзя (но можно через ssh), см. [https://bugzilla.altlinux.org/42073 соответствующий багрепорт]. | |||
=== Web-интерфейс === | === Web-интерфейс === | ||
Строка 484: | Строка 602: | ||
== Структура репозиториев == | == Структура репозиториев == | ||
<tt> | <tt>gitery</tt> содержит три дерева репозиториев: | ||
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя | * репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя | ||
Строка 518: | Строка 636: | ||
=== /gears === | === /gears === | ||
В эту директорию помещаются gear-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt> | В эту директорию помещаются gear-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>gyle</tt> <tt>task</tt> или <tt>build</tt>. | ||
Каждый git-репозиторий в <tt>/gears</tt> назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (<tt>sisyphus</tt>, <tt>t6</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> и т.д.). | ||
Строка 524: | Строка 642: | ||
=== /srpms === | === /srpms === | ||
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных из | В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных из вручную подготовленных мейнтейнером SRPM-пакетов. | ||
<div id="email"></div> | <div id="email"></div> | ||
Строка 532: | Строка 648: | ||
== Почтовая подписка == | == Почтовая подписка == | ||
На <tt> | На <tt>gitery</tt> реализовано два вида почтовой подписки на события: | ||
* Пользователь подписывается на события, происходящие в репозиториях <tt>packages</tt> и <tt>public</tt>. | * Пользователь подписывается на события, происходящие в репозиториях <tt>packages</tt> и <tt>public</tt>. | ||
* Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>packages</tt>, <tt>public</tt> и <tt>private</tt>. | * Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>packages</tt>, <tt>public</tt> и <tt>private</tt>. | ||
Строка 538: | Строка 654: | ||
Для подписки используются репозитории из каталога <tt>etc</tt>: <tt>packages.git</tt>, <tt>public.git</tt>, <tt>private.git</tt> в каталоге пользователя. Схема работы с подписками напоминает работу с <tt>CVSROOT</tt> из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу. | Для подписки используются репозитории из каталога <tt>etc</tt>: <tt>packages.git</tt>, <tt>public.git</tt>, <tt>private.git</tt> в каталоге пользователя. Схема работы с подписками напоминает работу с <tt>CVSROOT</tt> из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу. | ||
В каждом из трёх репозиториев находится два файла: <tt>email-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> — только <tt>email-distribution</tt>). <tt> | В каждом из трёх репозиториев находится два файла: <tt>email-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> — только <tt>email-distribution</tt>). | ||
<tt>gitery</tt> использует бранч <tt>master</tt> и не обращает внимания на остальные бранчи в этих репозиториях. | |||
=== email-subscription === | === email-subscription === | ||
Этот файл позволяет подписаться на события в публичных репозиториях <tt> | Этот файл позволяет подписаться на события в публичных репозиториях <tt>gitery</tt>. Формат файла — последовательность строк следующего вида: | ||
$USER $PACKAGE $REFTYPE $REFNAME | $USER $PACKAGE $REFTYPE $REFNAME | ||
где | где | ||
Строка 559: | Строка 676: | ||
ldv glibc tag * | ldv glibc tag * | ||
Действия для осуществления подписки: | Действия для осуществления подписки: | ||
git clone | git clone gitery:etc/packages.git | ||
cd packages | cd packages | ||
echo 'ldv glibc tag *' >> email-subscription | echo 'ldv glibc tag *' >> email-subscription | ||
Строка 567: | Строка 684: | ||
=== email-distribution === | === email-distribution === | ||
Этот файл позволяет подписать других пользователей <tt> | Этот файл позволяет подписать других пользователей <tt>gitery</tt> на события в ваших репозиториях. Формат файла — последовательность строк вида: | ||
$PACKAGE $REFTYPE $REFNAME $MAILTO | $PACKAGE $REFTYPE $REFNAME $MAILTO | ||
где | где | ||
* $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription | * $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription | ||
* $MAILTO — разделённый запятыми список имён пользователей <tt> | * $MAILTO — разделённый запятыми список имён пользователей <tt>gitery</tt> — получателей оповещения. | ||
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются. | Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются. | ||
==Примечания== | |||
{{Примечания}} | |||
<references /> | <references /> | ||
== Ссылки == | |||
=== Для начинающих мантейнеров: === | |||
* [[Git| Всё о GIT, со слов ldv@]] | |||
* [http://www.tldp.org/HOWTO/RPM-HOWTO/ RPM-HOWTO] | |||
* [https://www.opennet.ru/docs/HOWTO-RU/RPM-HOWTO-48.html RPM-HOWTO перевод на русский] | |||
* [[Spec|Руководство по написанию спек файла для rpm]] | |||
{{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=git.alt|category=git.alt|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 19:23, 10 февраля 2024
Эта страница документирует команды 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 выдаётся после принятия в ALT Linux Team.
Функции серверов сборки git.alt
Функции между этими серверами разделены следующим образом:
- gitery.altlinux.org
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>
- gyle.altlinux.org
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
gitery.altlinux.org доступен по SSH по адресу gitery.altlinux.org:222
и gitery.altlinux.org:443
, gyle.altlinux.org — gyle.altlinux.org:222
и gyle.altlinux.org:443
. Аккаунт для доступа — alt_$USERNAME, где USERNAME — имя, присвоенное в процессе принятия в Team, с символами «-» заменёнными на «_». Обратите внимание: префикс alt_
обязателен! Порт 443 можно использовать в случае, когда выход в интернет осуществляется только через прокси[1].
SSH-доступ
Для ssh доступа, надо отредактировать файл $HOME/.ssh/config
Пример ~/.ssh/config[2]:
# Гитовница
Host gitery
HostName gitery.altlinux.org
User alt_USERNAME # а не просто USERNAME!
Port 222
# Через прокси
#ProxyCommand netcat -X connect -x proxy:3128 %h %p
#Port 443
# if stored separately
#IdentityFile ~/.ssh/id_ed25519.alt
# и если openssh-7.* или новее + ключ dsa, непременно
#PubkeyAcceptedKeyTypes ssh-dss
# иначе будет ошибка not in PubkeyAcceptedKeyTypes
# Сборочница
Host gyle
HostName gyle.altlinux.org
User alt_USERNAME # а не просто USERNAME!
Port 222
# Через прокси
#ProxyCommand netcat -X connect -x proxy:3128 %h %p
#Port 443
Для работы с gitery необходимо настроить свой 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 gitery 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>
$ ssh gyle help
Available commands:
help
build {--help | [options] <arguments> ...
task {--help | <command> [options] ...
acl {--help | <arguments> ...}
quota
Во всех командах суффикс директорий репозиториев .git опционален и может быть опущен. В выводе команд .git присутствует всегда.
Управление git-репозиториями
ls
$ ssh gitery ls [<directory>]
Эта команда позволяет посмотреть содержимое различных директорий на gitery:
$ ssh gitery 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 gitery 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 gitery 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 gitery find-package <pattern>
Эта команда позволяет искать репозитории по переданному шаблону. Единственный метасимвол, допустимый в шаблоне — *. Репозитории ищутся в директории packages каждого пользователя, поскольку предполагается, что gear-репозитории располагаются именно там.
$ ssh gitery find-package 'glibc*' /people/avm/packages/glibc.git 1216320095 ... /people/peet/packages/glibc-kernheaders.git 1177084354 /people/mike/packages/glibc-kvercheck.git 1160664813 $ ssh gitery 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 gitery clone <path to git repository> [<destination directory>]
Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним. При этом локальные клоны (из /people) задействуют хардлинки, экономя дисковое пространство, а также ваши квоту на gitery и трафик до него.
Без второго аргумента — клонирует в директорию packages:
$ ssh gitery clone /people/ldv/packages/glibc gitery-clone: /people/dottedmag/packages/glibc.git $
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория:
$ ssh gitery clone /people/ldv/packages/glibc public/test gitery-clone: /people/dottedmag/public/test.git $
Помимо /people, можно клонировать локальные репозитории, размещённые в /gears и /srpms:
$ ssh gitery clone /gears/s/strace gitery-clone: /people/dottedmag/packages/strace.git $
Можно также клонировать репозиторий, находящийся вне gitery:
$ ssh gitery clone git://git.fedorahosted.org/chkconfig.git gitery-clone: /people/dottedmag/packages/chkconfig.git $
init-db
$ ssh gitery init-db <path to directory>
Позволяет создать новый git-репозиторий. По умолчанию (при указании только имени репозитория) репозиторий создаётся в директории packages:
$ ssh gitery init-db test gitery-init-db: /people/dottedmag/packages/test.git
При указании пути создаёт репозиторий по указанному пути:
$ ssh gitery init-db public/test gitery-init-db: /people/dottedmag/public/test.git
mv-db
$ ssh gitery mv-db <path to source directory> <path to destination directory>
Позволяет перемещать и переименовывать свои репозитории. При указании только имени репозитория подразумевается директория packages.
Перемещение packages/test.git в public/newname.git:
$ ssh gitery mv-db test public/newname $
Перемещение public/newname.git в packages/test.git:
$ ssh gitery mv-db public/newname test $
Переименовывание packages/test.git в packages/megatest.git:
$ ssh gitery mv-db test megatest $
rm-db
$ ssh gitery rm-db <path to git repository>
Позволяет удалять свои репозитории. При указании только имени репозитория подразумевается директория packages:
$ ssh gitery rm-db megatest # удаляет packages/megatest.git $ ssh gitery rm-db public/test
Управление ACL пакетов
Смотри ACL для общей информации об ACL пакетов в Sisyphus.
Команда acl требует указания репозитория, над которым производится работа. Список доступных репозиториев можно узнать у gyle:
$ ssh gyle acl --help This is ACL (Approve Control List) management interface. 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: c7 c8.1 p8 p9 sisyphus If no package is given, read commands from stdin, one command per line. See https://www.altlinux.org/Incoming/acl for details. $
Если в командной строке указан только репозиторий, но не указана подкоманда, то список команд читается со стандартного ввода, по одной команде на строку, и выполняется тразакционно: ошибка в выполнении хотя бы одной команды отменяет действие всего набора команд:
$ ssh gyle 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 gyle acl <binary repository> <package> show
Показывает ACL указанного пакета
$ ssh gyle acl sisyphus aMule show aMule oddity @qa @everybody
$ ssh gyle acl <binary repository> @<group> show
Показывает состав указанной группы майнтайнеров.
$ ssh gyle acl sisyphus @python show @python ns ldv george akhavr bga lav swi at hiddenman sin mithraen kas
acl check
$ ssh gyle acl <binary repository> <package> check
Проверяет ACL указанного пакета
$ ssh gyle acl sisyphus bugzilla check girar-check-perms: access to bugzilla ALLOWED for ldv: project is orphaned
acl add/del
$ ssh gyle acl <binary repository> <package> add|del <login>|@<group> ...
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета.
$ ssh gyle acl sisyphus keyjnote add damir < keyjnote add damir > OK: keyjnote: dottedmag damir girar-acl: 1 command(s) queued $ ssh gyle acl sisyphus keyjnote del damir < keyjnote del damir > OK: keyjnote: dottedmag girar-acl: 1 command(s) queued
$ ssh gyle acl <binary repository> @<group> add|del <login>|@<group> ...
Добавляет/удаляет указанных пользователей и группы в/из указанной группы.
$ ssh gyle 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 gyle 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 gyle acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную.
$ ssh gyle acl sisyphus keyjnote replace dottedmag @python
Заменяет в ACL пакета keyjnote запись dottedmag на @python.
acl leader
$ ssh gyle acl <binary repository> <package> leader <login>|@<group>
Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды.
$ ssh gyle acl sisyphus keyjnote leader @python
$ ssh gyle acl <binary repository> @<group> leader <login>|@<group>
Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды.
$ ssh gyle acl sisyphus @python leader ns
Сборка пакетов
Для сборки пакетов используется механизм заданий — пользователь указывает, какие gear-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов.
task
$ ssh gyle task ls [--all]
Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.
С указанием параметра --all показывает список заданий всех пользователей.
$ ssh gyle task show [<task_id>]
Показывает содержимое указанного (по умолчанию последнего созданного) задания.
$ ssh gyle task new [<binary_repository_name>]
Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).
Список репозиториев можно узнать с помощью task new --help.
По умолчанию задание создаётся в тестовом режиме (см. описание опции --commit ниже).
Данная команда выводит идентификатор задания на stdout.
$ ssh gyle task add [<task_id> [<before_subtask_id>]] repo <gear_repo> <gear_tag>
Добавляет в задание пакет, который необходимо собрать.
Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тега.
Вместе с указанным git-тегом из gear-репозитория выкачиваются все теги, помечающие достижимые из указанного тега коммиты.
По умолчанию новые подзадания добавляются в конец списка подзаданий, с шагом 0100 (восьмеричное 100, или десятичное 64). Новое подзадание, добавляемое перед подзаданием номер N, получает восьмеричный номер (K+N)/2, где K — это номер подзадания, идущего непосредственно перед подзаданием номер N[3].
$ ssh gyle task add [<task_id> [<before_subtask_id>]] srpm <srpm file>
Добавляет в задание пакет, который необходимо собрать.
Пакет определяется именем предварительно отправленного на сервер путём rsync srpm-файла (Пример: rsync grace-5.1.22-alt6.src.rpm girar:
).
$ ssh gyle task add [<task_id> [<before_subtask_id>]] copy <package> [<binary_repository_name>]
Добавляет в задание имя пакета, который необходимо скопировать из другого репозитория пакетов (по умолчанию — Sisyphus).
Параметры:
- package — имя пакета (без версии, релиза и расширения).
$ ssh gyle task add [<task_id> [<before_subtask_id>]] del <package>
Добавляет в задание имя пакета, который необходимо удалить из репозитория.
$ ssh gyle task add [<task_id> [<before_subtask_id>]] rebuild <package>
Добавляет в задание имя пакета, который необходимо пересобрать. Эта операция реализована только для тех пакетов, которые были собраны из git-репозиториев.
$ ssh gyle task add [<task_id>] kmodules <kflavour>
Добавляет в задание подзадания по пересборке всех актуальных модулей для указанного ядра. Эта операция имеет смысл только для модулей, которые были собраны из git-репозиториев с использованием gear specsubst.
$ ssh gyle task delsub <task_id> <subtask_id>
Удаляет из указанного задания подзадание с указанным номером.
$ ssh gyle task deps [<task_id>] show
Показывает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
$ ssh gyle task deps [<task_id>] clear
Очищает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
$ ssh gyle task deps [<task_id>] add <required task id1> ...
Добавляет перечисленные задания в список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
$ ssh gyle task deps [<task_id>] del <required task id1> ...
Удаляет указанные задания из списка заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
$ ssh gyle task deps [<task_id>] set <required task id1> ...
Задает список заданий, от которых зависит указанное (по умолчанию последнее созданное) задание.
$ ssh gyle task run [[--test-only|--commit]|[--hurry|--unhurry]] [--fail-early|--fail-late] [<task_id>]
Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.
Если не задан опциональный параметр --commit
(либо явно заданы --test-only
или --hurry
), то финальное выкладывание собранного в репозиторий не производится (т.н. тестовая сборка; с опцией --hurry
— ещё и без пересборки подзаданий в новой сборочной среде, что может ускорить получение отчёта о тесте, но и исказить его результаты).
Задание, отправленное на выполнение, начинает обрабатываться только после того, как успешно завершена обработка всех заданий, от которых оно зависит.
При сбое сборки на одной из архитектур поведение задания регулируется параметрами --fail-early
(по умолчанию) либо --fail-late
: в первом случае сборка задания будет при первой возможности прервана на всех архитектурах после первого же сбоя сборки подзадания на любой архитектуре; во втором архитектуры собираются независимо, но при наличии хотя бы одного сбоя сборки на любой из них задание в целом будет признано неудачным после завершения сборки на всех архитектурах. Кроме того, если установлен атрибут fail-early, то install check заканчивается после первой неудачи.
Задания, успешно собравшиеся в репозиторий (со статусом обработки DONE), архивируются сразу по окончании обработки[4].
Остальные задания автоматически архивируются через установленное количество суток после завершения обработки (раньше: 14; сейчас: 28).
$ ssh gyle task share [<task_id>] status|enabled|disabled
Показывает или изменяет режим доступа к указанному (по умолчанию последнему созданному) заданию.
Задание с режимом доступа share enabled может быть дополнено другими пользователями с помощью команды task add.
По умолчанию задания создаются в режиме доступа share disabled.
$ ssh gyle task approve <task_id> <subtask_id>
Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.
Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU).
Для отзыва выданного подтверждения применяется форма task approve --revoke
.
$ ssh gyle task check-git-inheritance <task_id> <subtask_number> disable <commit_sha_id>
Для подзадания с номером <subtask_number>, входящего в состав задания <task_id>,
выключается обязательность проверки наследования от git-коммита <commit_sha_id>.
Используется при необходимости осознанного обхода проверки наследования.
$ ssh gyle task check-lastchange-inheritance <task_id> <subtask_number> disable <lastchange EVR>
Для подзадания с номером <subtask_number>, входящего в состав задания <task_id>,
выключается обязательность проверки наличия предыдущей записи changelog <lastchange EVR>.
Используется при необходимости осознанного обхода проверки наследования.
$ ssh gyle task rm [<task_id>]
Удаляет указанное (по умолчанию последнее созданное) задание.
$ ssh gyle task abort <task_id>
Досрочно прерывает обработку указанного задания.
Если задание еще не находится на обработке, то оно снимается с очереди на обработку сразу.
В противном случае оно помечается как задание, обработку которого следует прервать при первой возможности.
Пример:
$ ssh gyle task ls girar-task ls: no tasks for ldv $ ssh gyle task new 1234 new task #1234: owner=ldv repo=sisyphus $ ssh gyle task ls #1234 NEW sisyphus $ ssh gyle task show id=1234 locked=no shared=no repo=sisyphus owner=ldv seq= rc= $ ssh gyle task add repo vitmp 1.0-alt4 task #1234: added #1 build tag 1.0-alt4 from /people/ldv/packages/vitmp.git $ ssh gyle 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 gyle task run task #1234: queued, result will be emailed to ldv@altlinux.org $ ssh gyle 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 gyle build [--test-only|--commit] [--fail-early|--fail-late] [-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
, --commit
, --fail-early
, --fail-late
имеют тот же смысл, что и в команде task run
.
Примеры:
# сборка пакета в Сизиф $ ssh gyle build packages/test.git test-0.1-alt1 # копирование пакета из Сизифа $ ssh gyle build -b t6 copy update-kernel # удаление пакета $ ssh gyle build -b t6 del linuxwacom
Отчёты о сборке
Информация о сборках публикуется по адресу http://git.altlinux.org/tasks/
Каждая поддиректория /tasks/ содержит информацию об одной сборочной задаче. Идентификатор задачи выдаётся при её создании и указывается в почтовых оповещениях.
Задача может состоять из нескольких подзадач. Информация о каждой подзадаче публиуется в директориях /tasks/<id>/build/<sid> и /tasks/<id>/gears/<sid>.
Наиболее интересные файлы:
- <id>/logs/
- краткие логи сборки
- <id>/build/<sid>/<arch>/srpm.log
- лог подготовки сборки подзадачи для архитектуры <arch>
- <id>/build/<sid>/<arch>/log
- лог сборки подзадачи для архитектуры <arch>
- <id>/gears/<sid>
- информация о подзадаче <sid>, если сборка производилась из gear-репозитория
- <id>/gears/<sid>/git
- частичный git-репозиторий, на основании которго собиралась подзадача <sid>
Более подробное описание структуры задания можно найти в документации на girar-builder.
Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной степени доступно и по rsync.
Лимиты сборочницы
См. Hasher/Справочник#Лимиты на сборку у инкамингера.
Вспомогательные команды
charset
$ ssh gitery charset <path to git repository> [<charset>]
Позволяет узнать или установить кодировку, используемую почтовым клиентом при отправке уведомлений, содержащих цитаты изменений файлов указанного git-репозитория:
$ ssh gitery charset packages/glibc utf-8 $ ssh gitery charset packages/glibc cp1252 $ ssh gitery charset packages/glibc cp1252 $
quota
$ ssh gitery quota $ ssh gyle quota
Позволяет узнать квоту и занимаемое пользователем дисковое пространство.
$ ssh gitery 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-репозиториями, расположенными на gitery, ничем не отличается от работы с другими git-репозиториями.
URL-ы репозиториев на gitery:
- 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/https (r/o)
- http://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git
или
- https://git.altlinux.org/people/$USER/(packages|public)/$PACKAGE.git
- ssh (r/w)
- ssh://gitery:/people/$USER/(etc|packages|public|private)/$PACKAGE.git
При этом хост gitery
должен быть описан в ~/.ssh/config
так, как указано в статье Git.alt/Справочник#SSH-доступ.
URL-ы http:// и git:// репозиториев можно в любой момент узнать в web-интерфейсе git.alt.
Внимание! Пустые (только что созданные через init-db) репозитории через http/https склонировать нельзя (но можно через ssh), см. соответствующий багрепорт.
Web-интерфейс
Располагается по адресу http://git.altlinux.org/
Предоставляет навигацию по
- публичным репозиториям пользователей (по каталогам вида /people/$USERNAME/{packages,public})
- кэширующим репозиториям /gears и /srpms
- базе данных ACL
- файлу people-packages-list, содержащий все репозитории из каталогов /people/$USERNAME/packages и даты их последнего изменения (в unixtime)
- сборочным заданиям
- логам тестовых пересборок Сизифа и бранчей
- статистике непересобираемости пакетов в Сизифе и бранчах
Структура репозиториев
gitery содержит три дерева репозиториев:
- репозитории /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 происходит после успешной сборки пакета с помощью команд gyle task или build.
Каждый git-репозиторий в /gears назван по имени пакета с исходным кодом. Бранчи в нём называются по имени ветки, в которую собрался пакет (sisyphus, t6 и т.д). Тэги в репозитории соответствуют собранным версиям пакетов (1.0-alt1, 1.0-alt0.M50.1 и т.д.).
/srpms
В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других стабильных веток, собранных из вручную подготовленных мейнтейнером SRPM-пакетов.
Почтовая подписка
На gitery реализовано два вида почтовой подписки на события:
- Пользователь подписывается на события, происходящие в репозиториях packages и public.
- Пользователь подписывает кого-то на события, происходящие в его репозиториях packages, public и private.
Для подписки используются репозитории из каталога etc: packages.git, public.git, private.git в каталоге пользователя. Схема работы с подписками напоминает работу с CVSROOT из CVS: пользователь клонирует нужный репозиторий, коммитит изменения в него и push-ит обратно на сервер, после чего изменения вступают в силу.
В каждом из трёх репозиториев находится два файла: email-subscription и email-distribution (точнее, в private.git — только email-distribution). gitery использует бранч master и не обращает внимания на остальные бранчи в этих репозиториях.
email-subscription
Этот файл позволяет подписаться на события в публичных репозиториях gitery. Формат файла — последовательность строк следующего вида:
$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 gitery: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
Этот файл позволяет подписать других пользователей gitery на события в ваших репозиториях. Формат файла — последовательность строк вида:
$PACKAGE $REFTYPE $REFNAME $MAILTO
где
- $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription
- $MAILTO — разделённый запятыми список имён пользователей gitery — получателей оповещения.
Вайлдкарды в первых трёх полях допустимы так же, как и в email-subscription. Вайлдкарды в $MAILTO не допускаются.
Примечания
- ↑ SSH через прокси — Freesource.info
- ↑ Строки с # закомментированы, раскомментируйте, если вам нужен этот функционал
- ↑ http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html
- ↑ NB: делитель для вычисления префикса в архиве по номеру задания составляет в данный момент 1024