summaryrefslogtreecommitdiff
path: root/doc/guix.es.texi
diff options
context:
space:
mode:
Diffstat (limited to 'doc/guix.es.texi')
-rw-r--r--doc/guix.es.texi26015
1 files changed, 0 insertions, 26015 deletions
diff --git a/doc/guix.es.texi b/doc/guix.es.texi
deleted file mode 100644
index ece6073f993..00000000000
--- a/doc/guix.es.texi
+++ /dev/null
@@ -1,26015 +0,0 @@
1\input texinfo
2@c ===========================================================================
3@c
4@c This file was generated with po4a. Translate the source file.
5@c
6@c ===========================================================================
7@c -*-texinfo-*-
8
9@c %**start of header
10@setfilename guix.es.info
11@documentencoding UTF-8
12@documentlanguage es
13@frenchspacing on
14@settitle Manual de referencia de GNU Guix
15@c %**end of header
16
17@include version-es.texi
18
19@c Identifier of the OpenPGP key used to sign tarballs and such.
20@set OPENPGP-SIGNING-KEY-ID 3CE464558A84FDC69DB40CFB090B11993D9AEBB5
21@set KEY-SERVER pool.sks-keyservers.net
22
23@c The official substitute server used by default.
24@set SUBSTITUTE-SERVER ci.guix.es.info
25
26@copying
27Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019
28Ludovic Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@*
29Copyright @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014,
302015, 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@*
31Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{}
322015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017
33Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo
34Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{}
352016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018,
362019 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@*
37Copyright @copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017,
382018, 2019 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@*
39Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2016,
402017, 2018, 2019 Christopher Baines@* Copyright @copyright{} 2017, 2018
41Clément Lassieur@* Copyright @copyright{} 2017, 2018 Mathieu Othacehe@*
42Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017,
432018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@*
44Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017
45Christopher Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@*
46Copyright @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017
47Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
48Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017
49Andy Wingo@* Copyright @copyright{} 2017, 2018, 2019 Arun Isaac@* Copyright
50@copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@*
51Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike
52Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright
53@copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian
54Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{}
552018 Alex Vong@* Copyright @copyright{} 2019 Miguel Ángel Arruga Vivas
56(traducción)@*
57
58Se garantiza el permiso de copia, distribución y/o modificación de este
59documento bajo los términos de la licencia de documentación libre de GNU
60(GNU Free Documentation License), versión 1.3 o cualquier versión posterior
61publicada por la Free Software Foundation; sin secciones invariantes, sin
62textos de cubierta delantera ni trasera. Una copia de la licencia está
63incluida en la sección titulada ``GNU Free Documentation License''.
64@end copying
65
66@dircategory Administración del sistema
67@direntry
68* Guix: (guix.es). Gestión del software instalado y la
69 configuración del sistema.
70* guix package: (guix.es)Llamar a guix package. Instalación, borrado y
71 actualización de paquetes.
72* guix gc: (guix.es)Llamar a guix gc. Reclamar espacio de disco sin usar.
73* guix pull: (guix.es)Llamar a guix pull. Actualización de la lista
74 disponible de paquetes.
75* guix system: (guix.es)Llamar a guix system. Gestión de la configuración
76 del sistema operativo.
77@end direntry
78
79@dircategory Desarrollo de software
80@direntry
81* guix environment: (guix.es)Llamar a guix environment. Construcción de
82 entornos de
83 desarrollo con
84 Guix.
85* guix build: (guix.es)Llamar a guix build. Construcción de paquetes.
86* guix pack: (guix.es)Llamar a guix pack. Creación de empaquetados
87 binarios.
88@end direntry
89
90@titlepage
91@title Manual de referencia de GNU Guix
92@subtitle Uso del gestor de paquetes funcional GNU Guix.
93@author Las desarrolladoras de GNU Guix
94
95@page
96@vskip 0pt plus 1filll
97Edición @value{EDITION} @* @value{UPDATED} @*
98
99@insertcopying
100@end titlepage
101
102@contents
103
104@c *********************************************************************
105@node Top
106@top GNU Guix
107
108Este documento describe GNU Guix versión @value{VERSION}, una herramienta
109funcional de gestión de paquetes escrita para el sistema GNU.
110
111@c TRANSLATORS: You can replace the following paragraph with information on
112@c how to join your own translation team and how to report issues with the
113@c translation.
114Este manual también está disponible en Inglés (@pxref{Top,,, guix, GNU Guix
115Reference Manual}), en Francés (@pxref{Top,,, guix.fr, Manuel de référence
116de GNU Guix}) y Alemán (@pxref{Top,,, guix.de, Referenzhandbuch zu GNU
117Guix}). Si quiere traducirlo a su lengua nativa, considere unirse a
118@uref{https://translationproject.org/domain/guix-manual.html, Translation
119Project}.
120
121@menu
122* Introducción:: ¿Qué es esto de Guix?
123* Instalación:: Instalar Guix.
124* Instalación del sistema:: Instalar el sistema operativo completo.
125* Gestión de paquetes:: Instalación de paquetes, actualización, etc.
126* Desarrollo:: Desarrollo de software asistido por Guix
127* Interfaz programática:: Uso de Guix en Scheme.
128* Utilidades:: Órdenes de gestión de paquetes.
129* Configuración del sistema:: Configurar el sistema operativo.
130* Documentación:: Navegar por los manuales de usuaria del
131 software.
132* Instalación de ficheros de depuración:: Alimentación del depurador.
133* Actualizaciones de seguridad:: Desplegar correcciones de seguridad
134 rápidamente.
135* Lanzamiento inicial:: GNU/Linux construido de cero.
136* Transportar:: Adaptación para otra plataforma o núcleo.
137* Contribuir:: ¡Se necesita su ayuda!
138
139* Reconocimientos:: ¡Gracias!
140* Licencia de documentación libre GNU:: La licencia de este manual.
141* Índice de conceptos:: Conceptos.
142* Índice programático:: Tipos de datos, funciones y variables.
143
144@detailmenu
145 --- La lista detallada de nodos ---
146
147
148
149Introducción
150
151
152
153* La forma de gestión de software de Guix:: Qué es especial.
154* Distribución GNU:: Los paquetes y herramientas.
155
156Instalación
157
158
159
160* Instalación binaria:: ¡Poner Guix en funcionamiento en nada de
161 tiempo!
162* Requisitos:: Software necesario para construir y ejecutar
163 Guix.
164* Ejecución de la batería de pruebas:: Probar Guix.
165* Preparación del daemon:: Preparar el entorno del daemon de
166 construcción.
167* Invocación de guix-daemon:: Ejecutar el daemon de construcción.
168* Configuración de la aplicación:: Configuración específica de la
169 aplicación.
170
171Preparación del daemon
172
173
174
175* Configuración del entorno de construcción:: Preparar el entorno aislado
176 de construcción.
177* Configuración de delegación del daemon:: Delegar construcciones a
178 máquinas remotas.
179* Soporte de SELinux:: Uso de una política SELinux para el daemon.
180
181Instalación del sistema
182
183
184
185* Limitaciones:: Qué puede esperar.
186* Consideraciones sobre el hardware:: Hardware soportado.
187* Instalación desde memoria USB y DVD:: Preparar el medio de instalación.
188* Preparación para la instalación:: Red, particionado, etc.
189* Instalación gráfica guiada:: Instalación gráfica fácil.
190* Instalación manual:: Instalación manual para artistas del teclado.
191* Tras la instalación del sistema:: Cuando la instalación ha finalizado
192 satisfactoriamente.
193* Instalación de Guix en una máquina virtual:: El patio de recreo del
194 sistema Guix.
195* Construcción de la imagen de instalación:: Cómo esto llega a ser.
196
197Instalación manual
198
199
200
201* Distribución de teclado y red y particionado:: Configuración inicial.
202* Procedimiento de instalación:: Instalación.
203
204Gestión de paquetes
205
206
207
208* Características:: Cómo Guix dará brillo a su vida.
209* Invocación de guix package:: Instalación de paquetes, borrado, etc.
210* Sustituciones:: Descargar binarios pre-construidos.
211* Paquetes con múltiples salidas:: Un único paquete de fuentes,
212 múltiples salidas.
213* Invocación de guix gc:: Ejecutar el recolector de basura.
214* Invocación de guix pull:: Obtener la última versión de Guix y la
215 distribución.
216* Canales:: Personalizar el recolector de basura.
217* Inferiores:: Interactuar con otra revisión de Guix.
218* Invocación de guix describe:: Muestra información acerca de su
219 revisión de Guix.
220* Invocación de guix archive:: Exportar e importar ficheros del almacén.
221
222Sustituciones
223
224
225
226* Servidor oficial de sustituciones.:: Una fuente particular de
227 sustituciones.
228* Autorización de servidores de sustituciones:: Cómo habilitar o
229 deshabilitar
230 sustituciones.
231* Verificación de sustituciones:: Cómo verifica las sustituciones Guix.
232* Configuración de la pasarela.:: Cómo obtener sustituciones a través de
233 una pasarela.
234* Fallos en las sustituciones:: Qué pasa cuando una sustitución falla.
235* Sobre la confianza en binarios:: ¿Cómo puede usted confiar en esa masa
236 informe de datos binarios?
237
238Desarrollo
239
240
241
242* Invocación de guix environment:: Configurar entornos de desarrollo.
243* Invocación de guix pack:: Creación de empaquetados de software.
244
245Interfaz programática
246
247
248
249* Módulos de paquetes:: Paquetes bajo el punto de vista del
250 programador.
251* Definición de paquetes:: Definir nuevos paquetes.
252* Sistemas de construcción:: Especificar como se construyen los paquetes.
253* El almacén:: Manipular el almacén de paquetes.
254* Derivaciones:: Interfaz de bajo nivel de las derivaciones de
255 los paquetes.
256* La mónada del almacén:: Interfaz puramente funcional del almacén.
257* Expresiones-G:: Manipular expresiones de construcción.
258* Invocación de guix repl:: Enredar con Guix interactivamente.
259
260Definición de paquetes
261
262
263
264* Referencia de ``package'':: El tipo de datos de los paquetes.
265* Referencia de ``origin'':: El tipo de datos de orígenes.
266
267Utilidades
268
269
270
271* Invocación de guix build:: Construir paquetes desde la línea de
272 órdenes.
273* Invocación de guix edit:: Editar las definiciones de paquetes.
274* Invocación de guix download:: Descargar un fichero e imprimir su hash.
275* Invocación de guix hash:: Calcular el hash criptográfico de un fichero.
276* Invocación de guix import:: Importar definiciones de paquetes.
277* Invocación de guix refresh:: Actualizar definiciones de paquetes.
278* Invocación de guix lint:: Encontrar errores en definiciones de paquetes.
279* Invocación de guix size:: Perfilar el uso del disco.
280* Invocación de guix graph:: Visualizar el grafo de paquetes.
281* Invocación de guix publish:: Compartir sustituciones.
282* Invocación de guix challenge:: Poner a prueba servidores de
283 sustituciones.
284* Invocación de guix copy:: Copiar a y desde un almacén remoto.
285* Invocación de guix container:: Aislamiento de procesos.
286* Invocación de guix weather:: Comprobar la disponibilidad de
287 sustituciones.
288* Invocación de guix processes:: Enumerar los procesos cliente.
289
290Invocación de @command{guix build}
291
292
293
294* Opciones comunes de construcción:: Opciones de construcción para la
295 mayoría de órdenes.
296* Opciones de transformación de paquetes:: Crear variantes de paquetes.
297* Opciones de construcción adicionales:: Opciones específicas de 'guix
298 build'.
299* Depuración de fallos de construcción:: Experiencia de empaquetamiento
300 en la vida real.
301
302Configuración del sistema
303
304
305
306* Uso de la configuración del sistema:: Personalizar su sistema GNU.
307* Referencia de ``operating-system'':: Detalle de las declaraciones de
308 sistema operativo.
309* Sistemas de ficheros:: Configurar el montaje de sistemas de ficheros.
310* Dispositivos traducidos:: Procesamiento extra de dispositivos de bloques.
311* Cuentas de usuaria:: Especificar las cuentas de usuaria.
312* Distribución de teclado:: Cómo interpreta el sistema las pulsaciones
313 del teclado.
314* Localizaciones:: Configuración de idioma y convenciones
315 culturales.
316* Servicios:: Especificar los servicios del sistema.
317* Programas con setuid:: Programas que se ejecutan con privilegios de
318 root.
319* Certificados X.509:: Verificar servidores HTTPS.
320* Selector de servicios de nombres:: Configurar el selector de servicios de
321 nombres de libc.
322* Disco en RAM inicial:: Arranque de Linux-Libre.
323* Configuración del gestor de arranque:: Configurar el gestor de arranque.
324* Invocación de guix system:: Instanciar una configuración del sistema.
325* Ejecutar Guix en una máquina virtual:: Cómo ejecutar el sistema Guix en
326 una máquina virtual.
327* Definición de servicios:: Añadir nuevas definiciones de servicios.
328
329Servicios
330
331
332
333* Servicios base:: Servicios esenciales del sistema.
334* Ejecución de tareas programadas:: El servicio mcron.
335* Rotación de logs:: El servicio rottlog.
336* Servicios de red:: Configuración de red, daemon SSH, etc.
337* Sistema X Window:: Interfaz gráfica.
338* Servicios de impresión:: Soporte de impresoras locales y remotas.
339* Servicios de escritorio:: D-Bus y servicios de escritorio.
340* Servicios de sonido:: Servicios de ALSA y Pulseaudio.
341* Servicios de bases de datos:: Bases de datos SQL, almacenes de
342 clave-valor, etc.
343* Servicios de correo:: IMAP, POP3, SMTP y todo eso.
344* Servicios de mensajería:: Servicios de mensajería.
345* Servicios de telefonía:: Servicios de telefonía.
346* Servicios de monitorización:: Servicios de monitorización.
347* Servicios Kerberos:: Servicios Kerberos.
348* Servicios Web:: Servidores Web.
349* Servicios de certificados:: Certificados TLS via Let's Encrypt.
350* Servicios DNS:: Demonios DNS.
351* Servicios VPN:: Demonios VPN.
352* Sistema de ficheros en red:: Servicios relacionados con NFS.
353* Integración continua:: El servicio Cuirass.
354* Servicios de gestión de energía:: Extender la vida de la batería.
355* Servicios de audio:: El MPD.
356* Servicios de virtualización:: Servicios de virtualización.
357* Servicios de control de versiones:: Proporcionar acceso remoto a
358 repositorios Git.
359* Servicios de juegos:: Servidores de juegos.
360* Servicios misceláneos:: Otros servicios.
361
362Definición de servicios
363
364
365
366* Composición de servicios:: El modelo para la composición de servicios.
367* Tipos de servicios y servicios:: Tipos y servicios
368* Referencia de servicios:: Referencia de la API.
369* Servicios de Shepherd:: Un tipo de servicio particular.
370
371@end detailmenu
372@end menu
373
374@c *********************************************************************
375@node Introducción
376@chapter Introducción
377
378@cindex propósito
379GNU Guix@footnote{``Guix'' se pronuncia tal y como se escribe en castellano,
380``gi:ks'' en el alfabeto fonético internacional (IPA).} es una herramienta
381de gestión de paquetes y una distribucion del sistema GNU. Guix facilita a
382usuarias sin privilegios la instalación, actualización o borrado de paquetes
383de software, la vuelta a un conjunto de paquetes previo atómicamente, la
384construcción de paquetes desde las fuentes, y ayuda de forma general en la
385creación y mantenimiento de entornos software.
386
387@cindex Sistema Guix
388@cindex GuixSD, ahora sistema Guix
389@cindex Distribución de Sistema Guix, ahora sistema Guix
390Puede instalar GNU@tie{}Guix sobre un sistema GNU/Linux existente, donde
391complementará las herramientas disponibles sin interferencias
392(@pxref{Instalación}), o puede usarse como un sistema operativo en sí
393mismo, el @dfn{sistema@tie{}Guix}@footnote{Solíamos referirnos al sistema
394Guix como ``Distribución de sistema Guix'' o ``GuixSD''. Ahora consideramos
395que tiene más sentido agrupar todo bajo la etiqueta ``Guix'' ya que, después
396de todo, el sistema Guix está inmediatamente disponible a través de la orden
397@command{guix system}, ¡incluso cuando usa una distribución distinta por
398debajo!}. @xref{Distribución GNU}.
399
400@menu
401* La forma de gestión de software de Guix:: Qué es especial.
402* Distribución GNU:: Los paquetes y herramientas.
403@end menu
404
405@node La forma de gestión de software de Guix
406@section La forma de gestión de software de Guix
407
408@cindex interfaces de usuaria
409Guix proporciona una interfaz de gestión de paquetes de línea de ordenes
410(@pxref{Gestión de paquetes}), un conjunto de utilidades de línea de órdenes
411(@pxref{Utilidades}), así como interfaces programáticas Scheme
412(@pxref{Interfaz programática}).
413@cindex daemon de construcción
414Su @dfn{daemon de construcción} es responsable de la construcción de
415paquetes en delegación de las usuarias (@pxref{Preparación del daemon}) y de
416la descarga de binarios preconstruidos de fuentes autorizadas
417(@pxref{Sustituciones})
418
419@cindex extensibilidad de la distribución
420@cindex personalización, de paquetes
421Guix incluye definiciones de paquetes para muchos paquetes GNU y no-GNU,
422todos los cuales @uref{https://www.gnu.org/philosophy/free-sw.html, respetan
423la libertad de computación de la usuaria}. Es @emph{extensible}: las
424usuarias pueden escribir sus propias definiciones de paquetes
425(@pxref{Definición de paquetes}) y hacerlas disponibles como módulos
426independientes de paquetes (@pxref{Módulos de paquetes}). También es
427@emph{personalizable}: las usuarias pueden @emph{derivar} definiciones de
428paquetes especializadas de las existentes, inclusive desde la línea de
429órdenes (@pxref{Opciones de transformación de paquetes}).
430
431@cindex gestión de paquetes funcional
432@cindex aislamiento
433En su implementación, Guix utiliza la disciplina de @dfn{gestión de paquetes
434funcional} en la que Nix fue pionero (@pxref{Reconocimientos}). En Guix, el
435proceso de construcción e instalación es visto como una @emph{función}, en
436el sentido matemático. Dicha función toma entradas, como los guiones de
437construcción, un compilador, unas bibliotecas y devuelve el paquete
438instalado. Como función pura, su resultado únicamente depende de sus
439entradas---por ejemplo, no puede hacer referencia a software o guiones que
440no fuesen pasados explícitamente como entrada. Una función de construcción
441siempre produce el mismo resultado cuando se le proporciona un conjunto de
442entradas dado. No puede modificar el entorno del sistema que la ejecuta de
443ninguna forma; por ejemplo, no puede crear, modificar o borrar archivos
444fuera de sus directorios de construcción e instalación. Esto se consigue
445ejecutando los procesos de construcción en entornos aislados (o
446@dfn{contenedores}), donde únicamente sus entradas explícitas son visibles.
447
448@cindex almacén
449El resultado de las funciones de construcción de paquetes es @dfn{almacenado
450en la caché} en el sistema de ficheros, en un directorio especial llamado
451@dfn{el almacén} (@pxref{El almacén}). Cada paquete se instala en un
452directorio propio en el almacén---por defecto, bajo @file{/gnu/store}. El
453nombre del directorio contiene el hash de todas las entradas usadas para
454construir el paquete; por tanto, cambiar una entrada resulta en un nombre de
455directorio distinto.
456
457Esta aproximación es el cimiento de las avanzadas características de Guix:
458capacidad para la actualización transaccional y vuelta-atrás de paquetes,
459instalación en el ámbito de la usuaria y recolección de basura de paquetes
460(@pxref{Características}).
461
462
463@node Distribución GNU
464@section Distribución GNU
465
466@cindex Sistema Guix
467Guix viene con una distribución del sistema GNU consistente en su totalidad
468de software libre@footnote{El término ``libre'' aquí se refiere a la
469@url{http://www.gnu.org/philosophy/free-sw.html,libertad proporcionada a las
470usuarias de dicho software}.}. La distribución puede instalarse
471independientemente (@pxref{Instalación del sistema}), pero también es posible
472instalar Guix como un gestor de paquetes sobre un sistema GNU/Linux
473existente (@pxref{Instalación}). Para distinguir entre las dos opciones,
474nos referimos a la distribución independiente como el sistema@tie{}Guix.
475
476La distribución proporciona paquetes principales de GNU como GNU libc, GCC y
477Binutils, así como muchas aplicaciones GNU y no-GNU. La lista completa de
478paquetes disponibles puede navegarse
479@url{http://www.gnu.org/software/guix/packages,en línea} o ejecutando
480@command{guix package} (@pxref{Invocación de guix package}):
481
482@example
483guix package --list-available
484@end example
485
486Nuestro objetivo es proporcionar una distribución práctica con 100% software
487libre basada en Linux y otras variantes de GNU, con un enfoque en la
488promoción y la alta integración de componentes GNU, y un énfasis en
489programas y herramientas que ayuden a las usuarias a ejercitar esa libertad.
490
491Actualmente hay paquetes disponibles para las siguientes plataformas:
492
493@table @code
494
495@item x86_64-linux
496arquitectura @code{x86_64} de Intel/AMD, núcleo Linux-Libre;
497
498@item i686-linux
499arquitectura de 32-bits Intel (IA32), núcleo Linux-Libre;
500
501@item armhf-linux
502arquitectura ARMv7-A con coma flotante hardware, Thumb-2 y NEON, usando la
503interfaz binaria de aplicaciones (ABI) EABI con coma flotante hardware, y el
504núcleo Linux-Libre.
505
506@item aarch64-linux
507procesadores de 64-bits ARMv8 little-endian, núcleo Linux-Libre. Está
508actualmente en una fase experimental, con soporte
509limitado. @xref{Contribuir}, para cómo ayudar.
510
511@item mips64el-linux
512procesadores MIPS 64-bits little-endian, específicamente las series
513Loongson, n32 ABI, y núcleo Linux-Libre.
514
515@end table
516
517Con el sistema@tie{}Guix, @emph{declara} todos los aspectos de la
518configuración del sistema y Guix se hace cargo de instanciar la
519configuración de manera transaccional, reproducible y sin estado global
520(@pxref{Configuración del sistema}). El sistema Guix usa el núcleo Linux-libre,
521el sistema de inicialización Shepherd (@pxref{Introducción,,, shepherd, The
522GNU Shepherd Manual}), las conocidas utilidades y herramientas de
523compilación GNU, así como el entorno gráfico o servicios del sistema de su
524elección.
525
526El sistema Guix está disponible en todas las plataformas previas excepto
527@code{mips64el-linux}.
528
529@noindent
530Para información sobre el transporte a otras arquitecturas o núcleos,
531@pxref{Transportar}.
532
533La construcción de esta distribución es un esfuerzo cooperativo, ¡y esta
534invitada a unirse! @xref{Contribuir}, para información sobre cómo puede
535ayudar.
536
537
538@c *********************************************************************
539@node Instalación
540@chapter Instalación
541
542@cindex instalar Guix
543
544@quotation Nota
545Recomendamos el uso de este @uref{https://git.savannah.gnu.org/cgit/guix."
546"git/plain/etc/guix-install.sh, guión de shell de instalación} para instalar
547Guix sobre un sistema GNU/Linux en ejecución, de aquí en adelante referido
548como una @dfn{distribución distinta}.@footnote{Esta sección está dedicada a
549la instalación del gestor de paquetes, que puede realizarse sobre un sistema
550GNU/Linux ya en ejecución. Si, en vez de eso, desdea instalar el sistema
551operativo GNU completo, @pxref{Instalación del sistema}.} El guión automatiza la
552descarga, instalación y configuración inicial de Guix. Debe ejecutarse como
553la usuaria de administración root.
554@end quotation
555
556@cindex distribución distinta
557@cindex directorios relacionados con una distribución distinta
558Cuando está instalado sobre una distribución distinta, GNU@tie{}Guix
559complementa las herramientas disponibles sin interferencias. Sus datos
560radican exclusivamente en dos directorios, normalmente @file{/gnu/store} y
561@file{/var/guix}; otros ficheros en su sistema, como @file{/etc}, permanecen
562intactos.
563
564Una vez instalado, Guix puede ser actualizado ejecutando @command{guix pull}
565(@pxref{Invocación de guix pull}.
566
567Si prefiere realizar los pasos de instalación manualmente o desea
568personalizarlos, puede encontrar útiles las siguientes
569instrucciones. Describen los requisitos de software de Guix, así como su
570instalación manual y la preparación para su uso.
571
572@menu
573* Instalación binaria:: ¡Poner Guix en funcionamiento en nada de
574 tiempo!
575* Requisitos:: Software necesario para construir y ejecutar
576 Guix.
577* Ejecución de la batería de pruebas:: Probar Guix.
578* Preparación del daemon:: Preparar el entorno del daemon de
579 construcción.
580* Invocación de guix-daemon:: Ejecutar el daemon de construcción.
581* Configuración de la aplicación:: Configuración específica de la
582 aplicación.
583@end menu
584
585@node Instalación binaria
586@section Instalación binaria
587
588@cindex instalar Guix desde binarios
589@cindex guión del instalador
590Esta sección describe cómo instalar Guix en un sistema arbitrario desde un
591archivador autocontenido que proporciona los binarios para Guix y todas sus
592dependencias. Esto es normalmente más rápido que una instalación desde las
593fuentes, la cual es descrita en las siguientes secciones. El único requisito
594es tener GNU@tie{}tar y Xz.
595
596La instalación consiste más o menos en los siguientes pasos:
597
598@enumerate
599@item
600@cindex descargar el binario de Guix
601Descargue el archivador con los binarios de
602@indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{sistema}.tar.xz},
603donde @var{sistema} es @code{x86_64-linux} para una máquina @code{x86_64}
604que ejecute el núcleo Linux, etcétera.
605
606@c The following is somewhat duplicated in ``System Installation''.
607Asegurese de descargar el fichero @file{.sig} asociado y de verificar la
608autenticidad del archivador con él, más o menos así:
609
610@example
611$ wget https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{sistema}.tar.xz.sig
612$ gpg --verify guix-binary-@value{VERSION}.@var{sistema}.tar.xz.sig
613@end example
614
615Si la orden falla porque no dispone de la clave pública necesaria, entonces
616ejecute esta otra orden para importarla:
617
618@example
619$ gpg --keyserver @value{KEY-SERVER} \
620 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
621@end example
622
623@noindent
624@c end authentication part
625y vuelva a ejecutar la orden @code{gpg --verify}.
626
627@item
628Ahora necesita convertirse en la usuaria @code{root}. Dependiendo de su
629distribución, puede que tenga que ejecutar @code{su -} o @code{sudo
630-i}. Como @code{root}, ejecute:
631
632@example
633# cd /tmp
634# tar --warning=no-timestamp -xf \
635 guix-binary-@value{VERSION}.@var{sistema}.tar.xz
636# mv var/guix /var/ && mv gnu /
637@end example
638
639Esto crea @file{/gnu/store} (@pxref{El almacén}) y @file{/var/guix}. El
640último contiene un perfil listo para usar para @code{root} (vea el siguiente
641paso).
642
643@emph{No} extraiga el archivador en un sistema Guix ya funcionando ya que
644sobreescribiría sus propios ficheros esenciales.
645
646La opción @code{--warning=no-timestamp} asegura que GNU@tie{}tar no emite
647avisos sobre ``marcas de tiempo imposibles'' (dichos avisos eran emitidos
648por GNU@tie{}tar 1.26 y anteriores; las versiones recientes están
649bien). Parten del hecho de que todos los ficheros en el archivador tienen su
650tiempo de modificación fijado a cero (que significa el 1 de enero de
6511970). Esto es hecho voluntariamente para asegurarse de que el contenido del
652archivador es independiente de su fecha de creación, haciendolo por tanto
653reproducible.
654
655@item
656Ponga disponible el perfil en @file{~root/.config/guix/current}, que es
657donde @command{guix pull} instalará las actualizaciones (@pxref{Invocación de guix pull}):
658
659@example
660# mkdir -p ~root/.config/guix
661# ln -sf /var/guix/profiles/per-user/root/current-guix \
662 ~root/.config/guix/current
663@end example
664
665Cargue @file{etc/profile} para aumentar @code{PATH} y otras variables de
666entorno relevantes:
667
668@example
669# GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \
670 source $GUIX_PROFILE/etc/profile
671@end example
672
673@item
674Cree el grupo y las cuentas de usuaria para las usuarias de construcción
675como se explica a continuación (@pxref{Configuración del entorno de construcción}).
676
677@item
678Ejecute el daemon, y configurelo para iniciarse automáticamente al arranque.
679
680Si su distribución anfitriona usa el sistema de inicio systemd, puede
681conseguirlo con estas órdenes:
682
683@c Versions of systemd that supported symlinked service files are not
684@c yet widely deployed, so we should suggest that users copy the service
685@c files into place.
686@c
687@c See this thread for more information:
688@c http://lists.gnu.org/archive/html/guix-devel/2017-01/msg01199.html
689
690@example
691# cp ~root/.config/guix/current/lib/systemd/system/guix-daemon.service \
692 /etc/systemd/system/
693# systemctl start guix-daemon && systemctl enable guix-daemon
694@end example
695
696Si su distribución anfitriona usa el sistema de inicio Upstart:
697
698@example
699# initctl reload-configuration
700# cp ~root/.config/guix/current/lib/upstart/system/guix-daemon.conf \
701 /etc/init/
702# start guix-daemon
703@end example
704
705En otro caso, todavía puede iniciar el daemon manualmente con:
706
707@example
708# ~root/.config/guix/current/bin/guix-daemon \
709 --build-users-group=guixbuild
710@end example
711
712@item
713Haga accesible la orden @command{guix} a otras usuarias de la máquina, por
714ejemplo con:
715
716@example
717# mkdir -p /usr/local/bin
718# cd /usr/local/bin
719# ln -s /var/guix/profiles/per-user/root/current-guix/bin/guix
720@end example
721
722Es también una buena idea poner disponible la versión Info de este manual
723ahí:
724
725@example
726# mkdir -p /usr/local/share/info
727# cd /usr/local/share/info
728# for i in /var/guix/profiles/per-user/root/current-guix/share/info/* ;
729 do ln -s $i ; done
730@end example
731
732De este modo, asumiendo que @file{/usr/local/share/info} está en la ruta de
733búsqueda, ejecutar @command{info guix.es} abrirá este manual (@pxref{Other
734Info Directories,,, texinfo, GNU Texinfo}, para más detalles sobre cómo
735cambiar la ruta de búsqueda de Info).
736
737@item
738@cindex sustituciones, autorización de las mismas
739Para usar sustituciones de @code{@value{SUBSTITUTE-SERVER}} o uno de sus
740espejos (@pxref{Sustituciones}), debe autorizarlas:
741
742@example
743# guix archive --authorize < \
744 ~root/.config/guix/current/share/guix/@value{SUBSTITUTE-SERVER}.pub
745@end example
746
747@item
748Cada usuaria puede necesitar dar algunos pasos adicionales para prepar su
749entorno de Guix para el uso, @pxref{Configuración de la aplicación}.
750@end enumerate
751
752Voilà, ¡la instalación está completa!
753
754Puede confirmar que Guix está funcionando instalando un paquete de ejemplo
755en su perfil de root:
756
757@example
758# guix package -i hello
759@end example
760
761El paquete @code{guix} debe permanecer disponible en el perfil de
762@code{root}, o podría verse sujeto a la recolección de basura---en cuyo caso
763se encontraría seriamente lastrada por la falta de la orden
764@command{guix}. En otras palabras, no borre @code{guix} ejecutando
765@code{guix package -r guix}.
766
767El archivador de la instalación binaria puede ser (re)producido y verificado
768simplemente ejecutando la siguiente orden en el árbol de fuentes de Guix:
769
770@example
771make guix-binary.@var{sistema}.tar.xz
772@end example
773
774@noindent
775...@: que a su vez ejecuta:
776
777@example
778guix pack -s @var{sistema} --localstatedir \
779 --profile-name=current-guix guix
780@end example
781
782@xref{Invocación de guix pack}, para más información sobre esta útil herramienta.
783
784@node Requisitos
785@section Requisitos
786
787Esta sección enumera los requisitos para construir Guix desde las
788fuentes. El procedimiento de construcción de Guix es el mismo que el de otro
789software GNU, y no está cubierto aquí. Por favor, eche un vistazo a los
790ficheros @file{README} y @file{INSTALL} en el árbol de fuentes de Guix para
791obtener detalles adicionales.
792
793@cindex página web oficial
794GNU Guix está disponible para descarga desde su página web en
795@url{http://www.gnu.org/software/guix/}.
796
797GNU Guix depende de los siguientes paquetes:
798
799@itemize
800@item @url{http://gnu.org/software/guile/, GNU Guile}, versión 2.2.x;
801@item @url{https://notabug.org/cwebber/guile-gcrypt, Guile-Gcrypt}, versión
8020.1.0 o posterior;
803@item
804@uref{http://gnutls.org/, GnuTLS}, específicamente su API Guile
805(@pxref{Guile Preparations, how to install the GnuTLS bindings for Guile,,
806gnutls-guile, GnuTLS-Guile});
807@item
808@uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3},
809versión 0.1.0 o posterior;
810@item
811@c FIXME: Specify a version number once a release has been made.
812@uref{https://gitlab.com/guile-git/guile-git, Guile-Git}, de agosto de 2017
813o posterior;
814@item @uref{https://savannah.nongnu.org/projects/guile-json/, Guile-JSON};
815@item @url{http://zlib.net, zlib};
816@item @url{http://www.gnu.org/software/make/, GNU Make}.
817@end itemize
818
819Las siguientes dependencias son opcionales:
820
821@itemize
822@item
823@c Note: We need at least 0.10.2 for 'channel-send-eof'.
824Las características de delegación de construcciones (@pxref{Configuración de delegación del daemon}) y de @command{guix copy} (@pxref{Invocación de guix copy}) dependen de
825@uref{https://github.com/artyom-poptsov/guile-ssh, Guile-SSH}, versión
8260.10.2 o posterior.
827
828@item
829Cuando @url{http://www.bzip.org, libbz2} está disponible, @command{guix
830daemon} puede usarla para comprimir los log de construcción.
831@end itemize
832
833A menos que se pasase @code{--disable-daemon} a @command{configure}, los
834siguientes paquetes también son necesarios:
835
836@itemize
837@item @url{http://gnupg.org/, GNU libgcrypt};
838@item @url{http://sqlite.org, SQLite 3};
839@item @url{http://gcc.gnu.org, g++ de GCC} con soporte para el
840estándar C++11
841@end itemize
842
843@cindex directorio de estado
844Cuando se configura Guix en un sistema que ya tiene una instalación de Guix,
845asegurese de especificar el mismo directorio de estado que el de la
846instalación existente usando la opción @code{--localstatedir} al guión
847@command{configure} (@pxref{Directory Variables, @code{localstatedir},,
848standards, GNU Coding Standards}). El guión @command{configure} le proteje
849ante una mala configuración no deseada de @var{localstatedir} de modo que no
850pueda corromper inadvertidamente su almacén (@pxref{El almacén}).
851
852@cindex Nix, compatibilidad
853Cuando está disponible una instalación en funcionamiento del
854@url{http://nixos.org/nix/, gestor de paquetes Nix}, puede a su vez
855configurar Guix con @code{--disable-daemon}. En ese caso, Nix reemplaza las
856tres dependencias anteriores.
857
858Guix es compatible con Nix, así que es posible compartir el mismo almacén
859entre ambos. Para hacerlo debe pasar a @command{configure} no solo el mismo
860valor de @code{--with-store-dir}, sino también el mismo valor de
861@code{--localstatedir}. El último es esencial debido a que especifica la
862base de datos donde se encuentran almacenados los metadatos del almacén,
863entre otras cosas. Los valores predeterminados para Nix son
864@code{--with-store-dir=/nix/store} y @code{--localstatedir=/nix/var}. Fíjese
865que no se requiere @code{--disable-daemon} si su objetivo es compartir el
866almacén con Nix.
867
868@node Ejecución de la batería de pruebas
869@section Ejecución de la batería de pruebas
870
871@cindex batería de pruebas
872Después de una ejecución exitosa de @command{configure} y @code{make}, es
873una buena idea ejecutar la batería de pruebas. Puede ayudar a encontrar
874problemas con la configuración o el entorno, o errores en el mismo Guix---e
875informar de fallos en las pruebas es realmente una buena forma de ayudar a
876mejorar el software. Para ejecutar la batería de pruebas, teclee:
877
878@example
879make check
880@end example
881
882Los casos de prueba pueden ejecutarse en paralelo: puede usar la opción
883@code{-j} de GNU@tie{}make para acelerar las cosas. La primera ejecución
884puede tomar algunos minutos en una máquina reciente; las siguientes
885ejecuciones serán más rápidas puesto que el almacén creado para las pruebas
886ya tendrá varias cosas en la caché.
887
888Tambien es posible ejecutar un subconjunto de las pruebas definiendo la
889variable de makefile @code{TESTS} como en el ejemplo:
890
891@example
892make check TESTS="tests/store.scm tests/cpio.scm"
893@end example
894
895Por defecto, los resultados de las pruebas se muestran a nivel de
896fichero. Para ver los detalles de cada caso de prueba individual, es posible
897definir la variable de makefile @code{SCM_LOG_DRIVER_FLAGS} como en el
898ejemplo:
899
900@example
901make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no"
902@end example
903
904En caso de fallo, le rogamos que envíe un correo a @email{bug-guix@@gnu.org}
905y adjunte el fichero @file{test-suite.log}. Por favor, especifique la
906versión de Guix usada así como los números de versión de las dependencias
907(@pxref{Requisitos}) en su mensaje.
908
909Guix también viene como una batería de pruebas del sistema completo que
910prueban instancias completas del sistema Guix. Se puede ejecutar únicamente
911en sistemas donde Guix ya está instalado, usando:
912
913@example
914make check-system
915@end example
916
917@noindent
918o, de nuevo, definiendo @code{TESTS} para seleccionar un subconjunto de las
919pruebas a ejecutar:
920
921@example
922make check-system TESTS="basic mcron"
923@end example
924
925Estas pruebas de sistema están definidas en los módulos @code{(gnu tests
926@dots{})}. Funcionan ejecutando el sistema operativo con una instrumentación
927ligera en una máquina virtual (VM). Pueden ser computacionalmente intensivas
928o bastante baratas, dependiendo de si hay sustituciones disponibles para sus
929dependencias (@pxref{Sustituciones}). Algunas requieren mucho espacio de
930almacenamiento para alojar las imágenes de la máquina virtual.
931
932De nuevo, en caso de fallos en las pruebas, le rogamos que envíe a
933@email{bug-guix@@gnu.org} todos los detalles.
934
935@node Preparación del daemon
936@section Preparación del daemon
937
938@cindex daemon
939Operaciones como la construcción de un paquete o la ejecución del recolector
940de basura son realizadas por un proceso especializado, el @dfn{daemon de
941construcción}, en delegación de sus clientes. Únicamente el daemon puede
942acceder al almacén y su base de datos asociada. Por tanto, cualquier
943operación que manipula el almacén se realiza a través del daemon. Por
944ejemplo, las herramientas de línea de órdenes como @command{guix package} y
945@command{guix build} se comunican con el daemon (@i{via} llamadas a
946procedimientos remotos) para indicarle qué hacer.
947
948Las siguientes secciones explican cómo preparar el entorno del daemon de
949construcción. Véase tambien @ref{Sustituciones}, para información sobre cómo
950permitir al daemon descargar binarios pre-construidos.
951
952@menu
953* Configuración del entorno de construcción:: Preparar el entorno aislado
954 de construcción.
955* Configuración de delegación del daemon:: Delegar construcciones a
956 máquinas remotas.
957* Soporte de SELinux:: Uso de una política SELinux para el daemon.
958@end menu
959
960@node Configuración del entorno de construcción
961@subsection Configuración del entorno de construcción
962
963@cindex entorno de construcción
964En una configuración multiusuaria estándar, Guix y su daemon---el programa
965@command{guix-daemon}---son instalados por la administradora del sistema;
966@file{/gnu/store} pertenece a @code{root} y @command{guix-daemon} se ejecuta
967como @code{root}. Usuarias sin privilegios pueden usar las herramientas de
968Guix para construir paquetes o acceder al almacén de otro modo, y el daemon
969lo hará en delegación suya, asegurando que el almacén permanece en un estado
970consistente, y permitiendo compartir entre usuarias los paquetes
971construidos.
972
973@cindex usuarias de construcción
974Mientras que @command{guix-daemon} se ejecuta como @code{root}, puede que no
975desee que los procesos de construcción de paquetes se ejecuten como
976@code{root} también, por razones de seguridad obvias. Para evitarlo, una
977reserva especial de @dfn{usuarias de construcción} debe ser creada para ser
978usada por los procesos de construcción iniciados por el daemon. Estas
979usuarias de construcción no necesitan tener un shell ni un directorio home:
980simplemente serán usadas cuando el daemon se deshaga de los privilegios de
981@code{root} en los procesos de construcción. Tener varias de dichas usuarias
982permite al daemon lanzar distintos procesos de construcción bajo UID
983separados, lo que garantiza que no interferirán entre ellos---una
984característica esencial ya que las construcciones se caracterizan como
985funciones puras (@pxref{Introducción}).
986
987En un sistema GNU/Linux, una reserva de usuarias de construcción puede ser
988creada así (usando la sintaxis de Bash y las órdenes de @code{shadow}):
989
990@c See http://lists.gnu.org/archive/html/bug-guix/2013-01/msg00239.html
991@c for why `-G' is needed.
992@example
993# groupadd --system guixbuild
994# for i in `seq -w 1 10`;
995 do
996 useradd -g guixbuild -G guixbuild \
997 -d /var/empty -s `which nologin` \
998 -c "Usuaria de construcción Guix $i" --system \
999 guixbuilder$i;
1000 done
1001@end example
1002
1003@noindent
1004El número de usuarias de construcción determina cuantos trabajos de
1005construcción se pueden ejecutar en paralelo, especificado por la opción
1006@option{--max-jobs} (@pxref{Invocación de guix-daemon,
1007@option{--max-jobs}}). Para usar @command{guix system vm} y las órdenes
1008relacionadas, puede necesitar añadir las usuarias de construcción al grupo
1009@code{kvm} para que puedan acceder a @file{/dev/kvm}, usando @code{-G
1010guixbuild,kvm} en vez de @code{-G guixbuild} (@pxref{Invocación de guix system}).
1011
1012El programa @code{guix-daemon} puede ser ejecutado entonces como @code{root}
1013con la siguiente orden@footnote{Si su máquina usa el sistema de inicio
1014systemd, copiando el fichero
1015@file{@var{prefix}/lib/systemd/system/guix-daemon.service} en
1016@file{/etc/systemd/system} asegurará que @command{guix-daemon} se arranca
1017automáticamente. De igual modo, si su máquina usa el sistema de inicio
1018Upstart, copie el fichero
1019@file{@var{prefix}/lib/upstart/system/guix-daemon.conf} en
1020@file{/etc/init}.}:
1021
1022@example
1023# guix-daemon --build-users-group=guixbuild
1024@end example
1025
1026@cindex chroot
1027@noindent
1028De este modo, el daemon inicia los procesos de construcción en un
1029``chroot'', bajo una de las usuarias @code{guixbuilder}. En GNU/Linux, por
1030defecto, el entorno ``chroot'' contiene únicamente:
1031
1032@c Keep this list in sync with libstore/build.cc! -----------------------
1033@itemize
1034@item
1035un directorio @code{/dev} mínimo, creado en su mayor parte
1036independientemente del @code{/dev} del sistema anfitrión@footnote{``En su
1037mayor parte'', porque mientras el conjunto de ficheros que aparecen en
1038@code{/dev} es fijo, la mayor parte de estos ficheros solo pueden ser
1039creados si el sistema anfitrión los tiene.}
1040
1041@item
1042el directorio @code{/proc}; únicamente muestra los procesos del contenedor
1043ya que se usa un espacio de nombres de PID separado.
1044
1045@item
1046@file{/etc/passwd} con una entrada para la usuaria actual y una entrada para
1047la usuaria @file{nobody};
1048
1049@item
1050@file{/etc/groups} con una entrada para el grupo de la usuaria;
1051
1052@item
1053@file{/etc/hosts} con una entrada que asocia @code{localhost} a
1054@code{127.0.0.1};
1055
1056@item
1057un directorio @file{/tmp} con permisos de escritura.
1058@end itemize
1059
1060Puede influir en el directorio que el daemon utiliza para almacenar los
1061árboles de construcción @i{via} la variable de entorno @code{TMPDIR}. No
1062obstante, el árbol de construcción en el ``chroot'' siempre se llama
1063@file{/tmp/guix-build-@var{nombre}.drv-0}, donde @var{nombre} es el nombre
1064de la derivación---por ejemplo, @code{coreutils-8.24}. De este modo, el
1065valor de @code{TMPDIR} no se escapa a los entornos de construcción, lo que
1066evita discrepancias en caso de que los procesos de construcción capturen el
1067nombre de su árbol de construcción.
1068
1069@vindex http_proxy
1070El daemon también respeta la variable de entorno @code{http_proxy} para las
1071descargas HTTP que realiza, sea para derivaciones de salida fija
1072(@pxref{Derivaciones}) o para sustituciones (@pxref{Sustituciones}).
1073
1074Si está instalando Guix como una usuaria sin privilegios, es posible todavía
1075ejecutar @command{guix-daemon} siempre que pase @code{--disable-chroot}. No
1076obstante, los procesos de construcción no estarán aislados entre sí ni del
1077resto del sistema. Por tanto, los procesos de construcción pueden interferir
1078entre ellos y pueden acceder a programas, bibliotecas y otros ficheros
1079disponibles en el sistema---haciendo mucho más difícil verlos como funciones
1080@emph{puras}.
1081
1082
1083@node Configuración de delegación del daemon
1084@subsection Uso de la facilidad de descarga de trabajo
1085
1086@cindex delegando trabajo
1087@cindex hook de construcción
1088Cuando así se desee, el daemon de construcción puede @dfn{delegar}
1089construcciones de derivación a otras máquinas ejecutando Guix, usando el
1090@dfn{hook de construcción} @code{offload}@footnote{Esta característica está
1091únicamente disponible cuando
1092@uref{https://github.com/artyom-potsov/guile-ssh, Guile-SSH} está
1093presente.}. Cuando dicha característica es activada, una lista de máquinas
1094de construcción especificadas por la usuaria es leída de
1095@file{/etc/guix/machines.scm}; cada vez que se solicita una construcción,
1096por ejemplo via @code{guix build}, el daemon intenta delegarla a una de las
1097máquinas que satisfaga las condiciones de la derivación, en particular su
1098tipo de sistema---por ejemplo, @file{x86_64-linux}. Los prerrequisitos
1099restantes para la construcción son copiados por SSH a la máquina objetivo,
1100la cual procede con la construcción; con un resultado satisfactorio la(s)
1101salida(s) de la construcción son copiadas de vuelta a la máquina inicial.
1102
1103El fichero @file{/etc/guix/machines.scm} normalmente tiene un contenido de
1104este estilo:
1105
1106@example
1107(list (build-machine
1108 (name "ochentayseis.example.org")
1109 (system "x86_64-linux")
1110 (host-key "ssh-ed25519 AAAAC3Nza@dots{}")
1111 (user "rober")
1112 (speed 2.)) ;¡increíblemente rápida!
1113
1114 (build-machine
1115 (name "mimips.example.org")
1116 (system "mips64el-linux")
1117 (host-key "ssh-rsa AAAAB3Nza@dots{}")
1118 (user "alicia")
1119 (private-key
1120 (string-append (getenv "HOME")
1121 "/.ssh/identidad-para-guix"))))
1122@end example
1123
1124@noindent
1125En el ejemplo anterior se especifica una lista de dos máquinas de
1126construcción, una para la arquitectura @code{x86_64} y otra para la
1127arquitectura @code{mips64el}.
1128
1129De hecho, este fichero es---¡sin sorpresa ninguna!---un fichero Scheme que
1130se evalúa cuando el hook @code{offload} se inicia. El valor que devuelve
1131debe ser una lista de objetos @code{build-machine}. Mientras que este
1132ejemplo muestra una lista fija de máquinas de construcción, una puede
1133imaginarse, digamos, el uso de DNS-SD para devolver una lista de máquinas de
1134construcción potenciales descubierta en la red local (@pxref{Introducción,
1135Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme Programs}). El tipo
1136de datos @code{build-machine} se detalla a continuación.
1137
1138@deftp {Tipo de datos} build-machine
1139Este tipo de datos representa las máquinas de construcción a las cuales el
1140daemon puede delegar construcciones. Los campos importantes son:
1141
1142@table @code
1143
1144@item name
1145El nombre de red de la máquina remota.
1146
1147@item system
1148El sistema de la máquina remota---por ejemplo, @code{"x86_64-linux"}.
1149
1150@item user
1151La cuenta de usuaria a usar cuando se conecte a la máquina remota por
1152SSH. Tenga en cuenta que el par de claves SSH @emph{no} debe estar protegido
1153por contraseña, para permitir ingresos al sistema no interactivos.
1154
1155@item host-key
1156Este campo debe contener la @dfn{clave pública de la máquina} de SSH en
1157formato OpenSSH. Es usado para autentificar la máquina cuando nos conectamos
1158a ella. Es una cadena larga más o menos así:
1159
1160@example
1161ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL recordatorio@@example.org
1162@end example
1163
1164Si la máquina está ejecutando el daemon OpenSSH, @command{sshd}, la clave
1165pública de la máquina puede encontrarse en un fichero como
1166@file{/etc/ssh/ssh_host_ed25519_key.pub}.
1167
1168Si la máquina está ejecutando el daemon SSH GNU@tie{}lsh, @command{lshd}, la
1169clave de la máquina está en @file{/etc/lsh/host-key.pub} o un fichero
1170similar. Puede convertirse a formato OpenSSH usando @command{lsh-export-key}
1171(@pxref{Converting keys,,, lsh, LSH Manual}):
1172
1173@example
1174$ lsh-export-key --openssh < /etc/lsh/host-key.pub
1175ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{}
1176@end example
1177
1178@end table
1179
1180Ciertos número de campos opcionales pueden ser especificados:
1181
1182@table @asis
1183
1184@item @code{port} (predeterminado: @code{22})
1185Número de puerto del servidor SSH en la máquina.
1186
1187@item @code{private-key} (predeterminada: @file{~root/.ssh/id_rsa})
1188El fichero de clave privada SSH usado para conectarse a la máquina, en
1189formato OpenSSH. Esta clave no debe estar protegida con una contraseña.
1190
1191Tenga en cuenta que el valor predeterminado es la clave privada @emph{de la
1192cuenta de root}. Asegurese de que existe si usa el valor predeterminado.
1193
1194@item @code{compression} (predeterminado: @code{"zlib@@openssh.com,zlib"})
1195@itemx @code{compression-level} (predeterminado: @code{3})
1196Los métodos de compresión y nivel de compresión a nivel SSH solicitados.
1197
1198Tenga en cuenta que la delegación de carga depende de la compresión SSH para
1199reducir el ancho de banda usado cuando se transfieren ficheros hacia y desde
1200máquinas de construcción.
1201
1202@item @code{daemon-socket} (predeterminado: @code{"/var/guix/daemon-socket/socket"})
1203Nombre de fichero del socket de dominio Unix en el que @command{guix-daemon}
1204escucha en esa máquina.
1205
1206@item @code{parallel-builds} (predeterminadas: @code{1})
1207El número de construcciones que pueden ejecutarse en paralelo en la máquina.
1208
1209@item @code{speed} (predeterminado: @code{1.0})
1210Un ``factor de velocidad relativa''. El planificador de delegaciones tenderá
1211a preferir máquinas con un factor de velocidad mayor.
1212
1213@item @code{features} (predeterminadas: @code{'()})
1214Una lista de cadenas denotando las características específicas permitidas
1215por la máquina. Un ejemplo es @code{"kvm"} para máquinas que tienen los
1216módulos KVM de Linux y las correspondientes características hardware. Las
1217derivaciones pueden solicitar las características por nombre, y entonces se
1218planificarán en las máquinas adecuadas.
1219
1220@end table
1221@end deftp
1222
1223El ejecutable @code{guix} debe estar en la ruta de búsqueda de las máquinas
1224de construcción. Puede comprobar si es el caso ejecutando:
1225
1226@example
1227ssh build-machine guix repl --version
1228@end example
1229
1230Hay una última cosa por hacer una vez @file{machines.scm} está en su
1231lugar. Como se ha explicado anteriormente, cuando se delega, los ficheros se
1232transfieren en ambas direcciones entre los almacenes de las máquinas. Para
1233que esto funcione, primero debe generar un par de claves en cada máquina
1234para permitir al daemon exportar los archivos firmados de ficheros en el
1235almacén (@pxref{Invocación de guix archive}):
1236
1237@example
1238# guix archive --generate-key
1239@end example
1240
1241@noindent
1242Cada máquina de construcción debe autorizar a la clave de la máquina maestra
1243para que acepte elementos del almacén que reciba de la maestra:
1244
1245@example
1246# guix archive --authorize < clave-publica-maestra.txt
1247@end example
1248
1249@noindent
1250Del mismo podo, la máquina maestra debe autorizar la clave de cada máquina
1251de construcción.
1252
1253Todo este lío con claves está ahí para expresar las mutuas relaciones de
1254confianza entre pares de la máquina maestra y las máquinas de
1255construcción. Concretamente, cuando la maestra recibe ficheros de una
1256máquina de construcción (y @i{vice versa}), su daemon de construcción puede
1257asegurarse de que son genuinos, no han sido modificados, y que están
1258firmados por una clave autorizada.
1259
1260@cindex prueba de delegación
1261Para comprobar si su configuración es operacional, ejecute esta orden en el
1262nodo maestro:
1263
1264@example
1265# guix offload test
1266@end example
1267
1268Esto intentará conectar con cada una de las máquinas de construcción
1269especificadas en @file{/etc/guix/machines.scm}, comprobará que GUile y los
1270módulos Guix están disponibles en cada máquina, intentará exportar a la
1271máquina e importar de ella, e informará de cualquier error en el proceso.
1272
1273Si quiere probar un fichero de máquinas diferente, simplemente especifiquelo
1274en la línea de órdenes:
1275
1276@example
1277# guix offload test otras-maquinas.scm
1278@end example
1279
1280Por último, puede probar un subconjunto de máquinas cuyos nombres coincidan
1281con una expresión regular así:
1282
1283@example
1284# guix offload test maquinas.scm '\.gnu\.org$'
1285@end example
1286
1287@cindex estado de delegación
1288Para mostrar la carga actual de todas las máquinas de construcción, ejecute
1289esta orden en el nodo principal:
1290
1291@example
1292# guix offload status
1293@end example
1294
1295
1296@node Soporte de SELinux
1297@subsection Soporte de SELinux
1298
1299@cindex SELinux, política del daemon
1300@cindex control de acceso mandatorio, SELinux
1301@cindex seguridad, guix-daemon
1302Guix incluye un fichero de política SELinux en @file{etc/guix-daemon.cil}
1303que puede ser instalado en un sistema donde SELinux está activado, para
1304etiquetar los ficheros Guix y especificar el comportamiento esperado del
1305daemon. Ya que el sistema Guix no proporciona una política base de SELinux,
1306la política del daemon no puede usarse en el sistema Guix.
1307
1308@subsubsection Instalación de la política de SELinux
1309@cindex SELinux, instalación de la política
1310Para instalar la política ejecute esta orden como root:
1311
1312@example
1313semodule -i etc/guix-daemon.cil
1314@end example
1315
1316Una vez hecho, vuelva a etiquetar el sistema de ficheros con
1317@code{restorecon} o con un mecanismo distinto que proporcione su sistema.
1318
1319Una vez la política está instalada, el sistema de ficheros ha sido
1320re-etiquetado, y el daemon ha sido reiniciado, debería ejecutarse en el
1321contexto @code{guix_daemon_t}. Puede confirmarlo con la siguiente orden:
1322
1323@example
1324ps -Zax | grep guix-daemon
1325@end example
1326
1327Monitorice los ficheros de log de SELinux mientras ejecuta una orden como
1328@code{guix build hello} para convencerse que SELinux permite todas las
1329operaciones necesarias.
1330
1331@subsubsection Limitaciones
1332@cindex SELinux, limitaciones
1333
1334Esta política no es perfecta. Aquí está una lista de limitaciones o
1335comportamientos extraños que deben ser considerados al desplegar la política
1336SELinux provista para el daemon Guix.
1337
1338@enumerate
1339@item
1340@code{guix_daemon_socket_t} no se usa realmente. Ninguna de las operaciones
1341del socket implica contextos que tengan algo que ver con
1342@code{guix_daemon_socket_t}. No hace daño tener esta etiqueta sin usar, pero
1343sería preferible definir reglas del socket únicamente para esta etiqueta.
1344
1345@item
1346@code{guix gc} no puede acceder enlaces arbitrarios a los perfiles. Por
1347diseño, la etiqueta del fichero del destino de un enlace simbólico es
1348independiente de la etiqueta de fichero del fichero en sí. Aunque todos los
1349perfiles bajo $localstatedir se etiquetan, los enlaces para estos perfiles
1350heredan la etiqueta del directorio en el que están. Para enlaces en el
1351directorio de la usuaria esto será @code{user_home_t}. Pero para los enlaces
1352del directorio de root, o @file{/tmp}, o del directorio del servidor HTTP,
1353etc., esto no funcionará. @code{guix gc} se verá incapacitado para leer y
1354seguir dichos enlaces.
1355
1356@item
1357La característica del daemon de esperar conexiones TCP puede que no funcione
1358más. Esto puede requerir reglas extra, ya que SELinux trata los sockets de
1359red de forma diferente a los ficheros.
1360
1361@item
1362Actualmente todos los ficheros con un nombre coincidente con la expresión
1363regular @code{/gnu/store.+-(gux-.+|profile)/bin/guix-daemon} tienen asignada
1364la etiqueta @code{guix_daemon_exec_t}; esto significa que @emph{cualquier}
1365fichero con ese nombre en cualquier perfil tendrá permitida la ejecución en
1366el dominio @code{guix_daemon_t}. Esto no es ideal. Una atacante podría
1367construir un paquete que proporcione este ejecutable y convencer a la
1368usuaria para instalarlo y ejecutarlo, lo que lo eleva al dominio
1369@code{guix_daemon_t}. Llegadas a este punto, SELinux no puede prevenir que
1370acceda a los ficheros permitidos para los procesos en dicho dominio.
1371
1372Podríamos generar una política mucho más restrictiva en tiempo de
1373instalación, de modo que solo el nombre @emph{exacto} del fichero del
1374ejecutable de @code{guix-daemon} actualmente instalado sea marcado como
1375@code{guix_daemon_exec_t}, en vez de usar una expresión regular amplia. La
1376desventaja es que root tendría que instalar o actualizar la política en
1377tiempo de instalación cada vez que se actualizase el paquete de Guix que
1378proporcione el ejecutable de @code{guix-daemon} realmente en ejecución.
1379@end enumerate
1380
1381@node Invocación de guix-daemon
1382@section Invocación de @command{guix-daemon}
1383
1384El programa @command{guix-daemon} implementa toda la funcionalidad para
1385acceder al almacén. Esto incluye iniciar procesos de construcción, ejecutar
1386el recolector de basura, comprobar la disponibilidad de un resultado de
1387construcción, etc. Normalmente se ejecuta como @code{root} así:
1388
1389@example
1390# guix-daemon --build-users-group=guixbuild
1391@end example
1392
1393@noindent
1394Para detalles obre como configurarlo, @pxref{Preparación del daemon}.
1395
1396@cindex chroot
1397@cindex contenedor, entorno de construcción
1398@cindex entorno de construcción
1399@cindex construcciones reproducibles
1400Por defecto, @command{guix-daemon} inicia los procesos de construcción bajo
1401distintos UIDs, tomados del grupo de construcción especificado con
1402@code{--build-users-group}. Además, cada proceso de construcción se ejecuta
1403en un entorno ``chroot'' que únicamente contiene el subconjunto del almacén
1404del que depende el proceso de construcción, como especifica su derivación
1405(@pxref{Interfaz programática, derivación}), más un conjunto específico de
1406directorios del sistema. Por defecto, estos directorios contienen
1407@file{/dev} y @file{/dev/pts}. Es más, sobre GNU/Linux, el entorno de
1408construcción es un @dfn{contenedor}: además de tener su propio árbol del
1409sistema de ficheros, tiene un espacio de nombres de montado separado, su
1410propio espacio de nombres de PID, de red, etc. Esto ayuda a obtener
1411construcciones reproducibles (@pxref{Características}).
1412
1413Cuando el daemon realiza una construcción en delegación de la usuaria, crea
1414un directorio de construcción bajo @file{/tmp} o bajo el directorio
1415especificado por su variable de entorno @code{TMPDIR}. Este directorio se
1416comparte con el contenedor durante toda la construcción, aunque dentro del
1417contenedor el árbol de construcción siempre se llama
1418@file{/tmp/guix-build-@var{nombre}.drv-0}.
1419
1420El directorio de construcción se borra automáticamente una vez completado el
1421proceso, a menos que la construcción fallase y se especificase en el cliente
1422@option{--keep-failed} (@pxref{Invocación de guix build,
1423@option{--keep-failed}}).
1424
1425El daemon espera conexiones y lanza un subproceso por sesión iniciada por
1426cada cliente (una de las sub-órdenes de @command{guix}). La orden
1427@command{guix processes} le permite tener una visión general de la actividad
1428de su sistema mostrando clientes y sesiones activas. @xref{Invocación de guix processes}, para más información.
1429
1430Se aceptan las siguientes opciones de línea de ordenes:
1431
1432@table @code
1433@item --build-users-group=@var{grupo}
1434Toma las usuarias de @var{grupo} para ejecutar los procesos de construcción
1435(@pxref{Preparación del daemon, build users}).
1436
1437@item --no-substitutes
1438@cindex sustituciones
1439No usa sustituciones para la construcción de productos. Esto es, siempre
1440realiza las construcciones localmente en vez de permitir la descarga de
1441binarios pre-construidos (@pxref{Sustituciones}).
1442
1443Cuando el daemon se ejecuta con @code{--no-substitutes}, los clientes aún
1444pueden activar explícitamente las sustituciones @i{via} la llamada de
1445procedimiento remoto @code{set-build-options} (@pxref{El almacén}).
1446
1447@item --substitute-urls=@var{urls}
1448@anchor{daemon-substitute-urls}
1449Considera @var{urls} la lista separada por espacios predeterminada de URLs
1450de sustituciones de fuentes. Cuando se omite esta opción, se usa
1451@indicateurl{https://@value{SUBSTITUTE-SERVER}}.
1452
1453Esto significa que las sustituciones puede ser descargadas de @var{urls},
1454mientras estén firmadas por una firma de confianza (@pxref{Sustituciones}).
1455
1456@cindex hook de construcción
1457@item --no-build-hook
1458No usa el @dfn{hook de construcción}.
1459
1460El hook de construcción es un programa auxiliar que el daemon puede lanzar y
1461al cual envía las peticiones de construcción. Este mecanismo se utiliza para
1462delegar construcciones a otras máquinas (@pxref{Configuración de delegación del daemon}).
1463
1464@item --cache-failures
1465Almacena en la caché los fallos de construcción. Por defecto, únicamente las
1466construcciones satisfactorias son almacenadas en la caché.
1467
1468Cuando se usa esta opción, @command{guix gc --list-failures} puede usarse
1469para consultar el conjunto de elementos del almacén marcados como fallidos;
1470@command{guix gc --clear-failures} borra los elementos del almacén del
1471conjunto de fallos existentes en la caché. @xref{Invocación de guix gc}.
1472
1473@item --cores=@var{n}
1474@itemx -c @var{n}
1475Usa @var{n} núcleos de la CPU para construir cada derivación; @code{0}
1476significa tantos como haya disponibles.
1477
1478El valor predeterminado es @code{0}, pero puede ser sobreescrito por los
1479clientes, como la opción @code{--cores} de @command{guix build}
1480(@pxref{Invocación de guix build}).
1481
1482El efecto es definir la variable de entorno @code{NIX_BUILD_CORES} en el
1483proceso de construcción, el cual puede usarla para explotar el paralelismo
1484interno---por ejemplo, ejecutando @code{make -j$NIX_BUILD_CORES}.
1485
1486@item --max-jobs=@var{n}
1487@itemx -M @var{n}
1488Permite como máximo @var{n} trabajos de construcción en paralelo. El valor
1489predeterminado es @code{1}. Fijarlo a @code{0} significa que ninguna
1490construcción se realizará localmente; en vez de eso, el daemon delegará las
1491construcciones (@pxref{Configuración de delegación del daemon}), o simplemente fallará.
1492
1493@item --max-silent-time=@var{segundos}
1494Cuando la construcción o sustitución permanece en silencio más de
1495@var{segundos}, la finaliza e informa de un fallo de construcción.
1496
1497El valor predeterminado es @code{0}, que deshabilita el plazo.
1498
1499El valor especificado aquí puede ser sobreescrito por clientes
1500(@pxref{Opciones comunes de construcción, @code{--max-silent-time}}).
1501
1502@item --timeout=@var{segundos}
1503Del mismo modo, cuando el proceso de construcción o sustitución dura más de
1504@var{segundos}, lo termina e informa un fallo de construcción.
1505
1506El valor predeterminado es @code{0}, que deshabilita el plazo.
1507
1508El valor especificado aquí puede ser sobreescrito por los clientes
1509(@pxref{Opciones comunes de construcción, @code{--timeout}}).
1510
1511@item --rounds=@var{N}
1512Construye cada derivación @var{n} veces seguidas, y lanza un error si los
1513resultados de las construcciones consecutivas no son idénticos
1514bit-a-bit. Fíjese que esta configuración puede ser sobreescrita por clientes
1515como @command{guix build} (@pxref{Invocación de guix build}).
1516
1517Cuando se usa conjuntamente con @option{--keep-failed}, la salida que
1518difiere se mantiene en el almacén, bajo
1519@file{/gnu/store/@dots{}-check}. Esto hace fácil buscar diferencias entre
1520los dos resultados.
1521
1522@item --debug
1523Produce salida de depuración.
1524
1525Esto es útil para depurar problemas en el arranque del daemon, pero entonces
1526puede ser cambiado el comportamiento por los clientes, por ejemplo la opción
1527@code{--verbosity} de @command{guix build} (@pxref{Invocación de guix build}).
1528
1529@item --chroot-directory=@var{dir}
1530Añade @var{dir} al chroot de construcción.
1531
1532Hacer esto puede cambiar el resultado del proceso de construcción---por
1533ejemplo si usa dependencias opcionales, que se encuentren en @var{dir},
1534cuando están disponibles, y no de otra forma. Por esa razón, no se
1535recomienda hacerlo. En vez de eso, asegurese que cada derivación declara
1536todas las entradas que necesita.
1537
1538@item --disable-chroot
1539Deshabilita las construcciones en un chroot.
1540
1541No se recomienda el uso de esta opción ya que, de nuevo, podría permitir a
1542los procesos de construcción ganar acceso a dependencias no declaradas. Es
1543necesario, no obstante, cuando @command{guix-daemon} se ejecuta bajo una
1544cuenta de usuaria sin privilegios.
1545
1546@item --log-compression=@var{tipo}
1547Comprime los logs de construcción de acuerdo a @var{tipo}, que puede ser
1548@code{gzip}, @code{bzip2} o @code{none}.
1549
1550A menos que se use @code{--lose-logs}, todos los log de construcción se
1551mantienen en @var{localstatedir}. Para ahorrar espacio, el daemon
1552automáticamente los comprime con bzip2 por defecto.
1553
1554@item --disable-deduplication
1555@cindex deduplicación
1556Deshabilita la ``deduplicación'' automática en el almacén.
1557
1558Por defecto, los ficheros se añaden al almacén ``deduplicados''
1559automáticamente: si un nuevo fichero añadido es idéntico a otro que ya se
1560encuentra en el almacén, el daemon introduce el nuevo fichero como un enlace
1561duro al otro fichero. Esto puede reducir notablemente el uso del disco, a
1562expensas de una carga de entrada/salida ligeramente incrementada al
1563finalizar un proceso de construcción. Esta opción deshabilita esta
1564optimización.
1565
1566@item --gc-keep-outputs[=yes|no]
1567Determina si el recolector de basura (GC) debe mantener salidas de las
1568derivaciones vias.
1569
1570@cindex GC, raíces del recolector de basura
1571@cindex raíces del recolector de basura
1572Cuando se usa ``yes'', el recolector de basura mantendrá las salidas de
1573cualquier derivación viva disponible en el almacén---los ficheros
1574@code{.drv}. El valor predeterminado es ``no'', lo que significa que las
1575salidas de las derivaciones se mantienen únicamente si son alcanzables desde
1576alguna raíz del recolector de basura. @xref{Invocación de guix gc}, para más
1577información sobre las raices del recolector de basura.
1578
1579@item --gc-keep-derivations[=yes|no]
1580Determina si el recolector de basura (GC) debe mantener derivaciones
1581correspondientes a salidas vivas.
1582
1583Cuando se usa ``yes'', como es el caso predeterminado, el recolector de
1584basura mantiene derivaciones---es decir, ficheros @code{.drv}---mientras al
1585menos una de sus salidas está viva. Esto permite a las usuarias seguir la
1586pista de los orígenes de los elementos en el almacén. El uso de ``no'' aquí
1587ahorra un poco de espacio en disco.
1588
1589De este modo, usar @code{--gc-keep-derivations} con valor ``yes'' provoca
1590que la vitalidad fluya de salidas a derivaciones, y usar
1591@code{--gc-keep-outputs} con valor ``yes'' provoca que la vitalidad fluya de
1592derivaciones a salidas. Cuando ambas tienen valor ``yes'', el efecto es
1593mantener todos los prerrequisitos de construcción (las fuentes, el
1594compilador, las bibliotecas y otras herramientas de tiempo de construcción)
1595de los objetos vivos del almacén, independientemente de que esos
1596prerrequisitos sean alcanzables desde una raíz del recolector de
1597basura. Esto es conveniente para desarrolladoras ya que ahorra
1598reconstrucciones o descargas.
1599
1600@item --impersonate-linux-2.6
1601En sistemas basados en Linux, suplanta a Linux 2.6. Esto significa que la
1602llamada del sistema @code{uname} del kernel indicará 2.6 como el número de
1603publicación.
1604
1605Esto puede ser útil para construir programas que (habitualmente de forma
1606incorrecta) dependen en el número de versión del núcleo.
1607
1608@item --lose-logs
1609No guarda logs de construcción. Por defecto se almacenan bajo
1610@code{@var{localstatedir}/guix/log}.
1611
1612@item --system=@var{sistema}
1613Asume @var{sistema} como el tipo actual de sistema. Por defecto es el par de
1614arquitectura/núcleo encontrado durante la configuración, como
1615@code{x86_64-linux}.
1616
1617@item --listen=@var{destino}
1618Escucha conexiones en @var{destino}. @var{destino} se interpreta como el
1619nombre del fichero del socket de dominio Unix si comienza on @code{/} (barra
1620a la derecha). En otro caso, @var{destino} se interpreta como un nombre de
1621máquina o un nombre de máquina y puerto a escuchar. Aquí van unos pocos
1622ejemplos:
1623
1624@table @code
1625@item --listen=/gnu/var/daemon
1626Escucha por conexiones en el socket de dominio Unix @file{/gnu/var/daemon},
1627creandolo si es necesario.
1628
1629@item --listen=localhost
1630@cindex daemon, acceso remoto
1631@cindex acceso remoto al daemon
1632@cindex daemon, configuración en cluster
1633@cindex daemon, configuración en cluster
1634Escucha conexiones TCP en la interfaz de red correspondiente a
1635@code{localhost}, en el puerto 44146.
1636
1637@item --listen=128.0.0.42:1234
1638Escucha conexiones TCP en la interfaz de red correspondiente a
1639@code{128.0.0.42}, en el puerto 1234.
1640@end table
1641
1642Esta opción puede repetirse múltiples veces, en cuyo caso
1643@command{guix-daemon} acepta conexiones en todos los destinos
1644especificados. Las usuarias pueden indicar a los clientes a qué destino
1645conectarse fijando la variable de entorno @code{GUIX_DAEMON_SOCKET}
1646(@pxref{El almacén, @code{GUIX_DAEMON_SOCKET}}).
1647
1648@quotation Nota
1649El protocolo del daemon @code{no está autentificado ni cifrado}. El uso de
1650@code{--listen=@var{dirección}} es aceptable en redes locales, como
1651clusters, donde únicamente los nodos de confianza pueden conectarse al
1652daemon de construcción. En otros casos donde el acceso remoto al daemon es
1653necesario, recomendamos usar sockets de dominio Unix junto a SSH.
1654@end quotation
1655
1656Cuando se omite @code{--listen}, @command{guix-daemon} escucha conexiones en
1657el socket de dominio Unix que se encuentra en
1658@file{@var{localstatedir}/guix/daemon-socket/socket}.
1659@end table
1660
1661
1662@node Configuración de la aplicación
1663@section Configuración de la aplicación
1664
1665@cindex distribución distinta
1666Cuando se usa Guix sobre una distribución GNU/Linux distinta al sistema
1667Guix---una @dfn{distribución distinta}---unos pocos pasos adicionales son
1668necesarios para tener todo preparado. Aquí están algunos de ellos.
1669
1670@subsection Localizaciones
1671
1672@anchor{locales-and-locpath}
1673@cindex localizaciones, cuando no se está en el sistema Guix
1674@vindex LOCPATH
1675@vindex GUIX_LOCPATH
1676Los paquetes instalados @i{via} Guix no usarán los datos de localización del
1677sistema anfitrión. En vez de eso, debe primero instalar uno de los paquetes
1678de localización disponibles con Guix y después definir la variable de
1679entorno @code{GUIX_LOCPATH}:
1680
1681@example
1682$ guix package -i glibc-locales
1683$ export GUIX_LOCPATH=$HOME/.guix-profile/lib/locale
1684@end example
1685
1686Fíjese que el paquete @code{glibc-locales} contiene datos para todas las
1687localizaciones que ofrece GNU@tie{}libc y pesa alrededor de
1688110@tie{}MiB. Alternativamente, @code{glibc-utf8-locales} es más pequeño
1689pero limitado a localizaciones UTF-8.
1690
1691La variable @code{GUIX_LOCPATH} juega un rol similar a @code{LOCPATH}
1692(@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference
1693Manual}). No obstante, hay dos diferencias importantes:
1694
1695@enumerate
1696@item
1697@code{GUIX_LOCPATH} es respetada únicamente por la libc dentro de Guix, y no
1698por la libc que proporcionan las distribuciones distintas. Por tanto, usar
1699@code{GUIX_LOCPATH} le permite asegurarse de que los programas de la
1700distribución distinta no cargarán datos de localización incompatibles.
1701
1702@item
1703libc añade un sufijo a cada entrada de @code{GUIX_LOCPATH} con @code{/X.Y},
1704donde @code{X.Y} es la versión de libc---por ejemplo, @code{2.22}. Esto
1705significa que, en caso que su perfil Guix contenga una mezcla de programas
1706enlazados contra diferentes versiones de libc, cada versión de libc
1707únicamente intentará cargar datos de localización en el formato correcto.
1708@end enumerate
1709
1710Esto es importante porque el formato de datos de localización usado por
1711diferentes versiones de libc puede ser incompatible.
1712
1713@subsection Selector de servicios de nombres
1714
1715@cindex selector de servicios de nombres, glibc
1716@cindex NSS (selector de servicios de nombres), glibc
1717@cindex ncsd (daemon de caché del servicio de nombres)
1718@cindex daemon de caché del servicio de nombres (ncsd)
1719Cuando se usa Guix en una distribución distinta, @emph{recomendamos
1720encarecidamente} que el sistema ejecute el @dfn{daemon de caché del servicio
1721de nombres} de la biblioteca de C de GNU, @command{ncsd}, que debe escuchar
1722en el socket @file{/var/run/nscd/socket}. En caso de no hacerlo, las
1723aplicaciones instaladas con Guix pueden fallar al buscar nombres de máquinas
1724o cuentas de usuaria, o incluso pueden terminar abruptamente. Los siguientes
1725párrafos explican por qué.
1726
1727@cindex @file{nsswitch.conf}
1728La biblioteca de C de GNU implementa un @dfn{selector de servicios de
1729nombres} (NSS), que es un mecanismo extensible para ``búsquedas de nombres''
1730en general: resolución de nombres de máquinas, cuentas de usuaria y más
1731(@pxref{Selector de servicios de nombres,,, libc, The GNU C Library Reference Manual}).
1732
1733@cindex Servicio de información de red (NIS)
1734@cindex NIS (servicio de información de red)
1735Al ser extensible, NSS permite el uso de @dfn{módulos}, los cuales
1736proporcionan nuevas implementaciones de búsqueda de nombres: por ejemplo, el
1737módulo @code{nss-mdns} permite la resolución de nombres de máquina
1738@code{.local}, el módulo @code{nis} permite la búsqueda de cuentas de
1739usuaria usando el servicio de información de red (NIS), etc. Estos
1740``servicios de búsqueda'' extra se configuran para todo el sistema en
1741@file{/etc/nsswitch.conf}, y todos los programas en ejecución respetan esta
1742configuración (@pxref{NSS Configuration File,,, libc, The GNU C Reference
1743Manual}).
1744
1745Cuando se realiza una búsqueda de nombres---por ejemplo, llamando a la
1746función @code{getaddrinfo} en C---las aplicaciones primero intentarán
1747conectar con nscd; en caso satisfactorio, nscd realiza la búsqueda de
1748nombres en delegación suya. Si nscd no está ejecutándose, entonces realizan
1749la búsqueda por ellas mismas, cargando los servicios de búsqueda de nombres
1750en su propio espacio de direcciones y ejecutándola. Estos servicios de
1751búsqueda de nombres---los ficheros @file{libnss_*.so}---son abiertos con
1752@code{dlopen}, pero pueden venir de la biblioteca de C del sistema, en vez
1753de la biblioteca de C contra la que la aplicación está enlazada (la
1754biblioteca de C que viene en Guix).
1755
1756Y aquí es donde está el problema: si su aplicación está enlazada contra la
1757biblioteca de C de Guix (digamos, glibc 2.24) e intenta cargar módulos de
1758otra biblioteca de C (digamos, @code{libnss_mdns.so} para glibc 2.22),
1759probablemente terminará abruptamente o sus búsquedas de nombres fallarán
1760inesperadamente.
1761
1762Ejecutar @command{nscd} en el sistema, entre otras ventajas, elimina este
1763problema de incompatibilidad binaria porque esos ficheros @code{libnss_*.so}
1764se cargan en el proceso @command{nscd}, no en la aplicación misma.
1765
1766@subsection Tipografías X11
1767
1768@cindex tipografías
1769La mayoría de aplicaciones gráficas usan Fontconfig para encontrar y cargar
1770tipografías y realizar la renderización del lado del cliente X11. El paquete
1771@code{fontconfig} en Guix busca tipografías en @file{$HOME/.guix-profile}
1772por defecto. Por tanto, para permitir a aplicaciones gráficas instaladas con
1773Guix mostrar tipografías, tiene que instalar las tipografías también con
1774Guix. Paquetes esenciales de tipografías incluyen @code{gs-fonts},
1775@code{font-dejavu} y @code{font-gnu-freefont-ttf}.
1776
1777Para mostrar texto escrito en lenguas chinas, Japonés o Coreano en
1778aplicaciones gráficas, considere instalar @code{font-adobe-source-han-sans}
1779o @code{font-wqy-zenhei}. La anterior tiene múltiples salidas, una por
1780familia de lengua (@pxref{Paquetes con múltiples salidas}). Por ejemplo, la
1781siguiente orden instala tipografías para lenguas chinas:
1782
1783@example
1784guix package -i font-adobe-source-han-sans:cn
1785@end example
1786
1787@cindex @code{xterm}
1788Programas más antiguos como @command{xterm} no usan Fontconfig sino que
1789dependen en el lado del servidor para realizar el renderizado de
1790tipografías. Dichos programas requieren especificar un nombre completo de
1791tipografía usando XLFD (Descripción lógica de tipografías X), como esta:
1792
1793@example
1794-*-dejavu sans-medium-r-normal-*-*-100-*-*-*-*-*-1
1795@end example
1796
1797Para ser capaz de usar estos nombres completos para las tipografías TrueType
1798instaladas en su perfil Guix, necesita extender la ruta de fuentes del
1799servidor X:
1800
1801@c Note: 'xset' does not accept symlinks so the trick below arranges to
1802@c get at the real directory. See <https://bugs.gnu.org/30655>.
1803@example
1804xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir))
1805@end example
1806
1807@cindex @code{xlsfonts}
1808Después de eso, puede ejecutar @code{xlsfonts} (del paquete @code{xlsfonts})
1809para asegurarse que sus tipografías TrueType se enumeran aquí.
1810
1811@cindex @code{fc-cache}
1812@cindex caché de tipografías
1813Después de instalar tipografías puede tener que refrescar la caché de
1814tipografías para usarlas en las aplicaciones. Lo mismo aplica cuando las
1815aplicaciones instaladas vía Guix no parecen encontrar tipografías. Para
1816forzar la reconstrucción de la caché de tipografías ejecute @code{fc-cache
1817-f}. La orden @code{fc-cache} es proporcionada por el paquete
1818@code{fontconfig}.
1819
1820@subsection Certificados X.509
1821
1822@cindex @code{nss-certs}
1823El paquete @code{nss-certs} proporciona certificados X.509, que permiten a
1824los programas verificar los servidores accedidos por HTTPS.
1825
1826Cuando se usa Guix en una distribución distinta, puede instalar este paquete
1827y definir las variables de entorno relevantes de modo que los paquetes sepan
1828dónde buscar los certificados. @xref{Certificados X.509}, para información
1829detallada.
1830
1831@subsection Paquetes Emacs
1832
1833@cindex @code{emacs}
1834Cuando instala paquetes Emacs con Guix, los ficheros elisp pueden estar
1835tanto en @file{$HOME/.guix-profile/share/emacs/site-lisp/} o en
1836subdirectorios de
1837@file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. El último
1838directorio existe porque potencialmente pueden existir miles de paquetes
1839Emacs, y almacenar todos sus ficheros en un directorio único puede no ser
1840confiable (por conflictos de nombres). Por lo que pensamos que usar un
1841directorio separado por cada paquete es una buena idea. Es muy similar a
1842cómo el sistema de paquetes de Emacs organiza la estructura de ficheros
1843(@pxref{Package Files,,, emacs, The GNU Emacs Manual}).
1844
1845Por defecto, Emacs (el instalado con Guix) ``sabe'' donde se alojan estos
1846paquetes, para que usted no tenga que realizar ninguna configuración. Si,
1847por alguna razón, desea evitar la carga automática de paquetes Emacs
1848instalados con Guix, puede hacerlo ejecutando Emacs con la opción
1849@code{--no-site-file} (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
1850
1851@subsection La cadena de herramientas de GCC
1852
1853@cindex GCC
1854@cindex ld-wrapper
1855
1856Guix ofrece paquetes de compiladores individuales como @code{gcc}, pero si
1857necesita una cadena de herramientas completa para compilar y enlazar código
1858fuente lo que realmente desea es el paquete @code{gcc-toolchain}. Este
1859paquete proporciona una cadena de herramientas GCC para desarrollo C/C++,
1860incluyendo el mismo GCC, la biblioteca de C GNU (cabeceras y binarios, más
1861símbolos de desarrollo en la salida @code{debug}), Binutils y un
1862recubrimiento del enlazador.
1863
1864El propósito del recubrimiento es inspeccionar las opciones @code{-L} y
1865@code{-l} proporcionadas al enlazador, y los correspondientes parámetros
1866@code{-rpath}, y llamar al enlazador real con este nuevo conjunto de
1867parámetros. Puede instruir al recubrimiento para rechazar el enlace contra
1868bibliotecas que no se encuentren en el almacén fijando el valor de la
1869variable de entorno @code{GUIX_LD_WRAPPER_ALLOW_IMPURITIES} a @code{no}.
1870
1871@c TODO What else?
1872
1873@c *********************************************************************
1874@node Instalación del sistema
1875@chapter Instalación del sistema
1876
1877@cindex instalación del sistema Guix
1878@cindex sistema Guix, instalación
1879Esta sección explica cómo instalar el sistema Guix en una máquina. Guix,
1880como gestor de paquetes, puede instalarse sobre un sistema GNU/Linux en
1881ejecución, @pxref{Instalación}.
1882
1883@ifinfo
1884@quotation Nota
1885@c This paragraph is for people reading this from tty2 of the
1886@c installation image.
1887Está leyendo esta documentación con un lector Info. Para obtener detalles
1888sobre su uso, presione la tecla @key{RET} (``retorno de carro'' o ``intro'')
1889en el siguiente enlace: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU
1890Info}. Presione después @kbd{l} para volver aquí.
1891
1892De manera alternativa, ejecute @command{info info} en otro terminal para
1893mantener el manual disponible.
1894@end quotation
1895@end ifinfo
1896
1897@menu
1898* Limitaciones:: Qué puede esperar.
1899* Consideraciones sobre el hardware:: Hardware soportado.
1900* Instalación desde memoria USB y DVD:: Preparar el medio de instalación.
1901* Preparación para la instalación:: Red, particionado, etc.
1902* Instalación gráfica guiada:: Instalación gráfica fácil.
1903* Instalación manual:: Instalación manual para artistas del teclado.
1904* Tras la instalación del sistema:: Cuando la instalación ha finalizado
1905 satisfactoriamente.
1906* Instalación de Guix en una máquina virtual:: El patio de recreo del
1907 sistema Guix.
1908* Construcción de la imagen de instalación:: Cómo esto llega a ser.
1909@end menu
1910
1911@node Limitaciones
1912@section Limitaciones
1913
1914We consider Guix System to be ready for a wide range of ``desktop'' and
1915server use cases. The reliability guarantees it provides---transactional
1916upgrades and rollbacks, reproducibility---make it a solid foundation.
1917
1918Nevertheless, before you proceed with the installation, be aware of the
1919following noteworthy limitations applicable to version @value{VERSION}:
1920
1921@itemize
1922@item
1923No está implementada la funcionalidad del gestor de volúmenes lógicos (LVM).
1924
1925@item
1926Se proporcionan más y más servicios del sistema (@pxref{Servicios}), pero
1927pueden faltar algunos.
1928
1929@item
1930GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Servicios de escritorio}), as well as a number of X11 window managers. However, KDE is
1931currently missing.
1932@end itemize
1933
1934More than a disclaimer, this is an invitation to report issues (and success
1935stories!), and to join us in improving it. @xref{Contribuir}, for more
1936info.
1937
1938
1939@node Consideraciones sobre el hardware
1940@section Consideraciones sobre el hardware
1941
1942@cindex soporte de hardware en el sistema Guix
1943GNU@tie{}Guix se enfoca en respetar la libertad de computación de las
1944usuarias. Se construye sobre el núcleo Linux-libre, lo que significa que
1945únicamente funciona hardware para el que existen controladores y firmware
1946libres. Hoy en día, un amplio rango del hardware común funciona con
1947GNU/Linux-libre---desde teclados a tarjetas gráficas a escáneres y
1948controladoras Ethernet. Desafortunadamente, todavía hay áreas donde los
1949fabricantes de hardware deniegan a las usuarias el control de su propia
1950computación, y dicho hardware no funciona en el sistema Guix.
1951
1952@cindex WiFi, soporte hardware
1953One of the main areas where free drivers or firmware are lacking is WiFi
1954devices. WiFi devices known to work include those using Atheros chips
1955(AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre
1956driver, and those using Broadcom/AirForce chips (BCM43xx with Wireless-Core
1957Revision 5), which corresponds to the @code{b43-open} Linux-libre driver.
1958Free firmware exists for both and is available out-of-the-box on Guix
1959System, as part of @code{%base-firmware} (@pxref{Referencia de ``operating-system'',
1960@code{firmware}}).
1961
1962@cindex RYF, Respeta Su Libertad
1963La @uref{https://www.fsf.org/, Fundación del Software Libre} patrocina
1964@uref{https://www.fsf.org/ryf, @dfn{Respeta Su Libertad}} (RYF), un programa
1965de certificación para productos hardware que respetan su libertad y su
1966privacidad y se aseguran de que usted tenga el control sobre su
1967dispositivo. Le recomendamos que compruebe la lista de dispositivos
1968certificados RYF.
1969
1970Otro recurso útil es el sitio web @uref{https://wwww.h-node.org/,
1971H-Node}. Contiene un catálogo de dispositivos hardware con información
1972acerca su funcionalidad con GNU/Linux.
1973
1974
1975@node Instalación desde memoria USB y DVD
1976@section Instalación desde memoria USB y DVD
1977
1978Se puede descargar una imagen de instalación ISO-9660 que puede ser escrita
1979en una memoria USB o grabada en un DVD desde
1980@indicateurl{https://alpha.gnu.org/gnu/guix/guix-system-install-@value{VERSION}.@var{sistema}.iso.xz},
1981donde @var{sistema} es uno de los siguientes valores:
1982
1983@table @code
1984@item x86_64-linux
1985para un sistema GNU/Linux en CPUs compatibles con la arquitectura de 64-bits
1986de Intel/AMD.
1987
1988@item i686-linux
1989para un sistema GNU/Linux en CPUs compatibles con la arquitectura de 32-bits
1990de Intel.
1991@end table
1992
1993@c start duplication of authentication part from ``Binary Installation''
1994Asegurese de descargar el fichero @file{.sig} asociado y de verificar la
1995autenticidad de la imagen contra él, más o menos así:
1996
1997@example
1998$ wget https://alpha.gnu.org/gnu/guix/guix-system-install-@value{VERSION}.@var{sistema}.iso.xz.sig
1999$ gpg --verify guix-system-install-@value{VERSION}.@var{sistema}.iso.xz.sig
2000@end example
2001
2002Si la orden falla porque no dispone de la clave pública necesaria, entonces
2003ejecute esta otra orden para importarla:
2004
2005@example
2006$ gpg --keyserver @value{KEY-SERVER} \
2007 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
2008@end example
2009
2010@noindent
2011@c end duplication
2012y vuelva a ejecutar la orden @code{gpg --verify}.
2013
2014Esta imagen contiene las herramientas necesarias para una instalación. Está
2015pensada ara ser copiada @emph{tal cual} a una memoria USB o DVD con espacio
2016suficiente.
2017
2018@unnumberedsubsec Copiado en una memoria USB
2019
2020Para copiar la imagen en una memoria USB, siga estos pasos:
2021
2022@enumerate
2023@item
2024Descomprima la imagen usando la orden @command{xz}:
2025
2026@example
2027xz -d guix-system-install-@value{VERSION}.@var{sistema}.iso.xz
2028@end example
2029
2030@item
2031Conecte una memoria USB de 1@tie{}GiB o más a su máquina, y determine su
2032nombre de dispositivo. Asumiendo que la memoria USB es @file{/dev/sdX} copie
2033la imagen con:
2034
2035@example
2036dd if=guix-system-install-@value{VERSION}.@var{sistema}.iso of=/dev/sdX
2037sync
2038@end example
2039
2040El acceso a @file{/dev/sdX} normalmente necesita privilegios de root.
2041@end enumerate
2042
2043@unnumberedsubsec Grabación en un DVD
2044
2045Para copiar la imagen a un DVD, siga estos pasos:
2046
2047@enumerate
2048@item
2049Descomprima la imagen usando la orden @command{xz}:
2050
2051@example
2052xz -d guix-system-install-@value{VERSION}.@var{sistema}.iso.xz
2053@end example
2054
2055@item
2056Introduzca un DVD escribible en su máquina, y determine el nombre del
2057dispositivo. Asumiendo que la unidad DVD es @file{/dev/srX}, copie la imagen
2058con:
2059
2060@example
2061growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.@var{sistema}.iso
2062@end example
2063
2064El acceso a @file{/dev/srX} normalmente necesita privilegios de root.
2065@end enumerate
2066
2067@unnumberedsubsec Arranque
2068
2069Una vez hecho esto, debe ser capaz de reiniciar el sistema y arrancar desde
2070la memoria USB o el DVD. Lo primero habitualmente requiere que introducirse
2071en la BIOS o en el menú de arranque UEFI, donde se puede seleccionar el
2072arranque desde la memoria USB.
2073
2074@xref{Instalación de Guix en una máquina virtual}, si, en vez de esto, desea instalar el
2075sistema Guix en una máquina virtual (VM).
2076
2077
2078@node Preparación para la instalación
2079@section Preparación para la instalación
2080
2081Una vez que haya arrancado, puede usar el instalador gráfico guiado, el cual
2082facilita la introducción al sistema (@pxref{Instalación gráfica guiada}). Alternativamente, si ya es está familiarizada con GNU/Linux
2083y desea más control que el que proporciona el instalador gráfico, puede
2084seleccionar el proceso de instalación ``manual'' (@pxref{Instalación manual}).
2085
2086El instalador gráfico está disponible en TTY1. Puede obtener consolas de
2087root en los TTY 3 a 6 pulsando @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4},
2088etc. TTY2 muestra esta documentación y se puede cambiar a dicha consola con
2089@kbd{ctrl-alt-f2}. La documentación es explorable usando las órdenes del
2090lector Info (@pxref{Top,,, info-stnd, Stand-alone GNU Info}). El sistema de
2091instalación ejecuta el daemon GPM para ratones, el cual le permite
2092seleccionar texto con el botón izquierdo y pegarlo con el botón central.
2093
2094@quotation Nota
2095La instalación requiere acceso a Internet de modo que cualquier dependencia
2096de su configuración de sistema no encontrada pueda ser descargada. Véase la
2097sección ``Red'' más adelante.
2098@end quotation
2099
2100@node Instalación gráfica guiada
2101@section Instalación gráfica guiada
2102
2103El instalador gráfico es una interfaz de usuaria basada en texto. Le guiará,
2104con cajas de diálogo, a través de los pasos necesarios para instalar el
2105sistema GNU@tie{}Guix.
2106
2107Las primeras cajas de diálogo le permiten configurar el sistema mientras lo
2108usa durante la instalación: puede seleccionar el idioma, la distribución del
2109teclado y configurar la red, la cual se usará durante la instalación. La
2110siguiente imagen muestra el diálogo de configuración de red.
2111
2112@image{images/installer-network,5in,, configuración de red en la instalación
2113gráfica}
2114
2115Los siguientes pasos le permitirán particionar su disco duro, como se
2116muestra en la siguiente imagen, elegir si se usarán o no sistemas de
2117ficheros cifrados, introducir el nombre de la máquina, la contraseña de root
2118y crear cuentas adicionales, entre otras cosas.
2119
2120@image{images/installer-partitions,5in,, particionado en la instalación
2121gráfica}
2122
2123Tenga en cuenta que, en cualquier momento, el instalador le permite salir de
2124la instalación actual y retomarla en un paso previo, como se muestra en la
2125siguiente imagen.
2126
2127@image{images/installer-resume,5in,, retomado del proceso de instalación}
2128
2129Una vez haya finalizado, el instalador produce una configuración de sistema
2130operativo y la muestra (@pxref{Uso de la configuración del sistema}). En este
2131punto puede pulsar ``OK'' y la instalación procederá. En caso de
2132finalización satisfactoria, puede reiniciar con el nuevo sistema y
2133disfrutarlo. ¡@xref{Tras la instalación del sistema} para ver cómo proceder a
2134continuación!
2135
2136
2137@node Instalación manual
2138@section Instalación manual
2139
2140Esta sección describe como podría instalar ``manualmente'' el sistema
2141GNU@tie{}Guix en su máquina. Esta opción requiere familiaridad con
2142GNU/Linux, con el shell y con las herramientas de administración comunes. Si
2143puensa que no es para usted, considere el uso del instalador gráfico guiado
2144(@pxref{Instalación gráfica guiada}).
2145
2146El sistema de instalación proporciona consolas de root en los terminales
2147virtuales (TTY) 3 a 6; pulse @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4} y
2148sucesivas teclas para abrirlas. Incluye muchas herramientas comunes
2149necesarias para la instalación del sistema. Pero es también un sistema Guix
2150completo, lo que significa que puede instalar paquetes adicionales, en caso
2151de necesitarlos, mediante el uso de @command{guix package} (@pxref{Invocación de guix package}).
2152
2153@menu
2154* Distribución de teclado y red y particionado:: Configuración inicial.
2155* Procedimiento de instalación:: Instalación.
2156@end menu
2157
2158@node Distribución de teclado y red y particionado
2159@subsection Distribución de teclado, red y particionado
2160
2161Antes de instalar el sistema, puede desear ajustar la distribución del
2162teclado, configurar la red y particionar el disco duro deseado. Esta sección
2163le guiará durante este proceso.
2164
2165@subsubsection Distribución de teclado
2166
2167@cindex distribución de teclado
2168La imagen de instalación usa la distribución de teclado QWERTY de los
2169EEUU. Si desea cambiarla, puede usar la orden @command{loadkeys}. Por
2170ejemplo, la siguiente orden selecciona la distribución de teclado para el
2171castellano:
2172
2173@example
2174loadkeys es
2175@end example
2176
2177Véanse los ficheros bajo @file{/run/current-system/profile/share/keymaps}
2178para la obtención de una lista de distribuciones de teclado
2179disponibles. Ejecute @command{man loadkeys} para más información.
2180
2181@subsubsection Red
2182
2183Ejecute la siguiente orden para ver los nombres asignados a sus interfaces
2184de red:
2185
2186@example
2187ifconfig -a
2188@end example
2189
2190@noindent
2191@dots{} o, usando la orden específica de GNU/Linux @command{ip}:
2192
2193@example
2194ip a
2195@end example
2196
2197@c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20
2198El nombre de las interfaces de cable comienza con @samp{e}; por ejemplo, la
2199interfaz que corresponde a la primera controladora Ethernet en la placa se
2200llama @samp{eno1}. El nombre de las interfaces inalámbricas comienza con
2201@samp{w}, como @samp{w1p2s0}.
2202
2203@table @asis
2204@item Conexión por cable
2205Para configurar una red por cable ejecute la siguiente orden, substituyendo
2206@var{interfaz} con el nombre de la interfaz de cable que desea usar.
2207
2208@example
2209ifconfig @var{interfaz} up
2210@end example
2211
2212@item Conexión sin cable
2213@cindex sin cables
2214@cindex WiFi
2215Para configurar una red inalámbrica, puede crear un fichero de configuración
2216para la herramienta de configuración @command{wpa_supplicant} (su ruta no es
2217importante) usando uno de los editores de texto disponibles como
2218@command{nano}:
2219
2220@example
2221nano wpa_supplicant.conf
2222@end example
2223
2224Como un ejemplo, la siguiente plantilla puede colocarse en este fichero y
2225funcionará para muchas redes inalámbricas, siempre que se proporcione el
2226SSID y la contraseña reales de la red a la que se va a conectar:
2227
2228@example
2229network=@{
2230 ssid="@var{mi-ssid}"
2231 key_mgmt=WPA-PSK
2232 psk="la contraseña de la red"
2233@}
2234@end example
2235
2236Inicie el servicio inalámbrico y ejecutelo en segundo plano con la siguiente
2237orden (sustituya @var{interfaz} por el nombre de la interfaz de red que
2238desea usar):
2239
2240@example
2241wpa_supplicant -c wpa_supplicant.conf -i @var{interfaz} -B
2242@end example
2243
2244Ejecute @command{man wpa_supplicant} para más información.
2245@end table
2246
2247@cindex DHCP
2248En este punto, necesita obtener una dirección IP. En una red donde las
2249direcciones IP se asignan automáticamente mediante DHCP, puede ejecutar:
2250
2251@example
2252dhclient -v @var{interfaz}
2253@end example
2254
2255Intente hacer ping a un servidor para comprobar si la red está funcionando
2256correctamente:
2257
2258@example
2259ping -c 3 gnu.org
2260@end example
2261
2262Configurar el acceso por red es casi siempre un requisito debido a que la
2263imagen no contiene todo el software y las herramientas que puedan ser
2264necesarias.
2265
2266@cindex instalación por SSH
2267Si lo desea, puede continuar la instalación de forma remota iniciando un
2268servidor SSH:
2269
2270@example
2271herd start ssh-daemon
2272@end example
2273
2274Asegurese de fijar una contraseña con @command{passwd}, o configurar la
2275verificación de clave pública de OpenSSH para la introducción en el sistema.
2276
2277@subsubsection Particionado de discos
2278
2279A menos que se haya realizado previamente, el siguiente paso es el
2280particionado, y después dar formato a la/s partición/es deseadas.
2281
2282La imagen de instalación contiene varias herramientas de particionado,
2283incluyendo Parted (@pxref{Overview,,, parted, GNU Parted User Manual}),
2284@command{fdisk} y @command{cfdisk}. Ejecutelo y configure el mapa de
2285particiones deseado en su disco:
2286
2287@example
2288cfdisk
2289@end example
2290
2291Si su disco usa el formato de tabla de particiones GUID (GPT) y tiene
2292pensado instalar GRUB basado en BIOS (la opción predeterminada), asegurese
2293de tener una partición de arranque BIOS disponible (@pxref{BIOS
2294installation,,, grub, GNU GRUB manual}).
2295
2296@cindex EFI, instalación
2297@cindex UEFI, instalación
2298@cindex ESP, partición del sistema EFI
2299Si en vez de eso desea GRUB basado en EFI, se requiere una @dfn{Partición
2300del Sistema EFI} (ESP) con formato FAT32. Esta partición puede montarse en
2301@file{/boot/efi} y debe tener la opción @code{esp} activa. Por ejemplo, en
2302@command{parted}:
2303
2304@example
2305parted /dev/sda set 1 esp on
2306@end example
2307
2308@quotation Nota
2309@vindex grub-bootloader
2310@vindex grub-efi-bootloader
2311¿No esta segura si usar GRUB basado en EFI o en BIOS? Si el directorio
2312@file{/sys/firmware/efi} existe en la imagen de instalación, probablemente
2313debería realizar una instalación EFI, usando @code{grub-efi-bootloader}. En
2314otro caso, debe usar GRUB basado en BIOS, conocido como
2315@code{grub-bootloader}. @xref{Configuración del gestor de arranque}, para más
2316información sobre cargadores de arranque.
2317@end quotation
2318
2319Una vez haya terminado con el particionado de la unidad de disco deseada,
2320tiene que crear un sistema de ficheros en la o las particiónes
2321relevantes@footnote{Actualmente el sistema Guix únicamente permite sistemas
2322de ficheros ext4 y btrfs. En particular, el código que lee UUIDs del sistema
2323de ficheros y etiquetas únicamente funciona para dichos sistemas de
2324ficheros.}. Para la ESP, si tiene una y asumiendo que es @file{/dev/sda1},
2325ejecute:
2326
2327@example
2328mkfs.fat -F32 /dev/sda1
2329@end example
2330
2331Preferentemente, asigne una etiqueta a los sistemas de ficheros de modo que
2332pueda referirse a ellos de forma fácil y precisa en las declaraciones
2333@code{file-system} (@pxref{Sistemas de ficheros}). Esto se consigue habitualmente
2334con la opción @code{-L} de @command{mkfs.ext4} y las ordenes
2335relacionadas. Por tanto, asumiendo que la partición de la raíz es
2336@file{/dev/sda2}, se puede crear un sistema de ficheros con la etiqueta
2337@code{mi-raiz} de esta manera:
2338
2339@example
2340mkfs.ext4 -L mi-raiz /dev/sda2
2341@end example
2342
2343@cindex disco cifrado
2344Si en vez de eso planea cifrar la partición raíz, puede usar las
2345herramientas Crypsetup/LUKS para hacerlo (véase @inlinefmtifelse{html,
2346@uref{https://linux.die.net/man/8/cryptsetup, @code{man cryptsetup}},
2347@code{man cryptsetup}} para más información). Asumiendo que quiere almacenar
2348la partición raíz en @file{/dev/sda2}, la secuencia de ordenes sería más o
2349menos así:
2350
2351@example
2352cryptsetup luksFormat /dev/sda2
2353cryptsetup open --type luks /dev/sda1 mi-particion
2354mkfs.ext4 -L mi-raiz /dev/mapper/mi-particion
2355@end example
2356
2357Una vez hecho esto, monte el sistema de ficheros deseado bajo @file{/mnt}
2358con una orden como (de nuevo, asumiendo que @code{mi-raiz} es la etiqueta
2359del sistema de ficheros raíz):
2360
2361@example
2362mount LABEL=mi-raiz /mnt
2363@end example
2364
2365Monte también cualquier otro sistema de ficheros que desee usar en el
2366sistema resultante relativamente a esta ruta. Si ha optado por
2367@file{/boot/efi} como el punto de montaje de EFI, por ejemplo, ahora debe
2368ser montada en @file{/mnt/boot/efi} para que @code{guix system init} pueda
2369encontrarla más adelante.
2370
2371Finalmente, si planea usar una o más particiones de intercambio
2372(@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference
2373Manual}), asegurese de inicializarla con @command{mkswap}. Asumiendo que
2374tuviese una partición de intercambio en @file{/dev/sda3}, ejecutaría:
2375
2376@example
2377mkswap /dev/sda3
2378swapon /dev/sda3
2379@end example
2380
2381De manera alternativa, puede usar un fichero de intercambio. Por ejemplo,
2382asumiendo que en el nuevo sistema desea usar el fichero
2383@file{/fichero-de-intercambio} como tal, ejecutaría@footnote{Este ejemplo
2384funcionará para muchos tipos de sistemas de ficheros (por ejemplo, ext4). No
2385obstante, para los sistemas de ficheros con mecanismos de
2386copia-durante-escritura (por ejemplo, btrfs) los pasos pueden diferir. Para
2387obtener más detalles, véanse las páginas de manual para @command{mkswap} y
2388@command{swapon}.}:
2389
2390@example
2391# Esto son 10GiB de espacio de intercambio. Ajuste "count" para
2392# cambiar el tamaño.
2393dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240
2394# Por seguridad, se mantiene el fichero únicamente legible y
2395# escribible por root.
2396chmod 600 /mnt/swapfile
2397mkswap /mnt/swapfile
2398swapon /mnt/swapfile
2399@end example
2400
2401Fijese que si ha cifrado la partición raíz y creado un fichero de
2402intercambio en su sistema de ficheros como se ha descrito anteriormente, el
2403cifrado también protege al fichero de intercambio, como a cualquier fichero
2404en dicho sistema de ficheros.
2405
2406@node Procedimiento de instalación
2407@subsection Procedimiento de instalación
2408
2409Con las particiones deseadas listas y la raíz deseada montada en
2410@file{/mnt}, estamos preparadas para empezar. Primero, ejecute:
2411
2412@example
2413herd start cow-store /mnt
2414@end example
2415
2416Esto activa la copia-durante-escritura en @file{/gnu/store}, de modo que los
2417paquetes que se añadan durante la fase de instalación se escriban en el
2418disco montado en @file{/mnt} en vez de permanecer en memoria. Esto es
2419necesario debido a que la primera fase de la orden @command{guix system
2420init} (vea más adelante) implica descargas o construcciones en
2421@file{/gnu/store}, el cual, inicialmente, está un sistema de ficheros en
2422memoria.
2423
2424Después debe editar un fichero y proporcionar la declaración de sistema
2425operativo a instalar. Para dicho fin, el sistema de instalación viene con
2426tres editores de texto. Recomendamos GNU nano (@pxref{Top,,, nano, GNU nano
2427Manual}), que permite el resaltado de sintaxis y correspondencia de
2428paréntesis; los otros editores son GNU Zile (un clon de Emacs) y nvi (un
2429clon del editor @command{vi} original de BSD). Le recomendamos
2430encarecidamente almacenar ese fichero en el sistema de ficheros raíz,
2431digamos, como @file{/mnt/etc/config.scm}. En caso de no hacerlo, habrá
2432perdido su configuración del sistema una vez arranque en el sistema recién
2433instalado.
2434
2435@xref{Uso de la configuración del sistema}, para hacerse una idea del fichero de
2436configuración. Las configuraciones de ejemplo mencionadas en esa sección
2437están disponibles bajo @file{/etc/configuration} en la imagen de
2438instalación. Por tanto, para empezar con una configuración del sistema que
2439proporcione un servidor gráfico (un sistema de ``escritorio''), puede
2440ejecutar algo parecido a estas órdenes:
2441
2442@example
2443# mkdir /mnt/etc
2444# cp /etc/configuration/desktop.scm /mnt/etc/config.scm
2445# nano /mnt/etc/config.scm
2446@end example
2447
2448Debe prestar atención a lo que su fichero de configuración contiene, y en
2449particular:
2450
2451@itemize
2452@item
2453Asegurese que la forma @code{bootloader-configuration} especifica la
2454localización deseada de la instalación de GRUB. Debe mencionar
2455@code{grub-bootloader} si está usando GRUB con el arranque antiguo, o
2456@code{grub-efi-bootloader} para sistemas más nuevos UEFI. Para los sistemas
2457antiguos, el campo @code{target} denomina un dispositivo, como
2458@code{/dev/sda}; para los sistemas UEFI denomina la ruta de una partición
2459EFI montada, como @code{/boot/efi}; asegurese de que la ruta está
2460actualmente montada y haya una entrada @code{file-system} especificada en su
2461configuración.
2462
2463@item
2464Asegurese que las etiquetas de su sistema de ficheros corresponden con el
2465valor de sus campos @code{device} respectivos en su configuración
2466@code{file-system}, asumiendo que su configuración @code{file-system} usa el
2467procedimiento @code{file-system-label} en su campo @code{device}.
2468
2469@item
2470Si hay particiones cifradas o en RAID, asegurese de añadir un campo
2471@code{mapped-devices} para describirlas (@pxref{Dispositivos traducidos}).
2472@end itemize
2473
2474Una vez haya terminado de preparar el fichero de configuración, el nuevo
2475sistema debe ser inicializado (recuerde que el sistema de ficheros raíz
2476deseado está montado bajo @file{/mnt}):
2477
2478@example
2479guix system init /mnt/etc/config.scm /mnt
2480@end example
2481
2482@noindent
2483Esto copia todos los ficheros necesarios e instala GRUB en @file{/dev/sdX},
2484a menos que proporcione la opción @option{--no-bootloader}. Para más
2485información, @pxref{Invocación de guix system}. Esta orden puede desencadenar
2486descargas o construcciones de paquetes no encontrados, lo cual puede tomar
2487algún tiempo.
2488
2489Una vez que la orden se complete---¡y, deseablemente, de forma
2490satisfactoria!---puede ejecutar @command{reboot} y arrancar con el nuevo
2491sistema. La contraseña de @code{root} en el nuevo sistema está vacía
2492inicialmente; otras contraseñas de usuarias tienen que ser inicializadas
2493ejecutando la orden @command{passwd} como @code{root}, a menos que en su
2494configuración se especifique de otra manera (@pxref{user-account-password,
2495contraseñas de cuentas de usuaria}). ¡@xref{Tras la instalación del sistema} para
2496proceder a continuación!
2497
2498
2499@node Tras la instalación del sistema
2500@section Tras la instalación del sistema
2501
2502¡Éxito! ¡Ha arrancado en el sistema Guix! De ahora en adelante, puede
2503actualizar el sistema cuando quiera mediante la ejecución de, digamos:
2504
2505@example
2506guix pull
2507sudo guix system reconfigure /etc/config.scm
2508@end example
2509
2510@noindent
2511Esto construye una nueva generación del sistema con los últimos paquetes y
2512servicios (@pxref{Invocación de guix system}). Recomendamos realizarlo de manera
2513regular de modo que su sistema incluya las últimas actualizaciones de
2514seguridad (@pxref{Actualizaciones de seguridad}).
2515
2516@c See <https://lists.gnu.org/archive/html/guix-devel/2019-01/msg00268.html>.
2517@quotation Nota
2518@cindex sudo y @command{guix pull}
2519Tenga en cuenta que @command{sudo guix} ejecuta el ejecutable @command{guix}
2520de su usuaria y @emph{no} el de root, ya que @command{sudo} no altera
2521@code{PATH}. Para ejecutar explícitamente el ejecutable @command{guix} de
2522root, escriba @command{sudo -i guix @dots{}}.
2523@end quotation
2524
2525¡Unase a nosotras en @code{#guix} en la red IRC Freenode o en
2526@file{guix-devel@@gnu.org} para compartir su experiencia!
2527
2528
2529@node Instalación de Guix en una máquina virtual
2530@section Instalación de Guix en una máquina virtual
2531
2532@cindex máquina virtual, instalación del sistema Guix
2533@cindex servidor virtual privado (VPS)
2534@cindex VPS (servidor virtual privado)
2535Si desea instalar el sistema Guix en una máquina virtual (VM) o en un
2536servidor privado virtual (VPS) en vez de en su preciada máquina, esta
2537sección es para usted.
2538
2539Si quiere arrancar una VM @uref{http://qemu.org/,QEMU} para instalar el
2540sistema Guix en una imagen de disco, siga estos pasos:
2541
2542@enumerate
2543@item
2544Primero, obtenga y descomprima la imagen de instalación del sistema Guix
2545como se ha descrito previamente (@pxref{Instalación desde memoria USB y DVD}).
2546
2547@item
2548Cree una imagen de disco que contendrá el sistema instalado. Para crear una
2549imagen de disco con formato qcow2, use la orden @command{qemu-img}:
2550
2551@example
2552qemu-img create -f qcow2 guixsd.img 50G
2553@end example
2554
2555El fichero que obtenga será mucho menor de 50GB (típicamente menos de 1MB),
2556pero crecerá cuando el dispositivo de almacenamiento virtualizado se vaya
2557llenando.
2558
2559@item
2560Arranque la imagen de instalación USB en una máquina virtual:
2561
2562@example
2563qemu-system-x86_64 -m 1024 -smp 1 \
2564 -net user -net nic,model=virtio -boot menu=on \
2565 -drive file=guix-system-install-@value{VERSION}.@var{sistema}.iso \
2566 -drive file=guixsd.img
2567@end example
2568
2569El orden de las unidades importa.
2570
2571En la consola de la VM, pulse rápidamente la tecla @kbd{F12} para entrar al
2572menú de arranque. Pulse la tecla @kbd{2} y la tecla @kbd{RET} para confirmar
2573su selección.
2574
2575@item
2576Ahora es root en la VM, prosiga con el procedimiento de
2577instalación. @xref{Preparación para la instalación}, y siga las instrucciones.
2578@end enumerate
2579
2580Una vez complete la instalación, puede arrancar el sistema que está en la
2581imagen @file{guixsd.img}. @xref{Ejecutar Guix en una máquina virtual}, para información
2582sobre cómo hacerlo.
2583
2584@node Construcción de la imagen de instalación
2585@section Construcción de la imagen de instalación
2586
2587@cindex imagen de instalación
2588La imagen de instalación descrita anteriormente se construyó usando la orden
2589@command{guix system}, específicamente:
2590
2591@example
2592guix system disk-image --file-system-type=iso9660 \
2593 gnu/system/install.scm
2594@end example
2595
2596Eche un vistazo a @file{gnu/system/install.scm} en el árbol de fuentes, y
2597vea también @ref{Invocación de guix system} para más información acerca de la
2598imagen de instalación.
2599
2600@section Construcción de la imagen de instalación para placas ARM
2601
2602Muchas placas ARM necesitan una variante específica del cargador de arranque
2603@uref{http://www.denx.de/wiki/U-Boot/, U-Boot}.
2604
2605Si construye una imagen de disco y el cargador de arranque no está
2606disponible de otro modo (en otra unidad de arranque, etc.), es recomendable
2607construir una imagen que incluya el cargador, específicamente:
2608
2609@example
2610guix system disk-image --system=armhf-linux -e '((@@ (gnu system install) os-with-u-boot) (@@ (gnu system install) installation-os) "A20-OLinuXino-Lime2")'
2611@end example
2612
2613@code{A20-OLinuXino-Lime2} es el nombre de la placa. Si especifica una placa
2614no válida, una lista de placas posibles será mostrada.
2615
2616@c *********************************************************************
2617@node Gestión de paquetes
2618@chapter Gestión de paquetes
2619
2620@cindex paquetes
2621El propósito de GNU Guix es permitir a las usuarias instalar, actualizar y
2622borrar fácilmente paquetes de software, sin tener que conocer acerca de sus
2623procedimientos de construcción o dependencias. Guix también va más allá de
2624este conjunto obvio de características.
2625
2626Este capítulo describe las principales características de Guix, así como las
2627herramientas de gestión de paquetes que ofrece. Junto a la interfaz de línea
2628de órdenes descrita a continuación (@pxref{Invocación de guix package, @code{guix
2629package}}, también puede usar la interfaz Emacs-Guix (@pxref{Top,,,
2630emacs-guix, The Emacs Guix Reference Manual}), tras la instalación del
2631paquete @code{emacs-guix} (ejecute la orden @kbd{M-x guix-help} para
2632iniciarse en su uso):
2633
2634@example
2635guix package -i emacs-guix
2636@end example
2637
2638@menu
2639* Características:: Cómo Guix dará brillo a su vida.
2640* Invocación de guix package:: Instalación de paquetes, borrado, etc.
2641* Sustituciones:: Descargar binarios pre-construidos.
2642* Paquetes con múltiples salidas:: Un único paquete de fuentes,
2643 múltiples salidas.
2644* Invocación de guix gc:: Ejecutar el recolector de basura.
2645* Invocación de guix pull:: Obtener la última versión de Guix y la
2646 distribución.
2647* Canales:: Personalizar el recolector de basura.
2648* Inferiores:: Interactuar con otra revisión de Guix.
2649* Invocación de guix describe:: Muestra información acerca de su
2650 revisión de Guix.
2651* Invocación de guix archive:: Exportar e importar ficheros del almacén.
2652@end menu
2653
2654@node Características
2655@section Características
2656
2657Cuando se usa Guix, cada paquete se encuentra en el @dfn{almacén de
2658paquetes}, en su propio directorio---algo que se asemeja a
2659@file{/gnu/store/xxx-paquete-1.2}, donde @code{xxx} es una cadena en base32.
2660
2661En vez de referirse a estos directorios, las usuarias tienen su propio
2662@dfn{perfil}, el cual apunta a los paquetes que realmente desean usar. Estos
2663perfiles se almacenan en el directorio de cada usuaria, en
2664@code{$HOME/.guix-profile}.
2665
2666Por ejemplo, @code{alicia} instala GCC 4.7.2. Como resultado,
2667@file{/home/alicia/.guix-profile/bin/gcc} apunta a
2668@file{/gnu/store/@dots{}-gcc-4.7.2/bin/gcc}. Ahora, en la misma máquina,
2669@code{rober} ha instalado ya GCC 4.8.0. El perfil de @code{rober}
2670simplemente sigue apuntando a
2671@file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---es decir, ambas versiones de
2672GCC pueden coexistir en el mismo sistema sin ninguna interferencia.
2673
2674La orden @command{guix package} es la herramienta central para gestión de
2675paquetes (@pxref{Invocación de guix package}). Opera en los perfiles de usuaria,
2676y puede ser usada @emph{con privilegios de usuaria normal}.
2677
2678@cindex transacciones
2679La orden proporciona las operaciones obvias de instalación, borrado y
2680actualización. Cada invocación es en realidad una @emph{transacción}: o bien
2681la operación especificada se realiza satisfactoriamente, o bien nada
2682sucede. Por tanto, si el proceso @command{guix package} es finalizado
2683durante una transacción, o un fallo eléctrico ocurre durante la transacción,
2684el perfil de usuaria permanece en su estado previo, y permanece usable.
2685
2686Además, cualquier transacción de paquetes puede ser @emph{vuelta atrás}. Si,
2687por ejemplo, una actualización instala una nueva versión de un paquete que
2688resulta tener un error importante, las usuarias pueden volver a la instancia
2689previa de su perfil, de la cual se tiene constancia que funcionaba bien. De
2690igual modo, la configuración global del sistema en Guix está sujeta a
2691actualizaciones transaccionales y vuelta atrás (@pxref{Uso de la configuración del sistema}).
2692
2693Todos los paquetes en el almacén de paquetes pueden ser @emph{eliminados por
2694el recolector de basura}. Guix puede determinar qué paquetes están siendo
2695todavía referenciados por los perfiles de usuarias, y eliminar aquellos que,
2696de forma demostrable, no están referenciados (@pxref{Invocación de guix gc}). Las
2697usuarias pueden también borrar explícitamente generaciones antiguas de su
2698perfil para que los paquetes referenciados en ellas puedan ser recolectadas.
2699
2700@cindex reproducibilidad
2701@cindex construcciones reproducibles
2702Guix toma una aproximación @dfn{puramente funcional} en la gestión de
2703paquetes, como se describe en la introducción (@pxref{Introducción}). Cada
2704nombre de directorio de paquete en @file{/gnu/store} contiene un hash de
2705todas las entradas que fueron usadas para construir el paquete---compilador,
2706bibliotecas, guiones de construcción, etc. Esta correspondencia directa
2707permite a las usuarias asegurarse que una instalación dada de un paquete
2708corresponde al estado actual de su distribución. Esto también ayuda a
2709maximizar la @dfn{reproducibilidad de la construcción}: gracias al uso de
2710entornos aislados de construcción, una construcción dada probablemente
2711generará ficheros idénticos bit-a-bit cuando se realice en máquinas
2712diferentes (@pxref{Invocación de guix-daemon, container}).
2713
2714@cindex sustituciones
2715Estos cimientos permiten a Guix ofrecer @dfn{despliegues transparentes de
2716binarios/fuentes}. Cuando un binario pre-construido para un elemento de
2717@file{/gnu/store} está disponible para descarga de una fuente externa---una
2718@dfn{sustitución}, Guix simplemente lo descarga y desempaqueta; en otro caso
2719construye el paquete de las fuentes, localmente
2720(@pxref{Sustituciones}). Debido a que los resultados de construcción son
2721normalmente reproducibles bit-a-bit, las usuarias no tienen que confiar en
2722los servidores que proporcionan sustituciones: pueden forzar una
2723construcción local y @emph{retar} a las proveedoras (@pxref{Invocación de guix challenge}).
2724
2725El control sobre el entorno de construcción es una característica que
2726también es útil para desarrolladoras. La orden @command{guix environment}
2727permite a desarrolladoras de un paquete configurar rápidamente el entorno de
2728desarrollo correcto para su paquete, sin tener que instalar manualmente las
2729dependencias del paquete en su perfil (@pxref{Invocación de guix environment}).
2730
2731@cindex replicación, de entornos de software
2732@cindex seguimiento de procedencia, de artefactos de software
2733Todo Guix y sus definiciones de paquetes están bajo control de versiones, y
2734@command{guix pull} le permite ``viajar en el tiempo'' por la historia del
2735mismo Guix (@pxref{Invocación de guix pull}). Esto hace posible replicar una
2736instancia de Guix en una máquina diferente o en un punto posterior del
2737tiempo, lo que a su vez le permite @emph{replicar entornos de software
2738completos}, mientras que mantiene un preciso @dfn{seguimiento de la
2739procedencia} del software.
2740
2741@node Invocación de guix package
2742@section Invocación de @command{guix package}
2743
2744@cindex instalar paquetes
2745@cindex borrar paquetes
2746@cindex instalación de paquetes
2747@cindex borrado de paquetes
2748La orden @command{guix package} es la herramienta que permite a las usuarias
2749instalar, actualizar y borrar paquetes, así como volver a configuraciones
2750previas. Opera únicamente en el perfil propio de la usuaria, y funciona con
2751privilegios de usuaria normal (@pxref{Características}). Su sintaxis es:
2752
2753@example
2754guix package @var{opciones}
2755@end example
2756@cindex transacciones
2757Primariamente, @var{opciones} especifica las operaciones a ser realizadas
2758durante la transacción. Al completarse, un nuevo perfil es creado, pero las
2759@dfn{generaciones} previas del perfil permanecen disponibles, en caso de que
2760la usuaria quisiera volver atrás.
2761
2762Por ejemplo, para borrar @code{lua} e instalar @code{guile} y
2763@code{guile-cairo} en una única transacción:
2764
2765@example
2766guix package -r lua -i guile guile-cairo
2767@end example
2768
2769@command{guix package} también proporciona una @dfn{aproximación
2770declarativa}, donde la usuaria especifica el conjunto exacto de paquetes a
2771poner disponibles y la pasa a través de la opción @option{--manifest}
2772(@pxref{profile-manifest, @option{--manifest}}).
2773
2774@cindex perfil
2775Para cada usuaria, un enlace simbólico al perfil predeterminado de la
2776usuaria es creado en @file{$HOME/.guix-profile}. Este enlace simbólico
2777siempre apunta a la generación actual del perfil predeterminado de la
2778usuaria. Por lo tanto, las usuarias pueden añadir
2779@file{$HOME/.guix-profile/bin} a su variable de entorno @code{PATH}, y
2780demás.
2781@cindex rutas de búsqueda
2782Si no está usando la Distribución de Sistema Guix, considere añadir las
2783siguientes líneas a su @file{~/.bash_profile} (@pxref{Bash Startup Files,,,
2784bash, The GNU Bash Reference Manual}) de modo que los shell lanzados a
2785partir de entonces obtengan todas las definiciones de variables de entorno
2786correctas:
2787
2788@example
2789GUIX_PROFILE="$HOME/.guix-profile" ; \
2790source "$HOME/.guix-profile/etc/profile"
2791@end example
2792
2793En una configuración multiusuaria, los perfiles de usuaria se almacenan en
2794un lugar registrado como una @dfn{raíz del sistema de ficheros}, a la que
2795apunta @file{$HOME/.guix-profile} (@pxref{Invocación de guix gc}). Ese directorio
2796normalmente es
2797@code{@var{localstatedir}/guix/profiles/per-user/@var{usuaria}}, donde
2798@var{localstatedir} es el valor pasado a @code{configure} como
2799@code{--localstatedir} y @var{usuaria} es el nombre de usuaria. El
2800directorio @file{per-user} se crea cuando se lanza @command{guix-daemon}, y
2801el subdirectorio @var{usuaria} es creado por @command{guix package}.
2802
2803Las @var{opciones} pueden ser las siguientes:
2804
2805@table @code
2806
2807@item --install=@var{paquete} @dots{}
2808@itemx -i @var{paquete} @dots{}
2809Instala los @var{paquete}s especificados.
2810
2811Cada @var{paquete} puede especificar un nombre simple de paquete, como por
2812ejemplo @code{guile}, o un nombre de paquete seguido por una arroba y el
2813número de versión, como por ejemplo @code{guile@@1.8.8} o simplemente
2814@code{guile@@1.8} (en el último caso la última versión con @code{1.8} como
2815prefijo es seleccionada).
2816
2817Si no se especifica un número de versión, la última versión disponible será
2818seleccionada. Además, @var{paquete} puede contener dos puntos, seguido por
2819el nombre de una de las salidas del paquete, como en @code{gcc:doc} o
2820@code{binutils@@2.22:lib} (@pxref{Paquetes con múltiples salidas}). Los
2821paquetes con el nombre correspondiente (y opcionalmente la versión) se
2822buscan entre los módulos de la distribución GNU (@pxref{Módulos de paquetes}).
2823
2824@cindex entradas propagadas
2825A veces los paquetes tienen @dfn{entradas propagadas}: estas son las
2826dependencias que se instalan automáticamente junto al paquete requerido
2827(@pxref{package-propagated-inputs, @code{propagated-inputs} in
2828@code{package} objects}, para información sobre las entradas propagadas en
2829las definiciones de paquete).
2830
2831@anchor{package-cmd-propagated-inputs}
2832Un ejemplo es la biblioteca GNU MPC: sus ficheros de cabecera C hacen
2833referencia a los de la biblioteca GNU MPFR, que a su vez hacen referencia a
2834los de la biblioteca GMP. Por tanto, cuando se instala MPC, las bibliotecas
2835MPFR y GMP también se instalan en el perfil; borrar MPC también borra MPFR y
2836GMP---a menos que también se hayan instalado explícitamente por la usuaria.
2837
2838Por otra parte, los paquetes a veces dependen de la definición de variables
2839de entorno para sus rutas de búsqueda (véase a continuación la explicación
2840de @code{--seach-paths}). Cualquier definición de variable de entorno que
2841falte o sea posiblemente incorrecta se informa aquí.
2842
2843@item --install-from-expression=@var{exp}
2844@itemx -e @var{exp}
2845Instala el paquete al que @var{exp} evalúa.
2846
2847@var{exp} debe ser una expresión Scheme que evalue a un objeto
2848@code{<package>}. Esta opción es notablemente útil para desambiguar entre
2849variantes con el mismo nombre que un paquete, con expresiones como @code{(@@
2850(gnu packages base) guile-final)}.
2851
2852Fíjese que esta opción instala la primera salida del paquete especificado,
2853lo cual puede ser insuficiente cuando se necesita una salida específica de
2854un paquete con múltiples salidas.
2855
2856@item --install-from-file=@var{fichero}
2857@itemx -f @var{fichero}
2858Instala el paquete que resulta de evaluar el código en @var{fichero}.
2859
2860Como un ejemplo, @var{fichero} puede contener una definición como esta
2861(@pxref{Definición de paquetes}):
2862
2863@example
2864@verbatiminclude package-hello.scm
2865@end example
2866
2867Las desarrolladoras pueden encontrarlo útil para incluir un fichero
2868@file{guix.scm} in la raíz del árbol de fuentes de su proyecto que puede ser
2869usado para probar imágenes de desarrollo y crear entornos de desarrollo
2870reproducibles (@pxref{Invocación de guix environment}).
2871
2872@item --remove=@var{paquete} @dots{}
2873@itemx -r @var{paquete} @dots{}
2874Borra los @var{paquete}s especificados.
2875
2876Como en @code{--install}, cada @var{paquete} puede especificar un número de
2877versión y/o un nombre de salida además del nombre del paquete. Por ejemplo,
2878@code{-r glibc:debug} eliminaría la salida @code{debug} de @code{glibc}.
2879
2880@item --upgrade[=@var{regexp} @dots{}]
2881@itemx -u [@var{regexp} @dots{}]
2882@cindex actualizar paquetes
2883Actualiza todos los paquetes instalados. Si se especifica una o más
2884expresiones regular @var{regexp}, actualiza únicamente los paquetes
2885instalados cuyo nombre es aceptado por @var{regexp}. Véase también la opción
2886@code{--do-not-upgrade} más adelante.
2887
2888Tenga en cuenta que esto actualiza los paquetes a la última versión
2889encontrada en la distribución instalada actualmente. Para actualizar su
2890distribución, debe ejecutar regularmente @command{guix pull}
2891(@pxref{Invocación de guix pull}).
2892
2893@item --do-not-upgrade[=@var{regexp} @dots{}]
2894Cuando se usa junto a la opción @code{--upgrade}, @emph{no} actualiza ningún
2895paquete cuyo nombre sea aceptado por @var{regexp}. Por ejemplo, para
2896actualizar todos los paquetes en el perfil actual excepto aquellos que
2897contengan la cadena ``emacs'':
2898
2899@example
2900$ guix package --upgrade . --do-not-upgrade emacs
2901@end example
2902
2903@item @anchor{profile-manifest}--manifest=@var{fichero}
2904@itemx -m @var{fichero}
2905@cindex declaración del perfil
2906@cindex manifiesto del perfil
2907Crea una nueva generación del perfil desde el objeto de manifiesto devuelto
2908por el código Scheme en @var{fichero}.
2909
2910Esto le permite @emph{declarar} los contenidos del perfil en vez de
2911construirlo a través de una secuencia de @code{--install} y órdenes
2912similares. La ventaja es que @var{fichero} puede ponerse bajo control de
2913versiones, copiarse a máquinas diferentes para reproducir el mismo perfil, y
2914demás.
2915
2916@c FIXME: Add reference to (guix profile) documentation when available.
2917@var{fichero} debe devolver un objeto @dfn{manifest}, que es básicamente una
2918lista de paquetes:
2919
2920@findex packages->manifest
2921@example
2922(use-package-modules guile emacs)
2923
2924(packages->manifest
2925 (list emacs
2926 guile-2.0
2927 ;; Usa una salida específica del paquete.
2928 (list guile-2.0 "debug")))
2929@end example
2930
2931@findex specifications->manifest
2932En este ejemplo tenemos que conocer qué módulos definen las variables
2933@code{emacs} y @code{guile-2.0} para proporcionar la línea
2934@code{use-package-modules} correcta, lo cual puede ser complicado. En cambio
2935podemos proporcionar especificaciones regulares de paquetes y dejar a
2936@code{specifications->manifest} buscar los objetos de paquete
2937correspondientes así:
2938
2939@example
2940(specifications->manifest
2941 '("emacs" "guile@@2.2" "guile@@2.2:debug"))
2942@end example
2943
2944@item --roll-back
2945@cindex vuelta atrás
2946@cindex deshacer transacciones
2947@cindex transacciones, deshaciendo
2948Vuelve a la @dfn{generación} previa del perfil---es decir, deshace la última
2949transacción.
2950
2951Cuando se combina con opciones como @code{--install}, la vuelta atrás ocurre
2952antes que cualquier acción.
2953
2954Cuando se vuelve atrás en la primera generación que realmente contiene
2955paquetes instalados, se hace que el perfil apunte a la @dfn{generación
2956cero}, la cual no contiene ningún fichero a excepción de sus propios
2957metadatos.
2958
2959Después de haber vuelto atrás, instalar, borrar o actualizar paquetes
2960sobreescribe las generaciones futuras previas. Por tanto, la historia de las
2961generaciones en un perfil es siempre linear.
2962
2963@item --switch-generation=@var{patrón}
2964@itemx -S @var{patrón}
2965@cindex generaciones
2966Cambia a una generación particular definida por el @var{patrón}.
2967
2968@var{patrón} puede ser tanto un número de generación como un número
2969prefijado con ``+'' o ``-''. Esto último significa: mueve atrás/hacia
2970delante el número especificado de generaciones. Por ejemplo, si quiere
2971volver a la última generación antes de @code{--roll-back}, use
2972@code{--switch-generation=+1}.
2973
2974La diferencia entre @code{--roll-back} y @code{--switch-generation=-1} es
2975que @code{--switch-generation} no creará una generación cero, así que si la
2976generación especificada no existe, la generación actual no se verá cambiada.
2977
2978@item --search-paths[=@var{tipo}]
2979@cindex rutas de búsqueda
2980Informa de variables de entorno, en sintaxis Bash, que pueden necesitarse
2981para usar el conjunto de paquetes instalado. Estas variables de entorno se
2982usan para especificar las @dfn{rutas de búsqueda} para ficheros usadas por
2983algunos de los paquetes.
2984
2985Por ejemplo, GCC necesita que las variables de entorno @code{CPATH} y
2986@code{LIBRARY_PATH} estén definidas para poder buscar cabeceras y
2987bibliotecas en el perfil de la usuaria (@pxref{Environment Variables,,, gcc,
2988Using the GNU Compiler Collection (GCC)}). Si GCC y, digamos, la biblioteca
2989de C están instaladas en el perfil, entonces @code{--search-paths} sugerirá
2990fijar dichas variables a @code{@var{perfil}/include} y
2991@code{@var{perfil}/lib} respectivamente.
2992
2993El caso de uso típico es para definir estas variables de entorno en el
2994shell:
2995
2996@example
2997$ eval `guix package --search-paths`
2998@end example
2999
3000@var{tipo} puede ser @code{exact}, @code{prefix} o @code{suffix}, lo que
3001significa que las definiciones de variables de entorno devueltas serán
3002respectivamente las configuraciones exactas, prefijos o sufijos del valor
3003actual de dichas variables. Cuando se omite, el valor predeterminado de
3004@var{tipo} es @code{exact}.
3005
3006Esta opción puede usarse para calcular las rutas de búsqueda
3007@emph{combinadas} de varios perfiles. Considere este ejemplo:
3008
3009@example
3010$ guix package -p foo -i guile
3011$ guix package -p bar -i guile-json
3012$ guix package -p foo -p bar --search-paths
3013@end example
3014
3015La última orden informa sobre la variable @code{GUILE_LOAD_PATH}, aunque,
3016tomada individualmente, ni @file{foo} ni @file{bar} hubieran llevado a esa
3017recomendación.
3018
3019
3020@item --profile=@var{perfil}
3021@itemx -p @var{perfil}
3022Usa @var{perfil} en vez del perfil predeterminado de la usuaria.
3023
3024@cindex colisiones, en un perfil
3025@cindex paquetes con colisiones en perfiles
3026@cindex colisiones del perfil
3027@item --allow-collisions
3028Permite colisiones de paquetes en el nuevo perfil. ¡Úselo bajo su propio
3029riesgo!
3030
3031Por defecto, @command{guix package} informa como un error las
3032@dfn{colisiones} en el perfil. Las colisiones ocurren cuando dos o más
3033versiones diferentes o variantes de un paquete dado se han seleccionado para
3034el perfil.
3035
3036@item --bootstrap
3037Use el Guile usado para el lanzamiento para construir el perfil. Esta opción
3038es util únicamente a las desarrolladoras de la distribución.
3039
3040@end table
3041
3042Además de estas acciones, @command{guix package} acepta las siguientes
3043opciones para consultar el estado actual de un perfil, o la disponibilidad
3044de paquetes:
3045
3046@table @option
3047
3048@item --search=@var{regexp}
3049@itemx -s @var{regexp}
3050@cindex buscar paquetes
3051Enumera los paquetes disponibles cuyo nombre, sinopsis o descripción
3052corresponde con @var{regexp} (sin tener en cuenta la capitalización),
3053ordenados por relevancia. Imprime todos los metadatos de los paquetes
3054coincidentes en formato @code{recutils} (@pxref{Top, GNU recutils
3055databases,, recutils, GNU recutils manual}).
3056
3057Esto permite extraer campos específicos usando la orden @command{recsel},
3058por ejemplo:
3059
3060@example
3061$ guix package -s malloc | recsel -p name,version,relevance
3062name: jemalloc
3063version: 4.5.0
3064relevance: 6
3065
3066name: glibc
3067version: 2.25
3068relevance: 1
3069
3070name: libgc
3071version: 7.6.0
3072relevance: 1
3073@end example
3074
3075De manera similar, para mostrar el nombre de todos los paquetes disponibles
3076bajo los términos de la GNU@tie{}LGPL versión 3:
3077
3078@example
3079$ guix package -s "" | recsel -p name -e 'license ~ "LGPL 3"'
3080name: elfutils
3081
3082name: gmp
3083@dots{}
3084@end example
3085
3086Es también posible refinar los resultados de búsqueda usando varias opciones
3087@code{-s}. Por ejemplo, la siguiente orden devuelve un lista de juegos de
3088mesa (board en inglés):
3089
3090@example
3091$ guix package -s '\<board\>' -s game | recsel -p name
3092name: gnubg
3093@dots{}
3094@end example
3095
3096Si omitimos @code{-s game}, también obtendríamos paquetes de software que
3097tengan que ver con placas de circuitos impresos ("circuit board" en inglés);
3098borrar los signos mayor y menor alrededor de @code{board} añadiría paquetes
3099que tienen que ver con teclados (keyboard en inglés).
3100
3101Y ahora para un ejemplo más elaborado. La siguiente orden busca bibliotecas
3102criptográficas, descarta bibliotecas Haskell, Perl, Python y Ruby, e imprime
3103el nombre y la sinopsis de los paquetes resultantes:
3104
3105@example
3106$ guix package -s crypto -s library | \
3107 recsel -e '! (name ~ "^(ghc|perl|python|ruby)")' -p name,synopsis
3108@end example
3109
3110@noindent
3111@xref{Selection Expressions,,, recutils, GNU recutils manual}, para más
3112información en @dfn{expresiones de selección} para @code{recsel -e}.
3113
3114@item --show=@var{paquete}
3115Muestra los detalles del @var{paquete}, tomado de la lista disponible de
3116paquetes, en formato @code{recutils} (@pxref{Top, GNU recutils databases,,
3117recutils, GNU recutils manual}).
3118
3119@example
3120$ guix package --show=python | recsel -p name,version
3121name: python
3122version: 2.7.6
3123
3124name: python
3125version: 3.3.5
3126@end example
3127
3128Tambien puede especificar el nombre completo de un paquete para únicamente
3129obtener detalles sobre una versión específica:
3130@example
3131$ guix package --show=python@@3.4 | recsel -p name,version
3132name: python
3133version: 3.4.3
3134@end example
3135
3136
3137
3138@item --list-installed[=@var{regexp}]
3139@itemx -I [@var{regexp}]
3140Enumera los paquetes actualmente instalados en el perfil especificado, con
3141los últimos paquetes instalados mostrados al final. Cuando se especifica
3142@var{regexp}, enumera únicamente los paquetes instalados cuyos nombres son
3143aceptados por @var{regexp}.
3144
3145Por cada paquete instalado, imprime los siguientes elementos, separados por
3146tabuladores: el nombre del paquete, la cadena de versión, la parte del
3147paquete que está instalada (por ejemplo, @code{out} para la salida
3148predeterminada, @code{include} para sus cabeceras, etc.), y la ruta de este
3149paquete en el almacén.
3150
3151@item --list-available[=@var{regexp}]
3152@itemx -A [@var{regexp}]
3153Enumera los paquetes disponibles actualmente en la distribución para este
3154sistema (@pxref{Distribución GNU}). Cuando se especifica @var{regexp},
3155enumera únicamente paquetes instalados cuyo nombre coincide con
3156@var{regexp}.
3157
3158Por cada paquete, imprime los siguientes elementos separados por
3159tabuladores: su nombre, su cadena de versión, las partes del paquete
3160(@pxref{Paquetes con múltiples salidas}) y la dirección de las fuentes de su
3161definición.
3162
3163@item --list-generations[=@var{patrón}]
3164@itemx -l [@var{patrón}]
3165@cindex generaciones
3166Devuelve una lista de generaciones junto a sus fechas de creación; para cada
3167generación, muestra los paquetes instalados, con los paquetes instalados más
3168recientemente mostrados los últimos. Fíjese que la generación cero nunca se
3169muestra.
3170
3171Por cada paquete instalado, imprime los siguientes elementos, separados por
3172tabuladores: el nombre de un paquete, su cadena de versión, la parte del
3173paquete que está instalada (@pxref{Paquetes con múltiples salidas}), y la
3174ruta de este paquete en el almacén.
3175
3176Cuando se usa @var{patrón}, la orden devuelve únicamente las generaciones
3177que se ajustan al patrón. Patrones válidos incluyen:
3178
3179@itemize
3180@item @emph{Enteros y enteros separados por comas}. Ambos patrones denotan
3181números de generación. Por ejemplo, @code{--list-generations=1} devuelve la
3182primera.
3183
3184Y @code{--list-generations=1,8,2} devuelve las tres generaciones en el orden
3185especificado. No se permiten ni espacios ni una coma al final.
3186
3187@item @emph{Rangos}. @code{--list-generations=2..9} imprime
3188las generaciones especificadas y todas las intermedias. Fíjese que el inicio
3189de un rango debe ser menor a su fin.
3190
3191También es posible omitir el destino final. Por ejemplo,
3192@code{--list-generations=2..} devuelve todas las generaciones empezando por
3193la segunda.
3194
3195@item @emph{Duraciones}. Puede también obtener los últimos @emph{N}@tie{}días, semanas,
3196o meses pasando un entero junto a la primera letra de la duración. Por
3197ejemplo, @code{--list-generations=20d} enumera las generaciones que tienen
3198hasta 20 días de antigüedad.
3199@end itemize
3200
3201@item --delete-generations[=@var{patrón}]
3202@itemx -d [@var{patrón}]
3203Cuando se omite @var{patrón}, borra todas las generaciones excepto la
3204actual.
3205
3206Esta orden acepta los mismos patrones que
3207@option{--list-generations}. Cuando se especifica un @var{patrón}, borra las
3208generaciones coincidentes. Cuando el @var{patrón} especifica una duración,
3209las generaciones @emph{más antiguas} que la duración especificada son las
3210borradas. Por ejemplo, @code{--delete-generations=1m} borra las generaciones
3211de más de un mes de antigüedad.
3212
3213Si la generación actual entra en el patrón, @emph{no} es borrada. Tampoco la
3214generación cero es borrada nunca.
3215
3216Fíjese que borrar generaciones previene volver atrás a
3217ellas. Consecuentemente esta orden debe ser usada con cuidado.
3218
3219@end table
3220
3221Finalmente, ya que @command{guix package} puede lanzar procesos de
3222construcción en realidad, acepta todas las opciones comunes de construcción
3223(@pxref{Opciones comunes de construcción}). También acepta opciones de transformación de
3224paquetes, como @option{--with-source} (@pxref{Opciones de transformación de paquetes}). No obstante, fíjese que las transformaciones del paquete se
3225pierden al actualizar; para preservar las transformaciones entre
3226actualizaciones, debe definir su propia variante del paquete en un módulo
3227Guile y añadirlo a @code{GUIX_PACKAGE_PATH} (@pxref{Definición de paquetes}).
3228
3229@node Sustituciones
3230@section Sustituciones
3231
3232@cindex sustituciones
3233@cindex binarios pre-construidos
3234Guix permite despliegues transparentes de fuentes/binarios, lo que significa
3235que puede tanto construir cosas localmente, como descargar elementos
3236preconstruidos de un servidor, o ambas. Llamamos a esos elementos
3237preconstruidos @dfn{sustituciones}---son sustituciones de los resultados de
3238construcciones locales. En muchos casos, descargar una sustitución es mucho
3239más rápido que construirla localmente.
3240
3241Las sustituciones pueden ser cualquier cosa que resulte de una construcción
3242de una derivación (@pxref{Derivaciones}). Por supuesto, en el caso común, son
3243paquetes binarios preconstruidos, pero los archivos de fuentes, por ejemplo,
3244que también resultan de construcciones de derivaciones, pueden estar
3245disponibles como sustituciones.
3246
3247@menu
3248* Servidor oficial de sustituciones.:: Una fuente particular de
3249 sustituciones.
3250* Autorización de servidores de sustituciones:: Cómo habilitar o
3251 deshabilitar
3252 sustituciones.
3253* Verificación de sustituciones:: Cómo verifica las sustituciones Guix.
3254* Configuración de la pasarela.:: Cómo obtener sustituciones a través de
3255 una pasarela.
3256* Fallos en las sustituciones:: Qué pasa cuando una sustitución falla.
3257* Sobre la confianza en binarios:: ¿Cómo puede usted confiar en esa masa
3258 informe de datos binarios?
3259@end menu
3260
3261@node Servidor oficial de sustituciones.
3262@subsection Servidor oficial de sustituciones.
3263
3264@cindex hydra
3265@cindex granja de construcción
3266El servidor @code{@value{SUBSTITUTE-SERVER}} es una fachada a una granja de
3267construcción oficial que construye paquetes de Guix continuamente para
3268algunas arquitecturas, y los pone disponibles como sustituciones. Esta es la
3269fuente predeterminada de sustituciones; puede ser forzada a cambiar pasando
3270la opción @option{--substitute-urls} bien a @command{guix-daemon}
3271(@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}}) o
3272bien a herramientas cliente como @command{guix package}
3273(@pxref{client-substitute-urls,, client @option{--substitute-urls} option}).
3274
3275Las URLs de sustituciones pueden ser tanto HTTP como HTTPS. Se recomienda
3276HTTPS porque las comunicaciones están cifradas; de modo contrario, usar HTTP
3277hace visibles todas las comunicaciones para alguien que las intercepte,
3278quien puede usar la información obtenida para determinar, por ejemplo, si su
3279sistema tiene vulnerabilidades de seguridad sin parchear.
3280
3281Las sustituciones de la granja de construcción oficial están habilitadas por
3282defecto cuando se usa la Distribución de sistema Guix (@pxref{Distribución GNU}). No obstante, están deshabilitadas por defecto cuando se usa
3283Guix en una distribución anfitriona, a menos que las haya habilitado
3284explícitamente via uno de los pasos recomendados de instalación
3285(@pxref{Instalación}). Los siguientes párrafos describen como habilitar o
3286deshabilitar sustituciones para la granja oficial de construcción; el mismo
3287procedimiento puede usarse para habilitar sustituciones de cualquier otro
3288servidor que las proporcione.
3289
3290@node Autorización de servidores de sustituciones
3291@subsection Autorización de servidores de sustituciones
3292
3293@cindex seguridad
3294@cindex sustituciones, autorización de las mismas
3295@cindex listas de control de acceso (ACL), para sustituciones
3296@cindex ACL (listas de control de acceso), para sustituciones
3297Para permitir a Guix descargar sustituciones de
3298@code{@value{SUBSTITUTE-SERVER}} o un espejo suyo, debe añadir su clave
3299pública a la lista de control de acceso (ACL) de las importaciones de
3300archivos, mediante el uso de la orden @command{guix archive}
3301(@pxref{Invocación de guix archive}). Hacerlo implica que confía que
3302@code{@value{SUBSTITUTE-SERVER}} no ha sido comprometido y proporciona
3303sustituciones genuinas.
3304
3305La clave pública para @code{@value{SUBSTITUTE-SERVER}} se instala junto a
3306Guix, en @code{@var{prefijo}/share/guix/@value{SUBSTITUTE-SERVER}.pub},
3307donde @var{prefijo} es el prefij de instalación de Guix. Si ha instalado
3308Guix desde las fuentes, debe asegurarse de que comprobó la firma GPG de
3309@file{guix-@value{VERSION}.tar.gz}, el cual contiene el fichero de clave
3310pública. Una vez hecho, puede ejecutar algo así:
3311
3312@example
3313# guix archive --authorize < @var{prefijo}/share/guix/@value{SUBSTITUTE-SERVER}.pub
3314@end example
3315
3316@quotation Nota
3317De manera similar, el fichero @file{hydra.gnu.org.pub} contiene la clave
3318pública para una granja de construcción independiente que también es parte
3319del proyecto, la cual se puede encontrar en
3320@indicateurl{https://mirror.hydra.gnu.org}.
3321@end quotation
3322
3323Una vez esté autorizada, la salida de una orden como @code{guix build}
3324debería cambiar de algo como:
3325
3326@example
3327$ guix build emacs --dry-run
3328The following derivations would be built:
3329 /gnu/store/yr7bnx8xwcayd6j95r2clmkdl1qh688w-emacs-24.3.drv
3330 /gnu/store/x8qsh1hlhgjx6cwsjyvybnfv2i37z23w-dbus-1.6.4.tar.gz.drv
3331 /gnu/store/1ixwp12fl950d15h2cj11c73733jay0z-alsa-lib-1.0.27.1.tar.bz2.drv
3332 /gnu/store/nlma1pw0p603fpfiqy7kn4zm105r5dmw-util-linux-2.21.drv
3333@dots{}
3334@end example
3335
3336@noindent
3337a algo así:
3338
3339@example
3340$ guix build emacs --dry-run
3341112.3 MB would be downloaded:
3342 /gnu/store/pk3n22lbq6ydamyymqkkz7i69wiwjiwi-emacs-24.3
3343 /gnu/store/2ygn4ncnhrpr61rssa6z0d9x22si0va3-libjpeg-8d
3344 /gnu/store/71yz6lgx4dazma9dwn2mcjxaah9w77jq-cairo-1.12.16
3345 /gnu/store/7zdhgp0n1518lvfn8mb96sxqfmvqrl7v-libxrender-0.9.7
3346@dots{}
3347@end example
3348
3349@noindent
3350Esto indica que las sustituciones de @code{@value{SUBSTITUTE-SERVER}} son
3351usables y serán descargadas, cuando sea posible, para construcciones
3352futuras.
3353
3354@cindex sustituciones, cómo deshabilitarlas
3355El mecanismo de sustituciones puede ser deshabilitado globalmente ejecutando
3356@code{guix-daemon} con @code{--no-subsitutes} (@pxref{Invocación de guix-daemon}). También puede ser deshabilitado temporalmente pasando la
3357opción @code{--no-substitutes} a @command{guix package}, @command{guix
3358build} y otras herramientas de línea de órdenes.
3359
3360@node Verificación de sustituciones
3361@subsection Verificación de sustituciones
3362
3363@cindex firmas digitales
3364Guix detecta y emite errores cuando se intenta usar una sustitución que ha
3365sido adulterado. Del mismo modo, ignora las sustituciones que no están
3366firmadas, o que no están firmadas por una de las firmas enumeradas en la
3367ACL.
3368
3369No obstante hay una excepción: si un servidor no autorizado proporciona
3370sustituciones que son @emph{idénticas bit-a-bit} a aquellas proporcionadas
3371por un servidor autorizado, entonces el servidor no autorizado puede ser
3372usado para descargas. Por ejemplo, asumiendo que hemos seleccionado dos
3373servidores de sustituciones con esta opción:
3374
3375@example
3376--substitute-urls="https://a.example.org https://b.example.org"
3377@end example
3378
3379@noindent
3380@cindex construcciones reproducibles
3381Si la ACL contiene únicamente la clave para @code{b.example.org}, y si
3382@code{a.example.org} resulta que proporciona @emph{exactamente las mismas}
3383sustituciones, Guix descargará sustituciones de @code{a.example.org} porque
3384viene primero en la lista y puede ser considerado un espejo de
3385@code{b.example.org}. En la práctica, máquinas de construcción
3386independientes producen habitualmente los mismos binarios, gracias a las
3387construcciones reproducibles bit-a-bit (véase a continuación).
3388
3389Cuando se usa HTTPS, el certificado X.509 del servidor @emph{no} se valida
3390(en otras palabras, el servidor no está verificado), lo contrario del
3391comportamiento habitual de los navegadores Web. Esto es debido a que Guix
3392verifica la información misma de las sustituciones, como se ha explicado
3393anteriormente, lo cual nos concierne (mientras que los certificados X.509
3394tratan de verificar las conexiones entre nombres de dominio y claves
3395públicas).
3396
3397@node Configuración de la pasarela.
3398@subsection Configuración de la pasarela.
3399
3400@vindex http_proxy
3401Las sustituciones se descargan por HTTP o HTTPS. La variable de entorno
3402@code{http_proxy} puede ser incluida en el entorno de @command{guix-daemon}
3403y la respeta para las descargas de sustituciones. Fíjese que el valor de
3404@code{http_proxy} en el entorno en que @command{guix build}, @command{guix
3405package} y otras aplicaciones cliente se ejecuten @emph{no tiene ningún
3406efecto}.
3407
3408@node Fallos en las sustituciones
3409@subsection Fallos en las sustituciones
3410
3411Incluso cuando una sustitución de una derivación está disponible, a veces el
3412intento de sustitución puede fallar. Esto puede suceder por varias razones:
3413el servidor de sustituciones puede estar desconectado, la sustitución puede
3414haber sido borrada, la conexión puede interrumpirse, etc.
3415
3416Cuando las sustituciones están activadas y una sustitución para una
3417derivación está disponible, pero el intento de sustitución falla, Guix
3418intentará construir la derivación localmente dependiendo si se proporcionó
3419la opción @code{--fallback} (@pxref{fallback-option,, common build option
3420@code{--fallback}}). Específicamente, si no se pasó @code{--fallback}, no se
3421realizarán construcciones locales, y la derivación se considera se considera
3422fallida. No obstante, si se pasó @code{--fallback}, Guix intentará construir
3423la derivación localmente, y el éxito o fracaso de la derivación depende del
3424éxito o fracaso de la construcción local. Fíjese que cuando las
3425sustituciones están deshabilitadas o no hay sustituciones disponibles para
3426la derivación en cuestión, la construcción local se realizará
3427@emph{siempre}, independientemente de si se pasó la opción
3428@code{--fallback}.
3429
3430Para hacerse una idea de cuantas sustituciones hay disponibles en este
3431momento, puede intentar ejecutar la orden @command{guix weather}
3432(@pxref{Invocación de guix weather}). Esta orden proporciona estadísticas de las
3433sustituciones proporcionadas por un servidor.
3434
3435@node Sobre la confianza en binarios
3436@subsection Sobre la confianza en binarios
3437
3438@cindex confianza, de binarios pre-construidos
3439Hoy en día, el control individual sobre nuestra propia computación está a
3440merced de instituciones, empresas y grupos con suficiente poder y
3441determinación para subvertir la infraestructura de computación y explotar
3442sus vulnerabilidades. Mientras que usar las sustituciones de
3443@code{@value{SUBSTITUTE-SERVER}} puede ser conveniente, recomendamos a las
3444usuarias también construir sus paquetes, o incluso mantener su propia granja
3445de construcción, de modo que @code{@value{SUBSTITUTE-SERVER}} sea un
3446objetivo menos interesante. Una manera de ayudar es publicando el software
3447que construya usando @command{guix publish} de modo que otras tengan otro
3448servidor más como opción para descargar sustituciones (@pxref{Invocación de guix publish}).
3449
3450Guix tiene los cimientos para maximizar la reproducibilidad de las
3451construcciones (@pxref{Características}). En la mayor parte de los casos,
3452construcciones independientes de un paquete o derivación dada deben emitir
3453resultados idénticos bit a bit. Por tanto, a través de un conjunto diverso
3454de construcciones independientes de paquetes, podemos reforzar la integridad
3455de nuestros sistemas. La orden @command{guix challenge} intenta ayudar a las
3456usuarias en comprobar servidores de sustituciones, y asiste a las
3457desarrolladoras encontrando construcciones no deterministas de paquetes
3458(@pxref{Invocación de guix challenge}). Similarmente, la opción @option{--check}
3459de @command{guix build} permite a las usuarias si las sustituciones
3460previamente instaladas son genuinas reconstruyendolas localmente
3461(@pxref{build-check, @command{guix build --check}}).
3462
3463En el futuro, queremos que Guix permita la publicación y obtención de
3464binarios hacia/desde otras usuarias, entre pares (P2P). En caso de
3465interesarle hablar sobre este proyecto, unase a nosotras en
3466@email{guix-devel@@gnu.org}.
3467
3468@node Paquetes con múltiples salidas
3469@section Paquetes con múltiples salidas
3470
3471@cindex paquetes de salida múltiple
3472@cindex salidas del paquete
3473@cindex salidas
3474
3475Habitualmente, los paquetes definidos en Guix tienen una @dfn{salida}
3476única---es decir, el paquete de fuentes proporcionará exactamente un
3477directorio en el almacén. Cuando se ejecuta @command{guix package -i glibc},
3478se instala la salida predeterminada del paquete GNU libc; la salida
3479predeterminada se llama @code{out}, pero su nombre puede omitirse como se
3480mostró en esta orden. En este caso particular, la salida predeterminada de
3481@code{glibc} contiene todos ficheros de cabecera C, bibliotecas dinámicas,
3482bibliotecas estáticas, documentación Info y otros ficheros auxiliares.
3483
3484A veces es más apropiado separar varios tipos de ficheros producidos por un
3485paquete único de fuentes en salidas separadas. Por ejemplo, la biblioteca C
3486GLib (usada por GTK+ y paquetes relacionados) instala más de 20 MiB de
3487documentación de referencia como páginas HTML. Para ahorrar espacio para
3488usuarias que no la necesiten, la documentación va a una salida separada,
3489llamada @code{doc}. Para instalar la salida principal de GLib, que contiene
3490todo menos la documentación, se debe ejecutar:
3491
3492@example
3493guix package -i glib
3494@end example
3495
3496@cindex documentación
3497La orden que instala su documentación es:
3498
3499@example
3500guix package -i glib:doc
3501@end example
3502
3503Algunos paquetes instalan programas con diferentes ``huellas de
3504dependencias''. Por ejemplo, el paquete WordNet instala tanto herramientas
3505de línea de órdenes como interfaces gráficas de usuaria (IGU). Las primeras
3506dependen únicamente de la biblioteca de C, mientras que las últimas dependen
3507en Tcl/Tk y las bibliotecas de X subyacentes. En este caso, dejamos las
3508herramientas de línea de órdenes en la salida predeterminada, mientras que
3509las IGU están en una salida separada. Esto permite a las usuarias que no
3510necesitan una IGU ahorrar espacio. La orden @command{guix size} puede ayudar
3511a exponer estas situaciones (@pxref{Invocación de guix size}). @command{guix
3512graph} también puede ser útil (@pxref{Invocación de guix graph}).
3513
3514Hay varios de estos paquetes con salida múltiple en la distribución
3515GNU. Otros nombres de salida convencionales incluyen @code{lib} para
3516bibliotecas y posiblemente ficheros de cabecera, @code{bin} para programas
3517independientes y @code{debug} para información de depuración
3518(@pxref{Instalación de ficheros de depuración}). La salida de los paquetes se enumera
3519en la tercera columna del resultado de @command{guix package
3520--list-available} (@pxref{Invocación de guix package}).
3521
3522
3523@node Invocación de guix gc
3524@section Invocación de @command{guix gc}
3525
3526@cindex recolector de basura
3527@cindex espacio en disco
3528Los paquetes instalados, pero no usados, pueden ser @dfn{recolectados}. La
3529orden @command{guix gc} permite a las usuarias ejecutar explícitamente el
3530recolector de basura para reclamar espacio del directorio
3531@file{/gnu/store}---¡borrar ficheros o directorios manualmente puede dañar
3532el almacén sin reparación posible!
3533
3534@cindex GC, raíces del recolector de basura
3535@cindex raíces del recolector de basura
3536El recolector de basura tiene un conjunto de @dfn{raíces} conocidas:
3537cualquier fichero en @file{/gnu/store} alcanzable desde una raíz se
3538considera @dfn{vivo} y no puede ser borrado; cualquier otro fichero se
3539considera @dfn{muerto} y puede ser borrado. El conjunto de raíces del
3540recolector de basura (``raíces del GC'' para abreviar) incluye los perfiles
3541predeterminados de las usuarias; por defecto los enlaces bajo
3542@file{/var/guix/gcroots} representan dichas raíces. Por ejemplo, nuevas
3543raíces del GC pueden añadirse con @command{guix build --root}
3544(@pxref{Invocación de guix build}). La orden @command{guix gc --list-roots} las
3545enumera.
3546
3547Antes de ejecutar @code{guix gc --collect-garbage} para liberar espacio,
3548habitualmente es útil borrar generaciones antiguas de los perfiles de
3549usuaria; de ese modo, las construcciones antiguas de paquetes referenciadas
3550por dichas generaciones puede ser reclamada. Esto se consigue ejecutando
3551@code{guix package --delete-generations} (@pxref{Invocación de guix package}).
3552
3553Nuestra recomendación es ejecutar una recolección de basura periódicamente,
3554o cuando tenga poco espacio en el disco. Por ejemplo, para garantizar que al
3555menos 5@tie{}GB están disponibles en su disco, simplemente ejecute:
3556
3557@example
3558guix gc -F 5G
3559@end example
3560
3561Es completamente seguro ejecutarla como un trabajo periódico no-interactivo
3562(@pxref{Ejecución de tareas programadas}, para la configuración de un trabajo de ese
3563tipo). La ejecución de @command{guix gc} sin ningún parámetro recolectará
3564tanta basura como se pueda, pero eso es no es normalmente conveniente: puede
3565encontrarse teniendo que reconstruir o volviendo a bajar software que está
3566``muerto'' desde el punto de vista del recolector pero que es necesario para
3567construir otras piezas de software---por ejemplo, la cadena de herramientas
3568de compilación.
3569
3570La orden @command{guix gc} tiene tres modos de operación: puede ser usada
3571para recolectar ficheros muertos (predeterminado), para borrar ficheros
3572específicos (la opción @code{--delete}), para mostrar información sobre la
3573recolección de basura o para consultas más avanzadas. Las opciones de
3574recolección de basura son las siguientes:
3575
3576@table @code
3577@item --collect-garbage[=@var{min}]
3578@itemx -C [@var{min}]
3579Recolecta basura---es decir, ficheros no alcanzables de @file{/gnu/store} y
3580subdirectorios. Esta operación es la predeterminada cuando no se especifican
3581opciones.
3582
3583Cuando se proporciona @var{min}, para una vez que @var{min} bytes han sido
3584recolectados. @var{min} puede ser un número de bytes, o puede incluir una
3585unidad como sufijo, como @code{MiB} para mebibytes y @code{GB} para
3586gigabytes (@pxref{Block size, size specifications,, coreutils, GNU
3587Coreutils}).
3588
3589Cuando se omite @var{min}, recolecta toda la basura.
3590
3591@item --free-space=@var{libre}
3592@itemx -F @var{libre}
3593Recolecta basura hasta que haya espacio @var{libre} bajo @file{/gnu/store},
3594si es posible: @var{libre} denota espacio de almacenamiento, por ejemplo
3595@code{500MiB}, como se ha descrito previamente.
3596
3597Cuando @var{libre} o más está ya disponible en @file{/gnu/store}, no hace
3598nada y sale inmediatamente.
3599
3600@item --delete-generations[=@var{duración}]
3601@itemx -d [@var{duración}]
3602Antes de comenzar el proceso de recolección de basura, borra todas las
3603generaciones anteriores a @var{duración}, para todos los perfiles de la
3604usuaria; cuando se ejecuta como root esto aplica a los perfiles de
3605@emph{todas las usuarias}.
3606
3607Por ejemplo, esta orden borra todas las generaciones de todos sus perfiles
3608que tengan más de 2 meses de antigüedad (excepto generaciones que sean las
3609actuales), y una vez hecho procede a liberar espacio hasta que al menos 10
3610GiB estén disponibles:
3611
3612@example
3613guix gc -d 2m -F 10G
3614@end example
3615
3616@item --delete
3617@itemx -D
3618Intenta borrar todos los ficheros del almacén y directorios especificados
3619como parámetros. Esto falla si alguno de los ficheros no están en el
3620almacén, o todavía están vivos.
3621
3622@item --list-failures
3623Enumera los elementos del almacén correspondientes a construcciones fallidas
3624existentes en la caché.
3625
3626Esto no muestra nada a menos que el daemon se haya ejecutado pasando
3627@option{--cache-failures} (@pxref{Invocación de guix-daemon,
3628@option{--cache-failures}}).
3629
3630@item --list-roots
3631Enumera las raices del recolector de basura poseidas por la usuaria; cuando
3632se ejecuta como root, enumera @emph{todas} las raices del recolector de
3633basura.
3634
3635@item --clear-failures
3636Borra los elementos especificados del almacén de la caché de construcciones
3637fallidas.
3638
3639De nuevo, esta opción únicamente tiene sentido cuando el daemon se inicia
3640con @option{--cache-failures}. De otro modo, no hace nada.
3641
3642@item --list-dead
3643Muestra la lista de ficheros y directorios muertos todavía presentes en el
3644almacén---es decir, ficheros y directorios que ya no se pueden alcanzar
3645desde ninguna raíz.
3646
3647@item --list-live
3648Muestra la lista de ficheros y directorios del almacén vivos.
3649
3650@end table
3651
3652Además, las referencias entre los ficheros del almacén pueden ser
3653consultadas:
3654
3655@table @code
3656
3657@item --references
3658@itemx --referrers
3659@cindex dependencias de un paquete
3660Enumera las referencias (o, respectivamente, los referentes) de los ficheros
3661del almacén pasados como parámetros.
3662
3663@item --requisites
3664@itemx -R
3665@cindex clausura
3666Enumera los requistos los ficheros del almacén pasados como parámetros. Los
3667requisitos incluyen los mismos ficheros del almacén, sus referencias, las
3668referencias de estas, recursivamente. En otras palabras, la lista devuelta
3669es la @dfn{clausura transitiva} de los ficheros del almacén.
3670
3671@xref{Invocación de guix size}, para una herramienta que perfila el tamaño de la
3672clausura de un elemento. @xref{Invocación de guix graph}, para una herramienta de
3673visualización del grafo de referencias.
3674
3675@item --derivers
3676@cindex derivación
3677Devuelve la/s derivación/es que conducen a los elementos del almacén dados
3678(@pxref{Derivaciones}).
3679
3680Por ejemplo, esta orden:
3681
3682@example
3683guix gc --derivers `guix package -I ^emacs$ | cut -f4`
3684@end example
3685
3686@noindent
3687devuelve el/los fichero/s @file{.drv} que conducen al paquete @code{emacs}
3688instalado en su perfil.
3689
3690Fíjese que puede haber cero ficheros @file{.drv} encontrados, por ejemplo
3691porque estos ficheros han sido recolectados. Puede haber más de un fichero
3692@file{.drv} encontrado debido a derivaciones de salida fija.
3693@end table
3694
3695Por último, las siguientes opciones le permiten comprobar la integridad del
3696almacén y controlar el uso del disco.
3697
3698@table @option
3699
3700@item --verify[=@var{opciones}]
3701@cindex integridad, del almacén
3702@cindex comprobación de integridad
3703Verifica la integridad del almacén.
3704
3705Por defecto, comprueba que todos los elementos del almacén marcados como
3706válidos en la base de datos del daemon realmente existen en
3707@file{/gnu/store}.
3708
3709Cuando se proporcionan, @var{opciones} debe ser una lista separada por comas
3710que contenga uno o más valores @code{contents} and @code{repair}.
3711
3712Cuando se usa @option{--verify=contents}, el daemon calcula el hash del
3713contenido de cada elemento del almacén y lo compara contra el hash de su
3714base de datos. Las incongruencias se muestran como corrupciones de
3715datos. Debido a que recorre @emph{todos los ficheros del almacén}, esta
3716orden puede tomar mucho tiempo, especialmente en sistemas con una unidad de
3717disco lenta.
3718
3719@cindex reparar el almacén
3720@cindex corrupción, recuperarse de
3721El uso de @option{--verify=repair} o @option{--verify=contents,repair} hace
3722que el daemon intente reparar elementos corruptos del almacén obteniendo
3723sustituciones para dichos elementos (@pxref{Sustituciones}). Debido a que la
3724reparación no es atómica, y por tanto potencialmente peligrosa, está
3725disponible únicamente a la administradora del sistema. Una alternativa
3726ligera, cuando sabe exactamente qué elementos del almacén están corruptos,
3727es @command{guix build --repair} (@pxref{Invocación de guix build}).
3728
3729@item --optimize
3730@cindex deduplicación
3731Optimiza el almacén sustituyendo ficheros idénticos por enlaces duros---esto
3732es la @dfn{deduplicación}.
3733
3734El daemon realiza la deduplicación después de cada construcción
3735satisfactoria o importación de archivos, a menos que se iniciase con
3736@code{--disable-deduplication} (@pxref{Invocación de guix-daemon,
3737@code{--disable-deduplication}}). Por tanto, esta opción es útil
3738primariamente cuando el daemon se estaba ejecutando con
3739@code{--disable-deduplication}.
3740
3741@end table
3742
3743@node Invocación de guix pull
3744@section Invocación de @command{guix pull}
3745
3746@cindex actualizar Guix
3747@cindex actualizar la versión de Guix
3748@cindex @command{guix pull}
3749@cindex pull
3750Los paquetes se instalan o actualizan con la última versión disponible en la
3751distribución disponible actualmente en su máquina local. Para actualizar
3752dicha distribución, junto a las herramientas de Guix, debe ejecutar
3753@command{guix pull}: esta orden descarga el último código fuente de Guix y
3754descripciones de paquetes, y lo despliega. El código fuente se descarga de
3755un repositorio @uref{https://git-scm.com, Git}, por defecto el repositorio
3756oficial de GNU@tie{}Guix, lo que no obstante puede ser personalizado.
3757
3758Una vez completada, @command{guix package} usará paquetes y versiones de
3759paquetes de esta copia recién obtenida de Guix. No solo eso, sino que todas
3760las órdenes de Guix y los módulos Scheme también se tomarán de la última
3761versión. Nuevas sub-órdenes @command{guix} incorporadas por la actualización
3762también estarán disponibles.
3763
3764Cualquier usuaria puede actualizar su copia de Guix usando @command{guix
3765pull}, y el efecto está limitado a la usuaria que ejecutó @command{guix
3766pull}. Por ejemplo, cuando la usuaria @code{root} ejecuta @command{guix
3767pull}, esto no tiene ningún efecto en la versión del Guix que la usuaria
3768@code{alicia} ve, y viceversa.
3769
3770El resultado de ejecutar @command{guix pull} es un @dfn{perfil} disponible
3771bajo @file{~/.config/guix/current} conteniendo el último Guix. Por tanto,
3772asegurese de añadirlo al inicio de sus rutas de búsqueda de modo que use la
3773última versión, de modo similar para el manual Info(@pxref{Documentación}).
3774
3775@example
3776export PATH="$HOME/.config/guix/current/bin:$PATH"
3777export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH"
3778@end example
3779
3780Las opciones @code{--list-generations} o @code{-l} enumeran las generaciones
3781pasadas producidas por @command{guix pull}, junto a detalles de su
3782procedencia:
3783
3784@example
3785$ guix pull -l
3786Generation 1 Jun 10 2018 00:18:18
3787 guix 65956ad
3788 repository URL: https://git.savannah.gnu.org/git/guix.git
3789 branch: origin/master
3790 commit: 65956ad3526ba09e1f7a40722c96c6ef7c0936fe
3791
3792Generation 2 Jun 11 2018 11:02:49
3793 guix e0cc7f6
3794 repository URL: https://git.savannah.gnu.org/git/guix.git
3795 branch: origin/master
3796 commit: e0cc7f669bec22c37481dd03a7941c7d11a64f1d
3797 2 new packages: keepalived, libnfnetlink
3798 6 packages upgraded: emacs-nix-mode@@2.0.4,
3799 guile2.0-guix@@0.14.0-12.77a1aac, guix@@0.14.0-12.77a1aac,
3800 heimdal@@7.5.0, milkytracker@@1.02.00, nix@@2.0.4
3801
3802Generation 3 Jun 13 2018 23:31:07 (current)
3803 guix 844cc1c
3804 repository URL: https://git.savannah.gnu.org/git/guix.git
3805 branch: origin/master
3806 commit: 844cc1c8f394f03b404c5bb3aee086922373490c
3807 28 new packages: emacs-helm-ls-git, emacs-helm-mu, @dots{}
3808 69 packages upgraded: borg@@1.1.6, cheese@@3.28.0, @dots{}
3809@end example
3810
3811@ref{Invocación de guix describe, @command{guix describe}}, para otras formas de
3812describir el estado actual de Guix.
3813
3814El perfil @code{~/.config/guix/current} funciona como cualquier otro perfil
3815creado por @command{guix package} (@pxref{Invocación de guix package}). Esto es,
3816puede enumerar generaciones, volver a una generación previa---es decir, el
3817Guix anterior---y más:
3818
3819@example
3820$ guix package -p ~/.config/guix/current --roll-back
3821switched from generation 3 to 2
3822$ guix package -p ~/.config/guix/current --delete-generations=1
3823deleting /var/guix/profiles/per-user/carlos/current-guix-1-link
3824@end example
3825
3826La orden @command{guix pull} se invoca habitualmente sin parámetros, pero
3827permite las siguientes opciones:
3828
3829@table @code
3830@item --url=@var{url}
3831@itemx --commit=@var{revisión}
3832@itemx --branch=@var{rama}
3833Download code for the @code{guix} channel from the specified @var{url}, at
3834the given @var{commit} (a valid Git commit ID represented as a hexadecimal
3835string), or @var{branch}.
3836
3837@cindex @file{channels.scm}, fichero de configuración
3838@cindex fichero de configuración de canales
3839Estas opciones se proporcionan por conveniencia, pero también puede
3840especificar su configuración en el fichero
3841@file{~/.config/guix/channels.scm} o usando la opción @option{--channels}
3842(vea más adelante).
3843
3844@item --channels=@var{fichero}
3845@itemx -C @var{fichero}
3846Lee la lista de canales de @var{fichero} en vez de
3847@file{~/.config/guix/channels.scm}. @var{fichero} debe contener código
3848Scheme que evalue a una lista de objetos channel. @xref{Canales}, para más
3849información.
3850
3851@item --news
3852@itemx -N
3853Display the list of packages added or upgraded since the previous
3854generation.
3855
3856This is the same information as displayed upon @command{guix pull}
3857completion, but without ellipses; it is also similar to the output of
3858@command{guix pull -l} for the last generation (see below).
3859
3860@item --list-generations[=@var{patrón}]
3861@itemx -l [@var{patrón}]
3862Enumera todas las generaciones de @file{~/.config/guix/current} o, si se
3863proporciona un @var{patrón}, el subconjunto de generaciones que correspondan
3864con el @var{patrón}. La sintaxis de @var{patrón} es la misma que @code{guix
3865package --list-generations} (@pxref{Invocación de guix package}).
3866
3867@ref{Invocación de guix describe}, para una forma de mostrar información sobre
3868únicamente la generación actual.
3869
3870@item --profile=@var{perfil}
3871@itemx -p @var{perfil}
3872Usa @var{perfil} en vez de @file{~/.config/guix/current}.
3873
3874@item --dry-run
3875@itemx -n
3876Muestra qué revisión/es del canal serían usadas y qué se construiría o
3877sustituiría, sin efectuar ninguna acción real.
3878
3879@item --system=@var{sistema}
3880@itemx -s @var{sistema}
3881Intenta construir paquetes para @var{sistema}---por ejemplo,
3882@code{x86_64-linux}---en vez del tipo de sistema de la máquina de
3883construcción.
3884
3885@item --verbose
3886Produce salida prolija, escribiendo los logs de construcción por la salida
3887de error estándar.
3888
3889@item --bootstrap
3890Use el Guile usado para el lanzamiento para construir el último Guix. Esta
3891opción es útil para las desarrolladoras de Guix únicamente.
3892@end table
3893
3894El mecanismo de @dfn{canales} le permite instruir a @command{guix pull} de
3895qué repositorio y rama obtener los datos, así como repositorios
3896@emph{adicionales} que contengan módulos de paquetes que deben ser
3897desplegados. @xref{Canales}, para más información.
3898
3899Además, @command{guix pull} acepta todas las opciones de construcción
3900comunes (@pxref{Opciones comunes de construcción}).
3901
3902@node Canales
3903@section Canales
3904
3905@cindex channels
3906@cindex @file{channels.scm}, fichero de configuración
3907@cindex fichero de configuración de canales
3908@cindex @command{guix pull}, fichero de configuración
3909@cindex configuración de @command{guix pull}
3910Guix y su colección de paquetes son actualizados ejecutando @command{guix
3911pull} (@pxref{Invocación de guix pull}). Por defecto @command{guix pull} descarga
3912y despliega el mismo Guix del repositorio oficial de GNU@tie{}Guix. Esto
3913puede ser personalizado definiendo @dfn{canales} en el fichero
3914@file{~/.config/guix/channels.scm}. Un canal especifica una URL y una rama
3915de un repositorio Git para ser desplegado, y @command{guix pull} puede ser
3916instruido para tomar los datos de uno o más canales. En otras palabras, los
3917canales se pueden usar para @emph{personalizar} y para @emph{extender} Guix,
3918como vemos a continuación.
3919
3920@subsection Uso de un canal de Guix personalizado
3921
3922El canal llamado @code{guix} especifica de donde el mismo Guix---sus
3923herramientas de línea de órdenes y su colección de paquetes---debe ser
3924descargado. Por ejemplo, suponga que quiere actualizar de su propia copia
3925del repositorio Guix en @code{example.org}, y específicamente la rama
3926@code{super-hacks}, para ello puede escribir en
3927@code{~/.config/guix/channels.scm} esta especificación:
3928
3929@lisp
3930;; Le dice a 'guix pull' que use mi propio repositorio.
3931(list (channel
3932 (name 'guix)
3933 (url "https://example.org/mi-guix.git")
3934 (branch "super-hacks")))
3935@end lisp
3936
3937@noindent
3938De aquí en adelante, @command{guix pull} obtendrá el código de la rama
3939@code{super-hacks} del repositorio en @code{example.org}.
3940
3941@subsection Especificación de canales adicionales
3942
3943@cindex extender la colección de paquetes (canales)
3944@cindex paquetes personales (canales)
3945@cindex canales, para paquetes personales
3946También puede especificar @emph{canales adicionales} de los que obtener
3947datos. Digamos que tiene un montón de variaciones personalizadas de paquetes
3948que piensa que no tiene mucho sentido contribuir al proyecto Guix, pero
3949quiere tener esos paquetes disponibles transparentemente en su línea de
3950órdenes. Primero escribiría módulos que contengan esas definiciones de
3951paquete (@pxref{Módulos de paquetes}), los mantendría en un repositorio Git, y
3952entonces usted y cualquier otra persona podría usarlos como un canal
3953adicional del que obtener paquetes. Limpio, ¿no?
3954
3955@c What follows stems from discussions at
3956@c <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=22629#134> as well as
3957@c earlier discussions on guix-devel@gnu.org.
3958@quotation Aviso
3959Antes de que, querida usuaria, grite---``¡Guau, esto es @emph{la
3960caña}!''---y publique su canal personal al mundo, nos gustaría compartir
3961algunas palabras de precaución:
3962
3963@itemize
3964@item
3965Antes de publicar un canal, por favor considere contribuir sus definiciones
3966de paquete al propio Guix (@pxref{Contribuir}). Guix como proyecto es
3967abierto a software libre de todo tipo, y los paquetes en el propio Guix
3968están disponibles para todas las usuarias de Guix y se benefician del
3969proceso de gestión de calidad del proyecto.
3970
3971@item
3972Cuando mantiene definiciones de paquete fuera de Guix, nosotras, las
3973desarrolladoras de Guix, consideramos que @emph{la carga de la
3974compatibilidad cae de su lado}. Recuerde que los módulos y definiciones de
3975paquetes son solo código Scheme que usa varias interfaces programáticas
3976(APIs). Queremos mantener la libertad de cambiar dichas interfaces para
3977seguir mejorando Guix, posiblemente en formas que pueden romper su
3978canal. Nunca cambiamos las interfaces gratuitamente, pero @emph{no} vamos
3979tampoco a congelar las interfaces.
3980
3981@item
3982Corolario: si está usando un canal externo y el canal se rompe, por favor
3983@emph{informe del problema a las autoras del canal}, no al proyecto Guix.
3984@end itemize
3985
3986¡Ha quedado advertida! Habiendo dicho esto, creemos que los canales externos
3987son una forma práctica de ejercitar su libertad para aumentar la colección
3988de paquetes de Guix y compartir su mejoras, que son pilares básicos del
3989@uref{https://www.gnu.org/philosophy/free-sw.html, software libre}. Por
3990favor, envíenos un correo a @email{guix-devel@@gnu.org} si quiere hablar
3991sobre esto.
3992@end quotation
3993
3994Para usar un canal, escriba en @code{~/.config/guix/channels.scm} para
3995instruir a @command{guix pull} para obtener datos de él @emph{además} de los
3996canales Guix predeterminados:
3997
3998@vindex %default-channels
3999@lisp
4000;; Añade mis paquetes personales a aquellos que Guix provee.
4001(cons (channel
4002 (name 'mis-paquetes-personales)
4003 (url "https://example.org/paquetes-personales.git"))
4004 %default-channels)
4005@end lisp
4006
4007@noindent
4008Fíjese que el fragmento previo es (¡como siempre!)@: código Scheme; usamos
4009@code{cons} para añadir un canal a la lista de canales a la que la variable
4010@code{%default-channels} hace referencia (@pxref{Pairs, @code{cons} and
4011lists,, guile, GNU Guile Reference Manual}). Con el fichero en este lugar,
4012@command{guix pull} no solo construye Guix sino también los módulos de
4013paquetes de su propio repositorio. El resultado en
4014@file{~/.config/guix/current} es la unión de Guix con sus propios módulos de
4015paquetes:
4016
4017@example
4018$ guix pull --list-generations
4019@dots{}
4020Generation 19 Aug 27 2018 16:20:48
4021 guix d894ab8
4022 repository URL: https://git.savannah.gnu.org/git/guix.git
4023 branch: master
4024 commit: d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300
4025 mis-paquetes-personales dd3df5e
4026 repository URL: https://example.org/paquetes-personales.git
4027 branch: master
4028 commit: dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb
4029 11 new packages: mi-gimp, mi-emacs-con-cosas, @dots{}
4030 4 packages upgraded: emacs-racket-mode@@0.0.2-2.1b78827, @dots{}
4031@end example
4032
4033@noindent
4034La salida de @command{guix pull} previa muestra que la generación@tie{}19
4035incluye tanto Guix como paquetes del canal
4036@code{mis-paquetes-personales}. Entre los paquetes nuevos y actualizados que
4037son enumerados, algunos como @code{mi-gimp} y @code{mi-emacs-con-cosas}
4038pueden venir de @code{mis-paquetes-personales}, mientras que otros vienen
4039del canal predeterminado de Guix.
4040
4041Para crear uncanal, cree un repositorio Git que contenga sus propios módulos
4042de paquetes y haga que esté disponible. El repositorio puede contener
4043cualquier cosa, pero un canal útil contendrá módulos Guile que exportan
4044paquetes. Una vez comience a usar un canal, Guix se comportará como si el
4045directorio raíz del repositorio Git de dicho canal hubiese sido añadido a la
4046ruta de carga de Guile (@pxref{Load Paths,,, guile, GNU Guile Reference
4047Manual}). Por ejemplo, si su canal contiene un fichero en
4048@file{mis-paquetes/mis-herramientas.scm} que define un módulo, entonces
4049dicho módulo estará disponible bajo el nombre @code{(mis-paquetes
4050mis-herramientas)}, y podrá usarlo como cualquier otro módulo
4051(@pxref{Módulos,,, guile, GNU Guile Reference Manual}).
4052
4053@cindex dependencias, canales
4054@cindex metadatos, canales
4055@subsection Declaración de dependencias de canales
4056
4057Las autoras de canales pueden decidir aumentar una colección de paquetes
4058proporcionada por otros canales. Pueden declarar su canal como dependiente
4059de otros canales en el fichero de metadatos @file{.guix-channel}, que debe
4060encontrarse en la raíz del repositorio del canal.
4061
4062Este fichero de metadatos debe contener una expresión-S simple como esta:
4063
4064@lisp
4065(channel
4066 (version 0)
4067 (dependencies
4068 (channel
4069 (name una-coleccion)
4070 (url "https://example.org/primera-coleccion.git"))
4071 (channel
4072 (name otra-coleccion)
4073 (url "https://example.org/segunda-coleccion.git")
4074 (branch "pruebas"))))
4075@end lisp
4076
4077En el ejemplo previo, este canal se declara como dependiente de otros dos
4078canales, que se obtendrán de manera automática. Los módulos proporcionados
4079por el canal se compilarán en un entorno donde los módulos de todos estos
4080canales declarados estén disponibles.
4081
4082De cara a la confianza proporcionada y el esfuerzo que supondrá su
4083mantenimiento, debería evitar depender de canales que no controle, y debería
4084intentar minimizar el número de dependencias.
4085
4086@subsection Replicación de Guix
4087
4088@cindex clavar, canales
4089@cindex replicar Guix
4090@cindex reproducibilidad, de Guix
4091La salida de @command{guix pull --list-generations} previa muestra
4092precisamente qué revisiones se usaron para construir esta instancia de
4093Guix. Por tanto podemos replicarla, digamos, en otra máquina, proporcionando
4094una especificaciones de canales en @file{~/.config/guix/channels.scm} que
4095está ``clavada'' en estas revisiones:
4096
4097@lisp
4098;; Despliega unas revisiones específicas de mis canales de interés.
4099(list (channel
4100 (name 'guix)
4101 (url "https://git.savannah.gnu.org/git/guix.git")
4102 (commit "d894ab8e9bfabcefa6c49d9ba2e834dd5a73a300"))
4103 (channel
4104 (name 'mis-paquetes-personales)
4105 (url "https://example.org/paquetes-personales.git")
4106 (branch "dd3df5e2c8818760a8fc0bd699e55d3b69fef2bb")))
4107@end lisp
4108
4109La orden @command{guix describe --format=channels} puede incluso generar
4110esta lista de canales directamente (@pxref{Invocación de guix describe}).
4111
4112En este punto las dos máquinas ejecutan @emph{exactamente el mismo Guix},
4113con acceso a @emph{exactamente los mismos paquetes}. La salida de
4114@command{guix build gimp} en una máquina debe ser exactamente la misma, bit
4115a bit, que la salida de la misma orden en la otra máquina. Esto también
4116significa que ambas máquinas tienen acceso a todo el código fuente de Guix
4117y, transitiamente, a todo el código fuente de cada paquete que define.
4118
4119Esto le proporciona superpoderes, permitiendole seguir la pista de la
4120procedencia de los artefactos binarios con un grano muy fino, y reproducir
4121entornos de software a su voluntad---un tipo de capacidad de
4122``meta-reproducibilidad'', si lo desea. @xref{Inferiores}, para otro modo de
4123tomar ventaja de estos superpoderes.
4124
4125@node Inferiores
4126@section Inferiores
4127
4128@c TODO: Remove this once we're more confident about API stability.
4129@quotation Nota
4130La funcionalidad descrita aquí es una ``versión de evaluación tecnológica''
4131en la versión @value{VERSION}. Como tal, la interfaz está sujeta a cambios.
4132@end quotation
4133
4134@cindex inferiores
4135@cindex composición de revisiones de Guix
4136A veces necesita mezclar paquetes de revisiones de la revisión de Guix que
4137está ejecutando actualmente con paquetes disponibles en una revisión
4138diferente. Los @dfn{inferiores} de Guix le permiten conseguirlo componiendo
4139diferentes revisiones de Guix de modo arbitrario.
4140
4141@cindex paquetes inferiores
4142Técnicamente, un ``inferior'' es esencialmente un proceso Guix separado
4143conectado con su Guix principal a través de una sesión interactiva
4144(@pxref{Invocación de guix repl}). El módulo @code{(guix inferior)} le permite
4145crear inferiores y comunicarse con ellos. También proporciona una interfaz
4146de alto nivel para buscar y manipular los paquetes que un inferior
4147proporciona---@dfn{paquetes de inferiores}.
4148
4149Cuando se combina con los canales (@pxref{Canales}), los inferiores
4150proporcionan una forma simple de interactuar con una revisión separada de
4151Guix. Por ejemplo, asumamos que desea instalar en su perfil el paquete
4152@code{guile} actual, junto al paquete @code{guile-json} como existía en una
4153revisión más antigua de Guix---quizá porque las versiones nuevas de
4154@code{guile-json} tienen un API incompatible y quiere ejecutar su código
4155contra la API antigua. Para hacerlo, puede escribir un manifiesto para
4156usarlo con @code{guix package --manifest} (@pxref{Invocación de guix package});
4157en dicho manifiesto puede crear un inferior para esa versión antigua de Guix
4158que le interesa, y buscará el paquete @code{guile-json} en el inferior:
4159
4160@lisp
4161(use-modules (guix inferior) (guix channels)
4162 (srfi srfi-1)) ;para 'first'
4163
4164(define channels
4165 ;; Esta es la revisión antigua de donde queremos
4166 ;; extraer guile-json.
4167 (list (channel
4168 (name 'guix)
4169 (url "https://git.savannah.gnu.org/git/guix.git")
4170 (commit
4171 "65956ad3526ba09e1f7a40722c96c6ef7c0936fe"))))
4172
4173(define inferior
4174 ;; Un inferior que representa la revisión previa.
4175 (inferior-for-channels channels))
4176
4177;; Ahora crea un manifiesto con el paquete "guile" actual
4178;; y el antiguo paquete "guile-json".
4179(packages->manifest
4180 (list (first (lookup-inferior-packages inferior "guile-json"))
4181 (specification->package "guile")))
4182@end lisp
4183
4184En su primera ejecución, @command{guix package --manifest} puede tener que
4185construir el canal que especificó antes de crear el inferior; las siguientes
4186ejecuciones serán mucho más rápidas porque la revisión de Guix estará en la
4187caché.
4188
4189El módulo @code{(guix inferior)} proporciona los siguientes procedimientos
4190para abrir un inferior:
4191
4192@deffn {Procedimiento Scheme} inferior-for-channels @var{canales} @
4193 [#:cache-directory] [#:ttl]
4194Devuelve un inferior para @var{canales}, una lista de canales. Usa la caché
4195en @var{cache-directory}, donde las entradas pueden ser reclamadas después
4196de @var{ttl} segundos. Este procedimiento abre una nueva conexión al daemon
4197de construcción.
4198
4199Como efecto secundario, este procedimiento puede construir o sustituir
4200binarios para @var{canales}, lo cual puede tomar cierto tiempo.
4201@end deffn
4202
4203@deffn {Procedimiento Scheme} open-inferior @var{directorio} @
4204 [#:command "bin/guix"]
4205Abre el Guix inferior en @var{directorio}, ejecutando
4206@code{@var{directorio}/@var{command} repl} o su equivalente. Devuelve
4207@code{#f} si el inferior no pudo ser ejecutado.
4208@end deffn
4209
4210@cindex paquetes inferiores
4211Los procedimientos enumerados a continuación le permiten obtener y manipular
4212paquetes de inferiores.
4213
4214@deffn {Procedimiento Scheme} inferior-packages @var{inferior}
4215Devuelve la lista de paquetes conocida por @var{inferior}.
4216@end deffn
4217
4218@deffn {Procedimiento Scheme} lookup-inferior-packages @var{inferior} @var{nombre} @
4219 [@var{versión}]
4220Devuelve la lista ordenada de paquetes del inferior que corresponden con
4221@var{nombre} en @var{inferior}, con los números de versión más altos
4222primero. Si @var{versión} tiene un valor verdadero, devuelve únicamente
4223paquetes con un número de versión cuyo prefijo es @var{versión}.
4224@end deffn
4225
4226@deffn {Procedimiento Scheme} inferior-package? @var{obj}
4227Devuelve verdadero si @var{obj} es un paquete inferior.
4228@end deffn
4229
4230@deffn {Procedimiento Scheme} inferior-package-name @var{paquete}
4231@deffnx {Procedimiento Scheme} inferior-package-version @var{paquete}
4232@deffnx {Procedimiento Scheme} inferior-package-synopsis @var{paquete}
4233@deffnx {Procedimiento Scheme} inferior-package-description @var{paquete}
4234@deffnx {Procedimiento Scheme} inferior-package-home-page @var{paquete}
4235@deffnx {Procedimiento Scheme} inferior-package-location @var{paquete}
4236@deffnx {Procedimiento Scheme} inferior-package-inputs @var{paquete}
4237@deffnx {Procedimiento Scheme} inferior-package-native-inputs @var{paquete}
4238@deffnx {Procedimiento Scheme} inferior-package-propagated-inputs @var{paquete}
4239@deffnx {Procedimiento Scheme} inferior-package-transitive-propagated-inputs @var{paquete}
4240@deffnx {Procedimiento Scheme} inferior-package-native-search-paths @var{paquete}
4241@deffnx {Procedimiento Scheme} inferior-package-transitive-native-search-paths @var{paquete}
4242@deffnx {Procedimiento Scheme} inferior-package-search-paths @var{paquete}
4243Estos procedimientos son la contraparte de los accesos a los registros de
4244pquete (@pxref{Referencia de ``package''}). La mayor parte funcionan interrogando al
4245inferior del que @var{paquete} viene, por lo que el inferior debe estar vivo
4246cuando llama a dichos procedimientos.
4247@end deffn
4248
4249Los paquetes de inferiores pueden ser usados transparentemente como
4250cualquier otro paquete u objeto-tipo-fichero en expresiones-G
4251(@pxref{Expresiones-G}). También se manejan transparentemente por el
4252procedimiento @code{packages->manifest}, el cual se usa habitualmente en los
4253manifiestos (@pxref{Invocación de guix package, the @option{--manifest} option of
4254@command{guix package}}). Por tanto puede insertar un paquete de inferior
4255prácticamente en cualquier lugar que pueda insertar un paquete normal: en
4256manifiestos, en el campo @code{packages} de su declaración
4257@code{operating-system}, etcétera.
4258
4259@node Invocación de guix describe
4260@section Invocación de @command{guix describe}
4261
4262@cindex reproducibilidad
4263@cindex replicar Guix
4264A menudo desea responder a preguntas como: ``¿Qué revisión de Guix estoy
4265usando?'' o ``¿Qué canales estoy usando?'' Esto es una información muy útil
4266en muchas situaciones: si quiere @emph{replicar} un entorno en una máquina
4267diferente o cuenta de usuaria, si desea informar de un error o determinar
4268qué cambio en los canales que usa lo causó, o si quiere almacenar el estado
4269de su sistema por razones de reproducibilidad. La orden @command{guix
4270describe} responde a estas preguntas.
4271
4272Cuando se ejecuta desde un @command{guix} bajado con @command{guix pull},
4273@command{guix describe} muestra el/los canal/es desde el/los que se
4274construyó, incluyendo la URL de su repositorio y los IDs de las revisiones
4275(@pxref{Canales}):
4276
4277@example
4278$ guix describe
4279Generation 10 Sep 03 2018 17:32:44 (current)
4280 guix e0fa68c
4281 repository URL: https://git.savannah.gnu.org/git/guix.git
4282 branch: master
4283 commit: e0fa68c7718fffd33d81af415279d6ddb518f727
4284@end example
4285
4286Si está familiarizado con el sistema de control de versiones Git, esto es
4287similar a @command{git describe}; la salida también es similar a la de
4288@command{guix pull --list-generations}, pero limitada a la generación actual
4289(@pxref{Invocación de guix pull, the @option{--list-generations} option}). Debido
4290a que el ID de revisión Git mostrado antes refiere sin ambigüedades al
4291estado de Guix, esta información es todo lo necesario para describir la
4292revisión de Guix que usa, y también para replicarla.
4293
4294Para facilitar la replicación de Guix, también se le puede solicitar a
4295@command{guix describe} devolver una lista de canales en vez de la
4296descripción legible por humanos mostrada antes:
4297
4298@example
4299$ guix describe -f channels
4300(list (channel
4301 (name 'guix)
4302 (url "https://git.savannah.gnu.org/git/guix.git")
4303 (commit
4304 "e0fa68c7718fffd33d81af415279d6ddb518f727")))
4305@end example
4306
4307@noindent
4308Puede almacenar esto en un fichero y pasarselo a @command{guix pull -C} en
4309otra máquina o en un momento futuro, lo cual instanciará @emph{esta revisión
4310exacta de Guix} (@pxref{Invocación de guix pull, the @option{-C} option}). De
4311aquí en adelante, ya que puede desplegar la misma revisión de Guix, puede
4312también @emph{replicar un entorno completo de software}. Nosotras
4313humildemente consideramos que esto es @emph{impresionante}, ¡y esperamos que
4314le guste a usted también!
4315
4316Los detalles de las opciones aceptadas por @command{guix describe} son las
4317siguientes:
4318
4319@table @code
4320@item --format=@var{formato}
4321@itemx -f @var{formato}
4322Produce salida en el @var{formato} especificado, uno de:
4323
4324@table @code
4325@item human
4326produce salida legible por humanos;
4327@item channels
4328produce una lista de especificaciones de canales que puede ser pasada a
4329@command{guix pull -C} o instalada como @file{~/.config/guix/channels.scm}
4330(@pxref{Invocación de guix pull});
4331@item json
4332@cindex JSON
4333produce una lista de especificaciones de canales en formato JSON;
4334@item recutils
4335produce una lista de especificaciones de canales en formato Recutils.
4336@end table
4337
4338@item --profile=@var{perfil}
4339@itemx -p @var{perfil}
4340Muestra información acerca del @var{perfil}.
4341@end table
4342
4343@node Invocación de guix archive
4344@section Invocación de @command{guix archive}
4345
4346@cindex @command{guix archive}
4347@cindex archive
4348La orden @command{guix archive} permite a las usuarias @dfn{exportar}
4349ficheros del almacén en un único archivador, e @dfn{importarlos}
4350posteriormente en una máquina que ejecute Guix. En particular, permite que
4351los ficheros del almacén sean transferidos de una máquina al almacén de otra
4352máquina.
4353
4354@quotation Nota
4355Si está buscando una forma de producir archivos en un formato adecuado para
4356herramientas distintas a Guix, @pxref{Invocación de guix pack}.
4357@end quotation
4358
4359@cindex exportar elementos del almacén
4360Para exportar ficheros del almacén como un archivo por la salida estándar,
4361ejecute:
4362
4363@example
4364guix archive --export @var{opciones} @var{especificaciones}...
4365@end example
4366
4367@var{especificaciones} deben ser o bien nombres de ficheros del almacén o
4368especificaciones de paquetes, como las de @command{guix package}
4369(@pxref{Invocación de guix package}). Por ejemplo, la siguiente orden crea un
4370archivo que contiene la salida @code{gui} del paquete @code{git} y la salida
4371principal de @code{emacs}:
4372
4373@example
4374guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar
4375@end example
4376
4377Si los paquetes especificados no están todavía construidos, @command{guix
4378archive} los construye automáticamente. El proceso de construcción puede
4379controlarse mediante las opciones de construcción comunes (@pxref{Opciones comunes de construcción}).
4380
4381Para transferir el paquete @code{emacs} a una máquina conectada por SSH, se
4382ejecutaría:
4383
4384@example
4385guix archive --export -r emacs | ssh otra-maquina guix archive --import
4386@end example
4387
4388@noindent
4389De manera similar, un perfil de usuaria completo puede transferirse de una
4390máquina a otra de esta manera:
4391
4392@example
4393guix archive --export -r $(readlink -f ~/.guix-profile) | \
4394 ssh otra-maquina guix-archive --import
4395@end example
4396
4397@noindent
4398No obstante, fíjese que, en ambos ejemplos, todo @code{emacs} y el perfil
4399como también todas sus dependencias son transferidas (debido a la
4400@code{-r}), independiente de lo que estuviese ya disponible en el almacén de
4401la máquina objetivo. La opción @code{--missing} puede ayudar a esclarecer
4402qué elementos faltan en el almacén objetivo. La orden @command{guix copy}
4403simplifica y optimiza este proceso completo, así que probablemente es lo que
4404debería usar en este caso (@pxref{Invocación de guix copy}).
4405
4406@cindex nar, formato de archivo
4407@cindex archivo normalizado (nar)
4408Los archivos se almacenan en el formato de ``archivo normalizado'' o
4409``nar'', el cual es comparable a `tar' en el espíritu, pero con diferencias
4410que lo hacen más apropiado para nuestro propósito. Primero, en vez de
4411almacenar todos los metadatos Unix de cada fichero, el formato nar solo
4412menciona el tipo de fichero (normal, directorio o enlace simbólico); los
4413permisos Unix y el par propietario/grupo se descartan. En segundo lugar, el
4414orden en el cual las entradas de directorios se almacenan siempre siguen el
4415orden de los nombres de ficheros de acuerdo a la ordenación de cadenas en la
4416localización C. Esto hace la producción del archivo completamente
4417determinista.
4418
4419@c FIXME: Add xref to daemon doc about signatures.
4420Durante la exportación, el daemon firma digitalmente los contenidos del
4421archivo, y la firma digital se adjunta. Durante la importación, el daemon
4422verifica la firma y rechaza la importación en caso de una firma inválida o
4423si la clave firmante no está autorizada.
4424
4425Las opciones principales son:
4426
4427@table @code
4428@item --export
4429Exporta los ficheros del almacén o paquetes (véase más adelante). Escribe el
4430archivo resultante a la salida estándar.
4431
4432Las dependencias @emph{no} están incluidas en la salida, a menos que se use
4433@code{--recursive}.
4434
4435@item -r
4436@itemx --recursive
4437Cuando se combina con @code{--export}, instruye a @command{guix archive}
4438para incluir las dependencias de los elementos dados en el archivo. Por
4439tanto, el archivo resultante está auto-contenido: contiene la clausura de
4440los elementos exportados del almacén.
4441
4442@item --import
4443Lee un archivo de la entrada estándar, e importa los ficheros enumerados
4444allí en el almacén. La operación se aborta si el archivo tiene una firma
4445digital no válida, o si está firmado por una clave pública que no está entre
4446las autorizadas (vea @code{--authorize} más adelante).
4447
4448@item --missing
4449Lee una lista de nombres de ficheros del almacén de la entrada estándar, uno
4450por línea, y escribe en la salida estándar el subconjunto de estos ficheros
4451que faltan en el almacén.
4452
4453@item --generate-key[=@var{parámetros}]
4454@cindex firmar, archivos
4455Genera un nuevo par de claves para el daemon. Esto es un prerrequisito antes
4456de que los archivos puedan ser exportados con @code{--export}. Tenga en
4457cuenta que esta operación normalmente toma tiempo, ya que se necesita
4458obtener suficiente entropía para generar un par de claves.
4459
4460El par de claves generado se almacena típicamente bajo @file{/etc/guix}, en
4461@file{signing-key.pub} (clave pública) y @file{signing-key.sec} (clave
4462privada, que se debe mantener secreta). Cuando @var{parámetros} se omite, se
4463genera una clave ECDSA usando la curva Ed25519, o, en versiones de Libgcrypt
4464previas a la 1.6.0, es una clave RSA de 4096 bits. De manera alternativa,
4465los @var{parámetros} pueden especificar parámetros @code{genkey} adecuados
4466para Libgcrypt (@pxref{General public-key related Functions,
4467@code{gcry_pk_genkey},, gcrypt, The Libgcrypt Reference Manual}).
4468
4469@item --authorize
4470@cindex autorizar, archivos
4471Autoriza importaciones firmadas con la clave pública pasada por la entrada
4472estándar. La clave pública debe estar en el ``formato avanzado de
4473expresiones-s''---es decir, el mismo formato que el fichero
4474@file{signing-key.pub}.
4475
4476La lista de claves autorizadas se mantiene en el fichero editable por
4477personas @file{/etc/guix/acl}. El fichero contiene
4478@url{http://people.csail.mit.edu/rivest/Sexp.text, ``expresiones-s en
4479formato avanzado''} y está estructurado como una lista de control de acceso
4480en el formato @url{http://theworld.com/~cme/spki.txt, Infraestructura Simple
4481de Clave Pública (SPKI)}.
4482
4483@item --extract=@var{directorio}
4484@itemx -x @var{directorio}
4485Lee un único elemento del archivo como es ofrecido por los servidores de
4486sustituciones (@pxref{Sustituciones}) y lo extrae a @var{directorio}. Esta es
4487una operación de bajo nivel necesitada únicamente para casos muy concretos;
4488véase a continuación.
4489
4490Por ejemplo, la siguiente orden extrae la sustitución de Emacs ofrecida por
4491@code{@value{SUBSTITUTE-SERVER}} en @file{/tmp/emacs}:
4492
4493@example
4494$ wget -O - \
4495 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-emacs-24.5 \
4496 | bunzip2 | guix archive -x /tmp/emacs
4497@end example
4498
4499Los archivos de un único elemento son diferentes de los archivos de
4500múltiples elementos producidos por @command{guix archive --export};
4501contienen un único elemento del almacén, y @emph{no} embeben una firma. Por
4502tanto esta operación @emph{no} verifica la firma y su salida debe
4503considerarse insegura.
4504
4505El propósito primario de esta operación es facilitar la inspección de los
4506contenidos de un archivo que provenga probablemente de servidores de
4507sustituciones en los que no se confía.
4508
4509@end table
4510
4511
4512@c *********************************************************************
4513@node Desarrollo
4514@chapter Desarrollo
4515
4516@cindex desarrollo de software
4517Si es una desarrolladora de software, Guix le proporciona herramientas que
4518debería encontrar útiles---independientemente del lenguaje en el que
4519desarrolle actualmente. Esto es sobre lo que trata este capítulo.
4520
4521La orden @command{guix environment} proporciona una manera conveniente de
4522configurar un @dfn{entorno de desarrollo} que contenga todas las
4523dependencias y herramientas necesarias para trabajar en el paquete de
4524software de su elección. La orden @command{guix pack} le permite crear
4525@dfn{aplicaciones empaquetadas} que pueden ser distribuidas con facilidad a
4526usuarias que no usen Guix.
4527
4528@menu
4529* Invocación de guix environment:: Configurar entornos de desarrollo.
4530* Invocación de guix pack:: Creación de empaquetados de software.
4531@end menu
4532
4533@node Invocación de guix environment
4534@section Invocación de @command{guix environment}
4535
4536@cindex entornos de construcción reproducibles
4537@cindex entornos de desarrollo
4538@cindex @command{guix environment}
4539@cindex entorno, entorno de construcción de paquetes
4540El propósito de @command{guix environment} es ayudar a las hackers en la
4541creación de entornos de desarrollo reproducibles sin modificar los paquetes
4542de su perfil. La herramienta @command{guix environment} toma uno o más
4543paquetes, construye todas sus entradas y crea un entorno shell para usarlos.
4544
4545La sintaxis general es:
4546
4547@example
4548guix environment @var{opciones} @var{paquete}@dots{}
4549@end example
4550
4551El ejemplo siguiente lanza un nuevo shell preparado para el desarrollo de
4552GNU@tie{}Guile:
4553
4554@example
4555guix environment guile
4556@end example
4557
4558Si las dependencias necesarias no están construidas todavía, @command{guix
4559environment} las construye automáticamente. El entorno del nuevo shell es
4560una versión aumentada del entorno en el que @command{guix environment} se
4561ejecutó. Contiene las rutas de búsqueda necesarias para la construcción del
4562paquete proporcionado añadidas a las variables ya existentes. Para crear un
4563entorno ``puro'', donde las variables de entorno previas no existen, use la
4564opción @code{--pure}@footnote{Las usuarias habitualmente aumentan de forma
4565incorrecta las variables de entorno como @code{PATH} en su fichero
4566@file{~/.bashrc}. Como consecuencia, cuando @code{guix environment} se
4567ejecuta, Bash puede leer @file{~/.bashrc}, por tanto introduciendo
4568``impurezas'' en esas variables de entorno. Es un error definir dichas
4569variables de entorno en @file{~/.bashrc}; en vez de ello deben definirse en
4570@file{.bash_profile}, el cual es únicamente cargado por el shell de ingreso
4571al sistema. @xref{Bash Startup Files,,, bash, The GNU Bash Reference
4572Manual}, para detalles sobre los ficheros de inicio de Bash.}.
4573
4574@vindex GUIX_ENVIRONMENT
4575@command{guix environment} define la variable @code{GUIX_ENVIRONMENT} en el
4576shell que lanza; su valor es el nombre de fichero del perfil para este
4577entorno. Esto permite a las usuarias, digamos, definir un prompt para
4578entornos de desarrollo en su @file{.bashrc} (@pxref{Bash Startup Files,,,
4579bash, The GNU Bash Reference Manual}):
4580
4581@example
4582if [ -n "$GUIX_ENVIRONMENT" ]
4583then
4584 export PS1="\u@@\h \w [dev]\$ "
4585fi
4586@end example
4587
4588@noindent
4589...@: o para explorar el perfil:
4590
4591@example
4592$ ls "$GUIX_ENVIRONMENT/bin"
4593@end example
4594
4595Adicionalmente, más de un paquete puede ser especificado, en cuyo caso se
4596usa la unión de las entradas de los paquetes proporcionados. Por ejemplo, la
4597siguiente orden lanza un shell donde todas las dependencias tanto de Guile
4598como de Emacs están disponibles:
4599
4600@example
4601guix environment guile emacs
4602@end example
4603
4604A veces no se desea una sesión interactiva de shell. Una orden arbitraria
4605puede invorcarse usando el valor @code{--} para separar la orden del resto
4606de los parámetros:
4607
4608@example
4609guix environment guile -- make -j4
4610@end example
4611
4612En otras situaciones, es más conveniente especificar una lista de paquetes
4613necesarios en el entorno. Por ejemplo, la siguiente orden ejecuta
4614@command{python} desde un entorno que contiene Python@tie{}2.7 y NumPy:
4615
4616@example
4617guix environment --ad-hoc python2-numpy python-2.7 -- python
4618@end example
4619
4620Más allá, se pueden desear las dependencias de un paquete y también algunos
4621paquetes adicionales que no son dependencias ni en tiempo de construcción ni
4622en el de ejecución, pero son útiles no obstante para el desarrollo. Por esta
4623razón, la opción @code{--ad-hoc} es posicional. Los paquetes que aparecen
4624antes de @code{--ad-hoc} se interpretan como paquetes cuyas dependencias se
4625añadirán al entorno. Los paquetes que aparecen después se interpretan como
4626paquetes que se añadirán directamente al entorno. Por ejemplo, la siguiente
4627orden crea un entorno de desarrollo Guix que incluye adicionalmente Git y
4628strace:
4629
4630@example
4631guix environment guix --ad-hoc git strace
4632@end example
4633
4634En ocasiones es deseable aislar el entorno tanto como sea posible, para
4635obtener la máxima pureza y reproducibilidad. En particular, cuando se usa
4636Guix en una distribución anfitriona que no es el sistema Guix, es deseable
4637prevenir acceso a @file{/usr/bin} y otros recursos del sistema desde el
4638entorno de desarrollo. Por ejemplo, la siguiente orden lanza un REPL Guile
4639en un ``contenedor'' donde únicamente el almacén y el directorio actual
4640están montados:
4641
4642@example
4643guix environment --ad-hoc --container guile -- guile
4644@end example
4645
4646@quotation Nota
4647La opción @code{--container} requiere Linux-libre 3.19 o más nuevo.
4648@end quotation
4649
4650Las opciones disponibles se resumen a continuación.
4651
4652@table @code
4653@item --root=@var{fichero}
4654@itemx -r @var{fichero}
4655@cindex entorno persistente
4656@cindex raíz del recolector de basura, para entornos
4657Hace que @var{fichero} sea un enlace simbólico al perfil para este entorno,
4658y lo registra como una raíz del recolector de basura.
4659
4660Esto es útil si desea proteger su entorno de la recolección de basura,
4661hacerlo ``persistente''.
4662
4663Cuando se omite esta opción, el entorno se protege de la recolección de
4664basura únicamente por la duración de la sesión @command{guix
4665environment}. Esto significa que la siguiente vez que vuelva a crear el
4666mismo entorno, puede tener que reconstruir o volver a descargar
4667paquetes. @xref{Invocación de guix gc}, para más información sobre las raices del
4668recolector de basura.
4669
4670@item --expression=@var{expr}
4671@itemx -e @var{expr}
4672Crea un entorno para el paquete o lista de paquetes a los que evalúa
4673@var{expr}.
4674
4675Por ejemplo, ejecutando:
4676
4677@example
4678guix environment -e '(@@ (gnu packages maths) petsc-openmpi)'
4679@end example
4680
4681inicia un shell con el entorno para esta variante específica del paquete
4682PETSc.
4683
4684Ejecutar:
4685
4686@example
4687guix environment --ad-hoc -e '(@@ (gnu) %base-packages)'
4688@end example
4689
4690inicia un shell con todos los paquetes básicos del sistema disponibles.
4691
4692Las órdenes previas usan únicamente la salida predeterminada de los paquetes
4693dados. Para seleccionar otras salidas, tuplas de dos elementos pueden ser
4694especificadas:
4695
4696@example
4697guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")'
4698@end example
4699
4700@item --load=@var{fichero}
4701@itemx -l @var{fichero}
4702Crea un entorno para el paquete o la lista de paquetes a la que el código en
4703@var{fichero} evalúa.
4704
4705Como un ejemplo, @var{fichero} puede contener una definición como esta
4706(@pxref{Definición de paquetes}):
4707
4708@example
4709@verbatiminclude environment-gdb.scm
4710@end example
4711
4712@item --manifest=@var{fichero}
4713@itemx -m @var{fichero}
4714Crea un entorno para los paquetes contenidos en el objeto manifest devuelto
4715por el código Scheme en @var{file}.
4716
4717Esto es similar a la opción del mismo nombre en @command{guix package}
4718(@pxref{profile-manifest, @option{--manifest}}) y usa los mismos ficheros de
4719manifiesto.
4720
4721@item --ad-hoc
4722Incluye todos los paquetes especificados en el entorno resultante, como si
4723un paquete @i{ad hoc} hubiese sido definido con ellos como entradas. Esta
4724opción es útil para la creación rápida un entorno sin tener que escribir una
4725expresión de paquete que contenga las entradas deseadas.
4726
4727Por ejemplo, la orden:
4728
4729@example
4730guix environment --ad-hoc guile guile-sdl -- guile
4731@end example
4732
4733ejecuta @command{guile} en un entorno donde están disponibles Guile y
4734Guile-SDL.
4735
4736Fíjese que este ejemplo solicita implícitamente la salida predeterminada de
4737@code{guile} y @code{guile-sdl}, pero es posible solicitar una salida
4738específica---por ejemplo, @code{glib:bin} solicita la salida @code{bin} de
4739@code{glib} (@pxref{Paquetes con múltiples salidas}).
4740
4741Esta opción puede componerse con el comportamiento predeterminado de
4742@command{guix environment}. Los paquetes que aparecen antes de
4743@code{--ad-hoc} se interpretan como paquetes cuyas dependencias se añadirán
4744al entorno, el comportamiento predefinido. Los paquetes que aparecen después
4745se interpretan como paquetes a añadir directamente al entorno.
4746
4747@item --pure
4748Olvida las variables de entorno existentes cuando se construye un nuevo
4749entorno, excepto aquellas especificadas con @option{--preserve} (véase más
4750adelante). Esto tiene el efecto de crear un entorno en el que las rutas de
4751búsqueda únicamente contienen las entradas del paquete.
4752
4753@item --preserve=@var{regexp}
4754@itemx -E @var{regexp}
4755Cuando se usa junto a @option{--pure}, preserva las variables de entorno que
4756corresponden con @var{regexp}---en otras palabras, las pone en una lista de
4757variables de entorno que deben preservarse. Esta opción puede repetirse
4758varias veces.
4759
4760@example
4761guix environment --pure --preserve=^SLURM --ad-hoc openmpi @dots{} \
4762 -- mpirun @dots{}
4763@end example
4764
4765Este ejemplo ejecuta @command{mpirun} en un contexto donde las únicas
4766variables de entorno definidas son @code{PATH}, variables de entorno cuyo
4767nombre empiece con @code{SLURM}, así como las variables ``preciosas''
4768habituales (@code{HOME}, @code{USER}, etc.).
4769
4770@item --search-paths
4771Muestra las definiciones de variables de entorno que componen el entorno.
4772
4773@item --system=@var{sistema}
4774@itemx -s @var{sistema}
4775Intenta construir para @var{sistema}---por ejemplo, @code{i686-linux}.
4776
4777@item --container
4778@itemx -C
4779@cindex container
4780Ejecuta la @var{orden} en un contenedor aislado. El directorio actual fuera
4781del contenedor es asociado al interior del contenedor. Adicionalmente, a
4782menos que se fuerce con @code{--user}, un directorio de prueba de la usuaria
4783se crea de forma que coincida con el directorio actual de la usuaria, y
4784@file{/etc/passwd} se configura adecuadamente.
4785
4786El proceso lanzado se ejecuta como el usuario actual fuera del
4787contenedor. Dentro del contenedor, tiene el mismo UID y GID que el usuario
4788actual, a menos que se proporcione @option{--user} (véase más adelante).
4789
4790@item --network
4791@itemx -N
4792Para contenedores, comparte el espacio de nombres de red con el sistema
4793anfitrión. Los contenedores creados sin esta opción únicamente tienen acceso
4794a la red local.
4795
4796@item --link-profile
4797@itemx -P
4798Para contenedores, enlaza el perfil del entorno a @file{~/.guix-profile}
4799dentro del contenedor. Es equivalente a la ejecución de @command{ln -s
4800$GUIX_ENVIRONMENT ~/.guix-profile} dentro del contenedor. El enlace fallará
4801e interrumpirá el entorno si el directorio ya existe, lo cual será
4802probablemente el caso si @command{guix environment} se invocó en el
4803directorio de la usuaria.
4804
4805Determinados paquetes se configuran para buscar en @code{~/.guix-profile}
4806ficheros de configuración y datos;@footnote{Por ejemplo, el paquete
4807@code{fontconfig} inspecciona @file{~/.guix-profile/share/fonts} en busca de
4808nuevas tipografías.} @code{--link-profile} permite a estos programas operar
4809de la manera esperada dentro del entorno.
4810
4811@item --user=@var{usuaria}
4812@itemx -u @var{usuaria}
4813Para contenedores, usa el nombre de usuaria @var{usuaria} en vez de la
4814actual. La entrada generada en @file{/etc/passwd} dentro del contenedor
4815contendrá el nombre @var{usuaria}; su directorio será
4816@file{/home/@var{usuaria}} y ningún dato GECOS de la usuaria se copiará. Más
4817aún, el UID y GID dentro del contenedor son 1000. @var{usuaria} no debe
4818existir en el sistema.
4819
4820Adicionalmente, cualquier ruta compartida o expuesta (véanse @code{--share}
4821y @code{--expose} respectivamente) cuyo destino esté dentro de la carpeta
4822actual de la usuaria será reasociada en relación a
4823@file{/home/@var{usuaria}}; esto incluye la relación automática del
4824directorio de trabajo actual.
4825
4826@example
4827# expondrá las rutas /home/foo/ddt, /home/foo/prueba y /home/foo/objetivo
4828cd $HOME/ddt
4829guix environment --container --user=foo \
4830 --expose=$HOME/prueba \
4831 --expose=/tmp/objetivo=$HOME/objetivo
4832@end example
4833
4834Mientras esto limita el escape de la identidad de la usuaria a través de las
4835rutas de sus directorios y cada uno de los campos de usuaria, esto es
4836únicamente un componente útil de una solución de privacidad/anonimato más
4837amplia---no una solución completa.
4838
4839@item --expose=@var{fuente}[=@var{destino}]
4840Para contenedores, expone el sistema de ficheros @var{fuente} del sistema
4841anfitrión como un sistema de ficheros de solo-lectura @var{destino} dentro
4842del contenedor. Si no se especifica @var{destino}, @var{fuente} se usa como
4843el punto de montaje en el contenedor.
4844
4845El ejemplo a continuación lanza una sesión interactiva de Guile en un
4846contenedor donde el directorio principal de la usuaria es accesible en modo
4847solo-lectura a través del directorio @file{/intercambio}:
4848
4849@example
4850guix environment --container --expose=$HOME=/intercambio --ad-hoc guile -- guile
4851@end example
4852
4853@item --share=@var{fuente}[=@var{destino}]
4854Para contenedores, comparte el sistema de ficheros @var{fuente} del sistema
4855anfitrión como el sistema de ficheros @var{destino} con permisos de
4856escritura dentro del contenedor. Si no se especifica @var{destino},
4857@var{fuente} se usa como punto de montaje en el contenedor.
4858
4859El siguiente ejemplo lanza un entorno interactivo Guile en un contenedor en
4860el que el directorio principal de la usuaria está disponible para tanto
4861lectura como escritura via el directorio @file{/intercambio}:
4862
4863@example
4864guix environment --container --share=$HOME=/intercambio --ad-hoc guile -- guile
4865@end example
4866@end table
4867
4868Además, @command{guix environment} acepta todas las opciones comunes de
4869construcción que permite @command{guix build} (@pxref{Opciones comunes de construcción})
4870así como las opciones de transformación de paquetes (@pxref{Opciones de transformación de paquetes}).
4871
4872@node Invocación de guix pack
4873@section Invocación de @command{guix pack}
4874
4875De manera ocasional querrá dar software a gente que (¡todavía!) no tiene la
4876suerte de usar Guix. Usted les diría que ejecuten @command{guix package -i
4877@var{algo}}, pero eso no es posible en este caso. Aquí es donde viene
4878@command{guix pack}.
4879
4880@quotation Nota
4881Si está buscando formas de intercambiar binarios entre máquinas que ya
4882ejecutan Guix, @pxref{Invocación de guix copy}, @ref{Invocación de guix publish}, y
4883@ref{Invocación de guix archive}.
4884@end quotation
4885
4886@cindex pack
4887@cindex empaquetado
4888@cindex aplicación empaquetada
4889@cindex empaquetado de software
4890La orden @command{guix pack} crea un @dfn{paquete} reducido o
4891@dfn{empaquetado de software}: crea un archivador tar u otro tipo que
4892contiene los binarios del software en el que está interesada y todas sus
4893dependencias. El archivo resultante puede ser usado en una máquina que no
4894tiene Guix, y la gente puede ejecutar exactamente los mismos binarios que
4895usted tiene con Guix. El paquete en sí es creado de forma reproducible
4896bit-a-bit, para que cualquiera pueda verificar que realmente contiene los
4897resultados de construcción que pretende distribuir.
4898
4899Por ejemplo, para crear un empaquetado que contenga Guile, Emacs, Geiser y
4900todas sus dependencias, puede ejecutar:
4901
4902@example
4903$ guix pack guile emacs geiser
4904@dots{}
4905/gnu/store/@dots{}-pack.tar.gz
4906@end example
4907
4908El resultado aquí es un archivador tar que contiene un directorio de
4909@file{/gnu/store} con todos los paquetes relevantes. El archivador
4910resultante contiene un @dfn{perfil} con los tres paquetes de interés; el
4911perfil es el mismo que se hubiera creado por @command{guix package -i}. Este
4912es el mecanismo usado para crear el propio archivador de binarios separado
4913de Guix (@pxref{Instalación binaria}).
4914
4915Las usuarias de este empaquetad tendrán que ejecutar
4916@file{/gnu/store/@dots{}-profile/bin/guile} para ejecutar guile, lo que
4917puede resultar inconveniente. Para evitarlo, puede crear, digamos, un enlace
4918simbólico @file{/opt/gnu/bin} al perfil:
4919
4920@example
4921guix pack -S /opt/gnu/bin=bin guile emacs geiser
4922@end example
4923
4924@noindent
4925De este modo, las usuarias pueden escribir alegremente
4926@file{/opt/gnu/bin/guile} y disfrutar.
4927
4928@cindex binarios relocalizables, con @command{guix pack}
4929¿Qué pasa se la receptora de su paquete no tiene privilegios de root en su
4930máquina y por lo tanto no puede desempaquetarlo en la raíz del sistema de
4931ficheros? En ese caso, lo que usted desea es usar la opción
4932@code{--relocatable} (véase a continuación). Esta opción produce
4933@dfn{binarios relocalizables}, significando que pueden ser colocados en
4934cualquier lugar de la jerarquía del sistema de ficheros: en el ejemplo
4935anterior, las usuarias pueden desempaquetar el archivador en su directorio
4936de usuaria y ejecutar directamente @file{./opt/gnu/bin/guile}.
4937
4938@cindex Docker, construir una imagen con guix pack
4939De manera alternativa, puede producir un empaquetado en el formato de imagen
4940Docker usando la siguiente orden:
4941
4942@example
4943guix pack -f docker guile emacs geiser
4944@end example
4945
4946@noindent
4947El resultado es un archivador tar que puede ser pasado a la orden
4948@command{docker load}. Véase la
4949@uref{https://docs.docker.com/engine/reference/commandline/load/,
4950documentación de Docker} para más información.
4951
4952@cindex Singularity, construir una imagen con guix pack
4953@cindex SquashFS, construir una imagen con guix pack
4954Otra opción más es producir una imagen SquashFS con la siguiente orden:
4955
4956@example
4957guix pack -f squashfs guile emacs geiser
4958@end example
4959
4960@noindent
4961El resultado es una imagen de sistema de ficheros SquashFS que puede ser o
4962bien montada, o bien usada directamente como una imagen contenedora de
4963sistemas de ficheros con el @uref{http://singularity.lbl.gov, entorno de
4964ejecución de contenedores Singularity}, usando órdenes como
4965@command{singularity shell} o @command{singularity exec}.
4966
4967Varias opciones de la línea de órdenes le permiten personalizar su
4968empaquetado:
4969
4970@table @code
4971@item --format=@var{formato}
4972@itemx -f @var{formato}
4973Produce un empaquetado en el @var{formato} específico.
4974
4975Los formatos disponibles son:
4976
4977@table @code
4978@item tarball
4979Es el formato predeterminado. Produce un archivador que contiene todos los
4980binarios y enlaces simbólicos especificados.
4981
4982@item docker
4983Produce un archivador que sigue la
4984@uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md,
4985especificación de imágenes Docker}.
4986
4987@item squashfs
4988Produce una imagen SquashFS que contiene todos los binarios y enlaces
4989simbólicos especificados, así como puntos de montaje vacíos para sistemas de
4990ficheros virtuales como procfs.
4991@end table
4992
4993@cindex binarios reposicionables
4994@item --relocatable
4995@itemx -R
4996Produce @dfn{binarios reposicionables}---es decir, binarios que se pueden
4997posicionar en cualquier lugar de la jerarquía del sistema de ficheros, y
4998ejecutarse desde allí.
4999
5000When this option is passed once, the resulting binaries require support for
5001@dfn{user namespaces} in the kernel Linux; when passed
5002@emph{twice}@footnote{Here's a trick to memorize it: @code{-RR}, which adds
5003PRoot support, can be thought of as the abbreviation of ``Really
5004Relocatable''. Neat, isn't it?}, relocatable binaries fall to back to PRoot
5005if user namespaces are unavailable, and essentially work anywhere---see
5006below for the implications.
5007
5008Por ejemplo, si crea un empaquetado que contiene Bash con:<
5009
5010@example
5011guix pack -RR -S /mybin=bin bash
5012@end example
5013
5014@noindent
5015...@: puede copiar ese empaquetado a una máquina que no tiene Guix, y desde
5016su directorio, como una usuaria normal, ejecutar:
5017
5018@example
5019tar xf pack.tar.gz
5020./mibin/sh
5021@end example
5022
5023@noindent
5024En ese shell, si escribe @code{ls /gnu/store}, notará que @file{/gnu/store}
5025muestra y contiene todas las dependencias de @code{bash}, ¡incluso cuando la
5026máquina no tiene el directorio @file{/gnu/store}! Esto es probablemente el
5027modo más simple de desplegar software construido en Guix en una máquina
5028no-Guix.
5029
5030@quotation Nota
5031No obstante hay un punto a tener en cuenta: esta técnica descansa en la
5032característica de @dfn{espacios de nombres de usuaria} del núcleo Linux, la
5033cual permite a usuarias no privilegiadas montar o cambiar la raíz. Versiones
5034antiguas de Linux no los implementan, y algunas distribuciones GNU/Linux los
5035deshabilitan.
5036
5037Para producir binarios reposicionables que funcionen incluso en ausencia de
5038espacios de nombre de usuaria, proporcione @option{--relocatable} o
5039@option{-R} @emph{dos veces}. En ese caso, los binarios intentarán el uso de
5040espacios de nombres de usuaria y usarán PRoot si no es posible.
5041
5042El programa @uref{https://proot-me.github.io/, PRoot} proporciona el soporte
5043necesario para la virtualización del sistema de ficheros. Lo consigue
5044mediante el uso de la llamada al sistema @code{ptrace} en el programa en
5045ejecución. Esta aproximación tiene la ventaja de funcionar sin soporte
5046especial en el núcleo, pero incurre en una sobrecarga en el tiempo de
5047ejecución cada vez que se realiza una llamada al sistema.
5048@end quotation
5049
5050@item --expression=@var{expr}
5051@itemx -e @var{expr}
5052Considera el paquete al que evalúa @var{expr}
5053
5054Esto tiene el mismo propósito que la opción del mismo nombre en
5055@command{guix build} (@pxref{Opciones de construcción adicionales, @code{--expression}
5056in @command{guix build}}).
5057
5058@item --manifest=@var{fichero}
5059@itemx -m @var{fichero}
5060Usa los paquetes contenidos en el objeto manifest devuelto por el código
5061Scheme en @var{file}.
5062
5063Esto tiene un propósito similar al de la opción del mismo nombre en
5064@command{guix package} (@pxref{profile-manifest, @option{--manifest}}) y usa
5065los mismos ficheros de manifiesto. Esto le permite definir una colección de
5066paquetes una vez y usarla tanto para crear perfiles como para crear archivos
5067en máquinas que no tienen instalado Guix. Fíjese que puede especificar
5068@emph{o bien} un fichero de manifiesto @emph{o bien} una lista de paquetes,
5069pero no ambas.
5070
5071@item --system=@var{sistema}
5072@itemx -s @var{sistema}
5073Intenta construir paquetes para @var{sistema}---por ejemplo,
5074@code{x86_64-linux}---en vez del tipo de sistema de la máquina de
5075construcción.
5076
5077@item --target=@var{tripleta}
5078@cindex compilación cruzada
5079Compilación cruzada para la @var{tripleta}, que debe ser una tripleta GNU
5080válida, cómo @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets,
5081GNU configuration triplets,, autoconf, Autoconf}).
5082
5083@item --compression=@var{herramienta}
5084@itemx -C @var{herramienta}
5085Comprime el archivador resultante usando @var{herramienta}---un valor que
5086puede ser @code{gzip}, @code{bzip2}, @code{xz}, @code{lzip} o @code{none}
5087para no usar compresión.
5088
5089@item --symlink=@var{spec}
5090@itemx -S @var{spec}
5091Añade los enlaces simbólicos especificados por @var{spec} al
5092empaquetado. Esta opción puede aparecer varias veces.
5093
5094La forma de @var{spec} es @code{@var{fuente}=@var{destino}}, donde
5095@var{fuente} es el enlace simbólico que será creado y @var{destino} es el
5096destino del enlace simbólico.
5097
5098Por ejemplo, @code{-S /opt/gnu/bin=bin} crea un enlace simbólico
5099@file{/opt/gnu/bin} apuntando al subdirectorio @file{bin} del perfil.
5100
5101@item --save-provenance
5102Save provenance information for the packages passed on the command line.
5103Provenance information includes the URL and commit of the channels in use
5104(@pxref{Canales}).
5105
5106Provenance information is saved in the
5107@file{/gnu/store/@dots{}-profile/manifest} file in the pack, along with the
5108usual package metadata---the name and version of each package, their
5109propagated inputs, and so on. It is useful information to the recipient of
5110the pack, who then knows how the pack was (supposedly) obtained.
5111
5112This option is not enabled by default because, like timestamps, provenance
5113information contributes nothing to the build process. In other words, there
5114is an infinity of channel URLs and commit IDs that can lead to the same
5115pack. Recording such ``silent'' metadata in the output thus potentially
5116breaks the source-to-binary bitwise reproducibility property.
5117
5118@item --localstatedir
5119@itemx --profile-name=@var{nombre}
5120Incluye el ``directorio de estado local'', @file{/var/guix}, en el
5121empaquetado resultante, y notablemente el perfil
5122@file{/var/guix/profiles/per-user/root/@var{nombre}}---por defecto
5123@var{nombre} es @code{guix-profile}, que corresponde con
5124@file{~root/.guix-profile}.
5125
5126@file{/var/guix} contiene la base de datos del almacén (@pxref{El almacén})
5127así como las raíces del recolector de basura (@pxref{Invocación de guix gc}). Proporcionarlo junto al empaquetado significa que el almacén está
5128``completo'' y Guix puede trabajar con él; no proporcionarlo significa que
5129el almacén está ``muerto'': no se pueden añadir o borrar nuevos elementos
5130después de la extracción del empaquetado.
5131
5132Un caso de uso para esto es el archivador tar autocontenido de binarios de
5133Guix (@pxref{Instalación binaria}).
5134
5135@item --bootstrap
5136Usa los binarios del lanzamiento para construir el empaquetado. Esta opción
5137es útil únicamente a las desarrolladoras de Guix.
5138@end table
5139
5140Además, @command{guix pack} acepta todas las opciones comunes de
5141construcción (@pxref{Opciones comunes de construcción}) y todas las opciones de
5142transformación de paquetes (@pxref{Opciones de transformación de paquetes}).
5143
5144
5145@c *********************************************************************
5146@node Interfaz programática
5147@chapter Interfaz programática
5148
5149GNU Guix proporciona viarias interfaces programáticas Scheme (APIs) para
5150definir, construir y consultar paquetes. La primera interfaz permite a las
5151usuarias escribir definiciones de paquetes a alto nivel. Estas definiciones
5152referencian conceptos familiares de empaquetamiento, como el nombre y la
5153versión de un paquete, su sistema de construcción y sus dependencias. Estas
5154definiciones se pueden convertir en acciones concretas de construcción.
5155
5156Las acciones de construcción son realizadas por el daemon Guix, en
5157delegación de las usuarias. En una configuración estándar, el daemon tiene
5158acceso de escritura al almacén---el directorio @file{/gnu/store}---mientras
5159que las usuarias no. En la configuración recomendada el daemon también
5160realiza las construcciones en chroots, bajo usuarias específicas de
5161construcción, para minimizar la interferencia con el resto del sistema.
5162
5163@cindex derivación
5164Las APIs de nivel más bajo están disponibles para interactuar con el daemon
5165y el almacén. Para instruir al daemon para realizar una acción de
5166construcción, las usuarias realmente proporcionan una @dfn{derivación}. Una
5167derivación es una representación de bajo nivel de las acciones de
5168construcción a tomar, y el entorno en el que deberían suceder---las
5169derivaciones son a las definiciones de paquetes lo que es el ensamblador a
5170los programas en C. El término ``derivación'' viene del hecho de que los
5171resultados de la construcción @emph{derivan} de ellas.
5172
5173Este capítulo describe todas estas APIs en orden, empezando por las
5174definiciones de alto nivel de paquetes.
5175
5176@menu
5177* Módulos de paquetes:: Paquetes bajo el punto de vista del
5178 programador.
5179* Definición de paquetes:: Definir nuevos paquetes.
5180* Sistemas de construcción:: Especificar como se construyen los paquetes.
5181* El almacén:: Manipular el almacén de paquetes.
5182* Derivaciones:: Interfaz de bajo nivel de las derivaciones de
5183 los paquetes.
5184* La mónada del almacén:: Interfaz puramente funcional del almacén.
5185* Expresiones-G:: Manipular expresiones de construcción.
5186* Invocación de guix repl:: Enredar con Guix interactivamente.
5187@end menu
5188
5189@node Módulos de paquetes
5190@section Módulos de paquetes
5191
5192Desde un punto de vista programático, las definiciones de paquetes de la
5193distribución GNU se proporcionan por módulos Guile en el espacio de nombres
5194@code{(gnu packages @dots{})}@footnote{Fíjese que los paquetes bajo el
5195espacio de nombres de módulo @code{(gnu packages @dots{})} no son
5196necesariamente ``paquetes GNU''. Este esquema de nombrado de módulos sigue
5197la convención habitual de Guile para el nombrado de módulos: @code{gnu}
5198significa que estos módulos se distribuyen como parte del sistema GNU, y
5199@code{packages} identifica módulos que definen paquetes.} (@pxref{Módulos,
5200Guile modules,, guile, GNU Guile Reference Manual}). Por ejemplo, el módulo
5201@code{(gnu packages emacs)} exporta una variable con nombre @code{emacs},
5202que está asociada a un objeto @code{<package>} (@pxref{Definición de paquetes}).
5203
5204El espacio de nombres de módulos @code{(gnu packages @dots{})} se recorre
5205automáticamente en busca de paquetes en las herramientas de línea de
5206ordenes. Por ejemplo, cuando se ejecuta @code{guix package -i emacs}, todos
5207los módulos @code{(gnu packages @dots{})} son procesados hasta encontrar uno
5208que exporte un objeto de paquete cuyo nombre sea @code{emacs}. Esta búsqueda
5209de paquetes se implementa en el módulo @code{(gnu packages)}.
5210
5211@cindex personalización, de paquetes
5212@cindex ruta de búsqueda de módulos de paquetes
5213Las usuarias pueden almacenar definiciones de paquetes en módulos con
5214nombres diferentes---por ejemplo, @code{(mis-paquetes
5215emacs)}@footnote{Fíjese que el nombre de fichero y el nombre de módulo deben
5216coincidir. Por ejemplo, el módulo @code{(mis-paquetes emacs)} debe
5217almacenarse en el fichero @file{mis-paquetes/emacs.scm} en relación con la
5218ruta de carga especificada con @option{--load-path} o
5219@code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,, guile, GNU
5220Guile Reference Manual}, para obtener detalles.}. Existen dos maneras de
5221hacer visibles estas definiciones de paquetes a las interfaces de usuaria:
5222
5223@enumerate
5224@item
5225Mediante la adición del directorio que contiene sus módulos de paquetes a la
5226ruta de búsqueda con la opción @code{-L} de @command{guix package} y otras
5227órdenes (@pxref{Opciones comunes de construcción}), o usando la variable de entorno
5228@code{GUIX_PACKAGE_PATH} descrita más adelante.
5229
5230@item
5231Mediante la definición de un @dfn{canal} y la configuración de @command{guix
5232pull} de manera que se actualice desde él. Un canal es esencialmente un
5233repositorio Git que contiene módulos de paquetes. @xref{Canales}, para más
5234información sobre cómo definir y usar canales.
5235@end enumerate
5236
5237@code{GUIX_PACKAGE_PATH} funciona de forma similar a otras variables de
5238rutas de búsqueda:
5239
5240@defvr {Variable de entorno} GUIX_PACKAGE_PATH
5241Es una lista separada por dos puntos de directorios en los que se buscarán
5242módulos de paquetes adicionales. Los directorios enumerados en esta variable
5243tienen preferencia sobre los propios módulos de la distribución.
5244@end defvr
5245
5246La distribución es @dfn{auto-contenida} y completamente @dfn{basada en el
5247lanzamiento inicial}: cada paquete se construye basado únicamente en otros
5248paquetes de la distribución. La raíz de este grafo de dependencias es un
5249pequeño conjunto de @dfn{binarios del lanzamiento inicial}, proporcionados
5250por el módulo @code{(gnu packages bootstrap)}. Para más información sobre el
5251lanzamiento inicial, @pxref{Lanzamiento inicial}.
5252
5253@node Definición de paquetes
5254@section Definición de paquetes
5255
5256La interfaz de alto nivel de las definiciones de paquetes está implementada
5257en los módulos @code{(guix packages)} y @code{(guix build-system)}. Como un
5258ejemplo, la definición de paquete, o @dfn{receta}, para el paquete GNU Hello
5259es como sigue:
5260
5261@example
5262(define-module (gnu packages hello)
5263 #:use-module (guix packages)
5264 #:use-module (guix download)
5265 #:use-module (guix build-system gnu)
5266 #:use-module (guix licenses)
5267 #:use-module (gnu packages gawk))
5268
5269(define-public hello
5270 (package
5271 (name "hello")
5272 (version "2.10")
5273 (source (origin
5274 (method url-fetch)
5275 (uri (string-append "mirror://gnu/hello/hello-" version
5276 ".tar.gz"))
5277 (sha256
5278 (base32
5279 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"))))
5280 (build-system gnu-build-system)
5281 (arguments '(#:configure-flags '("--enable-silent-rules")))
5282 (inputs `(("gawk" ,gawk)))
5283 (synopsis "Hello, GNU world: An example GNU package")
5284 (description "Guess what GNU Hello prints!")
5285 (home-page "http://www.gnu.org/software/hello/")
5286 (license gpl3+)))
5287@end example
5288
5289@noindent
5290Sin ser una experta en Scheme---pero conociendo un poco de inglés---, la
5291lectora puede haber supuesto el significado de varios campos aquí. Esta
5292expresión asocia la variable @code{hello} al objeto @code{<package>}, que
5293esencialmente es un registro (@pxref{SRFI-9, Scheme records,, guile, GNU
5294Guile Reference Manual}). Este objeto de paquete puede ser inspeccionado
5295usando los procedimientos encontrados en el módulo @code{(guix packages)};
5296por ejemplo, @code{(package-name hello)}
5297devuelve---¡sorpresa!---@code{"hello"}.
5298
5299Con suerte, puede que sea capaz de importar parte o toda la definición del
5300paquete de su interés de otro repositorio, usando la orden @code{guix
5301import} (@pxref{Invocación de guix import}).
5302
5303En el ejemplo previo, @var{hello} se define en un módulo para ella,
5304@code{(gnu packages hello)}. Técnicamente, esto no es estrictamente
5305necesario, pero es conveniente hacerlo: todos los paquetes definidos en
5306módulos bajo @code{(gnu packages @dots{})} se reconocen automáticamente en
5307las herramientas de línea de órdenes (@pxref{Módulos de paquetes}).
5308
5309Hay unos pocos puntos que merece la pena destacar de la definición de
5310paquete previa:
5311
5312@itemize
5313@item
5314El campo @code{source} del paquete es un objeto @code{<origin>}
5315(@pxref{Referencia de ``origin''}, para la referencia completa). Aquí se usa el
5316método @code{url-fetch} de @code{(guix download)}, lo que significa que la
5317fuente es un fichero a descargar por FTP o HTTP.
5318
5319El prefijo @code{mirror://gnu} instruye a @code{url-fetch} para usar uno de
5320los espejos GNU definidos en @code{(guix download)}.
5321
5322El campo @code{sha256} especifica el hash SHA256 esperado del fichero
5323descargado. Es obligatorio, y permite a Guix comprobar la integridad del
5324fichero. La forma @code{(base32 @dots{})} introduce la representación base32
5325del hash. Puede obtener esta información con @code{guix download}
5326(@pxref{Invocación de guix download}) y @code{guix hash} (@pxref{Invocación de guix hash}).
5327
5328@cindex parches
5329Cuando sea necesario, la forma @code{origin} también puede tener un campo
5330@code{patches} con la lista de parches a ser aplicados, y un campo
5331@code{snippet} con una expresión Scheme para modificar el código fuente.
5332
5333@item
5334@cindex Sistema de construcción GNU
5335El campo @code{build-system} especifica el procedimiento de construcción del
5336paquete (@pxref{Sistemas de construcción}). Aquí, @var{gnu-build-system} representa el
5337familiar sistema de construcción GNU, donde los paquetes pueden
5338configurarse, construirse e instalarse con la secuencia de ordenes habitual
5339@code{./configure && make && make check && make install}.
5340
5341@item
5342El campo @code{arguments} especifica las opciones para el sistema de
5343construcción (@pxref{Sistemas de construcción}). Aquí son interpretadas por
5344@var{gnu-build-system} como una petición de ejecutar @file{configure} con la
5345opción @code{--enable-silent-rules}.
5346
5347@cindex quote
5348@cindex creación de literales
5349@findex '
5350@findex quote
5351¿Qué son estas comillas simples (@code{'})? Son sintaxis Scheme para
5352introducir una lista literal; @code{'} es sinónimo de
5353@code{quote}. @xref{Expression Syntax, quoting,, guile, GNU Guile Reference
5354Manual}, para más detalles. Aquí el valor del campo @code{arguments} es una
5355lista de parámetros pasada al sistema de construcción, como con @code{apply}
5356(@pxref{Fly Evaluation, @code{apply},, guile, GNU Guile Reference Manual}).
5357
5358La secuencia almohadilla-dos puntos (@code{#:}) define una @dfn{palabra
5359clave} Scheme (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), y
5360@code{#:configure-flags} es una palabra clave usada para pasar un parámetro
5361nominal al sistema de construcción (@pxref{Coding With Keywords,,, guile,
5362GNU Guile Reference Manual}).
5363
5364@item
5365El campo @code{inputs} especifica las entradas al proceso de
5366construcción---es decir, dependencias de tiempo de construcción o ejecución
5367del paquete. Aquí, definimos una entrada llamada @code{"gawk"}, cuyo valor
5368es el de la variable @var{gawk}; @var{gawk} en sí apunta a un objeto
5369@code{<package>}.
5370
5371@cindex acento grave (quasiquote)
5372@findex `
5373@findex quasiquote
5374@cindex coma (unquote)
5375@findex ,
5376@findex unquote
5377@findex ,@@
5378@findex unquote-splicing
5379De nuevo, @code{`} (un acento grave, sinónimo de @code{quasiquote}) nos
5380permite introducir una lista literal en el campo @code{inputs}, mientras que
5381@code{,} (una coma, sinónimo de @code{unquote}) nos permite insertar un
5382valor en dicha lista (@pxref{Expression Syntax, unquote,, guile, GNU Guile
5383Reference Manual}).
5384
5385Fíjese que no hace falta que GCC, Coreutils, Bash y otras herramientas
5386esenciales se especifiquen como entradas aquí. En vez de eso,
5387@var{gnu-build-system} se hace cargo de asegurar que están presentes
5388(@pxref{Sistemas de construcción}).
5389
5390No obstante, cualquier otra dependencia debe ser especificada en el campo
5391@code{inputs}. Las dependencias no especificadas aquí simplemente no estarán
5392disponibles para el proceso de construcción, provocando posiblemente un
5393fallo de construcción.
5394@end itemize
5395
5396@xref{Referencia de ``package''}, para una descripción completa de los campos
5397posibles.
5398
5399Una vez la definición de paquete esté en su lugar, el paquete puede ser
5400construido realmente usando la herramienta de línea de órdenes @code{guix
5401build} (@pxref{Invocación de guix build}), pudiendo resolver cualquier fallo de
5402construcción que encuentre (@pxref{Depuración de fallos de construcción}). Puede volver
5403a la definición del paquete fácilmente usando la orden @command{guix edit}
5404(@pxref{Invocación de guix edit}). @xref{Guías de empaquetamiento}, para más
5405información sobre cómo probar definiciones de paquetes, y @ref{Invocación de guix lint}, para información sobre cómo comprobar la consistencia del estilo de
5406una definición.
5407@vindex GUIX_PACKAGE_PATH
5408Por último, @pxref{Canales}, para información sobre cómo extender la
5409distribución añadiendo sus propias definiciones de paquetes en un ``canal''.
5410
5411Finalmente, la actualización de la definición con una nueva versión oficial
5412puede ser automatizada parcialmente por la orden @command{guix refresh}
5413(@pxref{Invocación de guix refresh}).
5414
5415Tras el telón, una derivación correspondiente al objeto @code{<package>} es
5416calculada mediante el procedimiento @code{package-derivation}. Esta
5417derivación es almacenada en un fichero @code{.drv} bajo
5418@file{/gnu/store}. Las acciones de construcción que prescribe pueden
5419entonces llevarse a cabo usando el procedimiento @code{build-derivations}
5420(@pxref{El almacén}).
5421
5422@deffn {Procedimiento Scheme} package-derivation @var{almacén} @var{paquete} [@var{sistema}]
5423Devuelve el objeto @code{<derivation>} del @var{paquete} pra el
5424@var{sistema} (@pxref{Derivaciones}).
5425
5426@var{paquete} debe ser un objeto @code{<package>} válido, y @var{sistema}
5427debe ser una cadena que denote el tipo de sistema objetivo---por ejemplo,
5428@code{"x86_64-linux"} para un sistema GNU x86_64 basado en
5429Linux. @var{almacén} debe ser una conexión al daemon, que opera en el
5430almacén (@pxref{El almacén}).
5431@end deffn
5432
5433@noindent
5434@cindex compilación cruzada
5435De manera similar, es posible calcular una derivación que construye de forma
5436cruzada un paquete para otro sistema:
5437
5438@deffn {Procedimiento Scheme} package-cross-derivation @var{almacén} @
5439 @var{paquete} @var{plataforma} [@var{sistema}]
5440Devuelve el objeto @code{<derivation>} de @var{paquete} compilado de forma
5441cruzada desde @var{sistema} a @var{plataforma}.
5442
5443@var{plataforma} debe ser una tripleta GNU válida que denote el hardware y
5444sistema operativo objetivo, como @code{"mips64el-linux-gnu"}
5445(@pxref{Configuration Names, GNU configuration triplets,, configure, GNU
5446Configure and Build System}).
5447@end deffn
5448
5449@cindex transformación de paquetes
5450@cindex reescritura de la entrada
5451@cindex reescritura del árbol de dependencias
5452Los paquetes se pueden manipular de forma arbitraria. Un ejemplo de
5453transformación útil es la @dfn{reescritura de entradas}, donde el árbol de
5454dependencias de un paquete se reescribe reemplazando entradas específicas
5455por otras:
5456
5457@deffn {Procedimiento Scheme} package-input-rewriting @var{reemplazos} @
5458 [@var{nombre-reescrito}]
5459Devuelve un procedimiento que, cuando se le pasa un paquete, reemplaza sus
5460dependencias directas e indirectas (pero no sus entradas implícitas) de
5461acuerdo a @var{reemplazos}. @var{reemplazos} es una lista de pares de
5462paquetes; el primer elemento de cada par es el paquete a reemplazar, el
5463segundo es el reemplazo.
5464
5465Opcionalmente, @var{nombre-reescrito} es un procedimiento de un parámetro
5466que toma el nombre del paquete y devuelve su nuevo nombre tras la
5467reescritura.
5468@end deffn
5469
5470@noindent
5471Considere este ejemplo:
5472
5473@example
5474(define libressl-en-vez-de-openssl
5475 ;; Esto es un procedimiento para reemplazar OPENSSL
5476 ;; por LIBRESSL, recursivamente.
5477 (package-input-rewriting `((,openssl . ,libressl))))
5478
5479(define git-con-libressl
5480 (libressl-en-vez-de-openssl git))
5481@end example
5482
5483@noindent
5484Aquí primero definimos un procedimiento de reescritura que substituye
5485@var{openssl} por @var{libressl}. Una vez hecho esto, lo usamos para definir
5486una @dfn{variante} del paquete @var{git} que usa @var{libressl} en vez de
5487@var{openssl}. Esto es exactamente lo que hace la opción de línea de órdenes
5488@option{--with-input} (@pxref{Opciones de transformación de paquetes,
5489@option{--with-input}}).
5490
5491The following variant of @code{package-input-rewriting} can match packages
5492to be replaced by name rather than by identity.
5493
5494@deffn {Procedimiento Scheme} package-input-rewriting/spec @var{reemplazos}
5495Return a procedure that, given a package, applies the given
5496@var{replacements} to all the package graph (excluding implicit inputs).
5497@var{replacements} is a list of spec/procedures pair; each spec is a package
5498specification such as @code{"gcc"} or @code{"guile@@2"}, and each procedure
5499takes a matching package and returns a replacement for that package.
5500@end deffn
5501
5502The example above could be rewritten this way:
5503
5504@example
5505(define libressl-en-vez-de-openssl
5506 ;; Reemplaza todos los paquetes llamados "openssl" con LibreSSL.
5507 (package-input-rewriting/spec `(("openssl" . ,(const libressl)))))
5508@end example
5509
5510The key difference here is that, this time, packages are matched by spec and
5511not by identity. In other words, any package in the graph that is called
5512@code{openssl} will be replaced.
5513
5514Un procedimiento más genérico para reescribir el grafo de dependencias de un
5515paquete es @code{package-mapping}: acepta cambios arbitrarios sobre nodos
5516del grafo.
5517
5518@deffn {Scheme Procedure} package-mapping @var{proc} [@var{cortar?}]
5519Devuelve un procedimiento que, dado un paquete, aplica @var{proc} a todos
5520los paquetes de los que depende y devuelve el paquete resultante. El
5521procedimiento para la recursión cuando @var{cortar?} devuelve verdadero para
5522un paquete dado.
5523@end deffn
5524
5525@menu
5526* Referencia de ``package'':: El tipo de datos de los paquetes.
5527* Referencia de ``origin'':: El tipo de datos de orígenes.
5528@end menu
5529
5530
5531@node Referencia de ``package''
5532@subsection Referencia de @code{package}
5533
5534Esta sección resume todas las opciones disponibles en declaraciones
5535@code{package} (@pxref{Definición de paquetes}).
5536
5537@deftp {Tipo de datos} package
5538Este es el tipo de datos que representa la receta de un paquete.
5539
5540@table @asis
5541@item @code{name}
5542El nombre del paquete, como una cadena.
5543
5544@item @code{version}
5545La versión del paquete, como una cadena.
5546
5547@item @code{source}
5548Un objeto que determina cómo se debería obtener el código fuente del
5549paquete. La mayor parte del tiempo, es un objeto @code{origin}, que denota
5550un fichero obtenido de Internet (@pxref{Referencia de ``origin''}). También puede
5551ser cualquier otro objeto ``tipo-fichero'' como @code{local-file}, que
5552denota un fichero del sistema local de ficheros (@pxref{Expresiones-G,
5553@code{local-file}}).
5554
5555@item @code{build-system}
5556El sistema de construcción que debe ser usado para construir el paquete
5557(@pxref{Sistemas de construcción}).
5558
5559@item @code{arguments} (predeterminados: @code{'()})
5560Los parámetros que deben ser pasados al sistema de construcción. Es una
5561lista que normalmente contiene una secuencia de pares de palabra clave y
5562valor.
5563
5564@item @code{inputs} (predeterminadas: @code{'()})
5565@itemx @code{native-inputs} (predeterminadas: @code{'()})
5566@itemx @code{propagated-inputs} (predeterminadas: @code{'()})
5567@cindex entradas, de paquetes
5568Estos campos enumeran las dependencias del paquete. Cada uno es una lista de
5569tuplas, donde cada tupla tiene una etiqueta para la entrada (una cadena)
5570como su primer elemento, un paquete, origen o derivación como su segundo
5571elemento, y opcionalmente el nombre de la salida que debe ser usada, cuyo
5572valor predeterminado es @code{"out"} (@pxref{Paquetes con múltiples salidas}, para más información sobre salidas de paquetes). Por ejemplo, la
5573lista siguiente especifica tres entradas:
5574
5575@example
5576`(("libffi" ,libffi)
5577 ("libunistring" ,libunistring)
5578 ("glib:bin" ,glib "bin")) ;la salida "bin" de Glib
5579@end example
5580
5581@cindex compilación cruzada, dependencias de paquetes
5582La distinción entre @code{native-inputs} y @code{inputs} es necesaria cuando
5583se considera la compilación cruzada. Cuando se compila cruzadamente, las
5584dependencias enumeradas en @code{inputs} son construidas para la
5585arquitectura @emph{objetivo}; de modo contrario, las dependencias enumeradas
5586en @code{native-inputs} se construyen para la arquitectura de la máquina de
5587@emph{construcción}.
5588
5589@code{native-inputs} se usa típicamente para enumerar herramientas
5590necesarias en tiempo de construcción, pero no en tiempo de ejecución, como
5591Autoconf, Automake, pkg-config, Gettext o Bison. @command{guix lint} puede
5592informar de probables errores en este área (@pxref{Invocación de guix lint}).
5593
5594@anchor{package-propagated-inputs}
5595Por último, @code{propagated-inputs} es similar a @code{inputs}, pero los
5596paquetes especificados se instalarán automáticamente junto al paquete al que
5597pertenecen (@pxref{package-cmd-propagated-inputs, @command{guix package}},
5598para información sobre cómo @command{guix package} maneja las entradas
5599propagadas).
5600
5601Por ejemplo esto es necesario cuando una biblioteca C/C++ necesita cabeceras
5602de otra biblioteca para compilar, o cuando un fichero pkg-config se refiere
5603a otro @i{via} su campo @code{Requires}.
5604
5605Otro ejemplo donde @code{propagated-inputs} es útil es en lenguajes que
5606carecen de la facilidad de almacenar la ruta de búsqueda de tiempo de
5607ejecución de la misma manera que el campo @code{RUNPATH} de los ficheros
5608ELF; esto incluye Guile, Python, Perl y más. Para asegurarse que las
5609bibliotecas escritas en esos lenguajes puedan encontrar en tiempo de
5610ejecución el código de las bibliotecas de las que dependen, las dependencias
5611de tiempo de ejecución deben enumerarse en @code{propagated-inputs} en vez
5612de en @code{inputs}.
5613
5614@item @code{outputs} (predeterminada: @code{'("out")})
5615La lista de nombres de salidas del paquete. @xref{Paquetes con múltiples salidas}, para usos típicos de salidas adicionales.
5616
5617@item @code{native-search-paths} (predeterminadas: @code{'()})
5618@itemx @code{search-paths} (predeterminadas: @code{'()})
5619Una lista de objetos @code{search-path-specification} describiendo las
5620variables de entorno de rutas de búsqueda respetadas por el paquete.
5621
5622@item @code{replacement} (predeterminado: @code{1.0})
5623Esto debe ser o bien @code{#f} o bien un objeto package que será usado como
5624@dfn{reemplazo} para ete paquete. @xref{Actualizaciones de seguridad, injertos}, para
5625más detalles.
5626
5627@item @code{synopsis}
5628Una descripción en una línea del paquete.
5629
5630@item @code{description}
5631Una descripción más elaborada del paquete.
5632
5633@item @code{license}
5634@cindex licencia, de paquetes
5635La licencia del paquete; un valor de @code{(guix licenses)}, o una lista de
5636dichos valores.
5637
5638@item @code{home-page}
5639La URL de la página principal del paquete, como una cadena.
5640
5641@item @code{supported-systems} (predeterminados: @code{%supported-systems})
5642La lista de sistemas en los que se mantiene el paquete, como cadenas de la
5643forma @code{arquitectura-núcleo}, por ejemplo @code{"x86_64-linux"}.
5644
5645@item @code{maintainers} (predeterminadas: @code{'()})
5646La lista de responsables del paquete, como objetos @code{maintainer}.
5647
5648@item @code{location} (predeterminada: la localización de los fuentes de la forma @code{package})
5649La localización de las fuentes del paquete. Es útil forzar su valor cuando
5650se hereda de otro paquete, en cuyo caso este campo no se corrige
5651automáticamente.
5652@end table
5653@end deftp
5654
5655@deffn {Scheme Syntax} this-package
5656When used in the @emph{lexical scope} of a package field definition, this
5657identifier resolves to the package being defined.
5658
5659The example below shows how to add a package as a native input of itself
5660when cross-compiling:
5661
5662@example
5663(package
5664 (name "guile")
5665 ;; ...
5666
5667 ;; When cross-compiled, Guile, for example, depends on
5668 ;; a native version of itself. Add it here.
5669 (native-inputs (if (%current-target-system)
5670 `(("self" ,this-package))
5671 '())))
5672@end example
5673
5674It is an error to refer to @code{this-package} outside a package definition.
5675@end deffn
5676
5677@node Referencia de ``origin''
5678@subsection Referencia de @code{origin}
5679
5680Esta sección resume todas las opciones disponibles en declaraciones
5681@code{origin} (@pxref{Definición de paquetes}).
5682
5683@deftp {Tipo de datos} origin
5684Este es el tipo de datos que representa un origen de código fuente.
5685
5686@table @asis
5687@item @code{uri}
5688Un objeto que contiene el URI de las fuentes. El tipo de objeto depende del
5689valor de @code{method} (véase a continuación). Por ejemplo, cuando se usa el
5690método @var{url-fetch} de @code{(guix download)}, los valores válidos de
5691@code{uri} son: una cadena que contiene una URL, o una lista de cadenas.
5692
5693@item @code{method}
5694Un procedimiento que maneja el URI.
5695
5696Algunos ejemplos son:
5697
5698@table @asis
5699@item @var{url-fetch} de @code{(guix download)}
5700descarga un fichero de la URL HTTP, HTTPS o FTP especificada en el campo
5701@code{uri};
5702
5703@vindex git-fetch
5704@item @var{git-fetch} de @code{(guix git-download)}
5705clona el repositorio de control de versiones Git, y prepara la revisión
5706especificada en el campo @code{uri} como un objeto @code{git-reference}; una
5707referencia @code{git-reference} tiene esta forma:
5708
5709@example
5710(git-reference
5711 (url "git://git.debian.org/git/pkg-shadow/shadow")
5712 (commit "v4.1.5.1"))
5713@end example
5714@end table
5715
5716@item @code{sha256}
5717Un vector de bytes que contiene el hash SHA-256 de las fuentes. Típicamente
5718la forma @code{base32} se usa aquí para generar el vector de bytes de una
5719cadena en base-32.
5720
5721Puede obtener esta información usando @code{guix download} (@pxref{Invocación de guix download}) o @code{guix hash} (@pxref{Invocación de guix hash}).
5722
5723@item @code{file-name} (predeterminado: @code{#f})
5724El nombre de fichero bajo el que el código fuente se almacenará. Cuando este
5725es @code{#f}, un valor predeterminado sensato se usará en la mayor parte de
5726casos. En caso de que las fuentes se obtengan de una URL, el nombre de
5727fichero de la URL se usará. Para copias de trabajo de sistemas de control de
5728versiones, se recomienda proporcionar el nombre de fichero explícitamente ya
5729que el predeterminado no es muy descriptivo.
5730
5731@item @code{patches} (predeterminados: @code{'()})
5732Una lista de nombres de ficheros, orígenes u objetos tipo-fichero
5733(@pxref{Expresiones-G, objetos tipo-fichero}) apuntando a parches que deben
5734ser aplicados a las fuentes.
5735
5736La lista de parches debe ser incondicional. En particular, no puede depender
5737del varlo de @code{%current-system} o @code{%current-target-system}.
5738
5739@item @code{snippet} (predeterminado: @code{#f})
5740Una expresión-G (@pxref{Expresiones-G}) o expresión-S que se ejecutará en el
5741directorio de fuentes. Esta es una forma conveniente de modificar el
5742software, a veces más que un parche.
5743
5744@item @code{patch-flags} (predeterminadas: @code{'("-p1")})
5745Una lista de opciones de línea de órdenes que deberían ser pasadas a la
5746orden @code{patch}.
5747
5748@item @code{patch-inputs} (predeterminada: @code{#f})
5749Paquetes o derivaciones de entrada al proceso de aplicación de los
5750parches. Cuando es @code{#f}, se proporciona el conjunto habitual de
5751entradas necesarias para la aplicación de parches, como GNU@tie{}Patch.
5752
5753@item @code{modules} (predeterminados: @code{'()})
5754Una lista de módulos Guile que debe ser cargada durante el proceso de
5755aplicación de parches y mientras se ejecuta el código del campo
5756@code{snippet}.
5757
5758@item @code{patch-guile} (predeterminado: @code{#f})
5759El paquete Guile que debe ser usado durante la aplicación de parches. Cuando
5760es @code{#f} se usa un valor predeterminado.
5761@end table
5762@end deftp
5763
5764
5765@node Sistemas de construcción
5766@section Sistemas de construcción
5767
5768@cindex sistema de construcción
5769Cada definición de paquete especifica un @dfn{sistema de construcción} y
5770parámetros para dicho sistema de construcción (@pxref{Definición de paquetes}). Este campo @code{build-system} representa el procedimiento de
5771construcción del paquete, así como las dependencias implícitas de dicho
5772procedimiento de construcción.
5773
5774Los sistemas de construcción son objetos @code{<build-system>}. La interfaz
5775para crear y manipularlos se proporciona en el módulo @code{(guix
5776build-system)}, y otros módulos exportan sistemas de construcción reales.
5777
5778@cindex bag (representación de paquetes de bajo nivel)
5779En su implementación, los sistemas de construcción primero compilan los
5780objetos package a objetos @dfn{bag}. Una bolsa (traducción de @dfn{bag}) es
5781como un paquete, pero con menos ornamentos---en otras palabras, una bolsa es
5782una representación a un nivel más bajo de un paquete, que contiene todas las
5783entradas de dicho paquete, incluyendo algunas implícitamente añadidas por el
5784sistema de construcción. Esta representación intermedia se compila entonces
5785a una derivación (@pxref{Derivaciones}).
5786
5787Los sistemas de construcción aceptan una lista opcional de
5788@dfn{parámetros}. En las definiciones de paquete, estos son pasados @i{vía}
5789el campo @code{arguments} (@pxref{Definición de paquetes}). Normalmente son
5790parámetros con palabras clave (@pxref{Optional Arguments, keyword arguments
5791in Guile,, guile, GNU Guile Reference Manual}). El valor de estos parámetros
5792normalmente se evalúa en la @dfn{capa de construcción}---es decir, por un
5793proceso Guile lanzado por el daemon (@pxref{Derivaciones}).
5794
5795El sistema de construcción principal es @var{gnu-build-system}, el cual
5796implementa el procedimiento estándar de construcción para GNU y muchos otros
5797paquetes. Se proporciona por el módulo @code{(guix build-system gnu)}.
5798
5799@defvr {Variable Scheme} gnu-build-system
5800@var{gnu-build-system} representa el sistema de construcción GNU y sus
5801variantes (@pxref{Configuration, configuration and makefile conventions,,
5802standards, GNU Coding Standards}).
5803
5804@cindex fases de construcción
5805En resumen, los paquetes que lo usan se configuran, construyen e instalan
5806con la habitual secuencia de órdenes @code{./configure && make && make check
5807&& make install}. En la práctica, algunos pasos adicionales son necesarios
5808habitualmente. Todos estos pasos se dividen en @dfn{fases} separadas,
5809notablemente@footnote{Rogamos que se inspeccionen los módulos @code{(guix
5810build gnu-build-system)} para más detalles sobre las fases de construcción}:
5811
5812@table @code
5813@item unpack
5814Extrae el archivador tar de la fuente, y cambia el directorio actual al
5815directorio recién extraído. Si la fuente es realmente un directorio, lo
5816copia al árbol de construcción y entra en ese directorio.
5817
5818@item patch-source-shebangs
5819Sustituye secuencias ``#!'' encontradas al inicio de los ficheros de fuentes
5820para que hagan referencia a los nombres correctos de ficheros del
5821almacén. Por ejemplo, esto cambia @code{#!/bin/sh} por
5822@code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}.
5823
5824@item configure
5825Ejecuta el guión @file{configure} con algunas opciones predeterminadas, como
5826@code{--prefix=/gnu/store/@dots{}}, así como las opciones especificadas por
5827el parámetro @code{#:configure-flags}.
5828
5829@item build
5830Ejecuta @code{make} con la lista de opciones especificadas en
5831@code{#:make-flags}. Si el parámetro @code{#:parallel-build?} es verdadero
5832(por defecto), construye con @code{make -j}.
5833
5834@item check
5835Ejecuta @code{make check}, u otro objetivo especificado con
5836@code{#:test-target}, a menos que se pasase @code{#:tests? #f}. Si el
5837parámetro @code{#:parallel-tests?} es verdadero (por defecto), ejecuta
5838@code{make check -j}.
5839
5840@item install
5841Ejecuta @code{make install} con las opciones enumeradas en
5842@code{#:make-flags}.
5843
5844@item patch-shebangs
5845Sustituye las secuencias ``#!'' en los ficheros ejecutables instalados.
5846
5847@item strip
5848Extrae los símbolos de depuración de ficheros ELF (a menos que el valor de
5849@code{#:strip-binaries?} sea falso), copiandolos a la salida @code{debug}
5850cuando esté disponible (@pxref{Instalación de ficheros de depuración}).
5851@end table
5852
5853@vindex %standard-phases
5854El módulo del lado de construcción @code{(guix build gnu-build-system)}
5855define @var{%standard-phases} como la lista predeterminada de fases de
5856construcción. @var{%standard-phases} es una lista de pares
5857símbolo/procedimiento, donde el procedimiento implementa la fase real.
5858
5859La lista de fases usadas para un paquete particular se puede cambiar con el
5860parámetro @code{#:phases}. Por ejemplo, pasar:
5861
5862@example
5863#:phases (modify-phases %standard-phases (delete 'configure))
5864@end example
5865
5866significa que todas las fases descritas anteriormente serán usadas, excepto
5867la fase @code{configure}.
5868
5869Además, este sistema de construcción asegura que el entorno ``estándar''
5870para paquetes GNU está disponible. Esto incluye herramientas como GCC, libc,
5871Coreutils, Bash, Make, Diffutils, grep y sed (vea el módulo @code{(guix
5872build system gnu)} para una lista completa). A estas las llamamos las
5873@dfn{entradas implícitas} de un paquete, porque las definiciones de paquete
5874no las mencionan.
5875@end defvr
5876
5877Se han definido otros objetos @code{<build-system>} para implementar otras
5878convenciones y herramientas usadas por paquetes de software libre. Heredan
5879la mayor parte de @var{gnu-build-system}, y se diferencian principalmente en
5880el conjunto de entradas implícitamente añadidas al proceso de construcción,
5881y en la lista de fases ejecutadas. Algunos de estos sistemas de construcción
5882se enumeran a continuación.
5883
5884@defvr {Variable Scheme} ant-build-system
5885@code{(guix build-system ant)} exporta esta variable. Implementa el
5886procedimiento de construcción de paquetes Java que pueden construirse con
5887@url{http://ant.apache.org/, la herramienta de construcción Ant}.
5888
5889Añade tanto @code{ant} como el @dfn{kit de desarrollo Java} (JDK), que
5890proporciona el paquete @code{icedtea}, al conjunto de entradas. Se pueden
5891especificar paquetes diferentes con los parámetros @code{#:ant} y
5892@code{#:jdk}, respectivamente.
5893
5894Cuando el paquete original no proporciona un fichero Ant apropiado, el
5895parámetro @code{#:jar-name} puede usarse para generar un fichero de
5896construcción Ant @file{build.xml} mínimo con tareas para construir el
5897archivo jar especificado. En este caso, el parámetro @code{#:source-dir} se
5898puede usar para especificar el subdirectorio de fuentes, con ``src'' como
5899valor predeterminado.
5900
5901El parámetro @code{#:main-class} puede usarse con el fichero de construcción
5902Ant mínimo para especificar la clase main del archivo jar producido. Esto
5903permite ejecutar el archivo jar. El parámetro @code{#:test-include} puede
5904usarse para especificar la lista de tests junit a ejecutar. El valor
5905predeterminado es @code{(list "**/*Test.java")}. @code{#:test-exclude} puede
5906usarse para desactivar algunas pruebas. Su valor predeterminado es
5907@code{(list "**/Abstract*.java")} ya que las clases abstractas no se pueden
5908ejecutar como pruebas.
5909
5910El parámetro @code{#:build-target} se puede usar para especificar la tarea
5911Ant que debe ser ejecutada durante la fase @code{build}. Por defecto se
5912ejecuta la tarea ``jar''.
5913
5914@end defvr
5915
5916@defvr {Variable Scheme} androd-ndk-build-system
5917@cindex distribución Android
5918@cindex Sistema de construcción NDK de Android
5919Esta variable es exportada por @code{(guix build-system
5920android-ndk)}. Implementa un procedimiento de construcción para paquetes
5921Android NDK (kit de desarrollo nativo) usando un proceso de construcción
5922específico de Guix.
5923
5924El sistema de construcción asume que los paquetes instalan sus ficheros de
5925interfaz pública (cabeceras) en el subdirectorio "include" de la salida
5926"out" y sus bibliotecas en el subdirectorio "lib" de la salida "out".
5927
5928También se asume que la unión de todas las dependencias de un paquete no
5929tiene ficheros en conflicto.
5930
5931En este momento no funciona la compilación cruzada - por lo que las
5932bibliotecas y los ficheros de cabecera se asumen que son locales.
5933
5934@end defvr
5935
5936@defvr {Variable Scheme} asdf-build-system/source
5937@defvrx {Variable Scheme} asdf-build-system/sbcl
5938@defvrx {Variable Scheme} asdf-build-system/ecl
5939
5940Estas variables, exportadas por @code{(guix build-system asdf)}, implementan
5941procedimientos de construcción para paquetes Common Lisp usando
5942@url{https://common-lisp.net/project/asdf, ``ASDF'''}. ASDF es una utilidad
5943de definición de sistema para programas y bibliotecas Common Lisp.
5944
5945El sistema @code{asdf-build-system/source} instala los paquetes en forma de
5946fuentes, y puede ser cargado usando cualquier implementación common lisp,
5947vía ASDF. Los otros, como @code{asdf-build-system/sbcl}, instalan sistemas
5948binarios en el formato entendido por una implementación particular. Estos
5949sistemas de construcción también pueden usarse para producir programas
5950ejecutables, o imágenes lisp que contengan un conjunto precargado de
5951paquetes.
5952
5953El sistema de construcción usa convenciones de nombres. Para paquetes
5954binarios, el paquete debería estar prefijado con la implementación lisp,
5955como @code{sbcl-} para @code{asdf-build-system/sbcl}.
5956
5957Adicionalmente, el paquete de fuentes correspondiente debe etiquetarse
5958usando la misma convención que los paquetes python (vea @ref{Módulos Python}), usando el prefijo @code{cl-}.
5959
5960Para paquetes binarios, cada sistema debe definirse como un paquete Guix. Si
5961el campo @code{origin} de un paquete contiene varios sistemas, las
5962variaciones del paquete pueden crearse para construir todos los
5963sistemas. Los paquetes de fuentes, los cuales usan
5964@code{asdf-build-system/source}, pueden contener varios sistemas.
5965
5966Para crear programa ejecutables e imágenes, se pueden usar los
5967procedimientos del lado de construcción @code{build-program} y
5968@code{build-image}. Deben llamarse en la fase de construcción después de la
5969fase @code{create-symlinks}, de modo que el sistema recién construido pueda
5970ser usado dentro de la imagen resultante. @code{build-program} necesita una
5971lista de expresiones Common Lisp a través del parámetro
5972@code{#:entry-prgogram}.
5973
5974Si el sistema no está definido en su propio fichero @code{.asd} del mismo
5975nombre, entonces se debe usar el parámetro @code{#:asd-file} para
5976especificar el fichero en el que se define el sistema. Más allá, si el
5977paquete define un sistema para sus pruebas en su fichero separado, se
5978cargará antes de la ejecución de las pruebas si se especifica el parámetro
5979@code{#:test-asd-file}. Si no se especifica, se probarán si existen los
5980ficheros @code{<sistema>-tests.asd}, @code{<system>-test.asd},
5981@code{tests.asd} y @code{test.asd}.
5982
5983Si por alguna razón el paquete debe ser nombrado de una forma diferente a la
5984sugerida por las convenciones de nombres, el parámetro
5985@code{#:asd-system-name} puede usarse para especificar el nombre del
5986sistema.
5987
5988@end defvr
5989
5990@defvr {Variable Scheme} cargo-build-system
5991@cindex lenguaje de programación Rust
5992@cindex Cargo (sistema de construcción de Rust)
5993Esta variable se exporta en @code{(guix build-system cargo)}. Permite la
5994construcción de paquetes usando Cargo, la herramienta de construcción del
5995@uref{https://www.rust-lang.org, lenguaje de programación Rust}.
5996
5997En su fase @code{configure}, este sistema de construcción substituye las
5998dependencias especificadas en el fichero @file{Cargo.toml} con entradas a
5999los paquetes Guix. La fase @code{install} instala los binarios, y también
6000instala el código fuente y el fichero @file{Cargo.toml}.
6001@end defvr
6002
6003@cindex Clojure (lenguaje de programación)
6004@cindex sistema de construcción simple de Clojure
6005@defvr {Variable Scheme} clojure-build-system
6006Esta variable se exporta en @code{(guix build-system clojure)}. Implementa
6007un procedimiento de construcción simple para paquetes
6008@uref{https://clojure.org/, Clojure} usando directamente @code{compile} en
6009Clojure. La compilación cruzada no está disponible todavía.
6010
6011Añade @code{clojure}, @code{icedtea} y @code{zip} al conjunto de
6012entradas. Se pueden especificar paquetes diferentes con los parámetros
6013@code{#:clojure}, @code{#:jdk} y @code{#:zip}, respectivamente.
6014
6015Una lista de directorios de fuentes, directorios de pruebas y nombres de jar
6016pueden especificarse con los parámetros @code{#:source-dirs},
6017@code{#:test-dirs} y @code{#:jar-names}, respectivamente. El directorio de
6018compilación y la clase principal pueden especificarse con los parámetros
6019@code{#:compile-dir} y @code{#:main-class}, respectivamente. Otros
6020parámetros se documentan más adelante.
6021
6022Este sistema de construcción es una extensión de @var{ant-build-system},
6023pero con las siguientes fases cambiadas:
6024
6025@table @code
6026
6027@item build
6028Esta fase llama @code{compile} en Clojure para compilar los ficheros de
6029fuentes y ejecuta @command{jar} para crear archivadores jar tanto de
6030ficheros de fuentes y compilados de acuerdo con las listas de inclusión y
6031exclusión especificadas en @code{#:aot-include} y @code{#:aot-exclude},
6032respectivamente. La lista de exclusión tiene prioridad sobre la de
6033inclusión. Estas listas consisten en símbolos que representan bibliotecas
6034Clojure o la palabra clave especial @code{#:all} que representa todas las
6035bibliotecas encontradas en los directorios de fuentes. El parámetro
6036@code{#:omit-source?} determina si las fuentes deben incluirse en los
6037archivadores jar.
6038
6039@item check
6040Esta fase ejecuta las pruebas de acuerdo a las listas de inclusión y
6041exclusión especificadas en @code{#:test-include} y @code{#:test-exclude},
6042respectivamente. Sus significados son análogos a los de @code{#:aot-include}
6043y @code{#:aot-exclude}, excepto que la palabra clave especial @code{#:all}
6044designa ahora a todas las bibliotecas Clojure encontradas en los directorios
6045de pruebas. El parámetro @code{#:tests?} determina si se deben ejecutar las
6046pruebas.
6047
6048@item install
6049Esta fase instala todos los archivadores jar construidos previamente.
6050@end table
6051
6052Además de las previas, este sistema de construcción contiene una fase
6053adicional:
6054
6055@table @code
6056
6057@item install-doc
6058Esta fase instala todos los ficheros de nivel superior con un nombre que
6059corresponda con @var{%doc-regex}. Una expresión regular diferente se puede
6060especificar con el parámetro @code{#:doc-regex}. Todos los ficheros dentro
6061(recursivamente) de los directorios de documentación especificados en
6062@code{#:doc-dirs} se instalan también.
6063@end table
6064@end defvr
6065
6066@defvr {Variable Scheme} cmake-build-system
6067Esta variable se exporta en @code{(guix build-system cmake)}. Implementa el
6068procedimiento de construcción para paquetes que usen la
6069@url{http://www.cmake.org, herramienta de construcción CMake}.
6070
6071Automáticamente añade el paquete @code{cmake} al conjunto de entradas. El
6072paquete usado se puede especificar con el parámetro @code{#:cmake}.
6073
6074El parámetro @code{#:configure-flags} se toma como una lista de opciones a
6075pasar a @command{cmake}. El parámetro @code{#:build-type} especifica en
6076términos abstractos las opciones pasadas al compilador; su valor
6077predeterminado es @code{"RelWithDebInfo"} (quiere decir ``modo de entrega
6078con información de depuración''), lo que aproximadamente significa que el
6079código se compila con @code{-O2 -g}, lo cual es el caso predeterminado en
6080paquetes basados en Autoconf.
6081@end defvr
6082
6083@defvr {Variable Scheme} dune-build-system
6084This variable is exported by @code{(guix build-system dune)}. It supports
6085builds of packages using @uref{https://dune.build/, Dune}, a build tool for
6086the OCaml programming language. It is implemented as an extension of the
6087@code{ocaml-build-system} which is described below. As such, the
6088@code{#:ocaml} and @code{#:findlib} parameters can be passed to this build
6089system.
6090
6091Automáticamente añade el paquete @code{dune} al conjunto de entradas. El
6092paquete usado se puede especificar con el parámetro @code{#:dune}.
6093
6094There is no @code{configure} phase because dune packages typically don't
6095need to be configured. The @code{#:build-flags} parameter is taken as a
6096list of flags passed to the @code{dune} command during the build.
6097
6098The @code{#:jbuild?} parameter can be passed to use the @code{jbuild}
6099command instead of the more recent @code{dune} command while building a
6100package. Its default value is @code{#f}.
6101
6102The @code{#:package} parameter can be passed to specify a package name,
6103which is useful when a package contains multiple packages and you want to
6104build only one of them. This is equivalent to passing the @code{-p}
6105argument to @code{dune}.
6106@end defvr
6107
6108@defvr {Variable Scheme} go-build-system
6109Esta variable se exporta en @code{(guix build-system go)}. Implementa el
6110procedimiento de construcción para paquetes Go usando los
6111@url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies,
6112mecanismos de construcción de Go} estándares.
6113
6114Se espera que la usuaria proporcione un valor para el parámetro
6115@code{#:import-path} y, en algunos caso, @code{#:unpack-path}. La
6116@url{https://golang.org/doc/code.html#ImportPaths, ruta de importación}
6117corresponde a la ruta del sistema de ficheros esperada por los guiones de
6118construcción del paquete y los paquetes referenciados, y proporciona una
6119forma de referenciar un paquete Go unívocamente. Está basado típicamente en
6120una combinación de la URI remota del paquete de ficheros de fuente y la
6121estructura jerárquica del sistema de ficheros. En algunos casos, necesitará
6122desempaquetar el código fuente del paquete en una estructura de directorios
6123diferente a la indicada en la ruta de importación, y @code{#:unpack-path}
6124debe usarse en dichos casos.
6125
6126Los paquetes que proporcionan bibliotecas Go deben instalar su código fuente
6127en la salida de la construcción. El parámetro @code{#:install-source?}, cuyo
6128valor por defecto es @code{#t}, controla si se instalará o no el código
6129fuente. Puede proporcionarse @code{#f} en paquetes que proporcionan
6130únicamente ficheros ejecutables.
6131@end defvr
6132
6133@defvr {Variable Scheme} glib-or-gtk-build-system
6134Esta variable se exporta en @code{(guix build-system glib-or-gtk)}. Está
6135pensada para usarse con paquetes que usan GLib o GTK+.
6136
6137Este sistema de construcción añade las siguientes dos fases a las definidas
6138en @var{gnu-build-system}:
6139
6140@table @code
6141@item glib-or-gtk-wrap
6142La fase @code{glib-or-gtk-wrap} se asegura de que los programas en
6143@file{bin/} son capaces de encontrar los ``esquemas'' GLib y los
6144@uref{https://developer.gnome.org/gtk3/stable/gtk-running.html, módulos
6145GTK+}. Esto se consigue recubriendo los programas en guiones de lanzamiento
6146que establecen apropiadamente las variables de entorno @code{GTK_PATH}.
6147
6148Es posible excluir salidas específicas del paquete del proceso de
6149recubrimiento enumerando sus nombres en el parámetro
6150@code{#:glib-org-gtk-wrap-excluded-outputs}. Esto es útil cuando se sabe que
6151una salida no contiene binarios GLib o GTK+, y cuando empaquetar
6152gratuitamente añadiría una dependencia de dicha salida en GLib y GTK+.
6153
6154@item glib-or-gtk-compile-schemas
6155La fase @code{glib-or-gtk-compile-schemas} se asegura que todos los
6156@uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html,
6157esquemas GSettings} o GLib se compilan. La compilación la realiza el
6158programa @command{glib-compile-schemas}. Lo proporciona el paquete
6159@code{glib:bin} que se importa automáticamente por el sistema de
6160construcción. El paquete @code{glib} que proporciona
6161@command{glib-compile-schemas} puede especificarse con el parámetro
6162@code{#:glib}.
6163@end table
6164
6165Ambas fases se ejecutan tras la fase @code{install}.
6166@end defvr
6167
6168@defvr {Variable Scheme} guile-build-system
6169Este sistema de construcción es para paquetes Guile que consisten
6170exclusivamente en código Scheme y son tan simples que no tienen ni siquiera
6171un fichero Makefile, menos un guión @file{configure}. Compila código Scheme
6172usando @command{guild compile} (@pxref{Compilation,,, guile, GNU Guile
6173Reference Manual}) e instala los ficheros @file{.scm} y @file{.go} en el
6174lugar correcto. También instala documentación.
6175
6176Este sistema de construcción permite la compilación cruzada usando la opción
6177@code{--target} de @command{guild compile}.
6178
6179Los paquetes construidos con @code{guile-build-system} deben proporcionar un
6180paquete Guile en su campo @code{native-inputs}.
6181@end defvr
6182
6183@defvr {Variable Scheme} minify-build-system
6184Esta variable se exporta en @code{(guix build-system minify)}. Implementa un
6185procedimiento de minificación para paquetes JavaScript simples.
6186
6187Añade @code{uglify-js} al conjunto de entradas y lo utiliza para comprimir
6188todos los ficheros JavaScript en el directorio @file{src}. Un paquete de
6189minificación diferente puede especificarse con el parámetro
6190@code{#:uglify-js}, pero se espera que el paquete escriba el código
6191minificado en la salida estándar.
6192
6193Cuando los ficheros JavaScript de entrada no se encuentran en el directorio
6194@file{src}, el parámetro @code{#:javascript-files} puede usarse para
6195especificar una lista de nombres de fichero que proporcionar al minificador.
6196@end defvr
6197
6198@defvr {Variable Scheme} ocaml-build-system
6199Esta variable se exporta en @code{(guix build-system ocaml)}. Implementa un
6200procedimiento de construcción para paquetes @uref{https://ocaml.org, OCaml},
6201que consiste en seleccionar el conjunto correcto de órdenes a ejecutar para
6202cada paquete. Los paquetes OCaml pueden esperar la ejecución de muchas
6203ordenes diferentes. Este sistema de construcción probará algunas de ellas.
6204
6205Cuando el paquete tiene un fichero @file{setup.ml} presente en el nivel
6206superior, se ejecuta @code{ocaml setup.ml -configure}, @code{ocaml setup.ml
6207-build} y @code{ocaml setup.ml -install}. El sistema de construcción asumirá
6208que este fichero se generó con @uref{http://oasis.forge.ocamlcore.org/
6209OASIS} y se encargará de establecer el prefijo y la habilitación de las
6210pruebas si no están deshabilitadas. Puede pasar opciones de configuración y
6211construcción con @code{#:configure-flags} y @code{#:build-flags},
6212respectivamente. El parámetro @code{#:test-flags} puede usarse para cambiar
6213el conjunto de opciones usadas para activar las pruebas. El parámetro
6214@code{#:use-make?} puede usarse para ignorar este sistema en las fases de
6215construcción e instalación.
6216
6217Cuando el paquete tiene un fichero @file{configure}, se asume que es un
6218guión de configuración hecho a mano que necesita un formato de parámetros
6219diferente a los del sistema @code{gnu-build-system}. Puede añadir más
6220opciones con el parámetro @code{#:configure-flags}.
6221
6222Cuando el paquete tiene un fichero @file{Makefile} (o @code{#:use-make?} es
6223@code{#t}), será usado y se pueden proporcionar más opciones para las fases
6224de construcción y e instalación con el parámetro @code{#:make-flags}.
6225
6226Por último, algunos paquetes no tienen estos ficheros y usan unas
6227localizaciones de algún modo estándares para su sistema de construcción. En
6228este caso, el sistema de construcción ejecutará @code{ocaml pkg/pkg.ml} o
6229@code{ocaml pkg/build.ml} y se hará cargo de proporcionar la ruta del módulo
6230findlib necesario. Se pueden pasar opciones adicionales con el parámetro
6231@code{#:build-flags}. De la instalación se hace cargo
6232@command{opam-installer}. En este caso, el paquete @code{opam} debe añadirse
6233al campo @code{native-inputs} de la definición del paquete.
6234
6235Fíjese que la mayoría de los paquetes OCaml asumen su instalación en el
6236mismo directorio que OCaml, que no es el comportamiento deseado en guix. En
6237particular, intentarán instalar ficheros @file{.so} en su directorio de
6238módulos, normalmente lo adecuado puesto que es el directorio del compilador
6239de OCaml. No obstante, en guix estas bibliotecas no se pueden encontrar allí
6240y usamos @code{CAML_LD_LIBRARY_PATH}. Esta variable apunta a
6241@file{lib/ocaml/site-lib/stubslibs} y allí es donde las bibliotecas
6242@file{.so} deben instalarse.
6243@end defvr
6244
6245@defvr {Variable Scheme} python-build-system
6246Esta variable se exporta en @code{(guix build-system python)}. Implementa el
6247procedimiento más o menos estándar de construcción usado por paquetes
6248Python, que consiste en la ejecución de @code{python setup.py build} y
6249@code{python setup.py install --prefix=/gnu/store/@dots{}}.
6250
6251Para que instalan programas independientes Python bajo @code{bin/}, se
6252encarga de envolver dichos programas de modo que su variable de entorno
6253@code{PYTHONPATH} apunte a las bibliotecas Python de las que dependen.
6254
6255Se puede especificar el paquete Python usado para llevar a cabo la
6256construcción con el parámetro @code{#:python}. Esta es habitualmente una
6257forma de forzar la construcción de un paquete para una versión específica
6258del intérprete Python, lo que puede ser necesario si el paquete es
6259compatible únicamente con una versión del intérprete.
6260
6261Por defecto guix llama a @code{setup.py} bajo el control de
6262@code{setuptools} de manera similar a @command{pip}. Algunos paquetes no son
6263compatibles con setuptools (y pip), por lo que puede deshabilitar esta
6264configuración estableciendo el parámetro @code{#:use-setuptools} a
6265@code{#f}.
6266@end defvr
6267
6268@defvr {Variable Scheme} perl-build-system
6269Esta variable se exporta en @code{(guix build-system perl)}. Implementa el
6270procedimiento de construcción estándar para paquetes Perl, lo que o bien
6271consiste en la ejecución de @code{perl Build.PL
6272--prefix=/gnu/store/@dots{}}, seguido de @code{Build} y @code{Build
6273install}; o en la ejecución de @code{perl Makefile.PL
6274PREFIX=/gnu/store/@dots{}}, seguida de @code{make} y @code{make install},
6275dependiendo de si @code{Build.PL} o @code{Makefile.PL} están presentes en la
6276distribución del paquete. El primero tiene preferencia si existen tanto
6277@code{Build.PL} como @code{Makefile.PL} en la distribución del paquete. Esta
6278preferencia puede invertirse especificando @code{#t} en el parámetro
6279@code{#:make-maker?}.
6280
6281La invocación inicial de @code{perl Makefile.PL} o @code{perl Build.PL} pasa
6282a su vez las opciones especificadas por los parámetros
6283@code{#:make-maker-flags} o @code{#:module-build-flags}, respectivamente.
6284
6285El paquete Perl usado puede especificarse con @code{#:perl}.
6286@end defvr
6287
6288@defvr {Variable Scheme} r-build-system
6289Esta variable se exporta en @code{(guix build-system r)}. Implementa el
6290procedimiento de construcción usados por paquetes
6291@uref{http://r-project.org, R}, lo que esencialmente es poco más que la
6292ejecución de @code{R CMD INSTALL --library=/gnu/store/@dots{}} en un entorno
6293donde @code{R_LIBS_SITE} contiene las rutas de todos los paquetes R de
6294entrada. Las pruebas se ejecutan tras la instalación usando la función R
6295@code{tools::testInstalledPackage}.
6296@end defvr
6297
6298@defvr {Variable Scheme} rakudo-build-system
6299This variable is exported by @code{(guix build-system rakudo)} It implements
6300the build procedure used by @uref{https://rakudo.org/, Rakudo} for
6301@uref{https://perl6.org/, Perl6} packages. It installs the package to
6302@code{/gnu/store/@dots{}/NAME-VERSION/share/perl6} and installs the
6303binaries, library files and the resources, as well as wrap the files under
6304the @code{bin/} directory. Tests can be skipped by passing @code{#f} to the
6305@code{tests?} parameter.
6306
6307Which rakudo package is used can be specified with @code{rakudo}. Which
6308perl6-tap-harness package used for the tests can be specified with
6309@code{#:prove6} or removed by passing @code{#f} to the @code{with-prove6?}
6310parameter. Which perl6-zef package used for tests and installing can be
6311specified with @code{#:zef} or removed by passing @code{#f} to the
6312@code{with-zef?} parameter.
6313@end defvr
6314
6315@defvr {Variable Scheme} texlive-build-system
6316Esta variable se exporta en @code{(guix build-system texlive)}. Se usa para
6317construir paquetes TeX en modo de procesamiento de lotes con el motor
6318especificado. El sistema de construcción fija la variable @code{TEXINPUTS}
6319para encontrar todos los ficheros de fuentes TeX en las entradas.
6320
6321Por defecto ejecuta @code{luatex} en todos los ficheros que terminan en
6322@code{ins}. Un motor y formato diferente puede especificarse con el
6323parámetro @code{#:tex-format}. Los diferentes objetivos de construcción
6324pueden especificarse con el parámetro @code{#:build-targets}, que espera una
6325lista de nombres de fichero. El sistema de construcción añade únicamente
6326@code{texlive-bin} y @code{texlive-latex-base} (ambos desde @code{(gnu
6327packages tex)} a las entradas. Ambos pueden forzarse con los parámetros
6328@code{#:texlive-bin} y @code{#:texlive-latex-base} respectivamente.
6329
6330El parámetro @code{#:tex-directory} le dice al sistema de construcción dónde
6331instalar los ficheros construidos bajo el árbol texmf.
6332@end defvr
6333
6334@defvr {Variable Scheme} ruby-build-system
6335Esta variable se exporta en @code{(guix build-system ruby)}. Implementa el
6336procedimiento de construcción de RubyGems usado por los paquetes Ruby, que
6337implica la ejecución de @code{gem build} seguida de @code{gem install}.
6338
6339El campo @code{source} de un paquete que usa este sistema de construcción
6340típicamente se refiere a un archivo gem, ya que este es el formato usado por
6341las desarrolladoras Ruby cuando publican su software. El sistema de
6342construcción desempaqueta el archivo gem, potencialmente parchea las
6343fuentes, ejecuta la batería de pruebas, vuelve a empaquetar el archivo gem y
6344lo instala. Adicionalmente, directorios y archivadores tar pueden
6345referenciarse para permitir la construcción de archivos gem no publicados
6346desde Git o un archivador tar de publicación de fuentes tradicional.
6347
6348Se puede especificar el paquete Ruby usado mediante el parámetro
6349@code{#:ruby}. Una lista de opciones adicionales pueden pasarse a la orden
6350@command{gem} en el parámetro @code{#:gem-flags}.
6351@end defvr
6352
6353@defvr {Variable Scheme} waf-build-system
6354Esta variable se exporta en @code{(guix build-system waf)}. Implementa un
6355procedimiento de construcción alrededor del guión @code{waf}. Las fases
6356comunes---@code{configure}, @code{build} y @code{install}---se implementan
6357pasando sus nombres como parámetros al guión @code{waf}.
6358
6359El guión @code{waf} es ejecutado por el intérprete Python. El paquete Python
6360usado para la ejecución puede ser especificado con el parámetro
6361@code{#:python}.
6362@end defvr
6363
6364@defvr {Variable Scheme} scons-build-system
6365Esta variable se exporta en @code{(guix build-system scons)}. Implementa en
6366procedimiento de construcción usado por la herramienta de construcción de
6367software SCons. Este sistema de construcción ejecuta @code{scons} para
6368construir el paquete, @code{scons test} para ejecutar las pruebas y después
6369@code{scons install} para instalar el paquete.
6370
6371Las opciones adicionales a pasar a @code{scons} se pueden especificar con el
6372parámetro @code{#:scons-flags}. La versión de Python usada para ejecutar
6373SCons puede especificarse seleccionando el paquete SCons apropiado con el
6374parámetro @code{#:scons}.
6375@end defvr
6376
6377@defvr {Variable Scheme} haskell-build-system
6378Esta variable se exporta en @code{(guix build-system haskell)}. Implementa
6379el procedimiento de construcción Cabal usado por paquetes Haskell, el cual
6380implica la ejecución de @code{runhaskell Setup.hs configure
6381--prefix=/gnu/store/@dots{}} y @code{runhaskell Setup.hs build}. En vez de
6382instalar el paquete ejecutando @code{runhaskell Setup.hs install}, para
6383evitar el intento de registro de bibliotecas en el directorio de
6384solo-lectura del compilador en el almacén, el sistema de construcción usa
6385@code{runhaskell Setup.hs copy}, seguido de @code{runhaskell Setup.hs
6386register}. Además, el sistema de construcción genera la documentación del
6387paquete ejecutando @code{runhaskell Setup.hs haddock}, a menos que se pasase
6388@code{#:haddock? #f}. Parámetros opcionales de Haddock pueden proporcionarse
6389con la ayuda del parámetro @code{#:haddock-flags}. Si el fichero
6390@code{Setup.hs} no es encontrado, el sistema de construcción busca
6391@code{Setup.lhs} a su vez.
6392
6393El compilador Haskell usado puede especificarse con el parámetro
6394@code{#:haskell} cuyo valor predeterminado es @code{ghc}.
6395@end defvr
6396
6397@defvr {Variable Scheme} dub-build-system
6398Esta variable se exporta en @code{(guix build-system dub)}. Implementa el
6399procedimiento de construcción Dub usado por los paquetes D, que implica la
6400ejecución de @code{dub build} y @code{dub run}. La instalación se lleva a
6401cabo con la copia manual de los ficheros.
6402
6403El compilador D usado puede ser especificado con el parámetro @code{#:ldc}
6404cuyo valor predeterminado es @code{ldc}.
6405@end defvr
6406
6407@defvr {Variable Scheme} emacs-build-system
6408Esta variable se exporta en @code{(guix build-system emacs)}. Implementa un
6409procedimiento de instalación similar al propio sistema de empaquetado de
6410Emacs (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
6411
6412Primero crea el fichero @code{@var{paquete}-autoloads.el}, tras lo que
6413compila todos los ficheros Emacs Lisp. De manera diferente al sistema de
6414paquetes de Emacs, los ficheros de documentación Info se mueven al
6415directorio estándar de documentación y se borra el fichero @file{dir}. Cada
6416paquete se instala en su propio directorio bajo
6417@file{share/emacs/site-lisp/guix.d}.
6418@end defvr
6419
6420@defvr {Variable Scheme} font-build-system
6421Esta variable se exporta en @code{(guix build-system font)}. Implementa un
6422procedimiento de instalación para paquetes de fuentes donde las proveedoras
6423originales proporcionan ficheros de tipografía TrueType, OpenType, etc.@:
6424precompilados que simplemente necesitan copiarse en su lugar. Copia los
6425ficheros de tipografías a las localizaciones estándar en el directorio de
6426salida.
6427@end defvr
6428
6429@defvr {Variable Scheme} meson-build-system
6430Esta variable se exporta en @code{(guix build-system meson)}. Implementa el
6431procedimiento de construcción para paquetes que usan
6432@url{http://mesonbuild.com, Meson} como su sistema de construcción.
6433
6434Añade Meson y @uref{https://ninja-build.org/, Ninja} al conjunto de
6435entradas, y pueden cambiarse con los parámetros @code{#:meson} y
6436@code{#:ninja} en caso necesario. La versión de Meson predeterminada es
6437@code{meson-for-build}, la cual es especial puesto que no limpia el
6438@code{RUNPATH} de los binarios y bibliotecas durante la instalación.
6439
6440Este sistema de construcción es una extensión de @var{gnu-build-system},
6441pero con las siguientes fases cambiadas por otras específicas para Meson.
6442
6443@table @code
6444
6445@item configure
6446Esta fase ejecuta @code{meson} con las opciones especificadas en
6447@code{#:configure-flags}. La opción @code{--build-type} siempre se fija a
6448@code{plain} a menos que se especifique algo distinto en
6449@code{#:build-type}.
6450
6451@item build
6452Esta fase ejecuta @code{ninja} para construir el paquete en paralelo por
6453defecto, pero esto puede cambiarse con @code{#:parallel-build?}.
6454
6455@item check
6456Esta fase ejecuta @code{ninja} con el objetivo especificado en
6457@code{#:test-target}, cuyo valor predeterminado es @code{"test"}.
6458
6459@item install
6460Esta fase ejecuta @code{ninja install} y no puede cambiarse.
6461@end table
6462
6463Aparte de estas, el sistema de ejecución también añade las siguientes fases:
6464
6465@table @code
6466
6467@item fix-runpath
6468Esta fase se asegura de que todos los binarios pueden encontrar las
6469bibliotecas que necesitan. Busca las bibliotecas necesarias en
6470subdirectorios del paquete en construcción, y añade estas a @code{RUNPATH}
6471en caso necesario. También elimina referencias a bibliotecas introducidas en
6472la fase de construcción por @code{meson-for-build}, como las dependencias de
6473las pruebas, que no se necesitan realmente para la ejecución del programa.
6474
6475@item glib-or-gtk-wrap
6476Esta fase es la fase proporcionada por @code{glib-or-gtk-build-system}, y no
6477está activa por defecto. Puede activarse con @code{#:glib-or-gtk}.
6478
6479@item glib-or-gtk-compile-schemas
6480Esta fase es la fase proporcionada por @code{glib-or-gtk-build-system}, y no
6481está activa por defecto. Puede activarse con @code{#:glib-or-gtk}.
6482@end table
6483@end defvr
6484
6485@defvr {Scheme Variable} linux-module-build-system
6486@var{linux-module-build-system} allows building Linux kernel modules.
6487
6488@cindex fases de construcción
6489This build system is an extension of @var{gnu-build-system}, but with the
6490following phases changed:
6491
6492@table @code
6493
6494@item configure
6495This phase configures the environment so that the Linux kernel's Makefile
6496can be used to build the external kernel module.
6497
6498@item build
6499This phase uses the Linux kernel's Makefile in order to build the external
6500kernel module.
6501
6502@item install
6503This phase uses the Linux kernel's Makefile in order to install the external
6504kernel module.
6505@end table
6506
6507It is possible and useful to specify the Linux kernel to use for building
6508the module (in the "arguments" form of a package using the
6509linux-module-build-system, use the key #:linux to specify it).
6510@end defvr
6511
6512Por último, para paquetes que no necesiten nada tan sofisticado se
6513proporciona un sistema de construcción ``trivial''. Es trivial en el sentido
6514de que no proporciona prácticamente funcionalidad: no incorpora entradas
6515implícitas y no tiene una noción de fases de construcción.
6516
6517@defvr {Variable Scheme} trivial-build-system
6518Esta variable se exporta en @code{(guix build-system trivial)}.
6519
6520Este sistema de construcción necesita un parámetro @code{#:builder}. Este
6521parámetro debe ser una expresión Scheme que construya la(s) salida(s) del
6522paquete---como en @code{build-expression->derivation} (@pxref{Derivaciones,
6523@code{build-expression->derivation}}).
6524@end defvr
6525
6526@node El almacén
6527@section El almacén
6528
6529@cindex almacén
6530@cindex elementos del almacén
6531@cindex rutas del almacén
6532
6533Conceptualmente, el @dfn{almacén} es el lugar donde se almacenan las
6534derivaciones cuya construcción fue satisfactoria---por defecto,
6535@file{/gnu/store}. Los subdirectorios en el almacén se denominan
6536@dfn{elementos del almacén} o @dfn{rutas del almacén} en ocasiones. El
6537almacén tiene una base de datos asociada que contiene información como las
6538rutas del almacén a las que referencia cada ruta del almacén, y la lista de
6539elementos @emph{válidos} del almacén---los resultados de las construcciones
6540satisfactorias. Esta base de datos reside en
6541@file{@var{localstatedir}/guix/db}, donde @var{localstatedir} es el
6542directorio de estado especificado @i{vía} @option{--localstatedir} en tiempo
6543de configuración, normalmente @file{/var}.
6544
6545El almacén @emph{siempre} es accedido a través del daemon en delegación de
6546sus clientes (@pxref{Invocación de guix-daemon}). Para manipular el almacén, los
6547clientes se conectan al daemon por un socket de dominio Unix, le envían
6548peticiones y leen el resultado---esto son llamadas a procedimientos remotos,
6549o RPC.
6550
6551@quotation Nota
6552Las usuarias @emph{nunca} deben modificar ficheros directamente bajo el
6553directorio @file{/gnu/store}. Esto llevaría a inconsistencias y rompería las
6554premisas de inmutabilidad del modelo funcional de Guix
6555(@pxref{Introducción}).
6556
6557@xref{Invocación de guix gc, @command{guix gc --verify}}, para información sobre
6558cómo comprobar la integridad del almacén e intentar recuperarse de
6559modificaciones accidentales.
6560@end quotation
6561
6562El módulo @code{(guix store)} proporciona procedimientos para conectarse al
6563daemon y realizar RPCs. Estos se describen más adelante. Por defecto,
6564@code{open-connection}, y por tanto todas las órdenes @command{guix}, se
6565conectan al daemon local o a la URI especificada en la variable de entorno
6566@code{GUIX_DAEMON_SOCKET}.
6567
6568@defvr {Variable de entorno} GUIX_DAEMON_SOCKET
6569Cuando se ha definido, el valor de esta variable debe ser un nombre de
6570fichero o una URI designando el punto de conexión del daemon. Cuando es un
6571nombre de fichero, denota un socket de dominio Unix al que
6572conectarse. Además de nombres de ficheros, los esquemas de URI aceptados
6573son:
6574
6575@table @code
6576@item file
6577@itemx unix
6578Estos son equivalentes a los sockets de dominio
6579Unix. @code{file:///var/guix/daemon-socket/socket} es equivalente a
6580@file{/var/guix/daemon-socket/socket}.
6581
6582@item guix
6583@cindex daemon, acceso remoto
6584@cindex acceso remoto al daemon
6585@cindex daemon, configuración en cluster
6586@cindex daemon, configuración en cluster
6587Estas URI denotan conexiones sobre TCP/IP, sin cifrado ni verificación de la
6588máquina remota. La URI debe especificar el nombre de máquina y opcionalmente
6589un número de puerto (por defecto se usa el puerto 44146):
6590
6591@example
6592guix://principal.guix.example.org:1234
6593@end example
6594
6595Esta configuración es apropiada para redes locales, como clusters, donde
6596únicamente los nodos de confianza pueden conectarse al daemon de
6597construcción en @code{principal.guix.example.org}.
6598
6599La opción @code{--listen} de @command{guix-daemon} puede usarse para
6600indicarle que escuche conexiones TCP (@pxref{Invocación de guix-daemon,
6601@code{--listen}}).
6602
6603@item ssh
6604@cindex acceso SSH a los daemons de construcción
6605Estas URI le permiten conectarse a un daemon remoto sobre SSH@footnote{Esta
6606característica necesita Guile-SSH (@pxref{Requisitos}).}. Una URL típica
6607debería ser algo así:
6608
6609@example
6610ssh://carlos@@guix.example.org:22
6611@end example
6612
6613Como con @command{guix copy}, se tienen en cuenta los ficheros habituales de
6614configuración del cliente OpenSSH (@pxref{Invocación de guix copy}).
6615@end table
6616
6617Esquemas URI adicionales pueden ser aceptados en el futuro.
6618
6619@c XXX: Remove this note when the protocol incurs fewer round trips
6620@c and when (guix derivations) no longer relies on file system access.
6621@quotation Nota
6622La conexión con daemon de construcción remotos se considera experimental en
6623@value{VERSION}. Por favor, contacte con nosotras para compartir cualquier
6624problema o sugerencias que pueda tener (@pxref{Contribuir}).
6625@end quotation
6626@end defvr
6627
6628@deffn {Procedimiento Scheme} open-connection [@var{uri}] [#:reserve-space? #t]
6629Abre una conexión al daemon a través del socket de dominio Unix apuntado por
6630@var{uri} (una cadena). Cuando @var{reserve-space?} es verdadero, le indica
6631que reserve un poco de espacio extra en el sistema de ficheros de modo que
6632el recolector de basura pueda operar incluso cuando el disco se
6633llene. Devuelve un objeto servidor.
6634
6635El valor por defecto de @var{uri} es @var{%default-socket-path}, que ese la
6636ruta esperada según las opciones pasadas a @code{configure}.
6637@end deffn
6638
6639@deffn {Procedimiento Scheme} close-connection @var{servidor}
6640Cierra la conexión al @var{servidor}.
6641@end deffn
6642
6643@defvr {Variable Scheme} current-build-output-port
6644Esta variable está enlazada a un parámetro SRFI-39, que referencia al puerto
6645donde los logs de construcción y error enviados por el daemon deben
6646escribirse.
6647@end defvr
6648
6649Los procedimientos que realizan RPCs toman todos como primer parámetro un
6650objeto servidor.
6651
6652@deffn {Procedimiento Scheme} valid-path? @var{servidor} @var{ruta}
6653@cindex elementos inválidos del almacén
6654Devuelve @code{#t} cuando @var{ruta} designa un elemento válido del almacén
6655y @code{#f} en otro caso (un elemento no-válido puede existir en el disco
6656pero aun así no ser válido, por ejemlo debido a que es el resultado de una
6657construcción interumpida o fallida).
6658
6659Una condición @code{&store-protocol-error} se eleva si @var{ruta} no
6660contiene como prefijo el directorio del almacén (@file{/gnu/store}).
6661@end deffn
6662
6663@deffn {Procedimiento Scheme} add-text-to-store @var{servidor} @var{nombre} @var{texto} [@var{referencias}]
6664Añade @var{texto} bajo el fichero @var{nombre} en el almacén, y devuelve su
6665ruta en el almacén. @var{referencias} es la lista de rutas del almacén
6666referenciadas por la ruta del almacén resultante.
6667@end deffn
6668
6669@deffn {Procedimiento Scheme} build-derivations @var{servidor} @var{derivaciones}
6670Construye @var{derivaciones} (una lista de objetos @code{<derivation>} o
6671rutas de derivaciones) y devuelve el control cuando se termina de
6672construirlas. Devuelve @code{#t} en caso de éxito.
6673@end deffn
6674
6675Fijese que el módulo @code{(guix monads)} proporciona una mónada así como
6676versiones monádicas de los procedimientos previos, con el objetivo de hacer
6677más conveniente el trabajo con código que accede al almacén (@pxref{La mónada del almacén}).
6678
6679@c FIXME
6680@i{Esta sección actualmente está incompleta.}
6681
6682@node Derivaciones
6683@section Derivaciones
6684
6685@cindex derivaciones
6686Las acciones de construcción a bajo nivel y el entorno en el que se realizan
6687se representan mediante @dfn{derivaciones}. Una derivación contiene las
6688siguientes piezas de información:
6689
6690@itemize
6691@item
6692Las salidas de la derivación---las derivaciones producen al menos un fichero
6693o directorio en el almacén, pero pueden producir más.
6694
6695@item
6696@cindex tiempo de construcción, dependencias
6697@cindex dependencias, tiempo de construcción
6698Las entradas de las derivaciones---es decir, sus dependencias de tiempo de
6699construcción---, que pueden ser otras derivaciones o simples ficheros en el
6700almacén (parches, guiones de construcción, etc.).
6701
6702@item
6703El tipo de sistema objetivo de la derivación---por ejemplo,
6704@code{x86_64-linux}.
6705
6706@item
6707El nombre de fichero del guión de construcción en el almacén, junto a los
6708parámetros que se le deben pasar.
6709
6710@item
6711Una lista de variables de entorno a ser definidas.
6712
6713@end itemize
6714
6715@cindex ruta de derivación
6716Las derivaciones permiten a los clientes del daemon comunicar acciones de
6717construcción al almacén. Existen en dos formas: como una representación en
6718memoria, tanto en el lado del cliente como el del daemon, y como ficheros en
6719el almacén cuyo nombre termina en @code{.drv}---estos ficheros se conocen
6720como @dfn{rutas de derivación}. Las rutas de derivación pueden pasarse al
6721procedimiento @code{build-derivations} para realizar las acciones de
6722construcción que prescriben (@pxref{El almacén}).
6723
6724@cindex derivaciones de salida fija
6725Operaciones como la descarga de ficheros y las instantáneas de un control de
6726versiones para las cuales el hash del contenido esperado se conoce
6727previamente se modelan como @dfn{derivaciones de salida fija}. Al contrario
6728que las derivaciones normales, las salidas de una derivación de salida fija
6729son independientes de sus entradas---por ejemplo, la descarga del código
6730fuente produce el mismo resultado independientemente del método de descarga
6731y las herramientas usadas.
6732
6733@cindex references
6734@cindex tiempo de ejecución, dependencias
6735@cindex dependencias, tiempo de ejecución
6736The outputs of derivations---i.e., the build results---have a set of
6737@dfn{references}, as reported by the @code{references} RPC or the
6738@command{guix gc --references} command (@pxref{Invocación de guix gc}).
6739References are the set of run-time dependencies of the build results.
6740References are a subset of the inputs of the derivation; this subset is
6741automatically computed by the build daemon by scanning all the files in the
6742outputs.
6743
6744El módulo @code{(guix derivations)} proporciona una representación de
6745derivaciones como objetos Scheme, junto a procedimientos para crear y
6746manipular de otras formas derivaciones. La primitiva de más bajo nivel para
6747crear una derivación es el procedimiento @code{derivation}:
6748
6749@deffn {Procedimiento Scheme} derivation @var{almacén} @var{nombre} @var{constructor} @
6750 @var{args} [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
6751 [#:recursive? #f] [#:inputs '()] [#:env-vars '()] @
6752 [#:system (%current-system)] [#:references-graphs #f] @
6753 [#:allowed-references #f] [#:disallowed-references #f] @
6754 [#:leaked-env-vars #f] [#:local-build? #f] @
6755 [#:substitutable? #t] [#:properties '()]
6756Construye una derivación con los parámetros proporcionados, y devuelve el
6757objeto @code{<derivation>} resultante.
6758
6759Cuando se proporcionan @var{hash} y @var{hash-algo}, una @dfn{derivación de
6760salida fija} se crea---es decir, una cuyo resultado se conoce de antemano,
6761como la descarga de un fichero. Si, además, @var{recursive?} es verdadero,
6762entonces la salida fijada puede ser un fichero ejecutable o un directorio y
6763@var{hash} debe ser el hash de un archivador que contenga esta salida.
6764
6765Cuando @var{references-graphs} es verdadero, debe ser una lista de pares de
6766nombre de fichero/ruta del almacén. En ese caso, el grafo de referencias de
6767cada ruta del almacén se exporta en el entorno de construcción del fichero
6768correspondiente, en un formato de texto simple.
6769
6770Cuando @var{allowed-references} es verdadero, debe ser una lista de
6771elementos del almacén o salidas a las que puede hacer referencia la salida
6772de la derivación. Del mismo modo, @var{disallowed-references}, en caso de
6773ser verdadero, debe ser una lista de cosas a las que las salidas @emph{no}
6774pueden hacer referencia.
6775
6776Cuando @var{leaked-env-vars} es verdadero, debe ser una lista de cadenas que
6777denoten variables de entorno que se permite ``escapar'' del entorno del
6778daemon al entorno de construcción. Esto es únicamente aplicable a
6779derivaciones de salida fija---es decir, cuando @var{hash} es verdadero. El
6780uso principal es permitir que variables como @code{http_proxy} sean pasadas
6781a las derivaciones que descargan ficheros.
6782
6783Cuando @var{local-build?} es verdadero, declara que la derivación no es una
6784buena candidata para delegación y debe ser construida localmente
6785(@pxref{Configuración de delegación del daemon}). Este es el caso para pequeñas derivaciones
6786donde los costes de transferencia de datos sobrepasarían los beneficios.
6787
6788Cuando @var{substitutable?} es falso, declara que las sustituciones de la
6789salida de la derivación no deben usarse (@pxref{Sustituciones}). Esto es útil,
6790por ejemplo, cuando se construyen paquetes que capturan detalles sobre el
6791conjunto de instrucciones de la CPU anfitriona.
6792
6793@var{properties} debe ser una lista asociada que describe ``propiedades'' de
6794la derivación. Debe mantenerse tal cual, sin interpretar, en la derivación.
6795@end deffn
6796
6797@noindent
6798Esto es un ejemplo con un guión de shell como constructor, asumiendo que
6799@var{almacén} es una conexión abierta al daemon, @var{bash} apunta al
6800ejecutable Bash en el almacén:
6801
6802@lisp
6803(use-modules (guix utils)
6804 (guix store)
6805 (guix derivations))
6806
6807(let ((constructor ; añade el guión de Bash al almacén
6808 (add-text-to-store store "mi-constructor.sh"
6809 "echo hola mundo > $out\n" '())))
6810 (derivation almacen "foo"
6811 bash `("-e" ,builder)
6812 #:inputs `((,bash) (,constructor))
6813 #:env-vars '(("HOME" . "/sindirectorio"))))
6814@result{} #<derivation /gnu/store/@dots{}-foo.drv => /gnu/store/@dots{}-foo>
6815@end lisp
6816
6817Como puede suponerse, el uso directo de esta primitiva es algo
6818enrevesado. Una mejor aproximación es escribir guiones de construcción en
6819Scheme, ¡por supuesto! La mejor forma de hacerlo es escribir el código de
6820construcción como una ``expresión-G'', y pasarla a
6821@code{gexp->derivation}. Para más información, @pxref{Expresiones-G}.
6822
6823En otros tiempos, @code{gexp->derivation} no existía y la creación de
6824derivaciones con código de construcción escrito en Scheme se conseguía con
6825@code{build-expression->derivation}, documentada más adelante. Este
6826procedimiento está ahora obsoleto en favor del procedimiento
6827@code{gexp->derivation} mucho más conveniente.
6828
6829@deffn {Procedimiento Scheme} build-expression->derivation @var{almacén} @
6830 @var{nombre} @var{exp} @
6831 [#:system (%current-system)] [#:inputs '()] @
6832 [#:outputs '("out")] [#:hash #f] [#:hash-algo #f] @
6833 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
6834 [#:references-graphs #f] [#:allowed-references #f] @
6835 [#:disallowed-references #f] @
6836 [#:local-build? #f] [#:substitutable? #t] [#:guile-for-build #f]
6837Devuelve una derivación que ejecuta la expresión Scheme @var{exp} como un
6838constructor para la derivación @var{nombre}. @var{inputs} debe ser una lista
6839de tupletas @code{(nombre ruta-drv sub-drv)}; cuando @var{sub-drv} se omite,
6840se asume @code{"out"}. @var{modules} es una lista de nombres de módulos
6841Guile de la ruta actual de búsqueda a copiar en el almacén, compilados, y
6842poner a disposición en la ruta de carga durante la ejecución de
6843@var{exp}---por ejemplo, @code{((guix build utils) (guix build
6844gnu-build-system))}.
6845
6846@var{exp} se evalúa en un entorno donde @code{%outputs} está asociada a una
6847lista de pares salida/ruta, y donde @code{%build-inputs} está asociada a una
6848lista de pares cadena/ruta-de-salida que provienen de @var{inputs}. De
6849manera opcional, @var{env-vars} es una lista de pares de cadenas que
6850especifican el nombre y el valor de las variables de entorno visibles al
6851constructor. El constructor termina pasando el resultado de @var{exp} a
6852@code{exit}; por tanto, cuando @var{exp} devuelve @code{#f}, la construcción
6853se considera fallida.
6854
6855@var{exp} se construye usando @var{guile-for-build} (una derivación). Cuando
6856@var{guile-for-build} se omite o es @code{#f}, el valor del fluido
6857@code{%guile-for-build} se usa en su lugar.
6858
6859Véase el procedimiento @code{derivation} para el significado de
6860@var{references-graphs}, @var{allowed-references},
6861@var{disallowed-references}, @var{local-build?} y @var{substitutable?}.
6862@end deffn
6863
6864@noindent
6865Aquí está un ejemplo de derivación de salida única que crea un directorio
6866que contiene un fichero:
6867
6868@lisp
6869(let ((constructor '(let ((salida (assoc-ref %outputs "out")))
6870 (mkdir salida) ; crea /gnu/store/@dots{}-goo
6871 (call-with-output-file (string-append salida "/prueba")
6872 (lambda (p)
6873 (display '(hola guix) p))))))
6874 (build-expression->derivation almacen "goo" constructor))
6875
6876@result{} #<derivation /gnu/store/@dots{}-goo.drv => @dots{}>
6877@end lisp
6878
6879
6880@node La mónada del almacén
6881@section La mónada del almacén
6882
6883@cindex mónada
6884
6885Los procedimientos que operan en el almacén descritos en la sección previa
6886toman todos una conexión abierta al daemon de construcción en su primer
6887parámetro. Aunque el modelo subyacente es funcional, tienen o bien efectos
6888secundarios o dependen del estado actual del almacén.
6889
6890Lo anterior es inconveniente: la conexión al daemon de construcción tiene
6891que proporcionarse en todas estas funciones, haciendo imposible la
6892composición de funciones que no toman ese parámetro con funciones que sí lo
6893hacen. Lo último puede ser problemático: ya que las operaciones del almacén
6894tienen efectos secundarios y/o dependen del estado externo, deben ser
6895secuenciadas de manera adecuada.
6896
6897@cindex valores monádicos
6898@cindex funciones monádicas
6899Aquí es donde entra en juego el módulo @code{(guix monads)}. Este módulo
6900proporciona un entorno para trabajar con @dfn{mónadas}, y una mónada
6901particularmente útil para nuestros usos, la @dfn{mónada del almacén}. Las
6902mónadas son una construcción que permite dos cosas: asociar ``contexto'' con
6903valores (en nuestro caso, el contexto es el almacén), y la construcción de
6904secuencias de computaciones (aquí computaciones incluye accesos al
6905almacén). Los valores en una mónada---valores que transportan este contexto
6906adicional---se llaman @dfn{valores monádicos}; los procedimientos que
6907devuelven dichos valores se llaman @dfn{procedimientos monádicos}.
6908
6909Considere este procedimiento ``normal'':
6910
6911@example
6912(define (enlace-sh almacen)
6913 ;; Devuelve una derivación que enlaza el ejecutable 'bash'.
6914 (let* ((drv (package-derivation store bash))
6915 (out (derivation->output-path drv))
6916 (sh (string-append out "/bin/bash")))
6917 (build-expression->derivation store "sh"
6918 `(symlink ,sh %output))))
6919@end example
6920
6921Mediante el uso de @code{(guix monads)} y @code{(guix gexp)}, puede
6922reescribirse como una función monádica:
6923
6924@example
6925(define (enlace-sh)
6926 ;; Lo mismo, pero devuelve un valor monádico.
6927 (mlet %store-monad ((drv (package->derivation bash)))
6928 (gexp->derivation "sh"
6929 #~(symlink (string-append #$drv "/bin/bash")
6930 #$output))))
6931@end example
6932
6933Hay varias cosas a tener en cuenta en la segunda versión: el parámetro
6934@code{store} ahora es implícito y es ``hilado en las llamadas a los
6935procedimientos monádicos @code{package->derivation} y
6936@code{gexp->derivation}, y el valor monádico devuelto por
6937@code{package->derivation} es @dfn{asociado} mediante el uso de @code{mlet}
6938en vez de un simple @code{let}.
6939
6940Al final, la llamada a @code{package->derivation} puede omitirse ya que
6941tendrá lugar implícitamente, como veremos más adelante
6942(@pxref{Expresiones-G}):
6943
6944@example
6945(define (enlace-sh)
6946 (gexp->derivation "sh"
6947 #~(symlink (string-append #$bash "/bin/bash")
6948 #$output)))
6949@end example
6950
6951@c See
6952@c <https://syntaxexclamation.wordpress.com/2014/06/26/escaping-continuations/>
6953@c for the funny quote.
6954La ejecución del procedimiento monádico @code{enlace-para-sh} no tiene
6955ningún efecto. Como alguien dijo una vez, ``sales de una mónada como sales
6956de un edificio en llamas: corriendo'' (run en inglés). Por tanto, para salir
6957de la mónada y obtener el efecto deseado se debe usar @code{run-with-store}:
6958
6959@example
6960(run-with-store (open-connection) (enlace-sh))
6961@result{} /gnu/store/...-enlace-para-sh
6962@end example
6963
6964Fíjese que el módulo @code{(guix monad-repl)} extiende la sesión interactiva
6965de Guile con nuevos ``meta-comandos'' para facilitar el trabajo con
6966procedimientos monádicos: @code{run-in-store} y @code{enter-store-monad}. El
6967primero se usa para ``ejecutar'' un valor monádico único a través del
6968almacén:
6969
6970@example
6971scheme@@(guile-user)> ,run-in-store (package->derivation hello)
6972$1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
6973@end example
6974
6975El último entra en un entorno interactivo recursivo, donde todos los valores
6976devueltos se ejecutan automáticamente a través del almacén:
6977
6978@example
6979scheme@@(guile-user)> ,enter-store-monad
6980store-monad@@(guile-user) [1]> (package->derivation hello)
6981$2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}>
6982store-monad@@(guile-user) [1]> (text-file "foo" "Hello!")
6983$3 = "/gnu/store/@dots{}-foo"
6984store-monad@@(guile-user) [1]> ,q
6985scheme@@(guile-user)>
6986@end example
6987
6988@noindent
6989Fijese que los valores no-monádicos no pueden devolverse en el entorno
6990interactivo @code{store-monad}.
6991
6992Las formas sintácticas principales para tratar con mónadas en general se
6993proporcionan por el módulo @code{(guix monads)} y se describen a
6994continuación.
6995
6996@deffn {Sintaxis Scheme} with-monad @var{mónada} @var{cuerpo} ...
6997Evalua cualquier forma @code{>>=} o @code{return} en @var{cuerpo} como
6998estando en @var{mónada}.
6999@end deffn
7000
7001@deffn {Sintaxis Scheme} return @var{val}
7002Devuelve el valor monádico que encapsula @var{val}.
7003@end deffn
7004
7005@deffn {Sintaxis Scheme} >>= @var{mval} @var{mproc} ...
7006@dfn{Asocia} el valor monádico @var{mval}, pasando su ``contenido'' a los
7007procedimientos monádicos @var{mproc}@dots{}@footnote{Esta operación es
7008habitualmente conocida como ``bind'' (asociación), pero ese nombre denota un
7009procedimiento no relacionado en Guile. Por tanto usamos este símbolo en
7010cierto modo críptico heredado del lenguaje Haskell.}. Puede haber un
7011@var{mproc} o varios, como en este ejemplo:
7012
7013@example
7014(run-with-state
7015 (with-monad %state-monad
7016 (>>= (return 1)
7017 (lambda (x) (return (+ 1 x)))
7018 (lambda (x) (return (* 2 x)))))
7019 'un-estado)
7020
7021@result{} 4
7022@result{} un-estado
7023@end example
7024@end deffn
7025
7026@deffn {Sintaxis Scheme} mlet @var{mónada} ((@var{var} @var{mval}) ...) @
7027 @var{cuerpo} ...
7028@deffnx {Sintaxis Scheme} mlet* @var{mónada} ((@var{var} @var{mval}) ...) @
7029 @var{cuerpo} ... Asocia las variables @var{var} a los valores monádicos
7030@var{mval} en @var{cuerpo}, el cual es una secuencia de expresiones. Como
7031con el operador bind, esto puede pensarse como el ``desempaquetado'' del
7032valor crudo no-monádico dentro del ámbito del @var{cuerpo}. La forma
7033(@var{var} -> @var{val}) asocia @var{var} al valor ``normal'' @var{val},
7034como en @code{let}. Las operaciones de asociación ocurren en secuencia de
7035izquierda a derecha. La última expresión de @var{cuerpo} debe ser una
7036expresión monádica, y su resultado se convertirá en el resultado de
7037@code{mlet} o @code{mlet*} cuando se ejecute en la @var{mónada}.
7038
7039@code{mlet*} es a @code{mlet} lo que @code{let*} es a @code{let}
7040(@pxref{Local Bindings,,, guile, GNU Guile Reference Manual}).
7041@end deffn
7042
7043@deffn {Sistema Scheme} mbegin @var{mónada} @var{mexp} ...
7044Asocia @var{mexp} y las siguientes expresiones monádicas en secuencia,
7045devolviendo el resultado de la última expresión. Cada expresión en la
7046secuencia debe ser una expresión monádica.
7047
7048Esto es similar a @code{mlet}, excepto que los valores devueltos por las
7049expresiones monádicas se ignoran. En ese sentido el funcionamiento es
7050análogo a @code{begin} pero aplicado a expresiones monádicas.
7051@end deffn
7052
7053@deffn {Sistema Scheme} mwhen @var{condición} @var{mexp0} @var{mexp*} ...
7054Cuando @var{condición} es verdadero, evalúa la secuencia de expresiones
7055monádicas @var{mexp0}..@var{mexp*} como dentro de @code{mbegin}. Cuando
7056@var{condición} es falso, devuelve @code{*unespecified*} en la mónada
7057actual. Todas las expresiones en la secuencia deben ser expresiones
7058monádicas.
7059@end deffn
7060
7061@deffn {Sistema Scheme} munless @var{condición} @var{mexp0} @var{mexp*} ...
7062Cuando @var{condición} es falso, evalúa la secuencia de expresiones
7063monádicas @var{mexp0}..@var{mexp*} como dentro de @code{mbegin}. Cuando
7064@var{condición} es verdadero, devuelve @code{*unespecified*} en la mónada
7065actual. Todas las expresiones en la secuencia deben ser expresiones
7066monádicas.
7067@end deffn
7068
7069@cindex mónada de estado
7070El módulo @code{(guix monads)} proporciona la @dfn{mónada de estado}, que
7071permite que un valor adicional---el estado---sea @emph{hilado} a través de
7072las llamadas a procedimientos monádicos.
7073
7074@defvr {Variable Scheme} %state-monad
7075La mónada de estado. Procedimientos en la mónada de estado pueden acceder y
7076cambiar el estado hilado.
7077
7078Considere el siguiente ejemplo. El procedimiento @code{cuadrado} devuelve un
7079valor en la mónada de estado.
7080
7081@example
7082(define (cuadrado x)
7083 (mlet %state-monad ((count (current-state)))
7084 (mbegin %state-monad
7085 (set-current-state (+ 1 count))
7086 (return (* x x)))))
7087
7088(run-with-state (sequence %state-monad (map cuadrado (iota 3))) 0)
7089@result{} (0 1 4)
7090@result{} 3
7091@end example
7092
7093Cuando se ``ejecuta'' a través de @var{%state-monad}, obtenemos un valor
7094adicional de estado, que ese el número de llamadas a @code{cuadrado}.
7095@end defvr
7096
7097@deffn {Procedimiento monádico} current-state
7098Devuelve el estado actual como un valor monádico.
7099@end deffn
7100
7101@deffn {Procedimiento monádico} set-current-state @var{valor}
7102Establece el estado actual a @var{valor} y devuelve el estado previo como un
7103valor monádico.
7104@end deffn
7105
7106@deffn {Procedimiento monádico} state-push @var{valor}
7107Apila @var{valor} al estado actual, que se asume que es una lista, y
7108devuelve el estado previo como un valor monádico.
7109@end deffn
7110
7111@deffn {Procedimiento monádico} state-pop
7112Desapila un valor del estado actual y lo devuelve como un valor monádico. El
7113estado se asume que es una lista.
7114@end deffn
7115
7116@deffn {Procedimiento Scheme} run-with-state @var{mval} [@var{estado}]
7117Ejecuta un valor monádico @var{mval} comenzando con @var{estado} como el
7118estado inicial. Devuelve dos valores: el valor resultante y el estado
7119resultante.
7120@end deffn
7121
7122La interfaz principal a la mónada del almacén, proporcionada por el módulo
7123@code{(guix store)}, es como sigue.
7124
7125@defvr {Variable Scheme} %store-monad
7126La mónada del almacén---un alias para @var{%state-monad}.
7127
7128Los valores en la mónada del almacén encapsulan los accesos al
7129almacén. Cuando su efecto es necesario, un valor de la mónada del almacén
7130será ``evaluado'' pasandolo al procedimiento @code{run-with-store} (vea más
7131adelante).
7132@end defvr
7133
7134@deffn {Procedimiento Scheme} run-with-store @var{almacén} @var{mval} [#:guile-for-build] [#:system (%current-system)]
7135Ejecuta @var{mval}, un valor monádico en la mónada del almacén, en
7136@var{almacén}, una conexión abierta al almacén.
7137@end deffn
7138
7139@deffn {Procedimiento monádico} text-file @var{nombre} @var{texto} [@var{referencias}]
7140Devuelve como un valor monádico el nombre absoluto del fichero en el almacén
7141del fichero que contiene @var{ŧexto}, una cadena. @var{referencias} es una
7142lista de elementos del almacén a los que el fichero de texto referencia; su
7143valor predeterminado es la lista vacía.
7144@end deffn
7145
7146@deffn {Procedimiento monádico} binary-file @var{nombre} @var{datos} [@var{referencias}]
7147Devuelve como un valor monádico el nombre absoluto del fichero en el almacén
7148del fichero que contiene @var{datos}, un vector de bytes. @var{referencias}
7149es una lista de elementos del almacén a los que el fichero binario
7150referencia; su valor predeterminado es la lista vacía.
7151@end deffn
7152
7153@deffn {Procedimiento monádico} interned-file @var{fichero} [@var{nombre}] @
7154 [#:recursive? #t] [#:select? (const #t)]
7155Devuelve el nombre del @var{fichero} una vez internado en el almacén. Usa
7156@var{nombre} como su nombre del almacén, o el nombre base de @var{fichero}
7157si @var{nombre} se omite.
7158
7159Cuando @var{recursive?} es verdadero, los contenidos del @var{fichero} se
7160añaden recursivamente; si @var{fichero} designa un fichero plano y
7161@var{recursive?} es verdadero, sus contenidos se añaden, y sus bits de
7162permisos se mantienen.
7163
7164Cuando @var{recursive?} es verdadero, llama a @code{(@var{select?}
7165@var{fichero} @var{stat})} por cada entrada del directorio, donde
7166@var{fichero} es el nombre absoluto de fichero de la entrada y @var{stat} es
7167el resultado de @code{lstat}; excluyendo las entradas para las cuales
7168@var{select?} no devuelve verdadero.
7169
7170El ejemplo siguiente añade un fichero al almacén, bajo dos nombres
7171diferentes:
7172
7173@example
7174(run-with-store (open-connection)
7175 (mlet %store-monad ((a (interned-file "README"))
7176 (b (interned-file "README" "LEGU-MIN")))
7177 (return (list a b))))
7178
7179@result{} ("/gnu/store/rwm@dots{}-README" "/gnu/store/44i@dots{}-LEGU-MIN")
7180@end example
7181
7182@end deffn
7183
7184El módulo @code{(guix packages)} exporta los siguientes procedimientos
7185monádicos relacionados con paquetes:
7186
7187@deffn {Procedimiento monádico} package-file @var{paquete} [@var{fichero}] @
7188 [#:system (%current-system)] [#:target #f] @
7189 [#:output "out"]
7190Devuelve como un valor monádico el nombre absoluto de fichero de
7191@var{fichero} dentro del directorio de salida @var{output} del
7192@var{paquete}. Cuando se omite @var{fichero}, devuelve el nombre del
7193directorio de salida @var{output} del @var{paquete}. Cuando @var{target} es
7194verdadero, se usa como una tripleta de compilación cruzada.
7195@end deffn
7196
7197@deffn {Procedimiento monádico} package->derivation @var{paquete} [@var{sistema}]
7198@deffnx {Procedimiento monádico} package->cross-derivation @var{paquete} @
7199 @var{objetivo} [@var{sistema}]
7200Versión monádica de @code{package-derivation} y
7201@code{package-cross-derivation} (@pxref{Definición de paquetes}).
7202@end deffn
7203
7204
7205@node Expresiones-G
7206@section Expresiones-G
7207
7208@cindex expresión-G
7209@cindex escape de código de construcción
7210Por tanto tenemos ``derivaciones'', que representan una secuencia de
7211acciones de construcción a realizar para producir un elemento en el almacén
7212(@pxref{Derivaciones}). Estas acciones de construcción se llevan a cabo
7213cuando se solicita al daemon construir realmente la derivación; se ejecutan
7214por el daemon en un contenedor (@pxref{Invocación de guix-daemon}).
7215
7216@cindex estratos de código
7217No debería ser ninguna sorpresa que nos guste escribir estas acciones de
7218construcción en Scheme. Cuando lo hacemos, terminamos con dos @dfn{estratos}
7219de código Scheme@footnote{El término @dfn{estrato} en este contexto se debe
7220a Manuel Serrano et al.@: en el contexto de su trabajo en Hop. Oleg
7221Kiselyov, quien ha escrito profundos
7222@url{http://okmij.org/ftp/meta-programming/#meta-scheme, ensayos sobre el
7223tema}, se refiere a este tipo de generación de código como separación en
7224etapas o @dfn{staging}.}: el ``código anfitrión''---código que define
7225paquetes, habla al daemon, etc.---y el ``código de construcción''---código
7226que realmente realiza las acciones de construcción, como la creación de
7227directorios, la invocación de @command{make}, etc.
7228
7229Para describir una derivación y sus acciones de construcción, típicamente se
7230necesita embeber código de construcción dentro del código anfitrión. Se
7231resume en la manipulación de código de construcción como datos, y la
7232homoiconicidad de Scheme---el código tiene representación directa como
7233datos---es útil para ello. Pero necesitamos más que el mecanismo normal de
7234@code{quasiquote} en Scheme para construir expresiones de construcción.
7235
7236El módulo @code{(guix gexp)} implementa las @dfn{expresiones-G}, una forma
7237de expresiones-S adaptada para expresiones de construcción. Las
7238expresiones-G, o @dfn{gexps}, consiste esencialmente en tres formas
7239sintácticas: @code{gexp}, @code{ungexp} y @code{ungexp-splicing} (o
7240simplemente: @code{#~}, @code{#$} y @code{#$@@}), que son comparables a
7241@code{quasiquote}, @code{unquote} y @code{unquote-splicing}, respectivamente
7242(@pxref{Expression Syntax, @code{quasiquote},, guile, GNU Guile Reference
7243Manual}). No obstante, hay importantes diferencias:
7244
7245@itemize
7246@item
7247Las expresiones-G están destinadas a escribirse en un fichero y ser
7248ejecutadas o manipuladas por otros procesos.
7249
7250@item
7251Cuando un objeto de alto nivel como un paquete o una derivación se expande
7252dentro de una expresión-G, el resultado es el mismo que la introducción de
7253su nombre de fichero de salida.
7254
7255@item
7256Las expresiones-G transportan información acerca de los paquetes o
7257derivaciones que referencian, y estas referencias se añaden automáticamente
7258como entradas al proceso de construcción que las usa.
7259@end itemize
7260
7261@cindex bajada de nivel, de objetos de alto nivel en expresiones-G
7262Este mecanismo no se limita a objetos de paquete ni derivación: pueden
7263definirse @dfn{compiladores} capaces de ``bajar el nivel'' de otros objetos
7264de alto nivel a derivaciones o ficheros en el almacén, de modo que esos
7265objetos puedan introducirse también en expresiones-G. Por ejemplo, un tipo
7266útil de objetos de alto nivel que pueden insertarse en una expresión-G son
7267los ``objetos tipo-fichero'', los cuales facilitan la adición de ficheros al
7268almacén y su referencia en derivaciones y demás (vea @code{local-file} y
7269@code{plain-file} más adelante).
7270
7271Para ilustrar la idea, aquí está un ejemplo de expresión-G:
7272
7273@example
7274(define exp-construccion
7275 #~(begin
7276 (mkdir #$output)
7277 (chdir #$output)
7278 (symlink (string-append #$coreutils "/bin/ls")
7279 "enumera-ficheros")))
7280@end example
7281
7282Esta expresión-G puede pasarse a @code{gexp->derivation}; obtenemos una
7283derivación que construye un directorio que contiene exactamente un enlace
7284simbólico a @file{/gnu/store/@dots{}-coreutils-8.22/bin/ls}:
7285
7286@example
7287(gexp->derivation "la-cosa" exp-construccion)
7288@end example
7289
7290Como se puede esperar, la cadena @code{"/gnu/store/@dots{}-coreutils-8.22"}
7291se sustituye por la referencia al paquete @var{coreutils} en el código de
7292construcción real, y @var{coreutils} se marca automáticamente como una
7293entrada a la derivación. Del mismo modo, @code{#$output} (equivalente a
7294@code{(ungexp output)}) se reemplaza por una cadena que contiene el nombre
7295del directorio de la salida de la derivación.
7296
7297@cindex compilación cruzada
7298En un contexto de compilación cruzada, es útil distinguir entre referencias
7299a construcciones @emph{nativas} del paquete---que pueden ejecutarse en el
7300sistema anfitrión---de referencias de compilaciones cruzadas de un
7301paquete. Para dicho fin, @code{#+} tiene el mismo papel que @code{#$}, pero
7302es una referencia a una construcción nativa del paquete:
7303
7304@example
7305(gexp->derivation "vi"
7306 #~(begin
7307 (mkdir #$output)
7308 (system* (string-append #+coreutils "/bin/ln")
7309 "-s"
7310 (string-append #$emacs "/bin/emacs")
7311 (string-append #$output "/bin/vi")))
7312 #:target "mips64el-linux-gnu")
7313@end example
7314
7315@noindent
7316En el ejemplo previo, se usa la construcción nativa de @var{coreutils}, de
7317modo que @command{ln} pueda realmente ejecutarse en el anfitrión; pero se
7318hace referencia a la construcción de compilación cruzada de @var{emacs}.
7319
7320@cindex módulos importados, para expresiones-G
7321@findex with-imported-modules
7322Otra característica de las expresiones-G son los @dfn{módulos importados}: a
7323veces deseará ser capaz de usar determinados módulos Guile del ``entorno
7324anfitrión'' en la expresión-G, de modo que esos módulos deban ser importados
7325en el ``entorno de construcción''. La forma @code{with-imported-modules} le
7326permite expresarlo:
7327
7328@example
7329(let ((build (with-imported-modules '((guix build utils))
7330 #~(begin
7331 (use-modules (guix build utils))
7332 (mkdir-p (string-append #$output "/bin"))))))
7333 (gexp->derivation "directorio-vacio"
7334 #~(begin
7335 #$build
7336 (display "éxito!\n")
7337 #t)))
7338@end example
7339
7340@noindent
7341En este ejemplo, el módulo @code{(guix build utils)} se incorpora
7342automáticamente dentro del entorno de construcción aislado de nuestra
7343expresión-G, de modo que @code{(use-modules (guix build utils))} funciona
7344como se espera.
7345
7346@cindex clausura de módulos
7347@findex source-module-closure
7348De manera habitual deseará que la @emph{clausura} del módulo se importe---es
7349decir, el módulo en sí y todos los módulos de los que depende---en vez del
7350módulo únicamente; si no se hace, cualquier intento de uso del módulo
7351fallará porque faltan módulos dependientes. El procedimiento
7352@code{source-module-closure} computa la clausura de un módulo mirando en las
7353cabeceras de sus ficheros de fuentes, lo que es útil en este caso:
7354
7355@example
7356(use-modules (guix modules)) ;para 'source-module-closure'
7357
7358(with-imported-modules (source-module-closure
7359 '((guix build utils)
7360 (gnu build vm)))
7361 (gexp->derivation "algo-con-maq-virtuales"
7362 #~(begin
7363 (use-modules (guix build utils)
7364 (gnu build vm))
7365 @dots{})))
7366@end example
7367
7368@cindex extensiones, para expresiones G
7369@findex with-extensions
7370De la misma manera, a veces deseará importar no únicamente módulos puros de
7371Scheme, pero también ``extensiones'' como enlaces Guile a bibliotecas C u
7372otros paquetes ``completos''. Si, digamos, necesitase el paquete
7373@code{guile-json} disponible en el lado de construcción, esta sería la forma
7374de hacerlo:
7375
7376@example
7377(use-modules (gnu packages guile)) ;para 'guile-json'
7378
7379(with-extensions (list guile-json)
7380 (gexp->derivation "algo-con-json"
7381 #~(begin
7382 (use-modules (json))
7383 @dots{})))
7384@end example
7385
7386La forma sintáctica para construir expresiones-G se resume a continuación.
7387
7388@deffn {Sintaxis Scheme} #~@var{exp}
7389@deffnx {Sintaxis Scheme} (gexp @var{exp})
7390Devuelve una expresión-G que contiene @var{exp}. @var{exp} puede contener
7391una o más de las siguientes formas:
7392
7393@table @code
7394@item #$@var{obj}
7395@itemx (ungexp @var{obj})
7396Introduce una referencia a @var{obj}. @var{obj} puede tener uno de los tipos
7397permitidos, por ejemplo un paquete o derivación, en cuyo caso la forma
7398@code{ungexp} se substituye por el nombre de fichero de su salida---por
7399ejemplo, @code{"/gnu/store/@dots{}-coreutils-8.22}.
7400
7401Si @var{obj} es una lista, se recorre y las referencias a objetos permitidos
7402se substituyen de manera similar.
7403
7404Si @var{obj} es otra expresión-G, su contenido se inserta y sus dependencias
7405se añaden a aquellas de la expresión-G que la contiene.
7406
7407Si @var{obj} es otro tipo de objeto, se inserta tal cual es.
7408
7409@item #$@var{obj}:@var{salida}
7410@itemx (ungexp @var{obj} @var{salida})
7411Como la forma previa, pero referenciando explícitamente la @var{salida} de
7412@var{obj}---esto es útil cuando @var{obj} produce múltiples salidas
7413(@pxref{Paquetes con múltiples salidas}).
7414
7415@item #+@var{obj}
7416@itemx #+@var{obj}:salida
7417@itemx (ungexp-native @var{obj})
7418@itemx (ungexp-native @var{obj} @var{salida})
7419Lo mismo que @code{ungexp}, pero produce una referencia a la construcción
7420@emph{nativa} de @var{obj} cuando se usa en un contexto de compilación
7421cruzada.
7422
7423@item #$output[:@var{salida}]
7424@itemx (ungexp output [@var{salida}])
7425Inserta una referencia a la salida de la derivación @var{salida}, o a la
7426salida principal cuando @var{salida} se omite.
7427
7428Esto únicamente tiene sentido para expresiones-G pasadas a
7429@code{gexp->derivation}.
7430
7431@item #$@@@var{lst}
7432@itemx (ungexp-splicing @var{lst})
7433Lo mismo que la forma previa, pero expande el contenido de la lista
7434@var{lst} como parte de la lista que la contiene.
7435
7436@item #+@@@var{lst}
7437@itemx (ungexp-native-splicing @var{lst})
7438Lo mismo que la forma previa, pero hace referencia a las construcciones
7439nativas de los objetos listados en @var{lst}.
7440
7441@end table
7442
7443Las expresiones-G creadas por @code{gexp} o @code{#~} son objetos del tipo
7444@code{gexp?} en tiempo de ejecución (vea más adelante).
7445@end deffn
7446
7447@deffn {Sintaxis Scheme} with-imported-modules @var{módulos} @var{cuerpo}@dots{}
7448Marca las expresiones-G definidas en el @var{cuerpo}@dots{} como si
7449requiriesen @var{módulos} en su entorno de ejecución.
7450
7451Cada elemento en @var{módulos} puede ser el nombre de un módulo, como
7452@code{(guix build utils)}, o puede ser el nombre de un módulo, seguido de
7453una flecha, seguido de un objeto tipo-fichero:
7454
7455@example
7456`((guix build utils)
7457 (guix gcrypt)
7458 ((guix config) => ,(scheme-file "config.scm"
7459 #~(define-module @dots{}))))
7460@end example
7461
7462@noindent
7463En el ejemplo previo, los dos primeros módulos se toman de la ruta de
7464búsqueda, y el último se crea desde el objeto tipo-fichero proporcionado.
7465
7466Esta forma tiene ámbito @emph{léxico}: tiene efecto en las expresiones-G
7467definidas en @var{cuerpo}@dots{}, pero no en aquellas definidas, digamos, en
7468procedimientos llamados por @var{cuerpo}@dots{}.
7469@end deffn
7470
7471@deffn {Sintaxis Scheme} with-extensions @var{extensiones} @var{cuerpo}@dots{}
7472Marca que las expresiones definidas en @var{cuerpo}@dots{} requieren
7473@var{extensiones} en su entorno de construcción y
7474ejecución. @var{extensiones} es típicamente una lista de objetos de paquetes
7475como los que se definen en el módulo @code{(gnu packages guile)}.
7476
7477De manera concreta, los paquetes listados en @var{extensiones} se añaden a
7478la ruta de carga mientras se compilan los módulos importados en
7479@var{cuerpo}@dots{}; también se añaden a la ruta de carga en la expresión-G
7480devuelta por @var{cuerpo}@dots{}.
7481@end deffn
7482
7483@deffn {Procedimiento Scheme} gexp? @var{obj}
7484Devuelve @code{#t} si @var{obj} es una expresión-G.
7485@end deffn
7486
7487Las expresiones-G están destinadas a escribirse en disco, tanto en código
7488que construye alguna derivación, como en ficheros planos en el almacén. Los
7489procedimientos monádicos siguientes le permiten hacerlo (@pxref{La mónada del almacén}, para más información sobre mónadas).
7490
7491@deffn {Procedimiento monádico} gexp->derivation @var{nombre} @var{exp} @
7492 [#:system (%current-system)] [#:target #f] [#:graft? #t] @
7493 [#:hash #f] [#:hash-algo #f] @
7494 [#:recursive? #f] [#:env-vars '()] [#:modules '()] @
7495 [#:module-path @var{%load-path}] @
7496 [#:effective-version "2.2"] @
7497 [#:references-graphs #f] [#:allowed-references #f] @
7498 [#:disallowed-references #f] @
7499 [#:leaked-env-vars #f] @
7500 [#:script-name (string-append @var{name} "-builder")] @
7501 [#:deprecation-warnings #f] @
7502 [#:local-build? #f] [#:substitutable? #t] @
7503 [#:properties '()] [#:guile-for-build #f]
7504Devuelve una derivación @var{nombre} que ejecuta @var{exp} (una expresión-G)
7505con @var{guile-for-build} (una derivación) en el sistema @var{system};
7506@var{exp} se almacena en un fichero llamado @var{script-name}. Cuando
7507@var{target} es verdadero, se usa como la tripleta de compilación cruzada
7508para paquetes a los que haga referencia @var{exp}.
7509
7510@var{modules} está obsoleto en favor de @code{with-imported-modules}. Su
7511significado es hacer que los módulos @var{modules} estén disponibles en el
7512contexto de evaluación de @var{exp}; @var{modules} es una lista de nombres
7513de módulos Guile buscados en @var{module-path} para ser copiados al almacén,
7514compilados y disponibles en la ruta de carga durante la ejecución de
7515@var{exp}---por ejemplo, @code{((guix build utils) (gui build
7516gnu-build-system))}.
7517
7518@var{effective-version} determina la cadena a usar cuando se añaden las
7519extensiones de @var{exp} (vea @code{with-extensions}) a la ruta de
7520búsqueda---por ejemplo, @code{"2.2"}.
7521
7522@var{graft?} determina si los paquetes a los que @var{exp} hace referencia
7523deben ser injertados cuando sea posible.
7524
7525Cuando @var{references-graphs} es verdadero, debe ser una lista de tuplas de
7526una de las formas siguientes:
7527
7528@example
7529(@var{nombre-fichero} @var{paquete})
7530(@var{nombre-fichero} @var{paquete} @var{salida})
7531(@var{nombre-fichero} @var{derivación})
7532(@var{nombre-fichero} @var{derivación} @var{salida})
7533(@var{nombre-fichero} @var{elemento-almacén})
7534@end example
7535
7536El lado derecho de cada elemento de @var{references-graphs} se convierte
7537automáticamente en una entrada del proceso de construcción de @var{exp}. En
7538el entorno de construcción, cada @var{nombre-fichero} contiene el grafo de
7539referencias del elemento correspondiente, en un formato de texto simple.
7540
7541@var{allowed-references} debe ser o bien @code{#f} o una lista de nombres y
7542paquetes de salida. En el último caso, la lista denota elementos del almacén
7543a los que el resultado puede hacer referencia. Cualquier referencia a otro
7544elemento del almacén produce un error de construcción. De igual manera con
7545@var{disallowed-references}, que enumera elementos a los que las salidas no
7546deben hacer referencia.
7547
7548@var{deprecation-warnings} determina si mostrar avisos de obsolescencia
7549durante la compilación de los módulos. Puede ser @code{#f}, @code{#t} o
7550@code{'detailed}.
7551
7552El resto de parámetros funcionan como en @code{derivation}
7553(@pxref{Derivaciones}).
7554@end deffn
7555
7556@cindex objetos tipo-fichero
7557Los procedimientos @code{local-file}, @code{plain-file},
7558@code{computed-file}, @code{program-file} y @code{scheme-file} a
7559continuación devuelven @dfn{objetos tipo-fichero}. Esto es, cuando se
7560expanden en una expresión-G, estos objetos dirigen a un fichero en el
7561almacén. Considere esta expresión-G:
7562
7563@example
7564#~(system* #$(file-append glibc "/sbin/nscd") "-f"
7565 #$(local-file "/tmp/mi-nscd.conf"))
7566@end example
7567
7568El efecto aquí es el ``internamiento'' de @file{/tmp/mi-nscd.conf} mediante
7569su copia al almacén. Una vez expandida, por ejemplo @i{vía}
7570@code{gexp->derivation}, la expresión-G hace referencia a la copia bajo
7571@file{/gnu/store}; por tanto, la modificación o el borrado del fichero en
7572@file{/tmp} no tiene ningún efecto en lo que la expresión-G
7573hace. @code{plain-file} puede usarse de manera similar; se diferencia en que
7574el contenido del fichero se proporciona directamente como una cadena.
7575
7576@deffn {Procedimiento Scheme} local-file @var{fichero} [@var{nombre}] @
7577 [#:recursive? #f] [#:select? (const #t)]
7578Devuelve un objeto que representa el fichero local @var{fichero} a añadir al
7579almacén; este objeto puede usarse en una expresión-G. Si @var{fichero} es un
7580nombre de fichero relativo, se busca de forma relativa al fichero fuente
7581donde esta forma aparece. @var{fichero} se añadirá al almacén bajo
7582@var{nombre}---por defecto el nombre base de @var{fichero}.
7583
7584Cuando @var{recursive?} es verdadero, los contenidos del @var{fichero} se
7585añaden recursivamente; si @var{fichero} designa un fichero plano y
7586@var{recursive?} es verdadero, sus contenidos se añaden, y sus bits de
7587permisos se mantienen.
7588
7589Cuando @var{recursive?} es verdadero, llama a @code{(@var{select?}
7590@var{fichero} @var{stat})} por cada entrada del directorio, donde
7591@var{fichero} es el nombre absoluto de fichero de la entrada y @var{stat} es
7592el resultado de @code{lstat}; excluyendo las entradas para las cuales
7593@var{select?} no devuelve verdadero.
7594
7595Esta es la contraparte declarativa del procedimiento monádico
7596@code{interned-file} (@pxref{La mónada del almacén, @code{interned-file}}).
7597@end deffn
7598
7599@deffn {Procedimiento Scheme} plain-file @var{nombre} @var{contenido}
7600Devuelve un objeto que representa un fichero de texto llamado @var{nombre}
7601con el @var{contenido} proporcionado (una cadena o un vector de bytes) para
7602ser añadido al almacén.
7603
7604Esta es la contraparte declarativa de @code{text-file}.
7605@end deffn
7606
7607@deffn {Procedimiento Scheme} computed-file @var{nombre} @var{gexp} @
7608 [#:options '(#:local-build? #t)]
7609Devuelve un objeto que representa el elemento del almacén @var{nombre}, un
7610fichero o un directorio computado por @var{gexp}. @var{options} es una lista
7611de parámetros adicionales a pasar a @code{gexp->derivation}.
7612
7613Esta es la contraparte declarativa de @code{gexp->derivation}.
7614@end deffn
7615
7616@deffn {Procedimiento monádico} gexp->script @var{nombre} @var{exp} @
7617 [#:guile (default-guile)] [#:module-path %load-path]
7618Devuelve un guión ejecutable @var{nombre} que ejecuta @var{exp} usando
7619@var{guile}, con los módulos importados por @var{exp} en su ruta de
7620búsqueda. Busca los módulos de @var{exp} en @var{module-path}.
7621
7622El ejemplo siguiente construye un guión que simplemente invoca la orden
7623@command{ls}:
7624
7625@example
7626(use-modules (guix gexp) (gnu packages base))
7627
7628(gexp->script "enumera-ficheros"
7629 #~(execl #$(file-append coreutils "/bin/ls")
7630 "ls"))
7631@end example
7632
7633Cuando se ejecuta a través del almacén (@pxref{La mónada del almacén,
7634@code{run-with-store}}), obtenemos una derivación que produce un fichero
7635ejecutable @file{/gnu/store/@dots{}-enumera-ficheros} más o menos así:
7636
7637@example
7638#!/gnu/store/@dots{}-guile-2.0.11/bin/guile -ds
7639!#
7640(execl "/gnu/store/@dots{}-coreutils-8.22"/bin/ls" "ls")
7641@end example
7642@end deffn
7643
7644@deffn {Procedimiento Scheme} program-file @var{nombre} @var{exp} @
7645 [#:guile #f] [#:module-path %load-path]
7646Devuelve un objeto que representa el elemento ejecutable del almacén
7647@var{nombre} que ejecuta @var{gexp}. @var{guile} es el paquete Guile usado
7648para ejecutar el guión. Los módulos importados por @var{gexp} se buscan en
7649@var{module-path}.
7650
7651Esta es la contraparte declarativa de @code{gexp->script}.
7652@end deffn
7653
7654@deffn {Procedimiento monádico} gexp->file @var{nombre} @var{exp} @
7655 [#:set-load-path? #t] [#:module-path %load-path] @
7656 [#:splice? #f] @
7657 [#:guile (default-guile)]
7658Devuelve una derivación que construye un fichero @var{nombre} que contiene
7659@var{exp}. Cuando @var{splice?} es verdadero, se considera que @var{exp} es
7660una lista de expresiones que deben ser expandidas en el fichero resultante.
7661
7662Cuando @var{set-load-path} es verdadero, emite código en el fichero
7663resultante para establecer @code{%load-path} y @code{%load-compiled-path} de
7664manera que respeten los módulos importados por @var{exp}. Busca los módulos
7665de @var{exp} en @var{module-path}.
7666
7667El fichero resultante hace referencia a todas las dependencias de @var{exp}
7668o a un subconjunto de ellas.
7669@end deffn
7670
7671@deffn {Procedimiento Scheme} scheme-file @var{nombre} @var{exp} [#:splice? #f]
7672Devuelve un objeto que representa el fichero Scheme @var{nombre} que
7673contiene @var{exp}.
7674
7675Esta es la contraparte declarativa de @code{gexp->file}.
7676@end deffn
7677
7678@deffn {Procedimiento monádico} text-file* @var{nombre} @var{texto} @dots{}
7679Devuelve como un valor monádico una derivación que construye un fichero de
7680texto que contiene todo @var{texto}. @var{texto} puede ser una lista de,
7681además de cadenas, objetos de cualquier tipo que pueda ser usado en
7682expresiones-G: paquetes, derivaciones, ficheros locales, objetos, etc. El
7683fichero del almacén resultante hace referencia a todos ellos.
7684
7685Esta variante debe preferirse sobre @code{text-file} cuando el fichero a
7686crear haga referencia a elementos del almacén. Esto es el caso típico cuando
7687se construye un fichero de configuración que embebe nombres de ficheros del
7688almacén, como este:
7689
7690@example
7691(define (perfil.sh)
7692 ;; Devuelve el nombre de un guión shell en el almacén
7693 ;; que establece la variable de entorno 'PATH'
7694 (text-file* "perfil.sh"
7695 "export PATH=" coreutils "/bin:"
7696 grep "/bin:" sed "/bin\n"))
7697@end example
7698
7699En este ejemplo, el fichero @file{/gnu/store/@dots{}-perfil.sh} resultante
7700hará referencia a @var{coreutils}, @var{grep} y @var{sed}, por tanto
7701evitando que se recolecten como basura durante su tiempo de vida.
7702@end deffn
7703
7704@deffn {Procedimiento Scheme} mixed-text-file @var{nombre} @var{texto} @dots{}
7705Devuelve un objeto que representa el fichero del almacén @var{nombre} que
7706contiene @var{texto}. @var{texto} es una secuencia de cadenas y objetos
7707tipo-fichero, como en:
7708
7709@example
7710(mixed-text-file "perfil"
7711 "export PATH=" coreutils "/bin:" grep "/bin")
7712@end example
7713
7714Esta es la contraparte declarativa de @code{text-file*}.
7715@end deffn
7716
7717@deffn {Procedimiento Scheme} file-union @var{nombre} @var{ficheros}
7718Devuelve un @code{<computed-file>} que construye un directorio que contiene
7719todos los @var{ficheros}. Cada elemento en @var{ficheros} debe ser una lista
7720de dos elementos donde el primer elemento es el nombre de fichero a usar en
7721el nuevo directorio y el segundo elemento es una expresión-G que denota el
7722fichero de destino. Aquí está un ejemplo:
7723
7724@example
7725(file-union "etc"
7726 `(("hosts" ,(plain-file "hosts"
7727 "127.0.0.1 localhost"))
7728 ("bashrc" ,(plain-file "bashrc"
7729 "alias ls='ls --color=auto'"))))
7730@end example
7731
7732Esto emite un directorio @code{etc} que contiene estos dos ficheros.
7733@end deffn
7734
7735@deffn {Procedimiento Scheme} directory-union @var{nombre} @var{cosas}
7736Devuelve un directorio que es la unión de @var{cosas}, donde @var{cosas} es
7737una lista de objetos tipo-fichero que denotan directorios. Por ejemplo:
7738
7739@example
7740(directory-union "guile+emacs" (list guile emacs))
7741@end example
7742
7743emite un directorio que es la unión de los paquetes @code{guile} y
7744@code{emacs}.
7745@end deffn
7746
7747@deffn {Procedimientos Scheme} file-append @var{obj} @var{sufijo} @dots{}
7748Devuelve un objeto tipo-fichero que se expande a la concatenación de
7749@var{obj} y @var{sufijo}, donde @var{obj} es un objeto que se puede bajar de
7750nivel y cada @var{sufijo} es una cadena.
7751
7752Como un ejemplo, considere esta expresión-G:
7753
7754@example
7755(gexp->script "ejecuta-uname"
7756 #~(system* #$(file-append coreutils
7757 "/bin/uname")))
7758@end example
7759
7760El mismo efecto podría conseguirse con:
7761
7762@example
7763(gexp->script "ejecuta-uname"
7764 #~(system* (string-append #$coreutils
7765 "/bin/uname")))
7766@end example
7767
7768Hay una diferencia no obstante: en el caso de @code{file-append}, el guión
7769resultante contiene una ruta absoluta de fichero como una cadena, mientras
7770que en el segundo caso, el guión resultante contiene una expresión
7771@code{(string-append @dots{})} para construir el nombre de fichero @emph{en
7772tiempo de ejecución}.
7773@end deffn
7774
7775
7776Por supuesto, además de expresiones-G embebidas en código ``anfitrión'', hay
7777también módulos que contienen herramientas de construcción. Para clarificar
7778que están destinados para su uso en el estrato de construcción, estos
7779módulos se mantienen en el espacio de nombres @code{(guix build @dots{})}.
7780
7781@cindex bajada de nivel, de objetos de alto nivel en expresiones-G
7782Internamente, los objetos de alto nivel se @dfn{bajan de nivel}, usando su
7783compilador, a derivaciones o elementos del almacén. Por ejemplo, bajar de
7784nivel un paquete emite una derivación, y bajar de nivel un @var{plain-file}
7785emite un elemento del almacén. Esto se consigue usando el procedimiento
7786monádico @code{lower-object}.
7787
7788@deffn {Procedimiento monádico} lower-object @var{obj} [@var{sistema}] @
7789 [#:target #f]
7790Devuelve como un valor en @var{%store-monad} la derivación o elemento del
7791almacén que corresponde a @var{obj} en @var{sistema}, compilando de manera
7792cruzada para @var{target} si @var{target} es verdadero. @var{obj} debe ser
7793un objeto que tiene asociado un compilador de expresiones-G, como
7794@code{<package>}.
7795@end deffn
7796
7797@node Invocación de guix repl
7798@section Invocación de @command{guix repl}
7799
7800@cindex REPL, bucle de lectura-evaluación-impresión
7801La orden @command{guix repl} lanza un @dfn{bucle de
7802lectura-evaluación-impresión} Guile (REPL) para programación interactiva
7803(@pxref{Using Guile Interactively,,, guile, GNU Guile Reference
7804Manual}). Comparado a simplemente lanzar la orden @command{guile},
7805@command{guix repl} garantiza que todos los módulos Guix y todas sus
7806dependencias están disponibles en la ruta de búsqueda. Puede usarla de esta
7807manera:
7808
7809@example
7810$ guix repl
7811scheme@@(guile-user)> ,use (gnu packages base)
7812scheme@@(guile-user)> coreutils
7813$1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300>
7814@end example
7815
7816@cindex inferiores
7817Además, @command{guix repl} implementa un protocolo del REPL simple legible
7818por máquinas para su uso por @code{(guix inferior)}, una facilidad para
7819interactuar con @dfn{inferiores}, procesos separados que ejecutan una
7820revisión de Guix potencialmente distinta.
7821
7822Las opciones disponibles son las siguientes:
7823
7824@table @code
7825@item --type=@var{tipo}
7826@itemx -t @var{tipo}
7827Inicia un REPL del @var{TIPO} dado, que puede ser uno de los siguientes:
7828
7829@table @code
7830@item guile
7831Es el predeterminado, y lanza una sesión interactiva Guile estándar con
7832todas las características.
7833@item machine
7834Lanza un REPL que usa el protocolo legible por máquinas. Este es el
7835protocolo con el que el módulo @code{(guix inferior)} se comunica.
7836@end table
7837
7838@item --listen=@var{destino}
7839Por defecto, @command{guix repl} lee de la entrada estándar y escribe en la
7840salida estándar. Cuando se pasa esta opción, en vez de eso escuchará las
7841conexiones en @var{destino}. Estos son ejemplos de opciones válidas:
7842
7843@table @code
7844@item --listen=tcp:37146
7845Acepta conexiones locales por el puerto 37146.
7846
7847@item --listen=unix:/tmp/socket
7848Acepta conexiones a través del socket de dominio Unix @file{/tmp/socket}.
7849@end table
7850@end table
7851
7852@c *********************************************************************
7853@node Utilidades
7854@chapter Utilidades
7855
7856Esta sección describe las utilidades de línea de órdenes de Guix. Algunas de
7857ellas están orientadas principalmente para desarrolladoras y usuarias que
7858escriban definiciones de paquetes nuevas, mientras que otras son útiles de
7859manera más general. Complementan la interfaz programática Scheme de Guix de
7860modo conveniente.
7861
7862@menu
7863* Invocación de guix build:: Construir paquetes desde la línea de
7864 órdenes.
7865* Invocación de guix edit:: Editar las definiciones de paquetes.
7866* Invocación de guix download:: Descargar un fichero e imprimir su hash.
7867* Invocación de guix hash:: Calcular el hash criptográfico de un fichero.
7868* Invocación de guix import:: Importar definiciones de paquetes.
7869* Invocación de guix refresh:: Actualizar definiciones de paquetes.
7870* Invocación de guix lint:: Encontrar errores en definiciones de paquetes.
7871* Invocación de guix size:: Perfilar el uso del disco.
7872* Invocación de guix graph:: Visualizar el grafo de paquetes.
7873* Invocación de guix publish:: Compartir sustituciones.
7874* Invocación de guix challenge:: Poner a prueba servidores de
7875 sustituciones.
7876* Invocación de guix copy:: Copiar a y desde un almacén remoto.
7877* Invocación de guix container:: Aislamiento de procesos.
7878* Invocación de guix weather:: Comprobar la disponibilidad de
7879 sustituciones.
7880* Invocación de guix processes:: Enumerar los procesos cliente.
7881@end menu
7882
7883@node Invocación de guix build
7884@section Invocación de @command{guix build}
7885
7886@cindex construcción de paquetes
7887@cindex @command{guix build}
7888La orden @command{guix build} construye paquetes o derivaciones y sus
7889dependencias, e imprime las rutas del almacén resultantes. Fíjese que no
7890modifica el perfil de la usuaria---este es el trabajo de la orden
7891@command{guix package} (@pxref{Invocación de guix package}). Por tanto, es útil
7892principalmente para las desarrolladoras de la distribución.
7893
7894La sintaxis general es:
7895
7896@example
7897guix build @var{opciones} @var{paquete-o-derivación}@dots{}
7898@end example
7899
7900Como ejemplo, la siguiente orden construye las últimas versiones de Emacs y
7901Guile, muestra sus log de construcción, y finalmente muestra los directorios
7902resultantes:
7903
7904@example
7905guix build emacs guile
7906@end example
7907
7908De forma similar, la siguiente orden construye todos los paquetes
7909disponibles:
7910
7911@example
7912guix build --quiet --keep-going \
7913 `guix package -A | cut -f1,2 --output-delimiter=@@`
7914@end example
7915
7916@var{paquete-o-derivación} puede ser tanto el nombre de un paquete que se
7917encuentra en la distribución de software como @code{coreutils} o
7918@code{coreutils@@8.20}, o una derivación como
7919@file{/gnu/store/@dots{}-coreutils-8.19.drv}. En el primer caso, el paquete
7920de nombre (y opcionalmente versión) correspondiente se busca entre los
7921módulos de la distribución GNU (@pxref{Módulos de paquetes}).
7922
7923De manera alternativa, la opción @code{--expression} puede ser usada para
7924especificar una expresión Scheme que evalúa a un paquete; esto es útil para
7925la desambiguación entre varios paquetes del mismo nombre o si se necesitan
7926variaciones del paquete.
7927
7928Puede haber cero o más @var{opciones}. Las opciones disponibles se describen
7929en la subsección siguiente.
7930
7931@menu
7932* Opciones comunes de construcción:: Opciones de construcción para la
7933 mayoría de órdenes.
7934* Opciones de transformación de paquetes:: Crear variantes de paquetes.
7935* Opciones de construcción adicionales:: Opciones específicas de 'guix
7936 build'.
7937* Depuración de fallos de construcción:: Experiencia de empaquetamiento
7938 en la vida real.
7939@end menu
7940
7941@node Opciones comunes de construcción
7942@subsection Opciones comunes de construcción
7943
7944Un número de opciones que controlan el proceso de construcción son comunes a
7945@command{guix build} y otras órdenes que pueden lanzar construcciones, como
7946@command{guix package} o @command{guix archive}. Son las siguientes:
7947
7948@table @code
7949
7950@item --load-path=@var{directorio}
7951@itemx -L @var{directorio}
7952Añade @var{directorio} al frente de la ruta de búsqueda de módulos de
7953paquetes (@pxref{Módulos de paquetes}).
7954
7955Esto permite a las usuarias definir sus propios paquetes y hacerlos visibles
7956a las herramientas de línea de órdenes.
7957
7958@item --keep-failed
7959@itemx -K
7960Mantiene los árboles de construcción de las construcciones fallidas. Por
7961tanto, si una construcción falla, su árbol de construcción se mantiene bajo
7962@file{/tmp}, en un directorio cuyo nombre se muestra al final del log de
7963construcción. Esto es útil cuando se depuran problemas en la
7964construcción. @xref{Depuración de fallos de construcción}, para trucos y consejos sobre
7965cómo depurar problemas en la construcción.
7966
7967Esta opción no tiene efecto cuando se conecta a un daemon remoto con una URI
7968@code{guix://} (@pxref{El almacén, the @code{GUIX_DAEMON_SOCKET} variable}).
7969
7970@item --keep-going
7971@itemx -k
7972Seguir adelante cuando alguna de las derivaciones de un fallo durante la
7973construcción; devuelve una única vez todas las construcciones que se han
7974completado o bien han fallado.
7975
7976El comportamiento predeterminado es parar tan pronto una de las derivaciones
7977especificadas falle.
7978
7979@item --dry-run
7980@itemx -n
7981No construye las derivaciones.
7982
7983@anchor{fallback-option}
7984@item --fallback
7985Cuando la sustitución de un binario preconstruido falle, intenta la
7986construcción local de paquetes (@pxref{Fallos en las sustituciones}).
7987
7988@item --substitute-urls=@var{urls}
7989@anchor{client-substitute-urls}
7990Considera @var{urls} la lista separada por espacios de URLs de fuentes de
7991sustituciones, anulando la lista predeterminada de URLs de
7992@command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon
7993URLs}}).
7994
7995Significa que las sustituciones puede ser descargadas de @var{urls},
7996mientras que estén firmadas por una clave autorizada por la administradora
7997del sistema (@pxref{Sustituciones}).
7998
7999Cuando @var{urls} es la cadena vacía, las sustituciones están efectivamente
8000deshabilitadas.
8001
8002@item --no-substitutes
8003No usa sustituciones para la construcción de productos. Esto es, siempre
8004realiza las construcciones localmente en vez de permitir la descarga de
8005binarios pre-construidos (@pxref{Sustituciones}).
8006
8007@item --no-grafts
8008No ``injerta'' paquetes. En la práctica esto significa que las
8009actualizaciones de paquetes disponibles como injertos no se
8010aplican. @xref{Actualizaciones de seguridad}, para más información sobre los injertos.
8011
8012@item --rounds=@var{n}
8013Construye cada derivación @var{n} veces seguidas, y lanza un error si los
8014resultados de las construcciones consecutivas no son idénticos bit-a-bit.
8015
8016Esto es útil para la detección de procesos de construcción
8017no-deterministas. Los procesos de construcción no-deterministas son un
8018problema puesto que prácticamente imposibilitan a las usuarias la
8019@emph{verificación} de la autenticidad de binarios proporcionados por
8020terceras partes. @xref{Invocación de guix challenge}, para más sobre esto.
8021
8022Fíjese que, actualmente, los resultados de las construcciones discordantes
8023no se mantienen, por lo que debe que investigar manualmente en caso de un
8024error---por ejemplo, mediante la extracción de uno de los resultados con
8025@code{guix archive --export} (@pxref{Invocación de guix archive}), seguida de una
8026reconstrucción, y finalmente la comparación de los dos resultados.
8027
8028@item --no-build-hook
8029No intenta delegar construcciones a través del ``hook de construcción'' del
8030daemon (@pxref{Configuración de delegación del daemon}). Es decir, siempre realiza las
8031construcciones de manera local en vez de delegando construcciones a máquinas
8032remotas.
8033
8034@item --max-silent-time=@var{segundos}
8035Cuando la construcción o sustitución permanece en silencio más de
8036@var{segundos}, la finaliza e informa de un fallo de construcción.
8037
8038Por defecto, se respeta la configuración del daemon (@pxref{Invocación de guix-daemon, @code{--max-silent-time}}).
8039
8040@item --timeout=@var{segundos}
8041Del mismo modo, cuando el proceso de construcción o sustitución dura más de
8042@var{segundos}, lo termina e informa un fallo de construcción.
8043
8044Por defecto, se respeta la configuración del daemon (@pxref{Invocación de guix-daemon, @code{--timeout}}).
8045
8046@c Note: This option is actually not part of %standard-build-options but
8047@c most programs honor it.
8048@cindex verbosity, of the command-line tools
8049@cindex logs de construcción, nivel de descripción
8050@item -v @var{nivel}
8051@itemx --verbosity=@var{nivel}
8052Use the given verbosity @var{level}, an integer. Choosing 0 means that no
8053output is produced, 1 is for quiet output, and 2 shows all the build log
8054output on standard error.
8055
8056@item --cores=@var{n}
8057@itemx -c @var{n}
8058Permite usar @var{n} núcleos de la CPU para la construcción. El valor
8059especial @code{0} significa usar tantos como núcleos haya en la CPU.
8060
8061@item --max-jobs=@var{n}
8062@itemx -M @var{n}
8063Permite como máximo @var{n} trabajos de construcción en
8064paralelo. @xref{Invocación de guix-daemon, @code{--max-jobs}}, para detalles
8065acerca de esta opción y la opción equivalente de @command{guix-daemon}.
8066
8067@item --debug=@var{nivel}
8068Produce debugging output coming from the build daemon. @var{level} must be
8069an integer between 0 and 5; higher means more verbose output. Setting a
8070level of 4 or more may be helpful when debugging setup issues with the build
8071daemon.
8072
8073@end table
8074
8075Tras las cortinas, @command{guix build} es esencialmente una interfaz al
8076procedimiento @code{package-derivation} del módulo @code{(guix packages)}, y
8077al procedimiento @code{build-derivations} del módulo @code{(guix
8078derivations)}.
8079
8080Además de las opciones proporcionadas explícitamente en la línea de órdenes,
8081@command{guix build} y otras órdenes @command{guix} que permiten la
8082construcción respetan el contenido de la variable de entorno
8083@code{GUIX_BUILD_OPTIONS}.
8084
8085@defvr {Variable de entorno} GUIX_BUILD_OPTIONS
8086Las usuarias pueden definir esta variable para que contenga una lista de
8087opciones de línea de órdenes que se usarán automáticamente por @command{guix
8088build} y otras órdenes @command{guix} que puedan realizar construcciones,
8089como en el ejemplo siguiente:
8090
8091@example
8092$ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar"
8093@end example
8094
8095Estas opciones se analizan independientemente, y el resultado se añade a
8096continuación de las opciones de línea de órdenes.
8097@end defvr
8098
8099
8100@node Opciones de transformación de paquetes
8101@subsection Opciones de transformación de paquetes
8102
8103@cindex variaciones de paquetes
8104Otro conjunto de opciones de línea de órdenes permitidas por @command{guix
8105build} y también @command{guix package} son las @dfn{opciones de
8106transformación de paquetes}. Son opciones que hacen posible la definición de
8107@dfn{variaciones de paquetes}---por ejemplo, paquetes construidos con un
8108código fuente diferente. Es una forma conveniente de crear paquetes
8109personalizados al vuelo sin tener que escribir las definiciones de las
8110variaciones del paquete (@pxref{Definición de paquetes}).
8111
8112@table @code
8113
8114@item --with-source=@var{fuente}
8115@itemx --with-source=@var{paquete}=@var{fuente}
8116@itemx --with-source=@var{paquete}@@@var{versión}=@var{fuente}
8117Usa @var{fuente} como la fuente de @var{paquete}, y @var{versión} como su
8118número de versión. @var{fuente} debe ser un nombre de fichero o una URL,
8119como en @command{guix download} (@pxref{Invocación de guix download}).
8120
8121Cuando se omite @var{paquete}, se toma el nombre de paquete especificado en
8122la línea de ordenes que coincide con el nombre base de @var{fuente}---por
8123ejemplo, si @var{fuente} fuese @code{/src/guile-2.0.10.tar.gz}, el paquete
8124correspondiente sería @code{guile}.
8125
8126Del mismo modo, si se omite @var{versión}, la cadena de versión se deduce de
8127@var{đuente}; en el ejemplo previo sería @code{2.0.10}.
8128
8129Esta opción permite a las usuarias probar versiones del paquete distintas a
8130las proporcionadas en la distribución. El ejemplo siguiente descarga
8131@file{ed-1.7.tar.gz} de un espejo GNU y lo usa como la fuente para el
8132paquete @code{ed}:
8133
8134@example
8135guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz
8136@end example
8137
8138Como desarrolladora, @code{--with-source} facilita la prueba de versiones
8139candidatas para la publicación:
8140
8141@example
8142guix build guile --with-source=../guile-2.0.9.219-e1bb7.tar.xz
8143@end example
8144
8145@dots{} o la construcción desde una revisión en un entorno limpio:
8146
8147@example
8148$ git clone git://git.sv.gnu.org/guix.git
8149$ guix build guix --with-source=guix@@1.0=./guix
8150@end example
8151
8152@item --with-input=@var{paquete}=@var{reemplazo}
8153Substituye dependencias de @var{paquete} por dependencias de
8154@var{reemplazo}. @var{paquete} debe ser un nombre de paquete, y
8155@var{reemplazo} debe ser una especificación de paquete como @code{guile} o
8156@code{guile@@1.8}.
8157
8158Por ejemplo, la orden siguiente construye Guix, pero substituye su
8159dependencia de la versión estable actual de Guile con una dependencia en la
8160versión antigua de Guile, @code{guile@@2.0}:
8161
8162@example
8163guix build --with-input=guile=guile@@2.0 guix
8164@end example
8165
8166Esta sustitución se realiza de forma recursiva y en profundidad. Por lo que
8167en este ejemplo, tanto @code{guix} como su dependencia @code{guile-json}
8168(que también depende de @code{guile}) se reconstruyen contra
8169@code{guile@@2.0}.
8170
8171Se implementa usando el procedimiento Scheme @code{package-input-rewriting}
8172(@pxref{Definición de paquetes, @code{package-input-rewriting}}).
8173
8174@item --with-graft=@var{paquete}=@var{reemplazo}
8175Es similar a @code{--with-input} pero con una diferencia importante: en vez
8176de reconstruir la cadena de dependencias completa, @var{reemplazo} se
8177construye y se @dfn{injerta} en los binarios que inicialmente hacían
8178referencia a @var{paquete}. @xref{Actualizaciones de seguridad}, para más información
8179sobre injertos.
8180
8181Por ejemplo, la orden siguiente injerta la versión 3.5.4 de GnuTLS en Wget y
8182todas sus dependencias, substituyendo las referencias a la versión de GnuTLS
8183que tienen actualmente:
8184
8185@example
8186guix build --with-graft=gnutls=gnutls@@3.5.4 wget
8187@end example
8188
8189Esta opción tiene la ventaja de ser mucho más rápida que la reconstrucción
8190de todo. Pero hay una trampa: funciona si y solo si @var{paquete} y
8191@var{reemplazo} son estrictamente compatibles---por ejemplo, si proporcionan
8192una biblioteca, la interfaz binaria de aplicación (ABI) de dichas
8193bibliotecas debe ser compatible. Si @var{reemplazo} es incompatible de
8194alguna manera con @var{paquete}, el paquete resultante puede no ser
8195usable. ¡Úsela con precaución!
8196
8197@item --with-git-url=@var{paquete}=@var{url}
8198@cindex Git, usar la última revisión
8199@cindex última revisión, construcción
8200Build @var{package} from the latest commit of the @code{master} branch of
8201the Git repository at @var{url}. Git sub-modules of the repository are
8202fetched, recursively.
8203
8204For example, the following command builds the NumPy Python library against
8205the latest commit of the master branch of Python itself:
8206
8207@example
8208guix build python-numpy \
8209 --with-git-url=python=https://github.com/python/cpython
8210@end example
8211
8212This option can also be combined with @code{--with-branch} or
8213@code{--with-commit} (see below).
8214
8215@cindex integración continua
8216Obviously, since it uses the latest commit of the given branch, the result
8217of such a command varies over time. Nevertheless it is a convenient way to
8218rebuild entire software stacks against the latest commit of one or more
8219packages. This is particularly useful in the context of continuous
8220integration (CI).
8221
8222Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed
8223up consecutive accesses to the same repository. You may want to clean it up
8224once in a while to save disk space.
8225
8226@item --with-branch=@var{paquete}=@var{rama}
8227Build @var{package} from the latest commit of @var{branch}. If the
8228@code{source} field of @var{package} is an origin with the @code{git-fetch}
8229method (@pxref{Referencia de ``origin''}) or a @code{git-checkout} object, the
8230repository URL is taken from that @code{source}. Otherwise you have to use
8231@code{--with-git-url} to specify the URL of the Git repository.
8232
8233For instance, the following command builds @code{guile-sqlite3} from the
8234latest commit of its @code{master} branch, and then builds @code{guix}
8235(which depends on it) and @code{cuirass} (which depends on @code{guix})
8236against this specific @code{guile-sqlite3} build:
8237
8238@example
8239guix build --with-branch=guile-sqlite3=master cuirass
8240@end example
8241
8242@item --with-commit=@var{paquete}=@var{revisión}
8243This is similar to @code{--with-branch}, except that it builds from
8244@var{commit} rather than the tip of a branch. @var{commit} must be a valid
8245Git commit SHA1 identifier.
8246@end table
8247
8248@node Opciones de construcción adicionales
8249@subsection Opciones de construcción adicionales
8250
8251Las opciones de línea de ordenes presentadas a continuación son específicas
8252de @command{guix build}.
8253
8254@table @code
8255
8256@item --quiet
8257@itemx -q
8258Build quietly, without displaying the build log; this is equivalent to
8259@code{--verbosity=0}. Upon completion, the build log is kept in @file{/var}
8260(or similar) and can always be retrieved using the @option{--log-file}
8261option.
8262
8263@item --file=@var{fichero}
8264@itemx -f @var{fichero}
8265Construye el paquete, derivación u otro objeto tipo-fichero al que evalúa el
8266código en @var{fichero} (@pxref{Expresiones-G, file-like objects}).
8267
8268Como un ejemplo, @var{fichero} puede contener una definición como esta
8269(@pxref{Definición de paquetes}):
8270
8271@example
8272@verbatiminclude package-hello.scm
8273@end example
8274
8275@item --expression=@var{expr}
8276@itemx -e @var{expr}
8277Construye el paquete o derivación al que @var{expr} evaulua.
8278
8279Por ejemplo, @var{expr} puede ser @code{(@@ (gnu packages guile)
8280guile-1.8)}, que designa sin ambigüedad a esta variante específica de la
8281versión 1.8 de Guile.
8282
8283De manera alternativa, @var{expr} puede ser una expresión-G, en cuyo caso se
8284usa como un programa de construcción pasado a @code{gexp->derivation}
8285(@pxref{Expresiones-G}).
8286
8287Por último, @var{expr} puede hacer referencia a un procedimiento mónadico
8288sin parámetros (@pxref{La mónada del almacén}). El procedimiento debe devolver una
8289derivación como un valor monádico, el cual después se pasa a través de
8290@code{run-with-store}.
8291
8292@item --source
8293@itemx -S
8294Construye las derivaciones de las fuentes de los paquetes, en vez de los
8295paquetes mismos.
8296
8297Por ejemplo, @code{guix build -S gcc} devuelve algo como
8298@file{/gnu/store/@dots{}-gcc-4.7.2.tar.bz2}, el cual es el archivador tar de
8299fuentes de GCC.
8300
8301El archivador tar devuelto es el resultado de aplicar cualquier parche y
8302fragmento de código en el origen (campo @code{origin}) del paquete
8303(@pxref{Definición de paquetes}).
8304
8305@item --sources
8306Obtiene y devuelve las fuentes de @var{paquete-o-derivación} y todas sus
8307dependencias, recursivamente. Esto es útil para obtener una copia local de
8308todo el código fuente necesario para construir los @var{paquetes},
8309permitiendole construirlos llegado el momento sin acceso a la red. Es una
8310extensión de la opción @code{--source} y puede aceptar uno de los siguientes
8311valores opcionales como parámetro:
8312
8313@table @code
8314@item package
8315Este valor hace que la opción @code{--sources} se comporte de la misma
8316manera que la opción @code{--source}.
8317
8318@item all
8319Construye las derivaciones de las fuentes de todos los paquetes, incluyendo
8320cualquier fuente que pueda enumerarse como entrada (campo
8321@code{inputs}). Este es el valor predeterminado.
8322
8323@example
8324$ guix build --sources tzdata
8325The following derivations will be built:
8326 /gnu/store/@dots{}-tzdata2015b.tar.gz.drv
8327 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8328@end example
8329
8330@item transitive
8331Construye las derivaciones de fuentes de todos los paquetes, así como todas
8332las entradas transitivas de los paquetes. Esto puede usarse, por ejemplo,
8333para obtener las fuentes de paquetes para una construcción posterior sin
8334conexión a la red.
8335
8336@example
8337$ guix build --sources=transitive tzdata
8338The following derivations will be built:
8339 /gnu/store/@dots{}-tzcode2015b.tar.gz.drv
8340 /gnu/store/@dots{}-findutils-4.4.2.tar.xz.drv
8341 /gnu/store/@dots{}-grep-2.21.tar.xz.drv
8342 /gnu/store/@dots{}-coreutils-8.23.tar.xz.drv
8343 /gnu/store/@dots{}-make-4.1.tar.xz.drv
8344 /gnu/store/@dots{}-bash-4.3.tar.xz.drv
8345@dots{}
8346@end example
8347
8348@end table
8349
8350@item --system=@var{sistema}
8351@itemx -s @var{sistema}
8352Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of the
8353system type of the build host. The @command{guix build} command allows you
8354to repeat this option several times, in which case it builds for all the
8355specified systems; other commands ignore extraneous @option{-s} options.
8356
8357@quotation Nota
8358La opción @code{--system} es para compilación @emph{nativa} y no debe
8359confundirse con la compilación cruzada. Véase @code{--target} más adelante
8360para información sobre compilación cruzada.
8361@end quotation
8362
8363Un ejemplo de uso de esta opción es en sistemas basados en Linux, que pueden
8364emular diferentes personalidades. Por ejemplo, pasar
8365@code{--system=i686-linux} en un sistema @code{x86_64-linux} o
8366@code{--system=armhf-linux} en un sistema @code{aarch64-linux} le permite
8367construir paquetes en un entorno de 32-bits completo.
8368
8369@quotation Nota
8370La construcción para un sistema @code{armhf-linux} está habilitada
8371incondicionalmente en máquinas @code{aarch64-linux}, aunque determinados
8372procesadores aarch64 no permiten esta funcionalidad, notablemente el
8373ThunderX.
8374@end quotation
8375
8376De manera similar, cuando la emulación transparente con QEMU y
8377@code{binfmt_misc} está habilitada (@pxref{Servicios de virtualización,
8378@code{qemu-binfmt-service-type}}), puede construir para cualquier sistema
8379para el que un manejador QEMU de @code{binfmt_misc} esté instalado.
8380
8381Las construcciones para un sistema distinto al de la máquina que usa pueden
8382delegarse también a una máquina remota de la arquitectura
8383correcta. @xref{Configuración de delegación del daemon}, para más información sobre
8384delegación.
8385
8386@item --target=@var{tripleta}
8387@cindex compilación cruzada
8388Compilación cruzada para la @var{tripleta}, que debe ser una tripleta GNU
8389válida, cómo @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets,
8390GNU configuration triplets,, autoconf, Autoconf}).
8391
8392@anchor{build-check}
8393@item --check
8394@cindex determinismo, comprobación
8395@cindex reproducibilidad, comprobación
8396Reconstruye @var{paquete-o-derivación}, que ya está disponible en el
8397almacén, y emite un error si los resultados de la construcción no son
8398idénticos bit-a-bit.
8399
8400Este mecanismo le permite comprobar si sustituciones previamente instaladas
8401son genuinas (@pxref{Sustituciones}), o si el resultado de la construcción de
8402un paquete es determinista. @xref{Invocación de guix challenge}, para más
8403información de referencia y herramientas.
8404
8405Cuando se usa conjuntamente con @option{--keep-failed}, la salida que
8406difiere se mantiene en el almacén, bajo
8407@file{/gnu/store/@dots{}-check}. Esto hace fácil buscar diferencias entre
8408los dos resultados.
8409
8410@item --repair
8411@cindex reparar elementos del almacén
8412@cindex corrupción, recuperarse de
8413Intenta reparar los elementos del almacén especificados, si están corruptos,
8414volviendo a descargarlos o reconstruyendolos.
8415
8416Esta operación no es atómica y por lo tanto está restringida a @code{root}.
8417
8418@item --derivations
8419@itemx -d
8420Devuelve las rutas de derivación, no las rutas de salida, de los paquetes
8421proporcionados.
8422
8423@item --root=@var{fichero}
8424@itemx -r @var{fichero}
8425@cindex GC, añadir raíces
8426@cindex raíces del recolector de basura, añadir
8427Hace que @var{fichero} sea un enlace simbólico al resultado, y lo registra
8428como una raíz del recolector de basura.
8429
8430Consecuentemente, los resultados de esta invocación de @command{guix build}
8431se protegen de la recolección de basura hasta que @var{fichero} se
8432elimine. Cuando se omite esa opción, los resultados son candidatos a la
8433recolección de basura en cuanto la construcción se haya
8434completado. @xref{Invocación de guix gc}, para más sobre las raíces del
8435recolector de basura.
8436
8437@item --log-file
8438@cindex logs de construcción, acceso
8439Devuelve los nombres de ficheros o URL de los log de construcción para el
8440@var{paquete-o-derivación} proporcionado, o emite un error si no se
8441encuentran los log de construcción.
8442
8443Esto funciona independientemente de cómo se especificasen los paquetes o
8444derivaciones. Por ejemplo, las siguientes invocaciones son equivalentes:
8445
8446@example
8447guix build --log-file `guix build -d guile`
8448guix build --log-file `guix build guile`
8449guix build --log-file guile
8450guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)'
8451@end example
8452
8453Si un log no está disponible localmente, y a menos que se proporcione
8454@code{--no-substitutes}, la orden busca el log correspondiente en uno de los
8455servidores de sustituciones (como se especificaron con
8456@code{--substitute-urls}).
8457
8458Por lo que dado el caso, imaginese que desea ver el log de construcción de
8459GDB en MIPS, pero realmente está en una máquina @code{x86_64}:
8460
8461@example
8462$ guix build --log-file gdb -s mips64el-linux
8463https://@value{SUBSTITUTE-SERVER}/log/@dots{}-gdb-7.10
8464@end example
8465
8466¡Puede acceder libremente a una biblioteca inmensa de log de construcción!
8467@end table
8468
8469@node Depuración de fallos de construcción
8470@subsection Depuración de fallos de construcción
8471
8472@cindex fallos de construcción, depuración
8473Cuando esté definiendo un paquete nuevo (@pxref{Definición de paquetes}),
8474probablemente se encuentre que dedicando algún tiempo a depurar y afinar la
8475construcción hasta obtener un resultado satisfactorio. Para hacerlo, tiene
8476que lanzar manualmente las órdenes de construcción en un entorno tan similar
8477como sea posible al que el daemon de construcción usa.
8478
8479Para ello, la primera cosa a hacer es usar la opción @option{--keep-failed}
8480o @option{-K} de @command{guix build}, lo que mantiene el árbol de la
8481construcción fallida en @file{/tmp} o el directorio que especificase con
8482@code{TMPDIR} (@pxref{Invocación de guix build, @code{--keep-failed}}).
8483
8484De ahí en adelante, puede usar @command{cd} para ir al árbol de la
8485construcción fallida y cargar el fichero @file{environment-variables}, que
8486contiene todas las definiciones de variables de entorno que existían cuando
8487la construcción falló. Digamos que está depurando un fallo en la
8488construcción del paquete @code{foo}; una sesión típica sería así:
8489
8490@example
8491$ guix build foo -K
8492@dots{} @i{build fails}
8493$ cd /tmp/guix-build-foo.drv-0
8494$ source ./environment-variables
8495$ cd foo-1.2
8496@end example
8497
8498Ahora puede invocar órdenes (casi) como si fuese el daemon y encontrar los
8499errores en su proceso de construcción.
8500
8501A veces ocurre que, por ejemplo, las pruebas de un paquete pasan cuando las
8502ejecuta manualmente pero fallan cuando el daemon las ejecuta. Esto puede
8503suceder debido a que el daemon construye dentro de contenedores donde, al
8504contrario que en nuestro entorno previo, el acceso a la red no está
8505disponible, @file{/bin/sh} no existe, etc. (@pxref{Configuración del entorno de construcción}).
8506
8507En esos casos, puede tener que inspeccionar el proceso de construcción desde
8508un contenedor similar al creado por el daemon de construcción:
8509
8510@example
8511$ guix build -K foo
8512@dots{}
8513$ cd /tmp/guix-build-foo.drv-0
8514$ guix environment --no-grafts -C foo --ad-hoc strace gdb
8515[env]# source ./environment-variables
8516[env]# cd foo-1.2
8517@end example
8518
8519Aquí, @command{guix environment -C} crea un contenedor y lanza un shell
8520nuevo en él (@pxref{Invocación de guix environment}). El fragmento
8521@command{--ad-hoc strace gdb} añade las ordenes @command{strace} y
8522@command{gdb} al contenedor, las cuales pueden resultar útiles durante la
8523depuración. La opción @option{--no-grafts} asegura que obtenemos exactamente
8524el mismo entorno, con paquetes sin injertos (@pxref{Actualizaciones de seguridad}, para
8525más información sobre los injertos).
8526
8527Para acercarnos más al contenedor usado por el daemon de construcción,
8528podemos eliminar @file{/bin/sh}:
8529
8530@example
8531[env]# rm /bin/sh
8532@end example
8533
8534(No se preocupe, es inocuo: todo esto ocurre en el contenedor de usar y
8535tirar creado por @command{guix environment}).
8536
8537La orden @command{strace} probablemente no esté en la ruta de búsqueda, pero
8538podemos ejecutar:
8539
8540@example
8541[env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check
8542@end example
8543
8544De este modo, no solo habrá reproducido las variables de entorno que usa el
8545daemon, también estará ejecutando el proceso de construcción en un
8546contenedor similar al usado por el daemon.
8547
8548
8549@node Invocación de guix edit
8550@section Invocación de @command{guix edit}
8551
8552@cindex @command{guix edit}
8553@cindex definición de paquete, edición
8554¡Tantos paquetes, tantos ficheros de fuentes! La orden @command{guix edit}
8555facilita la vida de las usuarias y empaquetadoras apuntando su editor al
8556fichero de fuentes que contiene la definición de los paquetes
8557especificados. Por ejemplo:
8558
8559@example
8560guix edit gcc@@4.9 vim
8561@end example
8562
8563@noindent
8564lanza el programa especificado en la variable de entorno @code{VISUAL} o en
8565@code{EDITOR} para ver la receta de GCC@tie{}4.9.3 y la de Vim.
8566
8567Si está usando una copia de trabajo de Git de Guix (@pxref{Construcción desde Git}), o ha creado sus propios paquetes en @code{GUIX_PACKAGE_PATH}
8568(@pxref{Módulos de paquetes}), será capaz de editar las recetas de los
8569paquetes. En otros casos, podrá examinar las recetas en modo de lectura
8570únicamente para paquetes actualmente en el almacén.
8571
8572
8573@node Invocación de guix download
8574@section Invocación de @command{guix download}
8575
8576@cindex @command{guix download}
8577@cindex descargando las fuentes de paquetes
8578Durante la escritura de una definición de paquete, las desarrolladoras
8579típicamente tienen que descargar un archivador tar de fuentes, calcular su
8580hash SHA256 y escribir ese hash en la definición del paquete
8581(@pxref{Definición de paquetes}). La herramienta @command{guix download} ayuda
8582con esta tarea: descarga un fichero de la URI proporcionada, lo añade al
8583almacén e imprime tanto su nombre de fichero en el almacén como su hash
8584SHA256.
8585
8586El hecho de que el fichero descargado se añada al almacén ahorra ancho de
8587banda: cuando el desarrollador intenta construir el paquete recién definido
8588con @command{guix build}, el archivador de fuentes no tiene que descargarse
8589de nuevo porque ya está en el almacén. También es una forma conveniente de
8590conservar ficheros temporalmente, que pueden ser borrados en un momento dado
8591(@pxref{Invocación de guix gc}).
8592
8593La orden @command{guix download} acepta las mismas URI que las usadas en las
8594definiciones de paquetes. En particular, permite URI @code{mirror://}. Las
8595URI @code{https} (HTTP sobre TLS) se aceptan @emph{cuando} el enlace Guile
8596con GnuTLS está disponible en el entorno de la usuaria; cuando no está
8597disponible se emite un error. @xref{Guile Preparations, how to install the
8598GnuTLS bindings for Guile,, gnutls-guile, GnuTLS-Guile}, para más
8599información.
8600
8601@command{guix download} verifica los certificados del servidor HTTPS
8602cargando las autoridades X.509 del directorio al que apunta la variable de
8603entorno @code{SSL_CERT_DIR} (@pxref{Certificados X.509}), a menos que se use
8604@option{--no-check-certificate}.
8605
8606Las siguientes opciones están disponibles:
8607
8608@table @code
8609@item --format=@var{fmt}
8610@itemx -f @var{fmt}
8611Escribe el hash en el formato especificado por @var{fmt}. Para más
8612información sobre los valores aceptados en @var{fmt}, @pxref{Invocación de guix hash}.
8613
8614@item --no-check-certificate
8615No valida los certificados X.509 de los servidores HTTPS.
8616
8617Cuando se usa esta opción, no tiene @emph{absolutamente ninguna garantía} de
8618que está comunicando con el servidor responsable de la URL auténtico, lo que
8619le hace vulnerables a ataques de intercepción (``man-in-the-middle'').
8620
8621@item --output=@var{fichero}
8622@itemx -o @var{fichero}
8623Almacena el fichero descargado en @var{fichero} en vez de añadirlo al
8624almacén.
8625@end table
8626
8627@node Invocación de guix hash
8628@section Invocación de @command{guix hash}
8629
8630@cindex @command{guix hash}
8631La orden @command{guix hash} calcula el hash SHA256 de un fichero. Es
8632principalmente una conveniente herramienta para cualquiera que contribuya a
8633la distribución: calcula el hash criptográfico de un fichero, que puede
8634usarse en la definición de un paquete (@pxref{Definición de paquetes}).
8635
8636La sintaxis general es:
8637
8638@example
8639guix hash @var{opciones} @var{fichero}
8640@end example
8641
8642Cuando @var{fichero} es @code{-} (un guión), @command{guix hash} calcula el
8643hash de los datos leídos por la entrada estándar. @command{guix hash} tiene
8644las siguientes opciones:
8645
8646@table @code
8647
8648@item --format=@var{fmt}
8649@itemx -f @var{fmt}
8650Escribe el hash en el formato especificado por @var{fmt}.
8651
8652Los formatos disponibles son: @code{nix-base32}, @code{base32},
8653@code{base16} (se puede usar también @code{hex} y @code{hexadecimal}).
8654
8655Si no se especifica la opción @option{--format}, @command{guix hash}
8656mostrará el hash en @code{nix-base32}. Esta representación es la usada en
8657las definiciones de paquetes.
8658
8659@item --recursive
8660@itemx -r
8661Calcula el hash de @var{fichero} recursivamente.
8662
8663@c FIXME: Replace xref above with xref to an ``Archive'' section when
8664@c it exists.
8665Es este caso el hash se calcula en un archivador que contiene @var{fichero},
8666incluyendo su contenido si es un directorio. Algunos de los metadatos de
8667@var{fichero} son parte del archivador; por ejemplo, cuando @var{fichero} es
8668un fichero normal, el hash es diferente dependiendo de si @var{fichero} es
8669ejecutable o no. Los metadatos como las marcas de tiempo no influyen en el
8670hash (@pxref{Invocación de guix archive}).
8671
8672@item --exclude-vcs
8673@itemx -x
8674Cuando se combina con @option{--recursive}, excluye los directorios del
8675sistema de control de versiones (@file{.bzr}, @file{.git}, @file{.hg},
8676etc.).
8677
8678@vindex git-fetch
8679Como un ejemplo, así es como calcularía el hash de una copia de trabajo Git,
8680lo cual es útil cuando se usa el método @code{git-fetch} (@pxref{Referencia de ``origin''}):
8681
8682@example
8683$ git clone http://example.org/foo.git
8684$ cd foo
8685$ guix hash -rx .
8686@end example
8687@end table
8688
8689@node Invocación de guix import
8690@section Invocación de @command{guix import}
8691
8692@cindex importar paquetes
8693@cindex importación de un paquete
8694@cindex conversión de un paquete
8695@cindex Invocación de @command{guix import}
8696La orden @command{guix import} es útil para quienes desean añadir un paquete
8697a la distribución con el menor trabajo posible---una demanda legítima. La
8698orden conoce algunos repositorios de los que puede ``importar'' metadatos de
8699paquetes. El resultado es una definición de paquete, o una plantilla de
8700ella, en el formato que conocemos (@pxref{Definición de paquetes}).
8701
8702La sintaxis general es:
8703
8704@example
8705guix import @var{importador} @var{opciones}@dots{}
8706@end example
8707
8708@var{importador} especifica la fuente de la que se importan los metadatos
8709del paquete, @var{opciones} especifica un identificador de paquete y otras
8710opciones específicas del @var{importador}. Actualmente, los ``importadores''
8711disponibles son:
8712
8713@table @code
8714@item gnu
8715Importa los metadatos del paquete GNU seleccionado. Proporciona una
8716plantilla para la última versión de dicho paquete GNU, incluyendo el hash de
8717su archivador tar de fuentes, y su sinopsis y descripción canónica.
8718
8719Información adicional como las dependencias del paquete y su licencia deben
8720ser deducidas manualmente.
8721
8722Por ejemplo, la siguiente orden devuelve una definición de paquete para
8723GNU@tie{}Hello.
8724
8725@example
8726guix import gnu hello
8727@end example
8728
8729Las opciones específicas de línea de ordenes son:
8730
8731@table @code
8732@item --key-download=@var{política}
8733Como en @code{guix refresh}, especifica la política de tratamiento de las
8734claves OpenPGP no encontradas cuando se verifica la firma del
8735paquete. @xref{Invocación de guix refresh, @code{--key-download}}.
8736@end table
8737
8738@item pypi
8739@cindex pypi
8740Importa metadatos desde el @uref{https://pypi.python.org/, índice de
8741paquetes Python (PyPI)}. La información se toma de la descripción con
8742formato JSON disponible en @code{pypi.python.org} y habitualmente incluye
8743toda la información relevante, incluyendo las dependencias del paquete. Para
8744una máxima eficiencia, se recomienda la instalación de la utilidad
8745@command{unzip}, de manera que el importador pueda extraer los archivos
8746wheel de Python y obtener datos de ellos.
8747
8748La siguiente orden importa los meta-datos para el paquete de Python
8749@code{itsdangerous}:
8750
8751@example
8752guix import pypi itsdangerous
8753@end example
8754
8755@table @code
8756@item --recursive
8757@itemx -r
8758Recorre el grafo de dependencias del paquete original proporcionado
8759recursivamente y genera expresiones de paquete para todos aquellos paquetes
8760que no estén todavía en Guix.
8761@end table
8762
8763@item gem
8764@cindex gem
8765Importa metadatos desde @uref{https://rubygems.org/, RubyGems}. La
8766información se extrae de la descripción en formato JSON disponible en
8767@code{rubygems.org} e incluye la información más relevante, incluyendo las
8768dependencias en tiempo de ejecución. Hay algunos puntos a tener en cuenta,
8769no obstante. Los metadatos no distinguen entre sinopsis y descripción, por
8770lo que se usa la misma cadena para ambos campos. Adicionalmente, los
8771detalles de las dependencias no-Ruby necesarias para construir extensiones
8772nativas no está disponible y se deja como ejercicio a la empaquetadora.
8773
8774La siguiente orden importa los meta-datos para el paquete de Ruby
8775@code{rails}:
8776
8777@example
8778guix import gem rails
8779@end example
8780
8781@table @code
8782@item --recursive
8783@itemx -r
8784Recorre el grafo de dependencias del paquete original proporcionado
8785recursivamente y genera expresiones de paquete para todos aquellos paquetes
8786que no estén todavía en Guix.
8787@end table
8788
8789@item cpan
8790@cindex CPAN
8791Importa metadatos desde @uref{https://www.metacpan.org/, MetaCPAN}. La
8792información se extrae de la descripción en formato JSON disponible a través
8793del @uref{https://fastapi.metacpan.org/, API de MetaCPAN} e incluye la
8794información más relevante, como las dependencias de otros módulos. La
8795información de la licencia debe ser comprobada atentamente. Si Perl está
8796disponible en el almacén, se usará la utilidad @code{corelist} para borrar
8797los módulos básicos de la lista de dependencias.
8798
8799La siguiente orden importa los metadatos del módulo Perl
8800@code{Acme::Boolean}:
8801
8802@example
8803guix import cpan Acme::Boolean
8804@end example
8805
8806@item cran
8807@cindex CRAN
8808@cindex Bioconductor
8809Importa metadatos desde @uref{https://cran.r-project.org/, CRAN}, el
8810repositorio central para el @uref{http://r-project.org, entorno estadístico
8811y gráfico GNU@tie{}R}.
8812
8813La información se extrae del fichero @code{DESCRIPTION} del paquete.
8814
8815La siguiente orden importa los metadatos del paquete de R @code{Cairo}:
8816
8817@example
8818guix import cran Cairo
8819@end example
8820
8821Cuando se añade @code{--recursive}, el importador recorrerá el grafo de
8822dependencias del paquete original proporcionado recursivamente y generará
8823expresiones de paquetes para todos aquellos que no estén todavía en Guix.
8824
8825Cuando se agrega @code{--archive=bioconductor}, los metadatos se importan de
8826@uref{https://www.bioconductor.org, Bioconductor}, un repositorio de
8827paquetes R para el análisis y comprensión de datos genéticos de alto caudal
8828en bioinformática.
8829
8830La información se extrae del fichero @code{DESCRIPTION} del paquete
8831publicado en la interfaz web del repositorio SVN de Bioconductor.
8832
8833La siguiente orden importa los metadatos del paquete de R
8834@code{GenomicRanges}:
8835
8836@example
8837guix import cran --archive=bioconductor GenomicRanges
8838@end example
8839
8840@item texlive
8841@cindex Tex Live
8842@cindex CTAN
8843Importa metadatos desde @uref{http://www.ctan.org/, CTAN}, la completa red
8844de archivos TeX para paquetes TeX que son parte de la
8845@uref{https://www.tug.org/texlive/, distribución TeX Live}.
8846
8847La información del paquete se obtiene a través del API XML proporcionado por
8848CTAN, mientras que el código fuente se descarga del repositorio SVN del
8849proyecto TeX Live. Se hace porque CTAN no guarda archivos con versiones.
8850
8851La siguiente orden importa los metadatos del paquete de TeX @code{fontspec}:
8852
8853@example
8854guix import texlive fontspec
8855@end example
8856
8857Cuando se añade @code{--archive=DIRECTORIO}, el código fuente no se descarga
8858del subdirectorio @file{latex} del árbol @file{texmf-dist/source} en el
8859repositorio SVN de Tex Live, sino de el directorio especificado bajo la
8860misma raíz.
8861
8862La siguiente orden importa los metadatos del paquete @code{ifxetex} de CTAN
8863mientras que obtiene las fuentes del directorio @file{texmf/source/generic}:
8864
8865@example
8866guix import texlive --archive=generic ifxetex
8867@end example
8868
8869@item json
8870@cindex JSON, importación
8871Importa metadatos de paquetes desde un fichero JSON local. Considere el
8872siguiente ejemplo de definición de paquete en formato JSON:
8873
8874@example
8875@{
8876 "name": "hello",
8877 "version": "2.10",
8878 "source": "mirror://gnu/hello/hello-2.10.tar.gz",
8879 "build-system": "gnu",
8880 "home-page": "https://www.gnu.org/software/hello/",
8881 "synopsis": "Hello, GNU world: An example GNU package",
8882 "description": "GNU Hello prints a greeting.",
8883 "license": "GPL-3.0+",
8884 "native-inputs": ["gcc@@6"]
8885@}
8886@end example
8887
8888Los nombres de los campos son los mismos que para el registro
8889@code{<package>} (@xref{Definición de paquetes}). Las referencias a otros
8890paquetes se proporcionan como listas JSON de cadenas de especificación de
8891paquete entrecomilladas como @code{guile} o @code{guile@@2.0}.
8892
8893El importador también permite una definición de fuentes más explícita usando
8894los campos comunes de los registros @code{<origin>}:
8895
8896@example
8897@{
8898 @dots{}
8899 "source": @{
8900 "method": "url-fetch",
8901 "uri": "mirror://gnu/hello/hello-2.10.tar.gz",
8902 "sha256": @{
8903 "base32": "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i"
8904 @}
8905 @}
8906 @dots{}
8907@}
8908@end example
8909
8910La siguiente orden importa los metadatos desde el fichero JSON
8911@code{hello.json} y devuelve una expresión de ``package'':
8912
8913@example
8914guix import json hello.json
8915@end example
8916
8917@item nix
8918Importa metadatos desde una copia local de las fuentes de la
8919@uref{http://nixos.org/nixpkgs/, distribución Nixpkgs}@footnote{Esto depende
8920de la orden @command{nix-instantiate} de @uref{http://nixos.org/nix/,
8921Nix}.}. Las definiciones de paquete en Nixpkgs típicamente están escritas en
8922una mezcla de lenguaje Nix y código Bash. Esta orden únicamente importa la
8923estructura de alto nivel del paquete escrita en lenguaje Nix. Normalmente
8924incluye todos los campos básicos de una definición de paquete.
8925
8926Cuando se importa un paquete GNU, la sinopsis y la descripción se
8927substituyen por la variante canónica oficial.
8928
8929Habitualmente, tendrá que ejecutar primero:
8930
8931@example
8932export NIX_REMOTE=daemon
8933@end example
8934
8935@noindent
8936de modo que @command{nix-instantiate} no intente abrir la base de datos Nix.
8937
8938Como un ejemplo, la orden siguiente importa la definición de paquete de
8939LibreOffice (más precisamente, importa la definición del paquete asociado al
8940atributo de nivel superior @code{libreoffice}):
8941
8942@example
8943guix import nix ~/path/to/nixpkgs libreoffice
8944@end example
8945
8946@item hackage
8947@cindex hackage
8948Importa metadatos desde el archivo central de paquetes de la comunidad
8949Haskell @uref{https://hackage.haskell.org/, Hackage}. La información se
8950obtiene de ficheros Cabal e incluye toda la información relevante,
8951incluyendo las dependencias del paquete.
8952
8953Las opciones específicas de línea de ordenes son:
8954
8955@table @code
8956@item --stdin
8957@itemx -s
8958Lee un fichero Cabal por la entrada estándar.
8959@item --no-test-dependencies
8960@itemx -t
8961No incluye las dependencias necesarias únicamente para las baterías de
8962pruebas.
8963@item --cabal-environment=@var{alist}
8964@itemx -e @var{alist}
8965@var{alist} es una lista asociativa Scheme que define el entorno en el que
8966los condicionales Cabal se evalúan. Los valores aceptados son: @code{os},
8967@code{arch}, @code{impl} y una cadena que representa el nombre de la
8968condición. El valor asociado a la condición tiene que ser o bien el símbolo
8969@code{true} o bien @code{false}. Los valores predeterminados asociados a las
8970claves @code{os}, @code{arch} y @code{impl} son @samp{linux}, @samp{x86_64}
8971y @samp{ghc}, respectivamente.
8972@item --recursive
8973@itemx -r
8974Recorre el grafo de dependencias del paquete original proporcionado
8975recursivamente y genera expresiones de paquete para todos aquellos paquetes
8976que no estén todavía en Guix.
8977@end table
8978
8979La siguiente orden importa los metadatos de la última versión del paquete
8980Haskell @code{HTTP} sin incluir las dependencias de las pruebas y
8981especificando la opción @samp{network-uri} con valor @code{false}:
8982
8983@example
8984guix import hackage -t -e "'((\"network-uri\" . false))" HTTP
8985@end example
8986
8987Se puede especificar opcionalmente una versión específica del paquete
8988añadiendo al nombre del paquete una arroba y el número de versión como en el
8989siguiente ejemplo:
8990
8991@example
8992guix import hackage mtl@@2.1.3.1
8993@end example
8994
8995@item stackage
8996@cindex stackage
8997El importador @code{stackage} es un recubrimiento sobre el de
8998@code{hackage}. Toma un nombre de paquete, busca la versión de paquete
8999incluida en una publicación de la versión de mantenimiento extendido (LTS)
9000@uref{https://www.stackage.org, Stackage} y usa el importador @code{hackage}
9001para obtener sus metadatos. Fíjese que es su decisión seleccionar una
9002publicación LTS compatible con el compilador GHC usado en Guix.
9003
9004Las opciones específicas de línea de ordenes son:
9005
9006@table @code
9007@item --no-test-dependencies
9008@itemx -t
9009No incluye las dependencias necesarias únicamente para las baterías de
9010pruebas.
9011@item --lts-version=@var{versión}
9012@itemx -l @var{versión}
9013@var{versión} es la versión LTS de publicación deseada. Si se omite se usa
9014la última publicación.
9015@item --recursive
9016@itemx -r
9017Recorre el grafo de dependencias del paquete original proporcionado
9018recursivamente y genera expresiones de paquete para todos aquellos paquetes
9019que no estén todavía en Guix.
9020@end table
9021
9022La siguiente orden importa los metadatos del paquete Haskell @code{HTTP}
9023incluido en la versión de publicación LTS de Stackage 7.18:
9024
9025@example
9026guix import stackage --lts-version=7.18 HTTP
9027@end example
9028
9029@item elpa
9030@cindex elpa
9031Importa metadatos desde el repositorio de archivos de paquetes Emacs Lisp
9032(ELPA) (@pxref{Packages,,, emacs, The GNU Emacs Manual}).
9033
9034Las opciones específicas de línea de ordenes son:
9035
9036@table @code
9037@item --archive=@var{repo}
9038@itemx -a @var{repo}
9039@var{repo} identifica el repositorio de archivos del que obtener la
9040información. Actualmente los repositorios disponibles y sus identificadores
9041son:
9042@itemize -
9043@item
9044@uref{http://elpa.gnu.org/packages, GNU}, seleccionado con el identificador
9045@code{gnu}. Es el predeterminado.
9046
9047Los paquetes de @code{elpa.gnu.org} están firmados con una de las claves que
9048contiene el anillo de claves GnuPG en
9049@file{share/emacs/25.1/etc/package-keyring.gpg} (o similar) en el paquete
9050@code{emacs} (@pxref{Package Installation, ELPA package signatures,, emacs,
9051The GNU Emacs Manual}).
9052
9053@item
9054@uref{http://stable.melpa.org/packages, MELPA-Stable}, seleccionado con el
9055identificador @code{melpa-stable}.
9056
9057@item
9058@uref{http://melpa.org/packages, MELPA}, seleccionado con el identificador
9059@code{melpa}.
9060@end itemize
9061
9062@item --recursive
9063@itemx -r
9064Recorre el grafo de dependencias del paquete original proporcionado
9065recursivamente y genera expresiones de paquete para todos aquellos paquetes
9066que no estén todavía en Guix.
9067@end table
9068
9069@item crate
9070@cindex crate
9071Importa metadatos desde el repositorio de paquetes Rust
9072@uref{https://crates.io, crates.io}.
9073
9074@item opam
9075@cindex OPAM
9076@cindex OCaml
9077Importa metadatos desde el repositorio de paquetes
9078@uref{https://opam.ocaml.org/, OPAM} usado por la comunidad OCaml.
9079@end table
9080
9081La estructura del código de @command{guix import} es modular. Sería útil
9082tener más importadores para otros formatos de paquetes, y su ayuda es
9083bienvenida aquí (@pxref{Contribuir}).
9084
9085@node Invocación de guix refresh
9086@section Invocación de @command{guix refresh}
9087
9088@cindex @command{guix refresh}
9089La principal audiencia de @command{guix refresh} son desarrolladoras de la
9090distribución de software GNU. Por defecto, informa de cualquier paquete
9091proporcionado por la distribución que esté anticuado comparado con la última
9092versión oficial, de esta manera:
9093
9094@example
9095$ guix refresh
9096gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1
9097gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0
9098@end example
9099
9100De manera alternativa, se pueden especificar los paquetes a considerar, en
9101cuyo caso se emite un aviso para paquetes que carezcan de actualizador:
9102
9103@example
9104$ guix refresh coreutils guile guile-ssh
9105gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh
9106gnu/packages/guile.scm:136:12: guile would be upgraded from 2.0.12 to 2.0.13
9107@end example
9108
9109@command{guix refresh} navega por los repositorios oficiales de cada paquete
9110y determina el número de versión mayor entre las publicaciones
9111encontradas. La orden sabe cómo actualizar tipos específicos de paquetes:
9112paquetes GNU, paquetes ELPA, etc.---vea la documentación de @option{--type}
9113más adelante. Hay muchos paquetes, no obstante, para los que carece de un
9114método para determinar si está disponible una versión oficial posterior. No
9115obstante, el mecanismo es extensible, ¡no tenga problema en contactarnos
9116para añadir un método nuevo!
9117
9118@table @code
9119
9120@item --recursive
9121Consider the packages specified, and all the packages upon which they
9122depend.
9123
9124@example
9125$ guix refresh --recursive coreutils
9126gnu/packages/acl.scm:35:2: warning: no updater for acl
9127gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4
9128gnu/packages/xml.scm:68:2: warning: no updater for expat
9129gnu/packages/multiprecision.scm:40:12: info: 6.1.2 is already the latest version of gmp
9130@dots{}
9131@end example
9132
9133@end table
9134
9135A veces el nombre oficial es diferente al nombre de paquete usado en Guix, y
9136@command{guix refresh} necesita un poco de ayuda. La mayor parte de los
9137actualizadores utilizan la propiedad @code{upstream-name} en las
9138definiciones de paquetes, que puede usarse para obtener dicho efecto:
9139
9140@example
9141(define-public network-manager
9142 (package
9143 (name "network-manager")
9144 ;; @dots{}
9145 (properties '((upstream-name . "NetworkManager")))))
9146@end example
9147
9148Cuando se proporciona @code{--update}, modifica los ficheros de fuentes de
9149la distribución para actualizar los números de versión y hash de los
9150archivadores tar de fuentes en las recetas de los paquetes (@pxref{Definición de paquetes}). Esto se consigue con la descarga del último archivador de
9151fuentes del paquete y su firma OpenPGP asociada, seguida de la verificación
9152del archivador descargado y su firma mediante el uso de @command{gpg}, y
9153finalmente con el cálculo de su hash. Cuando la clave pública usada para
9154firmar el archivador no se encuentra en el anillo de claves de la usuaria,
9155se intenta automáticamente su obtención desde un servidor de claves
9156públicas; cuando se encuentra, la clave se añade al anillo de claves de la
9157usuaria; en otro caso, @command{guix refresh} informa de un error.
9158
9159Se aceptan las siguientes opciones:
9160
9161@table @code
9162
9163@item --expression=@var{expr}
9164@itemx -e @var{expr}
9165Considera el paquete al que evalúa @var{expr}
9166
9167Es útil para hacer una referencia precisa de un paquete concreto, como en
9168este ejemplo:
9169
9170@example
9171guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)'
9172@end example
9173
9174Esta orden enumera los paquetes que dependen de la libc ``final''
9175(esencialmente todos los paquetes).
9176
9177@item --update
9178@itemx -u
9179Actualiza los ficheros fuente de la distribución (recetas de paquetes) en su
9180lugar. Esto se ejecuta habitualmente desde una copia de trabajo del árbol de
9181fuentes de Guix (@pxref{Ejecución de Guix antes de estar instalado}):
9182
9183@example
9184$ ./pre-inst-env guix refresh -s non-core -u
9185@end example
9186
9187@xref{Definición de paquetes}, para más información sobre la definición de
9188paquetes.
9189
9190@item --select=[@var{subconjunto}]
9191@itemx -s @var{subconjunto}
9192Selecciona todos los paquetes en @var{subconjunto}, o bien @code{core} o
9193bien @code{non-core}.
9194
9195El subconjunto @code{core} hace referencia a todos los paquetes en el núcleo
9196de la distribución---es decir, paquetes que se usan para construir ``todo lo
9197demás''. Esto incluye GCC, libc, Binutils, Bash, etc. Habitualmente, cambiar
9198uno de esos paquetes en la distribución conlleva la reconstrucción de todos
9199los demás. Por tanto, esas actualizaciones son una inconveniencia para las
9200usuarias en términos de tiempo de construcción o ancho de banda usado por la
9201actualización.
9202
9203El subconjunto @code{non-core} hace referencia a los paquetes restantes. Es
9204típicamente útil en casos donde una actualización de paquetes básicos no
9205sería conveniente.
9206
9207@item --manifest=@var{fichero}
9208@itemx -m @var{fichero}
9209Selecciona todos los paquetes del manifiesto en @var{fichero}. Es útil para
9210comprobar si algún paquete del manifiesto puede actualizarse.
9211
9212@item --type=@var{actualizador}
9213@itemx -t @var{actualizador}
9214Selecciona únicamente paquetes manejados por @var{actualizador} (puede ser
9215una lista separada por comas de actualizadores). Actualmente,
9216@var{actualizador} puede ser:
9217
9218@table @code
9219@item gnu
9220el actualizador de paquetes GNU;
9221@item gnome
9222el actualizador para paquetes GNOME;
9223@item kde
9224el actualizador para paquetes KDE;
9225@item xorg
9226el actualizador para paquetes X.org;
9227@item kernel.org
9228el actualizador para paquetes alojados en kernel.org;
9229@item elpa
9230el actualizador para paquetes @uref{http://elpa.gnu.org/, ELPA};
9231@item cran
9232el actualizador para paquetes @uref{https://cran.r-project.org/, CRAN};
9233@item bioconductor
9234el actualizador para paquetes R @uref{https://www.bioconductor.org/,
9235Bioconductor};
9236@item cpan
9237el actualizador para paquetes @uref{http://www.cpan.org/, CPAN};
9238@item pypi
9239el actualizador para paquetes @uref{https://pypi.python.org, PyPI}.
9240@item gem
9241el actualizador para paquetes @uref{https://rubygems.org, RubyGems}.
9242@item github
9243el actualizador para paquetes @uref{https://github.com, GitHub}.
9244@item hackage
9245el actualizador para paquetes @uref{https://hackage.haskell.org, Hackage}.
9246@item stackage
9247el actualizador para paquetes @uref{https://www.stackage.org, Stackage}.
9248@item crate
9249el actualizador para paquetes @uref{https://crates.io, Crates}.
9250@item launchpad
9251el actualizador para paquetes @uref{https://launchpad.net, Launchpad}.
9252@end table
9253
9254Por ejemplo, la siguiente orden únicamente comprueba actualizaciones de
9255paquetes Emacs alojados en @code{elpa.gnu.org} y actualizaciones de paquetes
9256CRAN:
9257
9258@example
9259$ guix refresh --type=elpa,cran
9260gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0
9261gnu/packages/emacs.scm:856:13: emacs-auctex would be upgraded from 11.88.6 to 11.88.9
9262@end example
9263
9264@end table
9265
9266Además, @command{guix refresh} puede recibir uno o más nombres de paquetes,
9267como en este ejemplo:
9268
9269@example
9270$ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8
9271@end example
9272
9273@noindent
9274La orden previa actualiza específicamente los paquetes @code{emacs} y
9275@code{idutils}. La opción @code{--select} no tendría efecto en este caso.
9276
9277Cuando se considera la actualización de un paquete, a veces es conveniente
9278conocer cuantos paquetes se verían afectados por la actualización y su
9279compatibilidad debería comprobarse. Para ello la siguiente opción puede
9280usarse cuando se proporcionan uno o más nombres de paquete a @command{guix
9281refresh}:
9282
9283@table @code
9284
9285@item --list-updaters
9286@itemx -L
9287Enumera los actualizadores disponibles y finaliza (vea la opción previa
9288@option{--type}).
9289
9290Para cada actualizador, muestra la fracción de paquetes que cubre; al final
9291muestra la fracción de paquetes cubiertos por todos estos actualizadores.
9292
9293@item --list-dependent
9294@itemx -l
9295Enumera los paquetes de nivel superior dependientes que necesitarían una
9296reconstrucción como resultado de la actualización de uno o más paquetes.
9297
9298@xref{Invocación de guix graph, el tipo @code{reverse-package} de @command{guix
9299graph}}, para información sobre cómo visualizar la lista de paquetes que
9300dependen de un paquete.
9301
9302@end table
9303
9304Sea consciente de que la opción @code{--list-dependent} únicamente
9305@emph{aproxima} las reconstrucciones necesarias como resultado de una
9306actualización. Más reconstrucciones pueden ser necesarias bajo algunas
9307circunstancias.
9308
9309@example
9310$ guix refresh --list-dependent flex
9311Building the following 120 packages would ensure 213 dependent packages are rebuilt:
9312hop@@2.4.0 geiser@@0.4 notmuch@@0.18 mu@@0.9.9.5 cflow@@1.4 idutils@@4.6 @dots{}
9313@end example
9314
9315La orden previa enumera un conjunto de paquetes que puede ser construido
9316para comprobar la compatibilidad con una versión actualizada del paquete
9317@code{flex}.
9318
9319@table @code
9320
9321@item --list-transitive
9322Enumera todos los paquetes de los que uno o más paquetes dependen.
9323
9324@example
9325$ guix refresh --list-transitive flex
9326flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6
9327bison@@3.0.5 indent@@2.2.10 tar@@1.30 gzip@@1.9 bzip2@@1.0.6 xz@@5.2.4 file@@5.33 @dots{}
9328@end example
9329
9330@end table
9331
9332La orden previa enumera un conjunto de paquetes que, en caso de cambiar,
9333causarían la reconstrucción de @code{flex}.
9334
9335Las siguientes opciones pueden usarse para personalizar la operación de
9336GnuPG:
9337
9338@table @code
9339
9340@item --gpg=@var{orden}
9341Use @var{orden} como la orden de GnuPG 2.x. Se busca @var{orden} en
9342@code{PATH}.
9343
9344@item --keyring=@var{fichero}
9345Usa @var{fichero} como el anillo de claves para claves de
9346proveedoras. @var{fichero} debe estar en el @dfn{formato keybox}. Los
9347ficheros Keybox normalmente tienen un nombre terminado en @file{.kbx} y
9348GNU@tie{}Privacy Guard (GPG) puede manipular estos ficheros (@pxref{kbxutil,
9349@command{kbxutil},, gnupg, Using the GNU Privacy Guard}, para información
9350sobre una herramienta para manipular ficheros keybox).
9351
9352Cuando se omite esta opción, @command{guix refresh} usa
9353@file{~/.config/guix/upstream/trustedkeys.kbx} como el anillo de claves para
9354las firmas de proveedoras. Las firmas OpenPGP son comprobadas contra claves
9355de este anillo; las claves que falten son descargadas a este anillo de
9356claves también (véase @option{--key-download} a continuación).
9357
9358Puede exportar claves de su anillo de claves GPG predeterminado en un
9359fichero keybox usando órdenes como esta:
9360
9361@example
9362gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mianillo.kbx
9363@end example
9364
9365Del mismo modo, puede obtener claves de un archivo keybox específico así:
9366
9367@example
9368gpg --no-default-keyring --keyring mianillo.kbx \
9369 --recv-keys @value{OPENPGP-SIGNING-KEY-ID}
9370@end example
9371
9372@ref{GPG Configuration Options, @option{--keyring},, gnupg, Using the GNU
9373Privacy Guard}, para más información sobre la opción @option{--keyring} de
9374GPG.
9375
9376@item --key-download=@var{política}
9377Maneja las claves no encontradas de acuerdo a la @var{política}, que puede
9378ser una de:
9379
9380@table @code
9381@item always
9382Siempre descarga las claves OpenPGP no encontradas del servidor de claves, y
9383las añade al anillo de claves GnuPG de la usuaria.
9384
9385@item never
9386Nunca intenta descargar claves OpenPGP no encontradas. Simplemente propaga
9387el error.
9388
9389@item interactive
9390Cuando se encuentra un paquete firmado por una clave OpenPGP desconocida,
9391pregunta a la usuaria si descargarla o no. Este es el comportamiento
9392predeterminado.
9393@end table
9394
9395@item --key-server=@var{dirección}
9396Use @var{dirección} como el servidor de claves OpenPGP cuando se importa una
9397clave pública.
9398
9399@end table
9400
9401The @code{github} updater uses the @uref{https://developer.github.com/v3/,
9402GitHub API} to query for new releases. When used repeatedly e.g.@: when
9403refreshing all packages, GitHub will eventually refuse to answer any further
9404API requests. By default 60 API requests per hour are allowed, and a full
9405refresh on all GitHub packages in Guix requires more than this.
9406Authentication with GitHub through the use of an API token alleviates these
9407limits. To use an API token, set the environment variable
9408@code{GUIX_GITHUB_TOKEN} to a token procured from
9409@uref{https://github.com/settings/tokens} or otherwise.
9410
9411
9412@node Invocación de guix lint
9413@section Invocación de @command{guix lint}
9414
9415@cindex @command{guix lint}
9416@cindex paquete, comprobación de errores
9417La orden @command{guix lint} sirve para ayudar a las desarrolladoras de
9418paquetes a evitar errores comunes y usar un estilo consistente. Ejecuta un
9419número de comprobaciones en un conjunto de paquetes proporcionado para
9420encontrar errores comunes en sus definiciones. Los @dfn{comprobadores}
9421disponibles incluyen (véase @code{--list-checkers} para una lista completa):
9422
9423@table @code
9424@item synopsis
9425@itemx description
9426Valida ciertas reglas tipográficas y de estilo en la descripción y sinopsis
9427de cada paquete.
9428
9429@item inputs-should-be-native
9430Identifica entradas que probablemente deberían ser entradas nativas.
9431
9432@item source
9433@itemx home-page
9434@itemx mirror-url
9435@itemx github-url
9436@itemx source-file-name
9437Comprueba las URL @code{home-page} y @code{source} e informa aquellas que no
9438sean válidas. Sugiere una URL @code{mirror://} cuando sea aplicable. Si la
9439URL @code{source} redirecciona a una URL GitHub, recomienda el uso de la URL
9440GitHub. Comprueba que el nombre de fichero de las fuentes es significativo,
9441por ejemplo que no es simplemente un número de versión o revisión git, sin
9442un nombre @code{file-name} declarado (@pxref{Referencia de ``origin''}).
9443
9444@item source-unstable-tarball
9445Parse the @code{source} URL to determine if a tarball from GitHub is
9446autogenerated or if it is a release tarball. Unfortunately GitHub's
9447autogenerated tarballs are sometimes regenerated.
9448
9449@item cve
9450@cindex vulnerabilidades de seguridad
9451@cindex CVE, vulnerabilidades y exposiciones comunes
9452Informa de vulnerabilidades encontradas en las bases de datos de
9453vulnerabilidades y exposiciones comunes (CVE) del año actual y el pasado
9454@uref{https://nvd.nist.gov/download.cfm#CVE_FEED, publicadas por el NIST de
9455EEUU}.
9456
9457Para ver información acerca de una vulnerabilidad particular, visite páginas
9458como:
9459
9460@itemize
9461@item
9462@indicateurl{https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-YYYY-ABCD}
9463@item
9464@indicateurl{https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-YYYY-ABCD}
9465@end itemize
9466
9467@noindent
9468donde @code{CVE-YYYY-ABCD} es el identificador CVE---por ejemplo,
9469@code{CVE-2015-7554}.
9470
9471Las desarrolladoras de paquetes pueden especificar en las recetas del
9472paquete el nombre y versión en la @uref{https://nvd.nist.gov/cpe.cfm,
9473plataforma común de enumeración (CPE)} del paquete cuando difieren del
9474nombre o versión que usa Guix, como en este ejemplo:
9475
9476@example
9477(package
9478 (name "grub")
9479 ;; @dots{}
9480 ;; CPE llama a este paquete "grub2".
9481 (properties '((cpe-name . "grub2")
9482 (cpe-version . "2.3")))
9483@end example
9484
9485@c See <http://www.openwall.com/lists/oss-security/2017/03/15/3>.
9486Algunas entradas en la base de datos CVE no especifican a qué versión del
9487paquete hacen referencia, y por lo tanto ``permanecen visibles'' para
9488siempre. Las desarrolladoras de paquetes que encuentren alertas CVE y
9489verifiquen que pueden ignorarse, pueden declararlas como en este ejemplo:
9490
9491@example
9492(package
9493 (name "t1lib")
9494 ;; @dots{}
9495 ;; Estas alertas de CVE no aplican y pueden ignorarse
9496 ;; con seguridad.
9497 (properties `((lint-hidden-cve . ("CVE-2011-0433"
9498 "CVE-2011-1553"
9499 "CVE-2011-1554"
9500 "CVE-2011-5244")))))
9501@end example
9502
9503@item formatting
9504Avisa de problemas de formato obvios en el código fuente: espacios en blanco
9505al final de las líneas, uso de tabuladores, etc.
9506@end table
9507
9508La sintaxis general es:
9509
9510@example
9511guix lint @var{opciones} @var{paquete}@dots{}
9512@end example
9513
9514Si no se proporciona ningún paquete en la linea de órdenes, todos los
9515paquetes se comprueban. Las @var{opciones} pueden ser cero o más de las
9516siguientes:
9517
9518@table @code
9519@item --list-checkers
9520@itemx -l
9521Enumera y describe todos los comprobadores disponibles que se ejecutarán
9522sobre los paquetes y finaliza.
9523
9524@item --checkers
9525@itemx -c
9526Habilita únicamente los comprobadores especificados en una lista separada
9527por comas que use los nombres devueltos por @code{--list-checkers}.
9528
9529@end table
9530
9531@node Invocación de guix size
9532@section Invocación de @command{guix size}
9533
9534@cindex tamaño
9535@cindex tamaño del paquete
9536@cindex clausura
9537@cindex @command{guix size}
9538La orden @command{guix size} ayuda a las desarrolladoras de paquetes a
9539perfilar el uso de disco de los paquetes. Es fácil pasar por encima el
9540impacto que produce añadir una dependencia adicional a un paquete, o el
9541impacto del uso de una salida única para un paquete que puede ser dividido
9542fácilmente (@pxref{Paquetes con múltiples salidas}). Estos son los problemas
9543típicos que @command{guix size} puede resaltar.
9544
9545Se le pueden proporcionar una o más especificaciones de paquete como
9546@code{gcc@@4.8} o @code{guile:debug}, o un nombre de fichero en el
9547almacén. Considere este ejemplo:
9548
9549@example
9550$ guix size coreutils
9551store item total self
9552/gnu/store/@dots{}-gcc-5.5.0-lib 60.4 30.1 38.1%
9553/gnu/store/@dots{}-glibc-2.27 30.3 28.8 36.6%
9554/gnu/store/@dots{}-coreutils-8.28 78.9 15.0 19.0%
9555/gnu/store/@dots{}-gmp-6.1.2 63.1 2.7 3.4%
9556/gnu/store/@dots{}-bash-static-4.4.12 1.5 1.5 1.9%
9557/gnu/store/@dots{}-acl-2.2.52 61.1 0.4 0.5%
9558/gnu/store/@dots{}-attr-2.4.47 60.6 0.2 0.3%
9559/gnu/store/@dots{}-libcap-2.25 60.5 0.2 0.2%
9560total: 78.9 MiB
9561@end example
9562
9563@cindex clausura
9564Los elementos del almacén enumerados aquí constituyen la @dfn{clausura
9565transitiva} de Coreutils---es decir, Coreutils y todas sus dependencias,
9566recursivamente---como sería devuelto por:
9567
9568@example
9569$ guix gc -R /gnu/store/@dots{}-coreutils-8.23
9570@end example
9571
9572Aquí la salida muestra tres columnas junto a los elementos del almacén. La
9573primera columna, etiquetada ``total'', muestra el tamaño en mebibytes (MiB)
9574de la clausura del elemento del almacén---es decir, su propio tamaño sumado
9575al tamaño de todas sus dependencias. La siguiente columna, etiquetada
9576``self'', muestra el tamaño del elemento en sí. La última columna muestra la
9577relación entre el tamaño del elemento en sí frente al espacio ocupado por
9578todos los elementos enumerados.
9579
9580En este ejemplo, vemos que la clausura de Coreutils ocupa 79@tie{}MiB, cuya
9581mayor parte son libc y las bibliotecas auxiliares de GCC para tiempo de
9582ejecución. (Que libc y las bibliotecas de GCC representen una fracción
9583grande de la clausura no es un problema en sí, puesto que siempre están
9584disponibles en el sistema de todas maneras).
9585
9586Cuando los paquetes pasados a @command{guix size} están disponibles en el
9587almacén@footnote{Más precisamente, @command{guix size} busca la variante
9588@emph{sin injertos} de los paquetes, como el devuelto por @code{guix build
9589@var{paquete} --no-grafts}. @xref{Actualizaciones de seguridad}, para información sobre
9590injertos.} consultando al daemon para determinar sus dependencias, y mide su
9591tamaño en el almacén, de forma similar a @command{du -ms --apparent-size}
9592(@pxref{du invocation,,, coreutils, GNU Coreutils}).
9593
9594Cuando los paquetes proporcionados @emph{no} están en el almacén,
9595@command{guix size} informa en base de las sustituciones disponibles
9596(@pxref{Sustituciones}). Esto hace posible perfilar el espacio en disco
9597incluso de elementos del almacén que no están en el disco, únicamente
9598disponibles de forma remota.
9599
9600Puede especificar también varios nombres de paquetes:
9601
9602@example
9603$ guix size coreutils grep sed bash
9604store item total self
9605/gnu/store/@dots{}-coreutils-8.24 77.8 13.8 13.4%
9606/gnu/store/@dots{}-grep-2.22 73.1 0.8 0.8%
9607/gnu/store/@dots{}-bash-4.3.42 72.3 4.7 4.6%
9608/gnu/store/@dots{}-readline-6.3 67.6 1.2 1.2%
9609@dots{}
9610total: 102.3 MiB
9611@end example
9612
9613@noindent
9614En este ejemplo vemos que la combinación de los cuatro paquetes toma
9615102.3@tie{}MiB en total, lo cual es mucho menos que la suma de cada
9616clausura, ya que tienen muchas dependencias en común.
9617
9618Las opciones disponibles son:
9619
9620@table @option
9621
9622@item --substitute-urls=@var{urls}
9623Usa la información de sustituciones de
9624@var{urls}. @xref{client-substitute-urls, la misma opción en @code{guix
9625build}}.
9626
9627@item --sort=@var{clave}
9628Ordena las líneas de acuerdo a @var{clave}, una de las siguientes opciones:
9629
9630@table @code
9631@item self
9632el tamaño de cada elemento (predeterminada);
9633@item clausura
9634el tamaño total de la clausura del elemento.
9635@end table
9636
9637@item --map-file=@var{fichero}
9638Escribe un mapa gráfico del uso del disco en formato PNG en el
9639@var{fichero}.
9640
9641Para el ejemplo previo, el mapa tiene esta pinta:
9642
9643@image{images/coreutils-size-map,5in,, mapa del uso del disco de Coreutils
9644producido por @command{guix size}}
9645
9646Esta opción necesita que la biblioteca
9647@uref{http://wingolog.org/software/guile-charting/, Guile-Charting} esté
9648instalada y visible en la ruta de búsqueda de módulos Guile. Cuando no es el
9649caso, @command{guix size} produce un error al intentar cargarla.
9650
9651@item --system=@var{sistema}
9652@itemx -s @var{sistema}
9653Considera paquetes para @var{sistema}---por ejemplo, @code{x86_64-linux}.
9654
9655@end table
9656
9657@node Invocación de guix graph
9658@section Invocación de @command{guix graph}
9659
9660@cindex GAD (DAG en Inglés)
9661@cindex @command{guix graph}
9662@cindex dependencias de un paquete
9663Los paquetes y sus dependencias forman un @dfn{grafo}, específicamente un
9664grafo acíclico dirigido (GAD, DAG en Inglés). Puede hacerse difícil
9665rápidamente tener un modelo mental del GAD del paquete, por lo que la orden
9666@command{guix graph} proporciona una representación virtual del GAD. Por
9667defecto, @command{guix graph} emite una representación en GAD en el formato
9668de entrada de @uref{http://graphviz.org/,Graphviz}, por lo que su salida
9669puede ser pasada directamente a la herramienta @command{dot} de
9670Graphviz. También puede emitir una página HTMP con código JavaScript
9671embebido para mostrar un ``diagrama de acorde'' en un navegador Web, usando
9672la biblioteca @uref{https://d3js.org/, d3.js}, o emitir consultas Cypher
9673para construir un grafo en una base de datos de grafos que acepte el
9674lenguaje de consultas @uref{http://www.opencypher.org/, openCypher}. La
9675sintaxis general es:
9676
9677@example
9678guix graph @var{opciones} @var{paquete}@dots{}
9679@end example
9680
9681Por ejemplo, la siguiente orden genera un fichero PDF que representa el GAD
9682para GNU@tie{}Core Utilities, mostrando sus dependencias en tiempo de
9683construcción:
9684
9685@example
9686guix graph coreutils | dot -Tpdf > gad.pdf
9687@end example
9688
9689La salida es algo así:
9690
9691@image{images/coreutils-graph,2in,,Grafo de dependencias de GNU Coreutils}
9692
9693Bonito y pequeño grafo, ¿no?
9694
9695¡Pero hay más de un grafo! El grafo previo es conciso: es el grafo de los
9696objetos package, omitiendo las entradas implícitas como GCC, libc, grep,
9697etc. Es habitualmente útil tener un grafo conciso así, pero a veces una
9698puede querer ver más detalles. @command{guix graph} implementa varios tipos
9699de grafos, permitiendole seleccionar el nivel de detalle:
9700
9701@table @code
9702@item package
9703Este es el tipo por defecto usado en el ejemplo previo. Muestra el GAD de
9704objetos package, excluyendo dependencias implícitas. Es conciso, pero deja
9705fuera muchos detalles.
9706
9707@item reverse-package
9708Esto muestra el GAD @emph{inverso} de paquetes. Por ejemplo:
9709
9710@example
9711guix graph --type=reverse-package ocaml
9712@end example
9713
9714...@: yields the graph of packages that @emph{explicitly} depend on OCaml
9715(if you are also interested in cases where OCaml is an implicit dependency,
9716see @code{reverse-bag} below.)
9717
9718Fíjese que esto puede producir grafos inmensos para los paquetes básicos. Si
9719todo lo que quiere saber es el número de paquetes que dependen de uno
9720determinado, use @command{guix refresh --list-dependent} (@pxref{Invocación de guix refresh, @option{--list-dependent}}).
9721
9722@item bag-emerged
9723Este es el GAD del paquete, @emph{incluyendo} entradas implícitas.
9724
9725Por ejemplo, la siguiente orden:
9726
9727@example
9728guix graph --type=bag-emerged coreutils | dot -Tpdf > gad.pdf
9729@end example
9730
9731...@: emite este grafo más grande:
9732
9733@image{images/coreutils-bag-graph,,5in,Grafo de dependencias detallado de
9734GNU Coreutils}
9735
9736En la parte inferior del grafo, vemos todas las entradas implícitas de
9737@var{gnu-build-system} (@pxref{Sistemas de construcción, @code{gnu-build-system}}).
9738
9739Ahora bien, fijese que las dependencias de estas entradas implícitas---es
9740decir, las @dfn{dependencias del lanzamiento inicial}
9741(@pxref{Lanzamiento inicial})---no se muestran aquí para mantener una salida
9742concisa.
9743
9744@item bag
9745Similar a @code{bag-emerged}, pero esta vez incluye todas las dependencias
9746del lanzamiento inicial.
9747
9748@item bag-with-origins
9749Similar a @code{bag}, pero también muestra los orígenes y sus dependencias.
9750
9751@item reverse-bag
9752This shows the @emph{reverse} DAG of packages. Unlike
9753@code{reverse-package}, it also takes implicit dependencies into account.
9754For example:
9755
9756@example
9757guix graph -t reverse-bag dune
9758@end example
9759
9760@noindent
9761...@: yields the graph of all packages that depend on Dune, directly or
9762indirectly. Since Dune is an @emph{implicit} dependency of many packages
9763@i{via} @code{dune-build-system}, this shows a large number of packages,
9764whereas @code{reverse-package} would show very few if any.
9765
9766@item derivación
9767Esta es la representación más detallada: muestra el GAD de derivaciones
9768(@pxref{Derivaciones}) y elementos simples del almacén. Comparada con las
9769representaciones previas, muchos nodos adicionales son visibles, incluyendo
9770los guiones de construcción, parches, módulos Guile, etc.
9771
9772Para este tipo de grafo, también es posible pasar un nombre de fichero
9773@file{.drv} en vez del nombre del paquete, como en:
9774
9775@example
9776guix graph -t derivation `guix system build -d mi-configuracion.scm`
9777@end example
9778
9779@item module
9780Este es el grafo de los @dfn{módulos de paquete} (@pxref{Módulos de paquetes}). Por ejemplo, la siguiente orden muestra el grafo para el módulo
9781de paquetes que define el paquete @code{guile}:
9782
9783@example
9784guix graph -t module guile | dot -Tpdf > grafo-del-modulo.pdf
9785@end example
9786@end table
9787
9788Todos los tipos previos corresponden a las @emph{dependencias durante la
9789construcción}. El grafo siguiente representa las @emph{dependencias en
9790tiempo de ejecución}:
9791
9792@table @code
9793@item references
9794Este es el grafo de @dfn{referencias} de la salida de un paquete, como lo
9795devuelve @command{guix gc --references} (@pxref{Invocación de guix gc}).
9796
9797Si la salida del paquete proporcionado no está disponible en el almacén,
9798@command{guix graph} intenta obtener la información de dependencias desde
9799las sustituciones.
9800
9801Aquí también puede proporcionar un nombre de fichero del almacén en vez de
9802un nombre de paquete. Por ejemplo, la siguiente orden produce el grafo de
9803referencias de su perfil (¡el cuál puede ser grande!):
9804
9805@example
9806guix graph -t references `readlink -f ~/.guix-profile`
9807@end example
9808
9809@item referrers
9810Este es el grafo de @dfn{referentes} de la salida de un paquete, como lo
9811devuelve @command{guix gc --referrers} (@pxref{Invocación de guix gc}).
9812
9813Depende exclusivamente de información en su almacén. Por ejemplo, supongamos
9814que la versión actual de Inkscape está disponible en 10 perfiles en su
9815máquina; @command{guix graph -t referrers inkscape} mostrará un grafo cuya
9816raíz es Inkscape y con esos 10 perfiles enlazados a ella.
9817
9818Puede ayudar a determinar qué impide que un elemento del almacén sea
9819recolectado.
9820
9821@end table
9822
9823Las opciones disponibles son las siguientes:
9824
9825@table @option
9826@item --type=@var{tipo}
9827@itemx -t @var{tipo}
9828Produce un grafo de salida de @var{tipo}, donde @var{tipo} debe ser uno de
9829los valores enumerados previamente.
9830
9831@item --list-types
9832Enumera los tipos de grafos implementados.
9833
9834@item --backend=@var{motor}
9835@itemx -b @var{motor}
9836Produce un grafo usando el @var{motor} seleccionado.
9837
9838@item --list-backends
9839Enumera los motores de grafos implementados.
9840
9841Actualmente, los motores disponibles son Graphviz y d3.js.
9842
9843@item --expression=@var{expr}
9844@itemx -e @var{expr}
9845Considera el paquete al que evalúa @var{expr}
9846
9847Es útil para hacer una referencia precisa de un paquete concreto, como en
9848este ejemplo:
9849
9850@example
9851guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)'
9852@end example
9853
9854@item --system=@var{sistema}
9855@itemx -s @var{sistema}
9856Muestra el grafo para @var{sistema}---por ejemplo, @code{i686-linux}.
9857
9858El grafo de dependencias del paquete es altamente independiente de la
9859arquitectura, pero existen algunas partes dependientes de la arquitectura
9860que esta opción le permite visualizar.
9861@end table
9862
9863
9864
9865@node Invocación de guix publish
9866@section Invocación de @command{guix publish}
9867
9868@cindex @command{guix publish}
9869El propósito de @command{guix publish} es permitir a las usuarias compartir
9870fácilmente su almacén con otras, quienes pueden usarlo como servidor de
9871sustituciones (@pxref{Sustituciones}).
9872
9873Cuando @command{guix publish} se ejecuta, lanza un servidor HTTP que permite
9874a cualquiera que tenga acceso a través de la red obtener sustituciones de
9875él. Esto significa que cualquier máquina que ejecute Guix puede actuar como
9876si fuese una granja de construcción, ya que la interfaz HTTP es compatible
9877con Hydra, el software detrás de la granja de construcción
9878@code{@value{SUBSTITUTE-SERVER}}.
9879
9880Por seguridad, cada sustitución se firma, permitiendo a las receptoras
9881comprobar su autenticidad e integridad (@pxref{Sustituciones}). Debido a que
9882@command{guix publish} usa la clave de firma del sistema, que es únicamente
9883legible por la administradora del sistema, debe iniciarse como root; la
9884opción @code{--user} hace que renuncie a sus privilegios tan pronto como sea
9885posible.
9886
9887El par claves de firma debe generarse antes de ejecutar @command{guix
9888publish}, usando @command{guix archive --generate-key} (@pxref{Invocación de guix archive}).
9889
9890La sintaxis general es:
9891
9892@example
9893guix publish @var{opciones}@dots{}
9894@end example
9895
9896La ejecución de @command{guix publish} sin ningún parámetro adicional
9897lanzará un servidor HTTP en el puerto 8080:
9898
9899@example
9900guix publish
9901@end example
9902
9903Una vez el servidor de publicación ha sido autorizado (@pxref{Invocación de guix archive}), el daemon puede descargar sustituciones de él:
9904
9905@example
9906guix-daemon --substitute-urls=http://example.org:8080
9907@end example
9908
9909Por defecto, @command{guix publish} comprime los archivos al vuelo cuando es
9910necesario. Este modo ``al vuelo'' es conveniente ya que no necesita
9911configuración y está disponible inmediatamente. No obstante, cuando se
9912proporciona servicio a muchos clientes, se recomienda usar la opción
9913@option{--cache}, que habilita el almacenamiento en caché de los archivos
9914antes de enviarlos a los clientes---véase a continuación para más
9915detalles. La orden @command{guix weather} proporciona una forma fácil de
9916comprobar lo que proporciona un servidor (@pxref{Invocación de guix weather}).
9917
9918Además @command{guix publish} también sirve como un espejo de acceso por
9919contenido a ficheros de fuentes a los que los registros @code{origin} hacen
9920referencia (@pxref{Referencia de ``origin''}). Por ejemplo, si asumimos que
9921@command{guix publish} se ejecuta en @code{example.org}, la siguiente URL
9922devuelve directamente el fichero @file{hello-2.10.tar.gz} con el hash SHA256
9923proporcionado (representado en formato @code{nix-base32}, @pxref{Invocación de guix hash}).
9924
9925@example
9926http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i
9927@end example
9928
9929Obviamente estas URL funcionan solamente para ficheros que se encuentran en
9930el almacén; en otros casos devuelven un 404 (``No encontrado'').
9931
9932@cindex logs de construcción, publicación
9933Los log de construcción están disponibles desde URL @code{/log} como:
9934
9935@example
9936http://example.org/log/gwspk@dots{}-guile-2.2.3
9937@end example
9938
9939@noindent
9940Cuando @command{guix-daemon} está configurado para almacenar comprimidos los
9941log de construcción, como sucede de forma predeterminada (@pxref{Invocación de guix-daemon}), las URL @code{/log} devuelven los log igualmente comprimidos,
9942con un @code{Content-Type} adecuado y/o una cabecera
9943@code{Content-Encoding}. Recomendamos ejecutar @command{guix-daemon} con
9944@code{--log-compression=gzip} ya que los navegadores Web pueden extraer el
9945contenido automáticamente, lo cual no es el caso con la compresión bzip2.
9946
9947Las siguientes opciones están disponibles:
9948
9949@table @code
9950@item --port=@var{puerto}
9951@itemx -p @var{puerto}
9952Escucha peticiones HTTP en @var{puerto}.
9953
9954@item --listen=@var{dirección}
9955Escucha en la interfaz de red de la @var{dirección}. El comportamiento
9956predeterminado es aceptar conexiones de cualquier interfaz.
9957
9958@item --user=@var{usuaria}
9959@itemx -u @var{usuaria}
9960Cambia los privilegios a los de @var{usuaria} tan pronto como sea
9961posible---es decir, una vez el socket del servidor esté abierto y la clave
9962de firma haya sido leída.
9963
9964@item --compression[=@var{nivel}]
9965@itemx -C [@var{nivel}]
9966Comprime los datos con el @var{nivel} dado. Cuando el @var{nivel} es cero,
9967deshabilita la compresión. El rango 1 a 9 corresponde a distintos niveles de
9968compresión gzip: 1 es el más rápido, y 9 es el mejor (intensivo a nivel de
9969CPU). El valor predeterminado es 3.
9970
9971A menos que se use @option{--cache}, la compresión ocurre al vuelo y los
9972flujos comprimidos no se almacenan en caché. Por tanto, para reducir la
9973carga en la máquina que ejecuta @command{guix publish}, puede ser una buena
9974idea elegir un nivel de compresión bajo, ejecutar @command{guix publish}
9975detrás de un proxy con caché o usar @option{--cache}. El uso de
9976@option{--cache} tiene la ventaja de que permite a @command{guix publish}
9977añadir la cabecera HTTP @code{Content-Length} a sus respuestas.
9978
9979@item --cache=@var{directorio}
9980@itemx -c @var{directorio}
9981Almacena en caché los archivos y metadatos (URL @code{.narinfo}) en
9982@var{directorio} y únicamente proporciona archivos que están en la caché.
9983
9984Cuando se omite esta opción, los archivos y metadatos se crean al
9985vuelo. Esto puede reducir el ancho de banda disponible, especialmente cuando
9986la compresión está habilitada, ya que se puede llegar al límite de la
9987CPU. Otra desventaja del modo predeterminado es que la longitud de los
9988archivos no se conoce con anterioridad, por lo que @command{guix publish} no
9989puede añadir la cabecera HTTP @code{Content-Length} a sus respuestas, lo que
9990a su vez previene que los clientes conozcan la cantidad de datos a
9991descargar.
9992
9993De manera contraria, cuando se usa @option{--cache}, la primera petición de
9994un elemento del almacén (a través de una URL @code{.narinfo}) devuelve 404 e
9995inicia un proceso en segundo plano para @dfn{cocinar} el archivo---calcular
9996su @code{.narinfo} y comprimirlo, en caso necesario. Una vez el archivo está
9997alojado en la caché de @var{directorio}, las siguientes peticiones obtendrán
9998un resultado satisfactorio y se ofrecerá el contenido directamente desde la
9999caché, lo que garantiza que los clientes obtienen el mejor ancho de banda
10000posible.
10001
10002El proceso de ``cocinado'' se realiza por hilos de trabajo. Por defecto, se
10003crea un hilo por núcleo de la CPU, pero puede ser personalizado. Véase
10004@option{--workers} a continuación.
10005
10006Cuando se usa @option{--ttl}, las entradas en caché se borran
10007automáticamente cuando hayan expirado.
10008
10009@item --workers=@var{N}
10010Cuando se usa @option{--cache}, solicita la creación de @var{N} hilos de
10011trabajo para ``cocinar'' archivos.
10012
10013@item --ttl=@var{ttl}
10014Produce cabeceras HTTP @code{Cache-Control} que anuncian un tiempo-de-vida
10015(TTL) de @var{ttl}. @var{ttl} debe indicar una duración: @code{5d} significa
100165 días, @code{1m} significa un mes, etc.
10017
10018Esto permite a la usuaria de Guix mantener información de sustituciones en
10019la caché durante @var{ttl}. No obstante, fíjese que @code{guix publish} no
10020garantiza en sí que los elementos del almacén que proporciona de hecho
10021permanezcan disponibles hasta que @var{ttl} expire.
10022
10023Adicionalmente, cuando se usa @option{--cache}, las entradas en caché que no
10024hayan sido accedidas en @var{ttl} y no tengan un elemento correspondiente en
10025el almacén pueden ser borradas.
10026
10027@item --nar-path=@var{ruta}
10028Usa @var{ruta} como el prefijo para las URL de los archivos ``nar''
10029(@pxref{Invocación de guix archive, archivadores normalizados}).
10030
10031Por defecto, los archivos nar se proporcionan en una URL como
10032@code{/nar/gzip/@dots{}-coreutils-8.25}. Esta opción le permite cambiar la
10033parte @code{/nar} por @var{ruta}.
10034
10035@item --public-key=@var{fichero}
10036@itemx --private-key=@var{fichero}
10037Usa los @var{fichero}s específicos como el par de claves pública y privada
10038usadas para firmar los elementos del almacén publicados.
10039
10040Los ficheros deben corresponder al mismo par de claves (la clave privada se
10041usa para la firma y la clave pública simplemente se anuncia en los metadatos
10042de la firma). Deben contener claves en el formato canónico de expresiones-S
10043como el producido por @command{guix archive --generate-key} (@pxref{Invocación de guix archive}). Por defecto, se usan @file{/etc/guix/signing-key.pub} y
10044@file{/etc/guix/signing-key.sec}.
10045
10046@item --repl[=@var{puerto}]
10047@itemx -r [@var{puerto}]
10048Lanza un servidor REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile
10049Reference Manual}) en @var{puerto} (37146 por defecto). Esto se usa
10050principalmente para la depuración de un servidor @command{guix publish} en
10051ejecución.
10052@end table
10053
10054Habilitar @command{guix publish} en el sistema Guix consiste en solo una
10055línea: simplemente instancie un servicio @code{guix-publish-service-type} en
10056el campo @code{services} de su declaración del sistema operativo
10057@code{operating-system} (@pxref{guix-publish-service-type,
10058@code{guix-publish-service-type}})
10059
10060Si en vez de eso ejecuta Guix en una distribución distinta, siga estas
10061instrucciones:
10062
10063@itemize
10064@item
10065Si su distribución anfitriona usa el sistema de inicio systemd:
10066
10067@example
10068# ln -s ~root/.guix-profile/lib/systemd/system/guix-publish.service \
10069 /etc/systemd/system/
10070# systemctl start guix-publish && systemctl enable guix-publish
10071@end example
10072
10073@item
10074Si su distribución anfitriona usa el sistema de inicio Upstart:
10075
10076@example
10077# ln -s ~root/.guix-profile/lib/upstart/system/guix-publish.conf /etc/init/
10078# start guix-publish
10079@end example
10080
10081@item
10082En otro caso, proceda de forma similar con el sistema de inicio de su
10083distribución.
10084@end itemize
10085
10086@node Invocación de guix challenge
10087@section Invocación de @command{guix challenge}
10088
10089@cindex construcciones reproducibles
10090@cindex construcciones verificables
10091@cindex @command{guix challenge}
10092@cindex reto (challenge)
10093¿Los binarios que proporciona este servidor realmente corresponden al código
10094fuente que dice construir? ¿Es determinista el proceso de construcción de un
10095paquete? Estas son las preguntas que la orden @command{guix challenge}
10096intenta responder.
10097
10098La primera es obviamente una cuestión importante: antes de usar un servidor
10099de sustituciones (@pxref{Sustituciones}), es importante haber
10100@emph{verificado} que proporciona los binarios correctos, y por tanto
10101@emph{ponerlo a prueba}@footnote{NdT: challenge en inglés.}. La segunda es
10102lo que permite la primera: si las construcciones de los paquetes son
10103deterministas, construcciones independientes deberían emitir el mismo
10104resultado, bit a bit; si el servidor proporciona un binario diferente al
10105obtenido localmente, o bien está corrupto o bien tiene intenciones
10106perniciosas.
10107
10108Sabemos que el hash que se muestra en los nombres de fichero en
10109@file{/gnu/store} es el hash de todas las entradas del proceso que construyó
10110el fichero o directorio---compiladores, bibliotecas, guiones de
10111construcción, etc. (@pxref{Introducción}). Asumiendo procesos de
10112construcción deterministas, un nombre de fichero del almacén debe
10113corresponder exactamente a una salida de construcción. @command{guix
10114challenge} comprueba si existe, realmente, una asociación unívoca comparando
10115la salida de la construcción de varias construcciones independientes de
10116cualquier elemento del almacén proporcionado.
10117
10118La salida de la orden muestra algo así:
10119
10120@smallexample
10121$ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org"
10122updating list of substitutes from 'https://@value{SUBSTITUTE-SERVER}'... 100.0%
10123updating list of substitutes from 'https://guix.example.org'... 100.0%
10124/gnu/store/@dots{}-openssl-1.0.2d contents differ:
10125 local hash: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
10126 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-openssl-1.0.2d: 0725l22r5jnzazaacncwsvp9kgf42266ayyp814v7djxs7nk963q
10127 https://guix.example.org/nar/@dots{}-openssl-1.0.2d: 1zy4fmaaqcnjrzzajkdn3f5gmjk754b43qkq47llbyak9z0qjyim
10128/gnu/store/@dots{}-git-2.5.0 contents differ:
10129 local hash: 00p3bmryhjxrhpn2gxs2fy0a15lnip05l97205pgbk5ra395hyha
10130 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0: 069nb85bv4d4a6slrwjdy8v1cn4cwspm3kdbmyb81d6zckj3nq9f
10131 https://guix.example.org/nar/@dots{}-git-2.5.0: 0mdqa9w1p6cmli6976v4wi0sw9r4p5prkj7lzfd1877wk11c9c73
10132/gnu/store/@dots{}-pius-2.1.1 contents differ:
10133 local hash: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
10134 https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-pius-2.1.1: 0k4v3m9z1zp8xzzizb7d8kjj72f9172xv078sq4wl73vnq9ig3ax
10135 https://guix.example.org/nar/@dots{}-pius-2.1.1: 1cy25x1a4fzq5rk0pmvc8xhwyffnqz95h2bpvqsz2mpvlbccy0gs
10136
10137@dots{}
10138
101396,406 store items were analyzed:
10140 - 4,749 (74.1%) were identical
10141 - 525 (8.2%) differed
10142 - 1,132 (17.7%) were inconclusive
10143@end smallexample
10144
10145@noindent
10146En este ejemplo, @command{guix challenge} primero recorre el almacén para
10147determinar el conjunto de derivaciones construidas localmente---en oposición
10148a elementos del almacén que fueron descargados de un servidor de
10149sustituciones---y consulta a todos los servidores de sustituciones. Una vez
10150hecho informa de los elementos del almacén para los cuales los servidores
10151obtuvieron un resultado diferente de el obtenido en la construcción local.
10152
10153@cindex no-determinismo, en la construcción de paquetes
10154Como un ejemplo, @code{guix.example.org} siempre obtiene una respuesta
10155diferente. Por otro modo, @code{@value{SUBSTITUTE-SERVER}} coincide con las
10156construcciones locales, excepto en el caso de Git. Esto puede indicar que el
10157proceso de construcción de Git no es determinista, lo que significa que su
10158salida varia en función de varias cosas que Guix no controla completamente,
10159aunque la construcción de paquetes se realice en entornos aislados
10160(@pxref{Características}). Las fuentes más comunes de indeterminismo incluyen la
10161adición de marcas de tiempo en los resultados de la construcción, la
10162inclusión de números aleatorios y las enumeraciones de directorios ordenadas
10163por número de nodos-i. Véase @uref{https://reproducible-builds.org/docs/}
10164para más información.
10165
10166Para encontrar cuál es el problema con este binario Git, podemos hacer algo
10167parecido a esto (@pxref{Invocación de guix archive}):
10168
10169@example
10170$ wget -q -O - https://@value{SUBSTITUTE-SERVER}/nar/@dots{}-git-2.5.0 \
10171 | guix archive -x /tmp/git
10172$ diff -ur --no-dereference /gnu/store/@dots{}-git.2.5.0 /tmp/git
10173@end example
10174
10175Esta orden muestra la diferencia entre los ficheros resultantes de la
10176construcción local y los ficheros resultantes de la construcción en
10177@code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging
10178Files,, diffutils, Comparing and Merging Files}). La orden @command{diff}
10179funciona muy bien en ficheros de texto. Cuando ficheros binarios difieren,
10180una opción mejor es @uref{https://diffoscope.org/,Diffoscope}, una
10181herramienta que ayuda en la visualización de diferencias en todo tipo de
10182ficheros.
10183
10184Una vez haya realizado este trabajo, puede determinar si las diferencias son
10185debidas a un procedimiento de construcción no-determinista o a un servidor
10186con intenciones ocultas. Intentamos duramente eliminar las fuentes de
10187indeterminismo en los paquetes para facilitar la verificación de
10188sustituciones, pero por supuesto es un proceso que implica no solo a Guix,
10189sino a una gran parte de la comunidad del software libre. Entre tanto,
10190@command{guix challenge} es una herramienta para ayudar a afrontar el
10191problema.
10192
10193Si esta escribiendo paquetes para Guix, le recomendamos que compruebe si
10194@code{@value{SUBSTITUTE-SERVER}} y otros servidores de sustituciones
10195obtienen el mismo resultado de construcción que el obtenido por usted:
10196
10197@example
10198$ guix challenge @var{paquete}
10199@end example
10200
10201@noindent
10202donde @var{paquete} es una especificación de paquete como @code{guile@@2.0}
10203o @code{glibc:debug}.
10204
10205La sintaxis general es:
10206
10207@example
10208guix challenge @var{opciones} [@var{paquetes}@dots{}]
10209@end example
10210
10211Cuando se encuentra una diferencia entre el hash de un elemento construido
10212localmente y el proporcionado por un servidor de sustituciones; o entre las
10213sustituciones proporcionadas por distintos servidores, esto es mostrado como
10214en el ejemplo previo y el valor de salida es 2 (otros valores no-cero de la
10215salida denominan otros tipos de error).
10216
10217La única opción de importancia es:
10218
10219@table @code
10220
10221@item --substitute-urls=@var{urls}
10222Considera @var{urls} la lista separada por espacios de URL de fuentes de
10223sustituciones con las que realizar la comparación.
10224
10225@item --verbose
10226@itemx -v
10227Muestra detalles sobre coincidencias (contenidos idénticos) además de
10228información sobre las discrepancias.
10229
10230@end table
10231
10232@node Invocación de guix copy
10233@section Invocación de @command{guix copy}
10234
10235@cindex copiar, elementos del almacén, por SSH
10236@cindex SSH, copiar elementos del almacén
10237@cindex compartir elementos del almacén entre máquinas
10238@cindex transferir elementos del almacén entre máquinas
10239La orden @command{guix copy} copia elementos del almacén de una máquina al
10240de otra a través de una conexión de shell seguro (SSH)@footnote{Esta orden
10241únicamente está disponible cuando ha encontrado
10242Guile-SSH. @xref{Requisitos}, para detalles.}. Por ejemplo, la siguiente
10243orden copia el paquete @code{coreutils}, el perfil de la usuaria y todas sus
10244dependencias a @var{dirección}, ingresando en el sistema como @var{usuaria}:
10245
10246@example
10247guix copy --to=@var{usuaria}@@@var{dirección} \
10248 coreutils `readlink -f ~/.guix-profile`
10249@end example
10250
10251Si alguno de los elementos del almacén a copiar ya están presentes en
10252@var{dirección}, no se envían realmente.
10253
10254La siguiente orden obtiene @code{libreoffice} y @code{gimp} de
10255@var{dirección}, asumiendo que estén disponibles allí:
10256
10257@example
10258guix copy --from=@var{dirección} libreoffice gimp
10259@end example
10260
10261La conexión SSH se establece usando el cliente Guile-SSH, que es compatible
10262con OpenSSH: tiene en cuenta @file{~/.ssh/known_hosts} y
10263@file{~/.ssh/config}, y usa el agente SSH para la identificación.
10264
10265La clave usada para firmar los elementos enviados debe estar aceptada por la
10266máquina remota. Del mismo modo, la clave usada por la máquina remota para
10267firmar los elementos recibidos debe estar en @file{/etc/guix/acl} de modo
10268que sea aceptada por su propio daemon. @xref{Invocación de guix archive}, para
10269más información sobre la verificación de elementos del almacén.
10270
10271La sintaxis general es:
10272
10273@example
10274guix copy [--to=@var{spec}|--from=@var{spec}] @var{elementos}@dots{}
10275@end example
10276
10277Siempre debe especificar una de las siguientes opciones:
10278
10279@table @code
10280@item --to=@var{spec}
10281@itemx --from=@var{spec}
10282Especifica la máquina a la que mandar o desde la que recibir. @var{spec}
10283debe ser una especificación SSH como @code{example.org},
10284@code{carlos@@example.org}, or @code{carlos@@example.org:2222}.
10285@end table
10286
10287Los @var{elementos} pueden ser tanto nombres de paquetes, como @code{gimp},
10288como elementos del almacén, como @file{/gnu/store/@dots{}-idutils-4.6}.
10289
10290Cuando se especifica el nombre del paquete a enviar, primero se construye si
10291es necesario, a menos que se use @option{--dry-run}. Se aceptan las opciones
10292comunes de construcción (@pxref{Opciones comunes de construcción}).
10293
10294
10295@node Invocación de guix container
10296@section Invocación de @command{guix container}
10297@cindex container
10298@cindex @command{guix container}
10299@quotation Nota
10300En la versión @value{VERSION}, esta herramienta es experimental. La interfaz
10301está sujeta a cambios radicales en el futuro.
10302@end quotation
10303
10304El propósito de @command{guix container} es la manipulación de procesos en
10305ejecución dentro de entornos aislados, normalmente conocido como un
10306``contenedor'', típicamente creado por las órdenes @command{guix
10307environment} (@pxref{Invocación de guix environment}) y @command{guix system
10308container} (@pxref{Invocación de guix system}).
10309
10310La sintaxis general es:
10311
10312@example
10313guix container @var{acción} @var{opciones}@dots{}
10314@end example
10315
10316@var{acción} especifica la operación a realizar con el contenedor, y
10317@var{opcines} especifica los parámetros específicos del contexto para la
10318acción.
10319
10320Las siguientes acciones están disponibles:
10321
10322@table @code
10323@item exec
10324Ejecute una orden en el contexto de un contenedor en ejecución.
10325
10326La sintaxis es:
10327
10328@example
10329guix container exec @var{pid} @var{programa} @var{parámetros}@dots{}
10330@end example
10331
10332@var{pid} especifica el ID del proceso del contenedor en
10333ejecución. @var{programa} especifica el nombre del fichero ejecutable dentro
10334del sistema de ficheros raíz del contenedor. @var{parámetros} son opciones
10335adicionales que se pasarán a @var{programa}.
10336
10337La siguiente orden lanza un shell interactivo de ingreso al sistema dentro
10338de un contenedor del sistema, iniciado por @command{guix system container},
10339y cuyo ID de proceso es 9001:
10340
10341@example
10342guix container exec 9001 /run/current-system/profile/bin/bash --login
10343@end example
10344
10345Fíjese que el @var{pid} no puede ser el proceso creador del contenedor. Debe
10346ser el PID 1 del contenedor o uno de sus procesos hijos.
10347
10348@end table
10349
10350@node Invocación de guix weather
10351@section Invocación de @command{guix weather}
10352
10353De manera ocasional tendrá un mal día al no estar las sustituciones
10354disponibles y le toque construir los paquetes a usted misma
10355(@pxref{Sustituciones}). La orden @command{guix weather} informa de la
10356disponibilidad de sustituciones en los servidores especificados de modo que
10357pueda tener una idea sobre cómo será su día hoy. A veces puede ser una
10358información útil como usuaria, pero es principalmente útil para quienes
10359ejecuten @command{guix publish} (@pxref{Invocación de guix publish}).
10360
10361@cindex estadísticas, para sustituciones
10362@cindex disponibilidad de sustituciones
10363@cindex disponibilidad de sustituciones
10364@cindex weather, disponibilidad de sustituciones
10365Esta es una ejecución de ejemplo:
10366
10367@example
10368$ guix weather --substitute-urls=https://guix.example.org
10369computing 5,872 package derivations for x86_64-linux...
10370looking for 6,128 store items on https://guix.example.org..
10371updating list of substitutes from 'https://guix.example.org'... 100.0%
10372https://guix.example.org
10373 43.4% substitutes available (2,658 out of 6,128)
10374 7,032.5 MiB of nars (compressed)
10375 19,824.2 MiB on disk (uncompressed)
10376 0.030 seconds per request (182.9 seconds in total)
10377 33.5 requests per second
10378
10379 9.8% (342 out of 3,470) of the missing items are queued
10380 867 queued builds
10381 x86_64-linux: 518 (59.7%)
10382 i686-linux: 221 (25.5%)
10383 aarch64-linux: 128 (14.8%)
10384 build rate: 23.41 builds per hour
10385 x86_64-linux: 11.16 builds per hour
10386 i686-linux: 6.03 builds per hour
10387 aarch64-linux: 6.41 builds per hour
10388@end example
10389
10390@cindex integración continua, estadísticas
10391As you can see, it reports the fraction of all the packages for which
10392substitutes are available on the server---regardless of whether substitutes
10393are enabled, and regardless of whether this server's signing key is
10394authorized. It also reports the size of the compressed archives (``nars'')
10395provided by the server, the size the corresponding store items occupy in the
10396store (assuming deduplication is turned off), and the server's throughput.
10397The second part gives continuous integration (CI) statistics, if the server
10398supports it. In addition, using the @option{--coverage} option,
10399@command{guix weather} can list ``important'' package substitutes missing on
10400the server (see below).
10401
10402Para conseguirlo, @command{guix weather} consulta los metadatos HTTP(S)
10403(@dfn{narinfo}s) de todos los elementos relevantes del almacén. Como
10404@command{guix challenge}, ignora las firmas en esas sustituciones, lo cual
10405es inocuo puesto que la orden únicamente obtiene estadísticas y no puede
10406instalar esas sustituciones.
10407
10408Entre otras cosas, es posible consultar tipos específicos de sistema y
10409conjuntos específicos de paquetes. Las opciones disponibles se enumeran a
10410continuación.
10411
10412@table @code
10413@item --substitute-urls=@var{urls}
10414@var{urls} es la lista separada por espacios de URL de servidores de
10415sustituciones a consultar. Cuando se omite esta opción, el conjunto
10416predeterminado de servidores de sustituciones es el consultado.
10417
10418@item --system=@var{sistema}
10419@itemx -s @var{sistema}
10420Consulta sustituciones para @var{sistema}---por ejemplo,
10421@code{aarch64-linux}. Esta opción se puede repetir, en cuyo caso
10422@command{guix weather} consultará las sustituciones para varios tipos de
10423sistema.
10424
10425@item --manifest=@var{fichero}
10426En vez de consultar las sustituciones de todos los paquetes, consulta
10427únicamente los especificados en @var{fichero}. @var{fichero} debe contener
10428un @dfn{manifiesto}, como el usado en la opción @code{-m} de @command{guix
10429package} (@pxref{Invocación de guix package}).
10430
10431@item --coverage[=@var{numero}]
10432@itemx -c [@var{numero}]
10433Report on substitute coverage for packages: list packages with at least
10434@var{count} dependents (zero by default) for which substitutes are
10435unavailable. Dependent packages themselves are not listed: if @var{b}
10436depends on @var{a} and @var{a} has no substitutes, only @var{a} is listed,
10437even though @var{b} usually lacks substitutes as well. The result looks
10438like this:
10439
10440@example
10441$ guix weather --substitute-urls=https://ci.guix.es.info -c 10
10442computing 8,983 package derivations for x86_64-linux...
10443looking for 9,343 store items on https://ci.guix.es.info...
10444updating substitutes from 'https://ci.guix.es.info'... 100.0%
10445https://ci.guix.es.info
10446 64.7% substitutes available (6,047 out of 9,343)
10447@dots{}
104482502 packages are missing from 'https://ci.guix.es.info' for 'x86_64-linux', among which:
10449 58 kcoreaddons@@5.49.0 /gnu/store/@dots{}-kcoreaddons-5.49.0
10450 46 qgpgme@@1.11.1 /gnu/store/@dots{}-qgpgme-1.11.1
10451 37 perl-http-cookiejar@@0.008 /gnu/store/@dots{}-perl-http-cookiejar-0.008
10452 @dots{}
10453@end example
10454
10455What this example shows is that @code{kcoreaddons} and presumably the 58
10456packages that depend on it have no substitutes at @code{ci.guix.es.info};
10457likewise for @code{qgpgme} and the 46 packages that depend on it.
10458
10459If you are a Guix developer, or if you are taking care of this build farm,
10460you'll probably want to have a closer look at these packages: they may
10461simply fail to build.
10462@end table
10463
10464@node Invocación de guix processes
10465@section Invocación de @command{guix processes}
10466
10467La orden @command{guix processes} puede ser útil a desarrolladoras y
10468administradoras de sistemas, especialmente en máquinas multiusuaria y en
10469granjas de construcción: enumera las sesiones actuales (conexiones al
10470daemon), así como información sobre los procesos envueltos@footnote{Las
10471sesiones remotas, cuando @command{guix-daemon} se ha iniciado con
10472@option{--listen} especificando un punto de conexión TCP, @emph{no} son
10473enumeradas.}. A continuación puede verse un ejemplo de la información que
10474devuelve:
10475
10476@example
10477$ sudo guix processes
10478SessionPID: 19002
10479ClientPID: 19090
10480ClientCommand: guix environment --ad-hoc python
10481
10482SessionPID: 19402
10483ClientPID: 19367
10484ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{}
10485
10486SessionPID: 19444
10487ClientPID: 19419
10488ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10489LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock
10490LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock
10491LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock
10492ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800
10493ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800
10494ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800
10495@end example
10496
10497En este ejemplo vemos que @command{guix-daemon} tiene tres clientes:
10498@command{guix environment}, @command{guix publish} y la herramienta de
10499integración continua Cuirass; sus identificadores de proceso (PID) se
10500muestran en el campo @code{ClientPID}. El campo @code{SessionPID}
10501proporciona el PID del subproceso de @command{guix-daemon} de cada sesión en
10502particular.
10503
10504El campo @code{LockHeld} muestra qué elementos del almacén están bloqueados
10505actualmente por cada sesión, lo que corresponde a elementos del almacén en
10506construcción o sustitución (el campo @code{LockHeld} no se muestra cuando
10507@command{guix processes} no se ejecutó como root). Por último, mediante el
10508campo @code{ChildProcess} entendemos que esas tres construcciones están
10509siendo delegadas (@pxref{Configuración de delegación del daemon}).
10510
10511La salida está en formato Recutils por lo que podemos usar la útil orden
10512@command{recsel} para seleccionar sesiones de interés (@pxref{Selection
10513Expressions,,, recutils, GNU recutils manual}). Como un ejemplo, la
10514siguiente orden muestra la línea de órdenes y el PID del cliente que inició
10515la construcción de un paquete Perl:
10516
10517@example
10518$ sudo guix processes | \
10519 recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"'
10520ClientPID: 19419
10521ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{}
10522@end example
10523
10524
10525@node Configuración del sistema
10526@chapter Configuración del sistema
10527
10528@cindex configuración del sistema
10529La Distribución de Sistema Guix permite un mecanismo de configuración del
10530sistema completo consistente. Con esto queremos decir que todos los aspectos
10531de la configuración global del sistema---como los servicios disponibles, la
10532zona horaria y la configuración de localización, las cuentas de
10533usuarias---se declaran en un lugar único. Dicha @dfn{configuración del
10534sistema} puede ser @dfn{instanciada}---es decir, hecha efectiva.
10535
10536@c Yes, we're talking of Puppet, Chef, & co. here. ↑
10537Una de las ventajas de poner toda la configuración del sistema bajo el
10538control de Guix es que permite actualizaciones transaccionales del sistema,
10539y hace posible volver a una instanciación previa del sistema, en caso de que
10540haya algún problema con la nueva (@pxref{Características}). Otra ventaja es que
10541hace fácil replicar exactamente la misma configuración entre máquinas
10542diferentes, o en diferentes momentos, sin tener que utilizar herramientas de
10543administración adicionales sobre las propias herramientas del sistema.
10544
10545Esta sección describe este mecanismo. Primero nos enfocaremos en el punto de
10546vista de la administradora del sistema---explicando cómo se configura e
10547instancia el sistema. Después mostraremos cómo puede extenderse este
10548mecanismo, por ejemplo para añadir nuevos servicios del sistema.
10549
10550@menu
10551* Uso de la configuración del sistema:: Personalizar su sistema GNU.
10552* Referencia de ``operating-system'':: Detalle de las declaraciones de
10553 sistema operativo.
10554* Sistemas de ficheros:: Configurar el montaje de sistemas de ficheros.
10555* Dispositivos traducidos:: Procesamiento extra de dispositivos de bloques.
10556* Cuentas de usuaria:: Especificar las cuentas de usuaria.
10557* Distribución de teclado:: Cómo interpreta el sistema las pulsaciones
10558 del teclado.
10559* Localizaciones:: Configuración de idioma y convenciones
10560 culturales.
10561* Servicios:: Especificar los servicios del sistema.
10562* Programas con setuid:: Programas que se ejecutan con privilegios de
10563 root.
10564* Certificados X.509:: Verificar servidores HTTPS.
10565* Selector de servicios de nombres:: Configurar el selector de servicios de
10566 nombres de libc.
10567* Disco en RAM inicial:: Arranque de Linux-Libre.
10568* Configuración del gestor de arranque:: Configurar el gestor de arranque.
10569* Invocación de guix system:: Instanciar una configuración del sistema.
10570* Ejecutar Guix en una máquina virtual:: Cómo ejecutar el sistema Guix en
10571 una máquina virtual.
10572* Definición de servicios:: Añadir nuevas definiciones de servicios.
10573@end menu
10574
10575@node Uso de la configuración del sistema
10576@section Uso de la configuración del sistema
10577
10578El sistema operativo se configura proporcionando una declaración
10579@code{operating-system} en un fichero que pueda ser proporcionado a la orden
10580@command{guix system} (@pxref{Invocación de guix system}). Una configuración
10581simple, con los servicios predeterminados del sistema, el núcleo Linux-Libre
10582predeterminado, un disco de RAM inicial y un cargador de arranque puede ser
10583como sigue:
10584
10585@findex operating-system
10586@lisp
10587@include os-config-bare-bones.texi
10588@end lisp
10589
10590Este ejemplo debería ser auto-descriptivo. Algunos de los campos definidos
10591anteriormente, como @code{host-name} y @code{bootloader}, son
10592necesarios. Otros como @code{packages} y @code{services}, pueden omitirse,
10593en cuyo caso obtienen un valor por defecto.
10594
10595Más adelante se muestran los efectos de algunos de los campos más
10596importantes (@pxref{Referencia de ``operating-system''}, para detalles acerca de
10597todos los campos disponibles), y cómo @dfn{instanciar} el sistema operativo
10598usando @command{guix system}.
10599
10600@unnumberedsubsec Cargador de arranque
10601
10602@cindex arranque obsoleto, en máquinas Intel
10603@cindex arranque por BIOS, en máquinas Intel
10604@cindex arranque UEFI
10605@cindex arranque EFI
10606El campo @code{bootloader} describe el método que será usado para arrancar
10607su sistema. Las máquinas basadas en procesadores Intel pueden arrancar en el
10608``obsoleto'' modo BIOS, como en el ejemplo previo. No obstante, máquinas más
10609recientes usan la @dfn{Interfaz Unificada Extensible de Firmware} (UEFI)
10610para arrancar. En ese caso, el capo @code{bootloader} debe contener algo
10611parecido a esto:
10612
10613@example
10614(bootloader-configuration
10615 (bootloader grub-efi-bootloader)
10616 (target "/boot/efi"))
10617@end example
10618
10619@xref{Configuración del gestor de arranque}, para más información sobre las opciones de
10620configuración disponibles.
10621
10622@unnumberedsubsec Paquetes visibles globalmente
10623
10624@vindex %base-packages
10625El campo @code{packages} enumera los paquetes que serán visibles globalmente
10626en el sistema, para todas las cuentas de usuaria---es decir, en la variable
10627de entorno @code{PATH} de cada usuaria---además de los perfiles por usuaria
10628(@pxref{Invocación de guix package}). La variable @var{%base-packages}
10629proporciona todas las herramientas esperadas para tareas básicas y de
10630administración---incluyendo las utilidades básicas GNU, las herramientas de
10631red GNU, el editor de texto ligero GNU Zile, @command{find}, @command{grep},
10632etc. El ejemplo previo se añade GNU@tie{}Screen a estos, tomado del módulo
10633@code{(gnu packages screen)} (@pxref{Módulos de paquetes}). La sintaxis
10634@code{(list package output)} puede usarse para añadir una salida específica
10635de un paquete:
10636
10637@lisp
10638(use-modules (gnu packages))
10639(use-modules (gnu packages dns))
10640
10641(operating-system
10642 ;; ...
10643 (packages (cons (list bind "utils")
10644 %base-packages)))
10645@end lisp
10646
10647@findex specification->package
10648Referirse a los paquetes por nombre de variable, como antes a @code{bind},
10649tiene la ventaja de evitar ambigüedades; también permite que errores
10650tipográficos y demás obtengan un diagnóstico directo como ``variables sin
10651definir''. La parte problemática es que se necesita conocer qué módulo
10652define qué paquete, y aumentar adecuadamente la línea de
10653@code{use-package-modules}. Para evitar esto, se puede usar el procedimiento
10654@code{specification->package} del módulo @code{(gnu packages)}, que devuelve
10655el mejor paquete para un nombre dado, o nombre y versión:
10656
10657@lisp
10658(use-modules (gnu packages))
10659
10660(operating-system
10661 ;; ...
10662 (packages (append (map specification->package
10663 '("tcpdump" "htop" "gnupg@@2.0"))
10664 %base-packages)))
10665@end lisp
10666
10667@unnumberedsubsec Servicios del sistema
10668
10669@cindex services
10670@vindex %base-services
10671The @code{services} field lists @dfn{system services} to be made available
10672when the system starts (@pxref{Servicios}). The @code{operating-system}
10673declaration above specifies that, in addition to the basic services, we want
10674the OpenSSH secure shell daemon listening on port 2222 (@pxref{Servicios de red, @code{openssh-service-type}}). Under the hood,
10675@code{openssh-service-type} arranges so that @command{sshd} is started with
10676the right command-line options, possibly with supporting configuration files
10677generated as needed (@pxref{Definición de servicios}).
10678
10679@cindex personalización, de servicios
10680@findex modify-services
10681De manera ocasional, en vez de usar los servicios básicos tal y como vienen,
10682puede querer personalizarlos. Para hacerlo, use @code{modify-services}
10683(@pxref{Referencia de servicios, @code{modify-services}}) para modificar la lista.
10684
10685Por ejemplo, supongamos que quiere modificar @code{guix-daemon} y Mingetty
10686(el punto de acceso al sistema por consola) en la lista @var{%base-services}
10687(@pxref{Servicios base, @code{%base-services}}). Para hacerlo, puede escribir
10688lo siguiente en su declaración de sistema operativo:
10689
10690@lisp
10691(define %mis-servicios
10692 ;; Mi propia lista de servicios
10693 (modify-services %base-services
10694 (guix-service-type config =>
10695 (guix-configuration
10696 (inherit config)
10697 (use-substitutes? #f)
10698 (extra-options '("--gc-keep-derivations"))))
10699 (mingetty-service-type config =>
10700 (mingetty-configuration
10701 (inherit config)))))
10702
10703(operating-system
10704 ;; @dots{}
10705 (services %mis-servicios))
10706@end lisp
10707
10708Esto modifica la configuración---es decir, los parámetros de los
10709servicios---de la instancia @code{guix-service-type}, y de todas las
10710instancias de @code{mingetty-service-type} en la lista
10711@var{%base-services}. Observe cómo se consigue: primero, enlazamos la
10712configuración actual al identificador @code{config} en el @var{cuerpo}, y
10713entonces escribimos el @var{cuerpo} de manera que evalue a la configuración
10714deseada. En particular, fíjese como se usa @code{inherit} para crear una
10715nueva configuración que tiene los mismos valores que la configuración
10716antigua, pero con unas pocas modificaciones.
10717
10718@cindex disco cifrado
10719La configuración para un uso típico de ``escritorio'', con una partición de
10720raíz cifrada, el servidor gráfico X11, GNOME y Xfce (las usuarias pueden
10721escoger cual de estos entornos de escritorio usarán en la pantalla de inicio
10722de sesión pulsando @kbd{F1}), gestión de red, gestión de energía y más,
10723podría ser así:
10724
10725@lisp
10726@include os-config-desktop.texi
10727@end lisp
10728
10729Un sistema gráfico con una selección de gestores de ventanas ligeros en vez
10730de entornos de escritorio completos podría ser así:
10731
10732@lisp
10733@include os-config-lightweight-desktop.texi
10734@end lisp
10735
10736Este ejemplo se refiere al sistema de ficheros @file{/boot/efi} por su UUID
10737@code{1234-ABCD}. Substituya este UUID con el UUID correcto en su sistema,
10738como el devuelto por la orden @command{blkid}.
10739
10740@xref{Servicios de escritorio}, para la lista exacta de servicios proporcionados
10741por @var{%desktop-services}. @xref{Certificados X.509}, para información
10742sobre el paquete @code{nss-certs} usado aquí.
10743
10744De nuevo, @var{%desktop-services} es simplemente una lista de objetos de
10745servicios. Si desea borrar servicios de aquí, puede hacerlo usando
10746procedimientos de filtrado de listas (@pxref{SRFI-1 Filtering and
10747Partitioning,,, guile, GNU Guile Reference Manual}). Por ejemplo, la
10748siguiente expresión devuelve una lista que contiene todos los servicios en
10749@var{%desktop-services} excepto el servicio Avahi:
10750
10751@example
10752(remove (lambda (service)
10753 (eq? (service-kind service) avahi-service-type))
10754 %desktop-services)
10755@end example
10756
10757@unnumberedsubsec Instanciación del sistema
10758
10759Asumiendo que la declaración de @code{operating-system} se encuentra en el
10760fichero @file{my-conf-del-sistema.scm}, la orden @command{guix system
10761mi-conf-del-sistema.scm} instancia esa configuración, y la convierte en la
10762entrada predeterminada de GRUB en el arranque (@pxref{Invocación de guix system}).
10763
10764La manera habitual de cambiar la configuración del sistema es actualizar
10765este fichero y volver a ejecutar @command{guix system reconfigure}. Nunca se
10766deberían tocar los ficheros en @file{/etc} o ejecutar órdenes que modifiquen
10767el estado del sistema como @command{useradd} o @command{grub-install}. De
10768hecho, debe evitarlo ya que no únicamente anularía su garantía sino que
10769también le impediría volver a una versión previa de su sistema, en caso de
10770necesitarlo.
10771
10772@cindex vuelta-atrás, del sistema operativo
10773Hablando de vuelta atrás, cada vez que ejecuta @command{guix system
10774reconfigure} se crea una nueva @dfn{generación} del sistema---sin modificar
10775o borrar generaciones previas. Las generaciones previas tienen una entrada
10776en el menú del cargador de arranque, permitiendole arrancarlas en caso de
10777que algo funcionase mal en las últimas generaciones. Tranquilizador, ¿no? La
10778orden @command{guix system list-generations} enumera las generaciones del
10779sistema disponibles en el disco. Es también posible volver a una versión
10780previa con las órdenes @command{guix system roll-back} y @command{guix
10781system switch-generation}.
10782
10783Aunque la orden @command{guix system reconfigure} no modificará las
10784generaciones previas, debe tener cuidado cuando la generación actual no es
10785la última (por ejemplo, después de invocar @command{guix system roll-back}),
10786ya que la operación puede sobreescribir una generación posterior
10787(@pxref{Invocación de guix system}).
10788
10789@unnumberedsubsec La interfaz programática
10790
10791A nivel Scheme, el grueso de una declaración @code{operating-system} se
10792instancia con el siguiente procedimiento monádico (@pxref{La mónada del almacén}):
10793
10794@deffn {Procedimiento monádico} operating-system-derivation so
10795Devuelve una derivación que construye @var{so}, un objeto
10796@code{operating-system} (@pxref{Derivaciones}).
10797
10798La salida de la derivación es un único directorio que hace referencia a
10799todos los paquetes, ficheros de configuración y otros ficheros auxiliares
10800necesarios para instanciar @var{so}.
10801@end deffn
10802
10803This procedure is provided by the @code{(gnu system)} module. Along with
10804@code{(gnu services)} (@pxref{Servicios}), this module contains the guts of
10805Guix System. Make sure to visit it!
10806
10807
10808@node Referencia de ``operating-system''
10809@section Referencia de @code{operating-system}
10810
10811Esta sección resume todas las opciones disponibles en las declaraciones de
10812@code{operating-system} (@pxref{Uso de la configuración del sistema}).
10813
10814@deftp {Tipo de datos} operating-system
10815Este es el tipo de datos que representa la configuración del sistema
10816operativo. Con ello queremos decir toda la configuración global del sistema,
10817no la configuración específica de las usuarias (@pxref{Uso de la configuración del sistema}).
10818
10819@table @asis
10820@item @code{kernel} (predeterminado: @code{linux-libre})
10821El objeto del paquete del núcleo del sistema operativo
10822usado@footnote{Actualmente únicamente está disponible el núcleo
10823Linux-libre. En el futuro será posible usar GNU@tie{}Hurd.}.
10824
10825@item @code{kernel-arguments} (default: @code{'("quiet")})
10826Lista de cadenas o expresiones-G que representan parámetros adicionales a
10827pasar en la línea de órdenes del núcleo---por ejemplo,
10828@code{("console=ttyS0")}.
10829
10830@item @code{bootloader}
10831El objeto de configuración del cargador de arranque del
10832sistema. @xref{Configuración del gestor de arranque}.
10833
10834@item @code{label}
10835This is the label (a string) as it appears in the bootloader's menu entry.
10836The default label includes the kernel name and version.
10837
10838@item @code{keyboard-layout} (predeterminada: @code{#f})
10839This field specifies the keyboard layout to use in the console. It can be
10840either @code{#f}, in which case the default keyboard layout is used (usually
10841US English), or a @code{<keyboard-layout>} record.
10842
10843This keyboard layout is in effect as soon as the kernel has booted. For
10844instance, it is the keyboard layout in effect when you type a passphrase if
10845your root file system is on a @code{luks-device-mapping} mapped device
10846(@pxref{Dispositivos traducidos}).
10847
10848@quotation Nota
10849This does @emph{not} specify the keyboard layout used by the bootloader, nor
10850that used by the graphical display server. @xref{Configuración del gestor de arranque},
10851for information on how to specify the bootloader's keyboard layout. @xref{Sistema X Window}, for information on how to specify the keyboard layout used by the X
10852Window System.
10853@end quotation
10854
10855@item @code{initrd-modules} (predeterminados: @code{%base-initrd-modules})
10856@cindex initrd
10857@cindex disco inicial de RAM
10858La lista de módulos del núcleo Linux que deben estar disponibles en el disco
10859inicial de RAM. @xref{Disco en RAM inicial}.
10860
10861@item @code{initrd} (predeterminado: @code{base-initrd})
10862Un procedimiento que devuelve un disco inicial de RAM para el núcleo
10863Linux. Este campo se proporciona para permitir personalizaciones de bajo
10864nivel y no debería ser necesario para un uso habitual. @xref{Disco en RAM inicial}.
10865
10866@item @code{firmware} (predeterminado: @code{%base-firmware})
10867@cindex firmware
10868Lista de paquetes de firmware que pueden ser cargados por el núcleo del
10869sistema operativo.
10870
10871El valor predeterminado incluye el firmware necesario para dispositivos WiFi
10872basados en Atheros y Broadcom (módulos Linux-libre @code{ath9k} y
10873@code{b43-open}, respectivamente). @xref{Consideraciones sobre el hardware}, para más
10874información sobre hardware soportado.
10875
10876@item @code{host-name}
10877El nombre de la máquina.
10878
10879@item @code{hosts-file}
10880@cindex el fichero hosts
10881Un objeto tipo-fichero (@pxref{Expresiones-G, objetos tipo-fichero}) para
10882ser usado como @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C
10883Library Reference Manual}). El predeterminado es un fichero con entradas
10884para @code{localhost} y @var{host-name}.
10885
10886@item @code{mapped-devices} (predeterminados: @code{'()})
10887Una lista de dispositivos traducidos. @xref{Dispositivos traducidos}.
10888
10889@item @code{file-systems}
10890Una lista de sistemas de ficheros. @xref{Sistemas de ficheros}.
10891
10892@item @code{swap-devices} (predeterminados: @code{'()})
10893@cindex dispositivos de intercambio
10894Una lista de cadenas que identifiquen dispositivos o ficheros a usar como
10895``espacio de intercambio'' (@pxref{Memory Concepts,,, libc, The GNU C
10896Library Reference Manual}). Por ejemplo @code{'("/dev/sda3")} o
10897@code{'("/fichero-intercambio")}. Es posible especificar un fichero de
10898intercambio en un sistema de ficheros en un dispositivo traducido, siempre
10899que la traducción y el sistema de ficheros se especifiquen
10900también. @xref{Dispositivos traducidos} y @ref{Sistemas de ficheros}.
10901
10902@item @code{users} (predeterminadas: @code{%base-user-accounts})
10903@itemx @code{groups} (predeterminados: @var{%base-groups})
10904Lista de cuentas de usuaria y grupos. @xref{Cuentas de usuaria}.
10905
10906Si la lista de @code{usuarias} carece de una cuenta de usuaria con
10907UID@tie{}0, una cuenta ``root'' con UID@tie{}0 se añade automáticamente.
10908
10909@item @code{skeletons} (predeterminados: @code{(default-skeletons)})
10910Una lista de tuplas de nombre de fichero de destino/objeto tipo-fichero
10911(@pxref{Expresiones-G, objetos tipo-fichero}). Estos son los ficheros de
10912esqueleto que se añadirán al directorio de las cuentas de usuaria que se
10913creen.
10914
10915Por ejemplo, un valor válido puede parecer algo así:
10916
10917@example
10918`((".bashrc" ,(plain-file "bashrc" "echo Hola\n"))
10919 (".guile" ,(plain-file "guile"
10920 "(use-modules (ice-9 readline))
10921 (activate-readline)")))
10922@end example
10923
10924@item @code{issue} (predeterminado: @var{%default-issue})
10925Una cadena que denota el contenido del fichero @file{/etc/issue}, que se
10926muestra cuando las usuarias ingresan al sistema en una consola de texto.
10927
10928@item @code{packages} (predeterminados: @var{%base-packages})
10929El conjunto de paquetes instalados en el perfil global, que es accesible en
10930@file{/run/current-system/profile}.
10931
10932El conjunto predeterminado incluye utilidades básicas y es una buena
10933práctica instalar utilidades no-básicas en los perfiles de las usuarias
10934(@pxref{Invocación de guix package}).
10935
10936@item @code{timezone}
10937Una cadena que identifica la zona horaria---por ejemplo,
10938@code{"Europe/Paris"}.
10939
10940Puede ejecutar la orden @command{tzselect} para encontrar qué cadena de zona
10941horaria corresponde con su región. Elegir una zona horaria no válida provoca
10942un fallo en @command{guix system}.
10943
10944@item @code{locale} (predeterminado: @code{"en_US.utf8"})
10945El nombre de la localización predeterminada (@pxref{Locale Names,,, libc,
10946The GNU C Library Reference Manual}). @xref{Localizaciones}, para más información.
10947
10948@item @code{locale-definitions} (predeterminadas: @var{%default-locale-definitions})
10949La lista de definiciones de localizaciones a compilar y que puede ser usada
10950en tiempo de ejecución. @xref{Localizaciones}.
10951
10952@item @code{locale-libcs} (predeterminadas: @code{(list @var{glibc})})
10953La lista de paquetes GNU@tie{}libc cuyos datos de localización y
10954herramientas son usadas para las definiciones de
10955localizaciones. @xref{Localizaciones}, para consideraciones de compatibilidad que
10956justifican esta opción.
10957
10958@item @code{name-service-switch} (predeterminado: @var{%default-nss})
10959Configuración del selector de servicios de nombres de libc (NSS)---un objeto
10960@code{<name-service-switch>}. @xref{Selector de servicios de nombres}, para detalles.
10961
10962@item considera
10963Una lista de objetos service denotando los servicios del
10964sistema. @xref{Servicios}.
10965
10966@cindex servicios esenciales
10967@item @code{essential-services} (predeterminados: ...)
10968The list of ``essential services''---i.e., things like instances of
10969@code{system-service-type} and @code{host-name-service-type} (@pxref{Referencia de servicios}), which are derived from the operating system definition itself.
10970As a user you should @emph{never} need to touch this field.
10971
10972@item @code{pam-services} (predeterminados: @code{(base-pam-services)})
10973@cindex PAM
10974@cindex módulos de verificación conectables
10975@c FIXME: Add xref to PAM services section.
10976Servicios de los @dfn{módulos de verificación conectables} (PAM) de Linux.
10977
10978@item @code{setuid-programs} (predeterminados: @var{%setuid-programs})
10979Lista de expresiones-G con valores de cadena que denotan los programas
10980setuid. @xref{Programas con setuid}.
10981
10982@item @code{sudoers-file} (predeterminado: @var{%sudoers-specification})
10983@cindex fichero sudoers
10984El contenido de @file{/etc/sudoers} como un objeto tipo-fichero
10985(@pxref{Expresiones-G, @code{local-file} y @code{plain-file}}).
10986
10987Este fichero especifica qué usuarias pueden usar la orden @command{sudo}, lo
10988que se les permite hacer y qué privilegios pueden obtener. El comportamiento
10989predefinido es que únicamente @code{root} y los miembros del grupo
10990@code{wheel} pueden usar @code{sudo}.
10991
10992@end table
10993
10994@deffn {Scheme Syntax} this-operating-system
10995When used in the @emph{lexical scope} of an operating system field
10996definition, this identifier resolves to the operating system being defined.
10997
10998The example below shows how to refer to the operating system being defined
10999in the definition of the @code{label} field:
11000
11001@example
11002(use-modules (gnu) (guix))
11003
11004(operating-system
11005 ;; ...
11006 (label (package-full-name
11007 (operating-system-kernel this-operating-system))))
11008@end example
11009
11010It is an error to refer to @code{this-operating-system} outside an operating
11011system definition.
11012@end deffn
11013
11014@end deftp
11015
11016@node Sistemas de ficheros
11017@section Sistemas de ficheros
11018
11019La lista de sistemas de ficheros que deben montarse se especifica en el
11020campo @code{file-systems} de la declaración del sistema operativo
11021(@pxref{Uso de la configuración del sistema}). Cada sistema de ficheros se
11022declara usando la forma @code{file-system}, como en el siguiente ejemplo:
11023
11024@example
11025(file-system
11026 (mount-point "/home")
11027 (device "/dev/sda3")
11028 (type "ext4"))
11029@end example
11030
11031Como es habitual, algunos de los campos son obligatorios---aquellos
11032mostrados en el ejemplo previo---mientras que otros pueden omitirse. Se
11033describen a continuación.
11034
11035@deftp {Tipo de datos} file-system
11036Objetos de este tipo representan los sistemas de ficheros a
11037montar. Contienen los siguientes campos:
11038
11039@table @asis
11040@item @code{type}
11041Este campo es una cadena que especifica el tipo de sistema de ficheros---por
11042ejemplo, @code{"ext4"}.
11043
11044@item @code{mount-point}
11045Designa la ruta donde el sistema de ficheros debe montarse.
11046
11047@item @code{device}
11048Nombra la ``fuente'' del sistema de ficheros. Puede ser una de estas tres
11049opciones: una etiqueta de sistema de ficheros, un UUID de sistema de
11050ficheros o el nombre de un nodo @file{/dev}. Las etiquetas y UUID ofrecen
11051una forma de hacer referencia a sistemas de ficheros sin codificar su nombre
11052de dispositivo actual@footnote{Fijese que, aunque es tentador usa
11053@file{/dev/disk/by-uuid} y nombres de dispositivo similares para obtener el
11054mismo resultado, no es lo recomendado: estos nodo especiales de dispositivos
11055se crean por el daemon udev y puede no estar disponible cuando el
11056dispositivo sea montado.}.
11057
11058@findex file-system-label
11059Las etiquetas del sistema de ficheros se crean mediante el uso del
11060procedimiento @code{file-system-label}, los UUID se crean mediante el uso de
11061@code{uuid} y los nodos @file{/dev} son simples cadenas. A continuación se
11062proporciona un ejemplo de un sistema de ficheros al que se hace referencia
11063mediante su etiqueta, como es mostrada por la orden @command{e2label}:
11064
11065@example
11066(file-system
11067 (mount-point "/home")
11068 (type "ext4")
11069 (device (file-system-label "mi-home")))
11070@end example
11071
11072@findex uuid
11073Los UUID se convierten dede su representación en forma de cadena (como se
11074muestra con la orden @command{tune2fs -l}) mediante el uso de la forma
11075@code{uuid}@footnote{La forma @code{uuid} espera un UUID de 16 bytes como se
11076define en la @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. Este
11077es el formato de UUID que usan la familia de sistemas de ficheros ext2 y
11078otros, pero es diferente de los ``UUID'' de los sistemas de ficheros FAT,
11079por ejemplo.}, como sigue:
11080
11081@example
11082(file-system
11083 (mount-point "/home")
11084 (type "ext4")
11085 (device (uuid "4dab5feb-d176-45de-b287-9b0a6e4c01cb")))
11086@end example
11087
11088Cuando la fuente de un sistema de ficheros es un dispositivo traducido
11089(@pxref{Dispositivos traducidos}), su campo @code{device} @emph{debe} hacer
11090referencia al nombre del dispositivo traducido---por ejemplo,
11091@file{"/dev/mapper/particion-raiz"}. Esto es necesario para que el sistema
11092sepa que el montaje del sistema de ficheros depende del establecimiento de
11093la traducción de dispositivos correspondiente.
11094
11095@item @code{flags} (predeterminadas: @code{'()})
11096Una lista de símbolos que denotan opciones del montaje. Las opciones
11097reconocidas incluyen @code{read-only} (modo de sólo lectura),
11098@code{bind-mount} (montaje enlazado), @code{no-dev} (prohibición del acceso
11099a ficheros especiales), @code{no-suid} (ignora los bits setuid y setgid) y
11100@code{no-exec} (prohibición de la ejecución de programas).
11101
11102@item @code{options} (predeterminadas: @code{#f})
11103Esto es o bien @code{#f}, o bien una cadena que contiene opciones de
11104montaje.
11105
11106@item @code{mount?} (predeterminado: @code{#t})
11107Este valor indica si debe montarse el sistema de ficheros automáticamente al
11108iniciar el sistema. Cuando se establece como @code{#f}, el sistema de
11109ficheros tiene una entrada en @file{/etc/fstab} (el cual es leído por la
11110orden @command{mount}) pero no se montará automáticamente.
11111
11112@item @code{needed-for-boot?} (predeterminado: @code{#f})
11113Este valor lógico indica si el sistema de ficheros es necesario para el
11114arranque. Si es verdadero, el sistema de ficheros se monta al cargar el
11115disco inicial de RAM (initrd). Este es siempre el caso, por ejemplo, para el
11116sistema de ficheros raíz.
11117
11118@item @code{check?} (predeterminado: @code{#t})
11119Este valor lógico indica si el sistema de ficheros se debe comprobar en
11120busca de errores antes de montarse.
11121
11122@item @code{create-mount-point?} (predeterminado: @code{#f})
11123Cuando es verdadero, el punto de montaje es creado si no existía
11124previamente.
11125
11126@item @code{dependencies} (predeterminadas: @code{'()})
11127Una lista de objetos @code{<file-system>} o @code{<mapped-device>} que
11128representan sistemas de ficheros que deben montarse o dispositivos
11129traducidos que deben abrirse antes (y desmontarse o cerrarse después) que el
11130declarado.
11131
11132Como ejemplo, considere la siguiente jerarquía de montajes:
11133@file{/sys/fs/cgroup} es una dependencia de @file{/sys/fs/cgroup/cpu} y
11134@file{/sys/fs/cgroup/memory}.
11135
11136Otro ejemplo es un sistema de ficheros que depende de un dispositivo
11137traducido, por ejemplo una partición cifrada (@pxref{Dispositivos traducidos}).
11138@end table
11139@end deftp
11140
11141El módulo @code{(gnu system file-systems)} exporta las siguientes variables
11142útiles.
11143
11144@defvr {Variable Scheme} %base-file-systems
11145Estos son los sistemas de ficheros esenciales que se necesitan en sistemas
11146normales, como @var{%pseudo-terminal-file-system} y @var{%immutable-store}
11147(véase a continuación). Las declaraciones de sistemas operativos deben
11148contener siempre estos al menos.
11149@end defvr
11150
11151@defvr {Variable Scheme} %pseudo-terminal-file-systems
11152El sistema de ficheros que debe montarse como @file{/dev/pts}. Permite la
11153creación de @dfn{pseudoterminales} a través de @code{openpty} y funciones
11154similares (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference
11155Manual}). Los pseudoterminales son usados por emuladores de terminales como
11156@command{xterm}.
11157@end defvr
11158
11159@defvr {Variable Scheme} %shared-memory-file-system
11160Este sistema de ficheros se monta como @file{/dev/shm} y se usa para
11161permitir el uso de memoria compartida entre procesos (@pxref{Memory-mapped
11162I/O, @code{shm_open},, libc, The GNU C Library Reference Manual}).
11163@end defvr
11164
11165@defvr {Variable Scheme} %immutable-store
11166Este sistema de ficheros crea un montaje enlazado (``bind-mount'') de
11167@file{/gnu/store}, permitiendo solo el acceso de lectura para todas las
11168usuarias incluyendo a @code{root}. Esto previene modificaciones accidentales
11169por software que se ejecuta como @code{root} o por las administradoras del
11170sistema.
11171
11172El daemon sí es capaz de escribir en el almacén: vuelve a montar
11173@file{/gnu/store} en modo lectura-escritura en su propio ``espacio de
11174nombres''.
11175@end defvr
11176
11177@defvr {Variable Scheme} %binary-format-file-system
11178El sistema de ficheros @code{binfmt_misc}, que permite que el manejo de
11179tipos de ficheros ejecutables arbitrarios se delegue al espacio de
11180usuaria. Necesita la carga del módulo del núcleo @code{binfmt.ko}.
11181@end defvr
11182
11183@defvr {Variable Scheme} %fuse-control-file-system
11184El sistema de ficheros @code{fusectl}, que permite a usuarias sin
11185privilegios montar y desmontar sistemas de ficheros de espacio de usuaria
11186FUSE. Necesita la carga del módulo del núcleo @code{fuse.ko}.
11187@end defvr
11188
11189@node Dispositivos traducidos
11190@section Dispositivos traducidos
11191
11192@cindex traducción de dispositivos
11193@cindex dispositivos traducidos
11194El núcleo Linux tiene una noción de @dfn{traducción de dispositivos}: un
11195dispositivo de bloques, como una partición de disco duro, puede
11196@dfn{traducirse} en otro dispositivo, habitualmente en @code{/dev/mapper/},
11197con un procesamiento adicional sobre los datos que fluyen a través de
11198ella@footnote{Fíjese que GNU@tie{}Hurd no diferencia entre el concepto de un
11199``dispositivo traducido'' y el de un sistema de ficheros: ambos se reducen a
11200@emph{traducir} operaciones de entrada/salida realizadas en un fichero a
11201operaciones en su almacenamiento subyacente. Por tanto, Hurd implementa
11202dispositivos traducidos, como sistemas de ficheros, usando el mecanismo
11203genérico de @dfn{traducción} (@pxref{Translators,,, hurd, The GNU Hurd
11204Reference Manual}).}. Un ejemplo típico es la traducción de dispositivos
11205para el cifrado: todas las escrituras en el dispositivo traducido se cifran,
11206y todas las lecturas se descifran, de forma transparente. Guix extiende esta
11207noción considerando cualquier dispositivo o conjunto de dispositivos que son
11208@dfn{transformados} de alguna manera para crear un nuevo dispositivo; por
11209ejemplo, los dispositivos RAID se obtienen @dfn{ensamblando} otros
11210dispositivos, como discos duros o particiones, en uno nuevo que se comporta
11211como una partición. Otros ejemplos, todavía no implementados, son los
11212volúmenes lógicos LVM.
11213
11214Los dispositivos traducidos se declaran mediante el uso de la forma
11215@code{mapped-device}, definida a continuación; ejemplos más adelante.
11216
11217@deftp {Tipo de datos} mapped-device
11218Objetos de este tipo representan traducciones de dispositivo que se llevarán
11219a cabo cuando el sistema arranque.
11220
11221@table @code
11222@item source
11223Puede ser tanto una cadena que especifica el nombre de un dispositivo de
11224bloques a traducir, como @code{"/dev/sda3"}, o una lista de dichas cadenas
11225cuando varios dispositivos necesitan ser ensamblados para crear uno nuevo.
11226
11227@item target
11228Esta cadena especifica el nombre del dispositivo traducido resultante. Para
11229traductores del núcleo como dispositivos de cifrado del tipo
11230@code{luks-device-mapping}, especificar @code{"mi-particion"} produce la
11231creación del dispositivo @code{"/dev/mapper/mi-particion"}. Para
11232dispositivos RAID de tipo @code{raid-device-mapping}, el nombre del
11233dispositivo completo como @code{"/dev/md0"} debe ser proporcionado.
11234
11235@item type
11236Debe ser un objeto @code{mapped-device-kind}, que especifica cómo
11237@var{source} se traduce a @var{target}.
11238@end table
11239@end deftp
11240
11241@defvr {Variable Scheme} luks-device-mapping
11242Define el cifrado de bloques LUKS mediante el uso de la orden
11243@command{cryptsetup} del paquete del mismo nombre. Depende del módulo
11244@code{dm-crypt} del núcleo Linux.
11245@end defvr
11246
11247@defvr {Variable Scheme} raid-device-mapping
11248Define un dispositivo RAID, el cual se ensambla mediante el uso de la orden
11249@code{mdadm} del paquete del mismo nombre. Requiere la carga del módulo del
11250núcleo Linux para el nivel RAID apropiado, como @code{raid456} para RAID-4,
11251RAID-5 o RAID-6, o @code{raid10} para RAID-10.
11252@end defvr
11253
11254@cindex cifrado de disco
11255@cindex LUKS
11256El siguiente ejemplo especifica una traducción de @file{/dev/sda3} a
11257@file{/dev/mapper/home} mediante el uso de LUKS---la
11258@url{https://gitlab.com/cryptsetup/cryptsetup,configuración de claves
11259unificada de Linux}, un mecanismo estándar para cifrado de disco. El
11260dispositivo @file{/dev/mapper/home} puede usarse entonces como el campo
11261@code{device} de una declaración @code{file-system} (@pxref{Sistemas de ficheros}).
11262
11263@example
11264(mapped-device
11265 (source "/dev/sda3")
11266 (target "home")
11267 (type luks-device-mapping))
11268@end example
11269
11270De manera alternativa, para independizarse de la numeración de dispositivos,
11271puede obtenerse el UUID LUKS (@dfn{identificador único}) del dispositivo
11272fuente con una orden así:
11273
11274@example
11275cryptsetup luksUUID /dev/sda3
11276@end example
11277
11278y usarlo como sigue:
11279
11280@example
11281(mapped-device
11282 (source (uuid "cb67fc72-0d54-4c88-9d4b-b225f30b0f44"))
11283 (target "home")
11284 (type luks-device-mapping))
11285@end example
11286
11287@cindex cifrado del intercambio
11288También es deseable cifrar el espacio de intercambio, puesto que el espacio
11289de intercambio puede contener información sensible. Una forma de conseguirlo
11290es usar un fichero de intercambio en un sistema de ficheros en un
11291dispositivo traducido a través del cifrado LUKS. @xref{Preparación para la instalación,,Particionado del disco}, para un ejemplo.
11292
11293Un dispositivo RAID formado por las particiones @file{/dev/sda1} y
11294@file{/dev/sdb1} puede declararse como se muestra a continuación:
11295
11296@example
11297(mapped-device
11298 (source (list "/dev/sda1" "/dev/sdb1"))
11299 (target "/dev/md0")
11300 (type raid-device-mapping))
11301@end example
11302
11303El dispositivo @file{/dev/md0} puede usarse entonces como el campo
11304@code{device} de una declaración @code{file-system} (@pxref{Sistemas de ficheros}). Fíjese que no necesita proporcionar el nivel RAID; se selecciona
11305durante la creación inicial y formato del dispositivo RAID y después se
11306determina automáticamente.
11307
11308
11309@node Cuentas de usuaria
11310@section Cuentas de usuaria
11311
11312@cindex usuarias
11313@cindex cuentas
11314@cindex cuentas de usuaria
11315Los grupos y cuentas de usuaria se gestionan completamente a través de la
11316declaración @code{operating-system}. Se especifican con las formas
11317@code{user-account} y @code{user-group}:
11318
11319@example
11320(user-account
11321 (name "alicia")
11322 (group "users")
11323 (supplementary-groups '("wheel" ;permite usar sudo, etc.
11324 "audio" ;tarjeta de sonido
11325 "video" ;dispositivos de vídeo como cámaras
11326 "cdrom")) ;el veterano CD-ROM
11327 (comment "hermana de Roberto")
11328 (home-directory "/home/alicia"))
11329@end example
11330
11331Durante el arranque o tras la finalización de @command{guix system
11332reconfigure}, el sistema se asegura de que únicamente las cuentas de usuaria
11333y grupos especificados en la declaración @code{operating-system} existen, y
11334con las propiedades especificadas. Por tanto, la creación o modificación de
11335cuentas o grupos realizadas directamente invocando órdenes como
11336@command{useradd} se pierden al reconfigurar o reiniciar el sistema. Esto
11337asegura que el sistema permanece exactamente como se declaró.
11338
11339@deftp {Tipo de datos} user-account
11340Objetos de este tipo representan cuentas de usuaria. Los siguientes miembros
11341pueden ser especificados:
11342
11343@table @asis
11344@item @code{name}
11345El nombre de la cuenta de usuaria.
11346
11347@item @code{group}
11348@cindex grupos
11349Este es el nombre (una cadena) o identificador (un número) del grupo de
11350usuarias al que esta cuenta pertenece.
11351
11352@item @code{supplementary-groups} (predeterminados: @code{'()})
11353Opcionalmente, esto puede definirse como una lista de nombres de grupo a los
11354que esta cuenta pertenece.
11355
11356@item @code{uid} (predeterminado: @code{#f})
11357Este es el ID de usuaria para esta cuenta (un número), o @code{#f}. En el
11358último caso, un número es seleccionado automáticamente por el sistema cuando
11359la cuenta es creada.
11360
11361@item @code{comment} (predeterminado: @code{""})
11362Un comentario sobre la cuenta, como el nombre completo de la propietaria.
11363
11364@item @code{home-directory}
11365Este es el nombre del directorio de usuaria de la cuenta.
11366
11367@item @code{create-home-directory?} (predeterminado: @code{#t})
11368Indica si el directorio de usuaria de esta cuenta debe ser creado si no
11369existe todavía.
11370
11371@item @code{shell} (predeterminado: Bash)
11372Esto es una expresión-G denotando el nombre de fichero de un programa que
11373será usado como shell (@pxref{Expresiones-G}).
11374
11375@item @code{system?} (predeterminado: @code{#f})
11376Este valor lógico indica si la cuenta es una cuenta ``del sistema''. Las
11377cuentas del sistema se tratan a veces de forma especial; por ejemplo, los
11378gestores gráficos de inicio no las enumeran.
11379
11380@anchor{user-account-password}
11381@cindex contraseña, para cuentas de usuaria
11382@item @code{password} (predeterminada: @code{#f})
11383Normalmente debería dejar este campo a @code{#f}, inicializar la contraseña
11384de usuaria como @code{root} con la orden @command{passwd}, y entonces dejar
11385a las usuarias cambiarla con @command{passwd}. Las contraseñas establecidas
11386con @command{passwd} son, por supuesto, preservadas entre reinicios y
11387reconfiguraciones.
11388
11389If you @emph{do} want to set an initial password for an account, then this
11390field must contain the encrypted password, as a string. You can use the
11391@code{crypt} procedure for this purpose:
11392
11393@example
11394(user-account
11395 (name "charlie")
11396 (group "users")
11397
11398 ;; Specify a SHA-512-hashed initial password.
11399 (password (crypt "InitialPassword!" "$6$abc")))
11400@end example
11401
11402@quotation Nota
11403The hash of this initial password will be available in a file in
11404@file{/gnu/store}, readable by all the users, so this method must be used
11405with care.
11406@end quotation
11407
11408@xref{Passphrase Storage,,, libc, The GNU C Library Reference Manual}, for
11409more information on password encryption, and @ref{Encryption,,, guile, GNU
11410Guile Reference Manual}, for information on Guile's @code{crypt} procedure.
11411
11412@end table
11413@end deftp
11414
11415@cindex grupos
11416Las declaraciones de grupos son más simples incluso:
11417
11418@example
11419(user-group (name "estudiantes"))
11420@end example
11421
11422@deftp {Tipo de datos} user-group
11423Este tipo es para grupos de usuarias. Hay únicamente unos pocos campos:
11424
11425@table @asis
11426@item @code{name}
11427En nombre del grupo.
11428
11429@item @code{id} (predeterminado: @code{#f})
11430El identificador del grupo (un número). Si es @code{#f}, un nuevo número es
11431reservado automáticamente cuando se crea el grupo.
11432
11433@item @code{system?} (predeterminado: @code{#f})
11434Este valor booleano indica si el grupo es un grupo ``del sistema''. Los
11435grupos del sistema tienen identificadores numéricos bajos.
11436
11437@item @code{password} (predeterminada: @code{#f})
11438¿Qué? ¿Los grupos de usuarias pueden tener una contraseña? Bueno,
11439aparentemente sí. A menos que sea @code{#f}, este campo especifica la
11440contraseña del grupo.
11441
11442@end table
11443@end deftp
11444
11445Por conveniencia, una variable contiene una lista con todos los grupos de
11446usuarias básicos que se puede esperar:
11447
11448@defvr {Variable Scheme} %base-groups
11449Esta es la lista de grupos de usuarias básicos que las usuarias y/o los
11450paquetes esperan que estén presentes en el sistema. Esto incluye grupos como
11451``root'', ``wheel'' y ``users'', así como grupos usados para controlar el
11452acceso a dispositivos específicos como ``audio'', ``disk'' y ``cdrom''.
11453@end defvr
11454
11455@defvr {Variable Scheme} %base-user-accounts
11456Esta es la lista de cuentas de usuaria básicas que los programas pueden
11457esperar encontrar en un sistema GNU/Linux, como la cuenta ``nobody''.
11458
11459Fíjese que la cuenta de ``root'' no se incluye aquí. Es un caso especial y
11460se añade automáticamente esté o no especificada.
11461@end defvr
11462
11463@node Distribución de teclado
11464@section Distribución de teclado
11465
11466@cindex distribución de teclado
11467@cindex mapa del teclas
11468To specify what each key of your keyboard does, you need to tell the
11469operating system what @dfn{keyboard layout} you want to use. The default,
11470when nothing is specified, is the US English QWERTY layout for 105-key PC
11471keyboards. However, German speakers will usually prefer the German QWERTZ
11472layout, French speakers will want the AZERTY layout, and so on; hackers
11473might prefer Dvorak or bépo, and they might even want to further customize
11474the effect of some of the keys. This section explains how to get that done.
11475
11476@cindex distribución de teclado, definición
11477There are three components that will want to know about your keyboard
11478layout:
11479
11480@itemize
11481@item
11482The @emph{bootloader} may want to know what keyboard layout you want to use
11483(@pxref{Configuración del gestor de arranque, @code{keyboard-layout}}). This is useful
11484if you want, for instance, to make sure that you can type the passphrase of
11485your encrypted root partition using the right layout.
11486
11487@item
11488The @emph{operating system kernel}, Linux, will need that so that the
11489console is properly configured (@pxref{Referencia de ``operating-system'',
11490@code{keyboard-layout}}).
11491
11492@item
11493The @emph{graphical display server}, usually Xorg, also has its own idea of
11494the keyboard layout (@pxref{Sistema X Window, @code{keyboard-layout}}).
11495@end itemize
11496
11497Guix allows you to configure all three separately but, fortunately, it
11498allows you to share the same keyboard layout for all three components.
11499
11500@cindex XKB, distribuciones de teclado
11501Keyboard layouts are represented by records created by the
11502@code{keyboard-layout} procedure of @code{(gnu system keyboard)}. Following
11503the X Keyboard extension (XKB), each layout has four attributes: a name
11504(often a language code such as ``fi'' for Finnish or ``jp'' for Japanese),
11505an optional variant name, an optional keyboard model name, and a possibly
11506empty list of additional options. In most cases the layout name is all you
11507care about. Here are a few example:
11508
11509@example
11510;; The German QWERTZ layout. Here we assume a standard
11511;; "pc105" keyboard model.
11512(keyboard-layout "de")
11513
11514;; The bépo variant of the French layout.
11515(keyboard-layout "fr" "bepo")
11516
11517;; The Catalan layout.
11518(keyboard-layout "es" "cat")
11519
11520;; The Latin American Spanish layout. In addition, the
11521;; "Caps Lock" key is used as an additional "Ctrl" key,
11522;; and the "Menu" key is used as a "Compose" key to enter
11523;; accented letters.
11524(keyboard-layout "latam"
11525 #:options '("ctrl:nocaps" "compose:menu"))
11526
11527;; The Russian layout for a ThinkPad keyboard.
11528(keyboard-layout "ru" #:model "thinkpad")
11529
11530;; The "US international" layout, which is the US layout plus
11531;; dead keys to enter accented characters. This is for an
11532;; Apple MacBook keyboard.
11533(keyboard-layout "us" "intl" #:model "macbook78")
11534@end example
11535
11536See the @file{share/X11/xkb} directory of the @code{xkeyboard-config}
11537package for a complete list of supported layouts, variants, and models.
11538
11539@cindex distribución de teclado, configuración
11540Let's say you want your system to use the Turkish keyboard layout throughout
11541your system---bootloader, console, and Xorg. Here's what your system
11542configuration would look like:
11543
11544@findex set-xorg-configuration
11545@lisp
11546;; Using the Turkish layout for the bootloader, the console,
11547;; and for Xorg.
11548
11549(operating-system
11550 ;; ...
11551 (keyboard-layout (keyboard-layout "tr")) ;for the console
11552 (bootloader (bootloader-configuration
11553 (bootloader grub-efi-bootloader)
11554 (target "/boot/efi")
11555 (keyboard-layout keyboard-layout))) ;for GRUB
11556 (services (cons (set-xorg-configuration
11557 (xorg-configuration ;for Xorg
11558 (keyboard-layout keyboard-layout)))
11559 %desktop-services)))
11560@end lisp
11561
11562In the example above, for GRUB and for Xorg, we just refer to the
11563@code{keyboard-layout} field defined above, but we could just as well refer
11564to a different layout. The @code{set-xorg-configuration} procedure
11565communicates the desired Xorg configuration to the graphical log-in manager,
11566by default GDM.
11567
11568We've discussed how to specify the @emph{default} keyboard layout of your
11569system when it starts, but you can also adjust it at run time:
11570
11571@itemize
11572@item
11573If you're using GNOME, its settings panel has a ``Region & Language'' entry
11574where you can select one or more keyboard layouts.
11575
11576@item
11577Under Xorg, the @command{setxkbmap} command (from the same-named package)
11578allows you to change the current layout. For example, this is how you would
11579change the layout to US Dvorak:
11580
11581@example
11582setxkbmap us dvorak
11583@end example
11584
11585@item
11586The @code{loadkeys} command changes the keyboard layout in effect in the
11587Linux console. However, note that @code{loadkeys} does @emph{not} use the
11588XKB keyboard layout categorization described above. The command below loads
11589the French bépo layout:
11590
11591@example
11592loadkeys fr-bepo
11593@end example
11594@end itemize
11595
11596@node Localizaciones
11597@section Localizaciones
11598
11599@cindex localización
11600Una @dfn{localización} define convenciones culturales para una lengua y
11601región del mundo particular (@pxref{Localizaciones,,, libc, The GNU C Library
11602Reference Manual}). Cada localización tiene un nombre que típicamente tiene
11603la forma de @code{@var{lengua}_@var{territorio}.@var{codificación}}---por
11604ejemplo, @code{fr_LU.utf8} designa la localización para la lengua francesa,
11605con las convenciones culturales de Luxemburgo, usando la codificación UTF-8.
11606
11607@cindex definición de localización
11608Normalmente deseará especificar la localización predeterminada para la
11609máquina usando el campo @code{locale} de la declaración
11610@code{operating-system} (@pxref{Referencia de ``operating-system'', @code{locale}}).
11611
11612La localización seleccionada es automáticamente añadida a las
11613@dfn{definiciones de localización} conocidas en el sistema si es necesario,
11614con su codificación inferida de su nombre---por ejemplo, se asume que
11615@code{bo_CN.utf8} usa la codificación @code{UTF-8}. Definiciones de
11616localización adicionales pueden ser especificadas en el campo
11617@code{locale-definitions} de @code{operating-system}---esto es util, por
11618ejemplo, si la codificación no puede ser inferida del nombre de la
11619localización. El conjunto predeterminado de definiciones de localización
11620incluye algunas localizaciones ampliamente usadas, pero no todas las
11621disponibles, para ahorrar espacio.
11622
11623Por ejemplo, para añadir la localización del frisio del norte para Alemania,
11624el valor de dicho campo puede ser:
11625
11626@example
11627(cons (locale-definition
11628 (name "fy_DE.utf8") (source "fy_DE"))
11629 %default-locale-definitions)
11630@end example
11631
11632De mismo modo, para ahorrar espacio, se puede desear que
11633@code{locale-definitions} contenga únicamente las localizaciones que son
11634realmente usadas, como en:
11635
11636@example
11637(list (locale-definition
11638 (name "ja_JP.eucjp") (source "ja_JP")
11639 (charset "EUC-JP")))
11640@end example
11641
11642@vindex LOCPATH
11643Las definiciones de localización compiladas están disponibles en
11644@file{/run/current-system/locale/X.Y}, donde @code{X.Y} es la versión de
11645libc, que es la ruta donde la GNU@tie{}libc contenida en Guix buscará los
11646datos de localización. Esto puede ser sobreescrito usando la variable de
11647entorno @code{LOCPATH} (@pxref{locales-and-locpath, @code{LOCPATH} and
11648locale packages}).
11649
11650La forma @code{locale-definition} es proporcionada por el módulo @code{(gnu
11651system locale)}. Los detalles se proporcionan a continuación.
11652
11653@deftp {Tipo de datos} locale-definition
11654Este es el tipo de datos de una definición de localización.
11655
11656@table @asis
11657
11658@item @code{name}
11659El nombre de la localización. @xref{Locale Names,,, libc, The GNU C Library
11660Reference Manual}, para más información sobre nombres de localizaciones.
11661
11662@item @code{source}
11663El nombre de la fuente para dicha localización. Esto típicamente es la parte
11664@code{@var{idioma}_@var{territorio}} del nombre de localización.
11665
11666@item @code{charset} (predeterminado: @code{"UTF-8"})
11667La ``codificación de caracteres'' o ``conjunto de caracteres'' para dicha
11668localización, @uref{http://www.iana.org/assignments/character-sets, como se
11669define por IANA}.
11670
11671@end table
11672@end deftp
11673
11674@defvr {Variable Scheme} %default-locale-definitions
11675Una lista de localizaciones UTF-8 usadas de forma común, usada como valor
11676predeterminado del campo @code{locale-definitions} en las declaraciones
11677@code{operating-system}.
11678
11679@cindex nombre de localización
11680@cindex codificación normalizada en los nombres de localizaciones
11681Estas definiciones de localizaciones usan la @dfn{codificación normalizada}
11682para el fragmento tras el punto en el nombre (@pxref{Using gettextized
11683software, normalized codeset,, libc, The GNU C Library Reference
11684Manual}). Por lo que por ejemplo es válido @code{uk_UA.utf8} pero @emph{no},
11685digamos, @code{uk_UA.UTF-8}.
11686@end defvr
11687
11688@subsection Consideraciones sobre la compatibilidad de datos de localización
11689
11690@cindex incompatibilidad, de datos de localización
11691Las declaraciones @code{operating-system} proporcionan un campo
11692@code{locale-libcs} para especificar los paquetes GNU@tie{}libc que se
11693usarán para compilar las declaraciones de localizaciones
11694(@pxref{Referencia de ``operating-system''}). ``¿Por qué debo preocuparme?'', puede
11695preguntarse. Bueno, sucede que el formato binario de los datos de
11696localización es ocasionalmente incompatible de una versión de libc a otra.
11697
11698@c See <https://sourceware.org/ml/libc-alpha/2015-09/msg00575.html>
11699@c and <https://lists.gnu.org/archive/html/guix-devel/2015-08/msg00737.html>.
11700Por ejemplo, un programa enlazado con la versión 2.21 de libc no puede leer
11701datos de localización producidos con libc 2.22; peor aún, ese programa
11702@emph{aborta} en vez de simplemente ignorar los datos de localización
11703incompatibles@footnote{Las versiones 2.23 y posteriores de GNU@tie{}libc
11704simplemente ignorarán los datos de localización incompatibles, lo cual ya es
11705un avance.}. De manera similar, un programa enlazado con libc 2.22 puede
11706leer la mayor parte, pero no todo, de los datos de localización de libc 2.21
11707(específicamente, los datos @code{LC_COLLATE} son incompatibles); por tanto
11708las llamadas a @code{setlocale} pueden fallar, pero los programas no
11709abortarán.
11710
11711El ``problema'' con Guix es que las usuarias tienen mucha libertad: pueden
11712elegir cuando e incluso si actualizar el software en sus perfiles, y pueden
11713estar usando una versión de libc diferente de la que la administradora del
11714sistema usó para construir los datos de localización comunes a todo el
11715sistema.
11716
11717Por suerte, las usuarias sin privilegios también pueden instalar sus propios
11718datos de localización y definir @var{GUIX_LOCPATH} adecuadamente
11719(@pxref{locales-and-locpath, @code{GUIX_LOCPATH} y paquetes de
11720localizaciones}).
11721
11722No obstante, es mejor si los datos de localización globales del sistema en
11723@file{/run/current-system/locale} se construyen para todas las versiones de
11724libc realmente en uso en el sistema, de manera que todos los programas
11725puedan acceder a ellos---esto es especialmente crucial en un sistema
11726multiusuaria. Para hacerlo, la administradora puede especificar varios
11727paquetes libc en el campo @code{locale-libcs} de @code{operating-system}:
11728
11729@example
11730(use-package-modules base)
11731
11732(operating-system
11733 ;; @dots{}
11734 (locale-libcs (list glibc-2.21 (canonical-package glibc))))
11735@end example
11736
11737Este ejemplo llevaría a un sistema que contiene definiciones de localización
11738tanto para libc 2.21 como para la versión actual de libc en
11739@file{/run/current-system/locale}.
11740
11741
11742@node Servicios
11743@section Servicios
11744
11745@cindex servicios del sistema
11746Una parte importante de la preparación de una declaración
11747@code{operating-system} es listar los @dfn{servicios del sistema} y su
11748configuración (@pxref{Uso de la configuración del sistema}). Los servicios del
11749sistema típicamente son daemon lanzados cuando el sistema arrancha, u otras
11750acciones necesarias en ese momento---por ejemplo, configurar el acceso de
11751red.
11752
11753Guix has a broad definition of ``service'' (@pxref{Composición de servicios}),
11754but many services are managed by the GNU@tie{}Shepherd (@pxref{Servicios de Shepherd}). On a running system, the @command{herd} command allows you to
11755list the available services, show their status, start and stop them, or do
11756other specific operations (@pxref{Jump Start,,, shepherd, The GNU Shepherd
11757Manual}). For example:
11758
11759@example
11760# herd status
11761@end example
11762
11763La orden previa, ejecutada como @code{root}, enumera los servicios
11764actualmente definidos. La orden @command{herd doc} muestra una sinopsis del
11765servicio proporcionado y sus acciones asociadas:
11766
11767@example
11768# herd doc nscd
11769Run libc's name service cache daemon (nscd).
11770
11771# herd doc nscd action invalidate
11772invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups.
11773@end example
11774
11775Las ordenes internas @command{start}, @command{stop} y @command{restart}
11776tienen el efecto de arrancar, parar y reiniciar el servicio,
11777respectivamente. Por ejemplo, las siguientes órdenes paran el servicio nscd
11778y reinician el servidor gráfico Xorg:
11779
11780@example
11781# herd stop nscd
11782Service nscd has been stopped.
11783# herd restart xorg-server
11784Service xorg-server has been stopped.
11785Service xorg-server has been started.
11786@end example
11787
11788Las siguientes secciones documentan los servicios disponibles, comenzando
11789con los servicios básicos, que pueden ser usados en una declaración
11790@code{operating-system}.
11791
11792@menu
11793* Servicios base:: Servicios esenciales del sistema.
11794* Ejecución de tareas programadas:: El servicio mcron.
11795* Rotación de logs:: El servicio rottlog.
11796* Servicios de red:: Configuración de red, daemon SSH, etc.
11797* Sistema X Window:: Interfaz gráfica.
11798* Servicios de impresión:: Soporte de impresoras locales y remotas.
11799* Servicios de escritorio:: D-Bus y servicios de escritorio.
11800* Servicios de sonido:: Servicios de ALSA y Pulseaudio.
11801* Servicios de bases de datos:: Bases de datos SQL, almacenes de
11802 clave-valor, etc.
11803* Servicios de correo:: IMAP, POP3, SMTP y todo eso.
11804* Servicios de mensajería:: Servicios de mensajería.
11805* Servicios de telefonía:: Servicios de telefonía.
11806* Servicios de monitorización:: Servicios de monitorización.
11807* Servicios Kerberos:: Servicios Kerberos.
11808* Servicios LDAP:: Servicios LDAP.
11809* Servicios Web:: Servidores Web.
11810* Servicios de certificados:: Certificados TLS via Let's Encrypt.
11811* Servicios DNS:: Demonios DNS.
11812* Servicios VPN:: Demonios VPN.
11813* Sistema de ficheros en red:: Servicios relacionados con NFS.
11814* Integración continua:: El servicio Cuirass.
11815* Servicios de gestión de energía:: Extender la vida de la batería.
11816* Servicios de audio:: El MPD.
11817* Servicios de virtualización:: Servicios de virtualización.
11818* Servicios de control de versiones:: Proporcionar acceso remoto a
11819 repositorios Git.
11820* Servicios de juegos:: Servidores de juegos.
11821* Servicios misceláneos:: Otros servicios.
11822@end menu
11823
11824@node Servicios base
11825@subsection Servicios base
11826
11827El módulo @code{(gnu services base)} proporciona definiciones para los
11828servicios básicos que se esperan en el sistema. Los servicios exportados por
11829este módulo se enumeran a continuación.
11830
11831@defvr {Variable Scheme} %base-services
11832Esta variable contiene una lista de servicios básicos (@pxref{Tipos de servicios y servicios}, para más información sobre los objetos servicio) que se
11833pueden esperar en el sistema: un servicio de ingreso al sistema (mingetty)
11834en cada tty, syslogd, el daemon de la caché del servicio de nombres (nscd),
11835el gestor de dispositivos udev, y más.
11836
11837Este es el valor predeterminado del campo @code{services} de las
11838declaraciones @code{operating-system}. De manera habitual, cuando se
11839personaliza el sistema, es deseable agregar servicios a
11840@var{%base-services}, de esta forma:
11841
11842@example
11843(append (list (service avahi-service-type)
11844 (service openssh-service-type))
11845 %base-services)
11846@end example
11847@end defvr
11848
11849@defvr {Variable Scheme} special-files-service-type
11850El servicio que establece ``ficheros especiales'' como @file{/bin/sh}; una
11851instancia suya es parte de @code{%base-services}.
11852
11853El valor asociado con servicios @code{special-file-service-type} debe ser
11854una lista de tuplas donde el primer elemento es el ``fichero especial'' y el
11855segundo elemento es su destino. El valor predeterminado es:
11856
11857@cindex @file{/bin/sh}
11858@cindex @file{sh}, en @file{/bin}
11859@example
11860`(("/bin/sh" ,(file-append @var{bash} "/bin/sh")))
11861@end example
11862
11863@cindex @file{/usr/bin/env}
11864@cindex @file{env}, en @file{/usr/bin}
11865Si quiere añadir, digamos, @code{/usr/bin/env} a su sistema, puede cambiar
11866su valor por:
11867
11868@example
11869`(("/bin/sh" ,(file-append @var{bash} "/bin/sh"))
11870 ("/usr/bin/env" ,(file-append @var{coreutils} "/bin/env")))
11871@end example
11872
11873Ya que es parte de @code{%base-services}, puede usar @code{modify-services}
11874para personalizar el conjunto de ficheros especiales (@pxref{Referencia de servicios, @code{modify-services}}). Pero una forma simple de añadir un
11875fichero especial es usar el procedimiento @code{extra-special-file} (véase a
11876continuación).
11877@end defvr
11878
11879@deffn {Procedimiento Scheme} extra-special-file @var{fichero} @var{destino}
11880Usa @var{destino} como el ``fichero especial'' @var{fichero}.
11881
11882Por ejemplo, la adición de las siguientes líneas al campo @code{services} de
11883su declaración de sistema operativo genera @file{/usr/bin/env} como un
11884enlace simbólico:
11885
11886@example
11887(extra-special-file "/usr/bin/env"
11888 (file-append coreutils "/bin/env"))
11889@end example
11890@end deffn
11891
11892@deffn {Procedimiento Scheme} host-name-service @var{nombre}
11893Devuelve un servicio que establece el nombre de máquina a @var{nombre}.
11894@end deffn
11895
11896@deffn {Procedimiento Scheme} login-service @var{config}
11897Devuelve un servicio para ejecutar el ingreso al sistema de acuerdo con
11898@var{config}, un objeto @code{<login-configuration>}, que especifica el
11899mensaje del día, entre otras cosas.
11900@end deffn
11901
11902@deftp {Tipo de datos} login-configuration
11903Este es el tipo de datos que representa la configuración del ingreso al
11904sistema.
11905
11906@table @asis
11907
11908@item @code{motd}
11909@cindex mensaje del día
11910Un objeto tipo-fichero que contiene el ``mensaje del día''.
11911
11912@item @code{allow-empty-passwords?} (predeterminado: @code{#t})
11913Permite contraseñas vacías por defecto para que las primeras usuarias puedan
11914ingresar en el sistema cuando la cuenta de ``root'' está recién creada.
11915
11916@end table
11917@end deftp
11918
11919@deffn {Procedimiento Scheme} mingetty-service @var{config}
11920Devuelve un servicio para ejecutar mingetty de acuerdo con @var{config}, un
11921objeto @code{<mingetty-configuration>}, que especifica el tty a ejecutar
11922entre otras cosas.
11923@end deffn
11924
11925@deftp {Tipo de datos} mingetty-configuration
11926Este es el tipo de datos que representa la configuración de Mingetty, el
11927cual proporciona la implementación predeterminada de ingreso al sistema en
11928las consolas virtuales.
11929
11930@table @asis
11931
11932@item @code{tty}
11933El sistema de la consola en la que se ejecuta este Mingetty---por ejemplo,
11934@code{"tty1"}.
11935
11936@item @code{auto-login} (predeterminado: @code{#f})
11937Cuando sea verdadero, este campo debe ser una cadena que denote el nombre de
11938usuaria bajo el cual el sistema ingresa automáticamente. Cuando es
11939@code{#f}, se deben proporcionar un nombre de usuaria y una contraseña para
11940ingresar en el sistema.
11941
11942@item @code{login-program} (predeterminado: @code{#f})
11943Debe ser @code{#f}, en cuyo caso se usa el programa predeterminado de
11944ingreso al sistema (@command{login} de las herramientas Shadow), o una
11945expresión-G que determine el nombre del programa de ingreso al sistema.
11946
11947@item @code{login-pause?} (predeterminado: @code{#f})
11948Cuando es @code{#t} en conjunción con @var{auto-login}, la usuaria deberá
11949presionar una tecla para lanzar el shell de ingreso al sistema.
11950
11951@item @code{mingetty} (predeterminado: @var{mingetty})
11952El paquete Mingetty usado.
11953
11954@end table
11955@end deftp
11956
11957@deffn {Procedure Scheme} agetty-service @var{config}
11958Devuelve un servicio para ejecutar agetty de acuerdo con @var{config}, un
11959objeto @code{<agetty-configuration>}, que especifica el tty a ejecutar entre
11960otras cosas.<
11961@end deffn
11962
11963@deftp {Tipo de datos} agetty-configuration
11964Este es el tipo de datos que representa la configuración de agetty, que
11965implementa el ingreso al sistema en las consolas virtuales y serie. Véase la
11966página de manual @code{agetty(8)} para más información.
11967
11968@table @asis
11969
11970@item @code{tty}
11971The name of the console this agetty runs on, as a string---e.g.,
11972@code{"ttyS0"}. This argument is optional, it will default to a reasonable
11973default serial port used by the kernel Linux.
11974
11975For this, if there is a value for an option @code{agetty.tty} in the kernel
11976command line, agetty will extract the device name of the serial port from it
11977and use that.
11978
11979If not and if there is a value for an option @code{console} with a tty in
11980the Linux command line, agetty will extract the device name of the serial
11981port from it and use that.
11982
11983In both cases, agetty will leave the other serial device settings (baud rate
11984etc.)@: alone---in the hope that Linux pinned them to the correct values.
11985
11986@item @code{baud-rate} (predeterminado: @code{#f})
11987A string containing a comma-separated list of one or more baud rates, in
11988descending order.
11989
11990@item @code{term} (predeterminado: @code{#f})
11991A string containing the value used for the @code{TERM} environment variable.
11992
11993@item @code{eight-bits?} (predeterminado: @code{#f})
11994When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection
11995is disabled.
11996
11997@item @code{auto-login} (predeterminado: @code{#f})
11998When passed a login name, as a string, the specified user will be logged in
11999automatically without prompting for their login name or password.
12000
12001@item @code{no-reset?} (predeterminado: @code{#f})
12002When @code{#t}, don't reset terminal cflags (control modes).
12003
12004@item @code{host} (predeterminado: @code{#f})
12005This accepts a string containing the "login_host", which will be written
12006into the @file{/var/run/utmpx} file.
12007
12008@item @code{remote?} (predeterminado: @code{#f})
12009When set to @code{#t} in conjunction with @var{host}, this will add an
12010@code{-r} fakehost option to the command line of the login program specified
12011in @var{login-program}.
12012
12013@item @code{flow-control?} (predeterminado: @code{#f})
12014When set to @code{#t}, enable hardware (RTS/CTS) flow control.
12015
12016@item @code{no-issue?} (predeterminado: @code{#f})
12017When set to @code{#t}, the contents of the @file{/etc/issue} file will not
12018be displayed before presenting the login prompt.
12019
12020@item @code{init-string} (predeterminada: @code{#f})
12021This accepts a string that will be sent to the tty or modem before sending
12022anything else. It can be used to initialize a modem.
12023
12024@item @code{no-clear?} (predeterminado: @code{#f})
12025When set to @code{#t}, agetty will not clear the screen before showing the
12026login prompt.
12027
12028@item @code{login-program} (predeterminado: (file-append shadow "/bin/login"))
12029This must be either a gexp denoting the name of a log-in program, or unset,
12030in which case the default value is the @command{login} from the Shadow tool
12031suite.
12032
12033@item @code{local-line} (predeterminado: @code{#f})
12034Control the CLOCAL line flag. This accepts one of three symbols as
12035arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f}, the
12036default value chosen by agetty is @code{'auto}.
12037
12038@item @code{extract-baud?} (predeterminado: @code{#f})
12039When set to @code{#t}, instruct agetty to try to extract the baud rate from
12040the status messages produced by certain types of modems.
12041
12042@item @code{skip-login?} (predeterminado: @code{#f})
12043When set to @code{#t}, do not prompt the user for a login name. This can be
12044used with @var{login-program} field to use non-standard login systems.
12045
12046@item @code{no-newline?} (predeterminado: @code{#f})
12047When set to @code{#t}, do not print a newline before printing the
12048@file{/etc/issue} file.
12049
12050@c Is this dangerous only when used with login-program, or always?
12051@item @code{login-options} (predeterminadas: @code{#f})
12052This option accepts a string containing options that are passed to the login
12053program. When used with the @var{login-program}, be aware that a malicious
12054user could try to enter a login name containing embedded options that could
12055be parsed by the login program.
12056
12057@item @code{login-pause} (predeterminada: @code{#f})
12058When set to @code{#t}, wait for any key before showing the login prompt.
12059This can be used in conjunction with @var{auto-login} to save memory by
12060lazily spawning shells.
12061
12062@item @code{chroot} (predeterminado: @code{#f})
12063Change root to the specified directory. This option accepts a directory
12064path as a string.
12065
12066@item @code{hangup?} (predeterminado: @code{#f})
12067Use the Linux system call @code{vhangup} to do a virtual hangup of the
12068specified terminal.
12069
12070@item @code{keep-baud?} (predeterminado: @code{#f})
12071When set to @code{#t}, try to keep the existing baud rate. The baud rates
12072from @var{baud-rate} are used when agetty receives a @key{BREAK} character.
12073
12074@item @code{timeout} (predeterminado: @code{#f})
12075When set to an integer value, terminate if no user name could be read within
12076@var{timeout} seconds.
12077
12078@item @code{detect-case?} (predeterminado: @code{#f})
12079When set to @code{#t}, turn on support for detecting an uppercase-only
12080terminal. This setting will detect a login name containing only uppercase
12081letters as indicating an uppercase-only terminal and turn on some
12082upper-to-lower case conversions. Note that this will not support Unicode
12083characters.
12084
12085@item @code{wait-cr?} (predeterminado: @code{#f})
12086When set to @code{#t}, wait for the user or modem to send a carriage-return
12087or linefeed character before displaying @file{/etc/issue} or login prompt.
12088This is typically used with the @var{init-string} option.
12089
12090@item @code{no-hints?} (predeterminado: @code{#f})
12091When set to @code{#t}, do not print hints about Num, Caps, and Scroll locks.
12092
12093@item @code{no-hostname?} (predeterminado: @code{#f})
12094By default, the hostname is printed. When this option is set to @code{#t},
12095no hostname will be shown at all.
12096
12097@item @code{long-hostname?} (predeterminado: @code{#f})
12098By default, the hostname is only printed until the first dot. When this
12099option is set to @code{#t}, the fully qualified hostname by
12100@code{gethostname} or @code{getaddrinfo} is shown.
12101
12102@item @code{erase-characters} (predeterminado: @code{#f})
12103This option accepts a string of additional characters that should be
12104interpreted as backspace when the user types their login name.
12105
12106@item @code{kill-characters} (predeterminado: @code{#f})
12107This option accepts a string that should be interpreted to mean "ignore all
12108previous characters" (also called a "kill" character) when the types their
12109login name.
12110
12111@item @code{chdir} (predeterminado: @code{#f})
12112This option accepts, as a string, a directory path that will be changed to
12113before login.
12114
12115@item @code{delay} (predeterminado: @code{#f})
12116This options accepts, as an integer, the number of seconds to sleep before
12117opening the tty and displaying the login prompt.
12118
12119@item @code{nice} (predeterminado: @code{#f})
12120This option accepts, as an integer, the nice value with which to run the
12121@command{login} program.
12122
12123@item @code{extra-options} (predeterminadas: @code{'()})
12124This option provides an "escape hatch" for the user to provide arbitrary
12125command-line arguments to @command{agetty} as a list of strings.
12126
12127@end table
12128@end deftp
12129
12130@deffn {Procedimiento Scheme} kmscon-service-type @var{config}
12131Return a service to run
12132@uref{https://www.freedesktop.org/wiki/Software/kmscon,kmscon} according to
12133@var{config}, a @code{<kmscon-configuration>} object, which specifies the
12134tty to run, among other things.
12135@end deffn
12136
12137@deftp {Tipo de datos} kmscon-configuration
12138Este es el tipo de datos que representa la configuración de Kmscon, que
12139implementa el ingreso al sistema en consolas virtuales.
12140
12141@table @asis
12142
12143@item @code{virtual-terminal}
12144El sistema de la consola en la que se ejecuta este Kmscon---por ejemplo,
12145@code{"tty1"}.
12146
12147@item @code{login-program} (predeterminado: @code{#~(string-append #$shadow "/bin/login")})
12148A gexp denoting the name of the log-in program. The default log-in program
12149is @command{login} from the Shadow tool suite.
12150
12151@item @code{login-arguments} (predeterminados: @code{'("-p")})
12152A list of arguments to pass to @command{login}.
12153
12154@item @code{auto-login} (predeterminado: @code{#f})
12155When passed a login name, as a string, the specified user will be logged in
12156automatically without prompting for their login name or password.
12157
12158@item @code{hardware-acceleration?} (predeterminado: #f)
12159Determina si se usará aceleración hardware.
12160
12161@item @code{kmscon} (predeterminado: @var{kmscon})
12162El paquete Kmscon usado.
12163
12164@end table
12165@end deftp
12166
12167@cindex daemon de caché del servicio de nombres
12168@cindex nscd
12169@deffn {Procedimiento Scheme} nscd-service [@var{configuración}] [#:glibc glibc] @
12170 [#:name-services '()]
12171Devuelve un servicio que ejecuta el daemon de la caché del servicio de
12172nombres (nscd) con la @var{configuración} proporcionada---un objeto
12173@code{<nscd-configuration>}. @xref{Selector de servicios de nombres}, para un ejemplo.
12174
12175Por conveniencia, el servicio ncsd de Shepherd proporciona las siguientes
12176acciones:
12177
12178@table @code
12179@item invalidate
12180@cindex invalidación de caché, nscd
12181@cindex nscd, invalidación de caché
12182Esto invalida la caché dada. Por ejemplo, ejecutar:
12183
12184@example
12185herd invalidate nscd hosts
12186@end example
12187
12188@noindent
12189invalida la caché de búsqueda de nombres de máquinas de nscd.
12190
12191@item statistics
12192Ejecutar @command{herd statistics nscd} muestra información del uso nscd y
12193la caché.
12194@end table
12195
12196@end deffn
12197
12198@defvr {Variable Scheme} %nscd-default-configuration
12199This is the default @code{<nscd-configuration>} value (see below) used by
12200@code{nscd-service}. It uses the caches defined by
12201@var{%nscd-default-caches}; see below.
12202@end defvr
12203
12204@deftp {Tipo de datos} nscd-configuration
12205Este tipo de datos representa la configuración del daemon de caché del
12206servicio de nombres (nscd).
12207
12208@table @asis
12209
12210@item @code{name-services} (predeterminados: @code{'()})
12211List of packages denoting @dfn{name services} that must be visible to the
12212nscd---e.g., @code{(list @var{nss-mdns})}.
12213
12214@item @code{glibc} (predeterminada: @var{glibc})
12215Package object denoting the GNU C Library providing the @command{nscd}
12216command.
12217
12218@item @code{log-file} (predeterminado: @code{"/var/log/nscd.log"})
12219Name of the nscd log file. This is where debugging output goes when
12220@code{debug-level} is strictly positive.
12221
12222@item @code{debug-level} (predeterminado: @code{0})
12223Integer denoting the debugging levels. Higher numbers mean that more
12224debugging output is logged.
12225
12226@item @code{caches} (predeterminadas: @var{%nscd-default-caches})
12227List of @code{<nscd-cache>} objects denoting things to be cached; see below.
12228
12229@end table
12230@end deftp
12231
12232@deftp {Tipo de datos} nscd-cache
12233Tipo de datos que representa una base de datos de caché de nscd y sus
12234parámetros.
12235
12236@table @asis
12237
12238@item @code{base de datos}
12239This is a symbol representing the name of the database to be cached. Valid
12240values are @code{passwd}, @code{group}, @code{hosts}, and @code{services},
12241which designate the corresponding NSS database (@pxref{NSS Basics,,, libc,
12242The GNU C Library Reference Manual}).
12243
12244@item @code{positive-time-to-live}
12245@itemx @code{negative-time-to-live} (predeterminado: @code{20})
12246A number representing the number of seconds during which a positive or
12247negative lookup result remains in cache.
12248
12249@item @code{check-files?} (predeterminado: @code{#t})
12250Whether to check for updates of the files corresponding to @var{database}.
12251
12252For instance, when @var{database} is @code{hosts}, setting this flag
12253instructs nscd to check for updates in @file{/etc/hosts} and to take them
12254into account.
12255
12256@item @code{persistent?} (predeterminada: @code{#t})
12257Whether the cache should be stored persistently on disk.
12258
12259@item @code{shared?} (predeterminado: @code{#t})
12260Whether the cache should be shared among users.
12261
12262@item @code{max-database-size} (predeterminado: 32@tie{}MiB)
12263Maximum size in bytes of the database cache.
12264
12265@c XXX: 'suggested-size' and 'auto-propagate?' seem to be expert
12266@c settings, so leave them out.
12267
12268@end table
12269@end deftp
12270
12271@defvr {Variable Scheme} %nscd-default-caches
12272List of @code{<nscd-cache>} objects used by default by
12273@code{nscd-configuration} (see above).
12274
12275It enables persistent and aggressive caching of service and host name
12276lookups. The latter provides better host name lookup performance,
12277resilience in the face of unreliable name servers, and also better
12278privacy---often the result of host name lookups is in local cache, so
12279external name servers do not even need to be queried.
12280@end defvr
12281
12282@anchor{syslog-configuration-type}
12283@cindex syslog
12284@cindex logging
12285@deftp {Tipo de datos} syslog-configuration
12286Este tipo de datos representa la configuración del daemon syslog.
12287
12288@table @asis
12289@item @code{syslogd} (predeterminado: @code{#~(string-append #$inetutils "/libexec/syslogd")})
12290El daemon syslog usado.
12291
12292@item @code{config-file} (predeterminado: @code{%default-syslog.conf})
12293El fichero de configuración de syslog usado.
12294
12295@end table
12296@end deftp
12297
12298@anchor{syslog-service}
12299@cindex syslog
12300@deffn {Procedimiento Scheme} syslog-service @var{config}
12301Return a service that runs a syslog daemon according to @var{config}.
12302
12303@xref{syslogd invocation,,, inetutils, GNU Inetutils}, para más información
12304sobre la sintaxis del fichero de configuración.
12305@end deffn
12306
12307@defvr {Variable Scheme} guix-service-type
12308This is the type of the service that runs the build daemon,
12309@command{guix-daemon} (@pxref{Invocación de guix-daemon}). Its value must be a
12310@code{guix-configuration} record as described below.
12311@end defvr
12312
12313@anchor{guix-configuration-type}
12314@deftp {Tipo de datos} guix-configuration
12315This data type represents the configuration of the Guix build daemon.
12316@xref{Invocación de guix-daemon}, for more information.
12317
12318@table @asis
12319@item @code{guix} (predeterminado: @var{guix})
12320El paquete Guix usado.
12321
12322@item @code{build-group} (predeterminado: @code{"guixbuild"})
12323El nombre del grupo de las cuentas de usuarias de construcción.
12324
12325@item @code{build-accounts} (predeterminadas: @code{10})
12326Número de cuentas de usuarias de construcción a crear.
12327
12328@item @code{authorize-key?} (predeterminado: @code{#t})
12329@cindex sustituciones, autorización de las mismas
12330Determina si se autoriza las claves de sustituciones listadas en
12331@code{authorized-keys}---predeterminada la de
12332@code{@value{SUBSTITUTE-SERVER}} (@pxref{Sustituciones}).
12333
12334@vindex %default-authorized-guix-keys
12335@item @code{authorized-keys} (predeterminadas: @var{%default-authorized-guix-keys})
12336La lista de ficheros de claves autorizadas para importaciones de archivos,
12337como una lista de expresiones-G que evalúan a cadenas (@pxref{Invocación de guix archive}). Por defecto, contiene las de @code{@value{SUBSTITUTE-SERVER}}
12338(@pxref{Sustituciones}).
12339
12340@item @code{use-substitutes?} (predeterminado: @code{#t})
12341Determina si se usarán sustituciones.
12342
12343@item @code{substitute-urls} (predeterminado: @var{%default-substitute-urls})
12344La lista de URLs donde se buscarán sustituciones por defecto.
12345
12346@item @code{max-silent-time} (predeterminado: @code{0})
12347@itemx @code{timeout} (predeterminado: @code{0})
12348The number of seconds of silence and the number of seconds of activity,
12349respectively, after which a build process times out. A value of zero
12350disables the timeout.
12351
12352@item @code{log-compression} (predeterminado: @code{'bzip2})
12353El tipo de compresión usado en los log de construcción---o bien @code{gzip},
12354o bien @code{bzip2} o @code{none}.
12355
12356@item @code{extra-options} (predeterminadas: @code{'()})
12357Lista de opciones de línea de órdenes adicionales para
12358@command{guix-daemon}.
12359
12360@item @code{log-file} (predeterminado: @code{"/var/log/guix-daemon.log"})
12361Fichero al que se escriben la salida estándar y la salida estándar de error
12362de @command{guix-daemon}.
12363
12364@item @code{http-proxy} (predeterminado: @code{#f})
12365El proxy HTTP que se usa para la descarga de derivaciones de salida fija y
12366sustituciones.
12367
12368@item @code{tmpdir} (predeterminado: @code{#f})
12369Una ruta de directorio donde @command{guix-daemon} realiza las
12370construcciones.
12371
12372@end table
12373@end deftp
12374
12375@deffn {Procedimiento Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}]
12376Run @var{udev}, which populates the @file{/dev} directory dynamically. udev
12377rules can be provided as a list of files through the @var{rules} variable.
12378The procedures @var{udev-rule} and @var{file->udev-rule} from @code{(gnu
12379services base)} simplify the creation of such rule files.
12380@end deffn
12381
12382@deffn {Procedimiento Scheme} udev-rule [@var{nombre-fichero} @var{contenido}]
12383Devuelve un fichero de reglas de udev con nombre @var{nombre-fichero} que
12384contiene las reglas definidas en el literal @var{contenido}.
12385
12386En el ejemplo siguiente se define una regla para un dispositivo USB que será
12387almacenada en el fichero @file{90-usb-cosa.rules}. Esta regla ejecuta un
12388script cuando se detecta un dispositivo USB con un identificador de producto
12389dado.
12390
12391@example
12392(define %regla-ejemplo-udev
12393 (udev-rule
12394 "90-usb-cosa.rules"
12395 (string-append "ACTION==\"add\", SUBSYSTEM==\"usb\", "
12396 "ATTR@{product@}==\"Ejemplo\", "
12397 "RUN+=\"/ruta/al/ejecutable\"")))
12398@end example
12399
12400The @command{herd rules udev} command, as root, returns the name of the
12401directory containing all the active udev rules.
12402@end deffn
12403
12404Here we show how the default @var{udev-service} can be extended with it.
12405
12406@example
12407(operating-system
12408 ;; @dots{}
12409 (services
12410 (modify-services %desktop-services
12411 (udev-service-type config =>
12412 (udev-configuration (inherit config)
12413 (rules (append (udev-configuration-rules config)
12414 (list %regla-ejemplo-udev))))))))
12415@end example
12416
12417@deffn {Procedimiento Scheme} file->udev-rule [@var{nombre-fichero} @var{fichero}]
12418Devuelve un fichero de udev con nombre @var{nombre-fichero} que contiene las
12419reglas definidas en @var{fichero}, un objeto tipo-fichero.
12420
12421El ejemplo siguiente muestra cómo podemos usar un fichero de reglas
12422existente.
12423
12424@example
12425(use-modules (guix download) ;para url-fetch
12426 (guix packages) ;para origin
12427 ;; @dots{})
12428
12429(define %reglas-android-udev
12430 (file->udev-rule
12431 "51-android-udev.rules"
12432 (let ((version "20170910"))
12433 (origin
12434 (method url-fetch)
12435 (uri (string-append "https://raw.githubusercontent.com/M0Rf30/"
12436 "android-udev-rules/" version "/51-android.rules"))
12437 (sha256
12438 (base32 "0lmmagpyb6xsq6zcr2w1cyx9qmjqmajkvrdbhjx32gqf1d9is003"))))))
12439@end example
12440@end deffn
12441
12442Adicionalmente, las definiciones de paquete Gui pueden ser incluidas en
12443@var{rules} para extender las reglas udev con las definiciones encontradas
12444bajo su subdirectorio @file{lib/udev/rules.d}. En vez del ejemplo previo de
12445@var{file->udev-rule}, podíamos haber usado el paquete
12446@var{android-udev-rules} que existe en Guix en el módulo @code{(gnu packages
12447android)}.
12448
12449El siguiente ejemplo muestra cómo usar el paquete @var{android-udev-rules}
12450para que la herramienta de Android @command{adb} pueda detectar dispositivos
12451sin privilegios de root. También detalla como crear el grupo
12452@code{adbusers}, el cual se requiere para el funcionamiento correcto de las
12453reglas definidas dentro del paquete @var{android-udev-rules}. Para crear tal
12454grupo, debemos definirlo tanto como parte de @var{supplementary-groups} de
12455la declaración de nuestra cuenta de usuaria @var{user-account}, así como en
12456el campo @var{groups} del registro @var{operating-system}.
12457
12458@example
12459(use-modules (gnu packages android) ;para android-udev-rules
12460 (gnu system shadow) ;para user-group
12461 ;; @dots{})
12462
12463(operating-system
12464 ;; @dots{}
12465 (users (cons (user-acount
12466 ;; @dots{}
12467 (supplementary-groups
12468 '("adbusers" ;para adb
12469 "wheel" "netdev" "audio" "video"))
12470 ;; @dots{})))
12471
12472 (groups (cons (user-group (system? #t) (name "adbusers"))
12473 %base-groups))
12474
12475 ;; @dots{}
12476
12477 (services
12478 (modify-services %desktop-services
12479 (udev-service-type
12480 config =>
12481 (udev-configuration (inherit config)
12482 (rules (cons android-udev-rules
12483 (udev-configuration-rules config))))))))
12484@end example
12485
12486@defvr {Variable Scheme} urandom-seed-service-type
12487Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom}
12488when rebooting. It also tries to seed @file{/dev/urandom} from
12489@file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is
12490readable.
12491@end defvr
12492
12493@defvr {Variable Scheme} %random-seed-file
12494This is the name of the file where some random bytes are saved by
12495@var{urandom-seed-service} to seed @file{/dev/urandom} when rebooting. It
12496defaults to @file{/var/lib/random-seed}.
12497@end defvr
12498
12499@cindex ratón
12500@cindex gpm
12501@defvr {Variable Scheme} gpm-service-type
12502This is the type of the service that runs GPM, the @dfn{general-purpose
12503mouse daemon}, which provides mouse support to the Linux console. GPM
12504allows users to use the mouse in the console, notably to select, copy, and
12505paste text.
12506
12507The value for services of this type must be a @code{gpm-configuration} (see
12508below). This service is not part of @var{%base-services}.
12509@end defvr
12510
12511@deftp {Tipo de datos} gpm-configuration
12512Tipo de datos que representa la configuración de GPM.
12513
12514@table @asis
12515@item @code{opciones} (predeterminadas: @code{%default-gpm-options})
12516Command-line options passed to @command{gpm}. The default set of options
12517instruct @command{gpm} to listen to mouse events on @file{/dev/input/mice}.
12518@xref{Command Line,,, gpm, gpm manual}, for more information.
12519
12520@item @code{gpm} (predeterminado: @code{gpm})
12521El paquete GPM usado.
12522
12523@end table
12524@end deftp
12525
12526@anchor{guix-publish-service-type}
12527@deffn {Variable Scheme} guix-publish-service-type
12528This is the service type for @command{guix publish} (@pxref{Invocación de guix publish}). Its value must be a @code{guix-configuration} object, as
12529described below.
12530
12531This assumes that @file{/etc/guix} already contains a signing key pair as
12532created by @command{guix archive --generate-key} (@pxref{Invocación de guix archive}). If that is not the case, the service will fail to start.
12533@end deffn
12534
12535@deftp {Tipo de datos} guix-publish-configuration
12536Tipo de datos que representa la configuración del servicio @code{guix
12537publish}.
12538
12539@table @asis
12540@item @code{guix} (predeterminado: @code{guix})
12541El paquete Guix usado.
12542
12543@item @code{port} (predeterminado: @code{80})
12544El puerto TCP en el que se esperan conexiones.
12545
12546@item @code{host} (predeterminado: @code{"localhost"})
12547The host (and thus, network interface) to listen to. Use @code{"0.0.0.0"}
12548to listen on all the network interfaces.
12549
12550@item @code{compression-level} (predeterminado: @code{3})
12551The gzip compression level at which substitutes are compressed. Use
12552@code{0} to disable compression altogether, and @code{9} to get the best
12553compression ratio at the expense of increased CPU usage.
12554
12555@item @code{nar-path} (predeterminado: @code{"nar"})
12556The URL path at which ``nars'' can be fetched. @xref{Invocación de guix publish,
12557@code{--nar-path}}, for details.
12558
12559@item @code{cache} (predeterminado: @code{#f})
12560When it is @code{#f}, disable caching and instead generate archives on
12561demand. Otherwise, this should be the name of a directory---e.g.,
12562@code{"/var/cache/guix/publish"}---where @command{guix publish} caches
12563archives and meta-data ready to be sent. @xref{Invocación de guix publish,
12564@option{--cache}}, for more information on the tradeoffs involved.
12565
12566@item @code{workers} (predeterminado: @code{#f})
12567When it is an integer, this is the number of worker threads used for
12568caching; when @code{#f}, the number of processors is used. @xref{Invocación de guix publish, @option{--workers}}, for more information.
12569
12570@item @code{ttl} (predeterminado: @code{#f})
12571When it is an integer, this denotes the @dfn{time-to-live} in seconds of the
12572published archives. @xref{Invocación de guix publish, @option{--ttl}}, for more
12573information.
12574@end table
12575@end deftp
12576
12577@anchor{rngd-service}
12578@deffn {Procedimiento Scheme} rngd-service [#:rng-tools @var{rng-tools}] @
12579 [#:device "/dev/hwrng"] Return a service that runs the @command{rngd}
12580program from @var{rng-tools} to add @var{device} to the kernel's entropy
12581pool. The service will fail if @var{device} does not exist.
12582@end deffn
12583
12584@anchor{pam-limits-service}
12585@cindex límites por sesión
12586@cindex ulimit
12587@cindex prioridad
12588@cindex tiempo real
12589@cindex jackd
12590@deffn {Procedimiento Scheme} pam-limits-service [#:limits @code{'()}]
12591
12592Return a service that installs a configuration file for the
12593@uref{http://linux-pam.org/Linux-PAM-html/sag-pam_limits.html,
12594@code{pam_limits} module}. The procedure optionally takes a list of
12595@code{pam-limits-entry} values, which can be used to specify @code{ulimit}
12596limits and nice priority limits to user sessions.
12597
12598The following limits definition sets two hard and soft limits for all login
12599sessions of users in the @code{realtime} group:
12600
12601@example
12602(pam-limits-service
12603 (list
12604 (pam-limits-entry "@@realtime" 'both 'rtprio 99)
12605 (pam-limits-entry "@@realtime" 'both 'memlock 'unlimited)))
12606@end example
12607
12608The first entry increases the maximum realtime priority for non-privileged
12609processes; the second entry lifts any restriction of the maximum address
12610space that can be locked in memory. These settings are commonly used for
12611real-time audio systems.
12612@end deffn
12613
12614@node Ejecución de tareas programadas
12615@subsection Ejecución de tareas programadas
12616
12617@cindex cron
12618@cindex mcron
12619@cindex scheduling jobs
12620The @code{(gnu services mcron)} module provides an interface to
12621GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,,
12622mcron, GNU@tie{}mcron}). GNU@tie{}mcron is similar to the traditional Unix
12623@command{cron} daemon; the main difference is that it is implemented in
12624Guile Scheme, which provides a lot of flexibility when specifying the
12625scheduling of jobs and their actions.
12626
12627The example below defines an operating system that runs the
12628@command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files}) and
12629the @command{guix gc} commands (@pxref{Invocación de guix gc}) daily, as well as
12630the @command{mkid} command on behalf of an unprivileged user (@pxref{mkid
12631invocation,,, idutils, ID Database Utilities}). It uses gexps to introduce
12632job definitions that are passed to mcron (@pxref{Expresiones-G}).
12633
12634@lisp
12635(use-modules (guix) (gnu) (gnu services mcron))
12636(use-package-modules base idutils)
12637
12638(define trabajo-updatedb
12639 ;; Ejecuta 'updatedb' a las 3AM cada día. Aquí escribimos
12640 ;; las acciones del trabajo como un procedimiento Scheme.
12641 #~(job '(next-hour '(3))
12642 (lambda ()
12643 (execl (string-append #$findutils "/bin/updatedb")
12644 "updatedb"
12645 "--prunepaths=/tmp /var/tmp /gnu/store"))))
12646
12647(define trabajo-recolector-basura
12648 ;; Recolecta basura 5 minutos después de media noche,
12649 ;; todos los días. La acción del trabajo es una orden
12650 ;; del shell.
12651 #~(job "5 0 * * *" ;sintaxis de Vixie cron
12652 "guix gc -F 1G"))
12653
12654(define trabajo-idutils
12655 ;; Actualiza el índice de la base de datos como "carlos" a las
12656 ;; 12:15 y a las 19:15. Esto se ejecuta desde su directorio.
12657 #~(job '(next-minute-from (next-hour '(12 19)) '(15))
12658 (string-append #$idutils "/bin/mkid src")
12659 #:user "carlos"))
12660
12661(operating-system
12662 ;; @dots{}
12663 (services (cons (service mcron-service-type
12664 (mcron-configuration
12665 (jobs (list trabajo-recolector-basura
12666 trabajo-updatedb
12667 trabajo-idutils))))
12668 %base-services)))
12669@end lisp
12670
12671@xref{Guile Syntax, mcron job specifications,, mcron, GNU@tie{}mcron}, for
12672more information on mcron job specifications. Below is the reference of the
12673mcron service.
12674
12675On a running system, you can use the @code{schedule} action of the service
12676to visualize the mcron jobs that will be executed next:
12677
12678@example
12679# herd schedule mcron
12680@end example
12681
12682@noindent
12683The example above lists the next five tasks that will be executed, but you
12684can also specify the number of tasks to display:
12685
12686@example
12687# herd schedule mcron 10
12688@end example
12689
12690@defvr {Variable Scheme} mcron-service-type
12691This is the type of the @code{mcron} service, whose value is an
12692@code{mcron-configuration} object.
12693
12694This service type can be the target of a service extension that provides it
12695additional job specifications (@pxref{Composición de servicios}). In other
12696words, it is possible to define services that provide additional mcron jobs
12697to run.
12698@end defvr
12699
12700@deftp {Tipo de datos} mcron-configuration
12701Tipo de datos que representa la configuración de mcron.
12702
12703@table @asis
12704@item @code{mcron} (predeterminado: @var{mcron})
12705El paquete mcron usado.
12706
12707@item @code{jobs}
12708This is a list of gexps (@pxref{Expresiones-G}), where each gexp corresponds
12709to an mcron job specification (@pxref{Syntax, mcron job specifications,,
12710mcron, GNU@tie{}mcron}).
12711@end table
12712@end deftp
12713
12714
12715@node Rotación de logs
12716@subsection Rotación de logs
12717
12718@cindex rottlog
12719@cindex rotación de logs
12720@cindex logging
12721Log files such as those found in @file{/var/log} tend to grow endlessly, so
12722it's a good idea to @dfn{rotate} them once in a while---i.e., archive their
12723contents in separate files, possibly compressed. The @code{(gnu services
12724admin)} module provides an interface to GNU@tie{}Rot[t]log, a log rotation
12725tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}).
12726
12727The example below defines an operating system that provides log rotation
12728with the default settings, for commonly encountered log files.
12729
12730@lisp
12731(use-modules (guix) (gnu))
12732(use-service-modules admin mcron)
12733(use-package-modules base idutils)
12734
12735(operating-system
12736 ;; @dots{}
12737 (services (cons (service rottlog-service-type)
12738 %base-services)))
12739@end lisp
12740
12741@defvr {Variable Scheme} rottlog-service-type
12742This is the type of the Rottlog service, whose value is a
12743@code{rottlog-configuration} object.
12744
12745Other services can extend this one with new @code{log-rotation} objects (see
12746below), thereby augmenting the set of files to be rotated.
12747
12748This service type can define mcron jobs (@pxref{Ejecución de tareas programadas}) to
12749run the rottlog service.
12750@end defvr
12751
12752@deftp {Tipo de datos} rottlog-configuration
12753Tipo de datos que representa la configuración de rottlog.
12754
12755@table @asis
12756@item @code{rottlog} (predeterminado: @code{rottlog})
12757El paquete Rottlog usado.
12758
12759@item @code{rc-file} (predeterminado: @code{(file-append rottlog "/etc/rc")})
12760The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,,
12761rottlog, GNU Rot[t]log Manual}).
12762
12763@item @code{rotations} (predeterminadas: @code{%default-rotations})
12764A list of @code{log-rotation} objects as defined below.
12765
12766@item @code{jobs}
12767This is a list of gexps where each gexp corresponds to an mcron job
12768specification (@pxref{Ejecución de tareas programadas}).
12769@end table
12770@end deftp
12771
12772@deftp {Tipo de datos} log-rotation
12773Tipo de datos que representa la rotación de un grupo de ficheros de log.
12774
12775Taking an example from the Rottlog manual (@pxref{Period Related File
12776Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be defined
12777like this:
12778
12779@example
12780(log-rotation
12781 (frequency 'daily)
12782 (files '("/var/log/apache/*"))
12783 (options '("storedir apache-archives"
12784 "rotate 6"
12785 "notifempty"
12786 "nocompress")))
12787@end example
12788
12789La lista de campos es como sigue:
12790
12791@table @asis
12792@item @code{frequency} (predeterminada: @code{'weekly})
12793La frecuencia de rotación de logs, un símbolo.
12794
12795@item @code{files}
12796La lista de ficheros o patrones extendidos de fichero a rotar.
12797
12798@item @code{options} (predeterminadas: @code{'()})
12799The list of rottlog options for this rotation (@pxref{Configuration
12800parameters,,, rottlog, GNU Rot[t]lg Manual}).
12801
12802@item @code{post-rotate} (predeterminado: @code{#f})
12803Either @code{#f} or a gexp to execute once the rotation has completed.
12804@end table
12805@end deftp
12806
12807@defvr {Variable Scheme} %default-rotations
12808Specifies weekly rotation of @var{%rotated-files} and a couple of other
12809files.
12810@end defvr
12811
12812@defvr {Variable Scheme} %rotated-files
12813The list of syslog-controlled files to be rotated. By default it is:
12814@code{'("/var/log/messages" "/var/log/secure")}.
12815@end defvr
12816
12817@node Servicios de red
12818@subsection Servicios de red
12819
12820El módulo @code{(gnu services networking)} proporciona servicios para
12821configurar la interfaz de red.
12822
12823@cindex DHCP, servicio de red
12824@defvr {Variable Scheme} dhcp-client-service-type
12825This is the type of services that run @var{dhcp}, a Dynamic Host
12826Configuration Protocol (DHCP) client, on all the non-loopback network
12827interfaces. Its value is the DHCP client package to use, @code{isc-dhcp} by
12828default.
12829@end defvr
12830
12831@deffn {Procedimiento Scheme} dhcpd-service-type
12832This type defines a service that runs a DHCP daemon. To create a service of
12833this type, you must supply a @code{<dhcpd-configuration>}. For example:
12834
12835@example
12836(service dhcpd-service-type
12837 (dhcpd-configuration
12838 (config-file (local-file "mi-dhcpd.conf"))
12839 (interfaces '("enp0s25"))))
12840@end example
12841@end deffn
12842
12843@deftp {Tipo de datos} dhcpd-configuration
12844@table @asis
12845@item @code{package} (predeterminado: @code{isc-dhcp})
12846The package that provides the DHCP daemon. This package is expected to
12847provide the daemon at @file{sbin/dhcpd} relative to its output directory.
12848The default package is the @uref{http://www.isc.org/products/DHCP, ISC's
12849DHCP server}.
12850@item @code{config-file} (predeterminado: @code{#f})
12851The configuration file to use. This is required. It will be passed to
12852@code{dhcpd} via its @code{-cf} option. This may be any ``file-like''
12853object (@pxref{Expresiones-G, file-like objects}). See @code{man
12854dhcpd.conf} for details on the configuration file syntax.
12855@item @code{version} (predeterminada: @code{"4"})
12856The DHCP version to use. The ISC DHCP server supports the values ``4'',
12857``6'', and ``4o6''. These correspond to the @code{dhcpd} program options
12858@code{-4}, @code{-6}, and @code{-4o6}. See @code{man dhcpd} for details.
12859@item @code{run-directory} (predeterminado: @code{"/run/dhcpd"})
12860The run directory to use. At service activation time, this directory will
12861be created if it does not exist.
12862@item @code{pid-file} (predeterminado: @code{"/run/dhcpd/dhcpd.pid"})
12863The PID file to use. This corresponds to the @code{-pf} option of
12864@code{dhcpd}. See @code{man dhcpd} for details.
12865@item @code{interfaces} (predeterminadas: @code{'()})
12866The names of the network interfaces on which dhcpd should listen for
12867broadcasts. If this list is not empty, then its elements (which must be
12868strings) will be appended to the @code{dhcpd} invocation when starting the
12869daemon. It may not be necessary to explicitly specify any interfaces here;
12870see @code{man dhcpd} for details.
12871@end table
12872@end deftp
12873
12874@defvr {Variable Scheme} static-networking-service-type
12875@c TODO Document <static-networking> data structures.
12876This is the type for statically-configured network interfaces.
12877@end defvr
12878
12879@deffn {Procedimiento Scheme} static-networking-service @var{interfaz} @var{ip} @
12880 [#:netmask #f] [#:gateway #f] [#:name-servers @code{'()}] @ [#:requirement
12881@code{'(udev)}] Return a service that starts @var{interface} with address
12882@var{ip}. If @var{netmask} is true, use it as the network mask. If
12883@var{gateway} is true, it must be a string specifying the default network
12884gateway. @var{requirement} can be used to declare a dependency on another
12885service before configuring the interface.
12886
12887This procedure can be called several times, one for each network interface
12888of interest. Behind the scenes what it does is extend
12889@code{static-networking-service-type} with additional network interfaces to
12890handle.
12891
12892Por ejemplo:
12893
12894@example
12895(static-networking-service "eno1" "192.168.1.82"
12896 #:gateway "192.168.1.2"
12897 #:name-servers '("192.168.1.2"))
12898@end example
12899@end deffn
12900
12901@cindex wicd
12902@cindex sin cables
12903@cindex WiFi
12904@cindex gestión de red
12905@deffn {Procedimiento Scheme} wicd-service [#:wicd @var{wicd}]
12906Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network
12907management daemon that aims to simplify wired and wireless networking.
12908
12909This service adds the @var{wicd} package to the global profile, providing
12910several commands to interact with the daemon and configure networking:
12911@command{wicd-client}, a graphical user interface, and the
12912@command{wicd-cli} and @command{wicd-curses} user interfaces.
12913@end deffn
12914
12915@cindex ModemManager
12916
12917@defvr {Variable Scheme} modem-manager-service-type
12918This is the service type for the
12919@uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager}
12920service. The value for this service type is a
12921@code{modem-manager-configuration} record.
12922
12923Este servicio es parte de @code{%desktop-services} (@pxref{Servicios de escritorio}).
12924@end defvr
12925
12926@deftp {Tipo de datos} modem-manager-configuration
12927Tipo de datos que representa la configuración de ModemManager.
12928
12929@table @asis
12930@item @code{modem-manager} (predeterminado: @code{modem-manager})
12931El paquete de ModemManager usado.
12932
12933@end table
12934@end deftp
12935
12936@cindex NetworkManager
12937
12938@defvr {Variable Scheme} network-manager-service-type
12939This is the service type for the
12940@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
12941service. The value for this service type is a
12942@code{network-manager-configuration} record.
12943
12944Este servicio es parte de @code{%desktop-services} (@pxref{Servicios de escritorio}).
12945@end defvr
12946
12947@deftp {Tipo de datos} network-manager-configuration
12948Tipo de datos que representa la configuración de NetworkManager.
12949
12950@table @asis
12951@item @code{network-manager} (predeterminado: @code{network-manager})
12952El paquete de NetworkManager usado.
12953
12954@item @code{dns} (predeterminado: @code{"default"})
12955Processing mode for DNS, which affects how NetworkManager uses the
12956@code{resolv.conf} configuration file.
12957
12958@table @samp
12959@item default
12960NetworkManager will update @code{resolv.conf} to reflect the nameservers
12961provided by currently active connections.
12962
12963@item dnsmasq
12964NetworkManager will run @code{dnsmasq} as a local caching nameserver, using
12965a "split DNS" configuration if you are connected to a VPN, and then update
12966@code{resolv.conf} to point to the local nameserver.
12967
12968@item none
12969NetworkManager will not modify @code{resolv.conf}.
12970@end table
12971
12972@item @code{vpn-plugins} (predeterminados: @code{'()})
12973This is the list of available plugins for virtual private networks (VPNs).
12974An example of this is the @code{network-manager-openvpn} package, which
12975allows NetworkManager to manage VPNs @i{via} OpenVPN.
12976
12977@end table
12978@end deftp
12979
12980@cindex Connman
12981@deffn {Variable Scheme} connman-service-type
12982This is the service type to run @url{https://01.org/connman,Connman}, a
12983network connection manager.
12984
12985Its value must be an @code{connman-configuration} record as in this example:
12986
12987@example
12988(service connman-service-type
12989 (connman-configuration
12990 (disable-vpn? #t)))
12991@end example
12992
12993See below for details about @code{connman-configuration}.
12994@end deffn
12995
12996@deftp {Tipo de datos} connman-configuration
12997Tipo de datos que representa la configuración de connman.
12998
12999@table @asis
13000@item @code{connman} (predeterminado: @var{connman})
13001El paquete connman usado.
13002
13003@item @code{disable-vpn?} (predeterminado: @code{#f})
13004Cuando es verdadero, deshabilita el módulo vpn de connman.
13005@end table
13006@end deftp
13007
13008@cindex WPA Supplicant
13009@defvr {Variable Scheme} wpa-supplicant-service-type
13010This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA
13011supplicant}, an authentication daemon required to authenticate against
13012encrypted WiFi or ethernet networks.
13013@end defvr
13014
13015@deftp {Tipo de datos} wpa-supplicant-configuration
13016Tipo de datos que representa la configuración de WPA Supplicant.
13017
13018Toma los siguientes parámetros:
13019
13020@table @asis
13021@item @code{wpa-supplicant} (predeterminado: @code{wpa-supplicant})
13022El paquete de WPA Supplicant usado.
13023
13024@item @code{dbus?} (predeterminado: @code{#t})
13025Si se escuchan o no peticiones en D-Bus.
13026
13027@item @code{pid-file} (predeterminado: @code{"/var/run/wpa_supplicant.pid"})
13028Dónde se almacena el fichero con el PID.
13029
13030@item @code{interface} (predeterminado: @code{#f})
13031If this is set, it must specify the name of a network interface that WPA
13032supplicant will control.
13033
13034@item @code{config-file} (predeterminado: @code{#f})
13035Fichero de configuración opcional usado.
13036
13037@item @code{extra-options} (predeterminadas: @code{'()})
13038Lista de parámetros adicionales a pasar al daemon en la línea de órdenes.
13039@end table
13040@end deftp
13041
13042@cindex iptables
13043@defvr {Variable Scheme} iptables-service-type
13044This is the service type to set up an iptables configuration. iptables is a
13045packet filtering framework supported by the Linux kernel. This service
13046supports configuring iptables for both IPv4 and IPv6. A simple example
13047configuration rejecting all incoming connections except those to the ssh
13048port 22 is shown below.
13049
13050@lisp
13051(service iptables-service-type
13052 (iptables-configuration
13053 (ipv4-rules (plain-file "iptables.rules" "*filter
13054:INPUT ACCEPT
13055:FORWARD ACCEPT
13056:OUTPUT ACCEPT
13057-A INPUT -p tcp --dport 22 -j ACCEPT
13058-A INPUT -j REJECT --reject-with icmp-port-unreachable
13059COMMIT
13060"))
13061 (ipv6-rules (plain-file "ip6tables.rules" "*filter
13062:INPUT ACCEPT
13063:FORWARD ACCEPT
13064:OUTPUT ACCEPT
13065-A INPUT -p tcp --dport 22 -j ACCEPT
13066-A INPUT -j REJECT --reject-with icmp6-port-unreachable
13067COMMIT
13068"))))
13069@end lisp
13070@end defvr
13071
13072@deftp {Tipo de datos} iptables-configuration
13073El tipo de datos que representa la configuración de iptables.
13074
13075@table @asis
13076@item @code{iptables} (predeterminado: @code{iptables})
13077The iptables package that provides @code{iptables-restore} and
13078@code{ip6tables-restore}.
13079@item @code{ipv4-rules} (predeterminado: @code{%iptables-accept-all-rules})
13080The iptables rules to use. It will be passed to @code{iptables-restore}.
13081This may be any ``file-like'' object (@pxref{Expresiones-G, file-like
13082objects}).
13083@item @code{ipv6-rules} (predeterminadas: @code{%iptables-accept-all-rules})
13084The ip6tables rules to use. It will be passed to @code{ip6tables-restore}.
13085This may be any ``file-like'' object (@pxref{Expresiones-G, file-like
13086objects}).
13087@end table
13088@end deftp
13089
13090@cindex NTP (protocolo de tiempo de red), servicio
13091@cindex reloj de tiempo real
13092@defvr {Variable Scheme} ntp-service-type
13093This is the type of the service running the @uref{http://www.ntp.org,
13094Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep
13095the system clock synchronized with that of the specified NTP servers.
13096
13097The value of this service is an @code{ntpd-configuration} object, as
13098described below.
13099@end defvr
13100
13101@deftp {Tipo de datos} ntp-configuration
13102Este es el tipo de datos para la configuración del servicio NTP.
13103
13104@table @asis
13105@item @code{servers} (predeterminados: @code{%ntp-servers})
13106This is the list of servers (host names) with which @command{ntpd} will be
13107synchronized.
13108
13109@item @code{allow-large-adjustment?} (predeterminado: @code{#f})
13110This determines whether @command{ntpd} is allowed to make an initial
13111adjustment of more than 1,000 seconds.
13112
13113@item @code{ntp} (predeterminado: @code{ntp})
13114El paquete NTP usado.
13115@end table
13116@end deftp
13117
13118@defvr {Variable Scheme} %ntp-servers
13119List of host names used as the default NTP servers. These are servers of
13120the @uref{https://www.ntppool.org/en/, NTP Pool Project}.
13121@end defvr
13122
13123@cindex OpenNTPD
13124@deffn {Procedimiento Scheme} openntpd-service-type
13125Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as
13126implemented by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will
13127keep the system clock synchronized with that of the given servers.
13128
13129@example
13130(service
13131 openntpd-service-type
13132 (openntpd-configuration
13133 (listen-on '("127.0.0.1" "::1"))
13134 (sensor '("udcf0 correction 70000"))
13135 (constraint-from '("www.gnu.org"))
13136 (constraints-from '("https://www.google.com/"))
13137 (allow-large-adjustment? #t)))
13138
13139@end example
13140@end deffn
13141
13142@deftp {Tipo de datos} openntpd-configuration
13143@table @asis
13144@item @code{openntpd} (predeterminado: @code{(file-append openntpd "/sbin/ntpd")})
13145El ejecutable openntpd usado.
13146@item @code{listen-on} (predeterminadas: @code{'("127.0.0.1" "::1")})
13147Una lista de direcciones IP o nombres de máquina en los que el daemon ntpd
13148debe escuchar conexiones.
13149@item @code{query-from} (predeterminadas: @code{'()})
13150Una lista de direcciones IP locales que el daemon ntpd debe usar para
13151consultas salientes.
13152@item @code{sensor} (predeterminados: @code{'()})
13153Specify a list of timedelta sensor devices ntpd should use. @code{ntpd}
13154will listen to each sensor that acutally exists and ignore non-existant
13155ones. See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation}
13156for more information.
13157@item @code{server} (predeterminadas: @var{%ntp-servers})
13158Specify a list of IP addresses or hostnames of NTP servers to synchronize
13159to.
13160@item @code{servers} (predeterminados: @code{'()})
13161Specify a list of IP addresses or hostnames of NTP pools to synchronize to.
13162@item @code{constraint-from} (predeterminado: @code{'()})
13163@code{ntpd} can be configured to query the ‘Date’ from trusted HTTPS servers
13164via TLS. This time information is not used for precision but acts as an
13165authenticated constraint, thereby reducing the impact of unauthenticated NTP
13166man-in-the-middle attacks. Specify a list of URLs, IP addresses or
13167hostnames of HTTPS servers to provide a constraint.
13168@item @code{constraints-from} (predeterminadas: @code{'()})
13169As with constraint from, specify a list of URLs, IP addresses or hostnames
13170of HTTPS servers to provide a constraint. Should the hostname resolve to
13171multiple IP addresses, @code{ntpd} will calculate a median constraint from
13172all of them.
13173@item @code{allow-large-adjustment?} (predeterminado: @code{#f})
13174Determines if @code{ntpd} is allowed to make an initial adjustment of more
13175than 180 seconds.
13176@end table
13177@end deftp
13178
13179@cindex inetd
13180@deffn {Variable Scheme} inetd-service-type
13181This service runs the @command{inetd} (@pxref{inetd invocation,,, inetutils,
13182GNU Inetutils}) daemon. @command{inetd} listens for connections on internet
13183sockets, and lazily starts the specified server program when a connection is
13184made on one of these sockets.
13185
13186The value of this service is an @code{inetd-configuration} object. The
13187following example configures the @command{inetd} daemon to provide the
13188built-in @command{echo} service, as well as an smtp service which forwards
13189smtp traffic over ssh to a server @code{smtp-server} behind a gateway
13190@code{hostname}:
13191
13192@example
13193(service
13194 inetd-service-type
13195 (inetd-configuration
13196 (entries (list
13197 (inetd-entry
13198 (name "echo")
13199 (socket-type 'stream)
13200 (protocol "tcp")
13201 (wait? #f)
13202 (user "root"))
13203 (inetd-entry
13204 (node "127.0.0.1")
13205 (name "smtp")
13206 (socket-type 'stream)
13207 (protocol "tcp")
13208 (wait? #f)
13209 (user "root")
13210 (program (file-append openssh "/bin/ssh"))
13211 (arguments
13212 '("ssh" "-qT" "-i" "/ruta/a/la/clave_ssh"
13213 "-W" "smtp-server:25" "usuaria@@máquina")))))
13214@end example
13215
13216See below for more details about @code{inetd-configuration}.
13217@end deffn
13218
13219@deftp {Tipo de datos} inetd-configuration
13220Tipo de datos que representa la configuración de @command{inetd}.
13221
13222@table @asis
13223@item @code{program} (predeterminado: @code{(file-append inetutils "/libexec/inetd")})
13224El ejecutable @command{inetd} usado.
13225
13226@item @code{entries} (predeterminadas: @code{'()})
13227A list of @command{inetd} service entries. Each entry should be created by
13228the @code{inetd-entry} constructor.
13229@end table
13230@end deftp
13231
13232@deftp {Tipo de datos} inetd-entry
13233Data type representing an entry in the @command{inetd} configuration. Each
13234entry corresponds to a socket where @command{inetd} will listen for
13235requests.
13236
13237@table @asis
13238@item @code{node} (predeterminado: @code{#f})
13239Optional string, a comma-separated list of local addresses @command{inetd}
13240should use when listening for this service. @xref{Configuration file,,,
13241inetutils, GNU Inetutils} for a complete description of all options.
13242@item @code{name}
13243A string, the name must correspond to an entry in @code{/etc/services}.
13244@item @code{socket-type}
13245One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or
13246@code{'seqpacket}.
13247@item @code{protocol}
13248A string, must correspond to an entry in @code{/etc/protocols}.
13249@item @code{wait?} (predeterminado: @code{#t})
13250Whether @command{inetd} should wait for the server to exit before listening
13251to new service requests.
13252@item @code{user}
13253A string containing the user (and, optionally, group) name of the user as
13254whom the server should run. The group name can be specified in a suffix,
13255separated by a colon or period, i.e.@: @code{"user"}, @code{"user:group"} or
13256@code{"user.group"}.
13257@item @code{program} (predeterminado: @code{"internal"})
13258The server program which will serve the requests, or @code{"internal"} if
13259@command{inetd} should use a built-in service.
13260@item @code{arguments} (predeterminados: @code{'()})
13261A list strings or file-like objects, which are the server program's
13262arguments, starting with the zeroth argument, i.e.@: the name of the program
13263itself. For @command{inetd}'s internal services, this entry must be
13264@code{'()} or @code{'("internal")}.
13265@end table
13266
13267@xref{Configuration file,,, inetutils, GNU Inetutils} for a more detailed
13268discussion of each configuration field.
13269@end deftp
13270
13271@cindex Tor
13272@defvr {Variable Scheme} tor-service-type
13273This is the type for a service that runs the @uref{https://torproject.org,
13274Tor} anonymous networking daemon. The service is configured using a
13275@code{<tor-configuration>} record. By default, the Tor daemon runs as the
13276@code{tor} unprivileged user, which is a member of the @code{tor} group.
13277
13278@end defvr
13279
13280@deftp {Tipo de datos} tor-configuration
13281@table @asis
13282@item @code{tor} (predeterminado: @code{tor})
13283The package that provides the Tor daemon. This package is expected to
13284provide the daemon at @file{bin/tor} relative to its output directory. The
13285default package is the @uref{https://www.torproject.org, Tor Project's}
13286implementation.
13287
13288@item @code{config-file} (predeterminado: @code{(plain-file "empty" "")})
13289The configuration file to use. It will be appended to a default
13290configuration file, and the final configuration file will be passed to
13291@code{tor} via its @code{-f} option. This may be any ``file-like'' object
13292(@pxref{Expresiones-G, file-like objects}). See @code{man tor} for details
13293on the configuration file syntax.
13294
13295@item @code{hidden-services} (predeterminados: @code{'()})
13296The list of @code{<hidden-service>} records to use. For any hidden service
13297you include in this list, appropriate configuration to enable the hidden
13298service will be automatically added to the default configuration file. You
13299may conveniently create @code{<hidden-service>} records using the
13300@code{tor-hidden-service} procedure described below.
13301
13302@item @code{socks-socket-type} (predeterminado: @code{'tcp})
13303The default socket type that Tor should use for its SOCKS socket. This must
13304be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by
13305default Tor will listen on TCP port 9050 on the loopback interface (i.e.,
13306localhost). If it is @code{'unix}, then Tor will listen on the UNIX domain
13307socket @file{/var/run/tor/socks-sock}, which will be made writable by
13308members of the @code{tor} group.
13309
13310If you want to customize the SOCKS socket in more detail, leave
13311@code{socks-socket-type} at its default value of @code{'tcp} and use
13312@code{config-file} to override the default by providing your own
13313@code{SocksPort} option.
13314@end table
13315@end deftp
13316
13317@cindex servicio oculto
13318@deffn {Procedimiento Scheme} tor-hidden-service @var{nombre} @var{relación}
13319Define un @dfn{servicio oculto} Tor llamado @var{nombre} y que implementa la
13320@var{¶elación}. @var{relación} es una lista de tuplas puerto/máquina, como:
13321
13322@example
13323 '((22 "127.0.0.1:22")
13324 (80 "127.0.0.1:8080"))
13325@end example
13326
13327En este ejemplo, el puerto 22 del servicio oculto se asocia con el puerto 22
13328local, y el puerto 80 se asocia con el puerto 8080 local.
13329
13330Esto crea un directorio @file{/var/lib/tor/hidden-services/@var{nombre}},
13331donde el fichero @file{hostname} contiene el nombre de máquina @code{.onion}
13332para el servicio oculto.
13333
13334Véase @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, la
13335documentación del proyecto Tor} para más información.
13336@end deffn
13337
13338El módulo @code{(gnu services rsync)} proporciona los siguientes servicios:
13339
13340You might want an rsync daemon if you have files that you want available so
13341anyone (or just yourself) can download existing files or upload new files.
13342
13343@deffn {Variable Scheme} rsync-service-type
13344This is the type for the @uref{https://rsync.samba.org, rsync} rsync daemon,
13345@command{rsync-configuration} record as in this example:
13346
13347@example
13348(service rsync-service-type)
13349@end example
13350
13351See below for details about @code{rsync-configuration}.
13352@end deffn
13353
13354@deftp {Tipo de datos} rsync-configuration
13355Tipo de datos que representa la configuración para @code{rsync-service}.
13356
13357@table @asis
13358@item @code{package} (predeterminado: @var{rsync})
13359Paquete @code{rsync} usado.
13360
13361@item @code{port-number} (predeterminado: @code{873})
13362TCP port on which @command{rsync} listens for incoming connections. If port
13363is less than @code{1024} @command{rsync} needs to be started as the
13364@code{root} user and group.
13365
13366@item @code{pid-file} (predeterminado: @code{"/var/run/rsyncd/rsyncd.pid"})
13367Name of the file where @command{rsync} writes its PID.
13368
13369@item @code{lock-file} (predeterminado: @code{"/var/run/rsyncd/rsyncd.lock"})
13370Name of the file where @command{rsync} writes its lock file.
13371
13372@item @code{log-file} (predeterminado: @code{"/var/log/rsyncd.log"})
13373Name of the file where @command{rsync} writes its log file.
13374
13375@item @code{use-chroot?} (predeterminado: @var{#t})
13376Whether to use chroot for @command{rsync} shared directory.
13377
13378@item @code{share-path} (predeterminado: @file{/srv/rsync})
13379Location of the @command{rsync} shared directory.
13380
13381@item @code{share-comment} (predeterminado: @code{"Rsync share"})
13382Comment of the @command{rsync} shared directory.
13383
13384@item @code{read-only?} (predeterminado: @var{#f})
13385Read-write permissions to shared directory.
13386
13387@item @code{timeout} (predeterminado: @code{300})
13388I/O timeout in seconds.
13389
13390@item @code{user} (predeterminada: @var{"root"})
13391Propietaria del proceso @code{rsync}.
13392
13393@item @code{group} (predeterminado: @var{"root"})
13394Grupo del proceso @code{rsync}.
13395
13396@item @code{uid} (predeterminado: @var{"rsyncd"})
13397Nombre o ID de usuaria bajo la cual se efectúan las transferencias desde y
13398hacia el módulo cuando el daemon se ejecuta como @code{root}.
13399
13400@item @code{gid} (predeterminado: @var{"rsyncd"})
13401Nombre o ID de grupo que se usa cuando se accede al módulo.
13402
13403@end table
13404@end deftp
13405
13406Es más, @code{(gnu services ssh)} proporciona los siguientes servicios.
13407@cindex SSH
13408@cindex servidor SSH
13409
13410@deffn {Procedimiento Scheme} lsh-service [#:host-key "/etc/lsh/host-key"] @
13411 [#:daemonic? #t] [#:interfaces '()] [#:port-number 22] @
13412 [#:allow-empty-passwords? #f] [#:root-login? #f] @
13413 [#:syslog-output? #t] [#:x11-forwarding? #t] @
13414 [#:tcp/ip-forwarding? #t] [#:password-authentication? #t] @
13415 [#:public-key-authentication? #t] [#:initialize? #t]
13416Ejecuta el programa @command{lshd} de @var{lsh} para escuchar en el puerto
13417@var{port-number}. @var{host-key} debe designar a un fichero que contiene la
13418clave de la máquina, y que sea legible únicamente por root.
13419
13420When @var{daemonic?} is true, @command{lshd} will detach from the
13421controlling terminal and log its output to syslogd, unless one sets
13422@var{syslog-output?} to false. Obviously, it also makes lsh-service depend
13423on existence of syslogd service. When @var{pid-file?} is true,
13424@command{lshd} writes its PID to the file called @var{pid-file}.
13425
13426When @var{initialize?} is true, automatically create the seed and host key
13427upon service activation if they do not exist yet. This may take long and
13428require interaction.
13429
13430When @var{initialize?} is false, it is up to the user to initialize the
13431randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to
13432create a key pair with the private key stored in file @var{host-key}
13433(@pxref{lshd basics,,, lsh, LSH Manual}).
13434
13435When @var{interfaces} is empty, lshd listens for connections on all the
13436network interfaces; otherwise, @var{interfaces} must be a list of host names
13437or addresses.
13438
13439@var{allow-empty-passwords?} specifies whether to accept log-ins with empty
13440passwords, and @var{root-login?} specifies whether to accept log-ins as
13441root.
13442
13443The other options should be self-descriptive.
13444@end deffn
13445
13446@cindex SSH
13447@cindex servidor SSH
13448@deffn {Variable Scheme} openssh-service-type
13449This is the type for the @uref{http://www.openssh.org, OpenSSH} secure shell
13450daemon, @command{sshd}. Its value must be an @code{openssh-configuration}
13451record as in this example:
13452
13453@example
13454(service openssh-service-type
13455 (openssh-configuration
13456 (x11-forwarding? #t)
13457 (permit-root-login 'without-password)
13458 (authorized-keys
13459 `(("alicia" ,(local-file "alicia.pub"))
13460 ("rober" ,(local-file "rober.pub"))))))
13461@end example
13462
13463See below for details about @code{openssh-configuration}.
13464
13465This service can be extended with extra authorized keys, as in this example:
13466
13467@example
13468(service-extension openssh-service-type
13469 (const `(("carlos"
13470 ,(local-file "carlos.pub")))))
13471@end example
13472@end deffn
13473
13474@deftp {Tipo de datos} openssh-configuration
13475Este es el registro de configuración para @command{sshd} de OpenSSH.
13476
13477@table @asis
13478@item @code{pid-file} (predeterminado: @code{"/var/run/sshd.pid"})
13479Name of the file where @command{sshd} writes its PID.
13480
13481@item @code{port-number} (predeterminado: @code{22})
13482TCP port on which @command{sshd} listens for incoming connections.
13483
13484@item @code{permit-root-login} (predeterminado: @code{#f})
13485This field determines whether and when to allow logins as root. If
13486@code{#f}, root logins are disallowed; if @code{#t}, they are allowed. If
13487it's the symbol @code{'without-password}, then root logins are permitted but
13488not with password-based authentication.
13489
13490@item @code{allow-empty-passwords?} (predeterminado: @code{#f})
13491When true, users with empty passwords may log in. When false, they may not.
13492
13493@item @code{password-authentication?} (predeterminado: @code{#t})
13494When true, users may log in with their password. When false, they have
13495other authentication methods.
13496
13497@item @code{public-key-authentication?} (predeterminado: @code{#t})
13498When true, users may log in using public key authentication. When false,
13499users have to use other authentication method.
13500
13501Authorized public keys are stored in @file{~/.ssh/authorized_keys}. This is
13502used only by protocol version 2.
13503
13504@item @code{x11-forwarding?} (predeterminado: @code{#f})
13505When true, forwarding of X11 graphical client connections is enabled---in
13506other words, @command{ssh} options @option{-X} and @option{-Y} will work.
13507
13508@item @code{allow-agent-forwarding?} (predeterminado: @code{#t})
13509Whether to allow agent forwarding.
13510
13511@item @code{allow-tcp-forwarding?} (predeterminado: @code{#t})
13512Whether to allow TCP forwarding.
13513
13514@item @code{gateway-ports?} (predeterminado: @code{#f})
13515Whether to allow gateway ports.
13516
13517@item @code{challenge-response-authentication?} (predeterminado: @code{#f})
13518Specifies whether challenge response authentication is allowed (e.g.@: via
13519PAM).
13520
13521@item @code{use-pam?} (predeterminado: @code{#t})
13522Enables the Pluggable Authentication Module interface. If set to @code{#t},
13523this will enable PAM authentication using
13524@code{challenge-response-authentication?} and
13525@code{password-authentication?}, in addition to PAM account and session
13526module processing for all authentication types.
13527
13528Because PAM challenge response authentication usually serves an equivalent
13529role to password authentication, you should disable either
13530@code{challenge-response-authentication?} or
13531@code{password-authentication?}.
13532
13533@item @code{print-last-log?} (predeterminado: @code{#t})
13534Especifica si @command{sshd} debe imprimir la fecha y hora del último
13535ingreso al sistema de la usuaria cuando una usuaria ingresa
13536interactivamente.
13537
13538@item @code{subsystems} (predeterminados: @code{'(("sftp" "internal-sftp"))})
13539Configures external subsystems (e.g.@: file transfer daemon).
13540
13541This is a list of two-element lists, each of which containing the subsystem
13542name and a command (with optional arguments) to execute upon subsystem
13543request.
13544
13545The command @command{internal-sftp} implements an in-process SFTP server.
13546Alternately, one can specify the @command{sftp-server} command:
13547@example
13548(service openssh-service-type
13549 (openssh-configuration
13550 (subsystems
13551 `(("sftp" ,(file-append openssh "/libexec/sftp-server"))))))
13552@end example
13553
13554@item @code{accepted-environment} (predeterminado: @code{'()})
13555List of strings describing which environment variables may be exported.
13556
13557Each string gets on its own line. See the @code{AcceptEnv} option in
13558@code{man sshd_config}.
13559
13560This example allows ssh-clients to export the @code{COLORTERM} variable. It
13561is set by terminal emulators, which support colors. You can use it in your
13562shell's ressource file to enable colors for the prompt and commands if this
13563variable is set.
13564
13565@example
13566(service openssh-service-type
13567 (openssh-configuration
13568 (accepted-environment '("COLORTERM"))))
13569@end example
13570
13571@item @code{authorized-keys} (predeterminadas: @code{'()})
13572@cindex claves autorizadas, SSH
13573@cindex SSH, claves autorizadas
13574This is the list of authorized keys. Each element of the list is a user
13575name followed by one or more file-like objects that represent SSH public
13576keys. For example:
13577
13578@example
13579(openssh-configuration
13580 (authorized-keys
13581 `(("rekado" ,(local-file "rekado.pub"))
13582 ("chris" ,(local-file "chris.pub"))
13583 ("root" ,(local-file "rekado.pub") ,(local-file "chris.pub")))))
13584@end example
13585
13586@noindent
13587registers the specified public keys for user accounts @code{rekado},
13588@code{chris}, and @code{root}.
13589
13590Additional authorized keys can be specified @i{via}
13591@code{service-extension}.
13592
13593Note that this does @emph{not} interfere with the use of
13594@file{~/.ssh/authorized_keys}.
13595
13596@item @code{log-level} (predeterminado: @code{'info})
13597This is a symbol specifying the logging level: @code{quiet}, @code{fatal},
13598@code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man
13599page for @file{sshd_config} for the full list of level names.
13600
13601@item @code{extra-content} (predeterminado: @code{""})
13602This field can be used to append arbitrary text to the configuration file.
13603It is especially useful for elaborate configurations that cannot be
13604expressed otherwise. This configuration, for example, would generally
13605disable root logins, but permit them from one specific IP address:
13606
13607@example
13608(openssh-configuration
13609 (extra-content "\
13610Match Address 192.168.0.1
13611 PermitRootLogin yes"))
13612@end example
13613
13614@end table
13615@end deftp
13616
13617@deffn {Procedimiento Scheme} dropbear-service [@var{config}]
13618Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH
13619daemon} with the given @var{config}, a @code{<dropbear-configuration>}
13620object.
13621
13622For example, to specify a Dropbear service listening on port 1234, add this
13623call to the operating system's @code{services} field:
13624
13625@example
13626(dropbear-service (dropbear-configuration
13627 (port-number 1234)))
13628@end example
13629@end deffn
13630
13631@deftp {Tipo de datos} dropbear-configuration
13632This data type represents the configuration of a Dropbear SSH daemon.
13633
13634@table @asis
13635@item @code{dropbear} (predeterminado: @var{dropbear})
13636El paquete de Dropbear usado.
13637
13638@item @code{port-number} (predeterminado: 22)
13639Puerto TCP donde el daemon espera conexiones entrantes.
13640
13641@item @code{syslog-output?} (predeterminado: @code{#t})
13642Whether to enable syslog output.
13643
13644@item @code{pid-file} (predeterminado: @code{"/var/run/dropbear.pid"})
13645File name of the daemon's PID file.
13646
13647@item @code{root-login?} (predeterminado: @code{#f})
13648Whether to allow @code{root} logins.
13649
13650@item @code{allow-empty-passwords?} (predeterminado: @code{#f})
13651Whether to allow empty passwords.
13652
13653@item @code{password-authentication?} (predeterminado: @code{#t})
13654Whether to enable password-based authentication.
13655@end table
13656@end deftp
13657
13658@defvr {Variable Scheme} %facebook-host-aliases
13659This variable contains a string for use in @file{/etc/hosts} (@pxref{Host
13660Names,,, libc, The GNU C Library Reference Manual}). Each line contains a
13661entry that maps a known server name of the Facebook on-line service---e.g.,
13662@code{www.facebook.com}---to the local host---@code{127.0.0.1} or its IPv6
13663equivalent, @code{::1}.
13664
13665This variable is typically used in the @code{hosts-file} field of an
13666@code{operating-system} declaration (@pxref{Referencia de ``operating-system'',
13667@file{/etc/hosts}}):
13668
13669@example
13670(use-modules (gnu) (guix))
13671
13672(operating-system
13673 (host-name "micompu")
13674 ;; ...
13675 (hosts-file
13676 ;; Crea un fichero /etc/hosts file con alias para "localhost"
13677 ;; y "micompu", así como los servidores de facebook.
13678 (plain-file "hosts"
13679 (string-append (local-host-aliases host-name)
13680 %facebook-host-aliases))))
13681@end example
13682
13683Este mecanismo puede impedir a los programas que se ejecutan localmente,
13684como navegadores Web, el acceso a Facebook.
13685@end defvr
13686
13687El módulo @code{(gnu services avahi)} proporciona la siguiente definición.
13688
13689@defvr {Scheme Variable} avahi-service-type
13690This is the service that runs @command{avahi-daemon}, a system-wide
13691mDNS/DNS-SD responder that allows for service discovery and
13692``zero-configuration'' host name lookups (see @uref{http://avahi.org/}).
13693Its value must be a @code{zero-configuration} record---see below.
13694
13695This service extends the name service cache daemon (nscd) so that it can
13696resolve @code{.local} host names using
13697@uref{http://0pointer.de/lennart/projects/nss-mdns/, nss-mdns}. @xref{Selector de servicios de nombres}, for information on host name resolution.
13698
13699Additionally, add the @var{avahi} package to the system profile so that
13700commands such as @command{avahi-browse} are directly usable.
13701@end defvr
13702
13703@deftp {Data Type} avahi-configuration
13704Data type representation the configuration for Avahi.
13705
13706@table @asis
13707
13708@item @code{host-name} (default: @code{#f})
13709If different from @code{#f}, use that as the host name to publish for this
13710machine; otherwise, use the machine's actual host name.
13711
13712@item @code{publish?} (default: @code{#t})
13713When true, allow host names and services to be published (broadcast) over
13714the network.
13715
13716@item @code{publish-workstation?} (default: @code{#t})
13717When true, @command{avahi-daemon} publishes the machine's host name and IP
13718address via mDNS on the local network. To view the host names published on
13719your local network, you can run:
13720
13721@example
13722avahi-browse _workstation._tcp
13723@end example
13724
13725@item @code{wide-area?} (default: @code{#f})
13726When true, DNS-SD over unicast DNS is enabled.
13727
13728@item @code{ipv4?} (default: @code{#t})
13729@itemx @code{ipv6?} (default: @code{#t})
13730These fields determine whether to use IPv4/IPv6 sockets.
13731
13732@item @code{domains-to-browse} (default: @code{'()})
13733This is a list of domains to browse.
13734@end table
13735@end deftp
13736
13737@deffn {Variable Scheme} openvswitch-service-type
13738This is the type of the @uref{http://www.openvswitch.org, Open vSwitch}
13739service, whose value should be an @code{openvswitch-configuration} object.
13740@end deffn
13741
13742@deftp {Tipo de datos} openvswitch-configuration
13743Data type representing the configuration of Open vSwitch, a multilayer
13744virtual switch which is designed to enable massive network automation
13745through programmatic extension.
13746
13747@table @asis
13748@item @code{package} (predeterminado: @var{openvswitch})
13749Package object of the Open vSwitch.
13750
13751@end table
13752@end deftp
13753
13754@node Sistema X Window
13755@subsection Sistema X Window
13756
13757@cindex X11
13758@cindex Sistema de ventanas X
13759@cindex gestor de ingreso en el sistema
13760Support for the X Window graphical display system---specifically Xorg---is
13761provided by the @code{(gnu services xorg)} module. Note that there is no
13762@code{xorg-service} procedure. Instead, the X server is started by the
13763@dfn{login manager}, by default the GNOME Display Manager (GDM).
13764
13765@cindex GDM
13766@cindex GNOME, login manager
13767GDM of course allows users to log in into window managers and desktop
13768environments other than GNOME; for those using GNOME, GDM is required for
13769features such as automatic screen locking.
13770
13771@cindex gestor de ventanas
13772To use X11, you must install at least one @dfn{window manager}---for example
13773the @code{windowmaker} or @code{openbox} packages---preferably by adding it
13774to the @code{packages} field of your operating system definition
13775(@pxref{Referencia de ``operating-system'', system-wide packages}).
13776
13777@defvr {Scheme Variable} gdm-service-type
13778This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME
13779Desktop Manager} (GDM), a program that manages graphical display servers and
13780handles graphical user logins. Its value must be a @code{gdm-configuration}
13781(see below.)
13782
13783@cindex tipos de sesión (X11)
13784@cindex X11, tipos de sesión
13785GDM looks for @dfn{session types} described by the @file{.desktop} files in
13786@file{/run/current-system/profile/share/xsessions} and allows users to
13787choose a session from the log-in screen. Packages such as @code{gnome},
13788@code{xfce}, and @code{i3} provide @file{.desktop} files; adding them to the
13789system-wide set of packages automatically makes them available at the log-in
13790screen.
13791
13792In addition, @file{~/.xsession} files are honored. When available,
13793@file{~/.xsession} must be an executable that starts a window manager and/or
13794other X clients.
13795@end defvr
13796
13797@deftp {Data Type} gdm-configuration
13798@table @asis
13799@item @code{auto-login?} (predeterminado: @code{#f})
13800@itemx @code{default-user} (default: @code{#f})
13801When @code{auto-login?} is false, GDM presents a log-in screen.
13802
13803When @code{auto-login?} is true, GDM logs in directly as
13804@code{default-user}.
13805
13806@item @code{gnome-shell-assets} (default: ...)
13807List of GNOME Shell assets needed by GDM: icon theme, fonts, etc.
13808
13809@item @code{xorg-configuration} (default: @code{(xorg-configuration)})
13810Configuration of the Xorg graphical server.
13811
13812@item @code{xsession} (default: @code{(xinitrc)})
13813Script to run before starting a X session.
13814
13815@item @code{dbus-daemon} (default: @code{dbus-daemon-wrapper})
13816File name of the @code{dbus-daemon} executable.
13817
13818@item @code{gdm} (default: @code{gdm})
13819The GDM package to use.
13820@end table
13821@end deftp
13822
13823@defvr {Variable Scheme} slim-service-type
13824Este es el tipo para el gestor de ingreso al sistema gráfico para X11 SLiM.
13825
13826Like GDM, SLiM looks for session types described by @file{.desktop} files
13827and allows users to choose a session from the log-in screen using @kbd{F1}.
13828It also honors @file{~/.xsession} files.
13829@end defvr
13830
13831@deftp {Tipo de datos} slim-configuration
13832Data type representing the configuration of @code{slim-service-type}.
13833
13834@table @asis
13835@item @code{allow-empty-passwords?} (predeterminado: @code{#t})
13836Whether to allow logins with empty passwords.
13837
13838@item @code{auto-login?} (predeterminado: @code{#f})
13839@itemx @code{default-user} (predeterminado: @code{""})
13840When @code{auto-login?} is false, SLiM presents a log-in screen.
13841
13842When @code{auto-login?} is true, SLiM logs in directly as
13843@code{default-user}.
13844
13845@item @code{theme} (predeterminado: @code{%default-slim-theme})
13846@itemx @code{theme-name} (predeterminado: @code{%default-slim-theme-name})
13847The graphical theme to use and its name.
13848
13849@item @code{auto-login-session} (predeterminado: @code{#f})
13850If true, this must be the name of the executable to start as the default
13851session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}.
13852
13853If false, a session described by one of the available @file{.desktop} files
13854in @code{/run/current-system/profile} and @code{~/.guix-profile} will be
13855used.
13856
13857@quotation Nota
13858You must install at least one window manager in the system profile or in
13859your user profile. Failing to do that, if @code{auto-login-session} is
13860false, you will be unable to log in.
13861@end quotation
13862
13863@item @code{xorg-configuration} (default @code{(xorg-configuration)})
13864Configuration of the Xorg graphical server.
13865
13866@item @code{xauth} (predeterminado: @code{xauth})
13867El paquete XAuth usado.
13868
13869@item @code{shepherd} (predeterminado: @code{shepherd})
13870The Shepherd package used when invoking @command{halt} and @command{reboot}.
13871
13872@item @code{sessreg} (predeterminado: @code{sessreg})
13873The sessreg package used in order to register the session.
13874
13875@item @code{slim} (predeterminado: @code{slim})
13876El paquete SLiM usado.
13877@end table
13878@end deftp
13879
13880@defvr {Variable Scheme} %default-theme
13881@defvrx {Variable Scheme} %default-theme-name
13882The default SLiM theme and its name.
13883@end defvr
13884
13885
13886@deftp {Tipo de datos} sddm-configuration
13887This is the data type representing the sddm service configuration.
13888
13889@table @asis
13890@item @code{display-server} (predeterminado: "x11")
13891Select display server to use for the greeter. Valid values are "x11" or
13892"wayland".
13893
13894@item @code{numlock} (predeterminado: "on")
13895Valid values are "on", "off" or "none".
13896
13897@item @code{halt-command} (predeterminado @code{#~(string-apppend #$shepherd "/sbin/halt")})
13898Command to run when halting.
13899
13900@item @code{reboot-command} (predeterminado @code{#~(string-append #$shepherd "/sbin/reboot")})
13901Command to run when rebooting.
13902
13903@item @code{theme} (predeterminado "maldives")
13904Theme to use. Default themes provided by SDDM are "elarun" or "maldives".
13905
13906@item @code{themes-directory} (predeterminado "/run/current-system/profile/share/sddm/themes")
13907Directory to look for themes.
13908
13909@item @code{faces-directory} (predeterminado "/run/current-system/profile/share/sddm/faces")
13910Directory to look for faces.
13911
13912@item @code{default-path} (predeterminado "/run/current-system/profile/bin")
13913Default PATH to use.
13914
13915@item @code{minimum-uid} (predeterminado 1000)
13916Minimum UID to display in SDDM.
13917
13918@item @code{maximum-uid} (predeterminado 2000)
13919Maximum UID to display in SDDM
13920
13921@item @code{remember-last-user?} (predeterminado #t)
13922Remember last user.
13923
13924@item @code{remember-last-session?} (predeterminado #t)
13925Remember last session.
13926
13927@item @code{hide-users} (predeterminado "")
13928Usernames to hide from SDDM greeter.
13929
13930@item @code{hide-shells} (predeterminado @code{#~(string-append #$shadow "/sbin/nologin")})
13931Users with shells listed will be hidden from the SDDM greeter.
13932
13933@item @code{session-command} (predeterminado @code{#~(string-append #$sddm "/share/sddm/scripts/wayland-session")})
13934Script to run before starting a wayland session.
13935
13936@item @code{sessions-directory} (predeterminado "/run/current-system/profile/share/wayland-sessions")
13937Directory to look for desktop files starting wayland sessions.
13938
13939@item @code{xorg-configuration} (default @code{(xorg-configuration)})
13940Configuration of the Xorg graphical server.
13941
13942@item @code{xauth-path} (predeterminado @code{#~(string-append #$xauth "/bin/xauth")})
13943Path to xauth.
13944
13945@item @code{xephyr-path} (predeterminado @code{#~(string-append #$xorg-server "/bin/Xephyr")})
13946Path to Xephyr.
13947
13948@item @code{xdisplay-start} (predeterminado @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")})
13949Script to run after starting xorg-server.
13950
13951@item @code{xdisplay-stop} (predeterminado @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")})
13952Script to run before stopping xorg-server.
13953
13954@item @code{xsession-command} (predeterminado: @code{xinitrc})
13955Script to run before starting a X session.
13956
13957@item @code{xsessions-directory} (predeterminado: "/run/current-system/profile/share/xsessions")
13958Directory to look for desktop files starting X sessions.
13959
13960@item @code{minimum-vt} (predeterminado: 7)
13961Minimum VT to use.
13962
13963@item @code{auto-login-user} (predeterminado "")
13964User to use for auto-login.
13965
13966@item @code{auto-login-session} (predeterminado "")
13967Desktop file to use for auto-login.
13968
13969@item @code{relogin?} (predeterminado #f)
13970Relogin after logout.
13971
13972@end table
13973@end deftp
13974
13975@cindex gestor de ingreso en el sistema
13976@cindex X11, ingreso al sistema
13977@deffn {Procedimiento Scheme} sddm-service config
13978Return a service that spawns the SDDM graphical login manager for config of
13979type @code{<sddm-configuration>}.
13980
13981@example
13982 (sddm-service (sddm-configuration
13983 (auto-login-user "Alicia")
13984 (auto-login-session "xfce.desktop")))
13985@end example
13986@end deffn
13987
13988@cindex Xorg, configuration
13989@deftp {Data Type} xorg-configuration
13990This data type represents the configuration of the Xorg graphical display
13991server. Note that there is not Xorg service; instead, the X server is
13992started by a ``display manager'' such as GDM, SDDM, and SLiM. Thus, the
13993configuration of these display managers aggregates an
13994@code{xorg-configuration} record.
13995
13996@table @asis
13997@item @code{modules} (default: @code{%default-xorg-modules})
13998This is a list of @dfn{module packages} loaded by the Xorg server---e.g.,
13999@code{xf86-video-vesa}, @code{xf86-input-keyboard}, and so on.
14000
14001@item @code{fonts} (default: @code{%default-xorg-fonts})
14002This is a list of font directories to add to the server's @dfn{font path}.
14003
14004@item @code{drivers} (default: @code{'()})
14005This must be either the empty list, in which case Xorg chooses a graphics
14006driver automatically, or a list of driver names that will be tried in this
14007order---e.g., @code{("modesetting" "vesa")}.
14008
14009@item @code{resolutions} (default: @code{'()})
14010When @code{resolutions} is the empty list, Xorg chooses an appropriate
14011screen resolution. Otherwise, it must be a list of resolutions---e.g.,
14012@code{((1024 768) (640 480))}.
14013
14014@cindex keyboard layout, for Xorg
14015@cindex keymap, for Xorg
14016@item @code{keyboard-layout} (predeterminada: @code{#f})
14017If this is @code{#f}, Xorg uses the default keyboard layout---usually US
14018English (``qwerty'') for a 105-key PC keyboard.
14019
14020Otherwise this must be a @code{keyboard-layout} object specifying the
14021keyboard layout in use when Xorg is running. @xref{Distribución de teclado}, for
14022more information on how to specify the keyboard layout.
14023
14024@item @code{extra-config} (default: @code{'()})
14025This is a list of strings or objects appended to the configuration file. It
14026is used to pass extra text to be added verbatim to the configuration file.
14027
14028@item @code{server} (default: @code{xorg-server})
14029This is the package providing the Xorg server.
14030
14031@item @code{server-arguments} (default: @code{%default-xorg-server-arguments})
14032This is the list of command-line arguments to pass to the X server. The
14033default is @code{-nolisten tcp}.
14034@end table
14035@end deftp
14036
14037@deffn {Scheme Procedure} set-xorg-configuration @var{config} @
14038 [@var{login-manager-service-type}] Tell the log-in manager (of type
14039@var{login-manager-service-type}) to use @var{config}, an
14040<xorg-configuration> record.
14041
14042Since the Xorg configuration is embedded in the log-in manager's
14043configuration---e.g., @code{gdm-configuration}---this procedure provides a
14044shorthand to set the Xorg configuration.
14045@end deffn
14046
14047@deffn {Scheme Procedure} xorg-start-command [@var{config}]
14048Return a @code{startx} script in which the modules, fonts, etc. specified in
14049@var{config}, are available. The result should be used in place of
14050@code{startx}.
14051
14052Usually the X server is started by a login manager.
14053@end deffn
14054
14055
14056@deffn {Procedimiento Scheme} screen-locker-service @var{paquete} [@var{programa}]
14057Añade @var{paquete}, un paquete para un bloqueador de sesión o un
14058salvapantallas cuya orden es @var{programa}, al conjunto de programas setuid
14059y añade una entrada PAM para él. Por ejemplo:
14060
14061@lisp
14062(screen-locker-service xlockmore "xlock")
14063@end lisp
14064
14065permite usar el viejo XlockMore.
14066@end deffn
14067
14068
14069@node Servicios de impresión
14070@subsection Servicios de impresión
14071
14072@cindex printer support with CUPS
14073The @code{(gnu services cups)} module provides a Guix service definition for
14074the CUPS printing service. To add printer support to a Guix system, add a
14075@code{cups-service} to the operating system definition:
14076
14077@deffn {Variable Scheme} cups-service-type
14078The service type for the CUPS print server. Its value should be a valid
14079CUPS configuration (see below). To use the default settings, simply write:
14080@example
14081(service cups-service-type)
14082@end example
14083@end deffn
14084
14085The CUPS configuration controls the basic things about your CUPS
14086installation: what interfaces it listens on, what to do if a print job
14087fails, how much logging to do, and so on. To actually add a printer, you
14088have to visit the @url{http://localhost:631} URL, or use a tool such as
14089GNOME's printer configuration services. By default, configuring a CUPS
14090service will generate a self-signed certificate if needed, for secure
14091connections to the print server.
14092
14093Suppose you want to enable the Web interface of CUPS and also add support
14094for Epson printers @i{via} the @code{escpr} package and for HP printers
14095@i{via} the @code{hplip-minimal} package. You can do that directly, like
14096this (you need to use the @code{(gnu packages cups)} module):
14097
14098@example
14099(service cups-service-type
14100 (cups-configuration
14101 (web-interface? #t)
14102 (extensions
14103 (list cups-filters escpr hplip-minimal))))
14104@end example
14105
14106Note: If you wish to use the Qt5 based GUI which comes with the hplip
14107package then it is suggested that you install the @code{hplip} package,
14108either in your OS configuration file or as your user.
14109
14110The available configuration parameters follow. Each parameter definition is
14111preceded by its type; for example, @samp{string-list foo} indicates that the
14112@code{foo} parameter should be specified as a list of strings. There is
14113also a way to specify the configuration as a string, if you have an old
14114@code{cupsd.conf} file that you want to port over from some other system;
14115see the end for more details.
14116
14117@c The following documentation was initially generated by
14118@c (generate-documentation) in (gnu services cups). Manually maintained
14119@c documentation is better, so we shouldn't hesitate to edit below as
14120@c needed. However if the change you want to make to this documentation
14121@c can be done in an automated way, it's probably easier to change
14122@c (generate-documentation) than to make it below and have to deal with
14123@c the churn as CUPS updates.
14124
14125
14126Available @code{cups-configuration} fields are:
14127
14128@deftypevr {@code{cups-configuration} parameter} package cups
14129El paquete CUPS.
14130@end deftypevr
14131
14132@deftypevr {@code{cups-configuration} parameter} package-list extensions
14133Drivers and other extensions to the CUPS package.
14134@end deftypevr
14135
14136@deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration
14137Configuration of where to write logs, what directories to use for print
14138spools, and related privileged configuration parameters.
14139
14140Available @code{files-configuration} fields are:
14141
14142@deftypevr {@code{files-configuration} parameter} log-location access-log
14143Defines the access log filename. Specifying a blank filename disables
14144access log generation. The value @code{stderr} causes log entries to be
14145sent to the standard error file when the scheduler is running in the
14146foreground, or to the system log daemon when run in the background. The
14147value @code{syslog} causes log entries to be sent to the system log daemon.
14148The server name may be included in filenames using the string @code{%s}, as
14149in @code{/var/log/cups/%s-access_log}.
14150
14151Defaults to @samp{"/var/log/cups/access_log"}.
14152@end deftypevr
14153
14154@deftypevr {@code{files-configuration} parameter} file-name cache-dir
14155Where CUPS should cache data.
14156
14157Defaults to @samp{"/var/cache/cups"}.
14158@end deftypevr
14159
14160@deftypevr {@code{files-configuration} parameter} string config-file-perm
14161Specifies the permissions for all configuration files that the scheduler
14162writes.
14163
14164Note that the permissions for the printers.conf file are currently masked to
14165only allow access from the scheduler user (typically root). This is done
14166because printer device URIs sometimes contain sensitive authentication
14167information that should not be generally known on the system. There is no
14168way to disable this security feature.
14169
14170Defaults to @samp{"0640"}.
14171@end deftypevr
14172
14173@deftypevr {@code{files-configuration} parameter} log-location error-log
14174Defines the error log filename. Specifying a blank filename disables access
14175log generation. The value @code{stderr} causes log entries to be sent to
14176the standard error file when the scheduler is running in the foreground, or
14177to the system log daemon when run in the background. The value
14178@code{syslog} causes log entries to be sent to the system log daemon. The
14179server name may be included in filenames using the string @code{%s}, as in
14180@code{/var/log/cups/%s-error_log}.
14181
14182Defaults to @samp{"/var/log/cups/error_log"}.
14183@end deftypevr
14184
14185@deftypevr {@code{files-configuration} parameter} string fatal-errors
14186Specifies which errors are fatal, causing the scheduler to exit. The kind
14187strings are:
14188
14189@table @code
14190@item none
14191No errors are fatal.
14192
14193@item all
14194All of the errors below are fatal.
14195
14196@item browse
14197Browsing initialization errors are fatal, for example failed connections to
14198the DNS-SD daemon.
14199
14200@item config
14201Configuration file syntax errors are fatal.
14202
14203@item listen
14204Listen or Port errors are fatal, except for IPv6 failures on the loopback or
14205@code{any} addresses.
14206
14207@item log
14208Log file creation or write errors are fatal.
14209
14210@item permissions
14211Bad startup file permissions are fatal, for example shared TLS certificate
14212and key files with world-read permissions.
14213@end table
14214
14215Defaults to @samp{"all -browse"}.
14216@end deftypevr
14217
14218@deftypevr {@code{files-configuration} parameter} boolean file-device?
14219Specifies whether the file pseudo-device can be used for new printer
14220queues. The URI @uref{file:///dev/null} is always allowed.
14221
14222El valor predeterminado es @samp{#f}
14223@end deftypevr
14224
14225@deftypevr {@code{files-configuration} parameter} string group
14226Specifies the group name or ID that will be used when executing external
14227programs.
14228
14229Defaults to @samp{"lp"}.
14230@end deftypevr
14231
14232@deftypevr {@code{files-configuration} parameter} string log-file-perm
14233Specifies the permissions for all log files that the scheduler writes.
14234
14235Defaults to @samp{"0644"}.
14236@end deftypevr
14237
14238@deftypevr {@code{files-configuration} parameter} log-location page-log
14239Defines the page log filename. Specifying a blank filename disables access
14240log generation. The value @code{stderr} causes log entries to be sent to
14241the standard error file when the scheduler is running in the foreground, or
14242to the system log daemon when run in the background. The value
14243@code{syslog} causes log entries to be sent to the system log daemon. The
14244server name may be included in filenames using the string @code{%s}, as in
14245@code{/var/log/cups/%s-page_log}.
14246
14247Defaults to @samp{"/var/log/cups/page_log"}.
14248@end deftypevr
14249
14250@deftypevr {@code{files-configuration} parameter} string remote-root
14251Specifies the username that is associated with unauthenticated accesses by
14252clients claiming to be the root user. The default is @code{remroot}.
14253
14254Defaults to @samp{"remroot"}.
14255@end deftypevr
14256
14257@deftypevr {@code{files-configuration} parameter} file-name request-root
14258Specifies the directory that contains print jobs and other HTTP request
14259data.
14260
14261Defaults to @samp{"/var/spool/cups"}.
14262@end deftypevr
14263
14264@deftypevr {@code{files-configuration} parameter} sandboxing sandboxing
14265Specifies the level of security sandboxing that is applied to print filters,
14266backends, and other child processes of the scheduler; either @code{relaxed}
14267or @code{strict}. This directive is currently only used/supported on macOS.
14268
14269Defaults to @samp{strict}.
14270@end deftypevr
14271
14272@deftypevr {@code{files-configuration} parameter} file-name server-keychain
14273Specifies the location of TLS certificates and private keys. CUPS will look
14274for public and private keys in this directory: a @code{.crt} files for
14275PEM-encoded certificates and corresponding @code{.key} files for PEM-encoded
14276private keys.
14277
14278Defaults to @samp{"/etc/cups/ssl"}.
14279@end deftypevr
14280
14281@deftypevr {@code{files-configuration} parameter} file-name server-root
14282Specifies the directory containing the server configuration files.
14283
14284Defaults to @samp{"/etc/cups"}.
14285@end deftypevr
14286
14287@deftypevr {@code{files-configuration} parameter} boolean sync-on-close?
14288Specifies whether the scheduler calls fsync(2) after writing configuration
14289or state files.
14290
14291El valor predeterminado es @samp{#f}
14292@end deftypevr
14293
14294@deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group
14295Specifies the group(s) to use for @code{@@SYSTEM} group authentication.
14296@end deftypevr
14297
14298@deftypevr {@code{files-configuration} parameter} file-name temp-dir
14299Specifies the directory where temporary files are stored.
14300
14301Defaults to @samp{"/var/spool/cups/tmp"}.
14302@end deftypevr
14303
14304@deftypevr {@code{files-configuration} parameter} string user
14305Specifies the user name or ID that is used when running external programs.
14306
14307Defaults to @samp{"lp"}.
14308@end deftypevr
14309@end deftypevr
14310
14311@deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level
14312Specifies the logging level for the AccessLog file. The @code{config} level
14313logs when printers and classes are added, deleted, or modified and when
14314configuration files are accessed or updated. The @code{actions} level logs
14315when print jobs are submitted, held, released, modified, or canceled, and
14316any of the conditions for @code{config}. The @code{all} level logs all
14317requests.
14318
14319Defaults to @samp{actions}.
14320@end deftypevr
14321
14322@deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs?
14323Specifies whether to purge job history data automatically when it is no
14324longer required for quotas.
14325
14326El valor predeterminado es @samp{#f}
14327@end deftypevr
14328
14329@deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols
14330Specifies which protocols to use for local printer sharing.
14331
14332Defaults to @samp{dnssd}.
14333@end deftypevr
14334
14335@deftypevr {@code{cups-configuration} parameter} boolean browse-web-if?
14336Specifies whether the CUPS web interface is advertised.
14337
14338El valor predeterminado es @samp{#f}
14339@end deftypevr
14340
14341@deftypevr {@code{cups-configuration} parameter} boolean browsing?
14342Specifies whether shared printers are advertised.
14343
14344El valor predeterminado es @samp{#f}
14345@end deftypevr
14346
14347@deftypevr {@code{cups-configuration} parameter} string classification
14348Specifies the security classification of the server. Any valid banner name
14349can be used, including "classified", "confidential", "secret", "topsecret",
14350and "unclassified", or the banner can be omitted to disable secure printing
14351functions.
14352
14353El valor predeterminado es @samp{""}.
14354@end deftypevr
14355
14356@deftypevr {@code{cups-configuration} parameter} boolean classify-override?
14357Specifies whether users may override the classification (cover page) of
14358individual print jobs using the @code{job-sheets} option.
14359
14360El valor predeterminado es @samp{#f}
14361@end deftypevr
14362
14363@deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type
14364Specifies the default type of authentication to use.
14365
14366Defaults to @samp{Basic}.
14367@end deftypevr
14368
14369@deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption
14370Specifies whether encryption will be used for authenticated requests.
14371
14372Defaults to @samp{Required}.
14373@end deftypevr
14374
14375@deftypevr {@code{cups-configuration} parameter} string default-language
14376Specifies the default language to use for text and web content.
14377
14378Defaults to @samp{"en"}.
14379@end deftypevr
14380
14381@deftypevr {@code{cups-configuration} parameter} string default-paper-size
14382Specifies the default paper size for new print queues. @samp{"Auto"} uses a
14383locale-specific default, while @samp{"None"} specifies there is no default
14384paper size. Specific size names are typically @samp{"Letter"} or
14385@samp{"A4"}.
14386
14387Defaults to @samp{"Auto"}.
14388@end deftypevr
14389
14390@deftypevr {@code{cups-configuration} parameter} string default-policy
14391Specifies the default access policy to use.
14392
14393Defaults to @samp{"default"}.
14394@end deftypevr
14395
14396@deftypevr {@code{cups-configuration} parameter} boolean default-shared?
14397Specifies whether local printers are shared by default.
14398
14399Defaults to @samp{#t}.
14400@end deftypevr
14401
14402@deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval
14403Specifies the delay for updating of configuration and state files, in
14404seconds. A value of 0 causes the update to happen as soon as possible,
14405typically within a few milliseconds.
14406
14407El valor predeterminado es @samp{30}.
14408@end deftypevr
14409
14410@deftypevr {@code{cups-configuration} parameter} error-policy error-policy
14411Specifies what to do when an error occurs. Possible values are
14412@code{abort-job}, which will discard the failed print job; @code{retry-job},
14413which will retry the job at a later time; @code{retry-this-job}, which
14414retries the failed job immediately; and @code{stop-printer}, which stops the
14415printer.
14416
14417Defaults to @samp{stop-printer}.
14418@end deftypevr
14419
14420@deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit
14421Specifies the maximum cost of filters that are run concurrently, which can
14422be used to minimize disk, memory, and CPU resource problems. A limit of 0
14423disables filter limiting. An average print to a non-PostScript printer
14424needs a filter limit of about 200. A PostScript printer needs about half
14425that (100). Setting the limit below these thresholds will effectively limit
14426the scheduler to printing a single job at any time.
14427
14428El valor predeterminado es @samp{0}.
14429@end deftypevr
14430
14431@deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice
14432Specifies the scheduling priority of filters that are run to print a job.
14433The nice value ranges from 0, the highest priority, to 19, the lowest
14434priority.
14435
14436El valor predeterminado es @samp{0}.
14437@end deftypevr
14438
14439@deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups
14440Specifies whether to do reverse lookups on connecting clients. The
14441@code{double} setting causes @code{cupsd} to verify that the hostname
14442resolved from the address matches one of the addresses returned for that
14443hostname. Double lookups also prevent clients with unregistered addresses
14444from connecting to your server. Only set this option to @code{#t} or
14445@code{double} if absolutely required.
14446
14447El valor predeterminado es @samp{#f}
14448@end deftypevr
14449
14450@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay
14451Specifies the number of seconds to wait before killing the filters and
14452backend associated with a canceled or held job.
14453
14454El valor predeterminado es @samp{30}.
14455@end deftypevr
14456
14457@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval
14458Specifies the interval between retries of jobs in seconds. This is
14459typically used for fax queues but can also be used with normal print queues
14460whose error policy is @code{retry-job} or @code{retry-current-job}.
14461
14462El valor predeterminado es @samp{30}.
14463@end deftypevr
14464
14465@deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit
14466Specifies the number of retries that are done for jobs. This is typically
14467used for fax queues but can also be used with normal print queues whose
14468error policy is @code{retry-job} or @code{retry-current-job}.
14469
14470Defaults to @samp{5}.
14471@end deftypevr
14472
14473@deftypevr {@code{cups-configuration} parameter} boolean keep-alive?
14474Specifies whether to support HTTP keep-alive connections.
14475
14476Defaults to @samp{#t}.
14477@end deftypevr
14478
14479@deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout
14480Specifies how long an idle client connection remains open, in seconds.
14481
14482El valor predeterminado es @samp{30}.
14483@end deftypevr
14484
14485@deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body
14486Specifies the maximum size of print files, IPP requests, and HTML form
14487data. A limit of 0 disables the limit check.
14488
14489El valor predeterminado es @samp{0}.
14490@end deftypevr
14491
14492@deftypevr {@code{cups-configuration} parameter} multiline-string-list listen
14493Listens on the specified interfaces for connections. Valid values are of
14494the form @var{address}:@var{port}, where @var{address} is either an IPv6
14495address enclosed in brackets, an IPv4 address, or @code{*} to indicate all
14496addresses. Values can also be file names of local UNIX domain sockets. The
14497Listen directive is similar to the Port directive but allows you to restrict
14498access to specific interfaces or networks.
14499@end deftypevr
14500
14501@deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log
14502Specifies the number of pending connections that will be allowed. This
14503normally only affects very busy servers that have reached the MaxClients
14504limit, but can also be triggered by large numbers of simultaneous
14505connections. When the limit is reached, the operating system will refuse
14506additional connections until the scheduler can accept the pending ones.
14507
14508Defaults to @samp{128}.
14509@end deftypevr
14510
14511@deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls
14512Specifies a set of additional access controls.
14513
14514Available @code{location-access-controls} fields are:
14515
14516@deftypevr {@code{location-access-controls} parameter} file-name path
14517Specifies the URI path to which the access control applies.
14518@end deftypevr
14519
14520@deftypevr {@code{location-access-controls} parameter} access-control-list access-controls
14521Access controls for all access to this path, in the same format as the
14522@code{access-controls} of @code{operation-access-control}.
14523
14524Defaults to @samp{()}.
14525@end deftypevr
14526
14527@deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls
14528Access controls for method-specific access to this path.
14529
14530Defaults to @samp{()}.
14531
14532Available @code{method-access-controls} fields are:
14533
14534@deftypevr {@code{method-access-controls} parameter} boolean reverse?
14535If @code{#t}, apply access controls to all methods except the listed
14536methods. Otherwise apply to only the listed methods.
14537
14538El valor predeterminado es @samp{#f}
14539@end deftypevr
14540
14541@deftypevr {@code{method-access-controls} parameter} method-list methods
14542Methods to which this access control applies.
14543
14544Defaults to @samp{()}.
14545@end deftypevr
14546
14547@deftypevr {@code{method-access-controls} parameter} access-control-list access-controls
14548Access control directives, as a list of strings. Each string should be one
14549directive, such as "Order allow,deny".
14550
14551Defaults to @samp{()}.
14552@end deftypevr
14553@end deftypevr
14554@end deftypevr
14555
14556@deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history
14557Specifies the number of debugging messages that are retained for logging if
14558an error occurs in a print job. Debug messages are logged regardless of the
14559LogLevel setting.
14560
14561Defaults to @samp{100}.
14562@end deftypevr
14563
14564@deftypevr {@code{cups-configuration} parameter} log-level log-level
14565Specifies the level of logging for the ErrorLog file. The value @code{none}
14566stops all logging while @code{debug2} logs everything.
14567
14568Defaults to @samp{info}.
14569@end deftypevr
14570
14571@deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format
14572Specifies the format of the date and time in the log files. The value
14573@code{standard} logs whole seconds while @code{usecs} logs microseconds.
14574
14575Defaults to @samp{standard}.
14576@end deftypevr
14577
14578@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients
14579Specifies the maximum number of simultaneous clients that are allowed by the
14580scheduler.
14581
14582Defaults to @samp{100}.
14583@end deftypevr
14584
14585@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host
14586Specifies the maximum number of simultaneous clients that are allowed from a
14587single address.
14588
14589Defaults to @samp{100}.
14590@end deftypevr
14591
14592@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies
14593Specifies the maximum number of copies that a user can print of each job.
14594
14595Defaults to @samp{9999}.
14596@end deftypevr
14597
14598@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time
14599Specifies the maximum time a job may remain in the @code{indefinite} hold
14600state before it is canceled. A value of 0 disables cancellation of held
14601jobs.
14602
14603El valor predeterminado es @samp{0}.
14604@end deftypevr
14605
14606@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs
14607Specifies the maximum number of simultaneous jobs that are allowed. Set to
146080 to allow an unlimited number of jobs.
14609
14610Defaults to @samp{500}.
14611@end deftypevr
14612
14613@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer
14614Specifies the maximum number of simultaneous jobs that are allowed per
14615printer. A value of 0 allows up to MaxJobs jobs per printer.
14616
14617El valor predeterminado es @samp{0}.
14618@end deftypevr
14619
14620@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user
14621Specifies the maximum number of simultaneous jobs that are allowed per
14622user. A value of 0 allows up to MaxJobs jobs per user.
14623
14624El valor predeterminado es @samp{0}.
14625@end deftypevr
14626
14627@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time
14628Specifies the maximum time a job may take to print before it is canceled, in
14629seconds. Set to 0 to disable cancellation of "stuck" jobs.
14630
14631Defaults to @samp{10800}.
14632@end deftypevr
14633
14634@deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size
14635Specifies the maximum size of the log files before they are rotated, in
14636bytes. The value 0 disables log rotation.
14637
14638Defaults to @samp{1048576}.
14639@end deftypevr
14640
14641@deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout
14642Specifies the maximum amount of time to allow between files in a multiple
14643file print job, in seconds.
14644
14645Defaults to @samp{300}.
14646@end deftypevr
14647
14648@deftypevr {@code{cups-configuration} parameter} string page-log-format
14649Specifies the format of PageLog lines. Sequences beginning with percent
14650(@samp{%}) characters are replaced with the corresponding information, while
14651all other characters are copied literally. The following percent sequences
14652are recognized:
14653
14654@table @samp
14655@item %%
14656insert a single percent character
14657
14658@item %@{name@}
14659insert the value of the specified IPP attribute
14660
14661@item %C
14662insert the number of copies for the current page
14663
14664@item %P
14665insert the current page number
14666
14667@item %T
14668insert the current date and time in common log format
14669
14670@item %j
14671insert the job ID
14672
14673@item %p
14674insert the printer name
14675
14676@item %u
14677insert the username
14678@end table
14679
14680A value of the empty string disables page logging. The string @code{%p %u
14681%j %T %P %C %@{job-billing@} %@{job-originating-host-name@} %@{job-name@}
14682%@{media@} %@{sides@}} creates a page log with the standard items.
14683
14684El valor predeterminado es @samp{""}.
14685@end deftypevr
14686
14687@deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables
14688Passes the specified environment variable(s) to child processes; a list of
14689strings.
14690
14691Defaults to @samp{()}.
14692@end deftypevr
14693
14694@deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies
14695Specifies named access control policies.
14696
14697Available @code{policy-configuration} fields are:
14698
14699@deftypevr {@code{policy-configuration} parameter} string name
14700Name of the policy.
14701@end deftypevr
14702
14703@deftypevr {@code{policy-configuration} parameter} string job-private-access
14704Specifies an access list for a job's private values. @code{@@ACL} maps to
14705the printer's requesting-user-name-allowed or requesting-user-name-denied
14706values. @code{@@OWNER} maps to the job's owner. @code{@@SYSTEM} maps to
14707the groups listed for the @code{system-group} field of the
14708@code{files-config} configuration, which is reified into the
14709@code{cups-files.conf(5)} file. Other possible elements of the access list
14710include specific user names, and @code{@@@var{group}} to indicate members of
14711a specific group. The access list may also be simply @code{all} or
14712@code{default}.
14713
14714Defaults to @samp{"@@OWNER @@SYSTEM"}.
14715@end deftypevr
14716
14717@deftypevr {@code{policy-configuration} parameter} string job-private-values
14718Specifies the list of job values to make private, or @code{all},
14719@code{default}, or @code{none}.
14720
14721Defaults to @samp{"job-name job-originating-host-name
14722job-originating-user-name phone"}.
14723@end deftypevr
14724
14725@deftypevr {@code{policy-configuration} parameter} string subscription-private-access
14726Specifies an access list for a subscription's private values. @code{@@ACL}
14727maps to the printer's requesting-user-name-allowed or
14728requesting-user-name-denied values. @code{@@OWNER} maps to the job's
14729owner. @code{@@SYSTEM} maps to the groups listed for the
14730@code{system-group} field of the @code{files-config} configuration, which is
14731reified into the @code{cups-files.conf(5)} file. Other possible elements of
14732the access list include specific user names, and @code{@@@var{group}} to
14733indicate members of a specific group. The access list may also be simply
14734@code{all} or @code{default}.
14735
14736Defaults to @samp{"@@OWNER @@SYSTEM"}.
14737@end deftypevr
14738
14739@deftypevr {@code{policy-configuration} parameter} string subscription-private-values
14740Specifies the list of job values to make private, or @code{all},
14741@code{default}, or @code{none}.
14742
14743Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri
14744notify-subscriber-user-name notify-user-data"}.
14745@end deftypevr
14746
14747@deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls
14748Access control by IPP operation.
14749
14750Defaults to @samp{()}.
14751@end deftypevr
14752@end deftypevr
14753
14754@deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files
14755Specifies whether job files (documents) are preserved after a job is
14756printed. If a numeric value is specified, job files are preserved for the
14757indicated number of seconds after printing. Otherwise a boolean value
14758applies indefinitely.
14759
14760Defaults to @samp{86400}.
14761@end deftypevr
14762
14763@deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history
14764Specifies whether the job history is preserved after a job is printed. If a
14765numeric value is specified, the job history is preserved for the indicated
14766number of seconds after printing. If @code{#t}, the job history is
14767preserved until the MaxJobs limit is reached.
14768
14769Defaults to @samp{#t}.
14770@end deftypevr
14771
14772@deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout
14773Specifies the amount of time to wait for job completion before restarting
14774the scheduler.
14775
14776El valor predeterminado es @samp{30}.
14777@end deftypevr
14778
14779@deftypevr {@code{cups-configuration} parameter} string rip-cache
14780Specifies the maximum amount of memory to use when converting documents into
14781bitmaps for a printer.
14782
14783Defaults to @samp{"128m"}.
14784@end deftypevr
14785
14786@deftypevr {@code{cups-configuration} parameter} string server-admin
14787Specifies the email address of the server administrator.
14788
14789Defaults to @samp{"root@@localhost.localdomain"}.
14790@end deftypevr
14791
14792@deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias
14793The ServerAlias directive is used for HTTP Host header validation when
14794clients connect to the scheduler from external interfaces. Using the
14795special name @code{*} can expose your system to known browser-based DNS
14796rebinding attacks, even when accessing sites through a firewall. If the
14797auto-discovery of alternate names does not work, we recommend listing each
14798alternate name with a ServerAlias directive instead of using @code{*}.
14799
14800Defaults to @samp{*}.
14801@end deftypevr
14802
14803@deftypevr {@code{cups-configuration} parameter} string server-name
14804Specifies the fully-qualified host name of the server.
14805
14806Defaults to @samp{"localhost"}.
14807@end deftypevr
14808
14809@deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens
14810Specifies what information is included in the Server header of HTTP
14811responses. @code{None} disables the Server header. @code{ProductOnly}
14812reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor}
14813reports @code{CUPS 2.0}. @code{Minimal} reports @code{CUPS 2.0.0}.
14814@code{OS} reports @code{CUPS 2.0.0 (@var{uname})} where @var{uname} is the
14815output of the @code{uname} command. @code{Full} reports @code{CUPS 2.0.0
14816(@var{uname}) IPP/2.0}.
14817
14818Defaults to @samp{Minimal}.
14819@end deftypevr
14820
14821@deftypevr {@code{cups-configuration} parameter} string set-env
14822Set the specified environment variable to be passed to child processes.
14823
14824Defaults to @samp{"variable value"}.
14825@end deftypevr
14826
14827@deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen
14828Listens on the specified interfaces for encrypted connections. Valid values
14829are of the form @var{address}:@var{port}, where @var{address} is either an
14830IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to indicate
14831all addresses.
14832
14833Defaults to @samp{()}.
14834@end deftypevr
14835
14836@deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options
14837Sets encryption options. By default, CUPS only supports encryption using
14838TLS v1.0 or higher using known secure cipher suites. The @code{AllowRC4}
14839option enables the 128-bit RC4 cipher suites, which are required for some
14840older clients that do not implement newer ones. The @code{AllowSSL3} option
14841enables SSL v3.0, which is required for some older clients that do not
14842support TLS v1.0.
14843
14844Defaults to @samp{()}.
14845@end deftypevr
14846
14847@deftypevr {@code{cups-configuration} parameter} boolean strict-conformance?
14848Specifies whether the scheduler requires clients to strictly adhere to the
14849IPP specifications.
14850
14851El valor predeterminado es @samp{#f}
14852@end deftypevr
14853
14854@deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout
14855Specifies the HTTP request timeout, in seconds.
14856
14857Defaults to @samp{300}.
14858
14859@end deftypevr
14860
14861@deftypevr {@code{cups-configuration} parameter} boolean web-interface?
14862Specifies whether the web interface is enabled.
14863
14864El valor predeterminado es @samp{#f}
14865@end deftypevr
14866
14867At this point you're probably thinking ``oh dear, Guix manual, I like you
14868but you can stop already with the configuration options''. Indeed.
14869However, one more point: it could be that you have an existing
14870@code{cupsd.conf} that you want to use. In that case, you can pass an
14871@code{opaque-cups-configuration} as the configuration of a
14872@code{cups-service-type}.
14873
14874Available @code{opaque-cups-configuration} fields are:
14875
14876@deftypevr {@code{opaque-cups-configuration} parameter} package cups
14877El paquete CUPS.
14878@end deftypevr
14879
14880@deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf
14881The contents of the @code{cupsd.conf}, as a string.
14882@end deftypevr
14883
14884@deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf
14885The contents of the @code{cups-files.conf} file, as a string.
14886@end deftypevr
14887
14888For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in
14889strings of the same name, you could instantiate a CUPS service like this:
14890
14891@example
14892(service cups-service-type
14893 (opaque-cups-configuration
14894 (cupsd.conf cupsd.conf)
14895 (cups-files.conf cups-files.conf)))
14896@end example
14897
14898
14899@node Servicios de escritorio
14900@subsection Servicios de escritorio
14901
14902The @code{(gnu services desktop)} module provides services that are usually
14903useful in the context of a ``desktop'' setup---that is, on a machine running
14904a graphical display server, possibly with graphical user interfaces, etc.
14905It also defines services that provide specific desktop environments like
14906GNOME, Xfce or MATE.
14907
14908To simplify things, the module defines a variable containing the set of
14909services that users typically expect on a machine with a graphical
14910environment and networking:
14911
14912@defvr {Variable Scheme} %desktop-services
14913This is a list of services that builds upon @var{%base-services} and adds or
14914adjusts services for a typical ``desktop'' setup.
14915
14916In particular, it adds a graphical login manager (@pxref{Sistema X Window,
14917@code{gdm-service-type}}), screen lockers, a network management tool
14918(@pxref{Servicios de red, @code{network-manager-service-type}}), energy
14919and color management services, the @code{elogind} login and seat manager,
14920the Polkit privilege service, the GeoClue location service, the
14921AccountsService daemon that allows authorized users change system passwords,
14922an NTP client (@pxref{Servicios de red}), the Avahi daemon, and has the
14923name service switch service configured to be able to use @code{nss-mdns}
14924(@pxref{Selector de servicios de nombres, mDNS}).
14925@end defvr
14926
14927The @var{%desktop-services} variable can be used as the @code{services}
14928field of an @code{operating-system} declaration (@pxref{Referencia de ``operating-system'', @code{services}}).
14929
14930Additionally, the @code{gnome-desktop-service-type},
14931@code{xfce-desktop-service}, @code{mate-desktop-service-type} and
14932@code{enlightenment-desktop-service-type} procedures can add GNOME, Xfce,
14933MATE and/or Enlightenment to a system. To ``add GNOME'' means that
14934system-level services like the backlight adjustment helpers and the power
14935management utilities are added to the system, extending @code{polkit} and
14936@code{dbus} appropriately, allowing GNOME to operate with elevated
14937privileges on a limited number of special-purpose system interfaces.
14938Additionally, adding a service made by @code{gnome-desktop-service-type}
14939adds the GNOME metapackage to the system profile. Likewise, adding the Xfce
14940service not only adds the @code{xfce} metapackage to the system profile, but
14941it also gives the Thunar file manager the ability to open a ``root-mode''
14942file management window, if the user authenticates using the administrator's
14943password via the standard polkit graphical interface. To ``add MATE'' means
14944that @code{polkit} and @code{dbus} are extended appropriately, allowing MATE
14945to operate with elevated privileges on a limited number of special-purpose
14946system interfaces. Additionally, adding a service of type
14947@code{mate-desktop-service-type} adds the MATE metapackage to the system
14948profile. ``Adding Enlightenment'' means that @code{dbus} is extended
14949appropriately, and several of Enlightenment's binaries are set as setuid,
14950allowing Enlightenment's screen locker and other functionality to work as
14951expetected.
14952
14953The desktop environments in Guix use the Xorg display server by default. If
14954you'd like to use the newer display server protocol called Wayland, you need
14955to use the @code{sddm-service} instead of GDM as the graphical login
14956manager. You should then select the ``GNOME (Wayland)'' session in SDDM.
14957Alternatively you can also try starting GNOME on Wayland manually from a TTY
14958with the command ``XDG_SESSION_TYPE=wayland exec dbus-run-session
14959gnome-session``. Currently only GNOME has support for Wayland.
14960
14961@defvr {Scheme Variable} gnome-desktop-service-type
14962This is the type of the service that adds the @uref{https://www.gnome.org,
14963GNOME} desktop environment. Its value is a
14964@code{gnome-desktop-configuration} object (see below.)
14965
14966This service adds the @code{gnome} package to the system profile, and
14967extends polkit with the actions from @code{gnome-settings-daemon}.
14968@end defvr
14969
14970@deftp {Data Type} gnome-desktop-configuration
14971Configuration record for the GNOME desktop environment.
14972
14973@table @asis
14974@item @code{gnome} (default @code{gnome})
14975The GNOME package to use.
14976@end table
14977@end deftp
14978
14979@defvr {Scheme Variable} xfce-desktop-service-type
14980This is the type of a service to run the @uref{Xfce, https://xfce.org/}
14981desktop environment. Its value is an @code{xfce-desktop-configuration}
14982object (see below.)
14983
14984This service that adds the @code{xfce} package to the system profile, and
14985extends polkit with the ability for @code{thunar} to manipulate the file
14986system as root from within a user session, after the user has authenticated
14987with the administrator's password.
14988@end defvr
14989
14990@deftp {Data Type} xfce-desktop-configuration
14991Configuration record for the Xfce desktop environment.
14992
14993@table @asis
14994@item @code{xfce} (default @code{xfce})
14995The Xfce package to use.
14996@end table
14997@end deftp
14998
14999@deffn {Scheme Variable} mate-desktop-service-type
15000This is the type of the service that runs the
15001@uref{https://mate-desktop.org/, MATE desktop environment}. Its value is a
15002@code{mate-desktop-configuration} object (see below.)
15003
15004This service adds the @code{mate} package to the system profile, and extends
15005polkit with the actions from @code{mate-settings-daemon}.
15006@end deffn
15007
15008@deftp {Data Type} mate-desktop-configuration
15009Configuration record for the MATE desktop environment.
15010
15011@table @asis
15012@item @code{mate} (default @code{mate})
15013The MATE package to use.
15014@end table
15015@end deftp
15016
15017@deffn {Scheme Variable} enlightenment-desktop-service-type
15018Return a service that adds the @code{enlightenment} package to the system
15019profile, and extends dbus with actions from @code{efl}.
15020@end deffn
15021
15022@deftp {Tipo de datos} enlightenment-desktop-service-configuration
15023@table @asis
15024@item @code{enlightenment} (predeterminado @code{enlightenment})
15025El paquete enlightenment usado.
15026@end table
15027@end deftp
15028
15029Because the GNOME, Xfce and MATE desktop services pull in so many packages,
15030the default @code{%desktop-services} variable doesn't include any of them by
15031default. To add GNOME, Xfce or MATE, just @code{cons} them onto
15032@code{%desktop-services} in the @code{services} field of your
15033@code{operating-system}:
15034
15035@example
15036(use-modules (gnu))
15037(use-service-modules desktop)
15038(operating-system
15039 ...
15040 ;; cons* adds items to the list given as its last argument.
15041 (services (cons* (service gnome-desktop-service-type)
15042 (service xfce-desktop-service)
15043 %desktop-services))
15044 ...)
15045@end example
15046
15047These desktop environments will then be available as options in the
15048graphical login window.
15049
15050The actual service definitions included in @code{%desktop-services} and
15051provided by @code{(gnu services dbus)} and @code{(gnu services desktop)} are
15052described below.
15053
15054@deffn {Procedimiento Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()]
15055Return a service that runs the ``system bus'', using @var{dbus}, with
15056support for @var{services}.
15057
15058@uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication
15059facility. Its system bus is used to allow system services to communicate
15060and to be notified of system-wide events.
15061
15062@var{services} must be a list of packages that provide an
15063@file{etc/dbus-1/system.d} directory containing additional D-Bus
15064configuration and policy files. For example, to allow avahi-daemon to use
15065the system bus, @var{services} must be equal to @code{(list avahi)}.
15066@end deffn
15067
15068@deffn {Procedimiento Scheme} elogind-service [#:config @var{config}]
15069Return a service that runs the @code{elogind} login and seat management
15070daemon. @uref{https://github.com/elogind/elogind, Elogind} exposes a D-Bus
15071interface that can be used to know which users are logged in, know what kind
15072of sessions they have open, suspend the system, inhibit system suspend,
15073reboot the system, and other tasks.
15074
15075Elogind handles most system-level power events for a computer, for example
15076suspending the system when a lid is closed, or shutting it down when the
15077power button is pressed.
15078
15079The @var{config} keyword argument specifies the configuration for elogind,
15080and should be the result of an @code{(elogind-configuration (@var{parameter}
15081@var{value})...)} invocation. Available parameters and their default values
15082are:
15083
15084@table @code
15085@item kill-user-processes?
15086@code{#f}
15087@item kill-only-users
15088@code{()}
15089@item kill-exclude-users
15090@code{("root")}
15091@item inhibit-delay-max-seconds
15092@code{5}
15093@item handle-power-key
15094@code{poweroff}
15095@item handle-suspend-key
15096@code{suspend}
15097@item handle-hibernate-key
15098@code{hibernate}
15099@item handle-lid-switch
15100@code{suspend}
15101@item handle-lid-switch-docked
15102@code{ignore}
15103@item power-key-ignore-inhibited?
15104@code{#f}
15105@item suspend-key-ignore-inhibited?
15106@code{#f}
15107@item hibernate-key-ignore-inhibited?
15108@code{#f}
15109@item lid-switch-ignore-inhibited?
15110@code{#t}
15111@item holdoff-timeout-seconds
15112@code{30}
15113@item idle-action
15114@code{ignore}
15115@item idle-action-seconds
15116@code{(* 30 60)}
15117@item runtime-directory-size-percent
15118@code{10}
15119@item runtime-directory-size
15120@code{#f}
15121@item remove-ipc?
15122@code{#t}
15123@item suspend-state
15124@code{("mem" "standby" "freeze")}
15125@item suspend-mode
15126@code{()}
15127@item hibernate-state
15128@code{("disk")}
15129@item hibernate-mode
15130@code{("platform" "shutdown")}
15131@item hybrid-sleep-state
15132@code{("disk")}
15133@item hybrid-sleep-mode
15134@code{("suspend" "platform" "shutdown")}
15135@end table
15136@end deffn
15137
15138@deffn {Procedimiento Scheme} accountsservice-service @
15139 [#:accountsservice @var{accountsservice}] Return a service that runs
15140AccountsService, a system service that can list available accounts, change
15141their passwords, and so on. AccountsService integrates with PolicyKit to
15142enable unprivileged users to acquire the capability to modify their system
15143configuration.
15144@uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the
15145accountsservice web site} for more information.
15146
15147The @var{accountsservice} keyword argument is the @code{accountsservice}
15148package to expose as a service.
15149@end deffn
15150
15151@deffn {Procedimiento Scheme} polkit-service @
15152 [#:polkit @var{polkit}] Return a service that runs the
15153@uref{http://www.freedesktop.org/wiki/Software/polkit/, Polkit privilege
15154management service}, which allows system administrators to grant access to
15155privileged operations in a structured way. By querying the Polkit service,
15156a privileged system component can know when it should grant additional
15157capabilities to ordinary users. For example, an ordinary user can be
15158granted the capability to suspend the system if the user is logged in
15159locally.
15160@end deffn
15161
15162@defvr {Scheme Variable} upower-service-type
15163Service that runs @uref{http://upower.freedesktop.org/, @command{upowerd}},
15164a system-wide monitor for power consumption and battery levels, with the
15165given configuration settings.
15166
15167It implements the @code{org.freedesktop.UPower} D-Bus interface, and is
15168notably used by GNOME.
15169@end defvr
15170
15171@deftp {Data Type} upower-configuration
15172Data type representation the configuration for UPower.
15173
15174@table @asis
15175
15176@item @code{upower} (default: @var{upower})
15177Package to use for @code{upower}.
15178
15179@item @code{watts-up-pro?} (default: @code{#f})
15180Enable the Watts Up Pro device.
15181
15182@item @code{poll-batteries?} (default: @code{#t})
15183Enable polling the kernel for battery level changes.
15184
15185@item @code{ignore-lid?} (default: @code{#f})
15186Ignore the lid state, this can be useful if it's incorrect on a device.
15187
15188@item @code{use-percentage-for-policy?} (default: @code{#f})
15189Whether battery percentage based policy should be used. The default is to
15190use the time left, change to @code{#t} to use the percentage.
15191
15192@item @code{percentage-low} (default: @code{10})
15193When @code{use-percentage-for-policy?} is @code{#t}, this sets the
15194percentage at which the battery is considered low.
15195
15196@item @code{percentage-critical} (default: @code{3})
15197When @code{use-percentage-for-policy?} is @code{#t}, this sets the
15198percentage at which the battery is considered critical.
15199
15200@item @code{percentage-action} (default: @code{2})
15201When @code{use-percentage-for-policy?} is @code{#t}, this sets the
15202percentage at which action will be taken.
15203
15204@item @code{time-low} (default: @code{1200})
15205When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining
15206in seconds at which the battery is considered low.
15207
15208@item @code{time-critical} (default: @code{300})
15209When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining
15210in seconds at which the battery is considered critical.
15211
15212@item @code{time-action} (default: @code{120})
15213When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining
15214in seconds at which action will be taken.
15215
15216@item @code{critical-power-action} (default: @code{'hybrid-sleep})
15217The action taken when @code{percentage-action} or @code{time-action} is
15218reached (depending on the configuration of
15219@code{use-percentage-for-policy?}).
15220
15221Possible values are:
15222
15223@itemize @bullet
15224@item
15225@code{'power-off}
15226
15227@item
15228@code{'hibernate}
15229
15230@item
15231@code{'hybrid-sleep}.
15232@end itemize
15233
15234@end table
15235@end deftp
15236
15237@deffn {Procedimiento Scheme} udisks-service [#:udisks @var{udisks}]
15238Return a service for @uref{http://udisks.freedesktop.org/docs/latest/,
15239UDisks}, a @dfn{disk management} daemon that provides user interfaces with
15240notifications and ways to mount/unmount disks. Programs that talk to UDisks
15241include the @command{udisksctl} command, part of UDisks, and GNOME Disks.
15242@end deffn
15243
15244@deffn {Procedimiento Scheme} colord-service [#:colord @var{colord}]
15245Return a service that runs @command{colord}, a system service with a D-Bus
15246interface to manage the color profiles of input and output devices such as
15247screens and scanners. It is notably used by the GNOME Color Manager
15248graphical tool. See @uref{http://www.freedesktop.org/software/colord/, the
15249colord web site} for more information.
15250@end deffn
15251
15252@deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()]
15253Return a configuration allowing an application to access GeoClue location
15254data. @var{name} is the Desktop ID of the application, without the
15255@code{.desktop} part. If @var{allowed?} is true, the application will have
15256access to location information by default. The boolean @var{system?} value
15257indicates whether an application is a system component or not. Finally
15258@var{users} is a list of UIDs of all users for which this application is
15259allowed location info access. An empty users list means that all users are
15260allowed.
15261@end deffn
15262
15263@defvr {Variable Scheme} %standard-geoclue-applications
15264The standard list of well-known GeoClue application configurations, granting
15265authority to the GNOME date-and-time utility to ask for the current location
15266in order to set the time zone, and allowing the IceCat and Epiphany web
15267browsers to request location information. IceCat and Epiphany both query
15268the user before allowing a web page to know the user's location.
15269@end defvr
15270
15271@deffn {Procedimiento Scheme} geoclue-service [#:colord @var{colord}] @
15272 [#:whitelist '()] @ [#:wifi-geolocation-url
15273"https://location.services.mozilla.com/v1/geolocate?key=geoclue"] @
15274[#:submit-data? #f] [#:wifi-submission-url
15275"https://location.services.mozilla.com/v1/submit?key=geoclue"] @
15276[#:submission-nick "geoclue"] @ [#:applications
15277%standard-geoclue-applications] Return a service that runs the GeoClue
15278location service. This service provides a D-Bus interface to allow
15279applications to request access to a user's physical location, and optionally
15280to add information to online location databases. See
15281@uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue web
15282site} for more information.
15283@end deffn
15284
15285@deffn {Procedimiento Scheme} bluetooth-service [#:bluez @var{bluez}] @
15286 [@w{#:auto-enable? #f}] Return a service that runs the @command{bluetoothd}
15287daemon, which manages all the Bluetooth devices and provides a number of
15288D-Bus interfaces. When AUTO-ENABLE? is true, the bluetooth controller is
15289powered automatically at boot, which can be useful when using a bluetooth
15290keyboard or mouse.
15291
15292Users need to be in the @code{lp} group to access the D-Bus service.
15293@end deffn
15294
15295@node Servicios de sonido
15296@subsection Servicios de sonido
15297
15298@cindex sound support
15299@cindex ALSA
15300@cindex PulseAudio, sound support
15301
15302The @code{(gnu services sound)} module provides a service to configure the
15303Advanced Linux Sound Architecture (ALSA) system, which makes PulseAudio the
15304preferred ALSA output driver.
15305
15306@deffn {Variable Scheme} alsa-service-type
15307This is the type for the @uref{https://alsa-project.org/, Advanced Linux
15308Sound Architecture} (ALSA) system, which generates the
15309@file{/etc/asound.conf} configuration file. The value for this type is a
15310@command{alsa-configuration} record as in this example:
15311
15312@example
15313(service alsa-service-type)
15314@end example
15315
15316See below for details about @code{alsa-configuration}.
15317@end deffn
15318
15319@deftp {Tipo de datos} alsa-configuration
15320Data type representing the configuration for @code{alsa-service}.
15321
15322@table @asis
15323@item @code{alsa-plugins} (predeterminados: @var{alsa-plugins})
15324El paquete @code{alsa-plugins} usado.
15325
15326@item @code{pulseaudio?} (predeterminado: @var{#t})
15327Whether ALSA applications should transparently be made to use the
15328@uref{http://www.pulseaudio.org/, PulseAudio} sound server.
15329
15330Using PulseAudio allows you to run several sound-producing applications at
15331the same time and to individual control them @i{via} @command{pavucontrol},
15332among other things.
15333
15334@item @code{extra-options} (predeterminado: @var{""})
15335String to append to the @file{/etc/asound.conf} file.
15336
15337@end table
15338@end deftp
15339
15340Individual users who want to override the system configuration of ALSA can
15341do it with the @file{~/.asoundrc} file:
15342
15343@example
15344# In guix, we have to specify the absolute path for plugins.
15345pcm_type.jack @{
15346 lib "/home/alice/.guix-profile/lib/alsa-lib/libasound_module_pcm_jack.so"
15347@}
15348
15349# Routing ALSA to jack:
15350# <http://jackaudio.org/faq/routing_alsa.html>.
15351pcm.rawjack @{
15352 type jack
15353 playback_ports @{
15354 0 system:playback_1
15355 1 system:playback_2
15356 @}
15357
15358 capture_ports @{
15359 0 system:capture_1
15360 1 system:capture_2
15361 @}
15362@}
15363
15364pcm.!default @{
15365 type plug
15366 slave @{
15367 pcm "rawjack"
15368 @}
15369@}
15370@end example
15371
15372See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the
15373details.
15374
15375
15376@node Servicios de bases de datos
15377@subsection Servicios de bases de datos
15378
15379@cindex base de datos
15380@cindex SQL
15381El módulo @code{(gnu services databases)} proporciona los siguientes
15382servicios.
15383
15384@deffn {Procedimiento Scheme} postgresql-service [#:postgresql postgresql] @
15385 [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @ [#:port
153865432] [#:locale ``en_US.utf8''] [#:extension-packages '()] Return a service
15387that runs @var{postgresql}, the PostgreSQL database server.
15388
15389The PostgreSQL daemon loads its runtime configuration from
15390@var{config-file}, creates a database cluster with @var{locale} as the
15391default locale, stored in @var{data-directory}. It then listens on
15392@var{port}.
15393
15394@cindex postgresql extension-packages
15395Additional extensions are loaded from packages listed in
15396@var{extension-packages}. Extensions are available at runtime. For
15397instance, to create a geographic database using the @code{postgis}
15398extension, a user can configure the postgresql-service as in this example:
15399
15400@cindex postgis
15401@example
15402(use-package-modules databases geo)
15403
15404(operating-system
15405 ...
15406 ;; postgresql is required to run `psql' but postgis is not required for
15407 ;; proper operation.
15408 (packages (cons* postgresql %base-packages))
15409 (services
15410 (cons*
15411 (postgresql-service #:extension-packages (list postgis))
15412 %base-services)))
15413@end example
15414
15415Then the extension becomes visible and you can initialise an empty
15416geographic database in this way:
15417
15418@example
15419psql -U postgres
15420> create database postgistest;
15421> \connect postgistest;
15422> create extension postgis;
15423> create extension postgis_topology;
15424@end example
15425
15426There is no need to add this field for contrib extensions such as hstore or
15427dblink as they are already loadable by postgresql. This field is only
15428required to add extensions provided by other packages.
15429@end deffn
15430
15431@deffn {Procedimiento Scheme} mysql-service [#:config (mysql-configuration)]
15432Return a service that runs @command{mysqld}, the MySQL or MariaDB database
15433server.
15434
15435El parámetro opcional @var{config} especifica la configuración para
15436@command{mysqld}, que debe ser un objeto @code{<mysql-configuration>}.
15437@end deffn
15438
15439@deftp {Tipo de datos} mysql-configuration
15440Data type representing the configuration of @var{mysql-service}.
15441
15442@table @asis
15443@item @code{mysql} (predeterminado: @var{mariadb})
15444Package object of the MySQL database server, can be either @var{mariadb} or
15445@var{mysql}.
15446
15447For MySQL, a temporary root password will be displayed at activation time.
15448For MariaDB, the root password is empty.
15449
15450@item @code{port} (predeterminado: @code{3306})
15451TCP port on which the database server listens for incoming connections.
15452@end table
15453@end deftp
15454
15455@defvr {Variable Scheme} memcached-service-type
15456This is the service type for the @uref{https://memcached.org/, Memcached}
15457service, which provides a distributed in memory cache. The value for the
15458service type is a @code{memcached-configuration} object.
15459@end defvr
15460
15461@example
15462(service memcached-service-type)
15463@end example
15464
15465@deftp {Tipo de datos} memcached-configuration
15466Data type representing the configuration of memcached.
15467
15468@table @asis
15469@item @code{memcached} (predeterminado: @code{memcached})
15470El paquete de Memcached usado.
15471
15472@item @code{interfaces} (predeterminadas: @code{'("0.0.0.0")})
15473Network interfaces on which to listen.
15474
15475@item @code{tcp-port} (predeterminado: @code{11211})
15476Port on which to accept connections on,
15477
15478@item @code{udp-port} (predeterminado: @code{11211})
15479Port on which to accept UDP connections on, a value of 0 will disable
15480listening on a UDP socket.
15481
15482@item @code{additional-options} (predeterminadas: @code{'()})
15483Additional command line options to pass to @code{memcached}.
15484@end table
15485@end deftp
15486
15487@defvr {Variable Scheme} mongodb-service-type
15488This is the service type for @uref{https://www.mongodb.com/, MongoDB}. The
15489value for the service type is a @code{mongodb-configuration} object.
15490@end defvr
15491
15492@example
15493(service mongodb-service-type)
15494@end example
15495
15496@deftp {Tipo de datos} mongodb-configuration
15497Tipo de datos que representa la configuración de GPM.
15498
15499@table @asis
15500@item @code{mongodb} (predeterminado: @code{mongodb})
15501El paquete MongoDB usado.
15502
15503@item @code{config-file} (predeterminado: @code{%default-mongodb-configuration-file})
15504The configuration file for MongoDB.
15505
15506@item @code{data-directory} (predeterminado: @code{"/var/lib/mongodb"})
15507This value is used to create the directory, so that it exists and is owned
15508by the mongodb user. It should match the data-directory which MongoDB is
15509configured to use through the configuration file.
15510@end table
15511@end deftp
15512
15513@defvr {Variable Scheme} redis-service-type
15514This is the service type for the @uref{https://redis.io/, Redis} key/value
15515store, whose value is a @code{redis-configuration} object.
15516@end defvr
15517
15518@deftp {Tipo de datos} redis-configuration
15519Data type representing the configuration of redis.
15520
15521@table @asis
15522@item @code{redis} (predeterminado: @code{redis})
15523The Redis package to use.
15524
15525@item @code{bind} (predeterminada: @code{"127.0.0.1"})
15526La interfaz de red en la que se escucha.
15527
15528@item @code{port} (predeterminado: @code{6379})
15529Port on which to accept connections on, a value of 0 will disable listening
15530on a TCP socket.
15531
15532@item @code{working-directory} (predeterminado: @code{"/var/lib/redis"})
15533Directory in which to store the database and related files.
15534@end table
15535@end deftp
15536
15537@node Servicios de correo
15538@subsection Servicios de correo
15539
15540@cindex mail
15541@cindex email
15542The @code{(gnu services mail)} module provides Guix service definitions for
15543email services: IMAP, POP3, and LMTP servers, as well as mail transport
15544agents (MTAs). Lots of acronyms! These services are detailed in the
15545subsections below.
15546
15547@subsubheading Servicio Dovecot
15548
15549@deffn {Procedimiento Scheme} dovecot-service [#:config (dovecot-configuration)]
15550Return a service that runs the Dovecot IMAP/POP3/LMTP mail server.
15551@end deffn
15552
15553By default, Dovecot does not need much configuration; the default
15554configuration object created by @code{(dovecot-configuration)} will suffice
15555if your mail is delivered to @code{~/Maildir}. A self-signed certificate
15556will be generated for TLS-protected connections, though Dovecot will also
15557listen on cleartext ports by default. There are a number of options,
15558though, which mail administrators might need to change, and as is the case
15559with other services, Guix allows the system administrator to specify these
15560parameters via a uniform Scheme interface.
15561
15562Por ejemplo, para especificar que el correo se encuentra en
15563@code{maildir:~/.correo}, se debe instanciar el servicio de Dovecot de esta
15564manera:
15565
15566@example
15567(dovecot-service #:config
15568 (dovecot-configuration
15569 (mail-location "maildir:~/.correo")))
15570@end example
15571
15572The available configuration parameters follow. Each parameter definition is
15573preceded by its type; for example, @samp{string-list foo} indicates that the
15574@code{foo} parameter should be specified as a list of strings. There is
15575also a way to specify the configuration as a string, if you have an old
15576@code{dovecot.conf} file that you want to port over from some other system;
15577see the end for more details.
15578
15579@c The following documentation was initially generated by
15580@c (generate-documentation) in (gnu services mail). Manually maintained
15581@c documentation is better, so we shouldn't hesitate to edit below as
15582@c needed. However if the change you want to make to this documentation
15583@c can be done in an automated way, it's probably easier to change
15584@c (generate-documentation) than to make it below and have to deal with
15585@c the churn as dovecot updates.
15586
15587Available @code{dovecot-configuration} fields are:
15588
15589@deftypevr {@code{dovecot-configuration} parameter} package dovecot
15590El paquete dovecot.
15591@end deftypevr
15592
15593@deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen
15594A list of IPs or hosts where to listen for connections. @samp{*} listens on
15595all IPv4 interfaces, @samp{::} listens on all IPv6 interfaces. If you want
15596to specify non-default ports or anything more complex, customize the address
15597and port fields of the @samp{inet-listener} of the specific services you are
15598interested in.
15599@end deftypevr
15600
15601@deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols
15602List of protocols we want to serve. Available protocols include
15603@samp{imap}, @samp{pop3}, and @samp{lmtp}.
15604
15605Available @code{protocol-configuration} fields are:
15606
15607@deftypevr {@code{protocol-configuration} parameter} string name
15608El nombre del protocolo.
15609@end deftypevr
15610
15611@deftypevr {@code{protocol-configuration} parameter} string auth-socket-path
15612UNIX socket path to the master authentication server to find users. This is
15613used by imap (for shared users) and lda. It defaults to
15614@samp{"/var/run/dovecot/auth-userdb"}.
15615@end deftypevr
15616
15617@deftypevr {@code{protocol-configuration} parameter} space-separated-string-list mail-plugins
15618Space separated list of plugins to load.
15619@end deftypevr
15620
15621@deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections
15622Maximum number of IMAP connections allowed for a user from each IP address.
15623NOTE: The username is compared case-sensitively. Defaults to @samp{10}.
15624@end deftypevr
15625
15626@end deftypevr
15627
15628@deftypevr {@code{dovecot-configuration} parameter} service-configuration-list services
15629List of services to enable. Available services include @samp{imap},
15630@samp{imap-login}, @samp{pop3}, @samp{pop3-login}, @samp{auth}, and
15631@samp{lmtp}.
15632
15633Available @code{service-configuration} fields are:
15634
15635@deftypevr {@code{service-configuration} parameter} string kind
15636The service kind. Valid values include @code{director}, @code{imap-login},
15637@code{pop3-login}, @code{lmtp}, @code{imap}, @code{pop3}, @code{auth},
15638@code{auth-worker}, @code{dict}, @code{tcpwrap}, @code{quota-warning}, or
15639anything else.
15640@end deftypevr
15641
15642@deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners
15643Listeners for the service. A listener is either a
15644@code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or
15645an @code{inet-listener-configuration}. Defaults to @samp{()}.
15646
15647Available @code{unix-listener-configuration} fields are:
15648
15649@deftypevr {@code{unix-listener-configuration} parameter} string path
15650Path to the file, relative to @code{base-dir} field. This is also used as
15651the section name.
15652@end deftypevr
15653
15654@deftypevr {@code{unix-listener-configuration} parameter} string mode
15655The access mode for the socket. Defaults to @samp{"0600"}.
15656@end deftypevr
15657
15658@deftypevr {@code{unix-listener-configuration} parameter} string user
15659The user to own the socket. Defaults to @samp{""}.
15660@end deftypevr
15661
15662@deftypevr {@code{unix-listener-configuration} parameter} string group
15663The group to own the socket. Defaults to @samp{""}.
15664@end deftypevr
15665
15666
15667Available @code{fifo-listener-configuration} fields are:
15668
15669@deftypevr {@code{fifo-listener-configuration} parameter} string path
15670Path to the file, relative to @code{base-dir} field. This is also used as
15671the section name.
15672@end deftypevr
15673
15674@deftypevr {@code{fifo-listener-configuration} parameter} string mode
15675The access mode for the socket. Defaults to @samp{"0600"}.
15676@end deftypevr
15677
15678@deftypevr {@code{fifo-listener-configuration} parameter} string user
15679The user to own the socket. Defaults to @samp{""}.
15680@end deftypevr
15681
15682@deftypevr {@code{fifo-listener-configuration} parameter} string group
15683The group to own the socket. Defaults to @samp{""}.
15684@end deftypevr
15685
15686
15687Available @code{inet-listener-configuration} fields are:
15688
15689@deftypevr {@code{inet-listener-configuration} parameter} string protocol
15690The protocol to listen for.
15691@end deftypevr
15692
15693@deftypevr {@code{inet-listener-configuration} parameter} string address
15694The address on which to listen, or empty for all addresses. Defaults to
15695@samp{""}.
15696@end deftypevr
15697
15698@deftypevr {@code{inet-listener-configuration} parameter} non-negative-integer port
15699The port on which to listen.
15700@end deftypevr
15701
15702@deftypevr {@code{inet-listener-configuration} parameter} boolean ssl?
15703Whether to use SSL for this service; @samp{yes}, @samp{no}, or
15704@samp{required}. Defaults to @samp{#t}.
15705@end deftypevr
15706
15707@end deftypevr
15708
15709@deftypevr {@code{service-configuration} parameter} non-negative-integer client-limit
15710Maximum number of simultaneous client connections per process. Once this
15711number of connections is received, the next incoming connection will prompt
15712Dovecot to spawn another process. If set to 0, @code{default-client-limit}
15713is used instead.
15714
15715El valor predeterminado es @samp{0}.
15716
15717@end deftypevr
15718
15719@deftypevr {@code{service-configuration} parameter} non-negative-integer service-count
15720Number of connections to handle before starting a new process. Typically
15721the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0 is
15722faster. <doc/wiki/LoginProcess.txt>. Defaults to @samp{1}.
15723
15724@end deftypevr
15725
15726@deftypevr {@code{service-configuration} parameter} non-negative-integer process-limit
15727Maximum number of processes that can exist for this service. If set to 0,
15728@code{default-process-limit} is used instead.
15729
15730El valor predeterminado es @samp{0}.
15731
15732@end deftypevr
15733
15734@deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail
15735Number of processes to always keep waiting for more connections. Defaults
15736to @samp{0}.
15737@end deftypevr
15738
15739@deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit
15740If you set @samp{service-count 0}, you probably need to grow this. Defaults
15741to @samp{256000000}.
15742@end deftypevr
15743
15744@end deftypevr
15745
15746@deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict
15747Dict configuration, as created by the @code{dict-configuration} constructor.
15748
15749Available @code{dict-configuration} fields are:
15750
15751@deftypevr {@code{dict-configuration} parameter} free-form-fields entries
15752A list of key-value pairs that this dict should hold. Defaults to
15753@samp{()}.
15754@end deftypevr
15755
15756@end deftypevr
15757
15758@deftypevr {@code{dovecot-configuration} parameter} passdb-configuration-list passdbs
15759A list of passdb configurations, each one created by the
15760@code{passdb-configuration} constructor.
15761
15762Available @code{passdb-configuration} fields are:
15763
15764@deftypevr {@code{passdb-configuration} parameter} string driver
15765The driver that the passdb should use. Valid values include @samp{pam},
15766@samp{passwd}, @samp{shadow}, @samp{bsdauth}, and @samp{static}. Defaults
15767to @samp{"pam"}.
15768@end deftypevr
15769
15770@deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args
15771Space separated list of arguments to the passdb driver. Defaults to
15772@samp{""}.
15773@end deftypevr
15774
15775@end deftypevr
15776
15777@deftypevr {@code{dovecot-configuration} parameter} userdb-configuration-list userdbs
15778List of userdb configurations, each one created by the
15779@code{userdb-configuration} constructor.
15780
15781Available @code{userdb-configuration} fields are:
15782
15783@deftypevr {@code{userdb-configuration} parameter} string driver
15784The driver that the userdb should use. Valid values include @samp{passwd}
15785and @samp{static}. Defaults to @samp{"passwd"}.
15786@end deftypevr
15787
15788@deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args
15789Space separated list of arguments to the userdb driver. Defaults to
15790@samp{""}.
15791@end deftypevr
15792
15793@deftypevr {@code{userdb-configuration} parameter} free-form-args override-fields
15794Override fields from passwd. Defaults to @samp{()}.
15795@end deftypevr
15796
15797@end deftypevr
15798
15799@deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration
15800Plug-in configuration, created by the @code{plugin-configuration}
15801constructor.
15802@end deftypevr
15803
15804@deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces
15805List of namespaces. Each item in the list is created by the
15806@code{namespace-configuration} constructor.
15807
15808Available @code{namespace-configuration} fields are:
15809
15810@deftypevr {@code{namespace-configuration} parameter} string name
15811Name for this namespace.
15812@end deftypevr
15813
15814@deftypevr {@code{namespace-configuration} parameter} string type
15815Namespace type: @samp{private}, @samp{shared} or @samp{public}. Defaults to
15816@samp{"private"}.
15817@end deftypevr
15818
15819@deftypevr {@code{namespace-configuration} parameter} string separator
15820Hierarchy separator to use. You should use the same separator for all
15821namespaces or some clients get confused. @samp{/} is usually a good one.
15822The default however depends on the underlying mail storage format. Defaults
15823to @samp{""}.
15824@end deftypevr
15825
15826@deftypevr {@code{namespace-configuration} parameter} string prefix
15827Prefix required to access this namespace. This needs to be different for
15828all namespaces. For example @samp{Public/}. Defaults to @samp{""}.
15829@end deftypevr
15830
15831@deftypevr {@code{namespace-configuration} parameter} string location
15832Physical location of the mailbox. This is in the same format as
15833mail_location, which is also the default for it. Defaults to @samp{""}.
15834@end deftypevr
15835
15836@deftypevr {@code{namespace-configuration} parameter} boolean inbox?
15837There can be only one INBOX, and this setting defines which namespace has
15838it. Defaults to @samp{#f}.
15839@end deftypevr
15840
15841@deftypevr {@code{namespace-configuration} parameter} boolean hidden?
15842If namespace is hidden, it's not advertised to clients via NAMESPACE
15843extension. You'll most likely also want to set @samp{list? #f}. This is
15844mostly useful when converting from another server with different namespaces
15845which you want to deprecate but still keep working. For example you can
15846create hidden namespaces with prefixes @samp{~/mail/}, @samp{~%u/mail/} and
15847@samp{mail/}. Defaults to @samp{#f}.
15848@end deftypevr
15849
15850@deftypevr {@code{namespace-configuration} parameter} boolean list?
15851Show the mailboxes under this namespace with the LIST command. This makes
15852the namespace visible for clients that do not support the NAMESPACE
15853extension. The special @code{children} value lists child mailboxes, but
15854hides the namespace prefix. Defaults to @samp{#t}.
15855@end deftypevr
15856
15857@deftypevr {@code{namespace-configuration} parameter} boolean subscriptions?
15858Namespace handles its own subscriptions. If set to @code{#f}, the parent
15859namespace handles them. The empty prefix should always have this as
15860@code{#t}). Defaults to @samp{#t}.
15861@end deftypevr
15862
15863@deftypevr {@code{namespace-configuration} parameter} mailbox-configuration-list mailboxes
15864List of predefined mailboxes in this namespace. Defaults to @samp{()}.
15865
15866Available @code{mailbox-configuration} fields are:
15867
15868@deftypevr {@code{mailbox-configuration} parameter} string name
15869Name for this mailbox.
15870@end deftypevr
15871
15872@deftypevr {@code{mailbox-configuration} parameter} string auto
15873@samp{create} will automatically create this mailbox. @samp{subscribe} will
15874both create and subscribe to the mailbox. Defaults to @samp{"no"}.
15875@end deftypevr
15876
15877@deftypevr {@code{mailbox-configuration} parameter} space-separated-string-list special-use
15878List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154. Valid
15879values are @code{\All}, @code{\Archive}, @code{\Drafts}, @code{\Flagged},
15880@code{\Junk}, @code{\Sent}, and @code{\Trash}. Defaults to @samp{()}.
15881@end deftypevr
15882
15883@end deftypevr
15884
15885@end deftypevr
15886
15887@deftypevr {@code{dovecot-configuration} parameter} file-name base-dir
15888Base directory where to store runtime data. Defaults to
15889@samp{"/var/run/dovecot/"}.
15890@end deftypevr
15891
15892@deftypevr {@code{dovecot-configuration} parameter} string login-greeting
15893Greeting message for clients. Defaults to @samp{"Dovecot ready."}.
15894@end deftypevr
15895
15896@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-trusted-networks
15897List of trusted network ranges. Connections from these IPs are allowed to
15898override their IP addresses and ports (for logging and for authentication
15899checks). @samp{disable-plaintext-auth} is also ignored for these networks.
15900Typically you would specify your IMAP proxy servers here. Defaults to
15901@samp{()}.
15902@end deftypevr
15903
15904@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-access-sockets
15905List of login access check sockets (e.g.@: tcpwrap). Defaults to @samp{()}.
15906@end deftypevr
15907
15908@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle?
15909Show more verbose process titles (in ps). Currently shows user name and IP
15910address. Useful for seeing who is actually using the IMAP processes (e.g.@:
15911shared mailboxes or if the same uid is used for multiple accounts).
15912Defaults to @samp{#f}.
15913@end deftypevr
15914
15915@deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients?
15916Should all processes be killed when Dovecot master process shuts down.
15917Setting this to @code{#f} means that Dovecot can be upgraded without forcing
15918existing client connections to close (although that could also be a problem
15919if the upgrade is e.g.@: due to a security fix). Defaults to @samp{#t}.
15920@end deftypevr
15921
15922@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer doveadm-worker-count
15923If non-zero, run mail commands via this many connections to doveadm server,
15924instead of running them directly in the same process. Defaults to @samp{0}.
15925@end deftypevr
15926
15927@deftypevr {@code{dovecot-configuration} parameter} string doveadm-socket-path
15928UNIX socket or host:port used for connecting to doveadm server. Defaults to
15929@samp{"doveadm-server"}.
15930@end deftypevr
15931
15932@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list import-environment
15933List of environment variables that are preserved on Dovecot startup and
15934passed down to all of its child processes. You can also give key=value
15935pairs to always set specific settings.
15936@end deftypevr
15937
15938@deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth?
15939Disable LOGIN command and all other plaintext authentications unless SSL/TLS
15940is used (LOGINDISABLED capability). Note that if the remote IP matches the
15941local IP (i.e.@: you're connecting from the same computer), the connection
15942is considered secure and plaintext authentication is allowed. See also
15943ssl=required setting. Defaults to @samp{#t}.
15944@end deftypevr
15945
15946@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size
15947Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled.
15948Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set for
15949caching to be used. Defaults to @samp{0}.
15950@end deftypevr
15951
15952@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl
15953Time to live for cached data. After TTL expires the cached record is no
15954longer used, *except* if the main database lookup returns internal failure.
15955We also try to handle password changes automatically: If user's previous
15956authentication was successful, but this one wasn't, the cache isn't used.
15957For now this works only with plaintext authentication. Defaults to @samp{"1
15958hour"}.
15959@end deftypevr
15960
15961@deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl
15962TTL for negative hits (user not found, password mismatch). 0 disables
15963caching them completely. Defaults to @samp{"1 hour"}.
15964@end deftypevr
15965
15966@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms
15967List of realms for SASL authentication mechanisms that need them. You can
15968leave it empty if you don't want to support multiple realms. Many clients
15969simply use the first one listed here, so keep the default realm first.
15970Defaults to @samp{()}.
15971@end deftypevr
15972
15973@deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm
15974Default realm/domain to use if none was specified. This is used for both
15975SASL realms and appending @@domain to username in plaintext logins.
15976Defaults to @samp{""}.
15977@end deftypevr
15978
15979@deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars
15980List of allowed characters in username. If the user-given username contains
15981a character not listed in here, the login automatically fails. This is just
15982an extra check to make sure user can't exploit any potential quote escaping
15983vulnerabilities with SQL/LDAP databases. If you want to allow all
15984characters, set this value to empty. Defaults to
15985@samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}.
15986@end deftypevr
15987
15988@deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation
15989Username character translations before it's looked up from databases. The
15990value contains series of from -> to characters. For example @samp{#@@/@@}
15991means that @samp{#} and @samp{/} characters are translated to @samp{@@}.
15992Defaults to @samp{""}.
15993@end deftypevr
15994
15995@deftypevr {@code{dovecot-configuration} parameter} string auth-username-format
15996Username formatting before it's looked up from databases. You can use the
15997standard variables here, e.g.@: %Lu would lowercase the username, %n would
15998drop away the domain if it was given, or @samp{%n-AT-%d} would change the
15999@samp{@@} into @samp{-AT-}. This translation is done after
16000@samp{auth-username-translation} changes. Defaults to @samp{"%Lu"}.
16001@end deftypevr
16002
16003@deftypevr {@code{dovecot-configuration} parameter} string auth-master-user-separator
16004If you want to allow master users to log in by specifying the master
16005username within the normal username string (i.e.@: not using SASL
16006mechanism's support for it), you can specify the separator character here.
16007The format is then <username><separator><master username>. UW-IMAP uses
16008@samp{*} as the separator, so that could be a good choice. Defaults to
16009@samp{""}.
16010@end deftypevr
16011
16012@deftypevr {@code{dovecot-configuration} parameter} string auth-anonymous-username
16013Username to use for users logging in with ANONYMOUS SASL mechanism.
16014Defaults to @samp{"anonymous"}.
16015@end deftypevr
16016
16017@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count
16018Maximum number of dovecot-auth worker processes. They're used to execute
16019blocking passdb and userdb queries (e.g.@: MySQL and PAM). They're
16020automatically created and destroyed as needed. Defaults to @samp{30}.
16021@end deftypevr
16022
16023@deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname
16024Host name to use in GSSAPI principal names. The default is to use the name
16025returned by gethostname(). Use @samp{$ALL} (with quotes) to allow all
16026keytab entries. Defaults to @samp{""}.
16027@end deftypevr
16028
16029@deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab
16030Kerberos keytab to use for the GSSAPI mechanism. Will use the system
16031default (usually @file{/etc/krb5.keytab}) if not specified. You may need to
16032change the auth service to run as root to be able to read this file.
16033Defaults to @samp{""}.
16034@end deftypevr
16035
16036@deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind?
16037Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon and
16038@samp{ntlm-auth} helper. <doc/wiki/Authentication/Mechanisms/Winbind.txt>.
16039Defaults to @samp{#f}.
16040@end deftypevr
16041
16042@deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path
16043Path for Samba's @samp{ntlm-auth} helper binary. Defaults to
16044@samp{"/usr/bin/ntlm_auth"}.
16045@end deftypevr
16046
16047@deftypevr {@code{dovecot-configuration} parameter} string auth-failure-delay
16048Time to delay before replying to failed authentications. Defaults to
16049@samp{"2 secs"}.
16050@end deftypevr
16051
16052@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-require-client-cert?
16053Require a valid SSL client certificate or the authentication fails.
16054Defaults to @samp{#f}.
16055@end deftypevr
16056
16057@deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert?
16058Take the username from client's SSL certificate, using
16059@code{X509_NAME_get_text_by_NID()} which returns the subject's DN's
16060CommonName. Defaults to @samp{#f}.
16061@end deftypevr
16062
16063@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms
16064List of wanted authentication mechanisms. Supported mechanisms are:
16065@samp{plain}, @samp{login}, @samp{digest-md5}, @samp{cram-md5}, @samp{ntlm},
16066@samp{rpa}, @samp{apop}, @samp{anonymous}, @samp{gssapi}, @samp{otp},
16067@samp{skey}, and @samp{gss-spnego}. NOTE: See also
16068@samp{disable-plaintext-auth} setting.
16069@end deftypevr
16070
16071@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-servers
16072List of IPs or hostnames to all director servers, including ourself. Ports
16073can be specified as ip:port. The default port is the same as what director
16074service's @samp{inet-listener} is using. Defaults to @samp{()}.
16075@end deftypevr
16076
16077@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list director-mail-servers
16078List of IPs or hostnames to all backend mail servers. Ranges are allowed
16079too, like 10.0.0.10-10.0.0.30. Defaults to @samp{()}.
16080@end deftypevr
16081
16082@deftypevr {@code{dovecot-configuration} parameter} string director-user-expire
16083How long to redirect users to a specific server after it no longer has any
16084connections. Defaults to @samp{"15 min"}.
16085@end deftypevr
16086
16087@deftypevr {@code{dovecot-configuration} parameter} string director-username-hash
16088How the username is translated before being hashed. Useful values include
16089%Ln if user can log in with or without @@domain, %Ld if mailboxes are shared
16090within domain. Defaults to @samp{"%Lu"}.
16091@end deftypevr
16092
16093@deftypevr {@code{dovecot-configuration} parameter} string log-path
16094Log file to use for error messages. @samp{syslog} logs to syslog,
16095@samp{/dev/stderr} logs to stderr. Defaults to @samp{"syslog"}.
16096@end deftypevr
16097
16098@deftypevr {@code{dovecot-configuration} parameter} string info-log-path
16099Log file to use for informational messages. Defaults to @samp{log-path}.
16100Defaults to @samp{""}.
16101@end deftypevr
16102
16103@deftypevr {@code{dovecot-configuration} parameter} string debug-log-path
16104Log file to use for debug messages. Defaults to @samp{info-log-path}.
16105Defaults to @samp{""}.
16106@end deftypevr
16107
16108@deftypevr {@code{dovecot-configuration} parameter} string syslog-facility
16109Syslog facility to use if you're logging to syslog. Usually if you don't
16110want to use @samp{mail}, you'll use local0..local7. Also other standard
16111facilities are supported. Defaults to @samp{"mail"}.
16112@end deftypevr
16113
16114@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose?
16115Log unsuccessful authentication attempts and the reasons why they failed.
16116Defaults to @samp{#f}.
16117@end deftypevr
16118
16119@deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords?
16120In case of password mismatches, log the attempted password. Valid values
16121are no, plain and sha1. sha1 can be useful for detecting brute force
16122password attempts vs. user simply trying the same password over and over
16123again. You can also truncate the value to n chars by appending ":n" (e.g.@:
16124sha1:6). Defaults to @samp{#f}.
16125@end deftypevr
16126
16127@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug?
16128Even more verbose logging for debugging purposes. Shows for example SQL
16129queries. Defaults to @samp{#f}.
16130@end deftypevr
16131
16132@deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords?
16133In case of password mismatches, log the passwords and used scheme so the
16134problem can be debugged. Enabling this also enables @samp{auth-debug}.
16135Defaults to @samp{#f}.
16136@end deftypevr
16137
16138@deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug?
16139Enable mail process debugging. This can help you figure out why Dovecot
16140isn't finding your mails. Defaults to @samp{#f}.
16141@end deftypevr
16142
16143@deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl?
16144Show protocol level SSL errors. Defaults to @samp{#f}.
16145@end deftypevr
16146
16147@deftypevr {@code{dovecot-configuration} parameter} string log-timestamp
16148Prefix for each line written to log file. % codes are in strftime(3)
16149format. Defaults to @samp{"\"%b %d %H:%M:%S \""}.
16150@end deftypevr
16151
16152@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list login-log-format-elements
16153List of elements we want to log. The elements which have a non-empty
16154variable value are joined together to form a comma-separated string.
16155@end deftypevr
16156
16157@deftypevr {@code{dovecot-configuration} parameter} string login-log-format
16158Login log format. %s contains @samp{login-log-format-elements} string, %$
16159contains the data we want to log. Defaults to @samp{"%$: %s"}.
16160@end deftypevr
16161
16162@deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix
16163Log prefix for mail processes. See doc/wiki/Variables.txt for list of
16164possible variables you can use. Defaults to
16165@samp{"\"%s(%u)<%@{pid@}><%@{session@}>: \""}.
16166@end deftypevr
16167
16168@deftypevr {@code{dovecot-configuration} parameter} string deliver-log-format
16169Format to use for logging mail deliveries. You can use variables:
16170@table @code
16171@item %$
16172Delivery status message (e.g.@: @samp{saved to INBOX})
16173@item %m
16174Message-ID
16175@item %s
16176Subject
16177@item %f
16178From address
16179@item %p
16180Tamaño físico
16181@item %w
16182Tamaño virtual.
16183@end table
16184Defaults to @samp{"msgid=%m: %$"}.
16185@end deftypevr
16186
16187@deftypevr {@code{dovecot-configuration} parameter} string mail-location
16188Location for users' mailboxes. The default is empty, which means that
16189Dovecot tries to find the mailboxes automatically. This won't work if the
16190user doesn't yet have any mail, so you should explicitly tell Dovecot the
16191full location.
16192
16193If you're using mbox, giving a path to the INBOX file (e.g.@: /var/mail/%u)
16194isn't enough. You'll also need to tell Dovecot where the other mailboxes
16195are kept. This is called the "root mail directory", and it must be the
16196first path given in the @samp{mail-location} setting.
16197
16198There are a few special variables you can use, eg.:
16199
16200@table @samp
16201@item %u
16202username
16203@item %n
16204user part in user@@domain, same as %u if there's no domain
16205@item %d
16206domain part in user@@domain, empty if there's no domain
16207@item %h
16208home director
16209@end table
16210
16211See doc/wiki/Variables.txt for full list. Some examples:
16212@table @samp
16213@item maildir:~/Maildir
16214@item mbox:~/mail:INBOX=/var/mail/%u
16215@item mbox:/var/mail/%d/%1n/%n:INDEX=/var/indexes/%d/%1n/%
16216@end table
16217El valor predeterminado es @samp{""}.
16218@end deftypevr
16219
16220@deftypevr {@code{dovecot-configuration} parameter} string mail-uid
16221System user and group used to access mails. If you use multiple, userdb can
16222override these by returning uid or gid fields. You can use either numbers
16223or names. <doc/wiki/UserIds.txt>. Defaults to @samp{""}.
16224@end deftypevr
16225
16226@deftypevr {@code{dovecot-configuration} parameter} string mail-gid
16227
16228El valor predeterminado es @samp{""}.
16229@end deftypevr
16230
16231@deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group
16232Group to enable temporarily for privileged operations. Currently this is
16233used only with INBOX when either its initial creation or dotlocking fails.
16234Typically this is set to "mail" to give access to /var/mail. Defaults to
16235@samp{""}.
16236@end deftypevr
16237
16238@deftypevr {@code{dovecot-configuration} parameter} string mail-access-groups
16239Grant access to these supplementary groups for mail processes. Typically
16240these are used to set up access to shared mailboxes. Note that it may be
16241dangerous to set these if users can create symlinks (e.g.@: if "mail" group
16242is set here, ln -s /var/mail ~/mail/var could allow a user to delete others'
16243mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading
16244it). Defaults to @samp{""}.
16245@end deftypevr
16246
16247@deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access?
16248Allow full file system access to clients. There's no access checks other
16249than what the operating system does for the active UID/GID. It works with
16250both maildir and mboxes, allowing you to prefix mailboxes names with e.g.@:
16251/path/ or ~user/. Defaults to @samp{#f}.
16252@end deftypevr
16253
16254@deftypevr {@code{dovecot-configuration} parameter} boolean mmap-disable?
16255Don't use mmap() at all. This is required if you store indexes to shared
16256file systems (NFS or clustered file system). Defaults to @samp{#f}.
16257@end deftypevr
16258
16259@deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl?
16260Rely on @samp{O_EXCL} to work when creating dotlock files. NFS supports
16261@samp{O_EXCL} since version 3, so this should be safe to use nowadays by
16262default. Defaults to @samp{#t}.
16263@end deftypevr
16264
16265@deftypevr {@code{dovecot-configuration} parameter} string mail-fsync
16266When to use fsync() or fdatasync() calls:
16267@table @code
16268@item optimized
16269Whenever necessary to avoid losing important data
16270@item always
16271Useful with e.g.@: NFS when write()s are delayed
16272@item never
16273Never use it (best performance, but crashes can lose data).
16274@end table
16275Defaults to @samp{"optimized"}.
16276@end deftypevr
16277
16278@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage?
16279Mail storage exists in NFS. Set this to yes to make Dovecot flush NFS
16280caches whenever needed. If you're using only a single mail server this
16281isn't needed. Defaults to @samp{#f}.
16282@end deftypevr
16283
16284@deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index?
16285Mail index files also exist in NFS. Setting this to yes requires
16286@samp{mmap-disable? #t} and @samp{fsync-disable? #f}. Defaults to
16287@samp{#f}.
16288@end deftypevr
16289
16290@deftypevr {@code{dovecot-configuration} parameter} string lock-method
16291Locking method for index files. Alternatives are fcntl, flock and dotlock.
16292Dotlocking uses some tricks which may create more disk I/O than other
16293locking methods. NFS users: flock doesn't work, remember to change
16294@samp{mmap-disable}. Defaults to @samp{"fcntl"}.
16295@end deftypevr
16296
16297@deftypevr {@code{dovecot-configuration} parameter} file-name mail-temp-dir
16298Directory in which LDA/LMTP temporarily stores incoming mails >128 kB.
16299Defaults to @samp{"/tmp"}.
16300@end deftypevr
16301
16302@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid
16303Valid UID range for users. This is mostly to make sure that users can't log
16304in as daemons or other system users. Note that denying root logins is
16305hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid}
16306is set to 0. Defaults to @samp{500}.
16307@end deftypevr
16308
16309@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid
16310
16311El valor predeterminado es @samp{0}.
16312@end deftypevr
16313
16314@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid
16315Valid GID range for users. Users having non-valid GID as primary group ID
16316aren't allowed to log in. If user belongs to supplementary groups with
16317non-valid GIDs, those groups are not set. Defaults to @samp{1}.
16318@end deftypevr
16319
16320@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-gid
16321
16322El valor predeterminado es @samp{0}.
16323@end deftypevr
16324
16325@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length
16326Maximum allowed length for mail keyword name. It's only forced when trying
16327to create new keywords. Defaults to @samp{50}.
16328@end deftypevr
16329
16330@deftypevr {@code{dovecot-configuration} parameter} colon-separated-file-name-list valid-chroot-dirs
16331List of directories under which chrooting is allowed for mail processes
16332(i.e.@: /var/mail will allow chrooting to /var/mail/foo/bar too). This
16333setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot
16334settings. If this setting is empty, "/./" in home dirs are ignored.
16335WARNING: Never add directories here which local users can modify, that may
16336lead to root exploit. Usually this should be done only if you don't allow
16337shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}.
16338@end deftypevr
16339
16340@deftypevr {@code{dovecot-configuration} parameter} string mail-chroot
16341Default chroot directory for mail processes. This can be overridden for
16342specific users in user database by giving /./ in user's home directory
16343(e.g.@: /home/./user chroots into /home). Note that usually there is no
16344real need to do chrooting, Dovecot doesn't allow users to access files
16345outside their mail directory anyway. If your home directories are prefixed
16346with the chroot directory, append "/."@: to @samp{mail-chroot}.
16347<doc/wiki/Chrooting.txt>. Defaults to @samp{""}.
16348@end deftypevr
16349
16350@deftypevr {@code{dovecot-configuration} parameter} file-name auth-socket-path
16351UNIX socket path to master authentication server to find users. This is
16352used by imap (for shared users) and lda. Defaults to
16353@samp{"/var/run/dovecot/auth-userdb"}.
16354@end deftypevr
16355
16356@deftypevr {@code{dovecot-configuration} parameter} file-name mail-plugin-dir
16357Directory where to look up mail plugins. Defaults to
16358@samp{"/usr/lib/dovecot"}.
16359@end deftypevr
16360
16361@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mail-plugins
16362List of plugins to load for all services. Plugins specific to IMAP, LDA,
16363etc.@: are added to this list in their own .conf files. Defaults to
16364@samp{()}.
16365@end deftypevr
16366
16367@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-cache-min-mail-count
16368The minimum number of mails in a mailbox before updates are done to cache
16369file. This allows optimizing Dovecot's behavior to do less disk writes at
16370the cost of more disk reads. Defaults to @samp{0}.
16371@end deftypevr
16372
16373@deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval
16374When IDLE command is running, mailbox is checked once in a while to see if
16375there are any new mails or other changes. This setting defines the minimum
16376time to wait between those checks. Dovecot can also use dnotify, inotify
16377and kqueue to find out immediately when changes occur. Defaults to
16378@samp{"30 secs"}.
16379@end deftypevr
16380
16381@deftypevr {@code{dovecot-configuration} parameter} boolean mail-save-crlf?
16382Save mails with CR+LF instead of plain LF. This makes sending those mails
16383take less CPU, especially with sendfile() syscall with Linux and FreeBSD.
16384But it also creates a bit more disk I/O which may just make it slower. Also
16385note that if other software reads the mboxes/maildirs, they may handle the
16386extra CRs wrong and cause problems. Defaults to @samp{#f}.
16387@end deftypevr
16388
16389@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs?
16390By default LIST command returns all entries in maildir beginning with a
16391dot. Enabling this option makes Dovecot return only entries which are
16392directories. This is done by stat()ing each entry, so it causes more disk
16393I/O. (For systems setting struct @samp{dirent->d_type} this check is free
16394and it's done always regardless of this setting). Defaults to @samp{#f}.
16395@end deftypevr
16396
16397@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-copy-with-hardlinks?
16398When copying a message, do it with hard links whenever possible. This makes
16399the performance much better, and it's unlikely to have any side effects.
16400Defaults to @samp{#t}.
16401@end deftypevr
16402
16403@deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs?
16404Assume Dovecot is the only MUA accessing Maildir: Scan cur/ directory only
16405when its mtime changes unexpectedly or when we can't find the mail
16406otherwise. Defaults to @samp{#f}.
16407@end deftypevr
16408
16409@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks
16410Which locking methods to use for locking mbox. There are four available:
16411
16412@table @code
16413@item dotlock
16414Create <mailbox>.lock file. This is the oldest and most NFS-safe solution.
16415If you want to use /var/mail/ like directory, the users will need write
16416access to that directory.
16417@item dotlock-try
16418Same as dotlock, but if it fails because of permissions or because there
16419isn't enough disk space, just skip it.
16420@item fcntl
16421Use this if possible. Works with NFS too if lockd is used.
16422@item flock
16423May not exist in all systems. Doesn't work with NFS.
16424@item lockf
16425May not exist in all systems. Doesn't work with NFS.
16426@end table
16427
16428You can use multiple locking methods; if you do the order they're declared
16429in is important to avoid deadlocks if other MTAs/MUAs are using multiple
16430locking methods as well. Some operating systems don't allow using some of
16431them simultaneously.
16432@end deftypevr
16433
16434@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-write-locks
16435
16436@end deftypevr
16437
16438@deftypevr {@code{dovecot-configuration} parameter} string mbox-lock-timeout
16439Maximum time to wait for lock (all of them) before aborting. Defaults to
16440@samp{"5 mins"}.
16441@end deftypevr
16442
16443@deftypevr {@code{dovecot-configuration} parameter} string mbox-dotlock-change-timeout
16444If dotlock exists but the mailbox isn't modified in any way, override the
16445lock file after this much time. Defaults to @samp{"2 mins"}.
16446@end deftypevr
16447
16448@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs?
16449When mbox changes unexpectedly we have to fully read it to find out what
16450changed. If the mbox is large this can take a long time. Since the change
16451is usually just a newly appended mail, it'd be faster to simply read the new
16452mails. If this setting is enabled, Dovecot does this but still safely
16453fallbacks to re-reading the whole mbox file whenever something in mbox isn't
16454how it's expected to be. The only real downside to this setting is that if
16455some other MUA changes message flags, Dovecot doesn't notice it
16456immediately. Note that a full sync is done with SELECT, EXAMINE, EXPUNGE
16457and CHECK commands. Defaults to @samp{#t}.
16458@end deftypevr
16459
16460@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs?
16461Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT,
16462EXAMINE, EXPUNGE or CHECK commands. If this is set, @samp{mbox-dirty-syncs}
16463is ignored. Defaults to @samp{#f}.
16464@end deftypevr
16465
16466@deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes?
16467Delay writing mbox headers until doing a full write sync (EXPUNGE and CHECK
16468commands and when closing the mailbox). This is especially useful for POP3
16469where clients often delete all mails. The downside is that our changes
16470aren't immediately visible to other MUAs. Defaults to @samp{#t}.
16471@end deftypevr
16472
16473@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mbox-min-index-size
16474If mbox size is smaller than this (e.g.@: 100k), don't write index files.
16475If an index file already exists it's still read, just not updated. Defaults
16476to @samp{0}.
16477@end deftypevr
16478
16479@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size
16480Maximum dbox file size until it's rotated. Defaults to @samp{10000000}.
16481@end deftypevr
16482
16483@deftypevr {@code{dovecot-configuration} parameter} string mdbox-rotate-interval
16484Maximum dbox file age until it's rotated. Typically in days. Day begins
16485from midnight, so 1d = today, 2d = yesterday, etc. 0 = check disabled.
16486Defaults to @samp{"1d"}.
16487@end deftypevr
16488
16489@deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space?
16490When creating new mdbox files, immediately preallocate their size to
16491@samp{mdbox-rotate-size}. This setting currently works only in Linux with
16492some file systems (ext4, xfs). Defaults to @samp{#f}.
16493@end deftypevr
16494
16495@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir
16496sdbox and mdbox support saving mail attachments to external files, which
16497also allows single instance storage for them. Other backends don't support
16498this for now.
16499
16500WARNING: This feature hasn't been tested much yet. Use at your own risk.
16501
16502Directory root where to store mail attachments. Disabled, if empty.
16503Defaults to @samp{""}.
16504@end deftypevr
16505
16506@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size
16507Attachments smaller than this aren't saved externally. It's also possible
16508to write a plugin to disable saving specific attachments externally.
16509Defaults to @samp{128000}.
16510@end deftypevr
16511
16512@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs
16513File system backend to use for saving attachments:
16514@table @code
16515@item posix
16516No SiS done by Dovecot (but this might help FS's own deduplication)
16517@item sis posix
16518SiS with immediate byte-by-byte comparison during saving
16519@item sis-queue posix
16520SiS with delayed comparison and deduplication.
16521@end table
16522Defaults to @samp{"sis posix"}.
16523@end deftypevr
16524
16525@deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash
16526Hash format to use in attachment filenames. You can add any text and
16527variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}},
16528@code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be
16529truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits.
16530Defaults to @samp{"%@{sha1@}"}.
16531@end deftypevr
16532
16533@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit
16534
16535Defaults to @samp{100}.
16536@end deftypevr
16537
16538@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit
16539
16540Defaults to @samp{1000}.
16541@end deftypevr
16542
16543@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit
16544Default VSZ (virtual memory size) limit for service processes. This is
16545mainly intended to catch and kill processes that leak memory before they eat
16546up everything. Defaults to @samp{256000000}.
16547@end deftypevr
16548
16549@deftypevr {@code{dovecot-configuration} parameter} string default-login-user
16550Login user is internally used by login processes. This is the most
16551untrusted user in Dovecot system. It shouldn't have access to anything at
16552all. Defaults to @samp{"dovenull"}.
16553@end deftypevr
16554
16555@deftypevr {@code{dovecot-configuration} parameter} string default-internal-user
16556Internal user is used by unprivileged processes. It should be separate from
16557login user, so that login processes can't disturb other processes. Defaults
16558to @samp{"dovecot"}.
16559@end deftypevr
16560
16561@deftypevr {@code{dovecot-configuration} parameter} string ssl?
16562SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>. Defaults to
16563@samp{"required"}.
16564@end deftypevr
16565
16566@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert
16567PEM encoded X.509 SSL/TLS certificate (public key). Defaults to
16568@samp{"</etc/dovecot/default.pem"}.
16569@end deftypevr
16570
16571@deftypevr {@code{dovecot-configuration} parameter} string ssl-key
16572PEM encoded SSL/TLS private key. The key is opened before dropping root
16573privileges, so keep the key file unreadable by anyone but root. Defaults to
16574@samp{"</etc/dovecot/private/default.pem"}.
16575@end deftypevr
16576
16577@deftypevr {@code{dovecot-configuration} parameter} string ssl-key-password
16578If key file is password protected, give the password here. Alternatively
16579give it when starting dovecot with -p parameter. Since this file is often
16580world-readable, you may want to place this setting instead to a different.
16581Defaults to @samp{""}.
16582@end deftypevr
16583
16584@deftypevr {@code{dovecot-configuration} parameter} string ssl-ca
16585PEM encoded trusted certificate authority. Set this only if you intend to
16586use @samp{ssl-verify-client-cert? #t}. The file should contain the CA
16587certificate(s) followed by the matching CRL(s). (e.g.@: @samp{ssl-ca
16588</etc/ssl/certs/ca.pem}). Defaults to @samp{""}.
16589@end deftypevr
16590
16591@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-require-crl?
16592Require that CRL check succeeds for client certificates. Defaults to
16593@samp{#t}.
16594@end deftypevr
16595
16596@deftypevr {@code{dovecot-configuration} parameter} boolean ssl-verify-client-cert?
16597Request client to send a certificate. If you also want to require it, set
16598@samp{auth-ssl-require-client-cert? #t} in auth section. Defaults to
16599@samp{#f}.
16600@end deftypevr
16601
16602@deftypevr {@code{dovecot-configuration} parameter} string ssl-cert-username-field
16603Which field from certificate to use for username. commonName and
16604x500UniqueIdentifier are the usual choices. You'll also need to set
16605@samp{auth-ssl-username-from-cert? #t}. Defaults to @samp{"commonName"}.
16606@end deftypevr
16607
16608@deftypevr {@code{dovecot-configuration} parameter} string ssl-min-protocol
16609Minimum SSL protocol version to accept. Defaults to @samp{"TLSv1"}.
16610@end deftypevr
16611
16612@deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list
16613SSL ciphers to use. Defaults to
16614@samp{"ALL:!kRSA:!SRP:!kDHd:!DSS:!aNULL:!eNULL:!EXPORT:!DES:!3DES:!MD5:!PSK:!RC4:!ADH:!LOW@@STRENGTH"}.
16615@end deftypevr
16616
16617@deftypevr {@code{dovecot-configuration} parameter} string ssl-crypto-device
16618SSL crypto device to use, for valid values run "openssl engine". Defaults
16619to @samp{""}.
16620@end deftypevr
16621
16622@deftypevr {@code{dovecot-configuration} parameter} string postmaster-address
16623Address to use when sending rejection mails. %d expands to recipient
16624domain. Defaults to @samp{"postmaster@@%d"}.
16625@end deftypevr
16626
16627@deftypevr {@code{dovecot-configuration} parameter} string hostname
16628Hostname to use in various parts of sent mails (e.g.@: in Message-Id) and
16629in LMTP replies. Default is the system's real hostname@@domain. Defaults
16630to @samp{""}.
16631@end deftypevr
16632
16633@deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail?
16634If user is over quota, return with temporary failure instead of bouncing the
16635mail. Defaults to @samp{#f}.
16636@end deftypevr
16637
16638@deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path
16639Binary to use for sending mails. Defaults to @samp{"/usr/sbin/sendmail"}.
16640@end deftypevr
16641
16642@deftypevr {@code{dovecot-configuration} parameter} string submission-host
16643If non-empty, send mails via this SMTP host[:port] instead of sendmail.
16644Defaults to @samp{""}.
16645@end deftypevr
16646
16647@deftypevr {@code{dovecot-configuration} parameter} string rejection-subject
16648Subject: header to use for rejection mails. You can use the same variables
16649as for @samp{rejection-reason} below. Defaults to @samp{"Rejected: %s"}.
16650@end deftypevr
16651
16652@deftypevr {@code{dovecot-configuration} parameter} string rejection-reason
16653Human readable error message for rejection mails. You can use variables:
16654
16655@table @code
16656@item %n
16657CRLF
16658@item %r
16659reason
16660@item %s
16661original subject
16662@item %t
16663recipient
16664@end table
16665Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}.
16666@end deftypevr
16667
16668@deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter
16669Delimiter character between local-part and detail in email address.
16670Defaults to @samp{"+"}.
16671@end deftypevr
16672
16673@deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header
16674Header where the original recipient address (SMTP's RCPT TO: address) is
16675taken from if not available elsewhere. With dovecot-lda -a parameter
16676overrides this. A commonly used header for this is X-Original-To. Defaults
16677to @samp{""}.
16678@end deftypevr
16679
16680@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate?
16681Should saving a mail to a nonexistent mailbox automatically create it?.
16682Defaults to @samp{#f}.
16683@end deftypevr
16684
16685@deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe?
16686Should automatically created mailboxes be also automatically subscribed?.
16687Defaults to @samp{#f}.
16688@end deftypevr
16689
16690@deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length
16691Maximum IMAP command line length. Some clients generate very long command
16692lines with huge mailboxes, so you may need to raise this if you get "Too
16693long argument" or "IMAP command line too large" errors often. Defaults to
16694@samp{64000}.
16695@end deftypevr
16696
16697@deftypevr {@code{dovecot-configuration} parameter} string imap-logout-format
16698IMAP logout format string:
16699@table @code
16700@item %i
16701número total de bytes leídos del cliente
16702@item %o
16703número total de bytes enviados al cliente.
16704@end table
16705See @file{doc/wiki/Variables.txt} for a list of all the variables you can
16706use. Defaults to @samp{"in=%i out=%o deleted=%@{deleted@}
16707expunged=%@{expunged@} trashed=%@{trashed@} hdr_count=%@{fetch_hdr_count@}
16708hdr_bytes=%@{fetch_hdr_bytes@} body_count=%@{fetch_body_count@}
16709body_bytes=%@{fetch_body_bytes@}"}.
16710@end deftypevr
16711
16712@deftypevr {@code{dovecot-configuration} parameter} string imap-capability
16713Override the IMAP CAPABILITY response. If the value begins with '+', add
16714the given capabilities on top of the defaults (e.g.@: +XFOO XBAR). Defaults
16715to @samp{""}.
16716@end deftypevr
16717
16718@deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval
16719How long to wait between "OK Still here" notifications when client is
16720IDLEing. Defaults to @samp{"2 mins"}.
16721@end deftypevr
16722
16723@deftypevr {@code{dovecot-configuration} parameter} string imap-id-send
16724ID field names and values to send to clients. Using * as the value makes
16725Dovecot use the default value. The following fields have default values
16726currently: name, version, os, os-version, support-url, support-email.
16727Defaults to @samp{""}.
16728@end deftypevr
16729
16730@deftypevr {@code{dovecot-configuration} parameter} string imap-id-log
16731ID fields sent by client to log. * means everything. Defaults to
16732@samp{""}.
16733@end deftypevr
16734
16735@deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list imap-client-workarounds
16736Workarounds for various client bugs:
16737
16738@table @code
16739@item delay-newmail
16740Send EXISTS/RECENT new mail notifications only when replying to NOOP and
16741CHECK commands. Some clients ignore them otherwise, for example OSX Mail
16742(<v2.1). Outlook Express breaks more badly though, without this it may show
16743user "Message no longer in server" errors. Note that OE6 still breaks even
16744with this workaround if synchronization is set to "Headers Only".
16745
16746@item tb-extra-mailbox-sep
16747Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and adds
16748extra @samp{/} suffixes to mailbox names. This option causes Dovecot to
16749ignore the extra @samp{/} instead of treating it as invalid mailbox name.
16750
16751@item tb-lsub-flags
16752Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox). This
16753makes Thunderbird realize they aren't selectable and show them greyed out,
16754instead of only later giving "not selectable" popup error.
16755@end table
16756Defaults to @samp{()}.
16757@end deftypevr
16758
16759@deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host
16760Host allowed in URLAUTH URLs sent by client. "*" allows all. Defaults to
16761@samp{""}.
16762@end deftypevr
16763
16764
16765Whew! Lots of configuration options. The nice thing about it though is that
16766Guix has a complete interface to Dovecot's configuration language. This
16767allows not only a nice way to declare configurations, but also offers
16768reflective capabilities as well: users can write code to inspect and
16769transform configurations from within Scheme.
16770
16771However, it could be that you just want to get a @code{dovecot.conf} up and
16772running. In that case, you can pass an @code{opaque-dovecot-configuration}
16773as the @code{#:config} parameter to @code{dovecot-service}. As its name
16774indicates, an opaque configuration does not have easy reflective
16775capabilities.
16776
16777Available @code{opaque-dovecot-configuration} fields are:
16778
16779@deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot
16780El paquete dovecot.
16781@end deftypevr
16782
16783@deftypevr {@code{opaque-dovecot-configuration} parameter} string string
16784The contents of the @code{dovecot.conf}, as a string.
16785@end deftypevr
16786
16787For example, if your @code{dovecot.conf} is just the empty string, you could
16788instantiate a dovecot service like this:
16789
16790@example
16791(dovecot-service #:config
16792 (opaque-dovecot-configuration
16793 (string "")))
16794@end example
16795
16796@subsubheading Servicio OpenSMTPD
16797
16798@deffn {Variable Scheme} opensmtpd-service-type
16799This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD} service,
16800whose value should be an @code{opensmtpd-configuration} object as in this
16801example:
16802
16803@example
16804(service opensmtpd-service-type
16805 (opensmtpd-configuration
16806 (config-file (local-file "./mi-smtpd.conf"))))
16807@end example
16808@end deffn
16809
16810@deftp {Tipo de datos} opensmtpd-configuration
16811Data type representing the configuration of opensmtpd.
16812
16813@table @asis
16814@item @code{package} (predeterminado: @var{opensmtpd})
16815El objeto paquete del servidor SMTP OpenSMTPD.
16816
16817@item @code{config-file} (predeterminado: @var{%default-opensmtpd-file})
16818File-like object of the OpenSMTPD configuration file to use. By default it
16819listens on the loopback network interface, and allows for mail from users
16820and daemons on the local machine, as well as permitting email to remote
16821servers. Run @command{man smtpd.conf} for more information.
16822
16823@end table
16824@end deftp
16825
16826@subsubheading Servicio Exim
16827
16828@cindex mail transfer agent (MTA)
16829@cindex MTA (mail transfer agent)
16830@cindex SMTP
16831
16832@deffn {Variable Scheme} exim-service-type
16833This is the type of the @uref{https://exim.org, Exim} mail transfer agent
16834(MTA), whose value should be an @code{exim-configuration} object as in this
16835example:
16836
16837@example
16838(service exim-service-type
16839 (exim-configuration
16840 (config-file (local-file "./mi-exim.conf"))))
16841@end example
16842@end deffn
16843
16844In order to use an @code{exim-service-type} service you must also have a
16845@code{mail-aliases-service-type} service present in your
16846@code{operating-system} (even if it has no aliases).
16847
16848@deftp {Tipo de datos} exim-configuration
16849Tipo de datos que representa la configuración de exim.
16850
16851@table @asis
16852@item @code{package} (predeterminado: @var{exim})
16853Package object of the Exim server.
16854
16855@item @code{config-file} (predeterminado: @code{#f})
16856File-like object of the Exim configuration file to use. If its value is
16857@code{#f} then use the default configuration file from the package provided
16858in @code{package}. The resulting configuration file is loaded after setting
16859the @code{exim_user} and @code{exim_group} configuration variables.
16860
16861@end table
16862@end deftp
16863
16864@subsubheading Servicios de alias de correo
16865
16866@cindex correo electrónico, alias
16867@cindex alias, para direcciones de correo electrónico
16868
16869@deffn {Variable Scheme} mail-aliases-service-type
16870This is the type of the service which provides @code{/etc/aliases},
16871specifying how to deliver mail to users on this system.
16872
16873@example
16874(service mail-aliases-service-type
16875 '(("postmaster" "rober")
16876 ("rober" "rober@@example.com" "rober@@example2.com")))
16877@end example
16878@end deffn
16879
16880The configuration for a @code{mail-aliases-service-type} service is an
16881association list denoting how to deliver mail that comes to this
16882system. Each entry is of the form @code{(alias addresses ...)}, with
16883@code{alias} specifying the local alias and @code{addresses} specifying
16884where to deliver this user's mail.
16885
16886The aliases aren't required to exist as users on the local system. In the
16887above example, there doesn't need to be a @code{postmaster} entry in the
16888@code{operating-system}'s @code{user-accounts} in order to deliver the
16889@code{postmaster} mail to @code{bob} (which subsequently would deliver mail
16890to @code{bob@@example.com} and @code{bob@@example2.com}).
16891
16892@subsubheading GNU Mailutils IMAP4 Daemon
16893@cindex GNU Mailutils IMAP4 Daemon
16894
16895@deffn {Scheme Variable} imap4d-service-type
16896This is the type of the GNU Mailutils IMAP4 Daemon (@pxref{imap4d,,,
16897mailutils, GNU Mailutils Manual}), whose value should be an
16898@code{imap4d-configuration} object as in this example:
16899
16900@example
16901(service imap4d-service-type
16902 (imap4d-configuration
16903 (config-file (local-file "imap4d.conf"))))
16904@end example
16905@end deffn
16906
16907@deftp {Data Type} imap4d-configuration
16908Data type representing the configuration of @command{imap4d}.
16909
16910@table @asis
16911@item @code{package} (default: @code{mailutils})
16912The package that provides @command{imap4d}.
16913
16914@item @code{config-file} (default: @code{%default-imap4d-config-file})
16915File-like object of the configuration file to use, by default it will listen
16916on TCP port 143 of @code{localhost}. @xref{Conf-imap4d,,, mailutils, GNU
16917Mailutils Manual}, for details.
16918
16919@end table
16920@end deftp
16921
16922@node Servicios de mensajería
16923@subsection Servicios de mensajería
16924
16925@cindex messaging
16926@cindex jabber
16927@cindex XMPP
16928The @code{(gnu services messaging)} module provides Guix service definitions
16929for messaging services: currently only Prosody is supported.
16930
16931@subsubheading Servicio Prosody
16932
16933@deffn {Variable Scheme} prosody-service-type
16934This is the type for the @uref{https://prosody.im, Prosody XMPP
16935communication server}. Its value must be a @code{prosody-configuration}
16936record as in this example:
16937
16938@example
16939(service prosody-service-type
16940 (prosody-configuration
16941 (modules-enabled (cons "groups" "mam" %default-modules-enabled))
16942 (int-components
16943 (list
16944 (int-component-configuration
16945 (hostname "conference.example.net")
16946 (plugin "muc")
16947 (mod-muc (mod-muc-configuration)))))
16948 (virtualhosts
16949 (list
16950 (virtualhost-configuration
16951 (domain "example.net"))))))
16952@end example
16953
16954See below for details about @code{prosody-configuration}.
16955
16956@end deffn
16957
16958By default, Prosody does not need much configuration. Only one
16959@code{virtualhosts} field is needed: it specifies the domain you wish
16960Prosody to serve.
16961
16962You can perform various sanity checks on the generated configuration with
16963the @code{prosodyctl check} command.
16964
16965Prosodyctl will also help you to import certificates from the
16966@code{letsencrypt} directory so that the @code{prosody} user can access
16967them. See @url{https://prosody.im/doc/letsencrypt}.
16968
16969@example
16970prosodyctl --root cert import /etc/letsencrypt/live
16971@end example
16972
16973The available configuration parameters follow. Each parameter definition is
16974preceded by its type; for example, @samp{string-list foo} indicates that the
16975@code{foo} parameter should be specified as a list of strings. Types
16976starting with @code{maybe-} denote parameters that won't show up in
16977@code{prosody.cfg.lua} when their value is @code{'disabled}.
16978
16979There is also a way to specify the configuration as a string, if you have an
16980old @code{prosody.cfg.lua} file that you want to port over from some other
16981system; see the end for more details.
16982
16983The @code{file-object} type designates either a file-like object
16984(@pxref{Expresiones-G, file-like objects}) or a file name.
16985
16986@c The following documentation was initially generated by
16987@c (generate-documentation) in (gnu services messaging). Manually maintained
16988@c documentation is better, so we shouldn't hesitate to edit below as
16989@c needed. However if the change you want to make to this documentation
16990@c can be done in an automated way, it's probably easier to change
16991@c (generate-documentation) than to make it below and have to deal with
16992@c the churn as Prosody updates.
16993
16994Available @code{prosody-configuration} fields are:
16995
16996@deftypevr {@code{prosody-configuration} parameter} package prosody
16997El paquete Prosody.
16998@end deftypevr
16999
17000@deftypevr {@code{prosody-configuration} parameter} file-name data-path
17001Location of the Prosody data storage directory. See
17002@url{https://prosody.im/doc/configure}. Defaults to
17003@samp{"/var/lib/prosody"}.
17004@end deftypevr
17005
17006@deftypevr {@code{prosody-configuration} parameter} file-object-list plugin-paths
17007Additional plugin directories. They are searched in all the specified paths
17008in order. See @url{https://prosody.im/doc/plugins_directory}. Defaults to
17009@samp{()}.
17010@end deftypevr
17011
17012@deftypevr {@code{prosody-configuration} parameter} file-name certificates
17013Every virtual host and component needs a certificate so that clients and
17014servers can securely verify its identity. Prosody will automatically load
17015certificates/keys from the directory specified here. Defaults to
17016@samp{"/etc/prosody/certs"}.
17017@end deftypevr
17018
17019@deftypevr {@code{prosody-configuration} parameter} string-list admins
17020This is a list of accounts that are admins for the server. Note that you
17021must create the accounts separately. See
17022@url{https://prosody.im/doc/admins} and
17023@url{https://prosody.im/doc/creating_accounts}. Example: @code{(admins
17024'("user1@@example.com" "user2@@example.net"))} Defaults to @samp{()}.
17025@end deftypevr
17026
17027@deftypevr {@code{prosody-configuration} parameter} boolean use-libevent?
17028Enable use of libevent for better performance under high load. See
17029@url{https://prosody.im/doc/libevent}. Defaults to @samp{#f}.
17030@end deftypevr
17031
17032@deftypevr {@code{prosody-configuration} parameter} module-list modules-enabled
17033This is the list of modules Prosody will load on startup. It looks for
17034@code{mod_modulename.lua} in the plugins folder, so make sure that exists
17035too. Documentation on modules can be found at:
17036@url{https://prosody.im/doc/modules}. Defaults to @samp{("roster"
17037"saslauth" "tls" "dialback" "disco" "carbons" "private" "blocklist" "vcard"
17038"version" "uptime" "time" "ping" "pep" "register" "admin_adhoc")}.
17039@end deftypevr
17040
17041@deftypevr {@code{prosody-configuration} parameter} string-list modules-disabled
17042@samp{"offline"}, @samp{"c2s"} and @samp{"s2s"} are auto-loaded, but should
17043you want to disable them then add them to this list. Defaults to @samp{()}.
17044@end deftypevr
17045
17046@deftypevr {@code{prosody-configuration} parameter} file-object groups-file
17047Path to a text file where the shared groups are defined. If this path is
17048empty then @samp{mod_groups} does nothing. See
17049@url{https://prosody.im/doc/modules/mod_groups}. Defaults to
17050@samp{"/var/lib/prosody/sharedgroups.txt"}.
17051@end deftypevr
17052
17053@deftypevr {@code{prosody-configuration} parameter} boolean allow-registration?
17054Disable account creation by default, for security. See
17055@url{https://prosody.im/doc/creating_accounts}. Defaults to @samp{#f}.
17056@end deftypevr
17057
17058@deftypevr {@code{prosody-configuration} parameter} maybe-ssl-configuration ssl
17059These are the SSL/TLS-related settings. Most of them are disabled so to use
17060Prosody's defaults. If you do not completely understand these options, do
17061not add them to your config, it is easy to lower the security of your server
17062using them. See @url{https://prosody.im/doc/advanced_ssl_config}.
17063
17064Available @code{ssl-configuration} fields are:
17065
17066@deftypevr {@code{ssl-configuration} parameter} maybe-string protocol
17067This determines what handshake to use.
17068@end deftypevr
17069
17070@deftypevr {@code{ssl-configuration} parameter} maybe-file-name key
17071Path to your private key file.
17072@end deftypevr
17073
17074@deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate
17075Path to your certificate file.
17076@end deftypevr
17077
17078@deftypevr {@code{ssl-configuration} parameter} file-object capath
17079Path to directory containing root certificates that you wish Prosody to
17080trust when verifying the certificates of remote servers. Defaults to
17081@samp{"/etc/ssl/certs"}.
17082@end deftypevr
17083
17084@deftypevr {@code{ssl-configuration} parameter} maybe-file-object cafile
17085Path to a file containing root certificates that you wish Prosody to trust.
17086Similar to @code{capath} but with all certificates concatenated together.
17087@end deftypevr
17088
17089@deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify
17090A list of verification options (these mostly map to OpenSSL's
17091@code{set_verify()} flags).
17092@end deftypevr
17093
17094@deftypevr {@code{ssl-configuration} parameter} maybe-string-list options
17095A list of general options relating to SSL/TLS. These map to OpenSSL's
17096@code{set_options()}. For a full list of options available in LuaSec, see
17097the LuaSec source.
17098@end deftypevr
17099
17100@deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth
17101How long a chain of certificate authorities to check when looking for a
17102trusted root certificate.
17103@end deftypevr
17104
17105@deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers
17106An OpenSSL cipher string. This selects what ciphers Prosody will offer to
17107clients, and in what order.
17108@end deftypevr
17109
17110@deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam
17111A path to a file containing parameters for Diffie-Hellman key exchange. You
17112can create such a file with: @code{openssl dhparam -out
17113/etc/prosody/certs/dh-2048.pem 2048}
17114@end deftypevr
17115
17116@deftypevr {@code{ssl-configuration} parameter} maybe-string curve
17117Curve for Elliptic curve Diffie-Hellman. Prosody's default is
17118@samp{"secp384r1"}.
17119@end deftypevr
17120
17121@deftypevr {@code{ssl-configuration} parameter} maybe-string-list verifyext
17122A list of "extra" verification options.
17123@end deftypevr
17124
17125@deftypevr {@code{ssl-configuration} parameter} maybe-string password
17126Password for encrypted private keys.
17127@end deftypevr
17128
17129@end deftypevr
17130
17131@deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption?
17132Whether to force all client-to-server connections to be encrypted or not.
17133See @url{https://prosody.im/doc/modules/mod_tls}. Defaults to @samp{#f}.
17134@end deftypevr
17135
17136@deftypevr {@code{prosody-configuration} parameter} string-list disable-sasl-mechanisms
17137Set of mechanisms that will never be offered. See
17138@url{https://prosody.im/doc/modules/mod_saslauth}. Defaults to
17139@samp{("DIGEST-MD5")}.
17140@end deftypevr
17141
17142@deftypevr {@code{prosody-configuration} parameter} boolean s2s-require-encryption?
17143Whether to force all server-to-server connections to be encrypted or not.
17144See @url{https://prosody.im/doc/modules/mod_tls}. Defaults to @samp{#f}.
17145@end deftypevr
17146
17147@deftypevr {@code{prosody-configuration} parameter} boolean s2s-secure-auth?
17148Whether to require encryption and certificate authentication. This provides
17149ideal security, but requires servers you communicate with to support
17150encryption AND present valid, trusted certificates. See
17151@url{https://prosody.im/doc/s2s#security}. Defaults to @samp{#f}.
17152@end deftypevr
17153
17154@deftypevr {@code{prosody-configuration} parameter} string-list s2s-insecure-domains
17155Many servers don't support encryption or have invalid or self-signed
17156certificates. You can list domains here that will not be required to
17157authenticate using certificates. They will be authenticated using DNS. See
17158@url{https://prosody.im/doc/s2s#security}. Defaults to @samp{()}.
17159@end deftypevr
17160
17161@deftypevr {@code{prosody-configuration} parameter} string-list s2s-secure-domains
17162Even if you leave @code{s2s-secure-auth?} disabled, you can still require
17163valid certificates for some domains by specifying a list here. See
17164@url{https://prosody.im/doc/s2s#security}. Defaults to @samp{()}.
17165@end deftypevr
17166
17167@deftypevr {@code{prosody-configuration} parameter} string authentication
17168Select the authentication backend to use. The default provider stores
17169passwords in plaintext and uses Prosody's configured data storage to store
17170the authentication data. If you do not trust your server please see
17171@url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for
17172information about using the hashed backend. See also
17173@url{https://prosody.im/doc/authentication} Defaults to
17174@samp{"internal_plain"}.
17175@end deftypevr
17176
17177@deftypevr {@code{prosody-configuration} parameter} maybe-string log
17178Set logging options. Advanced logging configuration is not yet supported by
17179the Prosody service. See @url{https://prosody.im/doc/logging}. Defaults to
17180@samp{"*syslog"}.
17181@end deftypevr
17182
17183@deftypevr {@code{prosody-configuration} parameter} file-name pidfile
17184File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}.
17185Defaults to @samp{"/var/run/prosody/prosody.pid"}.
17186@end deftypevr
17187
17188@deftypevr {@code{prosody-configuration} parameter} maybe-non-negative-integer http-max-content-size
17189Maximum allowed size of the HTTP body (in bytes).
17190@end deftypevr
17191
17192@deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url
17193Some modules expose their own URL in various ways. This URL is built from
17194the protocol, host and port used. If Prosody sits behind a proxy, the
17195public URL will be @code{http-external-url} instead. See
17196@url{https://prosody.im/doc/http#external_url}.
17197@end deftypevr
17198
17199@deftypevr {@code{prosody-configuration} parameter} virtualhost-configuration-list virtualhosts
17200A host in Prosody is a domain on which user accounts can be created. For
17201example if you want your users to have addresses like
17202@samp{"john.smith@@example.com"} then you need to add a host
17203@samp{"example.com"}. All options in this list will apply only to this
17204host.
17205
17206Note: the name "virtual" host is used in configuration to avoid confusion
17207with the actual physical host that Prosody is installed on. A single
17208Prosody instance can serve many domains, each one defined as a VirtualHost
17209entry in Prosody's configuration. Conversely a server that hosts a single
17210domain would have just one VirtualHost entry.
17211
17212See @url{https://prosody.im/doc/configure#virtual_host_settings}.
17213
17214Available @code{virtualhost-configuration} fields are:
17215
17216all these @code{prosody-configuration} fields: @code{admins},
17217@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
17218@code{groups-file}, @code{allow-registration?}, @code{ssl},
17219@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
17220@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
17221@code{s2s-insecure-domains}, @code{s2s-secure-domains},
17222@code{authentication}, @code{log}, @code{http-max-content-size},
17223@code{http-external-url}, @code{raw-content}, plus:
17224@deftypevr {@code{virtualhost-configuration} parameter} string domain
17225Domain you wish Prosody to serve.
17226@end deftypevr
17227
17228@end deftypevr
17229
17230@deftypevr {@code{prosody-configuration} parameter} int-component-configuration-list int-components
17231Components are extra services on a server which are available to clients,
17232usually on a subdomain of the main server (such as
17233@samp{"mycomponent.example.com"}). Example components might be chatroom
17234servers, user directories, or gateways to other protocols.
17235
17236Internal components are implemented with Prosody-specific plugins. To add
17237an internal component, you simply fill the hostname field, and the plugin
17238you wish to use for the component.
17239
17240See @url{https://prosody.im/doc/components}. Defaults to @samp{()}.
17241
17242Available @code{int-component-configuration} fields are:
17243
17244all these @code{prosody-configuration} fields: @code{admins},
17245@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
17246@code{groups-file}, @code{allow-registration?}, @code{ssl},
17247@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
17248@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
17249@code{s2s-insecure-domains}, @code{s2s-secure-domains},
17250@code{authentication}, @code{log}, @code{http-max-content-size},
17251@code{http-external-url}, @code{raw-content}, plus:
17252@deftypevr {@code{int-component-configuration} parameter} string hostname
17253Hostname of the component.
17254@end deftypevr
17255
17256@deftypevr {@code{int-component-configuration} parameter} string plugin
17257Plugin you wish to use for the component.
17258@end deftypevr
17259
17260@deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc
17261Multi-user chat (MUC) is Prosody's module for allowing you to create hosted
17262chatrooms/conferences for XMPP users.
17263
17264General information on setting up and using multi-user chatrooms can be
17265found in the "Chatrooms" documentation
17266(@url{https://prosody.im/doc/chatrooms}), which you should read if you are
17267new to XMPP chatrooms.
17268
17269See also @url{https://prosody.im/doc/modules/mod_muc}.
17270
17271Available @code{mod-muc-configuration} fields are:
17272
17273@deftypevr {@code{mod-muc-configuration} parameter} string name
17274The name to return in service discovery responses. Defaults to
17275@samp{"Prosody Chatrooms"}.
17276@end deftypevr
17277
17278@deftypevr {@code{mod-muc-configuration} parameter} string-or-boolean restrict-room-creation
17279If @samp{#t}, this will only allow admins to create new chatrooms.
17280Otherwise anyone can create a room. The value @samp{"local"} restricts room
17281creation to users on the service's parent domain. E.g.@:
17282@samp{user@@example.com} can create rooms on @samp{rooms.example.com}. The
17283value @samp{"admin"} restricts to service administrators only. Defaults to
17284@samp{#f}.
17285@end deftypevr
17286
17287@deftypevr {@code{mod-muc-configuration} parameter} non-negative-integer max-history-messages
17288Maximum number of history messages that will be sent to the member that has
17289just joined the room. Defaults to @samp{20}.
17290@end deftypevr
17291
17292@end deftypevr
17293
17294@end deftypevr
17295
17296@deftypevr {@code{prosody-configuration} parameter} ext-component-configuration-list ext-components
17297External components use XEP-0114, which most standalone components support.
17298To add an external component, you simply fill the hostname field. See
17299@url{https://prosody.im/doc/components}. Defaults to @samp{()}.
17300
17301Available @code{ext-component-configuration} fields are:
17302
17303all these @code{prosody-configuration} fields: @code{admins},
17304@code{use-libevent?}, @code{modules-enabled}, @code{modules-disabled},
17305@code{groups-file}, @code{allow-registration?}, @code{ssl},
17306@code{c2s-require-encryption?}, @code{disable-sasl-mechanisms},
17307@code{s2s-require-encryption?}, @code{s2s-secure-auth?},
17308@code{s2s-insecure-domains}, @code{s2s-secure-domains},
17309@code{authentication}, @code{log}, @code{http-max-content-size},
17310@code{http-external-url}, @code{raw-content}, plus:
17311@deftypevr {@code{ext-component-configuration} parameter} string component-secret
17312Password which the component will use to log in.
17313@end deftypevr
17314
17315@deftypevr {@code{ext-component-configuration} parameter} string hostname
17316Hostname of the component.
17317@end deftypevr
17318
17319@end deftypevr
17320
17321@deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports
17322Port(s) Prosody listens on for component connections. Defaults to
17323@samp{(5347)}.
17324@end deftypevr
17325
17326@deftypevr {@code{prosody-configuration} parameter} string component-interface
17327Interface Prosody listens on for component connections. Defaults to
17328@samp{"127.0.0.1"}.
17329@end deftypevr
17330
17331@deftypevr {@code{prosody-configuration} parameter} maybe-raw-content raw-content
17332Raw content that will be added to the configuration file.
17333@end deftypevr
17334
17335It could be that you just want to get a @code{prosody.cfg.lua} up and
17336running. In that case, you can pass an @code{opaque-prosody-configuration}
17337record as the value of @code{prosody-service-type}. As its name indicates,
17338an opaque configuration does not have easy reflective capabilities.
17339Available @code{opaque-prosody-configuration} fields are:
17340
17341@deftypevr {@code{opaque-prosody-configuration} parameter} package prosody
17342El paquete prosody.
17343@end deftypevr
17344
17345@deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua
17346The contents of the @code{prosody.cfg.lua} to use.
17347@end deftypevr
17348
17349For example, if your @code{prosody.cfg.lua} is just the empty string, you
17350could instantiate a prosody service like this:
17351
17352@example
17353(service prosody-service-type
17354 (opaque-prosody-configuration
17355 (prosody.cfg.lua "")))
17356@end example
17357
17358@c end of Prosody auto-generated documentation
17359
17360@subsubheading Servicio BitlBee
17361
17362@cindex IRC (Internet Relay Chat)
17363@cindex pasarela IRC
17364@url{http://bitlbee.org,BitlBee} is a gateway that provides an IRC interface
17365to a variety of messaging protocols such as XMPP.
17366
17367@defvr {Variable Scheme} bitlbee-service-type
17368This is the service type for the @url{http://bitlbee.org,BitlBee} IRC
17369gateway daemon. Its value is a @code{bitlbee-configuration} (see below).
17370
17371To have BitlBee listen on port 6667 on localhost, add this line to your
17372services:
17373
17374@example
17375(service bitlbee-service-type)
17376@end example
17377@end defvr
17378
17379@deftp {Tipo de datos} bitlbee-configuration
17380This is the configuration for BitlBee, with the following fields:
17381
17382@table @asis
17383@item @code{interface} (predeterminada: @code{"127.0.0.1"})
17384@itemx @code{port} (predeterminado: @code{6667})
17385Escucha en la interfaz de red correspondiente a la dirección IP especificada
17386en @var{interface}, en el puerto @var{port}.
17387
17388When @var{interface} is @code{127.0.0.1}, only local clients can connect;
17389when it is @code{0.0.0.0}, connections can come from any networking
17390interface.
17391
17392@item @code{package} (predeterminado: @code{bitlbee})
17393El paquete BitlBee usado.
17394
17395@item @code{plugins} (predeterminados: @code{'()})
17396List of plugin packages to use---e.g., @code{bitlbee-discord}.
17397
17398@item @code{extra-settings} (predeterminado: @code{""})
17399Configuration snippet added as-is to the BitlBee configuration file.
17400@end table
17401@end deftp
17402
17403@subsubheading Quassel Service
17404
17405@cindex IRC (Internet Relay Chat)
17406@url{https://quassel-irc.org/,Quassel} is a distributed IRC client, meaning
17407that one or more clients can attach to and detach from the central core.
17408
17409@defvr {Scheme Variable} quassel-service-type
17410This is the service type for the @url{https://quassel-irc.org/,Quassel} IRC
17411backend daemon. Its value is a @code{quassel-configuration} (see below).
17412@end defvr
17413
17414@deftp {Data Type} quassel-configuration
17415This is the configuration for Quassel, with the following fields:
17416
17417@table @asis
17418@item @code{quassel} (default: @code{quassel})
17419The Quassel package to use.
17420
17421@item @code{interface} (default: @code{"::,0.0.0.0"})
17422@item @code{port} (default: @code{4242})
17423Listen on the network interface(s) corresponding to the IPv4 or IPv6
17424interfaces specified in the comma delimited @var{interface}, on @var{port}.
17425
17426@item @code{loglevel} (default: @code{"Info"})
17427The level of logging desired. Accepted values are Debug, Info, Warning and
17428Error.
17429@end table
17430@end deftp
17431
17432@node Servicios de telefonía
17433@subsection Servicios de telefonía
17434
17435@cindex Murmur (servidor VoIP)
17436@cindex servidor VoIP
17437This section describes how to set up and run a Murmur server. Murmur is the
17438server of the @uref{https://mumble.info, Mumble} voice-over-IP (VoIP) suite.
17439
17440@deftp {Tipo de datos} murmur-configuration
17441The service type for the Murmur server. An example configuration can look
17442like this:
17443
17444@example
17445(service murmur-service-type
17446 (murmur-configuration
17447 (welcome-text
17448 "Welcome to this Mumble server running on Guix!")
17449 (cert-required? #t) ;disallow text password logins
17450 (ssl-cert "/etc/letsencrypt/live/mumble.example.com/fullchain.pem")
17451 (ssl-key "/etc/letsencrypt/live/mumble.example.com/privkey.pem")))
17452@end example
17453
17454After reconfiguring your system, you can manually set the murmur
17455@code{SuperUser} password with the command that is printed during the
17456activation phase.
17457
17458It is recommended to register a normal Mumble user account and grant it
17459admin or moderator rights. You can use the @code{mumble} client to login as
17460new normal user, register yourself, and log out. For the next step login
17461with the name @code{SuperUser} use the @code{SuperUser} password that you
17462set previously, and grant your newly registered mumble user administrator or
17463moderator rights and create some channels.
17464
17465Available @code{murmur-configuration} fields are:
17466
17467@table @asis
17468@item @code{package} (predeterminado: @code{mumble})
17469Package that contains @code{bin/murmurd}.
17470
17471@item @code{user} (predeterminado: @code{"murmur"})
17472User who will run the Murmur server.
17473
17474@item @code{group} (predeterminado: @code{"murmur"})
17475Group of the user who will run the murmur server.
17476
17477@item @code{port} (predeterminado: @code{64738})
17478Puerto en el que escucha el servidor.
17479
17480@item @code{welcome-text} (predeterminado: @code{""})
17481Welcome text sent to clients when they connect.
17482
17483@item @code{server-password} (predeterminada: @code{""})
17484Password the clients have to enter in order to connect.
17485
17486@item @code{max-users} (predeterminados: @code{100})
17487Maximum of users that can be connected to the server at once.
17488
17489@item @code{max-user-bandwidth} (predeterminado: @code{#f})
17490Maximum voice traffic a user can send per second.
17491
17492@item @code{database-file} (predeterminado: @code{"/var/lib/murmur/db.sqlite"})
17493File name of the sqlite database. The service's user will become the owner
17494of the directory.
17495
17496@item @code{log-file} (predeterminado: @code{"/var/log/murmur/murmur.log"})
17497File name of the log file. The service's user will become the owner of the
17498directory.
17499
17500@item @code{autoban-attempts} (predeterminados: @code{10})
17501Maximum number of logins a user can make in @code{autoban-timeframe} without
17502getting auto banned for @code{autoban-time}.
17503
17504@item @code{autoban-timeframe} (predeterminado: @code{120})
17505Timeframe for autoban in seconds.
17506
17507@item @code{autoban-time} (predeterminado: @code{300})
17508Amount of time in seconds for which a client gets banned when violating the
17509autoban limits.
17510
17511@item @code{opus-threshold} (predeterminado: @code{100})
17512Percentage of clients that need to support opus before switching over to
17513opus audio codec.
17514
17515@item @code{channel-nesting-limit} (predeterminado: @code{10})
17516How deep channels can be nested at maximum.
17517
17518@item @code{channelname-regex} (predeterminado: @code{#f})
17519A string in form of a Qt regular expression that channel names must conform
17520to.
17521
17522@item @code{username-regex} (predeterminado: @code{#f})
17523A string in form of a Qt regular expression that user names must conform to.
17524
17525@item @code{text-message-length} (predeterminado: @code{5000})
17526Maximum size in bytes that a user can send in one text chat message.
17527
17528@item @code{image-message-length} (predeterminado: @code{(* 128 1024)})
17529Maximum size in bytes that a user can send in one image message.
17530
17531@item @code{cert-required?} (predeterminado: @code{#f})
17532If it is set to @code{#t} clients that use weak password authentification
17533will not be accepted. Users must have completed the certificate wizard to
17534join.
17535
17536@item @code{remember-channel?} (predeterminado: @code{#f})
17537Should murmur remember the last channel each user was in when they
17538disconnected and put them into the remembered channel when they rejoin.
17539
17540@item @code{allow-html?} (predeterminado: @code{#f})
17541Should html be allowed in text messages, user comments, and channel
17542descriptions.
17543
17544@item @code{allow-ping?} (predeterminado: @code{#f})
17545Setting to true exposes the current user count, the maximum user count, and
17546the server's maximum bandwidth per client to unauthenticated users. In the
17547Mumble client, this information is shown in the Connect dialog.
17548
17549Disabling this setting will prevent public listing of the server.
17550
17551@item @code{bonjour?} (predeterminado: @code{#f})
17552Should the server advertise itself in the local network through the bonjour
17553protocol.
17554
17555@item @code{send-version?} (predeterminado: @code{#f})
17556Should the murmur server version be exposed in ping requests.
17557
17558@item @code{log-days} (predeterminado: @code{31})
17559Murmur also stores logs in the database, which are accessible via RPC. The
17560default is 31 days of months, but you can set this setting to 0 to keep logs
17561forever, or -1 to disable logging to the database.
17562
17563@item @code{obfuscate-ips?} (predeterminado: @code{#t})
17564Should logged ips be obfuscated to protect the privacy of users.
17565
17566@item @code{ssl-cert} (predeterminado: @code{#f})
17567File name of the SSL/TLS certificate used for encrypted connections.
17568
17569@example
17570(ssl-cert "/etc/letsencrypt/live/example.com/fullchain.pem")
17571@end example
17572@item @code{ssl-key} (predeterminada: @code{#f})
17573Filepath to the ssl private key used for encrypted connections.
17574@example
17575(ssl-key "/etc/letsencrypt/live/example.com/privkey.pem")
17576@end example
17577
17578@item @code{ssl-dh-params} (predeterminado: @code{#f})
17579File name of a PEM-encoded file with Diffie-Hellman parameters for the
17580SSL/TLS encryption. Alternatively you set it to @code{"@@ffdhe2048"},
17581@code{"@@ffdhe3072"}, @code{"@@ffdhe4096"}, @code{"@@ffdhe6144"} or
17582@code{"@@ffdhe8192"} to use bundled parameters from RFC 7919.
17583
17584@item @code{ssl-ciphers} (predeterminado: @code{#f})
17585The @code{ssl-ciphers} option chooses the cipher suites to make available
17586for use in SSL/TLS.
17587
17588This option is specified using
17589@uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT,
17590OpenSSL cipher list notation}.
17591
17592It is recommended that you try your cipher string using 'openssl ciphers
17593<string>' before setting it here, to get a feel for which cipher suites you
17594will get. After setting this option, it is recommend that you inspect your
17595Murmur log to ensure that Murmur is using the cipher suites that you
17596expected it to.
17597
17598Note: Changing this option may impact the backwards compatibility of your
17599Murmur server, and can remove the ability for older Mumble clients to be
17600able to connect to it.
17601
17602@item @code{public-registration} (predeterminado: @code{#f})
17603Must be a @code{<murmur-public-registration-configuration>} record or
17604@code{#f}.
17605
17606You can optionally register your server in the public server list that the
17607@code{mumble} client shows on startup. You cannot register your server if
17608you have set a @code{server-password}, or set @code{allow-ping} to
17609@code{#f}.
17610
17611It might take a few hours until it shows up in the public list.
17612
17613@item @code{file} (predeterminado: @code{#f})
17614Optional alternative override for this configuration.
17615@end table
17616@end deftp
17617
17618@deftp {Tipo de datos} murmur-public-registration-configuration
17619Configuration for public registration of a murmur service.
17620
17621@table @asis
17622@item @code{name}
17623This is a display name for your server. Not to be confused with the
17624hostname.
17625
17626@item @code{password}
17627A password to identify your registration. Subsequent updates will need the
17628same password. Don't lose your password.
17629
17630@item @code{url}
17631This should be a @code{http://} or @code{https://} link to your web site.
17632
17633@item @code{hostname} (predeterminado: @code{#f})
17634By default your server will be listed by its IP address. If it is set your
17635server will be linked by this host name instead.
17636@end table
17637@end deftp
17638
17639
17640
17641@node Servicios de monitorización
17642@subsection Servicios de monitorización
17643
17644@subsubheading Servicio Tailon
17645
17646@uref{https://tailon.readthedocs.io/, Tailon} is a web application for
17647viewing and searching log files.
17648
17649The following example will configure the service with default values. By
17650default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}).
17651
17652@example
17653(service tailon-service-type)
17654@end example
17655
17656The following example customises more of the Tailon configuration, adding
17657@command{sed} to the list of allowed commands.
17658
17659@example
17660(service tailon-service-type
17661 (tailon-configuration
17662 (config-file
17663 (tailon-configuration-file
17664 (allowed-commands '("tail" "grep" "awk" "sed"))))))
17665@end example
17666
17667
17668@deftp {Tipo de datos} tailon-configuration
17669Data type representing the configuration of Tailon. This type has the
17670following parameters:
17671
17672@table @asis
17673@item @code{config-file} (predeterminado: @code{(tailon-configuration-file)})
17674The configuration file to use for Tailon. This can be set to a
17675@dfn{tailon-configuration-file} record value, or any gexp
17676(@pxref{Expresiones-G}).
17677
17678For example, to instead use a local file, the @code{local-file} function can
17679be used:
17680
17681@example
17682(service tailon-service-type
17683 (tailon-configuration
17684 (config-file (local-file "./mi-tailon.conf"))))
17685@end example
17686
17687@item @code{package} (predeterminado: @code{tailon})
17688El paquete tailon usado.
17689
17690@end table
17691@end deftp
17692
17693@deftp {Tipo de datos} tailon-configuration-file
17694Tipo de datos que representa las opciones de configuración de Tailon. Este
17695tipo tiene los siguientes parámetros:
17696
17697@table @asis
17698@item @code{files} (predeterminados: @code{(list "/var/log")})
17699List of files to display. The list can include strings for a single file or
17700directory, or a list, where the first item is the name of a subsection, and
17701the remaining items are the files or directories in that subsection.
17702
17703@item @code{bind} (predeterminado: @code{"localhost:8080"})
17704Address and port to which Tailon should bind on.
17705
17706@item @code{relative-root} (predeterminado: @code{#f})
17707URL path to use for Tailon, set to @code{#f} to not use a path.
17708
17709@item @code{allow-transfers?} (predeterminado: @code{#t})
17710Allow downloading the log files in the web interface.
17711
17712@item @code{follow-names?} (predeterminado: @code{#t})
17713Allow tailing of not-yet existent files.
17714
17715@item @code{tail-lines} (predeterminado: @code{200})
17716Number of lines to read initially from each file.
17717
17718@item @code{allowed-commands} (predeterminadas: @code{(list "tail" "grep" "awk")})
17719Órdenes cuya ejecución está permitida. Por defecto, @code{sed} está
17720deshabilitado.
17721
17722@item @code{debug?} (predeterminado: @code{#f})
17723Set @code{debug?} to @code{#t} to show debug messages.
17724
17725@item @code{wrap-lines} (predeterminado: @code{#t})
17726Initial line wrapping state in the web interface. Set to @code{#t} to
17727initially wrap lines (the default), or to @code{#f} to initially not wrap
17728lines.
17729
17730@item @code{http-auth} (predeterminado: @code{#f})
17731HTTP authentication type to use. Set to @code{#f} to disable authentication
17732(the default). Supported values are @code{"digest"} or @code{"basic"}.
17733
17734@item @code{users} (predeterminado: @code{#f})
17735If HTTP authentication is enabled (see @code{http-auth}), access will be
17736restricted to the credentials provided here. To configure users, use a list
17737of pairs, where the first element of the pair is the username, and the 2nd
17738element of the pair is the password.
17739
17740@example
17741(tailon-configuration-file
17742 (http-auth "basic")
17743 (users '(("usuaria1" . "contraseña1")
17744 ("usuaria2" . "contraseña2"))))
17745@end example
17746
17747@end table
17748@end deftp
17749
17750
17751@subsubheading Servicio Darkstat
17752@cindex darkstat
17753Darkstat is a packet sniffer that captures network traffic, calculates
17754statistics about usage, and serves reports over HTTP.
17755
17756@defvar {Variable Scheme} darkstat-service-type
17757This is the service type for the @uref{https://unix4lyfe.org/darkstat/,
17758darkstat} service, its value must be a @code{darkstat-configuration} record
17759as in this example:
17760
17761@example
17762(service darkstat-service-type
17763 (darkstat-configuration
17764 (interface "eno1")))
17765@end example
17766@end defvar
17767
17768@deftp {Tipo de datos} darkstat-configuration
17769Tipo de datos que representa la configuración de @command{darkstat}.
17770
17771@table @asis
17772@item @code{package} (predeterminado: @code{darkstat})
17773El paquete darkstat usado.
17774
17775@item @code{interface}
17776Captura el tráfico en la interfaz de red especificada.
17777
17778@item @code{port} (predeterminado: @code{"667"})
17779Bind the web interface to the specified port.
17780
17781@item @code{bind-address} (predeterminada: @code{"127.0.0.1"})
17782Bind the web interface to the specified address.
17783
17784@item @code{base} (predeterminada: @code{"/"})
17785Specify the path of the base URL. This can be useful if @command{darkstat}
17786is accessed via a reverse proxy.
17787
17788@end table
17789@end deftp
17790
17791@subsubheading Servicio del exportador de nodos Prometheus
17792
17793@cindex prometheus-node-exporter
17794The Prometheus ``node exporter'' makes hardware and operating system
17795statistics provided by the Linux kernel available for the Prometheus
17796monitoring system. This service should be deployed on all physical nodes
17797and virtual machines, where monitoring these statistics is desirable.
17798
17799@defvar {Variable Scheme} prometheus-node-exporter-service-type
17800This is the service type for the
17801@uref{https://github.com/prometheus/node_exporter/,
17802prometheus-node-exporter} service, its value must be a
17803@code{prometheus-node-exporter-configuration} record as in this example:
17804
17805@example
17806(service prometheus-node-exporter-service-type
17807 (prometheus-node-exporter-configuration
17808 (web-listen-address ":9100")))
17809@end example
17810@end defvar
17811
17812@deftp {Tipo de datos} prometheus-node-exporter-configuration
17813Tipo de datos que representa la configuración de @command{node_exporter}.
17814
17815@table @asis
17816@item @code{package} (predeterminado: @code{go-github-com-prometheus-node-exporter})
17817El paquete prometheus-node-exporter usado.
17818
17819@item @code{web-listen-address} (predeterminada: @code{":9100"})
17820Bind the web interface to the specified address.
17821
17822@end table
17823@end deftp
17824
17825@subsubheading Zabbix server
17826@cindex zabbix zabbix-server
17827Zabbix provides monitoring metrics, among others network utilization, CPU
17828load and disk space consumption:
17829
17830@itemize
17831@item High performance, high capacity (able to monitor hundreds of thousands of devices).
17832@item Auto-discovery of servers and network devices and interfaces.
17833@item Low-level discovery, allows to automatically start monitoring new items, file systems or network interfaces among others.
17834@item Distributed monitoring with centralized web administration.
17835@item Native high performance agents.
17836@item SLA, and ITIL KPI metrics on reporting.
17837@item High-level (business) view of monitored resources through user-defined visual console screens and dashboards.
17838@item Remote command execution through Zabbix proxies.
17839@end itemize
17840
17841@c %start of fragment
17842
17843Available @code{zabbix-server-configuration} fields are:
17844
17845@deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server
17846The zabbix-server package.
17847
17848@end deftypevr
17849
17850@deftypevr {@code{zabbix-server-configuration} parameter} string user
17851User who will run the Zabbix server.
17852
17853Defaults to @samp{"zabbix"}.
17854
17855@end deftypevr
17856
17857@deftypevr {@code{zabbix-server-configuration} parameter} group group
17858Group who will run the Zabbix server.
17859
17860Defaults to @samp{"zabbix"}.
17861
17862@end deftypevr
17863
17864@deftypevr {@code{zabbix-server-configuration} parameter} string db-host
17865Database host name.
17866
17867Defaults to @samp{"127.0.0.1"}.
17868
17869@end deftypevr
17870
17871@deftypevr {@code{zabbix-server-configuration} parameter} string db-name
17872Database name.
17873
17874Defaults to @samp{"zabbix"}.
17875
17876@end deftypevr
17877
17878@deftypevr {@code{zabbix-server-configuration} parameter} string db-user
17879Database user.
17880
17881Defaults to @samp{"zabbix"}.
17882
17883@end deftypevr
17884
17885@deftypevr {@code{zabbix-server-configuration} parameter} string db-password
17886Database password. Please, use @code{include-files} with
17887@code{DBPassword=SECRET} inside a specified file instead.
17888
17889El valor predeterminado es @samp{""}.
17890
17891@end deftypevr
17892
17893@deftypevr {@code{zabbix-server-configuration} parameter} number db-port
17894Database port.
17895
17896Defaults to @samp{5432}.
17897
17898@end deftypevr
17899
17900@deftypevr {@code{zabbix-server-configuration} parameter} string log-type
17901Specifies where log messages are written to:
17902
17903@itemize @bullet
17904@item
17905@code{system} - syslog.
17906
17907@item
17908@code{file} - file specified with @code{log-file} parameter.
17909
17910@item
17911@code{console} - standard output.
17912
17913@end itemize
17914
17915El valor predeterminado es @samp{""}.
17916
17917@end deftypevr
17918
17919@deftypevr {@code{zabbix-server-configuration} parameter} string log-file
17920Log file name for @code{log-type} @code{file} parameter.
17921
17922Defaults to @samp{"/var/log/zabbix/server.log"}.
17923
17924@end deftypevr
17925
17926@deftypevr {@code{zabbix-server-configuration} parameter} string pid-file
17927Name of PID file.
17928
17929Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}.
17930
17931@end deftypevr
17932
17933@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location
17934The location of certificate authority (CA) files for SSL server certificate
17935verification.
17936
17937Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}.
17938
17939@end deftypevr
17940
17941@deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location
17942Location of SSL client certificates.
17943
17944Defaults to @samp{"/etc/ssl/certs"}.
17945
17946@end deftypevr
17947
17948@deftypevr {@code{zabbix-server-configuration} parameter} string extra-options
17949Extra options will be appended to Zabbix server configuration file.
17950
17951El valor predeterminado es @samp{""}.
17952
17953@end deftypevr
17954
17955@deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files
17956You may include individual files or all files in a directory in the
17957configuration file.
17958
17959Defaults to @samp{()}.
17960
17961@end deftypevr
17962
17963@c %end of fragment
17964
17965@subsubheading Zabbix agent
17966@cindex zabbix zabbix-agent
17967
17968Zabbix agent gathers information for Zabbix server.
17969
17970@c %start of fragment
17971
17972Available @code{zabbix-agent-configuration} fields are:
17973
17974@deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent
17975The zabbix-agent package.
17976
17977@end deftypevr
17978
17979@deftypevr {@code{zabbix-agent-configuration} parameter} string user
17980User who will run the Zabbix agent.
17981
17982Defaults to @samp{"zabbix"}.
17983
17984@end deftypevr
17985
17986@deftypevr {@code{zabbix-agent-configuration} parameter} group group
17987Group who will run the Zabbix agent.
17988
17989Defaults to @samp{"zabbix"}.
17990
17991@end deftypevr
17992
17993@deftypevr {@code{zabbix-agent-configuration} parameter} string hostname
17994Unique, case sensitive hostname which is required for active checks and must
17995match hostname as configured on the server.
17996
17997Defaults to @samp{"Zabbix server"}.
17998
17999@end deftypevr
18000
18001@deftypevr {@code{zabbix-agent-configuration} parameter} string log-type
18002Specifies where log messages are written to:
18003
18004@itemize @bullet
18005@item
18006@code{system} - syslog.
18007
18008@item
18009@code{file} - file specified with @code{log-file} parameter.
18010
18011@item
18012@code{console} - standard output.
18013
18014@end itemize
18015
18016El valor predeterminado es @samp{""}.
18017
18018@end deftypevr
18019
18020@deftypevr {@code{zabbix-agent-configuration} parameter} string log-file
18021Log file name for @code{log-type} @code{file} parameter.
18022
18023Defaults to @samp{"/var/log/zabbix/agent.log"}.
18024
18025@end deftypevr
18026
18027@deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file
18028Name of PID file.
18029
18030Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}.
18031
18032@end deftypevr
18033
18034@deftypevr {@code{zabbix-agent-configuration} parameter} list server
18035List of IP addresses, optionally in CIDR notation, or hostnames of Zabbix
18036servers and Zabbix proxies. Incoming connections will be accepted only from
18037the hosts listed here.
18038
18039Defaults to @samp{("127.0.0.1")}.
18040
18041@end deftypevr
18042
18043@deftypevr {@code{zabbix-agent-configuration} parameter} list server-active
18044List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix
18045proxies for active checks. If port is not specified, default port is used.
18046If this parameter is not specified, active checks are disabled.
18047
18048Defaults to @samp{("127.0.0.1")}.
18049
18050@end deftypevr
18051
18052@deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options
18053Extra options will be appended to Zabbix server configuration file.
18054
18055El valor predeterminado es @samp{""}.
18056
18057@end deftypevr
18058
18059@deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files
18060You may include individual files or all files in a directory in the
18061configuration file.
18062
18063Defaults to @samp{()}.
18064
18065@end deftypevr
18066
18067@c %end of fragment
18068
18069@subsubheading Zabbix front-end
18070@cindex zabbix zabbix-front-end
18071
18072This service provides a WEB interface to Zabbix server.
18073
18074@c %start of fragment
18075
18076Available @code{zabbix-front-end-configuration} fields are:
18077
18078@deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx
18079Configuración de NGINX.
18080
18081@end deftypevr
18082
18083@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host
18084Database host name.
18085
18086Defaults to @samp{"localhost"}.
18087
18088@end deftypevr
18089
18090@deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port
18091Database port.
18092
18093Defaults to @samp{5432}.
18094
18095@end deftypevr
18096
18097@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name
18098Database name.
18099
18100Defaults to @samp{"zabbix"}.
18101
18102@end deftypevr
18103
18104@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user
18105Database user.
18106
18107Defaults to @samp{"zabbix"}.
18108
18109@end deftypevr
18110
18111@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password
18112Database password. Please, use @code{db-secret-file} instead.
18113
18114El valor predeterminado es @samp{""}.
18115
18116@end deftypevr
18117
18118@deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file
18119Secret file which will be appended to @file{zabbix.conf.php} file. This
18120file contains credentials for use by Zabbix front-end. You are expected to
18121create it manually.
18122
18123El valor predeterminado es @samp{""}.
18124
18125@end deftypevr
18126
18127@deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host
18128Zabbix server hostname.
18129
18130Defaults to @samp{"localhost"}.
18131
18132@end deftypevr
18133
18134@deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port
18135Zabbix server port.
18136
18137Defaults to @samp{10051}.
18138
18139@end deftypevr
18140
18141
18142@c %end of fragment
18143
18144@node Servicios Kerberos
18145@subsection Servicios Kerberos
18146@cindex Kerberos
18147
18148The @code{(gnu services kerberos)} module provides services relating to the
18149authentication protocol @dfn{Kerberos}.
18150
18151@subsubheading Servicio Krb5
18152
18153Programs using a Kerberos client library normally expect a configuration
18154file in @file{/etc/krb5.conf}. This service generates such a file from a
18155definition provided in the operating system declaration. It does not cause
18156any daemon to be started.
18157
18158No ``keytab'' files are provided by this service---you must explicitly
18159create them. This service is known to work with the MIT client library,
18160@code{mit-krb5}. Other implementations have not been tested.
18161
18162@defvr {Variable Scheme} krb5-service-type
18163A service type for Kerberos 5 clients.
18164@end defvr
18165
18166@noindent
18167Este es un ejemplo de su uso:
18168@lisp
18169(service krb5-service-type
18170 (krb5-configuration
18171 (default-realm "EXAMPLE.COM")
18172 (allow-weak-crypto? #t)
18173 (realms (list
18174 (krb5-realm
18175 (name "EXAMPLE.COM")
18176 (admin-server "groucho.example.com")
18177 (kdc "karl.example.com"))
18178 (krb5-realm
18179 (name "ARGRX.EDU")
18180 (admin-server "kerb-admin.argrx.edu")
18181 (kdc "keys.argrx.edu"))))))
18182@end lisp
18183
18184@noindent
18185This example provides a Kerberos@tie{}5 client configuration which:
18186@itemize
18187@item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both
18188of which have distinct administration servers and key distribution centers;
18189@item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly
18190specified by clients;
18191@item Accepts services which only support encryption types known to be weak.
18192@end itemize
18193
18194The @code{krb5-realm} and @code{krb5-configuration} types have many fields.
18195Only the most commonly used ones are described here. For a full list, and
18196more detailed explanation of each, see the MIT
18197@uref{http://web.mit.edu/kerberos/krb5-devel/doc/admin/conf_files/krb5_conf.html,,krb5.conf}
18198documentation.
18199
18200
18201@deftp {Tipo de datos} krb5-realm
18202@cindex realm, kerberos
18203@table @asis
18204@item @code{name}
18205This field is a string identifying the name of the realm. A common
18206convention is to use the fully qualified DNS name of your organization,
18207converted to upper case.
18208
18209@item @code{admin-server}
18210This field is a string identifying the host where the administration server
18211is running.
18212
18213@item @code{kdc}
18214This field is a string identifying the key distribution center for the
18215realm.
18216@end table
18217@end deftp
18218
18219@deftp {Tipo de datos} krb5-configuration
18220
18221@table @asis
18222@item @code{allow-weak-crypto?} (predeterminado: @code{#f})
18223If this flag is @code{#t} then services which only offer encryption
18224algorithms known to be weak will be accepted.
18225
18226@item @code{default-realm} (predeterminado: @code{#f})
18227This field should be a string identifying the default Kerberos realm for the
18228client. You should set this field to the name of your Kerberos realm. If
18229this value is @code{#f} then a realm must be specified with every Kerberos
18230principal when invoking programs such as @command{kinit}.
18231
18232@item @code{realms}
18233This should be a non-empty list of @code{krb5-realm} objects, which clients
18234may access. Normally, one of them will have a @code{name} field matching
18235the @code{default-realm} field.
18236@end table
18237@end deftp
18238
18239
18240@subsubheading Servicio PAM krb5
18241@cindex pam-krb5
18242
18243The @code{pam-krb5} service allows for login authentication and password
18244management via Kerberos. You will need this service if you want PAM enabled
18245applications to authenticate users using Kerberos.
18246
18247@defvr {Variable Scheme} pam-krb5-service-type
18248A service type for the Kerberos 5 PAM module.
18249@end defvr
18250
18251@deftp {Tipo de datos} pam-krb5-configuration
18252Data type representing the configuration of the Kerberos 5 PAM module This
18253type has the following parameters:
18254@table @asis
18255@item @code{pam-krb5} (predeterminado: @code{pam-krb5})
18256El paquete pam-krb5 usado.
18257
18258@item @code{minimum-uid} (predeterminado: @code{1000})
18259The smallest user ID for which Kerberos authentications should be
18260attempted. Local accounts with lower values will silently fail to
18261authenticate.
18262@end table
18263@end deftp
18264
18265
18266@node Servicios LDAP
18267@subsection Servicios LDAP
18268@cindex LDAP
18269@cindex nslcd, LDAP service
18270
18271The @code{(gnu services authentication)} module provides the
18272@code{nslcd-service-type}, which can be used to authenticate against an LDAP
18273server. In addition to configuring the service itself, you may want to add
18274@code{ldap} as a name service to the Name Service Switch. @xref{Selector de servicios de nombres} for detailed information.
18275
18276Here is a simple operating system declaration with a default configuration
18277of the @code{nslcd-service-type} and a Name Service Switch configuration
18278that consults the @code{ldap} name service last:
18279
18280@example
18281(use-service-modules authentication)
18282(use-modules (gnu system nss))
18283...
18284(operating-system
18285 ...
18286 (services
18287 (cons*
18288 (service nslcd-service-type)
18289 (service dhcp-client-service-type)
18290 %base-services))
18291 (name-service-switch
18292 (let ((services (list (name-service (name "db"))
18293 (name-service (name "files"))
18294 (name-service (name "ldap")))))
18295 (name-service-switch
18296 (inherit %mdns-host-lookup-nss)
18297 (password services)
18298 (shadow services)
18299 (group services)
18300 (netgroup services)
18301 (gshadow services)))))
18302@end example
18303
18304@c %start of generated documentation for nslcd-configuration
18305
18306Available @code{nslcd-configuration} fields are:
18307
18308@deftypevr {@code{nslcd-configuration} parameter} package nss-pam-ldapd
18309The @code{nss-pam-ldapd} package to use.
18310
18311@end deftypevr
18312
18313@deftypevr {@code{nslcd-configuration} parameter} maybe-number threads
18314The number of threads to start that can handle requests and perform LDAP
18315queries. Each thread opens a separate connection to the LDAP server. The
18316default is to start 5 threads.
18317
18318Defaults to @samp{disabled}.
18319
18320@end deftypevr
18321
18322@deftypevr {@code{nslcd-configuration} parameter} string uid
18323This specifies the user id with which the daemon should be run.
18324
18325Defaults to @samp{"nslcd"}.
18326
18327@end deftypevr
18328
18329@deftypevr {@code{nslcd-configuration} parameter} string gid
18330This specifies the group id with which the daemon should be run.
18331
18332Defaults to @samp{"nslcd"}.
18333
18334@end deftypevr
18335
18336@deftypevr {@code{nslcd-configuration} parameter} log-option log
18337This option controls the way logging is done via a list containing SCHEME
18338and LEVEL. The SCHEME argument may either be the symbols "none" or
18339"syslog", or an absolute file name. The LEVEL argument is optional and
18340specifies the log level. The log level may be one of the following symbols:
18341"crit", "error", "warning", "notice", "info" or "debug". All messages with
18342the specified log level or higher are logged.
18343
18344Defaults to @samp{("/var/log/nslcd" info)}.
18345
18346@end deftypevr
18347
18348@deftypevr {@code{nslcd-configuration} parameter} list uri
18349The list of LDAP server URIs. Normally, only the first server will be used
18350with the following servers as fall-back.
18351
18352Defaults to @samp{("ldap://localhost:389/")}.
18353
18354@end deftypevr
18355
18356@deftypevr {@code{nslcd-configuration} parameter} maybe-string ldap-version
18357The version of the LDAP protocol to use. The default is to use the maximum
18358version supported by the LDAP library.
18359
18360Defaults to @samp{disabled}.
18361
18362@end deftypevr
18363
18364@deftypevr {@code{nslcd-configuration} parameter} maybe-string binddn
18365Specifies the distinguished name with which to bind to the directory server
18366for lookups. The default is to bind anonymously.
18367
18368Defaults to @samp{disabled}.
18369
18370@end deftypevr
18371
18372@deftypevr {@code{nslcd-configuration} parameter} maybe-string bindpw
18373Specifies the credentials with which to bind. This option is only
18374applicable when used with binddn.
18375
18376Defaults to @samp{disabled}.
18377
18378@end deftypevr
18379
18380@deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmoddn
18381Specifies the distinguished name to use when the root user tries to modify a
18382user's password using the PAM module.
18383
18384Defaults to @samp{disabled}.
18385
18386@end deftypevr
18387
18388@deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmodpw
18389Specifies the credentials with which to bind if the root user tries to
18390change a user's password. This option is only applicable when used with
18391rootpwmoddn
18392
18393Defaults to @samp{disabled}.
18394
18395@end deftypevr
18396
18397@deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-mech
18398Specifies the SASL mechanism to be used when performing SASL authentication.
18399
18400Defaults to @samp{disabled}.
18401
18402@end deftypevr
18403
18404@deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-realm
18405Specifies the SASL realm to be used when performing SASL authentication.
18406
18407Defaults to @samp{disabled}.
18408
18409@end deftypevr
18410
18411@deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authcid
18412Specifies the authentication identity to be used when performing SASL
18413authentication.
18414
18415Defaults to @samp{disabled}.
18416
18417@end deftypevr
18418
18419@deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authzid
18420Specifies the authorization identity to be used when performing SASL
18421authentication.
18422
18423Defaults to @samp{disabled}.
18424
18425@end deftypevr
18426
18427@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean sasl-canonicalize?
18428Determines whether the LDAP server host name should be canonicalised. If
18429this is enabled the LDAP library will do a reverse host name lookup. By
18430default, it is left up to the LDAP library whether this check is performed
18431or not.
18432
18433Defaults to @samp{disabled}.
18434
18435@end deftypevr
18436
18437@deftypevr {@code{nslcd-configuration} parameter} maybe-string krb5-ccname
18438Set the name for the GSS-API Kerberos credentials cache.
18439
18440Defaults to @samp{disabled}.
18441
18442@end deftypevr
18443
18444@deftypevr {@code{nslcd-configuration} parameter} string base
18445The directory search base.
18446
18447Defaults to @samp{"dc=example,dc=com"}.
18448
18449@end deftypevr
18450
18451@deftypevr {@code{nslcd-configuration} parameter} scope-option scope
18452Specifies the search scope (subtree, onelevel, base or children). The
18453default scope is subtree; base scope is almost never useful for name service
18454lookups; children scope is not supported on all servers.
18455
18456Defaults to @samp{(subtree)}.
18457
18458@end deftypevr
18459
18460@deftypevr {@code{nslcd-configuration} parameter} maybe-deref-option deref
18461Specifies the policy for dereferencing aliases. The default policy is to
18462never dereference aliases.
18463
18464Defaults to @samp{disabled}.
18465
18466@end deftypevr
18467
18468@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean referrals
18469Specifies whether automatic referral chasing should be enabled. The default
18470behaviour is to chase referrals.
18471
18472Defaults to @samp{disabled}.
18473
18474@end deftypevr
18475
18476@deftypevr {@code{nslcd-configuration} parameter} list-of-map-entries maps
18477This option allows for custom attributes to be looked up instead of the
18478default RFC 2307 attributes. It is a list of maps, each consisting of the
18479name of a map, the RFC 2307 attribute to match and the query expression for
18480the attribute as it is available in the directory.
18481
18482Defaults to @samp{()}.
18483
18484@end deftypevr
18485
18486@deftypevr {@code{nslcd-configuration} parameter} list-of-filter-entries filters
18487A list of filters consisting of the name of a map to which the filter
18488applies and an LDAP search filter expression.
18489
18490Defaults to @samp{()}.
18491
18492@end deftypevr
18493
18494@deftypevr {@code{nslcd-configuration} parameter} maybe-number bind-timelimit
18495Specifies the time limit in seconds to use when connecting to the directory
18496server. The default value is 10 seconds.
18497
18498Defaults to @samp{disabled}.
18499
18500@end deftypevr
18501
18502@deftypevr {@code{nslcd-configuration} parameter} maybe-number timelimit
18503Specifies the time limit (in seconds) to wait for a response from the LDAP
18504server. A value of zero, which is the default, is to wait indefinitely for
18505searches to be completed.
18506
18507Defaults to @samp{disabled}.
18508
18509@end deftypevr
18510
18511@deftypevr {@code{nslcd-configuration} parameter} maybe-number idle-timelimit
18512Specifies the period if inactivity (in seconds) after which the con‐ nection
18513to the LDAP server will be closed. The default is not to time out
18514connections.
18515
18516Defaults to @samp{disabled}.
18517
18518@end deftypevr
18519
18520@deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-sleeptime
18521Specifies the number of seconds to sleep when connecting to all LDAP servers
18522fails. By default one second is waited between the first failure and the
18523first retry.
18524
18525Defaults to @samp{disabled}.
18526
18527@end deftypevr
18528
18529@deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-retrytime
18530Specifies the time after which the LDAP server is considered to be
18531permanently unavailable. Once this time is reached retries will be done
18532only once per this time period. The default value is 10 seconds.
18533
18534Defaults to @samp{disabled}.
18535
18536@end deftypevr
18537
18538@deftypevr {@code{nslcd-configuration} parameter} maybe-ssl-option ssl
18539Specifies whether to use SSL/TLS or not (the default is not to). If
18540'start-tls is specified then StartTLS is used rather than raw LDAP over SSL.
18541
18542Defaults to @samp{disabled}.
18543
18544@end deftypevr
18545
18546@deftypevr {@code{nslcd-configuration} parameter} maybe-tls-reqcert-option tls-reqcert
18547Specifies what checks to perform on a server-supplied certificate. The
18548meaning of the values is described in the ldap.conf(5) manual page.
18549
18550Defaults to @samp{disabled}.
18551
18552@end deftypevr
18553
18554@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertdir
18555Specifies the directory containing X.509 certificates for peer authen‐
18556tication. This parameter is ignored when using GnuTLS.
18557
18558Defaults to @samp{disabled}.
18559
18560@end deftypevr
18561
18562@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertfile
18563Specifies the path to the X.509 certificate for peer authentication.
18564
18565Defaults to @samp{disabled}.
18566
18567@end deftypevr
18568
18569@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-randfile
18570Specifies the path to an entropy source. This parameter is ignored when
18571using GnuTLS.
18572
18573Defaults to @samp{disabled}.
18574
18575@end deftypevr
18576
18577@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-ciphers
18578Specifies the ciphers to use for TLS as a string.
18579
18580Defaults to @samp{disabled}.
18581
18582@end deftypevr
18583
18584@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cert
18585Specifies the path to the file containing the local certificate for client
18586TLS authentication.
18587
18588Defaults to @samp{disabled}.
18589
18590@end deftypevr
18591
18592@deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-key
18593Specifies the path to the file containing the private key for client TLS
18594authentication.
18595
18596Defaults to @samp{disabled}.
18597
18598@end deftypevr
18599
18600@deftypevr {@code{nslcd-configuration} parameter} maybe-number pagesize
18601Set this to a number greater than 0 to request paged results from the LDAP
18602server in accordance with RFC2696. The default (0) is to not request paged
18603results.
18604
18605Defaults to @samp{disabled}.
18606
18607@end deftypevr
18608
18609@deftypevr {@code{nslcd-configuration} parameter} maybe-ignore-users-option nss-initgroups-ignoreusers
18610This option prevents group membership lookups through LDAP for the specified
18611users. Alternatively, the value 'all-local may be used. With that value
18612nslcd builds a full list of non-LDAP users on startup.
18613
18614Defaults to @samp{disabled}.
18615
18616@end deftypevr
18617
18618@deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-min-uid
18619This option ensures that LDAP users with a numeric user id lower than the
18620specified value are ignored.
18621
18622Defaults to @samp{disabled}.
18623
18624@end deftypevr
18625
18626@deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-uid-offset
18627This option specifies an offset that is added to all LDAP numeric user ids.
18628This can be used to avoid user id collisions with local users.
18629
18630Defaults to @samp{disabled}.
18631
18632@end deftypevr
18633
18634@deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-gid-offset
18635This option specifies an offset that is added to all LDAP numeric group
18636ids. This can be used to avoid user id collisions with local groups.
18637
18638Defaults to @samp{disabled}.
18639
18640@end deftypevr
18641
18642@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-nested-groups
18643If this option is set, the member attribute of a group may point to another
18644group. Members of nested groups are also returned in the higher level group
18645and parent groups are returned when finding groups for a specific user. The
18646default is not to perform extra searches for nested groups.
18647
18648Defaults to @samp{disabled}.
18649
18650@end deftypevr
18651
18652@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-getgrent-skipmembers
18653If this option is set, the group member list is not retrieved when looking
18654up groups. Lookups for finding which groups a user belongs to will remain
18655functional so the user will likely still get the correct groups assigned on
18656login.
18657
18658Defaults to @samp{disabled}.
18659
18660@end deftypevr
18661
18662@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-disable-enumeration
18663If this option is set, functions which cause all user/group entries to be
18664loaded from the directory will not succeed in doing so. This can
18665dramatically reduce LDAP server load in situations where there are a great
18666number of users and/or groups. This option is not recommended for most
18667configurations.
18668
18669Defaults to @samp{disabled}.
18670
18671@end deftypevr
18672
18673@deftypevr {@code{nslcd-configuration} parameter} maybe-string validnames
18674This option can be used to specify how user and group names are verified
18675within the system. This pattern is used to check all user and group names
18676that are requested and returned from LDAP.
18677
18678Defaults to @samp{disabled}.
18679
18680@end deftypevr
18681
18682@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean ignorecase
18683This specifies whether or not to perform searches using case-insensitive
18684matching. Enabling this could open up the system to authorization bypass
18685vulnerabilities and introduce nscd cache poisoning vulnerabilities which
18686allow denial of service.
18687
18688Defaults to @samp{disabled}.
18689
18690@end deftypevr
18691
18692@deftypevr {@code{nslcd-configuration} parameter} maybe-boolean pam-authc-ppolicy
18693This option specifies whether password policy controls are requested and
18694handled from the LDAP server when performing user authentication.
18695
18696Defaults to @samp{disabled}.
18697
18698@end deftypevr
18699
18700@deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authc-search
18701By default nslcd performs an LDAP search with the user's credentials after
18702BIND (authentication) to ensure that the BIND operation was successful. The
18703default search is a simple check to see if the user's DN exists. A search
18704filter can be specified that will be used instead. It should return at
18705least one entry.
18706
18707Defaults to @samp{disabled}.
18708
18709@end deftypevr
18710
18711@deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authz-search
18712This option allows flexible fine tuning of the authorisation check that
18713should be performed. The search filter specified is executed and if any
18714entries match, access is granted, otherwise access is denied.
18715
18716Defaults to @samp{disabled}.
18717
18718@end deftypevr
18719
18720@deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-password-prohibit-message
18721If this option is set password modification using pam_ldap will be denied
18722and the specified message will be presented to the user instead. The
18723message can be used to direct the user to an alternative means of changing
18724their password.
18725
18726Defaults to @samp{disabled}.
18727
18728@end deftypevr
18729
18730@deftypevr {@code{nslcd-configuration} parameter} list pam-services
18731List of pam service names for which LDAP authentication should suffice.
18732
18733Defaults to @samp{()}.
18734
18735@end deftypevr
18736
18737@c %end of generated documentation for nslcd-configuration
18738
18739
18740@node Servicios Web
18741@subsection Servicios Web
18742
18743@cindex web
18744@cindex www
18745@cindex HTTP
18746El módulo @code{(gnu services web)} proporciona el servidor HTTP Apache, el
18747servidor web nginx y también un recubrimiento del daemon de fastcgi.
18748
18749@subsubheading Servidor HTTP Apache
18750
18751@deffn {Variable Scheme} httpd-service-type
18752Service type for the @uref{https://httpd.apache.org/,Apache HTTP} server
18753(@dfn{httpd}). The value for this service type is a
18754@code{httpd-configuration} record.
18755
18756A simple example configuration is given below.
18757
18758@example
18759(service httpd-service-type
18760 (httpd-configuration
18761 (config
18762 (httpd-config-file
18763 (server-name "www.example.com")
18764 (document-root "/srv/http/www.example.com")))))
18765@end example
18766
18767Other services can also extend the @code{httpd-service-type} to add to the
18768configuration.
18769
18770@example
18771(simple-service 'mi-servidor-extra httpd-service-type
18772 (list
18773 (httpd-virtualhost
18774 "*:80"
18775 (list (string-append
18776 "ServerName "www.example.com
18777 DocumentRoot \"/srv/http/www.example.com\"")))))
18778@end example
18779@end deffn
18780
18781The details for the @code{httpd-configuration}, @code{httpd-module},
18782@code{httpd-config-file} and @code{httpd-virtualhost} record types are given
18783below.
18784
18785@deffn {Tipo de datos} httpd-configuration
18786This data type represents the configuration for the httpd service.
18787
18788@table @asis
18789@item @code{package} (predeterminado: @code{httpd})
18790El paquete httpd usado.
18791
18792@item @code{pid-file} (predeterminado: @code{"/var/run/httpd"})
18793El fichero pid usado por el servicio de Shepherd.
18794
18795@item @code{config} (predeterminado: @code{(httpd-config-file)})
18796The configuration file to use with the httpd service. The default value is a
18797@code{httpd-config-file} record, but this can also be a different
18798G-expression that generates a file, for example a @code{plain-file}. A file
18799outside of the store can also be specified through a string.
18800
18801@end table
18802@end deffn
18803
18804@deffn {Tipo de datos} httpd-module
18805This data type represents a module for the httpd service.
18806
18807@table @asis
18808@item @code{name}
18809The name of the module.
18810
18811@item @code{file}
18812The file for the module. This can be relative to the httpd package being
18813used, the absolute location of a file, or a G-expression for a file within
18814the store, for example @code{(file-append mod-wsgi "/modules/mod_wsgi.so")}.
18815
18816@end table
18817@end deffn
18818
18819@defvr {Variable Scheme} %default-httpd-modules
18820A default list of @code{httpd-module} objects.
18821@end defvr
18822
18823@deffn {Tipo de datos} httpd-config-file
18824This data type represents a configuration file for the httpd service.
18825
18826@table @asis
18827@item @code{modules} (predeterminados: @code{%default-httpd-modules})
18828The modules to load. Additional modules can be added here, or loaded by
18829additional configuration.
18830
18831For example, in order to handle requests for PHP files, you can use Apache’s
18832@code{mod_proxy_fcgi} module along with @code{php-fpm-service-type}:
18833
18834@example
18835(service httpd-service-type
18836 (httpd-configuration
18837 (config
18838 (httpd-config-file
18839 (modules (cons*
18840 (httpd-module
18841 (name "proxy_module")
18842 (file "modules/mod_proxy.so"))
18843 (httpd-module
18844 (name "proxy_fcgi_module")
18845 (file "modules/mod_proxy_fcgi.so"))
18846 %default-httpd-modules))
18847 (extra-config (list "\
18848<FilesMatch \\.php$>
18849 SetHandler \"proxy:unix:/var/run/php-fpm.sock|fcgi://localhost/\"
18850</FilesMatch>"))))))
18851(service php-fpm-service-type
18852 (php-fpm-configuration
18853 (socket "/var/run/php-fpm.sock")
18854 (socket-group "httpd")))
18855@end example
18856
18857@item @code{server-root} (predeterminado: @code{httpd})
18858The @code{ServerRoot} in the configuration file, defaults to the httpd
18859package. Directives including @code{Include} and @code{LoadModule} are taken
18860as relative to the server root.
18861
18862@item @code{server-name} (predeterminado: @code{#f})
18863The @code{ServerName} in the configuration file, used to specify the request
18864scheme, hostname and port that the server uses to identify itself.
18865
18866This doesn't need to be set in the server config, and can be specifyed in
18867virtual hosts. The default is @code{#f} to not specify a @code{ServerName}.
18868
18869@item @code{document-root} (predeterminado: @code{"/srv/http"})
18870The @code{DocumentRoot} from which files will be served.
18871
18872@item @code{listen} (predeterminado: @code{'("80")})
18873The list of values for the @code{Listen} directives in the config file. The
18874value should be a list of strings, when each string can specify the port
18875number to listen on, and optionally the IP address and protocol to use.
18876
18877@item @code{pid-file} (predeterminado: @code{"/var/run/httpd"})
18878The @code{PidFile} to use. This should match the @code{pid-file} set in the
18879@code{httpd-configuration} so that the Shepherd service is configured
18880correctly.
18881
18882@item @code{error-log} (predeterminado: @code{"/var/log/httpd/error_log"})
18883The @code{ErrorLog} to which the server will log errors.
18884
18885@item @code{user} (predeterminada: @code{"httpd"})
18886La usuaria como la que el servidor responderá a las peticiones.
18887
18888@item @code{group} (predeterminado: @code{"httpd"})
18889El grupo como el que el servidor responderá a las peticiones.
18890
18891@item @code{extra-config} (predeterminadas: @code{(list "TypesConfig etc/httpd/mime.types")})
18892A flat list of strings and G-expressions which will be added to the end of
18893the configuration file.
18894
18895Any values which the service is extended with will be appended to this list.
18896
18897@end table
18898@end deffn
18899
18900@deffn {Tipo de datos} httpd-virtualhost
18901This data type represents a virtualhost configuration block for the httpd
18902service.
18903
18904These should be added to the extra-config for the httpd-service.
18905
18906@example
18907(simple-service 'mi-servidor-extra httpd-service-type
18908 (list
18909 (httpd-virtualhost
18910 "*:80"
18911 (list (string-append
18912 "ServerName "www.example.com
18913 DocumentRoot \"/srv/http/www.example.com\"")))))
18914@end example
18915
18916@table @asis
18917@item @code{addresses-and-ports}
18918The addresses and ports for the @code{VirtualHost} directive.
18919
18920@item @code{contents}
18921The contents of the @code{VirtualHost} directive, this should be a list of
18922strings and G-expressions.
18923
18924@end table
18925@end deffn
18926
18927@subsubheading NGINX
18928
18929@deffn {Variable Scheme} nginx-service-type
18930Service type for the @uref{https://nginx.org/,NGinx} web server. The value
18931for this service type is a @code{<nginx-configuration>} record.
18932
18933A simple example configuration is given below.
18934
18935@example
18936(service nginx-service-type
18937 (nginx-configuration
18938 (server-blocks
18939 (list (nginx-server-configuration
18940 (server-name '("www.example.com"))
18941 (root "/srv/http/www.example.com"))))))
18942@end example
18943
18944In addition to adding server blocks to the service configuration directly,
18945this service can be extended by other services to add server blocks, as in
18946this example:
18947
18948@example
18949(simple-service 'mi-servidor-extra nginx-service-type
18950 (list (nginx-server-configuration
18951 (root "/srv/http/sitio-extra")
18952 (try-files (list "$uri" "$uri/index.html")))))
18953@end example
18954@end deffn
18955
18956At startup, @command{nginx} has not yet read its configuration file, so it
18957uses a default file to log error messages. If it fails to load its
18958configuration file, that is where error messages are logged. After the
18959configuration file is loaded, the default error log file changes as per
18960configuration. In our case, startup error messages can be found in
18961@file{/var/run/nginx/logs/error.log}, and after configuration in
18962@file{/var/log/nginx/error.log}. The second location can be changed with
18963the @var{log-directory} configuration option.
18964
18965@deffn {Tipo de datos} nginx-configuration
18966This data type represents the configuration for NGinx. Some configuration
18967can be done through this and the other provided record types, or
18968alternatively, a config file can be provided.
18969
18970@table @asis
18971@item @code{nginx} (predeterminado: @code{nginx})
18972El paquete nginx usado.
18973
18974@item @code{log-directory} (predeterminado: @code{"/var/log/nginx"})
18975The directory to which NGinx will write log files.
18976
18977@item @code{run-directory} (predeterminado: @code{"/var/run/nginx"})
18978The directory in which NGinx will create a pid file, and write temporary
18979files.
18980
18981@item @code{server-blocks} (predeterminados: @code{'()})
18982A list of @dfn{server blocks} to create in the generated configuration file,
18983the elements should be of type @code{<nginx-server-configuration>}.
18984
18985The following example would setup NGinx to serve @code{www.example.com} from
18986the @code{/srv/http/www.example.com} directory, without using HTTPS.
18987@example
18988(service nginx-service-type
18989 (nginx-configuration
18990 (server-blocks
18991 (list (nginx-server-configuration
18992 (server-name '("www.example.com"))
18993 (root "/srv/http/www.example.com"))))))
18994@end example
18995
18996@item @code{upstream-blocks} (predeterminados: @code{'()})
18997A list of @dfn{upstream blocks} to create in the generated configuration
18998file, the elements should be of type @code{<nginx-upstream-configuration>}.
18999
19000Configuring upstreams through the @code{upstream-blocks} can be useful when
19001combined with @code{locations} in the @code{<nginx-server-configuration>}
19002records. The following example creates a server configuration with one
19003location configuration, that will proxy requests to a upstream
19004configuration, which will handle requests with two servers.
19005
19006@example
19007(service
19008 nginx-service-type
19009 (nginx-configuration
19010 (server-blocks
19011 (list (nginx-server-configuration
19012 (server-name '("www.example.com"))
19013 (root "/srv/http/www.example.com")
19014 (locations
19015 (list
19016 (nginx-location-configuration
19017 (uri "/path1")
19018 (body '("proxy_pass http://server-proxy;"))))))))
19019 (upstream-blocks
19020 (list (nginx-upstream-configuration
19021 (name "server-proxy")
19022 (servers (list "server1.example.com"
19023 "server2.example.com")))))))
19024@end example
19025
19026@item @code{file} (predeterminado: @code{#f})
19027If a configuration @var{file} is provided, this will be used, rather than
19028generating a configuration file from the provided @code{log-directory},
19029@code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For
19030proper operation, these arguments should match what is in @var{file} to
19031ensure that the directories are created when the service is activated.
19032
19033This can be useful if you have an existing configuration file, or it's not
19034possible to do what is required through the other parts of the
19035nginx-configuration record.
19036
19037@item @code{server-names-hash-bucket-size} (predeterminado: @code{#f})
19038Bucket size for the server names hash tables, defaults to @code{#f} to use
19039the size of the processors cache line.
19040
19041@item @code{server-names-hash-bucket-max-size} (predeterminado: @code{#f})
19042Maximum bucket size for the server names hash tables.
19043
19044@item @code{extra-content} (predeterminado: @code{""})
19045Extra content for the @code{http} block. Should be string or a string
19046valued G-expression.
19047
19048@end table
19049@end deffn
19050
19051@deftp {Tipo de datos} nginx-server-configuration
19052Data type representing the configuration of an nginx server block. This
19053type has the following parameters:
19054
19055@table @asis
19056@item @code{listen} (predeterminadas: @code{'("80" "443 ssl")})
19057Each @code{listen} directive sets the address and port for IP, or the path
19058for a UNIX-domain socket on which the server will accept requests. Both
19059address and port, or only address or only port can be specified. An address
19060may also be a hostname, for example:
19061
19062@example
19063'("127.0.0.1:8000" "127.0.0.1" "8000" "*:8000" "localhost:8000")
19064@end example
19065
19066@item @code{server-name} (predeterminados: @code{(list 'default)})
19067A list of server names this server represents. @code{'default} represents
19068the default server for connections matching no other server.
19069
19070@item @code{root} (predeterminada: @code{"/srv/http"})
19071Raíz del sitio web que nginx proporcionará.
19072
19073@item @code{locations} (predeterminado: @code{'()})
19074A list of @dfn{nginx-location-configuration} or
19075@dfn{nginx-named-location-configuration} records to use within this server
19076block.
19077
19078@item @code{index} (predeterminado: @code{(list "index.html")})
19079Index files to look for when clients ask for a directory. If it cannot be
19080found, Nginx will send the list of files in the directory.
19081
19082@item @code{try-files} (predeterminado: @code{'()})
19083A list of files whose existence is checked in the specified order.
19084@code{nginx} will use the first file it finds to process the request.
19085
19086@item @code{ssl-certificate} (predeterminado: @code{#f})
19087Where to find the certificate for secure connections. Set it to @code{#f}
19088if you don't have a certificate or you don't want to use HTTPS.
19089
19090@item @code{ssl-certificate-key} (predeterminado: @code{#f})
19091Where to find the private key for secure connections. Set it to @code{#f}
19092if you don't have a key or you don't want to use HTTPS.
19093
19094@item @code{server-tokens?} (predeterminado: @code{#f})
19095Whether the server should add its configuration to response.
19096
19097@item @code{raw-content} (predeterminado: @code{'()})
19098A list of raw lines added to the server block.
19099
19100@end table
19101@end deftp
19102
19103@deftp {Tipo de datos} nginx-upstream-configuration
19104Data type representing the configuration of an nginx @code{upstream} block.
19105This type has the following parameters:
19106
19107@table @asis
19108@item @code{name}
19109Name for this group of servers.
19110
19111@item @code{servers}
19112Specify the addresses of the servers in the group. The address can be
19113specified as a IP address (e.g.@: @samp{127.0.0.1}), domain name (e.g.@:
19114@samp{backend1.example.com}) or a path to a UNIX socket using the prefix
19115@samp{unix:}. For addresses using an IP address or domain name, the default
19116port is 80, and a different port can be specified explicitly.
19117
19118@end table
19119@end deftp
19120
19121@deftp {Tipo de datos} nginx-location-configuration
19122Data type representing the configuration of an nginx @code{location} block.
19123This type has the following parameters:
19124
19125@table @asis
19126@item @code{uri}
19127URI which this location block matches.
19128
19129@anchor{nginx-location-configuration body}
19130@item @code{body}
19131Body of the location block, specified as a list of strings. This can contain
19132many configuration directives. For example, to pass requests to a upstream
19133server group defined using an @code{nginx-upstream-configuration} block, the
19134following directive would be specified in the body @samp{(list "proxy_pass
19135http://upstream-name;")}.
19136
19137@end table
19138@end deftp
19139
19140@deftp {Tipo de datos} nginx-named-location-configuration
19141Data type representing the configuration of an nginx named location block.
19142Named location blocks are used for request redirection, and not used for
19143regular request processing. This type has the following parameters:
19144
19145@table @asis
19146@item @code{name}
19147Name to identify this location block.
19148
19149@item @code{body}
19150@xref{nginx-location-configuration body}, as the body for named location
19151blocks can be used in a similar way to the
19152@code{nginx-location-configuration body}. One restriction is that the body
19153of a named location block cannot contain location blocks.
19154
19155@end table
19156@end deftp
19157
19158@subsubheading Varnish Cache
19159@cindex Varnish
19160Varnish is a fast cache server that sits in between web applications and end
19161users. It proxies requests from clients and caches the accessed URLs such
19162that multiple requests for the same resource only creates one request to the
19163back-end.
19164
19165@defvr {Variable Scheme} varnish-service-type
19166Service type for the Varnish daemon.
19167@end defvr
19168
19169@deftp {Tipo de datos} varnish-configuration
19170Data type representing the @code{varnish} service configuration. This type
19171has the following parameters:
19172
19173@table @asis
19174@item @code{package} (predeterminado: @code{varnish})
19175El paquete Varnish usado.
19176
19177@item @code{name} (predeterminado: @code{"default"})
19178A name for this Varnish instance. Varnish will create a directory in
19179@file{/var/varnish/} with this name and keep temporary files there. If the
19180name starts with a forward slash, it is interpreted as an absolute directory
19181name.
19182
19183Pass the @code{-n} argument to other Varnish programs to connect to the
19184named instance, e.g.@: @command{varnishncsa -n default}.
19185
19186@item @code{backend} (predeterminado: @code{"localhost:8080"})
19187The backend to use. This option has no effect if @code{vcl} is set.
19188
19189@item @code{vcl} (predeterminado: #f)
19190The @dfn{VCL} (Varnish Configuration Language) program to run. If this is
19191@code{#f}, Varnish will proxy @code{backend} using the default
19192configuration. Otherwise this must be a file-like object with valid VCL
19193syntax.
19194
19195@c Varnish does not support HTTPS, so keep this URL to avoid confusion.
19196For example, to mirror @url{http://www.gnu.org,www.gnu.org} with VCL you can
19197do something along these lines:
19198
19199@example
19200(define %espejo-gnu
19201 (plain-file
19202 "gnu.vcl"
19203 "vcl 4.1;
19204backend gnu @{ .host = "www.gnu.org"; @}"))
19205
19206(operating-system
19207 ...
19208 (services (cons (service varnish-service-type
19209 (varnish-configuration
19210 (listen '(":80"))
19211 (vcl %espejo-gnu)))
19212 %base-services)))
19213@end example
19214
19215The configuration of an already running Varnish instance can be inspected
19216and changed using the @command{varnishadm} program.
19217
19218Consult the @url{https://varnish-cache.org/docs/,Varnish User Guide} and
19219@url{https://book.varnish-software.com/4.0/,Varnish Book} for comprehensive
19220documentation on Varnish and its configuration language.
19221
19222@item @code{listen} (predeterminada: @code{'("localhost:80")})
19223Lista de direcciones en las que Varnish escucha.
19224
19225@item @code{storage} (predeterminado: @code{'("malloc,128m")})
19226List of storage backends that will be available in VCL.
19227
19228@item @code{parameters} (predeterminados: @code{'()})
19229List of run-time parameters in the form @code{'(("parameter" . "value"))}.
19230
19231@item @code{extra-options} (predeterminadas: @code{'()})
19232Additional arguments to pass to the @command{varnishd} process.
19233
19234@end table
19235@end deftp
19236
19237@subsubheading FastCGI
19238@cindex fastcgi
19239@cindex fcgiwrap
19240FastCGI is an interface between the front-end and the back-end of a web
19241service. It is a somewhat legacy facility; new web services should
19242generally just talk HTTP between the front-end and the back-end. However
19243there are a number of back-end services such as PHP or the optimized HTTP
19244Git repository access that use FastCGI, so we have support for it in Guix.
19245
19246To use FastCGI, you configure the front-end web server (e.g., nginx) to
19247dispatch some subset of its requests to the fastcgi backend, which listens
19248on a local TCP or UNIX socket. There is an intermediary @code{fcgiwrap}
19249program that sits between the actual backend process and the web server.
19250The front-end indicates which backend program to run, passing that
19251information to the @code{fcgiwrap} process.
19252
19253@defvr {Variable Scheme} fcgiwrap-service-type
19254A service type for the @code{fcgiwrap} FastCGI proxy.
19255@end defvr
19256
19257@deftp {Tipo de datos} fcgiwrap-configuration
19258Data type representing the configuration of the @code{fcgiwrap} service.
19259This type has the following parameters:
19260@table @asis
19261@item @code{package} (predeterminado: @code{fcgiwrap})
19262El paquete fcgiwrap usado.
19263
19264@item @code{socket} (predeterminado: @code{tcp:127.0.0.1:9000})
19265The socket on which the @code{fcgiwrap} process should listen, as a string.
19266Valid @var{socket} values include @code{unix:@var{/path/to/unix/socket}},
19267@code{tcp:@var{dot.ted.qu.ad}:@var{port}} and
19268@code{tcp6:[@var{ipv6_addr}]:port}.
19269
19270@item @code{user} (predeterminado: @code{fcgiwrap})
19271@itemx @code{group} (predeterminado: @code{fcgiwrap})
19272The user and group names, as strings, under which to run the @code{fcgiwrap}
19273process. The @code{fastcgi} service will ensure that if the user asks for
19274the specific user or group names @code{fcgiwrap} that the corresponding user
19275and/or group is present on the system.
19276
19277It is possible to configure a FastCGI-backed web service to pass HTTP
19278authentication information from the front-end to the back-end, and to allow
19279@code{fcgiwrap} to run the back-end process as a corresponding local user.
19280To enable this capability on the back-end., run @code{fcgiwrap} as the
19281@code{root} user and group. Note that this capability also has to be
19282configured on the front-end as well.
19283@end table
19284@end deftp
19285
19286@cindex php-fpm
19287PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI
19288implementation with some additional features useful for sites of any size.
19289
19290These features include:
19291@itemize @bullet
19292@item Adaptive process spawning
19293@item Basic statistics (similar to Apache's mod_status)
19294@item Advanced process management with graceful stop/start
19295@item Ability to start workers with different uid/gid/chroot/environment
19296and different php.ini (replaces safe_mode)
19297@item Stdout & stderr logging
19298@item Emergency restart in case of accidental opcode cache destruction
19299@item Accelerated upload support
19300@item Support for a "slowlog"
19301@item Enhancements to FastCGI, such as fastcgi_finish_request() -
19302a special function to finish request & flush all data while continuing to do
19303something time-consuming (video converting, stats processing, etc.)
19304@end itemize
19305...@: and much more.
19306
19307@defvr {Variable Scheme} php-fpm-service-type
19308Un tipo de servicio para @code{php-fpm}.
19309@end defvr
19310
19311@deftp {Tipo de datos} php-fpm-configuration
19312Tipo de datos para la configuración del servicio php-fpm.
19313@table @asis
19314@item @code{php} (predeterminado: @code{php})
19315El paquete php usado.
19316@item @code{socket} (predeterminado: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")})
19317La dirección desde la que FastCGI acepta peticiones. Las sintaxis válidas
19318son:
19319@table @asis
19320@item @code{"dir.ecc.ión.ip:puerto"}
19321Escucha con un socket TCP en la dirección especificada en un puerto
19322específico.
19323@item @code{"puerto"}
19324Escucha en un socket TCP en todas las direcciones sobre un puerto
19325específico.
19326@item @code{"/ruta/a/socket/unix"}
19327Escucha en un socket Unix.
19328@end table
19329
19330@item @code{user} (predeterminada: @code{php-fpm})
19331User who will own the php worker processes.
19332@item @code{group} (predeterminado: @code{php-fpm})
19333Group of the worker processes.
19334@item @code{socket-user} (predeterminado: @code{php-fpm})
19335User who can speak to the php-fpm socket.
19336@item @code{socket-group} (predeterminado: @code{php-fpm})
19337Group that can speak to the php-fpm socket.
19338@item @code{pid-file} (predeterminado: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.pid")})
19339The process id of the php-fpm process is written to this file once the
19340service has started.
19341@item @code{log-file} (predeterminado: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")})
19342Log for the php-fpm master process.
19343@item @code{process-manager} (predeterminado: @code{(php-fpm-dynamic-process-manager-configuration)})
19344Detailed settings for the php-fpm process manager. Must be either:
19345@table @asis
19346@item @code{<php-fpm-dynamic-process-manager-configuration>}
19347@item @code{<php-fpm-static-process-manager-configuration>}
19348@item @code{<php-fpm-on-demand-process-manager-configuration>}
19349@end table
19350@item @code{display-errors} (predeterminado @code{#f})
19351Determines whether php errors and warning should be sent to clients and
19352displayed in their browsers. This is useful for local php development, but
19353a security risk for public sites, as error messages can reveal passwords and
19354personal data.
19355@item @code{timezone} (default @code{#f})
19356Specifies @code{php_admin_value[date.timezone]} parameter.
19357@item @code{workers-logfile} (predeterminado @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.www.log")})
19358This file will log the @code{stderr} outputs of php worker processes. Can
19359be set to @code{#f} to disable logging.
19360@item @code{file} (predeterminado @code{#f})
19361An optional override of the whole configuration. You can use the
19362@code{mixed-text-file} function or an absolute filepath for it.
19363@end table
19364@end deftp
19365
19366@deftp {Tipo de datos} php-fpm-dynamic-process-manager-configuration
19367Data Type for the @code{dynamic} php-fpm process manager. With the
19368@code{dynamic} process manager, spare worker processes are kept around based
19369on it's configured limits.
19370@table @asis
19371@item @code{max-children} (predeterminados: @code{5})
19372Maximum of worker processes.
19373@item @code{start-servers} (predeterminados: @code{2})
19374How many worker processes should be started on start-up.
19375@item @code{min-spare-servers} (predeterminado: @code{1})
19376How many spare worker processes should be kept around at minimum.
19377@item @code{max-spare-servers} (predeterminados: @code{3})
19378How many spare worker processes should be kept around at maximum.
19379@end table
19380@end deftp
19381
19382@deftp {Tipo de datos} php-fpm-static-process-manager-configuration
19383Data Type for the @code{static} php-fpm process manager. With the
19384@code{static} process manager, an unchanging number of worker processes are
19385created.
19386@table @asis
19387@item @code{max-children} (predeterminados: @code{5})
19388Maximum of worker processes.
19389@end table
19390@end deftp
19391
19392@deftp {Tipo de datos} php-fpm-on-demand-process-manager-configuration
19393Data Type for the @code{on-demand} php-fpm process manager. With the
19394@code{on-demand} process manager, worker processes are only created as
19395requests arrive.
19396@table @asis
19397@item @code{max-children} (predeterminados: @code{5})
19398Maximum of worker processes.
19399@item @code{process-idle-timeout} (predeterminado: @code{10})
19400The time in seconds after which a process with no requests is killed.
19401@end table
19402@end deftp
19403
19404
19405@deffn {Procedimiento Scheme} nginx-php-fpm-location @
19406 [#:nginx-package nginx] @ [socket (string-append "/var/run/php" @
19407(version-major (package-version php)) @ "-fpm.sock")] A helper function to
19408quickly add php to an @code{nginx-server-configuration}.
19409@end deffn
19410
19411A simple services setup for nginx with php can look like this:
19412@example
19413(services (cons* (service dhcp-client-service-type)
19414 (service php-fpm-service-type)
19415 (service nginx-service-type
19416 (nginx-server-configuration
19417 (server-name '("example.com"))
19418 (root "/srv/http/")
19419 (locations
19420 (list (nginx-php-location)))
19421 (listen '("80"))
19422 (ssl-certificate #f)
19423 (ssl-certificate-key #f)))
19424 %base-services))
19425@end example
19426
19427@cindex cat-avatar-generator
19428The cat avatar generator is a simple service to demonstrate the use of
19429php-fpm in @code{Nginx}. It is used to generate cat avatar from a seed, for
19430instance the hash of a user's email address.
19431
19432@deffn {Scheme Procedure} cat-avatar-generator-service @
19433 [#:cache-dir "/var/cache/cat-avatar-generator"] @ [#:package
19434cat-avatar-generator] @ [#:configuration (nginx-server-configuration)]
19435Returns an nginx-server-configuration that inherits @code{configuration}.
19436It extends the nginx configuration to add a server block that serves
19437@code{package}, a version of cat-avatar-generator. During execution,
19438cat-avatar-generator will be able to use @code{cache-dir} as its cache
19439directory.
19440@end deffn
19441
19442A simple setup for cat-avatar-generator can look like this:
19443@example
19444(services (cons* (cat-avatar-generator-service
19445 #:configuration
19446 (nginx-server-configuration
19447 (server-name '("example.com"))))
19448 ...
19449 %base-services))
19450@end example
19451
19452@subsubheading Hpcguix-web
19453
19454@cindex hpcguix-web
19455The @uref{hpcguix-web, https://github.com/UMCUGenetics/hpcguix-web/} program
19456is a customizable web interface to browse Guix packages, initially designed
19457for users of high-performance computing (HPC) clusters.
19458
19459@defvr {Variable Scheme} hpcguix-web-service-type
19460El tipo de servicio para @code{hpcguix-web}.
19461@end defvr
19462
19463@deftp {Tipo de datos} hpcguix-web-configuration
19464El tipo de datos para la configuración del servicio hpcguix-web.
19465
19466@table @asis
19467@item @code{specs}
19468A gexp (@pxref{Expresiones-G}) specifying the hpcguix-web service
19469configuration. The main items available in this spec are:
19470
19471@table @asis
19472@item @code{title-prefix} (predeterminado: @code{"hpcguix | "})
19473El prefijo del título de la página.
19474
19475@item @code{guix-command} (predeterminada: @code{"guix"})
19476La orden @command{guix}.
19477
19478@item @code{package-filter-proc} (predeterminado: @code{(const #t)})
19479A procedure specifying how to filter packages that are displayed.
19480
19481@item @code{package-page-extension-proc} (predeterminado: @code{(const '())})
19482Extension package for @code{hpcguix-web}.
19483
19484@item @code{menu} (predeterminadas: @code{'()})
19485Entradas adicionales en el menú de la página.
19486
19487@item @code{channels} (predeterminados: @code{%default-channels})
19488List of channels from which the package list is built (@pxref{Canales}).
19489
19490@item @code{package-list-expiration} (predeterminado: @code{(* 12 3600)})
19491The expiration time, in seconds, after which the package list is rebuilt
19492from the latest instances of the given channels.
19493@end table
19494
19495See the hpcguix-web repository for a
19496@uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm,
19497complete example}.
19498
19499@item @code{package} (predeterminado: @code{hpcguix-web})
19500The hpcguix-web package to use.
19501@end table
19502@end deftp
19503
19504A typical hpcguix-web service declaration looks like this:
19505
19506@example
19507(service hpcguix-web-service-type
19508 (hpcguix-web-configuration
19509 (specs
19510 #~(define site-config
19511 (hpcweb-configuration
19512 (title-prefix "Guix-HPC - ")
19513 (menu '(("/about" "ABOUT"))))))))
19514@end example
19515
19516@quotation Nota
19517The hpcguix-web service periodically updates the package list it publishes
19518by pulling channels from Git. To that end, it needs to access X.509
19519certificates so that it can authenticate Git servers when communicating over
19520HTTPS, and it assumes that @file{/etc/ssl/certs} contains those
19521certificates.
19522
19523Thus, make sure to add @code{nss-certs} or another certificate package to
19524the @code{packages} field of your configuration. @ref{Certificados X.509},
19525for more information on X.509 certificates.
19526@end quotation
19527
19528@node Servicios de certificados
19529@subsection Servicios de certificados
19530
19531@cindex Web
19532@cindex HTTP, HTTPS
19533@cindex Let's Encrypt
19534@cindex certificados TLS
19535The @code{(gnu services certbot)} module provides a service to automatically
19536obtain a valid TLS certificate from the Let's Encrypt certificate
19537authority. These certificates can then be used to serve content securely
19538over HTTPS or other TLS-based protocols, with the knowledge that the client
19539will be able to verify the server's authenticity.
19540
19541@url{https://letsencrypt.org/, Let's Encrypt} provides the @code{certbot}
19542tool to automate the certification process. This tool first securely
19543generates a key on the server. It then makes a request to the Let's Encrypt
19544certificate authority (CA) to sign the key. The CA checks that the request
19545originates from the host in question by using a challenge-response protocol,
19546requiring the server to provide its response over HTTP. If that protocol
19547completes successfully, the CA signs the key, resulting in a certificate.
19548That certificate is valid for a limited period of time, and therefore to
19549continue to provide TLS services, the server needs to periodically ask the
19550CA to renew its signature.
19551
19552The certbot service automates this process: the initial key generation, the
19553initial certification request to the Let's Encrypt service, the web server
19554challenge/response integration, writing the certificate to disk, the
19555automated periodic renewals, and the deployment tasks associated with the
19556renewal (e.g.@: reloading services, copying keys with different
19557permissions).
19558
19559Certbot is run twice a day, at a random minute within the hour. It won't do
19560anything until your certificates are due for renewal or revoked, but running
19561it regularly would give your service a chance of staying online in case a
19562Let's Encrypt-initiated revocation happened for some reason.
19563
19564By using this service, you agree to the ACME Subscriber Agreement, which can
19565be found there: @url{https://acme-v01.api.letsencrypt.org/directory}.
19566
19567@defvr {Variable Scheme} certbot-service-type
19568A service type for the @code{certbot} Let's Encrypt client. Its value must
19569be a @code{certbot-configuration} record as in this example:
19570
19571@example
19572(define %nginx-deploy-hook
19573 (program-file
19574 "nginx-deploy-hook"
19575 #~(let ((pid (call-with-input-file "/var/run/nginx/pid" read)))
19576 (kill pid SIGHUP))))
19577
19578(service certbot-service-type
19579 (certbot-configuration
19580 (email "foo@@example.net")
19581 (certificates
19582 (list
19583 (certificate-configuration
19584 (domains '("example.net" "www.example.net"))
19585 (deploy-hook %nginx-deploy-hook))
19586 (certificate-configuration
19587 (domains '("bar.example.net")))))))
19588@end example
19589
19590See below for details about @code{certbot-configuration}.
19591@end defvr
19592
19593@deftp {Tipo de datos} certbot-configuration
19594Data type representing the configuration of the @code{certbot} service.
19595This type has the following parameters:
19596
19597@table @asis
19598@item @code{package} (predeterminado: @code{certbot})
19599El paquete certbot usado.
19600
19601@item @code{webroot} (predeterminado: @code{/var/www})
19602The directory from which to serve the Let's Encrypt challenge/response
19603files.
19604
19605@item @code{certificates} (predeterminados: @code{()})
19606A list of @code{certificates-configuration}s for which to generate
19607certificates and request signatures. Each certificate has a @code{name} and
19608several @code{domains}.
19609
19610@item @code{email}
19611Mandatory email used for registration, recovery contact, and important
19612account notifications.
19613
19614@item @code{rsa-key-size} (predeterminado: @code{2048})
19615Tamaño de la clave RSA.
19616
19617@item @code{default-location} (predeterminada: @i{vea a continuación})
19618The default @code{nginx-location-configuration}. Because @code{certbot}
19619needs to be able to serve challenges and responses, it needs to be able to
19620run a web server. It does so by extending the @code{nginx} web service with
19621an @code{nginx-server-configuration} listening on the @var{domains} on port
1962280, and which has a @code{nginx-location-configuration} for the
19623@code{/.well-known/} URI path subspace used by Let's Encrypt. @xref{Servicios Web}, for more on these nginx configuration data types.
19624
19625Requests to other URL paths will be matched by the @code{default-location},
19626which if present is added to all @code{nginx-server-configuration}s.
19627
19628By default, the @code{default-location} will issue a redirect from
19629@code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving
19630you to define what to serve on your site via @code{https}.
19631
19632Pass @code{#f} to not issue a default location.
19633@end table
19634@end deftp
19635
19636@deftp {Tipo de datos} certificate-configuration
19637Data type representing the configuration of a certificate. This type has
19638the following parameters:
19639
19640@table @asis
19641@item @code{name} (predeterminado: @i{vea a continuación})
19642This name is used by Certbot for housekeeping and in file paths; it doesn't
19643affect the content of the certificate itself. To see certificate names, run
19644@code{certbot certificates}.
19645
19646Its default is the first provided domain.
19647
19648@item @code{domains} (predeterminado: @code{()})
19649The first domain provided will be the subject CN of the certificate, and all
19650domains will be Subject Alternative Names on the certificate.
19651
19652@item @code{deploy-hook} (predeterminado: @code{#f})
19653Command to be run in a shell once for each successfully issued certificate.
19654For this command, the shell variable @code{$RENEWED_LINEAGE} will point to
19655the config live subdirectory (for example,
19656@samp{"/etc/letsencrypt/live/example.com"}) containing the new certificates
19657and keys; the shell variable @code{$RENEWED_DOMAINS} will contain a
19658space-delimited list of renewed certificate domains (for example,
19659@samp{"example.com www.example.com"}.
19660
19661@end table
19662@end deftp
19663
19664For each @code{certificate-configuration}, the certificate is saved to
19665@code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is saved
19666to @code{/etc/letsencrypt/live/@var{name}/privkey.pem}.
19667@node Servicios DNS
19668@subsection Servicios DNS
19669@cindex DNS (domain name system)
19670@cindex domain name system (DNS)
19671
19672The @code{(gnu services dns)} module provides services related to the
19673@dfn{domain name system} (DNS). It provides a server service for hosting an
19674@emph{authoritative} DNS server for multiple zones, slave or master. This
19675service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a caching
19676and forwarding DNS server for the LAN, which uses
19677@uref{http://www.thekelleys.org.uk/dnsmasq/doc.html, dnsmasq}.
19678
19679@subsubheading Servicio Knot
19680
19681An example configuration of an authoritative server for two zones, one
19682master and one slave, is:
19683
19684@lisp
19685(define-zone-entries example.org.zone
19686;; Name TTL Class Type Data
19687 ("@@" "" "IN" "A" "127.0.0.1")
19688 ("@@" "" "IN" "NS" "ns")
19689 ("ns" "" "IN" "A" "127.0.0.1"))
19690
19691(define master-zone
19692 (knot-zone-configuration
19693 (domain "example.org")
19694 (zone (zone-file
19695 (origin "example.org")
19696 (entries example.org.zone)))))
19697
19698(define slave-zone
19699 (knot-zone-configuration
19700 (domain "plop.org")
19701 (dnssec-policy "default")
19702 (master (list "plop-master"))))
19703
19704(define plop-master
19705 (knot-remote-configuration
19706 (id "plop-master")
19707 (address (list "208.76.58.171"))))
19708
19709(operating-system
19710 ;; ...
19711 (services (cons* (service knot-service-type
19712 (knot-configuration
19713 (remotes (list plop-master))
19714 (zones (list master-zone slave-zone))))
19715 ;; ...
19716 %base-services)))
19717@end lisp
19718
19719@deffn {Variable Scheme} knot-service-type
19720This is the type for the Knot DNS server.
19721
19722Knot DNS is an authoritative DNS server, meaning that it can serve multiple
19723zones, that is to say domain names you would buy from a registrar. This
19724server is not a resolver, meaning that it can only resolve names for which
19725it is authoritative. This server can be configured to serve zones as a
19726master server or a slave server as a per-zone basis. Slave zones will get
19727their data from masters, and will serve it as an authoritative server. From
19728the point of view of a resolver, there is no difference between master and
19729slave.
19730
19731The following data types are used to configure the Knot DNS server:
19732@end deffn
19733
19734@deftp {Tipo de datos} knot-key-configuration
19735Data type representing a key. This type has the following parameters:
19736
19737@table @asis
19738@item @code{id} (predeterminado: @code{""})
19739An identifier for other configuration fields to refer to this key. IDs must
19740be unique and must not be empty.
19741
19742@item @code{algorithm} (predeterminado: @code{#f})
19743The algorithm to use. Choose between @code{#f}, @code{'hmac-md5},
19744@code{'hmac-sha1}, @code{'hmac-sha224}, @code{'hmac-sha256},
19745@code{'hmac-sha384} and @code{'hmac-sha512}.
19746
19747@item @code{secret} (predeterminado: @code{""})
19748The secret key itself.
19749
19750@end table
19751@end deftp
19752
19753@deftp {Tipo de datos} knot-acl-configuration
19754Data type representing an Access Control List (ACL) configuration. This
19755type has the following parameters:
19756
19757@table @asis
19758@item @code{id} (predeterminado: @code{""})
19759An identifier for ether configuration fields to refer to this key. IDs must
19760be unique and must not be empty.
19761
19762@item @code{address} (predeterminada: @code{'()})
19763An ordered list of IP addresses, network subnets, or network ranges
19764represented with strings. The query must match one of them. Empty value
19765means that address match is not required.
19766
19767@item @code{key} (predeterminada: @code{'()})
19768An ordered list of references to keys represented with strings. The string
19769must match a key ID defined in a @code{knot-key-configuration}. No key
19770means that a key is not require to match that ACL.
19771
19772@item @code{action} (predeterminada: @code{'()})
19773An ordered list of actions that are permitted or forbidden by this ACL.
19774Possible values are lists of zero or more elements from @code{'transfer},
19775@code{'notify} and @code{'update}.
19776
19777@item @code{deny?} (predeterminado: @code{#f})
19778When true, the ACL defines restrictions. Listed actions are forbidden.
19779When false, listed actions are allowed.
19780
19781@end table
19782@end deftp
19783
19784@deftp {Tipo de datos} zone-entry
19785Data type represnting a record entry in a zone file. This type has the
19786following parameters:
19787
19788@table @asis
19789@item @code{name} (predeterminado: @code{"@@"})
19790The name of the record. @code{"@@"} refers to the origin of the zone.
19791Names are relative to the origin of the zone. For example, in the
19792@code{example.org} zone, @code{"ns.example.org"} actually refers to
19793@code{ns.example.org.example.org}. Names ending with a dot are absolute,
19794which means that @code{"ns.example.org."} refers to @code{ns.example.org}.
19795
19796@item @code{ttl} (predeterminado: @code{""})
19797The Time-To-Live (TTL) of this record. If not set, the default TTL is used.
19798
19799@item @code{class} (predeterminada: @code{"IN"})
19800The class of the record. Knot currently supports only @code{"IN"} and
19801partially @code{"CH"}.
19802
19803@item @code{type} (predeterminado: @code{"A"})
19804The type of the record. Common types include A (IPv4 address), AAAA (IPv6
19805address), NS (Name Server) and MX (Mail eXchange). Many other types are
19806defined.
19807
19808@item @code{data} (predeterminados: @code{""})
19809The data contained in the record. For instance an IP address associated
19810with an A record, or a domain name associated with an NS record. Remember
19811that domain names are relative to the origin unless they end with a dot.
19812
19813@end table
19814@end deftp
19815
19816@deftp {Tipo de datos} zone-file
19817Data type representing the content of a zone file. This type has the
19818following parameters:
19819
19820@table @asis
19821@item @code{entries} (predeterminadas: @code{'()})
19822The list of entries. The SOA record is taken care of, so you don't need to
19823put it in the list of entries. This list should probably contain an entry
19824for your primary authoritative DNS server. Other than using a list of
19825entries directly, you can use @code{define-zone-entries} to define a object
19826containing the list of entries more easily, that you can later pass to the
19827@code{entries} field of the @code{zone-file}.
19828
19829@item @code{origin} (predeterminado: @code{""})
19830The name of your zone. This parameter cannot be empty.
19831
19832@item @code{ns} (predeterminado: @code{"ns"})
19833The domain of your primary authoritative DNS server. The name is relative
19834to the origin, unless it ends with a dot. It is mandatory that this primary
19835DNS server corresponds to an NS record in the zone and that it is associated
19836to an IP address in the list of entries.
19837
19838@item @code{mail} (predeterminado: @code{"hostmaster"})
19839An email address people can contact you at, as the owner of the zone. This
19840is translated as @code{<mail>@@<origin>}.
19841
19842@item @code{serial} (predeterminado: @code{1})
19843The serial number of the zone. As this is used to keep track of changes by
19844both slaves and resolvers, it is mandatory that it @emph{never} decreases.
19845Always increment it when you make a change in your zone.
19846
19847@item @code{refresh} (predeterminado: @code{(* 2 24 3600)})
19848The frequency at which slaves will do a zone transfer. This value is a
19849number of seconds. It can be computed by multiplications or with
19850@code{(string->duration)}.
19851
19852@item @code{retry} (predeterminado: @code{(* 15 60)})
19853The period after which a slave will retry to contact its master when it
19854fails to do so a first time.
19855
19856@item @code{expiry} (predeterminado: @code{(* 14 24 3600)})
19857Default TTL of records. Existing records are considered correct for at most
19858this amount of time. After this period, resolvers will invalidate their
19859cache and check again that it still exists.
19860
19861@item @code{nx} (predeterminado: @code{3600})
19862Default TTL of inexistant records. This delay is usually short because you
19863want your new domains to reach everyone quickly.
19864
19865@end table
19866@end deftp
19867
19868@deftp {Tipo de datos} knot-remote-configuration
19869Data type representing a remote configuration. This type has the following
19870parameters:
19871
19872@table @asis
19873@item @code{id} (predeterminado: @code{""})
19874An identifier for other configuration fields to refer to this remote. IDs
19875must be unique and must not be empty.
19876
19877@item @code{address} (predeterminada: @code{'()})
19878An ordered list of destination IP addresses. Addresses are tried in
19879sequence. An optional port can be given with the @@ separator. For
19880instance: @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53.
19881
19882@item @code{via} (predeterminada: @code{'()})
19883An ordered list of source IP addresses. An empty list will have Knot choose
19884an appropriate source IP. An optional port can be given with the @@
19885separator. The default is to choose at random.
19886
19887@item @code{key} (predeterminada: @code{#f})
19888A reference to a key, that is a string containing the identifier of a key
19889defined in a @code{knot-key-configuration} field.
19890
19891@end table
19892@end deftp
19893
19894@deftp {Tipo de datos} knot-keystore-configuration
19895Data type representing a keystore to hold dnssec keys. This type has the
19896following parameters:
19897
19898@table @asis
19899@item @code{id} (predeterminado: @code{""})
19900The id of the keystore. It must not be empty.
19901
19902@item @code{backend} (predeterminado: @code{'pem})
19903El motor en el que se almacenan las claves. Puede ser @code{'pem} o
19904@code{'pkcs11}.
19905
19906@item @code{config} (predeterminada: @code{"/var/lib/knot/keys/keys"})
19907The configuration string of the backend. An example for the PKCS#11 is:
19908@code{"pkcs11:token=knot;pin-value=1234
19909/gnu/store/.../lib/pkcs11/libsofthsm2.so"}. For the pem backend, the string
19910reprensents a path in the file system.
19911
19912@end table
19913@end deftp
19914
19915@deftp {Tipo de datos} knot-policy-configuration
19916Data type representing a dnssec policy. Knot DNS is able to automatically
19917sign your zones. It can either generate and manage your keys automatically
19918or use keys that you generate.
19919
19920Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that
19921is used to sign the second, and a Zone Signing Key (ZSK) that is used to
19922sign the zone. In order to be trusted, the KSK needs to be present in the
19923parent zone (usually a top-level domain). If your registrar supports
19924dnssec, you will have to send them your KSK's hash so they can add a DS
19925record in their zone. This is not automated and need to be done each time
19926you change your KSK.
19927
19928The policy also defines the lifetime of keys. Usually, ZSK can be changed
19929easily and use weaker cryptographic functions (they use lower parameters) in
19930order to sign records quickly, so they are changed often. The KSK however
19931requires manual interaction with the registrar, so they are changed less
19932often and use stronger parameters because they sign only one record.
19933
19934Este tipo tiene los siguientes parámetros:
19935
19936@table @asis
19937@item @code{id} (predeterminado: @code{""})
19938The id of the policy. It must not be empty.
19939
19940@item @code{keystore} (predeterminado: @code{"default"})
19941A reference to a keystore, that is a string containing the identifier of a
19942keystore defined in a @code{knot-keystore-configuration} field. The
19943@code{"default"} identifier means the default keystore (a kasp database that
19944was setup by this service).
19945
19946@item @code{manual?} (predeterminado: @code{#f})
19947Whether the key management is manual or automatic.
19948
19949@item @code{single-type-signing?} (predeterminado: @code{#f})
19950When @code{#t}, use the Single-Type Signing Scheme.
19951
19952@item @code{algorithm} (predeterminado: @code{"ecdsap256sha256"})
19953An algorithm of signing keys and issued signatures.
19954
19955@item @code{ksk-size} (predeterminado: @code{256})
19956The length of the KSK. Note that this value is correct for the default
19957algorithm, but would be unsecure for other algorithms.
19958
19959@item @code{zsk-size} (predeterminado: @code{256})
19960The length of the ZSK. Note that this value is correct for the default
19961algorithm, but would be unsecure for other algorithms.
19962
19963@item @code{dnskey-ttl} (predeterminado: @code{'default})
19964The TTL value for DNSKEY records added into zone apex. The special
19965@code{'default} value means same as the zone SOA TTL.
19966
19967@item @code{zsk-lifetime} (predeterminado: @code{(* 30 24 3600)})
19968The period between ZSK publication and the next rollover initiation.
19969
19970@item @code{propagation-delay} (predeterminado: @code{(* 24 3600)})
19971An extra delay added for each key rollover step. This value should be high
19972enough to cover propagation of data from the master server to all slaves.
19973
19974@item @code{rrsig-lifetime} (predeterminado: @code{(* 14 24 3600)})
19975A validity period of newly issued signatures.
19976
19977@item @code{rrsig-refresh} (predeterminado: @code{(* 7 24 3600)})
19978A period how long before a signature expiration the signature will be
19979refreshed.
19980
19981@item @code{nsec3?} (predeterminado: @code{#f})
19982When @code{#t}, NSEC3 will be used instead of NSEC.
19983
19984@item @code{nsec3-iterations} (predeterminado: @code{5})
19985The number of additional times the hashing is performed.
19986
19987@item @code{nsec3-salt-length} (predeterminado: @code{8})
19988The length of a salt field in octets, which is appended to the original
19989owner name before hashing.
19990
19991@item @code{nsec3-salt-lifetime} (predeterminado: @code{(* 30 24 3600)})
19992The validity period of newly issued salt field.
19993
19994@end table
19995@end deftp
19996
19997@deftp {Tipo de datos} knot-zone-configuration
19998Data type representing a zone served by Knot. This type has the following
19999parameters:
20000
20001@table @asis
20002@item @code{domain} (predeterminado: @code{""})
20003The domain served by this configuration. It must not be empty.
20004
20005@item @code{file} (predeterminado: @code{""})
20006The file where this zone is saved. This parameter is ignored by master
20007zones. Empty means default location that depends on the domain name.
20008
20009@item @code{zone} (predeterminado: @code{(zone-file)})
20010The content of the zone file. This parameter is ignored by slave zones. It
20011must contain a zone-file record.
20012
20013@item @code{master} (predeterminado: @code{'()})
20014A list of master remotes. When empty, this zone is a master. When set,
20015this zone is a slave. This is a list of remotes identifiers.
20016
20017@item @code{ddns-master} (predeterminado: @code{#f})
20018The main master. When empty, it defaults to the first master in the list of
20019masters.
20020
20021@item @code{notify} (predeterminado: @code{'()})
20022A list of slave remote identifiers.
20023
20024@item @code{acl} (predeterminado: @code{'()})
20025A list of acl identifiers.
20026
20027@item @code{semantic-checks?} (predeterminado: @code{#f})
20028When set, this adds more semantic checks to the zone.
20029
20030@item @code{disable-any?} (predeterminado: @code{#f})
20031When set, this forbids queries of the ANY type.
20032
20033@item @code{zonefile-sync} (predeterminado: @code{0})
20034The delay between a modification in memory and on disk. 0 means immediate
20035synchronization.
20036
20037@item @code{serial-policy} (predeterminado: @code{'increment})
20038A policy between @code{'increment} and @code{'unixtime}.
20039
20040@end table
20041@end deftp
20042
20043@deftp {Tipo de datos} knot-configuration
20044Data type representing the Knot configuration. This type has the following
20045parameters:
20046
20047@table @asis
20048@item @code{knot} (predeterminado: @code{knot})
20049El paquete Knot.
20050
20051@item @code{run-directory} (predeterminado: @code{"/var/run/knot"})
20052The run directory. This directory will be used for pid file and sockets.
20053
20054@item @code{listen-v4} (predeterminada: @code{"0.0.0.0"})
20055La dirección IP en la que escuchar.
20056
20057@item @code{listen-v6} (predeterminada: @code{"::"})
20058La dirección IP en la que escuchar.
20059
20060@item @code{listen-port} (predeterminado: @code{53})
20061El puerto en el que escuchar.
20062
20063@item @code{keys} (predeterminada: @code{'()})
20064The list of knot-key-configuration used by this configuration.
20065
20066@item @code{acls} (predeterminado: @code{'()})
20067The list of knot-acl-configuration used by this configuration.
20068
20069@item @code{remotes} (predeterminada: @code{'()})
20070The list of knot-remote-configuration used by this configuration.
20071
20072@item @code{zones} (predeterminada: @code{'()})
20073The list of knot-zone-configuration used by this configuration.
20074
20075@end table
20076@end deftp
20077
20078@subsubheading Servicio Dnsmasq
20079
20080@deffn {Variable Scheme} dnsmasq-service-type
20081This is the type of the dnsmasq service, whose value should be an
20082@code{dnsmasq-configuration} object as in this example:
20083
20084@example
20085(service dnsmasq-service-type
20086 (dnsmasq-configuration
20087 (no-resolv? #t)
20088 (servers '("192.168.1.1"))))
20089@end example
20090@end deffn
20091
20092@deftp {Tipo de datos} dnsmasq-configuration
20093Data type representing the configuration of dnsmasq.
20094
20095@table @asis
20096@item @code{package} (predeterminado: @var{dnsmasq})
20097Package object of the dnsmasq server.
20098
20099@item @code{no-hosts?} (predeterminado: @code{#f})
20100When true, don't read the hostnames in /etc/hosts.
20101
20102@item @code{port} (predeterminado: @code{53})
20103The port to listen on. Setting this to zero completely disables DNS
20104responses, leaving only DHCP and/or TFTP functions.
20105
20106@item @code{local-service?} (predeterminado: @code{#t})
20107Accept DNS queries only from hosts whose address is on a local subnet, ie a
20108subnet for which an interface exists on the server.
20109
20110@item @code{listen-addresses} (predeterminadas: @code{'()})
20111Escucha en las direcciones IP proporcionadas.
20112
20113@item @code{resolv-file} (predeterminado: @code{"/etc/resolv.conf"})
20114The file to read the IP address of the upstream nameservers from.
20115
20116@item @code{no-resolv?} (predeterminado: @code{#f})
20117When true, don't read @var{resolv-file}.
20118
20119@item @code{servers} (predeterminados: @code{'()})
20120Specify IP address of upstream servers directly.
20121
20122@item @code{cache-size} (predeterminado: @code{150})
20123Set the size of dnsmasq's cache. Setting the cache size to zero disables
20124caching.
20125
20126@item @code{negative-cache?} (predeterminado: @code{#t})
20127When false, disable negative caching.
20128
20129@end table
20130@end deftp
20131
20132@subsubheading Servicio ddclient
20133
20134@cindex ddclient
20135The ddclient service described below runs the ddclient daemon, which takes
20136care of automatically updating DNS entries for service providers such as
20137@uref{https://dyn.com/dns/, Dyn}.
20138
20139The following example show instantiates the service with its default
20140configuration:
20141
20142@example
20143(service ddclient-service-type)
20144@end example
20145
20146Note that ddclient needs to access credentials that are stored in a
20147@dfn{secret file}, by default @file{/etc/ddclient/secrets} (see
20148@code{secret-file} below.) You are expected to create this file manually,
20149in an ``out-of-band'' fashion (you @emph{could} make this file part of the
20150service configuration, for instance by using @code{plain-file}, but it will
20151be world-readable @i{via} @file{/gnu/store}.) See the examples in the
20152@file{share/ddclient} directory of the @code{ddclient} package.
20153
20154@c %start of fragment
20155
20156Los campos disponibles de @code{ddclient-configuration} son:
20157
20158@deftypevr {@code{ddclient-configuration} parameter} package ddclient
20159El paquete ddclient.
20160
20161@end deftypevr
20162
20163@deftypevr {@code{ddclient-configuration} parameter} integer daemon
20164The period after which ddclient will retry to check IP and domain name.
20165
20166Defaults to @samp{300}.
20167
20168@end deftypevr
20169
20170@deftypevr {@code{ddclient-configuration} parameter} boolean syslog
20171Use syslog for the output.
20172
20173Defaults to @samp{#t}.
20174
20175@end deftypevr
20176
20177@deftypevr {@code{ddclient-configuration} parameter} string mail
20178Mail to user.
20179
20180Defaults to @samp{"root"}.
20181
20182@end deftypevr
20183
20184@deftypevr {@code{ddclient-configuration} parameter} string mail-failure
20185Mail failed update to user.
20186
20187Defaults to @samp{"root"}.
20188
20189@end deftypevr
20190
20191@deftypevr {@code{ddclient-configuration} parameter} string pid
20192The ddclient PID file.
20193
20194Defaults to @samp{"/var/run/ddclient/ddclient.pid"}.
20195
20196@end deftypevr
20197
20198@deftypevr {@code{ddclient-configuration} parameter} boolean ssl
20199Enable SSL support.
20200
20201Defaults to @samp{#t}.
20202
20203@end deftypevr
20204
20205@deftypevr {@code{ddclient-configuration} parameter} string user
20206Specifies the user name or ID that is used when running ddclient program.
20207
20208Defaults to @samp{"ddclient"}.
20209
20210@end deftypevr
20211
20212@deftypevr {@code{ddclient-configuration} parameter} string group
20213Group of the user who will run the ddclient program.
20214
20215Defaults to @samp{"ddclient"}.
20216
20217@end deftypevr
20218
20219@deftypevr {@code{ddclient-configuration} parameter} string secret-file
20220Secret file which will be appended to @file{ddclient.conf} file. This file
20221contains credentials for use by ddclient. You are expected to create it
20222manually.
20223
20224Defaults to @samp{"/etc/ddclient/secrets.conf"}.
20225
20226@end deftypevr
20227
20228@deftypevr {@code{ddclient-configuration} parameter} list extra-options
20229Extra options will be appended to @file{ddclient.conf} file.
20230
20231Defaults to @samp{()}.
20232
20233@end deftypevr
20234
20235
20236@c %end of fragment
20237
20238
20239@node Servicios VPN
20240@subsection Servicios VPN
20241@cindex VPN (red virtual privada)
20242@cindex red virtual privada (VPN)
20243
20244The @code{(gnu services vpn)} module provides services related to
20245@dfn{virtual private networks} (VPNs). It provides a @emph{client} service
20246for your machine to connect to a VPN, and a @emph{servire} service for your
20247machine to host a VPN. Both services use @uref{https://openvpn.net/,
20248OpenVPN}.
20249
20250@deffn {Procedimiento Scheme} openvpn-client-service @
20251 [#:config (openvpn-client-configuration)]
20252
20253Devuelve un servicio que ejecuta @command{openvpn}, un daemon VPN, como
20254cliente.
20255@end deffn
20256
20257@deffn {Procedimiento Scheme} openvpn-server-service @
20258 [#:config (openvpn-server-configuration)]
20259
20260Devuelve un servicio que ejecuta @command{openvpn}, un daemon VPN, como
20261servidor.
20262
20263Pueden ejecutarse simultáneamente.
20264@end deffn
20265
20266@c %automatically generated documentation
20267
20268Los campos disponibles de @code{openvpn-client-configuration} son:
20269
20270@deftypevr {@code{openvpn-client-configuration} parameter} package openvpn
20271El paquete OpenVPN.
20272
20273@end deftypevr
20274
20275@deftypevr {@code{openvpn-client-configuration} parameter} string pid-file
20276The OpenVPN pid file.
20277
20278Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
20279
20280@end deftypevr
20281
20282@deftypevr {@code{openvpn-client-configuration} parameter} proto proto
20283The protocol (UDP or TCP) used to open a channel between clients and
20284servers.
20285
20286Defaults to @samp{udp}.
20287
20288@end deftypevr
20289
20290@deftypevr {@code{openvpn-client-configuration} parameter} dev dev
20291The device type used to represent the VPN connection.
20292
20293Defaults to @samp{tun}.
20294
20295@end deftypevr
20296
20297@deftypevr {@code{openvpn-client-configuration} parameter} string ca
20298The certificate authority to check connections against.
20299
20300Defaults to @samp{"/etc/openvpn/ca.crt"}.
20301
20302@end deftypevr
20303
20304@deftypevr {@code{openvpn-client-configuration} parameter} string cert
20305The certificate of the machine the daemon is running on. It should be
20306signed by the authority given in @code{ca}.
20307
20308Defaults to @samp{"/etc/openvpn/client.crt"}.
20309
20310@end deftypevr
20311
20312@deftypevr {@code{openvpn-client-configuration} parameter} string key
20313The key of the machine the daemon is running on. It must be the key whose
20314certificate is @code{cert}.
20315
20316Defaults to @samp{"/etc/openvpn/client.key"}.
20317
20318@end deftypevr
20319
20320@deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo?
20321Whether to use the lzo compression algorithm.
20322
20323Defaults to @samp{#t}.
20324
20325@end deftypevr
20326
20327@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key?
20328Don't re-read key files across SIGUSR1 or --ping-restart.
20329
20330Defaults to @samp{#t}.
20331
20332@end deftypevr
20333
20334@deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun?
20335Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1
20336or --ping-restart restarts.
20337
20338Defaults to @samp{#t}.
20339
20340@end deftypevr
20341
20342@deftypevr {@code{openvpn-client-configuration} parameter} number verbosity
20343Verbosity level.
20344
20345Defaults to @samp{3}.
20346
20347@end deftypevr
20348
20349@deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth
20350Add an additional layer of HMAC authentication on top of the TLS control
20351channel to protect against DoS attacks.
20352
20353El valor predeterminado es @samp{#f}
20354
20355@end deftypevr
20356
20357@deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage?
20358Whether to check the server certificate has server usage extension.
20359
20360Defaults to @samp{#t}.
20361
20362@end deftypevr
20363
20364@deftypevr {@code{openvpn-client-configuration} parameter} bind bind?
20365Bind to a specific local port number.
20366
20367El valor predeterminado es @samp{#f}
20368
20369@end deftypevr
20370
20371@deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry?
20372Retry resolving server address.
20373
20374Defaults to @samp{#t}.
20375
20376@end deftypevr
20377
20378@deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote
20379A list of remote servers to connect to.
20380
20381Defaults to @samp{()}.
20382
20383Los campos disponibles de @code{openvpn-remote-configuration} son:
20384
20385@deftypevr {@code{openvpn-remote-configuration} parameter} string name
20386Nombre del servidor.
20387
20388Defaults to @samp{"my-server"}.
20389
20390@end deftypevr
20391
20392@deftypevr {@code{openvpn-remote-configuration} parameter} number port
20393Port number the server listens to.
20394
20395Defaults to @samp{1194}.
20396
20397@end deftypevr
20398
20399@end deftypevr
20400@c %end of automatic openvpn-client documentation
20401
20402@c %automatically generated documentation
20403
20404Available @code{openvpn-server-configuration} fields are:
20405
20406@deftypevr {@code{openvpn-server-configuration} parameter} package openvpn
20407El paquete OpenVPN.
20408
20409@end deftypevr
20410
20411@deftypevr {@code{openvpn-server-configuration} parameter} string pid-file
20412The OpenVPN pid file.
20413
20414Defaults to @samp{"/var/run/openvpn/openvpn.pid"}.
20415
20416@end deftypevr
20417
20418@deftypevr {@code{openvpn-server-configuration} parameter} proto proto
20419The protocol (UDP or TCP) used to open a channel between clients and
20420servers.
20421
20422Defaults to @samp{udp}.
20423
20424@end deftypevr
20425
20426@deftypevr {@code{openvpn-server-configuration} parameter} dev dev
20427The device type used to represent the VPN connection.
20428
20429Defaults to @samp{tun}.
20430
20431@end deftypevr
20432
20433@deftypevr {@code{openvpn-server-configuration} parameter} string ca
20434The certificate authority to check connections against.
20435
20436Defaults to @samp{"/etc/openvpn/ca.crt"}.
20437
20438@end deftypevr
20439
20440@deftypevr {@code{openvpn-server-configuration} parameter} string cert
20441The certificate of the machine the daemon is running on. It should be
20442signed by the authority given in @code{ca}.
20443
20444Defaults to @samp{"/etc/openvpn/client.crt"}.
20445
20446@end deftypevr
20447
20448@deftypevr {@code{openvpn-server-configuration} parameter} string key
20449The key of the machine the daemon is running on. It must be the key whose
20450certificate is @code{cert}.
20451
20452Defaults to @samp{"/etc/openvpn/client.key"}.
20453
20454@end deftypevr
20455
20456@deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo?
20457Whether to use the lzo compression algorithm.
20458
20459Defaults to @samp{#t}.
20460
20461@end deftypevr
20462
20463@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key?
20464Don't re-read key files across SIGUSR1 or --ping-restart.
20465
20466Defaults to @samp{#t}.
20467
20468@end deftypevr
20469
20470@deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun?
20471Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1
20472or --ping-restart restarts.
20473
20474Defaults to @samp{#t}.
20475
20476@end deftypevr
20477
20478@deftypevr {@code{openvpn-server-configuration} parameter} number verbosity
20479Verbosity level.
20480
20481Defaults to @samp{3}.
20482
20483@end deftypevr
20484
20485@deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth
20486Add an additional layer of HMAC authentication on top of the TLS control
20487channel to protect against DoS attacks.
20488
20489El valor predeterminado es @samp{#f}
20490
20491@end deftypevr
20492
20493@deftypevr {@code{openvpn-server-configuration} parameter} number port
20494Specifies the port number on which the server listens.
20495
20496Defaults to @samp{1194}.
20497
20498@end deftypevr
20499
20500@deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server
20501An ip and mask specifying the subnet inside the virtual network.
20502
20503Defaults to @samp{"10.8.0.0 255.255.255.0"}.
20504
20505@end deftypevr
20506
20507@deftypevr {@code{openvpn-server-configuration} parameter} cidr6 server-ipv6
20508A CIDR notation specifying the IPv6 subnet inside the virtual network.
20509
20510El valor predeterminado es @samp{#f}
20511
20512@end deftypevr
20513
20514@deftypevr {@code{openvpn-server-configuration} parameter} string dh
20515The Diffie-Hellman parameters file.
20516
20517Defaults to @samp{"/etc/openvpn/dh2048.pem"}.
20518
20519@end deftypevr
20520
20521@deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist
20522The file that records client IPs.
20523
20524Defaults to @samp{"/etc/openvpn/ipp.txt"}.
20525
20526@end deftypevr
20527
20528@deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway?
20529When true, the server will act as a gateway for its clients.
20530
20531El valor predeterminado es @samp{#f}
20532
20533@end deftypevr
20534
20535@deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client?
20536When true, clients are allowed to talk to each other inside the VPN.
20537
20538El valor predeterminado es @samp{#f}
20539
20540@end deftypevr
20541
20542@deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive
20543Causes ping-like messages to be sent back and forth over the link so that
20544each side knows when the other side has gone down. @code{keepalive}
20545requires a pair. The first element is the period of the ping sending, and
20546the second element is the timeout before considering the other side down.
20547
20548@end deftypevr
20549
20550@deftypevr {@code{openvpn-server-configuration} parameter} number max-clients
20551The maximum number of clients.
20552
20553Defaults to @samp{100}.
20554
20555@end deftypevr
20556
20557@deftypevr {@code{openvpn-server-configuration} parameter} string status
20558The status file. This file shows a small report on current connection. It
20559is truncated and rewritten every minute.
20560
20561Defaults to @samp{"/var/run/openvpn/status"}.
20562
20563@end deftypevr
20564
20565@deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir
20566The list of configuration for some clients.
20567
20568Defaults to @samp{()}.
20569
20570Available @code{openvpn-ccd-configuration} fields are:
20571
20572@deftypevr {@code{openvpn-ccd-configuration} parameter} string name
20573Nombre del cliente.
20574
20575Defaults to @samp{"client"}.
20576
20577@end deftypevr
20578
20579@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute
20580Client own network
20581
20582El valor predeterminado es @samp{#f}
20583
20584@end deftypevr
20585
20586@deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push
20587Client VPN IP.
20588
20589El valor predeterminado es @samp{#f}
20590
20591@end deftypevr
20592
20593@end deftypevr
20594
20595
20596@c %end of automatic openvpn-server documentation
20597
20598
20599@node Sistema de ficheros en red
20600@subsection Sistema de ficheros en red
20601@cindex NFS
20602
20603The @code{(gnu services nfs)} module provides the following services, which
20604are most commonly used in relation to mounting or exporting directory trees
20605as @dfn{network file systems} (NFS).
20606
20607@subsubheading RPC Bind Service
20608@cindex rpcbind
20609
20610The RPC Bind service provides a facility to map program numbers into
20611universal addresses. Many NFS related services use this facility. Hence it
20612is automatically started when a dependent service starts.
20613
20614@defvr {Variable Scheme} rpcbind-service-type
20615A service type for the RPC portmapper daemon.
20616@end defvr
20617
20618
20619@deftp {Tipo de datos} rpcbind-configuration
20620Data type representing the configuration of the RPC Bind Service. This type
20621has the following parameters:
20622@table @asis
20623@item @code{rpcbind} (default: @code{rpcbind})
20624The rpcbind package to use.
20625
20626@item @code{warm-start?} (default: @code{#t})
20627If this parameter is @code{#t}, then the daemon will read a state file on
20628startup thus reloading state information saved by a previous instance.
20629@end table
20630@end deftp
20631
20632
20633@subsubheading Pipefs Pseudo File System
20634@cindex pipefs
20635@cindex rpc_pipefs
20636
20637The pipefs file system is used to transfer NFS related data between the
20638kernel and user space programs.
20639
20640@defvr {Variable Scheme} pipefs-service-type
20641A service type for the pipefs pseudo file system.
20642@end defvr
20643
20644@deftp {Tipo de datos} pipefs-configuration
20645Data type representing the configuration of the pipefs pseudo file system
20646service. This type has the following parameters:
20647@table @asis
20648@item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"})
20649The directory to which the file system is to be attached.
20650@end table
20651@end deftp
20652
20653
20654@subsubheading Servicio del daemon GSS
20655@cindex GSSD
20656@cindex GSS
20657@cindex global security system
20658
20659The @dfn{global security system} (GSS) daemon provides strong security for
20660RPC based protocols. Before exchanging RPC requests an RPC client must
20661establish a security context. Typically this is done using the Kerberos
20662command @command{kinit} or automatically at login time using PAM services
20663(@pxref{Servicios Kerberos}).
20664
20665@defvr {Variable Scheme} gss-service-type
20666Un tipo de servicio para el daemon del sistema de seguridad global (GSS).
20667@end defvr
20668
20669@deftp {Tipo de datos} gss-configuration
20670Data type representing the configuration of the GSS daemon service. This
20671type has the following parameters:
20672@table @asis
20673@item @code{nfs-utils} (predeterminado: @code{nfs-utils})
20674The package in which the @command{rpc.gssd} command is to be found.
20675
20676@item @code{pipefs-directory} (predeterminado: @code{"/var/lib/nfs/rpc_pipefs"})
20677The directory where the pipefs file system is mounted.
20678
20679@end table
20680@end deftp
20681
20682
20683@subsubheading Servicio del daemon IDMAP
20684@cindex idmapd
20685@cindex name mapper
20686
20687The idmap daemon service provides mapping between user IDs and user names.
20688Typically it is required in order to access file systems mounted via NFSv4.
20689
20690@defvr {Variable Scheme} idmap-service-type
20691A service type for the Identity Mapper (IDMAP) daemon.
20692@end defvr
20693
20694@deftp {Tipo de datos} idmap-configuration
20695Data type representing the configuration of the IDMAP daemon service. This
20696type has the following parameters:
20697@table @asis
20698@item @code{nfs-utils} (predeterminado: @code{nfs-utils})
20699The package in which the @command{rpc.idmapd} command is to be found.
20700
20701@item @code{pipefs-directory} (predeterminado: @code{"/var/lib/nfs/rpc_pipefs"})
20702The directory where the pipefs file system is mounted.
20703
20704@item @code{domain} (predeterminado: @code{#f})
20705The local NFSv4 domain name. This must be a string or @code{#f}. If it is
20706@code{#f} then the daemon will use the host's fully qualified domain name.
20707
20708@end table
20709@end deftp
20710
20711@node Integración continua
20712@subsection Integración continua
20713
20714@cindex integración continua
20715@uref{https://git.savannah.gnu.org/cgit/guix/guix-cuirass.git, Cuirass} is a
20716continuous integration tool for Guix. It can be used both for development
20717and for providing substitutes to others (@pxref{Sustituciones}).
20718
20719El módulo @code{(gnu services cuirass)} proporciona el siguiente servicio.
20720
20721@defvr {Procedimiento Scheme} cuirass-service-type
20722The type of the Cuirass service. Its value must be a
20723@code{cuirass-configuration} object, as described below.
20724@end defvr
20725
20726To add build jobs, you have to set the @code{specifications} field of the
20727configuration. Here is an example of a service that polls the Guix
20728repository and builds the packages from a manifest. Some of the packages
20729are defined in the @code{"custom-packages"} input, which is the equivalent
20730of @code{GUIX_PACKAGE_PATH}.
20731
20732@example
20733(define %cuirass-specs
20734 #~(list
20735 '((#:name . "my-manifest")
20736 (#:load-path-inputs . ("guix"))
20737 (#:package-path-inputs . ("custom-packages"))
20738 (#:proc-input . "guix")
20739 (#:proc-file . "build-aux/cuirass/gnu-system.scm")
20740 (#:proc . cuirass-jobs)
20741 (#:proc-args . ((subset . "manifests")
20742 (systems . ("x86_64-linux"))
20743 (manifests . (("config" . "guix/manifest.scm")))))
20744 (#:inputs . (((#:name . "guix")
20745 (#:url . "git://git.savannah.gnu.org/guix.git")
20746 (#:load-path . ".")
20747 (#:branch . "master")
20748 (#:no-compile? . #t))
20749 ((#:name . "config")
20750 (#:url . "git://git.example.org/config.git")
20751 (#:load-path . ".")
20752 (#:branch . "master")
20753 (#:no-compile? . #t))
20754 ((#:name . "custom-packages")
20755 (#:url . "git://git.example.org/custom-packages.git")
20756 (#:load-path . ".")
20757 (#:branch . "master")
20758 (#:no-compile? . #t)))))))
20759
20760(service cuirass-service-type
20761 (cuirass-configuration
20762 (specifications %cuirass-specs)))
20763@end example
20764
20765While information related to build jobs is located directly in the
20766specifications, global settings for the @command{cuirass} process are
20767accessible in other @code{cuirass-configuration} fields.
20768
20769@deftp {Tipo de datos} cuirass-configuration
20770Data type representing the configuration of Cuirass.
20771
20772@table @asis
20773@item @code{log-file} (predeterminado: @code{"/var/log/cuirass.log"})
20774Location of the log file.
20775
20776@item @code{cache-directory} (predeterminado: @code{"/var/cache/cuirass"})
20777Location of the repository cache.
20778
20779@item @code{user} (predeterminado: @code{"cuirass"})
20780Owner of the @code{cuirass} process.
20781
20782@item @code{group} (predeterminado: @code{"cuirass"})
20783Owner's group of the @code{cuirass} process.
20784
20785@item @code{interval} (predeterminado: @code{60})
20786Number of seconds between the poll of the repositories followed by the
20787Cuirass jobs.
20788
20789@item @code{database} (predeterminada: @code{"/var/lib/cuirass/cuirass.db"})
20790Location of sqlite database which contains the build results and previously
20791added specifications.
20792
20793@item @code{ttl} (predeterminado: @code{(* 30 24 3600)})
20794Specifies the time-to-live (TTL) in seconds of garbage collector roots that
20795are registered for build results. This means that build results are
20796protected from garbage collection for at least @var{ttl} seconds.
20797
20798@item @code{port} (predeterminado: @code{8081})
20799Número de puerto usado por el servidor HTTP.
20800
20801@item --listen=@var{dirección}
20802Listen on the network interface for @var{host}. The default is to accept
20803connections from localhost.
20804
20805@item @code{specifications} (predeterminada: @code{#~'()})
20806A gexp (@pxref{Expresiones-G}) that evaluates to a list of specifications,
20807where a specification is an association list (@pxref{Associations Lists,,,
20808guile, GNU Guile Reference Manual}) whose keys are keywords
20809(@code{#:keyword-example}) as shown in the example above.
20810
20811@item @code{use-substitutes?} (predeterminado: @code{#f})
20812This allows using substitutes to avoid building every dependencies of a job
20813from source.
20814
20815@item @code{one-shot?} (predeterminado: @code{#f})
20816Only evaluate specifications and build derivations once.
20817
20818@item @code{fallback?} (predeterminado: @code{#f})
20819When substituting a pre-built binary fails, fall back to building packages
20820locally.
20821
20822@item @code{cuirass} (predeterminado: @code{cuirass})
20823El paquete Cuirass usado.
20824@end table
20825@end deftp
20826
20827@node Servicios de gestión de energía
20828@subsection Servicios de gestión de energía
20829
20830@cindex tlp
20831@cindex gestión de energía con TLP
20832@subsubheading Daemon TLP
20833
20834El módulo @code{(gnu services pm)} proporciona una definición de servicio
20835Guix para la herramienta de gestión de energía de Linux TLP.
20836
20837TLP enables various powersaving modes in userspace and kernel. Contrary to
20838@code{upower-service}, it is not a passive, monitoring tool, as it will
20839apply custom settings each time a new power source is detected. More
20840information can be found at @uref{http://linrunner.de/en/tlp/tlp.html, TLP
20841home page}.
20842
20843@deffn {Variable Scheme} tlp-service-type
20844The service type for the TLP tool. Its value should be a valid TLP
20845configuration (see below). To use the default settings, simply write:
20846@example
20847(service tlp-service-type)
20848@end example
20849@end deffn
20850
20851By default TLP does not need much configuration but most TLP parameters can
20852be tweaked using @code{tlp-configuration}.
20853
20854Each parameter definition is preceded by its type; for example,
20855@samp{boolean foo} indicates that the @code{foo} parameter should be
20856specified as a boolean. Types starting with @code{maybe-} denote parameters
20857that won't show up in TLP config file when their value is @code{'disabled}.
20858
20859@c The following documentation was initially generated by
20860@c (generate-tlp-documentation) in (gnu services pm). Manually maintained
20861@c documentation is better, so we shouldn't hesitate to edit below as
20862@c needed. However if the change you want to make to this documentation
20863@c can be done in an automated way, it's probably easier to change
20864@c (generate-documentation) than to make it below and have to deal with
20865@c the churn as TLP updates.
20866
20867Available @code{tlp-configuration} fields are:
20868
20869@deftypevr {@code{tlp-configuration} parameter} package tlp
20870El paquete TLP.
20871
20872@end deftypevr
20873
20874@deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable?
20875Set to true if you wish to enable TLP.
20876
20877Defaults to @samp{#t}.
20878
20879@end deftypevr
20880
20881@deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode
20882Default mode when no power supply can be detected. Alternatives are AC and
20883BAT.
20884
20885Defaults to @samp{"AC"}.
20886
20887@end deftypevr
20888
20889@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac
20890Number of seconds Linux kernel has to wait after the disk goes idle, before
20891syncing on AC.
20892
20893El valor predeterminado es @samp{0}.
20894
20895@end deftypevr
20896
20897@deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat
20898Same as @code{disk-idle-ac} but on BAT mode.
20899
20900Defaults to @samp{2}.
20901
20902@end deftypevr
20903
20904@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac
20905Dirty pages flushing periodicity, expressed in seconds.
20906
20907Defaults to @samp{15}.
20908
20909@end deftypevr
20910
20911@deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat
20912Same as @code{max-lost-work-secs-on-ac} but on BAT mode.
20913
20914Defaults to @samp{60}.
20915
20916@end deftypevr
20917
20918@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac
20919CPU frequency scaling governor on AC mode. With intel_pstate driver,
20920alternatives are powersave and performance. With acpi-cpufreq driver,
20921alternatives are ondemand, powersave, performance and conservative.
20922
20923Defaults to @samp{disabled}.
20924
20925@end deftypevr
20926
20927@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat
20928Same as @code{cpu-scaling-governor-on-ac} but on BAT mode.
20929
20930Defaults to @samp{disabled}.
20931
20932@end deftypevr
20933
20934@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac
20935Set the min available frequency for the scaling governor on AC.
20936
20937Defaults to @samp{disabled}.
20938
20939@end deftypevr
20940
20941@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac
20942Set the max available frequency for the scaling governor on AC.
20943
20944Defaults to @samp{disabled}.
20945
20946@end deftypevr
20947
20948@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat
20949Set the min available frequency for the scaling governor on BAT.
20950
20951Defaults to @samp{disabled}.
20952
20953@end deftypevr
20954
20955@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat
20956Set the max available frequency for the scaling governor on BAT.
20957
20958Defaults to @samp{disabled}.
20959
20960@end deftypevr
20961
20962@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac
20963Limit the min P-state to control the power dissipation of the CPU, in AC
20964mode. Values are stated as a percentage of the available performance.
20965
20966Defaults to @samp{disabled}.
20967
20968@end deftypevr
20969
20970@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac
20971Limit the max P-state to control the power dissipation of the CPU, in AC
20972mode. Values are stated as a percentage of the available performance.
20973
20974Defaults to @samp{disabled}.
20975
20976@end deftypevr
20977
20978@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat
20979Same as @code{cpu-min-perf-on-ac} on BAT mode.
20980
20981Defaults to @samp{disabled}.
20982
20983@end deftypevr
20984
20985@deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat
20986Same as @code{cpu-max-perf-on-ac} on BAT mode.
20987
20988Defaults to @samp{disabled}.
20989
20990@end deftypevr
20991
20992@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac?
20993Enable CPU turbo boost feature on AC mode.
20994
20995Defaults to @samp{disabled}.
20996
20997@end deftypevr
20998
20999@deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat?
21000Same as @code{cpu-boost-on-ac?} on BAT mode.
21001
21002Defaults to @samp{disabled}.
21003
21004@end deftypevr
21005
21006@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac?
21007Allow Linux kernel to minimize the number of CPU cores/hyper-threads used
21008under light load conditions.
21009
21010El valor predeterminado es @samp{#f}
21011
21012@end deftypevr
21013
21014@deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat?
21015Same as @code{sched-powersave-on-ac?} but on BAT mode.
21016
21017Defaults to @samp{#t}.
21018
21019@end deftypevr
21020
21021@deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog?
21022Enable Linux kernel NMI watchdog.
21023
21024El valor predeterminado es @samp{#f}
21025
21026@end deftypevr
21027
21028@deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls
21029For Linux kernels with PHC patch applied, change CPU voltages. An example
21030value would be @samp{"F:V F:V F:V F:V"}.
21031
21032Defaults to @samp{disabled}.
21033
21034@end deftypevr
21035
21036@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac
21037Set CPU performance versus energy saving policy on AC. Alternatives are
21038performance, normal, powersave.
21039
21040Defaults to @samp{"performance"}.
21041
21042@end deftypevr
21043
21044@deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat
21045Same as @code{energy-perf-policy-ac} but on BAT mode.
21046
21047Defaults to @samp{"powersave"}.
21048
21049@end deftypevr
21050
21051@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices
21052Dispositivos de disco duro.
21053
21054@end deftypevr
21055
21056@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac
21057Hard disk advanced power management level.
21058
21059@end deftypevr
21060
21061@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-bat
21062Same as @code{disk-apm-bat} but on BAT mode.
21063
21064@end deftypevr
21065
21066@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-ac
21067Hard disk spin down timeout. One value has to be specified for each
21068declared hard disk.
21069
21070Defaults to @samp{disabled}.
21071
21072@end deftypevr
21073
21074@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat
21075Same as @code{disk-spindown-timeout-on-ac} but on BAT mode.
21076
21077Defaults to @samp{disabled}.
21078
21079@end deftypevr
21080
21081@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched
21082Select IO scheduler for disk devices. One value has to be specified for
21083each declared hard disk. Example alternatives are cfq, deadline and noop.
21084
21085Defaults to @samp{disabled}.
21086
21087@end deftypevr
21088
21089@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac
21090SATA aggressive link power management (ALPM) level. Alternatives are
21091min_power, medium_power, max_performance.
21092
21093Defaults to @samp{"max_performance"}.
21094
21095@end deftypevr
21096
21097@deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat
21098Same as @code{sata-linkpwr-ac} but on BAT mode.
21099
21100Defaults to @samp{"min_power"}.
21101
21102@end deftypevr
21103
21104@deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist
21105Exclude specified SATA host devices for link power management.
21106
21107Defaults to @samp{disabled}.
21108
21109@end deftypevr
21110
21111@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac?
21112Enable Runtime Power Management for AHCI controller and disks on AC mode.
21113
21114Defaults to @samp{disabled}.
21115
21116@end deftypevr
21117
21118@deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat?
21119Same as @code{ahci-runtime-pm-on-ac} on BAT mode.
21120
21121Defaults to @samp{disabled}.
21122
21123@end deftypevr
21124
21125@deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout
21126Seconds of inactivity before disk is suspended.
21127
21128Defaults to @samp{15}.
21129
21130@end deftypevr
21131
21132@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac
21133PCI Express Active State Power Management level. Alternatives are default,
21134performance, powersave.
21135
21136Defaults to @samp{"performance"}.
21137
21138@end deftypevr
21139
21140@deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat
21141Same as @code{pcie-aspm-ac} but on BAT mode.
21142
21143Defaults to @samp{"powersave"}.
21144
21145@end deftypevr
21146
21147@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac
21148Radeon graphics clock speed level. Alternatives are low, mid, high, auto,
21149default.
21150
21151Defaults to @samp{"high"}.
21152
21153@end deftypevr
21154
21155@deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat
21156Same as @code{radeon-power-ac} but on BAT mode.
21157
21158Defaults to @samp{"low"}.
21159
21160@end deftypevr
21161
21162@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac
21163Radeon dynamic power management method (DPM). Alternatives are battery,
21164performance.
21165
21166Defaults to @samp{"performance"}.
21167
21168@end deftypevr
21169
21170@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat
21171Same as @code{radeon-dpm-state-ac} but on BAT mode.
21172
21173Defaults to @samp{"battery"}.
21174
21175@end deftypevr
21176
21177@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac
21178Radeon DPM performance level. Alternatives are auto, low, high.
21179
21180Defaults to @samp{"auto"}.
21181
21182@end deftypevr
21183
21184@deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat
21185Same as @code{radeon-dpm-perf-ac} but on BAT mode.
21186
21187Defaults to @samp{"auto"}.
21188
21189@end deftypevr
21190
21191@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac?
21192Wifi power saving mode.
21193
21194El valor predeterminado es @samp{#f}
21195
21196@end deftypevr
21197
21198@deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat?
21199Same as @code{wifi-power-ac?} but on BAT mode.
21200
21201Defaults to @samp{#t}.
21202
21203@end deftypevr
21204
21205@deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable?
21206Disable wake on LAN.
21207
21208Defaults to @samp{#t}.
21209
21210@end deftypevr
21211
21212@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac
21213Timeout duration in seconds before activating audio power saving on Intel
21214HDA and AC97 devices. A value of 0 disables power saving.
21215
21216El valor predeterminado es @samp{0}.
21217
21218@end deftypevr
21219
21220@deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat
21221Same as @code{sound-powersave-ac} but on BAT mode.
21222
21223Defaults to @samp{1}.
21224
21225@end deftypevr
21226
21227@deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller?
21228Disable controller in powersaving mode on Intel HDA devices.
21229
21230Defaults to @samp{#t}.
21231
21232@end deftypevr
21233
21234@deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat?
21235Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be powered
21236on again by releasing (and reinserting) the eject lever or by pressing the
21237disc eject button on newer models.
21238
21239El valor predeterminado es @samp{#f}
21240
21241@end deftypevr
21242
21243@deftypevr {@code{tlp-configuration} parameter} string bay-device
21244Name of the optical drive device to power off.
21245
21246Defaults to @samp{"sr0"}.
21247
21248@end deftypevr
21249
21250@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac
21251Runtime Power Management for PCI(e) bus devices. Alternatives are on and
21252auto.
21253
21254Defaults to @samp{"on"}.
21255
21256@end deftypevr
21257
21258@deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat
21259Same as @code{runtime-pm-ac} but on BAT mode.
21260
21261Defaults to @samp{"auto"}.
21262
21263@end deftypevr
21264
21265@deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all?
21266Runtime Power Management for all PCI(e) bus devices, except blacklisted
21267ones.
21268
21269Defaults to @samp{#t}.
21270
21271@end deftypevr
21272
21273@deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist
21274Exclude specified PCI(e) device addresses from Runtime Power Management.
21275
21276Defaults to @samp{disabled}.
21277
21278@end deftypevr
21279
21280@deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist
21281Exclude PCI(e) devices assigned to the specified drivers from Runtime Power
21282Management.
21283
21284@end deftypevr
21285
21286@deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend?
21287Enable USB autosuspend feature.
21288
21289Defaults to @samp{#t}.
21290
21291@end deftypevr
21292
21293@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist
21294Exclude specified devices from USB autosuspend.
21295
21296Defaults to @samp{disabled}.
21297
21298@end deftypevr
21299
21300@deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan?
21301Exclude WWAN devices from USB autosuspend.
21302
21303Defaults to @samp{#t}.
21304
21305@end deftypevr
21306
21307@deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist
21308Include specified devices into USB autosuspend, even if they are already
21309excluded by the driver or via @code{usb-blacklist-wwan?}.
21310
21311Defaults to @samp{disabled}.
21312
21313@end deftypevr
21314
21315@deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown?
21316Enable USB autosuspend before shutdown.
21317
21318Defaults to @samp{disabled}.
21319
21320@end deftypevr
21321
21322@deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup?
21323Restore radio device state (bluetooth, wifi, wwan) from previous shutdown on
21324system startup.
21325
21326El valor predeterminado es @samp{#f}
21327
21328@end deftypevr
21329
21330@cindex thermald
21331@cindex escalado de frecuencia de la CPU con thermald
21332@subsubheading Daemon Thermald
21333
21334El módulo @code{(gnu services pm)} proporciona una interfaz con thermald, un
21335servicio de escalado de frecuencia de la CPU que ayuda a prevenir el
21336sobrecalentamiento.
21337
21338@defvr {Variable Scheme} thermald-service-type
21339This is the service type for @uref{https://01.org/linux-thermal-daemon/,
21340thermald}, the Linux Thermal Daemon, which is responsible for controlling
21341the thermal state of processors and preventing overheating.
21342@end defvr
21343
21344@deftp {Tipo de datos} thermald-configuration
21345Tipo de datos que representa la configuración de
21346@code{thermald-service-type}.
21347
21348@table @asis
21349@item @code{ignore-cpuid-check?} (predeterminado: @code{#f})
21350Ignore cpuid check for supported CPU models.
21351
21352@item @code{thermald} (predeterminado: @var{thermald})
21353Package object of thermald.
21354
21355@end table
21356@end deftp
21357
21358@node Servicios de audio
21359@subsection Servicios de audio
21360
21361El módulo @code{(gnu services audio)} proporciona un servicio para iniciar
21362MPD (el daemon de reproducción de música).
21363
21364@cindex mpd
21365@subsubheading Daemon de reproducción de música (MPD)
21366
21367El daemon de reproducción de música (MPD) es un servicio que puede
21368reproducir música mientras se controla desde la máquina local o sobre una
21369red por una multitud de clientes.
21370
21371El siguiente ejemplo muestra como se puede ejecutar @code{mpd} como
21372@code{"rober"} en el puerto @code{6666}. Usa pulseaudio para su salida.
21373
21374@example
21375(service mpd-service-type
21376 (mpd-configuration
21377 (user "rober")
21378 (port "6666")))
21379@end example
21380
21381@defvr {Variable Scheme} mpd-service-type
21382El tipo de servicio para @command{mpd}.
21383@end defvr
21384
21385@deftp {Tipo de datos} mpd-configuration
21386Data type representing the configuration of @command{mpd}.
21387
21388@table @asis
21389@item @code{user} (predeterminada: @code{"mpd"})
21390Usuaria que ejecuta mpd.
21391
21392@item @code{music-dir} (predeterminado: @code{"~/Music"})
21393The directory to scan for music files.
21394
21395@item @code{playlist-dir} (predeterminado: @code{"~/.mpd/playlists"})
21396The directory to store playlists.
21397
21398@item @code{db-file} (default: @code{"~/.mpd/tag_cache"})
21399The location of the music database.
21400
21401@item @code{state-file} (default: @code{"~/.mpd/state"})
21402The location of the file that stores current MPD's state.
21403
21404@item @code{sticker-file} (default: @code{"~/.mpd/sticker.sql"})
21405The location of the sticker database.
21406
21407@item @code{port} (predeterminado: @code{"6600"})
21408Puerto sobre el que se ejecuta mpd.
21409
21410@item @code{address} (predeterminada: @code{"any"})
21411The address that mpd will bind to. To use a Unix domain socket, an absolute
21412path can be specified here.
21413
21414@end table
21415@end deftp
21416
21417@node Servicios de virtualización
21418@subsection Servicios de virtualización
21419
21420The @code{(gnu services virtualization)} module provides services for the
21421libvirt and virtlog daemons, as well as other virtualization-related
21422services.
21423
21424@subsubheading Demonio Libvirt
21425@code{libvirtd} is the server side daemon component of the libvirt
21426virtualization management system. This daemon runs on host servers and
21427performs required management tasks for virtualized guests.
21428
21429@deffn {Variable Scheme} libvirt-service-type
21430This is the type of the @uref{https://libvirt.org, libvirt daemon}. Its
21431value must be a @code{libvirt-configuration}.
21432
21433@example
21434(service libvirt-service-type
21435 (libvirt-configuration
21436 (unix-sock-group "libvirt")
21437 (tls-port "16555")))
21438@end example
21439@end deffn
21440
21441@c Auto-generated with (generate-libvirt-documentation)
21442Available @code{libvirt-configuration} fields are:
21443
21444@deftypevr {@code{libvirt-configuration} parameter} package libvirt
21445Paquete libvirt.
21446
21447@end deftypevr
21448
21449@deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls?
21450Flag listening for secure TLS connections on the public TCP/IP port. must
21451set @code{listen} for this to have any effect.
21452
21453It is necessary to setup a CA and issue server certificates before using
21454this capability.
21455
21456Defaults to @samp{#t}.
21457
21458@end deftypevr
21459
21460@deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp?
21461Listen for unencrypted TCP connections on the public TCP/IP port. must set
21462@code{listen} for this to have any effect.
21463
21464Using the TCP socket requires SASL authentication by default. Only SASL
21465mechanisms which support data encryption are allowed. This is DIGEST_MD5
21466and GSSAPI (Kerberos5)
21467
21468El valor predeterminado es @samp{#f}
21469
21470@end deftypevr
21471
21472@deftypevr {@code{libvirt-configuration} parameter} string tls-port
21473Port for accepting secure TLS connections This can be a port number, or
21474service name
21475
21476Defaults to @samp{"16514"}.
21477
21478@end deftypevr
21479
21480@deftypevr {@code{libvirt-configuration} parameter} string tcp-port
21481Port for accepting insecure TCP connections This can be a port number, or
21482service name
21483
21484Defaults to @samp{"16509"}.
21485
21486@end deftypevr
21487
21488@deftypevr {@code{libvirt-configuration} parameter} string listen-addr
21489IP address or hostname used for client connections.
21490
21491Defaults to @samp{"0.0.0.0"}.
21492
21493@end deftypevr
21494
21495@deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv?
21496Flag toggling mDNS advertisement of the libvirt service.
21497
21498Alternatively can disable for all services on a host by stopping the Avahi
21499daemon.
21500
21501El valor predeterminado es @samp{#f}
21502
21503@end deftypevr
21504
21505@deftypevr {@code{libvirt-configuration} parameter} string mdns-name
21506Default mDNS advertisement name. This must be unique on the immediate
21507broadcast network.
21508
21509Defaults to @samp{"Virtualization Host <hostname>"}.
21510
21511@end deftypevr
21512
21513@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group
21514UNIX domain socket group ownership. This can be used to allow a 'trusted'
21515set of users access to management capabilities without becoming root.
21516
21517Defaults to @samp{"root"}.
21518
21519@end deftypevr
21520
21521@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms
21522UNIX socket permissions for the R/O socket. This is used for monitoring VM
21523status only.
21524
21525Defaults to @samp{"0777"}.
21526
21527@end deftypevr
21528
21529@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms
21530UNIX socket permissions for the R/W socket. Default allows only root. If
21531PolicyKit is enabled on the socket, the default will change to allow
21532everyone (eg, 0777)
21533
21534Defaults to @samp{"0770"}.
21535
21536@end deftypevr
21537
21538@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms
21539UNIX socket permissions for the admin socket. Default allows only owner
21540(root), do not change it unless you are sure to whom you are exposing the
21541access to.
21542
21543Defaults to @samp{"0777"}.
21544
21545@end deftypevr
21546
21547@deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir
21548The directory in which sockets will be found/created.
21549
21550Defaults to @samp{"/var/run/libvirt"}.
21551
21552@end deftypevr
21553
21554@deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro
21555Authentication scheme for UNIX read-only sockets. By default socket
21556permissions allow anyone to connect
21557
21558Defaults to @samp{"polkit"}.
21559
21560@end deftypevr
21561
21562@deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw
21563Authentication scheme for UNIX read-write sockets. By default socket
21564permissions only allow root. If PolicyKit support was compiled into
21565libvirt, the default will be to use 'polkit' auth.
21566
21567Defaults to @samp{"polkit"}.
21568
21569@end deftypevr
21570
21571@deftypevr {@code{libvirt-configuration} parameter} string auth-tcp
21572Authentication scheme for TCP sockets. If you don't enable SASL, then all
21573TCP traffic is cleartext. Don't do this outside of a dev/test scenario.
21574
21575Defaults to @samp{"sasl"}.
21576
21577@end deftypevr
21578
21579@deftypevr {@code{libvirt-configuration} parameter} string auth-tls
21580Authentication scheme for TLS sockets. TLS sockets already have encryption
21581provided by the TLS layer, and limited authentication is done by
21582certificates.
21583
21584It is possible to make use of any SASL authentication mechanism as well, by
21585using 'sasl' for this option
21586
21587Defaults to @samp{"none"}.
21588
21589@end deftypevr
21590
21591@deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers
21592API access control scheme.
21593
21594By default an authenticated user is allowed access to all APIs. Access
21595drivers can place restrictions on this.
21596
21597Defaults to @samp{()}.
21598
21599@end deftypevr
21600
21601@deftypevr {@code{libvirt-configuration} parameter} string key-file
21602Server key file path. If set to an empty string, then no private key is
21603loaded.
21604
21605El valor predeterminado es @samp{""}.
21606
21607@end deftypevr
21608
21609@deftypevr {@code{libvirt-configuration} parameter} string cert-file
21610Server key file path. If set to an empty string, then no certificate is
21611loaded.
21612
21613El valor predeterminado es @samp{""}.
21614
21615@end deftypevr
21616
21617@deftypevr {@code{libvirt-configuration} parameter} string ca-file
21618Server key file path. If set to an empty string, then no CA certificate is
21619loaded.
21620
21621El valor predeterminado es @samp{""}.
21622
21623@end deftypevr
21624
21625@deftypevr {@code{libvirt-configuration} parameter} string crl-file
21626Certificate revocation list path. If set to an empty string, then no CRL is
21627loaded.
21628
21629El valor predeterminado es @samp{""}.
21630
21631@end deftypevr
21632
21633@deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert
21634Disable verification of our own server certificates.
21635
21636When libvirtd starts it performs some sanity checks against its own
21637certificates.
21638
21639El valor predeterminado es @samp{#f}
21640
21641@end deftypevr
21642
21643@deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert
21644Disable verification of client certificates.
21645
21646Client certificate verification is the primary authentication mechanism.
21647Any client which does not present a certificate signed by the CA will be
21648rejected.
21649
21650El valor predeterminado es @samp{#f}
21651
21652@end deftypevr
21653
21654@deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list
21655Whitelist of allowed x509 Distinguished Name.
21656
21657Defaults to @samp{()}.
21658
21659@end deftypevr
21660
21661@deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames
21662Whitelist of allowed SASL usernames. The format for username depends on the
21663SASL authentication mechanism.
21664
21665Defaults to @samp{()}.
21666
21667@end deftypevr
21668
21669@deftypevr {@code{libvirt-configuration} parameter} string tls-priority
21670Override the compile time default TLS priority string. The default is
21671usually "NORMAL" unless overridden at build time. Only set this is it is
21672desired for libvirt to deviate from the global default settings.
21673
21674Defaults to @samp{"NORMAL"}.
21675
21676@end deftypevr
21677
21678@deftypevr {@code{libvirt-configuration} parameter} integer max-clients
21679Maximum number of concurrent client connections to allow over all sockets
21680combined.
21681
21682Defaults to @samp{5000}.
21683
21684@end deftypevr
21685
21686@deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients
21687Maximum length of queue of connections waiting to be accepted by the
21688daemon. Note, that some protocols supporting retransmission may obey this
21689so that a later reattempt at connection succeeds.
21690
21691Defaults to @samp{1000}.
21692
21693@end deftypevr
21694
21695@deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients
21696Maximum length of queue of accepted but not yet authenticated clients. Set
21697this to zero to turn this feature off
21698
21699Defaults to @samp{20}.
21700
21701@end deftypevr
21702
21703@deftypevr {@code{libvirt-configuration} parameter} integer min-workers
21704Number of workers to start up initially.
21705
21706Defaults to @samp{5}.
21707
21708@end deftypevr
21709
21710@deftypevr {@code{libvirt-configuration} parameter} integer max-workers
21711Maximum number of worker threads.
21712
21713If the number of active clients exceeds @code{min-workers}, then more
21714threads are spawned, up to max_workers limit. Typically you'd want
21715max_workers to equal maximum number of clients allowed.
21716
21717Defaults to @samp{20}.
21718
21719@end deftypevr
21720
21721@deftypevr {@code{libvirt-configuration} parameter} integer prio-workers
21722Number of priority workers. If all workers from above pool are stuck, some
21723calls marked as high priority (notably domainDestroy) can be executed in
21724this pool.
21725
21726Defaults to @samp{5}.
21727
21728@end deftypevr
21729
21730@deftypevr {@code{libvirt-configuration} parameter} integer max-requests
21731Total global limit on concurrent RPC calls.
21732
21733Defaults to @samp{20}.
21734
21735@end deftypevr
21736
21737@deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests
21738Limit on concurrent requests from a single client connection. To avoid one
21739client monopolizing the server this should be a small fraction of the global
21740max_requests and max_workers parameter.
21741
21742Defaults to @samp{5}.
21743
21744@end deftypevr
21745
21746@deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers
21747Same as @code{min-workers} but for the admin interface.
21748
21749Defaults to @samp{1}.
21750
21751@end deftypevr
21752
21753@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers
21754Same as @code{max-workers} but for the admin interface.
21755
21756Defaults to @samp{5}.
21757
21758@end deftypevr
21759
21760@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients
21761Same as @code{max-clients} but for the admin interface.
21762
21763Defaults to @samp{5}.
21764
21765@end deftypevr
21766
21767@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients
21768Same as @code{max-queued-clients} but for the admin interface.
21769
21770Defaults to @samp{5}.
21771
21772@end deftypevr
21773
21774@deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests
21775Same as @code{max-client-requests} but for the admin interface.
21776
21777Defaults to @samp{5}.
21778
21779@end deftypevr
21780
21781@deftypevr {@code{libvirt-configuration} parameter} integer log-level
21782Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
21783
21784Defaults to @samp{3}.
21785
21786@end deftypevr
21787
21788@deftypevr {@code{libvirt-configuration} parameter} string log-filters
21789Filtros de log.
21790
21791A filter allows to select a different logging level for a given category of
21792logs The format for a filter is one of:
21793
21794@itemize @bullet
21795@item
21796x:nombre
21797
21798@item
21799x:+nombre
21800
21801@end itemize
21802
21803where @code{name} is a string which is matched against the category given in
21804the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
21805"remote", "qemu", or "util.json" (the name in the filter can be a substring
21806of the full category name, in order to match multiple similar categories),
21807the optional "+" prefix tells libvirt to log stack trace for each message
21808matching name, and @code{x} is the minimal level where matching messages
21809should be logged:
21810
21811@itemize @bullet
21812@item
218131: DEBUG
21814
21815@item
218162: INFO
21817
21818@item
218193: WARNING
21820
21821@item
218224: ERROR
21823
21824@end itemize
21825
21826Multiple filters can be defined in a single filters statement, they just
21827need to be separated by spaces.
21828
21829Defaults to @samp{"3:remote 4:event"}.
21830
21831@end deftypevr
21832
21833@deftypevr {@code{libvirt-configuration} parameter} string log-outputs
21834Logging outputs.
21835
21836An output is one of the places to save logging information The format for an
21837output can be:
21838
21839@table @code
21840@item x:stderr
21841output goes to stderr
21842
21843@item x:syslog:name
21844use syslog for the output and use the given name as the ident
21845
21846@item x:file:file_path
21847output to a file, with the given filepath
21848
21849@item x:journald
21850output to journald logging system
21851
21852@end table
21853
21854In all case the x prefix is the minimal level, acting as a filter
21855
21856@itemize @bullet
21857@item
218581: DEBUG
21859
21860@item
218612: INFO
21862
21863@item
218643: WARNING
21865
21866@item
218674: ERROR
21868
21869@end itemize
21870
21871Multiple outputs can be defined, they just need to be separated by spaces.
21872
21873Defaults to @samp{"3:stderr"}.
21874
21875@end deftypevr
21876
21877@deftypevr {@code{libvirt-configuration} parameter} integer audit-level
21878Allows usage of the auditing subsystem to be altered
21879
21880@itemize @bullet
21881@item
218820: disable all auditing
21883
21884@item
218851: enable auditing, only if enabled on host
21886
21887@item
218882: enable auditing, and exit if disabled on host.
21889
21890@end itemize
21891
21892Defaults to @samp{1}.
21893
21894@end deftypevr
21895
21896@deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging
21897Send audit messages via libvirt logging infrastructure.
21898
21899El valor predeterminado es @samp{#f}
21900
21901@end deftypevr
21902
21903@deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid
21904Host UUID. UUID must not have all digits be the same.
21905
21906El valor predeterminado es @samp{""}.
21907
21908@end deftypevr
21909
21910@deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source
21911Source to read host UUID.
21912
21913@itemize @bullet
21914@item
21915@code{smbios}: fetch the UUID from @code{dmidecode -s system-uuid}
21916
21917@item
21918@code{machine-id}: fetch the UUID from @code{/etc/machine-id}
21919
21920@end itemize
21921
21922If @code{dmidecode} does not provide a valid UUID a temporary UUID will be
21923generated.
21924
21925Defaults to @samp{"smbios"}.
21926
21927@end deftypevr
21928
21929@deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval
21930A keepalive message is sent to a client after @code{keepalive_interval}
21931seconds of inactivity to check if the client is still responding. If set to
21932-1, libvirtd will never send keepalive requests; however clients can still
21933send them and the daemon will send responses.
21934
21935Defaults to @samp{5}.
21936
21937@end deftypevr
21938
21939@deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count
21940Maximum number of keepalive messages that are allowed to be sent to the
21941client without getting any response before the connection is considered
21942broken.
21943
21944In other words, the connection is automatically closed approximately after
21945@code{keepalive_interval * (keepalive_count + 1)} seconds since the last
21946message received from the client. When @code{keepalive-count} is set to 0,
21947connections will be automatically closed after @code{keepalive-interval}
21948seconds of inactivity without sending any keepalive messages.
21949
21950Defaults to @samp{5}.
21951
21952@end deftypevr
21953
21954@deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval
21955Same as above but for admin interface.
21956
21957Defaults to @samp{5}.
21958
21959@end deftypevr
21960
21961@deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count
21962Same as above but for admin interface.
21963
21964Defaults to @samp{5}.
21965
21966@end deftypevr
21967
21968@deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout
21969Timeout for Open vSwitch calls.
21970
21971The @code{ovs-vsctl} utility is used for the configuration and its timeout
21972option is set by default to 5 seconds to avoid potential infinite waits
21973blocking libvirt.
21974
21975Defaults to @samp{5}.
21976
21977@end deftypevr
21978
21979@c %end of autogenerated docs
21980
21981@subsubheading Daemon Virtlog
21982The virtlogd service is a server side daemon component of libvirt that is
21983used to manage logs from virtual machine consoles.
21984
21985This daemon is not used directly by libvirt client applications, rather it
21986is called on their behalf by @code{libvirtd}. By maintaining the logs in a
21987standalone daemon, the main @code{libvirtd} daemon can be restarted without
21988risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec()
21989itself upon receiving @code{SIGUSR1}, to allow live upgrades without
21990downtime.
21991
21992@deffn {Variable Scheme} virtlog-service-type
21993This is the type of the virtlog daemon. Its value must be a
21994@code{virtlog-configuration}.
21995
21996@example
21997(service virtlog-service-type
21998 (virtlog-configuration
21999 (max-clients 1000)))
22000@end example
22001@end deffn
22002
22003@deftypevr {@code{virtlog-configuration} parameter} integer log-level
22004Logging level. 4 errors, 3 warnings, 2 information, 1 debug.
22005
22006Defaults to @samp{3}.
22007
22008@end deftypevr
22009
22010@deftypevr {@code{virtlog-configuration} parameter} string log-filters
22011Filtros de log.
22012
22013A filter allows to select a different logging level for a given category of
22014logs The format for a filter is one of:
22015
22016@itemize @bullet
22017@item
22018x:nombre
22019
22020@item
22021x:+nombre
22022
22023@end itemize
22024
22025where @code{name} is a string which is matched against the category given in
22026the @code{VIR_LOG_INIT()} at the top of each libvirt source file, e.g.,
22027"remote", "qemu", or "util.json" (the name in the filter can be a substring
22028of the full category name, in order to match multiple similar categories),
22029the optional "+" prefix tells libvirt to log stack trace for each message
22030matching name, and @code{x} is the minimal level where matching messages
22031should be logged:
22032
22033@itemize @bullet
22034@item
220351: DEBUG
22036
22037@item
220382: INFO
22039
22040@item
220413: WARNING
22042
22043@item
220444: ERROR
22045
22046@end itemize
22047
22048Multiple filters can be defined in a single filters statement, they just
22049need to be separated by spaces.
22050
22051Defaults to @samp{"3:remote 4:event"}.
22052
22053@end deftypevr
22054
22055@deftypevr {@code{virtlog-configuration} parameter} string log-outputs
22056Logging outputs.
22057
22058An output is one of the places to save logging information The format for an
22059output can be:
22060
22061@table @code
22062@item x:stderr
22063output goes to stderr
22064
22065@item x:syslog:name
22066use syslog for the output and use the given name as the ident
22067
22068@item x:file:file_path
22069output to a file, with the given filepath
22070
22071@item x:journald
22072output to journald logging system
22073
22074@end table
22075
22076In all case the x prefix is the minimal level, acting as a filter
22077
22078@itemize @bullet
22079@item
220801: DEBUG
22081
22082@item
220832: INFO
22084
22085@item
220863: WARNING
22087
22088@item
220894: ERROR
22090
22091@end itemize
22092
22093Multiple outputs can be defined, they just need to be separated by spaces.
22094
22095Defaults to @samp{"3:stderr"}.
22096
22097@end deftypevr
22098
22099@deftypevr {@code{virtlog-configuration} parameter} integer max-clients
22100Maximum number of concurrent client connections to allow over all sockets
22101combined.
22102
22103Defaults to @samp{1024}.
22104
22105@end deftypevr
22106
22107@deftypevr {@code{virtlog-configuration} parameter} integer max-size
22108Maximum file size before rolling over.
22109
22110Defaults to @samp{2MB}
22111
22112@end deftypevr
22113
22114@deftypevr {@code{virtlog-configuration} parameter} integer max-backups
22115Maximum number of backup files to keep.
22116
22117Defaults to @samp{3}
22118
22119@end deftypevr
22120
22121@subsubheading Transparent Emulation with QEMU
22122
22123@cindex emulación
22124@cindex @code{binfmt_misc}
22125@code{qemu-binfmt-service-type} provides support for transparent emulation
22126of program binaries built for different architectures---e.g., it allows you
22127to transparently execute an ARMv7 program on an x86_64 machine. It achieves
22128this by combining the @uref{https://www.qemu.org, QEMU} emulator and the
22129@code{binfmt_misc} feature of the kernel Linux.
22130
22131@defvr {Variable Scheme} qemu-binfmt-service-type
22132This is the type of the QEMU/binfmt service for transparent emulation. Its
22133value must be a @code{qemu-binfmt-configuration} object, which specifies the
22134QEMU package to use as well as the architecture we want to emulated:
22135
22136@example
22137(service qemu-binfmt-service-type
22138 (qemu-binfmt-configuration
22139 (platforms (lookup-qemu-platforms "arm" "aarch64" "mips64el"))))
22140@end example
22141
22142In this example, we enable transparent emulation for the ARM and aarch64
22143platforms. Running @code{herd stop qemu-binfmt} turns it off, and running
22144@code{herd start qemu-binfmt} turns it back on (@pxref{Invoking herd, the
22145@command{herd} command,, shepherd, The GNU Shepherd Manual}).
22146@end defvr
22147
22148@deftp {Tipo de datos} qemu-binfmt-configuration
22149This is the configuration for the @code{qemu-binfmt} service.
22150
22151@table @asis
22152@item @code{platforms} (predeterminadas: @code{'()})
22153The list of emulated QEMU platforms. Each item must be a @dfn{platform
22154object} as returned by @code{lookup-qemu-platforms} (see below).
22155
22156@item @code{guix-support?} (predeterminado: @code{#f})
22157When it is true, QEMU and all its dependencies are added to the build
22158environment of @command{guix-daemon} (@pxref{Invocación de guix-daemon,
22159@code{--chroot-directory} option}). This allows the @code{binfmt_misc}
22160handlers to be used within the build environment, which in turn means that
22161you can transparently build programs for another architecture.
22162
22163For example, let's suppose you're on an x86_64 machine and you have this
22164service:
22165
22166@example
22167(service qemu-binfmt-service-type
22168 (qemu-binfmt-configuration
22169 (platforms (lookup-qemu-platforms "arm"))
22170 (guix-support? #t)))
22171@end example
22172
22173You can run:
22174
22175@example
22176guix build -s armhf-linux inkscape
22177@end example
22178
22179@noindent
22180and it will build Inkscape for ARMv7 @emph{as if it were a native build},
22181transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you'd
22182like to test a package build for an architecture you don't have access to!
22183
22184@item @code{qemu} (predeterminado: @code{qemu})
22185El paquete QEMU usado.
22186@end table
22187@end deftp
22188
22189@deffn {Procedimiento Scheme} lookup-qemu-platforms @var{plataformas}@dots{}
22190Return the list of QEMU platform objects corresponding to
22191@var{platforms}@dots{}. @var{platforms} must be a list of strings
22192corresponding to platform names, such as @code{"arm"}, @code{"sparc"},
22193@code{"mips64el"}, and so on.
22194@end deffn
22195
22196@deffn {Procedimiento Scheme} qemu-platform? @var{obj}
22197Devuelve verdadero si @var{obj} es un objeto plataforma.
22198@end deffn
22199
22200@deffn {Procedimiento Scheme} qemu-platform-name @var{plataforma}
22201Devuelve el nombre de @var{plataforma}---una cadena como @code{"arm"}.
22202@end deffn
22203
22204@node Servicios de control de versiones
22205@subsection Servicios de control de versiones
22206
22207The @code{(gnu services version-control)} module provides a service to allow
22208remote access to local Git repositories. There are three options: the
22209@code{git-daemon-service}, which provides access to repositories via the
22210@code{git://} unsecured TCP-based protocol, extending the @code{nginx} web
22211server to proxy some requests to @code{git-http-backend}, or providing a web
22212interface with @code{cgit-service-type}.
22213
22214@deffn {Procedimiento Scheme} git-daemon-service [#:config (git-daemon-configuration)]
22215
22216Devuelve un servicio que ejecuta @command{git daemon}, un servidor TCP
22217simple para exponer repositorios con el protocolo Git para acceso anónimo.
22218
22219The optional @var{config} argument should be a
22220@code{<git-daemon-configuration>} object, by default it allows read-only
22221access to exported@footnote{By creating the magic file
22222"git-daemon-export-ok" in the repository directory.} repositories under
22223@file{/srv/git}.
22224
22225@end deffn
22226
22227@deftp {Tipo de datos} git-daemon-configuration
22228Tipo de datos que representa la configuración para
22229@code{git-daemon-service}.
22230
22231@table @asis
22232@item @code{package} (predeterminado: @var{git})
22233Package object of the Git distributed version control system.
22234
22235@item @code{export-all?} (predeterminado: @var{#f})
22236Whether to allow access for all Git repositories, even if they do not have
22237the @file{git-daemon-export-ok} file.
22238
22239@item @code{base-path} (predeterminado: @file{/srv/git})
22240Whether to remap all the path requests as relative to the given path. If
22241you run git daemon with @var{(base-path "/srv/git")} on example.com, then if
22242you later try to pull @code{git://example.com/hello.git}, git daemon will
22243interpret the path as @code{/srv/git/hello.git}.
22244
22245@item @code{user-path} (predeterminado: @var{#f})
22246Whether to allow @code{~user} notation to be used in requests. When
22247specified with empty string, requests to @code{git://host/~alice/foo} is
22248taken as a request to access @code{foo} repository in the home directory of
22249user @code{alice}. If @var{(user-path "path")} is specified, the same
22250request is taken as a request to access @code{path/foo} repository in the
22251home directory of user @code{alice}.
22252
22253@item @code{listen} (predeterminado: @var{'()})
22254Whether to listen on specific IP addresses or hostnames, defaults to all.
22255
22256@item @code{port} (predeterminado: @var{#f})
22257Whether to listen on an alternative port, which defaults to 9418.
22258
22259@item @code{whitelist} (predeterminado: @var{'()})
22260If not empty, only allow access to this list of directories.
22261
22262@item @code{extra-options} (predeterminadas: @var{'()})
22263Extra options will be passed to @code{git daemon}, please run @command{man
22264git-daemon} for more information.
22265
22266@end table
22267@end deftp
22268
22269The @code{git://} protocol lacks authentication. When you pull from a
22270repository fetched via @code{git://}, you don't know that the data you
22271receive was modified is really coming from the specified host, and you have
22272your connection is subject to eavesdropping. It's better to use an
22273authenticated and encrypted transport, such as @code{https}. Although Git
22274allows you to serve repositories using unsophisticated file-based web
22275servers, there is a faster protocol implemented by the
22276@code{git-http-backend} program. This program is the back-end of a proper
22277Git web service. It is designed to sit behind a FastCGI proxy. @xref{Servicios Web}, for more on running the necessary @code{fcgiwrap} daemon.
22278
22279Guix has a separate configuration data type for serving Git repositories
22280over HTTP.
22281
22282@deftp {Tipo de datos} git-http-configuration
22283Data type representing the configuration for @code{git-http-service}.
22284
22285@table @asis
22286@item @code{package} (predeterminado: @var{git})
22287Package object of the Git distributed version control system.
22288
22289@item @code{git-root} (predeterminada: @file{/srv/git})
22290Directory containing the Git repositories to expose to the world.
22291
22292@item @code{export-all?} (predeterminado: @var{#f})
22293Whether to expose access for all Git repositories in @var{git-root}, even if
22294they do not have the @file{git-daemon-export-ok} file.
22295
22296@item @code{uri-path} (predeterminada: @file{/git/})
22297Path prefix for Git access. With the default @code{/git/} prefix, this will
22298map @code{http://@var{server}/git/@var{repo}.git} to
22299@code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin with
22300this prefix are not passed on to this Git instance.
22301
22302@item @code{fcgiwrap-socket} (predeterminado: @code{127.0.0.1:9000})
22303The socket on which the @code{fcgiwrap} daemon is listening. @xref{Servicios Web}.
22304@end table
22305@end deftp
22306
22307There is no @code{git-http-service-type}, currently; instead you can create
22308an @code{nginx-location-configuration} from a @code{git-http-configuration}
22309and then add that location to a web server.
22310
22311@deffn {Procedimiento Scheme} git-http-nginx-location-configuration @
22312 [config=(git-http-configuration)] Compute an
22313@code{nginx-location-configuration} that corresponds to the given Git http
22314configuration. An example nginx service definition to serve the default
22315@file{/srv/git} over HTTPS might be:
22316
22317@example
22318(service nginx-service-type
22319 (nginx-configuration
22320 (server-blocks
22321 (list
22322 (nginx-server-configuration
22323 (listen '("443 ssl"))
22324 (server-name "git.my-host.org")
22325 (ssl-certificate
22326 "/etc/letsencrypt/live/git.my-host.org/fullchain.pem")
22327 (ssl-certificate-key
22328 "/etc/letsencrypt/live/git.my-host.org/privkey.pem")
22329 (locations
22330 (list
22331 (git-http-nginx-location-configuration
22332 (git-http-configuration (uri-path "/"))))))))))
22333@end example
22334
22335This example assumes that you are using Let's Encrypt to get your TLS
22336certificate. @xref{Servicios de certificados}. The default @code{certbot}
22337service will redirect all HTTP traffic on @code{git.my-host.org} to HTTPS.
22338You will also need to add an @code{fcgiwrap} proxy to your system services.
22339@xref{Servicios Web}.
22340@end deffn
22341
22342@subsubheading Servicio Cgit
22343
22344@cindex servicio Cgit
22345@cindex Git, web interface
22346@uref{https://git.zx2c4.com/cgit/, Cgit} is a web frontend for Git
22347repositories written in C.
22348
22349The following example will configure the service with default values. By
22350default, Cgit can be accessed on port 80 (@code{http://localhost:80}).
22351
22352@example
22353(service cgit-service-type)
22354@end example
22355
22356The @code{file-object} type designates either a file-like object
22357(@pxref{Expresiones-G, file-like objects}) or a string.
22358
22359@c %start of fragment
22360
22361Available @code{cgit-configuration} fields are:
22362
22363@deftypevr {@code{cgit-configuration} parameter} package package
22364El paquete CGIT.
22365
22366@end deftypevr
22367
22368@deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx
22369Configuración de NGINX.
22370
22371@end deftypevr
22372
22373@deftypevr {@code{cgit-configuration} parameter} file-object about-filter
22374Specifies a command which will be invoked to format the content of about
22375pages (both top-level and for each repository).
22376
22377El valor predeterminado es @samp{""}.
22378
22379@end deftypevr
22380
22381@deftypevr {@code{cgit-configuration} parameter} string agefile
22382Specifies a path, relative to each repository path, which can be used to
22383specify the date and time of the youngest commit in the repository.
22384
22385El valor predeterminado es @samp{""}.
22386
22387@end deftypevr
22388
22389@deftypevr {@code{cgit-configuration} parameter} file-object auth-filter
22390Specifies a command that will be invoked for authenticating repository
22391access.
22392
22393El valor predeterminado es @samp{""}.
22394
22395@end deftypevr
22396
22397@deftypevr {@code{cgit-configuration} parameter} string branch-sort
22398Flag which, when set to @samp{age}, enables date ordering in the branch ref
22399list, and when set @samp{name} enables ordering by branch name.
22400
22401Defaults to @samp{"name"}.
22402
22403@end deftypevr
22404
22405@deftypevr {@code{cgit-configuration} parameter} string cache-root
22406Path used to store the cgit cache entries.
22407
22408Defaults to @samp{"/var/cache/cgit"}.
22409
22410@end deftypevr
22411
22412@deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl
22413Number which specifies the time-to-live, in minutes, for the cached version
22414of repository pages accessed with a fixed SHA1.
22415
22416Defaults to @samp{-1}.
22417
22418@end deftypevr
22419
22420@deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl
22421Number which specifies the time-to-live, in minutes, for the cached version
22422of repository pages accessed without a fixed SHA1.
22423
22424Defaults to @samp{5}.
22425
22426@end deftypevr
22427
22428@deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl
22429Number which specifies the time-to-live, in minutes, for the cached version
22430of the repository summary page.
22431
22432Defaults to @samp{5}.
22433
22434@end deftypevr
22435
22436@deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl
22437Number which specifies the time-to-live, in minutes, for the cached version
22438of the repository index page.
22439
22440Defaults to @samp{5}.
22441
22442@end deftypevr
22443
22444@deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl
22445Number which specifies the time-to-live, in minutes, for the result of
22446scanning a path for Git repositories.
22447
22448Defaults to @samp{15}.
22449
22450@end deftypevr
22451
22452@deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl
22453Number which specifies the time-to-live, in minutes, for the cached version
22454of the repository about page.
22455
22456Defaults to @samp{15}.
22457
22458@end deftypevr
22459
22460@deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl
22461Number which specifies the time-to-live, in minutes, for the cached version
22462of snapshots.
22463
22464Defaults to @samp{5}.
22465
22466@end deftypevr
22467
22468@deftypevr {@code{cgit-configuration} parameter} integer cache-size
22469The maximum number of entries in the cgit cache. When set to @samp{0},
22470caching is disabled.
22471
22472El valor predeterminado es @samp{0}.
22473
22474@end deftypevr
22475
22476@deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort?
22477Sort items in the repo list case sensitively.
22478
22479Defaults to @samp{#t}.
22480
22481@end deftypevr
22482
22483@deftypevr {@code{cgit-configuration} parameter} list clone-prefix
22484List of common prefixes which, when combined with a repository URL,
22485generates valid clone URLs for the repository.
22486
22487Defaults to @samp{()}.
22488
22489@end deftypevr
22490
22491@deftypevr {@code{cgit-configuration} parameter} list clone-url
22492List of @code{clone-url} templates.
22493
22494Defaults to @samp{()}.
22495
22496@end deftypevr
22497
22498@deftypevr {@code{cgit-configuration} parameter} file-object commit-filter
22499Command which will be invoked to format commit messages.
22500
22501El valor predeterminado es @samp{""}.
22502
22503@end deftypevr
22504
22505@deftypevr {@code{cgit-configuration} parameter} string commit-sort
22506Flag which, when set to @samp{date}, enables strict date ordering in the
22507commit log, and when set to @samp{topo} enables strict topological ordering.
22508
22509Defaults to @samp{"git log"}.
22510
22511@end deftypevr
22512
22513@deftypevr {@code{cgit-configuration} parameter} file-object css
22514URL which specifies the css document to include in all cgit pages.
22515
22516Defaults to @samp{"/share/cgit/cgit.css"}.
22517
22518@end deftypevr
22519
22520@deftypevr {@code{cgit-configuration} parameter} file-object email-filter
22521Specifies a command which will be invoked to format names and email address
22522of committers, authors, and taggers, as represented in various places
22523throughout the cgit interface.
22524
22525El valor predeterminado es @samp{""}.
22526
22527@end deftypevr
22528
22529@deftypevr {@code{cgit-configuration} parameter} boolean embedded?
22530Flag which, when set to @samp{#t}, will make cgit generate a HTML fragment
22531suitable for embedding in other HTML pages.
22532
22533El valor predeterminado es @samp{#f}
22534
22535@end deftypevr
22536
22537@deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph?
22538Flag which, when set to @samp{#t}, will make cgit print an ASCII-art commit
22539history graph to the left of the commit messages in the repository log page.
22540
22541El valor predeterminado es @samp{#f}
22542
22543@end deftypevr
22544
22545@deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides?
22546Flag which, when set to @samp{#t}, allows all filter settings to be
22547overridden in repository-specific cgitrc files.
22548
22549El valor predeterminado es @samp{#f}
22550
22551@end deftypevr
22552
22553@deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links?
22554Flag which, when set to @samp{#t}, allows users to follow a file in the log
22555view.
22556
22557El valor predeterminado es @samp{#f}
22558
22559@end deftypevr
22560
22561@deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone?
22562If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git clones.
22563
22564Defaults to @samp{#t}.
22565
22566@end deftypevr
22567
22568@deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links?
22569Flag which, when set to @samp{#t}, will make cgit generate extra links
22570"summary", "commit", "tree" for each repo in the repository index.
22571
22572El valor predeterminado es @samp{#f}
22573
22574@end deftypevr
22575
22576@deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner?
22577Flag which, when set to @samp{#t}, will make cgit display the owner of each
22578repo in the repository index.
22579
22580Defaults to @samp{#t}.
22581
22582@end deftypevr
22583
22584@deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount?
22585Flag which, when set to @samp{#t}, will make cgit print the number of
22586modified files for each commit on the repository log page.
22587
22588El valor predeterminado es @samp{#f}
22589
22590@end deftypevr
22591
22592@deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount?
22593Flag which, when set to @samp{#t}, will make cgit print the number of added
22594and removed lines for each commit on the repository log page.
22595
22596El valor predeterminado es @samp{#f}
22597
22598@end deftypevr
22599
22600@deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches?
22601Flag which, when set to @code{#t}, will make cgit display remote branches in
22602the summary and refs views.
22603
22604El valor predeterminado es @samp{#f}
22605
22606@end deftypevr
22607
22608@deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links?
22609Flag which, when set to @code{1}, will make cgit use the subject of the
22610parent commit as link text when generating links to parent commits in commit
22611view.
22612
22613El valor predeterminado es @samp{#f}
22614
22615@end deftypevr
22616
22617@deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving?
22618Flag which, when set to @samp{#t}, will make cgit use the subject of the
22619parent commit as link text when generating links to parent commits in commit
22620view.
22621
22622El valor predeterminado es @samp{#f}
22623
22624@end deftypevr
22625
22626@deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers?
22627Flag which, when set to @samp{#t}, will make cgit generate linenumber links
22628for plaintext blobs printed in the tree view.
22629
22630Defaults to @samp{#t}.
22631
22632@end deftypevr
22633
22634@deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config?
22635Flag which, when set to @samp{#f}, will allow cgit to use Git config to set
22636any repo specific settings.
22637
22638El valor predeterminado es @samp{#f}
22639
22640@end deftypevr
22641
22642@deftypevr {@code{cgit-configuration} parameter} file-object favicon
22643URL used as link to a shortcut icon for cgit.
22644
22645Defaults to @samp{"/favicon.ico"}.
22646
22647@end deftypevr
22648
22649@deftypevr {@code{cgit-configuration} parameter} string footer
22650The content of the file specified with this option will be included verbatim
22651at the bottom of all pages (i.e.@: it replaces the standard "generated
22652by..."@: message).
22653
22654El valor predeterminado es @samp{""}.
22655
22656@end deftypevr
22657
22658@deftypevr {@code{cgit-configuration} parameter} string head-include
22659The content of the file specified with this option will be included verbatim
22660in the HTML HEAD section on all pages.
22661
22662El valor predeterminado es @samp{""}.
22663
22664@end deftypevr
22665
22666@deftypevr {@code{cgit-configuration} parameter} string header
22667The content of the file specified with this option will be included verbatim
22668at the top of all pages.
22669
22670El valor predeterminado es @samp{""}.
22671
22672@end deftypevr
22673
22674@deftypevr {@code{cgit-configuration} parameter} file-object include
22675Name of a configfile to include before the rest of the current config- file
22676is parsed.
22677
22678El valor predeterminado es @samp{""}.
22679
22680@end deftypevr
22681
22682@deftypevr {@code{cgit-configuration} parameter} string index-header
22683The content of the file specified with this option will be included verbatim
22684above the repository index.
22685
22686El valor predeterminado es @samp{""}.
22687
22688@end deftypevr
22689
22690@deftypevr {@code{cgit-configuration} parameter} string index-info
22691The content of the file specified with this option will be included verbatim
22692below the heading on the repository index page.
22693
22694El valor predeterminado es @samp{""}.
22695
22696@end deftypevr
22697
22698@deftypevr {@code{cgit-configuration} parameter} boolean local-time?
22699Flag which, if set to @samp{#t}, makes cgit print commit and tag times in
22700the servers timezone.
22701
22702El valor predeterminado es @samp{#f}
22703
22704@end deftypevr
22705
22706@deftypevr {@code{cgit-configuration} parameter} file-object logo
22707URL which specifies the source of an image which will be used as a logo on
22708all cgit pages.
22709
22710Defaults to @samp{"/share/cgit/cgit.png"}.
22711
22712@end deftypevr
22713
22714@deftypevr {@code{cgit-configuration} parameter} string logo-link
22715URL loaded when clicking on the cgit logo image.
22716
22717El valor predeterminado es @samp{""}.
22718
22719@end deftypevr
22720
22721@deftypevr {@code{cgit-configuration} parameter} file-object owner-filter
22722Command which will be invoked to format the Owner column of the main page.
22723
22724El valor predeterminado es @samp{""}.
22725
22726@end deftypevr
22727
22728@deftypevr {@code{cgit-configuration} parameter} integer max-atom-items
22729Number of items to display in atom feeds view.
22730
22731Defaults to @samp{10}.
22732
22733@end deftypevr
22734
22735@deftypevr {@code{cgit-configuration} parameter} integer max-commit-count
22736Number of entries to list per page in "log" view.
22737
22738Defaults to @samp{50}.
22739
22740@end deftypevr
22741
22742@deftypevr {@code{cgit-configuration} parameter} integer max-message-length
22743Number of commit message characters to display in "log" view.
22744
22745Defaults to @samp{80}.
22746
22747@end deftypevr
22748
22749@deftypevr {@code{cgit-configuration} parameter} integer max-repo-count
22750Specifies the number of entries to list per page on the repository index
22751page.
22752
22753Defaults to @samp{50}.
22754
22755@end deftypevr
22756
22757@deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length
22758Specifies the maximum number of repo description characters to display on
22759the repository index page.
22760
22761Defaults to @samp{80}.
22762
22763@end deftypevr
22764
22765@deftypevr {@code{cgit-configuration} parameter} integer max-blob-size
22766Specifies the maximum size of a blob to display HTML for in KBytes.
22767
22768El valor predeterminado es @samp{0}.
22769
22770@end deftypevr
22771
22772@deftypevr {@code{cgit-configuration} parameter} string max-stats
22773Maximum statistics period. Valid values are @samp{week},@samp{month},
22774@samp{quarter} and @samp{year}.
22775
22776El valor predeterminado es @samp{""}.
22777
22778@end deftypevr
22779
22780@deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype
22781Mimetype for the specified filename extension.
22782
22783Defaults to @samp{((gif "image/gif") (html "text/html") (jpg "image/jpeg")
22784(jpeg "image/jpeg") (pdf "application/pdf") (png "image/png") (svg
22785"image/svg+xml"))}.
22786
22787@end deftypevr
22788
22789@deftypevr {@code{cgit-configuration} parameter} file-object mimetype-file
22790Specifies the file to use for automatic mimetype lookup.
22791
22792El valor predeterminado es @samp{""}.
22793
22794@end deftypevr
22795
22796@deftypevr {@code{cgit-configuration} parameter} string module-link
22797Text which will be used as the formatstring for a hyperlink when a submodule
22798is printed in a directory listing.
22799
22800El valor predeterminado es @samp{""}.
22801
22802@end deftypevr
22803
22804@deftypevr {@code{cgit-configuration} parameter} boolean nocache?
22805If set to the value @samp{#t} caching will be disabled.
22806
22807El valor predeterminado es @samp{#f}
22808
22809@end deftypevr
22810
22811@deftypevr {@code{cgit-configuration} parameter} boolean noplainemail?
22812If set to @samp{#t} showing full author email addresses will be disabled.
22813
22814El valor predeterminado es @samp{#f}
22815
22816@end deftypevr
22817
22818@deftypevr {@code{cgit-configuration} parameter} boolean noheader?
22819Flag which, when set to @samp{#t}, will make cgit omit the standard header
22820on all pages.
22821
22822El valor predeterminado es @samp{#f}
22823
22824@end deftypevr
22825
22826@deftypevr {@code{cgit-configuration} parameter} project-list project-list
22827A list of subdirectories inside of @code{repository-directory}, relative to
22828it, that should loaded as Git repositories. An empty list means that all
22829subdirectories will be loaded.
22830
22831Defaults to @samp{()}.
22832
22833@end deftypevr
22834
22835@deftypevr {@code{cgit-configuration} parameter} file-object readme
22836Text which will be used as default value for @code{cgit-repo-readme}.
22837
22838El valor predeterminado es @samp{""}.
22839
22840@end deftypevr
22841
22842@deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix?
22843If set to @code{#t} and @code{repository-directory} is enabled, if any
22844repositories are found with a suffix of @code{.git}, this suffix will be
22845removed for the URL and name.
22846
22847El valor predeterminado es @samp{#f}
22848
22849@end deftypevr
22850
22851@deftypevr {@code{cgit-configuration} parameter} integer renamelimit
22852Maximum number of files to consider when detecting renames.
22853
22854Defaults to @samp{-1}.
22855
22856@end deftypevr
22857
22858@deftypevr {@code{cgit-configuration} parameter} string repository-sort
22859The way in which repositories in each section are sorted.
22860
22861El valor predeterminado es @samp{""}.
22862
22863@end deftypevr
22864
22865@deftypevr {@code{cgit-configuration} parameter} robots-list robots
22866Text used as content for the @code{robots} meta-tag.
22867
22868Defaults to @samp{("noindex" "nofollow")}.
22869
22870@end deftypevr
22871
22872@deftypevr {@code{cgit-configuration} parameter} string root-desc
22873Text printed below the heading on the repository index page.
22874
22875Defaults to @samp{"a fast webinterface for the git dscm"}.
22876
22877@end deftypevr
22878
22879@deftypevr {@code{cgit-configuration} parameter} string root-readme
22880The content of the file specified with this option will be included verbatim
22881below thef "about" link on the repository index page.
22882
22883El valor predeterminado es @samp{""}.
22884
22885@end deftypevr
22886
22887@deftypevr {@code{cgit-configuration} parameter} string root-title
22888Text printed as heading on the repository index page.
22889
22890El valor predeterminado es @samp{""}.
22891
22892@end deftypevr
22893
22894@deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path
22895If set to @samp{#t} and repository-directory is enabled,
22896repository-directory will recurse into directories whose name starts with a
22897period. Otherwise, repository-directory will stay away from such
22898directories, considered as "hidden". Note that this does not apply to the
22899".git" directory in non-bare repos.
22900
22901El valor predeterminado es @samp{#f}
22902
22903@end deftypevr
22904
22905@deftypevr {@code{cgit-configuration} parameter} list snapshots
22906Text which specifies the default set of snapshot formats that cgit generates
22907links for.
22908
22909Defaults to @samp{()}.
22910
22911@end deftypevr
22912
22913@deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory
22914Name of the directory to scan for repositories (represents
22915@code{scan-path}).
22916
22917Defaults to @samp{"/srv/git"}.
22918
22919@end deftypevr
22920
22921@deftypevr {@code{cgit-configuration} parameter} string section
22922The name of the current repository section - all repositories defined after
22923this option will inherit the current section name.
22924
22925El valor predeterminado es @samp{""}.
22926
22927@end deftypevr
22928
22929@deftypevr {@code{cgit-configuration} parameter} string section-sort
22930Flag which, when set to @samp{1}, will sort the sections on the repository
22931listing by name.
22932
22933El valor predeterminado es @samp{""}.
22934
22935@end deftypevr
22936
22937@deftypevr {@code{cgit-configuration} parameter} integer section-from-path
22938A number which, if defined prior to repository-directory, specifies how many
22939path elements from each repo path to use as a default section name.
22940
22941El valor predeterminado es @samp{0}.
22942
22943@end deftypevr
22944
22945@deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs?
22946If set to @samp{#t} shows side-by-side diffs instead of unidiffs per
22947default.
22948
22949El valor predeterminado es @samp{#f}
22950
22951@end deftypevr
22952
22953@deftypevr {@code{cgit-configuration} parameter} file-object source-filter
22954Specifies a command which will be invoked to format plaintext blobs in the
22955tree view.
22956
22957El valor predeterminado es @samp{""}.
22958
22959@end deftypevr
22960
22961@deftypevr {@code{cgit-configuration} parameter} integer summary-branches
22962Specifies the number of branches to display in the repository "summary"
22963view.
22964
22965Defaults to @samp{10}.
22966
22967@end deftypevr
22968
22969@deftypevr {@code{cgit-configuration} parameter} integer summary-log
22970Specifies the number of log entries to display in the repository "summary"
22971view.
22972
22973Defaults to @samp{10}.
22974
22975@end deftypevr
22976
22977@deftypevr {@code{cgit-configuration} parameter} integer summary-tags
22978Specifies the number of tags to display in the repository "summary" view.
22979
22980Defaults to @samp{10}.
22981
22982@end deftypevr
22983
22984@deftypevr {@code{cgit-configuration} parameter} string strict-export
22985Filename which, if specified, needs to be present within the repository for
22986cgit to allow access to that repository.
22987
22988El valor predeterminado es @samp{""}.
22989
22990@end deftypevr
22991
22992@deftypevr {@code{cgit-configuration} parameter} string virtual-root
22993URL which, if specified, will be used as root for all cgit links.
22994
22995Defaults to @samp{"/"}.
22996
22997@end deftypevr
22998
22999@deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories
23000A list of @dfn{cgit-repo} records to use with config.
23001
23002Defaults to @samp{()}.
23003
23004Available @code{repository-cgit-configuration} fields are:
23005
23006@deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots
23007A mask of snapshot formats for this repo that cgit generates links for,
23008restricted by the global @code{snapshots} setting.
23009
23010Defaults to @samp{()}.
23011
23012@end deftypevr
23013
23014@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter
23015Override the default @code{source-filter}.
23016
23017El valor predeterminado es @samp{""}.
23018
23019@end deftypevr
23020
23021@deftypevr {@code{repository-cgit-configuration} parameter} repo-string url
23022The relative URL used to access the repository.
23023
23024El valor predeterminado es @samp{""}.
23025
23026@end deftypevr
23027
23028@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter
23029Override the default @code{about-filter}.
23030
23031El valor predeterminado es @samp{""}.
23032
23033@end deftypevr
23034
23035@deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort
23036Flag which, when set to @samp{age}, enables date ordering in the branch ref
23037list, and when set to @samp{name} enables ordering by branch name.
23038
23039El valor predeterminado es @samp{""}.
23040
23041@end deftypevr
23042
23043@deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url
23044A list of URLs which can be used to clone repo.
23045
23046Defaults to @samp{()}.
23047
23048@end deftypevr
23049
23050@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter
23051Override the default @code{commit-filter}.
23052
23053El valor predeterminado es @samp{""}.
23054
23055@end deftypevr
23056
23057@deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort
23058Flag which, when set to @samp{date}, enables strict date ordering in the
23059commit log, and when set to @samp{topo} enables strict topological ordering.
23060
23061El valor predeterminado es @samp{""}.
23062
23063@end deftypevr
23064
23065@deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch
23066The name of the default branch for this repository. If no such branch
23067exists in the repository, the first branch name (when sorted) is used as
23068default instead. By default branch pointed to by HEAD, or "master" if there
23069is no suitable HEAD.
23070
23071El valor predeterminado es @samp{""}.
23072
23073@end deftypevr
23074
23075@deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc
23076The value to show as repository description.
23077
23078El valor predeterminado es @samp{""}.
23079
23080@end deftypevr
23081
23082@deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage
23083The value to show as repository homepage.
23084
23085El valor predeterminado es @samp{""}.
23086
23087@end deftypevr
23088
23089@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter
23090Override the default @code{email-filter}.
23091
23092El valor predeterminado es @samp{""}.
23093
23094@end deftypevr
23095
23096@deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph?
23097A flag which can be used to disable the global setting
23098@code{enable-commit-graph?}.
23099
23100Defaults to @samp{disabled}.
23101
23102@end deftypevr
23103
23104@deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount?
23105A flag which can be used to disable the global setting
23106@code{enable-log-filecount?}.
23107
23108Defaults to @samp{disabled}.
23109
23110@end deftypevr
23111
23112@deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount?
23113A flag which can be used to disable the global setting
23114@code{enable-log-linecount?}.
23115
23116Defaults to @samp{disabled}.
23117
23118@end deftypevr
23119
23120@deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches?
23121Flag which, when set to @code{#t}, will make cgit display remote branches in
23122the summary and refs views.
23123
23124Defaults to @samp{disabled}.
23125
23126@end deftypevr
23127
23128@deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links?
23129A flag which can be used to override the global setting
23130@code{enable-subject-links?}.
23131
23132Defaults to @samp{disabled}.
23133
23134@end deftypevr
23135
23136@deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving?
23137A flag which can be used to override the global setting
23138@code{enable-html-serving?}.
23139
23140Defaults to @samp{disabled}.
23141
23142@end deftypevr
23143
23144@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide?
23145Flag which, when set to @code{#t}, hides the repository from the repository
23146index.
23147
23148El valor predeterminado es @samp{#f}
23149
23150@end deftypevr
23151
23152@deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore?
23153Flag which, when set to @samp{#t}, ignores the repository.
23154
23155El valor predeterminado es @samp{#f}
23156
23157@end deftypevr
23158
23159@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo
23160URL which specifies the source of an image which will be used as a logo on
23161this repo’s pages.
23162
23163El valor predeterminado es @samp{""}.
23164
23165@end deftypevr
23166
23167@deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link
23168URL loaded when clicking on the cgit logo image.
23169
23170El valor predeterminado es @samp{""}.
23171
23172@end deftypevr
23173
23174@deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter
23175Override the default @code{owner-filter}.
23176
23177El valor predeterminado es @samp{""}.
23178
23179@end deftypevr
23180
23181@deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link
23182Text which will be used as the formatstring for a hyperlink when a submodule
23183is printed in a directory listing. The arguments for the formatstring are
23184the path and SHA1 of the submodule commit.
23185
23186El valor predeterminado es @samp{""}.
23187
23188@end deftypevr
23189
23190@deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path
23191Text which will be used as the formatstring for a hyperlink when a submodule
23192with the specified subdirectory path is printed in a directory listing.
23193
23194Defaults to @samp{()}.
23195
23196@end deftypevr
23197
23198@deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats
23199Override the default maximum statistics period.
23200
23201El valor predeterminado es @samp{""}.
23202
23203@end deftypevr
23204
23205@deftypevr {@code{repository-cgit-configuration} parameter} repo-string name
23206El valor a mostrar como nombre del repositorio.
23207
23208El valor predeterminado es @samp{""}.
23209
23210@end deftypevr
23211
23212@deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner
23213A value used to identify the owner of the repository.
23214
23215El valor predeterminado es @samp{""}.
23216
23217@end deftypevr
23218
23219@deftypevr {@code{repository-cgit-configuration} parameter} repo-string path
23220La ruta absoluta al directorio del repositorio.
23221
23222El valor predeterminado es @samp{""}.
23223
23224@end deftypevr
23225
23226@deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme
23227A path (relative to repo) which specifies a file to include verbatim as the
23228"About" page for this repo.
23229
23230El valor predeterminado es @samp{""}.
23231
23232@end deftypevr
23233
23234@deftypevr {@code{repository-cgit-configuration} parameter} repo-string section
23235The name of the current repository section - all repositories defined after
23236this option will inherit the current section name.
23237
23238El valor predeterminado es @samp{""}.
23239
23240@end deftypevr
23241
23242@deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options
23243Extra options will be appended to cgitrc file.
23244
23245Defaults to @samp{()}.
23246
23247@end deftypevr
23248
23249@end deftypevr
23250
23251@deftypevr {@code{cgit-configuration} parameter} list extra-options
23252Extra options will be appended to cgitrc file.
23253
23254Defaults to @samp{()}.
23255
23256@end deftypevr
23257
23258
23259@c %end of fragment
23260
23261However, it could be that you just want to get a @code{cgitrc} up and
23262running. In that case, you can pass an @code{opaque-cgit-configuration} as
23263a record to @code{cgit-service-type}. As its name indicates, an opaque
23264configuration does not have easy reflective capabilities.
23265
23266Available @code{opaque-cgit-configuration} fields are:
23267
23268@deftypevr {@code{opaque-cgit-configuration} parameter} package cgit
23269El paquete cgit.
23270@end deftypevr
23271
23272@deftypevr {@code{opaque-cgit-configuration} parameter} string string
23273The contents of the @code{cgitrc}, as a string.
23274@end deftypevr
23275
23276For example, if your @code{cgitrc} is just the empty string, you could
23277instantiate a cgit service like this:
23278
23279@example
23280(service cgit-service-type
23281 (opaque-cgit-configuration
23282 (cgitrc "")))
23283@end example
23284
23285@subsubheading Servicio Gitolite
23286
23287@cindex servicio Gitolite
23288@cindex Git, alojamiento
23289@uref{http://gitolite.com/gitolite/, Gitolite} is a tool for hosting Git
23290repositories on a central server.
23291
23292Gitolite can handle multiple repositories and users, and supports flexible
23293configuration of the permissions for the users on the repositories.
23294
23295The following example will configure Gitolite using the default @code{git}
23296user, and the provided SSH public key.
23297
23298@example
23299(service gitolite-service-type
23300 (gitolite-configuration
23301 (admin-pubkey (plain-file
23302 "sunombre.pub"
23303 "ssh-rsa AAAA... guix@@example.com"))))
23304@end example
23305
23306Gitolite is configured through a special admin repository which you can
23307clone, for example, if you setup Gitolite on @code{example.com}, you would
23308run the following command to clone the admin repository.
23309
23310@example
23311git clone git@@example.com:gitolite-admin
23312@end example
23313
23314When the Gitolite service is activated, the provided @code{admin-pubkey}
23315will be inserted in to the @file{keydir} directory in the gitolite-admin
23316repository. If this results in a change in the repository, it will be
23317committed using the message ``gitolite setup by GNU Guix''.
23318
23319@deftp {Tipo de datos} gitolite-configuration
23320Tipo de datos que representa la configuración de
23321@code{gitolite-service-type}.
23322
23323@table @asis
23324@item @code{package} (predeterminado: @var{gitolite})
23325Paquete Gitolite usado.
23326
23327@item @code{user} (predeterminado: @var{git})
23328User to use for Gitolite. This will be user that you use when accessing
23329Gitolite over SSH.
23330
23331@item @code{group} (predeterminado: @var{git})
23332Grupo usado por Gitolite.
23333
23334@item @code{home-directory} (predeterminado: @var{"/var/lib/gitolite"})
23335Directory in which to store the Gitolite configuration and repositories.
23336
23337@item @code{rc-file} (predeterminado: @var{(gitolite-rc-file)})
23338A ``file-like'' object (@pxref{Expresiones-G, file-like objects}),
23339representing the configuration for Gitolite.
23340
23341@item @code{admin-pubkey} (predeterminada: @var{#f})
23342A ``file-like'' object (@pxref{Expresiones-G, file-like objects}) used to
23343setup Gitolite. This will be inserted in to the @file{keydir} directory
23344within the gitolite-admin repository.
23345
23346To specify the SSH key as a string, use the @code{plain-file} function.
23347
23348@example
23349(plain-file "yourname.pub" "ssh-rsa AAAA... guix@@example.com")
23350@end example
23351
23352@end table
23353@end deftp
23354
23355@deftp {Tipo de datos} gitolite-rc-file
23356Tipo de datos que representa el fichero RC de Gitolite.
23357
23358@table @asis
23359@item @code{umask} (predeterminada: @code{#o0077})
23360This controls the permissions Gitolite sets on the repositories and their
23361contents.
23362
23363A value like @code{#o0027} will give read access to the group used by
23364Gitolite (by default: @code{git}). This is necessary when using Gitolite
23365with software like cgit or gitweb.
23366
23367@item @code{git-config-keys} (predeterminadas: @code{""})
23368Gitolite allows you to set git config values using the "config"
23369keyword. This setting allows control over the config keys to accept.
23370
23371@item @code{roles} (predeterminados: @code{'(("READERS" . 1) ("WRITERS" . ))})
23372Set the role names allowed to be used by users running the perms command.
23373
23374@item @code{enable} (default: @code{'("help" "desc" "info" "perms" "writable" "ssh-authkeys" "git-config" "daemon" "gitweb")})
23375This setting controls the commands and features to enable within Gitolite.
23376
23377@end table
23378@end deftp
23379
23380
23381@node Servicios de juegos
23382@subsection Servicios de juegos
23383
23384@subsubheading El servicio de La batalla por Wesnoth
23385@cindex wesnothd
23386@uref{https://wesnoth.org, La batalla por Wesnoth} es un juego de estrategia
23387táctica, de fantasía y basado en turnos, con varias campañas de una
23388jugadora, y partidas para múltiples jugadoras (tanto en red como
23389localmente).
23390
23391@defvar {Variable Scheme} wesnothd-service-type
23392Service type for the wesnothd service. Its value must be a
23393@code{wesnothd-configuration} object. To run wesnothd in the default
23394configuration, instantiate it as:
23395
23396@example
23397(service wesnothd-service-type)
23398@end example
23399@end defvar
23400
23401@deftp {Tipo de datos} wesnothd-configuration
23402Tipo de datos que representa la configuración de @command{wesnothd}.
23403
23404@table @asis
23405@item @code{package} (predeterminado: @code{wesnoth-server})
23406El paquete del servidor wesnoth usado.
23407
23408@item @code{port} (predeterminado: @code{15000})
23409Número de puerto usado por el servidor.
23410@end table
23411@end deftp
23412
23413@node Servicios misceláneos
23414@subsection Servicios misceláneos
23415
23416@cindex huella dactilar
23417@subsubheading Servicios de huella dactilar
23418
23419The @code{(gnu services authentication)} module provides a DBus service to
23420read and identify fingerprints via a fingerprint sensor.
23421
23422@defvr {Variable Scheme} fprintd-service-type
23423The service type for @command{fprintd}, which provides the fingerprint
23424reading capability.
23425
23426@example
23427(service fprintd-service-type)
23428@end example
23429@end defvr
23430
23431@cindex sysctl
23432@subsubheading Servicios de control del sistema
23433
23434The @code{(gnu services sysctl)} provides a service to configure kernel
23435parameters at boot.
23436
23437@defvr {Variable Scheme} sysctl-service-type
23438The service type for @command{sysctl}, which modifies kernel parameters
23439under @file{/proc/sys/}. To enable IPv4 forwarding, it can be instantiated
23440as:
23441
23442@example
23443(service sysctl-service-type
23444 (sysctl-configuration
23445 (settings '(("net.ipv4.ip_forward" . "1")))))
23446@end example
23447@end defvr
23448
23449@deftp {Tipo de datos} sysctl-configuration
23450Tipo de datos que representa la configuración de @command{sysctl}.
23451
23452@table @asis
23453@item @code{sysctl} (predeterminado: @code{(file-append procps "/sbin/sysctl"})
23454El ejecutable @command{sysctl} usado.
23455
23456@item @code{settings} (predeterminados: @code{'()})
23457An association list specifies kernel parameters and their values.
23458@end table
23459@end deftp
23460
23461@cindex pcscd
23462@subsubheading Servicio del daemon de tarjetas inteligentes PC/SC
23463
23464The @code{(gnu services security-token)} module provides the following
23465service to run @command{pcscd}, the PC/SC Smart Card Daemon.
23466@command{pcscd} is the daemon program for pcsc-lite and the MuscleCard
23467framework. It is a resource manager that coordinates communications with
23468smart card readers, smart cards and cryptographic tokens that are connected
23469to the system.
23470
23471@defvr {Variable Scheme} pcscd-service-type
23472Service type for the @command{pcscd} service. Its value must be a
23473@code{pcscd-configuration} object. To run pcscd in the default
23474configuration, instantiate it as:
23475
23476@example
23477(service pcscd-service-type)
23478@end example
23479@end defvr
23480
23481@deftp {Tipo de datos} pcscd-configuration
23482The data type representing the configuration of @command{pcscd}.
23483
23484@table @asis
23485@item @code{pcsc-lite} (predeterminado: @code{pcsc-lite})
23486The pcsc-lite package that provides pcscd.
23487@item @code{usb-drivers} (predeterminado: @code{(list ccid)})
23488List of packages that provide USB drivers to pcscd. Drivers are expected to
23489be under @file{pcsc/drivers} in the store directory of the package.
23490@end table
23491@end deftp
23492
23493@cindex lirc
23494@subsubheading Servicio Lirc
23495
23496El módulo @code{(gnu services lirc)} proporciona el siguiente servicio.
23497
23498@deffn {Procedimiento Scheme} lirc-service [#:lirc lirc] @
23499 [#:device #f] [#:driver #f] [#:config-file #f] @ [#:extra-options '()]
23500Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that
23501decodes infrared signals from remote controls.
23502
23503Optionally, @var{device}, @var{driver} and @var{config-file} (configuration
23504file name) may be specified. See @command{lircd} manual for details.
23505
23506Finally, @var{extra-options} is a list of additional command-line options
23507passed to @command{lircd}.
23508@end deffn
23509
23510@cindex spice
23511@subsubheading Servicio Spice
23512
23513El módulo @code{(gnu services spice)} proporciona el siguiente servicio.
23514
23515@deffn {Procedimiento Scheme} spice-vdagent-service [#:spice-vdagent]
23516Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a
23517daemon that enables sharing the clipboard with a vm and setting the guest
23518display resolution when the graphical console window resizes.
23519@end deffn
23520
23521@cindex inputattach
23522@subsubheading inputattach Service
23523
23524@cindex tablet input, for Xorg
23525@cindex touchscreen input, for Xorg
23526The @uref{https://linuxwacom.github.io/, inputattach} service allows you to
23527use input devices such as Wacom tablets, touchscreens, or joysticks with the
23528Xorg display server.
23529
23530@deffn {Scheme Variable} inputattach-service-type
23531Type of a service that runs @command{inputattach} on a device and dispatches
23532events from it.
23533@end deffn
23534
23535@deftp {Data Type} inputattach-configuration
23536@table @asis
23537@item @code{device-type} (default: @code{"wacom"})
23538The type of device to connect to. Run @command{inputattach --help}, from
23539the @code{inputattach} package, to see the list of supported device types.
23540
23541@item @code{device} (default: @code{"/dev/ttyS0"})
23542The device file to connect to the device.
23543
23544@item @code{log-file} (default: @code{#f})
23545If true, this must be the name of a file to log messages to.
23546@end table
23547@end deftp
23548
23549@subsection Servicios de diccionario
23550@cindex diccionario
23551El módulo @code{(gnu services dict)} proporciona el servicio siguiente:
23552
23553@deffn {Procedimiento Scheme} dicod-service [#:config (dicod-configuration)]
23554Devuelve un servicio que ejecuta el daemon @command{dicod}, una
23555implementación del servidor DICT (@pxref{Dicod,,, dico, GNU Dico Manual}).
23556
23557El parámetro opcional @var{config} especifica la configuración para
23558@command{dicod}, que debe ser un objeto @code{<dicod-configuration>}, por
23559defecto proporciona el diccionario colaborativo internacional de Inglés de
23560GNU.
23561
23562You can add @command{open localhost} to your @file{~/.dico} file to make
23563@code{localhost} the default server for @command{dico} client
23564(@pxref{Initialization File,,, dico, GNU Dico Manual}).
23565@end deffn
23566
23567@deftp {Tipo de datos} dicod-configuration
23568Tipo de datos que representa la configuración de dicod.
23569
23570@table @asis
23571@item @code{dico} (predeterminado: @var{dico})
23572Package object of the GNU Dico dictionary server.
23573
23574@item @code{interfaces} (predeterminada: @var{'("localhost")})
23575This is the list of IP addresses and ports and possibly socket file names to
23576listen to (@pxref{Server Settings, @code{listen} directive,, dico, GNU Dico
23577Manual}).
23578
23579@item @code{handlers} (predeterminados: @var{'()})
23580List of @code{<dicod-handler>} objects denoting handlers (module instances).
23581
23582@item @code{databases} (predeterminada: @var{(list %dicod-database:gcide)})
23583List of @code{<dicod-database>} objects denoting dictionaries to be served.
23584@end table
23585@end deftp
23586
23587@deftp {Tipo de datos} dicod-handler
23588Data type representing a dictionary handler (module instance).
23589
23590@table @asis
23591@item @code{name}
23592Name of the handler (module instance).
23593
23594@item @code{module} (predeterminado: @var{#f})
23595Name of the dicod module of the handler (instance). If it is @code{#f}, the
23596module has the same name as the handler. (@pxref{Módulos,,, dico, GNU Dico
23597Manual}).
23598
23599@item @code{options}
23600List of strings or gexps representing the arguments for the module handler
23601@end table
23602@end deftp
23603
23604@deftp {Tipo de datos} dicod-database
23605Tipo de datos que representa una base de datos de diccionario.
23606
23607@table @asis
23608@item @code{name}
23609Nombre de la base de datos, será usada en las órdenes DICT.
23610
23611@item @code{handler}
23612Name of the dicod handler (module instance) used by this database
23613(@pxref{Handlers,,, dico, GNU Dico Manual}).
23614
23615@item @code{complex?} (predeterminado: @var{#f})
23616Whether the database configuration complex. The complex configuration will
23617need a corresponding @code{<dicod-handler>} object, otherwise not.
23618
23619@item @code{options}
23620List of strings or gexps representing the arguments for the database
23621(@pxref{Databases,,, dico, GNU Dico Manual}).
23622@end table
23623@end deftp
23624
23625@defvr {Variable Scheme} %dicod-database:gcide
23626A @code{<dicod-database>} object serving the GNU Collaborative International
23627Dictionary of English using the @code{gcide} package.
23628@end defvr
23629
23630The following is an example @code{dicod-service} configuration.
23631
23632@example
23633(dicod-service #:config
23634 (dicod-configuration
23635 (handlers (list (dicod-handler
23636 (name "wordnet")
23637 (module "dictorg")
23638 (options
23639 (list #~(string-append "dbdir=" #$wordnet))))))
23640 (databases (list (dicod-database
23641 (name "wordnet")
23642 (complex? #t)
23643 (handler "wordnet")
23644 (options '("database=wn")))
23645 %dicod-database:gcide))))
23646@end example
23647
23648@cindex Docker
23649@subsubheading Docker Service
23650
23651The @code{(gnu services docker)} module provides the following service.
23652
23653@defvr {Scheme Variable} docker-service-type
23654
23655This is the type of the service that runs
23656@url{http://www.docker.com,Docker}, a daemon that can execute application
23657bundles (sometimes referred to as ``containers'') in isolated environments.
23658
23659@end defvr
23660
23661@deftp {Data Type} docker-configuration
23662This is the data type representing the configuration of Docker and
23663Containerd.
23664
23665@table @asis
23666
23667@item @code{package} (default: @code{docker})
23668The Docker package to use.
23669
23670@item @code{containerd} (default: @var{containerd})
23671The Containerd package to use.
23672
23673@end table
23674@end deftp
23675
23676@node Programas con setuid
23677@section Programas con setuid
23678
23679@cindex programas con setuid
23680Algunos programas necesitan ejecutarse con privilegios de ``root'', incluso
23681cuando se ejecutan por usuarias sin privilegios. Un ejemplo notable es el
23682programa @command{passwd}, que las usuarias ejecutan para cambiar su
23683contraseña, y que necesita acceso a los ficheros @file{/etc/passwd} y
23684@file{/etc/shadow}---algo normalmente restringido a root, por razones de
23685seguridad obvias. Para solventarlo, estos ejecutables tienen @dfn{setuid de
23686root}, lo que significa que siempre se ejecutan con privilegios de root
23687(@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual},
23688para más información sobre el mecanismo setuid).
23689
23690El almacén en sí @emph{no puede} contener programas setuid: sería un
23691problema de seguridad puesto que cualquier usuaria del sistema puede
23692escribir derivaciones que pueblen el almacén (@pxref{El almacén}). Por tanto,
23693se usa un mecanismo diferente: en vez de cambiar el bit de setuid
23694directamente en los ficheros que se encuentran en el almacén, se permite que
23695la administradora del sistema @emph{declare} qué programas deberían tener
23696setuid de root.
23697
23698El campo @code{setuid-programs} de una declaración @code{operating-system}
23699contiene una lista de expresiones-G que denotan nombres de programas que
23700tendrán setuid de root (@pxref{Uso de la configuración del sistema}). Por
23701ejemplo, el programa @command{passwd}, que es parte del paquete Shadow,
23702puede designarse con esta expresión-G (@pxref{Expresiones-G}):
23703
23704@example
23705#~(string-append #$shadow "/bin/passwd")
23706@end example
23707
23708Un conjunto predeterminado de programas con el bit setuid se define en la
23709variable @code{%setuid-programs} del módulo @code{(gnu system)}.
23710
23711@defvr {Variable Scheme} %setuid-programs
23712Una lista de expresiones-G que denotan programas comunes que se marcan con
23713setuid de root.
23714
23715La lista incluye órdenes como @command{passwd}, @command{ping}, @command{su}
23716y @command{sudo}.
23717@end defvr
23718
23719Para su implementación, los programas con setuid reales se crean en el
23720directorio @file{/run/setuid-programs} durante la activación del
23721sistema. Los ficheros en este directorio hacen referencia a los binarios
23722``reales'', que estan en el almacén.
23723
23724@node Certificados X.509
23725@section Certificados X.509
23726
23727@cindex HTTPS, certificados
23728@cindex certificados X.509
23729@cindex TLS
23730En las conexiones HTTPS a servidores Web (esto es, HTTP sobre el mecanismo
23731de seguridad de la capa de transporte, TLS) se envía a los programas
23732clientes un @dfn{certificado X.509} que el cliente puede usar para
23733@emph{autentificar} al servidor. Para hacerlo, los clientes verifican que el
23734certificado del servidor está firmado por una de las llamadas
23735@dfn{autoridades de certificación} (AC, CA en inglés). Pero para verificar
23736la firma de una AC, los clientes deben haber obtenido previamente el
23737certificado de dicha AC.
23738
23739Los navegadores Web como GNU@tie{}IceCat incluyen su propio conjunto de
23740certificados de AC, de manera que pueden verificar las firmas
23741independientemente.
23742
23743No obstante, a la mayor parte de otros programas que pueden comunicarse a
23744través de HTTPS---@command{wget}, @command{git}, @command{w3m}, etc.---se
23745les debe informar de dónde pueden encontrar los certificados de CA.
23746
23747@cindex @code{nss-certs}
23748In Guix, this is done by adding a package that provides certificates to the
23749@code{packages} field of the @code{operating-system} declaration
23750(@pxref{Referencia de ``operating-system''}). Guix includes one such package,
23751@code{nss-certs}, which is a set of CA certificates provided as part of
23752Mozilla's Network Security Services.
23753
23754Fíjese que @emph{no} es parte de @var{%base-packages}, por lo que debe ser
23755añadido explícitamente. El directorio @file{/etc/ssl/certs}, donde la mayor
23756parte de las aplicaciones y bibliotecas buscarán los certificados de manera
23757predeterminada, enlaza a los certificados instalados de manera global.
23758
23759Las usuarias sin privilegios, incluyendo a usuarias de Guix en una
23760distribución distinta, pueden también instalar su propio paquete de
23761certificados en su perfil. Es necesario definir cierto número de variables
23762de entorno de manera que las aplicaciones y bibliotecas sepan dónde
23763encontrarlos. Por ejemplo, la biblioteca OpenSSL inspecciona las variables
23764@code{SSL_CERT_DIR} y @code{SSL_CERT_FILE}. Algunas aplicaciones añaden sus
23765variables de entorno propias; por ejemplo, el sistema de control de
23766versiones Git inspecciona el empaquetado de certificados al que apunta la
23767variable de entorno @code{GIT_SSL_CAINFO}. Por tanto, en el caso típico se
23768debe ejecutar algo parecido a esto:
23769
23770@example
23771$ guix package -i nss-certs
23772$ export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs"
23773$ export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
23774$ export GIT_SSL_CAINFO="$SSL_CERT_FILE"
23775@end example
23776
23777Como otro ejemplo, R necesita que la variable de entorno
23778@code{CURL_CA_BUNDLE} apunte al empaquetado de certificados, de manera que
23779se debe ejecutar algo parecido a esto:
23780
23781@example
23782$ guix package -i nss-certs
23783$ export CURL_CA_BUNDLE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt"
23784@end example
23785
23786Para otras aplicaciones puede tener que buscar la variable de entorno
23787necesaria en la documentación relevante.
23788
23789
23790@node Selector de servicios de nombres
23791@section Selector de servicios de nombres
23792
23793@cindex name service switch
23794@cindex NSS
23795El módulo @code{(gnu system nss)} proporciona una interfaz con el fichero de
23796configuración del @dfn{selector de servicios de nombres} o @dfn{NSS}
23797(@pxref{NSS Configuration File,,, libc, The GNU C Library Reference
23798Manual}). En resumen, NSS es un mecanismo que permite la extensión de libc
23799con nuevos métodos de búsqueda de ``nombres'', lo que incluye nombres de
23800máquinas, nombres de servicios, cuentas de usuaria y más (@pxref{Selector de servicios de nombres, System Databases and Name Service Switch,, libc, The GNU C
23801Library Reference Manual}).
23802
23803La configuración de NSS especifica, para cada base de datos del sistema, que
23804método de búsqueda debe ser usado, y cómo los varios métodos se enlazan
23805entre sí---por ejemplo, bajo qué circunstancias NSS deberá probar con el
23806siguiente método en la lista. La configuración de NSS se proporciona en el
23807campo @code{name-service-switch} de las declaraciones
23808@code{operating-system} (@pxref{Referencia de ``operating-system'',
23809@code{name-service-switch}}).
23810
23811@cindex nss-mdns
23812@cindex .local, búsqueda de nombres de máquina
23813Como ejemplo, la siguiente declaración configura NSS para usar el
23814@uref{http://0pointer.de/lennart/projects/nss-mdns/, motor @code{nss-mdns}},
23815que permite las búsquedas de nombres de máquinas sobre DNS multicast (mDNS)
23816para nombres de máquinas terminados en @code{.local}:
23817
23818@example
23819(name-service-switch
23820 (hosts (list %files ;primero, comprueba /etc/hosts
23821
23822 ;; Si lo anterior no funcionó, prueba
23823 ;; con 'mdns_minimal'.
23824 (name-service
23825 (name "mdns_minimal")
23826
23827 ;; 'mdns_minimal' tiene autoridad sobre
23828 ;; '.local'. Cuando devuelve 'not-found,
23829 ;; no es necesario intentarlo con los
23830 ;; métodos siguientes.
23831 (reaction (lookup-specification
23832 (not-found => return))))
23833
23834 ;; Si no, usa DNS.
23835 (name-service
23836 (name "dns"))
23837
23838 ;; Finalmente, prueba con 'mdns' "al completo".
23839 (name-service
23840 (name "mdns")))))
23841@end example
23842
23843No se preocupe: la variable @code{%mdns-host-lookup-nss} (véase a
23844continuación) contiene esta configuración, de manera que no tiene que
23845escribirla si todo lo que desea es que funcione la búsqueda de nombres de
23846máquina en @code{.local}.
23847
23848Note that, in this case, in addition to setting the
23849@code{name-service-switch} of the @code{operating-system} declaration, you
23850also need to use @code{avahi-service-type} (@pxref{Servicios de red,
23851@code{avahi-service-type}}), or @var{%desktop-services}, which includes it
23852(@pxref{Servicios de escritorio}). Doing this makes @code{nss-mdns} accessible to
23853the name service cache daemon (@pxref{Servicios base, @code{nscd-service}}).
23854
23855Por conveniencia, las siguientes variables proporcionan configuraciones NSS
23856típicas.
23857
23858@defvr {Variable Scheme} %default-nss
23859Esta es la configuración predeterminada del selector de servicios de
23860nombres, un objeto @code{name-service-switch}.
23861@end defvr
23862
23863@defvr {Variable Scheme} %mdns-host-lookup-nss
23864Esta es la configuración del selector de servicios de nombres que permite la
23865búsqueda de nombres de máquinas por DNS multicast (mDNS) para nombres de
23866máquinas terminados en @code{.local}.
23867@end defvr
23868
23869La referencia de la configuración del selector de servicios de nombres se
23870proporciona a continuación. Tiene una asociación directa con el formato del
23871fichero de configuración de la biblioteca C, por lo que se recomienda el
23872manual de la biblioteca C para obtener más información (@pxref{NSS
23873Configuration File,,, libc, The GNU C Library Reference Manual}). En
23874comparación con el formato del fichero de configuración del NSS de libc, no
23875solo tiene solo la ventaja de la cálida sensación proporcionada por la
23876adición de paréntesis que tanto nos gustan, sino que también tiene
23877comprobaciones estáticas: conocerá los errores sintácticos y tipográficos
23878con la ejecución de @command{guix system}.
23879
23880@deftp {Tipo de datos} name-service-switch
23881
23882El tipo de datos que representa la configuración del selector de servicios
23883de nombres (NSS). Cada campo a continuación representa una de las bases de
23884datos del sistema admitidas.
23885
23886@table @code
23887@item aliases
23888@itemx ethers
23889@itemx group
23890@itemx gshadow
23891@itemx hosts
23892@itemx initgroups
23893@itemx netgroup
23894@itemx networks
23895@itemx password
23896@itemx public-key
23897@itemx rpc
23898@itemx services
23899@itemx shadow
23900Las bases de datos del sistema que maneja el NSS. Cada uno de estos campos
23901debe ser una lista de objetos @code{<name-service>} (véase a continuación).
23902@end table
23903@end deftp
23904
23905@deftp {Tipo de datos} name-service
23906
23907Este es el tipo de datos que representa un servicio de nombres real y la
23908acción de búsqueda asociada.
23909
23910@table @code
23911@item name
23912Una cadena que denota el nombre de servicio (@pxref{Services in the NSS
23913configuration,,, libc, The GNU C Library Reference Manual}).
23914
23915Fijese que los servicios de nombres enumerados aquí deben ser visibles para
23916nscd. Esto se consigue mediante la adición del parámetro
23917@code{#:name-services} a @code{nscd-service} con la lista de paquetes que
23918proporcionan los servicios de nombres necesarios (@pxref{Servicios base,
23919@code{nscd-service}}).
23920
23921@item reaction
23922Una acción especificada mediante el uso del macro
23923@code{lookup-specification} (@pxref{Actions in the NSS configuration,,,
23924libc, The GNU C Library Reference Manual}). Por ejemplo:
23925
23926@example
23927(lookup-specification (unavailable => continue)
23928 (success => return))
23929@end example
23930@end table
23931@end deftp
23932
23933@node Disco en RAM inicial
23934@section Disco en RAM inicial
23935
23936@cindex initrd
23937@cindex disco inicial de RAM
23938Para el propósito del arranque inicial, se le proporciona al núcleo
23939Linux-libre un @dfn{disco inicial de RAM}, o @dfn{initrd}. Un initrd
23940contiene un sistema de ficheros raíz temporal así como un guión de
23941inicialización. Este último es responsable del montaje del sistema de
23942ficheros raíz real, así como de la carga de cualquier módulo del núcleo que
23943pueda ser necesario para esta tarea.
23944
23945El campo @code{initrd-modules} de una declaración @code{operating-system} le
23946permite especificar qué módulos del nucleo Linux-libre deben estar
23947disponibles en el initrd. En particular, aquñi es donde se debe enumerar los
23948módulos que controlen realmente el disco duro deonde su partición raíz se
23949encuentre---aunque el valor predeterminado de @code{initrd-modules} debería
23950cubrir la mayor parte de casos de uso. Por ejemplo, en caso de necesitar el
23951módulo @code{megaraid_sas} además de los módulos predeterminados para poder
23952acceder a sistema de ficheros raíz, se podría escribir:
23953
23954@example
23955(operating-system
23956 ;; @dots{}
23957 (initrd-modules (cons "megaraid_sas" %base-initrd-modules)))
23958@end example
23959
23960@defvr {Variable Scheme} %base-initrd-modules
23961Esta es la lista de módulos del nucleo que se incluyen en el initrd
23962predeterminado.
23963@end defvr
23964
23965Más allá, si necesita personalizaciones de un nivel más bajo, el campo
23966@code{initrd} de una declaración @code{operating-system} le permite
23967especificar qué initrd desea usar. El módulo @code{(gnu system
23968linux-initrd)} proporciona tres formas de construir un initrd: el
23969procedimiento de alto nivel @code{base-initrd} y los procedimientos de bajo
23970nivel @code{raw-initrd} y @code{expression->initrd}.
23971
23972El procedimiento @code{base-initrd} está pensado para cubrir la mayor parte
23973de usos comunes. Por ejemplo, si desea añadir algunos módulos del nucleo que
23974deben cargarse durante el arranque, puede definir el campo @code{initrd} de
23975la declaración de sistema operativo de esta forma:
23976
23977@example
23978(initrd (lambda (sistemas-de-ficheros . resto)
23979 ;; Crea un initrd estándar pero configura la red
23980 ;; con los parámetros que QEMU espera por omisión.
23981 (apply base-initrd sistemas-de-ficheros
23982 #:qemu-networking? #t
23983 resto)))
23984@end example
23985
23986El procedimiento @code{base-initrd} también maneja casos de uso comunes que
23987implican el uso del sistema en un anfitrión QEMU, o como un sistema ``live''
23988con un sistema de ficheros raíz volátil.
23989
23990El procedimiento @code{base-initrd} se construye sobre el procedimiento
23991@code{raw-initrd}. Al contrario que @code{base-initrd}, @code{raw-initrd} no
23992funciona a alto nivel, como sería intentar deducir qué módulos del nucleo y
23993paquetes deben incluirse en el initrd. Un ejemplo de uso de
23994@code{raw-initrd} es cuando una usuaria tiene personalizada una
23995configuración del nucleo Linux y los módulos predeterminados del núcleo que
23996incluye @code{base-initrd} no están disponibles.
23997
23998El disco inicial de RAM producido por @code{base-initrd} o @code{raw-initrd}
23999inspecciona varias opciones proporcionadas por la línea de órdenes al núcleo
24000Linux (esto es, argumentos pasados a través de la orden @code{linux} de
24001GRUB, o de la opción @code{-append} de QEMU), notablemente:
24002
24003@table @code
24004@item --load=@var{arranque}
24005Indica al disco de RAM inicial que cargue @var{arranque}, un fichero que
24006contiene un programa Scheme, una vez haya montado el sistema de ficheros
24007raíz.
24008
24009Guix uses this option to yield control to a boot program that runs the
24010service activation programs and then spawns the GNU@tie{}Shepherd, the
24011initialization system.
24012
24013@item --root=@var{raíz}
24014Monta @var{raíz} como el sistema de ficheros raíz. @var{raíz} puede ser un
24015nombre de dispositivo como @code{/dev/sda1}, una etiqueta del sistema de
24016ficheros o un UUID del sistema de ficheros.
24017
24018@item --system=@var{sistema}
24019Hace que @file{/run/booted-system} y @file{/run/current-system} apunten a
24020@var{sistema}.
24021
24022@item modprobe.blacklist=@var{módulos}@dots{}
24023@cindex módulo, lista negra
24024@cindex lista negra, de módulos del núcleo
24025Indica al disco inicial de RAM así como a la orden @command{modprobe} (del
24026paquete kmod) que deben negarse a cargar @var{módulos}. @var{módulos} debe
24027ser una lista separada por comas de nombres de módulos---por ejemplo,
24028@code{usbkbd,9pnet}.
24029
24030@item --repl
24031Inicia una sesión interactiva (REPL) desde el disco inicial de RAM antes de
24032que intente cargar los módulos del núcleo y del montaje del sistema de
24033ficheros raíz. Nuestro departamento comercial lo llama
24034@dfn{arranca-en-Guile}. Como amante de Scheme, lo adorará. @xref{Using Guile
24035Interactively,,, guile, GNU Guile Reference Manual}, para más información
24036sobre sesiones interactivas Guile.
24037
24038@end table
24039
24040Now that you know all the features that initial RAM disks produced by
24041@code{base-initrd} and @code{raw-initrd} provide, here is how to use it and
24042customize it further.
24043
24044@cindex initrd
24045@cindex disco inicial de RAM
24046@deffn {Procedimiento Scheme} raw-initrd @var{sistemas-de-ficheros} @
24047 [#:linux-modules '()] [#:mapped-devices '()] @ [#:keyboard-layout #f] @
24048[#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f] Return
24049a derivation that builds a raw initrd. @var{file-systems} is a list of file
24050systems to be mounted by the initrd, possibly in addition to the root file
24051system specified on the kernel command line via @code{--root}.
24052@var{linux-modules} is a list of kernel modules to be loaded at boot time.
24053@var{mapped-devices} is a list of device mappings to realize before
24054@var{file-systems} are mounted (@pxref{Dispositivos traducidos}).
24055@var{helper-packages} is a list of packages to be copied in the initrd. It
24056may include @code{e2fsck/static} or other packages needed by the initrd to
24057check the root file system.
24058
24059When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record
24060denoting the desired console keyboard layout. This is done before
24061@var{mapped-devices} are set up and before @var{file-systems} are mounted
24062such that, should the user need to enter a passphrase or use the REPL, this
24063happens using the intended keyboard layout.
24064
24065Cuando @var{qemu-networking?} es verdadero, configura la red con los
24066parámetros QEMU estándar. Cuando @var{virtio?} es verdadero, carga módulos
24067adicionales para que la imagen en RAM pueda ser usada como un sistema
24068virtualizado por QEMU con controladores paravirtualizados de E/S.
24069
24070Cuando @var{volatile-root?} es verdadero, el sistema de ficheros raíz tiene
24071permisos de escritura pero cualquier cambio realizado se perderá.
24072@end deffn
24073
24074@deffn {Procedimiento Scheme} base-initrd @var{sistemas-de-ficheros} @
24075 [#:mapped-devices '()] [#:keyboard-layout #f] @ [#:qemu-networking? #f]
24076[#:volatile-root? #f] @ [#:linux-modules '()] Return as a file-like object a
24077generic initrd, with kernel modules taken from @var{linux}.
24078@var{file-systems} is a list of file-systems to be mounted by the initrd,
24079possibly in addition to the root file system specified on the kernel command
24080line via @code{--root}. @var{mapped-devices} is a list of device mappings
24081to realize before @var{file-systems} are mounted.
24082
24083When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record
24084denoting the desired console keyboard layout. This is done before
24085@var{mapped-devices} are set up and before @var{file-systems} are mounted
24086such that, should the user need to enter a passphrase or use the REPL, this
24087happens using the intended keyboard layout.
24088
24089@var{qemu-networking?} y @var{volatile-root?} funcionan como en
24090@code{raw-initrd}.
24091
24092El initrd incorpora automáticamente todos los módulos del nucleo necesarios
24093para @var{sistemas-de-ficheros} y para las opciones proporcionadas. Módulos
24094del nucleo adicionales pueden proporcionarse a través de
24095@var{linux-modules}. Se añadirán al initrd y se cargarán en tiempo de
24096arranque en el orden que aparezcan.
24097@end deffn
24098
24099No es necesario decir que los initrd que producimos y usamos embeben un
24100Guile enlazado estáticamente, y que el programa de inicialización es un
24101programa Guile. Esto proporciona mucha flexibilidad. El procedimiento
24102@code{expression->initrd} construye un initrd de ese tipo, una vez
24103proporcionado el programa a ejecutar en dicho initrd.
24104
24105@deffn {Procedimiento Scheme} expression->initrd @var{exp} @
24106 [#:guile %guile-static-stripped] [#:name "guile-initrd"]
24107Devuelve como un objeto tipo-fichero el initrd de Linux (un archivador cpio
24108comprimido con gzip) que contiene @var{guile} y que evalua a @var{exp}, una
24109expresión-G, al arranque. Todas las derivaciones a las que @var{exp} hace
24110referencia se copian automáticamente en el initrd.
24111@end deffn
24112
24113@node Configuración del gestor de arranque
24114@section Configuración del gestor de arranque
24115
24116@cindex bootloader
24117@cindex cargador de arranque
24118
24119El sistema operativo permite varios cargadores de arranque. El cargador de
24120arranque se configura mediante el uso de la declaración
24121@code{bootloader-configuration}. Todos los campos de esta estructura son
24122independientes del cargador de arranque excepto uno, @code{bootloader}, que
24123indica el cargador de arranque a configurar e instalar.
24124
24125Algunos de los cargadores de arranque no inspeccionan todos los campos de
24126@code{bootloader-configuration}. Por ejemplo, el cargador de arranque
24127extlinux no permite temas y por lo tanto ignora el campo @code{theme}.
24128
24129@deftp {Tipo de datos} bootloader-configuration
24130El tipo de una declaración de configuración del cargador de arranque.
24131
24132@table @asis
24133
24134@item @code{bootloader}
24135@cindex EFI, cargador de arranque
24136@cindex UEFI, cargador de arranque
24137@cindex BIOS, cargador de arranque
24138El cargador de arranque a usar, como un objeto @code{bootloader}. De momento
24139se aceptan @code{grub-bootloader}, @code{grub-efi-bootloader},
24140@code{extlinux-bootloader} y @code{u-boot-bootloader}.
24141
24142@vindex grub-efi-bootloader
24143@code{grub-efi-bootloader} permite el arranque en sistemas modernos que usan
24144la @dfn{interfaz extendida de firmware unificada} (UEFI). Es el que debería
24145ser usado si la imagen de instalación contiene un directorio
24146@file{/sys/firmware/efi} cuando la arranca en su sistema.
24147
24148@vindex grub-bootloader
24149@code{grub-bootloader} permite el arranque en máquinas basadas en Intel en
24150modo ``antiguo'' BIOS.
24151
24152@cindex ARM, cargadores de arranque
24153@cindex AArch64, cargadores de arranque
24154Los cargadores de arranque se describen en los módulos @code{(gnu bootloader
24155@dots{})}. En particular, @code{(gnu bootloader u-boot)} contiene
24156definiciones de cargadores de arranque para un amplio rango de sistemas ARM
24157y AArch64, mediante el uso del @uref{http://www.denx.de/wiki/U-Boot/,
24158cargador de arranque U-Boot}.
24159
24160@item @code{target}
24161Una cadena que indica donde se instalará el cargador de arranque.
24162
24163La interpretación depende del cargador de arranque en cuestión. Para
24164@code{grub-bootloader}, por ejemplo, debe ser un nombre de dispositivo que
24165entienda la orden @command{install} del cargador de arranque, como
24166@code{/dev/sda} o @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU
24167GRUB Manual}). Para @code{grub-efi-bootloader}, debe apuntar al punto de
24168montaje del sistema de ficheros EFI, habitualmente @file{/boot/efi}.
24169
24170@item @code{menu-entries} (predeterminadas: @code{()})
24171Una lista posiblemente vacia de objetos @code{menu-entry} (véase a
24172continuación), que indican entradas que deben aparecer en el menú del
24173cargador de arranque, además de la entrada del sistema actual y la entrada
24174que apunta a generaciones previas del sistema.
24175
24176@item @code{default-entry} (predeterminada: @code{0})
24177El índice de la entrada del menú de arranque por omisión. El índice 0 es
24178para la entrada del sistema actual.
24179
24180@item @code{timeout} (predeterminado: @code{5})
24181El número de segundos que se esperará entrada por el teclado antes de
24182arrancar. El valor 0 indica que se debe arrancar de forma inmediata, y -1
24183que se debe esperar indefinidamente.
24184
24185@cindex keyboard layout, for the bootloader
24186@item @code{keyboard-layout} (predeterminada: @code{#f})
24187If this is @code{#f}, the bootloader's menu (if any) uses the default
24188keyboard layout, usually US@tie{}English (``qwerty'').
24189
24190Otherwise, this must be a @code{keyboard-layout} object (@pxref{Distribución de teclado}).
24191
24192@quotation Nota
24193This option is currently ignored by bootloaders other than @code{grub} and
24194@code{grub-efi}.
24195@end quotation
24196
24197@item @code{theme} (predeterminado: @var{#f})
24198El objeto del tema del cargador de arranque que describa el tema a usar. Si
24199no se proporciona ningún tema, algunos cargadores de arranque pueden usar un
24200tema por omisión, lo cual es cierto en GRUB.
24201
24202@item @code{terminal-outputs} (predeterminada: @code{'gfxterm})
24203Los terminales de salida que se usarán para el menú de arranque, como una
24204lista de símbolos. GRUB acepta los valores: @code{console}, @code{serial},
24205@code{serial_@{0-3@}}, @code{gfxterm}, @code{vga_text}, @code{mda_text},
24206@code{morse} y @code{pkmodem}. Este campo corresponde con la variable
24207@code{GRUB_TERMINAL_OUTPUT} (@pxref{Simple configuration,,, grub, GNU GRUB
24208manual}).
24209
24210@item @code{terminal-inputs} (predeterminadas: @code{'()})
24211Los terminales de entrada que se usarán para el menú de arranque, como una
24212lista de símbolos. Para GRUB, el valor predeterminado es el terminal nativo
24213de la platafroma determinado en tiempo de ejecución. GRUB acepta los
24214valores: @code{console}, @code{serial}, @code{serial@{0-3@}},
24215@code{at_keyboard} y @code{usb_keyboard}. Este campo corresponde a la
24216variable GRUB @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,,
24217grub,GNU GRUB manual}).
24218
24219@item @code{serial-unit} (predeterminada: @code{#f})
24220La unidad serie usada por el cargador de arranque, como un entero del 0 al
242213. Para GRUB, se selecciona en tiempo de ejecución; actualmente GRUB
24222selecciona 0 lo que corresponde a COM1 (@pxref{Serial terminal,,, grub,GNU
24223GRUB manual}).
24224
24225@item @code{serial-speed} (predeterminada: @code{#f})
24226La velocidad de la interfaz serie, como un entero. Para GRUB, el valor
24227predeterminado se selecciona en tiempo de ejecución, actualmente GRUB
24228selecciona 9600@tie{}bps (@pxref{Serial terminal,,, grub,GNU GRUB manual}).
24229@end table
24230
24231@end deftp
24232
24233@cindex arranque dual
24234@cindex menú de arranque
24235Si desease listar entradas adicionales para el menú de arranque a través del
24236campo @code{menu-entries} mostrado previamente, deberá crearlas con la forma
24237@code{menu-entry}. Por ejemplo, imagine que desea ser capaz de arrancar otra
24238distribución (¡difícil de imaginar!), puede definir una entrada de menú de
24239esta forma:
24240
24241@example
24242(menu-entry
24243 (label "La otra distribución")
24244 (linux "/boot/old/vmlinux-2.6.32")
24245 (linux-arguments '("root=/dev/sda2"))
24246 (initrd "/boot/old/initrd"))
24247@end example
24248
24249Los detalles se encuentran a continuación.
24250
24251@deftp {Tipo de datos} menu-entry
24252El tipo de una entrada en el menú del cargador de arranque.
24253
24254@table @asis
24255
24256@item @code{label}
24257La etiqueta a mostrar en el menú---por ejemplo, @code{"GNU"}.
24258
24259@item @code{linux}
24260La imagen del núcleo Linux a arrancar, por ejemplo:
24261
24262@example
24263(file-append linux-libre "/bzImage")
24264@end example
24265
24266Con GRUB, también es posible especificar un dispositivo explícitamente
24267mediante el uso de la convención de nombres de dispositivo de GRUB
24268(@pxref{Naming convention,,, grub, GNU GRUB manual}), por ejemplo:
24269
24270@example
24271"(hd0,msdos1)/boot/vmlinuz"
24272@end example
24273
24274Si se especifica el dispositivo explícitamente como en el ejemplo anterior,
24275el campo @code{device} se ignora completamente.
24276
24277@item @code{linux-arguments} (predeterminados: @code{()})
24278La lista de parámetros extra de línea de órdenes para el núcleo Linux---por
24279ejemplo, @code{("console=ttyS0")}.
24280
24281@item @code{initrd}
24282Una expresión-G o una cadena que contiene el nombre de fichero del disco
24283inicial en RAM a usar (@pxref{Expresiones-G}).
24284@item @code{device} (predeterminado: @code{#f})
24285El dispositivo donde se encuentran el núcleo y el initrd---es decir, para
24286GRUB, @dfn{raíz} de esta entrada de menú (@pxref{root,,, grub, GNU GRUB
24287manual}).
24288
24289Puede ser una etiqueta de sistema de ficheros (una cadena), un UUID de
24290sistema de ficheros (un vector de bytes, @pxref{Sistemas de ficheros}), o @code{#f},
24291en cuyo caso el cargador de arranque buscará el dispositivo que contenga el
24292fichero especificado por el campo @code{linux} (@pxref{search,,, grub, GNU
24293GRUB manual}). @emph{No} debe ser un nombre de dispositivo del SO como
24294@file{/dev/sda1}.
24295
24296@end table
24297@end deftp
24298
24299@c FIXME: Write documentation once it's stable.
24300For now only GRUB has theme support. GRUB themes are created using the
24301@code{grub-theme} form, which is not documented yet.
24302
24303@defvr {Variable Scheme} %default-theme
24304Este es el tema predeterminado de GRUB que usa el sistema operativo si no se
24305especifica el campo @code{theme} en el registro
24306@code{bootloader-configuration}.
24307
24308Viene con una bonita imagen de fondo que muestra los logos de GNU y Guix.
24309@end defvr
24310
24311
24312@node Invocación de guix system
24313@section Invocación de @code{guix system}
24314
24315Una vez haya escrito la declaración de sistema operativo como se ha visto en
24316la sección previa, puede @dfn{instanciarse} mediante el uso de la orden
24317@command{guix system}. Su sinopsis es:
24318
24319@example
24320guix system @var{opciones}@dots{} @var{acción} @var{fichero}
24321@end example
24322
24323@var{fichero} debe ser el nombre de un fichero que contenga una declaración
24324@code{operating-system}. @var{acción} especifica cómo se instancia el
24325sistema operativo. Actualmente se permiten los siguientes valores:
24326
24327@table @code
24328@item search
24329Muestra las definiciones de tipos de servicio disponibles que corresponden
24330con las expresiones regulares proporcionadas, ordenadas por relevancia:
24331
24332@example
24333$ guix system search console font
24334name: console-fonts
24335location: gnu/services/base.scm:729:2
24336extends: shepherd-root
24337description: Install the given fonts on the specified ttys (fonts are
24338+ per virtual console on GNU/Linux). The value of this service is a list
24339+ of tty/font pairs like:
24340+
24341+ '(("tty1" . "LatGrkCyr-8x16"))
24342relevance: 20
24343
24344name: mingetty
24345location: gnu/services/base.scm:1048:2
24346extends: shepherd-root
24347description: Provide console login using the `mingetty' program.
24348relevance: 2
24349
24350name: login
24351location: gnu/services/base.scm:775:2
24352extends: pam
24353description: Provide a console log-in service as specified by its
24354+ configuration value, a `login-configuration' object.
24355relevance: 2
24356
24357@dots{}
24358@end example
24359
24360Como con @command{guix package --search}, el resultado se obtiene en formato
24361@code{recutils}, lo que facilita el filtrado de la salida (@pxref{Top, GNU
24362recutils databases,, recutils, GNU recutils manual}).
24363
24364@item reconfigure
24365Build the operating system described in @var{file}, activate it, and switch
24366to it@footnote{This action (and the related actions @code{switch-generation}
24367and @code{roll-back}) are usable only on systems already running Guix
24368System.}.
24369
24370This effects all the configuration specified in @var{file}: user accounts,
24371system services, global package list, setuid programs, etc. The command
24372starts system services specified in @var{file} that are not currently
24373running; if a service is currently running this command will arrange for it
24374to be upgraded the next time it is stopped (e.g.@: by @code{herd stop X} or
24375@code{herd restart X}).
24376
24377Esta orden crea una nueva generación cuyo número es el sucesor de la
24378siguiente generación (como lo muestra @command{guix system
24379list-generations}). Si esa generación ya existe, será sobreescrita. Este
24380comportamiento es el mismo que el de @command{guix package} (@pxref{Invocación de guix package}).
24381
24382También añade una entrada al cargador de arranque para la nueva
24383configuración del sistema operativo---en caso de que no se proporcione la
24384opción @option{--no-bootloader}. Con GRUB, mueve las entradas de
24385configuraciones antiguas a un submenú, permitiendo la selección de una
24386generación previa del sistema en tiempo de arranque en caso necesario.
24387
24388@quotation Nota
24389@c The paragraph below refers to the problem discussed at
24390@c <http://lists.gnu.org/archive/html/guix-devel/2014-08/msg00057.html>.
24391Es altamente recomendable ejecutar @command{guix pull} antes de la primera
24392ejecución de @command{guix system reconfigure} (@pxref{Invocación de guix pull}). No hacerlo puede ocasionar que se obtenga una versión más antigua de
24393Guix una vez que @command{reconfigure} se haya completado.
24394@end quotation
24395
24396@item switch-generation
24397@cindex generaciones
24398Cambia a una generación existente del sistema. Esta acción cambia
24399atómicamente el perfil del sistema a la generación del sistema
24400especificada. También redistribuye las entradas de sistema del menú de
24401arranque existentes. Marca como predeterminada la entrada de la generación
24402de sistema especificada y mueve las entradas de otras generaciones a un
24403submenú, si el cargador de arranque lo permite. La próxima vez que se
24404arranque el sistema, se usará la generación de sistema especificada.
24405
24406El cargador de arranque en sí no se reinstala durante esta orden. Por tanto,
24407el cargador de arranque instalado se usa con un fichero de configuración
24408actualizado.
24409
24410La generación deseada puede especificarse explícitamente con su numero de
24411generación. Por ejemplo, la siguiente invocación cambiaría a la generación 7
24412del sistema:
24413
24414@example
24415guix system switch-generation 7
24416@end example
24417
24418La generación deseada puede especificarse también de forma relativa a la
24419generación actual con la forma @code{+N} o @code{-N}, donde @code{+3}
24420significa ``3 generaciones después de la generación actual'', y @code{-1}
24421significa ``1 generación antes de la generación actual''. Cuando se
24422especifica un valor negativo como @code{-1} debe ir precedido de @code{--}
24423para evitar que se analice como una opción. Por ejemplo:
24424
24425@example
24426guix system switch-generation -- -1
24427@end example
24428
24429Actualmente, el efecto de la invocación de esta acción es @emph{únicamente}
24430cambiar el perfil del sistema a una generación existente y redistribuir las
24431entradas del menú de arranque. Para realmente empezar a usar la generación
24432deseada del sistema, debe reiniciar tras esta acción. En el futuro, se
24433actualizará para hacer lo mismo que @command{reconfigure}, como activación y
24434desactivación de servicios.
24435
24436Esta acción fallará si la generación especificada no existe.
24437
24438@item roll-back
24439@cindex vuelta atrás
24440Cambia a la generación de sistema previa. Tras el siguiente arranque del
24441sistema, usará la generación de sistema precedente. Es la operación inversa
24442de @command{reconfigure}, y es equivalente a la invocación de
24443@command{switch-generation} con @code{-1} como parámetro.
24444
24445Actualmente, como con @command{switch-generation}, debe reiniciar tras la
24446ejecución de esta acción para realmente empezar a usar la generación de
24447sistema precedente.
24448
24449@item delete-generations
24450@cindex deleting system generations
24451@cindex saving space
24452Delete system generations, making them candidates for garbage collection
24453(@pxref{Invocación de guix gc}, for information on how to run the ``garbage
24454collector'').
24455
24456This works in the same way as @command{guix package --delete-generations}
24457(@pxref{Invocación de guix package, @code{--delete-generations}}). With no
24458arguments, all system generations but the current one are deleted:
24459
24460@example
24461guix system delete-generations
24462@end example
24463
24464You can also select the generations you want to delete. The example below
24465deletes all the system generations that are more than two month old:
24466
24467@example
24468guix system delete-generations 2m
24469@end example
24470
24471Running this command automatically reinstalls the bootloader with an updated
24472list of menu entries---e.g., the ``old generations'' sub-menu in GRUB no
24473longer lists the generations that have been deleted.
24474
24475@item build
24476Construye la derivación del sistema operativo, que incluye todos los
24477ficheros de configuración y programas necesarios para el arranque y la
24478ejecución del sistema. Esta acción no instala nada en realidad.
24479
24480@item init
24481Populate the given directory with all the files necessary to run the
24482operating system specified in @var{file}. This is useful for first-time
24483installations of Guix System. For instance:
24484
24485@example
24486guix system init mi-conf-del-so.scm /mnt
24487@end example
24488
24489copia a @file{/mnt} todos los elementos del almacén necesarios para la
24490configuración especificada en @file{mi-conf-del-so.scm}. Esto incluye los
24491ficheros de configuración, paquetes y demás. También crea otros ficheros
24492esenciales necesarios para la correcta operación del sistema---por ejemplo,
24493los directorios @file{/etc}, @file{/var} y @file{/run}, y el fichero
24494@file{/bin/sh}.
24495
24496Esta orden también instala el cargador de arranque en el destino
24497especificado en @file{mi-conf-del-so.scm}, siempre que no se proporcione la
24498opción @option{--no-bootloader}.
24499
24500@item vm
24501@cindex máquina virtual
24502@cindex VM
24503@anchor{guix system vm}
24504Build a virtual machine that contains the operating system declared in
24505@var{file}, and return a script to run that virtual machine (VM).
24506
24507@quotation Nota
24508The @code{vm} action and others below can use KVM support in the Linux-libre
24509kernel. Specifically, if the machine has hardware virtualization support,
24510the corresponding KVM kernel module should be loaded, and the
24511@file{/dev/kvm} device node must exist and be readable and writable by the
24512user and by the build users of the daemon (@pxref{Configuración del entorno de construcción}).
24513@end quotation
24514
24515Arguments given to the script are passed to QEMU as in the example below,
24516which enables networking and requests 1@tie{}GiB of RAM for the emulated
24517machine:
24518
24519@example
24520$ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user
24521@end example
24522
24523La VM comparte su almacén con el sistema anfitrión.
24524
24525Sistemas de ficheros adicionales pueden compartirse entre la máquina
24526anfitriona y la virtual mediante el uso de las opciones @code{--share} y
24527@code{--expose}: la primera especifica un directorio a compartir con acceso
24528de escritura, mientras que la última proporciona solo acceso de lectura al
24529directorio compartido.
24530
24531El siguiente ejemplo crea una máquina virtual en la que el directorio de la
24532usuaria es accesible en modo solo-lecture, y donde el directorio
24533@file{/intercambio} esta asociado de forma lectura-escritura con
24534@file{$HOME/tmp} en el sistema anfitrión:
24535
24536@example
24537guix system vm mi-configuracion.scm \
24538 --expose=$HOME --share=$HOME/tmp=/intercambio
24539@end example
24540
24541En GNU/Linux, lo predeterminado es arrancar directamente el núcleo; esto
24542posee la ventaja de necesitar únicamente una pequeña imagen del disco raíz
24543pequeña ya el el almacén de la anfitriona puede montarse.
24544
24545La opción @code{--full-boot} fuerza una secuencia de arranque completa,
24546desde el cargador de arranque. Esto necesita más espacio en disco ya que la
24547imagen raíz que contiene el núcleo, initrd y los ficheros de datos del
24548cargador de arranque deben crearse. La opción @code{--image-size} puede
24549usarse para especificar el tamaño de la imagen.
24550
24551@cindex Imágenes de sistema, creación en varios formatos
24552@cindex Creación de imágenes del sistema en varios formatos
24553@item vm-image
24554@itemx disk-image
24555@itemx docker-image
24556Devuelve una máquina virtual, imagen de disco o imagen Docker del sistema
24557operativo declarado en @var{fichero} que es independiente. Por omisión,
24558@command{guix system} estima el tamaño de la imagen necesario para almacenar
24559el sistema, pero puede usar la opción @option{--image-size} para especificar
24560un valor. Las imagenes Docker se construyen para que contengan exactamente
24561lo que necesitan, por lo que la opción @option{--image-size} se ignora en el
24562caso de @code{docker-image}.
24563
24564Puede especificar el sistema de ficheros raíz mediante el uso de la opción
24565@option{--file-system-type}. Su valor predeterminado es @code{ext4}.
24566
24567When using @code{vm-image}, the returned image is in qcow2 format, which the
24568QEMU emulator can efficiently use. @xref{Ejecutar Guix en una máquina virtual}, for more
24569information on how to run the image in a virtual machine.
24570
24571Con @code{disk-image} se produce una imagen de disco cruda; puede copiarse
24572tal cual en una memoria USB, por ejemplo. Asumiendo que @code{/dev/sdc} es
24573el dispositivo que corresponde a la memoria USB, se podría copiar la imagen
24574con la siguiente orden:
24575
24576@example
24577# dd if=$(guix system disk-image mi-so.scm) of=/dev/sdc
24578@end example
24579
24580Con @code{docker-image} se produce una imagen Docker. Guix construye la
24581imagen de cero, no de una imagen Docker base preexistente. Como resultado,
24582contiene @emph{exactamente} lo definido en el fichero de configuración del
24583sistema operativo. Puede cargar la imagen y ejecutar un contenedor Docker
24584mediante el uso de ordenes como las siguientes:
24585
24586@example
24587image_id="$(docker load < guix-system-docker-image.tar.gz)"
24588docker run -e GUIX_NEW_SYSTEM=/var/guix/profiles/system \\
24589 --entrypoint /var/guix/profiles/system/profile/bin/guile \\
24590 $image_id /var/guix/profiles/system/boot
24591@end example
24592
24593This command starts a new Docker container from the specified image. It
24594will boot the Guix system in the usual manner, which means it will start any
24595services you have defined in the operating system configuration. Depending
24596on what you run in the Docker container, it may be necessary to give the
24597container additional permissions. For example, if you intend to build
24598software using Guix inside of the Docker container, you may need to pass the
24599@option{--privileged} option to @code{docker run}.
24600
24601@item container
24602Devuelve un guión de la ejecución del sistema operativo declarado en
24603@var{fichero} dentro de un contenedor. Los contenedores son un conjunto de
24604mecanismos de aislamiento ligeros que proporciona el núcleo Linux-libre. Los
24605contenedores necesitan sustancialmente menos recursos que máquinas virtuales
24606completas debido a que el núcleo, los objetos compartidos y otros recursos
24607pueden compartirse con el sistema anfitrión; esto también significa que
24608proporcionan un menor aislamiento.
24609
24610En este momento, el guión debe ejecutarse como root para permitir más de una
24611única usuaria y grupo. El contenedor comparte su almacén con la máquina
24612anfitriona.
24613
24614Como con la acción @code{vm} (@pxref{guix system vm}), sistemas de ficheros
24615adicionales a compartir entre la máquina anfitriona y el contenedor pueden
24616especificarse mediante el uso de las opciones @option{--share} y
24617@option{--expose}:
24618
24619@example
24620guix system container mi-configuracion.scm \
24621 --expose=$HOME --share=$HOME/tmp=/intercambio
24622@end example
24623
24624@quotation Nota
24625Esta opción requiere Linux-libre 3.19 o posterior.
24626@end quotation
24627
24628@end table
24629
24630@var{opciones} puede contener cualquiera de las opciones de construcción
24631comunes (@pxref{Opciones comunes de construcción}). Además, @var{opciones} puede
24632contener una de las siguientes:
24633
24634@table @option
24635@item --expression=@var{expr}
24636@itemx -e @var{expr}
24637Consider the operating-system @var{expr} evaluates to. This is an
24638alternative to specifying a file which evaluates to an operating system.
24639This is used to generate the Guix system installer @pxref{Construcción de la imagen de instalación}).
24640
24641@item --system=@var{sistema}
24642@itemx -s @var{sistema}
24643Intenta la construcción para @var{sistema} en vez de para el tipo de la
24644máquina anfitriona. Funciona como en @command{guix build} (@pxref{Invocación de guix build}).
24645
24646@item --derivation
24647@itemx -d
24648Devuelve el nombre de fichero de la derivación del sistema operativo
24649proporcionado sin construir nada.
24650
24651@item --file-system-type=@var{tipo}
24652@itemx -t @var{tipo}
24653Para la acción @code{disk-image}, crea un sistema de ficheros del @var{tipo}
24654proporcionado en la imagen.
24655
24656Cuando se omite esta opción, @command{guix system} usa @code{ext4}.
24657
24658@cindex ISO-9660, formato
24659@cindex CD, formato de imagen
24660@cindex DVD, formato de imagen
24661@code{--file-system-type=iso9660} produce una imagen ISO-9660, que puede ser
24662grabada en CD y DVD.
24663
24664@item --image-size=@var{tamaño}
24665Junto a las acciones @code{vm-image} y @code{disk-image}, crea una imagen
24666del @var{ŧamaño} proporcionado. @var{tamaño} debe ser un número de bytes o
24667puede incluir una unidad como sufijo (@pxref{Block size, size
24668specifications,, coreutils, GNU Coreutils}).
24669
24670Cuando se omite esta opción, @command{guix system} calcula una estimación
24671del tamaño de la imagen en función del tamaño del sistema declarado en
24672@var{fichero}.
24673
24674@item --root=@var{fichero}
24675@itemx -r @var{fichero}
24676Hace que @var{fichero} sea un enlace simbólico al resultado, y lo registra
24677como una raíz del recolector de basura.
24678
24679@item --skip-checks
24680Omite las comprobaciones de seguridad previas a la instalación.
24681
24682Por omisión, @command{guix system init} y @command{guix system reconfigure}
24683realizan comprobaciones de seguridad: se aseguran de que los sistemas de
24684ficheros que aparecen en la declaración @code{operating-system} realmente
24685existen (@pxref{Sistemas de ficheros}) y que cualquier módulo del núcleo Linux que
24686pudiese necesitarse durante el arranque se encuentre en
24687@code{initrd-modules} (@pxref{Disco en RAM inicial}). El uso de esta opción
24688omite todas estas comprobaciones.
24689
24690@cindex on-error
24691@cindex on-error strategy
24692@cindex error strategy
24693@item --on-error=@var{estrategia}
24694Aplica @var{estrategia} cuando ocurre un error durante la lectura de
24695@var{fichero}. @var{estrategia} puede ser uno de los siguientes valores:
24696
24697@table @code
24698@item nothing-special
24699Informa concisamente del error y termina la ejecución. Es la estrategia
24700predeterminada.
24701
24702@item backtrace
24703Del mismo modo, pero también muestra la secuencia de llamadas.
24704
24705@item debug
24706Informa del error y entra en el depurador de Guile. A partir de ahí, puede
24707ejecutar órdenes como @code{,bt} para obtener la secuencia de llamads,
24708@code{,locals} para mostrar los valores de las variables locales, e
24709inspeccionar el estado del programa de forma más general. @xref{Debug
24710Commands,,, guile, GNU Guile Reference Manual}, para una lista de órdenes de
24711depuración disponibles.
24712@end table
24713@end table
24714
24715Once you have built, configured, re-configured, and re-re-configured your
24716Guix installation, you may find it useful to list the operating system
24717generations available on disk---and that you can choose from the bootloader
24718boot menu:
24719
24720@table @code
24721
24722@item list-generations
24723Muestra un resumen de cada generación del sistema operativo disponible en el
24724disco, de manera legible por humanos. Es similar a la opción
24725@option{--list-generations} de @command{guix package} (@pxref{Invocación de guix package}).
24726
24727De manera opcional, se puede especificar un patrón, con la misma sintaxis
24728que la usada en @command{guix package --list-generations}, para restringir
24729la lista de generaciones mostradas. Por ejemplo, la siguiente orden muestra
24730generaciones que tienen hasta 10 días de antigüedad:
24731
24732@example
24733$ guix system list-generations 10d
24734@end example
24735
24736@end table
24737
24738¡La orden @command{guix system} tiene aún más que ofrecer! Las siguientes
24739ordenes le permiten visualizar cual es la relación entre los servicios del
24740sistema:
24741
24742@anchor{system-extension-graph}
24743@table @code
24744
24745@item extension-graph
24746Emite en formato Dot/Graphviz por la salida estándar el @dfn{grafo de
24747extensiones de servicio} del sistema operativo definido en @var{fichero}
24748(@pxref{Composición de servicios}, para más información sobre extensiones de
24749servicio).
24750
24751La orden:
24752
24753@example
24754$ guix system extension-graph @var{fichero} | dot -Tpdf > servicios.pdf
24755@end example
24756
24757produce un fichero PDF que muestra las relaciones de extensiones entre los
24758servicios.
24759
24760@anchor{system-shepherd-graph}
24761@item shepherd-graph
24762Emite en formato Dot/Graphviz por la salida estándar el @dfn{grafo de
24763dependencias} de los servicios shepherd del sistema operativo definido en
24764@var{fichero}. @xref{Servicios de Shepherd}, para más información y un grafo de
24765ejemplo.
24766
24767@end table
24768
24769@node Ejecutar Guix en una máquina virtual
24770@section Ejecución de Guix en una máquina virtual
24771
24772@cindex máquina virtual
24773To run Guix in a virtual machine (VM), one can either use the pre-built Guix
24774VM image distributed at
24775@indicateurl{https://alpha.gnu.org/gnu/guix/guix-system-vm-image-@value{VERSION}.@var{system}.xz}
24776, or build their own virtual machine image using @command{guix system
24777vm-image} (@pxref{Invocación de guix system}). The returned image is in qcow2
24778format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently
24779use.
24780
24781@cindex QEMU
24782Si ha construido su propia imagen, debe copiarla fuera del almacén y
24783proporcionarse a sí misma permisos de escritura sobre dicha copia antes de
24784usarla. En la invocación de QEMU debe elegir un emulador de sistema que sea
24785adecuado para su plataforma hardware. Esta es una invocación de QEMU mínima
24786que arrancará el resultado de @command{guix system vm-image} en hardware
24787x86_64:
24788
24789@example
24790$ qemu-system-x86_64 \
24791 -net user -net nic,model=virtio \
24792 -enable-kvm -m 256 /tmp/imagen-qemu
24793@end example
24794
24795Aquí está el significado de cada una de esas opciones:
24796
24797@table @code
24798@item qemu-system-x86_64
24799Esto especifica la plataforma hardware a emular. Debe corresponder con el
24800anfitrión.
24801
24802@item -net user
24803Habilita la pila de red en modo de usuaria sin privilegios. El SO
24804virtualizado puede acceder al anfitrión pero no al revés. Esta es la forma
24805más simple de poner en línea un SO virtualizado.
24806
24807@item -net nic,model=virtio
24808Debe crear una interfaz de red del modelo proporcionado. Si la crea, el
24809arranque fallará. Asumiendo que su plataforma hardware sea x86_64, puede
24810obtener una lista de modelos de interfaz de red disponibles ejecutando
24811@command{qemu-system-x86_64 -net nic,model=help}.
24812
24813@item -enable-kvm
24814Si su sistema tiene extensiones de virtualización por hardware, la
24815activación de la implementación de máquinas virtuales (KVM) del núcleo Linux
24816hará que la ejecución sea más rápida.
24817
24818@item -m 256
24819RAM disponible para el sistema operativo virtualizado, en mebibytes. El
24820valor predeterminado es 128@tie{}MiB, que puede ser insuficiente para
24821algunas operaciones.
24822
24823@item /tmp/imagen-qemu
24824El nombre de fichero de la imagen qcow2.
24825@end table
24826
24827El guión @command{run-vm.sh} predeterminado que devuelve la invocación de
24828@command{guix system vm} no añade una opción @command{-net user} por
24829defecto. Para obtener acceso a la red desde la máquina virtual añada el
24830servicio @code{(dhcp-client-service)} a su definición de sistema y arranque
24831la máquina virtual mediante el uso de @command{`guix system vm config.scm`
24832-net user}. Un punto importante a tener en cuenta del uso de @command{-net
24833user} para la obtención de red es que @command{ping} no funcionará, puesto
24834que usa el protocolo ICMP. Deberá usar una orden diferente para comprobar la
24835conectividad a la red, por ejemplo @command{guix download}.
24836
24837@subsection Conexión a través de SSH
24838
24839@cindex SSH
24840@cindex servidor SSH
24841Para activar SSH dentro de una máquina virtual debe añadir un servidor SSH
24842como @code{(dropbear-service)} o @code{(lsh-service)} en su máquina
24843virtual. El servicio @code{(lsh-service)} no arranca actualmente sin
24844supervisión, ya que precisa de entrada para inicializar el generador de
24845aleatoriedad. Además tiene que redirigir el puerto SSH, 22 el
24846predeterminado, a la máquina anfitriona. Puede hacerlo con
24847
24848@example
24849`guix system vm config.scm` -net user,hostfwd=tcp::10022-:22
24850@end example
24851
24852Para conectarse a la máquina virtual puede ejecutar
24853
24854@example
24855ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022
24856@end example
24857
24858La @command{-p} indica a @command{ssh} el puerto al que se debe
24859conectar. @command{-o UserKnownHostsFile=/dev/null} evita que @command{ssh}
24860se queje cada vez que modifique su fichero @command{config.scm} y la orden
24861@command{-o StrictHostKeyChecking=no} evita que tenga que autorizar la
24862conexión a una máquina desconocida cada vez que se conecte.
24863
24864@subsection Uso de @command{virt-viewer} con Spice
24865
24866Como alternativa al cliente gráfico predeterminado de @command{qemu} puede
24867usar @command{remote-viewer} del paquete @command{virt-viewer}. Para
24868conectarse proporcione la opción @command{-spice
24869port=5930,disable-ticketing} a @command{qemu}. Véase la sección previa para
24870más información sobre cómo hacer esto.
24871
24872Spice también le permite hacer cosas como compartir su portapapeles con su
24873máquina virtual. Para activarlo debe proporcionar también las siguientes
24874opciones a @command{qemu}:
24875
24876@example
24877-device virtio-serial-pci,id=virtio-serial0,max_ports=16,bus=pci.0,addr=0x5
24878-chardev spicevmc,name=vdagent,id=vdagent
24879-device virtserialport,nr=1,bus=virtio-serial0.0,chardev=vdagent,
24880name=com.redhat.spice.0
24881@end example
24882
24883También debe añadir el @pxref{Servicios misceláneos, servicio Spice}.
24884
24885@node Definición de servicios
24886@section Definición de servicios
24887
24888Las secciones anteriores muestran los servicios disponibles y cómo se pueden
24889combinar en una declaración @code{operating-system}. ¿Pero cómo las
24890definimos en primer lugar? ¿Y qué es un servicio en cualquier caso?
24891
24892@menu
24893* Composición de servicios:: El modelo para la composición de servicios.
24894* Tipos de servicios y servicios:: Tipos y servicios
24895* Referencia de servicios:: Referencia de la API.
24896* Servicios de Shepherd:: Un tipo de servicio particular.
24897@end menu
24898
24899@node Composición de servicios
24900@subsection Composición de servicios
24901
24902@cindex services
24903@cindex daemons
24904Definimos un @dfn{servicio} como, @i{grosso modo}, algo que extiende la
24905funcionalidad del sistema operativo. Habitualmente un servicio es un
24906proceso---un @dfn{daemon}---iniciado cuando el sistema arranca: un servidor
24907de shell seguro, un servidor Web, el daemon de construcción de Guix, etc. A
24908veces un servicio es un daemon cuya ejecución puede ser iniciada por otro
24909daemon---por ejemplo, un servidor FTP iniciado por @command{inetd} o un
24910servicio D-Bus activado por @command{dbus-daemon}. De manera ocasional, un
24911servicio no se puede asociar a un daemon. Por ejemplo, el servicio
24912``account'' recopila cuentas de usuaria y se asegura que existen cuando el
24913sistema se ejecuta; el servicio ``udev'' recopila reglas de gestión de
24914dispositivos y los pone a disposición del daemon eudev; el servicio
24915@file{/etc} genera el contenido del directorio @file{/etc} del sistema.
24916
24917@cindex extensiones de servicios
24918Guix system services are connected by @dfn{extensions}. For instance, the
24919secure shell service @emph{extends} the Shepherd---the initialization
24920system, running as PID@tie{}1---by giving it the command lines to start and
24921stop the secure shell daemon (@pxref{Servicios de red,
24922@code{openssh-service-type}}); the UPower service extends the D-Bus service
24923by passing it its @file{.service} specification, and extends the udev
24924service by passing it device management rules (@pxref{Servicios de escritorio,
24925@code{upower-service}}); the Guix daemon service extends the Shepherd by
24926passing it the command lines to start and stop the daemon, and extends the
24927account service by passing it a list of required build user accounts
24928(@pxref{Servicios base}).
24929
24930Al fin y al cabo, los servicios y sus relaciones de ``extensión'' forman un
24931grafo acíclico dirigido (GAD). Si representamos los servicios como cajas y
24932las extensiones como flechas, un sistema típico puede proporcionar algo de
24933este estilo:
24934
24935@image{images/service-graph,,5in,Grafo típico de extensiones de servicios.}
24936
24937@cindex servicio del sistema
24938En la base, podemos ver el @dfn{servicio del sistema}, el cual produce el
24939directorio que contiene todo lo necesario para ejecutar y arrancar el
24940sistema, como es devuelto por la orden @command{guix system
24941build}. @xref{Referencia de servicios}, para aprender acerca de otros servicios
24942mostrados aquí. @xref{system-extension-graph, la orden @command{guix system
24943extension-graph}}, para información sobre cómo generar esta representación
24944para una definición particular de sistema operativo.
24945
24946@cindex tipos de servicio
24947Technically, developers can define @dfn{service types} to express these
24948relations. There can be any number of services of a given type on the
24949system---for instance, a system running two instances of the GNU secure
24950shell server (lsh) has two instances of @code{lsh-service-type}, with
24951different parameters.
24952
24953La siguiente sección describe la interfaz programática para tipos de
24954servicio y servicios.
24955
24956@node Tipos de servicios y servicios
24957@subsection Tipos de servicios y servicios
24958
24959Un @dfn{tipo de servicio} es un nodo en el GAD descrito
24960previamente. Empecemos con un ejemplo simple, el tipo de servicio para el
24961daemon de construcción Guix (@pxref{Invocación de guix-daemon}):
24962
24963@example
24964(define guix-service-type
24965 (service-type
24966 (name 'guix)
24967 (extensions
24968 (list (service-extension shepherd-root-service-type guix-shepherd-service)
24969 (service-extension account-service-type guix-accounts)
24970 (service-extension activation-service-type guix-activation)))
24971 (default-value (guix-configuration))))
24972@end example
24973
24974@noindent
24975Define tres cosas:
24976
24977@enumerate
24978@item
24979Un nombre, cuyo único propósito es facilitar la inspección y la depuración.
24980
24981@item
24982Una lista de @dfn{extensiones de servicio}, donde cada extensión designa el
24983tipo de servicio a extender y un procedimiento que, dados los parámetros del
24984servicio, devuelve una lista de objetos para extender el servicio de dicho
24985tipo.
24986
24987Cada tipo de servicio tiene al menos una extensión de servicio. La única
24988excepción es el @dfn{tipo de servicio de arranque}, que es el último
24989servicio.
24990
24991@item
24992De manera opcional, un valor predeterminado para instancias de este tipo.
24993@end enumerate
24994
24995In this example, @code{guix-service-type} extends three services:
24996
24997@table @code
24998@item shepherd-root-service-type
24999The @code{guix-shepherd-service} procedure defines how the Shepherd service
25000is extended. Namely, it returns a @code{<shepherd-service>} object that
25001defines how @command{guix-daemon} is started and stopped (@pxref{Servicios de Shepherd}).
25002
25003@item account-service-type
25004This extension for this service is computed by @code{guix-accounts}, which
25005returns a list of @code{user-group} and @code{user-account} objects
25006representing the build user accounts (@pxref{Invocación de guix-daemon}).
25007
25008@item activation-service-type
25009Here @code{guix-activation} is a procedure that returns a gexp, which is a
25010code snippet to run at ``activation time''---e.g., when the service is
25011booted.
25012@end table
25013
25014Un servicio de este tipo se puede instanciar de esta manera:
25015
25016@example
25017(service guix-service-type
25018 (guix-configuration
25019 (build-accounts 5)
25020 (use-substitutes? #f)))
25021@end example
25022
25023El segundo parámetro a la forma @code{service} es un valor que representa
25024los parámetros de esta instancia específica del
25025servicio. @xref{guix-configuration-type, @code{guix-configuration}}, para
25026información acerca del tipo de datos @code{guix-configuration}. Cuando se
25027omite el valor, se usa el valor predeterminado por @code{guix-service-type}:
25028
25029@example
25030(service guix-service-type)
25031@end example
25032
25033@code{guix-service-type} is quite simple because it extends other services
25034but is not extensible itself.
25035
25036@c @subsubsubsection Extensible Service Types
25037
25038El tipo de servicio para un servicio @emph{extensible} puede tener esta
25039forma:
25040
25041@example
25042(define udev-service-type
25043 (service-type (name 'udev)
25044 (extensions
25045 (list (service-extension shepherd-root-service-type
25046 udev-shepherd-service)))
25047
25048 (compose concatenate) ;concatena la lista de reglas
25049 (extend (lambda (config rules)
25050 (match config
25051 (($ <udev-configuration> udev initial-rules)
25052 (udev-configuration
25053 (udev udev) ;el paquete udev a usar
25054 (rules (append initial-rules rules)))))))))
25055@end example
25056
25057This is the service type for the
25058@uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management
25059daemon}. Compared to the previous example, in addition to an extension of
25060@code{shepherd-root-service-type}, we see two new fields:
25061
25062@table @code
25063@item compose
25064Este es el procedimiento para @dfn{componer} la lista de extensiones en
25065servicios de este tipo.
25066
25067Los servicios pueden extender el servicio udev proporcionandole una lista de
25068reglas; componemos estas extensiones simplemente concatenandolas.
25069
25070@item extend
25071Este procedimiento define cómo el valor del servicio se @dfn{extiende} con
25072la composición de la extensión.
25073
25074Las extensiones de udev se componen en una lista de reglas, pero el valor
25075del servicio udev es en sí un registro @code{<udev-configuration>}. Por
25076tanto aquí extendemos el registro agregando la lista de reglas que contiene
25077al final de la lista de reglas que se contribuyeron.
25078
25079@item description
25080Es una cadena que proporciona una descripción del tipo de servicio. Dicha
25081cadena puede contener lenguaje de marcado Texinfo (@pxref{Overview,,,
25082texinfo, GNU Texinfo}). La orden @command{guix system search} busca estas
25083cadenas y las muestra (@pxref{Invocación de guix system}).
25084@end table
25085
25086There can be only one instance of an extensible service type such as
25087@code{udev-service-type}. If there were more, the @code{service-extension}
25088specifications would be ambiguous.
25089
25090¿Todavía aquí? La siguiente sección proporciona una referencia de la
25091interfaz programática de los servicios.
25092
25093@node Referencia de servicios
25094@subsection Referencia de servicios
25095
25096Ya hemos echado un vistazo a los tipos de servicio (@pxref{Tipos de servicios y servicios}). Esta sección proporciona referencias sobre cómo manipular
25097servicios y tipos de servicio. Esta interfaz se proporciona en el módulo
25098@code{(gnu services)}.
25099
25100@deffn {Procedimiento Scheme} service @var{tipo} [@var{valor}]
25101Devuelve un nuevo servicio de @var{tipo}, un objeto @code{<service-type>}
25102(véase a continuación). @var{valor} puede ser cualquier objeto; represental
25103los parámetros de esta instancia de servicio particular.
25104
25105Cuando se omite @var{valor}, se usa el valor predeterminado especificado por
25106@var{tipo}; si @var{type} no especifica ningún valor, se produce un error.
25107
25108Por ejemplo, esto:
25109
25110@example
25111(service openssh-service-type)
25112@end example
25113
25114@noindent
25115es equivalente a esto:
25116
25117@example
25118(service openssh-service-type
25119 (openssh-configuration))
25120@end example
25121
25122En ambos casos el resultado es una instancia de @code{openssh-service-type}
25123con la configuración predeterminada.
25124@end deffn
25125
25126@deffn {Procedimiento Scheme} service? @var{obj}
25127Devuelve verdadero si @var{obj} es un servicio.
25128@end deffn
25129
25130@deffn {Procedimiento Scheme} service-kind @var{servicio}
25131Devuelve el tipo de @var{servicio}---es decir, un objeto
25132@code{<service-type>}.
25133@end deffn
25134
25135@deffn {Procedimiento Scheme} service-value @var{servicio}
25136Devuelve el valor asociado con @var{servicio}. Representa sus parámetros.
25137@end deffn
25138
25139Este es un ejemplo de creación y manipulación de un servicio:
25140
25141@example
25142(define s
25143 (service nginx-service-type
25144 (nginx-configuration
25145 (nginx nginx)
25146 (log-directory log-directory)
25147 (run-directory run-directory)
25148 (file config-file))))
25149
25150(service? s)
25151@result{} #t
25152
25153(eq? (service-kind s) nginx-service-type)
25154@result{} #t
25155@end example
25156
25157The @code{modify-services} form provides a handy way to change the
25158parameters of some of the services of a list such as @code{%base-services}
25159(@pxref{Servicios base, @code{%base-services}}). It evaluates to a list of
25160services. Of course, you could always use standard list combinators such as
25161@code{map} and @code{fold} to do that (@pxref{SRFI-1, List Library,, guile,
25162GNU Guile Reference Manual}); @code{modify-services} simply provides a more
25163concise form for this common pattern.
25164
25165@deffn {Sintaxis Scheme} modify-services @var{servicios} @
25166 (@var{tipo} @var{variable} => @var{cuerpo}) @dots{}
25167
25168Modifica los servicios listados en @var{servicios} de acuerdo a las
25169cláusulas proporcionadas. Cada cláusula tiene la forma:
25170
25171@example
25172(@var{tipo} @var{variable} => @var{cuerpo})
25173@end example
25174
25175donde @var{tipo} es un tipo de servicio---por ejemplo,
25176@code{guix-service-type}---y @var{variable} es un identificador que se
25177asocia dentro del @var{cuerpo} a los parámetros del servicio---por ejemplo,
25178una instancia @code{guix-configuration}---del servicio original de dicho
25179@var{ŧipo}.
25180
25181El @var{cuerpo} deve evaluar a los nuevos parámetros del servicio, que serán
25182usados para configurar el nuevo servicio. Este nuevo servicio reemplaza el
25183original en la lista resultante. Debido a que los parámetros de servicio de
25184un servicio se crean mediante el uso de @code{define-record-type*}, puede
25185escribir un breve @var{cuerpo} que evalúe a los nuevos parámetros del
25186servicio mediante el uso de la característica @code{inherit} que proporciona
25187@code{define-record-type*} para heredar los valores antiguos.
25188
25189@xref{Uso de la configuración del sistema}, para ejemplos de uso.
25190
25191@end deffn
25192
25193A continuación se procede con la interfaz programática de los tipos de
25194servicios. Es algo que debe conocer para escribir definiciones de nuevos
25195servicios, pero no es cuando busque formas de personalizar su declaración
25196@code{operating-system}.
25197
25198@deftp {Tipo de datos} service-type
25199@cindex tipo de servicio
25200Esta es la representación de un @dfn{tipo de servicio} (@pxref{Tipos de servicios y servicios}).
25201
25202@table @asis
25203@item @code{name}
25204Es un símbolo, usado únicamente para simplificar la inspección y la
25205depuración.
25206
25207@item @code{extensions}
25208Una lista no vacía de objetos @code{<service-extension>} (véase a
25209continuación).
25210
25211@item @code{compose} (predeterminado: @code{#f})
25212Si es @code{#f}, entonces el tipo de servicio denota servicios que no pueden
25213extenderse---es decir, servicios que no pueden recibir ``valores'' de otros
25214servicios.
25215
25216En otro caso, debe ser un procedimiento de un único parámetro. El
25217procedimiento es invocado en @code{fold-services} y se le proporciona una
25218lista de valores recibidos de las extensiones. Puede devolver un valor
25219único.
25220
25221@item @code{extend} (predeterminado: @code{#f})
25222Si es @code{#f}, los servicios de este tipo no pueden extenderse.
25223
25224En otro caso, debe ser un procedimiento que acepte dos parámetros:
25225@code{fold-services} lo invoca, proporcionandole el valor inicial del
25226servicio como el primer parámetro y el resultado de aplicar @code{compose} a
25227los valores de las extensiones como segundo parámetro. Debe devolver un
25228valor que es un parámetro válido para la instancia del servicio.
25229@end table
25230
25231@xref{Tipos de servicios y servicios}, para ejemplos.
25232@end deftp
25233
25234@deffn {Procedimiento Scheme} service-extension @var{tipo-deseado} @
25235 @var{calcula}
25236
25237Devuelve una nueva extensión para servicios del tipo
25238@var{tipo-deseado}. @var{calcula} debe ser un procedimiento de un único
25239parámetro: es llamado en @code{fold-services}, proporcionandole el valor
25240asociado con el servicio que proporciona la extensión; debe devolver un
25241valor válido para el servicio deseado.
25242@end deffn
25243
25244@deffn {Procedimiento Scheme} service-extension? @var{obj}
25245Devuelve verdadero si @var{obj} es una expresión-G.
25246@end deffn
25247
25248De manera ocasional, puede desear simplemente extender un servicio
25249existente. Esto implica la creación de un nuevo tipo de servicio y la
25250especificación de la extensión deseada, lo cual puede ser engorroso; el
25251procedimiento @code{simple-service} proporciona un atajo para ello.
25252
25253@deffn {Procedimiento Scheme} simple-service @var{nombre} @var{deseado} @var{valor}
25254Devuelve un servicio que extiende @var{deseado} con @var{valor}. Esto
25255funciona creando una instancia única del tipo de servicio @var{nombre}, de
25256la cual el servicio devuelto es una instancia.
25257
25258Por ejemplo, esto extiende mcron (@pxref{Ejecución de tareas programadas}) con una
25259tarea adicional:
25260
25261@example
25262(simple-service 'mi-tarea-mcron mcron-service-type
25263 #~(job '(next-hour (3)) "guix gc -F 2G"))
25264@end example
25265@end deffn
25266
25267En el núcleo de la abstracción de los servicios se encuentra el
25268procedimiento @code{fold-services}, que es responsable de la ``compilación''
25269de una lista de servicios en un único directorio que contiene todo lo
25270necesario para arrancar y ejecutar el sistema---el directorio mostrado por
25271la orden @command{guix system build} (@pxref{Invocación de guix system}). En
25272esencia, propaga las extensiones de servicios a través del grafo de
25273servicios, actualizando los parámetros de cada nodo en el camino, hasta que
25274alcanza el nodo raíz.
25275
25276@deffn {Procedimiento Scheme} fold-services @var{servicios} @
25277 [#:target-type @var{system-service-type}]
25278Recorre @var{servicios} propagando sus extensiones hasta la raíz del tipo
25279@var{target-type}; devuelve el servicio raíz tratado de la manera apropiada.
25280@end deffn
25281
25282Por último, el módulo @code{(gnu services)} también define varios tipos
25283esenciales de servicios, algunos de los cuales se enumeran a continuación.
25284
25285@defvr {Variable Scheme} system-service-type
25286Esta es la raíz del grafo de servicios. Produce el directorio del sistema
25287como lo devuelve la orden @code{guix system build}.
25288@end defvr
25289
25290@defvr {Variable Scheme} boot-service-type
25291El tipo del ``servicio de arranque'', que produce un @dfn{guión de
25292arranque}. El guión de arranque es lo que ejecuta el disco inicial de RAM
25293cuando se arranca.
25294@end defvr
25295
25296@defvr {Variable Scheme} etc-service-type
25297El tipo del servicio @file{/etc}. Este servicio se usa para crear los
25298ficheros en @file{/etc} y puede extenderse proporcionandole pares
25299nombre/fichero como estas:
25300
25301@example
25302(list `("issue" ,(plain-file "issue" "¡Bienvenida!\n")))
25303@end example
25304
25305En este ejemplo, el ejecto sería la adición de un fichero @file{/etc/issue}
25306que apunta al fichero proporcionado.
25307@end defvr
25308
25309@defvr {Variable Scheme} setuid-program-service-type
25310Tipo para el ``servicio de programas setuid''. Este servicio recopila listas
25311de nombres de ficheros ejecutables, proporcionados como expresiones-G, y los
25312añade al conjunto de programas con setuid de root en el sistema
25313(@pxref{Programas con setuid}).
25314@end defvr
25315
25316@defvr {Variable Scheme} profile-service-type
25317Tipo del servicio que genera el @dfn{perfil del sistema}---es decir, los
25318programas en @file{/run/current-system/profile}. Otros servicios pueden
25319extenderlo proporcionandole listas de paquetes a añadir al perfil del
25320sistema.
25321@end defvr
25322
25323
25324@node Servicios de Shepherd
25325@subsection Servicios de Shepherd
25326
25327@cindex servicios de shepherd
25328@cindex PID 1
25329@cindex sistema de inicio
25330The @code{(gnu services shepherd)} module provides a way to define services
25331managed by the GNU@tie{}Shepherd, which is the initialization system---the
25332first process that is started when the system boots, also known as
25333PID@tie{}1 (@pxref{Introducción,,, shepherd, The GNU Shepherd Manual}).
25334
25335Los servicios en Shepherd pueden depender de otros servicios. Por ejemplo,
25336el daemon SSH puede tener que arrancarse tras el arranque del daemon syslog,
25337lo cual a su vez puede suceder únicamente tras el montaje de todos los
25338sistemas de ficheros. El sistema operativo simple definido previamente
25339(@pxref{Uso de la configuración del sistema}) genera un grafo de servicios como
25340este:
25341
25342@image{images/shepherd-graph,,5in,Grafo típico de servicios de shepherd.}
25343
25344En realidad puede generar dicho grafo para cualquier definición de sistema
25345operativo mediante el uso de la orden @command{guix system shepherd-graph}
25346(@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}).
25347
25348The @code{%shepherd-root-service} is a service object representing
25349PID@tie{}1, of type @code{shepherd-root-service-type}; it can be extended by
25350passing it lists of @code{<shepherd-service>} objects.
25351
25352@deftp {Tipo de datos} shepherd-service
25353El tipo de datos que representa un servicio gestionado por Shepherd.
25354
25355@table @asis
25356@item @code{provision}
25357Una lista de símbolos que indican lo que proporciona el servicio.
25358
25359Esto son nombres que pueden proporcionarse a @command{herd start},
25360@command{herd status} y órdenes similares (@pxref{Invoking herd,,, shepherd,
25361The GNU Shepherd Manual}). @xref{Slots of services, the @code{provides}
25362slot,, shepherd, The GNU Shepherd Manual}, para más detalles.
25363
25364@item @code{requirements} (predeterminados: @code{'()})
25365Lista de símbolos que indican los servicios Shepherd de los que este
25366depende.
25367
25368@cindex one-shot services, for the Shepherd
25369@item @code{one-shot?} (predeterminado: @code{#f})
25370Whether this service is @dfn{one-shot}. One-shot services stop immediately
25371after their @code{start} action has completed. @xref{Slots of services,,,
25372shepherd, The GNU Shepherd Manual}, for more info.
25373
25374@item @code{respawn?} (predeterminado: @code{#t})
25375Indica si se debe reiniciar el servicio cuando se para, por ejemplo cuando
25376el proceso subyacente muere.
25377
25378@item @code{start}
25379@itemx @code{stop} (predeterminado: @code{#~(const #f)})
25380Los campos @code{start} y @code{stop} hacen referencia a las características
25381de Shepherd de arranque y parada de procesos respectivamente (@pxref{Service
25382De- and Constructors,,, shepherd, The GNU Shepherd Manual}). Se proporcionan
25383como expresiones-G que se expandirán en el fichero de configuración de
25384Shepherd (@pxref{Expresiones-G}).
25385
25386@item @code{actions} (predeterminadas: @code{'()})
25387@cindex acciones, de servicios de Shepherd
25388Esta es la lista de objetos @code{shepherd-action} (véase a continuación)
25389que definen las @dfn{acciones} permitidas por el servicio, además de las
25390acciones estándar @code{start} y @code{stop}. Las acciones que se listan
25391aquí estarán disponibles como ordenes de @command{herd}:
25392
25393@example
25394herd @var{acción} @var{servicio} [@var{parámetros}@dots{}]
25395@end example
25396
25397@item @code{documentación}
25398Una cadena de documentación, que se mostrará al ejecutar:
25399
25400@example
25401herd doc @var{nombre-del-servicio}
25402@end example
25403
25404where @var{service-name} is one of the symbols in @code{provision}
25405(@pxref{Invoking herd,,, shepherd, The GNU Shepherd Manual}).
25406
25407@item @code{modules} (default: @code{%default-modules})
25408Esta es la lista de módulos que deben estar dentro del ámbito cuando
25409@code{start} y @code{stop} son evaluados.
25410
25411@end table
25412@end deftp
25413
25414@deftp {Tipo de datos} shepherd-action
25415Este es el tipo de datos que define acciones adicionales implementadas por
25416un servicio Shepherd (vea previamente).
25417
25418@table @code
25419@item name
25420Símbolo que nombra la acción.
25421
25422@item documentación
25423Esta es una cadena de documentación para la acción. Puede verse ejecutando:
25424
25425@example
25426herd doc @var{servicio} action @var{acción}
25427@end example
25428
25429@item procedure
25430Debe ser una expresión-G que evalua a un procedimiento de al menos un
25431parámetro, el cual es el ``valor de ejecución'' del servicio (@pxref{Slots
25432of services,,, shepherd, The GNU Shepherd Manual}).
25433@end table
25434
25435El siguiente ejemplo define una acción llamada @code{di-hola} que saluda
25436amablemente a la usuaria:
25437
25438@example
25439(shepherd-action
25440 (name 'di-hola)
25441 (documentation "¡Di hola!")
25442 (procedure #~(lambda (running . args)
25443 (format #t "¡Hola, compa! parámetros: ~s\n"
25444 args)
25445 #t)))
25446@end example
25447
25448Asumiendo que esta acción se añade al servicio @code{ejemplo}, puede
25449ejecutar:
25450
25451@example
25452# herd di-hola ejemplo
25453¡Hola, compa! parámetros: ()
25454# herd di-hola ejemplo a b c
25455¡Hola, compa! parámetros: ("a" "b" "c")
25456@end example
25457
25458Esta, como puede ver, es una forma un tanto sofisticada de decir
25459hola. @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, para
25460más información sobre acciones.
25461@end deftp
25462
25463@defvr {Variable Scheme} shepherd-root-service-type
25464El tipo de servicio para el ``servicio raíz'' de Shepherd---es decir,
25465PID@tie{}1.
25466
25467El tipo de servicio que las extensiones declaran cuando desean crear
25468servicios shepherd (@pxref{Tipos de servicios y servicios}, para un
25469ejemplo). Cada extensión debe pasar una lista de @code{<shepherd-service>}.
25470@end defvr
25471
25472@defvr {Variable Scheme} %shepherd-root-service
25473Este servicio representa el PID@tie{}1.
25474@end defvr
25475
25476
25477@node Documentación
25478@chapter Documentación
25479
25480@cindex documentación, búsqueda
25481@cindex búsqueda de documentación
25482@cindex Info, formato de documentación
25483@cindex páginas man
25484@cindex páginas de manual
25485En la mayor parte de casos, los paquetes instalados con Guix contienen
25486documentación. Hay dos formatos principales de documentación: ``Info'', un
25487formato hipertextual navegable usado para software GNU, y ``páginas de
25488manual'' (o ``páginas man''), la documentación lineal encontrada
25489tradicionalmente en Unix. Se accede a los manuales Info con la orden
25490@command{info} o con Emacs, y las páginas man con @command{man}.
25491
25492Puede buscar documentación de software instalado en su sistema por palabras
25493clave. Por ejemplo, la siguiente orden busca información sobre ``TLS'' en
25494manuales Info:
25495
25496@example
25497$ info -k TLS
25498"(emacs)Network Security" -- STARTTLS
25499"(emacs)Network Security" -- TLS
25500"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_flags
25501"(gnutls)Core TLS API" -- gnutls_certificate_set_verify_function
25502@dots{}
25503@end example
25504
25505@noindent
25506La orden siguiente busca por la misma palabra clave en páginas man:
25507
25508@example
25509$ man -k TLS
25510SSL (7) - OpenSSL SSL/TLS library
25511certtool (1) - GnuTLS certificate tool
25512@dots {}
25513@end example
25514
25515Estas búsquedas son completamente locales en su máquina de modo que tiene la
25516garantía de que la documentación que encuentre corresponde con lo que está
25517realmente instalado, puede acceder a ella sin conexión a la red, y se
25518respeta su privacidad.
25519
25520Una vez tenga estos resultados, puede ver la documentación relevante
25521mediante la ejecución de, digamos:
25522
25523@example
25524$ info "(gnutls)Core TLS API"
25525@end example
25526
25527@noindent
25528o:
25529
25530@example
25531$ man certtool
25532@end example
25533
25534Los manuales Info contienen secciones e índices, así como enlaces como
25535aquellos encontrados en páginas Web. El lector @command{info} (@pxref{Top,
25536Info reader,, info-stnd, Stand-alone GNU Info}) y su contraparte en Emacs
25537(@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) proporcionan
25538combinaciones de teclas intuitivas para la navegación en los
25539manuales. @xref{Getting Started,,, info, Info: An Introduction}, para una
25540introducción a la navegación en Info.
25541
25542@node Instalación de ficheros de depuración
25543@chapter Instalación de ficheros de depuración
25544
25545@cindex ficheros de depuración
25546Los programas binarios, como los producidos por los compiladores GCC por
25547ejemplo, se escriben típicamente en el formato ELF, con una sección que
25548contiene @dfn{información de depuración}. La información de depuración es lo
25549que permite que el depurador, GDB, asocie código binario a código fuente; es
25550necesaria para depurar un programa compilado en condiciones adecuadas.
25551
25552El problema con la información de depuración es que ocupa un espacio
25553considerable en el disco. Por ejemplo, la información de depuración de la
25554biblioteca C de GNU ocupa más de 60 MiB. Por tanto, como usuaria, mantener
25555toda la información de depuración de todos los programas instalados no es
25556habitualmente una opción. No obstante, el ahorro de espacio no debe ser
25557impedir la depuración---especialmente en el sistema GNU, que debería
25558facilitar a sus usuarias ejercitar su libertad de computación (@pxref{Distribución GNU}).
25559
25560Afortunadamente, las utilidades binarias GNU (Binutils) y GDB proporcionan
25561un mecanismo que permite a las usuarias obtener lo mejor de ambos mundos: la
25562información de depuración puede extraerse de los binarios y almacenarse en
25563ficheros separados. GDB es capaz entonces de cargar la información de
25564depuración desde esos ficheros, cuando estén disponibles (@pxref{Separate
25565Debug Files,,, gdb, Debugging with GDB}).
25566
25567La distribución GNU toma ventaja de este hecho almacenando la información de
25568depuración en el subdirectorio @code{lib/debug} de una salida separada del
25569paquete llamada @code{debug} (@pxref{Paquetes con múltiples salidas}). Las
25570usuarias pueden elegir si instalan la salida @code{debug} de un paquete
25571cuando la necesitan. Por ejemplo, la siguiente orden instala la información
25572de depuración para la biblioteca C de GNU y para GNU Guile.
25573
25574@example
25575guix package -i glibc:debug guile:debug
25576@end example
25577
25578Se debe decir entonces a GDB que busque los ficheros de depuración en el
25579perfil de la usuaria, proporcionando un valor a la variable
25580@code{debug-file-directory} (considere hacerlo en el fichero
25581@file{~/.gdbinit}, @pxref{Startup,,, gdb, Debugging with GDB}):
25582
25583@example
25584(gdb) set debug-file-directory ~/.guix-profile/lib/debug
25585@end example
25586
25587A partir de ese momento GDB obtendrá la información de depuración de los
25588ficheros @code{.debug} bajo @file{~/.guix-profile/lib/debug}.
25589
25590Además, probablemente desee que GDB sea capaz de mostrar el código fuente
25591que está depurando. Para hacerlo, tiene que desempaquetar el código fuente
25592del paquete de su interés (obtenido con @code{guix build --source},
25593@pxref{Invocación de guix build}) e indicar a GDB cual es el directorio de
25594fuentes mediante el uso de la orden @code{directory} (@pxref{Source Path,
25595@code{directory},, gdb, Debugging with GDB}).
25596
25597@c XXX: keep me up-to-date
25598El mecanismo de la salida @code{debug} en Guix se implementa por el sistema
25599de construcción @code{gnu-build-system} (@pxref{Sistemas de construcción}). Ahora mismo
25600necesita una activación explícita---la información de depuración está
25601disponible únicamente para paquetes con definiciones que declaren
25602explícitamente una salida @code{debug}. Esto puede cambiarse por una
25603activación implícita en el futuro si nuestras granjas de construcción pueden
25604soportar la carga. Para comprobar si un paquete tiene una salida
25605@code{debug}, use @command{guix package --list-available} (@pxref{Invocación de guix package}).
25606
25607
25608@node Actualizaciones de seguridad
25609@chapter Actualizaciones de seguridad
25610
25611@cindex actualizaciones de seguridad
25612@cindex vulnerabilidades de seguridad
25613De manera ocasional, vulnerabilidades importantes de seguridad se descubren
25614en los paquetes de software y deben parchearse. Las desarrolladoras de Guix
25615tratan de seguir las vulnerabilidades conocidas y aplicar parches tan pronto
25616como sea posible en la rama @code{master} de Guix (todavía no proporcionamos
25617una rama ``estable'' que contenga únicamente actualizaciones de
25618seguridad). La herramienta @command{guix lint} ayuda a las desarrolladoras a
25619encontrar versiones vulnerables de paquetes de software en la distribución:
25620
25621@smallexample
25622$ guix lint -c cve
25623gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547
25624gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276
25625gnu/packages/image.scm:312:2: openjpeg@@2.1.0: probably vulnerable to CVE-2016-1923, CVE-2016-1924
25626@dots{}
25627@end smallexample
25628
25629@xref{Invocación de guix lint}, para más información.
25630
25631@quotation Nota
25632En la versión @value{VERSION}, esta característica descrita a continuación
25633se considera en estado ``beta''.
25634@end quotation
25635
25636Guix sigue una disciplina funcional de gestión de paquetes
25637(@pxref{Introducción}), lo que implica que, cuando se cambia un paquete,
25638@emph{todos los paquetes que dependen de él} deben ser reconstruidos. Esto
25639puede ralentizar de manera significativa el despliegue de correcciones en
25640paquetes básicos como libc o Bash, ya que básicamente la distribución al
25641completo debe reconstruirse. El uso de binarios preconstruidos ayuda
25642(@pxref{Sustituciones}), pero el despliegue aún puede tomar más tiempo del
25643deseado.
25644
25645@cindex injertos (grafts en inglés)
25646Para afrontar esto, Guix implementa @dfn{injertos}, un mecanismo que permite
25647un rápido despliegue de actualizaciones críticas sin los costes asociados
25648con una reconstrucción completa de la distribución. La idea es reconstruir
25649únicamente el paquete que hace falta parchear, y entonces ``injertarlo'' en
25650los paquetes explícitamente instalados por la usuaria y que previamente
25651hacían referencia al paquete original. El coste de realizar un injerto es
25652menor que una reconstrucción completa de la cadena de dependencias.
25653
25654@cindex reemplazos de paquetes, para injertos
25655For instance, suppose a security update needs to be applied to Bash. Guix
25656developers will provide a package definition for the ``fixed'' Bash, say
25657@code{bash-fixed}, in the usual way (@pxref{Definición de paquetes}). Then, the
25658original package definition is augmented with a @code{replacement} field
25659pointing to the package containing the bug fix:
25660
25661@example
25662(define bash
25663 (package
25664 (name "bash")
25665 ;; @dots{}
25666 (replacement bash-fixed)))
25667@end example
25668
25669From there on, any package depending directly or indirectly on Bash---as
25670reported by @command{guix gc --requisites} (@pxref{Invocación de guix gc})---that
25671is installed is automatically ``rewritten'' to refer to @code{bash-fixed}
25672instead of @code{bash}. This grafting process takes time proportional to
25673the size of the package, usually less than a minute for an ``average''
25674package on a recent machine. Grafting is recursive: when an indirect
25675dependency requires grafting, then grafting ``propagates'' up to the package
25676that the user is installing.
25677
25678Currently, the length of the name and version of the graft and that of the
25679package it replaces (@code{bash-fixed} and @code{bash} in the example above)
25680must be equal. This restriction mostly comes from the fact that grafting
25681works by patching files, including binary files, directly. Other
25682restrictions may apply: for instance, when adding a graft to a package
25683providing a shared library, the original shared library and its replacement
25684must have the same @code{SONAME} and be binary-compatible.
25685
25686La opción de línea de órdenes @option{--no-grafts} le permite anular
25687voluntariamente el proceso de injerto (@pxref{Opciones comunes de construcción,
25688@option{--no-grafts}}). Por tanto, la orden:
25689
25690@example
25691guix build bash --no-grafts
25692@end example
25693
25694@noindent
25695devuelve el nombre de fichero del almacén de la versión original de Bash,
25696mientras que:
25697
25698@example
25699guix build bash
25700@end example
25701
25702@noindent
25703devuelve el nombre de fichero del almacén de la versión ``corregida'',
25704reemplazo de Bash. Esto le permite distinguir entre las dos variantes de
25705Bash.
25706
25707Para verificar a qué Bash hace referencia su perfil al completo, puede
25708ejecutar (@pxref{Invocación de guix gc}):
25709
25710@example
25711guix gc -R `readlink -f ~/.guix-profile` | grep bash
25712@end example
25713
25714@noindent
25715@dots{} y compare los nombres de fichero del almacén que obtendrá con los
25716ejemplos previos. Del mismo modo, para una generación completa del sistema
25717Guix:
25718
25719@example
25720guix gc -R `guix system build mi-configuracion.scm` | grep bash
25721@end example
25722
25723Por último, para comprobar qué versión de Bash están usando los procesos en
25724ejecución, puede usar la orden @command{lsof}:
25725
25726@example
25727lsof | grep /gnu/store/.*bash
25728@end example
25729
25730
25731@node Lanzamiento inicial
25732@chapter Lanzamiento inicial
25733
25734@c Adapted from the ELS 2013 paper.
25735
25736@cindex lanzamiento inicial
25737
25738El lanzamiento inicial en nuestro contexto hace referencia a cómo la
25739distribución se construye ``de la nada''. Recuerde que el entorno de
25740construcción de una derivación no contiene más que sus entradas declaradas
25741(@pxref{Introducción}). Por lo que hay un evidente problema ``del huevo y la
25742gallina'': ¿cómo se construye el primer paquete? ¿Cómo se compila el primer
25743compilador? Fíjese que esta es una cuestión de interés únicamente para la
25744hacker curiosa, no para la usuaria normal, así que puede pasar por encima
25745está sección sin ninguna vergüenza si se considera una ``usuaria normal''.
25746
25747@cindex binarios del lanzamiento inicial
25748El sistema GNU está compuesto principalmente de código C, con libc en su
25749base. El sistema de construcción GNU en sí asume la disponibilidad del shell
25750Bourne y las herramientas de línea de órdenes proporcionadas por GNU
25751Coreutils, Awk, Findutils, `sed' y `grep'. Además, los programas de
25752construcción---programas que ejecutan @code{./configure}, @code{make},
25753etc.---están escritos en Scheme Guile
25754(@pxref{Derivaciones}). Consecuentemente, para ser capaz de construir
25755cualquier cosa, desde cero, Guix depende en binarios preconstruidos de
25756Guile, GCC, Binutils, libc y otros paquetes mencionados anteriormente---los
25757@dfn{binarios del lanzamiento inicial}.
25758
25759Estos binarios del lanzamiento inicial se ``dan por supuestos'', aunque se
25760pueden volver a crear si se necesita (más sobre esto más adelante).
25761
25762@unnumberedsec Preparación para usar los binarios del lanzamiento inicial
25763
25764@c As of Emacs 24.3, Info-mode displays the image, but since it's a
25765@c large image, it's hard to scroll. Oh well.
25766@image{images/bootstrap-graph,6in,,Grafo de dependencias de las derivaciones
25767del lanzamiento inicial temprano}
25768
25769La figura previa muestra el auténtico inicio del grafo de dependencias de la
25770distribución, correspondiente a las definiciones de paquete del módulo
25771@code{(gnu packages bootstrap)}. Un gráfico similar puede generarse con
25772@command{guix graph} (@pxref{Invocación de guix graph}), más o menos así:
25773
25774@example
25775guix graph -t derivation \
25776 -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \
25777 | dot -Tps > t.ps
25778@end example
25779
25780En este nivel de detalle, las cosas son ligeramente complejas. Primero,
25781Guile en sí consiste en un ejecutable ELF, junto a muchas fuentes y ficheros
25782compilados Scheme que se cargan dinámicamente durante la ejecución. Esto se
25783almacena en el archivador tar @file{guile-2.0.7.tar.xz} mostrado en este
25784grafo. Este archivador es parte de la distribución de ``fuentes'' de Guix, y
25785se inserta en el almacén con @code{add-to-store} (@pxref{El almacén}).
25786
25787¿Pero cómo escribimos una derivación que extraiga este archivador y lo añada
25788al almacén? Para resolver este problema, la derivación
25789@code{guile-bootstrap-2.0.drv}---la primera en construirse---usa @code{bash}
25790como su constructor, que ejecuta @code{build-bootstrap-guile.sh}, que a su
25791vez llama a @code{tar} para extraer el archivador. Por tanto, @file{bash},
25792@file{tar}, @file{xz} y @file{mkdir} son binarios enlazados estáticamente,
25793también parte de la distribución de fuentes de Guix, cuyo único propósito es
25794permitir la extracción del archivador de Guile.
25795
25796Una vez que@code{guile-bootstrap-2.0.drv} se ha construido, tenemos un Guile
25797funcional que se puede usar para ejecutar los programas de construcción
25798siguientes. Su primera tarea es descargar los archivadores qu contienen los
25799otros binarios preconstruidos---esto es lo que las derivaciones
25800@code{.tar.xz.drv} hacen. Módulos Guix como @code{ftp-client.scm} se usan
25801para este propósito. Las derivaciones @code{module-import.drv} importan esos
25802módulos en un directorio del almacén, manteniendo la distribución de
25803carpetas. Las derivaciones @code{module-import-compiled.drv} compilan esos
25804módulos, y los escriben en un directorio con la distribución de carpetas
25805correcta. Esto corresponde al parámetro @code{#:modules} de
25806@code{build-expression->derivation} (@pxref{Derivaciones}).
25807
25808Finalmente, los archivadores tar son extraídos por las derivaciones
25809@code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etcétera, hasta el
25810punto en el que disponemos de una cadena de herramientas C funcional.
25811
25812
25813@unnumberedsec Construcción de las herramientas de construcción
25814
25815El lanzamiento inicial está completo cuando tenemos una cadena de
25816herramientas completa que no depende en las herramientas preconstruidas del
25817lanzamiento inicial descritas previamente. Este requisito de no-dependencia
25818se verifica comprobando si los ficheros de la cadena de herramientas final
25819contienen referencias a directorios de @file{/gnu/store} de las entradas del
25820lanzamiento. El proceso que lleva a esta cadena de herramientas ``final'' es
25821descrito por las definiciones de paquetes encontradas en el módulo
25822@code{(gnu packages commencement)}.
25823
25824La orden @command{guix graph} nos permite ``distanciarnos'' en comparación
25825con el grafo previo, mirando al nivel de objetos de paquetes en vez de
25826derivaciones individuales---recuerde que un paquete puede traducirse en
25827varias derivaciones, típicamente una derivación para descargar sus fuentes,
25828una para construir los módulos Guile que necesita y uno para realmente
25829construir el paquete de las fuentes. La orden:
25830
25831@example
25832guix graph -t bag \
25833 -e '(@@@@ (gnu packages commencement)
25834 glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps
25835@end example
25836
25837@noindent
25838produce el grafo de dependencias que lleva a la biblioteca C
25839``final''@footnote{Puede haberse dado cuenta de la etiqueta
25840@code{glibc-intermediate}, sugiriendo que no es @emph{completamente} final,
25841pero como es una buena aproximación, la consideraremos final}, mostrado a
25842continuación.
25843
25844@image{images/bootstrap-packages,6in,,Grafo de dependencias de los primeros
25845paquetes}
25846
25847@c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>.
25848La primera herramienta que se construye con los binarios del lanzamiento
25849inicial es GNU@tie{}Make---marcado como @code{make-boot0} en el grafo---,
25850que es un pre-requisito para todos los paquetes siguientes. Una vez hecho se
25851construyen Findutils y Diffutils.
25852
25853Después viene la primera fase de Binutils y GCC, construidas como
25854herramientas pseudo-cruzadas---es decir, con @code{--target} igual a
25855@code{--host}. Se usan para construir libc. Gracias a este truco de
25856compilación cruzada, se garantiza que esta libc no tendrá ninguna referencia
25857a la cadena de herramientas inicial.
25858
25859Posteriormente se construyen las herramientas Binutils y GCC (no mostradas
25860previamente) finales, y enlazan los programas contra la libc recién
25861construía. Esta cadena de herramientas se usa para construir otros paquetes
25862usados por Guix y el sistema de construcción GNU: Guile, Bash, Coreutils,
25863etc.
25864
25865¡Y voilà! En este punto tenemos un conjunto completo de herramientas de
25866construcción esperadas por el sistema de construcción GNU. Están en la
25867variable @code{%final-inputs} del módulo @code{(gnu packages commencement)},
25868y se usan implícitamente por cualquier paquete que use
25869@code{gnu-build-system} (@pxref{Sistemas de construcción, @code{gnu-build-system}}).
25870
25871
25872@unnumberedsec Construir los binarios de lanzamiento
25873
25874@cindex binarios del lanzamiento inicial
25875Debido a que la cadena de herramientas final no depende de los binarios de
25876lanzamiento, estos rara vez necesitan ser actualizados. No obstante, es útil
25877tener una forma automatizada de producirlos en caso de que se dé una
25878actualización, y esto es lo que proporciona el módulo @code{(gnu packages
25879make-bootstrap)}.
25880
25881La siguiente orden construye los archivadores que contienen los binarios de
25882lanzamiento (Guile, Binutils, GCC, libc, y un archivador que contiene una
25883mezcla de Coreutils y otras herramientas básicas de línea de órdenes):
25884
25885@example
25886guix build bootstrap-tarballs
25887@end example
25888
25889Los archivadores generados son aquellos que son referenciados en el módulo
25890@code{(gnu packages bootstrap)} mencionado al inicio de esta sección.
25891
25892¿Todavía aquí? Entonces quizá se habrá empezado a preguntar: ¿cuándo
25893llegamos a un punto fijo? ¡Esa es una pregunta interesante! La respuesta es
25894desconocida, pero si pudiese investigar más a fondo (y tiene unos recursos
25895computacionales y de almacenamiento significativos para hacerlo) háganoslo
25896saber.
25897
25898@unnumberedsec Reducción del conjunto de binarios de lanzamiento
25899
25900Nuestros binarios de lanzamiento actualmente incluyen GCC, Guile, etc. ¡Eso
25901es un montón de código binario! ¿Por qué es eso un problema? Es un problema
25902porque esos chorros de código binario no son auditables en la práctica, lo
25903que hace difícil establecer qué código fuente los produjo. Cada binario
25904no-auditable también nos deja vulnerables a puertas traseras en los
25905compiladores, como describió Ken Thompson en su publicación de 1984
25906@emph{Reflections on Trusting Trust}.
25907
25908Esto se mitiga por el hecho de que nuestros binarios de lanzamiento fueron
25909generados por una revisión anterior de Guix. No obstante, esto no posee el
25910nivel de transparencia que obtenemos en el resto del grado de dependencias
25911de los paquetes, donde Guix siempre nos da una asociación de
25912fuente-a-binario. Por lo tanto, nuestro objetivo es reducir el conjunto de
25913binarios de lanzamiento al mínimo posible.
25914
25915El @uref{http://bootstrappable.org, sitio web Bootstrappable.org} enumera
25916proyectos en activo realizándolo. Uno de ellos está a punto de sustituir el
25917GCC de lanzamiento con una secuencia de ensambladores, interpretes y
25918compiladores de complejidad incremental, que pueden ser construidos desde
25919las fuentes empezando con un código ensamblador simple y auditable. ¡Su
25920ayuda es bienvenida!
25921
25922
25923@node Transportar
25924@chapter Transportar a una nueva plataforma
25925
25926Como se explicó previamente, la distribución GNU es autocontenida, lo cual
25927se consigue dependiendo de unos ``binarios del lanzamiento inicial''
25928preconstruidos (@pxref{Lanzamiento inicial}). Estos binarios son específicos para
25929un núcleo del sistema operativo, arquitectura de la CPU e interfaz binaria
25930de aplicaciones (ABI). Por tanto, para transportar la distribución a una
25931nueva plataforma que no está soportada todavía, se deben construir estos
25932binarios del lanzamiento inicial, y actualizar el módulo @code{(gnu packages
25933bootstrap)} para usarlos en dicha plataforma.
25934
25935Por suerte, Guix puede @emph{compilar de forma cruzada} esos binarios del
25936lanzamiento inicial. Cuando todo va bien, y asumiendo que la cadena de
25937herramientas GNU soporta para la plataforma deseada, esto puede ser tan
25938simple como ejecutar una orden así:
25939
25940@example
25941guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs
25942@end example
25943
25944Para que esto funcione, el procedimiento @code{glibc-dynamic-linker} en
25945@code{(gnu packages bootstrap)} debe aumentarse para devolver el nombre de
25946fichero correcto para el enlazador dinámico de libc en dicha plataforma; de
25947igual manera, @code{system->linux-architecture} en @code{(gnu packages
25948linux)} debe modificarse para la nueva plataforma.
25949
25950Una vez construidos, el módulo @code{(gnu packages bootstrap)} debe ser
25951actualizado para hacer referencia a estos binarios en la plataforma
25952deseada. Esto es, los hash y las URL de los archivadores del lanzamiento
25953inicial de la nueva plataforma deben añadirse junto a aquellos de las
25954plataformas disponibles actualmente. El archivador tar del Guile usado para
25955el lanzamiento inicial se trata de forma especial: se espera que esté
25956disponible localmente, y @file{gnu/local.mk} tiene reglas que lo descargan
25957para las arquitecturas disponibles; se debe añadir una regla para la nueva
25958plataforma también.
25959
25960En la práctica puede haber algunas complicaciones. Primero, puede ser que la
25961tripleta extendida GNU que especifica un ABI (como el sufijo @code{eabi}
25962previamente) no es reconocida por todas las herramientas GNU. Típicamente,
25963glibc reconoce algunas de ellas, mientras que GCC usa una opción de
25964configuración extra @code{--with-abi} (vea @code{gcc.scm} para ejemplos de
25965como manejar este caso). En segundo lugar, algunos de los paquetes
25966necesarios pueden fallar en su construcción para dicha plataforma. Por
25967último, los binarios generados pueden estar defectuosos por alguna razón.
25968
25969@c *********************************************************************
25970@include contributing.es.texi
25971
25972@c *********************************************************************
25973@node Reconocimientos
25974@chapter Reconocimientos
25975
25976Guix está basado en el @uref{http://nixops.org/nix, gestor de paquetes Nix},
25977que fue diseñado e implementado por Eelco Dolstra, con contribuciones de
25978otra gente (véase el fichero @file{nix/AUTHORS} en Guix). Nix fue pionero en
25979la gestión de paquetes funcional, y promovió características sin
25980precedentes, como las actualizaciones de paquetes transaccionales y vuelta
25981atrás, perfiles por usuaria y un proceso de compilación referencialmente
25982transparente. Sin este trabajo, Guix no existiría.
25983
25984Las distribuciones de software basadas en Nix, Nixpkgs y NixOS, también han
25985sido una inspiración para Guix.
25986
25987GNU@tie{}Guix en sí es un trabajo colectivo con contribuciones de un número
25988de gente. Mire el fichero @file{AUTHORS} en Guix para más información sobre
25989esa gente maja. El fichero @file{THANKS} enumera personas que han ayudado
25990informando de errores, haciendose cargo de la infraestructura,
25991proporcionando arte y temas, haciendo sugerencias, y más---¡gracias!
25992
25993
25994@c *********************************************************************
25995@node Licencia de documentación libre GNU
25996@appendix Licencia de documentación libre GNU
25997@cindex licencia, GNU Free Documentation License
25998@include fdl-1.3.texi
25999
26000@c *********************************************************************
26001@node Índice de conceptos
26002@unnumbered Índice de conceptos
26003@printindex cp
26004
26005@node Índice programático
26006@unnumbered Índice programático
26007@syncodeindex tp fn
26008@syncodeindex vr fn
26009@printindex fn
26010
26011@bye
26012
26013@c Local Variables:
26014@c ispell-local-dictionary: "american";
26015@c End: