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


2.2.1 Configuração do ambiente de compilação

Em uma configuração multiusuário padrão, o Guix e seu daemon – o programa guix-daemon – são instalados pelo administrador do sistema; /gnu/store é de propriedade de root e guix-daemon é executado como root. Usuários desprivilegiados podem usar ferramentas Guix para criar pacotes ou acessar o armazém, e o daemon fará isso em seu nome, garantindo que o armazém seja mantido em um estado consistente e permitindo que pacotes construídos sejam compartilhados entre os usuários.

Quando guix-daemon é executado como root, você pode não querer que os próprios processos de compilação de pacotes também sejam executados como root, por razões óbvias de segurança. Para evitar isso, um conjunto especial de usuários de compilação deve ser criado para uso pelos processos de construção iniciados pelo daemon. Esses usuários de compilação não precisam ter um shell e um diretório inicial: eles serão usados apenas quando o daemon der um privilégio root nos processos de compilação. Ter vários desses usuários permite que o daemon ative processos de compilação distintos sob UIDs separados, o que garante que eles não interfiram uns com os outros - um recurso essencial, pois as compilações são consideradas funções puras (veja Introdução).

Em um sistema GNU/Linux, um conjunto de usuários de construção pode ser criado assim (usando a sintaxe Bash e os comandos shadow):

# groupadd --system guixbuild
# for i in $(seq -w 1 10);
  do
    useradd -g guixbuild -G guixbuild           \
            -d /var/empty -s $(which nologin)   \
            -c "Guix build user $i" --system    \
            guixbuilder$i;
  done

O número de usuários de compilação determina quantos trabalhos de compilação podem ser executados em paralelo, conforme especificado pela opção --max-jobs (veja --max-jobs). Para usar guix system vm e comandos relacionados, você pode precisar adicionar os usuários de compilação ao grupo kvm para que eles possam acessar /dev/kvm, usando -G guixbuild,kvm em vez de -G guixbuild (veja Invoking guix system).

The guix-daemon program may then be run as root with the following command6:

# guix-daemon --build-users-group=guixbuild

Dessa forma, o daemon inicia os processos de compilação em um chroot, sob um dos usuários guixbuilder. No GNU/Linux, por padrão, o ambiente chroot contém nada além de:

O chroot não contém um diretório /home, e a variável de ambiente HOME é definida como o inexistente /homeless-shelter. Isso ajuda a destacar usos inapropriados de HOME nos scripts de construção de pacotes.

Tudo isso geralmente é suficiente para garantir que os detalhes do ambiente não influenciem os processos de construção. Em alguns casos excepcionais em que mais controle é necessário — normalmente sobre a data, kernel ou CPU — você pode recorrer a uma máquina de construção virtual (veja máquinas de construção virtual).

Você pode influenciar o diretório onde o daemon armazena árvores de build via a variável de ambiente TMPDIR. No entanto, a árvore de build dentro do chroot é sempre chamada /tmp/guix-build-name.drv-0, onde name é o nome da derivação—por exemplo, coreutils-8.24. Dessa forma, o valor de TMPDIR não vaza dentro de ambientes de build, o que evita discrepâncias em casos em que os processos de build capturam o nome de sua árvore de build.

O daemon também respeita as variáveis de ambiente http_proxy e https_proxy para downloads HTTP e HTTPS que ele realiza, seja para derivações de saída fixa (veja Derivações) ou para substitutos (veja Substitutos).

Se você estiver instalando o Guix como um usuário sem privilégios, ainda é possível executar guix-daemon desde que você passe --disable-chroot. No entanto, os processos de construção não serão isolados uns dos outros, e nem do resto do sistema. Assim, os processos de construção podem interferir uns nos outros, e podem acessar programas, bibliotecas e outros arquivos disponíveis no sistema — tornando muito mais difícil visualizá-los como funções puras.


Notas de Rodapé

(6)

If your machine uses the systemd init system, copying the prefix/lib/systemd/system/guix-daemon.service file to /etc/systemd/system will ensure that guix-daemon is automatically started. Similarly, if your machine uses the Upstart init system, copy the prefix/lib/upstart/system/guix-daemon.conf file to /etc/init.

(7)

“Principalmente” porque enquanto o conjunto de arquivos que aparece no /dev do chroot é corrigido, a maioria desses arquivos só pode ser criada se o hospedeiro os possuir.


Próximo: Usando o recurso de descarregamento, Acima: Configurando o daemon   [Conteúdo][Índice]