Next: Soporte de SELinux, Previous: Configuración del entorno de construcción, Up: Preparación del daemon [Contents][Index]
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
offload
8. 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:
parallel-builds
en su objeto build-machine
.
speed
de su objeto
build-machine
.
overload-threshold
de su
objeto build-machine
.
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.
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
The user account on the remote machine to use when connecting over SSH. Note that the SSH key pair must not be passphrase-protected, to allow non-interactive logins.
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.
Nota: On Guix System, instead of managing /etc/guix/machines.scm independently, you can choose to specify build machines directly in the
operating-system
declaration, in thebuild-machines
field ofguix-configuration
. Seebuild-machines
field ofguix-configuration
.
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
Nota: This key pair is not related to the SSH key pair that was previously mentioned in the description of the
build-machine
data type.
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
Next: Soporte de SELinux, Previous: Configuración del entorno de construcción, Up: Preparación del daemon [Contents][Index]