Next: , Previous: , Up: Definición de servicios   [Contents][Index]


11.19.3 Referencia de servicios

Ya hemos echado un vistazo a los tipos de servicio (see 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: 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: service? obj

Devuelve verdadero si obj es un servicio.

Procedimiento: service-kind servicio

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

Procedimiento: 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 (see %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 (see List Library in GNU Guile Reference Manual); modify-services proporciona simplemente una forma más concisa para este patrón común.

Special Form: 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.

Clauses can also have the following form:

(delete type)

Such a clause removes all services of the given type from services.

See 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 (see 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 (see Invoking 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.

See Tipos de servicios y servicios, para ejemplos.

Procedimiento: 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: 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: 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 (see 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 (see Invoking 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: 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: 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: 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: 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: privileged-program-service-type

Type for the “privileged-program service”. This service collects lists of executable file names, passed as gexps, and adds them to the set of privileged programs on the system (see Privileged Programs).

Variable: 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: 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 (see 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.

Variable: linux-loadable-module-service-type

Type of the service that collects lists of packages containing kernel-loadable modules, and adds them to the set of kernel-loadable modules.

This service type is intended to be extended by other service types, such as below:

(simple-service 'installing-module
                linux-loadable-module-service-type
                (list module-to-install-1
                      module-to-install-2))

This does not actually load modules at bootup, only adds it to the kernel profile so that it can be loaded by other means.


Next: Servicios de Shepherd, Previous: Tipos de servicios y servicios, Up: Definición de servicios   [Contents][Index]