Próximo: Configurando nós de computação, Acima: Instalando Guix em um Cluster [Conteúdo][Índice]
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 queguix-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]