Siguiente: , Anterior: , Subir: Configuración del sistema   [Índice general][Índice]


10.15 Invocación de guix deploy

Ya hemos visto como usar declaraciones operating-system para gestionar la configuración de una máquina de manera local. Supongamos no obstante que necesita configurar múltiples máquinas—quizá esté gestionando un servicio en la web que se componga de varios servidores. guix deploy le permite usar las mismas declaraciones operating-system para gestionar múltiples máquinas remotas como un único “despliegue” lógico.

Nota: La funcionalidad descrita en esta sección está todavía en desarrollo y sujeta a cambios. Puede ponerse en contacto con nosotras a través de guix-devel@gnu.org.

guix deploy archivo

Dicha invocación llevará a cabo en las máquinas el despliegue al cual el archivo evalúe. Como ejemplo, archivo puede contener una definición como esta:

;; Este es un despliegue de Guix con una configuración en
;; mínima ("en los huesos"), sin servidor gráfico X11,
;; en una máquina con un daemon SSH escuchando en
;; localhost:2222. Una configuración como esta puede ser
;; apropiada para máquinas virtuales con puertos redirigidos
;; a la interfaz local de la máquina anfitriona.
(use-service-modules networking ssh)
(use-package-modules bootloaders)

(define %sistema
  (operating-system
   (host-name "despliegue-gnu")
   (timezone "Etc/UTC")
   (bootloader (bootloader-configuration
                (bootloader grub-bootloader)
                (target "/dev/vda")
                (terminal-outputs '(console))))
   (file-systems (cons (file-system
                        (mount-point "/")
                        (device "/dev/vda1")
                        (type "ext4"))
                       %base-file-systems))
   (services
    (append (list (service dhcp-client-service-type)
                  (service openssh-service-type
                           (openssh-configuration
                            (permit-root-login #t)
                            (allow-empty-passwords? #t))))
            %base-services))))

(list (machine
       (operating-system %sistema)
       (environment managed-host-environment-type)
       (configuration (machine-ssh-configuration
                       (host-name "localhost")
                       (system "x86_64-linux")
                       (user "alicia")
                       (identity "./id_rsa")
                       (port 2222)))))

El archivo debe evaluar a una lista de objetos machine. Este ejemplo, durante el despliegue, creará una nueva generación en el sistema remoto que implemente la declaración operating-system %system. environment y configuration especifican cómo debe aprovisionarse la máquina—es decir, cómo se crean y gestionan los recursos computacionales. El ejemplo previo no crea ningún recurso, ya que 'managed-host es una máquina que ya está ejecutando el sistema Guix y está disponible a través de la red. Este es un caso particularmente simple; un despliegue más complejo puede implicar, por ejemplo, el arranque de máquinas virtuales a través de un proveedor de servidores privados virtuales (VPS). En dicho caso se usaría un tipo distinto en environment.

Tenga en cuenta que primero debe generar un par de claves en la máquina coordinadora para permitir al daemon exportar archivos firmados de archivos en el almacén (véase Invocación de guix archive), aunque este paso se realiza de manera automática en el sistema Guix:

# guix archive --generate-key

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

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

La usuaria proporcionada en user, en este ejemplo, especifica la cuenta de la usuaria con la que ingresar en el sistema para realizar el despliegue. Su valor predeterminado es root, pero el ingreso al sistema como root a través de SSH en algunos casos puede no estar permitido. Para solventar este problema, guix deploy puede ingresar al sistema como una usuaria sin privilegios y ejecutar sudo para escalar privilegios. Esto funciona únicamente si sudo está instalado en el sistema remoto y se puede invocar de manera no interactiva como user. Es decir: la línea de sudoers que permite a la usuaria user la capacidad de usar sudo debe contener la etiqueta NOPASSWD. Esto se puede conseguir con el siguiente fragmento de la configuración de sistema operativo:

(use-modules ...
             (gnu system))               ;para %sudoers-specification

(define %usuaria "nombre")

(operating-system
  ...
  (sudoers-file
     (plain-file "sudoers"
                 (string-append (plain-file-content %sudoers-specification)
                                (format #f "~a ALL = NOPASSWD: ALL~%"
                                        %usuaria)))))

Para obtener más información sobre el formato del archivo sudoers consulte man sudoers.

Tipo de datos: machine

Tipo de datos que representa una máquina individual en un despliegue heterogéneo de Guix.

operating-system

El objeto de la configuración de sistema operativo a desplegar.

environment

Un objeto environment-type que describe como debe aprovisionarse la máquina.

configuration (predeterminado: #f)

Un objeto que describe la configuración para el entorno (environment) de la máquina. Si environment tiene una configuración predeterminada, puede usarse #f. No obstante, si se usa #f para un entorno sin configuración predeterminada se emitirá un error.

Tipo de datos: machine-ssh-configuration

Tipo de datos que representa los parámetros del cliente SSH para una máquina con un entorno (environment) de tipo gestionado (managed-host-environment-type).

host-name
build-locally? (predeterminado: #t)

Si es falso, las derivaciones del sistema se construirán en la máquina sobre la que se realiza el despliegue.

system

El tipo de sistema que describe la arquitectura de la máquina sobre la que se realiza el despliegue—por ejemplo, "x86_64-linux".

authorize? (predeterminado: #t)

Si es verdadero, la clave de firma de la máquina coordinadora debe añadirse al anillo de claves del control de acceso (ACL) de la máquina remota.

port (predeterminado: 22)
user (predeterminada: "root")
identity (predeterminada: #f)

Cuando se especifica, indica la ruta al archivo que contiene la clave privada de SSH para la identificación con la máquina remota.

host-key (predeterminada: #f)

Esta debería ser la clave SSH de la máquina, que puede ser más o menos así:

ssh-ed25519 AAAAC3Nz… root@example.org

Cuando host-key es #f, el servidor se identifica con el archivo ~/.ssh/known_hosts, igual que hace el cliente ssh de OpenSSH.

allow-downgrades? (predeterminado: #f)

Determina si se permiten instalaciones de versiones potencialmente anteriores.

Al igual que guix system reconfigure, guix deploy compara la revisión del canal desplegada actualmente en la máquina remota (como muestra guix system describe) con aquella que se esté usando en ese momento (como muestra guix describe) para determinar si las revisiones que se despliegan son descendientes de aquellas en uso. Cuando no es el caso y el valor de allow-downgrades? es falso, emite un error. Esto le permite no instalar accidentalmente una versión anterior en máquinas remotas.

Tipo de datos: digital-ocean-configuration

Tipo de datos que representa el Droplet que debe crearse para la máquina con environment digital-ocean-environment-type.

ssh-key

The path to the SSH private key to use to authenticate with the remote host. In the future, this field may not exist.

tags

A list of string “tags” that uniquely identify the machine. Must be given such that no two machines in the deployment have the same set of tags.

region

Descriptor (slug) de región de Digital Ocean, como "nyc3".

size

Descriptor (slug) de tamaño de Digital Ocean, como "s-1vcpu-1gb"

enable-ipv6?

Determina si droplet debe crearse con capacidad de usar redes IPv6 o no.


Siguiente: , Anterior: , Subir: Configuración del sistema   [Índice general][Índice]