Próximo: , Anterior: , Acima: Configurando o daemon   [Conteúdo][Índice]


2.2.2 Usando o recurso de descarregamento

Quando desejado, o daemon de compilação pode offload compilações de derivação para outras máquinas executando Guix, usando o offload build hook8. Quando esse recurso é habilitado, uma lista de máquinas de compilação especificadas pelo usuário é lida de /etc/guix/machines.scm; toda vez que uma compilação é solicitada, por exemplo via guix build, o daemon tenta descarregá-la para uma das máquinas que satisfazem as restrições da derivação, em particular seus tipos de sistema — por exemplo, x86_64-linux. Uma única máquina pode ter vários tipos de sistema, seja porque sua arquitetura o suporta nativamente, via emulação (veja Transparent Emulation with QEMU), ou ambos. Os pré-requisitos ausentes para a compilação são copiados por SSH para a máquina de destino, que então prossegue com a compilação; em caso de sucesso, a(s) saída(s) da compilação são copiadas de volta para a máquina inicial. O recurso de offload vem com um agendador básico que tenta selecionar a melhor máquina. A melhor máquina é escolhida entre as máquinas disponíveis com base em critérios como:

  1. A disponibilidade de um slot de build. Uma máquina de build pode ter tantos slots de build (conexões) quanto o valor do campo parallel-builds do seu objeto build-machine.
  2. Sua velocidade relativa, conforme definida pelo campo speed do seu objeto build-machine.
  3. Sua carga. A carga normalizada da máquina deve ser menor que um valor limite, configurável por meio do campo overload-threshold de seu objeto build-machine.
  4. Disponibilidade de espaço em disco. Mais de 100 MiB devem estar disponíveis.

O arquivo /etc/guix/machines.scm geralmente se parece com isso:

(list (build-machine
        (name "eightysix.example.org")
        (systems (list "x86_64-linux" "i686-linux"))
        (host-key "ssh-ed25519 AAAAC3Nza…")
        (user "bob")
        (speed 2.))     ;incredibly fast!

      (build-machine
        (name "armeight.example.org")
        (systems (list "aarch64-linux"))
        (host-key "ssh-rsa AAAAB3Nza…")
        (user "alice")

        ;; Lembre-se de que 'guix offload' é gerado por
        ;; 'guix-daemon' como root.
        (private-key "/root/.ssh/identity-for-guix")))

No exemplo acima, especificamos uma lista de duas máquinas de compilação, uma para as arquiteturas x86_64 e i686 e uma para a arquitetura aarch64.

De fato, esse arquivo é – não surpreendentemente! – um arquivo de Scheme que é avaliado quando o hook offload é iniciado. Seu valor de retorno deve ser uma lista de objetos de build-machine. Embora este exemplo mostre uma lista fixa de máquinas de compilação, pode-se imaginar, digamos, usando DNS-SD para retornar uma lista de possíveis máquinas de compilação descobertas na rede local (veja Guile-Avahi em Using Avahi in Guile Scheme Programs). O tipo de dados de build-machine está detalhado abaixo.

build-machine: Data Type

Esse tipo de dados representa máquinas de compilação nas quais o daemon pode descarregar compilações. Os campos importantes são:

name

O nome de host da máquina remota.

systems

O sistema digita os tipos que a máquina remota suporta, por exemplo, (list "x86_64-linux" "i686-linux").

user

The user account on the remote machine to use when connecting over SSH. Note that the SSH key pair must not be passphrase-protected, to allow non-interactive logins.

host-key

Essa deve ser a SSH chave pública do host da máquina no formato OpenSSH. Isso é usado para autenticar a máquina quando nos conectamos a ela. É uma string longa que se parece com isso:

ssh-ed25519 AAAAC3NzaC…mde+UhL hint@example.org

Se a máquina estiver executando o daemon OpenSSH, sshd, a chave do host poderá ser encontrada em um arquivo como /etc/ssh/ssh_host_ed25519_key.pub.

Se a máquina estiver executando o daemon SSH do GNU lsh, lshd, a chave do host estará em /etc/lsh/host-key.pub ou em um arquivo semelhante. Ele pode ser convertido para o formato OpenSSH usando o lsh-export-key (veja Converting keys em LSH Manual):

$ lsh-export-key --openssh < /etc/lsh/host-key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV…

Vários campos opcionais podem ser especificados:

port (padrão: 22)

O número da porta para o servidor SSH na máquina.

private-key (padrão: ~root/.ssh/id_rsa)

O arquivo de chave privada SSH a ser usado ao conectar-se à máquina, no formato OpenSSH. Esta chave não deve ser protegida com uma senha.

Observe que o valor padrão é a chave privada da usuário root. Verifique se ele existe se você usar o padrão.

compression (padrão: "zlib@openssh.com,zlib")
compression-level (padrão: 3)

Os métodos de compactação no nível SSH e o nível de compactação solicitado.

Observe que o descarregamento depende da compactação SSH para reduzir o uso da largura de banda ao transferir arquivos de e para máquinas de compilação.

daemon-socket (padrão: "/var/guix/daemon-socket/socket")

O nome do arquivo do soquete do domínio Unix guix-daemon está escutando nessa máquina.

overload-threshold (default: 0.8)

O limite de carga acima do qual uma máquina de offload potencial é desconsiderada pelo agendador de offload. O valor traduz aproximadamente o uso total do processador da máquina de build, variando de 0,0 (0%) a 1,0 (100%). Ele também pode ser desabilitado definindo overload-threshold para #f.

parallel-builds (padrão: 1)

O número de compilações que podem ser executadas paralelamente na máquina.

speed (padrão: 1.0)

Um “fator de velocidade relativo”. O agendador de descarregamento tenderá a preferir máquinas com um fator de velocidade mais alto.

features (padrão: '())

Uma lista de strgins que denotam recursos específicos suportados pela máquina. Um exemplo é "kvm" para máquinas que possuem os módulos KVM Linux e o suporte de hardware correspondente. As derivações podem solicitar recursos pelo nome e serão agendadas nas máquinas de compilação correspondentes.

Nota: No Guix System, em vez de gerenciar /etc/guix/machines.scm de forma independente, você pode escolher especificar máquinas de compilação diretamente na declaração operating-system, no campo build-machines de guix-configuration. Veja campo build-machines de guix-configuration.

O comando guix deve estar no caminho de pesquisa nas máquinas de compilação. Você pode verificar se este é o caso executando:

ssh build-machine guix repl --version

Há uma última coisa a fazer quando o machines.scm está em vigor. Como explicado acima, ao descarregar, os arquivos são transferidos entre os armazéns das máquinas. Para que isso funcione, primeiro você precisa gerar um par de chaves em cada máquina para permitir que o daemon exporte arquivos assinados de arquivos do armazém (veja Invocando guix archive):

# guix archive --generate-key

Nota: Este par de chaves não está relacionado ao par de chaves SSH mencionado anteriormente na descrição do tipo de dados build-machine.

Cada máquina de construção deve autorizar a chave da máquina principal para que ela aceite itens do armazém que recebe do mestre:

# guix archive --authorize < master-public-key.txt

Da mesma forma, a máquina principal deve autorizar a chave de cada máquina de compilação.

Todo esse barulho com as chaves está aqui para expressar relações de confiança mútua de pares entre a máquina mestre e as de compilação. Concretamente, quando o mestre recebe arquivos de uma máquina de compilação (e vice-versa), seu daemon de compilação pode garantir que eles sejam genuínos, não tenham sido violados e que sejam assinados por uma chave autorizada.

Para testar se sua configuração está operacional, execute este comando no nó principal:

# guix offload test

Isso tentará se conectar a cada uma das máquinas de compilação especificadas em /etc/guix/machines.scm, certificar-se de que o Guix esteja disponível em cada máquina, tentará exportar para a máquina e importar dela e relatará qualquer erro no processo.

Se você quiser testar um arquivo de máquina diferente, basta especificá-lo na linha de comando:

# guix offload test machines-qualif.scm

Por fim, você pode testar o subconjunto das máquinas cujo nome corresponde a uma expressão regular como esta:

# guix offload test machines.scm '\.gnu\.org$'

Para exibir o carregamento atual de todos os hosts de compilação, execute este comando no nó principal:

# guix offload status

Notas de Rodapé

(8)

Este recurso está disponível somente quando Guile-SSH está presente.


Próximo: Suporte a SELinux, Anterior: Configuração do ambiente de compilação, Acima: Configurando o daemon   [Conteúdo][Índice]