Próximo: , Acima: Instalando Guix em um Cluster   [Conteúdo][Índice]


9.1 Configurando um nó principal

A abordagem recomendada é configurar um nó principal executando guix-daemon e exportando /gnu/store via NFS para nós de computação.

Lembre-se de que guix-daemon é responsável por gerar processos de compilação e downloads em nome dos clientes (veja Invocando guix-daemon em Manual de Referência do GNU Guix) e, de forma mais geral, acessando /gnu/store, que contém todos os binários de pacotes compilados por todos os usuários (veja O armazém em Manual de Referência do GNU Guix). “Cliente” aqui se refere a todos os comandos Guix que os usuários veem, como guix install. Em um cluster, esses comandos podem estar em execução nos nós de computação e queremos que eles conversem com a instância guix-daemon do nó principal.

Para começar, o nó principal pode ser instalado seguindo as instruções usuais de instalação binária (veja Instalação de binários em Manual de Referência do GNU Guix). Graças ao script de instalação, isso deve ser rápido. Assim que a instalação for concluída, precisamos fazer alguns ajustes.

Como queremos que o guix-daemon seja acessível não apenas do nó principal, mas também dos nós de computação, precisamos organizar para que ele escute conexões por TCP/IP. Para fazer isso, editaremos o arquivo de inicialização do systemd para guix-daemon, /etc/systemd/system/guix-daemon.service e adicionaremos um argumento --listen à linha ExecStart para que fique parecido com isto:

ExecStart=/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild --listen=/var/guix/daemon-socket/socket --listen=0.0.0.0

Para que essas alterações entrem em vigor, o serviço precisa ser reiniciado:

systemctl daemon-reload
systemctl restart guix-daemon

Nota: O bit --listen=0.0.0.0 significa que guix-daemon processará todas as conexões TCP de entrada na porta 44146 (veja Invocando guix-daemon em Manual de Referência do GNU Guix). Isso geralmente é bom em uma configuração de cluster onde o nó principal é acessível exclusivamente da rede local do cluster — você não quer que isso seja exposto à Internet!

O próximo passo é definir nossas exportações NFS em /etc/exports adicionando algo como isto:

/gnu/store    *(ro)
/var/guix     *(rw, async)
/var/log/guix *(ro)

O diretório /gnu/store pode ser exportado somente para leitura, pois somente guix-daemon no nó mestre poderá modificá-lo. /var/guix contém perfis de usuário conforme gerenciados por guix package; portanto, para permitir que os usuários instalem pacotes com guix package, isso deve ser de leitura e gravação.

Os usuários podem criar quantos perfis quiserem, além do perfil padrão, ~/.guix-profile. Por exemplo, guix package -p ~/dev/python-dev -i python instala o Python em um perfil acessível pelo link simbólico ~/dev/python-dev. Para garantir que esse perfil esteja protegido contra coleta de lixo — ou seja, que o Python não será removido de /gnu/store enquanto esse perfil existir —, diretórios home devem ser montados no nó principal também para que guix-daemon saiba sobre esses perfis não padrão e evite coletar softwares aos quais eles se referem.

Pode ser uma boa ideia remover periodicamente bits não utilizados de /gnu/store executando guix gc (veja Invocando guix gc em Manual de Referência do GNU Guix). Isso pode ser feito adicionando uma entrada crontab no nó principal:

root@master# crontab -e

... com algo assim:

# Todos os dias às 5h da manhã, execute o coletor de lixo para garantir
# pelo menos 10 GB estão livres em /gnu/store.
0 5 * * 1 /usr/local/bin/guix gc -F10G

Terminamos com o nó principal! Vamos dar uma olhada nos nós de computação agora.


Próximo: Configurando nós de computação, Acima: Instalando Guix em um Cluster   [Conteúdo][Índice]