Next: , Previous: , Up: Каналы   [Contents][Index]


6.9 Указание авторизаций канала

Как мы видели выше, Guix гарантирует, что исходный код, который он получает из каналов, поступает от авторизованных разработчиков. Как автор канала, вам необходимо указать список авторизованных разработчиков в файле .guix-authorizations в репозитории Git канала. Правило аутентификации простое: каждый коммит должен быть подписан ключом, указанным в файле .guix-authorizations его родительского коммита(ов) 11 файл .guix-authorizations выглядит так:

;; Пример '.guix-authorizations' файла.

(authorizations
 (version 0)               ;current file format version

 (("AD17 A21E F8AE D8F1 CC02  DBD9 F8AE D8F1 765C 61E3"
   (name "alice"))
  ("2A39 3FFF 68F4 EF7A 3D29  12AF 68F4 EF7A 22FB B2D5"
   (name "bob"))
  ("CABB A931 C0FF EEC6 900D  0CFB 090B 1199 3D9A EBB5"
   (name "charlie"))))

За каждым отпечатком следуют необязательные пары ключ/значение, как в примере выше. В настоящее время эти пары ключ/значение игнорируются.

Это правило аутентификации создает проблему с курицей и яйцом: как мы аутентифицируем первый коммит? В связи с этим: как нам поступать с каналами, история репозитория которых содержит неподписанные коммиты и не имеет .guix-authorizations? И как нам разветвлять существующие каналы?

Channel introductions answer these questions by describing the first commit of a channel that should be authenticated. The first time a channel is fetched with guix pull or guix time-machine, the command looks up the introductory commit and verifies that it is signed by the specified OpenPGP key. From then on, it authenticates commits according to the rule above. Authentication fails if the target commit is neither a descendant nor an ancestor of the introductory commit.

Кроме того, ваш канал должен предоставлять все ключи OpenPGP, которые когда-либо упоминались в .guix-authorizations, хранящиеся как файлы .key, которые могут быть либо двоичными, либо “ASCII-armored”. По умолчанию эти файлы .key ищутся в ветке с именем keyring, но вы можете указать другое имя ветки в .guix-channel следующим образом:

(channel
  (version 0)
  (keyring-reference "my-keyring-branch"))

Подытоживая, как автор канала, вы должны сделать три вещи, чтобы позволить другим пользователям авторизовать ваш код:

  1. Экспортируйте ключи OpenPGP прошлых и нынешних коммиттеров с помощью gpg --export и сохраните их в файлах .key, по умолчанию в ветке с именем keyring (мы рекомендуем сделать это в orphan branch).
  2. Добавьте .guix-authorizations в репозиторий канала. Сделайте это в подписанном коммите (see Доступ к коммитам, чтобы узнать, как подписывать коммиты Git)
  3. Рекламируйте channel introduction, например, на веб-странице вашего канала. Channel introduction, как мы видели выше, - это пара коммит/ключ, то есть коммит, который представляет .guix-authorizations, и отпечаток OpenPGP, использованный для его подписи.

Перед отправкой в ваш общедоступный репозиторий Git вы можете запустить guix git-authenticate, чтобы убедиться, что вы подписали все коммиты, которые собираетесь отправить, авторизованным ключом:

guix git authenticate commit signer

где commit и signer являются вашим channel introduction. See Запуск guix git authenticate, подробнее.

Публикация подписанного канала требует дисциплины: любая ошибка, такая как неподписанная фиксация или фиксация, подписанная неавторизованным ключом, не позволит пользователям pull’ить с вашего канала - в этом весь смысл аутентификации! Обратите внимание на merge, в частности: merge коммиты считаются аутентичными, если и только если они подписаны ключом, присутствующим в файле .guix-authorizations обоих веток.


Footnotes

(11)

Git коммитит из directed acyclic graph(DAG). У каждого коммита может быть ноль или более родителей; “обычные” коммиты имеют одного родителя, а “merge” коммиты имеют два родительских коммита. Прочтите Git for Computer Scientists, чтобы получить больше информации.


Next: , Previous: , Up: Каналы   [Contents][Index]