Next: , Previous: , Up: Preparación del daemon   [Contents][Index]


2.4.2 Uso de la facilidad de delegación de trabajo

Cuando así se desee, el daemon de construcción puede delegar construcciones de derivación a otras máquinas ejecutando Guix, usando el procedimiento de extensión de construcción offload8. Cuando dicha característica es activada se lee una lista de máquinas de construcción especificadas por la usuaria desde /etc/guix/machines.scm; cada vez que se solicita una construcción, por ejemplo via guix build, el daemon intenta su delegación a una de las máquinas que satisfaga las condiciones de la derivación, en particular su tipo de sistema—por ejemplo, x86_64-linux. Una única máquina puede usarse para múltiples tipos de sistema, ya sea porque los implemente su arquitectura de manera nativa, a través de emulación (see Transparent Emulation with QEMU), o ambas. Los prerrequisitos restantes para la construcción se copian a través de SSH a la máquina seleccionada, la cual procede con la construcción; con un resultado satisfactorio la o las salidas de la construcción son copiadas de vuelta a la máquina inicial. La facilidad de descarga de trabajo incorpora una planificación básica que intenta seleccionar la mejor máquina, la cual es seleccionada entre las máquinas disponibles en base a criterios como los siguientes:

  1. La disponibilidad de un puesto de construcción. Una máquina de construcción tiene el número de puestos de construcción (conexiones) que indique el valor de parallel-builds en su objeto build-machine.
  2. Su velocidad relativa, a través del campo speed de su objeto build-machine.
  3. Su carga de trabajo. El valor normalizado de carga debe ser menor aun valor límite, configurable a través del campo overload-threshold de su objeto build-machine.
  4. El espacio disponible en el disco. Debe haber más de 100 MiB disponibles.

El archivo /etc/guix/machines.scm normalmente tiene un contenido de este estilo:

(list (build-machine
        (name "ochentayseis.example.org")
        (systems (list "x86_64-linux" "i686-linux"))
        (host-key "ssh-ed25519 AAAAC3Nza…")
        (user "rober")
        (speed 2.))     ;¡increíblemente rápida!

      (build-machine
        (name "armeight.example.org")
        (systems (list "aarch64-linux"))
        (host-key "ssh-rsa AAAAB3Nza…")
        (user "alice")

        ;; Remember 'guix offload' is spawned by
        ;; 'guix-daemon' as root.
        (private-key "/root/.ssh/identity-for-guix")))

En el ejemplo anterior se especifica una lista de dos máquinas de construcción, una para las arquitecturas x86_64 y i686, y otra para la arquitectura aarch64.

De hecho, este archivo es—¡sin sorpresa ninguna!—un archivo Scheme que se evalúa cuando el procedimiento de extensión offload se inicia. El valor que devuelve debe ser una lista de objetos build-machine. Mientras que este ejemplo muestra una lista fija de máquinas de construcción, una puede imaginarse, digamos, el uso de DNS-SD para devolver una lista de máquinas de construcción potenciales descubierta en la red local (see Guile-Avahi in Using Avahi in Guile Scheme Programs). El tipo de datos build-machine se detalla a continuación.

Tipo de datos: build-machine

Este tipo de datos representa las máquinas de construcción a las cuales el daemon puede delegar construcciones. Los campos importantes son:

name

El nombre de red de la máquina remota.

systems

Los tipos de sistema implementados por la máquina remota—por ejemplo, (list "x86_64-linux" "i686-linux").

user

La cuenta de usuaria usada para la conexión a la máquina remota por SSH. Tenga en cuenta que el par de claves SSH no debe estar protegido por contraseña, para permitir ingresos al sistema no interactivos.

host-key

Este campo debe contener la clave pública de la máquina de SSH en formato OpenSSH. Es usado para autentificar la máquina cuando nos conectamos a ella. Es una cadena larga más o menos así:

ssh-ed25519 AAAAC3NzaC…mde+UhL recordatorio@example.org

Si la máquina está ejecutando el daemon OpenSSH, sshd, la clave pública de la máquina puede encontrarse en un archivo como /etc/ssh/ssh_host_ed25519_key.pub.

Si la máquina está ejecutando el daemon SSH GNU lsh, lshd, la clave de la máquina está en /etc/lsh/host-key.pub o un archivo similar. Puede convertirse a formato OpenSSH usando lsh-export-key (see Converting keys in LSH Manual):

$ lsh-export-key --openssh < /etc/lsh/host-key.pub
ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV…

Ciertos número de campos opcionales pueden ser especificados:

port (predeterminado: 22)

Número de puerto del servidor SSH en la máquina.

private-key (predeterminada: ~root/.ssh/id_rsa)

El archivo de clave privada SSH usado para conectarse a la máquina, en formato OpenSSH. Esta clave no debe estar protegida con una contraseña.

Tenga en cuenta que el valor predeterminado es la clave privada de la cuenta de root. Asegúrese de que existe si usa el valor predeterminado.

compression (predeterminado: "zlib@openssh.com,zlib")
compression-level (predeterminado: 3)

Los métodos de compresión y nivel de compresión a nivel SSH solicitados.

Tenga en cuenta que la delegación de carga depende de la compresión SSH para reducir el ancho de banda usado cuando se transfieren archivos hacia y desde máquinas de construcción.

daemon-socket (predeterminado: "/var/guix/daemon-socket/socket")

Nombre de archivo del socket de dominio Unix en el que guix-daemon escucha en esa máquina.

overload-threshold (default: 0.8)

El límite superior de carga, el cual se usa en la planificación de delegación de tareas para descartar potenciales máquinas si superan dicho límite. Dicho valor más o menos representa el uso del procesador de la máquina, con un rango de 0.0 (0%) a 1.0 (100%). También se puede desactivar si se proporciona el valor #f en overload-threshold.

parallel-builds (predeterminadas: 1)

El número de construcciones que pueden ejecutarse en paralelo en la máquina.

speed (predeterminado: 1.0)

Un “factor de velocidad relativa”. El planificador de delegaciones tenderá a preferir máquinas con un factor de velocidad mayor.

features (predeterminadas: '())

Una lista de cadenas denotando las características específicas permitidas por la máquina. Un ejemplo es "kvm" para máquinas que tienen los módulos KVM de Linux y las correspondientes características hardware. Las derivaciones pueden solicitar las características por nombre, y entonces se planificarán en las máquinas adecuadas.

El ejecutable guix debe estar en la ruta de búsqueda de las máquinas de construcción. Puede comprobar si es el caso ejecutando:

ssh build-machine guix repl --version

Hay una última cosa por hacer una vez machines.scm está en su lugar. Como se ha explicado anteriormente, cuando se delega, los archivos se transfieren en ambas direcciones entre los almacenes de las máquinas. Para que esto funcione, primero debe generar un par de claves en cada máquina para permitir al daemon exportar los archivos firmados de archivos en el almacén (see Invocación de guix archive):

# guix archive --generate-key

Cada máquina de construcción debe autorizar a la clave de la máquina maestra para que acepte elementos del almacén que reciba de la maestra:

# guix archive --authorize < clave-publica-maestra.txt

La máquina maestra debe autorizar la clave de cada máquina de construcción de la misma manera.

Todo este lío con claves está ahí para expresar las mutuas relaciones de confianza entre pares de la máquina maestra y las máquinas de construcción. Concretamente, cuando la maestra recibe archivos de una máquina de construcción (y vice versa), su daemon de construcción puede asegurarse de que son genuinos, no han sido modificados, y que están firmados por una clave autorizada.

Para comprobar si su configuración es operacional, ejecute esta orden en el nodo maestro:

# guix offload test

This will attempt to connect to each of the build machines specified in /etc/guix/machines.scm, make sure Guix is available on each machine, attempt to export to the machine and import from it, and report any error in the process.

Si quiere probar un archivo de máquinas diferente, simplemente lo debe especificar en la línea de órdenes:

# guix offload test otras-maquinas.scm

Por último, puede probar un subconjunto de máquinas cuyos nombres coincidan con una expresión regular así:

# guix offload test maquinas.scm '\.gnu\.org$'

Para mostrar la carga actual de todas las máquinas de construcción, ejecute esta orden en el nodo principal:

# guix offload status

Footnotes

(8)

Esta característica está únicamente disponible cuando Guile-SSH está presente.


Next: Soporte de SELinux, Previous: Configuración del entorno de construcción, Up: Preparación del daemon   [Contents][Index]