Próximo: , Anterior: , Acima: Canais   [Conteúdo][Índice]


6.10 Especificando autorizações de canal

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:

  1. Exporte as chaves OpenPGP de contribuidores anteriores e atuais com gpg --export e armazene-as em arquivos .key, por padrão em uma ramificação chamada keyring (recomendamos torná-la uma ramificação órfã).
  2. Introduza um .guix-authorizations inicial no repositório do canal. Faça isso em um commit assinado (veja Confirmar acesso, para obter informações sobre como assinar commits do Git).
  3. Anuncie a introdução do canal, por exemplo, na página web do seu canal. A introdução do canal, como vimos acima, é o par commit/chave—i.e., o commit que introduziu .guix-authorizations, e a impressão digital do OpenPGP usada para assiná-lo.

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.


Notas de Rodapé

(13)

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]