git.alt/Справочник
Материал из ALT Linux Wiki
(→SSH-доступ) |
(→acl show) |
||
(116 промежуточных версий не показаны.) | |||
Строка 8: | Строка 8: | ||
<tt>git.alt</tt> предоставляет несколько видов доступа: | <tt>git.alt</tt> предоставляет несколько видов доступа: | ||
- | * | + | * ssh-доступ. Предоставляет несколько команд: для поиска репозиториев, их клонирования, создания, удаления, а также служебных. |
- | * <tt>ssh</tt>, <tt>git</tt>, <tt>rsync</tt>, <tt>http</tt> | + | * <tt>ssh</tt>-, <tt>git</tt>-, <tt>rsync</tt>-, <tt>http</tt>-доступ для непосредственной работы с репозиториями. |
- | * Web-интерфейс. Находится по адресу http://git.altlinux.org/, предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев. | + | *: <tt>git</tt>-, <tt>rsync</tt>- и <tt>http</tt>-адреса предоставляют r/o доступ, <tt>ssh</tt> — r/w. |
+ | * Web-интерфейс. Находится по адресу [http://git.altlinux.org/ git.altlinux.org], предоставляет навигацию по списку репозиториев и <tt>gitweb</tt> для индивидуальных репозиториев. | ||
- | + | ssh-доступ к <tt>git.alt</tt> выдаётся после [[Join|принятия]] в ALT Linux Team. | |
+ | <div id="access"></div> | ||
== 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 | ||
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>. | ||
Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>: | Для работы с <tt>git.alt</tt> необходимо настроить свой <tt>git</tt> — параметры <tt>user.name</tt>, <tt>user.email</tt>, <tt>user.signingkey</tt>: | ||
- | $ git | + | $ git config --global user.signingkey "<ID ключа GPG для подписи тэгов>" |
- | $ git | + | $ git config --global user.email "<ваш email, как мантейнера>" |
- | $ git | + | $ git config --global user.name "FirstName LastName" |
Например, | Например, | ||
- | $ git | + | $ git config --global user.signingkey 0xA26F54C8 |
- | $ git | + | $ git config --global user.email dottedmag@altlinux.org |
- | $ git | + | $ 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> ...} | ||
+ | --> | ||
- | + | <source lang=bash> | |
- | + | $ ssh git.alt help | |
- | + | Enter passphrase for key '....ssh/id_dsa': | |
- | + | Available commands: | |
- | + | help | |
- | + | charset <path to git repository> [<charset>] | |
- | + | clone <path to git repository> [<path to directory>] | |
- | + | default-branch <path to git repository> [<branch>] | |
- | + | find-package <pattern> | |
- | + | init-db <path to directory> | |
- | + | ls [<path to directory>] | |
- | + | mv-db <path to source directory> <path to destination directory> | |
- | + | quota | |
- | + | repack <path to git repository> [<value>] | |
- | + | rm-db <path to git repository> | |
- | + | ||
- | + | $ ssh girar help | |
+ | Enter passphrase for key '....ssh/id_dsa': | ||
+ | Available commands: | ||
+ | help | ||
+ | build [-b <binary_repository_name>] <gear_repo_1> <gear_tag_1> ... | ||
+ | task {--help|ls|show|new|add|delsub|run|share|approve|rm} ... | ||
+ | acl {--help|<binary_repository_name> ...} | ||
+ | ls [<path to directory>] | ||
+ | quota | ||
+ | </source> | ||
Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда. | Во всех командах суффикс директорий репозиториев <tt>.git</tt> опционален и может быть опущен. В выводе команд <tt>.git</tt> присутствует всегда. | ||
+ | <!-- please don't remove -- there are links to #git etc --> | ||
+ | <div id="git"></div> | ||
=== Управление git-репозиториями === | === Управление git-репозиториями === | ||
- | + | <div id="ls"></div> | |
==== ls ==== | ==== ls ==== | ||
Строка 90: | Строка 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 ==== | ||
Строка 108: | Строка 194: | ||
$ | $ | ||
- | Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория. | + | Вторая колонка в выводе <tt>find-package</tt> — unixtime времени последнего обновления репозитория. Получить время в привычном представлении можно с помощью команды <tt>date -d @unixtime</tt>. |
+ | База данных для find-package обновляется в начале каждого часа. | ||
+ | В неё попадают только те репозитории, в которые был сделан | ||
+ | хотя бы один git push. Репозитории, не изменившиеся после | ||
+ | первичного создания/клонирования, в эту базу не попадают. | ||
+ | <div id="clone"></div> | ||
==== clone ==== | ==== clone ==== | ||
'''$ ssh git.alt clone <path to git repository> [<destination directory>]''' | '''$ ssh git.alt clone <path to git repository> [<destination directory>]''' | ||
- | Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним. | + | Эта команда позволяет «склонировать», то есть создать в своей директории копию репозитория для начала работы над ним. При этом локальные клоны (из /people) задействуют хардлинки, экономя дисковое пространство, а также ваши квоту на git.alt и трафик до него. |
Без второго аргумента — клонирует в директорию <tt>packages</tt>: | Без второго аргумента — клонирует в директорию <tt>packages</tt>: | ||
- | $ ssh git.alt clone /people/ldv/glibc | + | $ ssh git.alt clone /people/ldv/packages/glibc |
- | + | girar-clone: /people/dottedmag/packages/glibc.git | |
$ | $ | ||
Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория: | Вторым аргументом можно указать как директорию, в которую нужно поместить клон репозитория, так и название репозитория: | ||
- | $ ssh git.alt clone /people/ldv/ | + | $ ssh git.alt clone /people/ldv/packages/glibc public/test |
- | + | girar-clone: /people/dottedmag/public/test.git | |
- | + | ||
- | + | ||
$ | $ | ||
Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>: | Можно также склонировать репозиторий, находящийся вне <tt>git.alt</tt>: | ||
- | $ ssh git.alt clone <nowiki> | + | $ ssh git.alt clone <nowiki>git://git.fedorahosted.org/chkconfig.git</nowiki> |
- | + | girar-clone: /people/dottedmag/packages/chkconfig.git | |
- | + | ||
- | + | ||
- | + | ||
$ | $ | ||
- | + | <div id="init-db"></div> | |
==== init-db ==== | ==== init-db ==== | ||
'''$ ssh git.alt init-db <path to directory>''' | '''$ ssh git.alt init-db <path to directory>''' | ||
- | Позволяет создать новый git-репозиторий. По умолчанию репозиторий создаётся в директории <tt>packages</tt>: | + | Позволяет создать новый git-репозиторий. По умолчанию (при указании только имени репозитория) репозиторий создаётся в директории <tt>packages</tt>: |
$ ssh git.alt init-db test | $ ssh git.alt init-db test | ||
- | |||
girar-init-db: /people/dottedmag/packages/test.git | girar-init-db: /people/dottedmag/packages/test.git | ||
При указании пути создаёт репозиторий по указанному пути: | При указании пути создаёт репозиторий по указанному пути: | ||
$ ssh git.alt init-db public/test | $ ssh git.alt init-db public/test | ||
- | |||
girar-init-db: /people/dottedmag/public/test.git | girar-init-db: /people/dottedmag/public/test.git | ||
- | + | <div id="mv-db"></div> | |
==== mv-db ==== | ==== mv-db ==== | ||
Строка 165: | Строка 249: | ||
$ ssh git.alt mv-db test megatest | $ ssh git.alt mv-db test megatest | ||
$ | $ | ||
- | + | <div id="rm-db"></div> | |
==== rm-db ==== | ==== rm-db ==== | ||
Строка 173: | Строка 257: | ||
$ ssh git.alt rm-db public/test | $ ssh git.alt rm-db public/test | ||
+ | <div id="acl"></div> | ||
=== Управление ACL пакетов === | === Управление ACL пакетов === | ||
''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.'' | ''Смотри [[ACL]] для общей информации об ACL пакетов в Sisyphus.'' | ||
- | Команда <tt>acl</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 | + | $ 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 пакета или в составе группы. | + | Все команды, меняющие состав группы или ACL пакета, могут производиться только ''лидером'' — первым в списке ACL пакета или в составе группы. Набор из нескольких команд выполняется транзакционно. Результат выполнения acl-команд сообщается по email всем, кого они затрагивают. |
+ | <div id="acl_show"></div> | ||
==== acl show ==== | ==== acl show ==== | ||
- | '''$ ssh | + | '''$ 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 | + | '''$ ssh girar acl <binary repository> @<group> show''' |
Показывает состав указанной группы майнтайнеров. | Показывает состав указанной группы майнтайнеров. | ||
- | $ ssh | + | $ 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 ==== | ||
+ | |||
+ | '''$ 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 ==== | ==== acl add/del ==== | ||
- | '''$ ssh | + | '''$ ssh girar acl <binary repository> <package> add|del <login>|@<group> ... |
Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета. | Добавляет/удаляет указанных пользователей и группы в/из ACL указанного пакета. | ||
- | $ ssh | + | '''$ 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 | + | '''$ ssh girar acl <binary repository> @<group> add|del <login>|@<group> ... |
Добавляет/удаляет указанных пользователей и группы в/из указанной группы. | Добавляет/удаляет указанных пользователей и группы в/из указанной группы. | ||
- | $ ssh | + | '''$ 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 | + | '''$ 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 | + | '''$ ssh girar acl <binary repository> <package>|@<group> replace <login>|@<group> <login>|@<group>''' |
Заменяет указанную запись в ACL пакета или составе группы на вторую указанную. | Заменяет указанную запись в ACL пакета или составе группы на вторую указанную. | ||
- | $ ssh | + | $ 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 | + | '''$ ssh girar acl <binary repository> <package> leader <login>|@<group> |
- | Устанавливает лидера | + | Устанавливает лидера пакета — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке ACL пакета до выполнения этой команды. |
- | $ ssh | + | $ ssh girar acl sisyphus keyjnote leader @python |
- | '''$ ssh | + | '''$ ssh girar acl <binary repository> @<group> leader <login>|@<group> |
- | Устанавливает лидера | + | Устанавливает лидера группы — указанного пользователя, или лидера указанной группы. Пользователь или группа, устанавливаемые лидерами, не обязаны присутствовать в списке членов группы до выполнения этой команды. |
- | $ ssh | + | $ ssh girar acl sisyphus @python leader ns |
- | = | + | <div id="build_tasks"></div> |
- | '''$ ssh | + | === Сборка пакетов === |
- | + | ||
+ | Для сборки пакетов используется механизм ''заданий'' — пользователь указывает, какие [[gear]]-репозитории необходимо собрать одной транзакцией, создавая задание, после чего запускает его на выполнение. Задание выполняются асинхронно. После завершения задания пользователю приходит отчёт по e-mail (плюс, отчёты о сборке доступны на git.alt, см. ниже). Каждое задание предназначено для изменения только одного репозитория пакетов. | ||
+ | <div id="task"></div> | ||
+ | ==== task ==== | ||
+ | |||
+ | '''$ ssh girar task ls [--all]''' | ||
+ | Показывает текущий список всех заданий пользователя с указанием их статуса и краткого содержания.<br /> | ||
+ | С указанием параметра <tt>--all</tt> показывает список заданий всех пользователей. | ||
+ | '''$ ssh girar task show [<task_id>]''' | ||
+ | Показывает содержимое указанного (по умолчанию последнего созданного) задания. | ||
+ | '''$ ssh girar task new [<binary_repository_name>]''' | ||
+ | Создаёт новое задание для сборки пакетов в указанный репозиторий пакетов (по умолчанию — Sisyphus).<br /> | ||
+ | Список репозиториев можно узнать с помощью <tt>task new --help</tt>.<br /> | ||
+ | Данная команда выводит идентификатор задания на stdout. | ||
+ | '''$ ssh girar task add [<task_id> [<before_subtask_id>]] repo <gear_repo> <gear_tag>''' | ||
+ | Добавляет в задание пакет, который необходимо собрать.<br /> | ||
+ | Пакет определяется двумя обязательными характеристиками: путём к gear-репозиторию и именем git-тэга.<br /> | ||
+ | По умолчанию новые подзадания добавляются в конец списка подзаданий, с шагом 0100 (восьмеричное 100). Новое подзадание, добавляемое перед подзаданием номер N, получает восьмеричный номер (K+N)/2, где K — это номер подзадания, идущего непосредственно перед подзаданием номер N<ref>http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html</ref>. | ||
+ | '''$ ssh girar task add [<task_id> [<before_subtask_id>]] srpm <srpm file>''' | ||
+ | Добавляет в задание пакет, который необходимо собрать.<br /> | ||
+ | Пакет определяется именем предварительно отправленного на сервер путём ''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>]''' | ||
+ | Отправляет на выполнение указанное (по умолчанию последнее созданное) задание.<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 /> | ||
+ | Задание с режимом доступа ''share enabled'' может быть дополнено другими пользователями с помощью команды <tt>task add</tt>.<br /> | ||
+ | По умолчанию задания создаются в режиме доступа ''share disabled''. | ||
+ | <div id="task_approve"></div> | ||
+ | '''$ ssh girar task approve <task_id> <subtask_id>''' | ||
+ | Подтверждает сборку подзадания с указанным номером, входящего в состав указанного чужого задания.<br /> | ||
+ | Используется для разрешения сборки автором, не имеющим полномочий для обновления собираемого пакета (NMU). | ||
+ | '''$ 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 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, если сборка тестовая) | ||
+ | <div id="build"></div> | ||
- | + | ==== build ==== | |
- | + | ||
- | + | ||
- | + | '''$ 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>. | ||
- | + | Параметр ''binary repository name'' имеет тот же смысл, что и в команде <code>task new</code>. | |
- | + | Параметр ''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 | ||
- | = | + | <div id="reports"></div> |
- | + | ==== Отчёты о сборке ==== | |
- | + | ||
- | + | Информация о сборках публикуется по адресу http://git.altlinux.org/tasks/ | |
+ | Каждая поддиректория <tt>/tasks/</tt> содержит информацию об одной сборочной задаче. Идентификатор задачи выдаётся при её создании и указывается в почтовых оповещениях. | ||
+ | |||
+ | Задача может состоять из нескольких подзадач. Информация о каждой подзадаче публиуется в директориях <tt>/tasks/<id>/build/<sid></tt> и <tt>/tasks/<id>/gears/<sid></tt>. | ||
+ | |||
+ | Наиболее интересные файлы: | ||
+ | ; <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> | ||
+ | |||
+ | Более подробное описание структуры задания можно найти в [http://git.altlinux.org/people/ldv/packages/?p=girar-builder.git;a=blob_plain;f=TASK документации на girar-builder]. | ||
+ | |||
+ | Всё, что находится по адресу http://git.altlinux.org/tasks/, в равной | ||
+ | степени доступно и по rsync. | ||
+ | |||
+ | ==== Лимиты сборочницы ==== | ||
+ | |||
+ | См. [[Hasher/Справочник#Лимиты на сборку у инкамингера]]. | ||
+ | |||
+ | === Вспомогательные команды === | ||
+ | <div id="charset"></div> | ||
==== charset ==== | ==== charset ==== | ||
Строка 317: | Строка 534: | ||
cp1252 | cp1252 | ||
$ | $ | ||
+ | <div id="quota"></div> | ||
==== quota ==== | ==== quota ==== | ||
Строка 331: | Строка 549: | ||
==== git-receive-pack, git-upload-pack ==== | ==== git-receive-pack, git-upload-pack ==== | ||
- | Эти команды используются утилитами <tt>git | + | Эти команды используются утилитами <tt>git push</tt>, <tt>git pull</tt> и подобными, и не предназначены для вызова пользователем. |
=== Клонирование и работа с репозиториями === | === Клонирование и работа с репозиториями === | ||
Строка 353: | Строка 571: | ||
Располагается по адресу http://git.altlinux.org/ | Располагается по адресу http://git.altlinux.org/ | ||
- | Предоставляет навигацию по публичным репозиториям пользователей ( | + | Предоставляет навигацию по |
- | + | * публичным репозиториям пользователей (по каталогам вида <tt>/people/$USERNAME/{packages,public}</tt>) | |
- | + | * кэширующим репозиториям <tt>/gears</tt> и <tt>/srpms</tt> | |
+ | * базе данных [[ACL]] | ||
+ | * файлу <tt>people-packages-list</tt>, содержащий все репозитории из каталогов <tt>/people/$USERNAME/packages</tt> и даты их последнего изменения (в unixtime) | ||
+ | * сборочным заданиям | ||
+ | * логам тестовых пересборок Сизифа и бранчей | ||
+ | * статистике непересобираемости пакетов в Сизифе и бранчах | ||
== Структура репозиториев == | == Структура репозиториев == | ||
- | <tt>git.alt</tt> содержит | + | <tt>git.alt</tt> содержит три дерева репозиториев: |
* репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя | * репозитории <tt>/people/$USERNAME</tt> для каждого зарегистрированного пользователя | ||
- | * репозитории <tt>/ | + | * репозитории <tt>/gears</tt> с исходным кодом для пакетов, собранных из gear-репозиториев. |
+ | * репозитории <tt>/srpms</tt> с исходным кодом для пакетов, собранных из SRPM-пакетов. | ||
=== /people === | === /people === | ||
Строка 370: | Строка 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 ==== | ||
Строка 376: | Строка 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 ==== | ||
Строка 386: | Строка 610: | ||
==== /people/$USERNAME/public ==== | ==== /people/$USERNAME/public ==== | ||
- | Директория | + | Директория предназначена для хранения публичных git-репозиториев, не являющихся gear-репозиториями для пакетов Сизифа. |
+ | |||
+ | <div id="gears"></div> | ||
+ | |||
+ | === /gears === | ||
+ | |||
+ | В эту директорию помещаются gear-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]]. Добавление исходного кода в репозиторий <tt>/gears</tt> происходит после успешной сборки пакета с помощью команд <tt>git.alt</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> и т.д.). | ||
+ | |||
+ | === /srpms === | ||
- | + | В этой директории размещаются git-репозитории с исходным кодом пакетов Sisyphus и других [[Branches|стабильных веток]], собранных из SRPMS-пакетов. | |
- | + | После первой сборки пакета из <tt>gear</tt>, <tt>git.alt</tt> репозиторий в <tt>/srpms</tt> замораживается. | |
- | + | <div id="email"></div> | |
== Почтовая подписка == | == Почтовая подписка == | ||
На <tt>git.alt</tt> реализовано два вида почтовой подписки на события: | На <tt>git.alt</tt> реализовано два вида почтовой подписки на события: | ||
- | * Пользователь подписывается на события, происходящие в репозиториях <tt> | + | * Пользователь подписывается на события, происходящие в репозиториях <tt>packages</tt> и <tt>public</tt>. |
- | * Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt> | + | * Пользователь подписывает кого-то на события, происходящие в '''его''' репозиториях <tt>packages</tt>, <tt>public</tt> и <tt>private</tt>. |
- | Для подписки используются репозитории из | + | Для подписки используются репозитории из каталога <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-subscription</tt> и <tt>email-distribution</tt> (точнее, в <tt>private.git</tt> — только <tt>email-distribution</tt>). <tt>git.alt</tt> использует бранч <tt>master</tt> и не обращает внимания на остальные бранчи в этих репозиториях. |
=== email-subscription === | === email-subscription === | ||
- | Этот файл позволяет подписаться на события в публичных репозиториях <tt>git.alt</tt>. Формат файла | + | Этот файл позволяет подписаться на события в публичных репозиториях <tt>git.alt</tt>. Формат файла — последовательность строк следующего вида: |
$USER $PACKAGE $REFTYPE $REFNAME | $USER $PACKAGE $REFTYPE $REFNAME | ||
где | где | ||
- | * $USER | + | * $USER — имя пользователя <tt>git.alt</tt>, |
- | * $PACKAGE | + | * $PACKAGE — имя пакета, |
- | * $REFTYPE | + | * $REFTYPE — вид изменения: <tt>head</tt> — новые/удалённые коммиты, <tt>tag</tt> — новые/удалённые тэги (техническая подробность: второй компонент из изменяемой ссылки <tt>refs/*/*</tt>) |
<!-- или release (релизы для сборки пакетов. Пока что не работает. --> | <!-- или release (релизы для сборки пакетов. Пока что не работает. --> | ||
- | * $REFNAME | + | * $REFNAME — имя изменения: имя бранча для коммитов, имя тэга для тэгов (техническая подробность: третий и последующие компоненты из изменяемой ссылки <tt>refs/*/*</tt>). |
Каждое из полей может быть полным именем или вайлдкардом <tt>*</tt>. Для имён пакетов также разрешён вайлдкард в конце имени (например, <tt>docs-*</tt>). | Каждое из полей может быть полным именем или вайлдкардом <tt>*</tt>. Для имён пакетов также разрешён вайлдкард в конце имени (например, <tt>docs-*</tt>). | ||
Строка 422: | Строка 656: | ||
Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git: | Подписка на новые/удалённые тэги в репозитории /people/ldv/packages/glibc.git: | ||
ldv glibc tag * | 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 === | === email-distribution === | ||
- | Этот файл позволяет подписать других пользователей <tt>git.alt</tt> на события в ваших репозиториях. Формат файла | + | Этот файл позволяет подписать других пользователей <tt>git.alt</tt> на события в ваших репозиториях. Формат файла — последовательность строк вида: |
$PACKAGE $REFTYPE $REFNAME $MAILTO | $PACKAGE $REFTYPE $REFNAME $MAILTO | ||
где | где | ||
* $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription | * $PACKAGE, $REFTYPE, $REFNAME аналогичны параметрам из файла email-subscription | ||
- | * $MAILTO | + | * $MAILTO — разделённый запятыми список имён пользователей <tt>git.alt</tt> — получателей оповещения. |
Вайлдкарды в первых трёх полях допустимы так же, как и в 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-доступ
Функции между этими серверами разделены следующим образом:
- 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 не допускаются.
Примечания
- ↑ http://lists.altlinux.org/pipermail/devel-announce/2010-November/000035.html
- ↑ NB: делитель для вычисления префикса в архиве по номеру задания составляет в данный момент 1024