Próximo: URL principal, Anterior: Declarando dependências de canal, Acima: Canais [Conteúdo][Índice]
Como vimos acima, o Guix garante que o código-fonte que ele extrai dos canais vem de desenvolvedores autorizados. Como autor de um canal, você precisa especificar a lista de desenvolvedores autorizados no arquivo .guix-authorizations no repositório Git do canal. A regra de autenticação é simples: cada commit deve ser assinado por uma chave listada no arquivo .guix-authorizations de seu(s) commit(s) pai(s)13 O arquivo .guix-authorizations se parece com isso:
;; Exemplo de arquivo '.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"))))
Cada impressão digital é seguida por pares chave/valor opcionais, como no exemplo acima. Atualmente, esses pares chave/valor são ignorados.
Esta regra de autenticação cria um problema do tipo "ovo e galinha": como autenticamos o primeiro commit? Relacionado a isso: como lidamos com canais cujo histórico de repositório contém commits não assinados e não tem .guix-authorizations? E como bifurcamos canais existentes?
As introduções de canal respondem a essas perguntas descrevendo o primeiro
commit de um canal que deve ser autenticado. Na primeira vez que um canal é
buscado com guix pull
ou guix time-machine
, o comando
procura o commit introdutório e verifica se ele está assinado pela chave
OpenPGP especificada. A partir daí, ele autentica os commits de acordo com a
regra acima. A autenticação falha se o commit de destino não for descendente
nem ancestral do commit introdutório.
Além disso, seu canal deve fornecer todas as chaves OpenPGP que já foram
mencionadas em .guix-authorizations, armazenadas como arquivos
.key, que podem ser binários ou “ASCII-armored”. Por padrão, esses
arquivos .key são pesquisados no branch chamado keyring
, mas
você pode especificar um nome de branch diferente em .guix-channel
assim:
(channel
(version 0)
(keyring-reference "my-keyring-branch"))
Para resumir, como autor de um canal, há três coisas que você precisa fazer para permitir que os usuários autentiquem seu código:
gpg --export
e armazene-as em arquivos .key, por padrão em
uma ramificação chamada keyring
(recomendamos torná-la uma
ramificação órfã).
Antes de enviar para seu repositório Git público, você pode executar
guix git authenticate
para verificar se você assinou todos os
commits que está prestes a enviar com uma chave autorizada:
guix git authenticate commit signer
onde commit e signer são a introdução do seu
canal. Veja Invocando guix git authenticate
, para detalhes.
Publicar um canal assinado requer disciplina: qualquer erro, como um commit não assinado ou um commit assinado por uma chave não autorizada, impedirá que usuários puxem do seu canal — bem, esse é o ponto principal da autenticação! Preste atenção às mesclagens em particular: commits de mesclagem são considerados autênticos se e somente se forem assinados por uma chave presente no arquivo .guix-authorizations de ambos os ramos.
Os commits do Git formam um gráfico acíclico direcionado (DAG). Cada commit pode ter zero ou mais pais; os commits “regulares” têm um pai e os commits de mesclagem têm dois commits pais. Leia Git para cientistas da computação para uma ótima visão geral.
Próximo: URL principal, Anterior: Declarando dependências de canal, Acima: Canais [Conteúdo][Índice]