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 (see 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 (see --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
(see 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
;
The chroot does not contain a /home directory, and the HOME
environment variable is set to the non-existent /homeless-shelter.
This helps to highlight inappropriate uses of HOME
in the build
scripts of packages.
You can influence the directory where the daemon stores build trees via
the TMPDIR
environment variable. However, the build tree within the
chroot is always called /tmp/guix-build-name.drv-0, where
name is the derivation name—e.g., coreutils-8.24
. This way,
the value of TMPDIR
does not leak inside build environments, which
avoids discrepancies in cases where build processes capture the name of
their build tree.
The daemon also honors the http_proxy
and https_proxy
environment variables for HTTP and HTTPS downloads it performs, be it for
fixed-output derivations (see Derivações) or for substitutes
(see Substitutos).
If you are installing Guix as an unprivileged user, it is still possible to
run guix-daemon
provided you pass --disable-chroot.
However, build processes will not be isolated from one another, and not from
the rest of the system. Thus, build processes may interfere with each
other, and may access programs, libraries, and other files available on the
system—making it much harder to view them as pure functions.
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.