Next: , Previous: , Up: Configuración del sistema   [Contents][Index]


11.17 Invoking 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 %system
  (operating-system
   (host-name "gnu-deployed")
   (timezone "Etc/UTC")
   (bootloader (bootloader-configuration
                (bootloader grub-bootloader)
                (targets '("/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 (see 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.

Once you’ve deployed a system on a set of machines, you may find it useful to run a command on all of them. The --execute or -x option lets you do that; the example below runs uname -a on all the machines listed in the deployment file:

guix deploy file -x -- uname -a

One thing you may often need to do after deployment is restart specific services on all the machines, which you can do like so:

guix deploy file -x -- herd restart service

The guix deploy -x command returns zero if and only if the command succeeded on all the machines.

Below are the data types you need to know about when writing a deployment file.

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.

safety-checks? (default: #t)

Whether to perform “safety checks” before deployment. This includes verifying that devices and file systems referred to in the operating system configuration actually exist on the target machine, and making sure that Linux modules required to access storage devices at boot time are listed in the initrd-modules field of the operating system.

These safety checks ensure that you do not inadvertently deploy a system that would fail to boot. Be careful before turning them off!

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.


Next: Ejecución de Guix en una máquina virtual, Previous: Invoking guix system, Up: Configuración del sistema   [Contents][Index]