Próximo: Usando o recurso de descarregamento, Acima: Configurando o daemon [Conteúdo][Índice]
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:
/dev
mínimo, criado principalmente independentemente do
/dev
do hospedeiro7;
/proc
; mostra apenas os processos do contêiner desde que
um espaço de nome PID separado é usado;
localhost
para
127.0.0.1
;
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.
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.
“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]