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


12.15 Invoking guix system

Una vez haya escrito la declaración de sistema operativo como se ha visto en la sección previa, puede instanciarse mediante el uso de la orden guix system. Su sinopsis es:

guix system opcionesacción archivo

archivo debe ser el nombre de un archivo que contenga una declaración operating-system. acción especifica cómo se instancia el sistema operativo. Actualmente se permiten los siguientes valores:

search

Muestra las definiciones de tipos de servicio disponibles que corresponden con las expresiones regulares proporcionadas, ordenadas por relevancia:

$ guix system search console
name: console-fonts
location: gnu/services/base.scm:806:2
extends: shepherd-root
description: Install the given fonts on the specified ttys (fonts are per
+ virtual console on GNU/Linux).  The value of this service is a list of
+ tty/font pairs.  The font can be the name of a font provided by the `kbd'
+ package or any valid argument to `setfont', as in this example:
+
+      '(("tty1" . "LatGrkCyr-8x16")
+        ("tty2" . (file-append
+                      font-tamzen
+                      "/share/kbd/consolefonts/TamzenForPowerline10x20.psf"))
+        ("tty3" . (file-append
+                      font-terminus
+                      "/share/consolefonts/ter-132n"))) ; for HDPI
relevance: 9

name: mingetty
location: gnu/services/base.scm:1190:2
extends: shepherd-root
description: Provide console login using the `mingetty' program.
relevance: 2

name: login
location: gnu/services/base.scm:860:2
extends: pam
description: Provide a console log-in service as specified by its
+ configuration value, a `login-configuration' object.
relevance: 2

…

Como con guix package --search, el resultado se obtiene en formato recutils, lo que facilita el filtrado de la salida (see GNU recutils databases in GNU recutils manual).

edit

Edit or view the definition of the given service types.

For example, the command below opens your editor, as specified by the EDITOR environment variable, on the definition of the openssh service type:

guix system edit openssh
reconfigure

Construye el sistema operativo descrito en archivo, lo activa, y se constituye como estado actual46.

Nota: Es altamente recomendable ejecutar guix pull antes de la primera ejecución de guix system reconfigure (see Invocación de guix pull). No hacerlo puede ocasionar que se obtenga una versión más antigua de Guix una vez que reconfigure se haya completado.

Lleva a efecto toda la configuración especificada en archivo: cuentas de usuaria, servicios del sistema, lista de paquetes global, programas con setuid, etc. La orden inicia los servicios del sistema especificados en archivo que no estén actualmente en ejecución; si un servicio se encuentra en ejecución esta orden prepara su actualización durante la próxima parada (por ejemplo, con herd stop X o herd restart X).

Esta orden crea una nueva generación cuyo número es el sucesor de la siguiente generación (como lo muestra guix system list-generations). Si esa generación ya existe, será sobreescrita. Este comportamiento es el mismo que el de guix package (see Invocación de guix package).

También añade una entrada al cargador de arranque para la nueva configuración del sistema operativo—en caso de que no se proporcione la opción --no-bootloader. Con GRUB, mueve las entradas de configuraciones antiguas a un submenú, permitiendo la selección de una generación previa del sistema en tiempo de arranque en caso necesario.

Tras la finalización, el nuevo sistema se despliega en /run/current-system. Este directorio contiene metadatos de procedencia: la lista de canales usados (see Canales) y el archivo en sí, cuando esté disponible. Puede visualizar dichos metadatos con la siguiente orden:

guix system describe

Esta información es útil en caso de que desee inspeccionar posteriormente cómo se construyó está generación en particular. De hecho, asumiendo que archivo es autocontenido, puede construir de nuevo la generación n de su sistema operativo con:

guix time-machine \
  -C /var/guix/profiles/system-n-link/channels.scm -- \
  system reconfigure \
  /var/guix/profiles/system-n-link/configuration.scm

¡Puede pensar en ello como una especie de control de versiones incorporado en Guix! Su sistema no es únicamente un artefacto binario: transporta sus propias fuentes con él. See provenance-service-type, para más información sobre el seguimiento de procedencia.

De manera predeterminada, reconfigure evita que instale una version anterior en su sistema operativo, lo que podría (re)introducir fallos de seguridad y también provocar problemas con servicios que mantienen estado como los sistemas de gestión de bases de datos. Puede modificar este comportamiento con el parámetro --allow-downgrades.

switch-generation

Cambia a una generación existente del sistema. Esta acción cambia atómicamente el perfil del sistema a la generación del sistema especificada. También redistribuye las entradas de sistema del menú de arranque existentes. Marca como predeterminada la entrada de la generación de sistema especificada y mueve las entradas de otras generaciones a un submenú, si el cargador de arranque lo permite. La próxima vez que se arranque el sistema, se usará la generación de sistema especificada.

El cargador de arranque en sí no se reinstala durante esta orden. Por tanto, el cargador de arranque instalado se usa con un archivo de configuración actualizado.

La generación deseada puede especificarse explícitamente con su numero de generación. Por ejemplo, la siguiente invocación cambiaría a la generación 7 del sistema:

guix system switch-generation 7

La generación deseada puede especificarse también de forma relativa a la generación actual con la forma +N o -N, donde +3 significa “3 generaciones después de la generación actual”, y -1 significa “1 generación antes de la generación actual”. Cuando se especifica un valor negativo como -1 debe ir precedido de -- para evitar que se analice como una opción. Por ejemplo:

guix system switch-generation -- -1

Actualmente, el efecto de la invocación de esta acción es únicamente cambiar el perfil del sistema a una generación existente y redistribuir las entradas del menú de arranque. Para realmente empezar a usar la generación deseada del sistema, debe reiniciar tras esta acción. En el futuro, se actualizará para hacer lo mismo que reconfigure, como activación y desactivación de servicios.

Esta acción fallará si la generación especificada no existe.

roll-back

Cambia a la generación de sistema previa. Tras el siguiente arranque del sistema, usará la generación de sistema precedente. Es la operación inversa de reconfigure, y es equivalente a la invocación de switch-generation con -1 como parámetro.

Actualmente, como con switch-generation, debe reiniciar tras la ejecución de esta acción para realmente empezar a usar la generación de sistema precedente.

delete-generations

Elimina generaciones del sistema, haciendo posible su recolección con la basura (see Invocación de guix gc, para información sobre como llevar a cabo la “recolección de basura”).

Esto funciona del mismo modo que ‘guix package --delete-generations’ (see --delete-generations). Sin parámetros, se eliminan todas las generaciones del sistema excepto la actual:

guix system delete-generations

You can also select the generations you want to delete. The example below deletes all the system generations that are more than two months old:

guix system delete-generations 2m

La ejecución de esta orden reinstala automáticamente el cargador de arranque con una lista de entradas del menú actualizada—por ejemplo, el submenú de generaciones antiguas en GRUB no mostrará las generaciones que hayan sido borradas.

build

Construye la derivación del sistema operativo, que incluye todos los archivos de configuración y programas necesarios para el arranque y la ejecución del sistema. Esta acción no instala nada en realidad.

init

Construye el directorio dado con todos los archivos necesarios para ejecutar el sistema operativo especificado en archivo. Esto es útil para la instalación inicial de Guix. Por ejemplo:

guix system init mi-configuración-del-so.scm /mnt

copia a /mnt todos los elementos del almacén necesarios para la configuración especificada en mi-configuración-del-so.scm. Esto incluye los archivos de configuración, paquetes y demás. También crea otros archivos esenciales necesarios para la correcta operación del sistema—por ejemplo, los directorios /etc, /var y /run, y el archivo /bin/sh.

This command also installs bootloader on the targets specified in my-os-config, unless the --no-bootloader option was passed.

vm

Build a virtual machine (VM) that contains the operating system declared in file, and return a script to run that VM.

Nota: La acción vm y otras presentadas a continuación pueden usar la funcionalidad KVM del núcleo Linux-libre. Específicamente, si la máquina permite la virtualización hardware, debe cargarse el correspondiente módulo KVM del núcleo, debe existir el nodo del dispositivo /dev/kvm y tanto la propia usuaria como las usuarias de construcción del daemon deben tener acceso de lectura y escritura al mismo (see Configuración del entorno de construcción).

Los parámetros proporcionados al guión se pasan a QEMU como en el siguiente ejemplo, que activa la red y solicita 1 GiB de RAM para la máquina emulada:

$ /gnu/store/…-run-vm.sh -m 1024 -smp 2 -nic user,model=virtio-net-pci

It’s possible to combine the two steps into one:

$ $(guix system vm my-config.scm) -m 1024 -smp 2 -nic user,model=virtio-net-pci

La VM comparte su almacén con el sistema anfitrión.

By default, the root file system of the VM is mounted volatile; the --persistent option can be provided to make it persistent instead. In that case, the VM disk-image file will be copied from the store to the TMPDIR directory to make it writable.

Sistemas de archivos adicionales pueden compartirse entre la máquina anfitriona y la virtual mediante el uso de las opciones --share y --expose: la primera especifica un directorio a compartir con acceso de escritura, mientras que la última proporciona solo acceso de lectura al directorio compartido.

El siguiente ejemplo crea una máquina virtual en la que el directorio de la usuaria es accesible en modo solo-lecture, y donde el directorio /intercambio esta asociado de forma lectura-escritura con $HOME/tmp en el sistema anfitrión:

guix system vm mi-configuración.scm \
   --expose=$HOME --share=$HOME/tmp=/intercambio

En GNU/Linux, lo predeterminado es arrancar directamente el núcleo; esto posee la ventaja de necesitar únicamente una pequeña imagen del disco raíz pequeña ya el el almacén de la anfitriona puede montarse.

The --full-boot option forces a complete boot sequence, starting with the bootloader. This requires more disk space since a root image containing at least the kernel, initrd, and bootloader data files must be created.

The --image-size option can be used to specify the size of the image.

The --no-graphic option will instruct guix system to spawn a headless VM that will use the invoking tty for IO. Among other things, this enables copy-pasting, and scrollback. Use the ctrl-a prefix to issue QEMU commands; e.g. ctrl-a h prints a help, ctrl-a x quits the VM, and ctrl-a c switches between the QEMU monitor and the VM.

image

The image command can produce various image types. The image type can be selected using the --image-type option. It defaults to efi-raw. When its value is iso9660, the --label option can be used to specify a volume ID with image. By default, the root file system of a disk image is mounted non-volatile; the --volatile option can be provided to make it volatile instead. When using image, the bootloader installed on the generated image is taken from the provided operating-system definition. The following example demonstrates how to generate an image that uses the grub-efi-bootloader bootloader and boot it with QEMU:

image=$(guix system image --image-type=qcow2 \
        gnu/system/examples/lightweight-desktop.tmpl)
cp $image /tmp/my-image.qcow2
chmod +w /tmp/my-image.qcow2
qemu-system-x86_64 -enable-kvm -hda /tmp/my-image.qcow2 -m 1000 \
                   -bios $(guix build ovmf)/share/firmware/ovmf_x64.bin

When using the efi-raw image type, a raw disk image is produced; it can be copied as is to a USB stick, for instance. Assuming /dev/sdc is the device corresponding to a USB stick, one can copy the image to it using the following command:

# dd if=$(guix system image my-os.scm) of=/dev/sdc status=progress

La orden --list-image-types muestra todos los tipos de imagen disponibles.

When using the qcow2 image type, the returned image is in qcow2 format, which the QEMU emulator can efficiently use. See Ejecución de Guix en una máquina virtual, for more information on how to run the image in a virtual machine. The grub-bootloader bootloader is always used independently of what is declared in the operating-system file passed as argument. This is to make it easier to work with QEMU, which uses the SeaBIOS BIOS by default, expecting a bootloader to be installed in the Master Boot Record (MBR).

When using the docker image type, a Docker image is produced. Guix builds the image from scratch, not from a pre-existing Docker base image. As a result, it contains exactly what you define in the operating system configuration file. You can then load the image and launch a Docker container using commands like the following:

image_id="$(docker load < guix-system-docker-image.tar.gz)"
container_id="$(docker create $image_id)"
docker start $container_id

Esta orden arranca un contenedor Docker nuevo a partir de la imagen especificada. El sistema Guix se arrancará de la manera habitual, lo que implica el inicio de cualquier servicio que se haya definido en la configuración del sistema operativo. Puede iniciar una sesión de shell interactiva en el contenedor mediante el uso de docker exec:

docker exec -ti $container_id /run/current-system/profile/bin/bash --login

Dependiendo de lo que ejecute en el contenedor Docker, puede ser necesario proporcionar permisos adicionales al contenedor. Por ejemplo, si pretende construir software mediante el uso de Guix dentro del contenedor Docker, puede tener que proporcionar la opción --privileged a docker create.

Por último, la opción --network afecta a guix system docker-image: produce una imagen donde la red supuestamente se comparte con el sistema anfitrión, y por lo tanto no contiene servicios como nscd o NetworkManager.

container

Devuelve un guión de la ejecución del sistema operativo declarado en archivo dentro de un contenedor. Los contenedores son un conjunto de mecanismos de aislamiento ligeros que proporciona el núcleo Linux-libre. Los contenedores necesitan sustancialmente menos recursos que máquinas virtuales completas debido a que el núcleo, los objetos compartidos y otros recursos pueden compartirse con el sistema anfitrión; esto también significa que proporcionan un menor aislamiento.

En este momento, el guión debe ejecutarse como root para permitir más de una única usuaria y grupo. El contenedor comparte su almacén con la máquina anfitriona.

Como con la acción vm (see guix system vm), sistemas de archivos adicionales a compartir entre la máquina anfitriona y el contenedor pueden especificarse mediante el uso de las opciones --share y --expose:

guix system container mi-configuración.scm \
   --expose=$HOME --share=$HOME/tmp=/intercambio

The --share and --expose options can also be passed to the generated script to bind-mount additional directories into the container.

Nota: Esta opción requiere Linux-libre 3.19 o posterior.

opciones puede contener cualquiera de las opciones de construcción comunes (see Opciones comunes de construcción). Además, opciones puede contener una de las siguientes:

--expression=expr
-e expr

Considera el sistema operativo al cual evalúa expr. Es una alternativa a la especificación de un archivo que evalúe a un sistema operativo. Se usa para la generación de la imagen de instalación de Guix (see Construcción de la imagen de instalación).

--system=sistema
-s sistema

Intenta la construcción para sistema en vez de para el tipo de la máquina anfitriona. Funciona como en guix build (see Invocación de guix build).

--target=tripleta

Compilación cruzada para la tripleta, que debe ser una tripleta GNU válida, cómo "aarch64-linux-gnu" (see GNU configuration triplets in Autoconf).

--derivation
-d

Devuelve el nombre de archivo de la derivación del sistema operativo proporcionado sin construir nada.

--save-provenance

Como se ha mostrado previamente, guix system init y guix system reconfigure siempre almacenan información de procedencia a través de un servicio dedicado (see provenance-service-type). No obstante, otras órdenes no hacen esto de manera predeterminada. Si desea, digamos, crear una imagen de máquina virtual que contenga información de procedencia, puede ejecutar:

guix system image -t qcow2 --save-provenance config.scm

De este modo, la imagen resultante “embeberá sus propias fuentes” de manera efectiva en forma de metadatos en /run/current-system. Con dicha información se puede reconstruir la imagen para asegurarse de que realmente contiene lo que dice contener; o se puede usar para derivar una variante de la imagen.

--image-type=tipo
-t tipo

For the image action, create an image with given type.

When this option is omitted, guix system uses the efi-raw image type.

--file-system-type=iso9660 produce una imagen ISO-9660, que puede ser grabada en CD y DVD.

--image-size=tamaño

For the image action, create an image of the given size. size may be a number of bytes, or it may include a unit as a suffix (see size specifications in GNU Coreutils).

Cuando se omite esta opción, guix system calcula una estimación del tamaño de la imagen en función del tamaño del sistema declarado en archivo.

--network
-N

Con la acción container, permite a los contenedores acceder a la red de la máquina anfitriona, es decir, no crea un espacio de nombres de red.

--root=archivo
-r archivo

Hace que archivo sea un enlace simbólico al resultado, y lo registra como una raíz del recolector de basura.

--skip-checks

Omite las comprobaciones de seguridad previas a la instalación.

Por omisión, guix system init y guix system reconfigure realizan comprobaciones de seguridad: se aseguran de que los sistemas de archivos que aparecen en la declaración operating-system realmente existen (see Sistemas de archivos) y que cualquier módulo del núcleo Linux que pudiese necesitarse durante el arranque se encuentre en initrd-modules (see Disco en RAM inicial). El uso de esta opción omite todas estas comprobaciones.

--allow-downgrades

Indica a guix system reconfigure que permita la instalación de versiones más antiguas.

De manera predeterminada reconfigure evita que instale una versión más antigua. Esto se consigue comparando la información de procedencia en su sistema operativo (mostrada por guix system describe) con aquella de la orden guix (mostrada por guix describe). Si las revisiones de guix no son descendientes de las usadas en su sistema, guix system reconfigure termina con un error. Proporcionar la opción --allow-downgrades le permite evitar estas comprobaciones.

Nota: Asegúrese de entender las implicaciones de seguridad antes de usar la opción --allow-downgrades.

--on-error=estrategia

Aplica estrategia cuando ocurre un error durante la lectura de archivo. estrategia puede ser uno de los siguientes valores:

nothing-special

Informa concisamente del error y termina la ejecución. Es la estrategia predeterminada.

backtrace

Del mismo modo, pero también muestra la secuencia de llamadas.

debug

Informa del error y entra en el depurador de Guile. A partir de ahí, puede ejecutar órdenes como ,bt para obtener la secuencia de llamadas, ,locals para mostrar los valores de las variables locales, e inspeccionar el estado del programa de forma más general. See Debug Commands in GNU Guile Reference Manual, para una lista de órdenes de depuración disponibles.

Una vez haya construido, configurado, reconfigurado y re-reconfigurado su instalación de Guix, puede encontrar útil enumerar las generaciones del sistema operativo disponibles en el disco—y que puede seleccionar en el menú de arranque:

describe

Describe the running system generation: its file name, the kernel and bootloader used, etc., as well as provenance information when available.

The --list-installed flag is available, with the same syntax that is used in guix package --list-installed (see Invocación de guix package). When the flag is used, the description will include a list of packages that are currently installed in the system profile, with optional filtering based on a regular expression.

Nota: The running system generation—referred to by /run/current-system—is not necessarily the current system generation—referred to by /var/guix/profiles/system: it differs when, for instance, you chose from the bootloader menu to boot an older generation.

It can also differ from the booted system generation—referred to by /run/booted-system—for instance because you reconfigured the system in the meantime.

list-generations

Muestra un resumen de cada generación del sistema operativo disponible en el disco, de manera legible por humanos. Es similar a la opción --list-generations de guix package (see Invocación de guix package).

De manera opcional, se puede especificar un patrón, con la misma sintaxis que la usada en guix package --list-generations, para restringir la lista de generaciones mostradas. Por ejemplo, la siguiente orden muestra generaciones que tienen hasta 10 días de antigüedad:

$ guix system list-generations 10d

The --list-installed flag may also be specified, with the same syntax that is used in guix package --list-installed. This may be helpful if trying to determine when a package was added to the system.

¡La orden guix system tiene aún más que ofrecer! Las siguientes ordenes le permiten visualizar cual es la relación entre los servicios del sistema:

extension-graph

Emit to standard output the service extension graph of the operating system defined in file (see Composición de servicios, for more information on service extensions). By default the output is in Dot/Graphviz format, but you can choose a different format with --graph-backend, as with guix graph (see --backend):

La orden:

$ guix system extension-graph archivo | xdot -

muestra las relaciones de extensión entre los servicios.

Nota: The dot program is provided by the graphviz package.

shepherd-graph

Emit to standard output the dependency graph of shepherd services of the operating system defined in file. See Servicios de Shepherd, for more information and for an example graph.

Again, the default output format is Dot/Graphviz, but you can pass --graph-backend to select a different one.


Footnotes

(46)

Esta acción (y las acciones relacionadas switch-generation y roll-back) son usables únicamente en sistemas que ya ejecuten el sistema Guix.


Next: Invoking guix deploy, Previous: Configuración del gestor de arranque, Up: Configuración del sistema   [Contents][Index]