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


10.14 Invocación de 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 (véase GNU recutils databases en GNU recutils manual).

reconfigure

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

Nota: Es altamente recomendable ejecutar guix pull antes de la primera ejecución de guix system reconfigure (véase 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 (véase 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 (véase 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. Véase 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 (véase 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’ (véase --delete-generations). Sin parámetros, se eliminan todas las generaciones del sistema excepto la actual:

guix system delete-generations

También puede seleccionar las generaciones que desea eliminar. El siguiente ejemplo elimina todas las generaciones del sistema que tienen más de dos meses de antigüedad:

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.

Esta orden también instala el cargador de arranque en el destino especificado en mi-conf-del-so.scm, siempre que no se proporcione la opción --no-bootloader.

vm

Construye una máquina virtual que contiene el sistema operativo declarado en archivo, y devuelve un guión que ejecuta dicha máquina virtual (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 (véase 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 -net user,model=virtio-net-pci

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

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.

La opción --full-boot fuerza una secuencia de arranque completa, desde el cargador de arranque. Esto necesita más espacio en disco ya que la imagen raíz que contiene el núcleo, initrd y los archivos de datos del cargador de arranque deben crearse. La opción --image-size puede usarse para especificar el tamaño de la imagen.

image
docker-image

Devuelve una máquina virtual, imagen de disco o imagen Docker del sistema operativo declarado en archivo que es independiente. Por omisión, guix system estima el tamaño de la imagen necesario para almacenar el sistema, pero puede usar la opción --image-size para especificar un valor. Las imágenes Docker se construyen para que contengan exactamente lo que necesitan, por lo que la opción --image-size se ignora en el caso de docker-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. Véase Ejecutar 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).

Con docker-image se produce una imagen Docker. Guix construye la imagen de cero, no de una imagen Docker base preexistente. Como resultado, contiene exactamente lo definido en el archivo de configuración del sistema operativo. Puede cargar la imagen y ejecutar un contenedor Docker mediante el uso de ordenes como las siguientes:

id_imagen="`docker load < guix-system-docker-image.tar.gz`"
id_contenedor="`docker create $id_imagen`"
docker start $id_contenedor

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 (véase 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

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

opciones puede contener cualquiera de las opciones de construcción comunes (véase 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 (véase 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 (véase Invocación de guix build).

--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 (véase 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 (véase size specifications en 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 (véase Sistemas de archivos) y que cualquier módulo del núcleo Linux que pudiese necesitarse durante el arranque se encuentre en initrd-modules (véase 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. Véase Debug Commands en 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 la generación actual del sistema: su nombre de archivo, el núcleo y el cargador de arranque usados, etcétera, así como información de procedencia cuando esté disponible.

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 (véase 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

¡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 (véase 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 (véase --backend):

La orden:

$ guix system extension-graph archivo | xdot -

muestra las relaciones de extensión entre los servicios.

shepherd-graph

Emit to standard output the dependency graph of shepherd services of the operating system defined in file. Véase 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.


Notas al pie

(45)

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


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