Next: Основной URL, Previous: Объявление зависимостей канала, Up: Каналы [Contents][Index]
Как мы видели выше, 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"))
Подытоживая, как автор канала, вы должны сделать три вещи, чтобы позволить другим пользователям авторизовать ваш код:
gpg --export
и сохраните их в файлах .key, по умолчанию в
ветке с именем keyring
(мы рекомендуем сделать это в orphan
branch).
Перед отправкой в ваш общедоступный репозиторий Git вы можете запустить
guix git-authenticate
, чтобы убедиться, что вы подписали все
коммиты, которые собираетесь отправить, авторизованным ключом:
guix git authenticate commit signer
где commit и signer являются вашим channel introduction. See Запуск guix git authenticate, подробнее.
Публикация подписанного канала требует дисциплины: любая ошибка, такая как неподписанная фиксация или фиксация, подписанная неавторизованным ключом, не позволит пользователям pull’ить с вашего канала - в этом весь смысл аутентификации! Обратите внимание на merge, в частности: merge коммиты считаются аутентичными, если и только если они подписаны ключом, присутствующим в файле .guix-authorizations обоих веток.
Git коммитит из directed acyclic graph(DAG). У каждого коммита может быть ноль или более родителей; “обычные” коммиты имеют одного родителя, а “merge” коммиты имеют два родительских коммита. Прочтите Git for Computer Scientists, чтобы получить больше информации.
Next: Основной URL, Previous: Объявление зависимостей канала, Up: Каналы [Contents][Index]