Next: Servicios de Shepherd, Previous: Tipos de servicios y servicios, Up: Definición de servicios [Contents][Index]
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)
.
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.
Devuelve verdadero si obj es un servicio.
Devuelve el tipo de servicio—es decir, un objeto
<service-type>
.
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.
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
.
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.
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.
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.
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.
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.
Esta es la raíz del grafo de servicios. Produce el directorio del sistema
como lo devuelve la orden guix system build
.
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.
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.
Type for the “setuid-program service”. This service collects lists of executable file names, passed as gexps, and adds them to the set of setuid and setgid programs on the system (see Programas con setuid).
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.
Es el tipo del servicio que registra los metadatos de procedencia en el sistema mismo. Crea varios archivos en /run/current-system:
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).
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.
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
.
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]