Siguiente: , Anterior: , Subir: Definición de servicios   [Índice general][Índice]


10.17.3 Referencia de servicios

Ya hemos echado un vistazo a los tipos de servicio (véase Tipos de servicios y servicios). Esta sección proporciona referencias sobre cómo manipular servicios y tipos de servicio. Esta interfaz se proporciona en el módulo (gnu services).

Procedimiento Scheme: service tipo [valor]

Devuelve un nuevo servicio de tipo, un objeto <service-type> (véase a continuación). valor puede ser cualquier objeto; representa los parámetros de esta instancia de servicio particular.

Cuando se omite valor, se usa el valor predeterminado especificado por tipo; si type no especifica ningún valor, se produce un error.

Por ejemplo, esto:

es equivalente a esto:

En ambos casos el resultado es una instancia de openssh-service-type con la configuración predeterminada.

Procedimiento Scheme: service? obj

Devuelve verdadero si obj es un servicio.

Procedimiento Scheme: service-kind servicio

Devuelve el tipo de servicio—es decir, un objeto <service-type>.

Procedimiento Scheme: service-value servicio

Devuelve el valor asociado con servicio. Representa sus parámetros.

Este es un ejemplo de creación y manipulación de un servicio:

(define s
  (service nginx-service-type
           (nginx-configuration
            (nginx nginx)
            (log-directory log-directory)
            (run-directory run-directory)
            (file config-file))))

(service? s)
 #t

(eq? (service-kind s) nginx-service-type)
 #t

La forma modify-services proporciona una manera fácil de cambiar los parámetros de algunos servicios de una lista como %base-services (véase %base-services). Evalúa a una lista de servicios. Por supuesto, siempre puede usar operaciones estándar sobre listas como map y fold para hacerlo (véase List Library en GNU Guile Reference Manual); modify-services proporciona simplemente una forma más concisa para este patrón común.

Sintaxis Scheme: modify-services servicios (tipo variable => cuerpo) …

Modifica los servicios listados en servicios de acuerdo a las cláusulas proporcionadas. Cada cláusula tiene la forma:

(tipo variable => cuerpo)

donde tipo es un tipo de servicio—por ejemplo, guix-service-type—y variable es un identificador que se asocia dentro del cuerpo a los parámetros del servicio—por ejemplo, una instancia guix-configuration—del servicio original de dicho ŧipo.

El cuerpo deve evaluar a los nuevos parámetros del servicio, que serán usados para configurar el nuevo servicio. Este nuevo servicio reemplaza el original en la lista resultante. Debido a que los parámetros de servicio de un servicio se crean mediante el uso de define-record-type*, puede escribir un breve cuerpo que evalúe a los nuevos parámetros del servicio mediante el uso de la característica inherit que proporciona define-record-type* para heredar los valores antiguos.

Véase Uso de la configuración del sistema, para ejemplos de uso.

A continuación se procede con la interfaz programática de los tipos de servicios. Es algo que debe conocer para escribir definiciones de nuevos servicios, pero no es cuando busque formas de personalizar su declaración operating-system.

Tipo de datos: service-type

Esta es la representación de un tipo de servicio (véase Tipos de servicios y servicios).

name

Es un símbolo, usado únicamente para simplificar la inspección y la depuración.

extensions

Una lista no vacía de objetos <service-extension> (véase a continuación).

compose (predeterminado: #f)

Si es #f, entonces el tipo de servicio denota servicios que no pueden extenderse—es decir, servicios que no pueden recibir “valores” de otros servicios.

En otro caso, debe ser un procedimiento de un único parámetro. El procedimiento es invocado en fold-services y se le proporciona una lista de valores recibidos de las extensiones. Puede devolver un valor único.

extend (predeterminado: #f)

Si es #f, los servicios de este tipo no pueden extenderse.

En otro caso, debe ser un procedimiento que acepte dos parámetros: fold-services lo invoca, proporcionandole el valor inicial del servicio como el primer parámetro y el resultado de aplicar compose a los valores de las extensiones como segundo parámetro. Debe devolver un valor que es un parámetro válido para la instancia del servicio.

description

Una cadena, que posiblemente usa el lenguaje de marcas Texinfo, que describe en un par de frases el servicio. Esta cadena permite la búsqueda del servicio a través de guix system search (véase Invocación de guix system).

default-value (predeterminado: &no-default-value)

El valor predeterminado asociado a instancias de este tipo de servicio. Esto permite a las usuarias usar service sin su segundo parámetro:

(service tipo)

El servicio devuelto en este caso tiene el valor predeterminado especificado por tipo.

Véase Tipos de servicios y servicios, para ejemplos.

Procedimiento Scheme: service-extension tipo-deseado calcula

Devuelve una nueva extensión para servicios del tipo tipo-deseado. calcula debe ser un procedimiento de un único parámetro: es llamado en fold-services, proporcionandole el valor asociado con el servicio que proporciona la extensión; debe devolver un valor válido para el servicio deseado.

Procedimiento Scheme: service-extension? obj

Devuelve verdadero si obj es una expresión-G.

De manera ocasional, puede desear simplemente extender un servicio existente. Esto implica la creación de un nuevo tipo de servicio y la especificación de la extensión deseada, lo cual puede ser engorroso; el procedimiento simple-service proporciona un atajo para ello.

Procedimiento Scheme: simple-service nombre deseado valor

Devuelve un servicio que extiende deseado con valor. Esto funciona creando una instancia única del tipo de servicio nombre, de la cual el servicio devuelto es una instancia.

Por ejemplo, esto extiende mcron (véase Ejecución de tareas programadas) con una tarea adicional:

(simple-service 'mi-tarea-mcron mcron-service-type
                #~(job '(next-hour (3)) "guix gc -F 2G"))

En el núcleo de la abstracción de los servicios se encuentra el procedimiento fold-services, que es responsable de la “compilación” de una lista de servicios en un único directorio que contiene todo lo necesario para arrancar y ejecutar el sistema—el directorio mostrado por la orden guix system build (véase Invocación de guix system). En esencia, propaga las extensiones de servicios a través del grafo de servicios, actualizando los parámetros de cada nodo en el camino, hasta que alcanza el nodo raíz.

Procedimiento Scheme: fold-services servicios [#:target-type system-service-type]

Recorre servicios propagando sus extensiones hasta la raíz del tipo target-type; devuelve el servicio raíz tratado de la manera apropiada.

Por último, el módulo (gnu services) también define varios tipos esenciales de servicios, algunos de los cuales se enumeran a continuación.

Variable Scheme: system-service-type

Esta es la raíz del grafo de servicios. Produce el directorio del sistema como lo devuelve la orden guix system build.

Variable Scheme: boot-service-type

El tipo del “servicio de arranque”, que produce un guión de arranque. El guión de arranque es lo que ejecuta el disco inicial en RAM cuando se arranca.

Variable Scheme: etc-service-type

El tipo del servicio /etc. Este servicio se usa para crear los archivos en /etc y puede extenderse proporcionandole pares nombre/archivo como estas:

(list `("issue" ,(plain-file "issue" "¡Bienvenida!\n")))

En este ejemplo, el efecto sería la adición de un archivo /etc/issue que apunte al archivo proporcionado.

Variable Scheme: setuid-program-service-type

Tipo para el “servicio de programas setuid”. Este servicio recopila listas de nombres de archivos ejecutables, proporcionados como expresiones-G, y los añade al conjunto de programas con setuid de root en el sistema (véase Programas con setuid).

Variable Scheme: profile-service-type

Tipo del servicio que genera el perfil del sistema—es decir, los programas en /run/current-system/profile. Otros servicios pueden extenderlo proporcionandole listas de paquetes a añadir al perfil del sistema.

Variable Scheme: provenance-service-type

Es el tipo del servicio que registra los metadatos de procedencia en el sistema mismo. Crea varios archivos en /run/current-system:

channels.scm

Es un “archivo de canales” que se le puede proporcionar a guix pull -C o guix time-machine -C, y que describe los canales usados para construir el sistema, si dicha información estaba disponible (véase Canales).

configuration.scm

Est es el archivo que se proporciona como valor para el servicio provenance-service-type. De manera predeterminada, guix system reconfigure proporciona automáticamente el archivo de configuración del SO que recibió en la línea de órdenes.

provenance

Contiene la misma información que los otros dos archivos, pero en un formato que se puede procesar más fácilmente.

En general, estas dos piezas de información (canales y el archivo de configuración) son suficientes para reproducir el sistema operativo “desde las fuentes”.

Advertencias: Esta información es necesaria para reconstruir su sistema operativo, pero no siempre es suficiente. En particular, configuration.scm en sí es insuficiente si no está autocontenido—si hace referencia a módulos externos de Guile o a archivos adicionales. Si desea que configuration.scm sea autocontenido, le recomendamos que los módulos o archivos a los que haga referencia sean parte de un canal.

Además, la proveniencia de los metadatos es “silenciosa” en el sentido de que no cambia los bits que contiene su sistema, excepto por los bits de los metadatos en sí. Dos configuraciones de SO diferentes o conjuntos de canales pueden llevar al mismo sistema, bit a bit; cuando se usa provenance-service-type, estos dos sistemas tendrán distintos metadatos y por lo tanto distintos nombres de archivo en el almacén, lo que hace no tan trivial dicha comparación.

Este servicio se añade automáticamente a la configuración de su sistema operativo cuando usa guix system reconfigure, guix system init o guix deploy.


Siguiente: , Anterior: , Subir: Definición de servicios   [Índice general][Índice]