En una configuración multiusuaria estándar, Guix y su daemon—el programa
guix-daemon
—son instalados por la administradora del sistema;
/gnu/store pertenece a root
y guix-daemon
se ejecuta
como root
. Usuarias sin privilegios pueden usar las herramientas de
Guix para construir paquetes o acceder al almacén de otro modo, y el daemon
lo hará en delegación suya, asegurando que el almacén permanece en un estado
consistente, y permitiendo compartir entre usuarias los paquetes
construidos.
Mientras que guix-daemon
se ejecuta como root
, puede que no
desee que los procesos de construcción de paquetes se ejecuten como
root
también, por razones de seguridad obvias. Para evitarlo, una
reserva especial de usuarias de construcción debe ser creada para ser
usada por los procesos de construcción iniciados por el daemon. Estas
usuarias de construcción no necesitan tener un intérprete ni un directorio
home: simplemente serán usadas cuando el daemon se deshaga de los
privilegios de root
en los procesos de construcción. Tener varias de
dichas usuarias permite al daemon lanzar distintos procesos de construcción
bajo UID separados, lo que garantiza que no interferirán entre ellos—una
característica esencial ya que las construcciones se caracterizan como
funciones puras (see Introducción).
En un sistema GNU/Linux, una reserva de usuarias de construcción puede ser
creada así (usando la sintaxis de Bash y las órdenes de 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
El número de usuarias de construcción determina cuantos trabajos de
construcción se pueden ejecutar en paralelo, especificado por la opción
--max-jobs (see --max-jobs). Para usar guix system vm
y las órdenes
relacionadas, puede necesitar añadir las usuarias de construcción al grupo
kvm
para que puedan acceder a /dev/kvm, usando -G
guixbuild,kvm
en 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
De este modo, el daemon inicia los procesos de construcción en un
“chroot”, bajo una de las usuarias guixbuilder
. En GNU/Linux, por
defecto, el entorno “chroot” contiene únicamente:
/dev
mínimo, creado en su mayor parte
independientemente del /dev
del sistema anfitrión7;
/proc
; únicamente muestra los procesos del contenedor
ya que se usa un espacio de nombres de PID separado;
localhost
a
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.
All this usually enough to ensure details of the environment do not influence build processes. In some exceptional cases where more control is needed—typically over the date, kernel, or CPU—you can resort to a virtual build machine (see virtual build machines).
Puede influir en el directorio que el daemon utiliza para almacenar los
árboles de construcción a través de la variable de entorno TMPDIR
. No
obstante, el árbol de construcción en el “chroot” siempre se llama
/tmp/guix-build-nombre.drv-0, donde nombre es el nombre
de la derivación—por ejemplo, coreutils-8.24
. De este modo, el
valor de TMPDIR
no se escapa a los entornos de construcción, lo que
evita discrepancias en caso de que los procesos de construcción capturen el
nombre de su árbol de construcción.
El daemon también respeta la variable de entorno http_proxy
y
https_proxy
para las descargas HTTP y HTTPS que realiza, ya sea para
derivaciones de salida fija (see Derivaciones) o para sustituciones
(see Sustituciones).
Si está instalando Guix como una usuaria sin privilegios, es posible todavía
ejecutar guix-daemon
siempre que proporcione el parámetro
--disable-chroot. No obstante, los procesos de construcción no
estarán aislados entre sí ni del resto del sistema. Por tanto, los procesos
de construcción pueden interferir entre ellos y pueden acceder a programas,
bibliotecas y otros archivos disponibles en el sistema—haciendo mucho más
difícil verlos como funciones 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.
“En su
mayor parte” porque, mientras el conjunto de archivos que aparecen en
/dev
es fijo, la mayor parte de estos archivos solo pueden ser
creados si el sistema anfitrión los tiene.