diff options
| author | Ludovic Courtès <ludo@gnu.org> | 2019-04-24 00:05:34 +0200 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2019-04-24 00:05:34 +0200 |
| commit | 3b919e0199495334ea475e02442c33e1e7c8466d (patch) | |
| tree | 7c4547c671842b6b3c6a877ad578cd34993f63e9 /doc | |
| parent | 6227e1b7477b71f31ea3bf8a74c32fe7238dcece (diff) | |
doc: Add generated es.texi files.
* doc/guix.es.texi, doc/contributing.es.texi: New files.
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/contributing.es.texi | 1016 | ||||
| -rw-r--r-- | doc/guix.es.texi | 26015 |
2 files changed, 27031 insertions, 0 deletions
diff --git a/doc/contributing.es.texi b/doc/contributing.es.texi new file mode 100644 index 00000000000..05299173b69 --- /dev/null +++ b/doc/contributing.es.texi | |||
| @@ -0,0 +1,1016 @@ | |||
| 1 | @node Contribuir | ||
| 2 | @chapter Contribuir | ||
| 3 | |||
| 4 | Este proyecto es un esfuerzo colaborativo, y ¡necesitamos su ayuda para que | ||
| 5 | crezca! Por favor, contacte con nosotras en @email{guix-devel@@gnu.org} y en | ||
| 6 | @code{#guix} en la red IRC Freenode. Estamos abiertas a ideas, informes de | ||
| 7 | errores, parches y cualquier cosa que pueda ser de ayuda para el | ||
| 8 | proyecto. Especialmente se agradece ayuda en empaquetamiento | ||
| 9 | (@pxref{Guías de empaquetamiento}). | ||
| 10 | |||
| 11 | @cindex código de conducta, de contribuidoras | ||
| 12 | @cindex acuerdo de contribución | ||
| 13 | Queremos proporcionar un entorno cálido, amistoso y libre de acoso, para que | ||
| 14 | cualquiera pueda contribuir al máximo de sus capacidades. Para este fin | ||
| 15 | nuestro proyecto usa un ``Acuerdo de Contribución'', que fue adaptado de | ||
| 16 | @url{http://contributor-coventant.org}. Se puede encontrar una versión local | ||
| 17 | en el fichero @file{CODE-OF-CONDUCT} del árbol de fuentes. | ||
| 18 | |||
| 19 | Las contribuidoras no están obligadas a usar su nombre legal en los parches | ||
| 20 | ni en la comunicación on-line; pueden usar cualquier nombre o seudónimo de | ||
| 21 | su elección. | ||
| 22 | |||
| 23 | @menu | ||
| 24 | * Construcción desde Git:: Lo último y mejor. | ||
| 25 | * Ejecución de Guix antes de estar instalado:: Trucos de hacker. | ||
| 26 | * La configuración perfecta:: Las herramientas adecuadas. | ||
| 27 | * Guías de empaquetamiento:: Crecimiento de la distribución. | ||
| 28 | * Estilo de codificación:: Higiene de la contribuidora. | ||
| 29 | * Envío de parches:: Comparta su trabajo. | ||
| 30 | @end menu | ||
| 31 | |||
| 32 | @node Construcción desde Git | ||
| 33 | @section Construcción desde Git | ||
| 34 | |||
| 35 | Si quiere picar en el mismo Guix se recomienda usar la última versión del | ||
| 36 | repositorio Git: | ||
| 37 | |||
| 38 | @example | ||
| 39 | git clone https://git.savannah.gnu.org/git/guix.git | ||
| 40 | @end example | ||
| 41 | |||
| 42 | Cuando se compila Guix de una copia de trabajo local (checkout), se | ||
| 43 | requieren los siguientes paquetes, además de los mencionados en las | ||
| 44 | instrucciones de instalación (@pxref{Requisitos}). | ||
| 45 | |||
| 46 | @itemize | ||
| 47 | @item @url{http://gnu.org/software/autoconf/, GNU Autoconf}; | ||
| 48 | @item @url{http://gnu.org/software/automake/, GNU Automake}; | ||
| 49 | @item @url{http://gnu.org/software/gettext/, GNU Gettext}; | ||
| 50 | @item @url{http://gnu.org/software/texinfo/, GNU Texinfo}; | ||
| 51 | @item @url{http://www.graphviz.org/, Graphviz}; | ||
| 52 | @item @url{http://www.gnu.org/software/help2man/, GNU Help2man (opcional)}. | ||
| 53 | @end itemize | ||
| 54 | |||
| 55 | El modo más fácil de preparar un entorno de desarrollo para Guix es, por | ||
| 56 | supuesto, ¡usando Guix! Las siguientes órdenes inician un nuevo intérprete | ||
| 57 | donde todas las dependencias y las variables de entorno apropiadas están | ||
| 58 | listas para picar código en Guix: | ||
| 59 | |||
| 60 | @example | ||
| 61 | guix environment guix | ||
| 62 | @end example | ||
| 63 | |||
| 64 | @xref{Invocación de guix environment}, para más información sobre esa orden. Se | ||
| 65 | pueden añadir dependencias adicionales con la opción @option{--ad-hoc}: | ||
| 66 | |||
| 67 | @example | ||
| 68 | guix environment guix --ad-hoc help2man git strace | ||
| 69 | @end example | ||
| 70 | |||
| 71 | Ejecute @command{./bootstrap} para generar la infraestructura del sistema de | ||
| 72 | construcción usando Autoconf y Automake. Si obtiene un error como este: | ||
| 73 | |||
| 74 | @example | ||
| 75 | configure.ac:46: error: possibly undefined macro: PKG_CHECK_MODULES | ||
| 76 | @end example | ||
| 77 | |||
| 78 | @noindent | ||
| 79 | probablemente significa que Autoconf no pudo encontrar el fichero pkg.m4, | ||
| 80 | que proporciona pkg-config. Asegurese de que @file{pkg.m4} está | ||
| 81 | disponible. Lo mismo aplica para el conjunto de macros @file{guile.m4} que | ||
| 82 | proporciona Guile. Por ejemplo, si ha instalado Automake en | ||
| 83 | @file{/usr/local}, no va a buscar ficheros @file{.m4} en | ||
| 84 | @file{/usr/share}. En ese caso tiene que ejecutar la siguiente orden: | ||
| 85 | |||
| 86 | @example | ||
| 87 | export ACLOCAL_PATH=/usr/share/aclocal | ||
| 88 | @end example | ||
| 89 | |||
| 90 | @xref{Macro Search Path,,, automake, The GNU Automake Manual} para más | ||
| 91 | información. | ||
| 92 | |||
| 93 | Entonces, ejecute @command{./configure} como siempre. Asegurese de pasar | ||
| 94 | @code{--localstatedir=@var{directorio}}, donde @var{directorio} es el valor | ||
| 95 | de @code{localstatedir} usado por su instalación actual (@pxref{El almacén}, | ||
| 96 | para información sobre esto). | ||
| 97 | |||
| 98 | Finalmente, tiene que ejecutar @code{make check} para iniciar las pruebas | ||
| 99 | (@pxref{Ejecución de la batería de pruebas}). Si algo falla, eche un vistazo a las | ||
| 100 | instrucciones de instalación (@pxref{Instalación}) o envíe un mensaje---en | ||
| 101 | Inglés---a la @email{guix-devel@@gnu.org, lista de correo}. | ||
| 102 | |||
| 103 | |||
| 104 | @node Ejecución de Guix antes de estar instalado | ||
| 105 | @section Ejecución de Guix antes de estar instalado | ||
| 106 | |||
| 107 | Para mantener un entorno de trabajo estable, encontrará útil probar los | ||
| 108 | cambios hechos en su copia de trabajo local sin instalarlos realmente. De | ||
| 109 | esa manera, puede distinguir entre su sombrero de ``usuaria final'' y el | ||
| 110 | traje de ``harapos''. | ||
| 111 | |||
| 112 | Para dicho fin, todas las herramientas de línea de órdenes pueden ser usadas | ||
| 113 | incluso si no ha ejecutado @code{make install}. Para hacerlo, primero | ||
| 114 | necesita tener un entorno con todas las dependencias disponibles | ||
| 115 | (@pxref{Construcción desde Git}), y entonces añada al inicio de cada orden | ||
| 116 | @command{./pre-inst-env} (el guión @file{pre-inst-env} se encuentra en la | ||
| 117 | raíz del árbol de compilación de Guix, como en@footnote{La opción | ||
| 118 | @option{-E} a @command{sudo} asegura que @code{GUILE_LOAD_PATH} contiene la | ||
| 119 | información correcta para que @command{guix-daemon} y las herramientas que | ||
| 120 | usa puedan encontrar los módulos Guile que necesitan.}: | ||
| 121 | |||
| 122 | @example | ||
| 123 | $ sudo -E ./pre-inst-env guix-daemon --build-users-group=guixbuild | ||
| 124 | $ ./pre-inst-env guix build hello | ||
| 125 | @end example | ||
| 126 | |||
| 127 | @noindent | ||
| 128 | De manera similar, para una sesión de Guile que use los módulos Guix: | ||
| 129 | |||
| 130 | @example | ||
| 131 | $ ./pre-inst-env guile -c '(use-modules (guix utils)) (pk (%current-system))' | ||
| 132 | |||
| 133 | ;;; ("x86_64-linux") | ||
| 134 | @end example | ||
| 135 | |||
| 136 | @noindent | ||
| 137 | @cindex REPL | ||
| 138 | @cindex entorno interactivo | ||
| 139 | @dots{} y para un entorno interactivo (REPL) (@pxref{Using Guile | ||
| 140 | Interactively,,, guile, Guile Reference Manual}): | ||
| 141 | |||
| 142 | @example | ||
| 143 | $ ./pre-inst-env guile | ||
| 144 | scheme@@(guile-user)> ,use(guix) | ||
| 145 | scheme@@(guile-user)> ,use(gnu) | ||
| 146 | scheme@@(guile-user)> (define serpientes | ||
| 147 | (fold-packages | ||
| 148 | (lambda (paquete lst) | ||
| 149 | (if (string-prefix? "python" | ||
| 150 | (package-name paquete)) | ||
| 151 | (cons paquete lst) | ||
| 152 | lst)) | ||
| 153 | '())) | ||
| 154 | scheme@@(guile-user)> (length serpientes) | ||
| 155 | $1 = 361 | ||
| 156 | @end example | ||
| 157 | |||
| 158 | El guión @command{pre-inst-env} fija todas las variables de entorno | ||
| 159 | necesarias para permitir esto, incluyendo @env{PATH} y | ||
| 160 | @env{GUILE_LOAD_PATH}. | ||
| 161 | |||
| 162 | Fíjese que la orden @command{./pre-inst-env guix pull} @emph{no} actualiza | ||
| 163 | el árbol de fuentes local; simplemente actualiza el enlace | ||
| 164 | @file{~/.config/guix/latest} (@pxref{Invocación de guix pull}). Ejecute | ||
| 165 | @command{git pull} si quiere actualizar su árbol de fuentes local. | ||
| 166 | |||
| 167 | |||
| 168 | @node La configuración perfecta | ||
| 169 | @section La configuración perfecta | ||
| 170 | |||
| 171 | La configuración perfecta para hackear en Guix es básicamente la | ||
| 172 | configuración perfecta para hacerlo en Guile (@pxref{Using Guile in Emacs,,, | ||
| 173 | guile, Guile Reference Manual}). Primero, necesita más que un editor, | ||
| 174 | necesita @url{http://www.gnu.org/software/emacs, Emacs}, empoderado por el | ||
| 175 | maravilloso @url{http://nongnu.org/geiser, Geiser}. Para configurarlo, | ||
| 176 | ejecute: | ||
| 177 | |||
| 178 | @example | ||
| 179 | guix package -i emacs guile emacs-geiser | ||
| 180 | @end example | ||
| 181 | |||
| 182 | Geiser permite desarrollo incremental e interactivo dentro de Emacs: | ||
| 183 | compilación y evaluación de código dentro de los buffers, acceso a | ||
| 184 | documentación en línea (docstrings), completado dependiente del contexto, | ||
| 185 | @kbd{M-.} para saltar a la definición de un objeto, una consola interactiva | ||
| 186 | (REPL) para probar su código, y más (@pxref{Introducción,,, geiser, Geiser | ||
| 187 | User Manual}). Para desarrollar Guix adecuadamente, asegúrese de aumentar la | ||
| 188 | ruta de carga de Guile (load-path) para que encuentre los ficheros fuente de | ||
| 189 | su copia de trabajo: | ||
| 190 | |||
| 191 | @lisp | ||
| 192 | ;; @r{Suponiendo que la copia de trabajo de Guix está en ~/src/guix.} | ||
| 193 | (with-eval-after-load 'geiser-guile | ||
| 194 | (add-to-list 'geiser-guile-load-path "~/src/guix")) | ||
| 195 | @end lisp | ||
| 196 | |||
| 197 | Para realmente editar el código, Emacs tiene un modo limpio para | ||
| 198 | Scheme. Pero además de eso, no debe perderse | ||
| 199 | @url{http://www.emacswiki.org/emacs/ParEdit, Paredit}. Provee de facilidades | ||
| 200 | para operar directamente en el árbol sintáctico como elevar una expresión S | ||
| 201 | o recubrirla, embeber o expulsar la siguiente expresión S, etc. | ||
| 202 | |||
| 203 | @cindex fragmentos de código | ||
| 204 | @cindex plantillas | ||
| 205 | @cindex reducir la verborrea | ||
| 206 | También proporcionamos plantillas para los mensajes de revisión de git | ||
| 207 | comunes y definiciones de paquetes en el directorio | ||
| 208 | @file{etc/snippets}. Estas plantillas pueden ser usadas con | ||
| 209 | @url{http://joaotavora.github.io/yasnippet, YASnippet} para expandir | ||
| 210 | mnemotécnicos a fragmentos interactivos de texto. Puedes querer añadir el | ||
| 211 | directorio de fragmentos a la variable @var{yas-snippet-dirs} en Emacs. | ||
| 212 | |||
| 213 | @lisp | ||
| 214 | ;; @r{Suponiendo que la copia de trabajo de Guix está en ~/src/guix.} | ||
| 215 | (with-eval-after-load 'yasnippet | ||
| 216 | (add-to-list 'yas-snippet-dirs "~/src/guix/etc/snippets")) | ||
| 217 | @end lisp | ||
| 218 | |||
| 219 | Los fragmentos de mensajes de la revisión dependen de | ||
| 220 | @url{https://magit.vc/, Magit} para mostrar los ficheros preparados. En la | ||
| 221 | edición del mensaje de la revisión teclee @code{add} seguido de @kbd{TAB} | ||
| 222 | (el tabulador) para insertar la plantilla del mensaje de la revisión de | ||
| 223 | adición de un paquete; teclee @code{update} seguido de @kbd{TAB} para | ||
| 224 | insertar una plantilla de actualización de un paquete; teclee @code{https} | ||
| 225 | seguido de @kbd{TAB} para insertar una plantilla para cambiar la URI de la | ||
| 226 | página de un paquete a HTTPS. | ||
| 227 | |||
| 228 | El fragmento principal para @code{scheme-mode} es activado al teclear | ||
| 229 | @code{package...} seguido de @kbd{TAB}. Este fragmento también inserta el | ||
| 230 | lanzador @code{origin...} que puede ser expandido de nuevo. El fragmento | ||
| 231 | @code{origin} puede a su vez insertar otros identificadores de lanzado | ||
| 232 | terminando en @code{...}, que pueden ser expandidos de nuevo. | ||
| 233 | |||
| 234 | |||
| 235 | @node Guías de empaquetamiento | ||
| 236 | @section Guías de empaquetamiento | ||
| 237 | |||
| 238 | @cindex paquetes, creación | ||
| 239 | La distribución GNU es reciente y puede no disponer de alguno de sus | ||
| 240 | paquetes favoritos. Esta sección describe cómo puede ayudar a hacer crecer | ||
| 241 | la distribución. | ||
| 242 | |||
| 243 | Los paquetes de software libre habitualmente se distribuyen en forma de | ||
| 244 | @dfn{archivadores de código fuente}---típicamente ficheros @file{tar.gz} que | ||
| 245 | contienen todos los ficheros fuente. Añadir un paquete a la distribución | ||
| 246 | significa esencialmente dos cosas: añadir una @dfn{receta} que describe cómo | ||
| 247 | construir el paquete, la que incluye una lista de otros paquetes necesarios | ||
| 248 | para la construcción, y añadir @dfn{metadatos del paquete} junto a dicha | ||
| 249 | receta, como la descripción y la información de licencias. | ||
| 250 | |||
| 251 | En Guix toda esta información está contenida en @dfn{definiciones de | ||
| 252 | paquete}. Las definiciones de paquete proporcionan una vista de alto nivel | ||
| 253 | del paquete. Son escritas usando la sintaxis del lenguaje de programación | ||
| 254 | Scheme; de hecho, definimos una variable por cada paquete enlazada a su | ||
| 255 | definición y exportamos esa variable desde un módulo (@pxref{Módulos de paquetes}). No obstante, un conocimiento profundo de Scheme @emph{no} es un | ||
| 256 | pre-requisito para la creación de paquetes. Para más información obre las | ||
| 257 | definiciones de paquetes, @pxref{Definición de paquetes}. | ||
| 258 | |||
| 259 | Una vez que una definición de paquete está en su lugar, almacenada en un | ||
| 260 | fichero del árbol de fuentes de Guix, puede probarse usando la orden | ||
| 261 | @command{guix build} (@pxref{Invocación de guix build}). Por ejemplo, asumiendo | ||
| 262 | que el nuevo paquete se llama @code{gnuevo}, puede ejecutar esta orden desde | ||
| 263 | el árbol de construcción de Guix (@pxref{Ejecución de Guix antes de estar instalado}): | ||
| 264 | |||
| 265 | @example | ||
| 266 | ./pre-inst-env guix build gnuevo --keep-failed | ||
| 267 | @end example | ||
| 268 | |||
| 269 | El uso de @code{--keep-failed} facilita la depuración de errores de | ||
| 270 | construcción ya que proporciona acceso al árbol de la construcción | ||
| 271 | fallida. Otra opción útil de línea de órdenes para la depuración es | ||
| 272 | @code{--log-file}, para acceder al log de construcción. | ||
| 273 | |||
| 274 | Si el paquete resulta desconocido para la orden @command{guix}, puede ser | ||
| 275 | que el fichero fuente contenga un error de sintaxis, o no tenga una cláusula | ||
| 276 | @code{define-public} para exportar la variable del paquete. Para encontrar | ||
| 277 | el problema puede cargar el módulo desde Guile para obtener más información | ||
| 278 | sobre el error real: | ||
| 279 | |||
| 280 | @example | ||
| 281 | ./pre-inst-env guile -c '(use-modules (gnu packages gnuevo))' | ||
| 282 | @end example | ||
| 283 | |||
| 284 | Una vez que se construya correctamente su paquete, por favor, envíenos un | ||
| 285 | parche (@pxref{Envío de parches}). En cualquier caso, si necesita ayuda | ||
| 286 | también estaremos felices de ayudarle. Una vez el parche se haya incorporado | ||
| 287 | al repositorio de Guix, el nuevo paquete se construye automáticamente en las | ||
| 288 | plataformas disponibles por @url{http://hydra.gnu.org/jobset/gnu/master, | ||
| 289 | nuestro sistema de integración continua}. | ||
| 290 | |||
| 291 | @cindex servidor de sustituciones | ||
| 292 | Las usuarias pueden obtener la nueva definición de paquete ejecutando | ||
| 293 | simplemente @command{guix pull} (@pxref{Invocación de guix pull}). Cuando | ||
| 294 | @code{@value{SUBSTITUTE-SERVER}} ha terminado de construir el paquete, la | ||
| 295 | instalación del paquete descarga automáticamente los binarios desde allí | ||
| 296 | (@pxref{Sustituciones}). El único lugar donde la intervención humana es | ||
| 297 | necesaria es en la revisión y aplicación del parche. | ||
| 298 | |||
| 299 | |||
| 300 | @menu | ||
| 301 | * Libertad del software:: Qué puede entrar en la distribución. | ||
| 302 | * Nombrado de paquetes:: ¿Qué hay en un nombre? | ||
| 303 | * Versiones numéricas:: Cuando el nombre no es suficiente. | ||
| 304 | * Sinopsis y descripciones:: Ayudar a las usuarias a encontrar el paquete | ||
| 305 | adecuado. | ||
| 306 | * Módulos Python:: Un toque de comedia británica. | ||
| 307 | * Módulos Perl:: Pequeñas perlas. | ||
| 308 | * Paquetes Java:: La parada del café. | ||
| 309 | * Tipografías:: Amor por las letras. | ||
| 310 | @end menu | ||
| 311 | |||
| 312 | @node Libertad del software | ||
| 313 | @subsection Libertad del software | ||
| 314 | |||
| 315 | @c =========================================================================== | ||
| 316 | @c | ||
| 317 | @c This file was generated with po4a. Translate the source file. | ||
| 318 | @c | ||
| 319 | @c =========================================================================== | ||
| 320 | @c Adapted from http://www.gnu.org/philosophy/philosophy.html. | ||
| 321 | @cindex software libre | ||
| 322 | El sistema operativo GNU se ha desarrollado para que las usuarias puedan | ||
| 323 | ejercitar su libertad de computación. GNU es @dfn{software libre}, lo que | ||
| 324 | significa ue las usuarias tienen las | ||
| 325 | @url{http://www.gnu.org/philosophy/free-sw.html,cuatro libertades | ||
| 326 | esenciales}: para ejecutar el programa, para estudiar y modificar el | ||
| 327 | programa en la forma de código fuente, para redistribuir copias exactas y | ||
| 328 | para distribuir versiones modificadas. Los paquetes encontrados en la | ||
| 329 | distribución GNU proporcionan únicamente software que permite estas cuatro | ||
| 330 | libertades. | ||
| 331 | |||
| 332 | Además, la distribución GNU sigue las | ||
| 333 | @url{http://www.gnu.org/distros/free-system-distribution-guidelines.html,directrices | ||
| 334 | de distribución de software libre}. Entre otras cosas, estas directrices | ||
| 335 | rechazan firmware no-libre, recomendaciones de software no-libre y el | ||
| 336 | tratamiento de formas de tratar con marcas registradas y patentes. | ||
| 337 | |||
| 338 | Algunos paquetes originales, que serían de otra manera software libre, | ||
| 339 | contienen un subconjunto pequeño y opcional que viola estas directrices, por | ||
| 340 | ejemplo debido a que ese subconjunto sea en sí código no-libre. Cuando esto | ||
| 341 | sucede, las partes indeseadas son eliminadas con parches o fragmentos de | ||
| 342 | código en la forma @code{origin} del paquete (@pxref{Definición de paquetes}). De | ||
| 343 | este modo, @code{guix build --source} devuelve las fuentes ``liberadas'' en | ||
| 344 | vez de la versión original de las fuentes. | ||
| 345 | |||
| 346 | |||
| 347 | @node Nombrado de paquetes | ||
| 348 | @subsection Nombrado de paquetes | ||
| 349 | |||
| 350 | @cindex nombre de paquete | ||
| 351 | Un paquete tiene realmente dos nombres asociados con él: Primero, el nombre | ||
| 352 | de la @emph{variable Scheme} asociada, que aparece después de | ||
| 353 | @code{define-public}. A través de este nombre, el paquete está disponible en | ||
| 354 | código Scheme, por ejemplo como entrada de otro paquete. Segundo, la cadena | ||
| 355 | en el campo @code{name} de la definición de paquete. Este nombre se usa por | ||
| 356 | las órdenes de gestión de paquetes como @command{guix package} y | ||
| 357 | @command{guix build}. | ||
| 358 | |||
| 359 | Ambos normalmente son iguales y corresponden a la conversión a minúsculas | ||
| 360 | del nombre de proyecto elegido por sus creadoras, con los guiones bajos | ||
| 361 | sustituidos por guiones. Por ejemplo, GNUnet está disponible como | ||
| 362 | @code{gnunet}, y SDL_net como @code{sdl-net}. | ||
| 363 | |||
| 364 | No añadimos prefijos @code{lib} para paquetes de bibliotecas, a menos que | ||
| 365 | sean parte del nombre oficial del proyecto. Pero vea @ref{Módulos Python} y | ||
| 366 | @ref{Módulos Perl} para reglas especiales que conciernen a los módulos de | ||
| 367 | los lenguajes Python y Perl. | ||
| 368 | |||
| 369 | Los nombres de paquetes de tipografías se manejan de forma diferente, | ||
| 370 | @pxref{Tipografías}. | ||
| 371 | |||
| 372 | |||
| 373 | @node Versiones numéricas | ||
| 374 | @subsection Versiones numéricas | ||
| 375 | |||
| 376 | @cindex versión de paquete | ||
| 377 | Normalmente empaquetamos únicamente la última versión de un proyecto dado de | ||
| 378 | software libre. Pero a veces, por ejemplo para versiones de bibliotecas | ||
| 379 | incompatibles, se necesitan dos (o más) versiones del mismo paquete. Estas | ||
| 380 | necesitan nombres diferentes para las variables Scheme. Usamos el nombre | ||
| 381 | como se define en @ref{Nombrado de paquetes} para la versión más reciente; las | ||
| 382 | versiones previas usan el mismo nombre, añadiendo un @code{-} y el prefijo | ||
| 383 | menor del número de versión que permite distinguir las dos versiones. | ||
| 384 | |||
| 385 | El nombre dentro de la definición de paquete es el mismo para todas las | ||
| 386 | versiones de un paquete y no contiene ningún número de versión. | ||
| 387 | |||
| 388 | Por ejemplo, las versiones 2.24.20 y 3.9.12 de GTK+ pueden empaquetarse como | ||
| 389 | sigue: | ||
| 390 | |||
| 391 | @example | ||
| 392 | (define-public gtk+ | ||
| 393 | (package | ||
| 394 | (name "gtk+") | ||
| 395 | (version "3.9.12") | ||
| 396 | ...)) | ||
| 397 | (define-public gtk+-2 | ||
| 398 | (package | ||
| 399 | (name "gtk+") | ||
| 400 | (version "2.24.20") | ||
| 401 | ...)) | ||
| 402 | @end example | ||
| 403 | Si también deseásemos GTK+3.8.2, se empaquetaría como | ||
| 404 | @example | ||
| 405 | (define-public gtk+-3.8 | ||
| 406 | (package | ||
| 407 | (name "gtk+") | ||
| 408 | (version "3.8.2") | ||
| 409 | ...)) | ||
| 410 | @end example | ||
| 411 | |||
| 412 | @c See <https://lists.gnu.org/archive/html/guix-devel/2016-01/msg00425.html>, | ||
| 413 | @c for a discussion of what follows. | ||
| 414 | @cindex número de versión, para revisiones de VCS | ||
| 415 | De manera ocasional, empaquetamos instantáneas del sistema de control de | ||
| 416 | versiones (VCS) de las desarrolladoras originales en vez de publicaciones | ||
| 417 | formales. Esto debería permanecer como algo excepcional, ya que son las | ||
| 418 | desarrolladoras originales quienes deben clarificar cual es la entrega | ||
| 419 | estable. No obstante, a veces es necesario. Por tanto, ¿qué deberíamos poner | ||
| 420 | en el campo @code{version}? | ||
| 421 | |||
| 422 | Claramente, tenemos que hacer visible el identificador de la revisión en el | ||
| 423 | VCS en la cadena de versión, pero tamién debemos asegurarnos que la cadena | ||
| 424 | de versión incrementa monotónicamente de manera que @command{guix package | ||
| 425 | --upgrade} pueda determinar qué versión es más moderna. Ya que los | ||
| 426 | identificadores de revisión, notablemente en Git, no incrementan | ||
| 427 | monotónicamente, añadimos un número de revisión que se incrementa cada vez | ||
| 428 | que actualizamos a una nueva instantánea. La versión que resulta debería ser | ||
| 429 | así: | ||
| 430 | |||
| 431 | @example | ||
| 432 | 2.0.11-3.cabba9e | ||
| 433 | ^ ^ ^ | ||
| 434 | | | `-- ID de revisión original | ||
| 435 | | | | ||
| 436 | | `--- revisión del paquete Guix | ||
| 437 | | | ||
| 438 | última versión de publicación | ||
| 439 | @end example | ||
| 440 | |||
| 441 | Es una buena idea recortar los identificadores de revisión en el campo | ||
| 442 | @code{version} a, digamos, 7 dígitos. Esto evita una molestia estética | ||
| 443 | (asumiendo que la estética tiene importancia aquí) así como problemas | ||
| 444 | relacionados con los límites del sistema operativo como la longitud máxima | ||
| 445 | de una cadena de ejecución #! (127 bytes en el núcleo Linux). Es mejor usar | ||
| 446 | el identificador de revisión completo en @code{origin}, no obstante, para | ||
| 447 | evitar ambigüedades. Una definición típica de paquete sería así: | ||
| 448 | |||
| 449 | @example | ||
| 450 | (define mi-paquete | ||
| 451 | (let ((commit "c3f29bc928d5900971f65965feaae59e1272a3f7") | ||
| 452 | (revision "1")) ;Revisión Guix del paquete | ||
| 453 | (package | ||
| 454 | (version (git-version "0.9" revision commit)) | ||
| 455 | (source (origin | ||
| 456 | (method git-fetch) | ||
| 457 | (uri (git-reference | ||
| 458 | (url "git://example.org/mi-paquete.git") | ||
| 459 | (commit commit))) | ||
| 460 | (sha256 (base32 "1mbikn@dots{}")) | ||
| 461 | (file-name (git-file-name name version)))) | ||
| 462 | ;; @dots{} | ||
| 463 | ))) | ||
| 464 | @end example | ||
| 465 | |||
| 466 | @node Sinopsis y descripciones | ||
| 467 | @subsection Sinopsis y descripciones | ||
| 468 | |||
| 469 | @cindex descripción de paquete | ||
| 470 | @cindex sinopsis de paquete | ||
| 471 | Como hemos visto previamente, cada paquete en GNU@tie{}Guix incluye una | ||
| 472 | sinopsis y una descripción (@pxref{Definición de paquetes}). Las sinopsis y | ||
| 473 | descripciones son importantes: son en lo que @command{guix package --search} | ||
| 474 | busca, y una pieza crucial de información para ayudar a las usuarias a | ||
| 475 | determinar si un paquete dado cubre sus necesidades. Consecuentemente, las | ||
| 476 | empaquetadoras deben prestar atención a qué se incluye en ellas. | ||
| 477 | |||
| 478 | Las sinopsis deben empezar con mayúscula y no deben terminar con punto. No | ||
| 479 | deben empezar con un artículo que habitualmente no aporta nada; por ejemplo, | ||
| 480 | se prefiere ``Herramienta para chiribizar'' sobre ``Una herramienta que | ||
| 481 | chiribiza ficheros''. La sinopsis debe decir qué es el paquete---por | ||
| 482 | ejemplo, ``Utilidades básicas GNU (ficheros, texto, shell)''---o para qué se | ||
| 483 | usa---por ejemplo, la sinopsis de GNU@tie{}grep es ``Imprime líneas que | ||
| 484 | aceptadas por un patrón''. | ||
| 485 | |||
| 486 | Tenga en cuenta que las sinopsis deben tener un claro significado para una | ||
| 487 | audiencia muy amplia. Por ejemplo, ``Manipula la alineación en el formato | ||
| 488 | SAM'' puede tener sentido para una investigadora de bioinformática con | ||
| 489 | experiencia, pero puede ser de poca ayuda o incluso llevar a confusión a una | ||
| 490 | audiencia no-especializada. Es una buena idea proporcionar una sinopsis que | ||
| 491 | da una idea del dominio de aplicación del paquete. En ese ejemplo, esto | ||
| 492 | podría ser algo como ``Manipula la alineación de secuencias de | ||
| 493 | nucleótidos'', lo que esperablemente proporciona a la usuaria una mejor idea | ||
| 494 | sobre si esto es lo que está buscando. | ||
| 495 | |||
| 496 | Las descripciones deben tener entre cinco y diez líneas. Use frases | ||
| 497 | completas, y evite usar acrónimos sin introducirlos previamente. Por favor | ||
| 498 | evite frases comerciales como ``líder mundial'', ``de potencia industrial'' | ||
| 499 | y ``siguiente generación'', y evite superlativos como ``el más | ||
| 500 | avanzado''---no son útiles para las usuarias que buscan un paquete e incluso | ||
| 501 | pueden sonar sospechosas. En vez de eso, intente ceñirse a los hechos, | ||
| 502 | mencionando casos de uso y características. | ||
| 503 | |||
| 504 | @cindex marcado Texinfo, en descripciones de paquetes | ||
| 505 | Las descripciones pueden incluir marcado Texinfo, lo que es útil para | ||
| 506 | introducir ornamentos como @code{@@code} o @code{@@dfn}, listas de puntos o | ||
| 507 | enlaces (@pxref{Overview,,, texinfo, GNU Texinfo}). Por consiguiente, debe | ||
| 508 | ser cuidadosa cuando use algunos caracteres, por ejemplo @samp{@@} y llaves, | ||
| 509 | que son los caracteres especiales básicos en Texinfo (@pxref{Special | ||
| 510 | Characters,,, texinfo, GNU Texinfo}). Las interfaces de usuaria como | ||
| 511 | @command{guix package --show} se encargan de su correcta visualización. | ||
| 512 | |||
| 513 | Las sinopsis y descripciones son traducidas por voluntarias | ||
| 514 | @uref{http://translationproject.org/domain/guix-packages.html, en | ||
| 515 | Translation Project} para que todas las usuarias posibles puedan leerlas en | ||
| 516 | su lengua nativa. Las interfaces de usuaria las buscan y las muestran en el | ||
| 517 | idioma especificado por la localización actual. | ||
| 518 | |||
| 519 | Para permitir a @command{xgettext} extraerlas como cadenas traducibles, las | ||
| 520 | sinopsis y descripciones @emph{deben ser cadenas literales}. Esto significa | ||
| 521 | que no puede usar @code{string-append} o @code{format} para construir estas | ||
| 522 | cadenas: | ||
| 523 | |||
| 524 | @lisp | ||
| 525 | (package | ||
| 526 | ;; @dots{} | ||
| 527 | (synopsis "Esto es traducible") | ||
| 528 | (description (string-append "Esto " "*no*" " es traducible."))) | ||
| 529 | @end lisp | ||
| 530 | |||
| 531 | La traducción requiere mucho trabajo, por lo que, como empaquetadora, le | ||
| 532 | rogamos que ponga incluso más atención a sus sinopsis y descripciones ya que | ||
| 533 | cada cambio puede suponer trabajo adicional para las traductoras. Para | ||
| 534 | ayudarlas, es posible hacer recomendaciones o instrucciones insertando | ||
| 535 | comentarios especiales como este (@pxref{xgettext Invocation,,, gettext, GNU | ||
| 536 | Gettext}): | ||
| 537 | |||
| 538 | @example | ||
| 539 | ;; TRANSLATORS: "X11 resize-and-rotate" should not be translated. | ||
| 540 | (description "ARandR is designed to provide a simple visual front end | ||
| 541 | for the X11 resize-and-rotate (RandR) extension. @dots{}") | ||
| 542 | @end example | ||
| 543 | |||
| 544 | |||
| 545 | @node Módulos Python | ||
| 546 | @subsection Módulos Python | ||
| 547 | |||
| 548 | @cindex python | ||
| 549 | Actualmente empaquetamos Python 2 y Python 3, bajo los nombres de variable | ||
| 550 | Scheme @code{python-2} y @code{python} como se explica en @ref{Versiones numéricas}. Para evitar confusiones y conflictos de nombres con otros | ||
| 551 | lenguajes de programación, parece deseable que el nombre de paquete para un | ||
| 552 | módulo Python contenga la palabra @code{python}. | ||
| 553 | |||
| 554 | Algunos módulos son compatibles únicamente con una versión de Python, otros | ||
| 555 | con ambas. Si el paquete Foo compila sólo con Python 3, lo llamamos | ||
| 556 | @code{python-foo}; si compila sólo con Python 2, lo llamamos | ||
| 557 | @code{python2-foo}. Si es compatible con ambas versiones, creamos dos | ||
| 558 | paquetes con los nombres correspondientes. | ||
| 559 | |||
| 560 | Si un proyecto ya contiene la palabra @code{python}, la eliminamos; por | ||
| 561 | ejemplo, el módulo python-dateutil se empaqueta con los nombres | ||
| 562 | @code{python-dateutil} y @code{python2-dateutil}. Si el nombre del proyecto | ||
| 563 | empieza con @code{py} (por ejemplo @code{pytz}), este se mantiene y el | ||
| 564 | prefijo es el especificado anteriormente.. | ||
| 565 | |||
| 566 | @subsubsection Especificación de dependencias | ||
| 567 | @cindex entradas, para paquetes Python | ||
| 568 | |||
| 569 | La información de dependencias para paquetes Python está disponible | ||
| 570 | habitualmente en el árbol de fuentes, con varios grados de precisión: en el | ||
| 571 | fichero @file{setup.py}, en @file{requirements.txt} o en @file{tox.ini}. | ||
| 572 | |||
| 573 | Su misión, cuando escriba una receta para un paquete Python, es asociar | ||
| 574 | estas dependencias con el tipo apropiado de ``entrada'' (@pxref{Referencia de ``package'', inputs}). Aunque el importador de @code{pypi} normalmente hace un | ||
| 575 | buen trabajo (@pxref{Invocación de guix import}), puede querer comprobar la | ||
| 576 | siguiente lista para determinar qué dependencia va dónde. | ||
| 577 | |||
| 578 | @itemize | ||
| 579 | |||
| 580 | @item | ||
| 581 | Actualmente empaquetamos con @code{setuptools} y @code{pip} instalados como | ||
| 582 | Python 3.4 tiene por defecto. Por tanto no necesita especificar ninguno de | ||
| 583 | ellos como entrada. @command{guix lint} le avisará si lo hace. | ||
| 584 | |||
| 585 | @item | ||
| 586 | Las dependencias Python requeridas en tiempo de ejecución van en | ||
| 587 | @code{propagated-inputs}. Típicamente están definidas con la palabra clave | ||
| 588 | @code{install_requires} en @file{setup.py}, o en el fichero | ||
| 589 | @file{requirements.txt}. | ||
| 590 | |||
| 591 | @item | ||
| 592 | Los paquetes Python requeridos únicamente durante la construcción---por | ||
| 593 | ejemplo, aquellos listados con la palabra clave @code{setup_requires} en | ||
| 594 | @file{setup.py}---o únicamente para pruebas---por ejemplo, aquellos en | ||
| 595 | @code{tests_require}---van en @code{native-inputs}. La razón es que (1) no | ||
| 596 | necesitan ser propagados ya que no se requieren en tiempo de ejecución, y | ||
| 597 | (2) en un entorno de compilación cruzada lo que necesitamos es la entrada | ||
| 598 | ``nativa''. | ||
| 599 | |||
| 600 | Ejemplos son las bibliotecas de pruebas @code{pytest}, @code{mock} y | ||
| 601 | @code{nose}. Por supuesto, si alguno de estos paquetes también se necesita | ||
| 602 | en tiempo de ejecución, necesita ir en @code{propagated-inputs}. | ||
| 603 | |||
| 604 | @item | ||
| 605 | Todo lo que no caiga en las categorías anteriores va a @code{inputs}, por | ||
| 606 | ejemplo programas o bibliotecas C requeridas para construir los paquetes | ||
| 607 | Python que contienen extensiones C. | ||
| 608 | |||
| 609 | @item | ||
| 610 | Si un paquete Python tiene dependencias opcionales (@code{extras_require}), | ||
| 611 | queda en su mano decidir si las añade o no, en base a la relación | ||
| 612 | utilidad/sobrecarga (@pxref{Envío de parches, @command{guix size}}). | ||
| 613 | |||
| 614 | @end itemize | ||
| 615 | |||
| 616 | |||
| 617 | @node Módulos Perl | ||
| 618 | @subsection Módulos Perl | ||
| 619 | |||
| 620 | @cindex perl | ||
| 621 | Los programas ejecutables Perl se nombran como cualquier otro paquete, | ||
| 622 | mediante el uso del nombre oficial en minúsculas. Para paquetes Perl que | ||
| 623 | contienen una única clase, usamos el nombre en minúsculas de la clase, | ||
| 624 | substituyendo todas las ocurrencias de @code{::} por guiones y agregando el | ||
| 625 | prefijo @code{perl-}. Por tanto la clase @code{XML::Parser} se convierte en | ||
| 626 | @code{perl-xml-parser}. Los módulos que contienen varias clases mantienen su | ||
| 627 | nombre oficial en minúsculas y también se agrega @code{perl-} al | ||
| 628 | inicio. Dichos módulos tienden a tener la palabra @code{perl} en alguna | ||
| 629 | parte de su nombre, la cual se elimina en favor del prefijo. Por ejemplo, | ||
| 630 | @code{libwww-perl} se convierte en @code{perl-libwww}. | ||
| 631 | |||
| 632 | |||
| 633 | @node Paquetes Java | ||
| 634 | @subsection Paquetes Java | ||
| 635 | |||
| 636 | @cindex java | ||
| 637 | Los programas Java ejecutables se nombran como cualquier otro paquete, | ||
| 638 | mediante el uso del nombre oficial en minúsculas. | ||
| 639 | |||
| 640 | Para evitar confusión y colisiones de nombres con otros lenguajes de | ||
| 641 | programación, es deseable que el nombre del paquete para un paquete Java | ||
| 642 | contenga el prefijo @code{java-}. Si el proyecto ya tiene la palabra | ||
| 643 | @code{java}, eliminamos esta; por ejemplo, el paquete @code{ngsjaga} se | ||
| 644 | empaqueta bajo el nombre @code{java-ngs}. | ||
| 645 | |||
| 646 | Para los paquetes Java que contienen una clase única o una jerarquía | ||
| 647 | pequeña, usamos el nombre de clase en minúsculas, substituyendo todas las | ||
| 648 | ocurrencias de @code{.} por guiones y agregando el prefijo @code{java-}. Por | ||
| 649 | tanto la clase @code{apache.commons.cli} se convierte en el paquete | ||
| 650 | @code{java-apache-commons-cli}. | ||
| 651 | |||
| 652 | |||
| 653 | @node Tipografías | ||
| 654 | @subsection Tipografías | ||
| 655 | |||
| 656 | @cindex tipografías | ||
| 657 | Para tipografías que no se instalan generalmente por una usuaria para | ||
| 658 | propósitos tipográficos, o que se distribuyen como parte de un paquete de | ||
| 659 | software más grande, seguimos las reglas generales de empaquetamiento de | ||
| 660 | software; por ejemplo, esto aplica a las tipografías distribuidas como parte | ||
| 661 | del sistema X.Org o las tipografías que son parte de TeX Live. | ||
| 662 | |||
| 663 | Para facilitar a las usuarias la búsqueda de tipografías, los nombres para | ||
| 664 | otros paquetes que contienen únicamente tipografías se construyen como | ||
| 665 | sigue, independientemente del nombre de paquete oficial. | ||
| 666 | |||
| 667 | El nombre de un paquete que contiene únicamente una familia tipográfica | ||
| 668 | comienza con @code{font-}; seguido por el nombre de la tipografía y un guión | ||
| 669 | si la tipografía es conocida, y el nombre de la familia tipográfica, donde | ||
| 670 | los espacios se sustituyen por guiones (y como es habitual, todas las letras | ||
| 671 | mayúsculas se transforman a minúsculas). Por ejemplo, la familia de | ||
| 672 | tipografías Gentium de SIL se empaqueta bajo el nombre de | ||
| 673 | @code{font-sil-gentium}. | ||
| 674 | |||
| 675 | Para un paquete que contenga varias familias tipográficas, el nombre de la | ||
| 676 | colección se usa en vez del nombre de la familia tipográfica. Por ejemplo, | ||
| 677 | las tipografías Liberation consisten en tres familias: Liberation Sans, | ||
| 678 | Liberation Serif y Liberation Mono. Estas se podrían empaquetar por separado | ||
| 679 | bajo los nombres @code{font-liberation-sans}, etcétera; pero como se | ||
| 680 | distribuyen de forma conjunta bajo un nombre común, preferimos empaquetarlas | ||
| 681 | conjuntamente como @code{font-liberation}. | ||
| 682 | |||
| 683 | En el caso de que varios formatos de la misma familia o colección | ||
| 684 | tipográfica se empaqueten de forma separada, una forma corta del formato, | ||
| 685 | precedida por un guión, se añade al nombre del paquete. Usamos @code{-ttf} | ||
| 686 | para tipografías TrueType, @code{-otf} para tipografías OpenType y | ||
| 687 | @code{-type1} para tipografías Tipo 1 PostScript. | ||
| 688 | |||
| 689 | |||
| 690 | @node Estilo de codificación | ||
| 691 | @section Estilo de codificación | ||
| 692 | |||
| 693 | En general nuestro código sigue los Estándares de codificación GNU | ||
| 694 | (@pxref{Top,,, standards, GNU Coding Standards}). No obstante, no dicen | ||
| 695 | mucho de Scheme, así que aquí están algunas reglas adicionales. | ||
| 696 | |||
| 697 | @menu | ||
| 698 | * Paradigma de programación:: Cómo componer sus elementos. | ||
| 699 | * Módulos:: ¿Dónde almacenar su código? | ||
| 700 | * Tipos de datos y reconocimiento de patrones:: Implementación de | ||
| 701 | estructuras de datos. | ||
| 702 | * Formato del código:: Convenciones de escritura. | ||
| 703 | @end menu | ||
| 704 | |||
| 705 | @node Paradigma de programación | ||
| 706 | @subsection Paradigma de programación | ||
| 707 | |||
| 708 | El código scheme en Guix está escrito en un estilo puramente funcional. Una | ||
| 709 | excepción es el código que incluye entrada/salida, y procedimientos que | ||
| 710 | implementan conceptos de bajo nivel, como el procedimiento @code{memoize}. | ||
| 711 | |||
| 712 | @node Módulos | ||
| 713 | @subsection Módulos | ||
| 714 | |||
| 715 | Los módulos Guile que están destinados a ser usados en el lado del | ||
| 716 | constructor deben encontrarse en el espacio de nombres @code{(guix build | ||
| 717 | @dots{})}. No deben hacer referencia a otros módulos Guix o GNU. No | ||
| 718 | obstante, no hay problema en usar un módulo del lado del constructor en un | ||
| 719 | módulo ``del lado del cliente''. | ||
| 720 | |||
| 721 | Los módulos que tratan con el sistema GNU más amplio deben estar en el | ||
| 722 | espacio de nombres @code{(gnu @dots{})} en vez de en @code{(guix @dots{})}. | ||
| 723 | |||
| 724 | @node Tipos de datos y reconocimiento de patrones | ||
| 725 | @subsection Tipos de datos y reconocimiento de patrones | ||
| 726 | |||
| 727 | La tendencia en el Lisp clásico es usar listas para representar todo, y | ||
| 728 | recorrerlas ``a mano'' usando @code{car}, @code{cdr}, @code{cadr} y | ||
| 729 | compañía. Hay varios problemas con este estilo, notablemente el hecho de que | ||
| 730 | es difícil de leer, propenso a errores y una carga para informes adecuados | ||
| 731 | de errores de tipado. | ||
| 732 | |||
| 733 | El código de Guix debe definir tipos de datos apropiados (por ejemplo, | ||
| 734 | mediante el uso @code{define-record-type*}) en vez de abusar de las | ||
| 735 | listas. Además debe usarse el reconocimiento de patrones, vía el módulo de | ||
| 736 | Guile @code{(ice-9 match)}, especialmente cuando se analizan listas. | ||
| 737 | |||
| 738 | @node Formato del código | ||
| 739 | @subsection Formato del código | ||
| 740 | |||
| 741 | @cindex dar formato al código | ||
| 742 | @cindex estilo de codificación | ||
| 743 | Cuando escribimos código Scheme, seguimos la sabiduría común entre las | ||
| 744 | programadoras Scheme. En general, seguimos las | ||
| 745 | @url{http://mumble.net/~campbell/scheme/style.txt, Reglas de estilo Lisp de | ||
| 746 | Riastradh}. Este documento resulta que también describe las convenciones más | ||
| 747 | usadas en el código Guile. Está lleno de ideas y bien escrito, así que | ||
| 748 | recomendamos encarecidamente su lectura. | ||
| 749 | |||
| 750 | Algunas formas especiales introducidas en Guix, como el macro | ||
| 751 | @code{substitute*} tienen reglas de indentación especiales. Estas están | ||
| 752 | definidas en el fichero @file{.dir-locals.el}, el cual Emacs usa | ||
| 753 | automáticamente. Fíjese que además Emacs-Guix proporciona el modo | ||
| 754 | @code{guix-devel-mode} que indenta y resalta adecuadamente el código de Guix | ||
| 755 | (@pxref{Desarrollo,,, emacs-guix, The Emacs-Guix Reference Manual}). | ||
| 756 | |||
| 757 | @cindex indentación, de código | ||
| 758 | @cindex formato, de código | ||
| 759 | Si no usa Emacs, por favor asegúrese de que su editor conoce esas | ||
| 760 | reglas. Para indentar automáticamente una definición de paquete también | ||
| 761 | puede ejecutar: | ||
| 762 | |||
| 763 | @example | ||
| 764 | ./etc/indent-code.el gnu/packages/@var{fichero}.scm @var{paquete} | ||
| 765 | @end example | ||
| 766 | |||
| 767 | @noindent | ||
| 768 | Esto indenta automáticamente la definición de @var{paquete} en | ||
| 769 | @file{gnu/packages/@var{fichero}.scm} ejecutando Emacs en modo de | ||
| 770 | procesamiento de lotes. Para indentar un fichero completo, omita el segundo | ||
| 771 | parámetro: | ||
| 772 | |||
| 773 | @example | ||
| 774 | ./etc/indent-code.el gnu/services/@var{fichero}.scm | ||
| 775 | @end example | ||
| 776 | |||
| 777 | @cindex Vim, edición de código Scheme | ||
| 778 | Si está editando código con Vim, le recomendamos ejecutar @code{:set | ||
| 779 | autoindent} para que el código se indente automáticamente mientras | ||
| 780 | escribe. Adicionalmente, | ||
| 781 | @uref{https://www.vim.org/scripts/script.php?script_id=3998, | ||
| 782 | @code{paredit.vim}} puede ayudar a manejar todos estos paréntesis. | ||
| 783 | |||
| 784 | Requerimos que todos los procedimientos del nivel superior tengan una cadena | ||
| 785 | de documentación. Este requisito puede relajarse para procedimientos simples | ||
| 786 | privados en el espacio de nombres @code{(guix build @dots{})} no obstante. | ||
| 787 | |||
| 788 | Los procedimientos no deben tener más de cuatro parámetros posicionales. Use | ||
| 789 | parámetros con palabras clave para procedimientos que toman más de cuatro | ||
| 790 | parámetros. | ||
| 791 | |||
| 792 | |||
| 793 | @node Envío de parches | ||
| 794 | @section Envío de parches | ||
| 795 | |||
| 796 | El desarrollo se lleva a cabo usando el sistema de control de versiones | ||
| 797 | distribuido Git. Por lo tanto, no es estrictamente necesario el acceso al | ||
| 798 | repositorio. Son bienvenidas las contribuciones en forma de parches como los | ||
| 799 | producidos por @code{git format-patch} enviadas a la lista de correo | ||
| 800 | @email{guix-patches@@gnu.org}. | ||
| 801 | |||
| 802 | Esta lista de correo está respaldada por una instancia de Debbugs accesible | ||
| 803 | en @uref{https://bugs.gnu.org/guix-patches}, la cual nos permite mantener el | ||
| 804 | seguimiento de los envíos. A cada mensaje enviado a esa lista de correo se | ||
| 805 | le asigna un número de seguimiento; la gente puede realizar aportaciones | ||
| 806 | sobre el tema mediante el envío de correos electrónicos a | ||
| 807 | @code{@var{NNN}@@debbugs.gnu.org}, donde @var{NNN} es el número de | ||
| 808 | seguimiento (@pxref{Envío de una serie de parches}). | ||
| 809 | |||
| 810 | Le rogamos que escriba los mensajes de revisiones en formato ChangeLog | ||
| 811 | (@pxref{Change Logs,,, standards, GNU Coding Standards}); puede comprobar la | ||
| 812 | historia de revisiones en busca de ejemplos. | ||
| 813 | |||
| 814 | Antes de enviar un parche que añade o modifica una definición de un paquete, | ||
| 815 | por favor recorra esta lista de comprobaciones: | ||
| 816 | |||
| 817 | @enumerate | ||
| 818 | @item | ||
| 819 | Si las autoras del paquete software proporcionan una firma criptográfica | ||
| 820 | para el archivo de la versión, haga un esfuerzo para verificar la | ||
| 821 | autenticidad del archivo. Para un fichero de firma GPG separado esto puede | ||
| 822 | hacerse con la orden @code{gpg --verify}. | ||
| 823 | |||
| 824 | @item | ||
| 825 | Dedique algún tiempo a proporcionar una sinopsis y descripción adecuadas | ||
| 826 | para el paquete. @xref{Sinopsis y descripciones}, para algunas directrices. | ||
| 827 | |||
| 828 | @item | ||
| 829 | Ejecute @code{guix lint @var{paquete}}, donde @var{paquete} es el nombre del | ||
| 830 | paquete nuevo o modificado, y corrija cualquier error del que informe | ||
| 831 | (@pxref{Invocación de guix lint}). | ||
| 832 | |||
| 833 | @item | ||
| 834 | Asegurese de que el paquete compile en su plataforma, usando @code{guix | ||
| 835 | build @var{package}}. | ||
| 836 | |||
| 837 | @item | ||
| 838 | También le recomendamos que pruebe a construir el paquete en otras | ||
| 839 | plataformas disponibles. Como puede no disponer de acceso a dichas | ||
| 840 | plataformas hardware físicamente, le recomendamos el uso de | ||
| 841 | @code{qemu-binfmt-service-type} para emularlas. Para activarlo, añada el | ||
| 842 | siguiente servicio a la lista de servicios en su configuración | ||
| 843 | @code{operating-system}: | ||
| 844 | |||
| 845 | @example | ||
| 846 | (service qemu-binfmt-service-type | ||
| 847 | (qemu-binfmt-configuration | ||
| 848 | (platforms (lookup-qemu-platforms "arm" "aarch64" "mips64el")) | ||
| 849 | (guix-support? #t))) | ||
| 850 | @end example | ||
| 851 | |||
| 852 | Una vez hecho esto, reconfigure su sistema. | ||
| 853 | |||
| 854 | Enotonces podrá construir paquetes para diferentes plataformas mediante la | ||
| 855 | opción @code{--system}. Por ejemplo, para la construcción del paquete | ||
| 856 | "hello" para las arquitecturas armhf, aarch64 o mips64 ejecutaría las | ||
| 857 | siguientes órdenes, respectivamente: | ||
| 858 | @example | ||
| 859 | guix build --system=armhf-linux --rounds=2 hello | ||
| 860 | guix build --system=aarch64-linux --rounds=2 hello | ||
| 861 | guix build --system=mips64el-linux --rounds=2 hello | ||
| 862 | @end example | ||
| 863 | |||
| 864 | @item | ||
| 865 | @cindex empaquetamientos | ||
| 866 | Asegurese de que el paquete no usa copias empaquetadas de software ya | ||
| 867 | disponible como paquetes separados. | ||
| 868 | |||
| 869 | A veces, paquetes incluyen copias embebidas del código fuente de sus | ||
| 870 | dependencias para conveniencia de las usuarias. No obstante, como | ||
| 871 | distribución, queremos asegurar que dichos paquetes efectivamente usan la | ||
| 872 | copia que ya tenemos en la distribución si hay ya una. Esto mejora el uso de | ||
| 873 | recursos (la dependencia es construida y almacenada una sola vez), y permite | ||
| 874 | a la distribución hacer cambios transversales como aplicar actualizaciones | ||
| 875 | de seguridad para un software dado en un único lugar y que afecte a todo el | ||
| 876 | sistema---algo que esas copias embebidas impiden. | ||
| 877 | |||
| 878 | @item | ||
| 879 | Eche un vistazo al perfil mostrado por @command{guix size} (@pxref{Invocación de guix size}). Esto le permitirá darse cuenta de referencias a otros paquetes | ||
| 880 | retenidas involuntariamente. También puede ayudar a determinar si se debe | ||
| 881 | dividir el paquete (@pxref{Paquetes con múltiples salidas}), y qué | ||
| 882 | dependencias opcionales deben usarse. En particular, evite añadir | ||
| 883 | @code{texlive} como una dependencia: debido a su tamaño extremo, use | ||
| 884 | @code{texlive-tiny} o @code{texlive-union}. | ||
| 885 | |||
| 886 | @item | ||
| 887 | Para cambios importantes, compruebe que los paquetes dependientes (si | ||
| 888 | aplica) no se ven afectados por el cambio; @code{guix refresh | ||
| 889 | --list-dependent @var{package}} le ayudará a hacerlo (@pxref{Invocación de guix refresh}). | ||
| 890 | |||
| 891 | @c See <https://lists.gnu.org/archive/html/guix-devel/2016-10/msg00933.html>. | ||
| 892 | @cindex estrategia de ramas | ||
| 893 | @cindex estrategia de planificación de reconstrucciones | ||
| 894 | En base al número de paquetes dependientes y, por tanto, del tamaño de la | ||
| 895 | reconstrucción inducida, los revisiones van a ramas separadas, según estas | ||
| 896 | líneas: | ||
| 897 | |||
| 898 | @table @asis | ||
| 899 | @item 300 paquetes dependientes o menos | ||
| 900 | rama @code{master} (cambios no disruptivos). | ||
| 901 | |||
| 902 | @item entre 300 y 1.200 paquetes dependientes | ||
| 903 | rama @code{staging} (cambios no disruptivos). Esta rama está pensada para | ||
| 904 | ser incorporada en @code{master} cada 3 semanas más o menos. Ramas temáticas | ||
| 905 | (por ejemplo, una actualización de la pila de GNOME) pueden ir en una rama | ||
| 906 | específica (digamos, @code{gnome-updates}). | ||
| 907 | |||
| 908 | @item más de 1.200 paquetes dependientes | ||
| 909 | rama @code{core-updates} (puede incluir cambios mayores y potencialmente | ||
| 910 | disruptivos). Esta rama está pensada para ser incluida en @code{master} cada | ||
| 911 | 2,5 más o menos. | ||
| 912 | @end table | ||
| 913 | |||
| 914 | Todas estas ramas son @uref{https://hydra.gnu.org/project/gnu, seguidas por | ||
| 915 | nuestra granja de construcción} e incluidas en @code{master} una vez todo se | ||
| 916 | ha construido satisfactoriamente. Esto nos permite corregir errores antes de | ||
| 917 | que afecten a usuarias, y reducir la ventana durante la cual los binarios | ||
| 918 | preconstruidos no están disponibles. | ||
| 919 | |||
| 920 | @c TODO: It would be good with badges on the website that tracks these | ||
| 921 | @c branches. Or maybe even a status page. | ||
| 922 | Generalmente, ramas distintas a @code{master} se consideran | ||
| 923 | @emph{congeladas} si ha habido una evaluación reciente, o hay una rama | ||
| 924 | @code{-next} correspondiente. Por favor, pregunte en la lista de correo o en | ||
| 925 | IRC si no está segura de dónde colocar un parche. | ||
| 926 | |||
| 927 | @item | ||
| 928 | @cindex determinismo, del proceso de construcción | ||
| 929 | @cindex construcciones reproducibles, comprobar | ||
| 930 | Compruebe si el proceso de construcción de un paquete es determinista. Esto | ||
| 931 | significa típicamente comprobar si una construcción independiente del | ||
| 932 | paquete ofrece exactamente el mismo resultado que usted obtuvo, bit a bit. | ||
| 933 | |||
| 934 | Una forma simple de hacerlo es construyendo el mismo paquete varias veces | ||
| 935 | seguidas en su máquina (@pxref{Invocación de guix build}): | ||
| 936 | |||
| 937 | @example | ||
| 938 | guix build --rounds=2 mi-paquete | ||
| 939 | @end example | ||
| 940 | |||
| 941 | Esto es suficiente una clase común de problemas de no-determinismo, como las | ||
| 942 | marcas de tiempo o salida generada aleatoriamente en el resultado de la | ||
| 943 | construcción. | ||
| 944 | |||
| 945 | Otra opción es el uso de @command{guix challenge} (@pxref{Invocación de guix challenge}). Puede ejecutarse una vez la revisión del paquete haya sido | ||
| 946 | publicada y construida por @code{@value{SUBSTITUTE-SERVER}} para comprobar | ||
| 947 | si obtuvo el mismo resultado que usted. Mejor aún: encuentre otra máquina | ||
| 948 | que pueda construirla y ejecute @command{guix publish}. Ya que la máquina | ||
| 949 | remota es probablemente diferente a la suya, puede encontrar problemas de | ||
| 950 | no-determinismo relacionados con el hardware---por ejemplo, el uso de un | ||
| 951 | conjunto de instrucciones extendido diferente---o con el núcleo del sistema | ||
| 952 | operativo---por ejemplo, dependencias en @code{uname} o ficheros | ||
| 953 | @file{/proc}. | ||
| 954 | |||
| 955 | @item | ||
| 956 | Cuando escriba documentación, por favor use construcciones neutrales de | ||
| 957 | género para referirse a la gente@footnote{NdT: En esta traducción se ha | ||
| 958 | optado por usar el femenino para referirse a @emph{personas}, ya que es el | ||
| 959 | género gramatical de dicha palabra. Aunque las construcciones impersonales | ||
| 960 | pueden adoptarse en la mayoría de casos, también pueden llegar a ser muy | ||
| 961 | artificiales en otros usos del castellano; en ocasiones son directamente | ||
| 962 | imposibles. Algunas construcciones que proponen la neutralidad de género | ||
| 963 | dificultan la lecura automática (-x), o bien dificultan la corrección | ||
| 964 | automática (-e), o bien aumentan significativamente la redundancia y reducen | ||
| 965 | del mismo modo la velocidad en la lectura (-as/os, -as y -os). No obstante, | ||
| 966 | la adopción del genero neutro heredado del latín, el que en castellano se ha | ||
| 967 | unido con el masculino, como construcción neutral de género se considera | ||
| 968 | inaceptable, ya que sería equivalente al ``it'' en inglés, nada más lejos de | ||
| 969 | la intención de las autoras originales del texto.}, como | ||
| 970 | @uref{https://en.wikipedia.org/wiki/Singular_they, singular ``they''@comma{} | ||
| 971 | ``their''@comma{} ``them''} y demás. | ||
| 972 | |||
| 973 | @item | ||
| 974 | Compruebe que su parche contiene únicamente un conjunto relacionado de | ||
| 975 | cambios. Agrupando cambios sin relación dificulta y ralentiza la revisión. | ||
| 976 | |||
| 977 | Ejemplos de cambios sin relación incluyen la adición de varios paquetes, o | ||
| 978 | una actualización de un paquete junto a correcciones a ese paquete. | ||
| 979 | |||
| 980 | @item | ||
| 981 | Por favor, siga nuestras reglas de formato de código, posiblemente | ||
| 982 | ejecutando el guión @command{etc/indent-code.el} para que lo haga | ||
| 983 | automáticamente por usted (@pxref{Formato del código}). | ||
| 984 | |||
| 985 | @item | ||
| 986 | Cuando sea posible, use espejos en la URL de las fuentes (@pxref{Invocación de guix download}). Use URL fiables, no generadas. Por ejemplo, los archivos de | ||
| 987 | GitHub no son necesariamente idénticos de una generación a la siguiente, así | ||
| 988 | que en este caso es normalmente mejor clonar el repositorio. No use el campo | ||
| 989 | @command{name} en la URL: no es muy útil y si el nombre cambia, la URL | ||
| 990 | probablemente estará mal. | ||
| 991 | |||
| 992 | @end enumerate | ||
| 993 | |||
| 994 | Cuando publique un parche a la lista de correo, use @samp{[PATCH] @dots{}} | ||
| 995 | como el asunto. Puede usar su cliente de correo o la orden @command{git | ||
| 996 | send-email} (@pxref{Envío de una serie de parches}). Preferimos recibir los parches | ||
| 997 | en texto plano, ya sea en línea o como adjuntos MIME. Se le recomienda que | ||
| 998 | preste atención por si su cliente de correo cambia algo como los saltos de | ||
| 999 | línea o la indentación, lo que podría potencialmente romper los parches. | ||
| 1000 | |||
| 1001 | Cuando un error es resuelto, por favor cierre el hilo enviando un correo a | ||
| 1002 | @email{@var{NNN}-done@@debbugs.gnu.org}. | ||
| 1003 | |||
| 1004 | @unnumberedsubsec Envío de una serie de parches | ||
| 1005 | @anchor{Envío de una serie de parches} | ||
| 1006 | @cindex series de parches | ||
| 1007 | @cindex @code{git send-email} | ||
| 1008 | @cindex @code{git-send-email} | ||
| 1009 | |||
| 1010 | @c Debbugs bug: https://debbugs.gnu.org/db/15/15361.html | ||
| 1011 | Cuando envíe una serie de parches (por ejemplo, usando @code{git | ||
| 1012 | send-email}), por favor mande primero un mensaje a | ||
| 1013 | @email{guix-patches@@gnu.org}, y después mande los parches siguientes a | ||
| 1014 | @email{@var{NNN}@@debbugs.gnu.org} para asegurarse de que se mantienen | ||
| 1015 | juntos. Véase @uref{https://debbugs.gnu.org/Advanced.html, la documentación | ||
| 1016 | de Debbugs} para más información. | ||
diff --git a/doc/guix.es.texi b/doc/guix.es.texi new file mode 100644 index 00000000000..ece6073f993 --- /dev/null +++ b/doc/guix.es.texi | |||
| @@ -0,0 +1,26015 @@ | |||
| 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 | ||
| 27 | Copyright @copyright{} 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 | ||
| 28 | Ludovic Courtès@* Copyright @copyright{} 2013, 2014, 2016 Andreas Enge@* | ||
| 29 | Copyright @copyright{} 2013 Nikita Karetnikov@* Copyright @copyright{} 2014, | ||
| 30 | 2015, 2016 Alex Kost@* Copyright @copyright{} 2015, 2016 Mathieu Lirzin@* | ||
| 31 | Copyright @copyright{} 2014 Pierre-Antoine Rault@* Copyright @copyright{} | ||
| 32 | 2015 Taylan Ulrich Bayırlı/Kammer@* Copyright @copyright{} 2015, 2016, 2017 | ||
| 33 | Leo Famulari@* Copyright @copyright{} 2015, 2016, 2017, 2018, 2019 Ricardo | ||
| 34 | Wurmus@* Copyright @copyright{} 2016 Ben Woodcroft@* Copyright @copyright{} | ||
| 35 | 2016, 2017, 2018 Chris Marusich@* Copyright @copyright{} 2016, 2017, 2018, | ||
| 36 | 2019 Efraim Flashner@* Copyright @copyright{} 2016 John Darrington@* | ||
| 37 | Copyright @copyright{} 2016, 2017 ng0@* Copyright @copyright{} 2016, 2017, | ||
| 38 | 2018, 2019 Jan Nieuwenhuizen@* Copyright @copyright{} 2016 Julien Lepiller@* | ||
| 39 | Copyright @copyright{} 2016 Alex ter Weele@* Copyright @copyright{} 2016, | ||
| 40 | 2017, 2018, 2019 Christopher Baines@* Copyright @copyright{} 2017, 2018 | ||
| 41 | Clément Lassieur@* Copyright @copyright{} 2017, 2018 Mathieu Othacehe@* | ||
| 42 | Copyright @copyright{} 2017 Federico Beffa@* Copyright @copyright{} 2017, | ||
| 43 | 2018 Carlo Zancanaro@* Copyright @copyright{} 2017 Thomas Danckaert@* | ||
| 44 | Copyright @copyright{} 2017 humanitiesNerd@* Copyright @copyright{} 2017 | ||
| 45 | Christopher Allan Webber@* Copyright @copyright{} 2017, 2018 Marius Bakke@* | ||
| 46 | Copyright @copyright{} 2017 Hartmut Goebel@* Copyright @copyright{} 2017 | ||
| 47 | Maxim Cournoyer@* Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@* | ||
| 48 | Copyright @copyright{} 2017 George Clemmer@* Copyright @copyright{} 2017 | ||
| 49 | Andy Wingo@* Copyright @copyright{} 2017, 2018, 2019 Arun Isaac@* Copyright | ||
| 50 | @copyright{} 2017 nee@* Copyright @copyright{} 2018 Rutger Helling@* | ||
| 51 | Copyright @copyright{} 2018 Oleg Pykhalov@* Copyright @copyright{} 2018 Mike | ||
| 52 | Gerwitz@* Copyright @copyright{} 2018 Pierre-Antoine Rouby@* Copyright | ||
| 53 | @copyright{} 2018 Gábor Boskovits@* Copyright @copyright{} 2018 Florian | ||
| 54 | Pelz@* Copyright @copyright{} 2018 Laura Lazzati@* Copyright @copyright{} | ||
| 55 | 2018 Alex Vong@* Copyright @copyright{} 2019 Miguel Ángel Arruga Vivas | ||
| 56 | (traducción)@* | ||
| 57 | |||
| 58 | Se garantiza el permiso de copia, distribución y/o modificación de este | ||
| 59 | documento 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 | ||
| 61 | publicada por la Free Software Foundation; sin secciones invariantes, sin | ||
| 62 | textos de cubierta delantera ni trasera. Una copia de la licencia está | ||
| 63 | incluida 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 | ||
| 97 | Edició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 | |||
| 108 | Este documento describe GNU Guix versión @value{VERSION}, una herramienta | ||
| 109 | funcional 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. | ||
| 114 | Este manual también está disponible en Inglés (@pxref{Top,,, guix, GNU Guix | ||
| 115 | Reference Manual}), en Francés (@pxref{Top,,, guix.fr, Manuel de référence | ||
| 116 | de GNU Guix}) y Alemán (@pxref{Top,,, guix.de, Referenzhandbuch zu GNU | ||
| 117 | Guix}). Si quiere traducirlo a su lengua nativa, considere unirse a | ||
| 118 | @uref{https://translationproject.org/domain/guix-manual.html, Translation | ||
| 119 | Project}. | ||
| 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 | |||
| 149 | Introducció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 | |||
| 156 | Instalació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 | |||
| 171 | Preparació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 | |||
| 181 | Instalació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 | |||
| 197 | Instalació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 | |||
| 204 | Gestió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 | |||
| 222 | Sustituciones | ||
| 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 | |||
| 238 | Desarrollo | ||
| 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 | |||
| 245 | Interfaz 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 | |||
| 260 | Definició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 | |||
| 267 | Utilidades | ||
| 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 | |||
| 290 | Invocació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 | |||
| 302 | Configuració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 | |||
| 329 | Servicios | ||
| 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 | |||
| 362 | Definició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 | ||
| 379 | GNU 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 | ||
| 381 | de gestión de paquetes y una distribucion del sistema GNU. Guix facilita a | ||
| 382 | usuarias sin privilegios la instalación, actualización o borrado de paquetes | ||
| 383 | de software, la vuelta a un conjunto de paquetes previo atómicamente, la | ||
| 384 | construcción de paquetes desde las fuentes, y ayuda de forma general en la | ||
| 385 | creació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 | ||
| 390 | Puede instalar GNU@tie{}Guix sobre un sistema GNU/Linux existente, donde | ||
| 391 | complementará las herramientas disponibles sin interferencias | ||
| 392 | (@pxref{Instalación}), o puede usarse como un sistema operativo en sí | ||
| 393 | mismo, el @dfn{sistema@tie{}Guix}@footnote{Solíamos referirnos al sistema | ||
| 394 | Guix como ``Distribución de sistema Guix'' o ``GuixSD''. Ahora consideramos | ||
| 395 | que tiene más sentido agrupar todo bajo la etiqueta ``Guix'' ya que, después | ||
| 396 | de 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 | ||
| 398 | debajo!}. @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 | ||
| 409 | Guix 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 | ||
| 414 | Su @dfn{daemon de construcción} es responsable de la construcción de | ||
| 415 | paquetes en delegación de las usuarias (@pxref{Preparación del daemon}) y de | ||
| 416 | la descarga de binarios preconstruidos de fuentes autorizadas | ||
| 417 | (@pxref{Sustituciones}) | ||
| 418 | |||
| 419 | @cindex extensibilidad de la distribución | ||
| 420 | @cindex personalización, de paquetes | ||
| 421 | Guix incluye definiciones de paquetes para muchos paquetes GNU y no-GNU, | ||
| 422 | todos los cuales @uref{https://www.gnu.org/philosophy/free-sw.html, respetan | ||
| 423 | la libertad de computación de la usuaria}. Es @emph{extensible}: las | ||
| 424 | usuarias pueden escribir sus propias definiciones de paquetes | ||
| 425 | (@pxref{Definición de paquetes}) y hacerlas disponibles como módulos | ||
| 426 | independientes de paquetes (@pxref{Módulos de paquetes}). También es | ||
| 427 | @emph{personalizable}: las usuarias pueden @emph{derivar} definiciones de | ||
| 428 | paquetes 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 | ||
| 433 | En su implementación, Guix utiliza la disciplina de @dfn{gestión de paquetes | ||
| 434 | funcional} en la que Nix fue pionero (@pxref{Reconocimientos}). En Guix, el | ||
| 435 | proceso de construcción e instalación es visto como una @emph{función}, en | ||
| 436 | el sentido matemático. Dicha función toma entradas, como los guiones de | ||
| 437 | construcción, un compilador, unas bibliotecas y devuelve el paquete | ||
| 438 | instalado. Como función pura, su resultado únicamente depende de sus | ||
| 439 | entradas---por ejemplo, no puede hacer referencia a software o guiones que | ||
| 440 | no fuesen pasados explícitamente como entrada. Una función de construcción | ||
| 441 | siempre produce el mismo resultado cuando se le proporciona un conjunto de | ||
| 442 | entradas dado. No puede modificar el entorno del sistema que la ejecuta de | ||
| 443 | ninguna forma; por ejemplo, no puede crear, modificar o borrar archivos | ||
| 444 | fuera de sus directorios de construcción e instalación. Esto se consigue | ||
| 445 | ejecutando 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 | ||
| 449 | El resultado de las funciones de construcción de paquetes es @dfn{almacenado | ||
| 450 | en 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 | ||
| 452 | directorio propio en el almacén---por defecto, bajo @file{/gnu/store}. El | ||
| 453 | nombre del directorio contiene el hash de todas las entradas usadas para | ||
| 454 | construir el paquete; por tanto, cambiar una entrada resulta en un nombre de | ||
| 455 | directorio distinto. | ||
| 456 | |||
| 457 | Esta aproximación es el cimiento de las avanzadas características de Guix: | ||
| 458 | capacidad para la actualización transaccional y vuelta-atrás de paquetes, | ||
| 459 | instalació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 | ||
| 467 | Guix viene con una distribución del sistema GNU consistente en su totalidad | ||
| 468 | de 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 | ||
| 470 | usuarias de dicho software}.}. La distribución puede instalarse | ||
| 471 | independientemente (@pxref{Instalación del sistema}), pero también es posible | ||
| 472 | instalar Guix como un gestor de paquetes sobre un sistema GNU/Linux | ||
| 473 | existente (@pxref{Instalación}). Para distinguir entre las dos opciones, | ||
| 474 | nos referimos a la distribución independiente como el sistema@tie{}Guix. | ||
| 475 | |||
| 476 | La distribución proporciona paquetes principales de GNU como GNU libc, GCC y | ||
| 477 | Binutils, así como muchas aplicaciones GNU y no-GNU. La lista completa de | ||
| 478 | paquetes 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 | ||
| 483 | guix package --list-available | ||
| 484 | @end example | ||
| 485 | |||
| 486 | Nuestro objetivo es proporcionar una distribución práctica con 100% software | ||
| 487 | libre basada en Linux y otras variantes de GNU, con un enfoque en la | ||
| 488 | promoción y la alta integración de componentes GNU, y un énfasis en | ||
| 489 | programas y herramientas que ayuden a las usuarias a ejercitar esa libertad. | ||
| 490 | |||
| 491 | Actualmente hay paquetes disponibles para las siguientes plataformas: | ||
| 492 | |||
| 493 | @table @code | ||
| 494 | |||
| 495 | @item x86_64-linux | ||
| 496 | arquitectura @code{x86_64} de Intel/AMD, núcleo Linux-Libre; | ||
| 497 | |||
| 498 | @item i686-linux | ||
| 499 | arquitectura de 32-bits Intel (IA32), núcleo Linux-Libre; | ||
| 500 | |||
| 501 | @item armhf-linux | ||
| 502 | arquitectura ARMv7-A con coma flotante hardware, Thumb-2 y NEON, usando la | ||
| 503 | interfaz binaria de aplicaciones (ABI) EABI con coma flotante hardware, y el | ||
| 504 | núcleo Linux-Libre. | ||
| 505 | |||
| 506 | @item aarch64-linux | ||
| 507 | procesadores de 64-bits ARMv8 little-endian, núcleo Linux-Libre. Está | ||
| 508 | actualmente en una fase experimental, con soporte | ||
| 509 | limitado. @xref{Contribuir}, para cómo ayudar. | ||
| 510 | |||
| 511 | @item mips64el-linux | ||
| 512 | procesadores MIPS 64-bits little-endian, específicamente las series | ||
| 513 | Loongson, n32 ABI, y núcleo Linux-Libre. | ||
| 514 | |||
| 515 | @end table | ||
| 516 | |||
| 517 | Con el sistema@tie{}Guix, @emph{declara} todos los aspectos de la | ||
| 518 | configuración del sistema y Guix se hace cargo de instanciar la | ||
| 519 | configuración de manera transaccional, reproducible y sin estado global | ||
| 520 | (@pxref{Configuración del sistema}). El sistema Guix usa el núcleo Linux-libre, | ||
| 521 | el sistema de inicialización Shepherd (@pxref{Introducción,,, shepherd, The | ||
| 522 | GNU Shepherd Manual}), las conocidas utilidades y herramientas de | ||
| 523 | compilación GNU, así como el entorno gráfico o servicios del sistema de su | ||
| 524 | elección. | ||
| 525 | |||
| 526 | El sistema Guix está disponible en todas las plataformas previas excepto | ||
| 527 | @code{mips64el-linux}. | ||
| 528 | |||
| 529 | @noindent | ||
| 530 | Para información sobre el transporte a otras arquitecturas o núcleos, | ||
| 531 | @pxref{Transportar}. | ||
| 532 | |||
| 533 | La construcción de esta distribución es un esfuerzo cooperativo, ¡y esta | ||
| 534 | invitada a unirse! @xref{Contribuir}, para información sobre cómo puede | ||
| 535 | ayudar. | ||
| 536 | |||
| 537 | |||
| 538 | @c ********************************************************************* | ||
| 539 | @node Instalación | ||
| 540 | @chapter Instalación | ||
| 541 | |||
| 542 | @cindex instalar Guix | ||
| 543 | |||
| 544 | @quotation Nota | ||
| 545 | Recomendamos 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 | ||
| 547 | Guix sobre un sistema GNU/Linux en ejecución, de aquí en adelante referido | ||
| 548 | como una @dfn{distribución distinta}.@footnote{Esta sección está dedicada a | ||
| 549 | la instalación del gestor de paquetes, que puede realizarse sobre un sistema | ||
| 550 | GNU/Linux ya en ejecución. Si, en vez de eso, desdea instalar el sistema | ||
| 551 | operativo GNU completo, @pxref{Instalación del sistema}.} El guión automatiza la | ||
| 552 | descarga, instalación y configuración inicial de Guix. Debe ejecutarse como | ||
| 553 | la usuaria de administración root. | ||
| 554 | @end quotation | ||
| 555 | |||
| 556 | @cindex distribución distinta | ||
| 557 | @cindex directorios relacionados con una distribución distinta | ||
| 558 | Cuando está instalado sobre una distribución distinta, GNU@tie{}Guix | ||
| 559 | complementa las herramientas disponibles sin interferencias. Sus datos | ||
| 560 | radican exclusivamente en dos directorios, normalmente @file{/gnu/store} y | ||
| 561 | @file{/var/guix}; otros ficheros en su sistema, como @file{/etc}, permanecen | ||
| 562 | intactos. | ||
| 563 | |||
| 564 | Una vez instalado, Guix puede ser actualizado ejecutando @command{guix pull} | ||
| 565 | (@pxref{Invocación de guix pull}. | ||
| 566 | |||
| 567 | Si prefiere realizar los pasos de instalación manualmente o desea | ||
| 568 | personalizarlos, puede encontrar útiles las siguientes | ||
| 569 | instrucciones. Describen los requisitos de software de Guix, así como su | ||
| 570 | instalació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 | ||
| 590 | Esta sección describe cómo instalar Guix en un sistema arbitrario desde un | ||
| 591 | archivador autocontenido que proporciona los binarios para Guix y todas sus | ||
| 592 | dependencias. Esto es normalmente más rápido que una instalación desde las | ||
| 593 | fuentes, la cual es descrita en las siguientes secciones. El único requisito | ||
| 594 | es tener GNU@tie{}tar y Xz. | ||
| 595 | |||
| 596 | La instalación consiste más o menos en los siguientes pasos: | ||
| 597 | |||
| 598 | @enumerate | ||
| 599 | @item | ||
| 600 | @cindex descargar el binario de Guix | ||
| 601 | Descargue el archivador con los binarios de | ||
| 602 | @indicateurl{https://alpha.gnu.org/gnu/guix/guix-binary-@value{VERSION}.@var{sistema}.tar.xz}, | ||
| 603 | donde @var{sistema} es @code{x86_64-linux} para una máquina @code{x86_64} | ||
| 604 | que ejecute el núcleo Linux, etcétera. | ||
| 605 | |||
| 606 | @c The following is somewhat duplicated in ``System Installation''. | ||
| 607 | Asegurese de descargar el fichero @file{.sig} asociado y de verificar la | ||
| 608 | autenticidad 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 | |||
| 615 | Si la orden falla porque no dispone de la clave pública necesaria, entonces | ||
| 616 | ejecute 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 | ||
| 625 | y vuelva a ejecutar la orden @code{gpg --verify}. | ||
| 626 | |||
| 627 | @item | ||
| 628 | Ahora necesita convertirse en la usuaria @code{root}. Dependiendo de su | ||
| 629 | distribució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 | |||
| 639 | Esto 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 | ||
| 641 | paso). | ||
| 642 | |||
| 643 | @emph{No} extraiga el archivador en un sistema Guix ya funcionando ya que | ||
| 644 | sobreescribiría sus propios ficheros esenciales. | ||
| 645 | |||
| 646 | La opción @code{--warning=no-timestamp} asegura que GNU@tie{}tar no emite | ||
| 647 | avisos sobre ``marcas de tiempo imposibles'' (dichos avisos eran emitidos | ||
| 648 | por GNU@tie{}tar 1.26 y anteriores; las versiones recientes están | ||
| 649 | bien). Parten del hecho de que todos los ficheros en el archivador tienen su | ||
| 650 | tiempo de modificación fijado a cero (que significa el 1 de enero de | ||
| 651 | 1970). Esto es hecho voluntariamente para asegurarse de que el contenido del | ||
| 652 | archivador es independiente de su fecha de creación, haciendolo por tanto | ||
| 653 | reproducible. | ||
| 654 | |||
| 655 | @item | ||
| 656 | Ponga disponible el perfil en @file{~root/.config/guix/current}, que es | ||
| 657 | donde @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 | |||
| 665 | Cargue @file{etc/profile} para aumentar @code{PATH} y otras variables de | ||
| 666 | entorno relevantes: | ||
| 667 | |||
| 668 | @example | ||
| 669 | # GUIX_PROFILE="`echo ~root`/.config/guix/current" ; \ | ||
| 670 | source $GUIX_PROFILE/etc/profile | ||
| 671 | @end example | ||
| 672 | |||
| 673 | @item | ||
| 674 | Cree el grupo y las cuentas de usuaria para las usuarias de construcción | ||
| 675 | como se explica a continuación (@pxref{Configuración del entorno de construcción}). | ||
| 676 | |||
| 677 | @item | ||
| 678 | Ejecute el daemon, y configurelo para iniciarse automáticamente al arranque. | ||
| 679 | |||
| 680 | Si su distribución anfitriona usa el sistema de inicio systemd, puede | ||
| 681 | conseguirlo 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 | |||
| 696 | Si 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 | |||
| 705 | En 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 | ||
| 713 | Haga accesible la orden @command{guix} a otras usuarias de la máquina, por | ||
| 714 | ejemplo 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 | |||
| 722 | Es también una buena idea poner disponible la versión Info de este manual | ||
| 723 | ahí: | ||
| 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 | |||
| 732 | De este modo, asumiendo que @file{/usr/local/share/info} está en la ruta de | ||
| 733 | búsqueda, ejecutar @command{info guix.es} abrirá este manual (@pxref{Other | ||
| 734 | Info Directories,,, texinfo, GNU Texinfo}, para más detalles sobre cómo | ||
| 735 | cambiar la ruta de búsqueda de Info). | ||
| 736 | |||
| 737 | @item | ||
| 738 | @cindex sustituciones, autorización de las mismas | ||
| 739 | Para usar sustituciones de @code{@value{SUBSTITUTE-SERVER}} o uno de sus | ||
| 740 | espejos (@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 | ||
| 748 | Cada usuaria puede necesitar dar algunos pasos adicionales para prepar su | ||
| 749 | entorno de Guix para el uso, @pxref{Configuración de la aplicación}. | ||
| 750 | @end enumerate | ||
| 751 | |||
| 752 | Voilà, ¡la instalación está completa! | ||
| 753 | |||
| 754 | Puede confirmar que Guix está funcionando instalando un paquete de ejemplo | ||
| 755 | en su perfil de root: | ||
| 756 | |||
| 757 | @example | ||
| 758 | # guix package -i hello | ||
| 759 | @end example | ||
| 760 | |||
| 761 | El 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 | ||
| 763 | se 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 | |||
| 767 | El archivador de la instalación binaria puede ser (re)producido y verificado | ||
| 768 | simplemente ejecutando la siguiente orden en el árbol de fuentes de Guix: | ||
| 769 | |||
| 770 | @example | ||
| 771 | make guix-binary.@var{sistema}.tar.xz | ||
| 772 | @end example | ||
| 773 | |||
| 774 | @noindent | ||
| 775 | ...@: que a su vez ejecuta: | ||
| 776 | |||
| 777 | @example | ||
| 778 | guix 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 | |||
| 787 | Esta sección enumera los requisitos para construir Guix desde las | ||
| 788 | fuentes. El procedimiento de construcción de Guix es el mismo que el de otro | ||
| 789 | software GNU, y no está cubierto aquí. Por favor, eche un vistazo a los | ||
| 790 | ficheros @file{README} y @file{INSTALL} en el árbol de fuentes de Guix para | ||
| 791 | obtener detalles adicionales. | ||
| 792 | |||
| 793 | @cindex página web oficial | ||
| 794 | GNU Guix está disponible para descarga desde su página web en | ||
| 795 | @url{http://www.gnu.org/software/guix/}. | ||
| 796 | |||
| 797 | GNU 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 | ||
| 802 | 0.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,, | ||
| 806 | gnutls-guile, GnuTLS-Guile}); | ||
| 807 | @item | ||
| 808 | @uref{https://notabug.org/guile-sqlite3/guile-sqlite3, Guile-SQLite3}, | ||
| 809 | versió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 | ||
| 813 | o 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 | |||
| 819 | Las siguientes dependencias son opcionales: | ||
| 820 | |||
| 821 | @itemize | ||
| 822 | @item | ||
| 823 | @c Note: We need at least 0.10.2 for 'channel-send-eof'. | ||
| 824 | Las 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 | ||
| 826 | 0.10.2 o posterior. | ||
| 827 | |||
| 828 | @item | ||
| 829 | Cuando @url{http://www.bzip.org, libbz2} está disponible, @command{guix | ||
| 830 | daemon} puede usarla para comprimir los log de construcción. | ||
| 831 | @end itemize | ||
| 832 | |||
| 833 | A menos que se pasase @code{--disable-daemon} a @command{configure}, los | ||
| 834 | siguientes 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 | ||
| 840 | estándar C++11 | ||
| 841 | @end itemize | ||
| 842 | |||
| 843 | @cindex directorio de estado | ||
| 844 | Cuando se configura Guix en un sistema que ya tiene una instalación de Guix, | ||
| 845 | asegurese de especificar el mismo directorio de estado que el de la | ||
| 846 | instalación existente usando la opción @code{--localstatedir} al guión | ||
| 847 | @command{configure} (@pxref{Directory Variables, @code{localstatedir},, | ||
| 848 | standards, GNU Coding Standards}). El guión @command{configure} le proteje | ||
| 849 | ante una mala configuración no deseada de @var{localstatedir} de modo que no | ||
| 850 | pueda corromper inadvertidamente su almacén (@pxref{El almacén}). | ||
| 851 | |||
| 852 | @cindex Nix, compatibilidad | ||
| 853 | Cuando está disponible una instalación en funcionamiento del | ||
| 854 | @url{http://nixos.org/nix/, gestor de paquetes Nix}, puede a su vez | ||
| 855 | configurar Guix con @code{--disable-daemon}. En ese caso, Nix reemplaza las | ||
| 856 | tres dependencias anteriores. | ||
| 857 | |||
| 858 | Guix es compatible con Nix, así que es posible compartir el mismo almacén | ||
| 859 | entre ambos. Para hacerlo debe pasar a @command{configure} no solo el mismo | ||
| 860 | valor de @code{--with-store-dir}, sino también el mismo valor de | ||
| 861 | @code{--localstatedir}. El último es esencial debido a que especifica la | ||
| 862 | base de datos donde se encuentran almacenados los metadatos del almacén, | ||
| 863 | entre otras cosas. Los valores predeterminados para Nix son | ||
| 864 | @code{--with-store-dir=/nix/store} y @code{--localstatedir=/nix/var}. Fíjese | ||
| 865 | que no se requiere @code{--disable-daemon} si su objetivo es compartir el | ||
| 866 | almacé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 | ||
| 872 | Después de una ejecución exitosa de @command{configure} y @code{make}, es | ||
| 873 | una buena idea ejecutar la batería de pruebas. Puede ayudar a encontrar | ||
| 874 | problemas con la configuración o el entorno, o errores en el mismo Guix---e | ||
| 875 | informar de fallos en las pruebas es realmente una buena forma de ayudar a | ||
| 876 | mejorar el software. Para ejecutar la batería de pruebas, teclee: | ||
| 877 | |||
| 878 | @example | ||
| 879 | make check | ||
| 880 | @end example | ||
| 881 | |||
| 882 | Los 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 | ||
| 884 | puede tomar algunos minutos en una máquina reciente; las siguientes | ||
| 885 | ejecuciones serán más rápidas puesto que el almacén creado para las pruebas | ||
| 886 | ya tendrá varias cosas en la caché. | ||
| 887 | |||
| 888 | Tambien es posible ejecutar un subconjunto de las pruebas definiendo la | ||
| 889 | variable de makefile @code{TESTS} como en el ejemplo: | ||
| 890 | |||
| 891 | @example | ||
| 892 | make check TESTS="tests/store.scm tests/cpio.scm" | ||
| 893 | @end example | ||
| 894 | |||
| 895 | Por defecto, los resultados de las pruebas se muestran a nivel de | ||
| 896 | fichero. Para ver los detalles de cada caso de prueba individual, es posible | ||
| 897 | definir la variable de makefile @code{SCM_LOG_DRIVER_FLAGS} como en el | ||
| 898 | ejemplo: | ||
| 899 | |||
| 900 | @example | ||
| 901 | make check TESTS="tests/base64.scm" SCM_LOG_DRIVER_FLAGS="--brief=no" | ||
| 902 | @end example | ||
| 903 | |||
| 904 | En caso de fallo, le rogamos que envíe un correo a @email{bug-guix@@gnu.org} | ||
| 905 | y adjunte el fichero @file{test-suite.log}. Por favor, especifique la | ||
| 906 | versión de Guix usada así como los números de versión de las dependencias | ||
| 907 | (@pxref{Requisitos}) en su mensaje. | ||
| 908 | |||
| 909 | Guix también viene como una batería de pruebas del sistema completo que | ||
| 910 | prueban instancias completas del sistema Guix. Se puede ejecutar únicamente | ||
| 911 | en sistemas donde Guix ya está instalado, usando: | ||
| 912 | |||
| 913 | @example | ||
| 914 | make check-system | ||
| 915 | @end example | ||
| 916 | |||
| 917 | @noindent | ||
| 918 | o, de nuevo, definiendo @code{TESTS} para seleccionar un subconjunto de las | ||
| 919 | pruebas a ejecutar: | ||
| 920 | |||
| 921 | @example | ||
| 922 | make check-system TESTS="basic mcron" | ||
| 923 | @end example | ||
| 924 | |||
| 925 | Estas pruebas de sistema están definidas en los módulos @code{(gnu tests | ||
| 926 | @dots{})}. Funcionan ejecutando el sistema operativo con una instrumentación | ||
| 927 | ligera en una máquina virtual (VM). Pueden ser computacionalmente intensivas | ||
| 928 | o bastante baratas, dependiendo de si hay sustituciones disponibles para sus | ||
| 929 | dependencias (@pxref{Sustituciones}). Algunas requieren mucho espacio de | ||
| 930 | almacenamiento para alojar las imágenes de la máquina virtual. | ||
| 931 | |||
| 932 | De 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 | ||
| 939 | Operaciones como la construcción de un paquete o la ejecución del recolector | ||
| 940 | de basura son realizadas por un proceso especializado, el @dfn{daemon de | ||
| 941 | construcción}, en delegación de sus clientes. Únicamente el daemon puede | ||
| 942 | acceder al almacén y su base de datos asociada. Por tanto, cualquier | ||
| 943 | operación que manipula el almacén se realiza a través del daemon. Por | ||
| 944 | ejemplo, 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 | ||
| 946 | procedimientos remotos) para indicarle qué hacer. | ||
| 947 | |||
| 948 | Las siguientes secciones explican cómo preparar el entorno del daemon de | ||
| 949 | construcción. Véase tambien @ref{Sustituciones}, para información sobre cómo | ||
| 950 | permitir 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 | ||
| 964 | En 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 | ||
| 967 | como @code{root}. Usuarias sin privilegios pueden usar las herramientas de | ||
| 968 | Guix para construir paquetes o acceder al almacén de otro modo, y el daemon | ||
| 969 | lo hará en delegación suya, asegurando que el almacén permanece en un estado | ||
| 970 | consistente, y permitiendo compartir entre usuarias los paquetes | ||
| 971 | construidos. | ||
| 972 | |||
| 973 | @cindex usuarias de construcción | ||
| 974 | Mientras que @command{guix-daemon} se ejecuta como @code{root}, puede que no | ||
| 975 | desee que los procesos de construcción de paquetes se ejecuten como | ||
| 976 | @code{root} también, por razones de seguridad obvias. Para evitarlo, una | ||
| 977 | reserva especial de @dfn{usuarias de construcción} debe ser creada para ser | ||
| 978 | usada por los procesos de construcción iniciados por el daemon. Estas | ||
| 979 | usuarias de construcción no necesitan tener un shell ni un directorio home: | ||
| 980 | simplemente 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 | ||
| 982 | permite al daemon lanzar distintos procesos de construcción bajo UID | ||
| 983 | separados, lo que garantiza que no interferirán entre ellos---una | ||
| 984 | característica esencial ya que las construcciones se caracterizan como | ||
| 985 | funciones puras (@pxref{Introducción}). | ||
| 986 | |||
| 987 | En un sistema GNU/Linux, una reserva de usuarias de construcción puede ser | ||
| 988 | creada 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 | ||
| 1004 | El número de usuarias de construcción determina cuantos trabajos de | ||
| 1005 | construcció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 | ||
| 1008 | relacionadas, 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 | ||
| 1010 | guixbuild,kvm} en vez de @code{-G guixbuild} (@pxref{Invocación de guix system}). | ||
| 1011 | |||
| 1012 | El programa @code{guix-daemon} puede ser ejecutado entonces como @code{root} | ||
| 1013 | con la siguiente orden@footnote{Si su máquina usa el sistema de inicio | ||
| 1014 | systemd, 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 | ||
| 1017 | automáticamente. De igual modo, si su máquina usa el sistema de inicio | ||
| 1018 | Upstart, 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 | ||
| 1028 | De 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 | ||
| 1030 | defecto, el entorno ``chroot'' contiene únicamente: | ||
| 1031 | |||
| 1032 | @c Keep this list in sync with libstore/build.cc! ----------------------- | ||
| 1033 | @itemize | ||
| 1034 | @item | ||
| 1035 | un directorio @code{/dev} mínimo, creado en su mayor parte | ||
| 1036 | independientemente del @code{/dev} del sistema anfitrión@footnote{``En su | ||
| 1037 | mayor parte'', porque mientras el conjunto de ficheros que aparecen en | ||
| 1038 | @code{/dev} es fijo, la mayor parte de estos ficheros solo pueden ser | ||
| 1039 | creados si el sistema anfitrión los tiene.} | ||
| 1040 | |||
| 1041 | @item | ||
| 1042 | el directorio @code{/proc}; únicamente muestra los procesos del contenedor | ||
| 1043 | ya 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 | ||
| 1047 | la 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 | ||
| 1057 | un directorio @file{/tmp} con permisos de escritura. | ||
| 1058 | @end itemize | ||
| 1059 | |||
| 1060 | Puede 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 | ||
| 1062 | obstante, 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 | ||
| 1064 | de la derivación---por ejemplo, @code{coreutils-8.24}. De este modo, el | ||
| 1065 | valor de @code{TMPDIR} no se escapa a los entornos de construcción, lo que | ||
| 1066 | evita discrepancias en caso de que los procesos de construcción capturen el | ||
| 1067 | nombre de su árbol de construcción. | ||
| 1068 | |||
| 1069 | @vindex http_proxy | ||
| 1070 | El daemon también respeta la variable de entorno @code{http_proxy} para las | ||
| 1071 | descargas HTTP que realiza, sea para derivaciones de salida fija | ||
| 1072 | (@pxref{Derivaciones}) o para sustituciones (@pxref{Sustituciones}). | ||
| 1073 | |||
| 1074 | Si está instalando Guix como una usuaria sin privilegios, es posible todavía | ||
| 1075 | ejecutar @command{guix-daemon} siempre que pase @code{--disable-chroot}. No | ||
| 1076 | obstante, los procesos de construcción no estarán aislados entre sí ni del | ||
| 1077 | resto del sistema. Por tanto, los procesos de construcción pueden interferir | ||
| 1078 | entre ellos y pueden acceder a programas, bibliotecas y otros ficheros | ||
| 1079 | disponibles 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 | ||
| 1088 | Cuando así se desee, el daemon de construcción puede @dfn{delegar} | ||
| 1089 | construcciones 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á | ||
| 1093 | presente.}. Cuando dicha característica es activada, una lista de máquinas | ||
| 1094 | de construcción especificadas por la usuaria es leída de | ||
| 1095 | @file{/etc/guix/machines.scm}; cada vez que se solicita una construcción, | ||
| 1096 | por ejemplo via @code{guix build}, el daemon intenta delegarla a una de las | ||
| 1097 | máquinas que satisfaga las condiciones de la derivación, en particular su | ||
| 1098 | tipo de sistema---por ejemplo, @file{x86_64-linux}. Los prerrequisitos | ||
| 1099 | restantes para la construcción son copiados por SSH a la máquina objetivo, | ||
| 1100 | la cual procede con la construcción; con un resultado satisfactorio la(s) | ||
| 1101 | salida(s) de la construcción son copiadas de vuelta a la máquina inicial. | ||
| 1102 | |||
| 1103 | El fichero @file{/etc/guix/machines.scm} normalmente tiene un contenido de | ||
| 1104 | este 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 | ||
| 1125 | En el ejemplo anterior se especifica una lista de dos máquinas de | ||
| 1126 | construcción, una para la arquitectura @code{x86_64} y otra para la | ||
| 1127 | arquitectura @code{mips64el}. | ||
| 1128 | |||
| 1129 | De hecho, este fichero es---¡sin sorpresa ninguna!---un fichero Scheme que | ||
| 1130 | se evalúa cuando el hook @code{offload} se inicia. El valor que devuelve | ||
| 1131 | debe ser una lista de objetos @code{build-machine}. Mientras que este | ||
| 1132 | ejemplo muestra una lista fija de máquinas de construcción, una puede | ||
| 1133 | imaginarse, digamos, el uso de DNS-SD para devolver una lista de máquinas de | ||
| 1134 | construcción potenciales descubierta en la red local (@pxref{Introducción, | ||
| 1135 | Guile-Avahi,, guile-avahi, Using Avahi in Guile Scheme Programs}). El tipo | ||
| 1136 | de datos @code{build-machine} se detalla a continuación. | ||
| 1137 | |||
| 1138 | @deftp {Tipo de datos} build-machine | ||
| 1139 | Este tipo de datos representa las máquinas de construcción a las cuales el | ||
| 1140 | daemon puede delegar construcciones. Los campos importantes son: | ||
| 1141 | |||
| 1142 | @table @code | ||
| 1143 | |||
| 1144 | @item name | ||
| 1145 | El nombre de red de la máquina remota. | ||
| 1146 | |||
| 1147 | @item system | ||
| 1148 | El sistema de la máquina remota---por ejemplo, @code{"x86_64-linux"}. | ||
| 1149 | |||
| 1150 | @item user | ||
| 1151 | La cuenta de usuaria a usar cuando se conecte a la máquina remota por | ||
| 1152 | SSH. Tenga en cuenta que el par de claves SSH @emph{no} debe estar protegido | ||
| 1153 | por contraseña, para permitir ingresos al sistema no interactivos. | ||
| 1154 | |||
| 1155 | @item host-key | ||
| 1156 | Este campo debe contener la @dfn{clave pública de la máquina} de SSH en | ||
| 1157 | formato OpenSSH. Es usado para autentificar la máquina cuando nos conectamos | ||
| 1158 | a ella. Es una cadena larga más o menos así: | ||
| 1159 | |||
| 1160 | @example | ||
| 1161 | ssh-ed25519 AAAAC3NzaC@dots{}mde+UhL recordatorio@@example.org | ||
| 1162 | @end example | ||
| 1163 | |||
| 1164 | Si la máquina está ejecutando el daemon OpenSSH, @command{sshd}, la clave | ||
| 1165 | pública de la máquina puede encontrarse en un fichero como | ||
| 1166 | @file{/etc/ssh/ssh_host_ed25519_key.pub}. | ||
| 1167 | |||
| 1168 | Si la máquina está ejecutando el daemon SSH GNU@tie{}lsh, @command{lshd}, la | ||
| 1169 | clave de la máquina está en @file{/etc/lsh/host-key.pub} o un fichero | ||
| 1170 | similar. 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 | ||
| 1175 | ssh-rsa AAAAB3NzaC1yc2EAAAAEOp8FoQAAAQEAs1eB46LV@dots{} | ||
| 1176 | @end example | ||
| 1177 | |||
| 1178 | @end table | ||
| 1179 | |||
| 1180 | Ciertos número de campos opcionales pueden ser especificados: | ||
| 1181 | |||
| 1182 | @table @asis | ||
| 1183 | |||
| 1184 | @item @code{port} (predeterminado: @code{22}) | ||
| 1185 | Número de puerto del servidor SSH en la máquina. | ||
| 1186 | |||
| 1187 | @item @code{private-key} (predeterminada: @file{~root/.ssh/id_rsa}) | ||
| 1188 | El fichero de clave privada SSH usado para conectarse a la máquina, en | ||
| 1189 | formato OpenSSH. Esta clave no debe estar protegida con una contraseña. | ||
| 1190 | |||
| 1191 | Tenga en cuenta que el valor predeterminado es la clave privada @emph{de la | ||
| 1192 | cuenta 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}) | ||
| 1196 | Los métodos de compresión y nivel de compresión a nivel SSH solicitados. | ||
| 1197 | |||
| 1198 | Tenga en cuenta que la delegación de carga depende de la compresión SSH para | ||
| 1199 | reducir el ancho de banda usado cuando se transfieren ficheros hacia y desde | ||
| 1200 | máquinas de construcción. | ||
| 1201 | |||
| 1202 | @item @code{daemon-socket} (predeterminado: @code{"/var/guix/daemon-socket/socket"}) | ||
| 1203 | Nombre de fichero del socket de dominio Unix en el que @command{guix-daemon} | ||
| 1204 | escucha en esa máquina. | ||
| 1205 | |||
| 1206 | @item @code{parallel-builds} (predeterminadas: @code{1}) | ||
| 1207 | El número de construcciones que pueden ejecutarse en paralelo en la máquina. | ||
| 1208 | |||
| 1209 | @item @code{speed} (predeterminado: @code{1.0}) | ||
| 1210 | Un ``factor de velocidad relativa''. El planificador de delegaciones tenderá | ||
| 1211 | a preferir máquinas con un factor de velocidad mayor. | ||
| 1212 | |||
| 1213 | @item @code{features} (predeterminadas: @code{'()}) | ||
| 1214 | Una lista de cadenas denotando las características específicas permitidas | ||
| 1215 | por la máquina. Un ejemplo es @code{"kvm"} para máquinas que tienen los | ||
| 1216 | módulos KVM de Linux y las correspondientes características hardware. Las | ||
| 1217 | derivaciones pueden solicitar las características por nombre, y entonces se | ||
| 1218 | planificarán en las máquinas adecuadas. | ||
| 1219 | |||
| 1220 | @end table | ||
| 1221 | @end deftp | ||
| 1222 | |||
| 1223 | El ejecutable @code{guix} debe estar en la ruta de búsqueda de las máquinas | ||
| 1224 | de construcción. Puede comprobar si es el caso ejecutando: | ||
| 1225 | |||
| 1226 | @example | ||
| 1227 | ssh build-machine guix repl --version | ||
| 1228 | @end example | ||
| 1229 | |||
| 1230 | Hay una última cosa por hacer una vez @file{machines.scm} está en su | ||
| 1231 | lugar. Como se ha explicado anteriormente, cuando se delega, los ficheros se | ||
| 1232 | transfieren en ambas direcciones entre los almacenes de las máquinas. Para | ||
| 1233 | que esto funcione, primero debe generar un par de claves en cada máquina | ||
| 1234 | para permitir al daemon exportar los archivos firmados de ficheros en el | ||
| 1235 | almacén (@pxref{Invocación de guix archive}): | ||
| 1236 | |||
| 1237 | @example | ||
| 1238 | # guix archive --generate-key | ||
| 1239 | @end example | ||
| 1240 | |||
| 1241 | @noindent | ||
| 1242 | Cada máquina de construcción debe autorizar a la clave de la máquina maestra | ||
| 1243 | para 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 | ||
| 1250 | Del mismo podo, la máquina maestra debe autorizar la clave de cada máquina | ||
| 1251 | de construcción. | ||
| 1252 | |||
| 1253 | Todo este lío con claves está ahí para expresar las mutuas relaciones de | ||
| 1254 | confianza entre pares de la máquina maestra y las máquinas de | ||
| 1255 | construcción. Concretamente, cuando la maestra recibe ficheros de una | ||
| 1256 | máquina de construcción (y @i{vice versa}), su daemon de construcción puede | ||
| 1257 | asegurarse de que son genuinos, no han sido modificados, y que están | ||
| 1258 | firmados por una clave autorizada. | ||
| 1259 | |||
| 1260 | @cindex prueba de delegación | ||
| 1261 | Para comprobar si su configuración es operacional, ejecute esta orden en el | ||
| 1262 | nodo maestro: | ||
| 1263 | |||
| 1264 | @example | ||
| 1265 | # guix offload test | ||
| 1266 | @end example | ||
| 1267 | |||
| 1268 | Esto intentará conectar con cada una de las máquinas de construcción | ||
| 1269 | especificadas en @file{/etc/guix/machines.scm}, comprobará que GUile y los | ||
| 1270 | módulos Guix están disponibles en cada máquina, intentará exportar a la | ||
| 1271 | máquina e importar de ella, e informará de cualquier error en el proceso. | ||
| 1272 | |||
| 1273 | Si quiere probar un fichero de máquinas diferente, simplemente especifiquelo | ||
| 1274 | en la línea de órdenes: | ||
| 1275 | |||
| 1276 | @example | ||
| 1277 | # guix offload test otras-maquinas.scm | ||
| 1278 | @end example | ||
| 1279 | |||
| 1280 | Por último, puede probar un subconjunto de máquinas cuyos nombres coincidan | ||
| 1281 | con 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 | ||
| 1288 | Para mostrar la carga actual de todas las máquinas de construcción, ejecute | ||
| 1289 | esta 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 | ||
| 1302 | Guix incluye un fichero de política SELinux en @file{etc/guix-daemon.cil} | ||
| 1303 | que puede ser instalado en un sistema donde SELinux está activado, para | ||
| 1304 | etiquetar los ficheros Guix y especificar el comportamiento esperado del | ||
| 1305 | daemon. Ya que el sistema Guix no proporciona una política base de SELinux, | ||
| 1306 | la 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 | ||
| 1310 | Para instalar la política ejecute esta orden como root: | ||
| 1311 | |||
| 1312 | @example | ||
| 1313 | semodule -i etc/guix-daemon.cil | ||
| 1314 | @end example | ||
| 1315 | |||
| 1316 | Una vez hecho, vuelva a etiquetar el sistema de ficheros con | ||
| 1317 | @code{restorecon} o con un mecanismo distinto que proporcione su sistema. | ||
| 1318 | |||
| 1319 | Una vez la política está instalada, el sistema de ficheros ha sido | ||
| 1320 | re-etiquetado, y el daemon ha sido reiniciado, debería ejecutarse en el | ||
| 1321 | contexto @code{guix_daemon_t}. Puede confirmarlo con la siguiente orden: | ||
| 1322 | |||
| 1323 | @example | ||
| 1324 | ps -Zax | grep guix-daemon | ||
| 1325 | @end example | ||
| 1326 | |||
| 1327 | Monitorice los ficheros de log de SELinux mientras ejecuta una orden como | ||
| 1328 | @code{guix build hello} para convencerse que SELinux permite todas las | ||
| 1329 | operaciones necesarias. | ||
| 1330 | |||
| 1331 | @subsubsection Limitaciones | ||
| 1332 | @cindex SELinux, limitaciones | ||
| 1333 | |||
| 1334 | Esta política no es perfecta. Aquí está una lista de limitaciones o | ||
| 1335 | comportamientos extraños que deben ser considerados al desplegar la política | ||
| 1336 | SELinux provista para el daemon Guix. | ||
| 1337 | |||
| 1338 | @enumerate | ||
| 1339 | @item | ||
| 1340 | @code{guix_daemon_socket_t} no se usa realmente. Ninguna de las operaciones | ||
| 1341 | del 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 | ||
| 1343 | serí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 | ||
| 1347 | diseño, la etiqueta del fichero del destino de un enlace simbólico es | ||
| 1348 | independiente de la etiqueta de fichero del fichero en sí. Aunque todos los | ||
| 1349 | perfiles bajo $localstatedir se etiquetan, los enlaces para estos perfiles | ||
| 1350 | heredan la etiqueta del directorio en el que están. Para enlaces en el | ||
| 1351 | directorio de la usuaria esto será @code{user_home_t}. Pero para los enlaces | ||
| 1352 | del directorio de root, o @file{/tmp}, o del directorio del servidor HTTP, | ||
| 1353 | etc., esto no funcionará. @code{guix gc} se verá incapacitado para leer y | ||
| 1354 | seguir dichos enlaces. | ||
| 1355 | |||
| 1356 | @item | ||
| 1357 | La característica del daemon de esperar conexiones TCP puede que no funcione | ||
| 1358 | más. Esto puede requerir reglas extra, ya que SELinux trata los sockets de | ||
| 1359 | red de forma diferente a los ficheros. | ||
| 1360 | |||
| 1361 | @item | ||
| 1362 | Actualmente todos los ficheros con un nombre coincidente con la expresión | ||
| 1363 | regular @code{/gnu/store.+-(gux-.+|profile)/bin/guix-daemon} tienen asignada | ||
| 1364 | la etiqueta @code{guix_daemon_exec_t}; esto significa que @emph{cualquier} | ||
| 1365 | fichero con ese nombre en cualquier perfil tendrá permitida la ejecución en | ||
| 1366 | el dominio @code{guix_daemon_t}. Esto no es ideal. Una atacante podría | ||
| 1367 | construir un paquete que proporcione este ejecutable y convencer a la | ||
| 1368 | usuaria para instalarlo y ejecutarlo, lo que lo eleva al dominio | ||
| 1369 | @code{guix_daemon_t}. Llegadas a este punto, SELinux no puede prevenir que | ||
| 1370 | acceda a los ficheros permitidos para los procesos en dicho dominio. | ||
| 1371 | |||
| 1372 | Podríamos generar una política mucho más restrictiva en tiempo de | ||
| 1373 | instalación, de modo que solo el nombre @emph{exacto} del fichero del | ||
| 1374 | ejecutable 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 | ||
| 1376 | desventaja es que root tendría que instalar o actualizar la política en | ||
| 1377 | tiempo de instalación cada vez que se actualizase el paquete de Guix que | ||
| 1378 | proporcione 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 | |||
| 1384 | El programa @command{guix-daemon} implementa toda la funcionalidad para | ||
| 1385 | acceder al almacén. Esto incluye iniciar procesos de construcción, ejecutar | ||
| 1386 | el recolector de basura, comprobar la disponibilidad de un resultado de | ||
| 1387 | construcció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 | ||
| 1394 | Para 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 | ||
| 1400 | Por defecto, @command{guix-daemon} inicia los procesos de construcción bajo | ||
| 1401 | distintos UIDs, tomados del grupo de construcción especificado con | ||
| 1402 | @code{--build-users-group}. Además, cada proceso de construcción se ejecuta | ||
| 1403 | en un entorno ``chroot'' que únicamente contiene el subconjunto del almacén | ||
| 1404 | del 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 | ||
| 1406 | directorios del sistema. Por defecto, estos directorios contienen | ||
| 1407 | @file{/dev} y @file{/dev/pts}. Es más, sobre GNU/Linux, el entorno de | ||
| 1408 | construcción es un @dfn{contenedor}: además de tener su propio árbol del | ||
| 1409 | sistema de ficheros, tiene un espacio de nombres de montado separado, su | ||
| 1410 | propio espacio de nombres de PID, de red, etc. Esto ayuda a obtener | ||
| 1411 | construcciones reproducibles (@pxref{Características}). | ||
| 1412 | |||
| 1413 | Cuando el daemon realiza una construcción en delegación de la usuaria, crea | ||
| 1414 | un directorio de construcción bajo @file{/tmp} o bajo el directorio | ||
| 1415 | especificado por su variable de entorno @code{TMPDIR}. Este directorio se | ||
| 1416 | comparte con el contenedor durante toda la construcción, aunque dentro del | ||
| 1417 | contenedor el árbol de construcción siempre se llama | ||
| 1418 | @file{/tmp/guix-build-@var{nombre}.drv-0}. | ||
| 1419 | |||
| 1420 | El directorio de construcción se borra automáticamente una vez completado el | ||
| 1421 | proceso, 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 | |||
| 1425 | El daemon espera conexiones y lanza un subproceso por sesión iniciada por | ||
| 1426 | cada 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 | ||
| 1428 | de su sistema mostrando clientes y sesiones activas. @xref{Invocación de guix processes}, para más información. | ||
| 1429 | |||
| 1430 | Se aceptan las siguientes opciones de línea de ordenes: | ||
| 1431 | |||
| 1432 | @table @code | ||
| 1433 | @item --build-users-group=@var{grupo} | ||
| 1434 | Toma 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 | ||
| 1439 | No usa sustituciones para la construcción de productos. Esto es, siempre | ||
| 1440 | realiza las construcciones localmente en vez de permitir la descarga de | ||
| 1441 | binarios pre-construidos (@pxref{Sustituciones}). | ||
| 1442 | |||
| 1443 | Cuando el daemon se ejecuta con @code{--no-substitutes}, los clientes aún | ||
| 1444 | pueden activar explícitamente las sustituciones @i{via} la llamada de | ||
| 1445 | procedimiento remoto @code{set-build-options} (@pxref{El almacén}). | ||
| 1446 | |||
| 1447 | @item --substitute-urls=@var{urls} | ||
| 1448 | @anchor{daemon-substitute-urls} | ||
| 1449 | Considera @var{urls} la lista separada por espacios predeterminada de URLs | ||
| 1450 | de sustituciones de fuentes. Cuando se omite esta opción, se usa | ||
| 1451 | @indicateurl{https://@value{SUBSTITUTE-SERVER}}. | ||
| 1452 | |||
| 1453 | Esto significa que las sustituciones puede ser descargadas de @var{urls}, | ||
| 1454 | mientras estén firmadas por una firma de confianza (@pxref{Sustituciones}). | ||
| 1455 | |||
| 1456 | @cindex hook de construcción | ||
| 1457 | @item --no-build-hook | ||
| 1458 | No usa el @dfn{hook de construcción}. | ||
| 1459 | |||
| 1460 | El hook de construcción es un programa auxiliar que el daemon puede lanzar y | ||
| 1461 | al cual envía las peticiones de construcción. Este mecanismo se utiliza para | ||
| 1462 | delegar construcciones a otras máquinas (@pxref{Configuración de delegación del daemon}). | ||
| 1463 | |||
| 1464 | @item --cache-failures | ||
| 1465 | Almacena en la caché los fallos de construcción. Por defecto, únicamente las | ||
| 1466 | construcciones satisfactorias son almacenadas en la caché. | ||
| 1467 | |||
| 1468 | Cuando se usa esta opción, @command{guix gc --list-failures} puede usarse | ||
| 1469 | para consultar el conjunto de elementos del almacén marcados como fallidos; | ||
| 1470 | @command{guix gc --clear-failures} borra los elementos del almacén del | ||
| 1471 | conjunto de fallos existentes en la caché. @xref{Invocación de guix gc}. | ||
| 1472 | |||
| 1473 | @item --cores=@var{n} | ||
| 1474 | @itemx -c @var{n} | ||
| 1475 | Usa @var{n} núcleos de la CPU para construir cada derivación; @code{0} | ||
| 1476 | significa tantos como haya disponibles. | ||
| 1477 | |||
| 1478 | El valor predeterminado es @code{0}, pero puede ser sobreescrito por los | ||
| 1479 | clientes, como la opción @code{--cores} de @command{guix build} | ||
| 1480 | (@pxref{Invocación de guix build}). | ||
| 1481 | |||
| 1482 | El efecto es definir la variable de entorno @code{NIX_BUILD_CORES} en el | ||
| 1483 | proceso de construcción, el cual puede usarla para explotar el paralelismo | ||
| 1484 | interno---por ejemplo, ejecutando @code{make -j$NIX_BUILD_CORES}. | ||
| 1485 | |||
| 1486 | @item --max-jobs=@var{n} | ||
| 1487 | @itemx -M @var{n} | ||
| 1488 | Permite como máximo @var{n} trabajos de construcción en paralelo. El valor | ||
| 1489 | predeterminado es @code{1}. Fijarlo a @code{0} significa que ninguna | ||
| 1490 | construcción se realizará localmente; en vez de eso, el daemon delegará las | ||
| 1491 | construcciones (@pxref{Configuración de delegación del daemon}), o simplemente fallará. | ||
| 1492 | |||
| 1493 | @item --max-silent-time=@var{segundos} | ||
| 1494 | Cuando 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 | |||
| 1497 | El valor predeterminado es @code{0}, que deshabilita el plazo. | ||
| 1498 | |||
| 1499 | El 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} | ||
| 1503 | Del 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 | |||
| 1506 | El valor predeterminado es @code{0}, que deshabilita el plazo. | ||
| 1507 | |||
| 1508 | El valor especificado aquí puede ser sobreescrito por los clientes | ||
| 1509 | (@pxref{Opciones comunes de construcción, @code{--timeout}}). | ||
| 1510 | |||
| 1511 | @item --rounds=@var{N} | ||
| 1512 | Construye cada derivación @var{n} veces seguidas, y lanza un error si los | ||
| 1513 | resultados de las construcciones consecutivas no son idénticos | ||
| 1514 | bit-a-bit. Fíjese que esta configuración puede ser sobreescrita por clientes | ||
| 1515 | como @command{guix build} (@pxref{Invocación de guix build}). | ||
| 1516 | |||
| 1517 | Cuando se usa conjuntamente con @option{--keep-failed}, la salida que | ||
| 1518 | difiere se mantiene en el almacén, bajo | ||
| 1519 | @file{/gnu/store/@dots{}-check}. Esto hace fácil buscar diferencias entre | ||
| 1520 | los dos resultados. | ||
| 1521 | |||
| 1522 | @item --debug | ||
| 1523 | Produce salida de depuración. | ||
| 1524 | |||
| 1525 | Esto es útil para depurar problemas en el arranque del daemon, pero entonces | ||
| 1526 | puede 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} | ||
| 1530 | Añade @var{dir} al chroot de construcción. | ||
| 1531 | |||
| 1532 | Hacer esto puede cambiar el resultado del proceso de construcción---por | ||
| 1533 | ejemplo si usa dependencias opcionales, que se encuentren en @var{dir}, | ||
| 1534 | cuando están disponibles, y no de otra forma. Por esa razón, no se | ||
| 1535 | recomienda hacerlo. En vez de eso, asegurese que cada derivación declara | ||
| 1536 | todas las entradas que necesita. | ||
| 1537 | |||
| 1538 | @item --disable-chroot | ||
| 1539 | Deshabilita las construcciones en un chroot. | ||
| 1540 | |||
| 1541 | No se recomienda el uso de esta opción ya que, de nuevo, podría permitir a | ||
| 1542 | los procesos de construcción ganar acceso a dependencias no declaradas. Es | ||
| 1543 | necesario, no obstante, cuando @command{guix-daemon} se ejecuta bajo una | ||
| 1544 | cuenta de usuaria sin privilegios. | ||
| 1545 | |||
| 1546 | @item --log-compression=@var{tipo} | ||
| 1547 | Comprime los logs de construcción de acuerdo a @var{tipo}, que puede ser | ||
| 1548 | @code{gzip}, @code{bzip2} o @code{none}. | ||
| 1549 | |||
| 1550 | A menos que se use @code{--lose-logs}, todos los log de construcción se | ||
| 1551 | mantienen en @var{localstatedir}. Para ahorrar espacio, el daemon | ||
| 1552 | automáticamente los comprime con bzip2 por defecto. | ||
| 1553 | |||
| 1554 | @item --disable-deduplication | ||
| 1555 | @cindex deduplicación | ||
| 1556 | Deshabilita la ``deduplicación'' automática en el almacén. | ||
| 1557 | |||
| 1558 | Por defecto, los ficheros se añaden al almacén ``deduplicados'' | ||
| 1559 | automáticamente: si un nuevo fichero añadido es idéntico a otro que ya se | ||
| 1560 | encuentra en el almacén, el daemon introduce el nuevo fichero como un enlace | ||
| 1561 | duro al otro fichero. Esto puede reducir notablemente el uso del disco, a | ||
| 1562 | expensas de una carga de entrada/salida ligeramente incrementada al | ||
| 1563 | finalizar un proceso de construcción. Esta opción deshabilita esta | ||
| 1564 | optimización. | ||
| 1565 | |||
| 1566 | @item --gc-keep-outputs[=yes|no] | ||
| 1567 | Determina si el recolector de basura (GC) debe mantener salidas de las | ||
| 1568 | derivaciones vias. | ||
| 1569 | |||
| 1570 | @cindex GC, raíces del recolector de basura | ||
| 1571 | @cindex raíces del recolector de basura | ||
| 1572 | Cuando se usa ``yes'', el recolector de basura mantendrá las salidas de | ||
| 1573 | cualquier derivación viva disponible en el almacén---los ficheros | ||
| 1574 | @code{.drv}. El valor predeterminado es ``no'', lo que significa que las | ||
| 1575 | salidas de las derivaciones se mantienen únicamente si son alcanzables desde | ||
| 1576 | alguna raíz del recolector de basura. @xref{Invocación de guix gc}, para más | ||
| 1577 | información sobre las raices del recolector de basura. | ||
| 1578 | |||
| 1579 | @item --gc-keep-derivations[=yes|no] | ||
| 1580 | Determina si el recolector de basura (GC) debe mantener derivaciones | ||
| 1581 | correspondientes a salidas vivas. | ||
| 1582 | |||
| 1583 | Cuando se usa ``yes'', como es el caso predeterminado, el recolector de | ||
| 1584 | basura mantiene derivaciones---es decir, ficheros @code{.drv}---mientras al | ||
| 1585 | menos una de sus salidas está viva. Esto permite a las usuarias seguir la | ||
| 1586 | pista de los orígenes de los elementos en el almacén. El uso de ``no'' aquí | ||
| 1587 | ahorra un poco de espacio en disco. | ||
| 1588 | |||
| 1589 | De este modo, usar @code{--gc-keep-derivations} con valor ``yes'' provoca | ||
| 1590 | que la vitalidad fluya de salidas a derivaciones, y usar | ||
| 1591 | @code{--gc-keep-outputs} con valor ``yes'' provoca que la vitalidad fluya de | ||
| 1592 | derivaciones a salidas. Cuando ambas tienen valor ``yes'', el efecto es | ||
| 1593 | mantener todos los prerrequisitos de construcción (las fuentes, el | ||
| 1594 | compilador, las bibliotecas y otras herramientas de tiempo de construcción) | ||
| 1595 | de los objetos vivos del almacén, independientemente de que esos | ||
| 1596 | prerrequisitos sean alcanzables desde una raíz del recolector de | ||
| 1597 | basura. Esto es conveniente para desarrolladoras ya que ahorra | ||
| 1598 | reconstrucciones o descargas. | ||
| 1599 | |||
| 1600 | @item --impersonate-linux-2.6 | ||
| 1601 | En sistemas basados en Linux, suplanta a Linux 2.6. Esto significa que la | ||
| 1602 | llamada del sistema @code{uname} del kernel indicará 2.6 como el número de | ||
| 1603 | publicación. | ||
| 1604 | |||
| 1605 | Esto puede ser útil para construir programas que (habitualmente de forma | ||
| 1606 | incorrecta) dependen en el número de versión del núcleo. | ||
| 1607 | |||
| 1608 | @item --lose-logs | ||
| 1609 | No guarda logs de construcción. Por defecto se almacenan bajo | ||
| 1610 | @code{@var{localstatedir}/guix/log}. | ||
| 1611 | |||
| 1612 | @item --system=@var{sistema} | ||
| 1613 | Asume @var{sistema} como el tipo actual de sistema. Por defecto es el par de | ||
| 1614 | arquitectura/núcleo encontrado durante la configuración, como | ||
| 1615 | @code{x86_64-linux}. | ||
| 1616 | |||
| 1617 | @item --listen=@var{destino} | ||
| 1618 | Escucha conexiones en @var{destino}. @var{destino} se interpreta como el | ||
| 1619 | nombre del fichero del socket de dominio Unix si comienza on @code{/} (barra | ||
| 1620 | a la derecha). En otro caso, @var{destino} se interpreta como un nombre de | ||
| 1621 | máquina o un nombre de máquina y puerto a escuchar. Aquí van unos pocos | ||
| 1622 | ejemplos: | ||
| 1623 | |||
| 1624 | @table @code | ||
| 1625 | @item --listen=/gnu/var/daemon | ||
| 1626 | Escucha por conexiones en el socket de dominio Unix @file{/gnu/var/daemon}, | ||
| 1627 | creandolo 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 | ||
| 1634 | Escucha 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 | ||
| 1638 | Escucha conexiones TCP en la interfaz de red correspondiente a | ||
| 1639 | @code{128.0.0.42}, en el puerto 1234. | ||
| 1640 | @end table | ||
| 1641 | |||
| 1642 | Esta opción puede repetirse múltiples veces, en cuyo caso | ||
| 1643 | @command{guix-daemon} acepta conexiones en todos los destinos | ||
| 1644 | especificados. Las usuarias pueden indicar a los clientes a qué destino | ||
| 1645 | conectarse fijando la variable de entorno @code{GUIX_DAEMON_SOCKET} | ||
| 1646 | (@pxref{El almacén, @code{GUIX_DAEMON_SOCKET}}). | ||
| 1647 | |||
| 1648 | @quotation Nota | ||
| 1649 | El protocolo del daemon @code{no está autentificado ni cifrado}. El uso de | ||
| 1650 | @code{--listen=@var{dirección}} es aceptable en redes locales, como | ||
| 1651 | clusters, donde únicamente los nodos de confianza pueden conectarse al | ||
| 1652 | daemon de construcción. En otros casos donde el acceso remoto al daemon es | ||
| 1653 | necesario, recomendamos usar sockets de dominio Unix junto a SSH. | ||
| 1654 | @end quotation | ||
| 1655 | |||
| 1656 | Cuando se omite @code{--listen}, @command{guix-daemon} escucha conexiones en | ||
| 1657 | el 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 | ||
| 1666 | Cuando se usa Guix sobre una distribución GNU/Linux distinta al sistema | ||
| 1667 | Guix---una @dfn{distribución distinta}---unos pocos pasos adicionales son | ||
| 1668 | necesarios 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 | ||
| 1676 | Los paquetes instalados @i{via} Guix no usarán los datos de localización del | ||
| 1677 | sistema anfitrión. En vez de eso, debe primero instalar uno de los paquetes | ||
| 1678 | de localización disponibles con Guix y después definir la variable de | ||
| 1679 | entorno @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 | |||
| 1686 | Fíjese que el paquete @code{glibc-locales} contiene datos para todas las | ||
| 1687 | localizaciones que ofrece GNU@tie{}libc y pesa alrededor de | ||
| 1688 | 110@tie{}MiB. Alternativamente, @code{glibc-utf8-locales} es más pequeño | ||
| 1689 | pero limitado a localizaciones UTF-8. | ||
| 1690 | |||
| 1691 | La variable @code{GUIX_LOCPATH} juega un rol similar a @code{LOCPATH} | ||
| 1692 | (@pxref{Locale Names, @code{LOCPATH},, libc, The GNU C Library Reference | ||
| 1693 | Manual}). 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 | ||
| 1698 | por la libc que proporcionan las distribuciones distintas. Por tanto, usar | ||
| 1699 | @code{GUIX_LOCPATH} le permite asegurarse de que los programas de la | ||
| 1700 | distribución distinta no cargarán datos de localización incompatibles. | ||
| 1701 | |||
| 1702 | @item | ||
| 1703 | libc añade un sufijo a cada entrada de @code{GUIX_LOCPATH} con @code{/X.Y}, | ||
| 1704 | donde @code{X.Y} es la versión de libc---por ejemplo, @code{2.22}. Esto | ||
| 1705 | significa que, en caso que su perfil Guix contenga una mezcla de programas | ||
| 1706 | enlazados 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 | |||
| 1710 | Esto es importante porque el formato de datos de localización usado por | ||
| 1711 | diferentes 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) | ||
| 1719 | Cuando se usa Guix en una distribución distinta, @emph{recomendamos | ||
| 1720 | encarecidamente} que el sistema ejecute el @dfn{daemon de caché del servicio | ||
| 1721 | de nombres} de la biblioteca de C de GNU, @command{ncsd}, que debe escuchar | ||
| 1722 | en el socket @file{/var/run/nscd/socket}. En caso de no hacerlo, las | ||
| 1723 | aplicaciones instaladas con Guix pueden fallar al buscar nombres de máquinas | ||
| 1724 | o cuentas de usuaria, o incluso pueden terminar abruptamente. Los siguientes | ||
| 1725 | párrafos explican por qué. | ||
| 1726 | |||
| 1727 | @cindex @file{nsswitch.conf} | ||
| 1728 | La biblioteca de C de GNU implementa un @dfn{selector de servicios de | ||
| 1729 | nombres} (NSS), que es un mecanismo extensible para ``búsquedas de nombres'' | ||
| 1730 | en 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) | ||
| 1735 | Al ser extensible, NSS permite el uso de @dfn{módulos}, los cuales | ||
| 1736 | proporcionan nuevas implementaciones de búsqueda de nombres: por ejemplo, el | ||
| 1737 | mó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 | ||
| 1739 | usuaria 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 | ||
| 1742 | configuración (@pxref{NSS Configuration File,,, libc, The GNU C Reference | ||
| 1743 | Manual}). | ||
| 1744 | |||
| 1745 | Cuando se realiza una búsqueda de nombres---por ejemplo, llamando a la | ||
| 1746 | función @code{getaddrinfo} en C---las aplicaciones primero intentarán | ||
| 1747 | conectar con nscd; en caso satisfactorio, nscd realiza la búsqueda de | ||
| 1748 | nombres en delegación suya. Si nscd no está ejecutándose, entonces realizan | ||
| 1749 | la búsqueda por ellas mismas, cargando los servicios de búsqueda de nombres | ||
| 1750 | en su propio espacio de direcciones y ejecutándola. Estos servicios de | ||
| 1751 | bú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 | ||
| 1753 | de la biblioteca de C contra la que la aplicación está enlazada (la | ||
| 1754 | biblioteca de C que viene en Guix). | ||
| 1755 | |||
| 1756 | Y aquí es donde está el problema: si su aplicación está enlazada contra la | ||
| 1757 | biblioteca de C de Guix (digamos, glibc 2.24) e intenta cargar módulos de | ||
| 1758 | otra biblioteca de C (digamos, @code{libnss_mdns.so} para glibc 2.22), | ||
| 1759 | probablemente terminará abruptamente o sus búsquedas de nombres fallarán | ||
| 1760 | inesperadamente. | ||
| 1761 | |||
| 1762 | Ejecutar @command{nscd} en el sistema, entre otras ventajas, elimina este | ||
| 1763 | problema de incompatibilidad binaria porque esos ficheros @code{libnss_*.so} | ||
| 1764 | se cargan en el proceso @command{nscd}, no en la aplicación misma. | ||
| 1765 | |||
| 1766 | @subsection Tipografías X11 | ||
| 1767 | |||
| 1768 | @cindex tipografías | ||
| 1769 | La mayoría de aplicaciones gráficas usan Fontconfig para encontrar y cargar | ||
| 1770 | tipografí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} | ||
| 1772 | por defecto. Por tanto, para permitir a aplicaciones gráficas instaladas con | ||
| 1773 | Guix mostrar tipografías, tiene que instalar las tipografías también con | ||
| 1774 | Guix. Paquetes esenciales de tipografías incluyen @code{gs-fonts}, | ||
| 1775 | @code{font-dejavu} y @code{font-gnu-freefont-ttf}. | ||
| 1776 | |||
| 1777 | Para mostrar texto escrito en lenguas chinas, Japonés o Coreano en | ||
| 1778 | aplicaciones gráficas, considere instalar @code{font-adobe-source-han-sans} | ||
| 1779 | o @code{font-wqy-zenhei}. La anterior tiene múltiples salidas, una por | ||
| 1780 | familia de lengua (@pxref{Paquetes con múltiples salidas}). Por ejemplo, la | ||
| 1781 | siguiente orden instala tipografías para lenguas chinas: | ||
| 1782 | |||
| 1783 | @example | ||
| 1784 | guix package -i font-adobe-source-han-sans:cn | ||
| 1785 | @end example | ||
| 1786 | |||
| 1787 | @cindex @code{xterm} | ||
| 1788 | Programas más antiguos como @command{xterm} no usan Fontconfig sino que | ||
| 1789 | dependen en el lado del servidor para realizar el renderizado de | ||
| 1790 | tipografías. Dichos programas requieren especificar un nombre completo de | ||
| 1791 | tipografí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 | |||
| 1797 | Para ser capaz de usar estos nombres completos para las tipografías TrueType | ||
| 1798 | instaladas en su perfil Guix, necesita extender la ruta de fuentes del | ||
| 1799 | servidor 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 | ||
| 1804 | xset +fp $(dirname $(readlink -f ~/.guix-profile/share/fonts/truetype/fonts.dir)) | ||
| 1805 | @end example | ||
| 1806 | |||
| 1807 | @cindex @code{xlsfonts} | ||
| 1808 | Después de eso, puede ejecutar @code{xlsfonts} (del paquete @code{xlsfonts}) | ||
| 1809 | para asegurarse que sus tipografías TrueType se enumeran aquí. | ||
| 1810 | |||
| 1811 | @cindex @code{fc-cache} | ||
| 1812 | @cindex caché de tipografías | ||
| 1813 | Después de instalar tipografías puede tener que refrescar la caché de | ||
| 1814 | tipografías para usarlas en las aplicaciones. Lo mismo aplica cuando las | ||
| 1815 | aplicaciones instaladas vía Guix no parecen encontrar tipografías. Para | ||
| 1816 | forzar 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} | ||
| 1823 | El paquete @code{nss-certs} proporciona certificados X.509, que permiten a | ||
| 1824 | los programas verificar los servidores accedidos por HTTPS. | ||
| 1825 | |||
| 1826 | Cuando se usa Guix en una distribución distinta, puede instalar este paquete | ||
| 1827 | y definir las variables de entorno relevantes de modo que los paquetes sepan | ||
| 1828 | dónde buscar los certificados. @xref{Certificados X.509}, para información | ||
| 1829 | detallada. | ||
| 1830 | |||
| 1831 | @subsection Paquetes Emacs | ||
| 1832 | |||
| 1833 | @cindex @code{emacs} | ||
| 1834 | Cuando instala paquetes Emacs con Guix, los ficheros elisp pueden estar | ||
| 1835 | tanto en @file{$HOME/.guix-profile/share/emacs/site-lisp/} o en | ||
| 1836 | subdirectorios de | ||
| 1837 | @file{$HOME/.guix-profile/share/emacs/site-lisp/guix.d/}. El último | ||
| 1838 | directorio existe porque potencialmente pueden existir miles de paquetes | ||
| 1839 | Emacs, y almacenar todos sus ficheros en un directorio único puede no ser | ||
| 1840 | confiable (por conflictos de nombres). Por lo que pensamos que usar un | ||
| 1841 | directorio separado por cada paquete es una buena idea. Es muy similar a | ||
| 1842 | cómo el sistema de paquetes de Emacs organiza la estructura de ficheros | ||
| 1843 | (@pxref{Package Files,,, emacs, The GNU Emacs Manual}). | ||
| 1844 | |||
| 1845 | Por defecto, Emacs (el instalado con Guix) ``sabe'' donde se alojan estos | ||
| 1846 | paquetes, para que usted no tenga que realizar ninguna configuración. Si, | ||
| 1847 | por alguna razón, desea evitar la carga automática de paquetes Emacs | ||
| 1848 | instalados 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 | |||
| 1856 | Guix ofrece paquetes de compiladores individuales como @code{gcc}, pero si | ||
| 1857 | necesita una cadena de herramientas completa para compilar y enlazar código | ||
| 1858 | fuente lo que realmente desea es el paquete @code{gcc-toolchain}. Este | ||
| 1859 | paquete proporciona una cadena de herramientas GCC para desarrollo C/C++, | ||
| 1860 | incluyendo el mismo GCC, la biblioteca de C GNU (cabeceras y binarios, más | ||
| 1861 | símbolos de desarrollo en la salida @code{debug}), Binutils y un | ||
| 1862 | recubrimiento del enlazador. | ||
| 1863 | |||
| 1864 | El 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 | ||
| 1867 | parámetros. Puede instruir al recubrimiento para rechazar el enlace contra | ||
| 1868 | bibliotecas que no se encuentren en el almacén fijando el valor de la | ||
| 1869 | variable 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 | ||
| 1879 | Esta sección explica cómo instalar el sistema Guix en una máquina. Guix, | ||
| 1880 | como gestor de paquetes, puede instalarse sobre un sistema GNU/Linux en | ||
| 1881 | ejecució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. | ||
| 1887 | Está leyendo esta documentación con un lector Info. Para obtener detalles | ||
| 1888 | sobre su uso, presione la tecla @key{RET} (``retorno de carro'' o ``intro'') | ||
| 1889 | en el siguiente enlace: @pxref{Top, Info reader,, info-stnd, Stand-alone GNU | ||
| 1890 | Info}. Presione después @kbd{l} para volver aquí. | ||
| 1891 | |||
| 1892 | De manera alternativa, ejecute @command{info info} en otro terminal para | ||
| 1893 | mantener 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 | |||
| 1914 | We consider Guix System to be ready for a wide range of ``desktop'' and | ||
| 1915 | server use cases. The reliability guarantees it provides---transactional | ||
| 1916 | upgrades and rollbacks, reproducibility---make it a solid foundation. | ||
| 1917 | |||
| 1918 | Nevertheless, before you proceed with the installation, be aware of the | ||
| 1919 | following noteworthy limitations applicable to version @value{VERSION}: | ||
| 1920 | |||
| 1921 | @itemize | ||
| 1922 | @item | ||
| 1923 | No está implementada la funcionalidad del gestor de volúmenes lógicos (LVM). | ||
| 1924 | |||
| 1925 | @item | ||
| 1926 | Se proporcionan más y más servicios del sistema (@pxref{Servicios}), pero | ||
| 1927 | pueden faltar algunos. | ||
| 1928 | |||
| 1929 | @item | ||
| 1930 | GNOME, Xfce, LXDE, and Enlightenment are available (@pxref{Servicios de escritorio}), as well as a number of X11 window managers. However, KDE is | ||
| 1931 | currently missing. | ||
| 1932 | @end itemize | ||
| 1933 | |||
| 1934 | More than a disclaimer, this is an invitation to report issues (and success | ||
| 1935 | stories!), and to join us in improving it. @xref{Contribuir}, for more | ||
| 1936 | info. | ||
| 1937 | |||
| 1938 | |||
| 1939 | @node Consideraciones sobre el hardware | ||
| 1940 | @section Consideraciones sobre el hardware | ||
| 1941 | |||
| 1942 | @cindex soporte de hardware en el sistema Guix | ||
| 1943 | GNU@tie{}Guix se enfoca en respetar la libertad de computación de las | ||
| 1944 | usuarias. Se construye sobre el núcleo Linux-libre, lo que significa que | ||
| 1945 | únicamente funciona hardware para el que existen controladores y firmware | ||
| 1946 | libres. Hoy en día, un amplio rango del hardware común funciona con | ||
| 1947 | GNU/Linux-libre---desde teclados a tarjetas gráficas a escáneres y | ||
| 1948 | controladoras Ethernet. Desafortunadamente, todavía hay áreas donde los | ||
| 1949 | fabricantes de hardware deniegan a las usuarias el control de su propia | ||
| 1950 | computación, y dicho hardware no funciona en el sistema Guix. | ||
| 1951 | |||
| 1952 | @cindex WiFi, soporte hardware | ||
| 1953 | One of the main areas where free drivers or firmware are lacking is WiFi | ||
| 1954 | devices. WiFi devices known to work include those using Atheros chips | ||
| 1955 | (AR9271 and AR7010), which corresponds to the @code{ath9k} Linux-libre | ||
| 1956 | driver, and those using Broadcom/AirForce chips (BCM43xx with Wireless-Core | ||
| 1957 | Revision 5), which corresponds to the @code{b43-open} Linux-libre driver. | ||
| 1958 | Free firmware exists for both and is available out-of-the-box on Guix | ||
| 1959 | System, as part of @code{%base-firmware} (@pxref{Referencia de ``operating-system'', | ||
| 1960 | @code{firmware}}). | ||
| 1961 | |||
| 1962 | @cindex RYF, Respeta Su Libertad | ||
| 1963 | La @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 | ||
| 1965 | de certificación para productos hardware que respetan su libertad y su | ||
| 1966 | privacidad y se aseguran de que usted tenga el control sobre su | ||
| 1967 | dispositivo. Le recomendamos que compruebe la lista de dispositivos | ||
| 1968 | certificados RYF. | ||
| 1969 | |||
| 1970 | Otro recurso útil es el sitio web @uref{https://wwww.h-node.org/, | ||
| 1971 | H-Node}. Contiene un catálogo de dispositivos hardware con información | ||
| 1972 | acerca 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 | |||
| 1978 | Se puede descargar una imagen de instalación ISO-9660 que puede ser escrita | ||
| 1979 | en 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}, | ||
| 1981 | donde @var{sistema} es uno de los siguientes valores: | ||
| 1982 | |||
| 1983 | @table @code | ||
| 1984 | @item x86_64-linux | ||
| 1985 | para un sistema GNU/Linux en CPUs compatibles con la arquitectura de 64-bits | ||
| 1986 | de Intel/AMD. | ||
| 1987 | |||
| 1988 | @item i686-linux | ||
| 1989 | para un sistema GNU/Linux en CPUs compatibles con la arquitectura de 32-bits | ||
| 1990 | de Intel. | ||
| 1991 | @end table | ||
| 1992 | |||
| 1993 | @c start duplication of authentication part from ``Binary Installation'' | ||
| 1994 | Asegurese de descargar el fichero @file{.sig} asociado y de verificar la | ||
| 1995 | autenticidad 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 | |||
| 2002 | Si la orden falla porque no dispone de la clave pública necesaria, entonces | ||
| 2003 | ejecute 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 | ||
| 2012 | y vuelva a ejecutar la orden @code{gpg --verify}. | ||
| 2013 | |||
| 2014 | Esta imagen contiene las herramientas necesarias para una instalación. Está | ||
| 2015 | pensada ara ser copiada @emph{tal cual} a una memoria USB o DVD con espacio | ||
| 2016 | suficiente. | ||
| 2017 | |||
| 2018 | @unnumberedsubsec Copiado en una memoria USB | ||
| 2019 | |||
| 2020 | Para copiar la imagen en una memoria USB, siga estos pasos: | ||
| 2021 | |||
| 2022 | @enumerate | ||
| 2023 | @item | ||
| 2024 | Descomprima la imagen usando la orden @command{xz}: | ||
| 2025 | |||
| 2026 | @example | ||
| 2027 | xz -d guix-system-install-@value{VERSION}.@var{sistema}.iso.xz | ||
| 2028 | @end example | ||
| 2029 | |||
| 2030 | @item | ||
| 2031 | Conecte una memoria USB de 1@tie{}GiB o más a su máquina, y determine su | ||
| 2032 | nombre de dispositivo. Asumiendo que la memoria USB es @file{/dev/sdX} copie | ||
| 2033 | la imagen con: | ||
| 2034 | |||
| 2035 | @example | ||
| 2036 | dd if=guix-system-install-@value{VERSION}.@var{sistema}.iso of=/dev/sdX | ||
| 2037 | sync | ||
| 2038 | @end example | ||
| 2039 | |||
| 2040 | El acceso a @file{/dev/sdX} normalmente necesita privilegios de root. | ||
| 2041 | @end enumerate | ||
| 2042 | |||
| 2043 | @unnumberedsubsec Grabación en un DVD | ||
| 2044 | |||
| 2045 | Para copiar la imagen a un DVD, siga estos pasos: | ||
| 2046 | |||
| 2047 | @enumerate | ||
| 2048 | @item | ||
| 2049 | Descomprima la imagen usando la orden @command{xz}: | ||
| 2050 | |||
| 2051 | @example | ||
| 2052 | xz -d guix-system-install-@value{VERSION}.@var{sistema}.iso.xz | ||
| 2053 | @end example | ||
| 2054 | |||
| 2055 | @item | ||
| 2056 | Introduzca un DVD escribible en su máquina, y determine el nombre del | ||
| 2057 | dispositivo. Asumiendo que la unidad DVD es @file{/dev/srX}, copie la imagen | ||
| 2058 | con: | ||
| 2059 | |||
| 2060 | @example | ||
| 2061 | growisofs -dvd-compat -Z /dev/srX=guix-system-install-@value{VERSION}.@var{sistema}.iso | ||
| 2062 | @end example | ||
| 2063 | |||
| 2064 | El acceso a @file{/dev/srX} normalmente necesita privilegios de root. | ||
| 2065 | @end enumerate | ||
| 2066 | |||
| 2067 | @unnumberedsubsec Arranque | ||
| 2068 | |||
| 2069 | Una vez hecho esto, debe ser capaz de reiniciar el sistema y arrancar desde | ||
| 2070 | la memoria USB o el DVD. Lo primero habitualmente requiere que introducirse | ||
| 2071 | en la BIOS o en el menú de arranque UEFI, donde se puede seleccionar el | ||
| 2072 | arranque desde la memoria USB. | ||
| 2073 | |||
| 2074 | @xref{Instalación de Guix en una máquina virtual}, si, en vez de esto, desea instalar el | ||
| 2075 | sistema 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 | |||
| 2081 | Una vez que haya arrancado, puede usar el instalador gráfico guiado, el cual | ||
| 2082 | facilita la introducción al sistema (@pxref{Instalación gráfica guiada}). Alternativamente, si ya es está familiarizada con GNU/Linux | ||
| 2083 | y desea más control que el que proporciona el instalador gráfico, puede | ||
| 2084 | seleccionar el proceso de instalación ``manual'' (@pxref{Instalación manual}). | ||
| 2085 | |||
| 2086 | El instalador gráfico está disponible en TTY1. Puede obtener consolas de | ||
| 2087 | root en los TTY 3 a 6 pulsando @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4}, | ||
| 2088 | etc. 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 | ||
| 2090 | lector Info (@pxref{Top,,, info-stnd, Stand-alone GNU Info}). El sistema de | ||
| 2091 | instalación ejecuta el daemon GPM para ratones, el cual le permite | ||
| 2092 | seleccionar texto con el botón izquierdo y pegarlo con el botón central. | ||
| 2093 | |||
| 2094 | @quotation Nota | ||
| 2095 | La instalación requiere acceso a Internet de modo que cualquier dependencia | ||
| 2096 | de su configuración de sistema no encontrada pueda ser descargada. Véase la | ||
| 2097 | sección ``Red'' más adelante. | ||
| 2098 | @end quotation | ||
| 2099 | |||
| 2100 | @node Instalación gráfica guiada | ||
| 2101 | @section Instalación gráfica guiada | ||
| 2102 | |||
| 2103 | El instalador gráfico es una interfaz de usuaria basada en texto. Le guiará, | ||
| 2104 | con cajas de diálogo, a través de los pasos necesarios para instalar el | ||
| 2105 | sistema GNU@tie{}Guix. | ||
| 2106 | |||
| 2107 | Las primeras cajas de diálogo le permiten configurar el sistema mientras lo | ||
| 2108 | usa durante la instalación: puede seleccionar el idioma, la distribución del | ||
| 2109 | teclado y configurar la red, la cual se usará durante la instalación. La | ||
| 2110 | siguiente 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 | ||
| 2113 | gráfica} | ||
| 2114 | |||
| 2115 | Los siguientes pasos le permitirán particionar su disco duro, como se | ||
| 2116 | muestra en la siguiente imagen, elegir si se usarán o no sistemas de | ||
| 2117 | ficheros cifrados, introducir el nombre de la máquina, la contraseña de root | ||
| 2118 | y crear cuentas adicionales, entre otras cosas. | ||
| 2119 | |||
| 2120 | @image{images/installer-partitions,5in,, particionado en la instalación | ||
| 2121 | gráfica} | ||
| 2122 | |||
| 2123 | Tenga en cuenta que, en cualquier momento, el instalador le permite salir de | ||
| 2124 | la instalación actual y retomarla en un paso previo, como se muestra en la | ||
| 2125 | siguiente imagen. | ||
| 2126 | |||
| 2127 | @image{images/installer-resume,5in,, retomado del proceso de instalación} | ||
| 2128 | |||
| 2129 | Una vez haya finalizado, el instalador produce una configuración de sistema | ||
| 2130 | operativo y la muestra (@pxref{Uso de la configuración del sistema}). En este | ||
| 2131 | punto puede pulsar ``OK'' y la instalación procederá. En caso de | ||
| 2132 | finalización satisfactoria, puede reiniciar con el nuevo sistema y | ||
| 2133 | disfrutarlo. ¡@xref{Tras la instalación del sistema} para ver cómo proceder a | ||
| 2134 | continuación! | ||
| 2135 | |||
| 2136 | |||
| 2137 | @node Instalación manual | ||
| 2138 | @section Instalación manual | ||
| 2139 | |||
| 2140 | Esta sección describe como podría instalar ``manualmente'' el sistema | ||
| 2141 | GNU@tie{}Guix en su máquina. Esta opción requiere familiaridad con | ||
| 2142 | GNU/Linux, con el shell y con las herramientas de administración comunes. Si | ||
| 2143 | puensa que no es para usted, considere el uso del instalador gráfico guiado | ||
| 2144 | (@pxref{Instalación gráfica guiada}). | ||
| 2145 | |||
| 2146 | El sistema de instalación proporciona consolas de root en los terminales | ||
| 2147 | virtuales (TTY) 3 a 6; pulse @kbd{ctrl-alt-f3}, @kbd{ctrl-alt-f4} y | ||
| 2148 | sucesivas teclas para abrirlas. Incluye muchas herramientas comunes | ||
| 2149 | necesarias para la instalación del sistema. Pero es también un sistema Guix | ||
| 2150 | completo, lo que significa que puede instalar paquetes adicionales, en caso | ||
| 2151 | de 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 | |||
| 2161 | Antes de instalar el sistema, puede desear ajustar la distribución del | ||
| 2162 | teclado, configurar la red y particionar el disco duro deseado. Esta sección | ||
| 2163 | le guiará durante este proceso. | ||
| 2164 | |||
| 2165 | @subsubsection Distribución de teclado | ||
| 2166 | |||
| 2167 | @cindex distribución de teclado | ||
| 2168 | La imagen de instalación usa la distribución de teclado QWERTY de los | ||
| 2169 | EEUU. Si desea cambiarla, puede usar la orden @command{loadkeys}. Por | ||
| 2170 | ejemplo, la siguiente orden selecciona la distribución de teclado para el | ||
| 2171 | castellano: | ||
| 2172 | |||
| 2173 | @example | ||
| 2174 | loadkeys es | ||
| 2175 | @end example | ||
| 2176 | |||
| 2177 | Véanse los ficheros bajo @file{/run/current-system/profile/share/keymaps} | ||
| 2178 | para la obtención de una lista de distribuciones de teclado | ||
| 2179 | disponibles. Ejecute @command{man loadkeys} para más información. | ||
| 2180 | |||
| 2181 | @subsubsection Red | ||
| 2182 | |||
| 2183 | Ejecute la siguiente orden para ver los nombres asignados a sus interfaces | ||
| 2184 | de red: | ||
| 2185 | |||
| 2186 | @example | ||
| 2187 | ifconfig -a | ||
| 2188 | @end example | ||
| 2189 | |||
| 2190 | @noindent | ||
| 2191 | @dots{} o, usando la orden específica de GNU/Linux @command{ip}: | ||
| 2192 | |||
| 2193 | @example | ||
| 2194 | ip a | ||
| 2195 | @end example | ||
| 2196 | |||
| 2197 | @c http://cgit.freedesktop.org/systemd/systemd/tree/src/udev/udev-builtin-net_id.c#n20 | ||
| 2198 | El nombre de las interfaces de cable comienza con @samp{e}; por ejemplo, la | ||
| 2199 | interfaz que corresponde a la primera controladora Ethernet en la placa se | ||
| 2200 | llama @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 | ||
| 2205 | Para 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 | ||
| 2209 | ifconfig @var{interfaz} up | ||
| 2210 | @end example | ||
| 2211 | |||
| 2212 | @item Conexión sin cable | ||
| 2213 | @cindex sin cables | ||
| 2214 | @cindex WiFi | ||
| 2215 | Para configurar una red inalámbrica, puede crear un fichero de configuración | ||
| 2216 | para la herramienta de configuración @command{wpa_supplicant} (su ruta no es | ||
| 2217 | importante) usando uno de los editores de texto disponibles como | ||
| 2218 | @command{nano}: | ||
| 2219 | |||
| 2220 | @example | ||
| 2221 | nano wpa_supplicant.conf | ||
| 2222 | @end example | ||
| 2223 | |||
| 2224 | Como un ejemplo, la siguiente plantilla puede colocarse en este fichero y | ||
| 2225 | funcionará para muchas redes inalámbricas, siempre que se proporcione el | ||
| 2226 | SSID y la contraseña reales de la red a la que se va a conectar: | ||
| 2227 | |||
| 2228 | @example | ||
| 2229 | network=@{ | ||
| 2230 | ssid="@var{mi-ssid}" | ||
| 2231 | key_mgmt=WPA-PSK | ||
| 2232 | psk="la contraseña de la red" | ||
| 2233 | @} | ||
| 2234 | @end example | ||
| 2235 | |||
| 2236 | Inicie el servicio inalámbrico y ejecutelo en segundo plano con la siguiente | ||
| 2237 | orden (sustituya @var{interfaz} por el nombre de la interfaz de red que | ||
| 2238 | desea usar): | ||
| 2239 | |||
| 2240 | @example | ||
| 2241 | wpa_supplicant -c wpa_supplicant.conf -i @var{interfaz} -B | ||
| 2242 | @end example | ||
| 2243 | |||
| 2244 | Ejecute @command{man wpa_supplicant} para más información. | ||
| 2245 | @end table | ||
| 2246 | |||
| 2247 | @cindex DHCP | ||
| 2248 | En este punto, necesita obtener una dirección IP. En una red donde las | ||
| 2249 | direcciones IP se asignan automáticamente mediante DHCP, puede ejecutar: | ||
| 2250 | |||
| 2251 | @example | ||
| 2252 | dhclient -v @var{interfaz} | ||
| 2253 | @end example | ||
| 2254 | |||
| 2255 | Intente hacer ping a un servidor para comprobar si la red está funcionando | ||
| 2256 | correctamente: | ||
| 2257 | |||
| 2258 | @example | ||
| 2259 | ping -c 3 gnu.org | ||
| 2260 | @end example | ||
| 2261 | |||
| 2262 | Configurar el acceso por red es casi siempre un requisito debido a que la | ||
| 2263 | imagen no contiene todo el software y las herramientas que puedan ser | ||
| 2264 | necesarias. | ||
| 2265 | |||
| 2266 | @cindex instalación por SSH | ||
| 2267 | Si lo desea, puede continuar la instalación de forma remota iniciando un | ||
| 2268 | servidor SSH: | ||
| 2269 | |||
| 2270 | @example | ||
| 2271 | herd start ssh-daemon | ||
| 2272 | @end example | ||
| 2273 | |||
| 2274 | Asegurese de fijar una contraseña con @command{passwd}, o configurar la | ||
| 2275 | verificación de clave pública de OpenSSH para la introducción en el sistema. | ||
| 2276 | |||
| 2277 | @subsubsection Particionado de discos | ||
| 2278 | |||
| 2279 | A menos que se haya realizado previamente, el siguiente paso es el | ||
| 2280 | particionado, y después dar formato a la/s partición/es deseadas. | ||
| 2281 | |||
| 2282 | La imagen de instalación contiene varias herramientas de particionado, | ||
| 2283 | incluyendo Parted (@pxref{Overview,,, parted, GNU Parted User Manual}), | ||
| 2284 | @command{fdisk} y @command{cfdisk}. Ejecutelo y configure el mapa de | ||
| 2285 | particiones deseado en su disco: | ||
| 2286 | |||
| 2287 | @example | ||
| 2288 | cfdisk | ||
| 2289 | @end example | ||
| 2290 | |||
| 2291 | Si su disco usa el formato de tabla de particiones GUID (GPT) y tiene | ||
| 2292 | pensado instalar GRUB basado en BIOS (la opción predeterminada), asegurese | ||
| 2293 | de tener una partición de arranque BIOS disponible (@pxref{BIOS | ||
| 2294 | installation,,, grub, GNU GRUB manual}). | ||
| 2295 | |||
| 2296 | @cindex EFI, instalación | ||
| 2297 | @cindex UEFI, instalación | ||
| 2298 | @cindex ESP, partición del sistema EFI | ||
| 2299 | Si en vez de eso desea GRUB basado en EFI, se requiere una @dfn{Partición | ||
| 2300 | del 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 | ||
| 2305 | parted /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 | ||
| 2313 | debería realizar una instalación EFI, usando @code{grub-efi-bootloader}. En | ||
| 2314 | otro caso, debe usar GRUB basado en BIOS, conocido como | ||
| 2315 | @code{grub-bootloader}. @xref{Configuración del gestor de arranque}, para más | ||
| 2316 | información sobre cargadores de arranque. | ||
| 2317 | @end quotation | ||
| 2318 | |||
| 2319 | Una vez haya terminado con el particionado de la unidad de disco deseada, | ||
| 2320 | tiene que crear un sistema de ficheros en la o las particiónes | ||
| 2321 | relevantes@footnote{Actualmente el sistema Guix únicamente permite sistemas | ||
| 2322 | de ficheros ext4 y btrfs. En particular, el código que lee UUIDs del sistema | ||
| 2323 | de ficheros y etiquetas únicamente funciona para dichos sistemas de | ||
| 2324 | ficheros.}. Para la ESP, si tiene una y asumiendo que es @file{/dev/sda1}, | ||
| 2325 | ejecute: | ||
| 2326 | |||
| 2327 | @example | ||
| 2328 | mkfs.fat -F32 /dev/sda1 | ||
| 2329 | @end example | ||
| 2330 | |||
| 2331 | Preferentemente, asigne una etiqueta a los sistemas de ficheros de modo que | ||
| 2332 | pueda referirse a ellos de forma fácil y precisa en las declaraciones | ||
| 2333 | @code{file-system} (@pxref{Sistemas de ficheros}). Esto se consigue habitualmente | ||
| 2334 | con la opción @code{-L} de @command{mkfs.ext4} y las ordenes | ||
| 2335 | relacionadas. 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 | ||
| 2340 | mkfs.ext4 -L mi-raiz /dev/sda2 | ||
| 2341 | @end example | ||
| 2342 | |||
| 2343 | @cindex disco cifrado | ||
| 2344 | Si en vez de eso planea cifrar la partición raíz, puede usar las | ||
| 2345 | herramientas 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 | ||
| 2348 | la partición raíz en @file{/dev/sda2}, la secuencia de ordenes sería más o | ||
| 2349 | menos así: | ||
| 2350 | |||
| 2351 | @example | ||
| 2352 | cryptsetup luksFormat /dev/sda2 | ||
| 2353 | cryptsetup open --type luks /dev/sda1 mi-particion | ||
| 2354 | mkfs.ext4 -L mi-raiz /dev/mapper/mi-particion | ||
| 2355 | @end example | ||
| 2356 | |||
| 2357 | Una vez hecho esto, monte el sistema de ficheros deseado bajo @file{/mnt} | ||
| 2358 | con una orden como (de nuevo, asumiendo que @code{mi-raiz} es la etiqueta | ||
| 2359 | del sistema de ficheros raíz): | ||
| 2360 | |||
| 2361 | @example | ||
| 2362 | mount LABEL=mi-raiz /mnt | ||
| 2363 | @end example | ||
| 2364 | |||
| 2365 | Monte también cualquier otro sistema de ficheros que desee usar en el | ||
| 2366 | sistema resultante relativamente a esta ruta. Si ha optado por | ||
| 2367 | @file{/boot/efi} como el punto de montaje de EFI, por ejemplo, ahora debe | ||
| 2368 | ser montada en @file{/mnt/boot/efi} para que @code{guix system init} pueda | ||
| 2369 | encontrarla más adelante. | ||
| 2370 | |||
| 2371 | Finalmente, si planea usar una o más particiones de intercambio | ||
| 2372 | (@pxref{Memory Concepts, swap space,, libc, The GNU C Library Reference | ||
| 2373 | Manual}), asegurese de inicializarla con @command{mkswap}. Asumiendo que | ||
| 2374 | tuviese una partición de intercambio en @file{/dev/sda3}, ejecutaría: | ||
| 2375 | |||
| 2376 | @example | ||
| 2377 | mkswap /dev/sda3 | ||
| 2378 | swapon /dev/sda3 | ||
| 2379 | @end example | ||
| 2380 | |||
| 2381 | De manera alternativa, puede usar un fichero de intercambio. Por ejemplo, | ||
| 2382 | asumiendo que en el nuevo sistema desea usar el fichero | ||
| 2383 | @file{/fichero-de-intercambio} como tal, ejecutaría@footnote{Este ejemplo | ||
| 2384 | funcionará para muchos tipos de sistemas de ficheros (por ejemplo, ext4). No | ||
| 2385 | obstante, para los sistemas de ficheros con mecanismos de | ||
| 2386 | copia-durante-escritura (por ejemplo, btrfs) los pasos pueden diferir. Para | ||
| 2387 | obtener 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. | ||
| 2393 | dd if=/dev/zero of=/mnt/swapfile bs=1MiB count=10240 | ||
| 2394 | # Por seguridad, se mantiene el fichero únicamente legible y | ||
| 2395 | # escribible por root. | ||
| 2396 | chmod 600 /mnt/swapfile | ||
| 2397 | mkswap /mnt/swapfile | ||
| 2398 | swapon /mnt/swapfile | ||
| 2399 | @end example | ||
| 2400 | |||
| 2401 | Fijese que si ha cifrado la partición raíz y creado un fichero de | ||
| 2402 | intercambio en su sistema de ficheros como se ha descrito anteriormente, el | ||
| 2403 | cifrado también protege al fichero de intercambio, como a cualquier fichero | ||
| 2404 | en dicho sistema de ficheros. | ||
| 2405 | |||
| 2406 | @node Procedimiento de instalación | ||
| 2407 | @subsection Procedimiento de instalación | ||
| 2408 | |||
| 2409 | Con las particiones deseadas listas y la raíz deseada montada en | ||
| 2410 | @file{/mnt}, estamos preparadas para empezar. Primero, ejecute: | ||
| 2411 | |||
| 2412 | @example | ||
| 2413 | herd start cow-store /mnt | ||
| 2414 | @end example | ||
| 2415 | |||
| 2416 | Esto activa la copia-durante-escritura en @file{/gnu/store}, de modo que los | ||
| 2417 | paquetes que se añadan durante la fase de instalación se escriban en el | ||
| 2418 | disco montado en @file{/mnt} en vez de permanecer en memoria. Esto es | ||
| 2419 | necesario debido a que la primera fase de la orden @command{guix system | ||
| 2420 | init} (vea más adelante) implica descargas o construcciones en | ||
| 2421 | @file{/gnu/store}, el cual, inicialmente, está un sistema de ficheros en | ||
| 2422 | memoria. | ||
| 2423 | |||
| 2424 | Después debe editar un fichero y proporcionar la declaración de sistema | ||
| 2425 | operativo a instalar. Para dicho fin, el sistema de instalación viene con | ||
| 2426 | tres editores de texto. Recomendamos GNU nano (@pxref{Top,,, nano, GNU nano | ||
| 2427 | Manual}), que permite el resaltado de sintaxis y correspondencia de | ||
| 2428 | paréntesis; los otros editores son GNU Zile (un clon de Emacs) y nvi (un | ||
| 2429 | clon del editor @command{vi} original de BSD). Le recomendamos | ||
| 2430 | encarecidamente almacenar ese fichero en el sistema de ficheros raíz, | ||
| 2431 | digamos, como @file{/mnt/etc/config.scm}. En caso de no hacerlo, habrá | ||
| 2432 | perdido su configuración del sistema una vez arranque en el sistema recién | ||
| 2433 | instalado. | ||
| 2434 | |||
| 2435 | @xref{Uso de la configuración del sistema}, para hacerse una idea del fichero de | ||
| 2436 | configuración. Las configuraciones de ejemplo mencionadas en esa sección | ||
| 2437 | están disponibles bajo @file{/etc/configuration} en la imagen de | ||
| 2438 | instalación. Por tanto, para empezar con una configuración del sistema que | ||
| 2439 | proporcione un servidor gráfico (un sistema de ``escritorio''), puede | ||
| 2440 | ejecutar 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 | |||
| 2448 | Debe prestar atención a lo que su fichero de configuración contiene, y en | ||
| 2449 | particular: | ||
| 2450 | |||
| 2451 | @itemize | ||
| 2452 | @item | ||
| 2453 | Asegurese que la forma @code{bootloader-configuration} especifica la | ||
| 2454 | localizació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 | ||
| 2457 | antiguos, el campo @code{target} denomina un dispositivo, como | ||
| 2458 | @code{/dev/sda}; para los sistemas UEFI denomina la ruta de una partición | ||
| 2459 | EFI montada, como @code{/boot/efi}; asegurese de que la ruta está | ||
| 2460 | actualmente montada y haya una entrada @code{file-system} especificada en su | ||
| 2461 | configuración. | ||
| 2462 | |||
| 2463 | @item | ||
| 2464 | Asegurese que las etiquetas de su sistema de ficheros corresponden con el | ||
| 2465 | valor de sus campos @code{device} respectivos en su configuración | ||
| 2466 | @code{file-system}, asumiendo que su configuración @code{file-system} usa el | ||
| 2467 | procedimiento @code{file-system-label} en su campo @code{device}. | ||
| 2468 | |||
| 2469 | @item | ||
| 2470 | Si 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 | |||
| 2474 | Una vez haya terminado de preparar el fichero de configuración, el nuevo | ||
| 2475 | sistema debe ser inicializado (recuerde que el sistema de ficheros raíz | ||
| 2476 | deseado está montado bajo @file{/mnt}): | ||
| 2477 | |||
| 2478 | @example | ||
| 2479 | guix system init /mnt/etc/config.scm /mnt | ||
| 2480 | @end example | ||
| 2481 | |||
| 2482 | @noindent | ||
| 2483 | Esto copia todos los ficheros necesarios e instala GRUB en @file{/dev/sdX}, | ||
| 2484 | a menos que proporcione la opción @option{--no-bootloader}. Para más | ||
| 2485 | información, @pxref{Invocación de guix system}. Esta orden puede desencadenar | ||
| 2486 | descargas o construcciones de paquetes no encontrados, lo cual puede tomar | ||
| 2487 | algún tiempo. | ||
| 2488 | |||
| 2489 | Una vez que la orden se complete---¡y, deseablemente, de forma | ||
| 2490 | satisfactoria!---puede ejecutar @command{reboot} y arrancar con el nuevo | ||
| 2491 | sistema. La contraseña de @code{root} en el nuevo sistema está vacía | ||
| 2492 | inicialmente; otras contraseñas de usuarias tienen que ser inicializadas | ||
| 2493 | ejecutando la orden @command{passwd} como @code{root}, a menos que en su | ||
| 2494 | configuración se especifique de otra manera (@pxref{user-account-password, | ||
| 2495 | contraseñas de cuentas de usuaria}). ¡@xref{Tras la instalación del sistema} para | ||
| 2496 | proceder 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 | ||
| 2503 | actualizar el sistema cuando quiera mediante la ejecución de, digamos: | ||
| 2504 | |||
| 2505 | @example | ||
| 2506 | guix pull | ||
| 2507 | sudo guix system reconfigure /etc/config.scm | ||
| 2508 | @end example | ||
| 2509 | |||
| 2510 | @noindent | ||
| 2511 | Esto construye una nueva generación del sistema con los últimos paquetes y | ||
| 2512 | servicios (@pxref{Invocación de guix system}). Recomendamos realizarlo de manera | ||
| 2513 | regular de modo que su sistema incluya las últimas actualizaciones de | ||
| 2514 | seguridad (@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} | ||
| 2519 | Tenga en cuenta que @command{sudo guix} ejecuta el ejecutable @command{guix} | ||
| 2520 | de 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 | ||
| 2522 | root, 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) | ||
| 2535 | Si desea instalar el sistema Guix en una máquina virtual (VM) o en un | ||
| 2536 | servidor privado virtual (VPS) en vez de en su preciada máquina, esta | ||
| 2537 | sección es para usted. | ||
| 2538 | |||
| 2539 | Si quiere arrancar una VM @uref{http://qemu.org/,QEMU} para instalar el | ||
| 2540 | sistema Guix en una imagen de disco, siga estos pasos: | ||
| 2541 | |||
| 2542 | @enumerate | ||
| 2543 | @item | ||
| 2544 | Primero, obtenga y descomprima la imagen de instalación del sistema Guix | ||
| 2545 | como se ha descrito previamente (@pxref{Instalación desde memoria USB y DVD}). | ||
| 2546 | |||
| 2547 | @item | ||
| 2548 | Cree una imagen de disco que contendrá el sistema instalado. Para crear una | ||
| 2549 | imagen de disco con formato qcow2, use la orden @command{qemu-img}: | ||
| 2550 | |||
| 2551 | @example | ||
| 2552 | qemu-img create -f qcow2 guixsd.img 50G | ||
| 2553 | @end example | ||
| 2554 | |||
| 2555 | El fichero que obtenga será mucho menor de 50GB (típicamente menos de 1MB), | ||
| 2556 | pero crecerá cuando el dispositivo de almacenamiento virtualizado se vaya | ||
| 2557 | llenando. | ||
| 2558 | |||
| 2559 | @item | ||
| 2560 | Arranque la imagen de instalación USB en una máquina virtual: | ||
| 2561 | |||
| 2562 | @example | ||
| 2563 | qemu-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 | |||
| 2569 | El orden de las unidades importa. | ||
| 2570 | |||
| 2571 | En la consola de la VM, pulse rápidamente la tecla @kbd{F12} para entrar al | ||
| 2572 | menú de arranque. Pulse la tecla @kbd{2} y la tecla @kbd{RET} para confirmar | ||
| 2573 | su selección. | ||
| 2574 | |||
| 2575 | @item | ||
| 2576 | Ahora es root en la VM, prosiga con el procedimiento de | ||
| 2577 | instalación. @xref{Preparación para la instalación}, y siga las instrucciones. | ||
| 2578 | @end enumerate | ||
| 2579 | |||
| 2580 | Una vez complete la instalación, puede arrancar el sistema que está en la | ||
| 2581 | imagen @file{guixsd.img}. @xref{Ejecutar Guix en una máquina virtual}, para información | ||
| 2582 | sobre 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 | ||
| 2588 | La imagen de instalación descrita anteriormente se construyó usando la orden | ||
| 2589 | @command{guix system}, específicamente: | ||
| 2590 | |||
| 2591 | @example | ||
| 2592 | guix system disk-image --file-system-type=iso9660 \ | ||
| 2593 | gnu/system/install.scm | ||
| 2594 | @end example | ||
| 2595 | |||
| 2596 | Eche un vistazo a @file{gnu/system/install.scm} en el árbol de fuentes, y | ||
| 2597 | vea también @ref{Invocación de guix system} para más información acerca de la | ||
| 2598 | imagen de instalación. | ||
| 2599 | |||
| 2600 | @section Construcción de la imagen de instalación para placas ARM | ||
| 2601 | |||
| 2602 | Muchas placas ARM necesitan una variante específica del cargador de arranque | ||
| 2603 | @uref{http://www.denx.de/wiki/U-Boot/, U-Boot}. | ||
| 2604 | |||
| 2605 | Si construye una imagen de disco y el cargador de arranque no está | ||
| 2606 | disponible de otro modo (en otra unidad de arranque, etc.), es recomendable | ||
| 2607 | construir una imagen que incluya el cargador, específicamente: | ||
| 2608 | |||
| 2609 | @example | ||
| 2610 | guix 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 | ||
| 2614 | no 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 | ||
| 2621 | El propósito de GNU Guix es permitir a las usuarias instalar, actualizar y | ||
| 2622 | borrar fácilmente paquetes de software, sin tener que conocer acerca de sus | ||
| 2623 | procedimientos de construcción o dependencias. Guix también va más allá de | ||
| 2624 | este conjunto obvio de características. | ||
| 2625 | |||
| 2626 | Este capítulo describe las principales características de Guix, así como las | ||
| 2627 | herramientas de gestión de paquetes que ofrece. Junto a la interfaz de línea | ||
| 2628 | de órdenes descrita a continuación (@pxref{Invocación de guix package, @code{guix | ||
| 2629 | package}}, también puede usar la interfaz Emacs-Guix (@pxref{Top,,, | ||
| 2630 | emacs-guix, The Emacs Guix Reference Manual}), tras la instalación del | ||
| 2631 | paquete @code{emacs-guix} (ejecute la orden @kbd{M-x guix-help} para | ||
| 2632 | iniciarse en su uso): | ||
| 2633 | |||
| 2634 | @example | ||
| 2635 | guix 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 | |||
| 2657 | Cuando se usa Guix, cada paquete se encuentra en el @dfn{almacén de | ||
| 2658 | paquetes}, 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 | |||
| 2661 | En 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 | ||
| 2663 | perfiles se almacenan en el directorio de cada usuaria, en | ||
| 2664 | @code{$HOME/.guix-profile}. | ||
| 2665 | |||
| 2666 | Por 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} | ||
| 2670 | simplemente sigue apuntando a | ||
| 2671 | @file{/gnu/store/@dots{}-gcc-4.8.0/bin/gcc}---es decir, ambas versiones de | ||
| 2672 | GCC pueden coexistir en el mismo sistema sin ninguna interferencia. | ||
| 2673 | |||
| 2674 | La orden @command{guix package} es la herramienta central para gestión de | ||
| 2675 | paquetes (@pxref{Invocación de guix package}). Opera en los perfiles de usuaria, | ||
| 2676 | y puede ser usada @emph{con privilegios de usuaria normal}. | ||
| 2677 | |||
| 2678 | @cindex transacciones | ||
| 2679 | La orden proporciona las operaciones obvias de instalación, borrado y | ||
| 2680 | actualización. Cada invocación es en realidad una @emph{transacción}: o bien | ||
| 2681 | la operación especificada se realiza satisfactoriamente, o bien nada | ||
| 2682 | sucede. Por tanto, si el proceso @command{guix package} es finalizado | ||
| 2683 | durante una transacción, o un fallo eléctrico ocurre durante la transacción, | ||
| 2684 | el perfil de usuaria permanece en su estado previo, y permanece usable. | ||
| 2685 | |||
| 2686 | Además, cualquier transacción de paquetes puede ser @emph{vuelta atrás}. Si, | ||
| 2687 | por ejemplo, una actualización instala una nueva versión de un paquete que | ||
| 2688 | resulta tener un error importante, las usuarias pueden volver a la instancia | ||
| 2689 | previa de su perfil, de la cual se tiene constancia que funcionaba bien. De | ||
| 2690 | igual modo, la configuración global del sistema en Guix está sujeta a | ||
| 2691 | actualizaciones transaccionales y vuelta atrás (@pxref{Uso de la configuración del sistema}). | ||
| 2692 | |||
| 2693 | Todos los paquetes en el almacén de paquetes pueden ser @emph{eliminados por | ||
| 2694 | el recolector de basura}. Guix puede determinar qué paquetes están siendo | ||
| 2695 | todavía referenciados por los perfiles de usuarias, y eliminar aquellos que, | ||
| 2696 | de forma demostrable, no están referenciados (@pxref{Invocación de guix gc}). Las | ||
| 2697 | usuarias pueden también borrar explícitamente generaciones antiguas de su | ||
| 2698 | perfil para que los paquetes referenciados en ellas puedan ser recolectadas. | ||
| 2699 | |||
| 2700 | @cindex reproducibilidad | ||
| 2701 | @cindex construcciones reproducibles | ||
| 2702 | Guix toma una aproximación @dfn{puramente funcional} en la gestión de | ||
| 2703 | paquetes, como se describe en la introducción (@pxref{Introducción}). Cada | ||
| 2704 | nombre de directorio de paquete en @file{/gnu/store} contiene un hash de | ||
| 2705 | todas las entradas que fueron usadas para construir el paquete---compilador, | ||
| 2706 | bibliotecas, guiones de construcción, etc. Esta correspondencia directa | ||
| 2707 | permite a las usuarias asegurarse que una instalación dada de un paquete | ||
| 2708 | corresponde al estado actual de su distribución. Esto también ayuda a | ||
| 2709 | maximizar la @dfn{reproducibilidad de la construcción}: gracias al uso de | ||
| 2710 | entornos aislados de construcción, una construcción dada probablemente | ||
| 2711 | generará ficheros idénticos bit-a-bit cuando se realice en máquinas | ||
| 2712 | diferentes (@pxref{Invocación de guix-daemon, container}). | ||
| 2713 | |||
| 2714 | @cindex sustituciones | ||
| 2715 | Estos cimientos permiten a Guix ofrecer @dfn{despliegues transparentes de | ||
| 2716 | binarios/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 | ||
| 2719 | construye el paquete de las fuentes, localmente | ||
| 2720 | (@pxref{Sustituciones}). Debido a que los resultados de construcción son | ||
| 2721 | normalmente reproducibles bit-a-bit, las usuarias no tienen que confiar en | ||
| 2722 | los servidores que proporcionan sustituciones: pueden forzar una | ||
| 2723 | construcción local y @emph{retar} a las proveedoras (@pxref{Invocación de guix challenge}). | ||
| 2724 | |||
| 2725 | El control sobre el entorno de construcción es una característica que | ||
| 2726 | también es útil para desarrolladoras. La orden @command{guix environment} | ||
| 2727 | permite a desarrolladoras de un paquete configurar rápidamente el entorno de | ||
| 2728 | desarrollo correcto para su paquete, sin tener que instalar manualmente las | ||
| 2729 | dependencias 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 | ||
| 2733 | Todo 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 | ||
| 2735 | mismo Guix (@pxref{Invocación de guix pull}). Esto hace posible replicar una | ||
| 2736 | instancia de Guix en una máquina diferente o en un punto posterior del | ||
| 2737 | tiempo, lo que a su vez le permite @emph{replicar entornos de software | ||
| 2738 | completos}, mientras que mantiene un preciso @dfn{seguimiento de la | ||
| 2739 | procedencia} 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 | ||
| 2748 | La orden @command{guix package} es la herramienta que permite a las usuarias | ||
| 2749 | instalar, actualizar y borrar paquetes, así como volver a configuraciones | ||
| 2750 | previas. Opera únicamente en el perfil propio de la usuaria, y funciona con | ||
| 2751 | privilegios de usuaria normal (@pxref{Características}). Su sintaxis es: | ||
| 2752 | |||
| 2753 | @example | ||
| 2754 | guix package @var{opciones} | ||
| 2755 | @end example | ||
| 2756 | @cindex transacciones | ||
| 2757 | Primariamente, @var{opciones} especifica las operaciones a ser realizadas | ||
| 2758 | durante la transacción. Al completarse, un nuevo perfil es creado, pero las | ||
| 2759 | @dfn{generaciones} previas del perfil permanecen disponibles, en caso de que | ||
| 2760 | la usuaria quisiera volver atrás. | ||
| 2761 | |||
| 2762 | Por ejemplo, para borrar @code{lua} e instalar @code{guile} y | ||
| 2763 | @code{guile-cairo} en una única transacción: | ||
| 2764 | |||
| 2765 | @example | ||
| 2766 | guix package -r lua -i guile guile-cairo | ||
| 2767 | @end example | ||
| 2768 | |||
| 2769 | @command{guix package} también proporciona una @dfn{aproximación | ||
| 2770 | declarativa}, donde la usuaria especifica el conjunto exacto de paquetes a | ||
| 2771 | poner disponibles y la pasa a través de la opción @option{--manifest} | ||
| 2772 | (@pxref{profile-manifest, @option{--manifest}}). | ||
| 2773 | |||
| 2774 | @cindex perfil | ||
| 2775 | Para cada usuaria, un enlace simbólico al perfil predeterminado de la | ||
| 2776 | usuaria es creado en @file{$HOME/.guix-profile}. Este enlace simbólico | ||
| 2777 | siempre apunta a la generación actual del perfil predeterminado de la | ||
| 2778 | usuaria. Por lo tanto, las usuarias pueden añadir | ||
| 2779 | @file{$HOME/.guix-profile/bin} a su variable de entorno @code{PATH}, y | ||
| 2780 | demás. | ||
| 2781 | @cindex rutas de búsqueda | ||
| 2782 | Si no está usando la Distribución de Sistema Guix, considere añadir las | ||
| 2783 | siguientes líneas a su @file{~/.bash_profile} (@pxref{Bash Startup Files,,, | ||
| 2784 | bash, The GNU Bash Reference Manual}) de modo que los shell lanzados a | ||
| 2785 | partir de entonces obtengan todas las definiciones de variables de entorno | ||
| 2786 | correctas: | ||
| 2787 | |||
| 2788 | @example | ||
| 2789 | GUIX_PROFILE="$HOME/.guix-profile" ; \ | ||
| 2790 | source "$HOME/.guix-profile/etc/profile" | ||
| 2791 | @end example | ||
| 2792 | |||
| 2793 | En una configuración multiusuaria, los perfiles de usuaria se almacenan en | ||
| 2794 | un lugar registrado como una @dfn{raíz del sistema de ficheros}, a la que | ||
| 2795 | apunta @file{$HOME/.guix-profile} (@pxref{Invocación de guix gc}). Ese directorio | ||
| 2796 | normalmente 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 | ||
| 2800 | directorio @file{per-user} se crea cuando se lanza @command{guix-daemon}, y | ||
| 2801 | el subdirectorio @var{usuaria} es creado por @command{guix package}. | ||
| 2802 | |||
| 2803 | Las @var{opciones} pueden ser las siguientes: | ||
| 2804 | |||
| 2805 | @table @code | ||
| 2806 | |||
| 2807 | @item --install=@var{paquete} @dots{} | ||
| 2808 | @itemx -i @var{paquete} @dots{} | ||
| 2809 | Instala los @var{paquete}s especificados. | ||
| 2810 | |||
| 2811 | Cada @var{paquete} puede especificar un nombre simple de paquete, como por | ||
| 2812 | ejemplo @code{guile}, o un nombre de paquete seguido por una arroba y el | ||
| 2813 | nú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 | ||
| 2815 | prefijo es seleccionada). | ||
| 2816 | |||
| 2817 | Si no se especifica un número de versión, la última versión disponible será | ||
| 2818 | seleccionada. Además, @var{paquete} puede contener dos puntos, seguido por | ||
| 2819 | el 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 | ||
| 2821 | paquetes con el nombre correspondiente (y opcionalmente la versión) se | ||
| 2822 | buscan entre los módulos de la distribución GNU (@pxref{Módulos de paquetes}). | ||
| 2823 | |||
| 2824 | @cindex entradas propagadas | ||
| 2825 | A veces los paquetes tienen @dfn{entradas propagadas}: estas son las | ||
| 2826 | dependencias 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 | ||
| 2829 | las definiciones de paquete). | ||
| 2830 | |||
| 2831 | @anchor{package-cmd-propagated-inputs} | ||
| 2832 | Un ejemplo es la biblioteca GNU MPC: sus ficheros de cabecera C hacen | ||
| 2833 | referencia a los de la biblioteca GNU MPFR, que a su vez hacen referencia a | ||
| 2834 | los de la biblioteca GMP. Por tanto, cuando se instala MPC, las bibliotecas | ||
| 2835 | MPFR y GMP también se instalan en el perfil; borrar MPC también borra MPFR y | ||
| 2836 | GMP---a menos que también se hayan instalado explícitamente por la usuaria. | ||
| 2837 | |||
| 2838 | Por otra parte, los paquetes a veces dependen de la definición de variables | ||
| 2839 | de entorno para sus rutas de búsqueda (véase a continuación la explicación | ||
| 2840 | de @code{--seach-paths}). Cualquier definición de variable de entorno que | ||
| 2841 | falte o sea posiblemente incorrecta se informa aquí. | ||
| 2842 | |||
| 2843 | @item --install-from-expression=@var{exp} | ||
| 2844 | @itemx -e @var{exp} | ||
| 2845 | Instala 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 | ||
| 2849 | variantes con el mismo nombre que un paquete, con expresiones como @code{(@@ | ||
| 2850 | (gnu packages base) guile-final)}. | ||
| 2851 | |||
| 2852 | Fíjese que esta opción instala la primera salida del paquete especificado, | ||
| 2853 | lo cual puede ser insuficiente cuando se necesita una salida específica de | ||
| 2854 | un paquete con múltiples salidas. | ||
| 2855 | |||
| 2856 | @item --install-from-file=@var{fichero} | ||
| 2857 | @itemx -f @var{fichero} | ||
| 2858 | Instala el paquete que resulta de evaluar el código en @var{fichero}. | ||
| 2859 | |||
| 2860 | Como 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 | |||
| 2867 | Las 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 | ||
| 2869 | usado para probar imágenes de desarrollo y crear entornos de desarrollo | ||
| 2870 | reproducibles (@pxref{Invocación de guix environment}). | ||
| 2871 | |||
| 2872 | @item --remove=@var{paquete} @dots{} | ||
| 2873 | @itemx -r @var{paquete} @dots{} | ||
| 2874 | Borra los @var{paquete}s especificados. | ||
| 2875 | |||
| 2876 | Como en @code{--install}, cada @var{paquete} puede especificar un número de | ||
| 2877 | versió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 | ||
| 2883 | Actualiza todos los paquetes instalados. Si se especifica una o más | ||
| 2884 | expresiones regular @var{regexp}, actualiza únicamente los paquetes | ||
| 2885 | instalados cuyo nombre es aceptado por @var{regexp}. Véase también la opción | ||
| 2886 | @code{--do-not-upgrade} más adelante. | ||
| 2887 | |||
| 2888 | Tenga en cuenta que esto actualiza los paquetes a la última versión | ||
| 2889 | encontrada en la distribución instalada actualmente. Para actualizar su | ||
| 2890 | distribución, debe ejecutar regularmente @command{guix pull} | ||
| 2891 | (@pxref{Invocación de guix pull}). | ||
| 2892 | |||
| 2893 | @item --do-not-upgrade[=@var{regexp} @dots{}] | ||
| 2894 | Cuando se usa junto a la opción @code{--upgrade}, @emph{no} actualiza ningún | ||
| 2895 | paquete cuyo nombre sea aceptado por @var{regexp}. Por ejemplo, para | ||
| 2896 | actualizar todos los paquetes en el perfil actual excepto aquellos que | ||
| 2897 | contengan 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 | ||
| 2907 | Crea una nueva generación del perfil desde el objeto de manifiesto devuelto | ||
| 2908 | por el código Scheme en @var{fichero}. | ||
| 2909 | |||
| 2910 | Esto le permite @emph{declarar} los contenidos del perfil en vez de | ||
| 2911 | construirlo a través de una secuencia de @code{--install} y órdenes | ||
| 2912 | similares. La ventaja es que @var{fichero} puede ponerse bajo control de | ||
| 2913 | versiones, copiarse a máquinas diferentes para reproducir el mismo perfil, y | ||
| 2914 | demá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 | ||
| 2918 | lista 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 | ||
| 2932 | En 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 | ||
| 2935 | podemos proporcionar especificaciones regulares de paquetes y dejar a | ||
| 2936 | @code{specifications->manifest} buscar los objetos de paquete | ||
| 2937 | correspondientes 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 | ||
| 2948 | Vuelve a la @dfn{generación} previa del perfil---es decir, deshace la última | ||
| 2949 | transacción. | ||
| 2950 | |||
| 2951 | Cuando se combina con opciones como @code{--install}, la vuelta atrás ocurre | ||
| 2952 | antes que cualquier acción. | ||
| 2953 | |||
| 2954 | Cuando se vuelve atrás en la primera generación que realmente contiene | ||
| 2955 | paquetes instalados, se hace que el perfil apunte a la @dfn{generación | ||
| 2956 | cero}, la cual no contiene ningún fichero a excepción de sus propios | ||
| 2957 | metadatos. | ||
| 2958 | |||
| 2959 | Después de haber vuelto atrás, instalar, borrar o actualizar paquetes | ||
| 2960 | sobreescribe las generaciones futuras previas. Por tanto, la historia de las | ||
| 2961 | generaciones en un perfil es siempre linear. | ||
| 2962 | |||
| 2963 | @item --switch-generation=@var{patrón} | ||
| 2964 | @itemx -S @var{patrón} | ||
| 2965 | @cindex generaciones | ||
| 2966 | Cambia 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 | ||
| 2969 | prefijado con ``+'' o ``-''. Esto último significa: mueve atrás/hacia | ||
| 2970 | delante el número especificado de generaciones. Por ejemplo, si quiere | ||
| 2971 | volver a la última generación antes de @code{--roll-back}, use | ||
| 2972 | @code{--switch-generation=+1}. | ||
| 2973 | |||
| 2974 | La diferencia entre @code{--roll-back} y @code{--switch-generation=-1} es | ||
| 2975 | que @code{--switch-generation} no creará una generación cero, así que si la | ||
| 2976 | generació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 | ||
| 2980 | Informa de variables de entorno, en sintaxis Bash, que pueden necesitarse | ||
| 2981 | para usar el conjunto de paquetes instalado. Estas variables de entorno se | ||
| 2982 | usan para especificar las @dfn{rutas de búsqueda} para ficheros usadas por | ||
| 2983 | algunos de los paquetes. | ||
| 2984 | |||
| 2985 | Por ejemplo, GCC necesita que las variables de entorno @code{CPATH} y | ||
| 2986 | @code{LIBRARY_PATH} estén definidas para poder buscar cabeceras y | ||
| 2987 | bibliotecas en el perfil de la usuaria (@pxref{Environment Variables,,, gcc, | ||
| 2988 | Using the GNU Compiler Collection (GCC)}). Si GCC y, digamos, la biblioteca | ||
| 2989 | de C están instaladas en el perfil, entonces @code{--search-paths} sugerirá | ||
| 2990 | fijar dichas variables a @code{@var{perfil}/include} y | ||
| 2991 | @code{@var{perfil}/lib} respectivamente. | ||
| 2992 | |||
| 2993 | El caso de uso típico es para definir estas variables de entorno en el | ||
| 2994 | shell: | ||
| 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 | ||
| 3001 | significa que las definiciones de variables de entorno devueltas serán | ||
| 3002 | respectivamente las configuraciones exactas, prefijos o sufijos del valor | ||
| 3003 | actual de dichas variables. Cuando se omite, el valor predeterminado de | ||
| 3004 | @var{tipo} es @code{exact}. | ||
| 3005 | |||
| 3006 | Esta 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 | |||
| 3015 | La última orden informa sobre la variable @code{GUILE_LOAD_PATH}, aunque, | ||
| 3016 | tomada individualmente, ni @file{foo} ni @file{bar} hubieran llevado a esa | ||
| 3017 | recomendación. | ||
| 3018 | |||
| 3019 | |||
| 3020 | @item --profile=@var{perfil} | ||
| 3021 | @itemx -p @var{perfil} | ||
| 3022 | Usa @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 | ||
| 3028 | Permite colisiones de paquetes en el nuevo perfil. ¡Úselo bajo su propio | ||
| 3029 | riesgo! | ||
| 3030 | |||
| 3031 | Por defecto, @command{guix package} informa como un error las | ||
| 3032 | @dfn{colisiones} en el perfil. Las colisiones ocurren cuando dos o más | ||
| 3033 | versiones diferentes o variantes de un paquete dado se han seleccionado para | ||
| 3034 | el perfil. | ||
| 3035 | |||
| 3036 | @item --bootstrap | ||
| 3037 | Use el Guile usado para el lanzamiento para construir el perfil. Esta opción | ||
| 3038 | es util únicamente a las desarrolladoras de la distribución. | ||
| 3039 | |||
| 3040 | @end table | ||
| 3041 | |||
| 3042 | Además de estas acciones, @command{guix package} acepta las siguientes | ||
| 3043 | opciones para consultar el estado actual de un perfil, o la disponibilidad | ||
| 3044 | de paquetes: | ||
| 3045 | |||
| 3046 | @table @option | ||
| 3047 | |||
| 3048 | @item --search=@var{regexp} | ||
| 3049 | @itemx -s @var{regexp} | ||
| 3050 | @cindex buscar paquetes | ||
| 3051 | Enumera los paquetes disponibles cuyo nombre, sinopsis o descripción | ||
| 3052 | corresponde con @var{regexp} (sin tener en cuenta la capitalización), | ||
| 3053 | ordenados por relevancia. Imprime todos los metadatos de los paquetes | ||
| 3054 | coincidentes en formato @code{recutils} (@pxref{Top, GNU recutils | ||
| 3055 | databases,, recutils, GNU recutils manual}). | ||
| 3056 | |||
| 3057 | Esto permite extraer campos específicos usando la orden @command{recsel}, | ||
| 3058 | por ejemplo: | ||
| 3059 | |||
| 3060 | @example | ||
| 3061 | $ guix package -s malloc | recsel -p name,version,relevance | ||
| 3062 | name: jemalloc | ||
| 3063 | version: 4.5.0 | ||
| 3064 | relevance: 6 | ||
| 3065 | |||
| 3066 | name: glibc | ||
| 3067 | version: 2.25 | ||
| 3068 | relevance: 1 | ||
| 3069 | |||
| 3070 | name: libgc | ||
| 3071 | version: 7.6.0 | ||
| 3072 | relevance: 1 | ||
| 3073 | @end example | ||
| 3074 | |||
| 3075 | De manera similar, para mostrar el nombre de todos los paquetes disponibles | ||
| 3076 | bajo 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"' | ||
| 3080 | name: elfutils | ||
| 3081 | |||
| 3082 | name: gmp | ||
| 3083 | @dots{} | ||
| 3084 | @end example | ||
| 3085 | |||
| 3086 | Es 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 | ||
| 3088 | mesa (board en inglés): | ||
| 3089 | |||
| 3090 | @example | ||
| 3091 | $ guix package -s '\<board\>' -s game | recsel -p name | ||
| 3092 | name: gnubg | ||
| 3093 | @dots{} | ||
| 3094 | @end example | ||
| 3095 | |||
| 3096 | Si omitimos @code{-s game}, también obtendríamos paquetes de software que | ||
| 3097 | tengan que ver con placas de circuitos impresos ("circuit board" en inglés); | ||
| 3098 | borrar los signos mayor y menor alrededor de @code{board} añadiría paquetes | ||
| 3099 | que tienen que ver con teclados (keyboard en inglés). | ||
| 3100 | |||
| 3101 | Y ahora para un ejemplo más elaborado. La siguiente orden busca bibliotecas | ||
| 3102 | criptográficas, descarta bibliotecas Haskell, Perl, Python y Ruby, e imprime | ||
| 3103 | el 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 | ||
| 3112 | información en @dfn{expresiones de selección} para @code{recsel -e}. | ||
| 3113 | |||
| 3114 | @item --show=@var{paquete} | ||
| 3115 | Muestra los detalles del @var{paquete}, tomado de la lista disponible de | ||
| 3116 | paquetes, en formato @code{recutils} (@pxref{Top, GNU recutils databases,, | ||
| 3117 | recutils, GNU recutils manual}). | ||
| 3118 | |||
| 3119 | @example | ||
| 3120 | $ guix package --show=python | recsel -p name,version | ||
| 3121 | name: python | ||
| 3122 | version: 2.7.6 | ||
| 3123 | |||
| 3124 | name: python | ||
| 3125 | version: 3.3.5 | ||
| 3126 | @end example | ||
| 3127 | |||
| 3128 | Tambien puede especificar el nombre completo de un paquete para únicamente | ||
| 3129 | obtener detalles sobre una versión específica: | ||
| 3130 | @example | ||
| 3131 | $ guix package --show=python@@3.4 | recsel -p name,version | ||
| 3132 | name: python | ||
| 3133 | version: 3.4.3 | ||
| 3134 | @end example | ||
| 3135 | |||
| 3136 | |||
| 3137 | |||
| 3138 | @item --list-installed[=@var{regexp}] | ||
| 3139 | @itemx -I [@var{regexp}] | ||
| 3140 | Enumera los paquetes actualmente instalados en el perfil especificado, con | ||
| 3141 | los últimos paquetes instalados mostrados al final. Cuando se especifica | ||
| 3142 | @var{regexp}, enumera únicamente los paquetes instalados cuyos nombres son | ||
| 3143 | aceptados por @var{regexp}. | ||
| 3144 | |||
| 3145 | Por cada paquete instalado, imprime los siguientes elementos, separados por | ||
| 3146 | tabuladores: el nombre del paquete, la cadena de versión, la parte del | ||
| 3147 | paquete que está instalada (por ejemplo, @code{out} para la salida | ||
| 3148 | predeterminada, @code{include} para sus cabeceras, etc.), y la ruta de este | ||
| 3149 | paquete en el almacén. | ||
| 3150 | |||
| 3151 | @item --list-available[=@var{regexp}] | ||
| 3152 | @itemx -A [@var{regexp}] | ||
| 3153 | Enumera los paquetes disponibles actualmente en la distribución para este | ||
| 3154 | sistema (@pxref{Distribución GNU}). Cuando se especifica @var{regexp}, | ||
| 3155 | enumera únicamente paquetes instalados cuyo nombre coincide con | ||
| 3156 | @var{regexp}. | ||
| 3157 | |||
| 3158 | Por cada paquete, imprime los siguientes elementos separados por | ||
| 3159 | tabuladores: 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 | ||
| 3161 | definición. | ||
| 3162 | |||
| 3163 | @item --list-generations[=@var{patrón}] | ||
| 3164 | @itemx -l [@var{patrón}] | ||
| 3165 | @cindex generaciones | ||
| 3166 | Devuelve una lista de generaciones junto a sus fechas de creación; para cada | ||
| 3167 | generación, muestra los paquetes instalados, con los paquetes instalados más | ||
| 3168 | recientemente mostrados los últimos. Fíjese que la generación cero nunca se | ||
| 3169 | muestra. | ||
| 3170 | |||
| 3171 | Por cada paquete instalado, imprime los siguientes elementos, separados por | ||
| 3172 | tabuladores: el nombre de un paquete, su cadena de versión, la parte del | ||
| 3173 | paquete que está instalada (@pxref{Paquetes con múltiples salidas}), y la | ||
| 3174 | ruta de este paquete en el almacén. | ||
| 3175 | |||
| 3176 | Cuando se usa @var{patrón}, la orden devuelve únicamente las generaciones | ||
| 3177 | que se ajustan al patrón. Patrones válidos incluyen: | ||
| 3178 | |||
| 3179 | @itemize | ||
| 3180 | @item @emph{Enteros y enteros separados por comas}. Ambos patrones denotan | ||
| 3181 | números de generación. Por ejemplo, @code{--list-generations=1} devuelve la | ||
| 3182 | primera. | ||
| 3183 | |||
| 3184 | Y @code{--list-generations=1,8,2} devuelve las tres generaciones en el orden | ||
| 3185 | especificado. No se permiten ni espacios ni una coma al final. | ||
| 3186 | |||
| 3187 | @item @emph{Rangos}. @code{--list-generations=2..9} imprime | ||
| 3188 | las generaciones especificadas y todas las intermedias. Fíjese que el inicio | ||
| 3189 | de un rango debe ser menor a su fin. | ||
| 3190 | |||
| 3191 | También es posible omitir el destino final. Por ejemplo, | ||
| 3192 | @code{--list-generations=2..} devuelve todas las generaciones empezando por | ||
| 3193 | la segunda. | ||
| 3194 | |||
| 3195 | @item @emph{Duraciones}. Puede también obtener los últimos @emph{N}@tie{}días, semanas, | ||
| 3196 | o meses pasando un entero junto a la primera letra de la duración. Por | ||
| 3197 | ejemplo, @code{--list-generations=20d} enumera las generaciones que tienen | ||
| 3198 | hasta 20 días de antigüedad. | ||
| 3199 | @end itemize | ||
| 3200 | |||
| 3201 | @item --delete-generations[=@var{patrón}] | ||
| 3202 | @itemx -d [@var{patrón}] | ||
| 3203 | Cuando se omite @var{patrón}, borra todas las generaciones excepto la | ||
| 3204 | actual. | ||
| 3205 | |||
| 3206 | Esta orden acepta los mismos patrones que | ||
| 3207 | @option{--list-generations}. Cuando se especifica un @var{patrón}, borra las | ||
| 3208 | generaciones coincidentes. Cuando el @var{patrón} especifica una duración, | ||
| 3209 | las generaciones @emph{más antiguas} que la duración especificada son las | ||
| 3210 | borradas. Por ejemplo, @code{--delete-generations=1m} borra las generaciones | ||
| 3211 | de más de un mes de antigüedad. | ||
| 3212 | |||
| 3213 | Si la generación actual entra en el patrón, @emph{no} es borrada. Tampoco la | ||
| 3214 | generación cero es borrada nunca. | ||
| 3215 | |||
| 3216 | Fíjese que borrar generaciones previene volver atrás a | ||
| 3217 | ellas. Consecuentemente esta orden debe ser usada con cuidado. | ||
| 3218 | |||
| 3219 | @end table | ||
| 3220 | |||
| 3221 | Finalmente, ya que @command{guix package} puede lanzar procesos de | ||
| 3222 | construcció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 | ||
| 3224 | paquetes, como @option{--with-source} (@pxref{Opciones de transformación de paquetes}). No obstante, fíjese que las transformaciones del paquete se | ||
| 3225 | pierden al actualizar; para preservar las transformaciones entre | ||
| 3226 | actualizaciones, debe definir su propia variante del paquete en un módulo | ||
| 3227 | Guile 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 | ||
| 3234 | Guix permite despliegues transparentes de fuentes/binarios, lo que significa | ||
| 3235 | que puede tanto construir cosas localmente, como descargar elementos | ||
| 3236 | preconstruidos de un servidor, o ambas. Llamamos a esos elementos | ||
| 3237 | preconstruidos @dfn{sustituciones}---son sustituciones de los resultados de | ||
| 3238 | construcciones locales. En muchos casos, descargar una sustitución es mucho | ||
| 3239 | más rápido que construirla localmente. | ||
| 3240 | |||
| 3241 | Las sustituciones pueden ser cualquier cosa que resulte de una construcción | ||
| 3242 | de una derivación (@pxref{Derivaciones}). Por supuesto, en el caso común, son | ||
| 3243 | paquetes binarios preconstruidos, pero los archivos de fuentes, por ejemplo, | ||
| 3244 | que también resultan de construcciones de derivaciones, pueden estar | ||
| 3245 | disponibles 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 | ||
| 3266 | El servidor @code{@value{SUBSTITUTE-SERVER}} es una fachada a una granja de | ||
| 3267 | construcción oficial que construye paquetes de Guix continuamente para | ||
| 3268 | algunas arquitecturas, y los pone disponibles como sustituciones. Esta es la | ||
| 3269 | fuente predeterminada de sustituciones; puede ser forzada a cambiar pasando | ||
| 3270 | la opción @option{--substitute-urls} bien a @command{guix-daemon} | ||
| 3271 | (@pxref{daemon-substitute-urls,, @code{guix-daemon --substitute-urls}}) o | ||
| 3272 | bien a herramientas cliente como @command{guix package} | ||
| 3273 | (@pxref{client-substitute-urls,, client @option{--substitute-urls} option}). | ||
| 3274 | |||
| 3275 | Las URLs de sustituciones pueden ser tanto HTTP como HTTPS. Se recomienda | ||
| 3276 | HTTPS porque las comunicaciones están cifradas; de modo contrario, usar HTTP | ||
| 3277 | hace visibles todas las comunicaciones para alguien que las intercepte, | ||
| 3278 | quien puede usar la información obtenida para determinar, por ejemplo, si su | ||
| 3279 | sistema tiene vulnerabilidades de seguridad sin parchear. | ||
| 3280 | |||
| 3281 | Las sustituciones de la granja de construcción oficial están habilitadas por | ||
| 3282 | defecto cuando se usa la Distribución de sistema Guix (@pxref{Distribución GNU}). No obstante, están deshabilitadas por defecto cuando se usa | ||
| 3283 | Guix en una distribución anfitriona, a menos que las haya habilitado | ||
| 3284 | explícitamente via uno de los pasos recomendados de instalación | ||
| 3285 | (@pxref{Instalación}). Los siguientes párrafos describen como habilitar o | ||
| 3286 | deshabilitar sustituciones para la granja oficial de construcción; el mismo | ||
| 3287 | procedimiento puede usarse para habilitar sustituciones de cualquier otro | ||
| 3288 | servidor 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 | ||
| 3297 | Para permitir a Guix descargar sustituciones de | ||
| 3298 | @code{@value{SUBSTITUTE-SERVER}} o un espejo suyo, debe añadir su clave | ||
| 3299 | pública a la lista de control de acceso (ACL) de las importaciones de | ||
| 3300 | archivos, 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 | ||
| 3303 | sustituciones genuinas. | ||
| 3304 | |||
| 3305 | La clave pública para @code{@value{SUBSTITUTE-SERVER}} se instala junto a | ||
| 3306 | Guix, en @code{@var{prefijo}/share/guix/@value{SUBSTITUTE-SERVER}.pub}, | ||
| 3307 | donde @var{prefijo} es el prefij de instalación de Guix. Si ha instalado | ||
| 3308 | Guix 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 | ||
| 3310 | pú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 | ||
| 3317 | De manera similar, el fichero @file{hydra.gnu.org.pub} contiene la clave | ||
| 3318 | pública para una granja de construcción independiente que también es parte | ||
| 3319 | del proyecto, la cual se puede encontrar en | ||
| 3320 | @indicateurl{https://mirror.hydra.gnu.org}. | ||
| 3321 | @end quotation | ||
| 3322 | |||
| 3323 | Una vez esté autorizada, la salida de una orden como @code{guix build} | ||
| 3324 | debería cambiar de algo como: | ||
| 3325 | |||
| 3326 | @example | ||
| 3327 | $ guix build emacs --dry-run | ||
| 3328 | The 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 | ||
| 3337 | a algo así: | ||
| 3338 | |||
| 3339 | @example | ||
| 3340 | $ guix build emacs --dry-run | ||
| 3341 | 112.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 | ||
| 3350 | Esto indica que las sustituciones de @code{@value{SUBSTITUTE-SERVER}} son | ||
| 3351 | usables y serán descargadas, cuando sea posible, para construcciones | ||
| 3352 | futuras. | ||
| 3353 | |||
| 3354 | @cindex sustituciones, cómo deshabilitarlas | ||
| 3355 | El 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 | ||
| 3357 | opción @code{--no-substitutes} a @command{guix package}, @command{guix | ||
| 3358 | build} 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 | ||
| 3364 | Guix detecta y emite errores cuando se intenta usar una sustitución que ha | ||
| 3365 | sido adulterado. Del mismo modo, ignora las sustituciones que no están | ||
| 3366 | firmadas, o que no están firmadas por una de las firmas enumeradas en la | ||
| 3367 | ACL. | ||
| 3368 | |||
| 3369 | No obstante hay una excepción: si un servidor no autorizado proporciona | ||
| 3370 | sustituciones que son @emph{idénticas bit-a-bit} a aquellas proporcionadas | ||
| 3371 | por un servidor autorizado, entonces el servidor no autorizado puede ser | ||
| 3372 | usado para descargas. Por ejemplo, asumiendo que hemos seleccionado dos | ||
| 3373 | servidores 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 | ||
| 3381 | Si 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} | ||
| 3383 | sustituciones, Guix descargará sustituciones de @code{a.example.org} porque | ||
| 3384 | viene 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 | ||
| 3386 | independientes producen habitualmente los mismos binarios, gracias a las | ||
| 3387 | construcciones reproducibles bit-a-bit (véase a continuación). | ||
| 3388 | |||
| 3389 | Cuando 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 | ||
| 3391 | comportamiento habitual de los navegadores Web. Esto es debido a que Guix | ||
| 3392 | verifica la información misma de las sustituciones, como se ha explicado | ||
| 3393 | anteriormente, lo cual nos concierne (mientras que los certificados X.509 | ||
| 3394 | tratan de verificar las conexiones entre nombres de dominio y claves | ||
| 3395 | públicas). | ||
| 3396 | |||
| 3397 | @node Configuración de la pasarela. | ||
| 3398 | @subsection Configuración de la pasarela. | ||
| 3399 | |||
| 3400 | @vindex http_proxy | ||
| 3401 | Las 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} | ||
| 3403 | y 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 | ||
| 3405 | package} y otras aplicaciones cliente se ejecuten @emph{no tiene ningún | ||
| 3406 | efecto}. | ||
| 3407 | |||
| 3408 | @node Fallos en las sustituciones | ||
| 3409 | @subsection Fallos en las sustituciones | ||
| 3410 | |||
| 3411 | Incluso cuando una sustitución de una derivación está disponible, a veces el | ||
| 3412 | intento de sustitución puede fallar. Esto puede suceder por varias razones: | ||
| 3413 | el servidor de sustituciones puede estar desconectado, la sustitución puede | ||
| 3414 | haber sido borrada, la conexión puede interrumpirse, etc. | ||
| 3415 | |||
| 3416 | Cuando las sustituciones están activadas y una sustitución para una | ||
| 3417 | derivación está disponible, pero el intento de sustitución falla, Guix | ||
| 3418 | intentará construir la derivación localmente dependiendo si se proporcionó | ||
| 3419 | la opción @code{--fallback} (@pxref{fallback-option,, common build option | ||
| 3420 | @code{--fallback}}). Específicamente, si no se pasó @code{--fallback}, no se | ||
| 3421 | realizarán construcciones locales, y la derivación se considera se considera | ||
| 3422 | fallida. No obstante, si se pasó @code{--fallback}, Guix intentará construir | ||
| 3423 | la 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 | ||
| 3425 | sustituciones están deshabilitadas o no hay sustituciones disponibles para | ||
| 3426 | la 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 | |||
| 3430 | Para hacerse una idea de cuantas sustituciones hay disponibles en este | ||
| 3431 | momento, puede intentar ejecutar la orden @command{guix weather} | ||
| 3432 | (@pxref{Invocación de guix weather}). Esta orden proporciona estadísticas de las | ||
| 3433 | sustituciones 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 | ||
| 3439 | Hoy en día, el control individual sobre nuestra propia computación está a | ||
| 3440 | merced de instituciones, empresas y grupos con suficiente poder y | ||
| 3441 | determinación para subvertir la infraestructura de computación y explotar | ||
| 3442 | sus vulnerabilidades. Mientras que usar las sustituciones de | ||
| 3443 | @code{@value{SUBSTITUTE-SERVER}} puede ser conveniente, recomendamos a las | ||
| 3444 | usuarias también construir sus paquetes, o incluso mantener su propia granja | ||
| 3445 | de construcción, de modo que @code{@value{SUBSTITUTE-SERVER}} sea un | ||
| 3446 | objetivo menos interesante. Una manera de ayudar es publicando el software | ||
| 3447 | que construya usando @command{guix publish} de modo que otras tengan otro | ||
| 3448 | servidor más como opción para descargar sustituciones (@pxref{Invocación de guix publish}). | ||
| 3449 | |||
| 3450 | Guix tiene los cimientos para maximizar la reproducibilidad de las | ||
| 3451 | construcciones (@pxref{Características}). En la mayor parte de los casos, | ||
| 3452 | construcciones independientes de un paquete o derivación dada deben emitir | ||
| 3453 | resultados idénticos bit a bit. Por tanto, a través de un conjunto diverso | ||
| 3454 | de construcciones independientes de paquetes, podemos reforzar la integridad | ||
| 3455 | de nuestros sistemas. La orden @command{guix challenge} intenta ayudar a las | ||
| 3456 | usuarias en comprobar servidores de sustituciones, y asiste a las | ||
| 3457 | desarrolladoras encontrando construcciones no deterministas de paquetes | ||
| 3458 | (@pxref{Invocación de guix challenge}). Similarmente, la opción @option{--check} | ||
| 3459 | de @command{guix build} permite a las usuarias si las sustituciones | ||
| 3460 | previamente instaladas son genuinas reconstruyendolas localmente | ||
| 3461 | (@pxref{build-check, @command{guix build --check}}). | ||
| 3462 | |||
| 3463 | En el futuro, queremos que Guix permita la publicación y obtención de | ||
| 3464 | binarios hacia/desde otras usuarias, entre pares (P2P). En caso de | ||
| 3465 | interesarle 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 | |||
| 3475 | Habitualmente, los paquetes definidos en Guix tienen una @dfn{salida} | ||
| 3476 | única---es decir, el paquete de fuentes proporcionará exactamente un | ||
| 3477 | directorio en el almacén. Cuando se ejecuta @command{guix package -i glibc}, | ||
| 3478 | se instala la salida predeterminada del paquete GNU libc; la salida | ||
| 3479 | predeterminada se llama @code{out}, pero su nombre puede omitirse como se | ||
| 3480 | mostró en esta orden. En este caso particular, la salida predeterminada de | ||
| 3481 | @code{glibc} contiene todos ficheros de cabecera C, bibliotecas dinámicas, | ||
| 3482 | bibliotecas estáticas, documentación Info y otros ficheros auxiliares. | ||
| 3483 | |||
| 3484 | A veces es más apropiado separar varios tipos de ficheros producidos por un | ||
| 3485 | paquete único de fuentes en salidas separadas. Por ejemplo, la biblioteca C | ||
| 3486 | GLib (usada por GTK+ y paquetes relacionados) instala más de 20 MiB de | ||
| 3487 | documentación de referencia como páginas HTML. Para ahorrar espacio para | ||
| 3488 | usuarias que no la necesiten, la documentación va a una salida separada, | ||
| 3489 | llamada @code{doc}. Para instalar la salida principal de GLib, que contiene | ||
| 3490 | todo menos la documentación, se debe ejecutar: | ||
| 3491 | |||
| 3492 | @example | ||
| 3493 | guix package -i glib | ||
| 3494 | @end example | ||
| 3495 | |||
| 3496 | @cindex documentación | ||
| 3497 | La orden que instala su documentación es: | ||
| 3498 | |||
| 3499 | @example | ||
| 3500 | guix package -i glib:doc | ||
| 3501 | @end example | ||
| 3502 | |||
| 3503 | Algunos paquetes instalan programas con diferentes ``huellas de | ||
| 3504 | dependencias''. Por ejemplo, el paquete WordNet instala tanto herramientas | ||
| 3505 | de línea de órdenes como interfaces gráficas de usuaria (IGU). Las primeras | ||
| 3506 | dependen únicamente de la biblioteca de C, mientras que las últimas dependen | ||
| 3507 | en Tcl/Tk y las bibliotecas de X subyacentes. En este caso, dejamos las | ||
| 3508 | herramientas de línea de órdenes en la salida predeterminada, mientras que | ||
| 3509 | las IGU están en una salida separada. Esto permite a las usuarias que no | ||
| 3510 | necesitan una IGU ahorrar espacio. La orden @command{guix size} puede ayudar | ||
| 3511 | a exponer estas situaciones (@pxref{Invocación de guix size}). @command{guix | ||
| 3512 | graph} también puede ser útil (@pxref{Invocación de guix graph}). | ||
| 3513 | |||
| 3514 | Hay varios de estos paquetes con salida múltiple en la distribución | ||
| 3515 | GNU. Otros nombres de salida convencionales incluyen @code{lib} para | ||
| 3516 | bibliotecas y posiblemente ficheros de cabecera, @code{bin} para programas | ||
| 3517 | independientes 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 | ||
| 3519 | en 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 | ||
| 3528 | Los paquetes instalados, pero no usados, pueden ser @dfn{recolectados}. La | ||
| 3529 | orden @command{guix gc} permite a las usuarias ejecutar explícitamente el | ||
| 3530 | recolector de basura para reclamar espacio del directorio | ||
| 3531 | @file{/gnu/store}---¡borrar ficheros o directorios manualmente puede dañar | ||
| 3532 | el almacén sin reparación posible! | ||
| 3533 | |||
| 3534 | @cindex GC, raíces del recolector de basura | ||
| 3535 | @cindex raíces del recolector de basura | ||
| 3536 | El recolector de basura tiene un conjunto de @dfn{raíces} conocidas: | ||
| 3537 | cualquier fichero en @file{/gnu/store} alcanzable desde una raíz se | ||
| 3538 | considera @dfn{vivo} y no puede ser borrado; cualquier otro fichero se | ||
| 3539 | considera @dfn{muerto} y puede ser borrado. El conjunto de raíces del | ||
| 3540 | recolector de basura (``raíces del GC'' para abreviar) incluye los perfiles | ||
| 3541 | predeterminados de las usuarias; por defecto los enlaces bajo | ||
| 3542 | @file{/var/guix/gcroots} representan dichas raíces. Por ejemplo, nuevas | ||
| 3543 | raí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 | ||
| 3545 | enumera. | ||
| 3546 | |||
| 3547 | Antes de ejecutar @code{guix gc --collect-garbage} para liberar espacio, | ||
| 3548 | habitualmente es útil borrar generaciones antiguas de los perfiles de | ||
| 3549 | usuaria; de ese modo, las construcciones antiguas de paquetes referenciadas | ||
| 3550 | por dichas generaciones puede ser reclamada. Esto se consigue ejecutando | ||
| 3551 | @code{guix package --delete-generations} (@pxref{Invocación de guix package}). | ||
| 3552 | |||
| 3553 | Nuestra recomendación es ejecutar una recolección de basura periódicamente, | ||
| 3554 | o cuando tenga poco espacio en el disco. Por ejemplo, para garantizar que al | ||
| 3555 | menos 5@tie{}GB están disponibles en su disco, simplemente ejecute: | ||
| 3556 | |||
| 3557 | @example | ||
| 3558 | guix gc -F 5G | ||
| 3559 | @end example | ||
| 3560 | |||
| 3561 | Es 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 | ||
| 3563 | tipo). La ejecución de @command{guix gc} sin ningún parámetro recolectará | ||
| 3564 | tanta basura como se pueda, pero eso es no es normalmente conveniente: puede | ||
| 3565 | encontrarse teniendo que reconstruir o volviendo a bajar software que está | ||
| 3566 | ``muerto'' desde el punto de vista del recolector pero que es necesario para | ||
| 3567 | construir otras piezas de software---por ejemplo, la cadena de herramientas | ||
| 3568 | de compilación. | ||
| 3569 | |||
| 3570 | La orden @command{guix gc} tiene tres modos de operación: puede ser usada | ||
| 3571 | para recolectar ficheros muertos (predeterminado), para borrar ficheros | ||
| 3572 | específicos (la opción @code{--delete}), para mostrar información sobre la | ||
| 3573 | recolección de basura o para consultas más avanzadas. Las opciones de | ||
| 3574 | recolección de basura son las siguientes: | ||
| 3575 | |||
| 3576 | @table @code | ||
| 3577 | @item --collect-garbage[=@var{min}] | ||
| 3578 | @itemx -C [@var{min}] | ||
| 3579 | Recolecta basura---es decir, ficheros no alcanzables de @file{/gnu/store} y | ||
| 3580 | subdirectorios. Esta operación es la predeterminada cuando no se especifican | ||
| 3581 | opciones. | ||
| 3582 | |||
| 3583 | Cuando se proporciona @var{min}, para una vez que @var{min} bytes han sido | ||
| 3584 | recolectados. @var{min} puede ser un número de bytes, o puede incluir una | ||
| 3585 | unidad como sufijo, como @code{MiB} para mebibytes y @code{GB} para | ||
| 3586 | gigabytes (@pxref{Block size, size specifications,, coreutils, GNU | ||
| 3587 | Coreutils}). | ||
| 3588 | |||
| 3589 | Cuando se omite @var{min}, recolecta toda la basura. | ||
| 3590 | |||
| 3591 | @item --free-space=@var{libre} | ||
| 3592 | @itemx -F @var{libre} | ||
| 3593 | Recolecta basura hasta que haya espacio @var{libre} bajo @file{/gnu/store}, | ||
| 3594 | si es posible: @var{libre} denota espacio de almacenamiento, por ejemplo | ||
| 3595 | @code{500MiB}, como se ha descrito previamente. | ||
| 3596 | |||
| 3597 | Cuando @var{libre} o más está ya disponible en @file{/gnu/store}, no hace | ||
| 3598 | nada y sale inmediatamente. | ||
| 3599 | |||
| 3600 | @item --delete-generations[=@var{duración}] | ||
| 3601 | @itemx -d [@var{duración}] | ||
| 3602 | Antes de comenzar el proceso de recolección de basura, borra todas las | ||
| 3603 | generaciones anteriores a @var{duración}, para todos los perfiles de la | ||
| 3604 | usuaria; cuando se ejecuta como root esto aplica a los perfiles de | ||
| 3605 | @emph{todas las usuarias}. | ||
| 3606 | |||
| 3607 | Por ejemplo, esta orden borra todas las generaciones de todos sus perfiles | ||
| 3608 | que tengan más de 2 meses de antigüedad (excepto generaciones que sean las | ||
| 3609 | actuales), y una vez hecho procede a liberar espacio hasta que al menos 10 | ||
| 3610 | GiB estén disponibles: | ||
| 3611 | |||
| 3612 | @example | ||
| 3613 | guix gc -d 2m -F 10G | ||
| 3614 | @end example | ||
| 3615 | |||
| 3616 | @item --delete | ||
| 3617 | @itemx -D | ||
| 3618 | Intenta borrar todos los ficheros del almacén y directorios especificados | ||
| 3619 | como parámetros. Esto falla si alguno de los ficheros no están en el | ||
| 3620 | almacén, o todavía están vivos. | ||
| 3621 | |||
| 3622 | @item --list-failures | ||
| 3623 | Enumera los elementos del almacén correspondientes a construcciones fallidas | ||
| 3624 | existentes en la caché. | ||
| 3625 | |||
| 3626 | Esto 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 | ||
| 3631 | Enumera las raices del recolector de basura poseidas por la usuaria; cuando | ||
| 3632 | se ejecuta como root, enumera @emph{todas} las raices del recolector de | ||
| 3633 | basura. | ||
| 3634 | |||
| 3635 | @item --clear-failures | ||
| 3636 | Borra los elementos especificados del almacén de la caché de construcciones | ||
| 3637 | fallidas. | ||
| 3638 | |||
| 3639 | De nuevo, esta opción únicamente tiene sentido cuando el daemon se inicia | ||
| 3640 | con @option{--cache-failures}. De otro modo, no hace nada. | ||
| 3641 | |||
| 3642 | @item --list-dead | ||
| 3643 | Muestra la lista de ficheros y directorios muertos todavía presentes en el | ||
| 3644 | almacén---es decir, ficheros y directorios que ya no se pueden alcanzar | ||
| 3645 | desde ninguna raíz. | ||
| 3646 | |||
| 3647 | @item --list-live | ||
| 3648 | Muestra la lista de ficheros y directorios del almacén vivos. | ||
| 3649 | |||
| 3650 | @end table | ||
| 3651 | |||
| 3652 | Además, las referencias entre los ficheros del almacén pueden ser | ||
| 3653 | consultadas: | ||
| 3654 | |||
| 3655 | @table @code | ||
| 3656 | |||
| 3657 | @item --references | ||
| 3658 | @itemx --referrers | ||
| 3659 | @cindex dependencias de un paquete | ||
| 3660 | Enumera las referencias (o, respectivamente, los referentes) de los ficheros | ||
| 3661 | del almacén pasados como parámetros. | ||
| 3662 | |||
| 3663 | @item --requisites | ||
| 3664 | @itemx -R | ||
| 3665 | @cindex clausura | ||
| 3666 | Enumera los requistos los ficheros del almacén pasados como parámetros. Los | ||
| 3667 | requisitos incluyen los mismos ficheros del almacén, sus referencias, las | ||
| 3668 | referencias de estas, recursivamente. En otras palabras, la lista devuelta | ||
| 3669 | es 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 | ||
| 3672 | clausura de un elemento. @xref{Invocación de guix graph}, para una herramienta de | ||
| 3673 | visualización del grafo de referencias. | ||
| 3674 | |||
| 3675 | @item --derivers | ||
| 3676 | @cindex derivación | ||
| 3677 | Devuelve la/s derivación/es que conducen a los elementos del almacén dados | ||
| 3678 | (@pxref{Derivaciones}). | ||
| 3679 | |||
| 3680 | Por ejemplo, esta orden: | ||
| 3681 | |||
| 3682 | @example | ||
| 3683 | guix gc --derivers `guix package -I ^emacs$ | cut -f4` | ||
| 3684 | @end example | ||
| 3685 | |||
| 3686 | @noindent | ||
| 3687 | devuelve el/los fichero/s @file{.drv} que conducen al paquete @code{emacs} | ||
| 3688 | instalado en su perfil. | ||
| 3689 | |||
| 3690 | Fíjese que puede haber cero ficheros @file{.drv} encontrados, por ejemplo | ||
| 3691 | porque 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 | |||
| 3695 | Por último, las siguientes opciones le permiten comprobar la integridad del | ||
| 3696 | almacé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 | ||
| 3703 | Verifica la integridad del almacén. | ||
| 3704 | |||
| 3705 | Por defecto, comprueba que todos los elementos del almacén marcados como | ||
| 3706 | válidos en la base de datos del daemon realmente existen en | ||
| 3707 | @file{/gnu/store}. | ||
| 3708 | |||
| 3709 | Cuando se proporcionan, @var{opciones} debe ser una lista separada por comas | ||
| 3710 | que contenga uno o más valores @code{contents} and @code{repair}. | ||
| 3711 | |||
| 3712 | Cuando se usa @option{--verify=contents}, el daemon calcula el hash del | ||
| 3713 | contenido de cada elemento del almacén y lo compara contra el hash de su | ||
| 3714 | base de datos. Las incongruencias se muestran como corrupciones de | ||
| 3715 | datos. Debido a que recorre @emph{todos los ficheros del almacén}, esta | ||
| 3716 | orden puede tomar mucho tiempo, especialmente en sistemas con una unidad de | ||
| 3717 | disco lenta. | ||
| 3718 | |||
| 3719 | @cindex reparar el almacén | ||
| 3720 | @cindex corrupción, recuperarse de | ||
| 3721 | El uso de @option{--verify=repair} o @option{--verify=contents,repair} hace | ||
| 3722 | que el daemon intente reparar elementos corruptos del almacén obteniendo | ||
| 3723 | sustituciones para dichos elementos (@pxref{Sustituciones}). Debido a que la | ||
| 3724 | reparación no es atómica, y por tanto potencialmente peligrosa, está | ||
| 3725 | disponible únicamente a la administradora del sistema. Una alternativa | ||
| 3726 | ligera, cuando sabe exactamente qué elementos del almacén están corruptos, | ||
| 3727 | es @command{guix build --repair} (@pxref{Invocación de guix build}). | ||
| 3728 | |||
| 3729 | @item --optimize | ||
| 3730 | @cindex deduplicación | ||
| 3731 | Optimiza el almacén sustituyendo ficheros idénticos por enlaces duros---esto | ||
| 3732 | es la @dfn{deduplicación}. | ||
| 3733 | |||
| 3734 | El daemon realiza la deduplicación después de cada construcción | ||
| 3735 | satisfactoria 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 | ||
| 3738 | primariamente 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 | ||
| 3750 | Los paquetes se instalan o actualizan con la última versión disponible en la | ||
| 3751 | distribución disponible actualmente en su máquina local. Para actualizar | ||
| 3752 | dicha 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 | ||
| 3754 | descripciones de paquetes, y lo despliega. El código fuente se descarga de | ||
| 3755 | un repositorio @uref{https://git-scm.com, Git}, por defecto el repositorio | ||
| 3756 | oficial de GNU@tie{}Guix, lo que no obstante puede ser personalizado. | ||
| 3757 | |||
| 3758 | Una vez completada, @command{guix package} usará paquetes y versiones de | ||
| 3759 | paquetes de esta copia recién obtenida de Guix. No solo eso, sino que todas | ||
| 3760 | las órdenes de Guix y los módulos Scheme también se tomarán de la última | ||
| 3761 | versión. Nuevas sub-órdenes @command{guix} incorporadas por la actualización | ||
| 3762 | también estarán disponibles. | ||
| 3763 | |||
| 3764 | Cualquier usuaria puede actualizar su copia de Guix usando @command{guix | ||
| 3765 | pull}, y el efecto está limitado a la usuaria que ejecutó @command{guix | ||
| 3766 | pull}. Por ejemplo, cuando la usuaria @code{root} ejecuta @command{guix | ||
| 3767 | pull}, esto no tiene ningún efecto en la versión del Guix que la usuaria | ||
| 3768 | @code{alicia} ve, y viceversa. | ||
| 3769 | |||
| 3770 | El resultado de ejecutar @command{guix pull} es un @dfn{perfil} disponible | ||
| 3771 | bajo @file{~/.config/guix/current} conteniendo el último Guix. Por tanto, | ||
| 3772 | asegurese 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 | ||
| 3776 | export PATH="$HOME/.config/guix/current/bin:$PATH" | ||
| 3777 | export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH" | ||
| 3778 | @end example | ||
| 3779 | |||
| 3780 | Las opciones @code{--list-generations} o @code{-l} enumeran las generaciones | ||
| 3781 | pasadas producidas por @command{guix pull}, junto a detalles de su | ||
| 3782 | procedencia: | ||
| 3783 | |||
| 3784 | @example | ||
| 3785 | $ guix pull -l | ||
| 3786 | Generation 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 | |||
| 3792 | Generation 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 | |||
| 3802 | Generation 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 | ||
| 3812 | describir el estado actual de Guix. | ||
| 3813 | |||
| 3814 | El perfil @code{~/.config/guix/current} funciona como cualquier otro perfil | ||
| 3815 | creado por @command{guix package} (@pxref{Invocación de guix package}). Esto es, | ||
| 3816 | puede enumerar generaciones, volver a una generación previa---es decir, el | ||
| 3817 | Guix anterior---y más: | ||
| 3818 | |||
| 3819 | @example | ||
| 3820 | $ guix package -p ~/.config/guix/current --roll-back | ||
| 3821 | switched from generation 3 to 2 | ||
| 3822 | $ guix package -p ~/.config/guix/current --delete-generations=1 | ||
| 3823 | deleting /var/guix/profiles/per-user/carlos/current-guix-1-link | ||
| 3824 | @end example | ||
| 3825 | |||
| 3826 | La orden @command{guix pull} se invoca habitualmente sin parámetros, pero | ||
| 3827 | permite las siguientes opciones: | ||
| 3828 | |||
| 3829 | @table @code | ||
| 3830 | @item --url=@var{url} | ||
| 3831 | @itemx --commit=@var{revisión} | ||
| 3832 | @itemx --branch=@var{rama} | ||
| 3833 | Download code for the @code{guix} channel from the specified @var{url}, at | ||
| 3834 | the given @var{commit} (a valid Git commit ID represented as a hexadecimal | ||
| 3835 | string), or @var{branch}. | ||
| 3836 | |||
| 3837 | @cindex @file{channels.scm}, fichero de configuración | ||
| 3838 | @cindex fichero de configuración de canales | ||
| 3839 | Estas opciones se proporcionan por conveniencia, pero también puede | ||
| 3840 | especificar 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} | ||
| 3846 | Lee la lista de canales de @var{fichero} en vez de | ||
| 3847 | @file{~/.config/guix/channels.scm}. @var{fichero} debe contener código | ||
| 3848 | Scheme que evalue a una lista de objetos channel. @xref{Canales}, para más | ||
| 3849 | información. | ||
| 3850 | |||
| 3851 | @item --news | ||
| 3852 | @itemx -N | ||
| 3853 | Display the list of packages added or upgraded since the previous | ||
| 3854 | generation. | ||
| 3855 | |||
| 3856 | This is the same information as displayed upon @command{guix pull} | ||
| 3857 | completion, 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}] | ||
| 3862 | Enumera todas las generaciones de @file{~/.config/guix/current} o, si se | ||
| 3863 | proporciona un @var{patrón}, el subconjunto de generaciones que correspondan | ||
| 3864 | con el @var{patrón}. La sintaxis de @var{patrón} es la misma que @code{guix | ||
| 3865 | package --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} | ||
| 3872 | Usa @var{perfil} en vez de @file{~/.config/guix/current}. | ||
| 3873 | |||
| 3874 | @item --dry-run | ||
| 3875 | @itemx -n | ||
| 3876 | Muestra qué revisión/es del canal serían usadas y qué se construiría o | ||
| 3877 | sustituiría, sin efectuar ninguna acción real. | ||
| 3878 | |||
| 3879 | @item --system=@var{sistema} | ||
| 3880 | @itemx -s @var{sistema} | ||
| 3881 | Intenta construir paquetes para @var{sistema}---por ejemplo, | ||
| 3882 | @code{x86_64-linux}---en vez del tipo de sistema de la máquina de | ||
| 3883 | construcción. | ||
| 3884 | |||
| 3885 | @item --verbose | ||
| 3886 | Produce salida prolija, escribiendo los logs de construcción por la salida | ||
| 3887 | de error estándar. | ||
| 3888 | |||
| 3889 | @item --bootstrap | ||
| 3890 | Use el Guile usado para el lanzamiento para construir el último Guix. Esta | ||
| 3891 | opción es útil para las desarrolladoras de Guix únicamente. | ||
| 3892 | @end table | ||
| 3893 | |||
| 3894 | El mecanismo de @dfn{canales} le permite instruir a @command{guix pull} de | ||
| 3895 | qué repositorio y rama obtener los datos, así como repositorios | ||
| 3896 | @emph{adicionales} que contengan módulos de paquetes que deben ser | ||
| 3897 | desplegados. @xref{Canales}, para más información. | ||
| 3898 | |||
| 3899 | Además, @command{guix pull} acepta todas las opciones de construcción | ||
| 3900 | comunes (@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} | ||
| 3910 | Guix y su colección de paquetes son actualizados ejecutando @command{guix | ||
| 3911 | pull} (@pxref{Invocación de guix pull}). Por defecto @command{guix pull} descarga | ||
| 3912 | y despliega el mismo Guix del repositorio oficial de GNU@tie{}Guix. Esto | ||
| 3913 | puede ser personalizado definiendo @dfn{canales} en el fichero | ||
| 3914 | @file{~/.config/guix/channels.scm}. Un canal especifica una URL y una rama | ||
| 3915 | de un repositorio Git para ser desplegado, y @command{guix pull} puede ser | ||
| 3916 | instruido para tomar los datos de uno o más canales. En otras palabras, los | ||
| 3917 | canales se pueden usar para @emph{personalizar} y para @emph{extender} Guix, | ||
| 3918 | como vemos a continuación. | ||
| 3919 | |||
| 3920 | @subsection Uso de un canal de Guix personalizado | ||
| 3921 | |||
| 3922 | El canal llamado @code{guix} especifica de donde el mismo Guix---sus | ||
| 3923 | herramientas de línea de órdenes y su colección de paquetes---debe ser | ||
| 3924 | descargado. Por ejemplo, suponga que quiere actualizar de su propia copia | ||
| 3925 | del 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 | ||
| 3938 | De 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 | ||
| 3946 | También puede especificar @emph{canales adicionales} de los que obtener | ||
| 3947 | datos. Digamos que tiene un montón de variaciones personalizadas de paquetes | ||
| 3948 | que piensa que no tiene mucho sentido contribuir al proyecto Guix, pero | ||
| 3949 | quiere tener esos paquetes disponibles transparentemente en su línea de | ||
| 3950 | órdenes. Primero escribiría módulos que contengan esas definiciones de | ||
| 3951 | paquete (@pxref{Módulos de paquetes}), los mantendría en un repositorio Git, y | ||
| 3952 | entonces usted y cualquier otra persona podría usarlos como un canal | ||
| 3953 | adicional 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 | ||
| 3959 | Antes de que, querida usuaria, grite---``¡Guau, esto es @emph{la | ||
| 3960 | caña}!''---y publique su canal personal al mundo, nos gustaría compartir | ||
| 3961 | algunas palabras de precaución: | ||
| 3962 | |||
| 3963 | @itemize | ||
| 3964 | @item | ||
| 3965 | Antes de publicar un canal, por favor considere contribuir sus definiciones | ||
| 3966 | de paquete al propio Guix (@pxref{Contribuir}). Guix como proyecto es | ||
| 3967 | abierto a software libre de todo tipo, y los paquetes en el propio Guix | ||
| 3968 | están disponibles para todas las usuarias de Guix y se benefician del | ||
| 3969 | proceso de gestión de calidad del proyecto. | ||
| 3970 | |||
| 3971 | @item | ||
| 3972 | Cuando mantiene definiciones de paquete fuera de Guix, nosotras, las | ||
| 3973 | desarrolladoras de Guix, consideramos que @emph{la carga de la | ||
| 3974 | compatibilidad cae de su lado}. Recuerde que los módulos y definiciones de | ||
| 3975 | paquetes son solo código Scheme que usa varias interfaces programáticas | ||
| 3976 | (APIs). Queremos mantener la libertad de cambiar dichas interfaces para | ||
| 3977 | seguir mejorando Guix, posiblemente en formas que pueden romper su | ||
| 3978 | canal. Nunca cambiamos las interfaces gratuitamente, pero @emph{no} vamos | ||
| 3979 | tampoco a congelar las interfaces. | ||
| 3980 | |||
| 3981 | @item | ||
| 3982 | Corolario: 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 | ||
| 3987 | son una forma práctica de ejercitar su libertad para aumentar la colección | ||
| 3988 | de 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 | ||
| 3990 | favor, envíenos un correo a @email{guix-devel@@gnu.org} si quiere hablar | ||
| 3991 | sobre esto. | ||
| 3992 | @end quotation | ||
| 3993 | |||
| 3994 | Para usar un canal, escriba en @code{~/.config/guix/channels.scm} para | ||
| 3995 | instruir a @command{guix pull} para obtener datos de él @emph{además} de los | ||
| 3996 | canales 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 | ||
| 4008 | Fí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 | ||
| 4011 | lists,, 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 | ||
| 4013 | paquetes de su propio repositorio. El resultado en | ||
| 4014 | @file{~/.config/guix/current} es la unión de Guix con sus propios módulos de | ||
| 4015 | paquetes: | ||
| 4016 | |||
| 4017 | @example | ||
| 4018 | $ guix pull --list-generations | ||
| 4019 | @dots{} | ||
| 4020 | Generation 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 | ||
| 4034 | La salida de @command{guix pull} previa muestra que la generación@tie{}19 | ||
| 4035 | incluye tanto Guix como paquetes del canal | ||
| 4036 | @code{mis-paquetes-personales}. Entre los paquetes nuevos y actualizados que | ||
| 4037 | son enumerados, algunos como @code{mi-gimp} y @code{mi-emacs-con-cosas} | ||
| 4038 | pueden venir de @code{mis-paquetes-personales}, mientras que otros vienen | ||
| 4039 | del canal predeterminado de Guix. | ||
| 4040 | |||
| 4041 | Para crear uncanal, cree un repositorio Git que contenga sus propios módulos | ||
| 4042 | de paquetes y haga que esté disponible. El repositorio puede contener | ||
| 4043 | cualquier cosa, pero un canal útil contendrá módulos Guile que exportan | ||
| 4044 | paquetes. Una vez comience a usar un canal, Guix se comportará como si el | ||
| 4045 | directorio raíz del repositorio Git de dicho canal hubiese sido añadido a la | ||
| 4046 | ruta de carga de Guile (@pxref{Load Paths,,, guile, GNU Guile Reference | ||
| 4047 | Manual}). Por ejemplo, si su canal contiene un fichero en | ||
| 4048 | @file{mis-paquetes/mis-herramientas.scm} que define un módulo, entonces | ||
| 4049 | dicho módulo estará disponible bajo el nombre @code{(mis-paquetes | ||
| 4050 | mis-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 | |||
| 4057 | Las autoras de canales pueden decidir aumentar una colección de paquetes | ||
| 4058 | proporcionada por otros canales. Pueden declarar su canal como dependiente | ||
| 4059 | de otros canales en el fichero de metadatos @file{.guix-channel}, que debe | ||
| 4060 | encontrarse en la raíz del repositorio del canal. | ||
| 4061 | |||
| 4062 | Este 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 | |||
| 4077 | En el ejemplo previo, este canal se declara como dependiente de otros dos | ||
| 4078 | canales, que se obtendrán de manera automática. Los módulos proporcionados | ||
| 4079 | por el canal se compilarán en un entorno donde los módulos de todos estos | ||
| 4080 | canales declarados estén disponibles. | ||
| 4081 | |||
| 4082 | De cara a la confianza proporcionada y el esfuerzo que supondrá su | ||
| 4083 | mantenimiento, debería evitar depender de canales que no controle, y debería | ||
| 4084 | intentar 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 | ||
| 4091 | La salida de @command{guix pull --list-generations} previa muestra | ||
| 4092 | precisamente qué revisiones se usaron para construir esta instancia de | ||
| 4093 | Guix. Por tanto podemos replicarla, digamos, en otra máquina, proporcionando | ||
| 4094 | una especificaciones de canales en @file{~/.config/guix/channels.scm} que | ||
| 4095 | está ``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 | |||
| 4109 | La orden @command{guix describe --format=channels} puede incluso generar | ||
| 4110 | esta lista de canales directamente (@pxref{Invocación de guix describe}). | ||
| 4111 | |||
| 4112 | En este punto las dos máquinas ejecutan @emph{exactamente el mismo Guix}, | ||
| 4113 | con 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 | ||
| 4115 | a bit, que la salida de la misma orden en la otra máquina. Esto también | ||
| 4116 | significa que ambas máquinas tienen acceso a todo el código fuente de Guix | ||
| 4117 | y, transitiamente, a todo el código fuente de cada paquete que define. | ||
| 4118 | |||
| 4119 | Esto le proporciona superpoderes, permitiendole seguir la pista de la | ||
| 4120 | procedencia de los artefactos binarios con un grano muy fino, y reproducir | ||
| 4121 | entornos de software a su voluntad---un tipo de capacidad de | ||
| 4122 | ``meta-reproducibilidad'', si lo desea. @xref{Inferiores}, para otro modo de | ||
| 4123 | tomar 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 | ||
| 4130 | La funcionalidad descrita aquí es una ``versión de evaluación tecnológica'' | ||
| 4131 | en 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 | ||
| 4136 | A veces necesita mezclar paquetes de revisiones de la revisión de Guix que | ||
| 4137 | está ejecutando actualmente con paquetes disponibles en una revisión | ||
| 4138 | diferente. Los @dfn{inferiores} de Guix le permiten conseguirlo componiendo | ||
| 4139 | diferentes revisiones de Guix de modo arbitrario. | ||
| 4140 | |||
| 4141 | @cindex paquetes inferiores | ||
| 4142 | Técnicamente, un ``inferior'' es esencialmente un proceso Guix separado | ||
| 4143 | conectado 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 | ||
| 4145 | crear inferiores y comunicarse con ellos. También proporciona una interfaz | ||
| 4146 | de alto nivel para buscar y manipular los paquetes que un inferior | ||
| 4147 | proporciona---@dfn{paquetes de inferiores}. | ||
| 4148 | |||
| 4149 | Cuando se combina con los canales (@pxref{Canales}), los inferiores | ||
| 4150 | proporcionan una forma simple de interactuar con una revisión separada de | ||
| 4151 | Guix. 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 | ||
| 4153 | revisió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 | ||
| 4155 | contra la API antigua. Para hacerlo, puede escribir un manifiesto para | ||
| 4156 | usarlo con @code{guix package --manifest} (@pxref{Invocación de guix package}); | ||
| 4157 | en dicho manifiesto puede crear un inferior para esa versión antigua de Guix | ||
| 4158 | que 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 | |||
| 4184 | En su primera ejecución, @command{guix package --manifest} puede tener que | ||
| 4185 | construir el canal que especificó antes de crear el inferior; las siguientes | ||
| 4186 | ejecuciones serán mucho más rápidas porque la revisión de Guix estará en la | ||
| 4187 | caché. | ||
| 4188 | |||
| 4189 | El módulo @code{(guix inferior)} proporciona los siguientes procedimientos | ||
| 4190 | para abrir un inferior: | ||
| 4191 | |||
| 4192 | @deffn {Procedimiento Scheme} inferior-for-channels @var{canales} @ | ||
| 4193 | [#:cache-directory] [#:ttl] | ||
| 4194 | Devuelve un inferior para @var{canales}, una lista de canales. Usa la caché | ||
| 4195 | en @var{cache-directory}, donde las entradas pueden ser reclamadas después | ||
| 4196 | de @var{ttl} segundos. Este procedimiento abre una nueva conexión al daemon | ||
| 4197 | de construcción. | ||
| 4198 | |||
| 4199 | Como efecto secundario, este procedimiento puede construir o sustituir | ||
| 4200 | binarios 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"] | ||
| 4205 | Abre 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 | ||
| 4211 | Los procedimientos enumerados a continuación le permiten obtener y manipular | ||
| 4212 | paquetes de inferiores. | ||
| 4213 | |||
| 4214 | @deffn {Procedimiento Scheme} inferior-packages @var{inferior} | ||
| 4215 | Devuelve 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}] | ||
| 4220 | Devuelve 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 | ||
| 4222 | primero. Si @var{versión} tiene un valor verdadero, devuelve únicamente | ||
| 4223 | paquetes 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} | ||
| 4227 | Devuelve 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} | ||
| 4243 | Estos procedimientos son la contraparte de los accesos a los registros de | ||
| 4244 | pquete (@pxref{Referencia de ``package''}). La mayor parte funcionan interrogando al | ||
| 4245 | inferior del que @var{paquete} viene, por lo que el inferior debe estar vivo | ||
| 4246 | cuando llama a dichos procedimientos. | ||
| 4247 | @end deffn | ||
| 4248 | |||
| 4249 | Los paquetes de inferiores pueden ser usados transparentemente como | ||
| 4250 | cualquier otro paquete u objeto-tipo-fichero en expresiones-G | ||
| 4251 | (@pxref{Expresiones-G}). También se manejan transparentemente por el | ||
| 4252 | procedimiento @code{packages->manifest}, el cual se usa habitualmente en los | ||
| 4253 | manifiestos (@pxref{Invocación de guix package, the @option{--manifest} option of | ||
| 4254 | @command{guix package}}). Por tanto puede insertar un paquete de inferior | ||
| 4255 | prácticamente en cualquier lugar que pueda insertar un paquete normal: en | ||
| 4256 | manifiestos, 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 | ||
| 4264 | A menudo desea responder a preguntas como: ``¿Qué revisión de Guix estoy | ||
| 4265 | usando?'' o ``¿Qué canales estoy usando?'' Esto es una información muy útil | ||
| 4266 | en muchas situaciones: si quiere @emph{replicar} un entorno en una máquina | ||
| 4267 | diferente o cuenta de usuaria, si desea informar de un error o determinar | ||
| 4268 | qué cambio en los canales que usa lo causó, o si quiere almacenar el estado | ||
| 4269 | de su sistema por razones de reproducibilidad. La orden @command{guix | ||
| 4270 | describe} responde a estas preguntas. | ||
| 4271 | |||
| 4272 | Cuando 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 | ||
| 4274 | construyó, incluyendo la URL de su repositorio y los IDs de las revisiones | ||
| 4275 | (@pxref{Canales}): | ||
| 4276 | |||
| 4277 | @example | ||
| 4278 | $ guix describe | ||
| 4279 | Generation 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 | |||
| 4286 | Si está familiarizado con el sistema de control de versiones Git, esto es | ||
| 4287 | similar 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 | ||
| 4290 | a que el ID de revisión Git mostrado antes refiere sin ambigüedades al | ||
| 4291 | estado de Guix, esta información es todo lo necesario para describir la | ||
| 4292 | revisión de Guix que usa, y también para replicarla. | ||
| 4293 | |||
| 4294 | Para 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 | ||
| 4296 | descripció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 | ||
| 4308 | Puede almacenar esto en un fichero y pasarselo a @command{guix pull -C} en | ||
| 4309 | otra máquina o en un momento futuro, lo cual instanciará @emph{esta revisión | ||
| 4310 | exacta de Guix} (@pxref{Invocación de guix pull, the @option{-C} option}). De | ||
| 4311 | aquí en adelante, ya que puede desplegar la misma revisión de Guix, puede | ||
| 4312 | también @emph{replicar un entorno completo de software}. Nosotras | ||
| 4313 | humildemente consideramos que esto es @emph{impresionante}, ¡y esperamos que | ||
| 4314 | le guste a usted también! | ||
| 4315 | |||
| 4316 | Los detalles de las opciones aceptadas por @command{guix describe} son las | ||
| 4317 | siguientes: | ||
| 4318 | |||
| 4319 | @table @code | ||
| 4320 | @item --format=@var{formato} | ||
| 4321 | @itemx -f @var{formato} | ||
| 4322 | Produce salida en el @var{formato} especificado, uno de: | ||
| 4323 | |||
| 4324 | @table @code | ||
| 4325 | @item human | ||
| 4326 | produce salida legible por humanos; | ||
| 4327 | @item channels | ||
| 4328 | produce 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 | ||
| 4333 | produce una lista de especificaciones de canales en formato JSON; | ||
| 4334 | @item recutils | ||
| 4335 | produce una lista de especificaciones de canales en formato Recutils. | ||
| 4336 | @end table | ||
| 4337 | |||
| 4338 | @item --profile=@var{perfil} | ||
| 4339 | @itemx -p @var{perfil} | ||
| 4340 | Muestra 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 | ||
| 4348 | La orden @command{guix archive} permite a las usuarias @dfn{exportar} | ||
| 4349 | ficheros del almacén en un único archivador, e @dfn{importarlos} | ||
| 4350 | posteriormente en una máquina que ejecute Guix. En particular, permite que | ||
| 4351 | los ficheros del almacén sean transferidos de una máquina al almacén de otra | ||
| 4352 | máquina. | ||
| 4353 | |||
| 4354 | @quotation Nota | ||
| 4355 | Si está buscando una forma de producir archivos en un formato adecuado para | ||
| 4356 | herramientas distintas a Guix, @pxref{Invocación de guix pack}. | ||
| 4357 | @end quotation | ||
| 4358 | |||
| 4359 | @cindex exportar elementos del almacén | ||
| 4360 | Para exportar ficheros del almacén como un archivo por la salida estándar, | ||
| 4361 | ejecute: | ||
| 4362 | |||
| 4363 | @example | ||
| 4364 | guix archive --export @var{opciones} @var{especificaciones}... | ||
| 4365 | @end example | ||
| 4366 | |||
| 4367 | @var{especificaciones} deben ser o bien nombres de ficheros del almacén o | ||
| 4368 | especificaciones de paquetes, como las de @command{guix package} | ||
| 4369 | (@pxref{Invocación de guix package}). Por ejemplo, la siguiente orden crea un | ||
| 4370 | archivo que contiene la salida @code{gui} del paquete @code{git} y la salida | ||
| 4371 | principal de @code{emacs}: | ||
| 4372 | |||
| 4373 | @example | ||
| 4374 | guix archive --export git:gui /gnu/store/...-emacs-24.3 > great.nar | ||
| 4375 | @end example | ||
| 4376 | |||
| 4377 | Si los paquetes especificados no están todavía construidos, @command{guix | ||
| 4378 | archive} los construye automáticamente. El proceso de construcción puede | ||
| 4379 | controlarse mediante las opciones de construcción comunes (@pxref{Opciones comunes de construcción}). | ||
| 4380 | |||
| 4381 | Para transferir el paquete @code{emacs} a una máquina conectada por SSH, se | ||
| 4382 | ejecutaría: | ||
| 4383 | |||
| 4384 | @example | ||
| 4385 | guix archive --export -r emacs | ssh otra-maquina guix archive --import | ||
| 4386 | @end example | ||
| 4387 | |||
| 4388 | @noindent | ||
| 4389 | De manera similar, un perfil de usuaria completo puede transferirse de una | ||
| 4390 | máquina a otra de esta manera: | ||
| 4391 | |||
| 4392 | @example | ||
| 4393 | guix archive --export -r $(readlink -f ~/.guix-profile) | \ | ||
| 4394 | ssh otra-maquina guix-archive --import | ||
| 4395 | @end example | ||
| 4396 | |||
| 4397 | @noindent | ||
| 4398 | No obstante, fíjese que, en ambos ejemplos, todo @code{emacs} y el perfil | ||
| 4399 | como 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 | ||
| 4401 | la máquina objetivo. La opción @code{--missing} puede ayudar a esclarecer | ||
| 4402 | qué elementos faltan en el almacén objetivo. La orden @command{guix copy} | ||
| 4403 | simplifica y optimiza este proceso completo, así que probablemente es lo que | ||
| 4404 | debería usar en este caso (@pxref{Invocación de guix copy}). | ||
| 4405 | |||
| 4406 | @cindex nar, formato de archivo | ||
| 4407 | @cindex archivo normalizado (nar) | ||
| 4408 | Los 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 | ||
| 4410 | que lo hacen más apropiado para nuestro propósito. Primero, en vez de | ||
| 4411 | almacenar todos los metadatos Unix de cada fichero, el formato nar solo | ||
| 4412 | menciona el tipo de fichero (normal, directorio o enlace simbólico); los | ||
| 4413 | permisos Unix y el par propietario/grupo se descartan. En segundo lugar, el | ||
| 4414 | orden en el cual las entradas de directorios se almacenan siempre siguen el | ||
| 4415 | orden de los nombres de ficheros de acuerdo a la ordenación de cadenas en la | ||
| 4416 | localización C. Esto hace la producción del archivo completamente | ||
| 4417 | determinista. | ||
| 4418 | |||
| 4419 | @c FIXME: Add xref to daemon doc about signatures. | ||
| 4420 | Durante la exportación, el daemon firma digitalmente los contenidos del | ||
| 4421 | archivo, y la firma digital se adjunta. Durante la importación, el daemon | ||
| 4422 | verifica la firma y rechaza la importación en caso de una firma inválida o | ||
| 4423 | si la clave firmante no está autorizada. | ||
| 4424 | |||
| 4425 | Las opciones principales son: | ||
| 4426 | |||
| 4427 | @table @code | ||
| 4428 | @item --export | ||
| 4429 | Exporta los ficheros del almacén o paquetes (véase más adelante). Escribe el | ||
| 4430 | archivo resultante a la salida estándar. | ||
| 4431 | |||
| 4432 | Las dependencias @emph{no} están incluidas en la salida, a menos que se use | ||
| 4433 | @code{--recursive}. | ||
| 4434 | |||
| 4435 | @item -r | ||
| 4436 | @itemx --recursive | ||
| 4437 | Cuando se combina con @code{--export}, instruye a @command{guix archive} | ||
| 4438 | para incluir las dependencias de los elementos dados en el archivo. Por | ||
| 4439 | tanto, el archivo resultante está auto-contenido: contiene la clausura de | ||
| 4440 | los elementos exportados del almacén. | ||
| 4441 | |||
| 4442 | @item --import | ||
| 4443 | Lee un archivo de la entrada estándar, e importa los ficheros enumerados | ||
| 4444 | allí en el almacén. La operación se aborta si el archivo tiene una firma | ||
| 4445 | digital no válida, o si está firmado por una clave pública que no está entre | ||
| 4446 | las autorizadas (vea @code{--authorize} más adelante). | ||
| 4447 | |||
| 4448 | @item --missing | ||
| 4449 | Lee una lista de nombres de ficheros del almacén de la entrada estándar, uno | ||
| 4450 | por línea, y escribe en la salida estándar el subconjunto de estos ficheros | ||
| 4451 | que faltan en el almacén. | ||
| 4452 | |||
| 4453 | @item --generate-key[=@var{parámetros}] | ||
| 4454 | @cindex firmar, archivos | ||
| 4455 | Genera un nuevo par de claves para el daemon. Esto es un prerrequisito antes | ||
| 4456 | de que los archivos puedan ser exportados con @code{--export}. Tenga en | ||
| 4457 | cuenta que esta operación normalmente toma tiempo, ya que se necesita | ||
| 4458 | obtener suficiente entropía para generar un par de claves. | ||
| 4459 | |||
| 4460 | El 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 | ||
| 4462 | privada, que se debe mantener secreta). Cuando @var{parámetros} se omite, se | ||
| 4463 | genera una clave ECDSA usando la curva Ed25519, o, en versiones de Libgcrypt | ||
| 4464 | previas a la 1.6.0, es una clave RSA de 4096 bits. De manera alternativa, | ||
| 4465 | los @var{parámetros} pueden especificar parámetros @code{genkey} adecuados | ||
| 4466 | para 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 | ||
| 4471 | Autoriza importaciones firmadas con la clave pública pasada por la entrada | ||
| 4472 | estándar. La clave pública debe estar en el ``formato avanzado de | ||
| 4473 | expresiones-s''---es decir, el mismo formato que el fichero | ||
| 4474 | @file{signing-key.pub}. | ||
| 4475 | |||
| 4476 | La lista de claves autorizadas se mantiene en el fichero editable por | ||
| 4477 | personas @file{/etc/guix/acl}. El fichero contiene | ||
| 4478 | @url{http://people.csail.mit.edu/rivest/Sexp.text, ``expresiones-s en | ||
| 4479 | formato avanzado''} y está estructurado como una lista de control de acceso | ||
| 4480 | en el formato @url{http://theworld.com/~cme/spki.txt, Infraestructura Simple | ||
| 4481 | de Clave Pública (SPKI)}. | ||
| 4482 | |||
| 4483 | @item --extract=@var{directorio} | ||
| 4484 | @itemx -x @var{directorio} | ||
| 4485 | Lee un único elemento del archivo como es ofrecido por los servidores de | ||
| 4486 | sustituciones (@pxref{Sustituciones}) y lo extrae a @var{directorio}. Esta es | ||
| 4487 | una operación de bajo nivel necesitada únicamente para casos muy concretos; | ||
| 4488 | véase a continuación. | ||
| 4489 | |||
| 4490 | Por 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 | |||
| 4499 | Los archivos de un único elemento son diferentes de los archivos de | ||
| 4500 | múltiples elementos producidos por @command{guix archive --export}; | ||
| 4501 | contienen un único elemento del almacén, y @emph{no} embeben una firma. Por | ||
| 4502 | tanto esta operación @emph{no} verifica la firma y su salida debe | ||
| 4503 | considerarse insegura. | ||
| 4504 | |||
| 4505 | El propósito primario de esta operación es facilitar la inspección de los | ||
| 4506 | contenidos de un archivo que provenga probablemente de servidores de | ||
| 4507 | sustituciones 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 | ||
| 4517 | Si es una desarrolladora de software, Guix le proporciona herramientas que | ||
| 4518 | debería encontrar útiles---independientemente del lenguaje en el que | ||
| 4519 | desarrolle actualmente. Esto es sobre lo que trata este capítulo. | ||
| 4520 | |||
| 4521 | La orden @command{guix environment} proporciona una manera conveniente de | ||
| 4522 | configurar un @dfn{entorno de desarrollo} que contenga todas las | ||
| 4523 | dependencias y herramientas necesarias para trabajar en el paquete de | ||
| 4524 | software de su elección. La orden @command{guix pack} le permite crear | ||
| 4525 | @dfn{aplicaciones empaquetadas} que pueden ser distribuidas con facilidad a | ||
| 4526 | usuarias 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 | ||
| 4540 | El propósito de @command{guix environment} es ayudar a las hackers en la | ||
| 4541 | creación de entornos de desarrollo reproducibles sin modificar los paquetes | ||
| 4542 | de su perfil. La herramienta @command{guix environment} toma uno o más | ||
| 4543 | paquetes, construye todas sus entradas y crea un entorno shell para usarlos. | ||
| 4544 | |||
| 4545 | La sintaxis general es: | ||
| 4546 | |||
| 4547 | @example | ||
| 4548 | guix environment @var{opciones} @var{paquete}@dots{} | ||
| 4549 | @end example | ||
| 4550 | |||
| 4551 | El ejemplo siguiente lanza un nuevo shell preparado para el desarrollo de | ||
| 4552 | GNU@tie{}Guile: | ||
| 4553 | |||
| 4554 | @example | ||
| 4555 | guix environment guile | ||
| 4556 | @end example | ||
| 4557 | |||
| 4558 | Si las dependencias necesarias no están construidas todavía, @command{guix | ||
| 4559 | environment} las construye automáticamente. El entorno del nuevo shell es | ||
| 4560 | una versión aumentada del entorno en el que @command{guix environment} se | ||
| 4561 | ejecutó. Contiene las rutas de búsqueda necesarias para la construcción del | ||
| 4562 | paquete proporcionado añadidas a las variables ya existentes. Para crear un | ||
| 4563 | entorno ``puro'', donde las variables de entorno previas no existen, use la | ||
| 4564 | opción @code{--pure}@footnote{Las usuarias habitualmente aumentan de forma | ||
| 4565 | incorrecta las variables de entorno como @code{PATH} en su fichero | ||
| 4566 | @file{~/.bashrc}. Como consecuencia, cuando @code{guix environment} se | ||
| 4567 | ejecuta, Bash puede leer @file{~/.bashrc}, por tanto introduciendo | ||
| 4568 | ``impurezas'' en esas variables de entorno. Es un error definir dichas | ||
| 4569 | variables 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 | ||
| 4571 | al sistema. @xref{Bash Startup Files,,, bash, The GNU Bash Reference | ||
| 4572 | Manual}, 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 | ||
| 4576 | shell que lanza; su valor es el nombre de fichero del perfil para este | ||
| 4577 | entorno. Esto permite a las usuarias, digamos, definir un prompt para | ||
| 4578 | entornos de desarrollo en su @file{.bashrc} (@pxref{Bash Startup Files,,, | ||
| 4579 | bash, The GNU Bash Reference Manual}): | ||
| 4580 | |||
| 4581 | @example | ||
| 4582 | if [ -n "$GUIX_ENVIRONMENT" ] | ||
| 4583 | then | ||
| 4584 | export PS1="\u@@\h \w [dev]\$ " | ||
| 4585 | fi | ||
| 4586 | @end example | ||
| 4587 | |||
| 4588 | @noindent | ||
| 4589 | ...@: o para explorar el perfil: | ||
| 4590 | |||
| 4591 | @example | ||
| 4592 | $ ls "$GUIX_ENVIRONMENT/bin" | ||
| 4593 | @end example | ||
| 4594 | |||
| 4595 | Adicionalmente, más de un paquete puede ser especificado, en cuyo caso se | ||
| 4596 | usa la unión de las entradas de los paquetes proporcionados. Por ejemplo, la | ||
| 4597 | siguiente orden lanza un shell donde todas las dependencias tanto de Guile | ||
| 4598 | como de Emacs están disponibles: | ||
| 4599 | |||
| 4600 | @example | ||
| 4601 | guix environment guile emacs | ||
| 4602 | @end example | ||
| 4603 | |||
| 4604 | A veces no se desea una sesión interactiva de shell. Una orden arbitraria | ||
| 4605 | puede invorcarse usando el valor @code{--} para separar la orden del resto | ||
| 4606 | de los parámetros: | ||
| 4607 | |||
| 4608 | @example | ||
| 4609 | guix environment guile -- make -j4 | ||
| 4610 | @end example | ||
| 4611 | |||
| 4612 | En otras situaciones, es más conveniente especificar una lista de paquetes | ||
| 4613 | necesarios 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 | ||
| 4617 | guix environment --ad-hoc python2-numpy python-2.7 -- python | ||
| 4618 | @end example | ||
| 4619 | |||
| 4620 | Más allá, se pueden desear las dependencias de un paquete y también algunos | ||
| 4621 | paquetes adicionales que no son dependencias ni en tiempo de construcción ni | ||
| 4622 | en el de ejecución, pero son útiles no obstante para el desarrollo. Por esta | ||
| 4623 | razón, la opción @code{--ad-hoc} es posicional. Los paquetes que aparecen | ||
| 4624 | antes de @code{--ad-hoc} se interpretan como paquetes cuyas dependencias se | ||
| 4625 | añadirán al entorno. Los paquetes que aparecen después se interpretan como | ||
| 4626 | paquetes que se añadirán directamente al entorno. Por ejemplo, la siguiente | ||
| 4627 | orden crea un entorno de desarrollo Guix que incluye adicionalmente Git y | ||
| 4628 | strace: | ||
| 4629 | |||
| 4630 | @example | ||
| 4631 | guix environment guix --ad-hoc git strace | ||
| 4632 | @end example | ||
| 4633 | |||
| 4634 | En ocasiones es deseable aislar el entorno tanto como sea posible, para | ||
| 4635 | obtener la máxima pureza y reproducibilidad. En particular, cuando se usa | ||
| 4636 | Guix en una distribución anfitriona que no es el sistema Guix, es deseable | ||
| 4637 | prevenir acceso a @file{/usr/bin} y otros recursos del sistema desde el | ||
| 4638 | entorno de desarrollo. Por ejemplo, la siguiente orden lanza un REPL Guile | ||
| 4639 | en un ``contenedor'' donde únicamente el almacén y el directorio actual | ||
| 4640 | están montados: | ||
| 4641 | |||
| 4642 | @example | ||
| 4643 | guix environment --ad-hoc --container guile -- guile | ||
| 4644 | @end example | ||
| 4645 | |||
| 4646 | @quotation Nota | ||
| 4647 | La opción @code{--container} requiere Linux-libre 3.19 o más nuevo. | ||
| 4648 | @end quotation | ||
| 4649 | |||
| 4650 | Las 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 | ||
| 4657 | Hace que @var{fichero} sea un enlace simbólico al perfil para este entorno, | ||
| 4658 | y lo registra como una raíz del recolector de basura. | ||
| 4659 | |||
| 4660 | Esto es útil si desea proteger su entorno de la recolección de basura, | ||
| 4661 | hacerlo ``persistente''. | ||
| 4662 | |||
| 4663 | Cuando se omite esta opción, el entorno se protege de la recolección de | ||
| 4664 | basura únicamente por la duración de la sesión @command{guix | ||
| 4665 | environment}. Esto significa que la siguiente vez que vuelva a crear el | ||
| 4666 | mismo entorno, puede tener que reconstruir o volver a descargar | ||
| 4667 | paquetes. @xref{Invocación de guix gc}, para más información sobre las raices del | ||
| 4668 | recolector de basura. | ||
| 4669 | |||
| 4670 | @item --expression=@var{expr} | ||
| 4671 | @itemx -e @var{expr} | ||
| 4672 | Crea un entorno para el paquete o lista de paquetes a los que evalúa | ||
| 4673 | @var{expr}. | ||
| 4674 | |||
| 4675 | Por ejemplo, ejecutando: | ||
| 4676 | |||
| 4677 | @example | ||
| 4678 | guix environment -e '(@@ (gnu packages maths) petsc-openmpi)' | ||
| 4679 | @end example | ||
| 4680 | |||
| 4681 | inicia un shell con el entorno para esta variante específica del paquete | ||
| 4682 | PETSc. | ||
| 4683 | |||
| 4684 | Ejecutar: | ||
| 4685 | |||
| 4686 | @example | ||
| 4687 | guix environment --ad-hoc -e '(@@ (gnu) %base-packages)' | ||
| 4688 | @end example | ||
| 4689 | |||
| 4690 | inicia un shell con todos los paquetes básicos del sistema disponibles. | ||
| 4691 | |||
| 4692 | Las órdenes previas usan únicamente la salida predeterminada de los paquetes | ||
| 4693 | dados. Para seleccionar otras salidas, tuplas de dos elementos pueden ser | ||
| 4694 | especificadas: | ||
| 4695 | |||
| 4696 | @example | ||
| 4697 | guix environment --ad-hoc -e '(list (@@ (gnu packages bash) bash) "include")' | ||
| 4698 | @end example | ||
| 4699 | |||
| 4700 | @item --load=@var{fichero} | ||
| 4701 | @itemx -l @var{fichero} | ||
| 4702 | Crea un entorno para el paquete o la lista de paquetes a la que el código en | ||
| 4703 | @var{fichero} evalúa. | ||
| 4704 | |||
| 4705 | Como 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} | ||
| 4714 | Crea un entorno para los paquetes contenidos en el objeto manifest devuelto | ||
| 4715 | por el código Scheme en @var{file}. | ||
| 4716 | |||
| 4717 | Esto 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 | ||
| 4719 | manifiesto. | ||
| 4720 | |||
| 4721 | @item --ad-hoc | ||
| 4722 | Incluye todos los paquetes especificados en el entorno resultante, como si | ||
| 4723 | un paquete @i{ad hoc} hubiese sido definido con ellos como entradas. Esta | ||
| 4724 | opción es útil para la creación rápida un entorno sin tener que escribir una | ||
| 4725 | expresión de paquete que contenga las entradas deseadas. | ||
| 4726 | |||
| 4727 | Por ejemplo, la orden: | ||
| 4728 | |||
| 4729 | @example | ||
| 4730 | guix environment --ad-hoc guile guile-sdl -- guile | ||
| 4731 | @end example | ||
| 4732 | |||
| 4733 | ejecuta @command{guile} en un entorno donde están disponibles Guile y | ||
| 4734 | Guile-SDL. | ||
| 4735 | |||
| 4736 | Fíjese que este ejemplo solicita implícitamente la salida predeterminada de | ||
| 4737 | @code{guile} y @code{guile-sdl}, pero es posible solicitar una salida | ||
| 4738 | específica---por ejemplo, @code{glib:bin} solicita la salida @code{bin} de | ||
| 4739 | @code{glib} (@pxref{Paquetes con múltiples salidas}). | ||
| 4740 | |||
| 4741 | Esta 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 | ||
| 4744 | al entorno, el comportamiento predefinido. Los paquetes que aparecen después | ||
| 4745 | se interpretan como paquetes a añadir directamente al entorno. | ||
| 4746 | |||
| 4747 | @item --pure | ||
| 4748 | Olvida las variables de entorno existentes cuando se construye un nuevo | ||
| 4749 | entorno, excepto aquellas especificadas con @option{--preserve} (véase más | ||
| 4750 | adelante). Esto tiene el efecto de crear un entorno en el que las rutas de | ||
| 4751 | búsqueda únicamente contienen las entradas del paquete. | ||
| 4752 | |||
| 4753 | @item --preserve=@var{regexp} | ||
| 4754 | @itemx -E @var{regexp} | ||
| 4755 | Cuando se usa junto a @option{--pure}, preserva las variables de entorno que | ||
| 4756 | corresponden con @var{regexp}---en otras palabras, las pone en una lista de | ||
| 4757 | variables de entorno que deben preservarse. Esta opción puede repetirse | ||
| 4758 | varias veces. | ||
| 4759 | |||
| 4760 | @example | ||
| 4761 | guix environment --pure --preserve=^SLURM --ad-hoc openmpi @dots{} \ | ||
| 4762 | -- mpirun @dots{} | ||
| 4763 | @end example | ||
| 4764 | |||
| 4765 | Este ejemplo ejecuta @command{mpirun} en un contexto donde las únicas | ||
| 4766 | variables de entorno definidas son @code{PATH}, variables de entorno cuyo | ||
| 4767 | nombre empiece con @code{SLURM}, así como las variables ``preciosas'' | ||
| 4768 | habituales (@code{HOME}, @code{USER}, etc.). | ||
| 4769 | |||
| 4770 | @item --search-paths | ||
| 4771 | Muestra las definiciones de variables de entorno que componen el entorno. | ||
| 4772 | |||
| 4773 | @item --system=@var{sistema} | ||
| 4774 | @itemx -s @var{sistema} | ||
| 4775 | Intenta construir para @var{sistema}---por ejemplo, @code{i686-linux}. | ||
| 4776 | |||
| 4777 | @item --container | ||
| 4778 | @itemx -C | ||
| 4779 | @cindex container | ||
| 4780 | Ejecuta la @var{orden} en un contenedor aislado. El directorio actual fuera | ||
| 4781 | del contenedor es asociado al interior del contenedor. Adicionalmente, a | ||
| 4782 | menos que se fuerce con @code{--user}, un directorio de prueba de la usuaria | ||
| 4783 | se crea de forma que coincida con el directorio actual de la usuaria, y | ||
| 4784 | @file{/etc/passwd} se configura adecuadamente. | ||
| 4785 | |||
| 4786 | El proceso lanzado se ejecuta como el usuario actual fuera del | ||
| 4787 | contenedor. Dentro del contenedor, tiene el mismo UID y GID que el usuario | ||
| 4788 | actual, a menos que se proporcione @option{--user} (véase más adelante). | ||
| 4789 | |||
| 4790 | @item --network | ||
| 4791 | @itemx -N | ||
| 4792 | Para contenedores, comparte el espacio de nombres de red con el sistema | ||
| 4793 | anfitrión. Los contenedores creados sin esta opción únicamente tienen acceso | ||
| 4794 | a la red local. | ||
| 4795 | |||
| 4796 | @item --link-profile | ||
| 4797 | @itemx -P | ||
| 4798 | Para contenedores, enlaza el perfil del entorno a @file{~/.guix-profile} | ||
| 4799 | dentro del contenedor. Es equivalente a la ejecución de @command{ln -s | ||
| 4800 | $GUIX_ENVIRONMENT ~/.guix-profile} dentro del contenedor. El enlace fallará | ||
| 4801 | e interrumpirá el entorno si el directorio ya existe, lo cual será | ||
| 4802 | probablemente el caso si @command{guix environment} se invocó en el | ||
| 4803 | directorio de la usuaria. | ||
| 4804 | |||
| 4805 | Determinados paquetes se configuran para buscar en @code{~/.guix-profile} | ||
| 4806 | ficheros de configuración y datos;@footnote{Por ejemplo, el paquete | ||
| 4807 | @code{fontconfig} inspecciona @file{~/.guix-profile/share/fonts} en busca de | ||
| 4808 | nuevas tipografías.} @code{--link-profile} permite a estos programas operar | ||
| 4809 | de la manera esperada dentro del entorno. | ||
| 4810 | |||
| 4811 | @item --user=@var{usuaria} | ||
| 4812 | @itemx -u @var{usuaria} | ||
| 4813 | Para contenedores, usa el nombre de usuaria @var{usuaria} en vez de la | ||
| 4814 | actual. La entrada generada en @file{/etc/passwd} dentro del contenedor | ||
| 4815 | contendrá el nombre @var{usuaria}; su directorio será | ||
| 4816 | @file{/home/@var{usuaria}} y ningún dato GECOS de la usuaria se copiará. Más | ||
| 4817 | aún, el UID y GID dentro del contenedor son 1000. @var{usuaria} no debe | ||
| 4818 | existir en el sistema. | ||
| 4819 | |||
| 4820 | Adicionalmente, cualquier ruta compartida o expuesta (véanse @code{--share} | ||
| 4821 | y @code{--expose} respectivamente) cuyo destino esté dentro de la carpeta | ||
| 4822 | actual de la usuaria será reasociada en relación a | ||
| 4823 | @file{/home/@var{usuaria}}; esto incluye la relación automática del | ||
| 4824 | directorio de trabajo actual. | ||
| 4825 | |||
| 4826 | @example | ||
| 4827 | # expondrá las rutas /home/foo/ddt, /home/foo/prueba y /home/foo/objetivo | ||
| 4828 | cd $HOME/ddt | ||
| 4829 | guix environment --container --user=foo \ | ||
| 4830 | --expose=$HOME/prueba \ | ||
| 4831 | --expose=/tmp/objetivo=$HOME/objetivo | ||
| 4832 | @end example | ||
| 4833 | |||
| 4834 | Mientras esto limita el escape de la identidad de la usuaria a través de las | ||
| 4835 | rutas 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 | ||
| 4837 | amplia---no una solución completa. | ||
| 4838 | |||
| 4839 | @item --expose=@var{fuente}[=@var{destino}] | ||
| 4840 | Para contenedores, expone el sistema de ficheros @var{fuente} del sistema | ||
| 4841 | anfitrión como un sistema de ficheros de solo-lectura @var{destino} dentro | ||
| 4842 | del contenedor. Si no se especifica @var{destino}, @var{fuente} se usa como | ||
| 4843 | el punto de montaje en el contenedor. | ||
| 4844 | |||
| 4845 | El ejemplo a continuación lanza una sesión interactiva de Guile en un | ||
| 4846 | contenedor donde el directorio principal de la usuaria es accesible en modo | ||
| 4847 | solo-lectura a través del directorio @file{/intercambio}: | ||
| 4848 | |||
| 4849 | @example | ||
| 4850 | guix environment --container --expose=$HOME=/intercambio --ad-hoc guile -- guile | ||
| 4851 | @end example | ||
| 4852 | |||
| 4853 | @item --share=@var{fuente}[=@var{destino}] | ||
| 4854 | Para contenedores, comparte el sistema de ficheros @var{fuente} del sistema | ||
| 4855 | anfitrión como el sistema de ficheros @var{destino} con permisos de | ||
| 4856 | escritura dentro del contenedor. Si no se especifica @var{destino}, | ||
| 4857 | @var{fuente} se usa como punto de montaje en el contenedor. | ||
| 4858 | |||
| 4859 | El siguiente ejemplo lanza un entorno interactivo Guile en un contenedor en | ||
| 4860 | el que el directorio principal de la usuaria está disponible para tanto | ||
| 4861 | lectura como escritura via el directorio @file{/intercambio}: | ||
| 4862 | |||
| 4863 | @example | ||
| 4864 | guix environment --container --share=$HOME=/intercambio --ad-hoc guile -- guile | ||
| 4865 | @end example | ||
| 4866 | @end table | ||
| 4867 | |||
| 4868 | Además, @command{guix environment} acepta todas las opciones comunes de | ||
| 4869 | construcción que permite @command{guix build} (@pxref{Opciones comunes de construcción}) | ||
| 4870 | así 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 | |||
| 4875 | De manera ocasional querrá dar software a gente que (¡todavía!) no tiene la | ||
| 4876 | suerte 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 | ||
| 4881 | Si está buscando formas de intercambiar binarios entre máquinas que ya | ||
| 4882 | ejecutan 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 | ||
| 4890 | La orden @command{guix pack} crea un @dfn{paquete} reducido o | ||
| 4891 | @dfn{empaquetado de software}: crea un archivador tar u otro tipo que | ||
| 4892 | contiene los binarios del software en el que está interesada y todas sus | ||
| 4893 | dependencias. El archivo resultante puede ser usado en una máquina que no | ||
| 4894 | tiene Guix, y la gente puede ejecutar exactamente los mismos binarios que | ||
| 4895 | usted tiene con Guix. El paquete en sí es creado de forma reproducible | ||
| 4896 | bit-a-bit, para que cualquiera pueda verificar que realmente contiene los | ||
| 4897 | resultados de construcción que pretende distribuir. | ||
| 4898 | |||
| 4899 | Por ejemplo, para crear un empaquetado que contenga Guile, Emacs, Geiser y | ||
| 4900 | todas 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 | |||
| 4908 | El resultado aquí es un archivador tar que contiene un directorio de | ||
| 4909 | @file{/gnu/store} con todos los paquetes relevantes. El archivador | ||
| 4910 | resultante contiene un @dfn{perfil} con los tres paquetes de interés; el | ||
| 4911 | perfil es el mismo que se hubiera creado por @command{guix package -i}. Este | ||
| 4912 | es el mecanismo usado para crear el propio archivador de binarios separado | ||
| 4913 | de Guix (@pxref{Instalación binaria}). | ||
| 4914 | |||
| 4915 | Las usuarias de este empaquetad tendrán que ejecutar | ||
| 4916 | @file{/gnu/store/@dots{}-profile/bin/guile} para ejecutar guile, lo que | ||
| 4917 | puede resultar inconveniente. Para evitarlo, puede crear, digamos, un enlace | ||
| 4918 | simbólico @file{/opt/gnu/bin} al perfil: | ||
| 4919 | |||
| 4920 | @example | ||
| 4921 | guix pack -S /opt/gnu/bin=bin guile emacs geiser | ||
| 4922 | @end example | ||
| 4923 | |||
| 4924 | @noindent | ||
| 4925 | De 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 | ||
| 4930 | máquina y por lo tanto no puede desempaquetarlo en la raíz del sistema de | ||
| 4931 | ficheros? 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 | ||
| 4934 | cualquier lugar de la jerarquía del sistema de ficheros: en el ejemplo | ||
| 4935 | anterior, las usuarias pueden desempaquetar el archivador en su directorio | ||
| 4936 | de usuaria y ejecutar directamente @file{./opt/gnu/bin/guile}. | ||
| 4937 | |||
| 4938 | @cindex Docker, construir una imagen con guix pack | ||
| 4939 | De manera alternativa, puede producir un empaquetado en el formato de imagen | ||
| 4940 | Docker usando la siguiente orden: | ||
| 4941 | |||
| 4942 | @example | ||
| 4943 | guix pack -f docker guile emacs geiser | ||
| 4944 | @end example | ||
| 4945 | |||
| 4946 | @noindent | ||
| 4947 | El 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/, | ||
| 4950 | documentació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 | ||
| 4954 | Otra opción más es producir una imagen SquashFS con la siguiente orden: | ||
| 4955 | |||
| 4956 | @example | ||
| 4957 | guix pack -f squashfs guile emacs geiser | ||
| 4958 | @end example | ||
| 4959 | |||
| 4960 | @noindent | ||
| 4961 | El resultado es una imagen de sistema de ficheros SquashFS que puede ser o | ||
| 4962 | bien montada, o bien usada directamente como una imagen contenedora de | ||
| 4963 | sistemas de ficheros con el @uref{http://singularity.lbl.gov, entorno de | ||
| 4964 | ejecución de contenedores Singularity}, usando órdenes como | ||
| 4965 | @command{singularity shell} o @command{singularity exec}. | ||
| 4966 | |||
| 4967 | Varias opciones de la línea de órdenes le permiten personalizar su | ||
| 4968 | empaquetado: | ||
| 4969 | |||
| 4970 | @table @code | ||
| 4971 | @item --format=@var{formato} | ||
| 4972 | @itemx -f @var{formato} | ||
| 4973 | Produce un empaquetado en el @var{formato} específico. | ||
| 4974 | |||
| 4975 | Los formatos disponibles son: | ||
| 4976 | |||
| 4977 | @table @code | ||
| 4978 | @item tarball | ||
| 4979 | Es el formato predeterminado. Produce un archivador que contiene todos los | ||
| 4980 | binarios y enlaces simbólicos especificados. | ||
| 4981 | |||
| 4982 | @item docker | ||
| 4983 | Produce un archivador que sigue la | ||
| 4984 | @uref{https://github.com/docker/docker/blob/master/image/spec/v1.2.md, | ||
| 4985 | especificación de imágenes Docker}. | ||
| 4986 | |||
| 4987 | @item squashfs | ||
| 4988 | Produce una imagen SquashFS que contiene todos los binarios y enlaces | ||
| 4989 | simbólicos especificados, así como puntos de montaje vacíos para sistemas de | ||
| 4990 | ficheros virtuales como procfs. | ||
| 4991 | @end table | ||
| 4992 | |||
| 4993 | @cindex binarios reposicionables | ||
| 4994 | @item --relocatable | ||
| 4995 | @itemx -R | ||
| 4996 | Produce @dfn{binarios reposicionables}---es decir, binarios que se pueden | ||
| 4997 | posicionar en cualquier lugar de la jerarquía del sistema de ficheros, y | ||
| 4998 | ejecutarse desde allí. | ||
| 4999 | |||
| 5000 | When 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 | ||
| 5003 | PRoot support, can be thought of as the abbreviation of ``Really | ||
| 5004 | Relocatable''. Neat, isn't it?}, relocatable binaries fall to back to PRoot | ||
| 5005 | if user namespaces are unavailable, and essentially work anywhere---see | ||
| 5006 | below for the implications. | ||
| 5007 | |||
| 5008 | Por ejemplo, si crea un empaquetado que contiene Bash con:< | ||
| 5009 | |||
| 5010 | @example | ||
| 5011 | guix 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 | ||
| 5016 | su directorio, como una usuaria normal, ejecutar: | ||
| 5017 | |||
| 5018 | @example | ||
| 5019 | tar xf pack.tar.gz | ||
| 5020 | ./mibin/sh | ||
| 5021 | @end example | ||
| 5022 | |||
| 5023 | @noindent | ||
| 5024 | En ese shell, si escribe @code{ls /gnu/store}, notará que @file{/gnu/store} | ||
| 5025 | muestra y contiene todas las dependencias de @code{bash}, ¡incluso cuando la | ||
| 5026 | máquina no tiene el directorio @file{/gnu/store}! Esto es probablemente el | ||
| 5027 | modo más simple de desplegar software construido en Guix en una máquina | ||
| 5028 | no-Guix. | ||
| 5029 | |||
| 5030 | @quotation Nota | ||
| 5031 | No obstante hay un punto a tener en cuenta: esta técnica descansa en la | ||
| 5032 | característica de @dfn{espacios de nombres de usuaria} del núcleo Linux, la | ||
| 5033 | cual permite a usuarias no privilegiadas montar o cambiar la raíz. Versiones | ||
| 5034 | antiguas de Linux no los implementan, y algunas distribuciones GNU/Linux los | ||
| 5035 | deshabilitan. | ||
| 5036 | |||
| 5037 | Para producir binarios reposicionables que funcionen incluso en ausencia de | ||
| 5038 | espacios de nombre de usuaria, proporcione @option{--relocatable} o | ||
| 5039 | @option{-R} @emph{dos veces}. En ese caso, los binarios intentarán el uso de | ||
| 5040 | espacios de nombres de usuaria y usarán PRoot si no es posible. | ||
| 5041 | |||
| 5042 | El programa @uref{https://proot-me.github.io/, PRoot} proporciona el soporte | ||
| 5043 | necesario para la virtualización del sistema de ficheros. Lo consigue | ||
| 5044 | mediante el uso de la llamada al sistema @code{ptrace} en el programa en | ||
| 5045 | ejecución. Esta aproximación tiene la ventaja de funcionar sin soporte | ||
| 5046 | especial en el núcleo, pero incurre en una sobrecarga en el tiempo de | ||
| 5047 | ejecución cada vez que se realiza una llamada al sistema. | ||
| 5048 | @end quotation | ||
| 5049 | |||
| 5050 | @item --expression=@var{expr} | ||
| 5051 | @itemx -e @var{expr} | ||
| 5052 | Considera el paquete al que evalúa @var{expr} | ||
| 5053 | |||
| 5054 | Esto 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} | ||
| 5056 | in @command{guix build}}). | ||
| 5057 | |||
| 5058 | @item --manifest=@var{fichero} | ||
| 5059 | @itemx -m @var{fichero} | ||
| 5060 | Usa los paquetes contenidos en el objeto manifest devuelto por el código | ||
| 5061 | Scheme en @var{file}. | ||
| 5062 | |||
| 5063 | Esto 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 | ||
| 5065 | los mismos ficheros de manifiesto. Esto le permite definir una colección de | ||
| 5066 | paquetes una vez y usarla tanto para crear perfiles como para crear archivos | ||
| 5067 | en 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, | ||
| 5069 | pero no ambas. | ||
| 5070 | |||
| 5071 | @item --system=@var{sistema} | ||
| 5072 | @itemx -s @var{sistema} | ||
| 5073 | Intenta construir paquetes para @var{sistema}---por ejemplo, | ||
| 5074 | @code{x86_64-linux}---en vez del tipo de sistema de la máquina de | ||
| 5075 | construcción. | ||
| 5076 | |||
| 5077 | @item --target=@var{tripleta} | ||
| 5078 | @cindex compilación cruzada | ||
| 5079 | Compilación cruzada para la @var{tripleta}, que debe ser una tripleta GNU | ||
| 5080 | válida, cómo @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, | ||
| 5081 | GNU configuration triplets,, autoconf, Autoconf}). | ||
| 5082 | |||
| 5083 | @item --compression=@var{herramienta} | ||
| 5084 | @itemx -C @var{herramienta} | ||
| 5085 | Comprime el archivador resultante usando @var{herramienta}---un valor que | ||
| 5086 | puede ser @code{gzip}, @code{bzip2}, @code{xz}, @code{lzip} o @code{none} | ||
| 5087 | para no usar compresión. | ||
| 5088 | |||
| 5089 | @item --symlink=@var{spec} | ||
| 5090 | @itemx -S @var{spec} | ||
| 5091 | Añade los enlaces simbólicos especificados por @var{spec} al | ||
| 5092 | empaquetado. Esta opción puede aparecer varias veces. | ||
| 5093 | |||
| 5094 | La 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 | ||
| 5096 | destino del enlace simbólico. | ||
| 5097 | |||
| 5098 | Por 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 | ||
| 5102 | Save provenance information for the packages passed on the command line. | ||
| 5103 | Provenance information includes the URL and commit of the channels in use | ||
| 5104 | (@pxref{Canales}). | ||
| 5105 | |||
| 5106 | Provenance information is saved in the | ||
| 5107 | @file{/gnu/store/@dots{}-profile/manifest} file in the pack, along with the | ||
| 5108 | usual package metadata---the name and version of each package, their | ||
| 5109 | propagated inputs, and so on. It is useful information to the recipient of | ||
| 5110 | the pack, who then knows how the pack was (supposedly) obtained. | ||
| 5111 | |||
| 5112 | This option is not enabled by default because, like timestamps, provenance | ||
| 5113 | information contributes nothing to the build process. In other words, there | ||
| 5114 | is an infinity of channel URLs and commit IDs that can lead to the same | ||
| 5115 | pack. Recording such ``silent'' metadata in the output thus potentially | ||
| 5116 | breaks the source-to-binary bitwise reproducibility property. | ||
| 5117 | |||
| 5118 | @item --localstatedir | ||
| 5119 | @itemx --profile-name=@var{nombre} | ||
| 5120 | Incluye el ``directorio de estado local'', @file{/var/guix}, en el | ||
| 5121 | empaquetado 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}) | ||
| 5127 | así 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 | ||
| 5129 | el almacén está ``muerto'': no se pueden añadir o borrar nuevos elementos | ||
| 5130 | después de la extracción del empaquetado. | ||
| 5131 | |||
| 5132 | Un caso de uso para esto es el archivador tar autocontenido de binarios de | ||
| 5133 | Guix (@pxref{Instalación binaria}). | ||
| 5134 | |||
| 5135 | @item --bootstrap | ||
| 5136 | Usa los binarios del lanzamiento para construir el empaquetado. Esta opción | ||
| 5137 | es útil únicamente a las desarrolladoras de Guix. | ||
| 5138 | @end table | ||
| 5139 | |||
| 5140 | Además, @command{guix pack} acepta todas las opciones comunes de | ||
| 5141 | construcción (@pxref{Opciones comunes de construcción}) y todas las opciones de | ||
| 5142 | transformació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 | |||
| 5149 | GNU Guix proporciona viarias interfaces programáticas Scheme (APIs) para | ||
| 5150 | definir, construir y consultar paquetes. La primera interfaz permite a las | ||
| 5151 | usuarias escribir definiciones de paquetes a alto nivel. Estas definiciones | ||
| 5152 | referencian conceptos familiares de empaquetamiento, como el nombre y la | ||
| 5153 | versión de un paquete, su sistema de construcción y sus dependencias. Estas | ||
| 5154 | definiciones se pueden convertir en acciones concretas de construcción. | ||
| 5155 | |||
| 5156 | Las acciones de construcción son realizadas por el daemon Guix, en | ||
| 5157 | delegación de las usuarias. En una configuración estándar, el daemon tiene | ||
| 5158 | acceso de escritura al almacén---el directorio @file{/gnu/store}---mientras | ||
| 5159 | que las usuarias no. En la configuración recomendada el daemon también | ||
| 5160 | realiza las construcciones en chroots, bajo usuarias específicas de | ||
| 5161 | construcción, para minimizar la interferencia con el resto del sistema. | ||
| 5162 | |||
| 5163 | @cindex derivación | ||
| 5164 | Las APIs de nivel más bajo están disponibles para interactuar con el daemon | ||
| 5165 | y el almacén. Para instruir al daemon para realizar una acción de | ||
| 5166 | construcción, las usuarias realmente proporcionan una @dfn{derivación}. Una | ||
| 5167 | derivación es una representación de bajo nivel de las acciones de | ||
| 5168 | construcción a tomar, y el entorno en el que deberían suceder---las | ||
| 5169 | derivaciones son a las definiciones de paquetes lo que es el ensamblador a | ||
| 5170 | los programas en C. El término ``derivación'' viene del hecho de que los | ||
| 5171 | resultados de la construcción @emph{derivan} de ellas. | ||
| 5172 | |||
| 5173 | Este capítulo describe todas estas APIs en orden, empezando por las | ||
| 5174 | definiciones 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 | |||
| 5192 | Desde un punto de vista programático, las definiciones de paquetes de la | ||
| 5193 | distribució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 | ||
| 5195 | espacio de nombres de módulo @code{(gnu packages @dots{})} no son | ||
| 5196 | necesariamente ``paquetes GNU''. Este esquema de nombrado de módulos sigue | ||
| 5197 | la convención habitual de Guile para el nombrado de módulos: @code{gnu} | ||
| 5198 | significa que estos módulos se distribuyen como parte del sistema GNU, y | ||
| 5199 | @code{packages} identifica módulos que definen paquetes.} (@pxref{Módulos, | ||
| 5200 | Guile modules,, guile, GNU Guile Reference Manual}). Por ejemplo, el módulo | ||
| 5201 | @code{(gnu packages emacs)} exporta una variable con nombre @code{emacs}, | ||
| 5202 | que está asociada a un objeto @code{<package>} (@pxref{Definición de paquetes}). | ||
| 5203 | |||
| 5204 | El espacio de nombres de módulos @code{(gnu packages @dots{})} se recorre | ||
| 5205 | automáticamente en busca de paquetes en las herramientas de línea de | ||
| 5206 | ordenes. Por ejemplo, cuando se ejecuta @code{guix package -i emacs}, todos | ||
| 5207 | los módulos @code{(gnu packages @dots{})} son procesados hasta encontrar uno | ||
| 5208 | que exporte un objeto de paquete cuyo nombre sea @code{emacs}. Esta búsqueda | ||
| 5209 | de 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 | ||
| 5213 | Las usuarias pueden almacenar definiciones de paquetes en módulos con | ||
| 5214 | nombres diferentes---por ejemplo, @code{(mis-paquetes | ||
| 5215 | emacs)}@footnote{Fíjese que el nombre de fichero y el nombre de módulo deben | ||
| 5216 | coincidir. Por ejemplo, el módulo @code{(mis-paquetes emacs)} debe | ||
| 5217 | almacenarse en el fichero @file{mis-paquetes/emacs.scm} en relación con la | ||
| 5218 | ruta de carga especificada con @option{--load-path} o | ||
| 5219 | @code{GUIX_PACKAGE_PATH}. @xref{Modules and the File System,,, guile, GNU | ||
| 5220 | Guile Reference Manual}, para obtener detalles.}. Existen dos maneras de | ||
| 5221 | hacer visibles estas definiciones de paquetes a las interfaces de usuaria: | ||
| 5222 | |||
| 5223 | @enumerate | ||
| 5224 | @item | ||
| 5225 | Mediante la adición del directorio que contiene sus módulos de paquetes a la | ||
| 5226 | ruta 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 | ||
| 5231 | Mediante la definición de un @dfn{canal} y la configuración de @command{guix | ||
| 5232 | pull} de manera que se actualice desde él. Un canal es esencialmente un | ||
| 5233 | repositorio Git que contiene módulos de paquetes. @xref{Canales}, para más | ||
| 5234 | informació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 | ||
| 5238 | rutas de búsqueda: | ||
| 5239 | |||
| 5240 | @defvr {Variable de entorno} GUIX_PACKAGE_PATH | ||
| 5241 | Es una lista separada por dos puntos de directorios en los que se buscarán | ||
| 5242 | módulos de paquetes adicionales. Los directorios enumerados en esta variable | ||
| 5243 | tienen preferencia sobre los propios módulos de la distribución. | ||
| 5244 | @end defvr | ||
| 5245 | |||
| 5246 | La distribución es @dfn{auto-contenida} y completamente @dfn{basada en el | ||
| 5247 | lanzamiento inicial}: cada paquete se construye basado únicamente en otros | ||
| 5248 | paquetes de la distribución. La raíz de este grafo de dependencias es un | ||
| 5249 | pequeño conjunto de @dfn{binarios del lanzamiento inicial}, proporcionados | ||
| 5250 | por el módulo @code{(gnu packages bootstrap)}. Para más información sobre el | ||
| 5251 | lanzamiento inicial, @pxref{Lanzamiento inicial}. | ||
| 5252 | |||
| 5253 | @node Definición de paquetes | ||
| 5254 | @section Definición de paquetes | ||
| 5255 | |||
| 5256 | La interfaz de alto nivel de las definiciones de paquetes está implementada | ||
| 5257 | en los módulos @code{(guix packages)} y @code{(guix build-system)}. Como un | ||
| 5258 | ejemplo, la definición de paquete, o @dfn{receta}, para el paquete GNU Hello | ||
| 5259 | es 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 | ||
| 5290 | Sin ser una experta en Scheme---pero conociendo un poco de inglés---, la | ||
| 5291 | lectora puede haber supuesto el significado de varios campos aquí. Esta | ||
| 5292 | expresión asocia la variable @code{hello} al objeto @code{<package>}, que | ||
| 5293 | esencialmente es un registro (@pxref{SRFI-9, Scheme records,, guile, GNU | ||
| 5294 | Guile Reference Manual}). Este objeto de paquete puede ser inspeccionado | ||
| 5295 | usando los procedimientos encontrados en el módulo @code{(guix packages)}; | ||
| 5296 | por ejemplo, @code{(package-name hello)} | ||
| 5297 | devuelve---¡sorpresa!---@code{"hello"}. | ||
| 5298 | |||
| 5299 | Con suerte, puede que sea capaz de importar parte o toda la definición del | ||
| 5300 | paquete de su interés de otro repositorio, usando la orden @code{guix | ||
| 5301 | import} (@pxref{Invocación de guix import}). | ||
| 5302 | |||
| 5303 | En el ejemplo previo, @var{hello} se define en un módulo para ella, | ||
| 5304 | @code{(gnu packages hello)}. Técnicamente, esto no es estrictamente | ||
| 5305 | necesario, pero es conveniente hacerlo: todos los paquetes definidos en | ||
| 5306 | módulos bajo @code{(gnu packages @dots{})} se reconocen automáticamente en | ||
| 5307 | las herramientas de línea de órdenes (@pxref{Módulos de paquetes}). | ||
| 5308 | |||
| 5309 | Hay unos pocos puntos que merece la pena destacar de la definición de | ||
| 5310 | paquete previa: | ||
| 5311 | |||
| 5312 | @itemize | ||
| 5313 | @item | ||
| 5314 | El campo @code{source} del paquete es un objeto @code{<origin>} | ||
| 5315 | (@pxref{Referencia de ``origin''}, para la referencia completa). Aquí se usa el | ||
| 5316 | método @code{url-fetch} de @code{(guix download)}, lo que significa que la | ||
| 5317 | fuente es un fichero a descargar por FTP o HTTP. | ||
| 5318 | |||
| 5319 | El prefijo @code{mirror://gnu} instruye a @code{url-fetch} para usar uno de | ||
| 5320 | los espejos GNU definidos en @code{(guix download)}. | ||
| 5321 | |||
| 5322 | El campo @code{sha256} especifica el hash SHA256 esperado del fichero | ||
| 5323 | descargado. Es obligatorio, y permite a Guix comprobar la integridad del | ||
| 5324 | fichero. La forma @code{(base32 @dots{})} introduce la representación base32 | ||
| 5325 | del 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 | ||
| 5329 | Cuando 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 | ||
| 5335 | El campo @code{build-system} especifica el procedimiento de construcción del | ||
| 5336 | paquete (@pxref{Sistemas de construcción}). Aquí, @var{gnu-build-system} representa el | ||
| 5337 | familiar sistema de construcción GNU, donde los paquetes pueden | ||
| 5338 | configurarse, construirse e instalarse con la secuencia de ordenes habitual | ||
| 5339 | @code{./configure && make && make check && make install}. | ||
| 5340 | |||
| 5341 | @item | ||
| 5342 | El campo @code{arguments} especifica las opciones para el sistema de | ||
| 5343 | construcció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 | ||
| 5345 | opció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 | ||
| 5352 | introducir una lista literal; @code{'} es sinónimo de | ||
| 5353 | @code{quote}. @xref{Expression Syntax, quoting,, guile, GNU Guile Reference | ||
| 5354 | Manual}, para más detalles. Aquí el valor del campo @code{arguments} es una | ||
| 5355 | lista 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 | |||
| 5358 | La secuencia almohadilla-dos puntos (@code{#:}) define una @dfn{palabra | ||
| 5359 | clave} Scheme (@pxref{Keywords,,, guile, GNU Guile Reference Manual}), y | ||
| 5360 | @code{#:configure-flags} es una palabra clave usada para pasar un parámetro | ||
| 5361 | nominal al sistema de construcción (@pxref{Coding With Keywords,,, guile, | ||
| 5362 | GNU Guile Reference Manual}). | ||
| 5363 | |||
| 5364 | @item | ||
| 5365 | El campo @code{inputs} especifica las entradas al proceso de | ||
| 5366 | construcción---es decir, dependencias de tiempo de construcción o ejecución | ||
| 5367 | del paquete. Aquí, definimos una entrada llamada @code{"gawk"}, cuyo valor | ||
| 5368 | es 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 | ||
| 5379 | De nuevo, @code{`} (un acento grave, sinónimo de @code{quasiquote}) nos | ||
| 5380 | permite introducir una lista literal en el campo @code{inputs}, mientras que | ||
| 5381 | @code{,} (una coma, sinónimo de @code{unquote}) nos permite insertar un | ||
| 5382 | valor en dicha lista (@pxref{Expression Syntax, unquote,, guile, GNU Guile | ||
| 5383 | Reference Manual}). | ||
| 5384 | |||
| 5385 | Fíjese que no hace falta que GCC, Coreutils, Bash y otras herramientas | ||
| 5386 | esenciales 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 | |||
| 5390 | No obstante, cualquier otra dependencia debe ser especificada en el campo | ||
| 5391 | @code{inputs}. Las dependencias no especificadas aquí simplemente no estarán | ||
| 5392 | disponibles para el proceso de construcción, provocando posiblemente un | ||
| 5393 | fallo de construcción. | ||
| 5394 | @end itemize | ||
| 5395 | |||
| 5396 | @xref{Referencia de ``package''}, para una descripción completa de los campos | ||
| 5397 | posibles. | ||
| 5398 | |||
| 5399 | Una vez la definición de paquete esté en su lugar, el paquete puede ser | ||
| 5400 | construido realmente usando la herramienta de línea de órdenes @code{guix | ||
| 5401 | build} (@pxref{Invocación de guix build}), pudiendo resolver cualquier fallo de | ||
| 5402 | construcción que encuentre (@pxref{Depuración de fallos de construcción}). Puede volver | ||
| 5403 | a 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 | ||
| 5405 | informació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 | ||
| 5406 | una definición. | ||
| 5407 | @vindex GUIX_PACKAGE_PATH | ||
| 5408 | Por último, @pxref{Canales}, para información sobre cómo extender la | ||
| 5409 | distribución añadiendo sus propias definiciones de paquetes en un ``canal''. | ||
| 5410 | |||
| 5411 | Finalmente, la actualización de la definición con una nueva versión oficial | ||
| 5412 | puede ser automatizada parcialmente por la orden @command{guix refresh} | ||
| 5413 | (@pxref{Invocación de guix refresh}). | ||
| 5414 | |||
| 5415 | Tras el telón, una derivación correspondiente al objeto @code{<package>} es | ||
| 5416 | calculada mediante el procedimiento @code{package-derivation}. Esta | ||
| 5417 | derivación es almacenada en un fichero @code{.drv} bajo | ||
| 5418 | @file{/gnu/store}. Las acciones de construcción que prescribe pueden | ||
| 5419 | entonces 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}] | ||
| 5423 | Devuelve 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} | ||
| 5427 | debe 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 | ||
| 5429 | Linux. @var{almacén} debe ser una conexión al daemon, que opera en el | ||
| 5430 | almacén (@pxref{El almacén}). | ||
| 5431 | @end deffn | ||
| 5432 | |||
| 5433 | @noindent | ||
| 5434 | @cindex compilación cruzada | ||
| 5435 | De manera similar, es posible calcular una derivación que construye de forma | ||
| 5436 | cruzada un paquete para otro sistema: | ||
| 5437 | |||
| 5438 | @deffn {Procedimiento Scheme} package-cross-derivation @var{almacén} @ | ||
| 5439 | @var{paquete} @var{plataforma} [@var{sistema}] | ||
| 5440 | Devuelve el objeto @code{<derivation>} de @var{paquete} compilado de forma | ||
| 5441 | cruzada desde @var{sistema} a @var{plataforma}. | ||
| 5442 | |||
| 5443 | @var{plataforma} debe ser una tripleta GNU válida que denote el hardware y | ||
| 5444 | sistema operativo objetivo, como @code{"mips64el-linux-gnu"} | ||
| 5445 | (@pxref{Configuration Names, GNU configuration triplets,, configure, GNU | ||
| 5446 | Configure 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 | ||
| 5452 | Los paquetes se pueden manipular de forma arbitraria. Un ejemplo de | ||
| 5453 | transformación útil es la @dfn{reescritura de entradas}, donde el árbol de | ||
| 5454 | dependencias de un paquete se reescribe reemplazando entradas específicas | ||
| 5455 | por otras: | ||
| 5456 | |||
| 5457 | @deffn {Procedimiento Scheme} package-input-rewriting @var{reemplazos} @ | ||
| 5458 | [@var{nombre-reescrito}] | ||
| 5459 | Devuelve un procedimiento que, cuando se le pasa un paquete, reemplaza sus | ||
| 5460 | dependencias directas e indirectas (pero no sus entradas implícitas) de | ||
| 5461 | acuerdo a @var{reemplazos}. @var{reemplazos} es una lista de pares de | ||
| 5462 | paquetes; el primer elemento de cada par es el paquete a reemplazar, el | ||
| 5463 | segundo es el reemplazo. | ||
| 5464 | |||
| 5465 | Opcionalmente, @var{nombre-reescrito} es un procedimiento de un parámetro | ||
| 5466 | que toma el nombre del paquete y devuelve su nuevo nombre tras la | ||
| 5467 | reescritura. | ||
| 5468 | @end deffn | ||
| 5469 | |||
| 5470 | @noindent | ||
| 5471 | Considere 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 | ||
| 5484 | Aquí primero definimos un procedimiento de reescritura que substituye | ||
| 5485 | @var{openssl} por @var{libressl}. Una vez hecho esto, lo usamos para definir | ||
| 5486 | una @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 | |||
| 5491 | The following variant of @code{package-input-rewriting} can match packages | ||
| 5492 | to be replaced by name rather than by identity. | ||
| 5493 | |||
| 5494 | @deffn {Procedimiento Scheme} package-input-rewriting/spec @var{reemplazos} | ||
| 5495 | Return 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 | ||
| 5498 | specification such as @code{"gcc"} or @code{"guile@@2"}, and each procedure | ||
| 5499 | takes a matching package and returns a replacement for that package. | ||
| 5500 | @end deffn | ||
| 5501 | |||
| 5502 | The 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 | |||
| 5510 | The key difference here is that, this time, packages are matched by spec and | ||
| 5511 | not by identity. In other words, any package in the graph that is called | ||
| 5512 | @code{openssl} will be replaced. | ||
| 5513 | |||
| 5514 | Un procedimiento más genérico para reescribir el grafo de dependencias de un | ||
| 5515 | paquete es @code{package-mapping}: acepta cambios arbitrarios sobre nodos | ||
| 5516 | del grafo. | ||
| 5517 | |||
| 5518 | @deffn {Scheme Procedure} package-mapping @var{proc} [@var{cortar?}] | ||
| 5519 | Devuelve un procedimiento que, dado un paquete, aplica @var{proc} a todos | ||
| 5520 | los paquetes de los que depende y devuelve el paquete resultante. El | ||
| 5521 | procedimiento para la recursión cuando @var{cortar?} devuelve verdadero para | ||
| 5522 | un 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 | |||
| 5534 | Esta sección resume todas las opciones disponibles en declaraciones | ||
| 5535 | @code{package} (@pxref{Definición de paquetes}). | ||
| 5536 | |||
| 5537 | @deftp {Tipo de datos} package | ||
| 5538 | Este es el tipo de datos que representa la receta de un paquete. | ||
| 5539 | |||
| 5540 | @table @asis | ||
| 5541 | @item @code{name} | ||
| 5542 | El nombre del paquete, como una cadena. | ||
| 5543 | |||
| 5544 | @item @code{version} | ||
| 5545 | La versión del paquete, como una cadena. | ||
| 5546 | |||
| 5547 | @item @code{source} | ||
| 5548 | Un objeto que determina cómo se debería obtener el código fuente del | ||
| 5549 | paquete. La mayor parte del tiempo, es un objeto @code{origin}, que denota | ||
| 5550 | un fichero obtenido de Internet (@pxref{Referencia de ``origin''}). También puede | ||
| 5551 | ser cualquier otro objeto ``tipo-fichero'' como @code{local-file}, que | ||
| 5552 | denota un fichero del sistema local de ficheros (@pxref{Expresiones-G, | ||
| 5553 | @code{local-file}}). | ||
| 5554 | |||
| 5555 | @item @code{build-system} | ||
| 5556 | El 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{'()}) | ||
| 5560 | Los parámetros que deben ser pasados al sistema de construcción. Es una | ||
| 5561 | lista que normalmente contiene una secuencia de pares de palabra clave y | ||
| 5562 | valor. | ||
| 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 | ||
| 5568 | Estos campos enumeran las dependencias del paquete. Cada uno es una lista de | ||
| 5569 | tuplas, donde cada tupla tiene una etiqueta para la entrada (una cadena) | ||
| 5570 | como su primer elemento, un paquete, origen o derivación como su segundo | ||
| 5571 | elemento, y opcionalmente el nombre de la salida que debe ser usada, cuyo | ||
| 5572 | valor predeterminado es @code{"out"} (@pxref{Paquetes con múltiples salidas}, para más información sobre salidas de paquetes). Por ejemplo, la | ||
| 5573 | lista 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 | ||
| 5582 | La distinción entre @code{native-inputs} y @code{inputs} es necesaria cuando | ||
| 5583 | se considera la compilación cruzada. Cuando se compila cruzadamente, las | ||
| 5584 | dependencias enumeradas en @code{inputs} son construidas para la | ||
| 5585 | arquitectura @emph{objetivo}; de modo contrario, las dependencias enumeradas | ||
| 5586 | en @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 | ||
| 5590 | necesarias en tiempo de construcción, pero no en tiempo de ejecución, como | ||
| 5591 | Autoconf, Automake, pkg-config, Gettext o Bison. @command{guix lint} puede | ||
| 5592 | informar de probables errores en este área (@pxref{Invocación de guix lint}). | ||
| 5593 | |||
| 5594 | @anchor{package-propagated-inputs} | ||
| 5595 | Por último, @code{propagated-inputs} es similar a @code{inputs}, pero los | ||
| 5596 | paquetes especificados se instalarán automáticamente junto al paquete al que | ||
| 5597 | pertenecen (@pxref{package-cmd-propagated-inputs, @command{guix package}}, | ||
| 5598 | para información sobre cómo @command{guix package} maneja las entradas | ||
| 5599 | propagadas). | ||
| 5600 | |||
| 5601 | Por ejemplo esto es necesario cuando una biblioteca C/C++ necesita cabeceras | ||
| 5602 | de otra biblioteca para compilar, o cuando un fichero pkg-config se refiere | ||
| 5603 | a otro @i{via} su campo @code{Requires}. | ||
| 5604 | |||
| 5605 | Otro ejemplo donde @code{propagated-inputs} es útil es en lenguajes que | ||
| 5606 | carecen de la facilidad de almacenar la ruta de búsqueda de tiempo de | ||
| 5607 | ejecución de la misma manera que el campo @code{RUNPATH} de los ficheros | ||
| 5608 | ELF; esto incluye Guile, Python, Perl y más. Para asegurarse que las | ||
| 5609 | bibliotecas escritas en esos lenguajes puedan encontrar en tiempo de | ||
| 5610 | ejecución el código de las bibliotecas de las que dependen, las dependencias | ||
| 5611 | de tiempo de ejecución deben enumerarse en @code{propagated-inputs} en vez | ||
| 5612 | de en @code{inputs}. | ||
| 5613 | |||
| 5614 | @item @code{outputs} (predeterminada: @code{'("out")}) | ||
| 5615 | La 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{'()}) | ||
| 5619 | Una lista de objetos @code{search-path-specification} describiendo las | ||
| 5620 | variables de entorno de rutas de búsqueda respetadas por el paquete. | ||
| 5621 | |||
| 5622 | @item @code{replacement} (predeterminado: @code{1.0}) | ||
| 5623 | Esto 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 | ||
| 5625 | más detalles. | ||
| 5626 | |||
| 5627 | @item @code{synopsis} | ||
| 5628 | Una descripción en una línea del paquete. | ||
| 5629 | |||
| 5630 | @item @code{description} | ||
| 5631 | Una descripción más elaborada del paquete. | ||
| 5632 | |||
| 5633 | @item @code{license} | ||
| 5634 | @cindex licencia, de paquetes | ||
| 5635 | La licencia del paquete; un valor de @code{(guix licenses)}, o una lista de | ||
| 5636 | dichos valores. | ||
| 5637 | |||
| 5638 | @item @code{home-page} | ||
| 5639 | La URL de la página principal del paquete, como una cadena. | ||
| 5640 | |||
| 5641 | @item @code{supported-systems} (predeterminados: @code{%supported-systems}) | ||
| 5642 | La lista de sistemas en los que se mantiene el paquete, como cadenas de la | ||
| 5643 | forma @code{arquitectura-núcleo}, por ejemplo @code{"x86_64-linux"}. | ||
| 5644 | |||
| 5645 | @item @code{maintainers} (predeterminadas: @code{'()}) | ||
| 5646 | La 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}) | ||
| 5649 | La localización de las fuentes del paquete. Es útil forzar su valor cuando | ||
| 5650 | se hereda de otro paquete, en cuyo caso este campo no se corrige | ||
| 5651 | automáticamente. | ||
| 5652 | @end table | ||
| 5653 | @end deftp | ||
| 5654 | |||
| 5655 | @deffn {Scheme Syntax} this-package | ||
| 5656 | When used in the @emph{lexical scope} of a package field definition, this | ||
| 5657 | identifier resolves to the package being defined. | ||
| 5658 | |||
| 5659 | The example below shows how to add a package as a native input of itself | ||
| 5660 | when 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 | |||
| 5674 | It 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 | |||
| 5680 | Esta sección resume todas las opciones disponibles en declaraciones | ||
| 5681 | @code{origin} (@pxref{Definición de paquetes}). | ||
| 5682 | |||
| 5683 | @deftp {Tipo de datos} origin | ||
| 5684 | Este es el tipo de datos que representa un origen de código fuente. | ||
| 5685 | |||
| 5686 | @table @asis | ||
| 5687 | @item @code{uri} | ||
| 5688 | Un objeto que contiene el URI de las fuentes. El tipo de objeto depende del | ||
| 5689 | valor de @code{method} (véase a continuación). Por ejemplo, cuando se usa el | ||
| 5690 | mé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} | ||
| 5694 | Un procedimiento que maneja el URI. | ||
| 5695 | |||
| 5696 | Algunos ejemplos son: | ||
| 5697 | |||
| 5698 | @table @asis | ||
| 5699 | @item @var{url-fetch} de @code{(guix download)} | ||
| 5700 | descarga 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)} | ||
| 5705 | clona el repositorio de control de versiones Git, y prepara la revisión | ||
| 5706 | especificada en el campo @code{uri} como un objeto @code{git-reference}; una | ||
| 5707 | referencia @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} | ||
| 5717 | Un vector de bytes que contiene el hash SHA-256 de las fuentes. Típicamente | ||
| 5718 | la forma @code{base32} se usa aquí para generar el vector de bytes de una | ||
| 5719 | cadena en base-32. | ||
| 5720 | |||
| 5721 | Puede 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}) | ||
| 5724 | El nombre de fichero bajo el que el código fuente se almacenará. Cuando este | ||
| 5725 | es @code{#f}, un valor predeterminado sensato se usará en la mayor parte de | ||
| 5726 | casos. En caso de que las fuentes se obtengan de una URL, el nombre de | ||
| 5727 | fichero de la URL se usará. Para copias de trabajo de sistemas de control de | ||
| 5728 | versiones, se recomienda proporcionar el nombre de fichero explícitamente ya | ||
| 5729 | que el predeterminado no es muy descriptivo. | ||
| 5730 | |||
| 5731 | @item @code{patches} (predeterminados: @code{'()}) | ||
| 5732 | Una lista de nombres de ficheros, orígenes u objetos tipo-fichero | ||
| 5733 | (@pxref{Expresiones-G, objetos tipo-fichero}) apuntando a parches que deben | ||
| 5734 | ser aplicados a las fuentes. | ||
| 5735 | |||
| 5736 | La lista de parches debe ser incondicional. En particular, no puede depender | ||
| 5737 | del varlo de @code{%current-system} o @code{%current-target-system}. | ||
| 5738 | |||
| 5739 | @item @code{snippet} (predeterminado: @code{#f}) | ||
| 5740 | Una expresión-G (@pxref{Expresiones-G}) o expresión-S que se ejecutará en el | ||
| 5741 | directorio de fuentes. Esta es una forma conveniente de modificar el | ||
| 5742 | software, a veces más que un parche. | ||
| 5743 | |||
| 5744 | @item @code{patch-flags} (predeterminadas: @code{'("-p1")}) | ||
| 5745 | Una lista de opciones de línea de órdenes que deberían ser pasadas a la | ||
| 5746 | orden @code{patch}. | ||
| 5747 | |||
| 5748 | @item @code{patch-inputs} (predeterminada: @code{#f}) | ||
| 5749 | Paquetes o derivaciones de entrada al proceso de aplicación de los | ||
| 5750 | parches. Cuando es @code{#f}, se proporciona el conjunto habitual de | ||
| 5751 | entradas necesarias para la aplicación de parches, como GNU@tie{}Patch. | ||
| 5752 | |||
| 5753 | @item @code{modules} (predeterminados: @code{'()}) | ||
| 5754 | Una lista de módulos Guile que debe ser cargada durante el proceso de | ||
| 5755 | aplicación de parches y mientras se ejecuta el código del campo | ||
| 5756 | @code{snippet}. | ||
| 5757 | |||
| 5758 | @item @code{patch-guile} (predeterminado: @code{#f}) | ||
| 5759 | El paquete Guile que debe ser usado durante la aplicación de parches. Cuando | ||
| 5760 | es @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 | ||
| 5769 | Cada definición de paquete especifica un @dfn{sistema de construcción} y | ||
| 5770 | parámetros para dicho sistema de construcción (@pxref{Definición de paquetes}). Este campo @code{build-system} representa el procedimiento de | ||
| 5771 | construcción del paquete, así como las dependencias implícitas de dicho | ||
| 5772 | procedimiento de construcción. | ||
| 5773 | |||
| 5774 | Los sistemas de construcción son objetos @code{<build-system>}. La interfaz | ||
| 5775 | para crear y manipularlos se proporciona en el módulo @code{(guix | ||
| 5776 | build-system)}, y otros módulos exportan sistemas de construcción reales. | ||
| 5777 | |||
| 5778 | @cindex bag (representación de paquetes de bajo nivel) | ||
| 5779 | En su implementación, los sistemas de construcción primero compilan los | ||
| 5780 | objetos package a objetos @dfn{bag}. Una bolsa (traducción de @dfn{bag}) es | ||
| 5781 | como un paquete, pero con menos ornamentos---en otras palabras, una bolsa es | ||
| 5782 | una representación a un nivel más bajo de un paquete, que contiene todas las | ||
| 5783 | entradas de dicho paquete, incluyendo algunas implícitamente añadidas por el | ||
| 5784 | sistema de construcción. Esta representación intermedia se compila entonces | ||
| 5785 | a una derivación (@pxref{Derivaciones}). | ||
| 5786 | |||
| 5787 | Los sistemas de construcción aceptan una lista opcional de | ||
| 5788 | @dfn{parámetros}. En las definiciones de paquete, estos son pasados @i{vía} | ||
| 5789 | el campo @code{arguments} (@pxref{Definición de paquetes}). Normalmente son | ||
| 5790 | parámetros con palabras clave (@pxref{Optional Arguments, keyword arguments | ||
| 5791 | in Guile,, guile, GNU Guile Reference Manual}). El valor de estos parámetros | ||
| 5792 | normalmente se evalúa en la @dfn{capa de construcción}---es decir, por un | ||
| 5793 | proceso Guile lanzado por el daemon (@pxref{Derivaciones}). | ||
| 5794 | |||
| 5795 | El sistema de construcción principal es @var{gnu-build-system}, el cual | ||
| 5796 | implementa el procedimiento estándar de construcción para GNU y muchos otros | ||
| 5797 | paquetes. 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 | ||
| 5801 | variantes (@pxref{Configuration, configuration and makefile conventions,, | ||
| 5802 | standards, GNU Coding Standards}). | ||
| 5803 | |||
| 5804 | @cindex fases de construcción | ||
| 5805 | En resumen, los paquetes que lo usan se configuran, construyen e instalan | ||
| 5806 | con la habitual secuencia de órdenes @code{./configure && make && make check | ||
| 5807 | && make install}. En la práctica, algunos pasos adicionales son necesarios | ||
| 5808 | habitualmente. Todos estos pasos se dividen en @dfn{fases} separadas, | ||
| 5809 | notablemente@footnote{Rogamos que se inspeccionen los módulos @code{(guix | ||
| 5810 | build gnu-build-system)} para más detalles sobre las fases de construcción}: | ||
| 5811 | |||
| 5812 | @table @code | ||
| 5813 | @item unpack | ||
| 5814 | Extrae el archivador tar de la fuente, y cambia el directorio actual al | ||
| 5815 | directorio recién extraído. Si la fuente es realmente un directorio, lo | ||
| 5816 | copia al árbol de construcción y entra en ese directorio. | ||
| 5817 | |||
| 5818 | @item patch-source-shebangs | ||
| 5819 | Sustituye secuencias ``#!'' encontradas al inicio de los ficheros de fuentes | ||
| 5820 | para que hagan referencia a los nombres correctos de ficheros del | ||
| 5821 | almacén. Por ejemplo, esto cambia @code{#!/bin/sh} por | ||
| 5822 | @code{#!/gnu/store/@dots{}-bash-4.3/bin/sh}. | ||
| 5823 | |||
| 5824 | @item configure | ||
| 5825 | Ejecuta el guión @file{configure} con algunas opciones predeterminadas, como | ||
| 5826 | @code{--prefix=/gnu/store/@dots{}}, así como las opciones especificadas por | ||
| 5827 | el parámetro @code{#:configure-flags}. | ||
| 5828 | |||
| 5829 | @item build | ||
| 5830 | Ejecuta @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 | ||
| 5835 | Ejecuta @code{make check}, u otro objetivo especificado con | ||
| 5836 | @code{#:test-target}, a menos que se pasase @code{#:tests? #f}. Si el | ||
| 5837 | parámetro @code{#:parallel-tests?} es verdadero (por defecto), ejecuta | ||
| 5838 | @code{make check -j}. | ||
| 5839 | |||
| 5840 | @item install | ||
| 5841 | Ejecuta @code{make install} con las opciones enumeradas en | ||
| 5842 | @code{#:make-flags}. | ||
| 5843 | |||
| 5844 | @item patch-shebangs | ||
| 5845 | Sustituye las secuencias ``#!'' en los ficheros ejecutables instalados. | ||
| 5846 | |||
| 5847 | @item strip | ||
| 5848 | Extrae 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} | ||
| 5850 | cuando esté disponible (@pxref{Instalación de ficheros de depuración}). | ||
| 5851 | @end table | ||
| 5852 | |||
| 5853 | @vindex %standard-phases | ||
| 5854 | El módulo del lado de construcción @code{(guix build gnu-build-system)} | ||
| 5855 | define @var{%standard-phases} como la lista predeterminada de fases de | ||
| 5856 | construcción. @var{%standard-phases} es una lista de pares | ||
| 5857 | símbolo/procedimiento, donde el procedimiento implementa la fase real. | ||
| 5858 | |||
| 5859 | La lista de fases usadas para un paquete particular se puede cambiar con el | ||
| 5860 | parámetro @code{#:phases}. Por ejemplo, pasar: | ||
| 5861 | |||
| 5862 | @example | ||
| 5863 | #:phases (modify-phases %standard-phases (delete 'configure)) | ||
| 5864 | @end example | ||
| 5865 | |||
| 5866 | significa que todas las fases descritas anteriormente serán usadas, excepto | ||
| 5867 | la fase @code{configure}. | ||
| 5868 | |||
| 5869 | Además, este sistema de construcción asegura que el entorno ``estándar'' | ||
| 5870 | para paquetes GNU está disponible. Esto incluye herramientas como GCC, libc, | ||
| 5871 | Coreutils, Bash, Make, Diffutils, grep y sed (vea el módulo @code{(guix | ||
| 5872 | build system gnu)} para una lista completa). A estas las llamamos las | ||
| 5873 | @dfn{entradas implícitas} de un paquete, porque las definiciones de paquete | ||
| 5874 | no las mencionan. | ||
| 5875 | @end defvr | ||
| 5876 | |||
| 5877 | Se han definido otros objetos @code{<build-system>} para implementar otras | ||
| 5878 | convenciones y herramientas usadas por paquetes de software libre. Heredan | ||
| 5879 | la mayor parte de @var{gnu-build-system}, y se diferencian principalmente en | ||
| 5880 | el conjunto de entradas implícitamente añadidas al proceso de construcción, | ||
| 5881 | y en la lista de fases ejecutadas. Algunos de estos sistemas de construcción | ||
| 5882 | se enumeran a continuación. | ||
| 5883 | |||
| 5884 | @defvr {Variable Scheme} ant-build-system | ||
| 5885 | @code{(guix build-system ant)} exporta esta variable. Implementa el | ||
| 5886 | procedimiento de construcción de paquetes Java que pueden construirse con | ||
| 5887 | @url{http://ant.apache.org/, la herramienta de construcción Ant}. | ||
| 5888 | |||
| 5889 | Añade tanto @code{ant} como el @dfn{kit de desarrollo Java} (JDK), que | ||
| 5890 | proporciona el paquete @code{icedtea}, al conjunto de entradas. Se pueden | ||
| 5891 | especificar paquetes diferentes con los parámetros @code{#:ant} y | ||
| 5892 | @code{#:jdk}, respectivamente. | ||
| 5893 | |||
| 5894 | Cuando el paquete original no proporciona un fichero Ant apropiado, el | ||
| 5895 | parámetro @code{#:jar-name} puede usarse para generar un fichero de | ||
| 5896 | construcción Ant @file{build.xml} mínimo con tareas para construir el | ||
| 5897 | archivo jar especificado. En este caso, el parámetro @code{#:source-dir} se | ||
| 5898 | puede usar para especificar el subdirectorio de fuentes, con ``src'' como | ||
| 5899 | valor predeterminado. | ||
| 5900 | |||
| 5901 | El parámetro @code{#:main-class} puede usarse con el fichero de construcción | ||
| 5902 | Ant mínimo para especificar la clase main del archivo jar producido. Esto | ||
| 5903 | permite ejecutar el archivo jar. El parámetro @code{#:test-include} puede | ||
| 5904 | usarse para especificar la lista de tests junit a ejecutar. El valor | ||
| 5905 | predeterminado es @code{(list "**/*Test.java")}. @code{#:test-exclude} puede | ||
| 5906 | usarse para desactivar algunas pruebas. Su valor predeterminado es | ||
| 5907 | @code{(list "**/Abstract*.java")} ya que las clases abstractas no se pueden | ||
| 5908 | ejecutar como pruebas. | ||
| 5909 | |||
| 5910 | El parámetro @code{#:build-target} se puede usar para especificar la tarea | ||
| 5911 | Ant que debe ser ejecutada durante la fase @code{build}. Por defecto se | ||
| 5912 | ejecuta 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 | ||
| 5919 | Esta variable es exportada por @code{(guix build-system | ||
| 5920 | android-ndk)}. Implementa un procedimiento de construcción para paquetes | ||
| 5921 | Android NDK (kit de desarrollo nativo) usando un proceso de construcción | ||
| 5922 | específico de Guix. | ||
| 5923 | |||
| 5924 | El sistema de construcción asume que los paquetes instalan sus ficheros de | ||
| 5925 | interfaz pública (cabeceras) en el subdirectorio "include" de la salida | ||
| 5926 | "out" y sus bibliotecas en el subdirectorio "lib" de la salida "out". | ||
| 5927 | |||
| 5928 | También se asume que la unión de todas las dependencias de un paquete no | ||
| 5929 | tiene ficheros en conflicto. | ||
| 5930 | |||
| 5931 | En este momento no funciona la compilación cruzada - por lo que las | ||
| 5932 | bibliotecas 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 | |||
| 5940 | Estas variables, exportadas por @code{(guix build-system asdf)}, implementan | ||
| 5941 | procedimientos de construcción para paquetes Common Lisp usando | ||
| 5942 | @url{https://common-lisp.net/project/asdf, ``ASDF'''}. ASDF es una utilidad | ||
| 5943 | de definición de sistema para programas y bibliotecas Common Lisp. | ||
| 5944 | |||
| 5945 | El sistema @code{asdf-build-system/source} instala los paquetes en forma de | ||
| 5946 | fuentes, y puede ser cargado usando cualquier implementación common lisp, | ||
| 5947 | vía ASDF. Los otros, como @code{asdf-build-system/sbcl}, instalan sistemas | ||
| 5948 | binarios en el formato entendido por una implementación particular. Estos | ||
| 5949 | sistemas de construcción también pueden usarse para producir programas | ||
| 5950 | ejecutables, o imágenes lisp que contengan un conjunto precargado de | ||
| 5951 | paquetes. | ||
| 5952 | |||
| 5953 | El sistema de construcción usa convenciones de nombres. Para paquetes | ||
| 5954 | binarios, el paquete debería estar prefijado con la implementación lisp, | ||
| 5955 | como @code{sbcl-} para @code{asdf-build-system/sbcl}. | ||
| 5956 | |||
| 5957 | Adicionalmente, el paquete de fuentes correspondiente debe etiquetarse | ||
| 5958 | usando la misma convención que los paquetes python (vea @ref{Módulos Python}), usando el prefijo @code{cl-}. | ||
| 5959 | |||
| 5960 | Para paquetes binarios, cada sistema debe definirse como un paquete Guix. Si | ||
| 5961 | el campo @code{origin} de un paquete contiene varios sistemas, las | ||
| 5962 | variaciones del paquete pueden crearse para construir todos los | ||
| 5963 | sistemas. Los paquetes de fuentes, los cuales usan | ||
| 5964 | @code{asdf-build-system/source}, pueden contener varios sistemas. | ||
| 5965 | |||
| 5966 | Para crear programa ejecutables e imágenes, se pueden usar los | ||
| 5967 | procedimientos 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 | ||
| 5969 | fase @code{create-symlinks}, de modo que el sistema recién construido pueda | ||
| 5970 | ser usado dentro de la imagen resultante. @code{build-program} necesita una | ||
| 5971 | lista de expresiones Common Lisp a través del parámetro | ||
| 5972 | @code{#:entry-prgogram}. | ||
| 5973 | |||
| 5974 | Si el sistema no está definido en su propio fichero @code{.asd} del mismo | ||
| 5975 | nombre, entonces se debe usar el parámetro @code{#:asd-file} para | ||
| 5976 | especificar el fichero en el que se define el sistema. Más allá, si el | ||
| 5977 | paquete define un sistema para sus pruebas en su fichero separado, se | ||
| 5978 | cargará 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 | ||
| 5980 | ficheros @code{<sistema>-tests.asd}, @code{<system>-test.asd}, | ||
| 5981 | @code{tests.asd} y @code{test.asd}. | ||
| 5982 | |||
| 5983 | Si por alguna razón el paquete debe ser nombrado de una forma diferente a la | ||
| 5984 | sugerida por las convenciones de nombres, el parámetro | ||
| 5985 | @code{#:asd-system-name} puede usarse para especificar el nombre del | ||
| 5986 | sistema. | ||
| 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) | ||
| 5993 | Esta variable se exporta en @code{(guix build-system cargo)}. Permite la | ||
| 5994 | construcción de paquetes usando Cargo, la herramienta de construcción del | ||
| 5995 | @uref{https://www.rust-lang.org, lenguaje de programación Rust}. | ||
| 5996 | |||
| 5997 | En su fase @code{configure}, este sistema de construcción substituye las | ||
| 5998 | dependencias especificadas en el fichero @file{Cargo.toml} con entradas a | ||
| 5999 | los paquetes Guix. La fase @code{install} instala los binarios, y también | ||
| 6000 | instala 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 | ||
| 6006 | Esta variable se exporta en @code{(guix build-system clojure)}. Implementa | ||
| 6007 | un procedimiento de construcción simple para paquetes | ||
| 6008 | @uref{https://clojure.org/, Clojure} usando directamente @code{compile} en | ||
| 6009 | Clojure. La compilación cruzada no está disponible todavía. | ||
| 6010 | |||
| 6011 | Añade @code{clojure}, @code{icedtea} y @code{zip} al conjunto de | ||
| 6012 | entradas. Se pueden especificar paquetes diferentes con los parámetros | ||
| 6013 | @code{#:clojure}, @code{#:jdk} y @code{#:zip}, respectivamente. | ||
| 6014 | |||
| 6015 | Una lista de directorios de fuentes, directorios de pruebas y nombres de jar | ||
| 6016 | pueden especificarse con los parámetros @code{#:source-dirs}, | ||
| 6017 | @code{#:test-dirs} y @code{#:jar-names}, respectivamente. El directorio de | ||
| 6018 | compilación y la clase principal pueden especificarse con los parámetros | ||
| 6019 | @code{#:compile-dir} y @code{#:main-class}, respectivamente. Otros | ||
| 6020 | parámetros se documentan más adelante. | ||
| 6021 | |||
| 6022 | Este sistema de construcción es una extensión de @var{ant-build-system}, | ||
| 6023 | pero con las siguientes fases cambiadas: | ||
| 6024 | |||
| 6025 | @table @code | ||
| 6026 | |||
| 6027 | @item build | ||
| 6028 | Esta fase llama @code{compile} en Clojure para compilar los ficheros de | ||
| 6029 | fuentes y ejecuta @command{jar} para crear archivadores jar tanto de | ||
| 6030 | ficheros de fuentes y compilados de acuerdo con las listas de inclusión y | ||
| 6031 | exclusión especificadas en @code{#:aot-include} y @code{#:aot-exclude}, | ||
| 6032 | respectivamente. La lista de exclusión tiene prioridad sobre la de | ||
| 6033 | inclusión. Estas listas consisten en símbolos que representan bibliotecas | ||
| 6034 | Clojure o la palabra clave especial @code{#:all} que representa todas las | ||
| 6035 | bibliotecas encontradas en los directorios de fuentes. El parámetro | ||
| 6036 | @code{#:omit-source?} determina si las fuentes deben incluirse en los | ||
| 6037 | archivadores jar. | ||
| 6038 | |||
| 6039 | @item check | ||
| 6040 | Esta fase ejecuta las pruebas de acuerdo a las listas de inclusión y | ||
| 6041 | exclusión especificadas en @code{#:test-include} y @code{#:test-exclude}, | ||
| 6042 | respectivamente. Sus significados son análogos a los de @code{#:aot-include} | ||
| 6043 | y @code{#:aot-exclude}, excepto que la palabra clave especial @code{#:all} | ||
| 6044 | designa ahora a todas las bibliotecas Clojure encontradas en los directorios | ||
| 6045 | de pruebas. El parámetro @code{#:tests?} determina si se deben ejecutar las | ||
| 6046 | pruebas. | ||
| 6047 | |||
| 6048 | @item install | ||
| 6049 | Esta fase instala todos los archivadores jar construidos previamente. | ||
| 6050 | @end table | ||
| 6051 | |||
| 6052 | Además de las previas, este sistema de construcción contiene una fase | ||
| 6053 | adicional: | ||
| 6054 | |||
| 6055 | @table @code | ||
| 6056 | |||
| 6057 | @item install-doc | ||
| 6058 | Esta fase instala todos los ficheros de nivel superior con un nombre que | ||
| 6059 | corresponda con @var{%doc-regex}. Una expresión regular diferente se puede | ||
| 6060 | especificar 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 | ||
| 6067 | Esta variable se exporta en @code{(guix build-system cmake)}. Implementa el | ||
| 6068 | procedimiento de construcción para paquetes que usen la | ||
| 6069 | @url{http://www.cmake.org, herramienta de construcción CMake}. | ||
| 6070 | |||
| 6071 | Automáticamente añade el paquete @code{cmake} al conjunto de entradas. El | ||
| 6072 | paquete usado se puede especificar con el parámetro @code{#:cmake}. | ||
| 6073 | |||
| 6074 | El parámetro @code{#:configure-flags} se toma como una lista de opciones a | ||
| 6075 | pasar a @command{cmake}. El parámetro @code{#:build-type} especifica en | ||
| 6076 | términos abstractos las opciones pasadas al compilador; su valor | ||
| 6077 | predeterminado es @code{"RelWithDebInfo"} (quiere decir ``modo de entrega | ||
| 6078 | con información de depuración''), lo que aproximadamente significa que el | ||
| 6079 | código se compila con @code{-O2 -g}, lo cual es el caso predeterminado en | ||
| 6080 | paquetes basados en Autoconf. | ||
| 6081 | @end defvr | ||
| 6082 | |||
| 6083 | @defvr {Variable Scheme} dune-build-system | ||
| 6084 | This variable is exported by @code{(guix build-system dune)}. It supports | ||
| 6085 | builds of packages using @uref{https://dune.build/, Dune}, a build tool for | ||
| 6086 | the 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 | ||
| 6089 | system. | ||
| 6090 | |||
| 6091 | Automáticamente añade el paquete @code{dune} al conjunto de entradas. El | ||
| 6092 | paquete usado se puede especificar con el parámetro @code{#:dune}. | ||
| 6093 | |||
| 6094 | There is no @code{configure} phase because dune packages typically don't | ||
| 6095 | need to be configured. The @code{#:build-flags} parameter is taken as a | ||
| 6096 | list of flags passed to the @code{dune} command during the build. | ||
| 6097 | |||
| 6098 | The @code{#:jbuild?} parameter can be passed to use the @code{jbuild} | ||
| 6099 | command instead of the more recent @code{dune} command while building a | ||
| 6100 | package. Its default value is @code{#f}. | ||
| 6101 | |||
| 6102 | The @code{#:package} parameter can be passed to specify a package name, | ||
| 6103 | which is useful when a package contains multiple packages and you want to | ||
| 6104 | build only one of them. This is equivalent to passing the @code{-p} | ||
| 6105 | argument to @code{dune}. | ||
| 6106 | @end defvr | ||
| 6107 | |||
| 6108 | @defvr {Variable Scheme} go-build-system | ||
| 6109 | Esta variable se exporta en @code{(guix build-system go)}. Implementa el | ||
| 6110 | procedimiento de construcción para paquetes Go usando los | ||
| 6111 | @url{https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies, | ||
| 6112 | mecanismos de construcción de Go} estándares. | ||
| 6113 | |||
| 6114 | Se 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} | ||
| 6117 | corresponde a la ruta del sistema de ficheros esperada por los guiones de | ||
| 6118 | construcción del paquete y los paquetes referenciados, y proporciona una | ||
| 6119 | forma de referenciar un paquete Go unívocamente. Está basado típicamente en | ||
| 6120 | una combinación de la URI remota del paquete de ficheros de fuente y la | ||
| 6121 | estructura jerárquica del sistema de ficheros. En algunos casos, necesitará | ||
| 6122 | desempaquetar el código fuente del paquete en una estructura de directorios | ||
| 6123 | diferente a la indicada en la ruta de importación, y @code{#:unpack-path} | ||
| 6124 | debe usarse en dichos casos. | ||
| 6125 | |||
| 6126 | Los paquetes que proporcionan bibliotecas Go deben instalar su código fuente | ||
| 6127 | en la salida de la construcción. El parámetro @code{#:install-source?}, cuyo | ||
| 6128 | valor por defecto es @code{#t}, controla si se instalará o no el código | ||
| 6129 | fuente. 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 | ||
| 6134 | Esta variable se exporta en @code{(guix build-system glib-or-gtk)}. Está | ||
| 6135 | pensada para usarse con paquetes que usan GLib o GTK+. | ||
| 6136 | |||
| 6137 | Este sistema de construcción añade las siguientes dos fases a las definidas | ||
| 6138 | en @var{gnu-build-system}: | ||
| 6139 | |||
| 6140 | @table @code | ||
| 6141 | @item glib-or-gtk-wrap | ||
| 6142 | La 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 | ||
| 6145 | GTK+}. Esto se consigue recubriendo los programas en guiones de lanzamiento | ||
| 6146 | que establecen apropiadamente las variables de entorno @code{GTK_PATH}. | ||
| 6147 | |||
| 6148 | Es posible excluir salidas específicas del paquete del proceso de | ||
| 6149 | recubrimiento enumerando sus nombres en el parámetro | ||
| 6150 | @code{#:glib-org-gtk-wrap-excluded-outputs}. Esto es útil cuando se sabe que | ||
| 6151 | una salida no contiene binarios GLib o GTK+, y cuando empaquetar | ||
| 6152 | gratuitamente añadiría una dependencia de dicha salida en GLib y GTK+. | ||
| 6153 | |||
| 6154 | @item glib-or-gtk-compile-schemas | ||
| 6155 | La fase @code{glib-or-gtk-compile-schemas} se asegura que todos los | ||
| 6156 | @uref{https://developer.gnome.org/gio/stable/glib-compile-schemas.html, | ||
| 6157 | esquemas GSettings} o GLib se compilan. La compilación la realiza el | ||
| 6158 | programa @command{glib-compile-schemas}. Lo proporciona el paquete | ||
| 6159 | @code{glib:bin} que se importa automáticamente por el sistema de | ||
| 6160 | construcció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 | |||
| 6165 | Ambas fases se ejecutan tras la fase @code{install}. | ||
| 6166 | @end defvr | ||
| 6167 | |||
| 6168 | @defvr {Variable Scheme} guile-build-system | ||
| 6169 | Este sistema de construcción es para paquetes Guile que consisten | ||
| 6170 | exclusivamente en código Scheme y son tan simples que no tienen ni siquiera | ||
| 6171 | un fichero Makefile, menos un guión @file{configure}. Compila código Scheme | ||
| 6172 | usando @command{guild compile} (@pxref{Compilation,,, guile, GNU Guile | ||
| 6173 | Reference Manual}) e instala los ficheros @file{.scm} y @file{.go} en el | ||
| 6174 | lugar correcto. También instala documentación. | ||
| 6175 | |||
| 6176 | Este sistema de construcción permite la compilación cruzada usando la opción | ||
| 6177 | @code{--target} de @command{guild compile}. | ||
| 6178 | |||
| 6179 | Los paquetes construidos con @code{guile-build-system} deben proporcionar un | ||
| 6180 | paquete Guile en su campo @code{native-inputs}. | ||
| 6181 | @end defvr | ||
| 6182 | |||
| 6183 | @defvr {Variable Scheme} minify-build-system | ||
| 6184 | Esta variable se exporta en @code{(guix build-system minify)}. Implementa un | ||
| 6185 | procedimiento de minificación para paquetes JavaScript simples. | ||
| 6186 | |||
| 6187 | Añade @code{uglify-js} al conjunto de entradas y lo utiliza para comprimir | ||
| 6188 | todos los ficheros JavaScript en el directorio @file{src}. Un paquete de | ||
| 6189 | minificación diferente puede especificarse con el parámetro | ||
| 6190 | @code{#:uglify-js}, pero se espera que el paquete escriba el código | ||
| 6191 | minificado en la salida estándar. | ||
| 6192 | |||
| 6193 | Cuando los ficheros JavaScript de entrada no se encuentran en el directorio | ||
| 6194 | @file{src}, el parámetro @code{#:javascript-files} puede usarse para | ||
| 6195 | especificar una lista de nombres de fichero que proporcionar al minificador. | ||
| 6196 | @end defvr | ||
| 6197 | |||
| 6198 | @defvr {Variable Scheme} ocaml-build-system | ||
| 6199 | Esta variable se exporta en @code{(guix build-system ocaml)}. Implementa un | ||
| 6200 | procedimiento de construcción para paquetes @uref{https://ocaml.org, OCaml}, | ||
| 6201 | que consiste en seleccionar el conjunto correcto de órdenes a ejecutar para | ||
| 6202 | cada paquete. Los paquetes OCaml pueden esperar la ejecución de muchas | ||
| 6203 | ordenes diferentes. Este sistema de construcción probará algunas de ellas. | ||
| 6204 | |||
| 6205 | Cuando el paquete tiene un fichero @file{setup.ml} presente en el nivel | ||
| 6206 | superior, 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á | ||
| 6208 | que este fichero se generó con @uref{http://oasis.forge.ocamlcore.org/ | ||
| 6209 | OASIS} y se encargará de establecer el prefijo y la habilitación de las | ||
| 6210 | pruebas si no están deshabilitadas. Puede pasar opciones de configuración y | ||
| 6211 | construcción con @code{#:configure-flags} y @code{#:build-flags}, | ||
| 6212 | respectivamente. El parámetro @code{#:test-flags} puede usarse para cambiar | ||
| 6213 | el 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 | ||
| 6215 | construcción e instalación. | ||
| 6216 | |||
| 6217 | Cuando el paquete tiene un fichero @file{configure}, se asume que es un | ||
| 6218 | guión de configuración hecho a mano que necesita un formato de parámetros | ||
| 6219 | diferente a los del sistema @code{gnu-build-system}. Puede añadir más | ||
| 6220 | opciones con el parámetro @code{#:configure-flags}. | ||
| 6221 | |||
| 6222 | Cuando 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 | ||
| 6224 | de construcción y e instalación con el parámetro @code{#:make-flags}. | ||
| 6225 | |||
| 6226 | Por último, algunos paquetes no tienen estos ficheros y usan unas | ||
| 6227 | localizaciones de algún modo estándares para su sistema de construcción. En | ||
| 6228 | este 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 | ||
| 6230 | findlib 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 | ||
| 6233 | al campo @code{native-inputs} de la definición del paquete. | ||
| 6234 | |||
| 6235 | Fíjese que la mayoría de los paquetes OCaml asumen su instalación en el | ||
| 6236 | mismo directorio que OCaml, que no es el comportamiento deseado en guix. En | ||
| 6237 | particular, intentarán instalar ficheros @file{.so} en su directorio de | ||
| 6238 | módulos, normalmente lo adecuado puesto que es el directorio del compilador | ||
| 6239 | de OCaml. No obstante, en guix estas bibliotecas no se pueden encontrar allí | ||
| 6240 | y 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 | ||
| 6246 | Esta variable se exporta en @code{(guix build-system python)}. Implementa el | ||
| 6247 | procedimiento más o menos estándar de construcción usado por paquetes | ||
| 6248 | Python, que consiste en la ejecución de @code{python setup.py build} y | ||
| 6249 | @code{python setup.py install --prefix=/gnu/store/@dots{}}. | ||
| 6250 | |||
| 6251 | Para que instalan programas independientes Python bajo @code{bin/}, se | ||
| 6252 | encarga de envolver dichos programas de modo que su variable de entorno | ||
| 6253 | @code{PYTHONPATH} apunte a las bibliotecas Python de las que dependen. | ||
| 6254 | |||
| 6255 | Se puede especificar el paquete Python usado para llevar a cabo la | ||
| 6256 | construcción con el parámetro @code{#:python}. Esta es habitualmente una | ||
| 6257 | forma de forzar la construcción de un paquete para una versión específica | ||
| 6258 | del intérprete Python, lo que puede ser necesario si el paquete es | ||
| 6259 | compatible únicamente con una versión del intérprete. | ||
| 6260 | |||
| 6261 | Por defecto guix llama a @code{setup.py} bajo el control de | ||
| 6262 | @code{setuptools} de manera similar a @command{pip}. Algunos paquetes no son | ||
| 6263 | compatibles con setuptools (y pip), por lo que puede deshabilitar esta | ||
| 6264 | configuración estableciendo el parámetro @code{#:use-setuptools} a | ||
| 6265 | @code{#f}. | ||
| 6266 | @end defvr | ||
| 6267 | |||
| 6268 | @defvr {Variable Scheme} perl-build-system | ||
| 6269 | Esta variable se exporta en @code{(guix build-system perl)}. Implementa el | ||
| 6270 | procedimiento de construcción estándar para paquetes Perl, lo que o bien | ||
| 6271 | consiste en la ejecución de @code{perl Build.PL | ||
| 6272 | --prefix=/gnu/store/@dots{}}, seguido de @code{Build} y @code{Build | ||
| 6273 | install}; o en la ejecución de @code{perl Makefile.PL | ||
| 6274 | PREFIX=/gnu/store/@dots{}}, seguida de @code{make} y @code{make install}, | ||
| 6275 | dependiendo de si @code{Build.PL} o @code{Makefile.PL} están presentes en la | ||
| 6276 | distribució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 | ||
| 6278 | preferencia puede invertirse especificando @code{#t} en el parámetro | ||
| 6279 | @code{#:make-maker?}. | ||
| 6280 | |||
| 6281 | La invocación inicial de @code{perl Makefile.PL} o @code{perl Build.PL} pasa | ||
| 6282 | a su vez las opciones especificadas por los parámetros | ||
| 6283 | @code{#:make-maker-flags} o @code{#:module-build-flags}, respectivamente. | ||
| 6284 | |||
| 6285 | El paquete Perl usado puede especificarse con @code{#:perl}. | ||
| 6286 | @end defvr | ||
| 6287 | |||
| 6288 | @defvr {Variable Scheme} r-build-system | ||
| 6289 | Esta variable se exporta en @code{(guix build-system r)}. Implementa el | ||
| 6290 | procedimiento de construcción usados por paquetes | ||
| 6291 | @uref{http://r-project.org, R}, lo que esencialmente es poco más que la | ||
| 6292 | ejecución de @code{R CMD INSTALL --library=/gnu/store/@dots{}} en un entorno | ||
| 6293 | donde @code{R_LIBS_SITE} contiene las rutas de todos los paquetes R de | ||
| 6294 | entrada. 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 | ||
| 6299 | This variable is exported by @code{(guix build-system rakudo)} It implements | ||
| 6300 | the 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 | ||
| 6303 | binaries, library files and the resources, as well as wrap the files under | ||
| 6304 | the @code{bin/} directory. Tests can be skipped by passing @code{#f} to the | ||
| 6305 | @code{tests?} parameter. | ||
| 6306 | |||
| 6307 | Which rakudo package is used can be specified with @code{rakudo}. Which | ||
| 6308 | perl6-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?} | ||
| 6310 | parameter. Which perl6-zef package used for tests and installing can be | ||
| 6311 | specified 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 | ||
| 6316 | Esta variable se exporta en @code{(guix build-system texlive)}. Se usa para | ||
| 6317 | construir paquetes TeX en modo de procesamiento de lotes con el motor | ||
| 6318 | especificado. El sistema de construcción fija la variable @code{TEXINPUTS} | ||
| 6319 | para encontrar todos los ficheros de fuentes TeX en las entradas. | ||
| 6320 | |||
| 6321 | Por defecto ejecuta @code{luatex} en todos los ficheros que terminan en | ||
| 6322 | @code{ins}. Un motor y formato diferente puede especificarse con el | ||
| 6323 | parámetro @code{#:tex-format}. Los diferentes objetivos de construcción | ||
| 6324 | pueden especificarse con el parámetro @code{#:build-targets}, que espera una | ||
| 6325 | lista 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 | ||
| 6327 | packages tex)} a las entradas. Ambos pueden forzarse con los parámetros | ||
| 6328 | @code{#:texlive-bin} y @code{#:texlive-latex-base} respectivamente. | ||
| 6329 | |||
| 6330 | El parámetro @code{#:tex-directory} le dice al sistema de construcción dónde | ||
| 6331 | instalar los ficheros construidos bajo el árbol texmf. | ||
| 6332 | @end defvr | ||
| 6333 | |||
| 6334 | @defvr {Variable Scheme} ruby-build-system | ||
| 6335 | Esta variable se exporta en @code{(guix build-system ruby)}. Implementa el | ||
| 6336 | procedimiento de construcción de RubyGems usado por los paquetes Ruby, que | ||
| 6337 | implica la ejecución de @code{gem build} seguida de @code{gem install}. | ||
| 6338 | |||
| 6339 | El campo @code{source} de un paquete que usa este sistema de construcción | ||
| 6340 | típicamente se refiere a un archivo gem, ya que este es el formato usado por | ||
| 6341 | las desarrolladoras Ruby cuando publican su software. El sistema de | ||
| 6342 | construcción desempaqueta el archivo gem, potencialmente parchea las | ||
| 6343 | fuentes, ejecuta la batería de pruebas, vuelve a empaquetar el archivo gem y | ||
| 6344 | lo instala. Adicionalmente, directorios y archivadores tar pueden | ||
| 6345 | referenciarse para permitir la construcción de archivos gem no publicados | ||
| 6346 | desde Git o un archivador tar de publicación de fuentes tradicional. | ||
| 6347 | |||
| 6348 | Se 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 | ||
| 6354 | Esta variable se exporta en @code{(guix build-system waf)}. Implementa un | ||
| 6355 | procedimiento de construcción alrededor del guión @code{waf}. Las fases | ||
| 6356 | comunes---@code{configure}, @code{build} y @code{install}---se implementan | ||
| 6357 | pasando sus nombres como parámetros al guión @code{waf}. | ||
| 6358 | |||
| 6359 | El guión @code{waf} es ejecutado por el intérprete Python. El paquete Python | ||
| 6360 | usado 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 | ||
| 6365 | Esta variable se exporta en @code{(guix build-system scons)}. Implementa en | ||
| 6366 | procedimiento de construcción usado por la herramienta de construcción de | ||
| 6367 | software SCons. Este sistema de construcción ejecuta @code{scons} para | ||
| 6368 | construir el paquete, @code{scons test} para ejecutar las pruebas y después | ||
| 6369 | @code{scons install} para instalar el paquete. | ||
| 6370 | |||
| 6371 | Las opciones adicionales a pasar a @code{scons} se pueden especificar con el | ||
| 6372 | parámetro @code{#:scons-flags}. La versión de Python usada para ejecutar | ||
| 6373 | SCons puede especificarse seleccionando el paquete SCons apropiado con el | ||
| 6374 | parámetro @code{#:scons}. | ||
| 6375 | @end defvr | ||
| 6376 | |||
| 6377 | @defvr {Variable Scheme} haskell-build-system | ||
| 6378 | Esta variable se exporta en @code{(guix build-system haskell)}. Implementa | ||
| 6379 | el procedimiento de construcción Cabal usado por paquetes Haskell, el cual | ||
| 6380 | implica la ejecución de @code{runhaskell Setup.hs configure | ||
| 6381 | --prefix=/gnu/store/@dots{}} y @code{runhaskell Setup.hs build}. En vez de | ||
| 6382 | instalar el paquete ejecutando @code{runhaskell Setup.hs install}, para | ||
| 6383 | evitar el intento de registro de bibliotecas en el directorio de | ||
| 6384 | solo-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 | ||
| 6386 | register}. Además, el sistema de construcción genera la documentación del | ||
| 6387 | paquete ejecutando @code{runhaskell Setup.hs haddock}, a menos que se pasase | ||
| 6388 | @code{#:haddock? #f}. Parámetros opcionales de Haddock pueden proporcionarse | ||
| 6389 | con 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 | |||
| 6393 | El 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 | ||
| 6398 | Esta variable se exporta en @code{(guix build-system dub)}. Implementa el | ||
| 6399 | procedimiento de construcción Dub usado por los paquetes D, que implica la | ||
| 6400 | ejecución de @code{dub build} y @code{dub run}. La instalación se lleva a | ||
| 6401 | cabo con la copia manual de los ficheros. | ||
| 6402 | |||
| 6403 | El compilador D usado puede ser especificado con el parámetro @code{#:ldc} | ||
| 6404 | cuyo valor predeterminado es @code{ldc}. | ||
| 6405 | @end defvr | ||
| 6406 | |||
| 6407 | @defvr {Variable Scheme} emacs-build-system | ||
| 6408 | Esta variable se exporta en @code{(guix build-system emacs)}. Implementa un | ||
| 6409 | procedimiento de instalación similar al propio sistema de empaquetado de | ||
| 6410 | Emacs (@pxref{Packages,,, emacs, The GNU Emacs Manual}). | ||
| 6411 | |||
| 6412 | Primero crea el fichero @code{@var{paquete}-autoloads.el}, tras lo que | ||
| 6413 | compila todos los ficheros Emacs Lisp. De manera diferente al sistema de | ||
| 6414 | paquetes de Emacs, los ficheros de documentación Info se mueven al | ||
| 6415 | directorio estándar de documentación y se borra el fichero @file{dir}. Cada | ||
| 6416 | paquete 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 | ||
| 6421 | Esta variable se exporta en @code{(guix build-system font)}. Implementa un | ||
| 6422 | procedimiento de instalación para paquetes de fuentes donde las proveedoras | ||
| 6423 | originales proporcionan ficheros de tipografía TrueType, OpenType, etc.@: | ||
| 6424 | precompilados que simplemente necesitan copiarse en su lugar. Copia los | ||
| 6425 | ficheros de tipografías a las localizaciones estándar en el directorio de | ||
| 6426 | salida. | ||
| 6427 | @end defvr | ||
| 6428 | |||
| 6429 | @defvr {Variable Scheme} meson-build-system | ||
| 6430 | Esta variable se exporta en @code{(guix build-system meson)}. Implementa el | ||
| 6431 | procedimiento de construcción para paquetes que usan | ||
| 6432 | @url{http://mesonbuild.com, Meson} como su sistema de construcción. | ||
| 6433 | |||
| 6434 | Añade Meson y @uref{https://ninja-build.org/, Ninja} al conjunto de | ||
| 6435 | entradas, 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 | |||
| 6440 | Este sistema de construcción es una extensión de @var{gnu-build-system}, | ||
| 6441 | pero con las siguientes fases cambiadas por otras específicas para Meson. | ||
| 6442 | |||
| 6443 | @table @code | ||
| 6444 | |||
| 6445 | @item configure | ||
| 6446 | Esta 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 | ||
| 6452 | Esta fase ejecuta @code{ninja} para construir el paquete en paralelo por | ||
| 6453 | defecto, pero esto puede cambiarse con @code{#:parallel-build?}. | ||
| 6454 | |||
| 6455 | @item check | ||
| 6456 | Esta fase ejecuta @code{ninja} con el objetivo especificado en | ||
| 6457 | @code{#:test-target}, cuyo valor predeterminado es @code{"test"}. | ||
| 6458 | |||
| 6459 | @item install | ||
| 6460 | Esta fase ejecuta @code{ninja install} y no puede cambiarse. | ||
| 6461 | @end table | ||
| 6462 | |||
| 6463 | Aparte de estas, el sistema de ejecución también añade las siguientes fases: | ||
| 6464 | |||
| 6465 | @table @code | ||
| 6466 | |||
| 6467 | @item fix-runpath | ||
| 6468 | Esta fase se asegura de que todos los binarios pueden encontrar las | ||
| 6469 | bibliotecas que necesitan. Busca las bibliotecas necesarias en | ||
| 6470 | subdirectorios del paquete en construcción, y añade estas a @code{RUNPATH} | ||
| 6471 | en caso necesario. También elimina referencias a bibliotecas introducidas en | ||
| 6472 | la fase de construcción por @code{meson-for-build}, como las dependencias de | ||
| 6473 | las pruebas, que no se necesitan realmente para la ejecución del programa. | ||
| 6474 | |||
| 6475 | @item glib-or-gtk-wrap | ||
| 6476 | Esta fase es la fase proporcionada por @code{glib-or-gtk-build-system}, y no | ||
| 6477 | está activa por defecto. Puede activarse con @code{#:glib-or-gtk}. | ||
| 6478 | |||
| 6479 | @item glib-or-gtk-compile-schemas | ||
| 6480 | Esta fase es la fase proporcionada por @code{glib-or-gtk-build-system}, y no | ||
| 6481 | está 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 | ||
| 6489 | This build system is an extension of @var{gnu-build-system}, but with the | ||
| 6490 | following phases changed: | ||
| 6491 | |||
| 6492 | @table @code | ||
| 6493 | |||
| 6494 | @item configure | ||
| 6495 | This phase configures the environment so that the Linux kernel's Makefile | ||
| 6496 | can be used to build the external kernel module. | ||
| 6497 | |||
| 6498 | @item build | ||
| 6499 | This phase uses the Linux kernel's Makefile in order to build the external | ||
| 6500 | kernel module. | ||
| 6501 | |||
| 6502 | @item install | ||
| 6503 | This phase uses the Linux kernel's Makefile in order to install the external | ||
| 6504 | kernel module. | ||
| 6505 | @end table | ||
| 6506 | |||
| 6507 | It is possible and useful to specify the Linux kernel to use for building | ||
| 6508 | the module (in the "arguments" form of a package using the | ||
| 6509 | linux-module-build-system, use the key #:linux to specify it). | ||
| 6510 | @end defvr | ||
| 6511 | |||
| 6512 | Por último, para paquetes que no necesiten nada tan sofisticado se | ||
| 6513 | proporciona un sistema de construcción ``trivial''. Es trivial en el sentido | ||
| 6514 | de que no proporciona prácticamente funcionalidad: no incorpora entradas | ||
| 6515 | implícitas y no tiene una noción de fases de construcción. | ||
| 6516 | |||
| 6517 | @defvr {Variable Scheme} trivial-build-system | ||
| 6518 | Esta variable se exporta en @code{(guix build-system trivial)}. | ||
| 6519 | |||
| 6520 | Este sistema de construcción necesita un parámetro @code{#:builder}. Este | ||
| 6521 | parámetro debe ser una expresión Scheme que construya la(s) salida(s) del | ||
| 6522 | paquete---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 | |||
| 6533 | Conceptualmente, el @dfn{almacén} es el lugar donde se almacenan las | ||
| 6534 | derivaciones 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 | ||
| 6537 | almacén tiene una base de datos asociada que contiene información como las | ||
| 6538 | rutas del almacén a las que referencia cada ruta del almacén, y la lista de | ||
| 6539 | elementos @emph{válidos} del almacén---los resultados de las construcciones | ||
| 6540 | satisfactorias. Esta base de datos reside en | ||
| 6541 | @file{@var{localstatedir}/guix/db}, donde @var{localstatedir} es el | ||
| 6542 | directorio de estado especificado @i{vía} @option{--localstatedir} en tiempo | ||
| 6543 | de configuración, normalmente @file{/var}. | ||
| 6544 | |||
| 6545 | El almacén @emph{siempre} es accedido a través del daemon en delegación de | ||
| 6546 | sus clientes (@pxref{Invocación de guix-daemon}). Para manipular el almacén, los | ||
| 6547 | clientes se conectan al daemon por un socket de dominio Unix, le envían | ||
| 6548 | peticiones y leen el resultado---esto son llamadas a procedimientos remotos, | ||
| 6549 | o RPC. | ||
| 6550 | |||
| 6551 | @quotation Nota | ||
| 6552 | Las usuarias @emph{nunca} deben modificar ficheros directamente bajo el | ||
| 6553 | directorio @file{/gnu/store}. Esto llevaría a inconsistencias y rompería las | ||
| 6554 | premisas 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 | ||
| 6558 | cómo comprobar la integridad del almacén e intentar recuperarse de | ||
| 6559 | modificaciones accidentales. | ||
| 6560 | @end quotation | ||
| 6561 | |||
| 6562 | El módulo @code{(guix store)} proporciona procedimientos para conectarse al | ||
| 6563 | daemon y realizar RPCs. Estos se describen más adelante. Por defecto, | ||
| 6564 | @code{open-connection}, y por tanto todas las órdenes @command{guix}, se | ||
| 6565 | conectan 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 | ||
| 6569 | Cuando se ha definido, el valor de esta variable debe ser un nombre de | ||
| 6570 | fichero o una URI designando el punto de conexión del daemon. Cuando es un | ||
| 6571 | nombre de fichero, denota un socket de dominio Unix al que | ||
| 6572 | conectarse. Además de nombres de ficheros, los esquemas de URI aceptados | ||
| 6573 | son: | ||
| 6574 | |||
| 6575 | @table @code | ||
| 6576 | @item file | ||
| 6577 | @itemx unix | ||
| 6578 | Estos son equivalentes a los sockets de dominio | ||
| 6579 | Unix. @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 | ||
| 6587 | Estas URI denotan conexiones sobre TCP/IP, sin cifrado ni verificación de la | ||
| 6588 | máquina remota. La URI debe especificar el nombre de máquina y opcionalmente | ||
| 6589 | un número de puerto (por defecto se usa el puerto 44146): | ||
| 6590 | |||
| 6591 | @example | ||
| 6592 | guix://principal.guix.example.org:1234 | ||
| 6593 | @end example | ||
| 6594 | |||
| 6595 | Esta configuración es apropiada para redes locales, como clusters, donde | ||
| 6596 | únicamente los nodos de confianza pueden conectarse al daemon de | ||
| 6597 | construcción en @code{principal.guix.example.org}. | ||
| 6598 | |||
| 6599 | La opción @code{--listen} de @command{guix-daemon} puede usarse para | ||
| 6600 | indicarle 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 | ||
| 6605 | Estas URI le permiten conectarse a un daemon remoto sobre SSH@footnote{Esta | ||
| 6606 | característica necesita Guile-SSH (@pxref{Requisitos}).}. Una URL típica | ||
| 6607 | debería ser algo así: | ||
| 6608 | |||
| 6609 | @example | ||
| 6610 | ssh://carlos@@guix.example.org:22 | ||
| 6611 | @end example | ||
| 6612 | |||
| 6613 | Como con @command{guix copy}, se tienen en cuenta los ficheros habituales de | ||
| 6614 | configuración del cliente OpenSSH (@pxref{Invocación de guix copy}). | ||
| 6615 | @end table | ||
| 6616 | |||
| 6617 | Esquemas 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 | ||
| 6622 | La conexión con daemon de construcción remotos se considera experimental en | ||
| 6623 | @value{VERSION}. Por favor, contacte con nosotras para compartir cualquier | ||
| 6624 | problema 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] | ||
| 6629 | Abre 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 | ||
| 6631 | que reserve un poco de espacio extra en el sistema de ficheros de modo que | ||
| 6632 | el recolector de basura pueda operar incluso cuando el disco se | ||
| 6633 | llene. Devuelve un objeto servidor. | ||
| 6634 | |||
| 6635 | El valor por defecto de @var{uri} es @var{%default-socket-path}, que ese la | ||
| 6636 | ruta esperada según las opciones pasadas a @code{configure}. | ||
| 6637 | @end deffn | ||
| 6638 | |||
| 6639 | @deffn {Procedimiento Scheme} close-connection @var{servidor} | ||
| 6640 | Cierra la conexión al @var{servidor}. | ||
| 6641 | @end deffn | ||
| 6642 | |||
| 6643 | @defvr {Variable Scheme} current-build-output-port | ||
| 6644 | Esta variable está enlazada a un parámetro SRFI-39, que referencia al puerto | ||
| 6645 | donde los logs de construcción y error enviados por el daemon deben | ||
| 6646 | escribirse. | ||
| 6647 | @end defvr | ||
| 6648 | |||
| 6649 | Los procedimientos que realizan RPCs toman todos como primer parámetro un | ||
| 6650 | objeto servidor. | ||
| 6651 | |||
| 6652 | @deffn {Procedimiento Scheme} valid-path? @var{servidor} @var{ruta} | ||
| 6653 | @cindex elementos inválidos del almacén | ||
| 6654 | Devuelve @code{#t} cuando @var{ruta} designa un elemento válido del almacén | ||
| 6655 | y @code{#f} en otro caso (un elemento no-válido puede existir en el disco | ||
| 6656 | pero aun así no ser válido, por ejemlo debido a que es el resultado de una | ||
| 6657 | construcción interumpida o fallida). | ||
| 6658 | |||
| 6659 | Una condición @code{&store-protocol-error} se eleva si @var{ruta} no | ||
| 6660 | contiene 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}] | ||
| 6664 | Añade @var{texto} bajo el fichero @var{nombre} en el almacén, y devuelve su | ||
| 6665 | ruta en el almacén. @var{referencias} es la lista de rutas del almacén | ||
| 6666 | referenciadas por la ruta del almacén resultante. | ||
| 6667 | @end deffn | ||
| 6668 | |||
| 6669 | @deffn {Procedimiento Scheme} build-derivations @var{servidor} @var{derivaciones} | ||
| 6670 | Construye @var{derivaciones} (una lista de objetos @code{<derivation>} o | ||
| 6671 | rutas de derivaciones) y devuelve el control cuando se termina de | ||
| 6672 | construirlas. Devuelve @code{#t} en caso de éxito. | ||
| 6673 | @end deffn | ||
| 6674 | |||
| 6675 | Fijese que el módulo @code{(guix monads)} proporciona una mónada así como | ||
| 6676 | versiones monádicas de los procedimientos previos, con el objetivo de hacer | ||
| 6677 | má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 | ||
| 6686 | Las acciones de construcción a bajo nivel y el entorno en el que se realizan | ||
| 6687 | se representan mediante @dfn{derivaciones}. Una derivación contiene las | ||
| 6688 | siguientes piezas de información: | ||
| 6689 | |||
| 6690 | @itemize | ||
| 6691 | @item | ||
| 6692 | Las salidas de la derivación---las derivaciones producen al menos un fichero | ||
| 6693 | o 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 | ||
| 6698 | Las entradas de las derivaciones---es decir, sus dependencias de tiempo de | ||
| 6699 | construcción---, que pueden ser otras derivaciones o simples ficheros en el | ||
| 6700 | almacén (parches, guiones de construcción, etc.). | ||
| 6701 | |||
| 6702 | @item | ||
| 6703 | El tipo de sistema objetivo de la derivación---por ejemplo, | ||
| 6704 | @code{x86_64-linux}. | ||
| 6705 | |||
| 6706 | @item | ||
| 6707 | El nombre de fichero del guión de construcción en el almacén, junto a los | ||
| 6708 | parámetros que se le deben pasar. | ||
| 6709 | |||
| 6710 | @item | ||
| 6711 | Una lista de variables de entorno a ser definidas. | ||
| 6712 | |||
| 6713 | @end itemize | ||
| 6714 | |||
| 6715 | @cindex ruta de derivación | ||
| 6716 | Las derivaciones permiten a los clientes del daemon comunicar acciones de | ||
| 6717 | construcción al almacén. Existen en dos formas: como una representación en | ||
| 6718 | memoria, tanto en el lado del cliente como el del daemon, y como ficheros en | ||
| 6719 | el almacén cuyo nombre termina en @code{.drv}---estos ficheros se conocen | ||
| 6720 | como @dfn{rutas de derivación}. Las rutas de derivación pueden pasarse al | ||
| 6721 | procedimiento @code{build-derivations} para realizar las acciones de | ||
| 6722 | construcción que prescriben (@pxref{El almacén}). | ||
| 6723 | |||
| 6724 | @cindex derivaciones de salida fija | ||
| 6725 | Operaciones como la descarga de ficheros y las instantáneas de un control de | ||
| 6726 | versiones para las cuales el hash del contenido esperado se conoce | ||
| 6727 | previamente se modelan como @dfn{derivaciones de salida fija}. Al contrario | ||
| 6728 | que las derivaciones normales, las salidas de una derivación de salida fija | ||
| 6729 | son independientes de sus entradas---por ejemplo, la descarga del código | ||
| 6730 | fuente produce el mismo resultado independientemente del método de descarga | ||
| 6731 | y las herramientas usadas. | ||
| 6732 | |||
| 6733 | @cindex references | ||
| 6734 | @cindex tiempo de ejecución, dependencias | ||
| 6735 | @cindex dependencias, tiempo de ejecución | ||
| 6736 | The 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}). | ||
| 6739 | References are the set of run-time dependencies of the build results. | ||
| 6740 | References are a subset of the inputs of the derivation; this subset is | ||
| 6741 | automatically computed by the build daemon by scanning all the files in the | ||
| 6742 | outputs. | ||
| 6743 | |||
| 6744 | El módulo @code{(guix derivations)} proporciona una representación de | ||
| 6745 | derivaciones como objetos Scheme, junto a procedimientos para crear y | ||
| 6746 | manipular de otras formas derivaciones. La primitiva de más bajo nivel para | ||
| 6747 | crear 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 '()] | ||
| 6756 | Construye una derivación con los parámetros proporcionados, y devuelve el | ||
| 6757 | objeto @code{<derivation>} resultante. | ||
| 6758 | |||
| 6759 | Cuando se proporcionan @var{hash} y @var{hash-algo}, una @dfn{derivación de | ||
| 6760 | salida fija} se crea---es decir, una cuyo resultado se conoce de antemano, | ||
| 6761 | como la descarga de un fichero. Si, además, @var{recursive?} es verdadero, | ||
| 6762 | entonces 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 | |||
| 6765 | Cuando @var{references-graphs} es verdadero, debe ser una lista de pares de | ||
| 6766 | nombre de fichero/ruta del almacén. En ese caso, el grafo de referencias de | ||
| 6767 | cada ruta del almacén se exporta en el entorno de construcción del fichero | ||
| 6768 | correspondiente, en un formato de texto simple. | ||
| 6769 | |||
| 6770 | Cuando @var{allowed-references} es verdadero, debe ser una lista de | ||
| 6771 | elementos del almacén o salidas a las que puede hacer referencia la salida | ||
| 6772 | de la derivación. Del mismo modo, @var{disallowed-references}, en caso de | ||
| 6773 | ser verdadero, debe ser una lista de cosas a las que las salidas @emph{no} | ||
| 6774 | pueden hacer referencia. | ||
| 6775 | |||
| 6776 | Cuando @var{leaked-env-vars} es verdadero, debe ser una lista de cadenas que | ||
| 6777 | denoten variables de entorno que se permite ``escapar'' del entorno del | ||
| 6778 | daemon al entorno de construcción. Esto es únicamente aplicable a | ||
| 6779 | derivaciones de salida fija---es decir, cuando @var{hash} es verdadero. El | ||
| 6780 | uso principal es permitir que variables como @code{http_proxy} sean pasadas | ||
| 6781 | a las derivaciones que descargan ficheros. | ||
| 6782 | |||
| 6783 | Cuando @var{local-build?} es verdadero, declara que la derivación no es una | ||
| 6784 | buena 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 | ||
| 6786 | donde los costes de transferencia de datos sobrepasarían los beneficios. | ||
| 6787 | |||
| 6788 | Cuando @var{substitutable?} es falso, declara que las sustituciones de la | ||
| 6789 | salida de la derivación no deben usarse (@pxref{Sustituciones}). Esto es útil, | ||
| 6790 | por ejemplo, cuando se construyen paquetes que capturan detalles sobre el | ||
| 6791 | conjunto de instrucciones de la CPU anfitriona. | ||
| 6792 | |||
| 6793 | @var{properties} debe ser una lista asociada que describe ``propiedades'' de | ||
| 6794 | la derivación. Debe mantenerse tal cual, sin interpretar, en la derivación. | ||
| 6795 | @end deffn | ||
| 6796 | |||
| 6797 | @noindent | ||
| 6798 | Esto 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 | ||
| 6800 | ejecutable 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 | |||
| 6817 | Como puede suponerse, el uso directo de esta primitiva es algo | ||
| 6818 | enrevesado. Una mejor aproximación es escribir guiones de construcción en | ||
| 6819 | Scheme, ¡por supuesto! La mejor forma de hacerlo es escribir el código de | ||
| 6820 | construcción como una ``expresión-G'', y pasarla a | ||
| 6821 | @code{gexp->derivation}. Para más información, @pxref{Expresiones-G}. | ||
| 6822 | |||
| 6823 | En otros tiempos, @code{gexp->derivation} no existía y la creación de | ||
| 6824 | derivaciones con código de construcción escrito en Scheme se conseguía con | ||
| 6825 | @code{build-expression->derivation}, documentada más adelante. Este | ||
| 6826 | procedimiento 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] | ||
| 6837 | Devuelve una derivación que ejecuta la expresión Scheme @var{exp} como un | ||
| 6838 | constructor para la derivación @var{nombre}. @var{inputs} debe ser una lista | ||
| 6839 | de tupletas @code{(nombre ruta-drv sub-drv)}; cuando @var{sub-drv} se omite, | ||
| 6840 | se asume @code{"out"}. @var{modules} es una lista de nombres de módulos | ||
| 6841 | Guile de la ruta actual de búsqueda a copiar en el almacén, compilados, y | ||
| 6842 | poner a disposición en la ruta de carga durante la ejecución de | ||
| 6843 | @var{exp}---por ejemplo, @code{((guix build utils) (guix build | ||
| 6844 | gnu-build-system))}. | ||
| 6845 | |||
| 6846 | @var{exp} se evalúa en un entorno donde @code{%outputs} está asociada a una | ||
| 6847 | lista de pares salida/ruta, y donde @code{%build-inputs} está asociada a una | ||
| 6848 | lista de pares cadena/ruta-de-salida que provienen de @var{inputs}. De | ||
| 6849 | manera opcional, @var{env-vars} es una lista de pares de cadenas que | ||
| 6850 | especifican el nombre y el valor de las variables de entorno visibles al | ||
| 6851 | constructor. El constructor termina pasando el resultado de @var{exp} a | ||
| 6852 | @code{exit}; por tanto, cuando @var{exp} devuelve @code{#f}, la construcción | ||
| 6853 | se 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 | |||
| 6859 | Vé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 | ||
| 6865 | Aquí está un ejemplo de derivación de salida única que crea un directorio | ||
| 6866 | que 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 | |||
| 6885 | Los procedimientos que operan en el almacén descritos en la sección previa | ||
| 6886 | toman todos una conexión abierta al daemon de construcción en su primer | ||
| 6887 | parámetro. Aunque el modelo subyacente es funcional, tienen o bien efectos | ||
| 6888 | secundarios o dependen del estado actual del almacén. | ||
| 6889 | |||
| 6890 | Lo anterior es inconveniente: la conexión al daemon de construcción tiene | ||
| 6891 | que proporcionarse en todas estas funciones, haciendo imposible la | ||
| 6892 | composición de funciones que no toman ese parámetro con funciones que sí lo | ||
| 6893 | hacen. Lo último puede ser problemático: ya que las operaciones del almacén | ||
| 6894 | tienen efectos secundarios y/o dependen del estado externo, deben ser | ||
| 6895 | secuenciadas de manera adecuada. | ||
| 6896 | |||
| 6897 | @cindex valores monádicos | ||
| 6898 | @cindex funciones monádicas | ||
| 6899 | Aquí es donde entra en juego el módulo @code{(guix monads)}. Este módulo | ||
| 6900 | proporciona un entorno para trabajar con @dfn{mónadas}, y una mónada | ||
| 6901 | particularmente útil para nuestros usos, la @dfn{mónada del almacén}. Las | ||
| 6902 | mónadas son una construcción que permite dos cosas: asociar ``contexto'' con | ||
| 6903 | valores (en nuestro caso, el contexto es el almacén), y la construcción de | ||
| 6904 | secuencias de computaciones (aquí computaciones incluye accesos al | ||
| 6905 | almacén). Los valores en una mónada---valores que transportan este contexto | ||
| 6906 | adicional---se llaman @dfn{valores monádicos}; los procedimientos que | ||
| 6907 | devuelven dichos valores se llaman @dfn{procedimientos monádicos}. | ||
| 6908 | |||
| 6909 | Considere 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 | |||
| 6921 | Mediante el uso de @code{(guix monads)} y @code{(guix gexp)}, puede | ||
| 6922 | reescribirse 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 | |||
| 6933 | Hay 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 | ||
| 6935 | procedimientos 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} | ||
| 6938 | en vez de un simple @code{let}. | ||
| 6939 | |||
| 6940 | Al final, la llamada a @code{package->derivation} puede omitirse ya que | ||
| 6941 | tendrá 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. | ||
| 6954 | La ejecución del procedimiento monádico @code{enlace-para-sh} no tiene | ||
| 6955 | ningún efecto. Como alguien dijo una vez, ``sales de una mónada como sales | ||
| 6956 | de un edificio en llamas: corriendo'' (run en inglés). Por tanto, para salir | ||
| 6957 | de 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 | |||
| 6964 | Fíjese que el módulo @code{(guix monad-repl)} extiende la sesión interactiva | ||
| 6965 | de Guile con nuevos ``meta-comandos'' para facilitar el trabajo con | ||
| 6966 | procedimientos monádicos: @code{run-in-store} y @code{enter-store-monad}. El | ||
| 6967 | primero se usa para ``ejecutar'' un valor monádico único a través del | ||
| 6968 | almacén: | ||
| 6969 | |||
| 6970 | @example | ||
| 6971 | scheme@@(guile-user)> ,run-in-store (package->derivation hello) | ||
| 6972 | $1 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}> | ||
| 6973 | @end example | ||
| 6974 | |||
| 6975 | El último entra en un entorno interactivo recursivo, donde todos los valores | ||
| 6976 | devueltos se ejecutan automáticamente a través del almacén: | ||
| 6977 | |||
| 6978 | @example | ||
| 6979 | scheme@@(guile-user)> ,enter-store-monad | ||
| 6980 | store-monad@@(guile-user) [1]> (package->derivation hello) | ||
| 6981 | $2 = #<derivation /gnu/store/@dots{}-hello-2.9.drv => @dots{}> | ||
| 6982 | store-monad@@(guile-user) [1]> (text-file "foo" "Hello!") | ||
| 6983 | $3 = "/gnu/store/@dots{}-foo" | ||
| 6984 | store-monad@@(guile-user) [1]> ,q | ||
| 6985 | scheme@@(guile-user)> | ||
| 6986 | @end example | ||
| 6987 | |||
| 6988 | @noindent | ||
| 6989 | Fijese que los valores no-monádicos no pueden devolverse en el entorno | ||
| 6990 | interactivo @code{store-monad}. | ||
| 6991 | |||
| 6992 | Las formas sintácticas principales para tratar con mónadas en general se | ||
| 6993 | proporcionan por el módulo @code{(guix monads)} y se describen a | ||
| 6994 | continuación. | ||
| 6995 | |||
| 6996 | @deffn {Sintaxis Scheme} with-monad @var{mónada} @var{cuerpo} ... | ||
| 6997 | Evalua cualquier forma @code{>>=} o @code{return} en @var{cuerpo} como | ||
| 6998 | estando en @var{mónada}. | ||
| 6999 | @end deffn | ||
| 7000 | |||
| 7001 | @deffn {Sintaxis Scheme} return @var{val} | ||
| 7002 | Devuelve 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 | ||
| 7007 | procedimientos monádicos @var{mproc}@dots{}@footnote{Esta operación es | ||
| 7008 | habitualmente conocida como ``bind'' (asociación), pero ese nombre denota un | ||
| 7009 | procedimiento no relacionado en Guile. Por tanto usamos este símbolo en | ||
| 7010 | cierto 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 | ||
| 7031 | con el operador bind, esto puede pensarse como el ``desempaquetado'' del | ||
| 7032 | valor 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}, | ||
| 7034 | como en @code{let}. Las operaciones de asociación ocurren en secuencia de | ||
| 7035 | izquierda a derecha. La última expresión de @var{cuerpo} debe ser una | ||
| 7036 | expresió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} ... | ||
| 7044 | Asocia @var{mexp} y las siguientes expresiones monádicas en secuencia, | ||
| 7045 | devolviendo el resultado de la última expresión. Cada expresión en la | ||
| 7046 | secuencia debe ser una expresión monádica. | ||
| 7047 | |||
| 7048 | Esto es similar a @code{mlet}, excepto que los valores devueltos por las | ||
| 7049 | expresiones monádicas se ignoran. En ese sentido el funcionamiento es | ||
| 7050 | aná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*} ... | ||
| 7054 | Cuando @var{condición} es verdadero, evalúa la secuencia de expresiones | ||
| 7055 | monádicas @var{mexp0}..@var{mexp*} como dentro de @code{mbegin}. Cuando | ||
| 7056 | @var{condición} es falso, devuelve @code{*unespecified*} en la mónada | ||
| 7057 | actual. Todas las expresiones en la secuencia deben ser expresiones | ||
| 7058 | monádicas. | ||
| 7059 | @end deffn | ||
| 7060 | |||
| 7061 | @deffn {Sistema Scheme} munless @var{condición} @var{mexp0} @var{mexp*} ... | ||
| 7062 | Cuando @var{condición} es falso, evalúa la secuencia de expresiones | ||
| 7063 | monádicas @var{mexp0}..@var{mexp*} como dentro de @code{mbegin}. Cuando | ||
| 7064 | @var{condición} es verdadero, devuelve @code{*unespecified*} en la mónada | ||
| 7065 | actual. Todas las expresiones en la secuencia deben ser expresiones | ||
| 7066 | monádicas. | ||
| 7067 | @end deffn | ||
| 7068 | |||
| 7069 | @cindex mónada de estado | ||
| 7070 | El módulo @code{(guix monads)} proporciona la @dfn{mónada de estado}, que | ||
| 7071 | permite que un valor adicional---el estado---sea @emph{hilado} a través de | ||
| 7072 | las llamadas a procedimientos monádicos. | ||
| 7073 | |||
| 7074 | @defvr {Variable Scheme} %state-monad | ||
| 7075 | La mónada de estado. Procedimientos en la mónada de estado pueden acceder y | ||
| 7076 | cambiar el estado hilado. | ||
| 7077 | |||
| 7078 | Considere el siguiente ejemplo. El procedimiento @code{cuadrado} devuelve un | ||
| 7079 | valor 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 | |||
| 7093 | Cuando se ``ejecuta'' a través de @var{%state-monad}, obtenemos un valor | ||
| 7094 | adicional de estado, que ese el número de llamadas a @code{cuadrado}. | ||
| 7095 | @end defvr | ||
| 7096 | |||
| 7097 | @deffn {Procedimiento monádico} current-state | ||
| 7098 | Devuelve el estado actual como un valor monádico. | ||
| 7099 | @end deffn | ||
| 7100 | |||
| 7101 | @deffn {Procedimiento monádico} set-current-state @var{valor} | ||
| 7102 | Establece el estado actual a @var{valor} y devuelve el estado previo como un | ||
| 7103 | valor monádico. | ||
| 7104 | @end deffn | ||
| 7105 | |||
| 7106 | @deffn {Procedimiento monádico} state-push @var{valor} | ||
| 7107 | Apila @var{valor} al estado actual, que se asume que es una lista, y | ||
| 7108 | devuelve el estado previo como un valor monádico. | ||
| 7109 | @end deffn | ||
| 7110 | |||
| 7111 | @deffn {Procedimiento monádico} state-pop | ||
| 7112 | Desapila un valor del estado actual y lo devuelve como un valor monádico. El | ||
| 7113 | estado se asume que es una lista. | ||
| 7114 | @end deffn | ||
| 7115 | |||
| 7116 | @deffn {Procedimiento Scheme} run-with-state @var{mval} [@var{estado}] | ||
| 7117 | Ejecuta un valor monádico @var{mval} comenzando con @var{estado} como el | ||
| 7118 | estado inicial. Devuelve dos valores: el valor resultante y el estado | ||
| 7119 | resultante. | ||
| 7120 | @end deffn | ||
| 7121 | |||
| 7122 | La 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 | ||
| 7126 | La mónada del almacén---un alias para @var{%state-monad}. | ||
| 7127 | |||
| 7128 | Los valores en la mónada del almacén encapsulan los accesos al | ||
| 7129 | almacén. Cuando su efecto es necesario, un valor de la mónada del almacén | ||
| 7130 | será ``evaluado'' pasandolo al procedimiento @code{run-with-store} (vea más | ||
| 7131 | adelante). | ||
| 7132 | @end defvr | ||
| 7133 | |||
| 7134 | @deffn {Procedimiento Scheme} run-with-store @var{almacén} @var{mval} [#:guile-for-build] [#:system (%current-system)] | ||
| 7135 | Ejecuta @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}] | ||
| 7140 | Devuelve como un valor monádico el nombre absoluto del fichero en el almacén | ||
| 7141 | del fichero que contiene @var{ŧexto}, una cadena. @var{referencias} es una | ||
| 7142 | lista de elementos del almacén a los que el fichero de texto referencia; su | ||
| 7143 | valor predeterminado es la lista vacía. | ||
| 7144 | @end deffn | ||
| 7145 | |||
| 7146 | @deffn {Procedimiento monádico} binary-file @var{nombre} @var{datos} [@var{referencias}] | ||
| 7147 | Devuelve como un valor monádico el nombre absoluto del fichero en el almacén | ||
| 7148 | del fichero que contiene @var{datos}, un vector de bytes. @var{referencias} | ||
| 7149 | es una lista de elementos del almacén a los que el fichero binario | ||
| 7150 | referencia; 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)] | ||
| 7155 | Devuelve 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} | ||
| 7157 | si @var{nombre} se omite. | ||
| 7158 | |||
| 7159 | Cuando @var{recursive?} es verdadero, los contenidos del @var{fichero} se | ||
| 7160 | añaden recursivamente; si @var{fichero} designa un fichero plano y | ||
| 7161 | @var{recursive?} es verdadero, sus contenidos se añaden, y sus bits de | ||
| 7162 | permisos se mantienen. | ||
| 7163 | |||
| 7164 | Cuando @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 | ||
| 7167 | el resultado de @code{lstat}; excluyendo las entradas para las cuales | ||
| 7168 | @var{select?} no devuelve verdadero. | ||
| 7169 | |||
| 7170 | El ejemplo siguiente añade un fichero al almacén, bajo dos nombres | ||
| 7171 | diferentes: | ||
| 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 | |||
| 7184 | El módulo @code{(guix packages)} exporta los siguientes procedimientos | ||
| 7185 | moná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"] | ||
| 7190 | Devuelve 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 | ||
| 7193 | directorio de salida @var{output} del @var{paquete}. Cuando @var{target} es | ||
| 7194 | verdadero, 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}] | ||
| 7200 | Versió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 | ||
| 7210 | Por tanto tenemos ``derivaciones'', que representan una secuencia de | ||
| 7211 | acciones 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 | ||
| 7213 | cuando se solicita al daemon construir realmente la derivación; se ejecutan | ||
| 7214 | por el daemon en un contenedor (@pxref{Invocación de guix-daemon}). | ||
| 7215 | |||
| 7216 | @cindex estratos de código | ||
| 7217 | No debería ser ninguna sorpresa que nos guste escribir estas acciones de | ||
| 7218 | construcción en Scheme. Cuando lo hacemos, terminamos con dos @dfn{estratos} | ||
| 7219 | de código Scheme@footnote{El término @dfn{estrato} en este contexto se debe | ||
| 7220 | a Manuel Serrano et al.@: en el contexto de su trabajo en Hop. Oleg | ||
| 7221 | Kiselyov, quien ha escrito profundos | ||
| 7222 | @url{http://okmij.org/ftp/meta-programming/#meta-scheme, ensayos sobre el | ||
| 7223 | tema}, se refiere a este tipo de generación de código como separación en | ||
| 7224 | etapas o @dfn{staging}.}: el ``código anfitrión''---código que define | ||
| 7225 | paquetes, habla al daemon, etc.---y el ``código de construcción''---código | ||
| 7226 | que realmente realiza las acciones de construcción, como la creación de | ||
| 7227 | directorios, la invocación de @command{make}, etc. | ||
| 7228 | |||
| 7229 | Para describir una derivación y sus acciones de construcción, típicamente se | ||
| 7230 | necesita embeber código de construcción dentro del código anfitrión. Se | ||
| 7231 | resume en la manipulación de código de construcción como datos, y la | ||
| 7232 | homoiconicidad de Scheme---el código tiene representación directa como | ||
| 7233 | datos---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 | |||
| 7236 | El módulo @code{(guix gexp)} implementa las @dfn{expresiones-G}, una forma | ||
| 7237 | de expresiones-S adaptada para expresiones de construcción. Las | ||
| 7238 | expresiones-G, o @dfn{gexps}, consiste esencialmente en tres formas | ||
| 7239 | sintácticas: @code{gexp}, @code{ungexp} y @code{ungexp-splicing} (o | ||
| 7240 | simplemente: @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 | ||
| 7243 | Manual}). No obstante, hay importantes diferencias: | ||
| 7244 | |||
| 7245 | @itemize | ||
| 7246 | @item | ||
| 7247 | Las expresiones-G están destinadas a escribirse en un fichero y ser | ||
| 7248 | ejecutadas o manipuladas por otros procesos. | ||
| 7249 | |||
| 7250 | @item | ||
| 7251 | Cuando un objeto de alto nivel como un paquete o una derivación se expande | ||
| 7252 | dentro de una expresión-G, el resultado es el mismo que la introducción de | ||
| 7253 | su nombre de fichero de salida. | ||
| 7254 | |||
| 7255 | @item | ||
| 7256 | Las expresiones-G transportan información acerca de los paquetes o | ||
| 7257 | derivaciones que referencian, y estas referencias se añaden automáticamente | ||
| 7258 | como 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 | ||
| 7262 | Este mecanismo no se limita a objetos de paquete ni derivación: pueden | ||
| 7263 | definirse @dfn{compiladores} capaces de ``bajar el nivel'' de otros objetos | ||
| 7264 | de alto nivel a derivaciones o ficheros en el almacén, de modo que esos | ||
| 7265 | objetos 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 | ||
| 7267 | los ``objetos tipo-fichero'', los cuales facilitan la adición de ficheros al | ||
| 7268 | almacén y su referencia en derivaciones y demás (vea @code{local-file} y | ||
| 7269 | @code{plain-file} más adelante). | ||
| 7270 | |||
| 7271 | Para 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 | |||
| 7282 | Esta expresión-G puede pasarse a @code{gexp->derivation}; obtenemos una | ||
| 7283 | derivación que construye un directorio que contiene exactamente un enlace | ||
| 7284 | simbó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 | |||
| 7290 | Como se puede esperar, la cadena @code{"/gnu/store/@dots{}-coreutils-8.22"} | ||
| 7291 | se sustituye por la referencia al paquete @var{coreutils} en el código de | ||
| 7292 | construcción real, y @var{coreutils} se marca automáticamente como una | ||
| 7293 | entrada a la derivación. Del mismo modo, @code{#$output} (equivalente a | ||
| 7294 | @code{(ungexp output)}) se reemplaza por una cadena que contiene el nombre | ||
| 7295 | del directorio de la salida de la derivación. | ||
| 7296 | |||
| 7297 | @cindex compilación cruzada | ||
| 7298 | En un contexto de compilación cruzada, es útil distinguir entre referencias | ||
| 7299 | a construcciones @emph{nativas} del paquete---que pueden ejecutarse en el | ||
| 7300 | sistema anfitrión---de referencias de compilaciones cruzadas de un | ||
| 7301 | paquete. Para dicho fin, @code{#+} tiene el mismo papel que @code{#$}, pero | ||
| 7302 | es 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 | ||
| 7316 | En el ejemplo previo, se usa la construcción nativa de @var{coreutils}, de | ||
| 7317 | modo que @command{ln} pueda realmente ejecutarse en el anfitrión; pero se | ||
| 7318 | hace 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 | ||
| 7322 | Otra característica de las expresiones-G son los @dfn{módulos importados}: a | ||
| 7323 | veces deseará ser capaz de usar determinados módulos Guile del ``entorno | ||
| 7324 | anfitrión'' en la expresión-G, de modo que esos módulos deban ser importados | ||
| 7325 | en el ``entorno de construcción''. La forma @code{with-imported-modules} le | ||
| 7326 | permite 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 | ||
| 7341 | En este ejemplo, el módulo @code{(guix build utils)} se incorpora | ||
| 7342 | automáticamente dentro del entorno de construcción aislado de nuestra | ||
| 7343 | expresión-G, de modo que @code{(use-modules (guix build utils))} funciona | ||
| 7344 | como se espera. | ||
| 7345 | |||
| 7346 | @cindex clausura de módulos | ||
| 7347 | @findex source-module-closure | ||
| 7348 | De manera habitual deseará que la @emph{clausura} del módulo se importe---es | ||
| 7349 | decir, el módulo en sí y todos los módulos de los que depende---en vez del | ||
| 7350 | módulo únicamente; si no se hace, cualquier intento de uso del módulo | ||
| 7351 | fallará porque faltan módulos dependientes. El procedimiento | ||
| 7352 | @code{source-module-closure} computa la clausura de un módulo mirando en las | ||
| 7353 | cabeceras 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 | ||
| 7370 | De la misma manera, a veces deseará importar no únicamente módulos puros de | ||
| 7371 | Scheme, pero también ``extensiones'' como enlaces Guile a bibliotecas C u | ||
| 7372 | otros paquetes ``completos''. Si, digamos, necesitase el paquete | ||
| 7373 | @code{guile-json} disponible en el lado de construcción, esta sería la forma | ||
| 7374 | de 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 | |||
| 7386 | La 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}) | ||
| 7390 | Devuelve una expresión-G que contiene @var{exp}. @var{exp} puede contener | ||
| 7391 | una o más de las siguientes formas: | ||
| 7392 | |||
| 7393 | @table @code | ||
| 7394 | @item #$@var{obj} | ||
| 7395 | @itemx (ungexp @var{obj}) | ||
| 7396 | Introduce una referencia a @var{obj}. @var{obj} puede tener uno de los tipos | ||
| 7397 | permitidos, 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 | ||
| 7399 | ejemplo, @code{"/gnu/store/@dots{}-coreutils-8.22}. | ||
| 7400 | |||
| 7401 | Si @var{obj} es una lista, se recorre y las referencias a objetos permitidos | ||
| 7402 | se substituyen de manera similar. | ||
| 7403 | |||
| 7404 | Si @var{obj} es otra expresión-G, su contenido se inserta y sus dependencias | ||
| 7405 | se añaden a aquellas de la expresión-G que la contiene. | ||
| 7406 | |||
| 7407 | Si @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}) | ||
| 7411 | Como 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}) | ||
| 7419 | Lo 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 | ||
| 7421 | cruzada. | ||
| 7422 | |||
| 7423 | @item #$output[:@var{salida}] | ||
| 7424 | @itemx (ungexp output [@var{salida}]) | ||
| 7425 | Inserta una referencia a la salida de la derivación @var{salida}, o a la | ||
| 7426 | salida principal cuando @var{salida} se omite. | ||
| 7427 | |||
| 7428 | Esto únicamente tiene sentido para expresiones-G pasadas a | ||
| 7429 | @code{gexp->derivation}. | ||
| 7430 | |||
| 7431 | @item #$@@@var{lst} | ||
| 7432 | @itemx (ungexp-splicing @var{lst}) | ||
| 7433 | Lo 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}) | ||
| 7438 | Lo mismo que la forma previa, pero hace referencia a las construcciones | ||
| 7439 | nativas de los objetos listados en @var{lst}. | ||
| 7440 | |||
| 7441 | @end table | ||
| 7442 | |||
| 7443 | Las 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{} | ||
| 7448 | Marca las expresiones-G definidas en el @var{cuerpo}@dots{} como si | ||
| 7449 | requiriesen @var{módulos} en su entorno de ejecución. | ||
| 7450 | |||
| 7451 | Cada 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 | ||
| 7453 | una 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 | ||
| 7463 | En el ejemplo previo, los dos primeros módulos se toman de la ruta de | ||
| 7464 | búsqueda, y el último se crea desde el objeto tipo-fichero proporcionado. | ||
| 7465 | |||
| 7466 | Esta forma tiene ámbito @emph{léxico}: tiene efecto en las expresiones-G | ||
| 7467 | definidas en @var{cuerpo}@dots{}, pero no en aquellas definidas, digamos, en | ||
| 7468 | procedimientos llamados por @var{cuerpo}@dots{}. | ||
| 7469 | @end deffn | ||
| 7470 | |||
| 7471 | @deffn {Sintaxis Scheme} with-extensions @var{extensiones} @var{cuerpo}@dots{} | ||
| 7472 | Marca que las expresiones definidas en @var{cuerpo}@dots{} requieren | ||
| 7473 | @var{extensiones} en su entorno de construcción y | ||
| 7474 | ejecución. @var{extensiones} es típicamente una lista de objetos de paquetes | ||
| 7475 | como los que se definen en el módulo @code{(gnu packages guile)}. | ||
| 7476 | |||
| 7477 | De manera concreta, los paquetes listados en @var{extensiones} se añaden a | ||
| 7478 | la 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 | ||
| 7480 | devuelta por @var{cuerpo}@dots{}. | ||
| 7481 | @end deffn | ||
| 7482 | |||
| 7483 | @deffn {Procedimiento Scheme} gexp? @var{obj} | ||
| 7484 | Devuelve @code{#t} si @var{obj} es una expresión-G. | ||
| 7485 | @end deffn | ||
| 7486 | |||
| 7487 | Las expresiones-G están destinadas a escribirse en disco, tanto en código | ||
| 7488 | que construye alguna derivación, como en ficheros planos en el almacén. Los | ||
| 7489 | procedimientos 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] | ||
| 7504 | Devuelve una derivación @var{nombre} que ejecuta @var{exp} (una expresión-G) | ||
| 7505 | con @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 | ||
| 7508 | para paquetes a los que haga referencia @var{exp}. | ||
| 7509 | |||
| 7510 | @var{modules} está obsoleto en favor de @code{with-imported-modules}. Su | ||
| 7511 | significado es hacer que los módulos @var{modules} estén disponibles en el | ||
| 7512 | contexto de evaluación de @var{exp}; @var{modules} es una lista de nombres | ||
| 7513 | de módulos Guile buscados en @var{module-path} para ser copiados al almacén, | ||
| 7514 | compilados y disponibles en la ruta de carga durante la ejecución de | ||
| 7515 | @var{exp}---por ejemplo, @code{((guix build utils) (gui build | ||
| 7516 | gnu-build-system))}. | ||
| 7517 | |||
| 7518 | @var{effective-version} determina la cadena a usar cuando se añaden las | ||
| 7519 | extensiones de @var{exp} (vea @code{with-extensions}) a la ruta de | ||
| 7520 | búsqueda---por ejemplo, @code{"2.2"}. | ||
| 7521 | |||
| 7522 | @var{graft?} determina si los paquetes a los que @var{exp} hace referencia | ||
| 7523 | deben ser injertados cuando sea posible. | ||
| 7524 | |||
| 7525 | Cuando @var{references-graphs} es verdadero, debe ser una lista de tuplas de | ||
| 7526 | una 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 | |||
| 7536 | El lado derecho de cada elemento de @var{references-graphs} se convierte | ||
| 7537 | automáticamente en una entrada del proceso de construcción de @var{exp}. En | ||
| 7538 | el entorno de construcción, cada @var{nombre-fichero} contiene el grafo de | ||
| 7539 | referencias 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 | ||
| 7542 | paquetes de salida. En el último caso, la lista denota elementos del almacén | ||
| 7543 | a los que el resultado puede hacer referencia. Cualquier referencia a otro | ||
| 7544 | elemento 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 | ||
| 7546 | deben hacer referencia. | ||
| 7547 | |||
| 7548 | @var{deprecation-warnings} determina si mostrar avisos de obsolescencia | ||
| 7549 | durante la compilación de los módulos. Puede ser @code{#f}, @code{#t} o | ||
| 7550 | @code{'detailed}. | ||
| 7551 | |||
| 7552 | El resto de parámetros funcionan como en @code{derivation} | ||
| 7553 | (@pxref{Derivaciones}). | ||
| 7554 | @end deffn | ||
| 7555 | |||
| 7556 | @cindex objetos tipo-fichero | ||
| 7557 | Los procedimientos @code{local-file}, @code{plain-file}, | ||
| 7558 | @code{computed-file}, @code{program-file} y @code{scheme-file} a | ||
| 7559 | continuación devuelven @dfn{objetos tipo-fichero}. Esto es, cuando se | ||
| 7560 | expanden en una expresión-G, estos objetos dirigen a un fichero en el | ||
| 7561 | almacé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 | |||
| 7568 | El efecto aquí es el ``internamiento'' de @file{/tmp/mi-nscd.conf} mediante | ||
| 7569 | su 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 | ||
| 7573 | hace. @code{plain-file} puede usarse de manera similar; se diferencia en que | ||
| 7574 | el 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)] | ||
| 7578 | Devuelve un objeto que representa el fichero local @var{fichero} a añadir al | ||
| 7579 | almacén; este objeto puede usarse en una expresión-G. Si @var{fichero} es un | ||
| 7580 | nombre de fichero relativo, se busca de forma relativa al fichero fuente | ||
| 7581 | donde esta forma aparece. @var{fichero} se añadirá al almacén bajo | ||
| 7582 | @var{nombre}---por defecto el nombre base de @var{fichero}. | ||
| 7583 | |||
| 7584 | Cuando @var{recursive?} es verdadero, los contenidos del @var{fichero} se | ||
| 7585 | añaden recursivamente; si @var{fichero} designa un fichero plano y | ||
| 7586 | @var{recursive?} es verdadero, sus contenidos se añaden, y sus bits de | ||
| 7587 | permisos se mantienen. | ||
| 7588 | |||
| 7589 | Cuando @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 | ||
| 7592 | el resultado de @code{lstat}; excluyendo las entradas para las cuales | ||
| 7593 | @var{select?} no devuelve verdadero. | ||
| 7594 | |||
| 7595 | Esta 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} | ||
| 7600 | Devuelve un objeto que representa un fichero de texto llamado @var{nombre} | ||
| 7601 | con el @var{contenido} proporcionado (una cadena o un vector de bytes) para | ||
| 7602 | ser añadido al almacén. | ||
| 7603 | |||
| 7604 | Esta 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)] | ||
| 7609 | Devuelve un objeto que representa el elemento del almacén @var{nombre}, un | ||
| 7610 | fichero o un directorio computado por @var{gexp}. @var{options} es una lista | ||
| 7611 | de parámetros adicionales a pasar a @code{gexp->derivation}. | ||
| 7612 | |||
| 7613 | Esta 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] | ||
| 7618 | Devuelve 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 | ||
| 7620 | búsqueda. Busca los módulos de @var{exp} en @var{module-path}. | ||
| 7621 | |||
| 7622 | El 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 | |||
| 7633 | Cuando 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 | ||
| 7635 | ejecutable @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] | ||
| 7646 | Devuelve un objeto que representa el elemento ejecutable del almacén | ||
| 7647 | @var{nombre} que ejecuta @var{gexp}. @var{guile} es el paquete Guile usado | ||
| 7648 | para ejecutar el guión. Los módulos importados por @var{gexp} se buscan en | ||
| 7649 | @var{module-path}. | ||
| 7650 | |||
| 7651 | Esta 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)] | ||
| 7658 | Devuelve 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 | ||
| 7660 | una lista de expresiones que deben ser expandidas en el fichero resultante. | ||
| 7661 | |||
| 7662 | Cuando @var{set-load-path} es verdadero, emite código en el fichero | ||
| 7663 | resultante para establecer @code{%load-path} y @code{%load-compiled-path} de | ||
| 7664 | manera que respeten los módulos importados por @var{exp}. Busca los módulos | ||
| 7665 | de @var{exp} en @var{module-path}. | ||
| 7666 | |||
| 7667 | El fichero resultante hace referencia a todas las dependencias de @var{exp} | ||
| 7668 | o a un subconjunto de ellas. | ||
| 7669 | @end deffn | ||
| 7670 | |||
| 7671 | @deffn {Procedimiento Scheme} scheme-file @var{nombre} @var{exp} [#:splice? #f] | ||
| 7672 | Devuelve un objeto que representa el fichero Scheme @var{nombre} que | ||
| 7673 | contiene @var{exp}. | ||
| 7674 | |||
| 7675 | Esta es la contraparte declarativa de @code{gexp->file}. | ||
| 7676 | @end deffn | ||
| 7677 | |||
| 7678 | @deffn {Procedimiento monádico} text-file* @var{nombre} @var{texto} @dots{} | ||
| 7679 | Devuelve como un valor monádico una derivación que construye un fichero de | ||
| 7680 | texto que contiene todo @var{texto}. @var{texto} puede ser una lista de, | ||
| 7681 | además de cadenas, objetos de cualquier tipo que pueda ser usado en | ||
| 7682 | expresiones-G: paquetes, derivaciones, ficheros locales, objetos, etc. El | ||
| 7683 | fichero del almacén resultante hace referencia a todos ellos. | ||
| 7684 | |||
| 7685 | Esta variante debe preferirse sobre @code{text-file} cuando el fichero a | ||
| 7686 | crear haga referencia a elementos del almacén. Esto es el caso típico cuando | ||
| 7687 | se construye un fichero de configuración que embebe nombres de ficheros del | ||
| 7688 | almacé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 | |||
| 7699 | En este ejemplo, el fichero @file{/gnu/store/@dots{}-perfil.sh} resultante | ||
| 7700 | hará referencia a @var{coreutils}, @var{grep} y @var{sed}, por tanto | ||
| 7701 | evitando 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{} | ||
| 7705 | Devuelve un objeto que representa el fichero del almacén @var{nombre} que | ||
| 7706 | contiene @var{texto}. @var{texto} es una secuencia de cadenas y objetos | ||
| 7707 | tipo-fichero, como en: | ||
| 7708 | |||
| 7709 | @example | ||
| 7710 | (mixed-text-file "perfil" | ||
| 7711 | "export PATH=" coreutils "/bin:" grep "/bin") | ||
| 7712 | @end example | ||
| 7713 | |||
| 7714 | Esta es la contraparte declarativa de @code{text-file*}. | ||
| 7715 | @end deffn | ||
| 7716 | |||
| 7717 | @deffn {Procedimiento Scheme} file-union @var{nombre} @var{ficheros} | ||
| 7718 | Devuelve un @code{<computed-file>} que construye un directorio que contiene | ||
| 7719 | todos los @var{ficheros}. Cada elemento en @var{ficheros} debe ser una lista | ||
| 7720 | de dos elementos donde el primer elemento es el nombre de fichero a usar en | ||
| 7721 | el nuevo directorio y el segundo elemento es una expresión-G que denota el | ||
| 7722 | fichero 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 | |||
| 7732 | Esto emite un directorio @code{etc} que contiene estos dos ficheros. | ||
| 7733 | @end deffn | ||
| 7734 | |||
| 7735 | @deffn {Procedimiento Scheme} directory-union @var{nombre} @var{cosas} | ||
| 7736 | Devuelve un directorio que es la unión de @var{cosas}, donde @var{cosas} es | ||
| 7737 | una 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 | |||
| 7743 | emite 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{} | ||
| 7748 | Devuelve 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 | ||
| 7750 | nivel y cada @var{sufijo} es una cadena. | ||
| 7751 | |||
| 7752 | Como 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 | |||
| 7760 | El 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 | |||
| 7768 | Hay una diferencia no obstante: en el caso de @code{file-append}, el guión | ||
| 7769 | resultante contiene una ruta absoluta de fichero como una cadena, mientras | ||
| 7770 | que 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 | ||
| 7772 | tiempo de ejecución}. | ||
| 7773 | @end deffn | ||
| 7774 | |||
| 7775 | |||
| 7776 | Por supuesto, además de expresiones-G embebidas en código ``anfitrión'', hay | ||
| 7777 | también módulos que contienen herramientas de construcción. Para clarificar | ||
| 7778 | que están destinados para su uso en el estrato de construcción, estos | ||
| 7779 | mó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 | ||
| 7782 | Internamente, los objetos de alto nivel se @dfn{bajan de nivel}, usando su | ||
| 7783 | compilador, a derivaciones o elementos del almacén. Por ejemplo, bajar de | ||
| 7784 | nivel un paquete emite una derivación, y bajar de nivel un @var{plain-file} | ||
| 7785 | emite un elemento del almacén. Esto se consigue usando el procedimiento | ||
| 7786 | monádico @code{lower-object}. | ||
| 7787 | |||
| 7788 | @deffn {Procedimiento monádico} lower-object @var{obj} [@var{sistema}] @ | ||
| 7789 | [#:target #f] | ||
| 7790 | Devuelve como un valor en @var{%store-monad} la derivación o elemento del | ||
| 7791 | almacén que corresponde a @var{obj} en @var{sistema}, compilando de manera | ||
| 7792 | cruzada para @var{target} si @var{target} es verdadero. @var{obj} debe ser | ||
| 7793 | un 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 | ||
| 7801 | La orden @command{guix repl} lanza un @dfn{bucle de | ||
| 7802 | lectura-evaluación-impresión} Guile (REPL) para programación interactiva | ||
| 7803 | (@pxref{Using Guile Interactively,,, guile, GNU Guile Reference | ||
| 7804 | Manual}). Comparado a simplemente lanzar la orden @command{guile}, | ||
| 7805 | @command{guix repl} garantiza que todos los módulos Guix y todas sus | ||
| 7806 | dependencias están disponibles en la ruta de búsqueda. Puede usarla de esta | ||
| 7807 | manera: | ||
| 7808 | |||
| 7809 | @example | ||
| 7810 | $ guix repl | ||
| 7811 | scheme@@(guile-user)> ,use (gnu packages base) | ||
| 7812 | scheme@@(guile-user)> coreutils | ||
| 7813 | $1 = #<package coreutils@@8.29 gnu/packages/base.scm:327 3e28300> | ||
| 7814 | @end example | ||
| 7815 | |||
| 7816 | @cindex inferiores | ||
| 7817 | Además, @command{guix repl} implementa un protocolo del REPL simple legible | ||
| 7818 | por máquinas para su uso por @code{(guix inferior)}, una facilidad para | ||
| 7819 | interactuar con @dfn{inferiores}, procesos separados que ejecutan una | ||
| 7820 | revisión de Guix potencialmente distinta. | ||
| 7821 | |||
| 7822 | Las opciones disponibles son las siguientes: | ||
| 7823 | |||
| 7824 | @table @code | ||
| 7825 | @item --type=@var{tipo} | ||
| 7826 | @itemx -t @var{tipo} | ||
| 7827 | Inicia un REPL del @var{TIPO} dado, que puede ser uno de los siguientes: | ||
| 7828 | |||
| 7829 | @table @code | ||
| 7830 | @item guile | ||
| 7831 | Es el predeterminado, y lanza una sesión interactiva Guile estándar con | ||
| 7832 | todas las características. | ||
| 7833 | @item machine | ||
| 7834 | Lanza un REPL que usa el protocolo legible por máquinas. Este es el | ||
| 7835 | protocolo con el que el módulo @code{(guix inferior)} se comunica. | ||
| 7836 | @end table | ||
| 7837 | |||
| 7838 | @item --listen=@var{destino} | ||
| 7839 | Por defecto, @command{guix repl} lee de la entrada estándar y escribe en la | ||
| 7840 | salida estándar. Cuando se pasa esta opción, en vez de eso escuchará las | ||
| 7841 | conexiones en @var{destino}. Estos son ejemplos de opciones válidas: | ||
| 7842 | |||
| 7843 | @table @code | ||
| 7844 | @item --listen=tcp:37146 | ||
| 7845 | Acepta conexiones locales por el puerto 37146. | ||
| 7846 | |||
| 7847 | @item --listen=unix:/tmp/socket | ||
| 7848 | Acepta 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 | |||
| 7856 | Esta sección describe las utilidades de línea de órdenes de Guix. Algunas de | ||
| 7857 | ellas están orientadas principalmente para desarrolladoras y usuarias que | ||
| 7858 | escriban definiciones de paquetes nuevas, mientras que otras son útiles de | ||
| 7859 | manera más general. Complementan la interfaz programática Scheme de Guix de | ||
| 7860 | modo 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} | ||
| 7888 | La orden @command{guix build} construye paquetes o derivaciones y sus | ||
| 7889 | dependencias, e imprime las rutas del almacén resultantes. Fíjese que no | ||
| 7890 | modifica 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 | ||
| 7892 | principalmente para las desarrolladoras de la distribución. | ||
| 7893 | |||
| 7894 | La sintaxis general es: | ||
| 7895 | |||
| 7896 | @example | ||
| 7897 | guix build @var{opciones} @var{paquete-o-derivación}@dots{} | ||
| 7898 | @end example | ||
| 7899 | |||
| 7900 | Como ejemplo, la siguiente orden construye las últimas versiones de Emacs y | ||
| 7901 | Guile, muestra sus log de construcción, y finalmente muestra los directorios | ||
| 7902 | resultantes: | ||
| 7903 | |||
| 7904 | @example | ||
| 7905 | guix build emacs guile | ||
| 7906 | @end example | ||
| 7907 | |||
| 7908 | De forma similar, la siguiente orden construye todos los paquetes | ||
| 7909 | disponibles: | ||
| 7910 | |||
| 7911 | @example | ||
| 7912 | guix 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 | ||
| 7917 | encuentra 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 | ||
| 7920 | de nombre (y opcionalmente versión) correspondiente se busca entre los | ||
| 7921 | módulos de la distribución GNU (@pxref{Módulos de paquetes}). | ||
| 7922 | |||
| 7923 | De manera alternativa, la opción @code{--expression} puede ser usada para | ||
| 7924 | especificar una expresión Scheme que evalúa a un paquete; esto es útil para | ||
| 7925 | la desambiguación entre varios paquetes del mismo nombre o si se necesitan | ||
| 7926 | variaciones del paquete. | ||
| 7927 | |||
| 7928 | Puede haber cero o más @var{opciones}. Las opciones disponibles se describen | ||
| 7929 | en 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 | |||
| 7944 | Un 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} | ||
| 7952 | Añade @var{directorio} al frente de la ruta de búsqueda de módulos de | ||
| 7953 | paquetes (@pxref{Módulos de paquetes}). | ||
| 7954 | |||
| 7955 | Esto permite a las usuarias definir sus propios paquetes y hacerlos visibles | ||
| 7956 | a las herramientas de línea de órdenes. | ||
| 7957 | |||
| 7958 | @item --keep-failed | ||
| 7959 | @itemx -K | ||
| 7960 | Mantiene los árboles de construcción de las construcciones fallidas. Por | ||
| 7961 | tanto, 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 | ||
| 7963 | construcción. Esto es útil cuando se depuran problemas en la | ||
| 7964 | construcción. @xref{Depuración de fallos de construcción}, para trucos y consejos sobre | ||
| 7965 | cómo depurar problemas en la construcción. | ||
| 7966 | |||
| 7967 | Esta 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 | ||
| 7972 | Seguir adelante cuando alguna de las derivaciones de un fallo durante la | ||
| 7973 | construcción; devuelve una única vez todas las construcciones que se han | ||
| 7974 | completado o bien han fallado. | ||
| 7975 | |||
| 7976 | El comportamiento predeterminado es parar tan pronto una de las derivaciones | ||
| 7977 | especificadas falle. | ||
| 7978 | |||
| 7979 | @item --dry-run | ||
| 7980 | @itemx -n | ||
| 7981 | No construye las derivaciones. | ||
| 7982 | |||
| 7983 | @anchor{fallback-option} | ||
| 7984 | @item --fallback | ||
| 7985 | Cuando la sustitución de un binario preconstruido falle, intenta la | ||
| 7986 | construcción local de paquetes (@pxref{Fallos en las sustituciones}). | ||
| 7987 | |||
| 7988 | @item --substitute-urls=@var{urls} | ||
| 7989 | @anchor{client-substitute-urls} | ||
| 7990 | Considera @var{urls} la lista separada por espacios de URLs de fuentes de | ||
| 7991 | sustituciones, anulando la lista predeterminada de URLs de | ||
| 7992 | @command{guix-daemon} (@pxref{daemon-substitute-urls,, @command{guix-daemon | ||
| 7993 | URLs}}). | ||
| 7994 | |||
| 7995 | Significa que las sustituciones puede ser descargadas de @var{urls}, | ||
| 7996 | mientras que estén firmadas por una clave autorizada por la administradora | ||
| 7997 | del sistema (@pxref{Sustituciones}). | ||
| 7998 | |||
| 7999 | Cuando @var{urls} es la cadena vacía, las sustituciones están efectivamente | ||
| 8000 | deshabilitadas. | ||
| 8001 | |||
| 8002 | @item --no-substitutes | ||
| 8003 | No usa sustituciones para la construcción de productos. Esto es, siempre | ||
| 8004 | realiza las construcciones localmente en vez de permitir la descarga de | ||
| 8005 | binarios pre-construidos (@pxref{Sustituciones}). | ||
| 8006 | |||
| 8007 | @item --no-grafts | ||
| 8008 | No ``injerta'' paquetes. En la práctica esto significa que las | ||
| 8009 | actualizaciones de paquetes disponibles como injertos no se | ||
| 8010 | aplican. @xref{Actualizaciones de seguridad}, para más información sobre los injertos. | ||
| 8011 | |||
| 8012 | @item --rounds=@var{n} | ||
| 8013 | Construye cada derivación @var{n} veces seguidas, y lanza un error si los | ||
| 8014 | resultados de las construcciones consecutivas no son idénticos bit-a-bit. | ||
| 8015 | |||
| 8016 | Esto es útil para la detección de procesos de construcción | ||
| 8017 | no-deterministas. Los procesos de construcción no-deterministas son un | ||
| 8018 | problema puesto que prácticamente imposibilitan a las usuarias la | ||
| 8019 | @emph{verificación} de la autenticidad de binarios proporcionados por | ||
| 8020 | terceras partes. @xref{Invocación de guix challenge}, para más sobre esto. | ||
| 8021 | |||
| 8022 | Fíjese que, actualmente, los resultados de las construcciones discordantes | ||
| 8023 | no se mantienen, por lo que debe que investigar manualmente en caso de un | ||
| 8024 | error---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 | ||
| 8026 | reconstrucción, y finalmente la comparación de los dos resultados. | ||
| 8027 | |||
| 8028 | @item --no-build-hook | ||
| 8029 | No intenta delegar construcciones a través del ``hook de construcción'' del | ||
| 8030 | daemon (@pxref{Configuración de delegación del daemon}). Es decir, siempre realiza las | ||
| 8031 | construcciones de manera local en vez de delegando construcciones a máquinas | ||
| 8032 | remotas. | ||
| 8033 | |||
| 8034 | @item --max-silent-time=@var{segundos} | ||
| 8035 | Cuando 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 | |||
| 8038 | Por defecto, se respeta la configuración del daemon (@pxref{Invocación de guix-daemon, @code{--max-silent-time}}). | ||
| 8039 | |||
| 8040 | @item --timeout=@var{segundos} | ||
| 8041 | Del 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 | |||
| 8044 | Por 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} | ||
| 8052 | Use the given verbosity @var{level}, an integer. Choosing 0 means that no | ||
| 8053 | output is produced, 1 is for quiet output, and 2 shows all the build log | ||
| 8054 | output on standard error. | ||
| 8055 | |||
| 8056 | @item --cores=@var{n} | ||
| 8057 | @itemx -c @var{n} | ||
| 8058 | Permite usar @var{n} núcleos de la CPU para la construcción. El valor | ||
| 8059 | especial @code{0} significa usar tantos como núcleos haya en la CPU. | ||
| 8060 | |||
| 8061 | @item --max-jobs=@var{n} | ||
| 8062 | @itemx -M @var{n} | ||
| 8063 | Permite como máximo @var{n} trabajos de construcción en | ||
| 8064 | paralelo. @xref{Invocación de guix-daemon, @code{--max-jobs}}, para detalles | ||
| 8065 | acerca de esta opción y la opción equivalente de @command{guix-daemon}. | ||
| 8066 | |||
| 8067 | @item --debug=@var{nivel} | ||
| 8068 | Produce debugging output coming from the build daemon. @var{level} must be | ||
| 8069 | an integer between 0 and 5; higher means more verbose output. Setting a | ||
| 8070 | level of 4 or more may be helpful when debugging setup issues with the build | ||
| 8071 | daemon. | ||
| 8072 | |||
| 8073 | @end table | ||
| 8074 | |||
| 8075 | Tras las cortinas, @command{guix build} es esencialmente una interfaz al | ||
| 8076 | procedimiento @code{package-derivation} del módulo @code{(guix packages)}, y | ||
| 8077 | al procedimiento @code{build-derivations} del módulo @code{(guix | ||
| 8078 | derivations)}. | ||
| 8079 | |||
| 8080 | Ademá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 | ||
| 8082 | construcción respetan el contenido de la variable de entorno | ||
| 8083 | @code{GUIX_BUILD_OPTIONS}. | ||
| 8084 | |||
| 8085 | @defvr {Variable de entorno} GUIX_BUILD_OPTIONS | ||
| 8086 | Las usuarias pueden definir esta variable para que contenga una lista de | ||
| 8087 | opciones de línea de órdenes que se usarán automáticamente por @command{guix | ||
| 8088 | build} y otras órdenes @command{guix} que puedan realizar construcciones, | ||
| 8089 | como en el ejemplo siguiente: | ||
| 8090 | |||
| 8091 | @example | ||
| 8092 | $ export GUIX_BUILD_OPTIONS="--no-substitutes -c 2 -L /foo/bar" | ||
| 8093 | @end example | ||
| 8094 | |||
| 8095 | Estas opciones se analizan independientemente, y el resultado se añade a | ||
| 8096 | continuació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 | ||
| 8104 | Otro conjunto de opciones de línea de órdenes permitidas por @command{guix | ||
| 8105 | build} y también @command{guix package} son las @dfn{opciones de | ||
| 8106 | transformación de paquetes}. Son opciones que hacen posible la definición de | ||
| 8107 | @dfn{variaciones de paquetes}---por ejemplo, paquetes construidos con un | ||
| 8108 | código fuente diferente. Es una forma conveniente de crear paquetes | ||
| 8109 | personalizados al vuelo sin tener que escribir las definiciones de las | ||
| 8110 | variaciones 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} | ||
| 8117 | Usa @var{fuente} como la fuente de @var{paquete}, y @var{versión} como su | ||
| 8118 | número de versión. @var{fuente} debe ser un nombre de fichero o una URL, | ||
| 8119 | como en @command{guix download} (@pxref{Invocación de guix download}). | ||
| 8120 | |||
| 8121 | Cuando se omite @var{paquete}, se toma el nombre de paquete especificado en | ||
| 8122 | la línea de ordenes que coincide con el nombre base de @var{fuente}---por | ||
| 8123 | ejemplo, si @var{fuente} fuese @code{/src/guile-2.0.10.tar.gz}, el paquete | ||
| 8124 | correspondiente sería @code{guile}. | ||
| 8125 | |||
| 8126 | Del 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 | |||
| 8129 | Esta opción permite a las usuarias probar versiones del paquete distintas a | ||
| 8130 | las 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 | ||
| 8132 | paquete @code{ed}: | ||
| 8133 | |||
| 8134 | @example | ||
| 8135 | guix build ed --with-source=mirror://gnu/ed/ed-1.7.tar.gz | ||
| 8136 | @end example | ||
| 8137 | |||
| 8138 | Como desarrolladora, @code{--with-source} facilita la prueba de versiones | ||
| 8139 | candidatas para la publicación: | ||
| 8140 | |||
| 8141 | @example | ||
| 8142 | guix 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} | ||
| 8153 | Substituye 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 | |||
| 8158 | Por ejemplo, la orden siguiente construye Guix, pero substituye su | ||
| 8159 | dependencia de la versión estable actual de Guile con una dependencia en la | ||
| 8160 | versión antigua de Guile, @code{guile@@2.0}: | ||
| 8161 | |||
| 8162 | @example | ||
| 8163 | guix build --with-input=guile=guile@@2.0 guix | ||
| 8164 | @end example | ||
| 8165 | |||
| 8166 | Esta sustitución se realiza de forma recursiva y en profundidad. Por lo que | ||
| 8167 | en 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 | |||
| 8171 | Se 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} | ||
| 8175 | Es similar a @code{--with-input} pero con una diferencia importante: en vez | ||
| 8176 | de reconstruir la cadena de dependencias completa, @var{reemplazo} se | ||
| 8177 | construye y se @dfn{injerta} en los binarios que inicialmente hacían | ||
| 8178 | referencia a @var{paquete}. @xref{Actualizaciones de seguridad}, para más información | ||
| 8179 | sobre injertos. | ||
| 8180 | |||
| 8181 | Por ejemplo, la orden siguiente injerta la versión 3.5.4 de GnuTLS en Wget y | ||
| 8182 | todas sus dependencias, substituyendo las referencias a la versión de GnuTLS | ||
| 8183 | que tienen actualmente: | ||
| 8184 | |||
| 8185 | @example | ||
| 8186 | guix build --with-graft=gnutls=gnutls@@3.5.4 wget | ||
| 8187 | @end example | ||
| 8188 | |||
| 8189 | Esta opción tiene la ventaja de ser mucho más rápida que la reconstrucción | ||
| 8190 | de todo. Pero hay una trampa: funciona si y solo si @var{paquete} y | ||
| 8191 | @var{reemplazo} son estrictamente compatibles---por ejemplo, si proporcionan | ||
| 8192 | una biblioteca, la interfaz binaria de aplicación (ABI) de dichas | ||
| 8193 | bibliotecas debe ser compatible. Si @var{reemplazo} es incompatible de | ||
| 8194 | alguna manera con @var{paquete}, el paquete resultante puede no ser | ||
| 8195 | usable. ¡Ú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 | ||
| 8200 | Build @var{package} from the latest commit of the @code{master} branch of | ||
| 8201 | the Git repository at @var{url}. Git sub-modules of the repository are | ||
| 8202 | fetched, recursively. | ||
| 8203 | |||
| 8204 | For example, the following command builds the NumPy Python library against | ||
| 8205 | the latest commit of the master branch of Python itself: | ||
| 8206 | |||
| 8207 | @example | ||
| 8208 | guix build python-numpy \ | ||
| 8209 | --with-git-url=python=https://github.com/python/cpython | ||
| 8210 | @end example | ||
| 8211 | |||
| 8212 | This option can also be combined with @code{--with-branch} or | ||
| 8213 | @code{--with-commit} (see below). | ||
| 8214 | |||
| 8215 | @cindex integración continua | ||
| 8216 | Obviously, since it uses the latest commit of the given branch, the result | ||
| 8217 | of such a command varies over time. Nevertheless it is a convenient way to | ||
| 8218 | rebuild entire software stacks against the latest commit of one or more | ||
| 8219 | packages. This is particularly useful in the context of continuous | ||
| 8220 | integration (CI). | ||
| 8221 | |||
| 8222 | Checkouts are kept in a cache under @file{~/.cache/guix/checkouts} to speed | ||
| 8223 | up consecutive accesses to the same repository. You may want to clean it up | ||
| 8224 | once in a while to save disk space. | ||
| 8225 | |||
| 8226 | @item --with-branch=@var{paquete}=@var{rama} | ||
| 8227 | Build @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} | ||
| 8229 | method (@pxref{Referencia de ``origin''}) or a @code{git-checkout} object, the | ||
| 8230 | repository 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 | |||
| 8233 | For instance, the following command builds @code{guile-sqlite3} from the | ||
| 8234 | latest commit of its @code{master} branch, and then builds @code{guix} | ||
| 8235 | (which depends on it) and @code{cuirass} (which depends on @code{guix}) | ||
| 8236 | against this specific @code{guile-sqlite3} build: | ||
| 8237 | |||
| 8238 | @example | ||
| 8239 | guix build --with-branch=guile-sqlite3=master cuirass | ||
| 8240 | @end example | ||
| 8241 | |||
| 8242 | @item --with-commit=@var{paquete}=@var{revisión} | ||
| 8243 | This 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 | ||
| 8245 | Git commit SHA1 identifier. | ||
| 8246 | @end table | ||
| 8247 | |||
| 8248 | @node Opciones de construcción adicionales | ||
| 8249 | @subsection Opciones de construcción adicionales | ||
| 8250 | |||
| 8251 | Las opciones de línea de ordenes presentadas a continuación son específicas | ||
| 8252 | de @command{guix build}. | ||
| 8253 | |||
| 8254 | @table @code | ||
| 8255 | |||
| 8256 | @item --quiet | ||
| 8257 | @itemx -q | ||
| 8258 | Build 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} | ||
| 8261 | option. | ||
| 8262 | |||
| 8263 | @item --file=@var{fichero} | ||
| 8264 | @itemx -f @var{fichero} | ||
| 8265 | Construye el paquete, derivación u otro objeto tipo-fichero al que evalúa el | ||
| 8266 | código en @var{fichero} (@pxref{Expresiones-G, file-like objects}). | ||
| 8267 | |||
| 8268 | Como 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} | ||
| 8277 | Construye el paquete o derivación al que @var{expr} evaulua. | ||
| 8278 | |||
| 8279 | Por ejemplo, @var{expr} puede ser @code{(@@ (gnu packages guile) | ||
| 8280 | guile-1.8)}, que designa sin ambigüedad a esta variante específica de la | ||
| 8281 | versión 1.8 de Guile. | ||
| 8282 | |||
| 8283 | De manera alternativa, @var{expr} puede ser una expresión-G, en cuyo caso se | ||
| 8284 | usa como un programa de construcción pasado a @code{gexp->derivation} | ||
| 8285 | (@pxref{Expresiones-G}). | ||
| 8286 | |||
| 8287 | Por último, @var{expr} puede hacer referencia a un procedimiento mónadico | ||
| 8288 | sin parámetros (@pxref{La mónada del almacén}). El procedimiento debe devolver una | ||
| 8289 | derivació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 | ||
| 8294 | Construye las derivaciones de las fuentes de los paquetes, en vez de los | ||
| 8295 | paquetes mismos. | ||
| 8296 | |||
| 8297 | Por 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 | ||
| 8299 | fuentes de GCC. | ||
| 8300 | |||
| 8301 | El archivador tar devuelto es el resultado de aplicar cualquier parche y | ||
| 8302 | fragmento de código en el origen (campo @code{origin}) del paquete | ||
| 8303 | (@pxref{Definición de paquetes}). | ||
| 8304 | |||
| 8305 | @item --sources | ||
| 8306 | Obtiene y devuelve las fuentes de @var{paquete-o-derivación} y todas sus | ||
| 8307 | dependencias, recursivamente. Esto es útil para obtener una copia local de | ||
| 8308 | todo el código fuente necesario para construir los @var{paquetes}, | ||
| 8309 | permitiendole construirlos llegado el momento sin acceso a la red. Es una | ||
| 8310 | extensión de la opción @code{--source} y puede aceptar uno de los siguientes | ||
| 8311 | valores opcionales como parámetro: | ||
| 8312 | |||
| 8313 | @table @code | ||
| 8314 | @item package | ||
| 8315 | Este valor hace que la opción @code{--sources} se comporte de la misma | ||
| 8316 | manera que la opción @code{--source}. | ||
| 8317 | |||
| 8318 | @item all | ||
| 8319 | Construye las derivaciones de las fuentes de todos los paquetes, incluyendo | ||
| 8320 | cualquier fuente que pueda enumerarse como entrada (campo | ||
| 8321 | @code{inputs}). Este es el valor predeterminado. | ||
| 8322 | |||
| 8323 | @example | ||
| 8324 | $ guix build --sources tzdata | ||
| 8325 | The 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 | ||
| 8331 | Construye las derivaciones de fuentes de todos los paquetes, así como todas | ||
| 8332 | las entradas transitivas de los paquetes. Esto puede usarse, por ejemplo, | ||
| 8333 | para obtener las fuentes de paquetes para una construcción posterior sin | ||
| 8334 | conexión a la red. | ||
| 8335 | |||
| 8336 | @example | ||
| 8337 | $ guix build --sources=transitive tzdata | ||
| 8338 | The 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} | ||
| 8352 | Attempt to build for @var{system}---e.g., @code{i686-linux}---instead of the | ||
| 8353 | system type of the build host. The @command{guix build} command allows you | ||
| 8354 | to repeat this option several times, in which case it builds for all the | ||
| 8355 | specified systems; other commands ignore extraneous @option{-s} options. | ||
| 8356 | |||
| 8357 | @quotation Nota | ||
| 8358 | La opción @code{--system} es para compilación @emph{nativa} y no debe | ||
| 8359 | confundirse con la compilación cruzada. Véase @code{--target} más adelante | ||
| 8360 | para información sobre compilación cruzada. | ||
| 8361 | @end quotation | ||
| 8362 | |||
| 8363 | Un ejemplo de uso de esta opción es en sistemas basados en Linux, que pueden | ||
| 8364 | emular 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 | ||
| 8367 | construir paquetes en un entorno de 32-bits completo. | ||
| 8368 | |||
| 8369 | @quotation Nota | ||
| 8370 | La construcción para un sistema @code{armhf-linux} está habilitada | ||
| 8371 | incondicionalmente en máquinas @code{aarch64-linux}, aunque determinados | ||
| 8372 | procesadores aarch64 no permiten esta funcionalidad, notablemente el | ||
| 8373 | ThunderX. | ||
| 8374 | @end quotation | ||
| 8375 | |||
| 8376 | De 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 | ||
| 8379 | para el que un manejador QEMU de @code{binfmt_misc} esté instalado. | ||
| 8380 | |||
| 8381 | Las construcciones para un sistema distinto al de la máquina que usa pueden | ||
| 8382 | delegarse también a una máquina remota de la arquitectura | ||
| 8383 | correcta. @xref{Configuración de delegación del daemon}, para más información sobre | ||
| 8384 | delegación. | ||
| 8385 | |||
| 8386 | @item --target=@var{tripleta} | ||
| 8387 | @cindex compilación cruzada | ||
| 8388 | Compilación cruzada para la @var{tripleta}, que debe ser una tripleta GNU | ||
| 8389 | válida, cómo @code{"mips64el-linux-gnu"} (@pxref{Specifying target triplets, | ||
| 8390 | GNU configuration triplets,, autoconf, Autoconf}). | ||
| 8391 | |||
| 8392 | @anchor{build-check} | ||
| 8393 | @item --check | ||
| 8394 | @cindex determinismo, comprobación | ||
| 8395 | @cindex reproducibilidad, comprobación | ||
| 8396 | Reconstruye @var{paquete-o-derivación}, que ya está disponible en el | ||
| 8397 | almacén, y emite un error si los resultados de la construcción no son | ||
| 8398 | idénticos bit-a-bit. | ||
| 8399 | |||
| 8400 | Este mecanismo le permite comprobar si sustituciones previamente instaladas | ||
| 8401 | son genuinas (@pxref{Sustituciones}), o si el resultado de la construcción de | ||
| 8402 | un paquete es determinista. @xref{Invocación de guix challenge}, para más | ||
| 8403 | información de referencia y herramientas. | ||
| 8404 | |||
| 8405 | Cuando se usa conjuntamente con @option{--keep-failed}, la salida que | ||
| 8406 | difiere se mantiene en el almacén, bajo | ||
| 8407 | @file{/gnu/store/@dots{}-check}. Esto hace fácil buscar diferencias entre | ||
| 8408 | los dos resultados. | ||
| 8409 | |||
| 8410 | @item --repair | ||
| 8411 | @cindex reparar elementos del almacén | ||
| 8412 | @cindex corrupción, recuperarse de | ||
| 8413 | Intenta reparar los elementos del almacén especificados, si están corruptos, | ||
| 8414 | volviendo a descargarlos o reconstruyendolos. | ||
| 8415 | |||
| 8416 | Esta operación no es atómica y por lo tanto está restringida a @code{root}. | ||
| 8417 | |||
| 8418 | @item --derivations | ||
| 8419 | @itemx -d | ||
| 8420 | Devuelve las rutas de derivación, no las rutas de salida, de los paquetes | ||
| 8421 | proporcionados. | ||
| 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 | ||
| 8427 | Hace que @var{fichero} sea un enlace simbólico al resultado, y lo registra | ||
| 8428 | como una raíz del recolector de basura. | ||
| 8429 | |||
| 8430 | Consecuentemente, los resultados de esta invocación de @command{guix build} | ||
| 8431 | se protegen de la recolección de basura hasta que @var{fichero} se | ||
| 8432 | elimine. Cuando se omite esa opción, los resultados son candidatos a la | ||
| 8433 | recolección de basura en cuanto la construcción se haya | ||
| 8434 | completado. @xref{Invocación de guix gc}, para más sobre las raíces del | ||
| 8435 | recolector de basura. | ||
| 8436 | |||
| 8437 | @item --log-file | ||
| 8438 | @cindex logs de construcción, acceso | ||
| 8439 | Devuelve 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 | ||
| 8441 | encuentran los log de construcción. | ||
| 8442 | |||
| 8443 | Esto funciona independientemente de cómo se especificasen los paquetes o | ||
| 8444 | derivaciones. Por ejemplo, las siguientes invocaciones son equivalentes: | ||
| 8445 | |||
| 8446 | @example | ||
| 8447 | guix build --log-file `guix build -d guile` | ||
| 8448 | guix build --log-file `guix build guile` | ||
| 8449 | guix build --log-file guile | ||
| 8450 | guix build --log-file -e '(@@ (gnu packages guile) guile-2.0)' | ||
| 8451 | @end example | ||
| 8452 | |||
| 8453 | Si 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 | ||
| 8455 | servidores de sustituciones (como se especificaron con | ||
| 8456 | @code{--substitute-urls}). | ||
| 8457 | |||
| 8458 | Por lo que dado el caso, imaginese que desea ver el log de construcción de | ||
| 8459 | GDB en MIPS, pero realmente está en una máquina @code{x86_64}: | ||
| 8460 | |||
| 8461 | @example | ||
| 8462 | $ guix build --log-file gdb -s mips64el-linux | ||
| 8463 | https://@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 | ||
| 8473 | Cuando esté definiendo un paquete nuevo (@pxref{Definición de paquetes}), | ||
| 8474 | probablemente se encuentre que dedicando algún tiempo a depurar y afinar la | ||
| 8475 | construcción hasta obtener un resultado satisfactorio. Para hacerlo, tiene | ||
| 8476 | que lanzar manualmente las órdenes de construcción en un entorno tan similar | ||
| 8477 | como sea posible al que el daemon de construcción usa. | ||
| 8478 | |||
| 8479 | Para ello, la primera cosa a hacer es usar la opción @option{--keep-failed} | ||
| 8480 | o @option{-K} de @command{guix build}, lo que mantiene el árbol de la | ||
| 8481 | construcción fallida en @file{/tmp} o el directorio que especificase con | ||
| 8482 | @code{TMPDIR} (@pxref{Invocación de guix build, @code{--keep-failed}}). | ||
| 8483 | |||
| 8484 | De ahí en adelante, puede usar @command{cd} para ir al árbol de la | ||
| 8485 | construcción fallida y cargar el fichero @file{environment-variables}, que | ||
| 8486 | contiene todas las definiciones de variables de entorno que existían cuando | ||
| 8487 | la construcción falló. Digamos que está depurando un fallo en la | ||
| 8488 | construcció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 | |||
| 8498 | Ahora puede invocar órdenes (casi) como si fuese el daemon y encontrar los | ||
| 8499 | errores en su proceso de construcción. | ||
| 8500 | |||
| 8501 | A veces ocurre que, por ejemplo, las pruebas de un paquete pasan cuando las | ||
| 8502 | ejecuta manualmente pero fallan cuando el daemon las ejecuta. Esto puede | ||
| 8503 | suceder debido a que el daemon construye dentro de contenedores donde, al | ||
| 8504 | contrario que en nuestro entorno previo, el acceso a la red no está | ||
| 8505 | disponible, @file{/bin/sh} no existe, etc. (@pxref{Configuración del entorno de construcción}). | ||
| 8506 | |||
| 8507 | En esos casos, puede tener que inspeccionar el proceso de construcción desde | ||
| 8508 | un 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 | |||
| 8519 | Aquí, @command{guix environment -C} crea un contenedor y lanza un shell | ||
| 8520 | nuevo 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 | ||
| 8523 | depuración. La opción @option{--no-grafts} asegura que obtenemos exactamente | ||
| 8524 | el mismo entorno, con paquetes sin injertos (@pxref{Actualizaciones de seguridad}, para | ||
| 8525 | más información sobre los injertos). | ||
| 8526 | |||
| 8527 | Para acercarnos más al contenedor usado por el daemon de construcción, | ||
| 8528 | podemos 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 | ||
| 8535 | tirar creado por @command{guix environment}). | ||
| 8536 | |||
| 8537 | La orden @command{strace} probablemente no esté en la ruta de búsqueda, pero | ||
| 8538 | podemos ejecutar: | ||
| 8539 | |||
| 8540 | @example | ||
| 8541 | [env]# $GUIX_ENVIRONMENT/bin/strace -f -o log make check | ||
| 8542 | @end example | ||
| 8543 | |||
| 8544 | De este modo, no solo habrá reproducido las variables de entorno que usa el | ||
| 8545 | daemon, también estará ejecutando el proceso de construcción en un | ||
| 8546 | contenedor 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} | ||
| 8555 | facilita la vida de las usuarias y empaquetadoras apuntando su editor al | ||
| 8556 | fichero de fuentes que contiene la definición de los paquetes | ||
| 8557 | especificados. Por ejemplo: | ||
| 8558 | |||
| 8559 | @example | ||
| 8560 | guix edit gcc@@4.9 vim | ||
| 8561 | @end example | ||
| 8562 | |||
| 8563 | @noindent | ||
| 8564 | lanza 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 | |||
| 8567 | Si 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 | ||
| 8569 | paquetes. 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 | ||
| 8578 | Durante la escritura de una definición de paquete, las desarrolladoras | ||
| 8579 | típicamente tienen que descargar un archivador tar de fuentes, calcular su | ||
| 8580 | hash SHA256 y escribir ese hash en la definición del paquete | ||
| 8581 | (@pxref{Definición de paquetes}). La herramienta @command{guix download} ayuda | ||
| 8582 | con esta tarea: descarga un fichero de la URI proporcionada, lo añade al | ||
| 8583 | almacén e imprime tanto su nombre de fichero en el almacén como su hash | ||
| 8584 | SHA256. | ||
| 8585 | |||
| 8586 | El hecho de que el fichero descargado se añada al almacén ahorra ancho de | ||
| 8587 | banda: cuando el desarrollador intenta construir el paquete recién definido | ||
| 8588 | con @command{guix build}, el archivador de fuentes no tiene que descargarse | ||
| 8589 | de nuevo porque ya está en el almacén. También es una forma conveniente de | ||
| 8590 | conservar ficheros temporalmente, que pueden ser borrados en un momento dado | ||
| 8591 | (@pxref{Invocación de guix gc}). | ||
| 8592 | |||
| 8593 | La orden @command{guix download} acepta las mismas URI que las usadas en las | ||
| 8594 | definiciones de paquetes. En particular, permite URI @code{mirror://}. Las | ||
| 8595 | URI @code{https} (HTTP sobre TLS) se aceptan @emph{cuando} el enlace Guile | ||
| 8596 | con GnuTLS está disponible en el entorno de la usuaria; cuando no está | ||
| 8597 | disponible se emite un error. @xref{Guile Preparations, how to install the | ||
| 8598 | GnuTLS bindings for Guile,, gnutls-guile, GnuTLS-Guile}, para más | ||
| 8599 | información. | ||
| 8600 | |||
| 8601 | @command{guix download} verifica los certificados del servidor HTTPS | ||
| 8602 | cargando las autoridades X.509 del directorio al que apunta la variable de | ||
| 8603 | entorno @code{SSL_CERT_DIR} (@pxref{Certificados X.509}), a menos que se use | ||
| 8604 | @option{--no-check-certificate}. | ||
| 8605 | |||
| 8606 | Las siguientes opciones están disponibles: | ||
| 8607 | |||
| 8608 | @table @code | ||
| 8609 | @item --format=@var{fmt} | ||
| 8610 | @itemx -f @var{fmt} | ||
| 8611 | Escribe el hash en el formato especificado por @var{fmt}. Para más | ||
| 8612 | información sobre los valores aceptados en @var{fmt}, @pxref{Invocación de guix hash}. | ||
| 8613 | |||
| 8614 | @item --no-check-certificate | ||
| 8615 | No valida los certificados X.509 de los servidores HTTPS. | ||
| 8616 | |||
| 8617 | Cuando se usa esta opción, no tiene @emph{absolutamente ninguna garantía} de | ||
| 8618 | que está comunicando con el servidor responsable de la URL auténtico, lo que | ||
| 8619 | le hace vulnerables a ataques de intercepción (``man-in-the-middle''). | ||
| 8620 | |||
| 8621 | @item --output=@var{fichero} | ||
| 8622 | @itemx -o @var{fichero} | ||
| 8623 | Almacena el fichero descargado en @var{fichero} en vez de añadirlo al | ||
| 8624 | almacé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} | ||
| 8631 | La orden @command{guix hash} calcula el hash SHA256 de un fichero. Es | ||
| 8632 | principalmente una conveniente herramienta para cualquiera que contribuya a | ||
| 8633 | la distribución: calcula el hash criptográfico de un fichero, que puede | ||
| 8634 | usarse en la definición de un paquete (@pxref{Definición de paquetes}). | ||
| 8635 | |||
| 8636 | La sintaxis general es: | ||
| 8637 | |||
| 8638 | @example | ||
| 8639 | guix hash @var{opciones} @var{fichero} | ||
| 8640 | @end example | ||
| 8641 | |||
| 8642 | Cuando @var{fichero} es @code{-} (un guión), @command{guix hash} calcula el | ||
| 8643 | hash de los datos leídos por la entrada estándar. @command{guix hash} tiene | ||
| 8644 | las siguientes opciones: | ||
| 8645 | |||
| 8646 | @table @code | ||
| 8647 | |||
| 8648 | @item --format=@var{fmt} | ||
| 8649 | @itemx -f @var{fmt} | ||
| 8650 | Escribe el hash en el formato especificado por @var{fmt}. | ||
| 8651 | |||
| 8652 | Los formatos disponibles son: @code{nix-base32}, @code{base32}, | ||
| 8653 | @code{base16} (se puede usar también @code{hex} y @code{hexadecimal}). | ||
| 8654 | |||
| 8655 | Si no se especifica la opción @option{--format}, @command{guix hash} | ||
| 8656 | mostrará el hash en @code{nix-base32}. Esta representación es la usada en | ||
| 8657 | las definiciones de paquetes. | ||
| 8658 | |||
| 8659 | @item --recursive | ||
| 8660 | @itemx -r | ||
| 8661 | Calcula el hash de @var{fichero} recursivamente. | ||
| 8662 | |||
| 8663 | @c FIXME: Replace xref above with xref to an ``Archive'' section when | ||
| 8664 | @c it exists. | ||
| 8665 | Es este caso el hash se calcula en un archivador que contiene @var{fichero}, | ||
| 8666 | incluyendo su contenido si es un directorio. Algunos de los metadatos de | ||
| 8667 | @var{fichero} son parte del archivador; por ejemplo, cuando @var{fichero} es | ||
| 8668 | un fichero normal, el hash es diferente dependiendo de si @var{fichero} es | ||
| 8669 | ejecutable o no. Los metadatos como las marcas de tiempo no influyen en el | ||
| 8670 | hash (@pxref{Invocación de guix archive}). | ||
| 8671 | |||
| 8672 | @item --exclude-vcs | ||
| 8673 | @itemx -x | ||
| 8674 | Cuando se combina con @option{--recursive}, excluye los directorios del | ||
| 8675 | sistema de control de versiones (@file{.bzr}, @file{.git}, @file{.hg}, | ||
| 8676 | etc.). | ||
| 8677 | |||
| 8678 | @vindex git-fetch | ||
| 8679 | Como un ejemplo, así es como calcularía el hash de una copia de trabajo Git, | ||
| 8680 | lo 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} | ||
| 8696 | La orden @command{guix import} es útil para quienes desean añadir un paquete | ||
| 8697 | a la distribución con el menor trabajo posible---una demanda legítima. La | ||
| 8698 | orden conoce algunos repositorios de los que puede ``importar'' metadatos de | ||
| 8699 | paquetes. El resultado es una definición de paquete, o una plantilla de | ||
| 8700 | ella, en el formato que conocemos (@pxref{Definición de paquetes}). | ||
| 8701 | |||
| 8702 | La sintaxis general es: | ||
| 8703 | |||
| 8704 | @example | ||
| 8705 | guix import @var{importador} @var{opciones}@dots{} | ||
| 8706 | @end example | ||
| 8707 | |||
| 8708 | @var{importador} especifica la fuente de la que se importan los metadatos | ||
| 8709 | del paquete, @var{opciones} especifica un identificador de paquete y otras | ||
| 8710 | opciones específicas del @var{importador}. Actualmente, los ``importadores'' | ||
| 8711 | disponibles son: | ||
| 8712 | |||
| 8713 | @table @code | ||
| 8714 | @item gnu | ||
| 8715 | Importa los metadatos del paquete GNU seleccionado. Proporciona una | ||
| 8716 | plantilla para la última versión de dicho paquete GNU, incluyendo el hash de | ||
| 8717 | su archivador tar de fuentes, y su sinopsis y descripción canónica. | ||
| 8718 | |||
| 8719 | Información adicional como las dependencias del paquete y su licencia deben | ||
| 8720 | ser deducidas manualmente. | ||
| 8721 | |||
| 8722 | Por ejemplo, la siguiente orden devuelve una definición de paquete para | ||
| 8723 | GNU@tie{}Hello. | ||
| 8724 | |||
| 8725 | @example | ||
| 8726 | guix import gnu hello | ||
| 8727 | @end example | ||
| 8728 | |||
| 8729 | Las opciones específicas de línea de ordenes son: | ||
| 8730 | |||
| 8731 | @table @code | ||
| 8732 | @item --key-download=@var{política} | ||
| 8733 | Como en @code{guix refresh}, especifica la política de tratamiento de las | ||
| 8734 | claves OpenPGP no encontradas cuando se verifica la firma del | ||
| 8735 | paquete. @xref{Invocación de guix refresh, @code{--key-download}}. | ||
| 8736 | @end table | ||
| 8737 | |||
| 8738 | @item pypi | ||
| 8739 | @cindex pypi | ||
| 8740 | Importa metadatos desde el @uref{https://pypi.python.org/, índice de | ||
| 8741 | paquetes Python (PyPI)}. La información se toma de la descripción con | ||
| 8742 | formato JSON disponible en @code{pypi.python.org} y habitualmente incluye | ||
| 8743 | toda la información relevante, incluyendo las dependencias del paquete. Para | ||
| 8744 | una máxima eficiencia, se recomienda la instalación de la utilidad | ||
| 8745 | @command{unzip}, de manera que el importador pueda extraer los archivos | ||
| 8746 | wheel de Python y obtener datos de ellos. | ||
| 8747 | |||
| 8748 | La siguiente orden importa los meta-datos para el paquete de Python | ||
| 8749 | @code{itsdangerous}: | ||
| 8750 | |||
| 8751 | @example | ||
| 8752 | guix import pypi itsdangerous | ||
| 8753 | @end example | ||
| 8754 | |||
| 8755 | @table @code | ||
| 8756 | @item --recursive | ||
| 8757 | @itemx -r | ||
| 8758 | Recorre el grafo de dependencias del paquete original proporcionado | ||
| 8759 | recursivamente y genera expresiones de paquete para todos aquellos paquetes | ||
| 8760 | que no estén todavía en Guix. | ||
| 8761 | @end table | ||
| 8762 | |||
| 8763 | @item gem | ||
| 8764 | @cindex gem | ||
| 8765 | Importa metadatos desde @uref{https://rubygems.org/, RubyGems}. La | ||
| 8766 | informació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 | ||
| 8768 | dependencias en tiempo de ejecución. Hay algunos puntos a tener en cuenta, | ||
| 8769 | no obstante. Los metadatos no distinguen entre sinopsis y descripción, por | ||
| 8770 | lo que se usa la misma cadena para ambos campos. Adicionalmente, los | ||
| 8771 | detalles de las dependencias no-Ruby necesarias para construir extensiones | ||
| 8772 | nativas no está disponible y se deja como ejercicio a la empaquetadora. | ||
| 8773 | |||
| 8774 | La siguiente orden importa los meta-datos para el paquete de Ruby | ||
| 8775 | @code{rails}: | ||
| 8776 | |||
| 8777 | @example | ||
| 8778 | guix import gem rails | ||
| 8779 | @end example | ||
| 8780 | |||
| 8781 | @table @code | ||
| 8782 | @item --recursive | ||
| 8783 | @itemx -r | ||
| 8784 | Recorre el grafo de dependencias del paquete original proporcionado | ||
| 8785 | recursivamente y genera expresiones de paquete para todos aquellos paquetes | ||
| 8786 | que no estén todavía en Guix. | ||
| 8787 | @end table | ||
| 8788 | |||
| 8789 | @item cpan | ||
| 8790 | @cindex CPAN | ||
| 8791 | Importa metadatos desde @uref{https://www.metacpan.org/, MetaCPAN}. La | ||
| 8792 | información se extrae de la descripción en formato JSON disponible a través | ||
| 8793 | del @uref{https://fastapi.metacpan.org/, API de MetaCPAN} e incluye la | ||
| 8794 | información más relevante, como las dependencias de otros módulos. La | ||
| 8795 | información de la licencia debe ser comprobada atentamente. Si Perl está | ||
| 8796 | disponible en el almacén, se usará la utilidad @code{corelist} para borrar | ||
| 8797 | los módulos básicos de la lista de dependencias. | ||
| 8798 | |||
| 8799 | La siguiente orden importa los metadatos del módulo Perl | ||
| 8800 | @code{Acme::Boolean}: | ||
| 8801 | |||
| 8802 | @example | ||
| 8803 | guix import cpan Acme::Boolean | ||
| 8804 | @end example | ||
| 8805 | |||
| 8806 | @item cran | ||
| 8807 | @cindex CRAN | ||
| 8808 | @cindex Bioconductor | ||
| 8809 | Importa metadatos desde @uref{https://cran.r-project.org/, CRAN}, el | ||
| 8810 | repositorio central para el @uref{http://r-project.org, entorno estadístico | ||
| 8811 | y gráfico GNU@tie{}R}. | ||
| 8812 | |||
| 8813 | La información se extrae del fichero @code{DESCRIPTION} del paquete. | ||
| 8814 | |||
| 8815 | La siguiente orden importa los metadatos del paquete de R @code{Cairo}: | ||
| 8816 | |||
| 8817 | @example | ||
| 8818 | guix import cran Cairo | ||
| 8819 | @end example | ||
| 8820 | |||
| 8821 | Cuando se añade @code{--recursive}, el importador recorrerá el grafo de | ||
| 8822 | dependencias del paquete original proporcionado recursivamente y generará | ||
| 8823 | expresiones de paquetes para todos aquellos que no estén todavía en Guix. | ||
| 8824 | |||
| 8825 | Cuando se agrega @code{--archive=bioconductor}, los metadatos se importan de | ||
| 8826 | @uref{https://www.bioconductor.org, Bioconductor}, un repositorio de | ||
| 8827 | paquetes R para el análisis y comprensión de datos genéticos de alto caudal | ||
| 8828 | en bioinformática. | ||
| 8829 | |||
| 8830 | La información se extrae del fichero @code{DESCRIPTION} del paquete | ||
| 8831 | publicado en la interfaz web del repositorio SVN de Bioconductor. | ||
| 8832 | |||
| 8833 | La siguiente orden importa los metadatos del paquete de R | ||
| 8834 | @code{GenomicRanges}: | ||
| 8835 | |||
| 8836 | @example | ||
| 8837 | guix import cran --archive=bioconductor GenomicRanges | ||
| 8838 | @end example | ||
| 8839 | |||
| 8840 | @item texlive | ||
| 8841 | @cindex Tex Live | ||
| 8842 | @cindex CTAN | ||
| 8843 | Importa metadatos desde @uref{http://www.ctan.org/, CTAN}, la completa red | ||
| 8844 | de archivos TeX para paquetes TeX que son parte de la | ||
| 8845 | @uref{https://www.tug.org/texlive/, distribución TeX Live}. | ||
| 8846 | |||
| 8847 | La información del paquete se obtiene a través del API XML proporcionado por | ||
| 8848 | CTAN, mientras que el código fuente se descarga del repositorio SVN del | ||
| 8849 | proyecto TeX Live. Se hace porque CTAN no guarda archivos con versiones. | ||
| 8850 | |||
| 8851 | La siguiente orden importa los metadatos del paquete de TeX @code{fontspec}: | ||
| 8852 | |||
| 8853 | @example | ||
| 8854 | guix import texlive fontspec | ||
| 8855 | @end example | ||
| 8856 | |||
| 8857 | Cuando se añade @code{--archive=DIRECTORIO}, el código fuente no se descarga | ||
| 8858 | del subdirectorio @file{latex} del árbol @file{texmf-dist/source} en el | ||
| 8859 | repositorio SVN de Tex Live, sino de el directorio especificado bajo la | ||
| 8860 | misma raíz. | ||
| 8861 | |||
| 8862 | La siguiente orden importa los metadatos del paquete @code{ifxetex} de CTAN | ||
| 8863 | mientras que obtiene las fuentes del directorio @file{texmf/source/generic}: | ||
| 8864 | |||
| 8865 | @example | ||
| 8866 | guix import texlive --archive=generic ifxetex | ||
| 8867 | @end example | ||
| 8868 | |||
| 8869 | @item json | ||
| 8870 | @cindex JSON, importación | ||
| 8871 | Importa metadatos de paquetes desde un fichero JSON local. Considere el | ||
| 8872 | siguiente 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 | |||
| 8888 | Los nombres de los campos son los mismos que para el registro | ||
| 8889 | @code{<package>} (@xref{Definición de paquetes}). Las referencias a otros | ||
| 8890 | paquetes se proporcionan como listas JSON de cadenas de especificación de | ||
| 8891 | paquete entrecomilladas como @code{guile} o @code{guile@@2.0}. | ||
| 8892 | |||
| 8893 | El importador también permite una definición de fuentes más explícita usando | ||
| 8894 | los 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 | |||
| 8910 | La siguiente orden importa los metadatos desde el fichero JSON | ||
| 8911 | @code{hello.json} y devuelve una expresión de ``package'': | ||
| 8912 | |||
| 8913 | @example | ||
| 8914 | guix import json hello.json | ||
| 8915 | @end example | ||
| 8916 | |||
| 8917 | @item nix | ||
| 8918 | Importa metadatos desde una copia local de las fuentes de la | ||
| 8919 | @uref{http://nixos.org/nixpkgs/, distribución Nixpkgs}@footnote{Esto depende | ||
| 8920 | de la orden @command{nix-instantiate} de @uref{http://nixos.org/nix/, | ||
| 8921 | Nix}.}. Las definiciones de paquete en Nixpkgs típicamente están escritas en | ||
| 8922 | una mezcla de lenguaje Nix y código Bash. Esta orden únicamente importa la | ||
| 8923 | estructura de alto nivel del paquete escrita en lenguaje Nix. Normalmente | ||
| 8924 | incluye todos los campos básicos de una definición de paquete. | ||
| 8925 | |||
| 8926 | Cuando se importa un paquete GNU, la sinopsis y la descripción se | ||
| 8927 | substituyen por la variante canónica oficial. | ||
| 8928 | |||
| 8929 | Habitualmente, tendrá que ejecutar primero: | ||
| 8930 | |||
| 8931 | @example | ||
| 8932 | export NIX_REMOTE=daemon | ||
| 8933 | @end example | ||
| 8934 | |||
| 8935 | @noindent | ||
| 8936 | de modo que @command{nix-instantiate} no intente abrir la base de datos Nix. | ||
| 8937 | |||
| 8938 | Como un ejemplo, la orden siguiente importa la definición de paquete de | ||
| 8939 | LibreOffice (más precisamente, importa la definición del paquete asociado al | ||
| 8940 | atributo de nivel superior @code{libreoffice}): | ||
| 8941 | |||
| 8942 | @example | ||
| 8943 | guix import nix ~/path/to/nixpkgs libreoffice | ||
| 8944 | @end example | ||
| 8945 | |||
| 8946 | @item hackage | ||
| 8947 | @cindex hackage | ||
| 8948 | Importa metadatos desde el archivo central de paquetes de la comunidad | ||
| 8949 | Haskell @uref{https://hackage.haskell.org/, Hackage}. La información se | ||
| 8950 | obtiene de ficheros Cabal e incluye toda la información relevante, | ||
| 8951 | incluyendo las dependencias del paquete. | ||
| 8952 | |||
| 8953 | Las opciones específicas de línea de ordenes son: | ||
| 8954 | |||
| 8955 | @table @code | ||
| 8956 | @item --stdin | ||
| 8957 | @itemx -s | ||
| 8958 | Lee un fichero Cabal por la entrada estándar. | ||
| 8959 | @item --no-test-dependencies | ||
| 8960 | @itemx -t | ||
| 8961 | No incluye las dependencias necesarias únicamente para las baterías de | ||
| 8962 | pruebas. | ||
| 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 | ||
| 8966 | los 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 | ||
| 8968 | condició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 | ||
| 8970 | claves @code{os}, @code{arch} y @code{impl} son @samp{linux}, @samp{x86_64} | ||
| 8971 | y @samp{ghc}, respectivamente. | ||
| 8972 | @item --recursive | ||
| 8973 | @itemx -r | ||
| 8974 | Recorre el grafo de dependencias del paquete original proporcionado | ||
| 8975 | recursivamente y genera expresiones de paquete para todos aquellos paquetes | ||
| 8976 | que no estén todavía en Guix. | ||
| 8977 | @end table | ||
| 8978 | |||
| 8979 | La siguiente orden importa los metadatos de la última versión del paquete | ||
| 8980 | Haskell @code{HTTP} sin incluir las dependencias de las pruebas y | ||
| 8981 | especificando la opción @samp{network-uri} con valor @code{false}: | ||
| 8982 | |||
| 8983 | @example | ||
| 8984 | guix import hackage -t -e "'((\"network-uri\" . false))" HTTP | ||
| 8985 | @end example | ||
| 8986 | |||
| 8987 | Se puede especificar opcionalmente una versión específica del paquete | ||
| 8988 | añadiendo al nombre del paquete una arroba y el número de versión como en el | ||
| 8989 | siguiente ejemplo: | ||
| 8990 | |||
| 8991 | @example | ||
| 8992 | guix import hackage mtl@@2.1.3.1 | ||
| 8993 | @end example | ||
| 8994 | |||
| 8995 | @item stackage | ||
| 8996 | @cindex stackage | ||
| 8997 | El importador @code{stackage} es un recubrimiento sobre el de | ||
| 8998 | @code{hackage}. Toma un nombre de paquete, busca la versión de paquete | ||
| 8999 | incluida 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} | ||
| 9001 | para obtener sus metadatos. Fíjese que es su decisión seleccionar una | ||
| 9002 | publicación LTS compatible con el compilador GHC usado en Guix. | ||
| 9003 | |||
| 9004 | Las opciones específicas de línea de ordenes son: | ||
| 9005 | |||
| 9006 | @table @code | ||
| 9007 | @item --no-test-dependencies | ||
| 9008 | @itemx -t | ||
| 9009 | No incluye las dependencias necesarias únicamente para las baterías de | ||
| 9010 | pruebas. | ||
| 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 | ||
| 9014 | la última publicación. | ||
| 9015 | @item --recursive | ||
| 9016 | @itemx -r | ||
| 9017 | Recorre el grafo de dependencias del paquete original proporcionado | ||
| 9018 | recursivamente y genera expresiones de paquete para todos aquellos paquetes | ||
| 9019 | que no estén todavía en Guix. | ||
| 9020 | @end table | ||
| 9021 | |||
| 9022 | La siguiente orden importa los metadatos del paquete Haskell @code{HTTP} | ||
| 9023 | incluido en la versión de publicación LTS de Stackage 7.18: | ||
| 9024 | |||
| 9025 | @example | ||
| 9026 | guix import stackage --lts-version=7.18 HTTP | ||
| 9027 | @end example | ||
| 9028 | |||
| 9029 | @item elpa | ||
| 9030 | @cindex elpa | ||
| 9031 | Importa metadatos desde el repositorio de archivos de paquetes Emacs Lisp | ||
| 9032 | (ELPA) (@pxref{Packages,,, emacs, The GNU Emacs Manual}). | ||
| 9033 | |||
| 9034 | Las 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 | ||
| 9040 | información. Actualmente los repositorios disponibles y sus identificadores | ||
| 9041 | son: | ||
| 9042 | @itemize - | ||
| 9043 | @item | ||
| 9044 | @uref{http://elpa.gnu.org/packages, GNU}, seleccionado con el identificador | ||
| 9045 | @code{gnu}. Es el predeterminado. | ||
| 9046 | |||
| 9047 | Los paquetes de @code{elpa.gnu.org} están firmados con una de las claves que | ||
| 9048 | contiene 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, | ||
| 9051 | The GNU Emacs Manual}). | ||
| 9052 | |||
| 9053 | @item | ||
| 9054 | @uref{http://stable.melpa.org/packages, MELPA-Stable}, seleccionado con el | ||
| 9055 | identificador @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 | ||
| 9064 | Recorre el grafo de dependencias del paquete original proporcionado | ||
| 9065 | recursivamente y genera expresiones de paquete para todos aquellos paquetes | ||
| 9066 | que no estén todavía en Guix. | ||
| 9067 | @end table | ||
| 9068 | |||
| 9069 | @item crate | ||
| 9070 | @cindex crate | ||
| 9071 | Importa metadatos desde el repositorio de paquetes Rust | ||
| 9072 | @uref{https://crates.io, crates.io}. | ||
| 9073 | |||
| 9074 | @item opam | ||
| 9075 | @cindex OPAM | ||
| 9076 | @cindex OCaml | ||
| 9077 | Importa metadatos desde el repositorio de paquetes | ||
| 9078 | @uref{https://opam.ocaml.org/, OPAM} usado por la comunidad OCaml. | ||
| 9079 | @end table | ||
| 9080 | |||
| 9081 | La estructura del código de @command{guix import} es modular. Sería útil | ||
| 9082 | tener más importadores para otros formatos de paquetes, y su ayuda es | ||
| 9083 | bienvenida 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} | ||
| 9089 | La principal audiencia de @command{guix refresh} son desarrolladoras de la | ||
| 9090 | distribución de software GNU. Por defecto, informa de cualquier paquete | ||
| 9091 | proporcionado por la distribución que esté anticuado comparado con la última | ||
| 9092 | versión oficial, de esta manera: | ||
| 9093 | |||
| 9094 | @example | ||
| 9095 | $ guix refresh | ||
| 9096 | gnu/packages/gettext.scm:29:13: gettext would be upgraded from 0.18.1.1 to 0.18.2.1 | ||
| 9097 | gnu/packages/glib.scm:77:12: glib would be upgraded from 2.34.3 to 2.37.0 | ||
| 9098 | @end example | ||
| 9099 | |||
| 9100 | De manera alternativa, se pueden especificar los paquetes a considerar, en | ||
| 9101 | cuyo caso se emite un aviso para paquetes que carezcan de actualizador: | ||
| 9102 | |||
| 9103 | @example | ||
| 9104 | $ guix refresh coreutils guile guile-ssh | ||
| 9105 | gnu/packages/ssh.scm:205:2: warning: no updater for guile-ssh | ||
| 9106 | gnu/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 | ||
| 9110 | y determina el número de versión mayor entre las publicaciones | ||
| 9111 | encontradas. La orden sabe cómo actualizar tipos específicos de paquetes: | ||
| 9112 | paquetes GNU, paquetes ELPA, etc.---vea la documentación de @option{--type} | ||
| 9113 | más adelante. Hay muchos paquetes, no obstante, para los que carece de un | ||
| 9114 | método para determinar si está disponible una versión oficial posterior. No | ||
| 9115 | obstante, el mecanismo es extensible, ¡no tenga problema en contactarnos | ||
| 9116 | para añadir un método nuevo! | ||
| 9117 | |||
| 9118 | @table @code | ||
| 9119 | |||
| 9120 | @item --recursive | ||
| 9121 | Consider the packages specified, and all the packages upon which they | ||
| 9122 | depend. | ||
| 9123 | |||
| 9124 | @example | ||
| 9125 | $ guix refresh --recursive coreutils | ||
| 9126 | gnu/packages/acl.scm:35:2: warning: no updater for acl | ||
| 9127 | gnu/packages/m4.scm:30:12: info: 1.4.18 is already the latest version of m4 | ||
| 9128 | gnu/packages/xml.scm:68:2: warning: no updater for expat | ||
| 9129 | gnu/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 | |||
| 9135 | A 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 | ||
| 9137 | actualizadores utilizan la propiedad @code{upstream-name} en las | ||
| 9138 | definiciones 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 | |||
| 9148 | Cuando se proporciona @code{--update}, modifica los ficheros de fuentes de | ||
| 9149 | la distribución para actualizar los números de versión y hash de los | ||
| 9150 | archivadores tar de fuentes en las recetas de los paquetes (@pxref{Definición de paquetes}). Esto se consigue con la descarga del último archivador de | ||
| 9151 | fuentes del paquete y su firma OpenPGP asociada, seguida de la verificación | ||
| 9152 | del archivador descargado y su firma mediante el uso de @command{gpg}, y | ||
| 9153 | finalmente con el cálculo de su hash. Cuando la clave pública usada para | ||
| 9154 | firmar el archivador no se encuentra en el anillo de claves de la usuaria, | ||
| 9155 | se intenta automáticamente su obtención desde un servidor de claves | ||
| 9156 | públicas; cuando se encuentra, la clave se añade al anillo de claves de la | ||
| 9157 | usuaria; en otro caso, @command{guix refresh} informa de un error. | ||
| 9158 | |||
| 9159 | Se aceptan las siguientes opciones: | ||
| 9160 | |||
| 9161 | @table @code | ||
| 9162 | |||
| 9163 | @item --expression=@var{expr} | ||
| 9164 | @itemx -e @var{expr} | ||
| 9165 | Considera el paquete al que evalúa @var{expr} | ||
| 9166 | |||
| 9167 | Es útil para hacer una referencia precisa de un paquete concreto, como en | ||
| 9168 | este ejemplo: | ||
| 9169 | |||
| 9170 | @example | ||
| 9171 | guix refresh -l -e '(@@@@ (gnu packages commencement) glibc-final)' | ||
| 9172 | @end example | ||
| 9173 | |||
| 9174 | Esta orden enumera los paquetes que dependen de la libc ``final'' | ||
| 9175 | (esencialmente todos los paquetes). | ||
| 9176 | |||
| 9177 | @item --update | ||
| 9178 | @itemx -u | ||
| 9179 | Actualiza los ficheros fuente de la distribución (recetas de paquetes) en su | ||
| 9180 | lugar. Esto se ejecuta habitualmente desde una copia de trabajo del árbol de | ||
| 9181 | fuentes 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 | ||
| 9188 | paquetes. | ||
| 9189 | |||
| 9190 | @item --select=[@var{subconjunto}] | ||
| 9191 | @itemx -s @var{subconjunto} | ||
| 9192 | Selecciona todos los paquetes en @var{subconjunto}, o bien @code{core} o | ||
| 9193 | bien @code{non-core}. | ||
| 9194 | |||
| 9195 | El subconjunto @code{core} hace referencia a todos los paquetes en el núcleo | ||
| 9196 | de la distribución---es decir, paquetes que se usan para construir ``todo lo | ||
| 9197 | demás''. Esto incluye GCC, libc, Binutils, Bash, etc. Habitualmente, cambiar | ||
| 9198 | uno de esos paquetes en la distribución conlleva la reconstrucción de todos | ||
| 9199 | los demás. Por tanto, esas actualizaciones son una inconveniencia para las | ||
| 9200 | usuarias en términos de tiempo de construcción o ancho de banda usado por la | ||
| 9201 | actualización. | ||
| 9202 | |||
| 9203 | El subconjunto @code{non-core} hace referencia a los paquetes restantes. Es | ||
| 9204 | típicamente útil en casos donde una actualización de paquetes básicos no | ||
| 9205 | sería conveniente. | ||
| 9206 | |||
| 9207 | @item --manifest=@var{fichero} | ||
| 9208 | @itemx -m @var{fichero} | ||
| 9209 | Selecciona todos los paquetes del manifiesto en @var{fichero}. Es útil para | ||
| 9210 | comprobar si algún paquete del manifiesto puede actualizarse. | ||
| 9211 | |||
| 9212 | @item --type=@var{actualizador} | ||
| 9213 | @itemx -t @var{actualizador} | ||
| 9214 | Selecciona únicamente paquetes manejados por @var{actualizador} (puede ser | ||
| 9215 | una lista separada por comas de actualizadores). Actualmente, | ||
| 9216 | @var{actualizador} puede ser: | ||
| 9217 | |||
| 9218 | @table @code | ||
| 9219 | @item gnu | ||
| 9220 | el actualizador de paquetes GNU; | ||
| 9221 | @item gnome | ||
| 9222 | el actualizador para paquetes GNOME; | ||
| 9223 | @item kde | ||
| 9224 | el actualizador para paquetes KDE; | ||
| 9225 | @item xorg | ||
| 9226 | el actualizador para paquetes X.org; | ||
| 9227 | @item kernel.org | ||
| 9228 | el actualizador para paquetes alojados en kernel.org; | ||
| 9229 | @item elpa | ||
| 9230 | el actualizador para paquetes @uref{http://elpa.gnu.org/, ELPA}; | ||
| 9231 | @item cran | ||
| 9232 | el actualizador para paquetes @uref{https://cran.r-project.org/, CRAN}; | ||
| 9233 | @item bioconductor | ||
| 9234 | el actualizador para paquetes R @uref{https://www.bioconductor.org/, | ||
| 9235 | Bioconductor}; | ||
| 9236 | @item cpan | ||
| 9237 | el actualizador para paquetes @uref{http://www.cpan.org/, CPAN}; | ||
| 9238 | @item pypi | ||
| 9239 | el actualizador para paquetes @uref{https://pypi.python.org, PyPI}. | ||
| 9240 | @item gem | ||
| 9241 | el actualizador para paquetes @uref{https://rubygems.org, RubyGems}. | ||
| 9242 | @item github | ||
| 9243 | el actualizador para paquetes @uref{https://github.com, GitHub}. | ||
| 9244 | @item hackage | ||
| 9245 | el actualizador para paquetes @uref{https://hackage.haskell.org, Hackage}. | ||
| 9246 | @item stackage | ||
| 9247 | el actualizador para paquetes @uref{https://www.stackage.org, Stackage}. | ||
| 9248 | @item crate | ||
| 9249 | el actualizador para paquetes @uref{https://crates.io, Crates}. | ||
| 9250 | @item launchpad | ||
| 9251 | el actualizador para paquetes @uref{https://launchpad.net, Launchpad}. | ||
| 9252 | @end table | ||
| 9253 | |||
| 9254 | Por ejemplo, la siguiente orden únicamente comprueba actualizaciones de | ||
| 9255 | paquetes Emacs alojados en @code{elpa.gnu.org} y actualizaciones de paquetes | ||
| 9256 | CRAN: | ||
| 9257 | |||
| 9258 | @example | ||
| 9259 | $ guix refresh --type=elpa,cran | ||
| 9260 | gnu/packages/statistics.scm:819:13: r-testthat would be upgraded from 0.10.0 to 0.11.0 | ||
| 9261 | gnu/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 | |||
| 9266 | Además, @command{guix refresh} puede recibir uno o más nombres de paquetes, | ||
| 9267 | como en este ejemplo: | ||
| 9268 | |||
| 9269 | @example | ||
| 9270 | $ ./pre-inst-env guix refresh -u emacs idutils gcc@@4.8 | ||
| 9271 | @end example | ||
| 9272 | |||
| 9273 | @noindent | ||
| 9274 | La 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 | |||
| 9277 | Cuando se considera la actualización de un paquete, a veces es conveniente | ||
| 9278 | conocer cuantos paquetes se verían afectados por la actualización y su | ||
| 9279 | compatibilidad debería comprobarse. Para ello la siguiente opción puede | ||
| 9280 | usarse cuando se proporcionan uno o más nombres de paquete a @command{guix | ||
| 9281 | refresh}: | ||
| 9282 | |||
| 9283 | @table @code | ||
| 9284 | |||
| 9285 | @item --list-updaters | ||
| 9286 | @itemx -L | ||
| 9287 | Enumera los actualizadores disponibles y finaliza (vea la opción previa | ||
| 9288 | @option{--type}). | ||
| 9289 | |||
| 9290 | Para cada actualizador, muestra la fracción de paquetes que cubre; al final | ||
| 9291 | muestra la fracción de paquetes cubiertos por todos estos actualizadores. | ||
| 9292 | |||
| 9293 | @item --list-dependent | ||
| 9294 | @itemx -l | ||
| 9295 | Enumera los paquetes de nivel superior dependientes que necesitarían una | ||
| 9296 | reconstrucció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 | ||
| 9299 | graph}}, para información sobre cómo visualizar la lista de paquetes que | ||
| 9300 | dependen de un paquete. | ||
| 9301 | |||
| 9302 | @end table | ||
| 9303 | |||
| 9304 | Sea consciente de que la opción @code{--list-dependent} únicamente | ||
| 9305 | @emph{aproxima} las reconstrucciones necesarias como resultado de una | ||
| 9306 | actualización. Más reconstrucciones pueden ser necesarias bajo algunas | ||
| 9307 | circunstancias. | ||
| 9308 | |||
| 9309 | @example | ||
| 9310 | $ guix refresh --list-dependent flex | ||
| 9311 | Building the following 120 packages would ensure 213 dependent packages are rebuilt: | ||
| 9312 | hop@@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 | |||
| 9315 | La orden previa enumera un conjunto de paquetes que puede ser construido | ||
| 9316 | para comprobar la compatibilidad con una versión actualizada del paquete | ||
| 9317 | @code{flex}. | ||
| 9318 | |||
| 9319 | @table @code | ||
| 9320 | |||
| 9321 | @item --list-transitive | ||
| 9322 | Enumera todos los paquetes de los que uno o más paquetes dependen. | ||
| 9323 | |||
| 9324 | @example | ||
| 9325 | $ guix refresh --list-transitive flex | ||
| 9326 | flex@@2.6.4 depends on the following 25 packages: perl@@5.28.0 help2man@@1.47.6 | ||
| 9327 | bison@@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 | |||
| 9332 | La orden previa enumera un conjunto de paquetes que, en caso de cambiar, | ||
| 9333 | causarían la reconstrucción de @code{flex}. | ||
| 9334 | |||
| 9335 | Las siguientes opciones pueden usarse para personalizar la operación de | ||
| 9336 | GnuPG: | ||
| 9337 | |||
| 9338 | @table @code | ||
| 9339 | |||
| 9340 | @item --gpg=@var{orden} | ||
| 9341 | Use @var{orden} como la orden de GnuPG 2.x. Se busca @var{orden} en | ||
| 9342 | @code{PATH}. | ||
| 9343 | |||
| 9344 | @item --keyring=@var{fichero} | ||
| 9345 | Usa @var{fichero} como el anillo de claves para claves de | ||
| 9346 | proveedoras. @var{fichero} debe estar en el @dfn{formato keybox}. Los | ||
| 9347 | ficheros Keybox normalmente tienen un nombre terminado en @file{.kbx} y | ||
| 9348 | GNU@tie{}Privacy Guard (GPG) puede manipular estos ficheros (@pxref{kbxutil, | ||
| 9349 | @command{kbxutil},, gnupg, Using the GNU Privacy Guard}, para información | ||
| 9350 | sobre una herramienta para manipular ficheros keybox). | ||
| 9351 | |||
| 9352 | Cuando se omite esta opción, @command{guix refresh} usa | ||
| 9353 | @file{~/.config/guix/upstream/trustedkeys.kbx} como el anillo de claves para | ||
| 9354 | las firmas de proveedoras. Las firmas OpenPGP son comprobadas contra claves | ||
| 9355 | de este anillo; las claves que falten son descargadas a este anillo de | ||
| 9356 | claves también (véase @option{--key-download} a continuación). | ||
| 9357 | |||
| 9358 | Puede exportar claves de su anillo de claves GPG predeterminado en un | ||
| 9359 | fichero keybox usando órdenes como esta: | ||
| 9360 | |||
| 9361 | @example | ||
| 9362 | gpg --export rms@@gnu.org | kbxutil --import-openpgp >> mianillo.kbx | ||
| 9363 | @end example | ||
| 9364 | |||
| 9365 | Del mismo modo, puede obtener claves de un archivo keybox específico así: | ||
| 9366 | |||
| 9367 | @example | ||
| 9368 | gpg --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 | ||
| 9373 | Privacy Guard}, para más información sobre la opción @option{--keyring} de | ||
| 9374 | GPG. | ||
| 9375 | |||
| 9376 | @item --key-download=@var{política} | ||
| 9377 | Maneja las claves no encontradas de acuerdo a la @var{política}, que puede | ||
| 9378 | ser una de: | ||
| 9379 | |||
| 9380 | @table @code | ||
| 9381 | @item always | ||
| 9382 | Siempre descarga las claves OpenPGP no encontradas del servidor de claves, y | ||
| 9383 | las añade al anillo de claves GnuPG de la usuaria. | ||
| 9384 | |||
| 9385 | @item never | ||
| 9386 | Nunca intenta descargar claves OpenPGP no encontradas. Simplemente propaga | ||
| 9387 | el error. | ||
| 9388 | |||
| 9389 | @item interactive | ||
| 9390 | Cuando se encuentra un paquete firmado por una clave OpenPGP desconocida, | ||
| 9391 | pregunta a la usuaria si descargarla o no. Este es el comportamiento | ||
| 9392 | predeterminado. | ||
| 9393 | @end table | ||
| 9394 | |||
| 9395 | @item --key-server=@var{dirección} | ||
| 9396 | Use @var{dirección} como el servidor de claves OpenPGP cuando se importa una | ||
| 9397 | clave pública. | ||
| 9398 | |||
| 9399 | @end table | ||
| 9400 | |||
| 9401 | The @code{github} updater uses the @uref{https://developer.github.com/v3/, | ||
| 9402 | GitHub API} to query for new releases. When used repeatedly e.g.@: when | ||
| 9403 | refreshing all packages, GitHub will eventually refuse to answer any further | ||
| 9404 | API requests. By default 60 API requests per hour are allowed, and a full | ||
| 9405 | refresh on all GitHub packages in Guix requires more than this. | ||
| 9406 | Authentication with GitHub through the use of an API token alleviates these | ||
| 9407 | limits. 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 | ||
| 9417 | La orden @command{guix lint} sirve para ayudar a las desarrolladoras de | ||
| 9418 | paquetes a evitar errores comunes y usar un estilo consistente. Ejecuta un | ||
| 9419 | número de comprobaciones en un conjunto de paquetes proporcionado para | ||
| 9420 | encontrar errores comunes en sus definiciones. Los @dfn{comprobadores} | ||
| 9421 | disponibles incluyen (véase @code{--list-checkers} para una lista completa): | ||
| 9422 | |||
| 9423 | @table @code | ||
| 9424 | @item synopsis | ||
| 9425 | @itemx description | ||
| 9426 | Valida ciertas reglas tipográficas y de estilo en la descripción y sinopsis | ||
| 9427 | de cada paquete. | ||
| 9428 | |||
| 9429 | @item inputs-should-be-native | ||
| 9430 | Identifica 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 | ||
| 9437 | Comprueba las URL @code{home-page} y @code{source} e informa aquellas que no | ||
| 9438 | sean válidas. Sugiere una URL @code{mirror://} cuando sea aplicable. Si la | ||
| 9439 | URL @code{source} redirecciona a una URL GitHub, recomienda el uso de la URL | ||
| 9440 | GitHub. Comprueba que el nombre de fichero de las fuentes es significativo, | ||
| 9441 | por ejemplo que no es simplemente un número de versión o revisión git, sin | ||
| 9442 | un nombre @code{file-name} declarado (@pxref{Referencia de ``origin''}). | ||
| 9443 | |||
| 9444 | @item source-unstable-tarball | ||
| 9445 | Parse the @code{source} URL to determine if a tarball from GitHub is | ||
| 9446 | autogenerated or if it is a release tarball. Unfortunately GitHub's | ||
| 9447 | autogenerated tarballs are sometimes regenerated. | ||
| 9448 | |||
| 9449 | @item cve | ||
| 9450 | @cindex vulnerabilidades de seguridad | ||
| 9451 | @cindex CVE, vulnerabilidades y exposiciones comunes | ||
| 9452 | Informa de vulnerabilidades encontradas en las bases de datos de | ||
| 9453 | vulnerabilidades 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 | ||
| 9455 | EEUU}. | ||
| 9456 | |||
| 9457 | Para ver información acerca de una vulnerabilidad particular, visite páginas | ||
| 9458 | como: | ||
| 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 | ||
| 9468 | donde @code{CVE-YYYY-ABCD} es el identificador CVE---por ejemplo, | ||
| 9469 | @code{CVE-2015-7554}. | ||
| 9470 | |||
| 9471 | Las desarrolladoras de paquetes pueden especificar en las recetas del | ||
| 9472 | paquete el nombre y versión en la @uref{https://nvd.nist.gov/cpe.cfm, | ||
| 9473 | plataforma común de enumeración (CPE)} del paquete cuando difieren del | ||
| 9474 | nombre 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>. | ||
| 9486 | Algunas entradas en la base de datos CVE no especifican a qué versión del | ||
| 9487 | paquete hacen referencia, y por lo tanto ``permanecen visibles'' para | ||
| 9488 | siempre. Las desarrolladoras de paquetes que encuentren alertas CVE y | ||
| 9489 | verifiquen 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 | ||
| 9504 | Avisa de problemas de formato obvios en el código fuente: espacios en blanco | ||
| 9505 | al final de las líneas, uso de tabuladores, etc. | ||
| 9506 | @end table | ||
| 9507 | |||
| 9508 | La sintaxis general es: | ||
| 9509 | |||
| 9510 | @example | ||
| 9511 | guix lint @var{opciones} @var{paquete}@dots{} | ||
| 9512 | @end example | ||
| 9513 | |||
| 9514 | Si no se proporciona ningún paquete en la linea de órdenes, todos los | ||
| 9515 | paquetes se comprueban. Las @var{opciones} pueden ser cero o más de las | ||
| 9516 | siguientes: | ||
| 9517 | |||
| 9518 | @table @code | ||
| 9519 | @item --list-checkers | ||
| 9520 | @itemx -l | ||
| 9521 | Enumera y describe todos los comprobadores disponibles que se ejecutarán | ||
| 9522 | sobre los paquetes y finaliza. | ||
| 9523 | |||
| 9524 | @item --checkers | ||
| 9525 | @itemx -c | ||
| 9526 | Habilita únicamente los comprobadores especificados en una lista separada | ||
| 9527 | por 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} | ||
| 9538 | La orden @command{guix size} ayuda a las desarrolladoras de paquetes a | ||
| 9539 | perfilar el uso de disco de los paquetes. Es fácil pasar por encima el | ||
| 9540 | impacto que produce añadir una dependencia adicional a un paquete, o el | ||
| 9541 | impacto del uso de una salida única para un paquete que puede ser dividido | ||
| 9542 | fácilmente (@pxref{Paquetes con múltiples salidas}). Estos son los problemas | ||
| 9543 | típicos que @command{guix size} puede resaltar. | ||
| 9544 | |||
| 9545 | Se 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 | ||
| 9547 | almacén. Considere este ejemplo: | ||
| 9548 | |||
| 9549 | @example | ||
| 9550 | $ guix size coreutils | ||
| 9551 | store 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% | ||
| 9560 | total: 78.9 MiB | ||
| 9561 | @end example | ||
| 9562 | |||
| 9563 | @cindex clausura | ||
| 9564 | Los elementos del almacén enumerados aquí constituyen la @dfn{clausura | ||
| 9565 | transitiva} de Coreutils---es decir, Coreutils y todas sus dependencias, | ||
| 9566 | recursivamente---como sería devuelto por: | ||
| 9567 | |||
| 9568 | @example | ||
| 9569 | $ guix gc -R /gnu/store/@dots{}-coreutils-8.23 | ||
| 9570 | @end example | ||
| 9571 | |||
| 9572 | Aquí la salida muestra tres columnas junto a los elementos del almacén. La | ||
| 9573 | primera columna, etiquetada ``total'', muestra el tamaño en mebibytes (MiB) | ||
| 9574 | de la clausura del elemento del almacén---es decir, su propio tamaño sumado | ||
| 9575 | al 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 | ||
| 9577 | relación entre el tamaño del elemento en sí frente al espacio ocupado por | ||
| 9578 | todos los elementos enumerados. | ||
| 9579 | |||
| 9580 | En este ejemplo, vemos que la clausura de Coreutils ocupa 79@tie{}MiB, cuya | ||
| 9581 | mayor parte son libc y las bibliotecas auxiliares de GCC para tiempo de | ||
| 9582 | ejecución. (Que libc y las bibliotecas de GCC representen una fracción | ||
| 9583 | grande de la clausura no es un problema en sí, puesto que siempre están | ||
| 9584 | disponibles en el sistema de todas maneras). | ||
| 9585 | |||
| 9586 | Cuando los paquetes pasados a @command{guix size} están disponibles en el | ||
| 9587 | almacé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 | ||
| 9590 | injertos.} consultando al daemon para determinar sus dependencias, y mide su | ||
| 9591 | tamaño en el almacén, de forma similar a @command{du -ms --apparent-size} | ||
| 9592 | (@pxref{du invocation,,, coreutils, GNU Coreutils}). | ||
| 9593 | |||
| 9594 | Cuando 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 | ||
| 9597 | incluso de elementos del almacén que no están en el disco, únicamente | ||
| 9598 | disponibles de forma remota. | ||
| 9599 | |||
| 9600 | Puede especificar también varios nombres de paquetes: | ||
| 9601 | |||
| 9602 | @example | ||
| 9603 | $ guix size coreutils grep sed bash | ||
| 9604 | store 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{} | ||
| 9610 | total: 102.3 MiB | ||
| 9611 | @end example | ||
| 9612 | |||
| 9613 | @noindent | ||
| 9614 | En este ejemplo vemos que la combinación de los cuatro paquetes toma | ||
| 9615 | 102.3@tie{}MiB en total, lo cual es mucho menos que la suma de cada | ||
| 9616 | clausura, ya que tienen muchas dependencias en común. | ||
| 9617 | |||
| 9618 | Las opciones disponibles son: | ||
| 9619 | |||
| 9620 | @table @option | ||
| 9621 | |||
| 9622 | @item --substitute-urls=@var{urls} | ||
| 9623 | Usa la información de sustituciones de | ||
| 9624 | @var{urls}. @xref{client-substitute-urls, la misma opción en @code{guix | ||
| 9625 | build}}. | ||
| 9626 | |||
| 9627 | @item --sort=@var{clave} | ||
| 9628 | Ordena las líneas de acuerdo a @var{clave}, una de las siguientes opciones: | ||
| 9629 | |||
| 9630 | @table @code | ||
| 9631 | @item self | ||
| 9632 | el tamaño de cada elemento (predeterminada); | ||
| 9633 | @item clausura | ||
| 9634 | el tamaño total de la clausura del elemento. | ||
| 9635 | @end table | ||
| 9636 | |||
| 9637 | @item --map-file=@var{fichero} | ||
| 9638 | Escribe un mapa gráfico del uso del disco en formato PNG en el | ||
| 9639 | @var{fichero}. | ||
| 9640 | |||
| 9641 | Para el ejemplo previo, el mapa tiene esta pinta: | ||
| 9642 | |||
| 9643 | @image{images/coreutils-size-map,5in,, mapa del uso del disco de Coreutils | ||
| 9644 | producido por @command{guix size}} | ||
| 9645 | |||
| 9646 | Esta opción necesita que la biblioteca | ||
| 9647 | @uref{http://wingolog.org/software/guile-charting/, Guile-Charting} esté | ||
| 9648 | instalada y visible en la ruta de búsqueda de módulos Guile. Cuando no es el | ||
| 9649 | caso, @command{guix size} produce un error al intentar cargarla. | ||
| 9650 | |||
| 9651 | @item --system=@var{sistema} | ||
| 9652 | @itemx -s @var{sistema} | ||
| 9653 | Considera 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 | ||
| 9663 | Los paquetes y sus dependencias forman un @dfn{grafo}, específicamente un | ||
| 9664 | grafo acíclico dirigido (GAD, DAG en Inglés). Puede hacerse difícil | ||
| 9665 | rá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 | ||
| 9667 | defecto, @command{guix graph} emite una representación en GAD en el formato | ||
| 9668 | de entrada de @uref{http://graphviz.org/,Graphviz}, por lo que su salida | ||
| 9669 | puede ser pasada directamente a la herramienta @command{dot} de | ||
| 9670 | Graphviz. También puede emitir una página HTMP con código JavaScript | ||
| 9671 | embebido para mostrar un ``diagrama de acorde'' en un navegador Web, usando | ||
| 9672 | la biblioteca @uref{https://d3js.org/, d3.js}, o emitir consultas Cypher | ||
| 9673 | para construir un grafo en una base de datos de grafos que acepte el | ||
| 9674 | lenguaje de consultas @uref{http://www.opencypher.org/, openCypher}. La | ||
| 9675 | sintaxis general es: | ||
| 9676 | |||
| 9677 | @example | ||
| 9678 | guix graph @var{opciones} @var{paquete}@dots{} | ||
| 9679 | @end example | ||
| 9680 | |||
| 9681 | Por ejemplo, la siguiente orden genera un fichero PDF que representa el GAD | ||
| 9682 | para GNU@tie{}Core Utilities, mostrando sus dependencias en tiempo de | ||
| 9683 | construcción: | ||
| 9684 | |||
| 9685 | @example | ||
| 9686 | guix graph coreutils | dot -Tpdf > gad.pdf | ||
| 9687 | @end example | ||
| 9688 | |||
| 9689 | La salida es algo así: | ||
| 9690 | |||
| 9691 | @image{images/coreutils-graph,2in,,Grafo de dependencias de GNU Coreutils} | ||
| 9692 | |||
| 9693 | Bonito y pequeño grafo, ¿no? | ||
| 9694 | |||
| 9695 | ¡Pero hay más de un grafo! El grafo previo es conciso: es el grafo de los | ||
| 9696 | objetos package, omitiendo las entradas implícitas como GCC, libc, grep, | ||
| 9697 | etc. Es habitualmente útil tener un grafo conciso así, pero a veces una | ||
| 9698 | puede querer ver más detalles. @command{guix graph} implementa varios tipos | ||
| 9699 | de grafos, permitiendole seleccionar el nivel de detalle: | ||
| 9700 | |||
| 9701 | @table @code | ||
| 9702 | @item package | ||
| 9703 | Este es el tipo por defecto usado en el ejemplo previo. Muestra el GAD de | ||
| 9704 | objetos package, excluyendo dependencias implícitas. Es conciso, pero deja | ||
| 9705 | fuera muchos detalles. | ||
| 9706 | |||
| 9707 | @item reverse-package | ||
| 9708 | Esto muestra el GAD @emph{inverso} de paquetes. Por ejemplo: | ||
| 9709 | |||
| 9710 | @example | ||
| 9711 | guix 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, | ||
| 9716 | see @code{reverse-bag} below.) | ||
| 9717 | |||
| 9718 | Fíjese que esto puede producir grafos inmensos para los paquetes básicos. Si | ||
| 9719 | todo lo que quiere saber es el número de paquetes que dependen de uno | ||
| 9720 | determinado, use @command{guix refresh --list-dependent} (@pxref{Invocación de guix refresh, @option{--list-dependent}}). | ||
| 9721 | |||
| 9722 | @item bag-emerged | ||
| 9723 | Este es el GAD del paquete, @emph{incluyendo} entradas implícitas. | ||
| 9724 | |||
| 9725 | Por ejemplo, la siguiente orden: | ||
| 9726 | |||
| 9727 | @example | ||
| 9728 | guix 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 | ||
| 9734 | GNU Coreutils} | ||
| 9735 | |||
| 9736 | En 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 | |||
| 9739 | Ahora bien, fijese que las dependencias de estas entradas implícitas---es | ||
| 9740 | decir, las @dfn{dependencias del lanzamiento inicial} | ||
| 9741 | (@pxref{Lanzamiento inicial})---no se muestran aquí para mantener una salida | ||
| 9742 | concisa. | ||
| 9743 | |||
| 9744 | @item bag | ||
| 9745 | Similar a @code{bag-emerged}, pero esta vez incluye todas las dependencias | ||
| 9746 | del lanzamiento inicial. | ||
| 9747 | |||
| 9748 | @item bag-with-origins | ||
| 9749 | Similar a @code{bag}, pero también muestra los orígenes y sus dependencias. | ||
| 9750 | |||
| 9751 | @item reverse-bag | ||
| 9752 | This shows the @emph{reverse} DAG of packages. Unlike | ||
| 9753 | @code{reverse-package}, it also takes implicit dependencies into account. | ||
| 9754 | For example: | ||
| 9755 | |||
| 9756 | @example | ||
| 9757 | guix graph -t reverse-bag dune | ||
| 9758 | @end example | ||
| 9759 | |||
| 9760 | @noindent | ||
| 9761 | ...@: yields the graph of all packages that depend on Dune, directly or | ||
| 9762 | indirectly. Since Dune is an @emph{implicit} dependency of many packages | ||
| 9763 | @i{via} @code{dune-build-system}, this shows a large number of packages, | ||
| 9764 | whereas @code{reverse-package} would show very few if any. | ||
| 9765 | |||
| 9766 | @item derivación | ||
| 9767 | Esta es la representación más detallada: muestra el GAD de derivaciones | ||
| 9768 | (@pxref{Derivaciones}) y elementos simples del almacén. Comparada con las | ||
| 9769 | representaciones previas, muchos nodos adicionales son visibles, incluyendo | ||
| 9770 | los guiones de construcción, parches, módulos Guile, etc. | ||
| 9771 | |||
| 9772 | Para 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 | ||
| 9776 | guix graph -t derivation `guix system build -d mi-configuracion.scm` | ||
| 9777 | @end example | ||
| 9778 | |||
| 9779 | @item module | ||
| 9780 | Este 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 | ||
| 9781 | de paquetes que define el paquete @code{guile}: | ||
| 9782 | |||
| 9783 | @example | ||
| 9784 | guix graph -t module guile | dot -Tpdf > grafo-del-modulo.pdf | ||
| 9785 | @end example | ||
| 9786 | @end table | ||
| 9787 | |||
| 9788 | Todos los tipos previos corresponden a las @emph{dependencias durante la | ||
| 9789 | construcción}. El grafo siguiente representa las @emph{dependencias en | ||
| 9790 | tiempo de ejecución}: | ||
| 9791 | |||
| 9792 | @table @code | ||
| 9793 | @item references | ||
| 9794 | Este es el grafo de @dfn{referencias} de la salida de un paquete, como lo | ||
| 9795 | devuelve @command{guix gc --references} (@pxref{Invocación de guix gc}). | ||
| 9796 | |||
| 9797 | Si la salida del paquete proporcionado no está disponible en el almacén, | ||
| 9798 | @command{guix graph} intenta obtener la información de dependencias desde | ||
| 9799 | las sustituciones. | ||
| 9800 | |||
| 9801 | Aquí también puede proporcionar un nombre de fichero del almacén en vez de | ||
| 9802 | un nombre de paquete. Por ejemplo, la siguiente orden produce el grafo de | ||
| 9803 | referencias de su perfil (¡el cuál puede ser grande!): | ||
| 9804 | |||
| 9805 | @example | ||
| 9806 | guix graph -t references `readlink -f ~/.guix-profile` | ||
| 9807 | @end example | ||
| 9808 | |||
| 9809 | @item referrers | ||
| 9810 | Este es el grafo de @dfn{referentes} de la salida de un paquete, como lo | ||
| 9811 | devuelve @command{guix gc --referrers} (@pxref{Invocación de guix gc}). | ||
| 9812 | |||
| 9813 | Depende exclusivamente de información en su almacén. Por ejemplo, supongamos | ||
| 9814 | que la versión actual de Inkscape está disponible en 10 perfiles en su | ||
| 9815 | máquina; @command{guix graph -t referrers inkscape} mostrará un grafo cuya | ||
| 9816 | raíz es Inkscape y con esos 10 perfiles enlazados a ella. | ||
| 9817 | |||
| 9818 | Puede ayudar a determinar qué impide que un elemento del almacén sea | ||
| 9819 | recolectado. | ||
| 9820 | |||
| 9821 | @end table | ||
| 9822 | |||
| 9823 | Las opciones disponibles son las siguientes: | ||
| 9824 | |||
| 9825 | @table @option | ||
| 9826 | @item --type=@var{tipo} | ||
| 9827 | @itemx -t @var{tipo} | ||
| 9828 | Produce un grafo de salida de @var{tipo}, donde @var{tipo} debe ser uno de | ||
| 9829 | los valores enumerados previamente. | ||
| 9830 | |||
| 9831 | @item --list-types | ||
| 9832 | Enumera los tipos de grafos implementados. | ||
| 9833 | |||
| 9834 | @item --backend=@var{motor} | ||
| 9835 | @itemx -b @var{motor} | ||
| 9836 | Produce un grafo usando el @var{motor} seleccionado. | ||
| 9837 | |||
| 9838 | @item --list-backends | ||
| 9839 | Enumera los motores de grafos implementados. | ||
| 9840 | |||
| 9841 | Actualmente, los motores disponibles son Graphviz y d3.js. | ||
| 9842 | |||
| 9843 | @item --expression=@var{expr} | ||
| 9844 | @itemx -e @var{expr} | ||
| 9845 | Considera el paquete al que evalúa @var{expr} | ||
| 9846 | |||
| 9847 | Es útil para hacer una referencia precisa de un paquete concreto, como en | ||
| 9848 | este ejemplo: | ||
| 9849 | |||
| 9850 | @example | ||
| 9851 | guix graph -e '(@@@@ (gnu packages commencement) gnu-make-final)' | ||
| 9852 | @end example | ||
| 9853 | |||
| 9854 | @item --system=@var{sistema} | ||
| 9855 | @itemx -s @var{sistema} | ||
| 9856 | Muestra el grafo para @var{sistema}---por ejemplo, @code{i686-linux}. | ||
| 9857 | |||
| 9858 | El grafo de dependencias del paquete es altamente independiente de la | ||
| 9859 | arquitectura, pero existen algunas partes dependientes de la arquitectura | ||
| 9860 | que 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} | ||
| 9869 | El propósito de @command{guix publish} es permitir a las usuarias compartir | ||
| 9870 | fácilmente su almacén con otras, quienes pueden usarlo como servidor de | ||
| 9871 | sustituciones (@pxref{Sustituciones}). | ||
| 9872 | |||
| 9873 | Cuando @command{guix publish} se ejecuta, lanza un servidor HTTP que permite | ||
| 9874 | a 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 | ||
| 9876 | si fuese una granja de construcción, ya que la interfaz HTTP es compatible | ||
| 9877 | con Hydra, el software detrás de la granja de construcción | ||
| 9878 | @code{@value{SUBSTITUTE-SERVER}}. | ||
| 9879 | |||
| 9880 | Por seguridad, cada sustitución se firma, permitiendo a las receptoras | ||
| 9881 | comprobar su autenticidad e integridad (@pxref{Sustituciones}). Debido a que | ||
| 9882 | @command{guix publish} usa la clave de firma del sistema, que es únicamente | ||
| 9883 | legible por la administradora del sistema, debe iniciarse como root; la | ||
| 9884 | opción @code{--user} hace que renuncie a sus privilegios tan pronto como sea | ||
| 9885 | posible. | ||
| 9886 | |||
| 9887 | El par claves de firma debe generarse antes de ejecutar @command{guix | ||
| 9888 | publish}, usando @command{guix archive --generate-key} (@pxref{Invocación de guix archive}). | ||
| 9889 | |||
| 9890 | La sintaxis general es: | ||
| 9891 | |||
| 9892 | @example | ||
| 9893 | guix publish @var{opciones}@dots{} | ||
| 9894 | @end example | ||
| 9895 | |||
| 9896 | La ejecución de @command{guix publish} sin ningún parámetro adicional | ||
| 9897 | lanzará un servidor HTTP en el puerto 8080: | ||
| 9898 | |||
| 9899 | @example | ||
| 9900 | guix publish | ||
| 9901 | @end example | ||
| 9902 | |||
| 9903 | Una 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 | ||
| 9906 | guix-daemon --substitute-urls=http://example.org:8080 | ||
| 9907 | @end example | ||
| 9908 | |||
| 9909 | Por defecto, @command{guix publish} comprime los archivos al vuelo cuando es | ||
| 9910 | necesario. Este modo ``al vuelo'' es conveniente ya que no necesita | ||
| 9911 | configuración y está disponible inmediatamente. No obstante, cuando se | ||
| 9912 | proporciona servicio a muchos clientes, se recomienda usar la opción | ||
| 9913 | @option{--cache}, que habilita el almacenamiento en caché de los archivos | ||
| 9914 | antes de enviarlos a los clientes---véase a continuación para más | ||
| 9915 | detalles. La orden @command{guix weather} proporciona una forma fácil de | ||
| 9916 | comprobar lo que proporciona un servidor (@pxref{Invocación de guix weather}). | ||
| 9917 | |||
| 9918 | Además @command{guix publish} también sirve como un espejo de acceso por | ||
| 9919 | contenido a ficheros de fuentes a los que los registros @code{origin} hacen | ||
| 9920 | referencia (@pxref{Referencia de ``origin''}). Por ejemplo, si asumimos que | ||
| 9921 | @command{guix publish} se ejecuta en @code{example.org}, la siguiente URL | ||
| 9922 | devuelve directamente el fichero @file{hello-2.10.tar.gz} con el hash SHA256 | ||
| 9923 | proporcionado (representado en formato @code{nix-base32}, @pxref{Invocación de guix hash}). | ||
| 9924 | |||
| 9925 | @example | ||
| 9926 | http://example.org/file/hello-2.10.tar.gz/sha256/0ssi1@dots{}ndq1i | ||
| 9927 | @end example | ||
| 9928 | |||
| 9929 | Obviamente estas URL funcionan solamente para ficheros que se encuentran en | ||
| 9930 | el almacén; en otros casos devuelven un 404 (``No encontrado''). | ||
| 9931 | |||
| 9932 | @cindex logs de construcción, publicación | ||
| 9933 | Los log de construcción están disponibles desde URL @code{/log} como: | ||
| 9934 | |||
| 9935 | @example | ||
| 9936 | http://example.org/log/gwspk@dots{}-guile-2.2.3 | ||
| 9937 | @end example | ||
| 9938 | |||
| 9939 | @noindent | ||
| 9940 | Cuando @command{guix-daemon} está configurado para almacenar comprimidos los | ||
| 9941 | log de construcción, como sucede de forma predeterminada (@pxref{Invocación de guix-daemon}), las URL @code{/log} devuelven los log igualmente comprimidos, | ||
| 9942 | con 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 | ||
| 9945 | contenido automáticamente, lo cual no es el caso con la compresión bzip2. | ||
| 9946 | |||
| 9947 | Las siguientes opciones están disponibles: | ||
| 9948 | |||
| 9949 | @table @code | ||
| 9950 | @item --port=@var{puerto} | ||
| 9951 | @itemx -p @var{puerto} | ||
| 9952 | Escucha peticiones HTTP en @var{puerto}. | ||
| 9953 | |||
| 9954 | @item --listen=@var{dirección} | ||
| 9955 | Escucha en la interfaz de red de la @var{dirección}. El comportamiento | ||
| 9956 | predeterminado es aceptar conexiones de cualquier interfaz. | ||
| 9957 | |||
| 9958 | @item --user=@var{usuaria} | ||
| 9959 | @itemx -u @var{usuaria} | ||
| 9960 | Cambia los privilegios a los de @var{usuaria} tan pronto como sea | ||
| 9961 | posible---es decir, una vez el socket del servidor esté abierto y la clave | ||
| 9962 | de firma haya sido leída. | ||
| 9963 | |||
| 9964 | @item --compression[=@var{nivel}] | ||
| 9965 | @itemx -C [@var{nivel}] | ||
| 9966 | Comprime los datos con el @var{nivel} dado. Cuando el @var{nivel} es cero, | ||
| 9967 | deshabilita la compresión. El rango 1 a 9 corresponde a distintos niveles de | ||
| 9968 | compresión gzip: 1 es el más rápido, y 9 es el mejor (intensivo a nivel de | ||
| 9969 | CPU). El valor predeterminado es 3. | ||
| 9970 | |||
| 9971 | A menos que se use @option{--cache}, la compresión ocurre al vuelo y los | ||
| 9972 | flujos comprimidos no se almacenan en caché. Por tanto, para reducir la | ||
| 9973 | carga en la máquina que ejecuta @command{guix publish}, puede ser una buena | ||
| 9974 | idea elegir un nivel de compresión bajo, ejecutar @command{guix publish} | ||
| 9975 | detrá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} | ||
| 9977 | añadir la cabecera HTTP @code{Content-Length} a sus respuestas. | ||
| 9978 | |||
| 9979 | @item --cache=@var{directorio} | ||
| 9980 | @itemx -c @var{directorio} | ||
| 9981 | Almacena en caché los archivos y metadatos (URL @code{.narinfo}) en | ||
| 9982 | @var{directorio} y únicamente proporciona archivos que están en la caché. | ||
| 9983 | |||
| 9984 | Cuando se omite esta opción, los archivos y metadatos se crean al | ||
| 9985 | vuelo. Esto puede reducir el ancho de banda disponible, especialmente cuando | ||
| 9986 | la compresión está habilitada, ya que se puede llegar al límite de la | ||
| 9987 | CPU. Otra desventaja del modo predeterminado es que la longitud de los | ||
| 9988 | archivos no se conoce con anterioridad, por lo que @command{guix publish} no | ||
| 9989 | puede añadir la cabecera HTTP @code{Content-Length} a sus respuestas, lo que | ||
| 9990 | a su vez previene que los clientes conozcan la cantidad de datos a | ||
| 9991 | descargar. | ||
| 9992 | |||
| 9993 | De manera contraria, cuando se usa @option{--cache}, la primera petición de | ||
| 9994 | un elemento del almacén (a través de una URL @code{.narinfo}) devuelve 404 e | ||
| 9995 | inicia un proceso en segundo plano para @dfn{cocinar} el archivo---calcular | ||
| 9996 | su @code{.narinfo} y comprimirlo, en caso necesario. Una vez el archivo está | ||
| 9997 | alojado en la caché de @var{directorio}, las siguientes peticiones obtendrán | ||
| 9998 | un resultado satisfactorio y se ofrecerá el contenido directamente desde la | ||
| 9999 | caché, lo que garantiza que los clientes obtienen el mejor ancho de banda | ||
| 10000 | posible. | ||
| 10001 | |||
| 10002 | El proceso de ``cocinado'' se realiza por hilos de trabajo. Por defecto, se | ||
| 10003 | crea un hilo por núcleo de la CPU, pero puede ser personalizado. Véase | ||
| 10004 | @option{--workers} a continuación. | ||
| 10005 | |||
| 10006 | Cuando se usa @option{--ttl}, las entradas en caché se borran | ||
| 10007 | automáticamente cuando hayan expirado. | ||
| 10008 | |||
| 10009 | @item --workers=@var{N} | ||
| 10010 | Cuando se usa @option{--cache}, solicita la creación de @var{N} hilos de | ||
| 10011 | trabajo para ``cocinar'' archivos. | ||
| 10012 | |||
| 10013 | @item --ttl=@var{ttl} | ||
| 10014 | Produce 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 | ||
| 10016 | 5 días, @code{1m} significa un mes, etc. | ||
| 10017 | |||
| 10018 | Esto permite a la usuaria de Guix mantener información de sustituciones en | ||
| 10019 | la caché durante @var{ttl}. No obstante, fíjese que @code{guix publish} no | ||
| 10020 | garantiza en sí que los elementos del almacén que proporciona de hecho | ||
| 10021 | permanezcan disponibles hasta que @var{ttl} expire. | ||
| 10022 | |||
| 10023 | Adicionalmente, cuando se usa @option{--cache}, las entradas en caché que no | ||
| 10024 | hayan sido accedidas en @var{ttl} y no tengan un elemento correspondiente en | ||
| 10025 | el almacén pueden ser borradas. | ||
| 10026 | |||
| 10027 | @item --nar-path=@var{ruta} | ||
| 10028 | Usa @var{ruta} como el prefijo para las URL de los archivos ``nar'' | ||
| 10029 | (@pxref{Invocación de guix archive, archivadores normalizados}). | ||
| 10030 | |||
| 10031 | Por 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 | ||
| 10033 | parte @code{/nar} por @var{ruta}. | ||
| 10034 | |||
| 10035 | @item --public-key=@var{fichero} | ||
| 10036 | @itemx --private-key=@var{fichero} | ||
| 10037 | Usa los @var{fichero}s específicos como el par de claves pública y privada | ||
| 10038 | usadas para firmar los elementos del almacén publicados. | ||
| 10039 | |||
| 10040 | Los ficheros deben corresponder al mismo par de claves (la clave privada se | ||
| 10041 | usa para la firma y la clave pública simplemente se anuncia en los metadatos | ||
| 10042 | de la firma). Deben contener claves en el formato canónico de expresiones-S | ||
| 10043 | como 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}] | ||
| 10048 | Lanza un servidor REPL Guile (@pxref{REPL Servers,,, guile, GNU Guile | ||
| 10049 | Reference Manual}) en @var{puerto} (37146 por defecto). Esto se usa | ||
| 10050 | principalmente para la depuración de un servidor @command{guix publish} en | ||
| 10051 | ejecución. | ||
| 10052 | @end table | ||
| 10053 | |||
| 10054 | Habilitar @command{guix publish} en el sistema Guix consiste en solo una | ||
| 10055 | línea: simplemente instancie un servicio @code{guix-publish-service-type} en | ||
| 10056 | el 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 | |||
| 10060 | Si en vez de eso ejecuta Guix en una distribución distinta, siga estas | ||
| 10061 | instrucciones: | ||
| 10062 | |||
| 10063 | @itemize | ||
| 10064 | @item | ||
| 10065 | Si 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 | ||
| 10074 | Si 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 | ||
| 10082 | En otro caso, proceda de forma similar con el sistema de inicio de su | ||
| 10083 | distribució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 | ||
| 10094 | fuente que dice construir? ¿Es determinista el proceso de construcción de un | ||
| 10095 | paquete? Estas son las preguntas que la orden @command{guix challenge} | ||
| 10096 | intenta responder. | ||
| 10097 | |||
| 10098 | La primera es obviamente una cuestión importante: antes de usar un servidor | ||
| 10099 | de 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 | ||
| 10102 | lo que permite la primera: si las construcciones de los paquetes son | ||
| 10103 | deterministas, construcciones independientes deberían emitir el mismo | ||
| 10104 | resultado, bit a bit; si el servidor proporciona un binario diferente al | ||
| 10105 | obtenido localmente, o bien está corrupto o bien tiene intenciones | ||
| 10106 | perniciosas. | ||
| 10107 | |||
| 10108 | Sabemos 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ó | ||
| 10110 | el fichero o directorio---compiladores, bibliotecas, guiones de | ||
| 10111 | construcción, etc. (@pxref{Introducción}). Asumiendo procesos de | ||
| 10112 | construcción deterministas, un nombre de fichero del almacén debe | ||
| 10113 | corresponder exactamente a una salida de construcción. @command{guix | ||
| 10114 | challenge} comprueba si existe, realmente, una asociación unívoca comparando | ||
| 10115 | la salida de la construcción de varias construcciones independientes de | ||
| 10116 | cualquier elemento del almacén proporcionado. | ||
| 10117 | |||
| 10118 | La salida de la orden muestra algo así: | ||
| 10119 | |||
| 10120 | @smallexample | ||
| 10121 | $ guix challenge --substitute-urls="https://@value{SUBSTITUTE-SERVER} https://guix.example.org" | ||
| 10122 | updating list of substitutes from 'https://@value{SUBSTITUTE-SERVER}'... 100.0% | ||
| 10123 | updating 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 | |||
| 10139 | 6,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 | ||
| 10146 | En este ejemplo, @command{guix challenge} primero recorre el almacén para | ||
| 10147 | determinar el conjunto de derivaciones construidas localmente---en oposición | ||
| 10148 | a elementos del almacén que fueron descargados de un servidor de | ||
| 10149 | sustituciones---y consulta a todos los servidores de sustituciones. Una vez | ||
| 10150 | hecho informa de los elementos del almacén para los cuales los servidores | ||
| 10151 | obtuvieron un resultado diferente de el obtenido en la construcción local. | ||
| 10152 | |||
| 10153 | @cindex no-determinismo, en la construcción de paquetes | ||
| 10154 | Como un ejemplo, @code{guix.example.org} siempre obtiene una respuesta | ||
| 10155 | diferente. Por otro modo, @code{@value{SUBSTITUTE-SERVER}} coincide con las | ||
| 10156 | construcciones locales, excepto en el caso de Git. Esto puede indicar que el | ||
| 10157 | proceso de construcción de Git no es determinista, lo que significa que su | ||
| 10158 | salida varia en función de varias cosas que Guix no controla completamente, | ||
| 10159 | aunque la construcción de paquetes se realice en entornos aislados | ||
| 10160 | (@pxref{Características}). Las fuentes más comunes de indeterminismo incluyen la | ||
| 10161 | adición de marcas de tiempo en los resultados de la construcción, la | ||
| 10162 | inclusión de números aleatorios y las enumeraciones de directorios ordenadas | ||
| 10163 | por número de nodos-i. Véase @uref{https://reproducible-builds.org/docs/} | ||
| 10164 | para más información. | ||
| 10165 | |||
| 10166 | Para encontrar cuál es el problema con este binario Git, podemos hacer algo | ||
| 10167 | parecido 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 | |||
| 10175 | Esta orden muestra la diferencia entre los ficheros resultantes de la | ||
| 10176 | construcción local y los ficheros resultantes de la construcción en | ||
| 10177 | @code{@value{SUBSTITUTE-SERVER}} (@pxref{Overview, Comparing and Merging | ||
| 10178 | Files,, diffutils, Comparing and Merging Files}). La orden @command{diff} | ||
| 10179 | funciona muy bien en ficheros de texto. Cuando ficheros binarios difieren, | ||
| 10180 | una opción mejor es @uref{https://diffoscope.org/,Diffoscope}, una | ||
| 10181 | herramienta que ayuda en la visualización de diferencias en todo tipo de | ||
| 10182 | ficheros. | ||
| 10183 | |||
| 10184 | Una vez haya realizado este trabajo, puede determinar si las diferencias son | ||
| 10185 | debidas a un procedimiento de construcción no-determinista o a un servidor | ||
| 10186 | con intenciones ocultas. Intentamos duramente eliminar las fuentes de | ||
| 10187 | indeterminismo en los paquetes para facilitar la verificación de | ||
| 10188 | sustituciones, pero por supuesto es un proceso que implica no solo a Guix, | ||
| 10189 | sino a una gran parte de la comunidad del software libre. Entre tanto, | ||
| 10190 | @command{guix challenge} es una herramienta para ayudar a afrontar el | ||
| 10191 | problema. | ||
| 10192 | |||
| 10193 | Si esta escribiendo paquetes para Guix, le recomendamos que compruebe si | ||
| 10194 | @code{@value{SUBSTITUTE-SERVER}} y otros servidores de sustituciones | ||
| 10195 | obtienen 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 | ||
| 10202 | donde @var{paquete} es una especificación de paquete como @code{guile@@2.0} | ||
| 10203 | o @code{glibc:debug}. | ||
| 10204 | |||
| 10205 | La sintaxis general es: | ||
| 10206 | |||
| 10207 | @example | ||
| 10208 | guix challenge @var{opciones} [@var{paquetes}@dots{}] | ||
| 10209 | @end example | ||
| 10210 | |||
| 10211 | Cuando se encuentra una diferencia entre el hash de un elemento construido | ||
| 10212 | localmente y el proporcionado por un servidor de sustituciones; o entre las | ||
| 10213 | sustituciones proporcionadas por distintos servidores, esto es mostrado como | ||
| 10214 | en el ejemplo previo y el valor de salida es 2 (otros valores no-cero de la | ||
| 10215 | salida denominan otros tipos de error). | ||
| 10216 | |||
| 10217 | La única opción de importancia es: | ||
| 10218 | |||
| 10219 | @table @code | ||
| 10220 | |||
| 10221 | @item --substitute-urls=@var{urls} | ||
| 10222 | Considera @var{urls} la lista separada por espacios de URL de fuentes de | ||
| 10223 | sustituciones con las que realizar la comparación. | ||
| 10224 | |||
| 10225 | @item --verbose | ||
| 10226 | @itemx -v | ||
| 10227 | Muestra detalles sobre coincidencias (contenidos idénticos) además de | ||
| 10228 | informació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 | ||
| 10239 | La orden @command{guix copy} copia elementos del almacén de una máquina al | ||
| 10240 | de otra a través de una conexión de shell seguro (SSH)@footnote{Esta orden | ||
| 10241 | únicamente está disponible cuando ha encontrado | ||
| 10242 | Guile-SSH. @xref{Requisitos}, para detalles.}. Por ejemplo, la siguiente | ||
| 10243 | orden copia el paquete @code{coreutils}, el perfil de la usuaria y todas sus | ||
| 10244 | dependencias a @var{dirección}, ingresando en el sistema como @var{usuaria}: | ||
| 10245 | |||
| 10246 | @example | ||
| 10247 | guix copy --to=@var{usuaria}@@@var{dirección} \ | ||
| 10248 | coreutils `readlink -f ~/.guix-profile` | ||
| 10249 | @end example | ||
| 10250 | |||
| 10251 | Si alguno de los elementos del almacén a copiar ya están presentes en | ||
| 10252 | @var{dirección}, no se envían realmente. | ||
| 10253 | |||
| 10254 | La siguiente orden obtiene @code{libreoffice} y @code{gimp} de | ||
| 10255 | @var{dirección}, asumiendo que estén disponibles allí: | ||
| 10256 | |||
| 10257 | @example | ||
| 10258 | guix copy --from=@var{dirección} libreoffice gimp | ||
| 10259 | @end example | ||
| 10260 | |||
| 10261 | La conexión SSH se establece usando el cliente Guile-SSH, que es compatible | ||
| 10262 | con OpenSSH: tiene en cuenta @file{~/.ssh/known_hosts} y | ||
| 10263 | @file{~/.ssh/config}, y usa el agente SSH para la identificación. | ||
| 10264 | |||
| 10265 | La clave usada para firmar los elementos enviados debe estar aceptada por la | ||
| 10266 | máquina remota. Del mismo modo, la clave usada por la máquina remota para | ||
| 10267 | firmar los elementos recibidos debe estar en @file{/etc/guix/acl} de modo | ||
| 10268 | que sea aceptada por su propio daemon. @xref{Invocación de guix archive}, para | ||
| 10269 | más información sobre la verificación de elementos del almacén. | ||
| 10270 | |||
| 10271 | La sintaxis general es: | ||
| 10272 | |||
| 10273 | @example | ||
| 10274 | guix copy [--to=@var{spec}|--from=@var{spec}] @var{elementos}@dots{} | ||
| 10275 | @end example | ||
| 10276 | |||
| 10277 | Siempre debe especificar una de las siguientes opciones: | ||
| 10278 | |||
| 10279 | @table @code | ||
| 10280 | @item --to=@var{spec} | ||
| 10281 | @itemx --from=@var{spec} | ||
| 10282 | Especifica la máquina a la que mandar o desde la que recibir. @var{spec} | ||
| 10283 | debe ser una especificación SSH como @code{example.org}, | ||
| 10284 | @code{carlos@@example.org}, or @code{carlos@@example.org:2222}. | ||
| 10285 | @end table | ||
| 10286 | |||
| 10287 | Los @var{elementos} pueden ser tanto nombres de paquetes, como @code{gimp}, | ||
| 10288 | como elementos del almacén, como @file{/gnu/store/@dots{}-idutils-4.6}. | ||
| 10289 | |||
| 10290 | Cuando se especifica el nombre del paquete a enviar, primero se construye si | ||
| 10291 | es necesario, a menos que se use @option{--dry-run}. Se aceptan las opciones | ||
| 10292 | comunes 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 | ||
| 10300 | En la versión @value{VERSION}, esta herramienta es experimental. La interfaz | ||
| 10301 | está sujeta a cambios radicales en el futuro. | ||
| 10302 | @end quotation | ||
| 10303 | |||
| 10304 | El propósito de @command{guix container} es la manipulación de procesos en | ||
| 10305 | ejecución dentro de entornos aislados, normalmente conocido como un | ||
| 10306 | ``contenedor'', típicamente creado por las órdenes @command{guix | ||
| 10307 | environment} (@pxref{Invocación de guix environment}) y @command{guix system | ||
| 10308 | container} (@pxref{Invocación de guix system}). | ||
| 10309 | |||
| 10310 | La sintaxis general es: | ||
| 10311 | |||
| 10312 | @example | ||
| 10313 | guix 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 | ||
| 10318 | acción. | ||
| 10319 | |||
| 10320 | Las siguientes acciones están disponibles: | ||
| 10321 | |||
| 10322 | @table @code | ||
| 10323 | @item exec | ||
| 10324 | Ejecute una orden en el contexto de un contenedor en ejecución. | ||
| 10325 | |||
| 10326 | La sintaxis es: | ||
| 10327 | |||
| 10328 | @example | ||
| 10329 | guix 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 | ||
| 10333 | ejecución. @var{programa} especifica el nombre del fichero ejecutable dentro | ||
| 10334 | del sistema de ficheros raíz del contenedor. @var{parámetros} son opciones | ||
| 10335 | adicionales que se pasarán a @var{programa}. | ||
| 10336 | |||
| 10337 | La siguiente orden lanza un shell interactivo de ingreso al sistema dentro | ||
| 10338 | de un contenedor del sistema, iniciado por @command{guix system container}, | ||
| 10339 | y cuyo ID de proceso es 9001: | ||
| 10340 | |||
| 10341 | @example | ||
| 10342 | guix container exec 9001 /run/current-system/profile/bin/bash --login | ||
| 10343 | @end example | ||
| 10344 | |||
| 10345 | Fíjese que el @var{pid} no puede ser el proceso creador del contenedor. Debe | ||
| 10346 | ser 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 | |||
| 10353 | De manera ocasional tendrá un mal día al no estar las sustituciones | ||
| 10354 | disponibles y le toque construir los paquetes a usted misma | ||
| 10355 | (@pxref{Sustituciones}). La orden @command{guix weather} informa de la | ||
| 10356 | disponibilidad de sustituciones en los servidores especificados de modo que | ||
| 10357 | pueda tener una idea sobre cómo será su día hoy. A veces puede ser una | ||
| 10358 | información útil como usuaria, pero es principalmente útil para quienes | ||
| 10359 | ejecuten @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 | ||
| 10365 | Esta es una ejecución de ejemplo: | ||
| 10366 | |||
| 10367 | @example | ||
| 10368 | $ guix weather --substitute-urls=https://guix.example.org | ||
| 10369 | computing 5,872 package derivations for x86_64-linux... | ||
| 10370 | looking for 6,128 store items on https://guix.example.org.. | ||
| 10371 | updating list of substitutes from 'https://guix.example.org'... 100.0% | ||
| 10372 | https://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 | ||
| 10391 | As you can see, it reports the fraction of all the packages for which | ||
| 10392 | substitutes are available on the server---regardless of whether substitutes | ||
| 10393 | are enabled, and regardless of whether this server's signing key is | ||
| 10394 | authorized. It also reports the size of the compressed archives (``nars'') | ||
| 10395 | provided by the server, the size the corresponding store items occupy in the | ||
| 10396 | store (assuming deduplication is turned off), and the server's throughput. | ||
| 10397 | The second part gives continuous integration (CI) statistics, if the server | ||
| 10398 | supports it. In addition, using the @option{--coverage} option, | ||
| 10399 | @command{guix weather} can list ``important'' package substitutes missing on | ||
| 10400 | the server (see below). | ||
| 10401 | |||
| 10402 | Para 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 | ||
| 10405 | es inocuo puesto que la orden únicamente obtiene estadísticas y no puede | ||
| 10406 | instalar esas sustituciones. | ||
| 10407 | |||
| 10408 | Entre otras cosas, es posible consultar tipos específicos de sistema y | ||
| 10409 | conjuntos específicos de paquetes. Las opciones disponibles se enumeran a | ||
| 10410 | continuació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 | ||
| 10415 | sustituciones a consultar. Cuando se omite esta opción, el conjunto | ||
| 10416 | predeterminado de servidores de sustituciones es el consultado. | ||
| 10417 | |||
| 10418 | @item --system=@var{sistema} | ||
| 10419 | @itemx -s @var{sistema} | ||
| 10420 | Consulta 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 | ||
| 10423 | sistema. | ||
| 10424 | |||
| 10425 | @item --manifest=@var{fichero} | ||
| 10426 | En vez de consultar las sustituciones de todos los paquetes, consulta | ||
| 10427 | únicamente los especificados en @var{fichero}. @var{fichero} debe contener | ||
| 10428 | un @dfn{manifiesto}, como el usado en la opción @code{-m} de @command{guix | ||
| 10429 | package} (@pxref{Invocación de guix package}). | ||
| 10430 | |||
| 10431 | @item --coverage[=@var{numero}] | ||
| 10432 | @itemx -c [@var{numero}] | ||
| 10433 | Report on substitute coverage for packages: list packages with at least | ||
| 10434 | @var{count} dependents (zero by default) for which substitutes are | ||
| 10435 | unavailable. Dependent packages themselves are not listed: if @var{b} | ||
| 10436 | depends on @var{a} and @var{a} has no substitutes, only @var{a} is listed, | ||
| 10437 | even though @var{b} usually lacks substitutes as well. The result looks | ||
| 10438 | like this: | ||
| 10439 | |||
| 10440 | @example | ||
| 10441 | $ guix weather --substitute-urls=https://ci.guix.es.info -c 10 | ||
| 10442 | computing 8,983 package derivations for x86_64-linux... | ||
| 10443 | looking for 9,343 store items on https://ci.guix.es.info... | ||
| 10444 | updating substitutes from 'https://ci.guix.es.info'... 100.0% | ||
| 10445 | https://ci.guix.es.info | ||
| 10446 | 64.7% substitutes available (6,047 out of 9,343) | ||
| 10447 | @dots{} | ||
| 10448 | 2502 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 | |||
| 10455 | What this example shows is that @code{kcoreaddons} and presumably the 58 | ||
| 10456 | packages that depend on it have no substitutes at @code{ci.guix.es.info}; | ||
| 10457 | likewise for @code{qgpgme} and the 46 packages that depend on it. | ||
| 10458 | |||
| 10459 | If you are a Guix developer, or if you are taking care of this build farm, | ||
| 10460 | you'll probably want to have a closer look at these packages: they may | ||
| 10461 | simply fail to build. | ||
| 10462 | @end table | ||
| 10463 | |||
| 10464 | @node Invocación de guix processes | ||
| 10465 | @section Invocación de @command{guix processes} | ||
| 10466 | |||
| 10467 | La orden @command{guix processes} puede ser útil a desarrolladoras y | ||
| 10468 | administradoras de sistemas, especialmente en máquinas multiusuaria y en | ||
| 10469 | granjas de construcción: enumera las sesiones actuales (conexiones al | ||
| 10470 | daemon), así como información sobre los procesos envueltos@footnote{Las | ||
| 10471 | sesiones remotas, cuando @command{guix-daemon} se ha iniciado con | ||
| 10472 | @option{--listen} especificando un punto de conexión TCP, @emph{no} son | ||
| 10473 | enumeradas.}. A continuación puede verse un ejemplo de la información que | ||
| 10474 | devuelve: | ||
| 10475 | |||
| 10476 | @example | ||
| 10477 | $ sudo guix processes | ||
| 10478 | SessionPID: 19002 | ||
| 10479 | ClientPID: 19090 | ||
| 10480 | ClientCommand: guix environment --ad-hoc python | ||
| 10481 | |||
| 10482 | SessionPID: 19402 | ||
| 10483 | ClientPID: 19367 | ||
| 10484 | ClientCommand: guix publish -u guix-publish -p 3000 -C 9 @dots{} | ||
| 10485 | |||
| 10486 | SessionPID: 19444 | ||
| 10487 | ClientPID: 19419 | ||
| 10488 | ClientCommand: cuirass --cache-directory /var/cache/cuirass @dots{} | ||
| 10489 | LockHeld: /gnu/store/@dots{}-perl-ipc-cmd-0.96.lock | ||
| 10490 | LockHeld: /gnu/store/@dots{}-python-six-bootstrap-1.11.0.lock | ||
| 10491 | LockHeld: /gnu/store/@dots{}-libjpeg-turbo-2.0.0.lock | ||
| 10492 | ChildProcess: 20495: guix offload x86_64-linux 7200 1 28800 | ||
| 10493 | ChildProcess: 27733: guix offload x86_64-linux 7200 1 28800 | ||
| 10494 | ChildProcess: 27793: guix offload x86_64-linux 7200 1 28800 | ||
| 10495 | @end example | ||
| 10496 | |||
| 10497 | En este ejemplo vemos que @command{guix-daemon} tiene tres clientes: | ||
| 10498 | @command{guix environment}, @command{guix publish} y la herramienta de | ||
| 10499 | integración continua Cuirass; sus identificadores de proceso (PID) se | ||
| 10500 | muestran en el campo @code{ClientPID}. El campo @code{SessionPID} | ||
| 10501 | proporciona el PID del subproceso de @command{guix-daemon} de cada sesión en | ||
| 10502 | particular. | ||
| 10503 | |||
| 10504 | El campo @code{LockHeld} muestra qué elementos del almacén están bloqueados | ||
| 10505 | actualmente por cada sesión, lo que corresponde a elementos del almacén en | ||
| 10506 | construcció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 | ||
| 10508 | campo @code{ChildProcess} entendemos que esas tres construcciones están | ||
| 10509 | siendo delegadas (@pxref{Configuración de delegación del daemon}). | ||
| 10510 | |||
| 10511 | La salida está en formato Recutils por lo que podemos usar la útil orden | ||
| 10512 | @command{recsel} para seleccionar sesiones de interés (@pxref{Selection | ||
| 10513 | Expressions,,, recutils, GNU recutils manual}). Como un ejemplo, la | ||
| 10514 | siguiente orden muestra la línea de órdenes y el PID del cliente que inició | ||
| 10515 | la construcción de un paquete Perl: | ||
| 10516 | |||
| 10517 | @example | ||
| 10518 | $ sudo guix processes | \ | ||
| 10519 | recsel -p ClientPID,ClientCommand -e 'LockHeld ~ "perl"' | ||
| 10520 | ClientPID: 19419 | ||
| 10521 | ClientCommand: 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 | ||
| 10529 | La Distribución de Sistema Guix permite un mecanismo de configuración del | ||
| 10530 | sistema completo consistente. Con esto queremos decir que todos los aspectos | ||
| 10531 | de la configuración global del sistema---como los servicios disponibles, la | ||
| 10532 | zona horaria y la configuración de localización, las cuentas de | ||
| 10533 | usuarias---se declaran en un lugar único. Dicha @dfn{configuración del | ||
| 10534 | sistema} puede ser @dfn{instanciada}---es decir, hecha efectiva. | ||
| 10535 | |||
| 10536 | @c Yes, we're talking of Puppet, Chef, & co. here. ↑ | ||
| 10537 | Una de las ventajas de poner toda la configuración del sistema bajo el | ||
| 10538 | control de Guix es que permite actualizaciones transaccionales del sistema, | ||
| 10539 | y hace posible volver a una instanciación previa del sistema, en caso de que | ||
| 10540 | haya algún problema con la nueva (@pxref{Características}). Otra ventaja es que | ||
| 10541 | hace fácil replicar exactamente la misma configuración entre máquinas | ||
| 10542 | diferentes, o en diferentes momentos, sin tener que utilizar herramientas de | ||
| 10543 | administración adicionales sobre las propias herramientas del sistema. | ||
| 10544 | |||
| 10545 | Esta sección describe este mecanismo. Primero nos enfocaremos en el punto de | ||
| 10546 | vista de la administradora del sistema---explicando cómo se configura e | ||
| 10547 | instancia el sistema. Después mostraremos cómo puede extenderse este | ||
| 10548 | mecanismo, 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 | |||
| 10578 | El 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 | ||
| 10581 | simple, con los servicios predeterminados del sistema, el núcleo Linux-Libre | ||
| 10582 | predeterminado, un disco de RAM inicial y un cargador de arranque puede ser | ||
| 10583 | como sigue: | ||
| 10584 | |||
| 10585 | @findex operating-system | ||
| 10586 | @lisp | ||
| 10587 | @include os-config-bare-bones.texi | ||
| 10588 | @end lisp | ||
| 10589 | |||
| 10590 | Este ejemplo debería ser auto-descriptivo. Algunos de los campos definidos | ||
| 10591 | anteriormente, como @code{host-name} y @code{bootloader}, son | ||
| 10592 | necesarios. Otros como @code{packages} y @code{services}, pueden omitirse, | ||
| 10593 | en cuyo caso obtienen un valor por defecto. | ||
| 10594 | |||
| 10595 | Más adelante se muestran los efectos de algunos de los campos más | ||
| 10596 | importantes (@pxref{Referencia de ``operating-system''}, para detalles acerca de | ||
| 10597 | todos los campos disponibles), y cómo @dfn{instanciar} el sistema operativo | ||
| 10598 | usando @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 | ||
| 10606 | El campo @code{bootloader} describe el método que será usado para arrancar | ||
| 10607 | su 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 | ||
| 10609 | recientes usan la @dfn{Interfaz Unificada Extensible de Firmware} (UEFI) | ||
| 10610 | para arrancar. En ese caso, el capo @code{bootloader} debe contener algo | ||
| 10611 | parecido 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 | ||
| 10620 | configuración disponibles. | ||
| 10621 | |||
| 10622 | @unnumberedsubsec Paquetes visibles globalmente | ||
| 10623 | |||
| 10624 | @vindex %base-packages | ||
| 10625 | El campo @code{packages} enumera los paquetes que serán visibles globalmente | ||
| 10626 | en el sistema, para todas las cuentas de usuaria---es decir, en la variable | ||
| 10627 | de 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} | ||
| 10629 | proporciona todas las herramientas esperadas para tareas básicas y de | ||
| 10630 | administración---incluyendo las utilidades básicas GNU, las herramientas de | ||
| 10631 | red GNU, el editor de texto ligero GNU Zile, @command{find}, @command{grep}, | ||
| 10632 | etc. 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 | ||
| 10635 | de 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 | ||
| 10648 | Referirse a los paquetes por nombre de variable, como antes a @code{bind}, | ||
| 10649 | tiene la ventaja de evitar ambigüedades; también permite que errores | ||
| 10650 | tipográficos y demás obtengan un diagnóstico directo como ``variables sin | ||
| 10651 | definir''. La parte problemática es que se necesita conocer qué módulo | ||
| 10652 | define 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 | ||
| 10655 | el 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 | ||
| 10671 | The @code{services} field lists @dfn{system services} to be made available | ||
| 10672 | when the system starts (@pxref{Servicios}). The @code{operating-system} | ||
| 10673 | declaration above specifies that, in addition to the basic services, we want | ||
| 10674 | the 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 | ||
| 10676 | the right command-line options, possibly with supporting configuration files | ||
| 10677 | generated as needed (@pxref{Definición de servicios}). | ||
| 10678 | |||
| 10679 | @cindex personalización, de servicios | ||
| 10680 | @findex modify-services | ||
| 10681 | De manera ocasional, en vez de usar los servicios básicos tal y como vienen, | ||
| 10682 | puede querer personalizarlos. Para hacerlo, use @code{modify-services} | ||
| 10683 | (@pxref{Referencia de servicios, @code{modify-services}}) para modificar la lista. | ||
| 10684 | |||
| 10685 | Por 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 | ||
| 10688 | lo 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 | |||
| 10708 | Esto modifica la configuración---es decir, los parámetros de los | ||
| 10709 | servicios---de la instancia @code{guix-service-type}, y de todas las | ||
| 10710 | instancias de @code{mingetty-service-type} en la lista | ||
| 10711 | @var{%base-services}. Observe cómo se consigue: primero, enlazamos la | ||
| 10712 | configuración actual al identificador @code{config} en el @var{cuerpo}, y | ||
| 10713 | entonces escribimos el @var{cuerpo} de manera que evalue a la configuración | ||
| 10714 | deseada. En particular, fíjese como se usa @code{inherit} para crear una | ||
| 10715 | nueva configuración que tiene los mismos valores que la configuración | ||
| 10716 | antigua, pero con unas pocas modificaciones. | ||
| 10717 | |||
| 10718 | @cindex disco cifrado | ||
| 10719 | La configuración para un uso típico de ``escritorio'', con una partición de | ||
| 10720 | raíz cifrada, el servidor gráfico X11, GNOME y Xfce (las usuarias pueden | ||
| 10721 | escoger cual de estos entornos de escritorio usarán en la pantalla de inicio | ||
| 10722 | de sesión pulsando @kbd{F1}), gestión de red, gestión de energía y más, | ||
| 10723 | podría ser así: | ||
| 10724 | |||
| 10725 | @lisp | ||
| 10726 | @include os-config-desktop.texi | ||
| 10727 | @end lisp | ||
| 10728 | |||
| 10729 | Un sistema gráfico con una selección de gestores de ventanas ligeros en vez | ||
| 10730 | de entornos de escritorio completos podría ser así: | ||
| 10731 | |||
| 10732 | @lisp | ||
| 10733 | @include os-config-lightweight-desktop.texi | ||
| 10734 | @end lisp | ||
| 10735 | |||
| 10736 | Este 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, | ||
| 10738 | como el devuelto por la orden @command{blkid}. | ||
| 10739 | |||
| 10740 | @xref{Servicios de escritorio}, para la lista exacta de servicios proporcionados | ||
| 10741 | por @var{%desktop-services}. @xref{Certificados X.509}, para información | ||
| 10742 | sobre el paquete @code{nss-certs} usado aquí. | ||
| 10743 | |||
| 10744 | De nuevo, @var{%desktop-services} es simplemente una lista de objetos de | ||
| 10745 | servicios. Si desea borrar servicios de aquí, puede hacerlo usando | ||
| 10746 | procedimientos de filtrado de listas (@pxref{SRFI-1 Filtering and | ||
| 10747 | Partitioning,,, guile, GNU Guile Reference Manual}). Por ejemplo, la | ||
| 10748 | siguiente 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 | |||
| 10759 | Asumiendo que la declaración de @code{operating-system} se encuentra en el | ||
| 10760 | fichero @file{my-conf-del-sistema.scm}, la orden @command{guix system | ||
| 10761 | mi-conf-del-sistema.scm} instancia esa configuración, y la convierte en la | ||
| 10762 | entrada predeterminada de GRUB en el arranque (@pxref{Invocación de guix system}). | ||
| 10763 | |||
| 10764 | La manera habitual de cambiar la configuración del sistema es actualizar | ||
| 10765 | este fichero y volver a ejecutar @command{guix system reconfigure}. Nunca se | ||
| 10766 | deberían tocar los ficheros en @file{/etc} o ejecutar órdenes que modifiquen | ||
| 10767 | el estado del sistema como @command{useradd} o @command{grub-install}. De | ||
| 10768 | hecho, debe evitarlo ya que no únicamente anularía su garantía sino que | ||
| 10769 | también le impediría volver a una versión previa de su sistema, en caso de | ||
| 10770 | necesitarlo. | ||
| 10771 | |||
| 10772 | @cindex vuelta-atrás, del sistema operativo | ||
| 10773 | Hablando de vuelta atrás, cada vez que ejecuta @command{guix system | ||
| 10774 | reconfigure} se crea una nueva @dfn{generación} del sistema---sin modificar | ||
| 10775 | o borrar generaciones previas. Las generaciones previas tienen una entrada | ||
| 10776 | en el menú del cargador de arranque, permitiendole arrancarlas en caso de | ||
| 10777 | que algo funcionase mal en las últimas generaciones. Tranquilizador, ¿no? La | ||
| 10778 | orden @command{guix system list-generations} enumera las generaciones del | ||
| 10779 | sistema disponibles en el disco. Es también posible volver a una versión | ||
| 10780 | previa con las órdenes @command{guix system roll-back} y @command{guix | ||
| 10781 | system switch-generation}. | ||
| 10782 | |||
| 10783 | Aunque la orden @command{guix system reconfigure} no modificará las | ||
| 10784 | generaciones previas, debe tener cuidado cuando la generación actual no es | ||
| 10785 | la última (por ejemplo, después de invocar @command{guix system roll-back}), | ||
| 10786 | ya 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 | |||
| 10791 | A nivel Scheme, el grueso de una declaración @code{operating-system} se | ||
| 10792 | instancia con el siguiente procedimiento monádico (@pxref{La mónada del almacén}): | ||
| 10793 | |||
| 10794 | @deffn {Procedimiento monádico} operating-system-derivation so | ||
| 10795 | Devuelve una derivación que construye @var{so}, un objeto | ||
| 10796 | @code{operating-system} (@pxref{Derivaciones}). | ||
| 10797 | |||
| 10798 | La salida de la derivación es un único directorio que hace referencia a | ||
| 10799 | todos los paquetes, ficheros de configuración y otros ficheros auxiliares | ||
| 10800 | necesarios para instanciar @var{so}. | ||
| 10801 | @end deffn | ||
| 10802 | |||
| 10803 | This procedure is provided by the @code{(gnu system)} module. Along with | ||
| 10804 | @code{(gnu services)} (@pxref{Servicios}), this module contains the guts of | ||
| 10805 | Guix System. Make sure to visit it! | ||
| 10806 | |||
| 10807 | |||
| 10808 | @node Referencia de ``operating-system'' | ||
| 10809 | @section Referencia de @code{operating-system} | ||
| 10810 | |||
| 10811 | Esta 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 | ||
| 10815 | Este es el tipo de datos que representa la configuración del sistema | ||
| 10816 | operativo. Con ello queremos decir toda la configuración global del sistema, | ||
| 10817 | no 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}) | ||
| 10821 | El objeto del paquete del núcleo del sistema operativo | ||
| 10822 | usado@footnote{Actualmente únicamente está disponible el núcleo | ||
| 10823 | Linux-libre. En el futuro será posible usar GNU@tie{}Hurd.}. | ||
| 10824 | |||
| 10825 | @item @code{kernel-arguments} (default: @code{'("quiet")}) | ||
| 10826 | Lista de cadenas o expresiones-G que representan parámetros adicionales a | ||
| 10827 | pasar en la línea de órdenes del núcleo---por ejemplo, | ||
| 10828 | @code{("console=ttyS0")}. | ||
| 10829 | |||
| 10830 | @item @code{bootloader} | ||
| 10831 | El objeto de configuración del cargador de arranque del | ||
| 10832 | sistema. @xref{Configuración del gestor de arranque}. | ||
| 10833 | |||
| 10834 | @item @code{label} | ||
| 10835 | This is the label (a string) as it appears in the bootloader's menu entry. | ||
| 10836 | The default label includes the kernel name and version. | ||
| 10837 | |||
| 10838 | @item @code{keyboard-layout} (predeterminada: @code{#f}) | ||
| 10839 | This field specifies the keyboard layout to use in the console. It can be | ||
| 10840 | either @code{#f}, in which case the default keyboard layout is used (usually | ||
| 10841 | US English), or a @code{<keyboard-layout>} record. | ||
| 10842 | |||
| 10843 | This keyboard layout is in effect as soon as the kernel has booted. For | ||
| 10844 | instance, it is the keyboard layout in effect when you type a passphrase if | ||
| 10845 | your root file system is on a @code{luks-device-mapping} mapped device | ||
| 10846 | (@pxref{Dispositivos traducidos}). | ||
| 10847 | |||
| 10848 | @quotation Nota | ||
| 10849 | This does @emph{not} specify the keyboard layout used by the bootloader, nor | ||
| 10850 | that used by the graphical display server. @xref{Configuración del gestor de arranque}, | ||
| 10851 | for 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 | ||
| 10852 | Window System. | ||
| 10853 | @end quotation | ||
| 10854 | |||
| 10855 | @item @code{initrd-modules} (predeterminados: @code{%base-initrd-modules}) | ||
| 10856 | @cindex initrd | ||
| 10857 | @cindex disco inicial de RAM | ||
| 10858 | La lista de módulos del núcleo Linux que deben estar disponibles en el disco | ||
| 10859 | inicial de RAM. @xref{Disco en RAM inicial}. | ||
| 10860 | |||
| 10861 | @item @code{initrd} (predeterminado: @code{base-initrd}) | ||
| 10862 | Un procedimiento que devuelve un disco inicial de RAM para el núcleo | ||
| 10863 | Linux. Este campo se proporciona para permitir personalizaciones de bajo | ||
| 10864 | nivel 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 | ||
| 10868 | Lista de paquetes de firmware que pueden ser cargados por el núcleo del | ||
| 10869 | sistema operativo. | ||
| 10870 | |||
| 10871 | El valor predeterminado incluye el firmware necesario para dispositivos WiFi | ||
| 10872 | basados en Atheros y Broadcom (módulos Linux-libre @code{ath9k} y | ||
| 10873 | @code{b43-open}, respectivamente). @xref{Consideraciones sobre el hardware}, para más | ||
| 10874 | información sobre hardware soportado. | ||
| 10875 | |||
| 10876 | @item @code{host-name} | ||
| 10877 | El nombre de la máquina. | ||
| 10878 | |||
| 10879 | @item @code{hosts-file} | ||
| 10880 | @cindex el fichero hosts | ||
| 10881 | Un objeto tipo-fichero (@pxref{Expresiones-G, objetos tipo-fichero}) para | ||
| 10882 | ser usado como @file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C | ||
| 10883 | Library Reference Manual}). El predeterminado es un fichero con entradas | ||
| 10884 | para @code{localhost} y @var{host-name}. | ||
| 10885 | |||
| 10886 | @item @code{mapped-devices} (predeterminados: @code{'()}) | ||
| 10887 | Una lista de dispositivos traducidos. @xref{Dispositivos traducidos}. | ||
| 10888 | |||
| 10889 | @item @code{file-systems} | ||
| 10890 | Una lista de sistemas de ficheros. @xref{Sistemas de ficheros}. | ||
| 10891 | |||
| 10892 | @item @code{swap-devices} (predeterminados: @code{'()}) | ||
| 10893 | @cindex dispositivos de intercambio | ||
| 10894 | Una lista de cadenas que identifiquen dispositivos o ficheros a usar como | ||
| 10895 | ``espacio de intercambio'' (@pxref{Memory Concepts,,, libc, The GNU C | ||
| 10896 | Library Reference Manual}). Por ejemplo @code{'("/dev/sda3")} o | ||
| 10897 | @code{'("/fichero-intercambio")}. Es posible especificar un fichero de | ||
| 10898 | intercambio en un sistema de ficheros en un dispositivo traducido, siempre | ||
| 10899 | que la traducción y el sistema de ficheros se especifiquen | ||
| 10900 | tambié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}) | ||
| 10904 | Lista de cuentas de usuaria y grupos. @xref{Cuentas de usuaria}. | ||
| 10905 | |||
| 10906 | Si la lista de @code{usuarias} carece de una cuenta de usuaria con | ||
| 10907 | UID@tie{}0, una cuenta ``root'' con UID@tie{}0 se añade automáticamente. | ||
| 10908 | |||
| 10909 | @item @code{skeletons} (predeterminados: @code{(default-skeletons)}) | ||
| 10910 | Una lista de tuplas de nombre de fichero de destino/objeto tipo-fichero | ||
| 10911 | (@pxref{Expresiones-G, objetos tipo-fichero}). Estos son los ficheros de | ||
| 10912 | esqueleto que se añadirán al directorio de las cuentas de usuaria que se | ||
| 10913 | creen. | ||
| 10914 | |||
| 10915 | Por 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}) | ||
| 10925 | Una cadena que denota el contenido del fichero @file{/etc/issue}, que se | ||
| 10926 | muestra cuando las usuarias ingresan al sistema en una consola de texto. | ||
| 10927 | |||
| 10928 | @item @code{packages} (predeterminados: @var{%base-packages}) | ||
| 10929 | El conjunto de paquetes instalados en el perfil global, que es accesible en | ||
| 10930 | @file{/run/current-system/profile}. | ||
| 10931 | |||
| 10932 | El conjunto predeterminado incluye utilidades básicas y es una buena | ||
| 10933 | práctica instalar utilidades no-básicas en los perfiles de las usuarias | ||
| 10934 | (@pxref{Invocación de guix package}). | ||
| 10935 | |||
| 10936 | @item @code{timezone} | ||
| 10937 | Una cadena que identifica la zona horaria---por ejemplo, | ||
| 10938 | @code{"Europe/Paris"}. | ||
| 10939 | |||
| 10940 | Puede ejecutar la orden @command{tzselect} para encontrar qué cadena de zona | ||
| 10941 | horaria corresponde con su región. Elegir una zona horaria no válida provoca | ||
| 10942 | un fallo en @command{guix system}. | ||
| 10943 | |||
| 10944 | @item @code{locale} (predeterminado: @code{"en_US.utf8"}) | ||
| 10945 | El nombre de la localización predeterminada (@pxref{Locale Names,,, libc, | ||
| 10946 | The GNU C Library Reference Manual}). @xref{Localizaciones}, para más información. | ||
| 10947 | |||
| 10948 | @item @code{locale-definitions} (predeterminadas: @var{%default-locale-definitions}) | ||
| 10949 | La lista de definiciones de localizaciones a compilar y que puede ser usada | ||
| 10950 | en tiempo de ejecución. @xref{Localizaciones}. | ||
| 10951 | |||
| 10952 | @item @code{locale-libcs} (predeterminadas: @code{(list @var{glibc})}) | ||
| 10953 | La lista de paquetes GNU@tie{}libc cuyos datos de localización y | ||
| 10954 | herramientas son usadas para las definiciones de | ||
| 10955 | localizaciones. @xref{Localizaciones}, para consideraciones de compatibilidad que | ||
| 10956 | justifican esta opción. | ||
| 10957 | |||
| 10958 | @item @code{name-service-switch} (predeterminado: @var{%default-nss}) | ||
| 10959 | Configuració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 | ||
| 10963 | Una lista de objetos service denotando los servicios del | ||
| 10964 | sistema. @xref{Servicios}. | ||
| 10965 | |||
| 10966 | @cindex servicios esenciales | ||
| 10967 | @item @code{essential-services} (predeterminados: ...) | ||
| 10968 | The 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. | ||
| 10970 | As 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. | ||
| 10976 | Servicios de los @dfn{módulos de verificación conectables} (PAM) de Linux. | ||
| 10977 | |||
| 10978 | @item @code{setuid-programs} (predeterminados: @var{%setuid-programs}) | ||
| 10979 | Lista de expresiones-G con valores de cadena que denotan los programas | ||
| 10980 | setuid. @xref{Programas con setuid}. | ||
| 10981 | |||
| 10982 | @item @code{sudoers-file} (predeterminado: @var{%sudoers-specification}) | ||
| 10983 | @cindex fichero sudoers | ||
| 10984 | El contenido de @file{/etc/sudoers} como un objeto tipo-fichero | ||
| 10985 | (@pxref{Expresiones-G, @code{local-file} y @code{plain-file}}). | ||
| 10986 | |||
| 10987 | Este fichero especifica qué usuarias pueden usar la orden @command{sudo}, lo | ||
| 10988 | que se les permite hacer y qué privilegios pueden obtener. El comportamiento | ||
| 10989 | predefinido 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 | ||
| 10995 | When used in the @emph{lexical scope} of an operating system field | ||
| 10996 | definition, this identifier resolves to the operating system being defined. | ||
| 10997 | |||
| 10998 | The example below shows how to refer to the operating system being defined | ||
| 10999 | in 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 | |||
| 11010 | It is an error to refer to @code{this-operating-system} outside an operating | ||
| 11011 | system definition. | ||
| 11012 | @end deffn | ||
| 11013 | |||
| 11014 | @end deftp | ||
| 11015 | |||
| 11016 | @node Sistemas de ficheros | ||
| 11017 | @section Sistemas de ficheros | ||
| 11018 | |||
| 11019 | La lista de sistemas de ficheros que deben montarse se especifica en el | ||
| 11020 | campo @code{file-systems} de la declaración del sistema operativo | ||
| 11021 | (@pxref{Uso de la configuración del sistema}). Cada sistema de ficheros se | ||
| 11022 | declara 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 | |||
| 11031 | Como es habitual, algunos de los campos son obligatorios---aquellos | ||
| 11032 | mostrados en el ejemplo previo---mientras que otros pueden omitirse. Se | ||
| 11033 | describen a continuación. | ||
| 11034 | |||
| 11035 | @deftp {Tipo de datos} file-system | ||
| 11036 | Objetos de este tipo representan los sistemas de ficheros a | ||
| 11037 | montar. Contienen los siguientes campos: | ||
| 11038 | |||
| 11039 | @table @asis | ||
| 11040 | @item @code{type} | ||
| 11041 | Este campo es una cadena que especifica el tipo de sistema de ficheros---por | ||
| 11042 | ejemplo, @code{"ext4"}. | ||
| 11043 | |||
| 11044 | @item @code{mount-point} | ||
| 11045 | Designa la ruta donde el sistema de ficheros debe montarse. | ||
| 11046 | |||
| 11047 | @item @code{device} | ||
| 11048 | Nombra la ``fuente'' del sistema de ficheros. Puede ser una de estas tres | ||
| 11049 | opciones: una etiqueta de sistema de ficheros, un UUID de sistema de | ||
| 11050 | ficheros o el nombre de un nodo @file{/dev}. Las etiquetas y UUID ofrecen | ||
| 11051 | una forma de hacer referencia a sistemas de ficheros sin codificar su nombre | ||
| 11052 | de dispositivo actual@footnote{Fijese que, aunque es tentador usa | ||
| 11053 | @file{/dev/disk/by-uuid} y nombres de dispositivo similares para obtener el | ||
| 11054 | mismo resultado, no es lo recomendado: estos nodo especiales de dispositivos | ||
| 11055 | se crean por el daemon udev y puede no estar disponible cuando el | ||
| 11056 | dispositivo sea montado.}. | ||
| 11057 | |||
| 11058 | @findex file-system-label | ||
| 11059 | Las etiquetas del sistema de ficheros se crean mediante el uso del | ||
| 11060 | procedimiento @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 | ||
| 11062 | proporciona un ejemplo de un sistema de ficheros al que se hace referencia | ||
| 11063 | mediante 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 | ||
| 11073 | Los UUID se convierten dede su representación en forma de cadena (como se | ||
| 11074 | muestra 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 | ||
| 11076 | define en la @uref{https://tools.ietf.org/html/rfc4122, RFC@tie{}4122}. Este | ||
| 11077 | es el formato de UUID que usan la familia de sistemas de ficheros ext2 y | ||
| 11078 | otros, pero es diferente de los ``UUID'' de los sistemas de ficheros FAT, | ||
| 11079 | por 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 | |||
| 11088 | Cuando la fuente de un sistema de ficheros es un dispositivo traducido | ||
| 11089 | (@pxref{Dispositivos traducidos}), su campo @code{device} @emph{debe} hacer | ||
| 11090 | referencia al nombre del dispositivo traducido---por ejemplo, | ||
| 11091 | @file{"/dev/mapper/particion-raiz"}. Esto es necesario para que el sistema | ||
| 11092 | sepa que el montaje del sistema de ficheros depende del establecimiento de | ||
| 11093 | la traducción de dispositivos correspondiente. | ||
| 11094 | |||
| 11095 | @item @code{flags} (predeterminadas: @code{'()}) | ||
| 11096 | Una lista de símbolos que denotan opciones del montaje. Las opciones | ||
| 11097 | reconocidas incluyen @code{read-only} (modo de sólo lectura), | ||
| 11098 | @code{bind-mount} (montaje enlazado), @code{no-dev} (prohibición del acceso | ||
| 11099 | a 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}) | ||
| 11103 | Esto es o bien @code{#f}, o bien una cadena que contiene opciones de | ||
| 11104 | montaje. | ||
| 11105 | |||
| 11106 | @item @code{mount?} (predeterminado: @code{#t}) | ||
| 11107 | Este valor indica si debe montarse el sistema de ficheros automáticamente al | ||
| 11108 | iniciar el sistema. Cuando se establece como @code{#f}, el sistema de | ||
| 11109 | ficheros tiene una entrada en @file{/etc/fstab} (el cual es leído por la | ||
| 11110 | orden @command{mount}) pero no se montará automáticamente. | ||
| 11111 | |||
| 11112 | @item @code{needed-for-boot?} (predeterminado: @code{#f}) | ||
| 11113 | Este valor lógico indica si el sistema de ficheros es necesario para el | ||
| 11114 | arranque. Si es verdadero, el sistema de ficheros se monta al cargar el | ||
| 11115 | disco inicial de RAM (initrd). Este es siempre el caso, por ejemplo, para el | ||
| 11116 | sistema de ficheros raíz. | ||
| 11117 | |||
| 11118 | @item @code{check?} (predeterminado: @code{#t}) | ||
| 11119 | Este valor lógico indica si el sistema de ficheros se debe comprobar en | ||
| 11120 | busca de errores antes de montarse. | ||
| 11121 | |||
| 11122 | @item @code{create-mount-point?} (predeterminado: @code{#f}) | ||
| 11123 | Cuando es verdadero, el punto de montaje es creado si no existía | ||
| 11124 | previamente. | ||
| 11125 | |||
| 11126 | @item @code{dependencies} (predeterminadas: @code{'()}) | ||
| 11127 | Una lista de objetos @code{<file-system>} o @code{<mapped-device>} que | ||
| 11128 | representan sistemas de ficheros que deben montarse o dispositivos | ||
| 11129 | traducidos que deben abrirse antes (y desmontarse o cerrarse después) que el | ||
| 11130 | declarado. | ||
| 11131 | |||
| 11132 | Como 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 | |||
| 11136 | Otro ejemplo es un sistema de ficheros que depende de un dispositivo | ||
| 11137 | traducido, por ejemplo una partición cifrada (@pxref{Dispositivos traducidos}). | ||
| 11138 | @end table | ||
| 11139 | @end deftp | ||
| 11140 | |||
| 11141 | El módulo @code{(gnu system file-systems)} exporta las siguientes variables | ||
| 11142 | útiles. | ||
| 11143 | |||
| 11144 | @defvr {Variable Scheme} %base-file-systems | ||
| 11145 | Estos son los sistemas de ficheros esenciales que se necesitan en sistemas | ||
| 11146 | normales, como @var{%pseudo-terminal-file-system} y @var{%immutable-store} | ||
| 11147 | (véase a continuación). Las declaraciones de sistemas operativos deben | ||
| 11148 | contener siempre estos al menos. | ||
| 11149 | @end defvr | ||
| 11150 | |||
| 11151 | @defvr {Variable Scheme} %pseudo-terminal-file-systems | ||
| 11152 | El sistema de ficheros que debe montarse como @file{/dev/pts}. Permite la | ||
| 11153 | creación de @dfn{pseudoterminales} a través de @code{openpty} y funciones | ||
| 11154 | similares (@pxref{Pseudo-Terminals,,, libc, The GNU C Library Reference | ||
| 11155 | Manual}). Los pseudoterminales son usados por emuladores de terminales como | ||
| 11156 | @command{xterm}. | ||
| 11157 | @end defvr | ||
| 11158 | |||
| 11159 | @defvr {Variable Scheme} %shared-memory-file-system | ||
| 11160 | Este sistema de ficheros se monta como @file{/dev/shm} y se usa para | ||
| 11161 | permitir el uso de memoria compartida entre procesos (@pxref{Memory-mapped | ||
| 11162 | I/O, @code{shm_open},, libc, The GNU C Library Reference Manual}). | ||
| 11163 | @end defvr | ||
| 11164 | |||
| 11165 | @defvr {Variable Scheme} %immutable-store | ||
| 11166 | Este sistema de ficheros crea un montaje enlazado (``bind-mount'') de | ||
| 11167 | @file{/gnu/store}, permitiendo solo el acceso de lectura para todas las | ||
| 11168 | usuarias incluyendo a @code{root}. Esto previene modificaciones accidentales | ||
| 11169 | por software que se ejecuta como @code{root} o por las administradoras del | ||
| 11170 | sistema. | ||
| 11171 | |||
| 11172 | El 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 | ||
| 11174 | nombres''. | ||
| 11175 | @end defvr | ||
| 11176 | |||
| 11177 | @defvr {Variable Scheme} %binary-format-file-system | ||
| 11178 | El sistema de ficheros @code{binfmt_misc}, que permite que el manejo de | ||
| 11179 | tipos de ficheros ejecutables arbitrarios se delegue al espacio de | ||
| 11180 | usuaria. Necesita la carga del módulo del núcleo @code{binfmt.ko}. | ||
| 11181 | @end defvr | ||
| 11182 | |||
| 11183 | @defvr {Variable Scheme} %fuse-control-file-system | ||
| 11184 | El sistema de ficheros @code{fusectl}, que permite a usuarias sin | ||
| 11185 | privilegios montar y desmontar sistemas de ficheros de espacio de usuaria | ||
| 11186 | FUSE. 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 | ||
| 11194 | El núcleo Linux tiene una noción de @dfn{traducción de dispositivos}: un | ||
| 11195 | dispositivo de bloques, como una partición de disco duro, puede | ||
| 11196 | @dfn{traducirse} en otro dispositivo, habitualmente en @code{/dev/mapper/}, | ||
| 11197 | con un procesamiento adicional sobre los datos que fluyen a través de | ||
| 11198 | ella@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 | ||
| 11201 | operaciones en su almacenamiento subyacente. Por tanto, Hurd implementa | ||
| 11202 | dispositivos traducidos, como sistemas de ficheros, usando el mecanismo | ||
| 11203 | genérico de @dfn{traducción} (@pxref{Translators,,, hurd, The GNU Hurd | ||
| 11204 | Reference Manual}).}. Un ejemplo típico es la traducción de dispositivos | ||
| 11205 | para el cifrado: todas las escrituras en el dispositivo traducido se cifran, | ||
| 11206 | y todas las lecturas se descifran, de forma transparente. Guix extiende esta | ||
| 11207 | noción considerando cualquier dispositivo o conjunto de dispositivos que son | ||
| 11208 | @dfn{transformados} de alguna manera para crear un nuevo dispositivo; por | ||
| 11209 | ejemplo, los dispositivos RAID se obtienen @dfn{ensamblando} otros | ||
| 11210 | dispositivos, como discos duros o particiones, en uno nuevo que se comporta | ||
| 11211 | como una partición. Otros ejemplos, todavía no implementados, son los | ||
| 11212 | volúmenes lógicos LVM. | ||
| 11213 | |||
| 11214 | Los 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 | ||
| 11218 | Objetos de este tipo representan traducciones de dispositivo que se llevarán | ||
| 11219 | a cabo cuando el sistema arranque. | ||
| 11220 | |||
| 11221 | @table @code | ||
| 11222 | @item source | ||
| 11223 | Puede ser tanto una cadena que especifica el nombre de un dispositivo de | ||
| 11224 | bloques a traducir, como @code{"/dev/sda3"}, o una lista de dichas cadenas | ||
| 11225 | cuando varios dispositivos necesitan ser ensamblados para crear uno nuevo. | ||
| 11226 | |||
| 11227 | @item target | ||
| 11228 | Esta cadena especifica el nombre del dispositivo traducido resultante. Para | ||
| 11229 | traductores del núcleo como dispositivos de cifrado del tipo | ||
| 11230 | @code{luks-device-mapping}, especificar @code{"mi-particion"} produce la | ||
| 11231 | creación del dispositivo @code{"/dev/mapper/mi-particion"}. Para | ||
| 11232 | dispositivos RAID de tipo @code{raid-device-mapping}, el nombre del | ||
| 11233 | dispositivo completo como @code{"/dev/md0"} debe ser proporcionado. | ||
| 11234 | |||
| 11235 | @item type | ||
| 11236 | Debe 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 | ||
| 11242 | Define 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 | ||
| 11248 | Define 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 | ||
| 11250 | núcleo Linux para el nivel RAID apropiado, como @code{raid456} para RAID-4, | ||
| 11251 | RAID-5 o RAID-6, o @code{raid10} para RAID-10. | ||
| 11252 | @end defvr | ||
| 11253 | |||
| 11254 | @cindex cifrado de disco | ||
| 11255 | @cindex LUKS | ||
| 11256 | El 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 | ||
| 11259 | unificada de Linux}, un mecanismo estándar para cifrado de disco. El | ||
| 11260 | dispositivo @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 | |||
| 11270 | De manera alternativa, para independizarse de la numeración de dispositivos, | ||
| 11271 | puede obtenerse el UUID LUKS (@dfn{identificador único}) del dispositivo | ||
| 11272 | fuente con una orden así: | ||
| 11273 | |||
| 11274 | @example | ||
| 11275 | cryptsetup luksUUID /dev/sda3 | ||
| 11276 | @end example | ||
| 11277 | |||
| 11278 | y 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 | ||
| 11288 | También es deseable cifrar el espacio de intercambio, puesto que el espacio | ||
| 11289 | de intercambio puede contener información sensible. Una forma de conseguirlo | ||
| 11290 | es usar un fichero de intercambio en un sistema de ficheros en un | ||
| 11291 | dispositivo traducido a través del cifrado LUKS. @xref{Preparación para la instalación,,Particionado del disco}, para un ejemplo. | ||
| 11292 | |||
| 11293 | Un 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 | |||
| 11303 | El 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 | ||
| 11305 | durante la creación inicial y formato del dispositivo RAID y después se | ||
| 11306 | determina 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 | ||
| 11315 | Los grupos y cuentas de usuaria se gestionan completamente a través de la | ||
| 11316 | declaració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 | |||
| 11331 | Durante el arranque o tras la finalización de @command{guix system | ||
| 11332 | reconfigure}, el sistema se asegura de que únicamente las cuentas de usuaria | ||
| 11333 | y grupos especificados en la declaración @code{operating-system} existen, y | ||
| 11334 | con las propiedades especificadas. Por tanto, la creación o modificación de | ||
| 11335 | cuentas o grupos realizadas directamente invocando órdenes como | ||
| 11336 | @command{useradd} se pierden al reconfigurar o reiniciar el sistema. Esto | ||
| 11337 | asegura que el sistema permanece exactamente como se declaró. | ||
| 11338 | |||
| 11339 | @deftp {Tipo de datos} user-account | ||
| 11340 | Objetos de este tipo representan cuentas de usuaria. Los siguientes miembros | ||
| 11341 | pueden ser especificados: | ||
| 11342 | |||
| 11343 | @table @asis | ||
| 11344 | @item @code{name} | ||
| 11345 | El nombre de la cuenta de usuaria. | ||
| 11346 | |||
| 11347 | @item @code{group} | ||
| 11348 | @cindex grupos | ||
| 11349 | Este es el nombre (una cadena) o identificador (un número) del grupo de | ||
| 11350 | usuarias al que esta cuenta pertenece. | ||
| 11351 | |||
| 11352 | @item @code{supplementary-groups} (predeterminados: @code{'()}) | ||
| 11353 | Opcionalmente, esto puede definirse como una lista de nombres de grupo a los | ||
| 11354 | que esta cuenta pertenece. | ||
| 11355 | |||
| 11356 | @item @code{uid} (predeterminado: @code{#f}) | ||
| 11357 | Este 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 | ||
| 11359 | la cuenta es creada. | ||
| 11360 | |||
| 11361 | @item @code{comment} (predeterminado: @code{""}) | ||
| 11362 | Un comentario sobre la cuenta, como el nombre completo de la propietaria. | ||
| 11363 | |||
| 11364 | @item @code{home-directory} | ||
| 11365 | Este es el nombre del directorio de usuaria de la cuenta. | ||
| 11366 | |||
| 11367 | @item @code{create-home-directory?} (predeterminado: @code{#t}) | ||
| 11368 | Indica si el directorio de usuaria de esta cuenta debe ser creado si no | ||
| 11369 | existe todavía. | ||
| 11370 | |||
| 11371 | @item @code{shell} (predeterminado: Bash) | ||
| 11372 | Esto es una expresión-G denotando el nombre de fichero de un programa que | ||
| 11373 | será usado como shell (@pxref{Expresiones-G}). | ||
| 11374 | |||
| 11375 | @item @code{system?} (predeterminado: @code{#f}) | ||
| 11376 | Este valor lógico indica si la cuenta es una cuenta ``del sistema''. Las | ||
| 11377 | cuentas del sistema se tratan a veces de forma especial; por ejemplo, los | ||
| 11378 | gestores 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}) | ||
| 11383 | Normalmente debería dejar este campo a @code{#f}, inicializar la contraseña | ||
| 11384 | de usuaria como @code{root} con la orden @command{passwd}, y entonces dejar | ||
| 11385 | a las usuarias cambiarla con @command{passwd}. Las contraseñas establecidas | ||
| 11386 | con @command{passwd} son, por supuesto, preservadas entre reinicios y | ||
| 11387 | reconfiguraciones. | ||
| 11388 | |||
| 11389 | If you @emph{do} want to set an initial password for an account, then this | ||
| 11390 | field 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 | ||
| 11403 | The 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 | ||
| 11405 | with care. | ||
| 11406 | @end quotation | ||
| 11407 | |||
| 11408 | @xref{Passphrase Storage,,, libc, The GNU C Library Reference Manual}, for | ||
| 11409 | more information on password encryption, and @ref{Encryption,,, guile, GNU | ||
| 11410 | Guile Reference Manual}, for information on Guile's @code{crypt} procedure. | ||
| 11411 | |||
| 11412 | @end table | ||
| 11413 | @end deftp | ||
| 11414 | |||
| 11415 | @cindex grupos | ||
| 11416 | Las 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 | ||
| 11423 | Este tipo es para grupos de usuarias. Hay únicamente unos pocos campos: | ||
| 11424 | |||
| 11425 | @table @asis | ||
| 11426 | @item @code{name} | ||
| 11427 | En nombre del grupo. | ||
| 11428 | |||
| 11429 | @item @code{id} (predeterminado: @code{#f}) | ||
| 11430 | El identificador del grupo (un número). Si es @code{#f}, un nuevo número es | ||
| 11431 | reservado automáticamente cuando se crea el grupo. | ||
| 11432 | |||
| 11433 | @item @code{system?} (predeterminado: @code{#f}) | ||
| 11434 | Este valor booleano indica si el grupo es un grupo ``del sistema''. Los | ||
| 11435 | grupos 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, | ||
| 11439 | aparentemente sí. A menos que sea @code{#f}, este campo especifica la | ||
| 11440 | contraseña del grupo. | ||
| 11441 | |||
| 11442 | @end table | ||
| 11443 | @end deftp | ||
| 11444 | |||
| 11445 | Por conveniencia, una variable contiene una lista con todos los grupos de | ||
| 11446 | usuarias básicos que se puede esperar: | ||
| 11447 | |||
| 11448 | @defvr {Variable Scheme} %base-groups | ||
| 11449 | Esta es la lista de grupos de usuarias básicos que las usuarias y/o los | ||
| 11450 | paquetes esperan que estén presentes en el sistema. Esto incluye grupos como | ||
| 11451 | ``root'', ``wheel'' y ``users'', así como grupos usados para controlar el | ||
| 11452 | acceso a dispositivos específicos como ``audio'', ``disk'' y ``cdrom''. | ||
| 11453 | @end defvr | ||
| 11454 | |||
| 11455 | @defvr {Variable Scheme} %base-user-accounts | ||
| 11456 | Esta es la lista de cuentas de usuaria básicas que los programas pueden | ||
| 11457 | esperar encontrar en un sistema GNU/Linux, como la cuenta ``nobody''. | ||
| 11458 | |||
| 11459 | Fíjese que la cuenta de ``root'' no se incluye aquí. Es un caso especial y | ||
| 11460 | se 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 | ||
| 11468 | To specify what each key of your keyboard does, you need to tell the | ||
| 11469 | operating system what @dfn{keyboard layout} you want to use. The default, | ||
| 11470 | when nothing is specified, is the US English QWERTY layout for 105-key PC | ||
| 11471 | keyboards. However, German speakers will usually prefer the German QWERTZ | ||
| 11472 | layout, French speakers will want the AZERTY layout, and so on; hackers | ||
| 11473 | might prefer Dvorak or bépo, and they might even want to further customize | ||
| 11474 | the effect of some of the keys. This section explains how to get that done. | ||
| 11475 | |||
| 11476 | @cindex distribución de teclado, definición | ||
| 11477 | There are three components that will want to know about your keyboard | ||
| 11478 | layout: | ||
| 11479 | |||
| 11480 | @itemize | ||
| 11481 | @item | ||
| 11482 | The @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 | ||
| 11484 | if you want, for instance, to make sure that you can type the passphrase of | ||
| 11485 | your encrypted root partition using the right layout. | ||
| 11486 | |||
| 11487 | @item | ||
| 11488 | The @emph{operating system kernel}, Linux, will need that so that the | ||
| 11489 | console is properly configured (@pxref{Referencia de ``operating-system'', | ||
| 11490 | @code{keyboard-layout}}). | ||
| 11491 | |||
| 11492 | @item | ||
| 11493 | The @emph{graphical display server}, usually Xorg, also has its own idea of | ||
| 11494 | the keyboard layout (@pxref{Sistema X Window, @code{keyboard-layout}}). | ||
| 11495 | @end itemize | ||
| 11496 | |||
| 11497 | Guix allows you to configure all three separately but, fortunately, it | ||
| 11498 | allows you to share the same keyboard layout for all three components. | ||
| 11499 | |||
| 11500 | @cindex XKB, distribuciones de teclado | ||
| 11501 | Keyboard layouts are represented by records created by the | ||
| 11502 | @code{keyboard-layout} procedure of @code{(gnu system keyboard)}. Following | ||
| 11503 | the 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), | ||
| 11505 | an optional variant name, an optional keyboard model name, and a possibly | ||
| 11506 | empty list of additional options. In most cases the layout name is all you | ||
| 11507 | care 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 | |||
| 11536 | See the @file{share/X11/xkb} directory of the @code{xkeyboard-config} | ||
| 11537 | package for a complete list of supported layouts, variants, and models. | ||
| 11538 | |||
| 11539 | @cindex distribución de teclado, configuración | ||
| 11540 | Let's say you want your system to use the Turkish keyboard layout throughout | ||
| 11541 | your system---bootloader, console, and Xorg. Here's what your system | ||
| 11542 | configuration 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 | |||
| 11562 | In 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 | ||
| 11564 | to a different layout. The @code{set-xorg-configuration} procedure | ||
| 11565 | communicates the desired Xorg configuration to the graphical log-in manager, | ||
| 11566 | by default GDM. | ||
| 11567 | |||
| 11568 | We've discussed how to specify the @emph{default} keyboard layout of your | ||
| 11569 | system when it starts, but you can also adjust it at run time: | ||
| 11570 | |||
| 11571 | @itemize | ||
| 11572 | @item | ||
| 11573 | If you're using GNOME, its settings panel has a ``Region & Language'' entry | ||
| 11574 | where you can select one or more keyboard layouts. | ||
| 11575 | |||
| 11576 | @item | ||
| 11577 | Under Xorg, the @command{setxkbmap} command (from the same-named package) | ||
| 11578 | allows you to change the current layout. For example, this is how you would | ||
| 11579 | change the layout to US Dvorak: | ||
| 11580 | |||
| 11581 | @example | ||
| 11582 | setxkbmap us dvorak | ||
| 11583 | @end example | ||
| 11584 | |||
| 11585 | @item | ||
| 11586 | The @code{loadkeys} command changes the keyboard layout in effect in the | ||
| 11587 | Linux console. However, note that @code{loadkeys} does @emph{not} use the | ||
| 11588 | XKB keyboard layout categorization described above. The command below loads | ||
| 11589 | the French bépo layout: | ||
| 11590 | |||
| 11591 | @example | ||
| 11592 | loadkeys fr-bepo | ||
| 11593 | @end example | ||
| 11594 | @end itemize | ||
| 11595 | |||
| 11596 | @node Localizaciones | ||
| 11597 | @section Localizaciones | ||
| 11598 | |||
| 11599 | @cindex localización | ||
| 11600 | Una @dfn{localización} define convenciones culturales para una lengua y | ||
| 11601 | región del mundo particular (@pxref{Localizaciones,,, libc, The GNU C Library | ||
| 11602 | Reference Manual}). Cada localización tiene un nombre que típicamente tiene | ||
| 11603 | la forma de @code{@var{lengua}_@var{territorio}.@var{codificación}}---por | ||
| 11604 | ejemplo, @code{fr_LU.utf8} designa la localización para la lengua francesa, | ||
| 11605 | con las convenciones culturales de Luxemburgo, usando la codificación UTF-8. | ||
| 11606 | |||
| 11607 | @cindex definición de localización | ||
| 11608 | Normalmente deseará especificar la localización predeterminada para la | ||
| 11609 | máquina usando el campo @code{locale} de la declaración | ||
| 11610 | @code{operating-system} (@pxref{Referencia de ``operating-system'', @code{locale}}). | ||
| 11611 | |||
| 11612 | La localización seleccionada es automáticamente añadida a las | ||
| 11613 | @dfn{definiciones de localización} conocidas en el sistema si es necesario, | ||
| 11614 | con 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 | ||
| 11616 | localización adicionales pueden ser especificadas en el campo | ||
| 11617 | @code{locale-definitions} de @code{operating-system}---esto es util, por | ||
| 11618 | ejemplo, si la codificación no puede ser inferida del nombre de la | ||
| 11619 | localización. El conjunto predeterminado de definiciones de localización | ||
| 11620 | incluye algunas localizaciones ampliamente usadas, pero no todas las | ||
| 11621 | disponibles, para ahorrar espacio. | ||
| 11622 | |||
| 11623 | Por ejemplo, para añadir la localización del frisio del norte para Alemania, | ||
| 11624 | el 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 | |||
| 11632 | De mismo modo, para ahorrar espacio, se puede desear que | ||
| 11633 | @code{locale-definitions} contenga únicamente las localizaciones que son | ||
| 11634 | realmente 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 | ||
| 11643 | Las 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 | ||
| 11645 | libc, que es la ruta donde la GNU@tie{}libc contenida en Guix buscará los | ||
| 11646 | datos de localización. Esto puede ser sobreescrito usando la variable de | ||
| 11647 | entorno @code{LOCPATH} (@pxref{locales-and-locpath, @code{LOCPATH} and | ||
| 11648 | locale packages}). | ||
| 11649 | |||
| 11650 | La forma @code{locale-definition} es proporcionada por el módulo @code{(gnu | ||
| 11651 | system locale)}. Los detalles se proporcionan a continuación. | ||
| 11652 | |||
| 11653 | @deftp {Tipo de datos} locale-definition | ||
| 11654 | Este es el tipo de datos de una definición de localización. | ||
| 11655 | |||
| 11656 | @table @asis | ||
| 11657 | |||
| 11658 | @item @code{name} | ||
| 11659 | El nombre de la localización. @xref{Locale Names,,, libc, The GNU C Library | ||
| 11660 | Reference Manual}, para más información sobre nombres de localizaciones. | ||
| 11661 | |||
| 11662 | @item @code{source} | ||
| 11663 | El 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"}) | ||
| 11667 | La ``codificación de caracteres'' o ``conjunto de caracteres'' para dicha | ||
| 11668 | localización, @uref{http://www.iana.org/assignments/character-sets, como se | ||
| 11669 | define por IANA}. | ||
| 11670 | |||
| 11671 | @end table | ||
| 11672 | @end deftp | ||
| 11673 | |||
| 11674 | @defvr {Variable Scheme} %default-locale-definitions | ||
| 11675 | Una lista de localizaciones UTF-8 usadas de forma común, usada como valor | ||
| 11676 | predeterminado 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 | ||
| 11681 | Estas definiciones de localizaciones usan la @dfn{codificación normalizada} | ||
| 11682 | para el fragmento tras el punto en el nombre (@pxref{Using gettextized | ||
| 11683 | software, normalized codeset,, libc, The GNU C Library Reference | ||
| 11684 | Manual}). Por lo que por ejemplo es válido @code{uk_UA.utf8} pero @emph{no}, | ||
| 11685 | digamos, @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 | ||
| 11691 | Las declaraciones @code{operating-system} proporcionan un campo | ||
| 11692 | @code{locale-libcs} para especificar los paquetes GNU@tie{}libc que se | ||
| 11693 | usarán para compilar las declaraciones de localizaciones | ||
| 11694 | (@pxref{Referencia de ``operating-system''}). ``¿Por qué debo preocuparme?'', puede | ||
| 11695 | preguntarse. Bueno, sucede que el formato binario de los datos de | ||
| 11696 | localizació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>. | ||
| 11700 | Por ejemplo, un programa enlazado con la versión 2.21 de libc no puede leer | ||
| 11701 | datos 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 | ||
| 11703 | incompatibles@footnote{Las versiones 2.23 y posteriores de GNU@tie{}libc | ||
| 11704 | simplemente ignorarán los datos de localización incompatibles, lo cual ya es | ||
| 11705 | un avance.}. De manera similar, un programa enlazado con libc 2.22 puede | ||
| 11706 | leer 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 | ||
| 11708 | las llamadas a @code{setlocale} pueden fallar, pero los programas no | ||
| 11709 | abortarán. | ||
| 11710 | |||
| 11711 | El ``problema'' con Guix es que las usuarias tienen mucha libertad: pueden | ||
| 11712 | elegir cuando e incluso si actualizar el software en sus perfiles, y pueden | ||
| 11713 | estar usando una versión de libc diferente de la que la administradora del | ||
| 11714 | sistema usó para construir los datos de localización comunes a todo el | ||
| 11715 | sistema. | ||
| 11716 | |||
| 11717 | Por suerte, las usuarias sin privilegios también pueden instalar sus propios | ||
| 11718 | datos de localización y definir @var{GUIX_LOCPATH} adecuadamente | ||
| 11719 | (@pxref{locales-and-locpath, @code{GUIX_LOCPATH} y paquetes de | ||
| 11720 | localizaciones}). | ||
| 11721 | |||
| 11722 | No 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 | ||
| 11724 | libc realmente en uso en el sistema, de manera que todos los programas | ||
| 11725 | puedan acceder a ellos---esto es especialmente crucial en un sistema | ||
| 11726 | multiusuaria. Para hacerlo, la administradora puede especificar varios | ||
| 11727 | paquetes 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 | |||
| 11737 | Este ejemplo llevaría a un sistema que contiene definiciones de localización | ||
| 11738 | tanto 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 | ||
| 11746 | Una parte importante de la preparación de una declaración | ||
| 11747 | @code{operating-system} es listar los @dfn{servicios del sistema} y su | ||
| 11748 | configuración (@pxref{Uso de la configuración del sistema}). Los servicios del | ||
| 11749 | sistema típicamente son daemon lanzados cuando el sistema arrancha, u otras | ||
| 11750 | acciones necesarias en ese momento---por ejemplo, configurar el acceso de | ||
| 11751 | red. | ||
| 11752 | |||
| 11753 | Guix has a broad definition of ``service'' (@pxref{Composición de servicios}), | ||
| 11754 | but many services are managed by the GNU@tie{}Shepherd (@pxref{Servicios de Shepherd}). On a running system, the @command{herd} command allows you to | ||
| 11755 | list the available services, show their status, start and stop them, or do | ||
| 11756 | other specific operations (@pxref{Jump Start,,, shepherd, The GNU Shepherd | ||
| 11757 | Manual}). For example: | ||
| 11758 | |||
| 11759 | @example | ||
| 11760 | # herd status | ||
| 11761 | @end example | ||
| 11762 | |||
| 11763 | La orden previa, ejecutada como @code{root}, enumera los servicios | ||
| 11764 | actualmente definidos. La orden @command{herd doc} muestra una sinopsis del | ||
| 11765 | servicio proporcionado y sus acciones asociadas: | ||
| 11766 | |||
| 11767 | @example | ||
| 11768 | # herd doc nscd | ||
| 11769 | Run libc's name service cache daemon (nscd). | ||
| 11770 | |||
| 11771 | # herd doc nscd action invalidate | ||
| 11772 | invalidate: Invalidate the given cache--e.g., 'hosts' for host name lookups. | ||
| 11773 | @end example | ||
| 11774 | |||
| 11775 | Las ordenes internas @command{start}, @command{stop} y @command{restart} | ||
| 11776 | tienen el efecto de arrancar, parar y reiniciar el servicio, | ||
| 11777 | respectivamente. Por ejemplo, las siguientes órdenes paran el servicio nscd | ||
| 11778 | y reinician el servidor gráfico Xorg: | ||
| 11779 | |||
| 11780 | @example | ||
| 11781 | # herd stop nscd | ||
| 11782 | Service nscd has been stopped. | ||
| 11783 | # herd restart xorg-server | ||
| 11784 | Service xorg-server has been stopped. | ||
| 11785 | Service xorg-server has been started. | ||
| 11786 | @end example | ||
| 11787 | |||
| 11788 | Las siguientes secciones documentan los servicios disponibles, comenzando | ||
| 11789 | con 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 | |||
| 11827 | El módulo @code{(gnu services base)} proporciona definiciones para los | ||
| 11828 | servicios básicos que se esperan en el sistema. Los servicios exportados por | ||
| 11829 | este módulo se enumeran a continuación. | ||
| 11830 | |||
| 11831 | @defvr {Variable Scheme} %base-services | ||
| 11832 | Esta 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 | ||
| 11833 | pueden esperar en el sistema: un servicio de ingreso al sistema (mingetty) | ||
| 11834 | en cada tty, syslogd, el daemon de la caché del servicio de nombres (nscd), | ||
| 11835 | el gestor de dispositivos udev, y más. | ||
| 11836 | |||
| 11837 | Este es el valor predeterminado del campo @code{services} de las | ||
| 11838 | declaraciones @code{operating-system}. De manera habitual, cuando se | ||
| 11839 | personaliza 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 | ||
| 11850 | El servicio que establece ``ficheros especiales'' como @file{/bin/sh}; una | ||
| 11851 | instancia suya es parte de @code{%base-services}. | ||
| 11852 | |||
| 11853 | El valor asociado con servicios @code{special-file-service-type} debe ser | ||
| 11854 | una lista de tuplas donde el primer elemento es el ``fichero especial'' y el | ||
| 11855 | segundo 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} | ||
| 11865 | Si quiere añadir, digamos, @code{/usr/bin/env} a su sistema, puede cambiar | ||
| 11866 | su 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 | |||
| 11873 | Ya que es parte de @code{%base-services}, puede usar @code{modify-services} | ||
| 11874 | para personalizar el conjunto de ficheros especiales (@pxref{Referencia de servicios, @code{modify-services}}). Pero una forma simple de añadir un | ||
| 11875 | fichero especial es usar el procedimiento @code{extra-special-file} (véase a | ||
| 11876 | continuación). | ||
| 11877 | @end defvr | ||
| 11878 | |||
| 11879 | @deffn {Procedimiento Scheme} extra-special-file @var{fichero} @var{destino} | ||
| 11880 | Usa @var{destino} como el ``fichero especial'' @var{fichero}. | ||
| 11881 | |||
| 11882 | Por ejemplo, la adición de las siguientes líneas al campo @code{services} de | ||
| 11883 | su declaración de sistema operativo genera @file{/usr/bin/env} como un | ||
| 11884 | enlace 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} | ||
| 11893 | Devuelve un servicio que establece el nombre de máquina a @var{nombre}. | ||
| 11894 | @end deffn | ||
| 11895 | |||
| 11896 | @deffn {Procedimiento Scheme} login-service @var{config} | ||
| 11897 | Devuelve un servicio para ejecutar el ingreso al sistema de acuerdo con | ||
| 11898 | @var{config}, un objeto @code{<login-configuration>}, que especifica el | ||
| 11899 | mensaje del día, entre otras cosas. | ||
| 11900 | @end deffn | ||
| 11901 | |||
| 11902 | @deftp {Tipo de datos} login-configuration | ||
| 11903 | Este es el tipo de datos que representa la configuración del ingreso al | ||
| 11904 | sistema. | ||
| 11905 | |||
| 11906 | @table @asis | ||
| 11907 | |||
| 11908 | @item @code{motd} | ||
| 11909 | @cindex mensaje del día | ||
| 11910 | Un objeto tipo-fichero que contiene el ``mensaje del día''. | ||
| 11911 | |||
| 11912 | @item @code{allow-empty-passwords?} (predeterminado: @code{#t}) | ||
| 11913 | Permite contraseñas vacías por defecto para que las primeras usuarias puedan | ||
| 11914 | ingresar 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} | ||
| 11920 | Devuelve un servicio para ejecutar mingetty de acuerdo con @var{config}, un | ||
| 11921 | objeto @code{<mingetty-configuration>}, que especifica el tty a ejecutar | ||
| 11922 | entre otras cosas. | ||
| 11923 | @end deffn | ||
| 11924 | |||
| 11925 | @deftp {Tipo de datos} mingetty-configuration | ||
| 11926 | Este es el tipo de datos que representa la configuración de Mingetty, el | ||
| 11927 | cual proporciona la implementación predeterminada de ingreso al sistema en | ||
| 11928 | las consolas virtuales. | ||
| 11929 | |||
| 11930 | @table @asis | ||
| 11931 | |||
| 11932 | @item @code{tty} | ||
| 11933 | El 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}) | ||
| 11937 | Cuando sea verdadero, este campo debe ser una cadena que denote el nombre de | ||
| 11938 | usuaria 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 | ||
| 11940 | ingresar en el sistema. | ||
| 11941 | |||
| 11942 | @item @code{login-program} (predeterminado: @code{#f}) | ||
| 11943 | Debe ser @code{#f}, en cuyo caso se usa el programa predeterminado de | ||
| 11944 | ingreso al sistema (@command{login} de las herramientas Shadow), o una | ||
| 11945 | expresión-G que determine el nombre del programa de ingreso al sistema. | ||
| 11946 | |||
| 11947 | @item @code{login-pause?} (predeterminado: @code{#f}) | ||
| 11948 | Cuando es @code{#t} en conjunción con @var{auto-login}, la usuaria deberá | ||
| 11949 | presionar una tecla para lanzar el shell de ingreso al sistema. | ||
| 11950 | |||
| 11951 | @item @code{mingetty} (predeterminado: @var{mingetty}) | ||
| 11952 | El paquete Mingetty usado. | ||
| 11953 | |||
| 11954 | @end table | ||
| 11955 | @end deftp | ||
| 11956 | |||
| 11957 | @deffn {Procedure Scheme} agetty-service @var{config} | ||
| 11958 | Devuelve un servicio para ejecutar agetty de acuerdo con @var{config}, un | ||
| 11959 | objeto @code{<agetty-configuration>}, que especifica el tty a ejecutar entre | ||
| 11960 | otras cosas.< | ||
| 11961 | @end deffn | ||
| 11962 | |||
| 11963 | @deftp {Tipo de datos} agetty-configuration | ||
| 11964 | Este es el tipo de datos que representa la configuración de agetty, que | ||
| 11965 | implementa el ingreso al sistema en las consolas virtuales y serie. Véase la | ||
| 11966 | página de manual @code{agetty(8)} para más información. | ||
| 11967 | |||
| 11968 | @table @asis | ||
| 11969 | |||
| 11970 | @item @code{tty} | ||
| 11971 | The 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 | ||
| 11973 | default serial port used by the kernel Linux. | ||
| 11974 | |||
| 11975 | For this, if there is a value for an option @code{agetty.tty} in the kernel | ||
| 11976 | command line, agetty will extract the device name of the serial port from it | ||
| 11977 | and use that. | ||
| 11978 | |||
| 11979 | If not and if there is a value for an option @code{console} with a tty in | ||
| 11980 | the Linux command line, agetty will extract the device name of the serial | ||
| 11981 | port from it and use that. | ||
| 11982 | |||
| 11983 | In both cases, agetty will leave the other serial device settings (baud rate | ||
| 11984 | etc.)@: alone---in the hope that Linux pinned them to the correct values. | ||
| 11985 | |||
| 11986 | @item @code{baud-rate} (predeterminado: @code{#f}) | ||
| 11987 | A string containing a comma-separated list of one or more baud rates, in | ||
| 11988 | descending order. | ||
| 11989 | |||
| 11990 | @item @code{term} (predeterminado: @code{#f}) | ||
| 11991 | A string containing the value used for the @code{TERM} environment variable. | ||
| 11992 | |||
| 11993 | @item @code{eight-bits?} (predeterminado: @code{#f}) | ||
| 11994 | When @code{#t}, the tty is assumed to be 8-bit clean, and parity detection | ||
| 11995 | is disabled. | ||
| 11996 | |||
| 11997 | @item @code{auto-login} (predeterminado: @code{#f}) | ||
| 11998 | When passed a login name, as a string, the specified user will be logged in | ||
| 11999 | automatically without prompting for their login name or password. | ||
| 12000 | |||
| 12001 | @item @code{no-reset?} (predeterminado: @code{#f}) | ||
| 12002 | When @code{#t}, don't reset terminal cflags (control modes). | ||
| 12003 | |||
| 12004 | @item @code{host} (predeterminado: @code{#f}) | ||
| 12005 | This accepts a string containing the "login_host", which will be written | ||
| 12006 | into the @file{/var/run/utmpx} file. | ||
| 12007 | |||
| 12008 | @item @code{remote?} (predeterminado: @code{#f}) | ||
| 12009 | When 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 | ||
| 12011 | in @var{login-program}. | ||
| 12012 | |||
| 12013 | @item @code{flow-control?} (predeterminado: @code{#f}) | ||
| 12014 | When set to @code{#t}, enable hardware (RTS/CTS) flow control. | ||
| 12015 | |||
| 12016 | @item @code{no-issue?} (predeterminado: @code{#f}) | ||
| 12017 | When set to @code{#t}, the contents of the @file{/etc/issue} file will not | ||
| 12018 | be displayed before presenting the login prompt. | ||
| 12019 | |||
| 12020 | @item @code{init-string} (predeterminada: @code{#f}) | ||
| 12021 | This accepts a string that will be sent to the tty or modem before sending | ||
| 12022 | anything else. It can be used to initialize a modem. | ||
| 12023 | |||
| 12024 | @item @code{no-clear?} (predeterminado: @code{#f}) | ||
| 12025 | When set to @code{#t}, agetty will not clear the screen before showing the | ||
| 12026 | login prompt. | ||
| 12027 | |||
| 12028 | @item @code{login-program} (predeterminado: (file-append shadow "/bin/login")) | ||
| 12029 | This must be either a gexp denoting the name of a log-in program, or unset, | ||
| 12030 | in which case the default value is the @command{login} from the Shadow tool | ||
| 12031 | suite. | ||
| 12032 | |||
| 12033 | @item @code{local-line} (predeterminado: @code{#f}) | ||
| 12034 | Control the CLOCAL line flag. This accepts one of three symbols as | ||
| 12035 | arguments, @code{'auto}, @code{'always}, or @code{'never}. If @code{#f}, the | ||
| 12036 | default value chosen by agetty is @code{'auto}. | ||
| 12037 | |||
| 12038 | @item @code{extract-baud?} (predeterminado: @code{#f}) | ||
| 12039 | When set to @code{#t}, instruct agetty to try to extract the baud rate from | ||
| 12040 | the status messages produced by certain types of modems. | ||
| 12041 | |||
| 12042 | @item @code{skip-login?} (predeterminado: @code{#f}) | ||
| 12043 | When set to @code{#t}, do not prompt the user for a login name. This can be | ||
| 12044 | used with @var{login-program} field to use non-standard login systems. | ||
| 12045 | |||
| 12046 | @item @code{no-newline?} (predeterminado: @code{#f}) | ||
| 12047 | When 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}) | ||
| 12052 | This option accepts a string containing options that are passed to the login | ||
| 12053 | program. When used with the @var{login-program}, be aware that a malicious | ||
| 12054 | user could try to enter a login name containing embedded options that could | ||
| 12055 | be parsed by the login program. | ||
| 12056 | |||
| 12057 | @item @code{login-pause} (predeterminada: @code{#f}) | ||
| 12058 | When set to @code{#t}, wait for any key before showing the login prompt. | ||
| 12059 | This can be used in conjunction with @var{auto-login} to save memory by | ||
| 12060 | lazily spawning shells. | ||
| 12061 | |||
| 12062 | @item @code{chroot} (predeterminado: @code{#f}) | ||
| 12063 | Change root to the specified directory. This option accepts a directory | ||
| 12064 | path as a string. | ||
| 12065 | |||
| 12066 | @item @code{hangup?} (predeterminado: @code{#f}) | ||
| 12067 | Use the Linux system call @code{vhangup} to do a virtual hangup of the | ||
| 12068 | specified terminal. | ||
| 12069 | |||
| 12070 | @item @code{keep-baud?} (predeterminado: @code{#f}) | ||
| 12071 | When set to @code{#t}, try to keep the existing baud rate. The baud rates | ||
| 12072 | from @var{baud-rate} are used when agetty receives a @key{BREAK} character. | ||
| 12073 | |||
| 12074 | @item @code{timeout} (predeterminado: @code{#f}) | ||
| 12075 | When 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}) | ||
| 12079 | When set to @code{#t}, turn on support for detecting an uppercase-only | ||
| 12080 | terminal. This setting will detect a login name containing only uppercase | ||
| 12081 | letters as indicating an uppercase-only terminal and turn on some | ||
| 12082 | upper-to-lower case conversions. Note that this will not support Unicode | ||
| 12083 | characters. | ||
| 12084 | |||
| 12085 | @item @code{wait-cr?} (predeterminado: @code{#f}) | ||
| 12086 | When set to @code{#t}, wait for the user or modem to send a carriage-return | ||
| 12087 | or linefeed character before displaying @file{/etc/issue} or login prompt. | ||
| 12088 | This is typically used with the @var{init-string} option. | ||
| 12089 | |||
| 12090 | @item @code{no-hints?} (predeterminado: @code{#f}) | ||
| 12091 | When set to @code{#t}, do not print hints about Num, Caps, and Scroll locks. | ||
| 12092 | |||
| 12093 | @item @code{no-hostname?} (predeterminado: @code{#f}) | ||
| 12094 | By default, the hostname is printed. When this option is set to @code{#t}, | ||
| 12095 | no hostname will be shown at all. | ||
| 12096 | |||
| 12097 | @item @code{long-hostname?} (predeterminado: @code{#f}) | ||
| 12098 | By default, the hostname is only printed until the first dot. When this | ||
| 12099 | option 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}) | ||
| 12103 | This option accepts a string of additional characters that should be | ||
| 12104 | interpreted as backspace when the user types their login name. | ||
| 12105 | |||
| 12106 | @item @code{kill-characters} (predeterminado: @code{#f}) | ||
| 12107 | This option accepts a string that should be interpreted to mean "ignore all | ||
| 12108 | previous characters" (also called a "kill" character) when the types their | ||
| 12109 | login name. | ||
| 12110 | |||
| 12111 | @item @code{chdir} (predeterminado: @code{#f}) | ||
| 12112 | This option accepts, as a string, a directory path that will be changed to | ||
| 12113 | before login. | ||
| 12114 | |||
| 12115 | @item @code{delay} (predeterminado: @code{#f}) | ||
| 12116 | This options accepts, as an integer, the number of seconds to sleep before | ||
| 12117 | opening the tty and displaying the login prompt. | ||
| 12118 | |||
| 12119 | @item @code{nice} (predeterminado: @code{#f}) | ||
| 12120 | This 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{'()}) | ||
| 12124 | This option provides an "escape hatch" for the user to provide arbitrary | ||
| 12125 | command-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} | ||
| 12131 | Return 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 | ||
| 12134 | tty to run, among other things. | ||
| 12135 | @end deffn | ||
| 12136 | |||
| 12137 | @deftp {Tipo de datos} kmscon-configuration | ||
| 12138 | Este es el tipo de datos que representa la configuración de Kmscon, que | ||
| 12139 | implementa el ingreso al sistema en consolas virtuales. | ||
| 12140 | |||
| 12141 | @table @asis | ||
| 12142 | |||
| 12143 | @item @code{virtual-terminal} | ||
| 12144 | El 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")}) | ||
| 12148 | A gexp denoting the name of the log-in program. The default log-in program | ||
| 12149 | is @command{login} from the Shadow tool suite. | ||
| 12150 | |||
| 12151 | @item @code{login-arguments} (predeterminados: @code{'("-p")}) | ||
| 12152 | A list of arguments to pass to @command{login}. | ||
| 12153 | |||
| 12154 | @item @code{auto-login} (predeterminado: @code{#f}) | ||
| 12155 | When passed a login name, as a string, the specified user will be logged in | ||
| 12156 | automatically without prompting for their login name or password. | ||
| 12157 | |||
| 12158 | @item @code{hardware-acceleration?} (predeterminado: #f) | ||
| 12159 | Determina si se usará aceleración hardware. | ||
| 12160 | |||
| 12161 | @item @code{kmscon} (predeterminado: @var{kmscon}) | ||
| 12162 | El 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 '()] | ||
| 12171 | Devuelve un servicio que ejecuta el daemon de la caché del servicio de | ||
| 12172 | nombres (nscd) con la @var{configuración} proporcionada---un objeto | ||
| 12173 | @code{<nscd-configuration>}. @xref{Selector de servicios de nombres}, para un ejemplo. | ||
| 12174 | |||
| 12175 | Por conveniencia, el servicio ncsd de Shepherd proporciona las siguientes | ||
| 12176 | acciones: | ||
| 12177 | |||
| 12178 | @table @code | ||
| 12179 | @item invalidate | ||
| 12180 | @cindex invalidación de caché, nscd | ||
| 12181 | @cindex nscd, invalidación de caché | ||
| 12182 | Esto invalida la caché dada. Por ejemplo, ejecutar: | ||
| 12183 | |||
| 12184 | @example | ||
| 12185 | herd invalidate nscd hosts | ||
| 12186 | @end example | ||
| 12187 | |||
| 12188 | @noindent | ||
| 12189 | invalida la caché de búsqueda de nombres de máquinas de nscd. | ||
| 12190 | |||
| 12191 | @item statistics | ||
| 12192 | Ejecutar @command{herd statistics nscd} muestra información del uso nscd y | ||
| 12193 | la caché. | ||
| 12194 | @end table | ||
| 12195 | |||
| 12196 | @end deffn | ||
| 12197 | |||
| 12198 | @defvr {Variable Scheme} %nscd-default-configuration | ||
| 12199 | This 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 | ||
| 12205 | Este tipo de datos representa la configuración del daemon de caché del | ||
| 12206 | servicio de nombres (nscd). | ||
| 12207 | |||
| 12208 | @table @asis | ||
| 12209 | |||
| 12210 | @item @code{name-services} (predeterminados: @code{'()}) | ||
| 12211 | List of packages denoting @dfn{name services} that must be visible to the | ||
| 12212 | nscd---e.g., @code{(list @var{nss-mdns})}. | ||
| 12213 | |||
| 12214 | @item @code{glibc} (predeterminada: @var{glibc}) | ||
| 12215 | Package object denoting the GNU C Library providing the @command{nscd} | ||
| 12216 | command. | ||
| 12217 | |||
| 12218 | @item @code{log-file} (predeterminado: @code{"/var/log/nscd.log"}) | ||
| 12219 | Name 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}) | ||
| 12223 | Integer denoting the debugging levels. Higher numbers mean that more | ||
| 12224 | debugging output is logged. | ||
| 12225 | |||
| 12226 | @item @code{caches} (predeterminadas: @var{%nscd-default-caches}) | ||
| 12227 | List 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 | ||
| 12233 | Tipo de datos que representa una base de datos de caché de nscd y sus | ||
| 12234 | parámetros. | ||
| 12235 | |||
| 12236 | @table @asis | ||
| 12237 | |||
| 12238 | @item @code{base de datos} | ||
| 12239 | This is a symbol representing the name of the database to be cached. Valid | ||
| 12240 | values are @code{passwd}, @code{group}, @code{hosts}, and @code{services}, | ||
| 12241 | which designate the corresponding NSS database (@pxref{NSS Basics,,, libc, | ||
| 12242 | The GNU C Library Reference Manual}). | ||
| 12243 | |||
| 12244 | @item @code{positive-time-to-live} | ||
| 12245 | @itemx @code{negative-time-to-live} (predeterminado: @code{20}) | ||
| 12246 | A number representing the number of seconds during which a positive or | ||
| 12247 | negative lookup result remains in cache. | ||
| 12248 | |||
| 12249 | @item @code{check-files?} (predeterminado: @code{#t}) | ||
| 12250 | Whether to check for updates of the files corresponding to @var{database}. | ||
| 12251 | |||
| 12252 | For instance, when @var{database} is @code{hosts}, setting this flag | ||
| 12253 | instructs nscd to check for updates in @file{/etc/hosts} and to take them | ||
| 12254 | into account. | ||
| 12255 | |||
| 12256 | @item @code{persistent?} (predeterminada: @code{#t}) | ||
| 12257 | Whether the cache should be stored persistently on disk. | ||
| 12258 | |||
| 12259 | @item @code{shared?} (predeterminado: @code{#t}) | ||
| 12260 | Whether the cache should be shared among users. | ||
| 12261 | |||
| 12262 | @item @code{max-database-size} (predeterminado: 32@tie{}MiB) | ||
| 12263 | Maximum 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 | ||
| 12272 | List of @code{<nscd-cache>} objects used by default by | ||
| 12273 | @code{nscd-configuration} (see above). | ||
| 12274 | |||
| 12275 | It enables persistent and aggressive caching of service and host name | ||
| 12276 | lookups. The latter provides better host name lookup performance, | ||
| 12277 | resilience in the face of unreliable name servers, and also better | ||
| 12278 | privacy---often the result of host name lookups is in local cache, so | ||
| 12279 | external 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 | ||
| 12286 | Este 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")}) | ||
| 12290 | El daemon syslog usado. | ||
| 12291 | |||
| 12292 | @item @code{config-file} (predeterminado: @code{%default-syslog.conf}) | ||
| 12293 | El 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} | ||
| 12301 | Return a service that runs a syslog daemon according to @var{config}. | ||
| 12302 | |||
| 12303 | @xref{syslogd invocation,,, inetutils, GNU Inetutils}, para más información | ||
| 12304 | sobre la sintaxis del fichero de configuración. | ||
| 12305 | @end deffn | ||
| 12306 | |||
| 12307 | @defvr {Variable Scheme} guix-service-type | ||
| 12308 | This 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 | ||
| 12315 | This 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}) | ||
| 12320 | El paquete Guix usado. | ||
| 12321 | |||
| 12322 | @item @code{build-group} (predeterminado: @code{"guixbuild"}) | ||
| 12323 | El nombre del grupo de las cuentas de usuarias de construcción. | ||
| 12324 | |||
| 12325 | @item @code{build-accounts} (predeterminadas: @code{10}) | ||
| 12326 | Nú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 | ||
| 12330 | Determina 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}) | ||
| 12336 | La lista de ficheros de claves autorizadas para importaciones de archivos, | ||
| 12337 | como 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}) | ||
| 12341 | Determina si se usarán sustituciones. | ||
| 12342 | |||
| 12343 | @item @code{substitute-urls} (predeterminado: @var{%default-substitute-urls}) | ||
| 12344 | La 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}) | ||
| 12348 | The number of seconds of silence and the number of seconds of activity, | ||
| 12349 | respectively, after which a build process times out. A value of zero | ||
| 12350 | disables the timeout. | ||
| 12351 | |||
| 12352 | @item @code{log-compression} (predeterminado: @code{'bzip2}) | ||
| 12353 | El tipo de compresión usado en los log de construcción---o bien @code{gzip}, | ||
| 12354 | o bien @code{bzip2} o @code{none}. | ||
| 12355 | |||
| 12356 | @item @code{extra-options} (predeterminadas: @code{'()}) | ||
| 12357 | Lista 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"}) | ||
| 12361 | Fichero al que se escriben la salida estándar y la salida estándar de error | ||
| 12362 | de @command{guix-daemon}. | ||
| 12363 | |||
| 12364 | @item @code{http-proxy} (predeterminado: @code{#f}) | ||
| 12365 | El proxy HTTP que se usa para la descarga de derivaciones de salida fija y | ||
| 12366 | sustituciones. | ||
| 12367 | |||
| 12368 | @item @code{tmpdir} (predeterminado: @code{#f}) | ||
| 12369 | Una ruta de directorio donde @command{guix-daemon} realiza las | ||
| 12370 | construcciones. | ||
| 12371 | |||
| 12372 | @end table | ||
| 12373 | @end deftp | ||
| 12374 | |||
| 12375 | @deffn {Procedimiento Scheme} udev-service [#:udev @var{eudev} #:rules @code{'()}] | ||
| 12376 | Run @var{udev}, which populates the @file{/dev} directory dynamically. udev | ||
| 12377 | rules can be provided as a list of files through the @var{rules} variable. | ||
| 12378 | The procedures @var{udev-rule} and @var{file->udev-rule} from @code{(gnu | ||
| 12379 | services base)} simplify the creation of such rule files. | ||
| 12380 | @end deffn | ||
| 12381 | |||
| 12382 | @deffn {Procedimiento Scheme} udev-rule [@var{nombre-fichero} @var{contenido}] | ||
| 12383 | Devuelve un fichero de reglas de udev con nombre @var{nombre-fichero} que | ||
| 12384 | contiene las reglas definidas en el literal @var{contenido}. | ||
| 12385 | |||
| 12386 | En el ejemplo siguiente se define una regla para un dispositivo USB que será | ||
| 12387 | almacenada en el fichero @file{90-usb-cosa.rules}. Esta regla ejecuta un | ||
| 12388 | script cuando se detecta un dispositivo USB con un identificador de producto | ||
| 12389 | dado. | ||
| 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 | |||
| 12400 | The @command{herd rules udev} command, as root, returns the name of the | ||
| 12401 | directory containing all the active udev rules. | ||
| 12402 | @end deffn | ||
| 12403 | |||
| 12404 | Here 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}] | ||
| 12418 | Devuelve un fichero de udev con nombre @var{nombre-fichero} que contiene las | ||
| 12419 | reglas definidas en @var{fichero}, un objeto tipo-fichero. | ||
| 12420 | |||
| 12421 | El ejemplo siguiente muestra cómo podemos usar un fichero de reglas | ||
| 12422 | existente. | ||
| 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 | |||
| 12442 | Adicionalmente, las definiciones de paquete Gui pueden ser incluidas en | ||
| 12443 | @var{rules} para extender las reglas udev con las definiciones encontradas | ||
| 12444 | bajo 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 | ||
| 12447 | android)}. | ||
| 12448 | |||
| 12449 | El siguiente ejemplo muestra cómo usar el paquete @var{android-udev-rules} | ||
| 12450 | para que la herramienta de Android @command{adb} pueda detectar dispositivos | ||
| 12451 | sin privilegios de root. También detalla como crear el grupo | ||
| 12452 | @code{adbusers}, el cual se requiere para el funcionamiento correcto de las | ||
| 12453 | reglas definidas dentro del paquete @var{android-udev-rules}. Para crear tal | ||
| 12454 | grupo, debemos definirlo tanto como parte de @var{supplementary-groups} de | ||
| 12455 | la declaración de nuestra cuenta de usuaria @var{user-account}, así como en | ||
| 12456 | el 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 | ||
| 12487 | Save some entropy in @var{%random-seed-file} to seed @file{/dev/urandom} | ||
| 12488 | when rebooting. It also tries to seed @file{/dev/urandom} from | ||
| 12489 | @file{/dev/hwrng} while booting, if @file{/dev/hwrng} exists and is | ||
| 12490 | readable. | ||
| 12491 | @end defvr | ||
| 12492 | |||
| 12493 | @defvr {Variable Scheme} %random-seed-file | ||
| 12494 | This 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 | ||
| 12496 | defaults to @file{/var/lib/random-seed}. | ||
| 12497 | @end defvr | ||
| 12498 | |||
| 12499 | @cindex ratón | ||
| 12500 | @cindex gpm | ||
| 12501 | @defvr {Variable Scheme} gpm-service-type | ||
| 12502 | This is the type of the service that runs GPM, the @dfn{general-purpose | ||
| 12503 | mouse daemon}, which provides mouse support to the Linux console. GPM | ||
| 12504 | allows users to use the mouse in the console, notably to select, copy, and | ||
| 12505 | paste text. | ||
| 12506 | |||
| 12507 | The value for services of this type must be a @code{gpm-configuration} (see | ||
| 12508 | below). This service is not part of @var{%base-services}. | ||
| 12509 | @end defvr | ||
| 12510 | |||
| 12511 | @deftp {Tipo de datos} gpm-configuration | ||
| 12512 | Tipo de datos que representa la configuración de GPM. | ||
| 12513 | |||
| 12514 | @table @asis | ||
| 12515 | @item @code{opciones} (predeterminadas: @code{%default-gpm-options}) | ||
| 12516 | Command-line options passed to @command{gpm}. The default set of options | ||
| 12517 | instruct @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}) | ||
| 12521 | El 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 | ||
| 12528 | This is the service type for @command{guix publish} (@pxref{Invocación de guix publish}). Its value must be a @code{guix-configuration} object, as | ||
| 12529 | described below. | ||
| 12530 | |||
| 12531 | This assumes that @file{/etc/guix} already contains a signing key pair as | ||
| 12532 | created 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 | ||
| 12536 | Tipo de datos que representa la configuración del servicio @code{guix | ||
| 12537 | publish}. | ||
| 12538 | |||
| 12539 | @table @asis | ||
| 12540 | @item @code{guix} (predeterminado: @code{guix}) | ||
| 12541 | El paquete Guix usado. | ||
| 12542 | |||
| 12543 | @item @code{port} (predeterminado: @code{80}) | ||
| 12544 | El puerto TCP en el que se esperan conexiones. | ||
| 12545 | |||
| 12546 | @item @code{host} (predeterminado: @code{"localhost"}) | ||
| 12547 | The host (and thus, network interface) to listen to. Use @code{"0.0.0.0"} | ||
| 12548 | to listen on all the network interfaces. | ||
| 12549 | |||
| 12550 | @item @code{compression-level} (predeterminado: @code{3}) | ||
| 12551 | The gzip compression level at which substitutes are compressed. Use | ||
| 12552 | @code{0} to disable compression altogether, and @code{9} to get the best | ||
| 12553 | compression ratio at the expense of increased CPU usage. | ||
| 12554 | |||
| 12555 | @item @code{nar-path} (predeterminado: @code{"nar"}) | ||
| 12556 | The 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}) | ||
| 12560 | When it is @code{#f}, disable caching and instead generate archives on | ||
| 12561 | demand. Otherwise, this should be the name of a directory---e.g., | ||
| 12562 | @code{"/var/cache/guix/publish"}---where @command{guix publish} caches | ||
| 12563 | archives 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}) | ||
| 12567 | When it is an integer, this is the number of worker threads used for | ||
| 12568 | caching; 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}) | ||
| 12571 | When it is an integer, this denotes the @dfn{time-to-live} in seconds of the | ||
| 12572 | published archives. @xref{Invocación de guix publish, @option{--ttl}}, for more | ||
| 12573 | information. | ||
| 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} | ||
| 12580 | program from @var{rng-tools} to add @var{device} to the kernel's entropy | ||
| 12581 | pool. 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 | |||
| 12592 | Return 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} | ||
| 12596 | limits and nice priority limits to user sessions. | ||
| 12597 | |||
| 12598 | The following limits definition sets two hard and soft limits for all login | ||
| 12599 | sessions 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 | |||
| 12608 | The first entry increases the maximum realtime priority for non-privileged | ||
| 12609 | processes; the second entry lifts any restriction of the maximum address | ||
| 12610 | space that can be locked in memory. These settings are commonly used for | ||
| 12611 | real-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 | ||
| 12620 | The @code{(gnu services mcron)} module provides an interface to | ||
| 12621 | GNU@tie{}mcron, a daemon to run jobs at scheduled times (@pxref{Top,,, | ||
| 12622 | mcron, 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 | ||
| 12624 | Guile Scheme, which provides a lot of flexibility when specifying the | ||
| 12625 | scheduling of jobs and their actions. | ||
| 12626 | |||
| 12627 | The example below defines an operating system that runs the | ||
| 12628 | @command{updatedb} (@pxref{Invoking updatedb,,, find, Finding Files}) and | ||
| 12629 | the @command{guix gc} commands (@pxref{Invocación de guix gc}) daily, as well as | ||
| 12630 | the @command{mkid} command on behalf of an unprivileged user (@pxref{mkid | ||
| 12631 | invocation,,, idutils, ID Database Utilities}). It uses gexps to introduce | ||
| 12632 | job 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 | ||
| 12672 | more information on mcron job specifications. Below is the reference of the | ||
| 12673 | mcron service. | ||
| 12674 | |||
| 12675 | On a running system, you can use the @code{schedule} action of the service | ||
| 12676 | to visualize the mcron jobs that will be executed next: | ||
| 12677 | |||
| 12678 | @example | ||
| 12679 | # herd schedule mcron | ||
| 12680 | @end example | ||
| 12681 | |||
| 12682 | @noindent | ||
| 12683 | The example above lists the next five tasks that will be executed, but you | ||
| 12684 | can 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 | ||
| 12691 | This is the type of the @code{mcron} service, whose value is an | ||
| 12692 | @code{mcron-configuration} object. | ||
| 12693 | |||
| 12694 | This service type can be the target of a service extension that provides it | ||
| 12695 | additional job specifications (@pxref{Composición de servicios}). In other | ||
| 12696 | words, it is possible to define services that provide additional mcron jobs | ||
| 12697 | to run. | ||
| 12698 | @end defvr | ||
| 12699 | |||
| 12700 | @deftp {Tipo de datos} mcron-configuration | ||
| 12701 | Tipo de datos que representa la configuración de mcron. | ||
| 12702 | |||
| 12703 | @table @asis | ||
| 12704 | @item @code{mcron} (predeterminado: @var{mcron}) | ||
| 12705 | El paquete mcron usado. | ||
| 12706 | |||
| 12707 | @item @code{jobs} | ||
| 12708 | This is a list of gexps (@pxref{Expresiones-G}), where each gexp corresponds | ||
| 12709 | to an mcron job specification (@pxref{Syntax, mcron job specifications,, | ||
| 12710 | mcron, 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 | ||
| 12721 | Log files such as those found in @file{/var/log} tend to grow endlessly, so | ||
| 12722 | it's a good idea to @dfn{rotate} them once in a while---i.e., archive their | ||
| 12723 | contents in separate files, possibly compressed. The @code{(gnu services | ||
| 12724 | admin)} module provides an interface to GNU@tie{}Rot[t]log, a log rotation | ||
| 12725 | tool (@pxref{Top,,, rottlog, GNU Rot[t]log Manual}). | ||
| 12726 | |||
| 12727 | The example below defines an operating system that provides log rotation | ||
| 12728 | with 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 | ||
| 12742 | This is the type of the Rottlog service, whose value is a | ||
| 12743 | @code{rottlog-configuration} object. | ||
| 12744 | |||
| 12745 | Other services can extend this one with new @code{log-rotation} objects (see | ||
| 12746 | below), thereby augmenting the set of files to be rotated. | ||
| 12747 | |||
| 12748 | This service type can define mcron jobs (@pxref{Ejecución de tareas programadas}) to | ||
| 12749 | run the rottlog service. | ||
| 12750 | @end defvr | ||
| 12751 | |||
| 12752 | @deftp {Tipo de datos} rottlog-configuration | ||
| 12753 | Tipo de datos que representa la configuración de rottlog. | ||
| 12754 | |||
| 12755 | @table @asis | ||
| 12756 | @item @code{rottlog} (predeterminado: @code{rottlog}) | ||
| 12757 | El paquete Rottlog usado. | ||
| 12758 | |||
| 12759 | @item @code{rc-file} (predeterminado: @code{(file-append rottlog "/etc/rc")}) | ||
| 12760 | The Rottlog configuration file to use (@pxref{Mandatory RC Variables,,, | ||
| 12761 | rottlog, GNU Rot[t]log Manual}). | ||
| 12762 | |||
| 12763 | @item @code{rotations} (predeterminadas: @code{%default-rotations}) | ||
| 12764 | A list of @code{log-rotation} objects as defined below. | ||
| 12765 | |||
| 12766 | @item @code{jobs} | ||
| 12767 | This is a list of gexps where each gexp corresponds to an mcron job | ||
| 12768 | specification (@pxref{Ejecución de tareas programadas}). | ||
| 12769 | @end table | ||
| 12770 | @end deftp | ||
| 12771 | |||
| 12772 | @deftp {Tipo de datos} log-rotation | ||
| 12773 | Tipo de datos que representa la rotación de un grupo de ficheros de log. | ||
| 12774 | |||
| 12775 | Taking an example from the Rottlog manual (@pxref{Period Related File | ||
| 12776 | Examples,,, rottlog, GNU Rot[t]log Manual}), a log rotation might be defined | ||
| 12777 | like 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 | |||
| 12789 | La lista de campos es como sigue: | ||
| 12790 | |||
| 12791 | @table @asis | ||
| 12792 | @item @code{frequency} (predeterminada: @code{'weekly}) | ||
| 12793 | La frecuencia de rotación de logs, un símbolo. | ||
| 12794 | |||
| 12795 | @item @code{files} | ||
| 12796 | La lista de ficheros o patrones extendidos de fichero a rotar. | ||
| 12797 | |||
| 12798 | @item @code{options} (predeterminadas: @code{'()}) | ||
| 12799 | The list of rottlog options for this rotation (@pxref{Configuration | ||
| 12800 | parameters,,, rottlog, GNU Rot[t]lg Manual}). | ||
| 12801 | |||
| 12802 | @item @code{post-rotate} (predeterminado: @code{#f}) | ||
| 12803 | Either @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 | ||
| 12808 | Specifies weekly rotation of @var{%rotated-files} and a couple of other | ||
| 12809 | files. | ||
| 12810 | @end defvr | ||
| 12811 | |||
| 12812 | @defvr {Variable Scheme} %rotated-files | ||
| 12813 | The 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 | |||
| 12820 | El módulo @code{(gnu services networking)} proporciona servicios para | ||
| 12821 | configurar la interfaz de red. | ||
| 12822 | |||
| 12823 | @cindex DHCP, servicio de red | ||
| 12824 | @defvr {Variable Scheme} dhcp-client-service-type | ||
| 12825 | This is the type of services that run @var{dhcp}, a Dynamic Host | ||
| 12826 | Configuration Protocol (DHCP) client, on all the non-loopback network | ||
| 12827 | interfaces. Its value is the DHCP client package to use, @code{isc-dhcp} by | ||
| 12828 | default. | ||
| 12829 | @end defvr | ||
| 12830 | |||
| 12831 | @deffn {Procedimiento Scheme} dhcpd-service-type | ||
| 12832 | This type defines a service that runs a DHCP daemon. To create a service of | ||
| 12833 | this 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}) | ||
| 12846 | The package that provides the DHCP daemon. This package is expected to | ||
| 12847 | provide the daemon at @file{sbin/dhcpd} relative to its output directory. | ||
| 12848 | The default package is the @uref{http://www.isc.org/products/DHCP, ISC's | ||
| 12849 | DHCP server}. | ||
| 12850 | @item @code{config-file} (predeterminado: @code{#f}) | ||
| 12851 | The 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'' | ||
| 12853 | object (@pxref{Expresiones-G, file-like objects}). See @code{man | ||
| 12854 | dhcpd.conf} for details on the configuration file syntax. | ||
| 12855 | @item @code{version} (predeterminada: @code{"4"}) | ||
| 12856 | The 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"}) | ||
| 12860 | The run directory to use. At service activation time, this directory will | ||
| 12861 | be created if it does not exist. | ||
| 12862 | @item @code{pid-file} (predeterminado: @code{"/run/dhcpd/dhcpd.pid"}) | ||
| 12863 | The 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{'()}) | ||
| 12866 | The names of the network interfaces on which dhcpd should listen for | ||
| 12867 | broadcasts. If this list is not empty, then its elements (which must be | ||
| 12868 | strings) will be appended to the @code{dhcpd} invocation when starting the | ||
| 12869 | daemon. It may not be necessary to explicitly specify any interfaces here; | ||
| 12870 | see @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. | ||
| 12876 | This 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 | ||
| 12884 | gateway. @var{requirement} can be used to declare a dependency on another | ||
| 12885 | service before configuring the interface. | ||
| 12886 | |||
| 12887 | This procedure can be called several times, one for each network interface | ||
| 12888 | of interest. Behind the scenes what it does is extend | ||
| 12889 | @code{static-networking-service-type} with additional network interfaces to | ||
| 12890 | handle. | ||
| 12891 | |||
| 12892 | Por 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}] | ||
| 12906 | Return a service that runs @url{https://launchpad.net/wicd,Wicd}, a network | ||
| 12907 | management daemon that aims to simplify wired and wireless networking. | ||
| 12908 | |||
| 12909 | This service adds the @var{wicd} package to the global profile, providing | ||
| 12910 | several 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 | ||
| 12918 | This is the service type for the | ||
| 12919 | @uref{https://wiki.gnome.org/Projects/ModemManager, ModemManager} | ||
| 12920 | service. The value for this service type is a | ||
| 12921 | @code{modem-manager-configuration} record. | ||
| 12922 | |||
| 12923 | Este servicio es parte de @code{%desktop-services} (@pxref{Servicios de escritorio}). | ||
| 12924 | @end defvr | ||
| 12925 | |||
| 12926 | @deftp {Tipo de datos} modem-manager-configuration | ||
| 12927 | Tipo de datos que representa la configuración de ModemManager. | ||
| 12928 | |||
| 12929 | @table @asis | ||
| 12930 | @item @code{modem-manager} (predeterminado: @code{modem-manager}) | ||
| 12931 | El paquete de ModemManager usado. | ||
| 12932 | |||
| 12933 | @end table | ||
| 12934 | @end deftp | ||
| 12935 | |||
| 12936 | @cindex NetworkManager | ||
| 12937 | |||
| 12938 | @defvr {Variable Scheme} network-manager-service-type | ||
| 12939 | This is the service type for the | ||
| 12940 | @uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager} | ||
| 12941 | service. The value for this service type is a | ||
| 12942 | @code{network-manager-configuration} record. | ||
| 12943 | |||
| 12944 | Este servicio es parte de @code{%desktop-services} (@pxref{Servicios de escritorio}). | ||
| 12945 | @end defvr | ||
| 12946 | |||
| 12947 | @deftp {Tipo de datos} network-manager-configuration | ||
| 12948 | Tipo de datos que representa la configuración de NetworkManager. | ||
| 12949 | |||
| 12950 | @table @asis | ||
| 12951 | @item @code{network-manager} (predeterminado: @code{network-manager}) | ||
| 12952 | El paquete de NetworkManager usado. | ||
| 12953 | |||
| 12954 | @item @code{dns} (predeterminado: @code{"default"}) | ||
| 12955 | Processing mode for DNS, which affects how NetworkManager uses the | ||
| 12956 | @code{resolv.conf} configuration file. | ||
| 12957 | |||
| 12958 | @table @samp | ||
| 12959 | @item default | ||
| 12960 | NetworkManager will update @code{resolv.conf} to reflect the nameservers | ||
| 12961 | provided by currently active connections. | ||
| 12962 | |||
| 12963 | @item dnsmasq | ||
| 12964 | NetworkManager will run @code{dnsmasq} as a local caching nameserver, using | ||
| 12965 | a "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 | ||
| 12969 | NetworkManager will not modify @code{resolv.conf}. | ||
| 12970 | @end table | ||
| 12971 | |||
| 12972 | @item @code{vpn-plugins} (predeterminados: @code{'()}) | ||
| 12973 | This is the list of available plugins for virtual private networks (VPNs). | ||
| 12974 | An example of this is the @code{network-manager-openvpn} package, which | ||
| 12975 | allows 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 | ||
| 12982 | This is the service type to run @url{https://01.org/connman,Connman}, a | ||
| 12983 | network connection manager. | ||
| 12984 | |||
| 12985 | Its 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 | |||
| 12993 | See below for details about @code{connman-configuration}. | ||
| 12994 | @end deffn | ||
| 12995 | |||
| 12996 | @deftp {Tipo de datos} connman-configuration | ||
| 12997 | Tipo de datos que representa la configuración de connman. | ||
| 12998 | |||
| 12999 | @table @asis | ||
| 13000 | @item @code{connman} (predeterminado: @var{connman}) | ||
| 13001 | El paquete connman usado. | ||
| 13002 | |||
| 13003 | @item @code{disable-vpn?} (predeterminado: @code{#f}) | ||
| 13004 | Cuando 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 | ||
| 13010 | This is the service type to run @url{https://w1.fi/wpa_supplicant/,WPA | ||
| 13011 | supplicant}, an authentication daemon required to authenticate against | ||
| 13012 | encrypted WiFi or ethernet networks. | ||
| 13013 | @end defvr | ||
| 13014 | |||
| 13015 | @deftp {Tipo de datos} wpa-supplicant-configuration | ||
| 13016 | Tipo de datos que representa la configuración de WPA Supplicant. | ||
| 13017 | |||
| 13018 | Toma los siguientes parámetros: | ||
| 13019 | |||
| 13020 | @table @asis | ||
| 13021 | @item @code{wpa-supplicant} (predeterminado: @code{wpa-supplicant}) | ||
| 13022 | El paquete de WPA Supplicant usado. | ||
| 13023 | |||
| 13024 | @item @code{dbus?} (predeterminado: @code{#t}) | ||
| 13025 | Si se escuchan o no peticiones en D-Bus. | ||
| 13026 | |||
| 13027 | @item @code{pid-file} (predeterminado: @code{"/var/run/wpa_supplicant.pid"}) | ||
| 13028 | Dónde se almacena el fichero con el PID. | ||
| 13029 | |||
| 13030 | @item @code{interface} (predeterminado: @code{#f}) | ||
| 13031 | If this is set, it must specify the name of a network interface that WPA | ||
| 13032 | supplicant will control. | ||
| 13033 | |||
| 13034 | @item @code{config-file} (predeterminado: @code{#f}) | ||
| 13035 | Fichero de configuración opcional usado. | ||
| 13036 | |||
| 13037 | @item @code{extra-options} (predeterminadas: @code{'()}) | ||
| 13038 | Lista 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 | ||
| 13044 | This is the service type to set up an iptables configuration. iptables is a | ||
| 13045 | packet filtering framework supported by the Linux kernel. This service | ||
| 13046 | supports configuring iptables for both IPv4 and IPv6. A simple example | ||
| 13047 | configuration rejecting all incoming connections except those to the ssh | ||
| 13048 | port 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 | ||
| 13059 | COMMIT | ||
| 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 | ||
| 13067 | COMMIT | ||
| 13068 | ")))) | ||
| 13069 | @end lisp | ||
| 13070 | @end defvr | ||
| 13071 | |||
| 13072 | @deftp {Tipo de datos} iptables-configuration | ||
| 13073 | El tipo de datos que representa la configuración de iptables. | ||
| 13074 | |||
| 13075 | @table @asis | ||
| 13076 | @item @code{iptables} (predeterminado: @code{iptables}) | ||
| 13077 | The iptables package that provides @code{iptables-restore} and | ||
| 13078 | @code{ip6tables-restore}. | ||
| 13079 | @item @code{ipv4-rules} (predeterminado: @code{%iptables-accept-all-rules}) | ||
| 13080 | The iptables rules to use. It will be passed to @code{iptables-restore}. | ||
| 13081 | This may be any ``file-like'' object (@pxref{Expresiones-G, file-like | ||
| 13082 | objects}). | ||
| 13083 | @item @code{ipv6-rules} (predeterminadas: @code{%iptables-accept-all-rules}) | ||
| 13084 | The ip6tables rules to use. It will be passed to @code{ip6tables-restore}. | ||
| 13085 | This may be any ``file-like'' object (@pxref{Expresiones-G, file-like | ||
| 13086 | objects}). | ||
| 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 | ||
| 13093 | This is the type of the service running the @uref{http://www.ntp.org, | ||
| 13094 | Network Time Protocol (NTP)} daemon, @command{ntpd}. The daemon will keep | ||
| 13095 | the system clock synchronized with that of the specified NTP servers. | ||
| 13096 | |||
| 13097 | The value of this service is an @code{ntpd-configuration} object, as | ||
| 13098 | described below. | ||
| 13099 | @end defvr | ||
| 13100 | |||
| 13101 | @deftp {Tipo de datos} ntp-configuration | ||
| 13102 | Este es el tipo de datos para la configuración del servicio NTP. | ||
| 13103 | |||
| 13104 | @table @asis | ||
| 13105 | @item @code{servers} (predeterminados: @code{%ntp-servers}) | ||
| 13106 | This is the list of servers (host names) with which @command{ntpd} will be | ||
| 13107 | synchronized. | ||
| 13108 | |||
| 13109 | @item @code{allow-large-adjustment?} (predeterminado: @code{#f}) | ||
| 13110 | This determines whether @command{ntpd} is allowed to make an initial | ||
| 13111 | adjustment of more than 1,000 seconds. | ||
| 13112 | |||
| 13113 | @item @code{ntp} (predeterminado: @code{ntp}) | ||
| 13114 | El paquete NTP usado. | ||
| 13115 | @end table | ||
| 13116 | @end deftp | ||
| 13117 | |||
| 13118 | @defvr {Variable Scheme} %ntp-servers | ||
| 13119 | List of host names used as the default NTP servers. These are servers of | ||
| 13120 | the @uref{https://www.ntppool.org/en/, NTP Pool Project}. | ||
| 13121 | @end defvr | ||
| 13122 | |||
| 13123 | @cindex OpenNTPD | ||
| 13124 | @deffn {Procedimiento Scheme} openntpd-service-type | ||
| 13125 | Run the @command{ntpd}, the Network Time Protocol (NTP) daemon, as | ||
| 13126 | implemented by @uref{http://www.openntpd.org, OpenNTPD}. The daemon will | ||
| 13127 | keep 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")}) | ||
| 13145 | El ejecutable openntpd usado. | ||
| 13146 | @item @code{listen-on} (predeterminadas: @code{'("127.0.0.1" "::1")}) | ||
| 13147 | Una lista de direcciones IP o nombres de máquina en los que el daemon ntpd | ||
| 13148 | debe escuchar conexiones. | ||
| 13149 | @item @code{query-from} (predeterminadas: @code{'()}) | ||
| 13150 | Una lista de direcciones IP locales que el daemon ntpd debe usar para | ||
| 13151 | consultas salientes. | ||
| 13152 | @item @code{sensor} (predeterminados: @code{'()}) | ||
| 13153 | Specify a list of timedelta sensor devices ntpd should use. @code{ntpd} | ||
| 13154 | will listen to each sensor that acutally exists and ignore non-existant | ||
| 13155 | ones. See @uref{https://man.openbsd.org/ntpd.conf, upstream documentation} | ||
| 13156 | for more information. | ||
| 13157 | @item @code{server} (predeterminadas: @var{%ntp-servers}) | ||
| 13158 | Specify a list of IP addresses or hostnames of NTP servers to synchronize | ||
| 13159 | to. | ||
| 13160 | @item @code{servers} (predeterminados: @code{'()}) | ||
| 13161 | Specify 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 | ||
| 13164 | via TLS. This time information is not used for precision but acts as an | ||
| 13165 | authenticated constraint, thereby reducing the impact of unauthenticated NTP | ||
| 13166 | man-in-the-middle attacks. Specify a list of URLs, IP addresses or | ||
| 13167 | hostnames of HTTPS servers to provide a constraint. | ||
| 13168 | @item @code{constraints-from} (predeterminadas: @code{'()}) | ||
| 13169 | As with constraint from, specify a list of URLs, IP addresses or hostnames | ||
| 13170 | of HTTPS servers to provide a constraint. Should the hostname resolve to | ||
| 13171 | multiple IP addresses, @code{ntpd} will calculate a median constraint from | ||
| 13172 | all of them. | ||
| 13173 | @item @code{allow-large-adjustment?} (predeterminado: @code{#f}) | ||
| 13174 | Determines if @code{ntpd} is allowed to make an initial adjustment of more | ||
| 13175 | than 180 seconds. | ||
| 13176 | @end table | ||
| 13177 | @end deftp | ||
| 13178 | |||
| 13179 | @cindex inetd | ||
| 13180 | @deffn {Variable Scheme} inetd-service-type | ||
| 13181 | This service runs the @command{inetd} (@pxref{inetd invocation,,, inetutils, | ||
| 13182 | GNU Inetutils}) daemon. @command{inetd} listens for connections on internet | ||
| 13183 | sockets, and lazily starts the specified server program when a connection is | ||
| 13184 | made on one of these sockets. | ||
| 13185 | |||
| 13186 | The value of this service is an @code{inetd-configuration} object. The | ||
| 13187 | following example configures the @command{inetd} daemon to provide the | ||
| 13188 | built-in @command{echo} service, as well as an smtp service which forwards | ||
| 13189 | smtp 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 | |||
| 13216 | See below for more details about @code{inetd-configuration}. | ||
| 13217 | @end deffn | ||
| 13218 | |||
| 13219 | @deftp {Tipo de datos} inetd-configuration | ||
| 13220 | Tipo 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")}) | ||
| 13224 | El ejecutable @command{inetd} usado. | ||
| 13225 | |||
| 13226 | @item @code{entries} (predeterminadas: @code{'()}) | ||
| 13227 | A list of @command{inetd} service entries. Each entry should be created by | ||
| 13228 | the @code{inetd-entry} constructor. | ||
| 13229 | @end table | ||
| 13230 | @end deftp | ||
| 13231 | |||
| 13232 | @deftp {Tipo de datos} inetd-entry | ||
| 13233 | Data type representing an entry in the @command{inetd} configuration. Each | ||
| 13234 | entry corresponds to a socket where @command{inetd} will listen for | ||
| 13235 | requests. | ||
| 13236 | |||
| 13237 | @table @asis | ||
| 13238 | @item @code{node} (predeterminado: @code{#f}) | ||
| 13239 | Optional string, a comma-separated list of local addresses @command{inetd} | ||
| 13240 | should use when listening for this service. @xref{Configuration file,,, | ||
| 13241 | inetutils, GNU Inetutils} for a complete description of all options. | ||
| 13242 | @item @code{name} | ||
| 13243 | A string, the name must correspond to an entry in @code{/etc/services}. | ||
| 13244 | @item @code{socket-type} | ||
| 13245 | One of @code{'stream}, @code{'dgram}, @code{'raw}, @code{'rdm} or | ||
| 13246 | @code{'seqpacket}. | ||
| 13247 | @item @code{protocol} | ||
| 13248 | A string, must correspond to an entry in @code{/etc/protocols}. | ||
| 13249 | @item @code{wait?} (predeterminado: @code{#t}) | ||
| 13250 | Whether @command{inetd} should wait for the server to exit before listening | ||
| 13251 | to new service requests. | ||
| 13252 | @item @code{user} | ||
| 13253 | A string containing the user (and, optionally, group) name of the user as | ||
| 13254 | whom the server should run. The group name can be specified in a suffix, | ||
| 13255 | separated by a colon or period, i.e.@: @code{"user"}, @code{"user:group"} or | ||
| 13256 | @code{"user.group"}. | ||
| 13257 | @item @code{program} (predeterminado: @code{"internal"}) | ||
| 13258 | The 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{'()}) | ||
| 13261 | A list strings or file-like objects, which are the server program's | ||
| 13262 | arguments, starting with the zeroth argument, i.e.@: the name of the program | ||
| 13263 | itself. 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 | ||
| 13268 | discussion of each configuration field. | ||
| 13269 | @end deftp | ||
| 13270 | |||
| 13271 | @cindex Tor | ||
| 13272 | @defvr {Variable Scheme} tor-service-type | ||
| 13273 | This is the type for a service that runs the @uref{https://torproject.org, | ||
| 13274 | Tor} 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}) | ||
| 13283 | The package that provides the Tor daemon. This package is expected to | ||
| 13284 | provide the daemon at @file{bin/tor} relative to its output directory. The | ||
| 13285 | default package is the @uref{https://www.torproject.org, Tor Project's} | ||
| 13286 | implementation. | ||
| 13287 | |||
| 13288 | @item @code{config-file} (predeterminado: @code{(plain-file "empty" "")}) | ||
| 13289 | The configuration file to use. It will be appended to a default | ||
| 13290 | configuration 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 | ||
| 13293 | on the configuration file syntax. | ||
| 13294 | |||
| 13295 | @item @code{hidden-services} (predeterminados: @code{'()}) | ||
| 13296 | The list of @code{<hidden-service>} records to use. For any hidden service | ||
| 13297 | you include in this list, appropriate configuration to enable the hidden | ||
| 13298 | service will be automatically added to the default configuration file. You | ||
| 13299 | may 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}) | ||
| 13303 | The default socket type that Tor should use for its SOCKS socket. This must | ||
| 13304 | be either @code{'tcp} or @code{'unix}. If it is @code{'tcp}, then by | ||
| 13305 | default Tor will listen on TCP port 9050 on the loopback interface (i.e., | ||
| 13306 | localhost). If it is @code{'unix}, then Tor will listen on the UNIX domain | ||
| 13307 | socket @file{/var/run/tor/socks-sock}, which will be made writable by | ||
| 13308 | members of the @code{tor} group. | ||
| 13309 | |||
| 13310 | If 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} | ||
| 13319 | Define 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 | |||
| 13327 | En este ejemplo, el puerto 22 del servicio oculto se asocia con el puerto 22 | ||
| 13328 | local, y el puerto 80 se asocia con el puerto 8080 local. | ||
| 13329 | |||
| 13330 | Esto crea un directorio @file{/var/lib/tor/hidden-services/@var{nombre}}, | ||
| 13331 | donde el fichero @file{hostname} contiene el nombre de máquina @code{.onion} | ||
| 13332 | para el servicio oculto. | ||
| 13333 | |||
| 13334 | Véase @uref{https://www.torproject.org/docs/tor-hidden-service.html.en, la | ||
| 13335 | documentación del proyecto Tor} para más información. | ||
| 13336 | @end deffn | ||
| 13337 | |||
| 13338 | El módulo @code{(gnu services rsync)} proporciona los siguientes servicios: | ||
| 13339 | |||
| 13340 | You might want an rsync daemon if you have files that you want available so | ||
| 13341 | anyone (or just yourself) can download existing files or upload new files. | ||
| 13342 | |||
| 13343 | @deffn {Variable Scheme} rsync-service-type | ||
| 13344 | This 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 | |||
| 13351 | See below for details about @code{rsync-configuration}. | ||
| 13352 | @end deffn | ||
| 13353 | |||
| 13354 | @deftp {Tipo de datos} rsync-configuration | ||
| 13355 | Tipo de datos que representa la configuración para @code{rsync-service}. | ||
| 13356 | |||
| 13357 | @table @asis | ||
| 13358 | @item @code{package} (predeterminado: @var{rsync}) | ||
| 13359 | Paquete @code{rsync} usado. | ||
| 13360 | |||
| 13361 | @item @code{port-number} (predeterminado: @code{873}) | ||
| 13362 | TCP port on which @command{rsync} listens for incoming connections. If port | ||
| 13363 | is 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"}) | ||
| 13367 | Name of the file where @command{rsync} writes its PID. | ||
| 13368 | |||
| 13369 | @item @code{lock-file} (predeterminado: @code{"/var/run/rsyncd/rsyncd.lock"}) | ||
| 13370 | Name of the file where @command{rsync} writes its lock file. | ||
| 13371 | |||
| 13372 | @item @code{log-file} (predeterminado: @code{"/var/log/rsyncd.log"}) | ||
| 13373 | Name of the file where @command{rsync} writes its log file. | ||
| 13374 | |||
| 13375 | @item @code{use-chroot?} (predeterminado: @var{#t}) | ||
| 13376 | Whether to use chroot for @command{rsync} shared directory. | ||
| 13377 | |||
| 13378 | @item @code{share-path} (predeterminado: @file{/srv/rsync}) | ||
| 13379 | Location of the @command{rsync} shared directory. | ||
| 13380 | |||
| 13381 | @item @code{share-comment} (predeterminado: @code{"Rsync share"}) | ||
| 13382 | Comment of the @command{rsync} shared directory. | ||
| 13383 | |||
| 13384 | @item @code{read-only?} (predeterminado: @var{#f}) | ||
| 13385 | Read-write permissions to shared directory. | ||
| 13386 | |||
| 13387 | @item @code{timeout} (predeterminado: @code{300}) | ||
| 13388 | I/O timeout in seconds. | ||
| 13389 | |||
| 13390 | @item @code{user} (predeterminada: @var{"root"}) | ||
| 13391 | Propietaria del proceso @code{rsync}. | ||
| 13392 | |||
| 13393 | @item @code{group} (predeterminado: @var{"root"}) | ||
| 13394 | Grupo del proceso @code{rsync}. | ||
| 13395 | |||
| 13396 | @item @code{uid} (predeterminado: @var{"rsyncd"}) | ||
| 13397 | Nombre o ID de usuaria bajo la cual se efectúan las transferencias desde y | ||
| 13398 | hacia el módulo cuando el daemon se ejecuta como @code{root}. | ||
| 13399 | |||
| 13400 | @item @code{gid} (predeterminado: @var{"rsyncd"}) | ||
| 13401 | Nombre o ID de grupo que se usa cuando se accede al módulo. | ||
| 13402 | |||
| 13403 | @end table | ||
| 13404 | @end deftp | ||
| 13405 | |||
| 13406 | Es 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] | ||
| 13416 | Ejecuta 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 | ||
| 13418 | clave de la máquina, y que sea legible únicamente por root. | ||
| 13419 | |||
| 13420 | When @var{daemonic?} is true, @command{lshd} will detach from the | ||
| 13421 | controlling terminal and log its output to syslogd, unless one sets | ||
| 13422 | @var{syslog-output?} to false. Obviously, it also makes lsh-service depend | ||
| 13423 | on existence of syslogd service. When @var{pid-file?} is true, | ||
| 13424 | @command{lshd} writes its PID to the file called @var{pid-file}. | ||
| 13425 | |||
| 13426 | When @var{initialize?} is true, automatically create the seed and host key | ||
| 13427 | upon service activation if they do not exist yet. This may take long and | ||
| 13428 | require interaction. | ||
| 13429 | |||
| 13430 | When @var{initialize?} is false, it is up to the user to initialize the | ||
| 13431 | randomness generator (@pxref{lsh-make-seed,,, lsh, LSH Manual}), and to | ||
| 13432 | create a key pair with the private key stored in file @var{host-key} | ||
| 13433 | (@pxref{lshd basics,,, lsh, LSH Manual}). | ||
| 13434 | |||
| 13435 | When @var{interfaces} is empty, lshd listens for connections on all the | ||
| 13436 | network interfaces; otherwise, @var{interfaces} must be a list of host names | ||
| 13437 | or addresses. | ||
| 13438 | |||
| 13439 | @var{allow-empty-passwords?} specifies whether to accept log-ins with empty | ||
| 13440 | passwords, and @var{root-login?} specifies whether to accept log-ins as | ||
| 13441 | root. | ||
| 13442 | |||
| 13443 | The other options should be self-descriptive. | ||
| 13444 | @end deffn | ||
| 13445 | |||
| 13446 | @cindex SSH | ||
| 13447 | @cindex servidor SSH | ||
| 13448 | @deffn {Variable Scheme} openssh-service-type | ||
| 13449 | This is the type for the @uref{http://www.openssh.org, OpenSSH} secure shell | ||
| 13450 | daemon, @command{sshd}. Its value must be an @code{openssh-configuration} | ||
| 13451 | record 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 | |||
| 13463 | See below for details about @code{openssh-configuration}. | ||
| 13464 | |||
| 13465 | This 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 | ||
| 13475 | Este 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"}) | ||
| 13479 | Name of the file where @command{sshd} writes its PID. | ||
| 13480 | |||
| 13481 | @item @code{port-number} (predeterminado: @code{22}) | ||
| 13482 | TCP port on which @command{sshd} listens for incoming connections. | ||
| 13483 | |||
| 13484 | @item @code{permit-root-login} (predeterminado: @code{#f}) | ||
| 13485 | This 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 | ||
| 13487 | it's the symbol @code{'without-password}, then root logins are permitted but | ||
| 13488 | not with password-based authentication. | ||
| 13489 | |||
| 13490 | @item @code{allow-empty-passwords?} (predeterminado: @code{#f}) | ||
| 13491 | When true, users with empty passwords may log in. When false, they may not. | ||
| 13492 | |||
| 13493 | @item @code{password-authentication?} (predeterminado: @code{#t}) | ||
| 13494 | When true, users may log in with their password. When false, they have | ||
| 13495 | other authentication methods. | ||
| 13496 | |||
| 13497 | @item @code{public-key-authentication?} (predeterminado: @code{#t}) | ||
| 13498 | When true, users may log in using public key authentication. When false, | ||
| 13499 | users have to use other authentication method. | ||
| 13500 | |||
| 13501 | Authorized public keys are stored in @file{~/.ssh/authorized_keys}. This is | ||
| 13502 | used only by protocol version 2. | ||
| 13503 | |||
| 13504 | @item @code{x11-forwarding?} (predeterminado: @code{#f}) | ||
| 13505 | When true, forwarding of X11 graphical client connections is enabled---in | ||
| 13506 | other words, @command{ssh} options @option{-X} and @option{-Y} will work. | ||
| 13507 | |||
| 13508 | @item @code{allow-agent-forwarding?} (predeterminado: @code{#t}) | ||
| 13509 | Whether to allow agent forwarding. | ||
| 13510 | |||
| 13511 | @item @code{allow-tcp-forwarding?} (predeterminado: @code{#t}) | ||
| 13512 | Whether to allow TCP forwarding. | ||
| 13513 | |||
| 13514 | @item @code{gateway-ports?} (predeterminado: @code{#f}) | ||
| 13515 | Whether to allow gateway ports. | ||
| 13516 | |||
| 13517 | @item @code{challenge-response-authentication?} (predeterminado: @code{#f}) | ||
| 13518 | Specifies whether challenge response authentication is allowed (e.g.@: via | ||
| 13519 | PAM). | ||
| 13520 | |||
| 13521 | @item @code{use-pam?} (predeterminado: @code{#t}) | ||
| 13522 | Enables the Pluggable Authentication Module interface. If set to @code{#t}, | ||
| 13523 | this will enable PAM authentication using | ||
| 13524 | @code{challenge-response-authentication?} and | ||
| 13525 | @code{password-authentication?}, in addition to PAM account and session | ||
| 13526 | module processing for all authentication types. | ||
| 13527 | |||
| 13528 | Because PAM challenge response authentication usually serves an equivalent | ||
| 13529 | role 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}) | ||
| 13534 | Especifica si @command{sshd} debe imprimir la fecha y hora del último | ||
| 13535 | ingreso al sistema de la usuaria cuando una usuaria ingresa | ||
| 13536 | interactivamente. | ||
| 13537 | |||
| 13538 | @item @code{subsystems} (predeterminados: @code{'(("sftp" "internal-sftp"))}) | ||
| 13539 | Configures external subsystems (e.g.@: file transfer daemon). | ||
| 13540 | |||
| 13541 | This is a list of two-element lists, each of which containing the subsystem | ||
| 13542 | name and a command (with optional arguments) to execute upon subsystem | ||
| 13543 | request. | ||
| 13544 | |||
| 13545 | The command @command{internal-sftp} implements an in-process SFTP server. | ||
| 13546 | Alternately, 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{'()}) | ||
| 13555 | List of strings describing which environment variables may be exported. | ||
| 13556 | |||
| 13557 | Each string gets on its own line. See the @code{AcceptEnv} option in | ||
| 13558 | @code{man sshd_config}. | ||
| 13559 | |||
| 13560 | This example allows ssh-clients to export the @code{COLORTERM} variable. It | ||
| 13561 | is set by terminal emulators, which support colors. You can use it in your | ||
| 13562 | shell's ressource file to enable colors for the prompt and commands if this | ||
| 13563 | variable 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 | ||
| 13574 | This is the list of authorized keys. Each element of the list is a user | ||
| 13575 | name followed by one or more file-like objects that represent SSH public | ||
| 13576 | keys. 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 | ||
| 13587 | registers the specified public keys for user accounts @code{rekado}, | ||
| 13588 | @code{chris}, and @code{root}. | ||
| 13589 | |||
| 13590 | Additional authorized keys can be specified @i{via} | ||
| 13591 | @code{service-extension}. | ||
| 13592 | |||
| 13593 | Note that this does @emph{not} interfere with the use of | ||
| 13594 | @file{~/.ssh/authorized_keys}. | ||
| 13595 | |||
| 13596 | @item @code{log-level} (predeterminado: @code{'info}) | ||
| 13597 | This is a symbol specifying the logging level: @code{quiet}, @code{fatal}, | ||
| 13598 | @code{error}, @code{info}, @code{verbose}, @code{debug}, etc. See the man | ||
| 13599 | page for @file{sshd_config} for the full list of level names. | ||
| 13600 | |||
| 13601 | @item @code{extra-content} (predeterminado: @code{""}) | ||
| 13602 | This field can be used to append arbitrary text to the configuration file. | ||
| 13603 | It is especially useful for elaborate configurations that cannot be | ||
| 13604 | expressed otherwise. This configuration, for example, would generally | ||
| 13605 | disable root logins, but permit them from one specific IP address: | ||
| 13606 | |||
| 13607 | @example | ||
| 13608 | (openssh-configuration | ||
| 13609 | (extra-content "\ | ||
| 13610 | Match 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}] | ||
| 13618 | Run the @uref{https://matt.ucc.asn.au/dropbear/dropbear.html,Dropbear SSH | ||
| 13619 | daemon} with the given @var{config}, a @code{<dropbear-configuration>} | ||
| 13620 | object. | ||
| 13621 | |||
| 13622 | For example, to specify a Dropbear service listening on port 1234, add this | ||
| 13623 | call 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 | ||
| 13632 | This data type represents the configuration of a Dropbear SSH daemon. | ||
| 13633 | |||
| 13634 | @table @asis | ||
| 13635 | @item @code{dropbear} (predeterminado: @var{dropbear}) | ||
| 13636 | El paquete de Dropbear usado. | ||
| 13637 | |||
| 13638 | @item @code{port-number} (predeterminado: 22) | ||
| 13639 | Puerto TCP donde el daemon espera conexiones entrantes. | ||
| 13640 | |||
| 13641 | @item @code{syslog-output?} (predeterminado: @code{#t}) | ||
| 13642 | Whether to enable syslog output. | ||
| 13643 | |||
| 13644 | @item @code{pid-file} (predeterminado: @code{"/var/run/dropbear.pid"}) | ||
| 13645 | File name of the daemon's PID file. | ||
| 13646 | |||
| 13647 | @item @code{root-login?} (predeterminado: @code{#f}) | ||
| 13648 | Whether to allow @code{root} logins. | ||
| 13649 | |||
| 13650 | @item @code{allow-empty-passwords?} (predeterminado: @code{#f}) | ||
| 13651 | Whether to allow empty passwords. | ||
| 13652 | |||
| 13653 | @item @code{password-authentication?} (predeterminado: @code{#t}) | ||
| 13654 | Whether to enable password-based authentication. | ||
| 13655 | @end table | ||
| 13656 | @end deftp | ||
| 13657 | |||
| 13658 | @defvr {Variable Scheme} %facebook-host-aliases | ||
| 13659 | This variable contains a string for use in @file{/etc/hosts} (@pxref{Host | ||
| 13660 | Names,,, libc, The GNU C Library Reference Manual}). Each line contains a | ||
| 13661 | entry 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 | ||
| 13663 | equivalent, @code{::1}. | ||
| 13664 | |||
| 13665 | This 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 | |||
| 13683 | Este mecanismo puede impedir a los programas que se ejecutan localmente, | ||
| 13684 | como navegadores Web, el acceso a Facebook. | ||
| 13685 | @end defvr | ||
| 13686 | |||
| 13687 | El módulo @code{(gnu services avahi)} proporciona la siguiente definición. | ||
| 13688 | |||
| 13689 | @defvr {Scheme Variable} avahi-service-type | ||
| 13690 | This is the service that runs @command{avahi-daemon}, a system-wide | ||
| 13691 | mDNS/DNS-SD responder that allows for service discovery and | ||
| 13692 | ``zero-configuration'' host name lookups (see @uref{http://avahi.org/}). | ||
| 13693 | Its value must be a @code{zero-configuration} record---see below. | ||
| 13694 | |||
| 13695 | This service extends the name service cache daemon (nscd) so that it can | ||
| 13696 | resolve @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 | |||
| 13699 | Additionally, add the @var{avahi} package to the system profile so that | ||
| 13700 | commands such as @command{avahi-browse} are directly usable. | ||
| 13701 | @end defvr | ||
| 13702 | |||
| 13703 | @deftp {Data Type} avahi-configuration | ||
| 13704 | Data type representation the configuration for Avahi. | ||
| 13705 | |||
| 13706 | @table @asis | ||
| 13707 | |||
| 13708 | @item @code{host-name} (default: @code{#f}) | ||
| 13709 | If different from @code{#f}, use that as the host name to publish for this | ||
| 13710 | machine; otherwise, use the machine's actual host name. | ||
| 13711 | |||
| 13712 | @item @code{publish?} (default: @code{#t}) | ||
| 13713 | When true, allow host names and services to be published (broadcast) over | ||
| 13714 | the network. | ||
| 13715 | |||
| 13716 | @item @code{publish-workstation?} (default: @code{#t}) | ||
| 13717 | When true, @command{avahi-daemon} publishes the machine's host name and IP | ||
| 13718 | address via mDNS on the local network. To view the host names published on | ||
| 13719 | your local network, you can run: | ||
| 13720 | |||
| 13721 | @example | ||
| 13722 | avahi-browse _workstation._tcp | ||
| 13723 | @end example | ||
| 13724 | |||
| 13725 | @item @code{wide-area?} (default: @code{#f}) | ||
| 13726 | When true, DNS-SD over unicast DNS is enabled. | ||
| 13727 | |||
| 13728 | @item @code{ipv4?} (default: @code{#t}) | ||
| 13729 | @itemx @code{ipv6?} (default: @code{#t}) | ||
| 13730 | These fields determine whether to use IPv4/IPv6 sockets. | ||
| 13731 | |||
| 13732 | @item @code{domains-to-browse} (default: @code{'()}) | ||
| 13733 | This is a list of domains to browse. | ||
| 13734 | @end table | ||
| 13735 | @end deftp | ||
| 13736 | |||
| 13737 | @deffn {Variable Scheme} openvswitch-service-type | ||
| 13738 | This is the type of the @uref{http://www.openvswitch.org, Open vSwitch} | ||
| 13739 | service, whose value should be an @code{openvswitch-configuration} object. | ||
| 13740 | @end deffn | ||
| 13741 | |||
| 13742 | @deftp {Tipo de datos} openvswitch-configuration | ||
| 13743 | Data type representing the configuration of Open vSwitch, a multilayer | ||
| 13744 | virtual switch which is designed to enable massive network automation | ||
| 13745 | through programmatic extension. | ||
| 13746 | |||
| 13747 | @table @asis | ||
| 13748 | @item @code{package} (predeterminado: @var{openvswitch}) | ||
| 13749 | Package 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 | ||
| 13760 | Support for the X Window graphical display system---specifically Xorg---is | ||
| 13761 | provided 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 | ||
| 13767 | GDM of course allows users to log in into window managers and desktop | ||
| 13768 | environments other than GNOME; for those using GNOME, GDM is required for | ||
| 13769 | features such as automatic screen locking. | ||
| 13770 | |||
| 13771 | @cindex gestor de ventanas | ||
| 13772 | To use X11, you must install at least one @dfn{window manager}---for example | ||
| 13773 | the @code{windowmaker} or @code{openbox} packages---preferably by adding it | ||
| 13774 | to 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 | ||
| 13778 | This is the type for the @uref{https://wiki.gnome.org/Projects/GDM/, GNOME | ||
| 13779 | Desktop Manager} (GDM), a program that manages graphical display servers and | ||
| 13780 | handles 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 | ||
| 13785 | GDM looks for @dfn{session types} described by the @file{.desktop} files in | ||
| 13786 | @file{/run/current-system/profile/share/xsessions} and allows users to | ||
| 13787 | choose 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 | ||
| 13789 | system-wide set of packages automatically makes them available at the log-in | ||
| 13790 | screen. | ||
| 13791 | |||
| 13792 | In addition, @file{~/.xsession} files are honored. When available, | ||
| 13793 | @file{~/.xsession} must be an executable that starts a window manager and/or | ||
| 13794 | other 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}) | ||
| 13801 | When @code{auto-login?} is false, GDM presents a log-in screen. | ||
| 13802 | |||
| 13803 | When @code{auto-login?} is true, GDM logs in directly as | ||
| 13804 | @code{default-user}. | ||
| 13805 | |||
| 13806 | @item @code{gnome-shell-assets} (default: ...) | ||
| 13807 | List of GNOME Shell assets needed by GDM: icon theme, fonts, etc. | ||
| 13808 | |||
| 13809 | @item @code{xorg-configuration} (default: @code{(xorg-configuration)}) | ||
| 13810 | Configuration of the Xorg graphical server. | ||
| 13811 | |||
| 13812 | @item @code{xsession} (default: @code{(xinitrc)}) | ||
| 13813 | Script to run before starting a X session. | ||
| 13814 | |||
| 13815 | @item @code{dbus-daemon} (default: @code{dbus-daemon-wrapper}) | ||
| 13816 | File name of the @code{dbus-daemon} executable. | ||
| 13817 | |||
| 13818 | @item @code{gdm} (default: @code{gdm}) | ||
| 13819 | The GDM package to use. | ||
| 13820 | @end table | ||
| 13821 | @end deftp | ||
| 13822 | |||
| 13823 | @defvr {Variable Scheme} slim-service-type | ||
| 13824 | Este es el tipo para el gestor de ingreso al sistema gráfico para X11 SLiM. | ||
| 13825 | |||
| 13826 | Like GDM, SLiM looks for session types described by @file{.desktop} files | ||
| 13827 | and allows users to choose a session from the log-in screen using @kbd{F1}. | ||
| 13828 | It also honors @file{~/.xsession} files. | ||
| 13829 | @end defvr | ||
| 13830 | |||
| 13831 | @deftp {Tipo de datos} slim-configuration | ||
| 13832 | Data type representing the configuration of @code{slim-service-type}. | ||
| 13833 | |||
| 13834 | @table @asis | ||
| 13835 | @item @code{allow-empty-passwords?} (predeterminado: @code{#t}) | ||
| 13836 | Whether to allow logins with empty passwords. | ||
| 13837 | |||
| 13838 | @item @code{auto-login?} (predeterminado: @code{#f}) | ||
| 13839 | @itemx @code{default-user} (predeterminado: @code{""}) | ||
| 13840 | When @code{auto-login?} is false, SLiM presents a log-in screen. | ||
| 13841 | |||
| 13842 | When @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}) | ||
| 13847 | The graphical theme to use and its name. | ||
| 13848 | |||
| 13849 | @item @code{auto-login-session} (predeterminado: @code{#f}) | ||
| 13850 | If true, this must be the name of the executable to start as the default | ||
| 13851 | session---e.g., @code{(file-append windowmaker "/bin/windowmaker")}. | ||
| 13852 | |||
| 13853 | If false, a session described by one of the available @file{.desktop} files | ||
| 13854 | in @code{/run/current-system/profile} and @code{~/.guix-profile} will be | ||
| 13855 | used. | ||
| 13856 | |||
| 13857 | @quotation Nota | ||
| 13858 | You must install at least one window manager in the system profile or in | ||
| 13859 | your user profile. Failing to do that, if @code{auto-login-session} is | ||
| 13860 | false, you will be unable to log in. | ||
| 13861 | @end quotation | ||
| 13862 | |||
| 13863 | @item @code{xorg-configuration} (default @code{(xorg-configuration)}) | ||
| 13864 | Configuration of the Xorg graphical server. | ||
| 13865 | |||
| 13866 | @item @code{xauth} (predeterminado: @code{xauth}) | ||
| 13867 | El paquete XAuth usado. | ||
| 13868 | |||
| 13869 | @item @code{shepherd} (predeterminado: @code{shepherd}) | ||
| 13870 | The Shepherd package used when invoking @command{halt} and @command{reboot}. | ||
| 13871 | |||
| 13872 | @item @code{sessreg} (predeterminado: @code{sessreg}) | ||
| 13873 | The sessreg package used in order to register the session. | ||
| 13874 | |||
| 13875 | @item @code{slim} (predeterminado: @code{slim}) | ||
| 13876 | El paquete SLiM usado. | ||
| 13877 | @end table | ||
| 13878 | @end deftp | ||
| 13879 | |||
| 13880 | @defvr {Variable Scheme} %default-theme | ||
| 13881 | @defvrx {Variable Scheme} %default-theme-name | ||
| 13882 | The default SLiM theme and its name. | ||
| 13883 | @end defvr | ||
| 13884 | |||
| 13885 | |||
| 13886 | @deftp {Tipo de datos} sddm-configuration | ||
| 13887 | This is the data type representing the sddm service configuration. | ||
| 13888 | |||
| 13889 | @table @asis | ||
| 13890 | @item @code{display-server} (predeterminado: "x11") | ||
| 13891 | Select display server to use for the greeter. Valid values are "x11" or | ||
| 13892 | "wayland". | ||
| 13893 | |||
| 13894 | @item @code{numlock} (predeterminado: "on") | ||
| 13895 | Valid values are "on", "off" or "none". | ||
| 13896 | |||
| 13897 | @item @code{halt-command} (predeterminado @code{#~(string-apppend #$shepherd "/sbin/halt")}) | ||
| 13898 | Command to run when halting. | ||
| 13899 | |||
| 13900 | @item @code{reboot-command} (predeterminado @code{#~(string-append #$shepherd "/sbin/reboot")}) | ||
| 13901 | Command to run when rebooting. | ||
| 13902 | |||
| 13903 | @item @code{theme} (predeterminado "maldives") | ||
| 13904 | Theme 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") | ||
| 13907 | Directory to look for themes. | ||
| 13908 | |||
| 13909 | @item @code{faces-directory} (predeterminado "/run/current-system/profile/share/sddm/faces") | ||
| 13910 | Directory to look for faces. | ||
| 13911 | |||
| 13912 | @item @code{default-path} (predeterminado "/run/current-system/profile/bin") | ||
| 13913 | Default PATH to use. | ||
| 13914 | |||
| 13915 | @item @code{minimum-uid} (predeterminado 1000) | ||
| 13916 | Minimum UID to display in SDDM. | ||
| 13917 | |||
| 13918 | @item @code{maximum-uid} (predeterminado 2000) | ||
| 13919 | Maximum UID to display in SDDM | ||
| 13920 | |||
| 13921 | @item @code{remember-last-user?} (predeterminado #t) | ||
| 13922 | Remember last user. | ||
| 13923 | |||
| 13924 | @item @code{remember-last-session?} (predeterminado #t) | ||
| 13925 | Remember last session. | ||
| 13926 | |||
| 13927 | @item @code{hide-users} (predeterminado "") | ||
| 13928 | Usernames to hide from SDDM greeter. | ||
| 13929 | |||
| 13930 | @item @code{hide-shells} (predeterminado @code{#~(string-append #$shadow "/sbin/nologin")}) | ||
| 13931 | Users 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")}) | ||
| 13934 | Script to run before starting a wayland session. | ||
| 13935 | |||
| 13936 | @item @code{sessions-directory} (predeterminado "/run/current-system/profile/share/wayland-sessions") | ||
| 13937 | Directory to look for desktop files starting wayland sessions. | ||
| 13938 | |||
| 13939 | @item @code{xorg-configuration} (default @code{(xorg-configuration)}) | ||
| 13940 | Configuration of the Xorg graphical server. | ||
| 13941 | |||
| 13942 | @item @code{xauth-path} (predeterminado @code{#~(string-append #$xauth "/bin/xauth")}) | ||
| 13943 | Path to xauth. | ||
| 13944 | |||
| 13945 | @item @code{xephyr-path} (predeterminado @code{#~(string-append #$xorg-server "/bin/Xephyr")}) | ||
| 13946 | Path to Xephyr. | ||
| 13947 | |||
| 13948 | @item @code{xdisplay-start} (predeterminado @code{#~(string-append #$sddm "/share/sddm/scripts/Xsetup")}) | ||
| 13949 | Script to run after starting xorg-server. | ||
| 13950 | |||
| 13951 | @item @code{xdisplay-stop} (predeterminado @code{#~(string-append #$sddm "/share/sddm/scripts/Xstop")}) | ||
| 13952 | Script to run before stopping xorg-server. | ||
| 13953 | |||
| 13954 | @item @code{xsession-command} (predeterminado: @code{xinitrc}) | ||
| 13955 | Script to run before starting a X session. | ||
| 13956 | |||
| 13957 | @item @code{xsessions-directory} (predeterminado: "/run/current-system/profile/share/xsessions") | ||
| 13958 | Directory to look for desktop files starting X sessions. | ||
| 13959 | |||
| 13960 | @item @code{minimum-vt} (predeterminado: 7) | ||
| 13961 | Minimum VT to use. | ||
| 13962 | |||
| 13963 | @item @code{auto-login-user} (predeterminado "") | ||
| 13964 | User to use for auto-login. | ||
| 13965 | |||
| 13966 | @item @code{auto-login-session} (predeterminado "") | ||
| 13967 | Desktop file to use for auto-login. | ||
| 13968 | |||
| 13969 | @item @code{relogin?} (predeterminado #f) | ||
| 13970 | Relogin 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 | ||
| 13978 | Return a service that spawns the SDDM graphical login manager for config of | ||
| 13979 | type @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 | ||
| 13990 | This data type represents the configuration of the Xorg graphical display | ||
| 13991 | server. Note that there is not Xorg service; instead, the X server is | ||
| 13992 | started by a ``display manager'' such as GDM, SDDM, and SLiM. Thus, the | ||
| 13993 | configuration of these display managers aggregates an | ||
| 13994 | @code{xorg-configuration} record. | ||
| 13995 | |||
| 13996 | @table @asis | ||
| 13997 | @item @code{modules} (default: @code{%default-xorg-modules}) | ||
| 13998 | This 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}) | ||
| 14002 | This is a list of font directories to add to the server's @dfn{font path}. | ||
| 14003 | |||
| 14004 | @item @code{drivers} (default: @code{'()}) | ||
| 14005 | This must be either the empty list, in which case Xorg chooses a graphics | ||
| 14006 | driver automatically, or a list of driver names that will be tried in this | ||
| 14007 | order---e.g., @code{("modesetting" "vesa")}. | ||
| 14008 | |||
| 14009 | @item @code{resolutions} (default: @code{'()}) | ||
| 14010 | When @code{resolutions} is the empty list, Xorg chooses an appropriate | ||
| 14011 | screen 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}) | ||
| 14017 | If this is @code{#f}, Xorg uses the default keyboard layout---usually US | ||
| 14018 | English (``qwerty'') for a 105-key PC keyboard. | ||
| 14019 | |||
| 14020 | Otherwise this must be a @code{keyboard-layout} object specifying the | ||
| 14021 | keyboard layout in use when Xorg is running. @xref{Distribución de teclado}, for | ||
| 14022 | more information on how to specify the keyboard layout. | ||
| 14023 | |||
| 14024 | @item @code{extra-config} (default: @code{'()}) | ||
| 14025 | This is a list of strings or objects appended to the configuration file. It | ||
| 14026 | is used to pass extra text to be added verbatim to the configuration file. | ||
| 14027 | |||
| 14028 | @item @code{server} (default: @code{xorg-server}) | ||
| 14029 | This is the package providing the Xorg server. | ||
| 14030 | |||
| 14031 | @item @code{server-arguments} (default: @code{%default-xorg-server-arguments}) | ||
| 14032 | This is the list of command-line arguments to pass to the X server. The | ||
| 14033 | default 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 | |||
| 14042 | Since the Xorg configuration is embedded in the log-in manager's | ||
| 14043 | configuration---e.g., @code{gdm-configuration}---this procedure provides a | ||
| 14044 | shorthand to set the Xorg configuration. | ||
| 14045 | @end deffn | ||
| 14046 | |||
| 14047 | @deffn {Scheme Procedure} xorg-start-command [@var{config}] | ||
| 14048 | Return 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 | |||
| 14052 | Usually 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}] | ||
| 14057 | Añade @var{paquete}, un paquete para un bloqueador de sesión o un | ||
| 14058 | salvapantallas cuya orden es @var{programa}, al conjunto de programas setuid | ||
| 14059 | y añade una entrada PAM para él. Por ejemplo: | ||
| 14060 | |||
| 14061 | @lisp | ||
| 14062 | (screen-locker-service xlockmore "xlock") | ||
| 14063 | @end lisp | ||
| 14064 | |||
| 14065 | permite 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 | ||
| 14073 | The @code{(gnu services cups)} module provides a Guix service definition for | ||
| 14074 | the 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 | ||
| 14078 | The service type for the CUPS print server. Its value should be a valid | ||
| 14079 | CUPS configuration (see below). To use the default settings, simply write: | ||
| 14080 | @example | ||
| 14081 | (service cups-service-type) | ||
| 14082 | @end example | ||
| 14083 | @end deffn | ||
| 14084 | |||
| 14085 | The CUPS configuration controls the basic things about your CUPS | ||
| 14086 | installation: what interfaces it listens on, what to do if a print job | ||
| 14087 | fails, how much logging to do, and so on. To actually add a printer, you | ||
| 14088 | have to visit the @url{http://localhost:631} URL, or use a tool such as | ||
| 14089 | GNOME's printer configuration services. By default, configuring a CUPS | ||
| 14090 | service will generate a self-signed certificate if needed, for secure | ||
| 14091 | connections to the print server. | ||
| 14092 | |||
| 14093 | Suppose you want to enable the Web interface of CUPS and also add support | ||
| 14094 | for 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 | ||
| 14096 | this (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 | |||
| 14106 | Note: If you wish to use the Qt5 based GUI which comes with the hplip | ||
| 14107 | package then it is suggested that you install the @code{hplip} package, | ||
| 14108 | either in your OS configuration file or as your user. | ||
| 14109 | |||
| 14110 | The available configuration parameters follow. Each parameter definition is | ||
| 14111 | preceded 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 | ||
| 14113 | also 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; | ||
| 14115 | see 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 | |||
| 14126 | Available @code{cups-configuration} fields are: | ||
| 14127 | |||
| 14128 | @deftypevr {@code{cups-configuration} parameter} package cups | ||
| 14129 | El paquete CUPS. | ||
| 14130 | @end deftypevr | ||
| 14131 | |||
| 14132 | @deftypevr {@code{cups-configuration} parameter} package-list extensions | ||
| 14133 | Drivers and other extensions to the CUPS package. | ||
| 14134 | @end deftypevr | ||
| 14135 | |||
| 14136 | @deftypevr {@code{cups-configuration} parameter} files-configuration files-configuration | ||
| 14137 | Configuration of where to write logs, what directories to use for print | ||
| 14138 | spools, and related privileged configuration parameters. | ||
| 14139 | |||
| 14140 | Available @code{files-configuration} fields are: | ||
| 14141 | |||
| 14142 | @deftypevr {@code{files-configuration} parameter} log-location access-log | ||
| 14143 | Defines the access log filename. Specifying a blank filename disables | ||
| 14144 | access log generation. The value @code{stderr} causes log entries to be | ||
| 14145 | sent to the standard error file when the scheduler is running in the | ||
| 14146 | foreground, or to the system log daemon when run in the background. The | ||
| 14147 | value @code{syslog} causes log entries to be sent to the system log daemon. | ||
| 14148 | The server name may be included in filenames using the string @code{%s}, as | ||
| 14149 | in @code{/var/log/cups/%s-access_log}. | ||
| 14150 | |||
| 14151 | Defaults to @samp{"/var/log/cups/access_log"}. | ||
| 14152 | @end deftypevr | ||
| 14153 | |||
| 14154 | @deftypevr {@code{files-configuration} parameter} file-name cache-dir | ||
| 14155 | Where CUPS should cache data. | ||
| 14156 | |||
| 14157 | Defaults to @samp{"/var/cache/cups"}. | ||
| 14158 | @end deftypevr | ||
| 14159 | |||
| 14160 | @deftypevr {@code{files-configuration} parameter} string config-file-perm | ||
| 14161 | Specifies the permissions for all configuration files that the scheduler | ||
| 14162 | writes. | ||
| 14163 | |||
| 14164 | Note that the permissions for the printers.conf file are currently masked to | ||
| 14165 | only allow access from the scheduler user (typically root). This is done | ||
| 14166 | because printer device URIs sometimes contain sensitive authentication | ||
| 14167 | information that should not be generally known on the system. There is no | ||
| 14168 | way to disable this security feature. | ||
| 14169 | |||
| 14170 | Defaults to @samp{"0640"}. | ||
| 14171 | @end deftypevr | ||
| 14172 | |||
| 14173 | @deftypevr {@code{files-configuration} parameter} log-location error-log | ||
| 14174 | Defines the error log filename. Specifying a blank filename disables access | ||
| 14175 | log generation. The value @code{stderr} causes log entries to be sent to | ||
| 14176 | the standard error file when the scheduler is running in the foreground, or | ||
| 14177 | to 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 | ||
| 14179 | server name may be included in filenames using the string @code{%s}, as in | ||
| 14180 | @code{/var/log/cups/%s-error_log}. | ||
| 14181 | |||
| 14182 | Defaults to @samp{"/var/log/cups/error_log"}. | ||
| 14183 | @end deftypevr | ||
| 14184 | |||
| 14185 | @deftypevr {@code{files-configuration} parameter} string fatal-errors | ||
| 14186 | Specifies which errors are fatal, causing the scheduler to exit. The kind | ||
| 14187 | strings are: | ||
| 14188 | |||
| 14189 | @table @code | ||
| 14190 | @item none | ||
| 14191 | No errors are fatal. | ||
| 14192 | |||
| 14193 | @item all | ||
| 14194 | All of the errors below are fatal. | ||
| 14195 | |||
| 14196 | @item browse | ||
| 14197 | Browsing initialization errors are fatal, for example failed connections to | ||
| 14198 | the DNS-SD daemon. | ||
| 14199 | |||
| 14200 | @item config | ||
| 14201 | Configuration file syntax errors are fatal. | ||
| 14202 | |||
| 14203 | @item listen | ||
| 14204 | Listen or Port errors are fatal, except for IPv6 failures on the loopback or | ||
| 14205 | @code{any} addresses. | ||
| 14206 | |||
| 14207 | @item log | ||
| 14208 | Log file creation or write errors are fatal. | ||
| 14209 | |||
| 14210 | @item permissions | ||
| 14211 | Bad startup file permissions are fatal, for example shared TLS certificate | ||
| 14212 | and key files with world-read permissions. | ||
| 14213 | @end table | ||
| 14214 | |||
| 14215 | Defaults to @samp{"all -browse"}. | ||
| 14216 | @end deftypevr | ||
| 14217 | |||
| 14218 | @deftypevr {@code{files-configuration} parameter} boolean file-device? | ||
| 14219 | Specifies whether the file pseudo-device can be used for new printer | ||
| 14220 | queues. The URI @uref{file:///dev/null} is always allowed. | ||
| 14221 | |||
| 14222 | El valor predeterminado es @samp{#f} | ||
| 14223 | @end deftypevr | ||
| 14224 | |||
| 14225 | @deftypevr {@code{files-configuration} parameter} string group | ||
| 14226 | Specifies the group name or ID that will be used when executing external | ||
| 14227 | programs. | ||
| 14228 | |||
| 14229 | Defaults to @samp{"lp"}. | ||
| 14230 | @end deftypevr | ||
| 14231 | |||
| 14232 | @deftypevr {@code{files-configuration} parameter} string log-file-perm | ||
| 14233 | Specifies the permissions for all log files that the scheduler writes. | ||
| 14234 | |||
| 14235 | Defaults to @samp{"0644"}. | ||
| 14236 | @end deftypevr | ||
| 14237 | |||
| 14238 | @deftypevr {@code{files-configuration} parameter} log-location page-log | ||
| 14239 | Defines the page log filename. Specifying a blank filename disables access | ||
| 14240 | log generation. The value @code{stderr} causes log entries to be sent to | ||
| 14241 | the standard error file when the scheduler is running in the foreground, or | ||
| 14242 | to 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 | ||
| 14244 | server name may be included in filenames using the string @code{%s}, as in | ||
| 14245 | @code{/var/log/cups/%s-page_log}. | ||
| 14246 | |||
| 14247 | Defaults to @samp{"/var/log/cups/page_log"}. | ||
| 14248 | @end deftypevr | ||
| 14249 | |||
| 14250 | @deftypevr {@code{files-configuration} parameter} string remote-root | ||
| 14251 | Specifies the username that is associated with unauthenticated accesses by | ||
| 14252 | clients claiming to be the root user. The default is @code{remroot}. | ||
| 14253 | |||
| 14254 | Defaults to @samp{"remroot"}. | ||
| 14255 | @end deftypevr | ||
| 14256 | |||
| 14257 | @deftypevr {@code{files-configuration} parameter} file-name request-root | ||
| 14258 | Specifies the directory that contains print jobs and other HTTP request | ||
| 14259 | data. | ||
| 14260 | |||
| 14261 | Defaults to @samp{"/var/spool/cups"}. | ||
| 14262 | @end deftypevr | ||
| 14263 | |||
| 14264 | @deftypevr {@code{files-configuration} parameter} sandboxing sandboxing | ||
| 14265 | Specifies the level of security sandboxing that is applied to print filters, | ||
| 14266 | backends, and other child processes of the scheduler; either @code{relaxed} | ||
| 14267 | or @code{strict}. This directive is currently only used/supported on macOS. | ||
| 14268 | |||
| 14269 | Defaults to @samp{strict}. | ||
| 14270 | @end deftypevr | ||
| 14271 | |||
| 14272 | @deftypevr {@code{files-configuration} parameter} file-name server-keychain | ||
| 14273 | Specifies the location of TLS certificates and private keys. CUPS will look | ||
| 14274 | for public and private keys in this directory: a @code{.crt} files for | ||
| 14275 | PEM-encoded certificates and corresponding @code{.key} files for PEM-encoded | ||
| 14276 | private keys. | ||
| 14277 | |||
| 14278 | Defaults to @samp{"/etc/cups/ssl"}. | ||
| 14279 | @end deftypevr | ||
| 14280 | |||
| 14281 | @deftypevr {@code{files-configuration} parameter} file-name server-root | ||
| 14282 | Specifies the directory containing the server configuration files. | ||
| 14283 | |||
| 14284 | Defaults to @samp{"/etc/cups"}. | ||
| 14285 | @end deftypevr | ||
| 14286 | |||
| 14287 | @deftypevr {@code{files-configuration} parameter} boolean sync-on-close? | ||
| 14288 | Specifies whether the scheduler calls fsync(2) after writing configuration | ||
| 14289 | or state files. | ||
| 14290 | |||
| 14291 | El valor predeterminado es @samp{#f} | ||
| 14292 | @end deftypevr | ||
| 14293 | |||
| 14294 | @deftypevr {@code{files-configuration} parameter} space-separated-string-list system-group | ||
| 14295 | Specifies the group(s) to use for @code{@@SYSTEM} group authentication. | ||
| 14296 | @end deftypevr | ||
| 14297 | |||
| 14298 | @deftypevr {@code{files-configuration} parameter} file-name temp-dir | ||
| 14299 | Specifies the directory where temporary files are stored. | ||
| 14300 | |||
| 14301 | Defaults to @samp{"/var/spool/cups/tmp"}. | ||
| 14302 | @end deftypevr | ||
| 14303 | |||
| 14304 | @deftypevr {@code{files-configuration} parameter} string user | ||
| 14305 | Specifies the user name or ID that is used when running external programs. | ||
| 14306 | |||
| 14307 | Defaults to @samp{"lp"}. | ||
| 14308 | @end deftypevr | ||
| 14309 | @end deftypevr | ||
| 14310 | |||
| 14311 | @deftypevr {@code{cups-configuration} parameter} access-log-level access-log-level | ||
| 14312 | Specifies the logging level for the AccessLog file. The @code{config} level | ||
| 14313 | logs when printers and classes are added, deleted, or modified and when | ||
| 14314 | configuration files are accessed or updated. The @code{actions} level logs | ||
| 14315 | when print jobs are submitted, held, released, modified, or canceled, and | ||
| 14316 | any of the conditions for @code{config}. The @code{all} level logs all | ||
| 14317 | requests. | ||
| 14318 | |||
| 14319 | Defaults to @samp{actions}. | ||
| 14320 | @end deftypevr | ||
| 14321 | |||
| 14322 | @deftypevr {@code{cups-configuration} parameter} boolean auto-purge-jobs? | ||
| 14323 | Specifies whether to purge job history data automatically when it is no | ||
| 14324 | longer required for quotas. | ||
| 14325 | |||
| 14326 | El valor predeterminado es @samp{#f} | ||
| 14327 | @end deftypevr | ||
| 14328 | |||
| 14329 | @deftypevr {@code{cups-configuration} parameter} browse-local-protocols browse-local-protocols | ||
| 14330 | Specifies which protocols to use for local printer sharing. | ||
| 14331 | |||
| 14332 | Defaults to @samp{dnssd}. | ||
| 14333 | @end deftypevr | ||
| 14334 | |||
| 14335 | @deftypevr {@code{cups-configuration} parameter} boolean browse-web-if? | ||
| 14336 | Specifies whether the CUPS web interface is advertised. | ||
| 14337 | |||
| 14338 | El valor predeterminado es @samp{#f} | ||
| 14339 | @end deftypevr | ||
| 14340 | |||
| 14341 | @deftypevr {@code{cups-configuration} parameter} boolean browsing? | ||
| 14342 | Specifies whether shared printers are advertised. | ||
| 14343 | |||
| 14344 | El valor predeterminado es @samp{#f} | ||
| 14345 | @end deftypevr | ||
| 14346 | |||
| 14347 | @deftypevr {@code{cups-configuration} parameter} string classification | ||
| 14348 | Specifies the security classification of the server. Any valid banner name | ||
| 14349 | can be used, including "classified", "confidential", "secret", "topsecret", | ||
| 14350 | and "unclassified", or the banner can be omitted to disable secure printing | ||
| 14351 | functions. | ||
| 14352 | |||
| 14353 | El valor predeterminado es @samp{""}. | ||
| 14354 | @end deftypevr | ||
| 14355 | |||
| 14356 | @deftypevr {@code{cups-configuration} parameter} boolean classify-override? | ||
| 14357 | Specifies whether users may override the classification (cover page) of | ||
| 14358 | individual print jobs using the @code{job-sheets} option. | ||
| 14359 | |||
| 14360 | El valor predeterminado es @samp{#f} | ||
| 14361 | @end deftypevr | ||
| 14362 | |||
| 14363 | @deftypevr {@code{cups-configuration} parameter} default-auth-type default-auth-type | ||
| 14364 | Specifies the default type of authentication to use. | ||
| 14365 | |||
| 14366 | Defaults to @samp{Basic}. | ||
| 14367 | @end deftypevr | ||
| 14368 | |||
| 14369 | @deftypevr {@code{cups-configuration} parameter} default-encryption default-encryption | ||
| 14370 | Specifies whether encryption will be used for authenticated requests. | ||
| 14371 | |||
| 14372 | Defaults to @samp{Required}. | ||
| 14373 | @end deftypevr | ||
| 14374 | |||
| 14375 | @deftypevr {@code{cups-configuration} parameter} string default-language | ||
| 14376 | Specifies the default language to use for text and web content. | ||
| 14377 | |||
| 14378 | Defaults to @samp{"en"}. | ||
| 14379 | @end deftypevr | ||
| 14380 | |||
| 14381 | @deftypevr {@code{cups-configuration} parameter} string default-paper-size | ||
| 14382 | Specifies the default paper size for new print queues. @samp{"Auto"} uses a | ||
| 14383 | locale-specific default, while @samp{"None"} specifies there is no default | ||
| 14384 | paper size. Specific size names are typically @samp{"Letter"} or | ||
| 14385 | @samp{"A4"}. | ||
| 14386 | |||
| 14387 | Defaults to @samp{"Auto"}. | ||
| 14388 | @end deftypevr | ||
| 14389 | |||
| 14390 | @deftypevr {@code{cups-configuration} parameter} string default-policy | ||
| 14391 | Specifies the default access policy to use. | ||
| 14392 | |||
| 14393 | Defaults to @samp{"default"}. | ||
| 14394 | @end deftypevr | ||
| 14395 | |||
| 14396 | @deftypevr {@code{cups-configuration} parameter} boolean default-shared? | ||
| 14397 | Specifies whether local printers are shared by default. | ||
| 14398 | |||
| 14399 | Defaults to @samp{#t}. | ||
| 14400 | @end deftypevr | ||
| 14401 | |||
| 14402 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer dirty-clean-interval | ||
| 14403 | Specifies the delay for updating of configuration and state files, in | ||
| 14404 | seconds. A value of 0 causes the update to happen as soon as possible, | ||
| 14405 | typically within a few milliseconds. | ||
| 14406 | |||
| 14407 | El valor predeterminado es @samp{30}. | ||
| 14408 | @end deftypevr | ||
| 14409 | |||
| 14410 | @deftypevr {@code{cups-configuration} parameter} error-policy error-policy | ||
| 14411 | Specifies what to do when an error occurs. Possible values are | ||
| 14412 | @code{abort-job}, which will discard the failed print job; @code{retry-job}, | ||
| 14413 | which will retry the job at a later time; @code{retry-this-job}, which | ||
| 14414 | retries the failed job immediately; and @code{stop-printer}, which stops the | ||
| 14415 | printer. | ||
| 14416 | |||
| 14417 | Defaults to @samp{stop-printer}. | ||
| 14418 | @end deftypevr | ||
| 14419 | |||
| 14420 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-limit | ||
| 14421 | Specifies the maximum cost of filters that are run concurrently, which can | ||
| 14422 | be used to minimize disk, memory, and CPU resource problems. A limit of 0 | ||
| 14423 | disables filter limiting. An average print to a non-PostScript printer | ||
| 14424 | needs a filter limit of about 200. A PostScript printer needs about half | ||
| 14425 | that (100). Setting the limit below these thresholds will effectively limit | ||
| 14426 | the scheduler to printing a single job at any time. | ||
| 14427 | |||
| 14428 | El valor predeterminado es @samp{0}. | ||
| 14429 | @end deftypevr | ||
| 14430 | |||
| 14431 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer filter-nice | ||
| 14432 | Specifies the scheduling priority of filters that are run to print a job. | ||
| 14433 | The nice value ranges from 0, the highest priority, to 19, the lowest | ||
| 14434 | priority. | ||
| 14435 | |||
| 14436 | El valor predeterminado es @samp{0}. | ||
| 14437 | @end deftypevr | ||
| 14438 | |||
| 14439 | @deftypevr {@code{cups-configuration} parameter} host-name-lookups host-name-lookups | ||
| 14440 | Specifies whether to do reverse lookups on connecting clients. The | ||
| 14441 | @code{double} setting causes @code{cupsd} to verify that the hostname | ||
| 14442 | resolved from the address matches one of the addresses returned for that | ||
| 14443 | hostname. Double lookups also prevent clients with unregistered addresses | ||
| 14444 | from connecting to your server. Only set this option to @code{#t} or | ||
| 14445 | @code{double} if absolutely required. | ||
| 14446 | |||
| 14447 | El valor predeterminado es @samp{#f} | ||
| 14448 | @end deftypevr | ||
| 14449 | |||
| 14450 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-kill-delay | ||
| 14451 | Specifies the number of seconds to wait before killing the filters and | ||
| 14452 | backend associated with a canceled or held job. | ||
| 14453 | |||
| 14454 | El valor predeterminado es @samp{30}. | ||
| 14455 | @end deftypevr | ||
| 14456 | |||
| 14457 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-interval | ||
| 14458 | Specifies the interval between retries of jobs in seconds. This is | ||
| 14459 | typically used for fax queues but can also be used with normal print queues | ||
| 14460 | whose error policy is @code{retry-job} or @code{retry-current-job}. | ||
| 14461 | |||
| 14462 | El valor predeterminado es @samp{30}. | ||
| 14463 | @end deftypevr | ||
| 14464 | |||
| 14465 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer job-retry-limit | ||
| 14466 | Specifies the number of retries that are done for jobs. This is typically | ||
| 14467 | used for fax queues but can also be used with normal print queues whose | ||
| 14468 | error policy is @code{retry-job} or @code{retry-current-job}. | ||
| 14469 | |||
| 14470 | Defaults to @samp{5}. | ||
| 14471 | @end deftypevr | ||
| 14472 | |||
| 14473 | @deftypevr {@code{cups-configuration} parameter} boolean keep-alive? | ||
| 14474 | Specifies whether to support HTTP keep-alive connections. | ||
| 14475 | |||
| 14476 | Defaults to @samp{#t}. | ||
| 14477 | @end deftypevr | ||
| 14478 | |||
| 14479 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer keep-alive-timeout | ||
| 14480 | Specifies how long an idle client connection remains open, in seconds. | ||
| 14481 | |||
| 14482 | El valor predeterminado es @samp{30}. | ||
| 14483 | @end deftypevr | ||
| 14484 | |||
| 14485 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer limit-request-body | ||
| 14486 | Specifies the maximum size of print files, IPP requests, and HTML form | ||
| 14487 | data. A limit of 0 disables the limit check. | ||
| 14488 | |||
| 14489 | El valor predeterminado es @samp{0}. | ||
| 14490 | @end deftypevr | ||
| 14491 | |||
| 14492 | @deftypevr {@code{cups-configuration} parameter} multiline-string-list listen | ||
| 14493 | Listens on the specified interfaces for connections. Valid values are of | ||
| 14494 | the form @var{address}:@var{port}, where @var{address} is either an IPv6 | ||
| 14495 | address enclosed in brackets, an IPv4 address, or @code{*} to indicate all | ||
| 14496 | addresses. Values can also be file names of local UNIX domain sockets. The | ||
| 14497 | Listen directive is similar to the Port directive but allows you to restrict | ||
| 14498 | access to specific interfaces or networks. | ||
| 14499 | @end deftypevr | ||
| 14500 | |||
| 14501 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer listen-back-log | ||
| 14502 | Specifies the number of pending connections that will be allowed. This | ||
| 14503 | normally only affects very busy servers that have reached the MaxClients | ||
| 14504 | limit, but can also be triggered by large numbers of simultaneous | ||
| 14505 | connections. When the limit is reached, the operating system will refuse | ||
| 14506 | additional connections until the scheduler can accept the pending ones. | ||
| 14507 | |||
| 14508 | Defaults to @samp{128}. | ||
| 14509 | @end deftypevr | ||
| 14510 | |||
| 14511 | @deftypevr {@code{cups-configuration} parameter} location-access-control-list location-access-controls | ||
| 14512 | Specifies a set of additional access controls. | ||
| 14513 | |||
| 14514 | Available @code{location-access-controls} fields are: | ||
| 14515 | |||
| 14516 | @deftypevr {@code{location-access-controls} parameter} file-name path | ||
| 14517 | Specifies 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 | ||
| 14521 | Access controls for all access to this path, in the same format as the | ||
| 14522 | @code{access-controls} of @code{operation-access-control}. | ||
| 14523 | |||
| 14524 | Defaults to @samp{()}. | ||
| 14525 | @end deftypevr | ||
| 14526 | |||
| 14527 | @deftypevr {@code{location-access-controls} parameter} method-access-control-list method-access-controls | ||
| 14528 | Access controls for method-specific access to this path. | ||
| 14529 | |||
| 14530 | Defaults to @samp{()}. | ||
| 14531 | |||
| 14532 | Available @code{method-access-controls} fields are: | ||
| 14533 | |||
| 14534 | @deftypevr {@code{method-access-controls} parameter} boolean reverse? | ||
| 14535 | If @code{#t}, apply access controls to all methods except the listed | ||
| 14536 | methods. Otherwise apply to only the listed methods. | ||
| 14537 | |||
| 14538 | El valor predeterminado es @samp{#f} | ||
| 14539 | @end deftypevr | ||
| 14540 | |||
| 14541 | @deftypevr {@code{method-access-controls} parameter} method-list methods | ||
| 14542 | Methods to which this access control applies. | ||
| 14543 | |||
| 14544 | Defaults to @samp{()}. | ||
| 14545 | @end deftypevr | ||
| 14546 | |||
| 14547 | @deftypevr {@code{method-access-controls} parameter} access-control-list access-controls | ||
| 14548 | Access control directives, as a list of strings. Each string should be one | ||
| 14549 | directive, such as "Order allow,deny". | ||
| 14550 | |||
| 14551 | Defaults to @samp{()}. | ||
| 14552 | @end deftypevr | ||
| 14553 | @end deftypevr | ||
| 14554 | @end deftypevr | ||
| 14555 | |||
| 14556 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer log-debug-history | ||
| 14557 | Specifies the number of debugging messages that are retained for logging if | ||
| 14558 | an error occurs in a print job. Debug messages are logged regardless of the | ||
| 14559 | LogLevel setting. | ||
| 14560 | |||
| 14561 | Defaults to @samp{100}. | ||
| 14562 | @end deftypevr | ||
| 14563 | |||
| 14564 | @deftypevr {@code{cups-configuration} parameter} log-level log-level | ||
| 14565 | Specifies the level of logging for the ErrorLog file. The value @code{none} | ||
| 14566 | stops all logging while @code{debug2} logs everything. | ||
| 14567 | |||
| 14568 | Defaults to @samp{info}. | ||
| 14569 | @end deftypevr | ||
| 14570 | |||
| 14571 | @deftypevr {@code{cups-configuration} parameter} log-time-format log-time-format | ||
| 14572 | Specifies 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 | |||
| 14575 | Defaults to @samp{standard}. | ||
| 14576 | @end deftypevr | ||
| 14577 | |||
| 14578 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients | ||
| 14579 | Specifies the maximum number of simultaneous clients that are allowed by the | ||
| 14580 | scheduler. | ||
| 14581 | |||
| 14582 | Defaults to @samp{100}. | ||
| 14583 | @end deftypevr | ||
| 14584 | |||
| 14585 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-clients-per-host | ||
| 14586 | Specifies the maximum number of simultaneous clients that are allowed from a | ||
| 14587 | single address. | ||
| 14588 | |||
| 14589 | Defaults to @samp{100}. | ||
| 14590 | @end deftypevr | ||
| 14591 | |||
| 14592 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-copies | ||
| 14593 | Specifies the maximum number of copies that a user can print of each job. | ||
| 14594 | |||
| 14595 | Defaults to @samp{9999}. | ||
| 14596 | @end deftypevr | ||
| 14597 | |||
| 14598 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-hold-time | ||
| 14599 | Specifies the maximum time a job may remain in the @code{indefinite} hold | ||
| 14600 | state before it is canceled. A value of 0 disables cancellation of held | ||
| 14601 | jobs. | ||
| 14602 | |||
| 14603 | El valor predeterminado es @samp{0}. | ||
| 14604 | @end deftypevr | ||
| 14605 | |||
| 14606 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs | ||
| 14607 | Specifies the maximum number of simultaneous jobs that are allowed. Set to | ||
| 14608 | 0 to allow an unlimited number of jobs. | ||
| 14609 | |||
| 14610 | Defaults to @samp{500}. | ||
| 14611 | @end deftypevr | ||
| 14612 | |||
| 14613 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-printer | ||
| 14614 | Specifies the maximum number of simultaneous jobs that are allowed per | ||
| 14615 | printer. A value of 0 allows up to MaxJobs jobs per printer. | ||
| 14616 | |||
| 14617 | El valor predeterminado es @samp{0}. | ||
| 14618 | @end deftypevr | ||
| 14619 | |||
| 14620 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-jobs-per-user | ||
| 14621 | Specifies the maximum number of simultaneous jobs that are allowed per | ||
| 14622 | user. A value of 0 allows up to MaxJobs jobs per user. | ||
| 14623 | |||
| 14624 | El valor predeterminado es @samp{0}. | ||
| 14625 | @end deftypevr | ||
| 14626 | |||
| 14627 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-job-time | ||
| 14628 | Specifies the maximum time a job may take to print before it is canceled, in | ||
| 14629 | seconds. Set to 0 to disable cancellation of "stuck" jobs. | ||
| 14630 | |||
| 14631 | Defaults to @samp{10800}. | ||
| 14632 | @end deftypevr | ||
| 14633 | |||
| 14634 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer max-log-size | ||
| 14635 | Specifies the maximum size of the log files before they are rotated, in | ||
| 14636 | bytes. The value 0 disables log rotation. | ||
| 14637 | |||
| 14638 | Defaults to @samp{1048576}. | ||
| 14639 | @end deftypevr | ||
| 14640 | |||
| 14641 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer multiple-operation-timeout | ||
| 14642 | Specifies the maximum amount of time to allow between files in a multiple | ||
| 14643 | file print job, in seconds. | ||
| 14644 | |||
| 14645 | Defaults to @samp{300}. | ||
| 14646 | @end deftypevr | ||
| 14647 | |||
| 14648 | @deftypevr {@code{cups-configuration} parameter} string page-log-format | ||
| 14649 | Specifies the format of PageLog lines. Sequences beginning with percent | ||
| 14650 | (@samp{%}) characters are replaced with the corresponding information, while | ||
| 14651 | all other characters are copied literally. The following percent sequences | ||
| 14652 | are recognized: | ||
| 14653 | |||
| 14654 | @table @samp | ||
| 14655 | @item %% | ||
| 14656 | insert a single percent character | ||
| 14657 | |||
| 14658 | @item %@{name@} | ||
| 14659 | insert the value of the specified IPP attribute | ||
| 14660 | |||
| 14661 | @item %C | ||
| 14662 | insert the number of copies for the current page | ||
| 14663 | |||
| 14664 | @item %P | ||
| 14665 | insert the current page number | ||
| 14666 | |||
| 14667 | @item %T | ||
| 14668 | insert the current date and time in common log format | ||
| 14669 | |||
| 14670 | @item %j | ||
| 14671 | insert the job ID | ||
| 14672 | |||
| 14673 | @item %p | ||
| 14674 | insert the printer name | ||
| 14675 | |||
| 14676 | @item %u | ||
| 14677 | insert the username | ||
| 14678 | @end table | ||
| 14679 | |||
| 14680 | A 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 | |||
| 14684 | El valor predeterminado es @samp{""}. | ||
| 14685 | @end deftypevr | ||
| 14686 | |||
| 14687 | @deftypevr {@code{cups-configuration} parameter} environment-variables environment-variables | ||
| 14688 | Passes the specified environment variable(s) to child processes; a list of | ||
| 14689 | strings. | ||
| 14690 | |||
| 14691 | Defaults to @samp{()}. | ||
| 14692 | @end deftypevr | ||
| 14693 | |||
| 14694 | @deftypevr {@code{cups-configuration} parameter} policy-configuration-list policies | ||
| 14695 | Specifies named access control policies. | ||
| 14696 | |||
| 14697 | Available @code{policy-configuration} fields are: | ||
| 14698 | |||
| 14699 | @deftypevr {@code{policy-configuration} parameter} string name | ||
| 14700 | Name of the policy. | ||
| 14701 | @end deftypevr | ||
| 14702 | |||
| 14703 | @deftypevr {@code{policy-configuration} parameter} string job-private-access | ||
| 14704 | Specifies an access list for a job's private values. @code{@@ACL} maps to | ||
| 14705 | the printer's requesting-user-name-allowed or requesting-user-name-denied | ||
| 14706 | values. @code{@@OWNER} maps to the job's owner. @code{@@SYSTEM} maps to | ||
| 14707 | the 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 | ||
| 14710 | include specific user names, and @code{@@@var{group}} to indicate members of | ||
| 14711 | a specific group. The access list may also be simply @code{all} or | ||
| 14712 | @code{default}. | ||
| 14713 | |||
| 14714 | Defaults to @samp{"@@OWNER @@SYSTEM"}. | ||
| 14715 | @end deftypevr | ||
| 14716 | |||
| 14717 | @deftypevr {@code{policy-configuration} parameter} string job-private-values | ||
| 14718 | Specifies the list of job values to make private, or @code{all}, | ||
| 14719 | @code{default}, or @code{none}. | ||
| 14720 | |||
| 14721 | Defaults to @samp{"job-name job-originating-host-name | ||
| 14722 | job-originating-user-name phone"}. | ||
| 14723 | @end deftypevr | ||
| 14724 | |||
| 14725 | @deftypevr {@code{policy-configuration} parameter} string subscription-private-access | ||
| 14726 | Specifies an access list for a subscription's private values. @code{@@ACL} | ||
| 14727 | maps to the printer's requesting-user-name-allowed or | ||
| 14728 | requesting-user-name-denied values. @code{@@OWNER} maps to the job's | ||
| 14729 | owner. @code{@@SYSTEM} maps to the groups listed for the | ||
| 14730 | @code{system-group} field of the @code{files-config} configuration, which is | ||
| 14731 | reified into the @code{cups-files.conf(5)} file. Other possible elements of | ||
| 14732 | the access list include specific user names, and @code{@@@var{group}} to | ||
| 14733 | indicate members of a specific group. The access list may also be simply | ||
| 14734 | @code{all} or @code{default}. | ||
| 14735 | |||
| 14736 | Defaults to @samp{"@@OWNER @@SYSTEM"}. | ||
| 14737 | @end deftypevr | ||
| 14738 | |||
| 14739 | @deftypevr {@code{policy-configuration} parameter} string subscription-private-values | ||
| 14740 | Specifies the list of job values to make private, or @code{all}, | ||
| 14741 | @code{default}, or @code{none}. | ||
| 14742 | |||
| 14743 | Defaults to @samp{"notify-events notify-pull-method notify-recipient-uri | ||
| 14744 | notify-subscriber-user-name notify-user-data"}. | ||
| 14745 | @end deftypevr | ||
| 14746 | |||
| 14747 | @deftypevr {@code{policy-configuration} parameter} operation-access-control-list access-controls | ||
| 14748 | Access control by IPP operation. | ||
| 14749 | |||
| 14750 | Defaults to @samp{()}. | ||
| 14751 | @end deftypevr | ||
| 14752 | @end deftypevr | ||
| 14753 | |||
| 14754 | @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-files | ||
| 14755 | Specifies whether job files (documents) are preserved after a job is | ||
| 14756 | printed. If a numeric value is specified, job files are preserved for the | ||
| 14757 | indicated number of seconds after printing. Otherwise a boolean value | ||
| 14758 | applies indefinitely. | ||
| 14759 | |||
| 14760 | Defaults to @samp{86400}. | ||
| 14761 | @end deftypevr | ||
| 14762 | |||
| 14763 | @deftypevr {@code{cups-configuration} parameter} boolean-or-non-negative-integer preserve-job-history | ||
| 14764 | Specifies whether the job history is preserved after a job is printed. If a | ||
| 14765 | numeric value is specified, the job history is preserved for the indicated | ||
| 14766 | number of seconds after printing. If @code{#t}, the job history is | ||
| 14767 | preserved until the MaxJobs limit is reached. | ||
| 14768 | |||
| 14769 | Defaults to @samp{#t}. | ||
| 14770 | @end deftypevr | ||
| 14771 | |||
| 14772 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer reload-timeout | ||
| 14773 | Specifies the amount of time to wait for job completion before restarting | ||
| 14774 | the scheduler. | ||
| 14775 | |||
| 14776 | El valor predeterminado es @samp{30}. | ||
| 14777 | @end deftypevr | ||
| 14778 | |||
| 14779 | @deftypevr {@code{cups-configuration} parameter} string rip-cache | ||
| 14780 | Specifies the maximum amount of memory to use when converting documents into | ||
| 14781 | bitmaps for a printer. | ||
| 14782 | |||
| 14783 | Defaults to @samp{"128m"}. | ||
| 14784 | @end deftypevr | ||
| 14785 | |||
| 14786 | @deftypevr {@code{cups-configuration} parameter} string server-admin | ||
| 14787 | Specifies the email address of the server administrator. | ||
| 14788 | |||
| 14789 | Defaults to @samp{"root@@localhost.localdomain"}. | ||
| 14790 | @end deftypevr | ||
| 14791 | |||
| 14792 | @deftypevr {@code{cups-configuration} parameter} host-name-list-or-* server-alias | ||
| 14793 | The ServerAlias directive is used for HTTP Host header validation when | ||
| 14794 | clients connect to the scheduler from external interfaces. Using the | ||
| 14795 | special name @code{*} can expose your system to known browser-based DNS | ||
| 14796 | rebinding attacks, even when accessing sites through a firewall. If the | ||
| 14797 | auto-discovery of alternate names does not work, we recommend listing each | ||
| 14798 | alternate name with a ServerAlias directive instead of using @code{*}. | ||
| 14799 | |||
| 14800 | Defaults to @samp{*}. | ||
| 14801 | @end deftypevr | ||
| 14802 | |||
| 14803 | @deftypevr {@code{cups-configuration} parameter} string server-name | ||
| 14804 | Specifies the fully-qualified host name of the server. | ||
| 14805 | |||
| 14806 | Defaults to @samp{"localhost"}. | ||
| 14807 | @end deftypevr | ||
| 14808 | |||
| 14809 | @deftypevr {@code{cups-configuration} parameter} server-tokens server-tokens | ||
| 14810 | Specifies what information is included in the Server header of HTTP | ||
| 14811 | responses. @code{None} disables the Server header. @code{ProductOnly} | ||
| 14812 | reports @code{CUPS}. @code{Major} reports @code{CUPS 2}. @code{Minor} | ||
| 14813 | reports @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 | ||
| 14815 | output of the @code{uname} command. @code{Full} reports @code{CUPS 2.0.0 | ||
| 14816 | (@var{uname}) IPP/2.0}. | ||
| 14817 | |||
| 14818 | Defaults to @samp{Minimal}. | ||
| 14819 | @end deftypevr | ||
| 14820 | |||
| 14821 | @deftypevr {@code{cups-configuration} parameter} string set-env | ||
| 14822 | Set the specified environment variable to be passed to child processes. | ||
| 14823 | |||
| 14824 | Defaults to @samp{"variable value"}. | ||
| 14825 | @end deftypevr | ||
| 14826 | |||
| 14827 | @deftypevr {@code{cups-configuration} parameter} multiline-string-list ssl-listen | ||
| 14828 | Listens on the specified interfaces for encrypted connections. Valid values | ||
| 14829 | are of the form @var{address}:@var{port}, where @var{address} is either an | ||
| 14830 | IPv6 address enclosed in brackets, an IPv4 address, or @code{*} to indicate | ||
| 14831 | all addresses. | ||
| 14832 | |||
| 14833 | Defaults to @samp{()}. | ||
| 14834 | @end deftypevr | ||
| 14835 | |||
| 14836 | @deftypevr {@code{cups-configuration} parameter} ssl-options ssl-options | ||
| 14837 | Sets encryption options. By default, CUPS only supports encryption using | ||
| 14838 | TLS v1.0 or higher using known secure cipher suites. The @code{AllowRC4} | ||
| 14839 | option enables the 128-bit RC4 cipher suites, which are required for some | ||
| 14840 | older clients that do not implement newer ones. The @code{AllowSSL3} option | ||
| 14841 | enables SSL v3.0, which is required for some older clients that do not | ||
| 14842 | support TLS v1.0. | ||
| 14843 | |||
| 14844 | Defaults to @samp{()}. | ||
| 14845 | @end deftypevr | ||
| 14846 | |||
| 14847 | @deftypevr {@code{cups-configuration} parameter} boolean strict-conformance? | ||
| 14848 | Specifies whether the scheduler requires clients to strictly adhere to the | ||
| 14849 | IPP specifications. | ||
| 14850 | |||
| 14851 | El valor predeterminado es @samp{#f} | ||
| 14852 | @end deftypevr | ||
| 14853 | |||
| 14854 | @deftypevr {@code{cups-configuration} parameter} non-negative-integer timeout | ||
| 14855 | Specifies the HTTP request timeout, in seconds. | ||
| 14856 | |||
| 14857 | Defaults to @samp{300}. | ||
| 14858 | |||
| 14859 | @end deftypevr | ||
| 14860 | |||
| 14861 | @deftypevr {@code{cups-configuration} parameter} boolean web-interface? | ||
| 14862 | Specifies whether the web interface is enabled. | ||
| 14863 | |||
| 14864 | El valor predeterminado es @samp{#f} | ||
| 14865 | @end deftypevr | ||
| 14866 | |||
| 14867 | At this point you're probably thinking ``oh dear, Guix manual, I like you | ||
| 14868 | but you can stop already with the configuration options''. Indeed. | ||
| 14869 | However, 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 | |||
| 14874 | Available @code{opaque-cups-configuration} fields are: | ||
| 14875 | |||
| 14876 | @deftypevr {@code{opaque-cups-configuration} parameter} package cups | ||
| 14877 | El paquete CUPS. | ||
| 14878 | @end deftypevr | ||
| 14879 | |||
| 14880 | @deftypevr {@code{opaque-cups-configuration} parameter} string cupsd.conf | ||
| 14881 | The contents of the @code{cupsd.conf}, as a string. | ||
| 14882 | @end deftypevr | ||
| 14883 | |||
| 14884 | @deftypevr {@code{opaque-cups-configuration} parameter} string cups-files.conf | ||
| 14885 | The contents of the @code{cups-files.conf} file, as a string. | ||
| 14886 | @end deftypevr | ||
| 14887 | |||
| 14888 | For example, if your @code{cupsd.conf} and @code{cups-files.conf} are in | ||
| 14889 | strings 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 | |||
| 14902 | The @code{(gnu services desktop)} module provides services that are usually | ||
| 14903 | useful in the context of a ``desktop'' setup---that is, on a machine running | ||
| 14904 | a graphical display server, possibly with graphical user interfaces, etc. | ||
| 14905 | It also defines services that provide specific desktop environments like | ||
| 14906 | GNOME, Xfce or MATE. | ||
| 14907 | |||
| 14908 | To simplify things, the module defines a variable containing the set of | ||
| 14909 | services that users typically expect on a machine with a graphical | ||
| 14910 | environment and networking: | ||
| 14911 | |||
| 14912 | @defvr {Variable Scheme} %desktop-services | ||
| 14913 | This is a list of services that builds upon @var{%base-services} and adds or | ||
| 14914 | adjusts services for a typical ``desktop'' setup. | ||
| 14915 | |||
| 14916 | In 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 | ||
| 14919 | and color management services, the @code{elogind} login and seat manager, | ||
| 14920 | the Polkit privilege service, the GeoClue location service, the | ||
| 14921 | AccountsService daemon that allows authorized users change system passwords, | ||
| 14922 | an NTP client (@pxref{Servicios de red}), the Avahi daemon, and has the | ||
| 14923 | name service switch service configured to be able to use @code{nss-mdns} | ||
| 14924 | (@pxref{Selector de servicios de nombres, mDNS}). | ||
| 14925 | @end defvr | ||
| 14926 | |||
| 14927 | The @var{%desktop-services} variable can be used as the @code{services} | ||
| 14928 | field of an @code{operating-system} declaration (@pxref{Referencia de ``operating-system'', @code{services}}). | ||
| 14929 | |||
| 14930 | Additionally, 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, | ||
| 14933 | MATE and/or Enlightenment to a system. To ``add GNOME'' means that | ||
| 14934 | system-level services like the backlight adjustment helpers and the power | ||
| 14935 | management utilities are added to the system, extending @code{polkit} and | ||
| 14936 | @code{dbus} appropriately, allowing GNOME to operate with elevated | ||
| 14937 | privileges on a limited number of special-purpose system interfaces. | ||
| 14938 | Additionally, adding a service made by @code{gnome-desktop-service-type} | ||
| 14939 | adds the GNOME metapackage to the system profile. Likewise, adding the Xfce | ||
| 14940 | service not only adds the @code{xfce} metapackage to the system profile, but | ||
| 14941 | it also gives the Thunar file manager the ability to open a ``root-mode'' | ||
| 14942 | file management window, if the user authenticates using the administrator's | ||
| 14943 | password via the standard polkit graphical interface. To ``add MATE'' means | ||
| 14944 | that @code{polkit} and @code{dbus} are extended appropriately, allowing MATE | ||
| 14945 | to operate with elevated privileges on a limited number of special-purpose | ||
| 14946 | system interfaces. Additionally, adding a service of type | ||
| 14947 | @code{mate-desktop-service-type} adds the MATE metapackage to the system | ||
| 14948 | profile. ``Adding Enlightenment'' means that @code{dbus} is extended | ||
| 14949 | appropriately, and several of Enlightenment's binaries are set as setuid, | ||
| 14950 | allowing Enlightenment's screen locker and other functionality to work as | ||
| 14951 | expetected. | ||
| 14952 | |||
| 14953 | The desktop environments in Guix use the Xorg display server by default. If | ||
| 14954 | you'd like to use the newer display server protocol called Wayland, you need | ||
| 14955 | to use the @code{sddm-service} instead of GDM as the graphical login | ||
| 14956 | manager. You should then select the ``GNOME (Wayland)'' session in SDDM. | ||
| 14957 | Alternatively you can also try starting GNOME on Wayland manually from a TTY | ||
| 14958 | with the command ``XDG_SESSION_TYPE=wayland exec dbus-run-session | ||
| 14959 | gnome-session``. Currently only GNOME has support for Wayland. | ||
| 14960 | |||
| 14961 | @defvr {Scheme Variable} gnome-desktop-service-type | ||
| 14962 | This is the type of the service that adds the @uref{https://www.gnome.org, | ||
| 14963 | GNOME} desktop environment. Its value is a | ||
| 14964 | @code{gnome-desktop-configuration} object (see below.) | ||
| 14965 | |||
| 14966 | This service adds the @code{gnome} package to the system profile, and | ||
| 14967 | extends polkit with the actions from @code{gnome-settings-daemon}. | ||
| 14968 | @end defvr | ||
| 14969 | |||
| 14970 | @deftp {Data Type} gnome-desktop-configuration | ||
| 14971 | Configuration record for the GNOME desktop environment. | ||
| 14972 | |||
| 14973 | @table @asis | ||
| 14974 | @item @code{gnome} (default @code{gnome}) | ||
| 14975 | The GNOME package to use. | ||
| 14976 | @end table | ||
| 14977 | @end deftp | ||
| 14978 | |||
| 14979 | @defvr {Scheme Variable} xfce-desktop-service-type | ||
| 14980 | This is the type of a service to run the @uref{Xfce, https://xfce.org/} | ||
| 14981 | desktop environment. Its value is an @code{xfce-desktop-configuration} | ||
| 14982 | object (see below.) | ||
| 14983 | |||
| 14984 | This service that adds the @code{xfce} package to the system profile, and | ||
| 14985 | extends polkit with the ability for @code{thunar} to manipulate the file | ||
| 14986 | system as root from within a user session, after the user has authenticated | ||
| 14987 | with the administrator's password. | ||
| 14988 | @end defvr | ||
| 14989 | |||
| 14990 | @deftp {Data Type} xfce-desktop-configuration | ||
| 14991 | Configuration record for the Xfce desktop environment. | ||
| 14992 | |||
| 14993 | @table @asis | ||
| 14994 | @item @code{xfce} (default @code{xfce}) | ||
| 14995 | The Xfce package to use. | ||
| 14996 | @end table | ||
| 14997 | @end deftp | ||
| 14998 | |||
| 14999 | @deffn {Scheme Variable} mate-desktop-service-type | ||
| 15000 | This 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 | |||
| 15004 | This service adds the @code{mate} package to the system profile, and extends | ||
| 15005 | polkit with the actions from @code{mate-settings-daemon}. | ||
| 15006 | @end deffn | ||
| 15007 | |||
| 15008 | @deftp {Data Type} mate-desktop-configuration | ||
| 15009 | Configuration record for the MATE desktop environment. | ||
| 15010 | |||
| 15011 | @table @asis | ||
| 15012 | @item @code{mate} (default @code{mate}) | ||
| 15013 | The MATE package to use. | ||
| 15014 | @end table | ||
| 15015 | @end deftp | ||
| 15016 | |||
| 15017 | @deffn {Scheme Variable} enlightenment-desktop-service-type | ||
| 15018 | Return a service that adds the @code{enlightenment} package to the system | ||
| 15019 | profile, 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}) | ||
| 15025 | El paquete enlightenment usado. | ||
| 15026 | @end table | ||
| 15027 | @end deftp | ||
| 15028 | |||
| 15029 | Because the GNOME, Xfce and MATE desktop services pull in so many packages, | ||
| 15030 | the default @code{%desktop-services} variable doesn't include any of them by | ||
| 15031 | default. 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 | |||
| 15047 | These desktop environments will then be available as options in the | ||
| 15048 | graphical login window. | ||
| 15049 | |||
| 15050 | The actual service definitions included in @code{%desktop-services} and | ||
| 15051 | provided by @code{(gnu services dbus)} and @code{(gnu services desktop)} are | ||
| 15052 | described below. | ||
| 15053 | |||
| 15054 | @deffn {Procedimiento Scheme} dbus-service [#:dbus @var{dbus}] [#:services '()] | ||
| 15055 | Return a service that runs the ``system bus'', using @var{dbus}, with | ||
| 15056 | support for @var{services}. | ||
| 15057 | |||
| 15058 | @uref{http://dbus.freedesktop.org/, D-Bus} is an inter-process communication | ||
| 15059 | facility. Its system bus is used to allow system services to communicate | ||
| 15060 | and 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 | ||
| 15064 | configuration and policy files. For example, to allow avahi-daemon to use | ||
| 15065 | the system bus, @var{services} must be equal to @code{(list avahi)}. | ||
| 15066 | @end deffn | ||
| 15067 | |||
| 15068 | @deffn {Procedimiento Scheme} elogind-service [#:config @var{config}] | ||
| 15069 | Return a service that runs the @code{elogind} login and seat management | ||
| 15070 | daemon. @uref{https://github.com/elogind/elogind, Elogind} exposes a D-Bus | ||
| 15071 | interface that can be used to know which users are logged in, know what kind | ||
| 15072 | of sessions they have open, suspend the system, inhibit system suspend, | ||
| 15073 | reboot the system, and other tasks. | ||
| 15074 | |||
| 15075 | Elogind handles most system-level power events for a computer, for example | ||
| 15076 | suspending the system when a lid is closed, or shutting it down when the | ||
| 15077 | power button is pressed. | ||
| 15078 | |||
| 15079 | The @var{config} keyword argument specifies the configuration for elogind, | ||
| 15080 | and should be the result of an @code{(elogind-configuration (@var{parameter} | ||
| 15081 | @var{value})...)} invocation. Available parameters and their default values | ||
| 15082 | are: | ||
| 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 | ||
| 15140 | AccountsService, a system service that can list available accounts, change | ||
| 15141 | their passwords, and so on. AccountsService integrates with PolicyKit to | ||
| 15142 | enable unprivileged users to acquire the capability to modify their system | ||
| 15143 | configuration. | ||
| 15144 | @uref{https://www.freedesktop.org/wiki/Software/AccountsService/, the | ||
| 15145 | accountsservice web site} for more information. | ||
| 15146 | |||
| 15147 | The @var{accountsservice} keyword argument is the @code{accountsservice} | ||
| 15148 | package 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 | ||
| 15154 | management service}, which allows system administrators to grant access to | ||
| 15155 | privileged operations in a structured way. By querying the Polkit service, | ||
| 15156 | a privileged system component can know when it should grant additional | ||
| 15157 | capabilities to ordinary users. For example, an ordinary user can be | ||
| 15158 | granted the capability to suspend the system if the user is logged in | ||
| 15159 | locally. | ||
| 15160 | @end deffn | ||
| 15161 | |||
| 15162 | @defvr {Scheme Variable} upower-service-type | ||
| 15163 | Service that runs @uref{http://upower.freedesktop.org/, @command{upowerd}}, | ||
| 15164 | a system-wide monitor for power consumption and battery levels, with the | ||
| 15165 | given configuration settings. | ||
| 15166 | |||
| 15167 | It implements the @code{org.freedesktop.UPower} D-Bus interface, and is | ||
| 15168 | notably used by GNOME. | ||
| 15169 | @end defvr | ||
| 15170 | |||
| 15171 | @deftp {Data Type} upower-configuration | ||
| 15172 | Data type representation the configuration for UPower. | ||
| 15173 | |||
| 15174 | @table @asis | ||
| 15175 | |||
| 15176 | @item @code{upower} (default: @var{upower}) | ||
| 15177 | Package to use for @code{upower}. | ||
| 15178 | |||
| 15179 | @item @code{watts-up-pro?} (default: @code{#f}) | ||
| 15180 | Enable the Watts Up Pro device. | ||
| 15181 | |||
| 15182 | @item @code{poll-batteries?} (default: @code{#t}) | ||
| 15183 | Enable polling the kernel for battery level changes. | ||
| 15184 | |||
| 15185 | @item @code{ignore-lid?} (default: @code{#f}) | ||
| 15186 | Ignore 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}) | ||
| 15189 | Whether battery percentage based policy should be used. The default is to | ||
| 15190 | use the time left, change to @code{#t} to use the percentage. | ||
| 15191 | |||
| 15192 | @item @code{percentage-low} (default: @code{10}) | ||
| 15193 | When @code{use-percentage-for-policy?} is @code{#t}, this sets the | ||
| 15194 | percentage at which the battery is considered low. | ||
| 15195 | |||
| 15196 | @item @code{percentage-critical} (default: @code{3}) | ||
| 15197 | When @code{use-percentage-for-policy?} is @code{#t}, this sets the | ||
| 15198 | percentage at which the battery is considered critical. | ||
| 15199 | |||
| 15200 | @item @code{percentage-action} (default: @code{2}) | ||
| 15201 | When @code{use-percentage-for-policy?} is @code{#t}, this sets the | ||
| 15202 | percentage at which action will be taken. | ||
| 15203 | |||
| 15204 | @item @code{time-low} (default: @code{1200}) | ||
| 15205 | When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining | ||
| 15206 | in seconds at which the battery is considered low. | ||
| 15207 | |||
| 15208 | @item @code{time-critical} (default: @code{300}) | ||
| 15209 | When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining | ||
| 15210 | in seconds at which the battery is considered critical. | ||
| 15211 | |||
| 15212 | @item @code{time-action} (default: @code{120}) | ||
| 15213 | When @code{use-time-for-policy?} is @code{#f}, this sets the time remaining | ||
| 15214 | in seconds at which action will be taken. | ||
| 15215 | |||
| 15216 | @item @code{critical-power-action} (default: @code{'hybrid-sleep}) | ||
| 15217 | The action taken when @code{percentage-action} or @code{time-action} is | ||
| 15218 | reached (depending on the configuration of | ||
| 15219 | @code{use-percentage-for-policy?}). | ||
| 15220 | |||
| 15221 | Possible 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}] | ||
| 15238 | Return a service for @uref{http://udisks.freedesktop.org/docs/latest/, | ||
| 15239 | UDisks}, a @dfn{disk management} daemon that provides user interfaces with | ||
| 15240 | notifications and ways to mount/unmount disks. Programs that talk to UDisks | ||
| 15241 | include the @command{udisksctl} command, part of UDisks, and GNOME Disks. | ||
| 15242 | @end deffn | ||
| 15243 | |||
| 15244 | @deffn {Procedimiento Scheme} colord-service [#:colord @var{colord}] | ||
| 15245 | Return a service that runs @command{colord}, a system service with a D-Bus | ||
| 15246 | interface to manage the color profiles of input and output devices such as | ||
| 15247 | screens and scanners. It is notably used by the GNOME Color Manager | ||
| 15248 | graphical tool. See @uref{http://www.freedesktop.org/software/colord/, the | ||
| 15249 | colord web site} for more information. | ||
| 15250 | @end deffn | ||
| 15251 | |||
| 15252 | @deffn {Scheme Procedure} geoclue-application name [#:allowed? #t] [#:system? #f] [#:users '()] | ||
| 15253 | Return a configuration allowing an application to access GeoClue location | ||
| 15254 | data. @var{name} is the Desktop ID of the application, without the | ||
| 15255 | @code{.desktop} part. If @var{allowed?} is true, the application will have | ||
| 15256 | access to location information by default. The boolean @var{system?} value | ||
| 15257 | indicates 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 | ||
| 15259 | allowed location info access. An empty users list means that all users are | ||
| 15260 | allowed. | ||
| 15261 | @end deffn | ||
| 15262 | |||
| 15263 | @defvr {Variable Scheme} %standard-geoclue-applications | ||
| 15264 | The standard list of well-known GeoClue application configurations, granting | ||
| 15265 | authority to the GNOME date-and-time utility to ask for the current location | ||
| 15266 | in order to set the time zone, and allowing the IceCat and Epiphany web | ||
| 15267 | browsers to request location information. IceCat and Epiphany both query | ||
| 15268 | the 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 | ||
| 15278 | location service. This service provides a D-Bus interface to allow | ||
| 15279 | applications to request access to a user's physical location, and optionally | ||
| 15280 | to add information to online location databases. See | ||
| 15281 | @uref{https://wiki.freedesktop.org/www/Software/GeoClue/, the GeoClue web | ||
| 15282 | site} 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} | ||
| 15287 | daemon, which manages all the Bluetooth devices and provides a number of | ||
| 15288 | D-Bus interfaces. When AUTO-ENABLE? is true, the bluetooth controller is | ||
| 15289 | powered automatically at boot, which can be useful when using a bluetooth | ||
| 15290 | keyboard or mouse. | ||
| 15291 | |||
| 15292 | Users 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 | |||
| 15302 | The @code{(gnu services sound)} module provides a service to configure the | ||
| 15303 | Advanced Linux Sound Architecture (ALSA) system, which makes PulseAudio the | ||
| 15304 | preferred ALSA output driver. | ||
| 15305 | |||
| 15306 | @deffn {Variable Scheme} alsa-service-type | ||
| 15307 | This is the type for the @uref{https://alsa-project.org/, Advanced Linux | ||
| 15308 | Sound 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 | |||
| 15316 | See below for details about @code{alsa-configuration}. | ||
| 15317 | @end deffn | ||
| 15318 | |||
| 15319 | @deftp {Tipo de datos} alsa-configuration | ||
| 15320 | Data type representing the configuration for @code{alsa-service}. | ||
| 15321 | |||
| 15322 | @table @asis | ||
| 15323 | @item @code{alsa-plugins} (predeterminados: @var{alsa-plugins}) | ||
| 15324 | El paquete @code{alsa-plugins} usado. | ||
| 15325 | |||
| 15326 | @item @code{pulseaudio?} (predeterminado: @var{#t}) | ||
| 15327 | Whether ALSA applications should transparently be made to use the | ||
| 15328 | @uref{http://www.pulseaudio.org/, PulseAudio} sound server. | ||
| 15329 | |||
| 15330 | Using PulseAudio allows you to run several sound-producing applications at | ||
| 15331 | the same time and to individual control them @i{via} @command{pavucontrol}, | ||
| 15332 | among other things. | ||
| 15333 | |||
| 15334 | @item @code{extra-options} (predeterminado: @var{""}) | ||
| 15335 | String to append to the @file{/etc/asound.conf} file. | ||
| 15336 | |||
| 15337 | @end table | ||
| 15338 | @end deftp | ||
| 15339 | |||
| 15340 | Individual users who want to override the system configuration of ALSA can | ||
| 15341 | do it with the @file{~/.asoundrc} file: | ||
| 15342 | |||
| 15343 | @example | ||
| 15344 | # In guix, we have to specify the absolute path for plugins. | ||
| 15345 | pcm_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>. | ||
| 15351 | pcm.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 | |||
| 15364 | pcm.!default @{ | ||
| 15365 | type plug | ||
| 15366 | slave @{ | ||
| 15367 | pcm "rawjack" | ||
| 15368 | @} | ||
| 15369 | @} | ||
| 15370 | @end example | ||
| 15371 | |||
| 15372 | See @uref{https://www.alsa-project.org/main/index.php/Asoundrc} for the | ||
| 15373 | details. | ||
| 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 | ||
| 15381 | El módulo @code{(gnu services databases)} proporciona los siguientes | ||
| 15382 | servicios. | ||
| 15383 | |||
| 15384 | @deffn {Procedimiento Scheme} postgresql-service [#:postgresql postgresql] @ | ||
| 15385 | [#:config-file] [#:data-directory ``/var/lib/postgresql/data''] @ [#:port | ||
| 15386 | 5432] [#:locale ``en_US.utf8''] [#:extension-packages '()] Return a service | ||
| 15387 | that runs @var{postgresql}, the PostgreSQL database server. | ||
| 15388 | |||
| 15389 | The PostgreSQL daemon loads its runtime configuration from | ||
| 15390 | @var{config-file}, creates a database cluster with @var{locale} as the | ||
| 15391 | default locale, stored in @var{data-directory}. It then listens on | ||
| 15392 | @var{port}. | ||
| 15393 | |||
| 15394 | @cindex postgresql extension-packages | ||
| 15395 | Additional extensions are loaded from packages listed in | ||
| 15396 | @var{extension-packages}. Extensions are available at runtime. For | ||
| 15397 | instance, to create a geographic database using the @code{postgis} | ||
| 15398 | extension, 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 | |||
| 15415 | Then the extension becomes visible and you can initialise an empty | ||
| 15416 | geographic database in this way: | ||
| 15417 | |||
| 15418 | @example | ||
| 15419 | psql -U postgres | ||
| 15420 | > create database postgistest; | ||
| 15421 | > \connect postgistest; | ||
| 15422 | > create extension postgis; | ||
| 15423 | > create extension postgis_topology; | ||
| 15424 | @end example | ||
| 15425 | |||
| 15426 | There is no need to add this field for contrib extensions such as hstore or | ||
| 15427 | dblink as they are already loadable by postgresql. This field is only | ||
| 15428 | required to add extensions provided by other packages. | ||
| 15429 | @end deffn | ||
| 15430 | |||
| 15431 | @deffn {Procedimiento Scheme} mysql-service [#:config (mysql-configuration)] | ||
| 15432 | Return a service that runs @command{mysqld}, the MySQL or MariaDB database | ||
| 15433 | server. | ||
| 15434 | |||
| 15435 | El 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 | ||
| 15440 | Data type representing the configuration of @var{mysql-service}. | ||
| 15441 | |||
| 15442 | @table @asis | ||
| 15443 | @item @code{mysql} (predeterminado: @var{mariadb}) | ||
| 15444 | Package object of the MySQL database server, can be either @var{mariadb} or | ||
| 15445 | @var{mysql}. | ||
| 15446 | |||
| 15447 | For MySQL, a temporary root password will be displayed at activation time. | ||
| 15448 | For MariaDB, the root password is empty. | ||
| 15449 | |||
| 15450 | @item @code{port} (predeterminado: @code{3306}) | ||
| 15451 | TCP port on which the database server listens for incoming connections. | ||
| 15452 | @end table | ||
| 15453 | @end deftp | ||
| 15454 | |||
| 15455 | @defvr {Variable Scheme} memcached-service-type | ||
| 15456 | This is the service type for the @uref{https://memcached.org/, Memcached} | ||
| 15457 | service, which provides a distributed in memory cache. The value for the | ||
| 15458 | service 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 | ||
| 15466 | Data type representing the configuration of memcached. | ||
| 15467 | |||
| 15468 | @table @asis | ||
| 15469 | @item @code{memcached} (predeterminado: @code{memcached}) | ||
| 15470 | El paquete de Memcached usado. | ||
| 15471 | |||
| 15472 | @item @code{interfaces} (predeterminadas: @code{'("0.0.0.0")}) | ||
| 15473 | Network interfaces on which to listen. | ||
| 15474 | |||
| 15475 | @item @code{tcp-port} (predeterminado: @code{11211}) | ||
| 15476 | Port on which to accept connections on, | ||
| 15477 | |||
| 15478 | @item @code{udp-port} (predeterminado: @code{11211}) | ||
| 15479 | Port on which to accept UDP connections on, a value of 0 will disable | ||
| 15480 | listening on a UDP socket. | ||
| 15481 | |||
| 15482 | @item @code{additional-options} (predeterminadas: @code{'()}) | ||
| 15483 | Additional command line options to pass to @code{memcached}. | ||
| 15484 | @end table | ||
| 15485 | @end deftp | ||
| 15486 | |||
| 15487 | @defvr {Variable Scheme} mongodb-service-type | ||
| 15488 | This is the service type for @uref{https://www.mongodb.com/, MongoDB}. The | ||
| 15489 | value 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 | ||
| 15497 | Tipo de datos que representa la configuración de GPM. | ||
| 15498 | |||
| 15499 | @table @asis | ||
| 15500 | @item @code{mongodb} (predeterminado: @code{mongodb}) | ||
| 15501 | El paquete MongoDB usado. | ||
| 15502 | |||
| 15503 | @item @code{config-file} (predeterminado: @code{%default-mongodb-configuration-file}) | ||
| 15504 | The configuration file for MongoDB. | ||
| 15505 | |||
| 15506 | @item @code{data-directory} (predeterminado: @code{"/var/lib/mongodb"}) | ||
| 15507 | This value is used to create the directory, so that it exists and is owned | ||
| 15508 | by the mongodb user. It should match the data-directory which MongoDB is | ||
| 15509 | configured to use through the configuration file. | ||
| 15510 | @end table | ||
| 15511 | @end deftp | ||
| 15512 | |||
| 15513 | @defvr {Variable Scheme} redis-service-type | ||
| 15514 | This is the service type for the @uref{https://redis.io/, Redis} key/value | ||
| 15515 | store, whose value is a @code{redis-configuration} object. | ||
| 15516 | @end defvr | ||
| 15517 | |||
| 15518 | @deftp {Tipo de datos} redis-configuration | ||
| 15519 | Data type representing the configuration of redis. | ||
| 15520 | |||
| 15521 | @table @asis | ||
| 15522 | @item @code{redis} (predeterminado: @code{redis}) | ||
| 15523 | The Redis package to use. | ||
| 15524 | |||
| 15525 | @item @code{bind} (predeterminada: @code{"127.0.0.1"}) | ||
| 15526 | La interfaz de red en la que se escucha. | ||
| 15527 | |||
| 15528 | @item @code{port} (predeterminado: @code{6379}) | ||
| 15529 | Port on which to accept connections on, a value of 0 will disable listening | ||
| 15530 | on a TCP socket. | ||
| 15531 | |||
| 15532 | @item @code{working-directory} (predeterminado: @code{"/var/lib/redis"}) | ||
| 15533 | Directory 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 | ||
| 15542 | The @code{(gnu services mail)} module provides Guix service definitions for | ||
| 15543 | email services: IMAP, POP3, and LMTP servers, as well as mail transport | ||
| 15544 | agents (MTAs). Lots of acronyms! These services are detailed in the | ||
| 15545 | subsections below. | ||
| 15546 | |||
| 15547 | @subsubheading Servicio Dovecot | ||
| 15548 | |||
| 15549 | @deffn {Procedimiento Scheme} dovecot-service [#:config (dovecot-configuration)] | ||
| 15550 | Return a service that runs the Dovecot IMAP/POP3/LMTP mail server. | ||
| 15551 | @end deffn | ||
| 15552 | |||
| 15553 | By default, Dovecot does not need much configuration; the default | ||
| 15554 | configuration object created by @code{(dovecot-configuration)} will suffice | ||
| 15555 | if your mail is delivered to @code{~/Maildir}. A self-signed certificate | ||
| 15556 | will be generated for TLS-protected connections, though Dovecot will also | ||
| 15557 | listen on cleartext ports by default. There are a number of options, | ||
| 15558 | though, which mail administrators might need to change, and as is the case | ||
| 15559 | with other services, Guix allows the system administrator to specify these | ||
| 15560 | parameters via a uniform Scheme interface. | ||
| 15561 | |||
| 15562 | Por ejemplo, para especificar que el correo se encuentra en | ||
| 15563 | @code{maildir:~/.correo}, se debe instanciar el servicio de Dovecot de esta | ||
| 15564 | manera: | ||
| 15565 | |||
| 15566 | @example | ||
| 15567 | (dovecot-service #:config | ||
| 15568 | (dovecot-configuration | ||
| 15569 | (mail-location "maildir:~/.correo"))) | ||
| 15570 | @end example | ||
| 15571 | |||
| 15572 | The available configuration parameters follow. Each parameter definition is | ||
| 15573 | preceded 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 | ||
| 15575 | also 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; | ||
| 15577 | see 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 | |||
| 15587 | Available @code{dovecot-configuration} fields are: | ||
| 15588 | |||
| 15589 | @deftypevr {@code{dovecot-configuration} parameter} package dovecot | ||
| 15590 | El paquete dovecot. | ||
| 15591 | @end deftypevr | ||
| 15592 | |||
| 15593 | @deftypevr {@code{dovecot-configuration} parameter} comma-separated-string-list listen | ||
| 15594 | A list of IPs or hosts where to listen for connections. @samp{*} listens on | ||
| 15595 | all IPv4 interfaces, @samp{::} listens on all IPv6 interfaces. If you want | ||
| 15596 | to specify non-default ports or anything more complex, customize the address | ||
| 15597 | and port fields of the @samp{inet-listener} of the specific services you are | ||
| 15598 | interested in. | ||
| 15599 | @end deftypevr | ||
| 15600 | |||
| 15601 | @deftypevr {@code{dovecot-configuration} parameter} protocol-configuration-list protocols | ||
| 15602 | List of protocols we want to serve. Available protocols include | ||
| 15603 | @samp{imap}, @samp{pop3}, and @samp{lmtp}. | ||
| 15604 | |||
| 15605 | Available @code{protocol-configuration} fields are: | ||
| 15606 | |||
| 15607 | @deftypevr {@code{protocol-configuration} parameter} string name | ||
| 15608 | El nombre del protocolo. | ||
| 15609 | @end deftypevr | ||
| 15610 | |||
| 15611 | @deftypevr {@code{protocol-configuration} parameter} string auth-socket-path | ||
| 15612 | UNIX socket path to the master authentication server to find users. This is | ||
| 15613 | used 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 | ||
| 15618 | Space separated list of plugins to load. | ||
| 15619 | @end deftypevr | ||
| 15620 | |||
| 15621 | @deftypevr {@code{protocol-configuration} parameter} non-negative-integer mail-max-userip-connections | ||
| 15622 | Maximum number of IMAP connections allowed for a user from each IP address. | ||
| 15623 | NOTE: 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 | ||
| 15629 | List 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 | |||
| 15633 | Available @code{service-configuration} fields are: | ||
| 15634 | |||
| 15635 | @deftypevr {@code{service-configuration} parameter} string kind | ||
| 15636 | The 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 | ||
| 15639 | anything else. | ||
| 15640 | @end deftypevr | ||
| 15641 | |||
| 15642 | @deftypevr {@code{service-configuration} parameter} listener-configuration-list listeners | ||
| 15643 | Listeners for the service. A listener is either a | ||
| 15644 | @code{unix-listener-configuration}, a @code{fifo-listener-configuration}, or | ||
| 15645 | an @code{inet-listener-configuration}. Defaults to @samp{()}. | ||
| 15646 | |||
| 15647 | Available @code{unix-listener-configuration} fields are: | ||
| 15648 | |||
| 15649 | @deftypevr {@code{unix-listener-configuration} parameter} string path | ||
| 15650 | Path to the file, relative to @code{base-dir} field. This is also used as | ||
| 15651 | the section name. | ||
| 15652 | @end deftypevr | ||
| 15653 | |||
| 15654 | @deftypevr {@code{unix-listener-configuration} parameter} string mode | ||
| 15655 | The access mode for the socket. Defaults to @samp{"0600"}. | ||
| 15656 | @end deftypevr | ||
| 15657 | |||
| 15658 | @deftypevr {@code{unix-listener-configuration} parameter} string user | ||
| 15659 | The user to own the socket. Defaults to @samp{""}. | ||
| 15660 | @end deftypevr | ||
| 15661 | |||
| 15662 | @deftypevr {@code{unix-listener-configuration} parameter} string group | ||
| 15663 | The group to own the socket. Defaults to @samp{""}. | ||
| 15664 | @end deftypevr | ||
| 15665 | |||
| 15666 | |||
| 15667 | Available @code{fifo-listener-configuration} fields are: | ||
| 15668 | |||
| 15669 | @deftypevr {@code{fifo-listener-configuration} parameter} string path | ||
| 15670 | Path to the file, relative to @code{base-dir} field. This is also used as | ||
| 15671 | the section name. | ||
| 15672 | @end deftypevr | ||
| 15673 | |||
| 15674 | @deftypevr {@code{fifo-listener-configuration} parameter} string mode | ||
| 15675 | The access mode for the socket. Defaults to @samp{"0600"}. | ||
| 15676 | @end deftypevr | ||
| 15677 | |||
| 15678 | @deftypevr {@code{fifo-listener-configuration} parameter} string user | ||
| 15679 | The user to own the socket. Defaults to @samp{""}. | ||
| 15680 | @end deftypevr | ||
| 15681 | |||
| 15682 | @deftypevr {@code{fifo-listener-configuration} parameter} string group | ||
| 15683 | The group to own the socket. Defaults to @samp{""}. | ||
| 15684 | @end deftypevr | ||
| 15685 | |||
| 15686 | |||
| 15687 | Available @code{inet-listener-configuration} fields are: | ||
| 15688 | |||
| 15689 | @deftypevr {@code{inet-listener-configuration} parameter} string protocol | ||
| 15690 | The protocol to listen for. | ||
| 15691 | @end deftypevr | ||
| 15692 | |||
| 15693 | @deftypevr {@code{inet-listener-configuration} parameter} string address | ||
| 15694 | The 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 | ||
| 15699 | The port on which to listen. | ||
| 15700 | @end deftypevr | ||
| 15701 | |||
| 15702 | @deftypevr {@code{inet-listener-configuration} parameter} boolean ssl? | ||
| 15703 | Whether 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 | ||
| 15710 | Maximum number of simultaneous client connections per process. Once this | ||
| 15711 | number of connections is received, the next incoming connection will prompt | ||
| 15712 | Dovecot to spawn another process. If set to 0, @code{default-client-limit} | ||
| 15713 | is used instead. | ||
| 15714 | |||
| 15715 | El valor predeterminado es @samp{0}. | ||
| 15716 | |||
| 15717 | @end deftypevr | ||
| 15718 | |||
| 15719 | @deftypevr {@code{service-configuration} parameter} non-negative-integer service-count | ||
| 15720 | Number of connections to handle before starting a new process. Typically | ||
| 15721 | the only useful values are 0 (unlimited) or 1. 1 is more secure, but 0 is | ||
| 15722 | faster. <doc/wiki/LoginProcess.txt>. Defaults to @samp{1}. | ||
| 15723 | |||
| 15724 | @end deftypevr | ||
| 15725 | |||
| 15726 | @deftypevr {@code{service-configuration} parameter} non-negative-integer process-limit | ||
| 15727 | Maximum number of processes that can exist for this service. If set to 0, | ||
| 15728 | @code{default-process-limit} is used instead. | ||
| 15729 | |||
| 15730 | El valor predeterminado es @samp{0}. | ||
| 15731 | |||
| 15732 | @end deftypevr | ||
| 15733 | |||
| 15734 | @deftypevr {@code{service-configuration} parameter} non-negative-integer process-min-avail | ||
| 15735 | Number of processes to always keep waiting for more connections. Defaults | ||
| 15736 | to @samp{0}. | ||
| 15737 | @end deftypevr | ||
| 15738 | |||
| 15739 | @deftypevr {@code{service-configuration} parameter} non-negative-integer vsz-limit | ||
| 15740 | If you set @samp{service-count 0}, you probably need to grow this. Defaults | ||
| 15741 | to @samp{256000000}. | ||
| 15742 | @end deftypevr | ||
| 15743 | |||
| 15744 | @end deftypevr | ||
| 15745 | |||
| 15746 | @deftypevr {@code{dovecot-configuration} parameter} dict-configuration dict | ||
| 15747 | Dict configuration, as created by the @code{dict-configuration} constructor. | ||
| 15748 | |||
| 15749 | Available @code{dict-configuration} fields are: | ||
| 15750 | |||
| 15751 | @deftypevr {@code{dict-configuration} parameter} free-form-fields entries | ||
| 15752 | A 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 | ||
| 15759 | A list of passdb configurations, each one created by the | ||
| 15760 | @code{passdb-configuration} constructor. | ||
| 15761 | |||
| 15762 | Available @code{passdb-configuration} fields are: | ||
| 15763 | |||
| 15764 | @deftypevr {@code{passdb-configuration} parameter} string driver | ||
| 15765 | The driver that the passdb should use. Valid values include @samp{pam}, | ||
| 15766 | @samp{passwd}, @samp{shadow}, @samp{bsdauth}, and @samp{static}. Defaults | ||
| 15767 | to @samp{"pam"}. | ||
| 15768 | @end deftypevr | ||
| 15769 | |||
| 15770 | @deftypevr {@code{passdb-configuration} parameter} space-separated-string-list args | ||
| 15771 | Space 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 | ||
| 15778 | List of userdb configurations, each one created by the | ||
| 15779 | @code{userdb-configuration} constructor. | ||
| 15780 | |||
| 15781 | Available @code{userdb-configuration} fields are: | ||
| 15782 | |||
| 15783 | @deftypevr {@code{userdb-configuration} parameter} string driver | ||
| 15784 | The driver that the userdb should use. Valid values include @samp{passwd} | ||
| 15785 | and @samp{static}. Defaults to @samp{"passwd"}. | ||
| 15786 | @end deftypevr | ||
| 15787 | |||
| 15788 | @deftypevr {@code{userdb-configuration} parameter} space-separated-string-list args | ||
| 15789 | Space 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 | ||
| 15794 | Override fields from passwd. Defaults to @samp{()}. | ||
| 15795 | @end deftypevr | ||
| 15796 | |||
| 15797 | @end deftypevr | ||
| 15798 | |||
| 15799 | @deftypevr {@code{dovecot-configuration} parameter} plugin-configuration plugin-configuration | ||
| 15800 | Plug-in configuration, created by the @code{plugin-configuration} | ||
| 15801 | constructor. | ||
| 15802 | @end deftypevr | ||
| 15803 | |||
| 15804 | @deftypevr {@code{dovecot-configuration} parameter} list-of-namespace-configuration namespaces | ||
| 15805 | List of namespaces. Each item in the list is created by the | ||
| 15806 | @code{namespace-configuration} constructor. | ||
| 15807 | |||
| 15808 | Available @code{namespace-configuration} fields are: | ||
| 15809 | |||
| 15810 | @deftypevr {@code{namespace-configuration} parameter} string name | ||
| 15811 | Name for this namespace. | ||
| 15812 | @end deftypevr | ||
| 15813 | |||
| 15814 | @deftypevr {@code{namespace-configuration} parameter} string type | ||
| 15815 | Namespace 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 | ||
| 15820 | Hierarchy separator to use. You should use the same separator for all | ||
| 15821 | namespaces or some clients get confused. @samp{/} is usually a good one. | ||
| 15822 | The default however depends on the underlying mail storage format. Defaults | ||
| 15823 | to @samp{""}. | ||
| 15824 | @end deftypevr | ||
| 15825 | |||
| 15826 | @deftypevr {@code{namespace-configuration} parameter} string prefix | ||
| 15827 | Prefix required to access this namespace. This needs to be different for | ||
| 15828 | all namespaces. For example @samp{Public/}. Defaults to @samp{""}. | ||
| 15829 | @end deftypevr | ||
| 15830 | |||
| 15831 | @deftypevr {@code{namespace-configuration} parameter} string location | ||
| 15832 | Physical location of the mailbox. This is in the same format as | ||
| 15833 | mail_location, which is also the default for it. Defaults to @samp{""}. | ||
| 15834 | @end deftypevr | ||
| 15835 | |||
| 15836 | @deftypevr {@code{namespace-configuration} parameter} boolean inbox? | ||
| 15837 | There can be only one INBOX, and this setting defines which namespace has | ||
| 15838 | it. Defaults to @samp{#f}. | ||
| 15839 | @end deftypevr | ||
| 15840 | |||
| 15841 | @deftypevr {@code{namespace-configuration} parameter} boolean hidden? | ||
| 15842 | If namespace is hidden, it's not advertised to clients via NAMESPACE | ||
| 15843 | extension. You'll most likely also want to set @samp{list? #f}. This is | ||
| 15844 | mostly useful when converting from another server with different namespaces | ||
| 15845 | which you want to deprecate but still keep working. For example you can | ||
| 15846 | create 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? | ||
| 15851 | Show the mailboxes under this namespace with the LIST command. This makes | ||
| 15852 | the namespace visible for clients that do not support the NAMESPACE | ||
| 15853 | extension. The special @code{children} value lists child mailboxes, but | ||
| 15854 | hides the namespace prefix. Defaults to @samp{#t}. | ||
| 15855 | @end deftypevr | ||
| 15856 | |||
| 15857 | @deftypevr {@code{namespace-configuration} parameter} boolean subscriptions? | ||
| 15858 | Namespace handles its own subscriptions. If set to @code{#f}, the parent | ||
| 15859 | namespace 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 | ||
| 15864 | List of predefined mailboxes in this namespace. Defaults to @samp{()}. | ||
| 15865 | |||
| 15866 | Available @code{mailbox-configuration} fields are: | ||
| 15867 | |||
| 15868 | @deftypevr {@code{mailbox-configuration} parameter} string name | ||
| 15869 | Name 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 | ||
| 15874 | both 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 | ||
| 15878 | List of IMAP @code{SPECIAL-USE} attributes as specified by RFC 6154. Valid | ||
| 15879 | values 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 | ||
| 15888 | Base 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 | ||
| 15893 | Greeting 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 | ||
| 15897 | List of trusted network ranges. Connections from these IPs are allowed to | ||
| 15898 | override their IP addresses and ports (for logging and for authentication | ||
| 15899 | checks). @samp{disable-plaintext-auth} is also ignored for these networks. | ||
| 15900 | Typically 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 | ||
| 15905 | List of login access check sockets (e.g.@: tcpwrap). Defaults to @samp{()}. | ||
| 15906 | @end deftypevr | ||
| 15907 | |||
| 15908 | @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-proctitle? | ||
| 15909 | Show more verbose process titles (in ps). Currently shows user name and IP | ||
| 15910 | address. Useful for seeing who is actually using the IMAP processes (e.g.@: | ||
| 15911 | shared mailboxes or if the same uid is used for multiple accounts). | ||
| 15912 | Defaults to @samp{#f}. | ||
| 15913 | @end deftypevr | ||
| 15914 | |||
| 15915 | @deftypevr {@code{dovecot-configuration} parameter} boolean shutdown-clients? | ||
| 15916 | Should all processes be killed when Dovecot master process shuts down. | ||
| 15917 | Setting this to @code{#f} means that Dovecot can be upgraded without forcing | ||
| 15918 | existing client connections to close (although that could also be a problem | ||
| 15919 | if 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 | ||
| 15923 | If non-zero, run mail commands via this many connections to doveadm server, | ||
| 15924 | instead 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 | ||
| 15928 | UNIX 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 | ||
| 15933 | List of environment variables that are preserved on Dovecot startup and | ||
| 15934 | passed down to all of its child processes. You can also give key=value | ||
| 15935 | pairs to always set specific settings. | ||
| 15936 | @end deftypevr | ||
| 15937 | |||
| 15938 | @deftypevr {@code{dovecot-configuration} parameter} boolean disable-plaintext-auth? | ||
| 15939 | Disable LOGIN command and all other plaintext authentications unless SSL/TLS | ||
| 15940 | is used (LOGINDISABLED capability). Note that if the remote IP matches the | ||
| 15941 | local IP (i.e.@: you're connecting from the same computer), the connection | ||
| 15942 | is considered secure and plaintext authentication is allowed. See also | ||
| 15943 | ssl=required setting. Defaults to @samp{#t}. | ||
| 15944 | @end deftypevr | ||
| 15945 | |||
| 15946 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-cache-size | ||
| 15947 | Authentication cache size (e.g.@: @samp{#e10e6}). 0 means it's disabled. | ||
| 15948 | Note that bsdauth, PAM and vpopmail require @samp{cache-key} to be set for | ||
| 15949 | caching to be used. Defaults to @samp{0}. | ||
| 15950 | @end deftypevr | ||
| 15951 | |||
| 15952 | @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-ttl | ||
| 15953 | Time to live for cached data. After TTL expires the cached record is no | ||
| 15954 | longer used, *except* if the main database lookup returns internal failure. | ||
| 15955 | We also try to handle password changes automatically: If user's previous | ||
| 15956 | authentication was successful, but this one wasn't, the cache isn't used. | ||
| 15957 | For now this works only with plaintext authentication. Defaults to @samp{"1 | ||
| 15958 | hour"}. | ||
| 15959 | @end deftypevr | ||
| 15960 | |||
| 15961 | @deftypevr {@code{dovecot-configuration} parameter} string auth-cache-negative-ttl | ||
| 15962 | TTL for negative hits (user not found, password mismatch). 0 disables | ||
| 15963 | caching them completely. Defaults to @samp{"1 hour"}. | ||
| 15964 | @end deftypevr | ||
| 15965 | |||
| 15966 | @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-realms | ||
| 15967 | List of realms for SASL authentication mechanisms that need them. You can | ||
| 15968 | leave it empty if you don't want to support multiple realms. Many clients | ||
| 15969 | simply use the first one listed here, so keep the default realm first. | ||
| 15970 | Defaults to @samp{()}. | ||
| 15971 | @end deftypevr | ||
| 15972 | |||
| 15973 | @deftypevr {@code{dovecot-configuration} parameter} string auth-default-realm | ||
| 15974 | Default realm/domain to use if none was specified. This is used for both | ||
| 15975 | SASL realms and appending @@domain to username in plaintext logins. | ||
| 15976 | Defaults to @samp{""}. | ||
| 15977 | @end deftypevr | ||
| 15978 | |||
| 15979 | @deftypevr {@code{dovecot-configuration} parameter} string auth-username-chars | ||
| 15980 | List of allowed characters in username. If the user-given username contains | ||
| 15981 | a character not listed in here, the login automatically fails. This is just | ||
| 15982 | an extra check to make sure user can't exploit any potential quote escaping | ||
| 15983 | vulnerabilities with SQL/LDAP databases. If you want to allow all | ||
| 15984 | characters, set this value to empty. Defaults to | ||
| 15985 | @samp{"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890.-_@@"}. | ||
| 15986 | @end deftypevr | ||
| 15987 | |||
| 15988 | @deftypevr {@code{dovecot-configuration} parameter} string auth-username-translation | ||
| 15989 | Username character translations before it's looked up from databases. The | ||
| 15990 | value contains series of from -> to characters. For example @samp{#@@/@@} | ||
| 15991 | means that @samp{#} and @samp{/} characters are translated to @samp{@@}. | ||
| 15992 | Defaults to @samp{""}. | ||
| 15993 | @end deftypevr | ||
| 15994 | |||
| 15995 | @deftypevr {@code{dovecot-configuration} parameter} string auth-username-format | ||
| 15996 | Username formatting before it's looked up from databases. You can use the | ||
| 15997 | standard variables here, e.g.@: %Lu would lowercase the username, %n would | ||
| 15998 | drop 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 | ||
| 16004 | If you want to allow master users to log in by specifying the master | ||
| 16005 | username within the normal username string (i.e.@: not using SASL | ||
| 16006 | mechanism's support for it), you can specify the separator character here. | ||
| 16007 | The 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 | ||
| 16013 | Username to use for users logging in with ANONYMOUS SASL mechanism. | ||
| 16014 | Defaults to @samp{"anonymous"}. | ||
| 16015 | @end deftypevr | ||
| 16016 | |||
| 16017 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer auth-worker-max-count | ||
| 16018 | Maximum number of dovecot-auth worker processes. They're used to execute | ||
| 16019 | blocking passdb and userdb queries (e.g.@: MySQL and PAM). They're | ||
| 16020 | automatically created and destroyed as needed. Defaults to @samp{30}. | ||
| 16021 | @end deftypevr | ||
| 16022 | |||
| 16023 | @deftypevr {@code{dovecot-configuration} parameter} string auth-gssapi-hostname | ||
| 16024 | Host name to use in GSSAPI principal names. The default is to use the name | ||
| 16025 | returned by gethostname(). Use @samp{$ALL} (with quotes) to allow all | ||
| 16026 | keytab entries. Defaults to @samp{""}. | ||
| 16027 | @end deftypevr | ||
| 16028 | |||
| 16029 | @deftypevr {@code{dovecot-configuration} parameter} string auth-krb5-keytab | ||
| 16030 | Kerberos keytab to use for the GSSAPI mechanism. Will use the system | ||
| 16031 | default (usually @file{/etc/krb5.keytab}) if not specified. You may need to | ||
| 16032 | change the auth service to run as root to be able to read this file. | ||
| 16033 | Defaults to @samp{""}. | ||
| 16034 | @end deftypevr | ||
| 16035 | |||
| 16036 | @deftypevr {@code{dovecot-configuration} parameter} boolean auth-use-winbind? | ||
| 16037 | Do NTLM and GSS-SPNEGO authentication using Samba's winbind daemon and | ||
| 16038 | @samp{ntlm-auth} helper. <doc/wiki/Authentication/Mechanisms/Winbind.txt>. | ||
| 16039 | Defaults to @samp{#f}. | ||
| 16040 | @end deftypevr | ||
| 16041 | |||
| 16042 | @deftypevr {@code{dovecot-configuration} parameter} file-name auth-winbind-helper-path | ||
| 16043 | Path 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 | ||
| 16048 | Time 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? | ||
| 16053 | Require a valid SSL client certificate or the authentication fails. | ||
| 16054 | Defaults to @samp{#f}. | ||
| 16055 | @end deftypevr | ||
| 16056 | |||
| 16057 | @deftypevr {@code{dovecot-configuration} parameter} boolean auth-ssl-username-from-cert? | ||
| 16058 | Take the username from client's SSL certificate, using | ||
| 16059 | @code{X509_NAME_get_text_by_NID()} which returns the subject's DN's | ||
| 16060 | CommonName. Defaults to @samp{#f}. | ||
| 16061 | @end deftypevr | ||
| 16062 | |||
| 16063 | @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list auth-mechanisms | ||
| 16064 | List 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 | ||
| 16072 | List of IPs or hostnames to all director servers, including ourself. Ports | ||
| 16073 | can be specified as ip:port. The default port is the same as what director | ||
| 16074 | service'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 | ||
| 16078 | List of IPs or hostnames to all backend mail servers. Ranges are allowed | ||
| 16079 | too, 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 | ||
| 16083 | How long to redirect users to a specific server after it no longer has any | ||
| 16084 | connections. Defaults to @samp{"15 min"}. | ||
| 16085 | @end deftypevr | ||
| 16086 | |||
| 16087 | @deftypevr {@code{dovecot-configuration} parameter} string director-username-hash | ||
| 16088 | How 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 | ||
| 16090 | within domain. Defaults to @samp{"%Lu"}. | ||
| 16091 | @end deftypevr | ||
| 16092 | |||
| 16093 | @deftypevr {@code{dovecot-configuration} parameter} string log-path | ||
| 16094 | Log 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 | ||
| 16099 | Log file to use for informational messages. Defaults to @samp{log-path}. | ||
| 16100 | Defaults to @samp{""}. | ||
| 16101 | @end deftypevr | ||
| 16102 | |||
| 16103 | @deftypevr {@code{dovecot-configuration} parameter} string debug-log-path | ||
| 16104 | Log file to use for debug messages. Defaults to @samp{info-log-path}. | ||
| 16105 | Defaults to @samp{""}. | ||
| 16106 | @end deftypevr | ||
| 16107 | |||
| 16108 | @deftypevr {@code{dovecot-configuration} parameter} string syslog-facility | ||
| 16109 | Syslog facility to use if you're logging to syslog. Usually if you don't | ||
| 16110 | want to use @samp{mail}, you'll use local0..local7. Also other standard | ||
| 16111 | facilities are supported. Defaults to @samp{"mail"}. | ||
| 16112 | @end deftypevr | ||
| 16113 | |||
| 16114 | @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose? | ||
| 16115 | Log unsuccessful authentication attempts and the reasons why they failed. | ||
| 16116 | Defaults to @samp{#f}. | ||
| 16117 | @end deftypevr | ||
| 16118 | |||
| 16119 | @deftypevr {@code{dovecot-configuration} parameter} boolean auth-verbose-passwords? | ||
| 16120 | In case of password mismatches, log the attempted password. Valid values | ||
| 16121 | are no, plain and sha1. sha1 can be useful for detecting brute force | ||
| 16122 | password attempts vs. user simply trying the same password over and over | ||
| 16123 | again. You can also truncate the value to n chars by appending ":n" (e.g.@: | ||
| 16124 | sha1:6). Defaults to @samp{#f}. | ||
| 16125 | @end deftypevr | ||
| 16126 | |||
| 16127 | @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug? | ||
| 16128 | Even more verbose logging for debugging purposes. Shows for example SQL | ||
| 16129 | queries. Defaults to @samp{#f}. | ||
| 16130 | @end deftypevr | ||
| 16131 | |||
| 16132 | @deftypevr {@code{dovecot-configuration} parameter} boolean auth-debug-passwords? | ||
| 16133 | In case of password mismatches, log the passwords and used scheme so the | ||
| 16134 | problem can be debugged. Enabling this also enables @samp{auth-debug}. | ||
| 16135 | Defaults to @samp{#f}. | ||
| 16136 | @end deftypevr | ||
| 16137 | |||
| 16138 | @deftypevr {@code{dovecot-configuration} parameter} boolean mail-debug? | ||
| 16139 | Enable mail process debugging. This can help you figure out why Dovecot | ||
| 16140 | isn't finding your mails. Defaults to @samp{#f}. | ||
| 16141 | @end deftypevr | ||
| 16142 | |||
| 16143 | @deftypevr {@code{dovecot-configuration} parameter} boolean verbose-ssl? | ||
| 16144 | Show protocol level SSL errors. Defaults to @samp{#f}. | ||
| 16145 | @end deftypevr | ||
| 16146 | |||
| 16147 | @deftypevr {@code{dovecot-configuration} parameter} string log-timestamp | ||
| 16148 | Prefix for each line written to log file. % codes are in strftime(3) | ||
| 16149 | format. 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 | ||
| 16153 | List of elements we want to log. The elements which have a non-empty | ||
| 16154 | variable value are joined together to form a comma-separated string. | ||
| 16155 | @end deftypevr | ||
| 16156 | |||
| 16157 | @deftypevr {@code{dovecot-configuration} parameter} string login-log-format | ||
| 16158 | Login log format. %s contains @samp{login-log-format-elements} string, %$ | ||
| 16159 | contains the data we want to log. Defaults to @samp{"%$: %s"}. | ||
| 16160 | @end deftypevr | ||
| 16161 | |||
| 16162 | @deftypevr {@code{dovecot-configuration} parameter} string mail-log-prefix | ||
| 16163 | Log prefix for mail processes. See doc/wiki/Variables.txt for list of | ||
| 16164 | possible 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 | ||
| 16169 | Format to use for logging mail deliveries. You can use variables: | ||
| 16170 | @table @code | ||
| 16171 | @item %$ | ||
| 16172 | Delivery status message (e.g.@: @samp{saved to INBOX}) | ||
| 16173 | @item %m | ||
| 16174 | Message-ID | ||
| 16175 | @item %s | ||
| 16176 | Subject | ||
| 16177 | @item %f | ||
| 16178 | From address | ||
| 16179 | @item %p | ||
| 16180 | Tamaño físico | ||
| 16181 | @item %w | ||
| 16182 | Tamaño virtual. | ||
| 16183 | @end table | ||
| 16184 | Defaults to @samp{"msgid=%m: %$"}. | ||
| 16185 | @end deftypevr | ||
| 16186 | |||
| 16187 | @deftypevr {@code{dovecot-configuration} parameter} string mail-location | ||
| 16188 | Location for users' mailboxes. The default is empty, which means that | ||
| 16189 | Dovecot tries to find the mailboxes automatically. This won't work if the | ||
| 16190 | user doesn't yet have any mail, so you should explicitly tell Dovecot the | ||
| 16191 | full location. | ||
| 16192 | |||
| 16193 | If you're using mbox, giving a path to the INBOX file (e.g.@: /var/mail/%u) | ||
| 16194 | isn't enough. You'll also need to tell Dovecot where the other mailboxes | ||
| 16195 | are kept. This is called the "root mail directory", and it must be the | ||
| 16196 | first path given in the @samp{mail-location} setting. | ||
| 16197 | |||
| 16198 | There are a few special variables you can use, eg.: | ||
| 16199 | |||
| 16200 | @table @samp | ||
| 16201 | @item %u | ||
| 16202 | username | ||
| 16203 | @item %n | ||
| 16204 | user part in user@@domain, same as %u if there's no domain | ||
| 16205 | @item %d | ||
| 16206 | domain part in user@@domain, empty if there's no domain | ||
| 16207 | @item %h | ||
| 16208 | home director | ||
| 16209 | @end table | ||
| 16210 | |||
| 16211 | See 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 | ||
| 16217 | El valor predeterminado es @samp{""}. | ||
| 16218 | @end deftypevr | ||
| 16219 | |||
| 16220 | @deftypevr {@code{dovecot-configuration} parameter} string mail-uid | ||
| 16221 | System user and group used to access mails. If you use multiple, userdb can | ||
| 16222 | override these by returning uid or gid fields. You can use either numbers | ||
| 16223 | or names. <doc/wiki/UserIds.txt>. Defaults to @samp{""}. | ||
| 16224 | @end deftypevr | ||
| 16225 | |||
| 16226 | @deftypevr {@code{dovecot-configuration} parameter} string mail-gid | ||
| 16227 | |||
| 16228 | El valor predeterminado es @samp{""}. | ||
| 16229 | @end deftypevr | ||
| 16230 | |||
| 16231 | @deftypevr {@code{dovecot-configuration} parameter} string mail-privileged-group | ||
| 16232 | Group to enable temporarily for privileged operations. Currently this is | ||
| 16233 | used only with INBOX when either its initial creation or dotlocking fails. | ||
| 16234 | Typically 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 | ||
| 16239 | Grant access to these supplementary groups for mail processes. Typically | ||
| 16240 | these are used to set up access to shared mailboxes. Note that it may be | ||
| 16241 | dangerous to set these if users can create symlinks (e.g.@: if "mail" group | ||
| 16242 | is set here, ln -s /var/mail ~/mail/var could allow a user to delete others' | ||
| 16243 | mailboxes, or ln -s /secret/shared/box ~/mail/mybox would allow reading | ||
| 16244 | it). Defaults to @samp{""}. | ||
| 16245 | @end deftypevr | ||
| 16246 | |||
| 16247 | @deftypevr {@code{dovecot-configuration} parameter} boolean mail-full-filesystem-access? | ||
| 16248 | Allow full file system access to clients. There's no access checks other | ||
| 16249 | than what the operating system does for the active UID/GID. It works with | ||
| 16250 | both 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? | ||
| 16255 | Don't use mmap() at all. This is required if you store indexes to shared | ||
| 16256 | file systems (NFS or clustered file system). Defaults to @samp{#f}. | ||
| 16257 | @end deftypevr | ||
| 16258 | |||
| 16259 | @deftypevr {@code{dovecot-configuration} parameter} boolean dotlock-use-excl? | ||
| 16260 | Rely 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 | ||
| 16262 | default. Defaults to @samp{#t}. | ||
| 16263 | @end deftypevr | ||
| 16264 | |||
| 16265 | @deftypevr {@code{dovecot-configuration} parameter} string mail-fsync | ||
| 16266 | When to use fsync() or fdatasync() calls: | ||
| 16267 | @table @code | ||
| 16268 | @item optimized | ||
| 16269 | Whenever necessary to avoid losing important data | ||
| 16270 | @item always | ||
| 16271 | Useful with e.g.@: NFS when write()s are delayed | ||
| 16272 | @item never | ||
| 16273 | Never use it (best performance, but crashes can lose data). | ||
| 16274 | @end table | ||
| 16275 | Defaults to @samp{"optimized"}. | ||
| 16276 | @end deftypevr | ||
| 16277 | |||
| 16278 | @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-storage? | ||
| 16279 | Mail storage exists in NFS. Set this to yes to make Dovecot flush NFS | ||
| 16280 | caches whenever needed. If you're using only a single mail server this | ||
| 16281 | isn't needed. Defaults to @samp{#f}. | ||
| 16282 | @end deftypevr | ||
| 16283 | |||
| 16284 | @deftypevr {@code{dovecot-configuration} parameter} boolean mail-nfs-index? | ||
| 16285 | Mail 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 | ||
| 16291 | Locking method for index files. Alternatives are fcntl, flock and dotlock. | ||
| 16292 | Dotlocking uses some tricks which may create more disk I/O than other | ||
| 16293 | locking 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 | ||
| 16298 | Directory in which LDA/LMTP temporarily stores incoming mails >128 kB. | ||
| 16299 | Defaults to @samp{"/tmp"}. | ||
| 16300 | @end deftypevr | ||
| 16301 | |||
| 16302 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-uid | ||
| 16303 | Valid UID range for users. This is mostly to make sure that users can't log | ||
| 16304 | in as daemons or other system users. Note that denying root logins is | ||
| 16305 | hardcoded to dovecot binary and can't be done even if @samp{first-valid-uid} | ||
| 16306 | is set to 0. Defaults to @samp{500}. | ||
| 16307 | @end deftypevr | ||
| 16308 | |||
| 16309 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer last-valid-uid | ||
| 16310 | |||
| 16311 | El valor predeterminado es @samp{0}. | ||
| 16312 | @end deftypevr | ||
| 16313 | |||
| 16314 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer first-valid-gid | ||
| 16315 | Valid GID range for users. Users having non-valid GID as primary group ID | ||
| 16316 | aren't allowed to log in. If user belongs to supplementary groups with | ||
| 16317 | non-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 | |||
| 16322 | El valor predeterminado es @samp{0}. | ||
| 16323 | @end deftypevr | ||
| 16324 | |||
| 16325 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-max-keyword-length | ||
| 16326 | Maximum allowed length for mail keyword name. It's only forced when trying | ||
| 16327 | to 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 | ||
| 16331 | List 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 | ||
| 16333 | setting doesn't affect @samp{login-chroot} @samp{mail-chroot} or auth chroot | ||
| 16334 | settings. If this setting is empty, "/./" in home dirs are ignored. | ||
| 16335 | WARNING: Never add directories here which local users can modify, that may | ||
| 16336 | lead to root exploit. Usually this should be done only if you don't allow | ||
| 16337 | shell access for users. <doc/wiki/Chrooting.txt>. Defaults to @samp{()}. | ||
| 16338 | @end deftypevr | ||
| 16339 | |||
| 16340 | @deftypevr {@code{dovecot-configuration} parameter} string mail-chroot | ||
| 16341 | Default chroot directory for mail processes. This can be overridden for | ||
| 16342 | specific 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 | ||
| 16344 | real need to do chrooting, Dovecot doesn't allow users to access files | ||
| 16345 | outside their mail directory anyway. If your home directories are prefixed | ||
| 16346 | with 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 | ||
| 16351 | UNIX socket path to master authentication server to find users. This is | ||
| 16352 | used 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 | ||
| 16357 | Directory 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 | ||
| 16362 | List of plugins to load for all services. Plugins specific to IMAP, LDA, | ||
| 16363 | etc.@: 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 | ||
| 16368 | The minimum number of mails in a mailbox before updates are done to cache | ||
| 16369 | file. This allows optimizing Dovecot's behavior to do less disk writes at | ||
| 16370 | the cost of more disk reads. Defaults to @samp{0}. | ||
| 16371 | @end deftypevr | ||
| 16372 | |||
| 16373 | @deftypevr {@code{dovecot-configuration} parameter} string mailbox-idle-check-interval | ||
| 16374 | When IDLE command is running, mailbox is checked once in a while to see if | ||
| 16375 | there are any new mails or other changes. This setting defines the minimum | ||
| 16376 | time to wait between those checks. Dovecot can also use dnotify, inotify | ||
| 16377 | and 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? | ||
| 16382 | Save mails with CR+LF instead of plain LF. This makes sending those mails | ||
| 16383 | take less CPU, especially with sendfile() syscall with Linux and FreeBSD. | ||
| 16384 | But it also creates a bit more disk I/O which may just make it slower. Also | ||
| 16385 | note that if other software reads the mboxes/maildirs, they may handle the | ||
| 16386 | extra CRs wrong and cause problems. Defaults to @samp{#f}. | ||
| 16387 | @end deftypevr | ||
| 16388 | |||
| 16389 | @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-stat-dirs? | ||
| 16390 | By default LIST command returns all entries in maildir beginning with a | ||
| 16391 | dot. Enabling this option makes Dovecot return only entries which are | ||
| 16392 | directories. This is done by stat()ing each entry, so it causes more disk | ||
| 16393 | I/O. (For systems setting struct @samp{dirent->d_type} this check is free | ||
| 16394 | and 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? | ||
| 16398 | When copying a message, do it with hard links whenever possible. This makes | ||
| 16399 | the performance much better, and it's unlikely to have any side effects. | ||
| 16400 | Defaults to @samp{#t}. | ||
| 16401 | @end deftypevr | ||
| 16402 | |||
| 16403 | @deftypevr {@code{dovecot-configuration} parameter} boolean maildir-very-dirty-syncs? | ||
| 16404 | Assume Dovecot is the only MUA accessing Maildir: Scan cur/ directory only | ||
| 16405 | when its mtime changes unexpectedly or when we can't find the mail | ||
| 16406 | otherwise. Defaults to @samp{#f}. | ||
| 16407 | @end deftypevr | ||
| 16408 | |||
| 16409 | @deftypevr {@code{dovecot-configuration} parameter} space-separated-string-list mbox-read-locks | ||
| 16410 | Which locking methods to use for locking mbox. There are four available: | ||
| 16411 | |||
| 16412 | @table @code | ||
| 16413 | @item dotlock | ||
| 16414 | Create <mailbox>.lock file. This is the oldest and most NFS-safe solution. | ||
| 16415 | If you want to use /var/mail/ like directory, the users will need write | ||
| 16416 | access to that directory. | ||
| 16417 | @item dotlock-try | ||
| 16418 | Same as dotlock, but if it fails because of permissions or because there | ||
| 16419 | isn't enough disk space, just skip it. | ||
| 16420 | @item fcntl | ||
| 16421 | Use this if possible. Works with NFS too if lockd is used. | ||
| 16422 | @item flock | ||
| 16423 | May not exist in all systems. Doesn't work with NFS. | ||
| 16424 | @item lockf | ||
| 16425 | May not exist in all systems. Doesn't work with NFS. | ||
| 16426 | @end table | ||
| 16427 | |||
| 16428 | You can use multiple locking methods; if you do the order they're declared | ||
| 16429 | in is important to avoid deadlocks if other MTAs/MUAs are using multiple | ||
| 16430 | locking methods as well. Some operating systems don't allow using some of | ||
| 16431 | them 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 | ||
| 16439 | Maximum 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 | ||
| 16444 | If dotlock exists but the mailbox isn't modified in any way, override the | ||
| 16445 | lock file after this much time. Defaults to @samp{"2 mins"}. | ||
| 16446 | @end deftypevr | ||
| 16447 | |||
| 16448 | @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-dirty-syncs? | ||
| 16449 | When mbox changes unexpectedly we have to fully read it to find out what | ||
| 16450 | changed. If the mbox is large this can take a long time. Since the change | ||
| 16451 | is usually just a newly appended mail, it'd be faster to simply read the new | ||
| 16452 | mails. If this setting is enabled, Dovecot does this but still safely | ||
| 16453 | fallbacks to re-reading the whole mbox file whenever something in mbox isn't | ||
| 16454 | how it's expected to be. The only real downside to this setting is that if | ||
| 16455 | some other MUA changes message flags, Dovecot doesn't notice it | ||
| 16456 | immediately. Note that a full sync is done with SELECT, EXAMINE, EXPUNGE | ||
| 16457 | and CHECK commands. Defaults to @samp{#t}. | ||
| 16458 | @end deftypevr | ||
| 16459 | |||
| 16460 | @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-very-dirty-syncs? | ||
| 16461 | Like @samp{mbox-dirty-syncs}, but don't do full syncs even with SELECT, | ||
| 16462 | EXAMINE, EXPUNGE or CHECK commands. If this is set, @samp{mbox-dirty-syncs} | ||
| 16463 | is ignored. Defaults to @samp{#f}. | ||
| 16464 | @end deftypevr | ||
| 16465 | |||
| 16466 | @deftypevr {@code{dovecot-configuration} parameter} boolean mbox-lazy-writes? | ||
| 16467 | Delay writing mbox headers until doing a full write sync (EXPUNGE and CHECK | ||
| 16468 | commands and when closing the mailbox). This is especially useful for POP3 | ||
| 16469 | where clients often delete all mails. The downside is that our changes | ||
| 16470 | aren'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 | ||
| 16474 | If mbox size is smaller than this (e.g.@: 100k), don't write index files. | ||
| 16475 | If an index file already exists it's still read, just not updated. Defaults | ||
| 16476 | to @samp{0}. | ||
| 16477 | @end deftypevr | ||
| 16478 | |||
| 16479 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mdbox-rotate-size | ||
| 16480 | Maximum 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 | ||
| 16484 | Maximum dbox file age until it's rotated. Typically in days. Day begins | ||
| 16485 | from midnight, so 1d = today, 2d = yesterday, etc. 0 = check disabled. | ||
| 16486 | Defaults to @samp{"1d"}. | ||
| 16487 | @end deftypevr | ||
| 16488 | |||
| 16489 | @deftypevr {@code{dovecot-configuration} parameter} boolean mdbox-preallocate-space? | ||
| 16490 | When creating new mdbox files, immediately preallocate their size to | ||
| 16491 | @samp{mdbox-rotate-size}. This setting currently works only in Linux with | ||
| 16492 | some file systems (ext4, xfs). Defaults to @samp{#f}. | ||
| 16493 | @end deftypevr | ||
| 16494 | |||
| 16495 | @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-dir | ||
| 16496 | sdbox and mdbox support saving mail attachments to external files, which | ||
| 16497 | also allows single instance storage for them. Other backends don't support | ||
| 16498 | this for now. | ||
| 16499 | |||
| 16500 | WARNING: This feature hasn't been tested much yet. Use at your own risk. | ||
| 16501 | |||
| 16502 | Directory root where to store mail attachments. Disabled, if empty. | ||
| 16503 | Defaults to @samp{""}. | ||
| 16504 | @end deftypevr | ||
| 16505 | |||
| 16506 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer mail-attachment-min-size | ||
| 16507 | Attachments smaller than this aren't saved externally. It's also possible | ||
| 16508 | to write a plugin to disable saving specific attachments externally. | ||
| 16509 | Defaults to @samp{128000}. | ||
| 16510 | @end deftypevr | ||
| 16511 | |||
| 16512 | @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-fs | ||
| 16513 | File system backend to use for saving attachments: | ||
| 16514 | @table @code | ||
| 16515 | @item posix | ||
| 16516 | No SiS done by Dovecot (but this might help FS's own deduplication) | ||
| 16517 | @item sis posix | ||
| 16518 | SiS with immediate byte-by-byte comparison during saving | ||
| 16519 | @item sis-queue posix | ||
| 16520 | SiS with delayed comparison and deduplication. | ||
| 16521 | @end table | ||
| 16522 | Defaults to @samp{"sis posix"}. | ||
| 16523 | @end deftypevr | ||
| 16524 | |||
| 16525 | @deftypevr {@code{dovecot-configuration} parameter} string mail-attachment-hash | ||
| 16526 | Hash format to use in attachment filenames. You can add any text and | ||
| 16527 | variables: @code{%@{md4@}}, @code{%@{md5@}}, @code{%@{sha1@}}, | ||
| 16528 | @code{%@{sha256@}}, @code{%@{sha512@}}, @code{%@{size@}}. Variables can be | ||
| 16529 | truncated, e.g.@: @code{%@{sha256:80@}} returns only first 80 bits. | ||
| 16530 | Defaults to @samp{"%@{sha1@}"}. | ||
| 16531 | @end deftypevr | ||
| 16532 | |||
| 16533 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-process-limit | ||
| 16534 | |||
| 16535 | Defaults to @samp{100}. | ||
| 16536 | @end deftypevr | ||
| 16537 | |||
| 16538 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-client-limit | ||
| 16539 | |||
| 16540 | Defaults to @samp{1000}. | ||
| 16541 | @end deftypevr | ||
| 16542 | |||
| 16543 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer default-vsz-limit | ||
| 16544 | Default VSZ (virtual memory size) limit for service processes. This is | ||
| 16545 | mainly intended to catch and kill processes that leak memory before they eat | ||
| 16546 | up everything. Defaults to @samp{256000000}. | ||
| 16547 | @end deftypevr | ||
| 16548 | |||
| 16549 | @deftypevr {@code{dovecot-configuration} parameter} string default-login-user | ||
| 16550 | Login user is internally used by login processes. This is the most | ||
| 16551 | untrusted user in Dovecot system. It shouldn't have access to anything at | ||
| 16552 | all. Defaults to @samp{"dovenull"}. | ||
| 16553 | @end deftypevr | ||
| 16554 | |||
| 16555 | @deftypevr {@code{dovecot-configuration} parameter} string default-internal-user | ||
| 16556 | Internal user is used by unprivileged processes. It should be separate from | ||
| 16557 | login user, so that login processes can't disturb other processes. Defaults | ||
| 16558 | to @samp{"dovecot"}. | ||
| 16559 | @end deftypevr | ||
| 16560 | |||
| 16561 | @deftypevr {@code{dovecot-configuration} parameter} string ssl? | ||
| 16562 | SSL/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 | ||
| 16567 | PEM 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 | ||
| 16572 | PEM encoded SSL/TLS private key. The key is opened before dropping root | ||
| 16573 | privileges, 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 | ||
| 16578 | If key file is password protected, give the password here. Alternatively | ||
| 16579 | give it when starting dovecot with -p parameter. Since this file is often | ||
| 16580 | world-readable, you may want to place this setting instead to a different. | ||
| 16581 | Defaults to @samp{""}. | ||
| 16582 | @end deftypevr | ||
| 16583 | |||
| 16584 | @deftypevr {@code{dovecot-configuration} parameter} string ssl-ca | ||
| 16585 | PEM encoded trusted certificate authority. Set this only if you intend to | ||
| 16586 | use @samp{ssl-verify-client-cert? #t}. The file should contain the CA | ||
| 16587 | certificate(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? | ||
| 16592 | Require 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? | ||
| 16597 | Request 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 | ||
| 16603 | Which field from certificate to use for username. commonName and | ||
| 16604 | x500UniqueIdentifier 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 | ||
| 16609 | Minimum SSL protocol version to accept. Defaults to @samp{"TLSv1"}. | ||
| 16610 | @end deftypevr | ||
| 16611 | |||
| 16612 | @deftypevr {@code{dovecot-configuration} parameter} string ssl-cipher-list | ||
| 16613 | SSL 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 | ||
| 16618 | SSL crypto device to use, for valid values run "openssl engine". Defaults | ||
| 16619 | to @samp{""}. | ||
| 16620 | @end deftypevr | ||
| 16621 | |||
| 16622 | @deftypevr {@code{dovecot-configuration} parameter} string postmaster-address | ||
| 16623 | Address to use when sending rejection mails. %d expands to recipient | ||
| 16624 | domain. Defaults to @samp{"postmaster@@%d"}. | ||
| 16625 | @end deftypevr | ||
| 16626 | |||
| 16627 | @deftypevr {@code{dovecot-configuration} parameter} string hostname | ||
| 16628 | Hostname to use in various parts of sent mails (e.g.@: in Message-Id) and | ||
| 16629 | in LMTP replies. Default is the system's real hostname@@domain. Defaults | ||
| 16630 | to @samp{""}. | ||
| 16631 | @end deftypevr | ||
| 16632 | |||
| 16633 | @deftypevr {@code{dovecot-configuration} parameter} boolean quota-full-tempfail? | ||
| 16634 | If user is over quota, return with temporary failure instead of bouncing the | ||
| 16635 | mail. Defaults to @samp{#f}. | ||
| 16636 | @end deftypevr | ||
| 16637 | |||
| 16638 | @deftypevr {@code{dovecot-configuration} parameter} file-name sendmail-path | ||
| 16639 | Binary to use for sending mails. Defaults to @samp{"/usr/sbin/sendmail"}. | ||
| 16640 | @end deftypevr | ||
| 16641 | |||
| 16642 | @deftypevr {@code{dovecot-configuration} parameter} string submission-host | ||
| 16643 | If non-empty, send mails via this SMTP host[:port] instead of sendmail. | ||
| 16644 | Defaults to @samp{""}. | ||
| 16645 | @end deftypevr | ||
| 16646 | |||
| 16647 | @deftypevr {@code{dovecot-configuration} parameter} string rejection-subject | ||
| 16648 | Subject: header to use for rejection mails. You can use the same variables | ||
| 16649 | as for @samp{rejection-reason} below. Defaults to @samp{"Rejected: %s"}. | ||
| 16650 | @end deftypevr | ||
| 16651 | |||
| 16652 | @deftypevr {@code{dovecot-configuration} parameter} string rejection-reason | ||
| 16653 | Human readable error message for rejection mails. You can use variables: | ||
| 16654 | |||
| 16655 | @table @code | ||
| 16656 | @item %n | ||
| 16657 | CRLF | ||
| 16658 | @item %r | ||
| 16659 | reason | ||
| 16660 | @item %s | ||
| 16661 | original subject | ||
| 16662 | @item %t | ||
| 16663 | recipient | ||
| 16664 | @end table | ||
| 16665 | Defaults to @samp{"Your message to <%t> was automatically rejected:%n%r"}. | ||
| 16666 | @end deftypevr | ||
| 16667 | |||
| 16668 | @deftypevr {@code{dovecot-configuration} parameter} string recipient-delimiter | ||
| 16669 | Delimiter character between local-part and detail in email address. | ||
| 16670 | Defaults to @samp{"+"}. | ||
| 16671 | @end deftypevr | ||
| 16672 | |||
| 16673 | @deftypevr {@code{dovecot-configuration} parameter} string lda-original-recipient-header | ||
| 16674 | Header where the original recipient address (SMTP's RCPT TO: address) is | ||
| 16675 | taken from if not available elsewhere. With dovecot-lda -a parameter | ||
| 16676 | overrides this. A commonly used header for this is X-Original-To. Defaults | ||
| 16677 | to @samp{""}. | ||
| 16678 | @end deftypevr | ||
| 16679 | |||
| 16680 | @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autocreate? | ||
| 16681 | Should saving a mail to a nonexistent mailbox automatically create it?. | ||
| 16682 | Defaults to @samp{#f}. | ||
| 16683 | @end deftypevr | ||
| 16684 | |||
| 16685 | @deftypevr {@code{dovecot-configuration} parameter} boolean lda-mailbox-autosubscribe? | ||
| 16686 | Should automatically created mailboxes be also automatically subscribed?. | ||
| 16687 | Defaults to @samp{#f}. | ||
| 16688 | @end deftypevr | ||
| 16689 | |||
| 16690 | @deftypevr {@code{dovecot-configuration} parameter} non-negative-integer imap-max-line-length | ||
| 16691 | Maximum IMAP command line length. Some clients generate very long command | ||
| 16692 | lines with huge mailboxes, so you may need to raise this if you get "Too | ||
| 16693 | long 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 | ||
| 16698 | IMAP logout format string: | ||
| 16699 | @table @code | ||
| 16700 | @item %i | ||
| 16701 | número total de bytes leídos del cliente | ||
| 16702 | @item %o | ||
| 16703 | número total de bytes enviados al cliente. | ||
| 16704 | @end table | ||
| 16705 | See @file{doc/wiki/Variables.txt} for a list of all the variables you can | ||
| 16706 | use. Defaults to @samp{"in=%i out=%o deleted=%@{deleted@} | ||
| 16707 | expunged=%@{expunged@} trashed=%@{trashed@} hdr_count=%@{fetch_hdr_count@} | ||
| 16708 | hdr_bytes=%@{fetch_hdr_bytes@} body_count=%@{fetch_body_count@} | ||
| 16709 | body_bytes=%@{fetch_body_bytes@}"}. | ||
| 16710 | @end deftypevr | ||
| 16711 | |||
| 16712 | @deftypevr {@code{dovecot-configuration} parameter} string imap-capability | ||
| 16713 | Override the IMAP CAPABILITY response. If the value begins with '+', add | ||
| 16714 | the given capabilities on top of the defaults (e.g.@: +XFOO XBAR). Defaults | ||
| 16715 | to @samp{""}. | ||
| 16716 | @end deftypevr | ||
| 16717 | |||
| 16718 | @deftypevr {@code{dovecot-configuration} parameter} string imap-idle-notify-interval | ||
| 16719 | How long to wait between "OK Still here" notifications when client is | ||
| 16720 | IDLEing. Defaults to @samp{"2 mins"}. | ||
| 16721 | @end deftypevr | ||
| 16722 | |||
| 16723 | @deftypevr {@code{dovecot-configuration} parameter} string imap-id-send | ||
| 16724 | ID field names and values to send to clients. Using * as the value makes | ||
| 16725 | Dovecot use the default value. The following fields have default values | ||
| 16726 | currently: name, version, os, os-version, support-url, support-email. | ||
| 16727 | Defaults to @samp{""}. | ||
| 16728 | @end deftypevr | ||
| 16729 | |||
| 16730 | @deftypevr {@code{dovecot-configuration} parameter} string imap-id-log | ||
| 16731 | ID 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 | ||
| 16736 | Workarounds for various client bugs: | ||
| 16737 | |||
| 16738 | @table @code | ||
| 16739 | @item delay-newmail | ||
| 16740 | Send EXISTS/RECENT new mail notifications only when replying to NOOP and | ||
| 16741 | CHECK commands. Some clients ignore them otherwise, for example OSX Mail | ||
| 16742 | (<v2.1). Outlook Express breaks more badly though, without this it may show | ||
| 16743 | user "Message no longer in server" errors. Note that OE6 still breaks even | ||
| 16744 | with this workaround if synchronization is set to "Headers Only". | ||
| 16745 | |||
| 16746 | @item tb-extra-mailbox-sep | ||
| 16747 | Thunderbird gets somehow confused with LAYOUT=fs (mbox and dbox) and adds | ||
| 16748 | extra @samp{/} suffixes to mailbox names. This option causes Dovecot to | ||
| 16749 | ignore the extra @samp{/} instead of treating it as invalid mailbox name. | ||
| 16750 | |||
| 16751 | @item tb-lsub-flags | ||
| 16752 | Show \Noselect flags for LSUB replies with LAYOUT=fs (e.g.@: mbox). This | ||
| 16753 | makes Thunderbird realize they aren't selectable and show them greyed out, | ||
| 16754 | instead of only later giving "not selectable" popup error. | ||
| 16755 | @end table | ||
| 16756 | Defaults to @samp{()}. | ||
| 16757 | @end deftypevr | ||
| 16758 | |||
| 16759 | @deftypevr {@code{dovecot-configuration} parameter} string imap-urlauth-host | ||
| 16760 | Host allowed in URLAUTH URLs sent by client. "*" allows all. Defaults to | ||
| 16761 | @samp{""}. | ||
| 16762 | @end deftypevr | ||
| 16763 | |||
| 16764 | |||
| 16765 | Whew! Lots of configuration options. The nice thing about it though is that | ||
| 16766 | Guix has a complete interface to Dovecot's configuration language. This | ||
| 16767 | allows not only a nice way to declare configurations, but also offers | ||
| 16768 | reflective capabilities as well: users can write code to inspect and | ||
| 16769 | transform configurations from within Scheme. | ||
| 16770 | |||
| 16771 | However, it could be that you just want to get a @code{dovecot.conf} up and | ||
| 16772 | running. In that case, you can pass an @code{opaque-dovecot-configuration} | ||
| 16773 | as the @code{#:config} parameter to @code{dovecot-service}. As its name | ||
| 16774 | indicates, an opaque configuration does not have easy reflective | ||
| 16775 | capabilities. | ||
| 16776 | |||
| 16777 | Available @code{opaque-dovecot-configuration} fields are: | ||
| 16778 | |||
| 16779 | @deftypevr {@code{opaque-dovecot-configuration} parameter} package dovecot | ||
| 16780 | El paquete dovecot. | ||
| 16781 | @end deftypevr | ||
| 16782 | |||
| 16783 | @deftypevr {@code{opaque-dovecot-configuration} parameter} string string | ||
| 16784 | The contents of the @code{dovecot.conf}, as a string. | ||
| 16785 | @end deftypevr | ||
| 16786 | |||
| 16787 | For example, if your @code{dovecot.conf} is just the empty string, you could | ||
| 16788 | instantiate 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 | ||
| 16799 | This is the type of the @uref{https://www.opensmtpd.org, OpenSMTPD} service, | ||
| 16800 | whose value should be an @code{opensmtpd-configuration} object as in this | ||
| 16801 | example: | ||
| 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 | ||
| 16811 | Data type representing the configuration of opensmtpd. | ||
| 16812 | |||
| 16813 | @table @asis | ||
| 16814 | @item @code{package} (predeterminado: @var{opensmtpd}) | ||
| 16815 | El objeto paquete del servidor SMTP OpenSMTPD. | ||
| 16816 | |||
| 16817 | @item @code{config-file} (predeterminado: @var{%default-opensmtpd-file}) | ||
| 16818 | File-like object of the OpenSMTPD configuration file to use. By default it | ||
| 16819 | listens on the loopback network interface, and allows for mail from users | ||
| 16820 | and daemons on the local machine, as well as permitting email to remote | ||
| 16821 | servers. 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 | ||
| 16833 | This 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 | ||
| 16835 | example: | ||
| 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 | |||
| 16844 | In 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 | ||
| 16849 | Tipo de datos que representa la configuración de exim. | ||
| 16850 | |||
| 16851 | @table @asis | ||
| 16852 | @item @code{package} (predeterminado: @var{exim}) | ||
| 16853 | Package object of the Exim server. | ||
| 16854 | |||
| 16855 | @item @code{config-file} (predeterminado: @code{#f}) | ||
| 16856 | File-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 | ||
| 16858 | in @code{package}. The resulting configuration file is loaded after setting | ||
| 16859 | the @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 | ||
| 16870 | This is the type of the service which provides @code{/etc/aliases}, | ||
| 16871 | specifying 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 | |||
| 16880 | The configuration for a @code{mail-aliases-service-type} service is an | ||
| 16881 | association list denoting how to deliver mail that comes to this | ||
| 16882 | system. Each entry is of the form @code{(alias addresses ...)}, with | ||
| 16883 | @code{alias} specifying the local alias and @code{addresses} specifying | ||
| 16884 | where to deliver this user's mail. | ||
| 16885 | |||
| 16886 | The aliases aren't required to exist as users on the local system. In the | ||
| 16887 | above 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 | ||
| 16890 | to @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 | ||
| 16896 | This is the type of the GNU Mailutils IMAP4 Daemon (@pxref{imap4d,,, | ||
| 16897 | mailutils, 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 | ||
| 16908 | Data type representing the configuration of @command{imap4d}. | ||
| 16909 | |||
| 16910 | @table @asis | ||
| 16911 | @item @code{package} (default: @code{mailutils}) | ||
| 16912 | The package that provides @command{imap4d}. | ||
| 16913 | |||
| 16914 | @item @code{config-file} (default: @code{%default-imap4d-config-file}) | ||
| 16915 | File-like object of the configuration file to use, by default it will listen | ||
| 16916 | on TCP port 143 of @code{localhost}. @xref{Conf-imap4d,,, mailutils, GNU | ||
| 16917 | Mailutils 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 | ||
| 16928 | The @code{(gnu services messaging)} module provides Guix service definitions | ||
| 16929 | for messaging services: currently only Prosody is supported. | ||
| 16930 | |||
| 16931 | @subsubheading Servicio Prosody | ||
| 16932 | |||
| 16933 | @deffn {Variable Scheme} prosody-service-type | ||
| 16934 | This is the type for the @uref{https://prosody.im, Prosody XMPP | ||
| 16935 | communication server}. Its value must be a @code{prosody-configuration} | ||
| 16936 | record 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 | |||
| 16954 | See below for details about @code{prosody-configuration}. | ||
| 16955 | |||
| 16956 | @end deffn | ||
| 16957 | |||
| 16958 | By default, Prosody does not need much configuration. Only one | ||
| 16959 | @code{virtualhosts} field is needed: it specifies the domain you wish | ||
| 16960 | Prosody to serve. | ||
| 16961 | |||
| 16962 | You can perform various sanity checks on the generated configuration with | ||
| 16963 | the @code{prosodyctl check} command. | ||
| 16964 | |||
| 16965 | Prosodyctl will also help you to import certificates from the | ||
| 16966 | @code{letsencrypt} directory so that the @code{prosody} user can access | ||
| 16967 | them. See @url{https://prosody.im/doc/letsencrypt}. | ||
| 16968 | |||
| 16969 | @example | ||
| 16970 | prosodyctl --root cert import /etc/letsencrypt/live | ||
| 16971 | @end example | ||
| 16972 | |||
| 16973 | The available configuration parameters follow. Each parameter definition is | ||
| 16974 | preceded 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 | ||
| 16976 | starting with @code{maybe-} denote parameters that won't show up in | ||
| 16977 | @code{prosody.cfg.lua} when their value is @code{'disabled}. | ||
| 16978 | |||
| 16979 | There is also a way to specify the configuration as a string, if you have an | ||
| 16980 | old @code{prosody.cfg.lua} file that you want to port over from some other | ||
| 16981 | system; see the end for more details. | ||
| 16982 | |||
| 16983 | The @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 | |||
| 16994 | Available @code{prosody-configuration} fields are: | ||
| 16995 | |||
| 16996 | @deftypevr {@code{prosody-configuration} parameter} package prosody | ||
| 16997 | El paquete Prosody. | ||
| 16998 | @end deftypevr | ||
| 16999 | |||
| 17000 | @deftypevr {@code{prosody-configuration} parameter} file-name data-path | ||
| 17001 | Location 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 | ||
| 17007 | Additional plugin directories. They are searched in all the specified paths | ||
| 17008 | in 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 | ||
| 17013 | Every virtual host and component needs a certificate so that clients and | ||
| 17014 | servers can securely verify its identity. Prosody will automatically load | ||
| 17015 | certificates/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 | ||
| 17020 | This is a list of accounts that are admins for the server. Note that you | ||
| 17021 | must 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? | ||
| 17028 | Enable 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 | ||
| 17033 | This 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 | ||
| 17035 | too. 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 | ||
| 17043 | you 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 | ||
| 17047 | Path to a text file where the shared groups are defined. If this path is | ||
| 17048 | empty 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? | ||
| 17054 | Disable 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 | ||
| 17059 | These are the SSL/TLS-related settings. Most of them are disabled so to use | ||
| 17060 | Prosody's defaults. If you do not completely understand these options, do | ||
| 17061 | not add them to your config, it is easy to lower the security of your server | ||
| 17062 | using them. See @url{https://prosody.im/doc/advanced_ssl_config}. | ||
| 17063 | |||
| 17064 | Available @code{ssl-configuration} fields are: | ||
| 17065 | |||
| 17066 | @deftypevr {@code{ssl-configuration} parameter} maybe-string protocol | ||
| 17067 | This determines what handshake to use. | ||
| 17068 | @end deftypevr | ||
| 17069 | |||
| 17070 | @deftypevr {@code{ssl-configuration} parameter} maybe-file-name key | ||
| 17071 | Path to your private key file. | ||
| 17072 | @end deftypevr | ||
| 17073 | |||
| 17074 | @deftypevr {@code{ssl-configuration} parameter} maybe-file-name certificate | ||
| 17075 | Path to your certificate file. | ||
| 17076 | @end deftypevr | ||
| 17077 | |||
| 17078 | @deftypevr {@code{ssl-configuration} parameter} file-object capath | ||
| 17079 | Path to directory containing root certificates that you wish Prosody to | ||
| 17080 | trust 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 | ||
| 17085 | Path to a file containing root certificates that you wish Prosody to trust. | ||
| 17086 | Similar to @code{capath} but with all certificates concatenated together. | ||
| 17087 | @end deftypevr | ||
| 17088 | |||
| 17089 | @deftypevr {@code{ssl-configuration} parameter} maybe-string-list verify | ||
| 17090 | A 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 | ||
| 17095 | A 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 | ||
| 17097 | the LuaSec source. | ||
| 17098 | @end deftypevr | ||
| 17099 | |||
| 17100 | @deftypevr {@code{ssl-configuration} parameter} maybe-non-negative-integer depth | ||
| 17101 | How long a chain of certificate authorities to check when looking for a | ||
| 17102 | trusted root certificate. | ||
| 17103 | @end deftypevr | ||
| 17104 | |||
| 17105 | @deftypevr {@code{ssl-configuration} parameter} maybe-string ciphers | ||
| 17106 | An OpenSSL cipher string. This selects what ciphers Prosody will offer to | ||
| 17107 | clients, and in what order. | ||
| 17108 | @end deftypevr | ||
| 17109 | |||
| 17110 | @deftypevr {@code{ssl-configuration} parameter} maybe-file-name dhparam | ||
| 17111 | A path to a file containing parameters for Diffie-Hellman key exchange. You | ||
| 17112 | can 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 | ||
| 17117 | Curve 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 | ||
| 17122 | A list of "extra" verification options. | ||
| 17123 | @end deftypevr | ||
| 17124 | |||
| 17125 | @deftypevr {@code{ssl-configuration} parameter} maybe-string password | ||
| 17126 | Password for encrypted private keys. | ||
| 17127 | @end deftypevr | ||
| 17128 | |||
| 17129 | @end deftypevr | ||
| 17130 | |||
| 17131 | @deftypevr {@code{prosody-configuration} parameter} boolean c2s-require-encryption? | ||
| 17132 | Whether to force all client-to-server connections to be encrypted or not. | ||
| 17133 | See @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 | ||
| 17137 | Set 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? | ||
| 17143 | Whether to force all server-to-server connections to be encrypted or not. | ||
| 17144 | See @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? | ||
| 17148 | Whether to require encryption and certificate authentication. This provides | ||
| 17149 | ideal security, but requires servers you communicate with to support | ||
| 17150 | encryption 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 | ||
| 17155 | Many servers don't support encryption or have invalid or self-signed | ||
| 17156 | certificates. You can list domains here that will not be required to | ||
| 17157 | authenticate 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 | ||
| 17162 | Even if you leave @code{s2s-secure-auth?} disabled, you can still require | ||
| 17163 | valid 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 | ||
| 17168 | Select the authentication backend to use. The default provider stores | ||
| 17169 | passwords in plaintext and uses Prosody's configured data storage to store | ||
| 17170 | the authentication data. If you do not trust your server please see | ||
| 17171 | @url{https://prosody.im/doc/modules/mod_auth_internal_hashed} for | ||
| 17172 | information 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 | ||
| 17178 | Set logging options. Advanced logging configuration is not yet supported by | ||
| 17179 | the 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 | ||
| 17184 | File to write pid in. See @url{https://prosody.im/doc/modules/mod_posix}. | ||
| 17185 | Defaults 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 | ||
| 17189 | Maximum allowed size of the HTTP body (in bytes). | ||
| 17190 | @end deftypevr | ||
| 17191 | |||
| 17192 | @deftypevr {@code{prosody-configuration} parameter} maybe-string http-external-url | ||
| 17193 | Some modules expose their own URL in various ways. This URL is built from | ||
| 17194 | the protocol, host and port used. If Prosody sits behind a proxy, the | ||
| 17195 | public 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 | ||
| 17200 | A host in Prosody is a domain on which user accounts can be created. For | ||
| 17201 | example 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 | ||
| 17204 | host. | ||
| 17205 | |||
| 17206 | Note: the name "virtual" host is used in configuration to avoid confusion | ||
| 17207 | with the actual physical host that Prosody is installed on. A single | ||
| 17208 | Prosody instance can serve many domains, each one defined as a VirtualHost | ||
| 17209 | entry in Prosody's configuration. Conversely a server that hosts a single | ||
| 17210 | domain would have just one VirtualHost entry. | ||
| 17211 | |||
| 17212 | See @url{https://prosody.im/doc/configure#virtual_host_settings}. | ||
| 17213 | |||
| 17214 | Available @code{virtualhost-configuration} fields are: | ||
| 17215 | |||
| 17216 | all 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 | ||
| 17225 | Domain 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 | ||
| 17231 | Components are extra services on a server which are available to clients, | ||
| 17232 | usually on a subdomain of the main server (such as | ||
| 17233 | @samp{"mycomponent.example.com"}). Example components might be chatroom | ||
| 17234 | servers, user directories, or gateways to other protocols. | ||
| 17235 | |||
| 17236 | Internal components are implemented with Prosody-specific plugins. To add | ||
| 17237 | an internal component, you simply fill the hostname field, and the plugin | ||
| 17238 | you wish to use for the component. | ||
| 17239 | |||
| 17240 | See @url{https://prosody.im/doc/components}. Defaults to @samp{()}. | ||
| 17241 | |||
| 17242 | Available @code{int-component-configuration} fields are: | ||
| 17243 | |||
| 17244 | all 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 | ||
| 17253 | Hostname of the component. | ||
| 17254 | @end deftypevr | ||
| 17255 | |||
| 17256 | @deftypevr {@code{int-component-configuration} parameter} string plugin | ||
| 17257 | Plugin you wish to use for the component. | ||
| 17258 | @end deftypevr | ||
| 17259 | |||
| 17260 | @deftypevr {@code{int-component-configuration} parameter} maybe-mod-muc-configuration mod-muc | ||
| 17261 | Multi-user chat (MUC) is Prosody's module for allowing you to create hosted | ||
| 17262 | chatrooms/conferences for XMPP users. | ||
| 17263 | |||
| 17264 | General information on setting up and using multi-user chatrooms can be | ||
| 17265 | found in the "Chatrooms" documentation | ||
| 17266 | (@url{https://prosody.im/doc/chatrooms}), which you should read if you are | ||
| 17267 | new to XMPP chatrooms. | ||
| 17268 | |||
| 17269 | See also @url{https://prosody.im/doc/modules/mod_muc}. | ||
| 17270 | |||
| 17271 | Available @code{mod-muc-configuration} fields are: | ||
| 17272 | |||
| 17273 | @deftypevr {@code{mod-muc-configuration} parameter} string name | ||
| 17274 | The 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 | ||
| 17279 | If @samp{#t}, this will only allow admins to create new chatrooms. | ||
| 17280 | Otherwise anyone can create a room. The value @samp{"local"} restricts room | ||
| 17281 | creation to users on the service's parent domain. E.g.@: | ||
| 17282 | @samp{user@@example.com} can create rooms on @samp{rooms.example.com}. The | ||
| 17283 | value @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 | ||
| 17288 | Maximum number of history messages that will be sent to the member that has | ||
| 17289 | just 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 | ||
| 17297 | External components use XEP-0114, which most standalone components support. | ||
| 17298 | To add an external component, you simply fill the hostname field. See | ||
| 17299 | @url{https://prosody.im/doc/components}. Defaults to @samp{()}. | ||
| 17300 | |||
| 17301 | Available @code{ext-component-configuration} fields are: | ||
| 17302 | |||
| 17303 | all 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 | ||
| 17312 | Password which the component will use to log in. | ||
| 17313 | @end deftypevr | ||
| 17314 | |||
| 17315 | @deftypevr {@code{ext-component-configuration} parameter} string hostname | ||
| 17316 | Hostname of the component. | ||
| 17317 | @end deftypevr | ||
| 17318 | |||
| 17319 | @end deftypevr | ||
| 17320 | |||
| 17321 | @deftypevr {@code{prosody-configuration} parameter} non-negative-integer-list component-ports | ||
| 17322 | Port(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 | ||
| 17327 | Interface 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 | ||
| 17332 | Raw content that will be added to the configuration file. | ||
| 17333 | @end deftypevr | ||
| 17334 | |||
| 17335 | It could be that you just want to get a @code{prosody.cfg.lua} up and | ||
| 17336 | running. In that case, you can pass an @code{opaque-prosody-configuration} | ||
| 17337 | record as the value of @code{prosody-service-type}. As its name indicates, | ||
| 17338 | an opaque configuration does not have easy reflective capabilities. | ||
| 17339 | Available @code{opaque-prosody-configuration} fields are: | ||
| 17340 | |||
| 17341 | @deftypevr {@code{opaque-prosody-configuration} parameter} package prosody | ||
| 17342 | El paquete prosody. | ||
| 17343 | @end deftypevr | ||
| 17344 | |||
| 17345 | @deftypevr {@code{opaque-prosody-configuration} parameter} string prosody.cfg.lua | ||
| 17346 | The contents of the @code{prosody.cfg.lua} to use. | ||
| 17347 | @end deftypevr | ||
| 17348 | |||
| 17349 | For example, if your @code{prosody.cfg.lua} is just the empty string, you | ||
| 17350 | could 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 | ||
| 17365 | to a variety of messaging protocols such as XMPP. | ||
| 17366 | |||
| 17367 | @defvr {Variable Scheme} bitlbee-service-type | ||
| 17368 | This is the service type for the @url{http://bitlbee.org,BitlBee} IRC | ||
| 17369 | gateway daemon. Its value is a @code{bitlbee-configuration} (see below). | ||
| 17370 | |||
| 17371 | To have BitlBee listen on port 6667 on localhost, add this line to your | ||
| 17372 | services: | ||
| 17373 | |||
| 17374 | @example | ||
| 17375 | (service bitlbee-service-type) | ||
| 17376 | @end example | ||
| 17377 | @end defvr | ||
| 17378 | |||
| 17379 | @deftp {Tipo de datos} bitlbee-configuration | ||
| 17380 | This 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}) | ||
| 17385 | Escucha en la interfaz de red correspondiente a la dirección IP especificada | ||
| 17386 | en @var{interface}, en el puerto @var{port}. | ||
| 17387 | |||
| 17388 | When @var{interface} is @code{127.0.0.1}, only local clients can connect; | ||
| 17389 | when it is @code{0.0.0.0}, connections can come from any networking | ||
| 17390 | interface. | ||
| 17391 | |||
| 17392 | @item @code{package} (predeterminado: @code{bitlbee}) | ||
| 17393 | El paquete BitlBee usado. | ||
| 17394 | |||
| 17395 | @item @code{plugins} (predeterminados: @code{'()}) | ||
| 17396 | List of plugin packages to use---e.g., @code{bitlbee-discord}. | ||
| 17397 | |||
| 17398 | @item @code{extra-settings} (predeterminado: @code{""}) | ||
| 17399 | Configuration 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 | ||
| 17407 | that one or more clients can attach to and detach from the central core. | ||
| 17408 | |||
| 17409 | @defvr {Scheme Variable} quassel-service-type | ||
| 17410 | This is the service type for the @url{https://quassel-irc.org/,Quassel} IRC | ||
| 17411 | backend daemon. Its value is a @code{quassel-configuration} (see below). | ||
| 17412 | @end defvr | ||
| 17413 | |||
| 17414 | @deftp {Data Type} quassel-configuration | ||
| 17415 | This is the configuration for Quassel, with the following fields: | ||
| 17416 | |||
| 17417 | @table @asis | ||
| 17418 | @item @code{quassel} (default: @code{quassel}) | ||
| 17419 | The Quassel package to use. | ||
| 17420 | |||
| 17421 | @item @code{interface} (default: @code{"::,0.0.0.0"}) | ||
| 17422 | @item @code{port} (default: @code{4242}) | ||
| 17423 | Listen on the network interface(s) corresponding to the IPv4 or IPv6 | ||
| 17424 | interfaces specified in the comma delimited @var{interface}, on @var{port}. | ||
| 17425 | |||
| 17426 | @item @code{loglevel} (default: @code{"Info"}) | ||
| 17427 | The level of logging desired. Accepted values are Debug, Info, Warning and | ||
| 17428 | Error. | ||
| 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 | ||
| 17437 | This section describes how to set up and run a Murmur server. Murmur is the | ||
| 17438 | server of the @uref{https://mumble.info, Mumble} voice-over-IP (VoIP) suite. | ||
| 17439 | |||
| 17440 | @deftp {Tipo de datos} murmur-configuration | ||
| 17441 | The service type for the Murmur server. An example configuration can look | ||
| 17442 | like 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 | |||
| 17454 | After reconfiguring your system, you can manually set the murmur | ||
| 17455 | @code{SuperUser} password with the command that is printed during the | ||
| 17456 | activation phase. | ||
| 17457 | |||
| 17458 | It is recommended to register a normal Mumble user account and grant it | ||
| 17459 | admin or moderator rights. You can use the @code{mumble} client to login as | ||
| 17460 | new normal user, register yourself, and log out. For the next step login | ||
| 17461 | with the name @code{SuperUser} use the @code{SuperUser} password that you | ||
| 17462 | set previously, and grant your newly registered mumble user administrator or | ||
| 17463 | moderator rights and create some channels. | ||
| 17464 | |||
| 17465 | Available @code{murmur-configuration} fields are: | ||
| 17466 | |||
| 17467 | @table @asis | ||
| 17468 | @item @code{package} (predeterminado: @code{mumble}) | ||
| 17469 | Package that contains @code{bin/murmurd}. | ||
| 17470 | |||
| 17471 | @item @code{user} (predeterminado: @code{"murmur"}) | ||
| 17472 | User who will run the Murmur server. | ||
| 17473 | |||
| 17474 | @item @code{group} (predeterminado: @code{"murmur"}) | ||
| 17475 | Group of the user who will run the murmur server. | ||
| 17476 | |||
| 17477 | @item @code{port} (predeterminado: @code{64738}) | ||
| 17478 | Puerto en el que escucha el servidor. | ||
| 17479 | |||
| 17480 | @item @code{welcome-text} (predeterminado: @code{""}) | ||
| 17481 | Welcome text sent to clients when they connect. | ||
| 17482 | |||
| 17483 | @item @code{server-password} (predeterminada: @code{""}) | ||
| 17484 | Password the clients have to enter in order to connect. | ||
| 17485 | |||
| 17486 | @item @code{max-users} (predeterminados: @code{100}) | ||
| 17487 | Maximum of users that can be connected to the server at once. | ||
| 17488 | |||
| 17489 | @item @code{max-user-bandwidth} (predeterminado: @code{#f}) | ||
| 17490 | Maximum voice traffic a user can send per second. | ||
| 17491 | |||
| 17492 | @item @code{database-file} (predeterminado: @code{"/var/lib/murmur/db.sqlite"}) | ||
| 17493 | File name of the sqlite database. The service's user will become the owner | ||
| 17494 | of the directory. | ||
| 17495 | |||
| 17496 | @item @code{log-file} (predeterminado: @code{"/var/log/murmur/murmur.log"}) | ||
| 17497 | File name of the log file. The service's user will become the owner of the | ||
| 17498 | directory. | ||
| 17499 | |||
| 17500 | @item @code{autoban-attempts} (predeterminados: @code{10}) | ||
| 17501 | Maximum number of logins a user can make in @code{autoban-timeframe} without | ||
| 17502 | getting auto banned for @code{autoban-time}. | ||
| 17503 | |||
| 17504 | @item @code{autoban-timeframe} (predeterminado: @code{120}) | ||
| 17505 | Timeframe for autoban in seconds. | ||
| 17506 | |||
| 17507 | @item @code{autoban-time} (predeterminado: @code{300}) | ||
| 17508 | Amount of time in seconds for which a client gets banned when violating the | ||
| 17509 | autoban limits. | ||
| 17510 | |||
| 17511 | @item @code{opus-threshold} (predeterminado: @code{100}) | ||
| 17512 | Percentage of clients that need to support opus before switching over to | ||
| 17513 | opus audio codec. | ||
| 17514 | |||
| 17515 | @item @code{channel-nesting-limit} (predeterminado: @code{10}) | ||
| 17516 | How deep channels can be nested at maximum. | ||
| 17517 | |||
| 17518 | @item @code{channelname-regex} (predeterminado: @code{#f}) | ||
| 17519 | A string in form of a Qt regular expression that channel names must conform | ||
| 17520 | to. | ||
| 17521 | |||
| 17522 | @item @code{username-regex} (predeterminado: @code{#f}) | ||
| 17523 | A string in form of a Qt regular expression that user names must conform to. | ||
| 17524 | |||
| 17525 | @item @code{text-message-length} (predeterminado: @code{5000}) | ||
| 17526 | Maximum size in bytes that a user can send in one text chat message. | ||
| 17527 | |||
| 17528 | @item @code{image-message-length} (predeterminado: @code{(* 128 1024)}) | ||
| 17529 | Maximum size in bytes that a user can send in one image message. | ||
| 17530 | |||
| 17531 | @item @code{cert-required?} (predeterminado: @code{#f}) | ||
| 17532 | If it is set to @code{#t} clients that use weak password authentification | ||
| 17533 | will not be accepted. Users must have completed the certificate wizard to | ||
| 17534 | join. | ||
| 17535 | |||
| 17536 | @item @code{remember-channel?} (predeterminado: @code{#f}) | ||
| 17537 | Should murmur remember the last channel each user was in when they | ||
| 17538 | disconnected and put them into the remembered channel when they rejoin. | ||
| 17539 | |||
| 17540 | @item @code{allow-html?} (predeterminado: @code{#f}) | ||
| 17541 | Should html be allowed in text messages, user comments, and channel | ||
| 17542 | descriptions. | ||
| 17543 | |||
| 17544 | @item @code{allow-ping?} (predeterminado: @code{#f}) | ||
| 17545 | Setting to true exposes the current user count, the maximum user count, and | ||
| 17546 | the server's maximum bandwidth per client to unauthenticated users. In the | ||
| 17547 | Mumble client, this information is shown in the Connect dialog. | ||
| 17548 | |||
| 17549 | Disabling this setting will prevent public listing of the server. | ||
| 17550 | |||
| 17551 | @item @code{bonjour?} (predeterminado: @code{#f}) | ||
| 17552 | Should the server advertise itself in the local network through the bonjour | ||
| 17553 | protocol. | ||
| 17554 | |||
| 17555 | @item @code{send-version?} (predeterminado: @code{#f}) | ||
| 17556 | Should the murmur server version be exposed in ping requests. | ||
| 17557 | |||
| 17558 | @item @code{log-days} (predeterminado: @code{31}) | ||
| 17559 | Murmur also stores logs in the database, which are accessible via RPC. The | ||
| 17560 | default is 31 days of months, but you can set this setting to 0 to keep logs | ||
| 17561 | forever, or -1 to disable logging to the database. | ||
| 17562 | |||
| 17563 | @item @code{obfuscate-ips?} (predeterminado: @code{#t}) | ||
| 17564 | Should logged ips be obfuscated to protect the privacy of users. | ||
| 17565 | |||
| 17566 | @item @code{ssl-cert} (predeterminado: @code{#f}) | ||
| 17567 | File 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}) | ||
| 17573 | Filepath 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}) | ||
| 17579 | File name of a PEM-encoded file with Diffie-Hellman parameters for the | ||
| 17580 | SSL/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}) | ||
| 17585 | The @code{ssl-ciphers} option chooses the cipher suites to make available | ||
| 17586 | for use in SSL/TLS. | ||
| 17587 | |||
| 17588 | This option is specified using | ||
| 17589 | @uref{https://www.openssl.org/docs/apps/ciphers.html#CIPHER-LIST-FORMAT, | ||
| 17590 | OpenSSL cipher list notation}. | ||
| 17591 | |||
| 17592 | It 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 | ||
| 17594 | will get. After setting this option, it is recommend that you inspect your | ||
| 17595 | Murmur log to ensure that Murmur is using the cipher suites that you | ||
| 17596 | expected it to. | ||
| 17597 | |||
| 17598 | Note: Changing this option may impact the backwards compatibility of your | ||
| 17599 | Murmur server, and can remove the ability for older Mumble clients to be | ||
| 17600 | able to connect to it. | ||
| 17601 | |||
| 17602 | @item @code{public-registration} (predeterminado: @code{#f}) | ||
| 17603 | Must be a @code{<murmur-public-registration-configuration>} record or | ||
| 17604 | @code{#f}. | ||
| 17605 | |||
| 17606 | You 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 | ||
| 17608 | you have set a @code{server-password}, or set @code{allow-ping} to | ||
| 17609 | @code{#f}. | ||
| 17610 | |||
| 17611 | It might take a few hours until it shows up in the public list. | ||
| 17612 | |||
| 17613 | @item @code{file} (predeterminado: @code{#f}) | ||
| 17614 | Optional alternative override for this configuration. | ||
| 17615 | @end table | ||
| 17616 | @end deftp | ||
| 17617 | |||
| 17618 | @deftp {Tipo de datos} murmur-public-registration-configuration | ||
| 17619 | Configuration for public registration of a murmur service. | ||
| 17620 | |||
| 17621 | @table @asis | ||
| 17622 | @item @code{name} | ||
| 17623 | This is a display name for your server. Not to be confused with the | ||
| 17624 | hostname. | ||
| 17625 | |||
| 17626 | @item @code{password} | ||
| 17627 | A password to identify your registration. Subsequent updates will need the | ||
| 17628 | same password. Don't lose your password. | ||
| 17629 | |||
| 17630 | @item @code{url} | ||
| 17631 | This should be a @code{http://} or @code{https://} link to your web site. | ||
| 17632 | |||
| 17633 | @item @code{hostname} (predeterminado: @code{#f}) | ||
| 17634 | By default your server will be listed by its IP address. If it is set your | ||
| 17635 | server 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 | ||
| 17647 | viewing and searching log files. | ||
| 17648 | |||
| 17649 | The following example will configure the service with default values. By | ||
| 17650 | default, Tailon can be accessed on port 8080 (@code{http://localhost:8080}). | ||
| 17651 | |||
| 17652 | @example | ||
| 17653 | (service tailon-service-type) | ||
| 17654 | @end example | ||
| 17655 | |||
| 17656 | The 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 | ||
| 17669 | Data type representing the configuration of Tailon. This type has the | ||
| 17670 | following parameters: | ||
| 17671 | |||
| 17672 | @table @asis | ||
| 17673 | @item @code{config-file} (predeterminado: @code{(tailon-configuration-file)}) | ||
| 17674 | The 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 | |||
| 17678 | For example, to instead use a local file, the @code{local-file} function can | ||
| 17679 | be 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}) | ||
| 17688 | El paquete tailon usado. | ||
| 17689 | |||
| 17690 | @end table | ||
| 17691 | @end deftp | ||
| 17692 | |||
| 17693 | @deftp {Tipo de datos} tailon-configuration-file | ||
| 17694 | Tipo de datos que representa las opciones de configuración de Tailon. Este | ||
| 17695 | tipo tiene los siguientes parámetros: | ||
| 17696 | |||
| 17697 | @table @asis | ||
| 17698 | @item @code{files} (predeterminados: @code{(list "/var/log")}) | ||
| 17699 | List of files to display. The list can include strings for a single file or | ||
| 17700 | directory, or a list, where the first item is the name of a subsection, and | ||
| 17701 | the remaining items are the files or directories in that subsection. | ||
| 17702 | |||
| 17703 | @item @code{bind} (predeterminado: @code{"localhost:8080"}) | ||
| 17704 | Address and port to which Tailon should bind on. | ||
| 17705 | |||
| 17706 | @item @code{relative-root} (predeterminado: @code{#f}) | ||
| 17707 | URL path to use for Tailon, set to @code{#f} to not use a path. | ||
| 17708 | |||
| 17709 | @item @code{allow-transfers?} (predeterminado: @code{#t}) | ||
| 17710 | Allow downloading the log files in the web interface. | ||
| 17711 | |||
| 17712 | @item @code{follow-names?} (predeterminado: @code{#t}) | ||
| 17713 | Allow tailing of not-yet existent files. | ||
| 17714 | |||
| 17715 | @item @code{tail-lines} (predeterminado: @code{200}) | ||
| 17716 | Number 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á | ||
| 17720 | deshabilitado. | ||
| 17721 | |||
| 17722 | @item @code{debug?} (predeterminado: @code{#f}) | ||
| 17723 | Set @code{debug?} to @code{#t} to show debug messages. | ||
| 17724 | |||
| 17725 | @item @code{wrap-lines} (predeterminado: @code{#t}) | ||
| 17726 | Initial line wrapping state in the web interface. Set to @code{#t} to | ||
| 17727 | initially wrap lines (the default), or to @code{#f} to initially not wrap | ||
| 17728 | lines. | ||
| 17729 | |||
| 17730 | @item @code{http-auth} (predeterminado: @code{#f}) | ||
| 17731 | HTTP 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}) | ||
| 17735 | If HTTP authentication is enabled (see @code{http-auth}), access will be | ||
| 17736 | restricted to the credentials provided here. To configure users, use a list | ||
| 17737 | of pairs, where the first element of the pair is the username, and the 2nd | ||
| 17738 | element 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 | ||
| 17753 | Darkstat is a packet sniffer that captures network traffic, calculates | ||
| 17754 | statistics about usage, and serves reports over HTTP. | ||
| 17755 | |||
| 17756 | @defvar {Variable Scheme} darkstat-service-type | ||
| 17757 | This is the service type for the @uref{https://unix4lyfe.org/darkstat/, | ||
| 17758 | darkstat} service, its value must be a @code{darkstat-configuration} record | ||
| 17759 | as 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 | ||
| 17769 | Tipo de datos que representa la configuración de @command{darkstat}. | ||
| 17770 | |||
| 17771 | @table @asis | ||
| 17772 | @item @code{package} (predeterminado: @code{darkstat}) | ||
| 17773 | El paquete darkstat usado. | ||
| 17774 | |||
| 17775 | @item @code{interface} | ||
| 17776 | Captura el tráfico en la interfaz de red especificada. | ||
| 17777 | |||
| 17778 | @item @code{port} (predeterminado: @code{"667"}) | ||
| 17779 | Bind the web interface to the specified port. | ||
| 17780 | |||
| 17781 | @item @code{bind-address} (predeterminada: @code{"127.0.0.1"}) | ||
| 17782 | Bind the web interface to the specified address. | ||
| 17783 | |||
| 17784 | @item @code{base} (predeterminada: @code{"/"}) | ||
| 17785 | Specify the path of the base URL. This can be useful if @command{darkstat} | ||
| 17786 | is 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 | ||
| 17794 | The Prometheus ``node exporter'' makes hardware and operating system | ||
| 17795 | statistics provided by the Linux kernel available for the Prometheus | ||
| 17796 | monitoring system. This service should be deployed on all physical nodes | ||
| 17797 | and virtual machines, where monitoring these statistics is desirable. | ||
| 17798 | |||
| 17799 | @defvar {Variable Scheme} prometheus-node-exporter-service-type | ||
| 17800 | This is the service type for the | ||
| 17801 | @uref{https://github.com/prometheus/node_exporter/, | ||
| 17802 | prometheus-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 | ||
| 17813 | Tipo 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}) | ||
| 17817 | El paquete prometheus-node-exporter usado. | ||
| 17818 | |||
| 17819 | @item @code{web-listen-address} (predeterminada: @code{":9100"}) | ||
| 17820 | Bind the web interface to the specified address. | ||
| 17821 | |||
| 17822 | @end table | ||
| 17823 | @end deftp | ||
| 17824 | |||
| 17825 | @subsubheading Zabbix server | ||
| 17826 | @cindex zabbix zabbix-server | ||
| 17827 | Zabbix provides monitoring metrics, among others network utilization, CPU | ||
| 17828 | load 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 | |||
| 17843 | Available @code{zabbix-server-configuration} fields are: | ||
| 17844 | |||
| 17845 | @deftypevr {@code{zabbix-server-configuration} parameter} package zabbix-server | ||
| 17846 | The zabbix-server package. | ||
| 17847 | |||
| 17848 | @end deftypevr | ||
| 17849 | |||
| 17850 | @deftypevr {@code{zabbix-server-configuration} parameter} string user | ||
| 17851 | User who will run the Zabbix server. | ||
| 17852 | |||
| 17853 | Defaults to @samp{"zabbix"}. | ||
| 17854 | |||
| 17855 | @end deftypevr | ||
| 17856 | |||
| 17857 | @deftypevr {@code{zabbix-server-configuration} parameter} group group | ||
| 17858 | Group who will run the Zabbix server. | ||
| 17859 | |||
| 17860 | Defaults to @samp{"zabbix"}. | ||
| 17861 | |||
| 17862 | @end deftypevr | ||
| 17863 | |||
| 17864 | @deftypevr {@code{zabbix-server-configuration} parameter} string db-host | ||
| 17865 | Database host name. | ||
| 17866 | |||
| 17867 | Defaults to @samp{"127.0.0.1"}. | ||
| 17868 | |||
| 17869 | @end deftypevr | ||
| 17870 | |||
| 17871 | @deftypevr {@code{zabbix-server-configuration} parameter} string db-name | ||
| 17872 | Database name. | ||
| 17873 | |||
| 17874 | Defaults to @samp{"zabbix"}. | ||
| 17875 | |||
| 17876 | @end deftypevr | ||
| 17877 | |||
| 17878 | @deftypevr {@code{zabbix-server-configuration} parameter} string db-user | ||
| 17879 | Database user. | ||
| 17880 | |||
| 17881 | Defaults to @samp{"zabbix"}. | ||
| 17882 | |||
| 17883 | @end deftypevr | ||
| 17884 | |||
| 17885 | @deftypevr {@code{zabbix-server-configuration} parameter} string db-password | ||
| 17886 | Database password. Please, use @code{include-files} with | ||
| 17887 | @code{DBPassword=SECRET} inside a specified file instead. | ||
| 17888 | |||
| 17889 | El valor predeterminado es @samp{""}. | ||
| 17890 | |||
| 17891 | @end deftypevr | ||
| 17892 | |||
| 17893 | @deftypevr {@code{zabbix-server-configuration} parameter} number db-port | ||
| 17894 | Database port. | ||
| 17895 | |||
| 17896 | Defaults to @samp{5432}. | ||
| 17897 | |||
| 17898 | @end deftypevr | ||
| 17899 | |||
| 17900 | @deftypevr {@code{zabbix-server-configuration} parameter} string log-type | ||
| 17901 | Specifies 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 | |||
| 17915 | El valor predeterminado es @samp{""}. | ||
| 17916 | |||
| 17917 | @end deftypevr | ||
| 17918 | |||
| 17919 | @deftypevr {@code{zabbix-server-configuration} parameter} string log-file | ||
| 17920 | Log file name for @code{log-type} @code{file} parameter. | ||
| 17921 | |||
| 17922 | Defaults to @samp{"/var/log/zabbix/server.log"}. | ||
| 17923 | |||
| 17924 | @end deftypevr | ||
| 17925 | |||
| 17926 | @deftypevr {@code{zabbix-server-configuration} parameter} string pid-file | ||
| 17927 | Name of PID file. | ||
| 17928 | |||
| 17929 | Defaults to @samp{"/var/run/zabbix/zabbix_server.pid"}. | ||
| 17930 | |||
| 17931 | @end deftypevr | ||
| 17932 | |||
| 17933 | @deftypevr {@code{zabbix-server-configuration} parameter} string ssl-ca-location | ||
| 17934 | The location of certificate authority (CA) files for SSL server certificate | ||
| 17935 | verification. | ||
| 17936 | |||
| 17937 | Defaults to @samp{"/etc/ssl/certs/ca-certificates.crt"}. | ||
| 17938 | |||
| 17939 | @end deftypevr | ||
| 17940 | |||
| 17941 | @deftypevr {@code{zabbix-server-configuration} parameter} string ssl-cert-location | ||
| 17942 | Location of SSL client certificates. | ||
| 17943 | |||
| 17944 | Defaults to @samp{"/etc/ssl/certs"}. | ||
| 17945 | |||
| 17946 | @end deftypevr | ||
| 17947 | |||
| 17948 | @deftypevr {@code{zabbix-server-configuration} parameter} string extra-options | ||
| 17949 | Extra options will be appended to Zabbix server configuration file. | ||
| 17950 | |||
| 17951 | El valor predeterminado es @samp{""}. | ||
| 17952 | |||
| 17953 | @end deftypevr | ||
| 17954 | |||
| 17955 | @deftypevr {@code{zabbix-server-configuration} parameter} include-files include-files | ||
| 17956 | You may include individual files or all files in a directory in the | ||
| 17957 | configuration file. | ||
| 17958 | |||
| 17959 | Defaults to @samp{()}. | ||
| 17960 | |||
| 17961 | @end deftypevr | ||
| 17962 | |||
| 17963 | @c %end of fragment | ||
| 17964 | |||
| 17965 | @subsubheading Zabbix agent | ||
| 17966 | @cindex zabbix zabbix-agent | ||
| 17967 | |||
| 17968 | Zabbix agent gathers information for Zabbix server. | ||
| 17969 | |||
| 17970 | @c %start of fragment | ||
| 17971 | |||
| 17972 | Available @code{zabbix-agent-configuration} fields are: | ||
| 17973 | |||
| 17974 | @deftypevr {@code{zabbix-agent-configuration} parameter} package zabbix-agent | ||
| 17975 | The zabbix-agent package. | ||
| 17976 | |||
| 17977 | @end deftypevr | ||
| 17978 | |||
| 17979 | @deftypevr {@code{zabbix-agent-configuration} parameter} string user | ||
| 17980 | User who will run the Zabbix agent. | ||
| 17981 | |||
| 17982 | Defaults to @samp{"zabbix"}. | ||
| 17983 | |||
| 17984 | @end deftypevr | ||
| 17985 | |||
| 17986 | @deftypevr {@code{zabbix-agent-configuration} parameter} group group | ||
| 17987 | Group who will run the Zabbix agent. | ||
| 17988 | |||
| 17989 | Defaults to @samp{"zabbix"}. | ||
| 17990 | |||
| 17991 | @end deftypevr | ||
| 17992 | |||
| 17993 | @deftypevr {@code{zabbix-agent-configuration} parameter} string hostname | ||
| 17994 | Unique, case sensitive hostname which is required for active checks and must | ||
| 17995 | match hostname as configured on the server. | ||
| 17996 | |||
| 17997 | Defaults to @samp{"Zabbix server"}. | ||
| 17998 | |||
| 17999 | @end deftypevr | ||
| 18000 | |||
| 18001 | @deftypevr {@code{zabbix-agent-configuration} parameter} string log-type | ||
| 18002 | Specifies 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 | |||
| 18016 | El valor predeterminado es @samp{""}. | ||
| 18017 | |||
| 18018 | @end deftypevr | ||
| 18019 | |||
| 18020 | @deftypevr {@code{zabbix-agent-configuration} parameter} string log-file | ||
| 18021 | Log file name for @code{log-type} @code{file} parameter. | ||
| 18022 | |||
| 18023 | Defaults to @samp{"/var/log/zabbix/agent.log"}. | ||
| 18024 | |||
| 18025 | @end deftypevr | ||
| 18026 | |||
| 18027 | @deftypevr {@code{zabbix-agent-configuration} parameter} string pid-file | ||
| 18028 | Name of PID file. | ||
| 18029 | |||
| 18030 | Defaults to @samp{"/var/run/zabbix/zabbix_agent.pid"}. | ||
| 18031 | |||
| 18032 | @end deftypevr | ||
| 18033 | |||
| 18034 | @deftypevr {@code{zabbix-agent-configuration} parameter} list server | ||
| 18035 | List of IP addresses, optionally in CIDR notation, or hostnames of Zabbix | ||
| 18036 | servers and Zabbix proxies. Incoming connections will be accepted only from | ||
| 18037 | the hosts listed here. | ||
| 18038 | |||
| 18039 | Defaults to @samp{("127.0.0.1")}. | ||
| 18040 | |||
| 18041 | @end deftypevr | ||
| 18042 | |||
| 18043 | @deftypevr {@code{zabbix-agent-configuration} parameter} list server-active | ||
| 18044 | List of IP:port (or hostname:port) pairs of Zabbix servers and Zabbix | ||
| 18045 | proxies for active checks. If port is not specified, default port is used. | ||
| 18046 | If this parameter is not specified, active checks are disabled. | ||
| 18047 | |||
| 18048 | Defaults to @samp{("127.0.0.1")}. | ||
| 18049 | |||
| 18050 | @end deftypevr | ||
| 18051 | |||
| 18052 | @deftypevr {@code{zabbix-agent-configuration} parameter} string extra-options | ||
| 18053 | Extra options will be appended to Zabbix server configuration file. | ||
| 18054 | |||
| 18055 | El valor predeterminado es @samp{""}. | ||
| 18056 | |||
| 18057 | @end deftypevr | ||
| 18058 | |||
| 18059 | @deftypevr {@code{zabbix-agent-configuration} parameter} include-files include-files | ||
| 18060 | You may include individual files or all files in a directory in the | ||
| 18061 | configuration file. | ||
| 18062 | |||
| 18063 | Defaults 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 | |||
| 18072 | This service provides a WEB interface to Zabbix server. | ||
| 18073 | |||
| 18074 | @c %start of fragment | ||
| 18075 | |||
| 18076 | Available @code{zabbix-front-end-configuration} fields are: | ||
| 18077 | |||
| 18078 | @deftypevr {@code{zabbix-front-end-configuration} parameter} nginx-server-configuration-list nginx | ||
| 18079 | Configuración de NGINX. | ||
| 18080 | |||
| 18081 | @end deftypevr | ||
| 18082 | |||
| 18083 | @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-host | ||
| 18084 | Database host name. | ||
| 18085 | |||
| 18086 | Defaults to @samp{"localhost"}. | ||
| 18087 | |||
| 18088 | @end deftypevr | ||
| 18089 | |||
| 18090 | @deftypevr {@code{zabbix-front-end-configuration} parameter} number db-port | ||
| 18091 | Database port. | ||
| 18092 | |||
| 18093 | Defaults to @samp{5432}. | ||
| 18094 | |||
| 18095 | @end deftypevr | ||
| 18096 | |||
| 18097 | @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-name | ||
| 18098 | Database name. | ||
| 18099 | |||
| 18100 | Defaults to @samp{"zabbix"}. | ||
| 18101 | |||
| 18102 | @end deftypevr | ||
| 18103 | |||
| 18104 | @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-user | ||
| 18105 | Database user. | ||
| 18106 | |||
| 18107 | Defaults to @samp{"zabbix"}. | ||
| 18108 | |||
| 18109 | @end deftypevr | ||
| 18110 | |||
| 18111 | @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-password | ||
| 18112 | Database password. Please, use @code{db-secret-file} instead. | ||
| 18113 | |||
| 18114 | El valor predeterminado es @samp{""}. | ||
| 18115 | |||
| 18116 | @end deftypevr | ||
| 18117 | |||
| 18118 | @deftypevr {@code{zabbix-front-end-configuration} parameter} string db-secret-file | ||
| 18119 | Secret file which will be appended to @file{zabbix.conf.php} file. This | ||
| 18120 | file contains credentials for use by Zabbix front-end. You are expected to | ||
| 18121 | create it manually. | ||
| 18122 | |||
| 18123 | El valor predeterminado es @samp{""}. | ||
| 18124 | |||
| 18125 | @end deftypevr | ||
| 18126 | |||
| 18127 | @deftypevr {@code{zabbix-front-end-configuration} parameter} string zabbix-host | ||
| 18128 | Zabbix server hostname. | ||
| 18129 | |||
| 18130 | Defaults to @samp{"localhost"}. | ||
| 18131 | |||
| 18132 | @end deftypevr | ||
| 18133 | |||
| 18134 | @deftypevr {@code{zabbix-front-end-configuration} parameter} number zabbix-port | ||
| 18135 | Zabbix server port. | ||
| 18136 | |||
| 18137 | Defaults 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 | |||
| 18148 | The @code{(gnu services kerberos)} module provides services relating to the | ||
| 18149 | authentication protocol @dfn{Kerberos}. | ||
| 18150 | |||
| 18151 | @subsubheading Servicio Krb5 | ||
| 18152 | |||
| 18153 | Programs using a Kerberos client library normally expect a configuration | ||
| 18154 | file in @file{/etc/krb5.conf}. This service generates such a file from a | ||
| 18155 | definition provided in the operating system declaration. It does not cause | ||
| 18156 | any daemon to be started. | ||
| 18157 | |||
| 18158 | No ``keytab'' files are provided by this service---you must explicitly | ||
| 18159 | create 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 | ||
| 18163 | A service type for Kerberos 5 clients. | ||
| 18164 | @end defvr | ||
| 18165 | |||
| 18166 | @noindent | ||
| 18167 | Este 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 | ||
| 18185 | This example provides a Kerberos@tie{}5 client configuration which: | ||
| 18186 | @itemize | ||
| 18187 | @item Recognizes two realms, @i{viz:} ``EXAMPLE.COM'' and ``ARGRX.EDU'', both | ||
| 18188 | of which have distinct administration servers and key distribution centers; | ||
| 18189 | @item Will default to the realm ``EXAMPLE.COM'' if the realm is not explicitly | ||
| 18190 | specified by clients; | ||
| 18191 | @item Accepts services which only support encryption types known to be weak. | ||
| 18192 | @end itemize | ||
| 18193 | |||
| 18194 | The @code{krb5-realm} and @code{krb5-configuration} types have many fields. | ||
| 18195 | Only the most commonly used ones are described here. For a full list, and | ||
| 18196 | more 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} | ||
| 18198 | documentation. | ||
| 18199 | |||
| 18200 | |||
| 18201 | @deftp {Tipo de datos} krb5-realm | ||
| 18202 | @cindex realm, kerberos | ||
| 18203 | @table @asis | ||
| 18204 | @item @code{name} | ||
| 18205 | This field is a string identifying the name of the realm. A common | ||
| 18206 | convention is to use the fully qualified DNS name of your organization, | ||
| 18207 | converted to upper case. | ||
| 18208 | |||
| 18209 | @item @code{admin-server} | ||
| 18210 | This field is a string identifying the host where the administration server | ||
| 18211 | is running. | ||
| 18212 | |||
| 18213 | @item @code{kdc} | ||
| 18214 | This field is a string identifying the key distribution center for the | ||
| 18215 | realm. | ||
| 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}) | ||
| 18223 | If this flag is @code{#t} then services which only offer encryption | ||
| 18224 | algorithms known to be weak will be accepted. | ||
| 18225 | |||
| 18226 | @item @code{default-realm} (predeterminado: @code{#f}) | ||
| 18227 | This field should be a string identifying the default Kerberos realm for the | ||
| 18228 | client. You should set this field to the name of your Kerberos realm. If | ||
| 18229 | this value is @code{#f} then a realm must be specified with every Kerberos | ||
| 18230 | principal when invoking programs such as @command{kinit}. | ||
| 18231 | |||
| 18232 | @item @code{realms} | ||
| 18233 | This should be a non-empty list of @code{krb5-realm} objects, which clients | ||
| 18234 | may access. Normally, one of them will have a @code{name} field matching | ||
| 18235 | the @code{default-realm} field. | ||
| 18236 | @end table | ||
| 18237 | @end deftp | ||
| 18238 | |||
| 18239 | |||
| 18240 | @subsubheading Servicio PAM krb5 | ||
| 18241 | @cindex pam-krb5 | ||
| 18242 | |||
| 18243 | The @code{pam-krb5} service allows for login authentication and password | ||
| 18244 | management via Kerberos. You will need this service if you want PAM enabled | ||
| 18245 | applications to authenticate users using Kerberos. | ||
| 18246 | |||
| 18247 | @defvr {Variable Scheme} pam-krb5-service-type | ||
| 18248 | A service type for the Kerberos 5 PAM module. | ||
| 18249 | @end defvr | ||
| 18250 | |||
| 18251 | @deftp {Tipo de datos} pam-krb5-configuration | ||
| 18252 | Data type representing the configuration of the Kerberos 5 PAM module This | ||
| 18253 | type has the following parameters: | ||
| 18254 | @table @asis | ||
| 18255 | @item @code{pam-krb5} (predeterminado: @code{pam-krb5}) | ||
| 18256 | El paquete pam-krb5 usado. | ||
| 18257 | |||
| 18258 | @item @code{minimum-uid} (predeterminado: @code{1000}) | ||
| 18259 | The smallest user ID for which Kerberos authentications should be | ||
| 18260 | attempted. Local accounts with lower values will silently fail to | ||
| 18261 | authenticate. | ||
| 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 | |||
| 18271 | The @code{(gnu services authentication)} module provides the | ||
| 18272 | @code{nslcd-service-type}, which can be used to authenticate against an LDAP | ||
| 18273 | server. 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 | |||
| 18276 | Here is a simple operating system declaration with a default configuration | ||
| 18277 | of the @code{nslcd-service-type} and a Name Service Switch configuration | ||
| 18278 | that 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 | |||
| 18306 | Available @code{nslcd-configuration} fields are: | ||
| 18307 | |||
| 18308 | @deftypevr {@code{nslcd-configuration} parameter} package nss-pam-ldapd | ||
| 18309 | The @code{nss-pam-ldapd} package to use. | ||
| 18310 | |||
| 18311 | @end deftypevr | ||
| 18312 | |||
| 18313 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number threads | ||
| 18314 | The number of threads to start that can handle requests and perform LDAP | ||
| 18315 | queries. Each thread opens a separate connection to the LDAP server. The | ||
| 18316 | default is to start 5 threads. | ||
| 18317 | |||
| 18318 | Defaults to @samp{disabled}. | ||
| 18319 | |||
| 18320 | @end deftypevr | ||
| 18321 | |||
| 18322 | @deftypevr {@code{nslcd-configuration} parameter} string uid | ||
| 18323 | This specifies the user id with which the daemon should be run. | ||
| 18324 | |||
| 18325 | Defaults to @samp{"nslcd"}. | ||
| 18326 | |||
| 18327 | @end deftypevr | ||
| 18328 | |||
| 18329 | @deftypevr {@code{nslcd-configuration} parameter} string gid | ||
| 18330 | This specifies the group id with which the daemon should be run. | ||
| 18331 | |||
| 18332 | Defaults to @samp{"nslcd"}. | ||
| 18333 | |||
| 18334 | @end deftypevr | ||
| 18335 | |||
| 18336 | @deftypevr {@code{nslcd-configuration} parameter} log-option log | ||
| 18337 | This option controls the way logging is done via a list containing SCHEME | ||
| 18338 | and LEVEL. The SCHEME argument may either be the symbols "none" or | ||
| 18339 | "syslog", or an absolute file name. The LEVEL argument is optional and | ||
| 18340 | specifies the log level. The log level may be one of the following symbols: | ||
| 18341 | "crit", "error", "warning", "notice", "info" or "debug". All messages with | ||
| 18342 | the specified log level or higher are logged. | ||
| 18343 | |||
| 18344 | Defaults to @samp{("/var/log/nslcd" info)}. | ||
| 18345 | |||
| 18346 | @end deftypevr | ||
| 18347 | |||
| 18348 | @deftypevr {@code{nslcd-configuration} parameter} list uri | ||
| 18349 | The list of LDAP server URIs. Normally, only the first server will be used | ||
| 18350 | with the following servers as fall-back. | ||
| 18351 | |||
| 18352 | Defaults to @samp{("ldap://localhost:389/")}. | ||
| 18353 | |||
| 18354 | @end deftypevr | ||
| 18355 | |||
| 18356 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string ldap-version | ||
| 18357 | The version of the LDAP protocol to use. The default is to use the maximum | ||
| 18358 | version supported by the LDAP library. | ||
| 18359 | |||
| 18360 | Defaults to @samp{disabled}. | ||
| 18361 | |||
| 18362 | @end deftypevr | ||
| 18363 | |||
| 18364 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string binddn | ||
| 18365 | Specifies the distinguished name with which to bind to the directory server | ||
| 18366 | for lookups. The default is to bind anonymously. | ||
| 18367 | |||
| 18368 | Defaults to @samp{disabled}. | ||
| 18369 | |||
| 18370 | @end deftypevr | ||
| 18371 | |||
| 18372 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string bindpw | ||
| 18373 | Specifies the credentials with which to bind. This option is only | ||
| 18374 | applicable when used with binddn. | ||
| 18375 | |||
| 18376 | Defaults to @samp{disabled}. | ||
| 18377 | |||
| 18378 | @end deftypevr | ||
| 18379 | |||
| 18380 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmoddn | ||
| 18381 | Specifies the distinguished name to use when the root user tries to modify a | ||
| 18382 | user's password using the PAM module. | ||
| 18383 | |||
| 18384 | Defaults to @samp{disabled}. | ||
| 18385 | |||
| 18386 | @end deftypevr | ||
| 18387 | |||
| 18388 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string rootpwmodpw | ||
| 18389 | Specifies the credentials with which to bind if the root user tries to | ||
| 18390 | change a user's password. This option is only applicable when used with | ||
| 18391 | rootpwmoddn | ||
| 18392 | |||
| 18393 | Defaults to @samp{disabled}. | ||
| 18394 | |||
| 18395 | @end deftypevr | ||
| 18396 | |||
| 18397 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-mech | ||
| 18398 | Specifies the SASL mechanism to be used when performing SASL authentication. | ||
| 18399 | |||
| 18400 | Defaults to @samp{disabled}. | ||
| 18401 | |||
| 18402 | @end deftypevr | ||
| 18403 | |||
| 18404 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-realm | ||
| 18405 | Specifies the SASL realm to be used when performing SASL authentication. | ||
| 18406 | |||
| 18407 | Defaults to @samp{disabled}. | ||
| 18408 | |||
| 18409 | @end deftypevr | ||
| 18410 | |||
| 18411 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authcid | ||
| 18412 | Specifies the authentication identity to be used when performing SASL | ||
| 18413 | authentication. | ||
| 18414 | |||
| 18415 | Defaults to @samp{disabled}. | ||
| 18416 | |||
| 18417 | @end deftypevr | ||
| 18418 | |||
| 18419 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string sasl-authzid | ||
| 18420 | Specifies the authorization identity to be used when performing SASL | ||
| 18421 | authentication. | ||
| 18422 | |||
| 18423 | Defaults to @samp{disabled}. | ||
| 18424 | |||
| 18425 | @end deftypevr | ||
| 18426 | |||
| 18427 | @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean sasl-canonicalize? | ||
| 18428 | Determines whether the LDAP server host name should be canonicalised. If | ||
| 18429 | this is enabled the LDAP library will do a reverse host name lookup. By | ||
| 18430 | default, it is left up to the LDAP library whether this check is performed | ||
| 18431 | or not. | ||
| 18432 | |||
| 18433 | Defaults to @samp{disabled}. | ||
| 18434 | |||
| 18435 | @end deftypevr | ||
| 18436 | |||
| 18437 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string krb5-ccname | ||
| 18438 | Set the name for the GSS-API Kerberos credentials cache. | ||
| 18439 | |||
| 18440 | Defaults to @samp{disabled}. | ||
| 18441 | |||
| 18442 | @end deftypevr | ||
| 18443 | |||
| 18444 | @deftypevr {@code{nslcd-configuration} parameter} string base | ||
| 18445 | The directory search base. | ||
| 18446 | |||
| 18447 | Defaults to @samp{"dc=example,dc=com"}. | ||
| 18448 | |||
| 18449 | @end deftypevr | ||
| 18450 | |||
| 18451 | @deftypevr {@code{nslcd-configuration} parameter} scope-option scope | ||
| 18452 | Specifies the search scope (subtree, onelevel, base or children). The | ||
| 18453 | default scope is subtree; base scope is almost never useful for name service | ||
| 18454 | lookups; children scope is not supported on all servers. | ||
| 18455 | |||
| 18456 | Defaults to @samp{(subtree)}. | ||
| 18457 | |||
| 18458 | @end deftypevr | ||
| 18459 | |||
| 18460 | @deftypevr {@code{nslcd-configuration} parameter} maybe-deref-option deref | ||
| 18461 | Specifies the policy for dereferencing aliases. The default policy is to | ||
| 18462 | never dereference aliases. | ||
| 18463 | |||
| 18464 | Defaults to @samp{disabled}. | ||
| 18465 | |||
| 18466 | @end deftypevr | ||
| 18467 | |||
| 18468 | @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean referrals | ||
| 18469 | Specifies whether automatic referral chasing should be enabled. The default | ||
| 18470 | behaviour is to chase referrals. | ||
| 18471 | |||
| 18472 | Defaults to @samp{disabled}. | ||
| 18473 | |||
| 18474 | @end deftypevr | ||
| 18475 | |||
| 18476 | @deftypevr {@code{nslcd-configuration} parameter} list-of-map-entries maps | ||
| 18477 | This option allows for custom attributes to be looked up instead of the | ||
| 18478 | default RFC 2307 attributes. It is a list of maps, each consisting of the | ||
| 18479 | name of a map, the RFC 2307 attribute to match and the query expression for | ||
| 18480 | the attribute as it is available in the directory. | ||
| 18481 | |||
| 18482 | Defaults to @samp{()}. | ||
| 18483 | |||
| 18484 | @end deftypevr | ||
| 18485 | |||
| 18486 | @deftypevr {@code{nslcd-configuration} parameter} list-of-filter-entries filters | ||
| 18487 | A list of filters consisting of the name of a map to which the filter | ||
| 18488 | applies and an LDAP search filter expression. | ||
| 18489 | |||
| 18490 | Defaults to @samp{()}. | ||
| 18491 | |||
| 18492 | @end deftypevr | ||
| 18493 | |||
| 18494 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number bind-timelimit | ||
| 18495 | Specifies the time limit in seconds to use when connecting to the directory | ||
| 18496 | server. The default value is 10 seconds. | ||
| 18497 | |||
| 18498 | Defaults to @samp{disabled}. | ||
| 18499 | |||
| 18500 | @end deftypevr | ||
| 18501 | |||
| 18502 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number timelimit | ||
| 18503 | Specifies the time limit (in seconds) to wait for a response from the LDAP | ||
| 18504 | server. A value of zero, which is the default, is to wait indefinitely for | ||
| 18505 | searches to be completed. | ||
| 18506 | |||
| 18507 | Defaults to @samp{disabled}. | ||
| 18508 | |||
| 18509 | @end deftypevr | ||
| 18510 | |||
| 18511 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number idle-timelimit | ||
| 18512 | Specifies the period if inactivity (in seconds) after which the con‐ nection | ||
| 18513 | to the LDAP server will be closed. The default is not to time out | ||
| 18514 | connections. | ||
| 18515 | |||
| 18516 | Defaults to @samp{disabled}. | ||
| 18517 | |||
| 18518 | @end deftypevr | ||
| 18519 | |||
| 18520 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-sleeptime | ||
| 18521 | Specifies the number of seconds to sleep when connecting to all LDAP servers | ||
| 18522 | fails. By default one second is waited between the first failure and the | ||
| 18523 | first retry. | ||
| 18524 | |||
| 18525 | Defaults to @samp{disabled}. | ||
| 18526 | |||
| 18527 | @end deftypevr | ||
| 18528 | |||
| 18529 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number reconnect-retrytime | ||
| 18530 | Specifies the time after which the LDAP server is considered to be | ||
| 18531 | permanently unavailable. Once this time is reached retries will be done | ||
| 18532 | only once per this time period. The default value is 10 seconds. | ||
| 18533 | |||
| 18534 | Defaults to @samp{disabled}. | ||
| 18535 | |||
| 18536 | @end deftypevr | ||
| 18537 | |||
| 18538 | @deftypevr {@code{nslcd-configuration} parameter} maybe-ssl-option ssl | ||
| 18539 | Specifies 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 | |||
| 18542 | Defaults to @samp{disabled}. | ||
| 18543 | |||
| 18544 | @end deftypevr | ||
| 18545 | |||
| 18546 | @deftypevr {@code{nslcd-configuration} parameter} maybe-tls-reqcert-option tls-reqcert | ||
| 18547 | Specifies what checks to perform on a server-supplied certificate. The | ||
| 18548 | meaning of the values is described in the ldap.conf(5) manual page. | ||
| 18549 | |||
| 18550 | Defaults to @samp{disabled}. | ||
| 18551 | |||
| 18552 | @end deftypevr | ||
| 18553 | |||
| 18554 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertdir | ||
| 18555 | Specifies the directory containing X.509 certificates for peer authen‐ | ||
| 18556 | tication. This parameter is ignored when using GnuTLS. | ||
| 18557 | |||
| 18558 | Defaults to @samp{disabled}. | ||
| 18559 | |||
| 18560 | @end deftypevr | ||
| 18561 | |||
| 18562 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cacertfile | ||
| 18563 | Specifies the path to the X.509 certificate for peer authentication. | ||
| 18564 | |||
| 18565 | Defaults to @samp{disabled}. | ||
| 18566 | |||
| 18567 | @end deftypevr | ||
| 18568 | |||
| 18569 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-randfile | ||
| 18570 | Specifies the path to an entropy source. This parameter is ignored when | ||
| 18571 | using GnuTLS. | ||
| 18572 | |||
| 18573 | Defaults to @samp{disabled}. | ||
| 18574 | |||
| 18575 | @end deftypevr | ||
| 18576 | |||
| 18577 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-ciphers | ||
| 18578 | Specifies the ciphers to use for TLS as a string. | ||
| 18579 | |||
| 18580 | Defaults to @samp{disabled}. | ||
| 18581 | |||
| 18582 | @end deftypevr | ||
| 18583 | |||
| 18584 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-cert | ||
| 18585 | Specifies the path to the file containing the local certificate for client | ||
| 18586 | TLS authentication. | ||
| 18587 | |||
| 18588 | Defaults to @samp{disabled}. | ||
| 18589 | |||
| 18590 | @end deftypevr | ||
| 18591 | |||
| 18592 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string tls-key | ||
| 18593 | Specifies the path to the file containing the private key for client TLS | ||
| 18594 | authentication. | ||
| 18595 | |||
| 18596 | Defaults to @samp{disabled}. | ||
| 18597 | |||
| 18598 | @end deftypevr | ||
| 18599 | |||
| 18600 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number pagesize | ||
| 18601 | Set this to a number greater than 0 to request paged results from the LDAP | ||
| 18602 | server in accordance with RFC2696. The default (0) is to not request paged | ||
| 18603 | results. | ||
| 18604 | |||
| 18605 | Defaults to @samp{disabled}. | ||
| 18606 | |||
| 18607 | @end deftypevr | ||
| 18608 | |||
| 18609 | @deftypevr {@code{nslcd-configuration} parameter} maybe-ignore-users-option nss-initgroups-ignoreusers | ||
| 18610 | This option prevents group membership lookups through LDAP for the specified | ||
| 18611 | users. Alternatively, the value 'all-local may be used. With that value | ||
| 18612 | nslcd builds a full list of non-LDAP users on startup. | ||
| 18613 | |||
| 18614 | Defaults to @samp{disabled}. | ||
| 18615 | |||
| 18616 | @end deftypevr | ||
| 18617 | |||
| 18618 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-min-uid | ||
| 18619 | This option ensures that LDAP users with a numeric user id lower than the | ||
| 18620 | specified value are ignored. | ||
| 18621 | |||
| 18622 | Defaults to @samp{disabled}. | ||
| 18623 | |||
| 18624 | @end deftypevr | ||
| 18625 | |||
| 18626 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-uid-offset | ||
| 18627 | This option specifies an offset that is added to all LDAP numeric user ids. | ||
| 18628 | This can be used to avoid user id collisions with local users. | ||
| 18629 | |||
| 18630 | Defaults to @samp{disabled}. | ||
| 18631 | |||
| 18632 | @end deftypevr | ||
| 18633 | |||
| 18634 | @deftypevr {@code{nslcd-configuration} parameter} maybe-number nss-gid-offset | ||
| 18635 | This option specifies an offset that is added to all LDAP numeric group | ||
| 18636 | ids. This can be used to avoid user id collisions with local groups. | ||
| 18637 | |||
| 18638 | Defaults to @samp{disabled}. | ||
| 18639 | |||
| 18640 | @end deftypevr | ||
| 18641 | |||
| 18642 | @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-nested-groups | ||
| 18643 | If this option is set, the member attribute of a group may point to another | ||
| 18644 | group. Members of nested groups are also returned in the higher level group | ||
| 18645 | and parent groups are returned when finding groups for a specific user. The | ||
| 18646 | default is not to perform extra searches for nested groups. | ||
| 18647 | |||
| 18648 | Defaults to @samp{disabled}. | ||
| 18649 | |||
| 18650 | @end deftypevr | ||
| 18651 | |||
| 18652 | @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-getgrent-skipmembers | ||
| 18653 | If this option is set, the group member list is not retrieved when looking | ||
| 18654 | up groups. Lookups for finding which groups a user belongs to will remain | ||
| 18655 | functional so the user will likely still get the correct groups assigned on | ||
| 18656 | login. | ||
| 18657 | |||
| 18658 | Defaults to @samp{disabled}. | ||
| 18659 | |||
| 18660 | @end deftypevr | ||
| 18661 | |||
| 18662 | @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean nss-disable-enumeration | ||
| 18663 | If this option is set, functions which cause all user/group entries to be | ||
| 18664 | loaded from the directory will not succeed in doing so. This can | ||
| 18665 | dramatically reduce LDAP server load in situations where there are a great | ||
| 18666 | number of users and/or groups. This option is not recommended for most | ||
| 18667 | configurations. | ||
| 18668 | |||
| 18669 | Defaults to @samp{disabled}. | ||
| 18670 | |||
| 18671 | @end deftypevr | ||
| 18672 | |||
| 18673 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string validnames | ||
| 18674 | This option can be used to specify how user and group names are verified | ||
| 18675 | within the system. This pattern is used to check all user and group names | ||
| 18676 | that are requested and returned from LDAP. | ||
| 18677 | |||
| 18678 | Defaults to @samp{disabled}. | ||
| 18679 | |||
| 18680 | @end deftypevr | ||
| 18681 | |||
| 18682 | @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean ignorecase | ||
| 18683 | This specifies whether or not to perform searches using case-insensitive | ||
| 18684 | matching. Enabling this could open up the system to authorization bypass | ||
| 18685 | vulnerabilities and introduce nscd cache poisoning vulnerabilities which | ||
| 18686 | allow denial of service. | ||
| 18687 | |||
| 18688 | Defaults to @samp{disabled}. | ||
| 18689 | |||
| 18690 | @end deftypevr | ||
| 18691 | |||
| 18692 | @deftypevr {@code{nslcd-configuration} parameter} maybe-boolean pam-authc-ppolicy | ||
| 18693 | This option specifies whether password policy controls are requested and | ||
| 18694 | handled from the LDAP server when performing user authentication. | ||
| 18695 | |||
| 18696 | Defaults to @samp{disabled}. | ||
| 18697 | |||
| 18698 | @end deftypevr | ||
| 18699 | |||
| 18700 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authc-search | ||
| 18701 | By default nslcd performs an LDAP search with the user's credentials after | ||
| 18702 | BIND (authentication) to ensure that the BIND operation was successful. The | ||
| 18703 | default search is a simple check to see if the user's DN exists. A search | ||
| 18704 | filter can be specified that will be used instead. It should return at | ||
| 18705 | least one entry. | ||
| 18706 | |||
| 18707 | Defaults to @samp{disabled}. | ||
| 18708 | |||
| 18709 | @end deftypevr | ||
| 18710 | |||
| 18711 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-authz-search | ||
| 18712 | This option allows flexible fine tuning of the authorisation check that | ||
| 18713 | should be performed. The search filter specified is executed and if any | ||
| 18714 | entries match, access is granted, otherwise access is denied. | ||
| 18715 | |||
| 18716 | Defaults to @samp{disabled}. | ||
| 18717 | |||
| 18718 | @end deftypevr | ||
| 18719 | |||
| 18720 | @deftypevr {@code{nslcd-configuration} parameter} maybe-string pam-password-prohibit-message | ||
| 18721 | If this option is set password modification using pam_ldap will be denied | ||
| 18722 | and the specified message will be presented to the user instead. The | ||
| 18723 | message can be used to direct the user to an alternative means of changing | ||
| 18724 | their password. | ||
| 18725 | |||
| 18726 | Defaults to @samp{disabled}. | ||
| 18727 | |||
| 18728 | @end deftypevr | ||
| 18729 | |||
| 18730 | @deftypevr {@code{nslcd-configuration} parameter} list pam-services | ||
| 18731 | List of pam service names for which LDAP authentication should suffice. | ||
| 18732 | |||
| 18733 | Defaults 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 | ||
| 18746 | El módulo @code{(gnu services web)} proporciona el servidor HTTP Apache, el | ||
| 18747 | servidor 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 | ||
| 18752 | Service 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 | |||
| 18756 | A 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 | |||
| 18767 | Other services can also extend the @code{httpd-service-type} to add to the | ||
| 18768 | configuration. | ||
| 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 | |||
| 18781 | The details for the @code{httpd-configuration}, @code{httpd-module}, | ||
| 18782 | @code{httpd-config-file} and @code{httpd-virtualhost} record types are given | ||
| 18783 | below. | ||
| 18784 | |||
| 18785 | @deffn {Tipo de datos} httpd-configuration | ||
| 18786 | This data type represents the configuration for the httpd service. | ||
| 18787 | |||
| 18788 | @table @asis | ||
| 18789 | @item @code{package} (predeterminado: @code{httpd}) | ||
| 18790 | El paquete httpd usado. | ||
| 18791 | |||
| 18792 | @item @code{pid-file} (predeterminado: @code{"/var/run/httpd"}) | ||
| 18793 | El fichero pid usado por el servicio de Shepherd. | ||
| 18794 | |||
| 18795 | @item @code{config} (predeterminado: @code{(httpd-config-file)}) | ||
| 18796 | The 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 | ||
| 18798 | G-expression that generates a file, for example a @code{plain-file}. A file | ||
| 18799 | outside 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 | ||
| 18805 | This data type represents a module for the httpd service. | ||
| 18806 | |||
| 18807 | @table @asis | ||
| 18808 | @item @code{name} | ||
| 18809 | The name of the module. | ||
| 18810 | |||
| 18811 | @item @code{file} | ||
| 18812 | The file for the module. This can be relative to the httpd package being | ||
| 18813 | used, the absolute location of a file, or a G-expression for a file within | ||
| 18814 | the 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 | ||
| 18820 | A default list of @code{httpd-module} objects. | ||
| 18821 | @end defvr | ||
| 18822 | |||
| 18823 | @deffn {Tipo de datos} httpd-config-file | ||
| 18824 | This data type represents a configuration file for the httpd service. | ||
| 18825 | |||
| 18826 | @table @asis | ||
| 18827 | @item @code{modules} (predeterminados: @code{%default-httpd-modules}) | ||
| 18828 | The modules to load. Additional modules can be added here, or loaded by | ||
| 18829 | additional configuration. | ||
| 18830 | |||
| 18831 | For 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}) | ||
| 18858 | The @code{ServerRoot} in the configuration file, defaults to the httpd | ||
| 18859 | package. Directives including @code{Include} and @code{LoadModule} are taken | ||
| 18860 | as relative to the server root. | ||
| 18861 | |||
| 18862 | @item @code{server-name} (predeterminado: @code{#f}) | ||
| 18863 | The @code{ServerName} in the configuration file, used to specify the request | ||
| 18864 | scheme, hostname and port that the server uses to identify itself. | ||
| 18865 | |||
| 18866 | This doesn't need to be set in the server config, and can be specifyed in | ||
| 18867 | virtual hosts. The default is @code{#f} to not specify a @code{ServerName}. | ||
| 18868 | |||
| 18869 | @item @code{document-root} (predeterminado: @code{"/srv/http"}) | ||
| 18870 | The @code{DocumentRoot} from which files will be served. | ||
| 18871 | |||
| 18872 | @item @code{listen} (predeterminado: @code{'("80")}) | ||
| 18873 | The list of values for the @code{Listen} directives in the config file. The | ||
| 18874 | value should be a list of strings, when each string can specify the port | ||
| 18875 | number to listen on, and optionally the IP address and protocol to use. | ||
| 18876 | |||
| 18877 | @item @code{pid-file} (predeterminado: @code{"/var/run/httpd"}) | ||
| 18878 | The @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 | ||
| 18880 | correctly. | ||
| 18881 | |||
| 18882 | @item @code{error-log} (predeterminado: @code{"/var/log/httpd/error_log"}) | ||
| 18883 | The @code{ErrorLog} to which the server will log errors. | ||
| 18884 | |||
| 18885 | @item @code{user} (predeterminada: @code{"httpd"}) | ||
| 18886 | La usuaria como la que el servidor responderá a las peticiones. | ||
| 18887 | |||
| 18888 | @item @code{group} (predeterminado: @code{"httpd"}) | ||
| 18889 | El grupo como el que el servidor responderá a las peticiones. | ||
| 18890 | |||
| 18891 | @item @code{extra-config} (predeterminadas: @code{(list "TypesConfig etc/httpd/mime.types")}) | ||
| 18892 | A flat list of strings and G-expressions which will be added to the end of | ||
| 18893 | the configuration file. | ||
| 18894 | |||
| 18895 | Any 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 | ||
| 18901 | This data type represents a virtualhost configuration block for the httpd | ||
| 18902 | service. | ||
| 18903 | |||
| 18904 | These 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} | ||
| 18918 | The addresses and ports for the @code{VirtualHost} directive. | ||
| 18919 | |||
| 18920 | @item @code{contents} | ||
| 18921 | The contents of the @code{VirtualHost} directive, this should be a list of | ||
| 18922 | strings and G-expressions. | ||
| 18923 | |||
| 18924 | @end table | ||
| 18925 | @end deffn | ||
| 18926 | |||
| 18927 | @subsubheading NGINX | ||
| 18928 | |||
| 18929 | @deffn {Variable Scheme} nginx-service-type | ||
| 18930 | Service type for the @uref{https://nginx.org/,NGinx} web server. The value | ||
| 18931 | for this service type is a @code{<nginx-configuration>} record. | ||
| 18932 | |||
| 18933 | A 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 | |||
| 18944 | In addition to adding server blocks to the service configuration directly, | ||
| 18945 | this service can be extended by other services to add server blocks, as in | ||
| 18946 | this 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 | |||
| 18956 | At startup, @command{nginx} has not yet read its configuration file, so it | ||
| 18957 | uses a default file to log error messages. If it fails to load its | ||
| 18958 | configuration file, that is where error messages are logged. After the | ||
| 18959 | configuration file is loaded, the default error log file changes as per | ||
| 18960 | configuration. 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 | ||
| 18963 | the @var{log-directory} configuration option. | ||
| 18964 | |||
| 18965 | @deffn {Tipo de datos} nginx-configuration | ||
| 18966 | This data type represents the configuration for NGinx. Some configuration | ||
| 18967 | can be done through this and the other provided record types, or | ||
| 18968 | alternatively, a config file can be provided. | ||
| 18969 | |||
| 18970 | @table @asis | ||
| 18971 | @item @code{nginx} (predeterminado: @code{nginx}) | ||
| 18972 | El paquete nginx usado. | ||
| 18973 | |||
| 18974 | @item @code{log-directory} (predeterminado: @code{"/var/log/nginx"}) | ||
| 18975 | The directory to which NGinx will write log files. | ||
| 18976 | |||
| 18977 | @item @code{run-directory} (predeterminado: @code{"/var/run/nginx"}) | ||
| 18978 | The directory in which NGinx will create a pid file, and write temporary | ||
| 18979 | files. | ||
| 18980 | |||
| 18981 | @item @code{server-blocks} (predeterminados: @code{'()}) | ||
| 18982 | A list of @dfn{server blocks} to create in the generated configuration file, | ||
| 18983 | the elements should be of type @code{<nginx-server-configuration>}. | ||
| 18984 | |||
| 18985 | The following example would setup NGinx to serve @code{www.example.com} from | ||
| 18986 | the @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{'()}) | ||
| 18997 | A list of @dfn{upstream blocks} to create in the generated configuration | ||
| 18998 | file, the elements should be of type @code{<nginx-upstream-configuration>}. | ||
| 18999 | |||
| 19000 | Configuring upstreams through the @code{upstream-blocks} can be useful when | ||
| 19001 | combined with @code{locations} in the @code{<nginx-server-configuration>} | ||
| 19002 | records. The following example creates a server configuration with one | ||
| 19003 | location configuration, that will proxy requests to a upstream | ||
| 19004 | configuration, 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}) | ||
| 19027 | If a configuration @var{file} is provided, this will be used, rather than | ||
| 19028 | generating a configuration file from the provided @code{log-directory}, | ||
| 19029 | @code{run-directory}, @code{server-blocks} and @code{upstream-blocks}. For | ||
| 19030 | proper operation, these arguments should match what is in @var{file} to | ||
| 19031 | ensure that the directories are created when the service is activated. | ||
| 19032 | |||
| 19033 | This can be useful if you have an existing configuration file, or it's not | ||
| 19034 | possible to do what is required through the other parts of the | ||
| 19035 | nginx-configuration record. | ||
| 19036 | |||
| 19037 | @item @code{server-names-hash-bucket-size} (predeterminado: @code{#f}) | ||
| 19038 | Bucket size for the server names hash tables, defaults to @code{#f} to use | ||
| 19039 | the size of the processors cache line. | ||
| 19040 | |||
| 19041 | @item @code{server-names-hash-bucket-max-size} (predeterminado: @code{#f}) | ||
| 19042 | Maximum bucket size for the server names hash tables. | ||
| 19043 | |||
| 19044 | @item @code{extra-content} (predeterminado: @code{""}) | ||
| 19045 | Extra content for the @code{http} block. Should be string or a string | ||
| 19046 | valued G-expression. | ||
| 19047 | |||
| 19048 | @end table | ||
| 19049 | @end deffn | ||
| 19050 | |||
| 19051 | @deftp {Tipo de datos} nginx-server-configuration | ||
| 19052 | Data type representing the configuration of an nginx server block. This | ||
| 19053 | type has the following parameters: | ||
| 19054 | |||
| 19055 | @table @asis | ||
| 19056 | @item @code{listen} (predeterminadas: @code{'("80" "443 ssl")}) | ||
| 19057 | Each @code{listen} directive sets the address and port for IP, or the path | ||
| 19058 | for a UNIX-domain socket on which the server will accept requests. Both | ||
| 19059 | address and port, or only address or only port can be specified. An address | ||
| 19060 | may 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)}) | ||
| 19067 | A list of server names this server represents. @code{'default} represents | ||
| 19068 | the default server for connections matching no other server. | ||
| 19069 | |||
| 19070 | @item @code{root} (predeterminada: @code{"/srv/http"}) | ||
| 19071 | Raíz del sitio web que nginx proporcionará. | ||
| 19072 | |||
| 19073 | @item @code{locations} (predeterminado: @code{'()}) | ||
| 19074 | A list of @dfn{nginx-location-configuration} or | ||
| 19075 | @dfn{nginx-named-location-configuration} records to use within this server | ||
| 19076 | block. | ||
| 19077 | |||
| 19078 | @item @code{index} (predeterminado: @code{(list "index.html")}) | ||
| 19079 | Index files to look for when clients ask for a directory. If it cannot be | ||
| 19080 | found, Nginx will send the list of files in the directory. | ||
| 19081 | |||
| 19082 | @item @code{try-files} (predeterminado: @code{'()}) | ||
| 19083 | A 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}) | ||
| 19087 | Where to find the certificate for secure connections. Set it to @code{#f} | ||
| 19088 | if you don't have a certificate or you don't want to use HTTPS. | ||
| 19089 | |||
| 19090 | @item @code{ssl-certificate-key} (predeterminado: @code{#f}) | ||
| 19091 | Where to find the private key for secure connections. Set it to @code{#f} | ||
| 19092 | if you don't have a key or you don't want to use HTTPS. | ||
| 19093 | |||
| 19094 | @item @code{server-tokens?} (predeterminado: @code{#f}) | ||
| 19095 | Whether the server should add its configuration to response. | ||
| 19096 | |||
| 19097 | @item @code{raw-content} (predeterminado: @code{'()}) | ||
| 19098 | A 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 | ||
| 19104 | Data type representing the configuration of an nginx @code{upstream} block. | ||
| 19105 | This type has the following parameters: | ||
| 19106 | |||
| 19107 | @table @asis | ||
| 19108 | @item @code{name} | ||
| 19109 | Name for this group of servers. | ||
| 19110 | |||
| 19111 | @item @code{servers} | ||
| 19112 | Specify the addresses of the servers in the group. The address can be | ||
| 19113 | specified 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 | ||
| 19116 | port 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 | ||
| 19122 | Data type representing the configuration of an nginx @code{location} block. | ||
| 19123 | This type has the following parameters: | ||
| 19124 | |||
| 19125 | @table @asis | ||
| 19126 | @item @code{uri} | ||
| 19127 | URI which this location block matches. | ||
| 19128 | |||
| 19129 | @anchor{nginx-location-configuration body} | ||
| 19130 | @item @code{body} | ||
| 19131 | Body of the location block, specified as a list of strings. This can contain | ||
| 19132 | many configuration directives. For example, to pass requests to a upstream | ||
| 19133 | server group defined using an @code{nginx-upstream-configuration} block, the | ||
| 19134 | following directive would be specified in the body @samp{(list "proxy_pass | ||
| 19135 | http://upstream-name;")}. | ||
| 19136 | |||
| 19137 | @end table | ||
| 19138 | @end deftp | ||
| 19139 | |||
| 19140 | @deftp {Tipo de datos} nginx-named-location-configuration | ||
| 19141 | Data type representing the configuration of an nginx named location block. | ||
| 19142 | Named location blocks are used for request redirection, and not used for | ||
| 19143 | regular request processing. This type has the following parameters: | ||
| 19144 | |||
| 19145 | @table @asis | ||
| 19146 | @item @code{name} | ||
| 19147 | Name to identify this location block. | ||
| 19148 | |||
| 19149 | @item @code{body} | ||
| 19150 | @xref{nginx-location-configuration body}, as the body for named location | ||
| 19151 | blocks can be used in a similar way to the | ||
| 19152 | @code{nginx-location-configuration body}. One restriction is that the body | ||
| 19153 | of a named location block cannot contain location blocks. | ||
| 19154 | |||
| 19155 | @end table | ||
| 19156 | @end deftp | ||
| 19157 | |||
| 19158 | @subsubheading Varnish Cache | ||
| 19159 | @cindex Varnish | ||
| 19160 | Varnish is a fast cache server that sits in between web applications and end | ||
| 19161 | users. It proxies requests from clients and caches the accessed URLs such | ||
| 19162 | that multiple requests for the same resource only creates one request to the | ||
| 19163 | back-end. | ||
| 19164 | |||
| 19165 | @defvr {Variable Scheme} varnish-service-type | ||
| 19166 | Service type for the Varnish daemon. | ||
| 19167 | @end defvr | ||
| 19168 | |||
| 19169 | @deftp {Tipo de datos} varnish-configuration | ||
| 19170 | Data type representing the @code{varnish} service configuration. This type | ||
| 19171 | has the following parameters: | ||
| 19172 | |||
| 19173 | @table @asis | ||
| 19174 | @item @code{package} (predeterminado: @code{varnish}) | ||
| 19175 | El paquete Varnish usado. | ||
| 19176 | |||
| 19177 | @item @code{name} (predeterminado: @code{"default"}) | ||
| 19178 | A 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 | ||
| 19180 | name starts with a forward slash, it is interpreted as an absolute directory | ||
| 19181 | name. | ||
| 19182 | |||
| 19183 | Pass the @code{-n} argument to other Varnish programs to connect to the | ||
| 19184 | named instance, e.g.@: @command{varnishncsa -n default}. | ||
| 19185 | |||
| 19186 | @item @code{backend} (predeterminado: @code{"localhost:8080"}) | ||
| 19187 | The backend to use. This option has no effect if @code{vcl} is set. | ||
| 19188 | |||
| 19189 | @item @code{vcl} (predeterminado: #f) | ||
| 19190 | The @dfn{VCL} (Varnish Configuration Language) program to run. If this is | ||
| 19191 | @code{#f}, Varnish will proxy @code{backend} using the default | ||
| 19192 | configuration. Otherwise this must be a file-like object with valid VCL | ||
| 19193 | syntax. | ||
| 19194 | |||
| 19195 | @c Varnish does not support HTTPS, so keep this URL to avoid confusion. | ||
| 19196 | For example, to mirror @url{http://www.gnu.org,www.gnu.org} with VCL you can | ||
| 19197 | do something along these lines: | ||
| 19198 | |||
| 19199 | @example | ||
| 19200 | (define %espejo-gnu | ||
| 19201 | (plain-file | ||
| 19202 | "gnu.vcl" | ||
| 19203 | "vcl 4.1; | ||
| 19204 | backend 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 | |||
| 19215 | The configuration of an already running Varnish instance can be inspected | ||
| 19216 | and changed using the @command{varnishadm} program. | ||
| 19217 | |||
| 19218 | Consult the @url{https://varnish-cache.org/docs/,Varnish User Guide} and | ||
| 19219 | @url{https://book.varnish-software.com/4.0/,Varnish Book} for comprehensive | ||
| 19220 | documentation on Varnish and its configuration language. | ||
| 19221 | |||
| 19222 | @item @code{listen} (predeterminada: @code{'("localhost:80")}) | ||
| 19223 | Lista de direcciones en las que Varnish escucha. | ||
| 19224 | |||
| 19225 | @item @code{storage} (predeterminado: @code{'("malloc,128m")}) | ||
| 19226 | List of storage backends that will be available in VCL. | ||
| 19227 | |||
| 19228 | @item @code{parameters} (predeterminados: @code{'()}) | ||
| 19229 | List of run-time parameters in the form @code{'(("parameter" . "value"))}. | ||
| 19230 | |||
| 19231 | @item @code{extra-options} (predeterminadas: @code{'()}) | ||
| 19232 | Additional 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 | ||
| 19240 | FastCGI is an interface between the front-end and the back-end of a web | ||
| 19241 | service. It is a somewhat legacy facility; new web services should | ||
| 19242 | generally just talk HTTP between the front-end and the back-end. However | ||
| 19243 | there are a number of back-end services such as PHP or the optimized HTTP | ||
| 19244 | Git repository access that use FastCGI, so we have support for it in Guix. | ||
| 19245 | |||
| 19246 | To use FastCGI, you configure the front-end web server (e.g., nginx) to | ||
| 19247 | dispatch some subset of its requests to the fastcgi backend, which listens | ||
| 19248 | on a local TCP or UNIX socket. There is an intermediary @code{fcgiwrap} | ||
| 19249 | program that sits between the actual backend process and the web server. | ||
| 19250 | The front-end indicates which backend program to run, passing that | ||
| 19251 | information to the @code{fcgiwrap} process. | ||
| 19252 | |||
| 19253 | @defvr {Variable Scheme} fcgiwrap-service-type | ||
| 19254 | A service type for the @code{fcgiwrap} FastCGI proxy. | ||
| 19255 | @end defvr | ||
| 19256 | |||
| 19257 | @deftp {Tipo de datos} fcgiwrap-configuration | ||
| 19258 | Data type representing the configuration of the @code{fcgiwrap} service. | ||
| 19259 | This type has the following parameters: | ||
| 19260 | @table @asis | ||
| 19261 | @item @code{package} (predeterminado: @code{fcgiwrap}) | ||
| 19262 | El paquete fcgiwrap usado. | ||
| 19263 | |||
| 19264 | @item @code{socket} (predeterminado: @code{tcp:127.0.0.1:9000}) | ||
| 19265 | The socket on which the @code{fcgiwrap} process should listen, as a string. | ||
| 19266 | Valid @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}) | ||
| 19272 | The user and group names, as strings, under which to run the @code{fcgiwrap} | ||
| 19273 | process. The @code{fastcgi} service will ensure that if the user asks for | ||
| 19274 | the specific user or group names @code{fcgiwrap} that the corresponding user | ||
| 19275 | and/or group is present on the system. | ||
| 19276 | |||
| 19277 | It is possible to configure a FastCGI-backed web service to pass HTTP | ||
| 19278 | authentication 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. | ||
| 19280 | To 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 | ||
| 19282 | configured on the front-end as well. | ||
| 19283 | @end table | ||
| 19284 | @end deftp | ||
| 19285 | |||
| 19286 | @cindex php-fpm | ||
| 19287 | PHP-FPM (FastCGI Process Manager) is an alternative PHP FastCGI | ||
| 19288 | implementation with some additional features useful for sites of any size. | ||
| 19289 | |||
| 19290 | These 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 | ||
| 19296 | and 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() - | ||
| 19302 | a special function to finish request & flush all data while continuing to do | ||
| 19303 | something time-consuming (video converting, stats processing, etc.) | ||
| 19304 | @end itemize | ||
| 19305 | ...@: and much more. | ||
| 19306 | |||
| 19307 | @defvr {Variable Scheme} php-fpm-service-type | ||
| 19308 | Un tipo de servicio para @code{php-fpm}. | ||
| 19309 | @end defvr | ||
| 19310 | |||
| 19311 | @deftp {Tipo de datos} php-fpm-configuration | ||
| 19312 | Tipo de datos para la configuración del servicio php-fpm. | ||
| 19313 | @table @asis | ||
| 19314 | @item @code{php} (predeterminado: @code{php}) | ||
| 19315 | El paquete php usado. | ||
| 19316 | @item @code{socket} (predeterminado: @code{(string-append "/var/run/php" (version-major (package-version php)) "-fpm.sock")}) | ||
| 19317 | La dirección desde la que FastCGI acepta peticiones. Las sintaxis válidas | ||
| 19318 | son: | ||
| 19319 | @table @asis | ||
| 19320 | @item @code{"dir.ecc.ión.ip:puerto"} | ||
| 19321 | Escucha con un socket TCP en la dirección especificada en un puerto | ||
| 19322 | específico. | ||
| 19323 | @item @code{"puerto"} | ||
| 19324 | Escucha en un socket TCP en todas las direcciones sobre un puerto | ||
| 19325 | específico. | ||
| 19326 | @item @code{"/ruta/a/socket/unix"} | ||
| 19327 | Escucha en un socket Unix. | ||
| 19328 | @end table | ||
| 19329 | |||
| 19330 | @item @code{user} (predeterminada: @code{php-fpm}) | ||
| 19331 | User who will own the php worker processes. | ||
| 19332 | @item @code{group} (predeterminado: @code{php-fpm}) | ||
| 19333 | Group of the worker processes. | ||
| 19334 | @item @code{socket-user} (predeterminado: @code{php-fpm}) | ||
| 19335 | User who can speak to the php-fpm socket. | ||
| 19336 | @item @code{socket-group} (predeterminado: @code{php-fpm}) | ||
| 19337 | Group 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")}) | ||
| 19339 | The process id of the php-fpm process is written to this file once the | ||
| 19340 | service has started. | ||
| 19341 | @item @code{log-file} (predeterminado: @code{(string-append "/var/log/php" (version-major (package-version php)) "-fpm.log")}) | ||
| 19342 | Log for the php-fpm master process. | ||
| 19343 | @item @code{process-manager} (predeterminado: @code{(php-fpm-dynamic-process-manager-configuration)}) | ||
| 19344 | Detailed 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}) | ||
| 19351 | Determines whether php errors and warning should be sent to clients and | ||
| 19352 | displayed in their browsers. This is useful for local php development, but | ||
| 19353 | a security risk for public sites, as error messages can reveal passwords and | ||
| 19354 | personal data. | ||
| 19355 | @item @code{timezone} (default @code{#f}) | ||
| 19356 | Specifies @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")}) | ||
| 19358 | This file will log the @code{stderr} outputs of php worker processes. Can | ||
| 19359 | be set to @code{#f} to disable logging. | ||
| 19360 | @item @code{file} (predeterminado @code{#f}) | ||
| 19361 | An 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 | ||
| 19367 | Data Type for the @code{dynamic} php-fpm process manager. With the | ||
| 19368 | @code{dynamic} process manager, spare worker processes are kept around based | ||
| 19369 | on it's configured limits. | ||
| 19370 | @table @asis | ||
| 19371 | @item @code{max-children} (predeterminados: @code{5}) | ||
| 19372 | Maximum of worker processes. | ||
| 19373 | @item @code{start-servers} (predeterminados: @code{2}) | ||
| 19374 | How many worker processes should be started on start-up. | ||
| 19375 | @item @code{min-spare-servers} (predeterminado: @code{1}) | ||
| 19376 | How many spare worker processes should be kept around at minimum. | ||
| 19377 | @item @code{max-spare-servers} (predeterminados: @code{3}) | ||
| 19378 | How 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 | ||
| 19383 | Data Type for the @code{static} php-fpm process manager. With the | ||
| 19384 | @code{static} process manager, an unchanging number of worker processes are | ||
| 19385 | created. | ||
| 19386 | @table @asis | ||
| 19387 | @item @code{max-children} (predeterminados: @code{5}) | ||
| 19388 | Maximum of worker processes. | ||
| 19389 | @end table | ||
| 19390 | @end deftp | ||
| 19391 | |||
| 19392 | @deftp {Tipo de datos} php-fpm-on-demand-process-manager-configuration | ||
| 19393 | Data Type for the @code{on-demand} php-fpm process manager. With the | ||
| 19394 | @code{on-demand} process manager, worker processes are only created as | ||
| 19395 | requests arrive. | ||
| 19396 | @table @asis | ||
| 19397 | @item @code{max-children} (predeterminados: @code{5}) | ||
| 19398 | Maximum of worker processes. | ||
| 19399 | @item @code{process-idle-timeout} (predeterminado: @code{10}) | ||
| 19400 | The 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 | ||
| 19408 | quickly add php to an @code{nginx-server-configuration}. | ||
| 19409 | @end deffn | ||
| 19410 | |||
| 19411 | A 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 | ||
| 19428 | The cat avatar generator is a simple service to demonstrate the use of | ||
| 19429 | php-fpm in @code{Nginx}. It is used to generate cat avatar from a seed, for | ||
| 19430 | instance 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 | ||
| 19434 | cat-avatar-generator] @ [#:configuration (nginx-server-configuration)] | ||
| 19435 | Returns an nginx-server-configuration that inherits @code{configuration}. | ||
| 19436 | It extends the nginx configuration to add a server block that serves | ||
| 19437 | @code{package}, a version of cat-avatar-generator. During execution, | ||
| 19438 | cat-avatar-generator will be able to use @code{cache-dir} as its cache | ||
| 19439 | directory. | ||
| 19440 | @end deffn | ||
| 19441 | |||
| 19442 | A 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 | ||
| 19455 | The @uref{hpcguix-web, https://github.com/UMCUGenetics/hpcguix-web/} program | ||
| 19456 | is a customizable web interface to browse Guix packages, initially designed | ||
| 19457 | for users of high-performance computing (HPC) clusters. | ||
| 19458 | |||
| 19459 | @defvr {Variable Scheme} hpcguix-web-service-type | ||
| 19460 | El tipo de servicio para @code{hpcguix-web}. | ||
| 19461 | @end defvr | ||
| 19462 | |||
| 19463 | @deftp {Tipo de datos} hpcguix-web-configuration | ||
| 19464 | El tipo de datos para la configuración del servicio hpcguix-web. | ||
| 19465 | |||
| 19466 | @table @asis | ||
| 19467 | @item @code{specs} | ||
| 19468 | A gexp (@pxref{Expresiones-G}) specifying the hpcguix-web service | ||
| 19469 | configuration. The main items available in this spec are: | ||
| 19470 | |||
| 19471 | @table @asis | ||
| 19472 | @item @code{title-prefix} (predeterminado: @code{"hpcguix | "}) | ||
| 19473 | El prefijo del título de la página. | ||
| 19474 | |||
| 19475 | @item @code{guix-command} (predeterminada: @code{"guix"}) | ||
| 19476 | La orden @command{guix}. | ||
| 19477 | |||
| 19478 | @item @code{package-filter-proc} (predeterminado: @code{(const #t)}) | ||
| 19479 | A procedure specifying how to filter packages that are displayed. | ||
| 19480 | |||
| 19481 | @item @code{package-page-extension-proc} (predeterminado: @code{(const '())}) | ||
| 19482 | Extension package for @code{hpcguix-web}. | ||
| 19483 | |||
| 19484 | @item @code{menu} (predeterminadas: @code{'()}) | ||
| 19485 | Entradas adicionales en el menú de la página. | ||
| 19486 | |||
| 19487 | @item @code{channels} (predeterminados: @code{%default-channels}) | ||
| 19488 | List of channels from which the package list is built (@pxref{Canales}). | ||
| 19489 | |||
| 19490 | @item @code{package-list-expiration} (predeterminado: @code{(* 12 3600)}) | ||
| 19491 | The expiration time, in seconds, after which the package list is rebuilt | ||
| 19492 | from the latest instances of the given channels. | ||
| 19493 | @end table | ||
| 19494 | |||
| 19495 | See the hpcguix-web repository for a | ||
| 19496 | @uref{https://github.com/UMCUGenetics/hpcguix-web/blob/master/hpcweb-configuration.scm, | ||
| 19497 | complete example}. | ||
| 19498 | |||
| 19499 | @item @code{package} (predeterminado: @code{hpcguix-web}) | ||
| 19500 | The hpcguix-web package to use. | ||
| 19501 | @end table | ||
| 19502 | @end deftp | ||
| 19503 | |||
| 19504 | A 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 | ||
| 19517 | The hpcguix-web service periodically updates the package list it publishes | ||
| 19518 | by pulling channels from Git. To that end, it needs to access X.509 | ||
| 19519 | certificates so that it can authenticate Git servers when communicating over | ||
| 19520 | HTTPS, and it assumes that @file{/etc/ssl/certs} contains those | ||
| 19521 | certificates. | ||
| 19522 | |||
| 19523 | Thus, make sure to add @code{nss-certs} or another certificate package to | ||
| 19524 | the @code{packages} field of your configuration. @ref{Certificados X.509}, | ||
| 19525 | for 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 | ||
| 19535 | The @code{(gnu services certbot)} module provides a service to automatically | ||
| 19536 | obtain a valid TLS certificate from the Let's Encrypt certificate | ||
| 19537 | authority. These certificates can then be used to serve content securely | ||
| 19538 | over HTTPS or other TLS-based protocols, with the knowledge that the client | ||
| 19539 | will be able to verify the server's authenticity. | ||
| 19540 | |||
| 19541 | @url{https://letsencrypt.org/, Let's Encrypt} provides the @code{certbot} | ||
| 19542 | tool to automate the certification process. This tool first securely | ||
| 19543 | generates a key on the server. It then makes a request to the Let's Encrypt | ||
| 19544 | certificate authority (CA) to sign the key. The CA checks that the request | ||
| 19545 | originates from the host in question by using a challenge-response protocol, | ||
| 19546 | requiring the server to provide its response over HTTP. If that protocol | ||
| 19547 | completes successfully, the CA signs the key, resulting in a certificate. | ||
| 19548 | That certificate is valid for a limited period of time, and therefore to | ||
| 19549 | continue to provide TLS services, the server needs to periodically ask the | ||
| 19550 | CA to renew its signature. | ||
| 19551 | |||
| 19552 | The certbot service automates this process: the initial key generation, the | ||
| 19553 | initial certification request to the Let's Encrypt service, the web server | ||
| 19554 | challenge/response integration, writing the certificate to disk, the | ||
| 19555 | automated periodic renewals, and the deployment tasks associated with the | ||
| 19556 | renewal (e.g.@: reloading services, copying keys with different | ||
| 19557 | permissions). | ||
| 19558 | |||
| 19559 | Certbot is run twice a day, at a random minute within the hour. It won't do | ||
| 19560 | anything until your certificates are due for renewal or revoked, but running | ||
| 19561 | it regularly would give your service a chance of staying online in case a | ||
| 19562 | Let's Encrypt-initiated revocation happened for some reason. | ||
| 19563 | |||
| 19564 | By using this service, you agree to the ACME Subscriber Agreement, which can | ||
| 19565 | be found there: @url{https://acme-v01.api.letsencrypt.org/directory}. | ||
| 19566 | |||
| 19567 | @defvr {Variable Scheme} certbot-service-type | ||
| 19568 | A service type for the @code{certbot} Let's Encrypt client. Its value must | ||
| 19569 | be 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 | |||
| 19590 | See below for details about @code{certbot-configuration}. | ||
| 19591 | @end defvr | ||
| 19592 | |||
| 19593 | @deftp {Tipo de datos} certbot-configuration | ||
| 19594 | Data type representing the configuration of the @code{certbot} service. | ||
| 19595 | This type has the following parameters: | ||
| 19596 | |||
| 19597 | @table @asis | ||
| 19598 | @item @code{package} (predeterminado: @code{certbot}) | ||
| 19599 | El paquete certbot usado. | ||
| 19600 | |||
| 19601 | @item @code{webroot} (predeterminado: @code{/var/www}) | ||
| 19602 | The directory from which to serve the Let's Encrypt challenge/response | ||
| 19603 | files. | ||
| 19604 | |||
| 19605 | @item @code{certificates} (predeterminados: @code{()}) | ||
| 19606 | A list of @code{certificates-configuration}s for which to generate | ||
| 19607 | certificates and request signatures. Each certificate has a @code{name} and | ||
| 19608 | several @code{domains}. | ||
| 19609 | |||
| 19610 | @item @code{email} | ||
| 19611 | Mandatory email used for registration, recovery contact, and important | ||
| 19612 | account notifications. | ||
| 19613 | |||
| 19614 | @item @code{rsa-key-size} (predeterminado: @code{2048}) | ||
| 19615 | Tamaño de la clave RSA. | ||
| 19616 | |||
| 19617 | @item @code{default-location} (predeterminada: @i{vea a continuación}) | ||
| 19618 | The default @code{nginx-location-configuration}. Because @code{certbot} | ||
| 19619 | needs to be able to serve challenges and responses, it needs to be able to | ||
| 19620 | run a web server. It does so by extending the @code{nginx} web service with | ||
| 19621 | an @code{nginx-server-configuration} listening on the @var{domains} on port | ||
| 19622 | 80, 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 | |||
| 19625 | Requests to other URL paths will be matched by the @code{default-location}, | ||
| 19626 | which if present is added to all @code{nginx-server-configuration}s. | ||
| 19627 | |||
| 19628 | By default, the @code{default-location} will issue a redirect from | ||
| 19629 | @code{http://@var{domain}/...} to @code{https://@var{domain}/...}, leaving | ||
| 19630 | you to define what to serve on your site via @code{https}. | ||
| 19631 | |||
| 19632 | Pass @code{#f} to not issue a default location. | ||
| 19633 | @end table | ||
| 19634 | @end deftp | ||
| 19635 | |||
| 19636 | @deftp {Tipo de datos} certificate-configuration | ||
| 19637 | Data type representing the configuration of a certificate. This type has | ||
| 19638 | the following parameters: | ||
| 19639 | |||
| 19640 | @table @asis | ||
| 19641 | @item @code{name} (predeterminado: @i{vea a continuación}) | ||
| 19642 | This name is used by Certbot for housekeeping and in file paths; it doesn't | ||
| 19643 | affect the content of the certificate itself. To see certificate names, run | ||
| 19644 | @code{certbot certificates}. | ||
| 19645 | |||
| 19646 | Its default is the first provided domain. | ||
| 19647 | |||
| 19648 | @item @code{domains} (predeterminado: @code{()}) | ||
| 19649 | The first domain provided will be the subject CN of the certificate, and all | ||
| 19650 | domains will be Subject Alternative Names on the certificate. | ||
| 19651 | |||
| 19652 | @item @code{deploy-hook} (predeterminado: @code{#f}) | ||
| 19653 | Command to be run in a shell once for each successfully issued certificate. | ||
| 19654 | For this command, the shell variable @code{$RENEWED_LINEAGE} will point to | ||
| 19655 | the config live subdirectory (for example, | ||
| 19656 | @samp{"/etc/letsencrypt/live/example.com"}) containing the new certificates | ||
| 19657 | and keys; the shell variable @code{$RENEWED_DOMAINS} will contain a | ||
| 19658 | space-delimited list of renewed certificate domains (for example, | ||
| 19659 | @samp{"example.com www.example.com"}. | ||
| 19660 | |||
| 19661 | @end table | ||
| 19662 | @end deftp | ||
| 19663 | |||
| 19664 | For each @code{certificate-configuration}, the certificate is saved to | ||
| 19665 | @code{/etc/letsencrypt/live/@var{name}/fullchain.pem} and the key is saved | ||
| 19666 | to @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 | |||
| 19672 | The @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 | ||
| 19675 | service uses @uref{https://www.knot-dns.cz/, Knot DNS}. And also a caching | ||
| 19676 | and 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 | |||
| 19681 | An example configuration of an authoritative server for two zones, one | ||
| 19682 | master 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 | ||
| 19720 | This is the type for the Knot DNS server. | ||
| 19721 | |||
| 19722 | Knot DNS is an authoritative DNS server, meaning that it can serve multiple | ||
| 19723 | zones, that is to say domain names you would buy from a registrar. This | ||
| 19724 | server is not a resolver, meaning that it can only resolve names for which | ||
| 19725 | it is authoritative. This server can be configured to serve zones as a | ||
| 19726 | master server or a slave server as a per-zone basis. Slave zones will get | ||
| 19727 | their data from masters, and will serve it as an authoritative server. From | ||
| 19728 | the point of view of a resolver, there is no difference between master and | ||
| 19729 | slave. | ||
| 19730 | |||
| 19731 | The following data types are used to configure the Knot DNS server: | ||
| 19732 | @end deffn | ||
| 19733 | |||
| 19734 | @deftp {Tipo de datos} knot-key-configuration | ||
| 19735 | Data type representing a key. This type has the following parameters: | ||
| 19736 | |||
| 19737 | @table @asis | ||
| 19738 | @item @code{id} (predeterminado: @code{""}) | ||
| 19739 | An identifier for other configuration fields to refer to this key. IDs must | ||
| 19740 | be unique and must not be empty. | ||
| 19741 | |||
| 19742 | @item @code{algorithm} (predeterminado: @code{#f}) | ||
| 19743 | The 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{""}) | ||
| 19748 | The secret key itself. | ||
| 19749 | |||
| 19750 | @end table | ||
| 19751 | @end deftp | ||
| 19752 | |||
| 19753 | @deftp {Tipo de datos} knot-acl-configuration | ||
| 19754 | Data type representing an Access Control List (ACL) configuration. This | ||
| 19755 | type has the following parameters: | ||
| 19756 | |||
| 19757 | @table @asis | ||
| 19758 | @item @code{id} (predeterminado: @code{""}) | ||
| 19759 | An identifier for ether configuration fields to refer to this key. IDs must | ||
| 19760 | be unique and must not be empty. | ||
| 19761 | |||
| 19762 | @item @code{address} (predeterminada: @code{'()}) | ||
| 19763 | An ordered list of IP addresses, network subnets, or network ranges | ||
| 19764 | represented with strings. The query must match one of them. Empty value | ||
| 19765 | means that address match is not required. | ||
| 19766 | |||
| 19767 | @item @code{key} (predeterminada: @code{'()}) | ||
| 19768 | An ordered list of references to keys represented with strings. The string | ||
| 19769 | must match a key ID defined in a @code{knot-key-configuration}. No key | ||
| 19770 | means that a key is not require to match that ACL. | ||
| 19771 | |||
| 19772 | @item @code{action} (predeterminada: @code{'()}) | ||
| 19773 | An ordered list of actions that are permitted or forbidden by this ACL. | ||
| 19774 | Possible 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}) | ||
| 19778 | When true, the ACL defines restrictions. Listed actions are forbidden. | ||
| 19779 | When false, listed actions are allowed. | ||
| 19780 | |||
| 19781 | @end table | ||
| 19782 | @end deftp | ||
| 19783 | |||
| 19784 | @deftp {Tipo de datos} zone-entry | ||
| 19785 | Data type represnting a record entry in a zone file. This type has the | ||
| 19786 | following parameters: | ||
| 19787 | |||
| 19788 | @table @asis | ||
| 19789 | @item @code{name} (predeterminado: @code{"@@"}) | ||
| 19790 | The name of the record. @code{"@@"} refers to the origin of the zone. | ||
| 19791 | Names 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, | ||
| 19794 | which means that @code{"ns.example.org."} refers to @code{ns.example.org}. | ||
| 19795 | |||
| 19796 | @item @code{ttl} (predeterminado: @code{""}) | ||
| 19797 | The Time-To-Live (TTL) of this record. If not set, the default TTL is used. | ||
| 19798 | |||
| 19799 | @item @code{class} (predeterminada: @code{"IN"}) | ||
| 19800 | The class of the record. Knot currently supports only @code{"IN"} and | ||
| 19801 | partially @code{"CH"}. | ||
| 19802 | |||
| 19803 | @item @code{type} (predeterminado: @code{"A"}) | ||
| 19804 | The type of the record. Common types include A (IPv4 address), AAAA (IPv6 | ||
| 19805 | address), NS (Name Server) and MX (Mail eXchange). Many other types are | ||
| 19806 | defined. | ||
| 19807 | |||
| 19808 | @item @code{data} (predeterminados: @code{""}) | ||
| 19809 | The data contained in the record. For instance an IP address associated | ||
| 19810 | with an A record, or a domain name associated with an NS record. Remember | ||
| 19811 | that 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 | ||
| 19817 | Data type representing the content of a zone file. This type has the | ||
| 19818 | following parameters: | ||
| 19819 | |||
| 19820 | @table @asis | ||
| 19821 | @item @code{entries} (predeterminadas: @code{'()}) | ||
| 19822 | The list of entries. The SOA record is taken care of, so you don't need to | ||
| 19823 | put it in the list of entries. This list should probably contain an entry | ||
| 19824 | for your primary authoritative DNS server. Other than using a list of | ||
| 19825 | entries directly, you can use @code{define-zone-entries} to define a object | ||
| 19826 | containing 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{""}) | ||
| 19830 | The name of your zone. This parameter cannot be empty. | ||
| 19831 | |||
| 19832 | @item @code{ns} (predeterminado: @code{"ns"}) | ||
| 19833 | The domain of your primary authoritative DNS server. The name is relative | ||
| 19834 | to the origin, unless it ends with a dot. It is mandatory that this primary | ||
| 19835 | DNS server corresponds to an NS record in the zone and that it is associated | ||
| 19836 | to an IP address in the list of entries. | ||
| 19837 | |||
| 19838 | @item @code{mail} (predeterminado: @code{"hostmaster"}) | ||
| 19839 | An email address people can contact you at, as the owner of the zone. This | ||
| 19840 | is translated as @code{<mail>@@<origin>}. | ||
| 19841 | |||
| 19842 | @item @code{serial} (predeterminado: @code{1}) | ||
| 19843 | The serial number of the zone. As this is used to keep track of changes by | ||
| 19844 | both slaves and resolvers, it is mandatory that it @emph{never} decreases. | ||
| 19845 | Always increment it when you make a change in your zone. | ||
| 19846 | |||
| 19847 | @item @code{refresh} (predeterminado: @code{(* 2 24 3600)}) | ||
| 19848 | The frequency at which slaves will do a zone transfer. This value is a | ||
| 19849 | number of seconds. It can be computed by multiplications or with | ||
| 19850 | @code{(string->duration)}. | ||
| 19851 | |||
| 19852 | @item @code{retry} (predeterminado: @code{(* 15 60)}) | ||
| 19853 | The period after which a slave will retry to contact its master when it | ||
| 19854 | fails to do so a first time. | ||
| 19855 | |||
| 19856 | @item @code{expiry} (predeterminado: @code{(* 14 24 3600)}) | ||
| 19857 | Default TTL of records. Existing records are considered correct for at most | ||
| 19858 | this amount of time. After this period, resolvers will invalidate their | ||
| 19859 | cache and check again that it still exists. | ||
| 19860 | |||
| 19861 | @item @code{nx} (predeterminado: @code{3600}) | ||
| 19862 | Default TTL of inexistant records. This delay is usually short because you | ||
| 19863 | want your new domains to reach everyone quickly. | ||
| 19864 | |||
| 19865 | @end table | ||
| 19866 | @end deftp | ||
| 19867 | |||
| 19868 | @deftp {Tipo de datos} knot-remote-configuration | ||
| 19869 | Data type representing a remote configuration. This type has the following | ||
| 19870 | parameters: | ||
| 19871 | |||
| 19872 | @table @asis | ||
| 19873 | @item @code{id} (predeterminado: @code{""}) | ||
| 19874 | An identifier for other configuration fields to refer to this remote. IDs | ||
| 19875 | must be unique and must not be empty. | ||
| 19876 | |||
| 19877 | @item @code{address} (predeterminada: @code{'()}) | ||
| 19878 | An ordered list of destination IP addresses. Addresses are tried in | ||
| 19879 | sequence. An optional port can be given with the @@ separator. For | ||
| 19880 | instance: @code{(list "1.2.3.4" "2.3.4.5@@53")}. Default port is 53. | ||
| 19881 | |||
| 19882 | @item @code{via} (predeterminada: @code{'()}) | ||
| 19883 | An ordered list of source IP addresses. An empty list will have Knot choose | ||
| 19884 | an appropriate source IP. An optional port can be given with the @@ | ||
| 19885 | separator. The default is to choose at random. | ||
| 19886 | |||
| 19887 | @item @code{key} (predeterminada: @code{#f}) | ||
| 19888 | A reference to a key, that is a string containing the identifier of a key | ||
| 19889 | defined in a @code{knot-key-configuration} field. | ||
| 19890 | |||
| 19891 | @end table | ||
| 19892 | @end deftp | ||
| 19893 | |||
| 19894 | @deftp {Tipo de datos} knot-keystore-configuration | ||
| 19895 | Data type representing a keystore to hold dnssec keys. This type has the | ||
| 19896 | following parameters: | ||
| 19897 | |||
| 19898 | @table @asis | ||
| 19899 | @item @code{id} (predeterminado: @code{""}) | ||
| 19900 | The id of the keystore. It must not be empty. | ||
| 19901 | |||
| 19902 | @item @code{backend} (predeterminado: @code{'pem}) | ||
| 19903 | El 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"}) | ||
| 19907 | The 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 | ||
| 19910 | reprensents a path in the file system. | ||
| 19911 | |||
| 19912 | @end table | ||
| 19913 | @end deftp | ||
| 19914 | |||
| 19915 | @deftp {Tipo de datos} knot-policy-configuration | ||
| 19916 | Data type representing a dnssec policy. Knot DNS is able to automatically | ||
| 19917 | sign your zones. It can either generate and manage your keys automatically | ||
| 19918 | or use keys that you generate. | ||
| 19919 | |||
| 19920 | Dnssec is usually implemented using two keys: a Key Signing Key (KSK) that | ||
| 19921 | is used to sign the second, and a Zone Signing Key (ZSK) that is used to | ||
| 19922 | sign the zone. In order to be trusted, the KSK needs to be present in the | ||
| 19923 | parent zone (usually a top-level domain). If your registrar supports | ||
| 19924 | dnssec, you will have to send them your KSK's hash so they can add a DS | ||
| 19925 | record in their zone. This is not automated and need to be done each time | ||
| 19926 | you change your KSK. | ||
| 19927 | |||
| 19928 | The policy also defines the lifetime of keys. Usually, ZSK can be changed | ||
| 19929 | easily and use weaker cryptographic functions (they use lower parameters) in | ||
| 19930 | order to sign records quickly, so they are changed often. The KSK however | ||
| 19931 | requires manual interaction with the registrar, so they are changed less | ||
| 19932 | often and use stronger parameters because they sign only one record. | ||
| 19933 | |||
| 19934 | Este tipo tiene los siguientes parámetros: | ||
| 19935 | |||
| 19936 | @table @asis | ||
| 19937 | @item @code{id} (predeterminado: @code{""}) | ||
| 19938 | The id of the policy. It must not be empty. | ||
| 19939 | |||
| 19940 | @item @code{keystore} (predeterminado: @code{"default"}) | ||
| 19941 | A reference to a keystore, that is a string containing the identifier of a | ||
| 19942 | keystore defined in a @code{knot-keystore-configuration} field. The | ||
| 19943 | @code{"default"} identifier means the default keystore (a kasp database that | ||
| 19944 | was setup by this service). | ||
| 19945 | |||
| 19946 | @item @code{manual?} (predeterminado: @code{#f}) | ||
| 19947 | Whether the key management is manual or automatic. | ||
| 19948 | |||
| 19949 | @item @code{single-type-signing?} (predeterminado: @code{#f}) | ||
| 19950 | When @code{#t}, use the Single-Type Signing Scheme. | ||
| 19951 | |||
| 19952 | @item @code{algorithm} (predeterminado: @code{"ecdsap256sha256"}) | ||
| 19953 | An algorithm of signing keys and issued signatures. | ||
| 19954 | |||
| 19955 | @item @code{ksk-size} (predeterminado: @code{256}) | ||
| 19956 | The length of the KSK. Note that this value is correct for the default | ||
| 19957 | algorithm, but would be unsecure for other algorithms. | ||
| 19958 | |||
| 19959 | @item @code{zsk-size} (predeterminado: @code{256}) | ||
| 19960 | The length of the ZSK. Note that this value is correct for the default | ||
| 19961 | algorithm, but would be unsecure for other algorithms. | ||
| 19962 | |||
| 19963 | @item @code{dnskey-ttl} (predeterminado: @code{'default}) | ||
| 19964 | The 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)}) | ||
| 19968 | The period between ZSK publication and the next rollover initiation. | ||
| 19969 | |||
| 19970 | @item @code{propagation-delay} (predeterminado: @code{(* 24 3600)}) | ||
| 19971 | An extra delay added for each key rollover step. This value should be high | ||
| 19972 | enough to cover propagation of data from the master server to all slaves. | ||
| 19973 | |||
| 19974 | @item @code{rrsig-lifetime} (predeterminado: @code{(* 14 24 3600)}) | ||
| 19975 | A validity period of newly issued signatures. | ||
| 19976 | |||
| 19977 | @item @code{rrsig-refresh} (predeterminado: @code{(* 7 24 3600)}) | ||
| 19978 | A period how long before a signature expiration the signature will be | ||
| 19979 | refreshed. | ||
| 19980 | |||
| 19981 | @item @code{nsec3?} (predeterminado: @code{#f}) | ||
| 19982 | When @code{#t}, NSEC3 will be used instead of NSEC. | ||
| 19983 | |||
| 19984 | @item @code{nsec3-iterations} (predeterminado: @code{5}) | ||
| 19985 | The number of additional times the hashing is performed. | ||
| 19986 | |||
| 19987 | @item @code{nsec3-salt-length} (predeterminado: @code{8}) | ||
| 19988 | The length of a salt field in octets, which is appended to the original | ||
| 19989 | owner name before hashing. | ||
| 19990 | |||
| 19991 | @item @code{nsec3-salt-lifetime} (predeterminado: @code{(* 30 24 3600)}) | ||
| 19992 | The validity period of newly issued salt field. | ||
| 19993 | |||
| 19994 | @end table | ||
| 19995 | @end deftp | ||
| 19996 | |||
| 19997 | @deftp {Tipo de datos} knot-zone-configuration | ||
| 19998 | Data type representing a zone served by Knot. This type has the following | ||
| 19999 | parameters: | ||
| 20000 | |||
| 20001 | @table @asis | ||
| 20002 | @item @code{domain} (predeterminado: @code{""}) | ||
| 20003 | The domain served by this configuration. It must not be empty. | ||
| 20004 | |||
| 20005 | @item @code{file} (predeterminado: @code{""}) | ||
| 20006 | The file where this zone is saved. This parameter is ignored by master | ||
| 20007 | zones. Empty means default location that depends on the domain name. | ||
| 20008 | |||
| 20009 | @item @code{zone} (predeterminado: @code{(zone-file)}) | ||
| 20010 | The content of the zone file. This parameter is ignored by slave zones. It | ||
| 20011 | must contain a zone-file record. | ||
| 20012 | |||
| 20013 | @item @code{master} (predeterminado: @code{'()}) | ||
| 20014 | A list of master remotes. When empty, this zone is a master. When set, | ||
| 20015 | this zone is a slave. This is a list of remotes identifiers. | ||
| 20016 | |||
| 20017 | @item @code{ddns-master} (predeterminado: @code{#f}) | ||
| 20018 | The main master. When empty, it defaults to the first master in the list of | ||
| 20019 | masters. | ||
| 20020 | |||
| 20021 | @item @code{notify} (predeterminado: @code{'()}) | ||
| 20022 | A list of slave remote identifiers. | ||
| 20023 | |||
| 20024 | @item @code{acl} (predeterminado: @code{'()}) | ||
| 20025 | A list of acl identifiers. | ||
| 20026 | |||
| 20027 | @item @code{semantic-checks?} (predeterminado: @code{#f}) | ||
| 20028 | When set, this adds more semantic checks to the zone. | ||
| 20029 | |||
| 20030 | @item @code{disable-any?} (predeterminado: @code{#f}) | ||
| 20031 | When set, this forbids queries of the ANY type. | ||
| 20032 | |||
| 20033 | @item @code{zonefile-sync} (predeterminado: @code{0}) | ||
| 20034 | The delay between a modification in memory and on disk. 0 means immediate | ||
| 20035 | synchronization. | ||
| 20036 | |||
| 20037 | @item @code{serial-policy} (predeterminado: @code{'increment}) | ||
| 20038 | A policy between @code{'increment} and @code{'unixtime}. | ||
| 20039 | |||
| 20040 | @end table | ||
| 20041 | @end deftp | ||
| 20042 | |||
| 20043 | @deftp {Tipo de datos} knot-configuration | ||
| 20044 | Data type representing the Knot configuration. This type has the following | ||
| 20045 | parameters: | ||
| 20046 | |||
| 20047 | @table @asis | ||
| 20048 | @item @code{knot} (predeterminado: @code{knot}) | ||
| 20049 | El paquete Knot. | ||
| 20050 | |||
| 20051 | @item @code{run-directory} (predeterminado: @code{"/var/run/knot"}) | ||
| 20052 | The run directory. This directory will be used for pid file and sockets. | ||
| 20053 | |||
| 20054 | @item @code{listen-v4} (predeterminada: @code{"0.0.0.0"}) | ||
| 20055 | La dirección IP en la que escuchar. | ||
| 20056 | |||
| 20057 | @item @code{listen-v6} (predeterminada: @code{"::"}) | ||
| 20058 | La dirección IP en la que escuchar. | ||
| 20059 | |||
| 20060 | @item @code{listen-port} (predeterminado: @code{53}) | ||
| 20061 | El puerto en el que escuchar. | ||
| 20062 | |||
| 20063 | @item @code{keys} (predeterminada: @code{'()}) | ||
| 20064 | The list of knot-key-configuration used by this configuration. | ||
| 20065 | |||
| 20066 | @item @code{acls} (predeterminado: @code{'()}) | ||
| 20067 | The list of knot-acl-configuration used by this configuration. | ||
| 20068 | |||
| 20069 | @item @code{remotes} (predeterminada: @code{'()}) | ||
| 20070 | The list of knot-remote-configuration used by this configuration. | ||
| 20071 | |||
| 20072 | @item @code{zones} (predeterminada: @code{'()}) | ||
| 20073 | The 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 | ||
| 20081 | This 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 | ||
| 20093 | Data type representing the configuration of dnsmasq. | ||
| 20094 | |||
| 20095 | @table @asis | ||
| 20096 | @item @code{package} (predeterminado: @var{dnsmasq}) | ||
| 20097 | Package object of the dnsmasq server. | ||
| 20098 | |||
| 20099 | @item @code{no-hosts?} (predeterminado: @code{#f}) | ||
| 20100 | When true, don't read the hostnames in /etc/hosts. | ||
| 20101 | |||
| 20102 | @item @code{port} (predeterminado: @code{53}) | ||
| 20103 | The port to listen on. Setting this to zero completely disables DNS | ||
| 20104 | responses, leaving only DHCP and/or TFTP functions. | ||
| 20105 | |||
| 20106 | @item @code{local-service?} (predeterminado: @code{#t}) | ||
| 20107 | Accept DNS queries only from hosts whose address is on a local subnet, ie a | ||
| 20108 | subnet for which an interface exists on the server. | ||
| 20109 | |||
| 20110 | @item @code{listen-addresses} (predeterminadas: @code{'()}) | ||
| 20111 | Escucha en las direcciones IP proporcionadas. | ||
| 20112 | |||
| 20113 | @item @code{resolv-file} (predeterminado: @code{"/etc/resolv.conf"}) | ||
| 20114 | The file to read the IP address of the upstream nameservers from. | ||
| 20115 | |||
| 20116 | @item @code{no-resolv?} (predeterminado: @code{#f}) | ||
| 20117 | When true, don't read @var{resolv-file}. | ||
| 20118 | |||
| 20119 | @item @code{servers} (predeterminados: @code{'()}) | ||
| 20120 | Specify IP address of upstream servers directly. | ||
| 20121 | |||
| 20122 | @item @code{cache-size} (predeterminado: @code{150}) | ||
| 20123 | Set the size of dnsmasq's cache. Setting the cache size to zero disables | ||
| 20124 | caching. | ||
| 20125 | |||
| 20126 | @item @code{negative-cache?} (predeterminado: @code{#t}) | ||
| 20127 | When false, disable negative caching. | ||
| 20128 | |||
| 20129 | @end table | ||
| 20130 | @end deftp | ||
| 20131 | |||
| 20132 | @subsubheading Servicio ddclient | ||
| 20133 | |||
| 20134 | @cindex ddclient | ||
| 20135 | The ddclient service described below runs the ddclient daemon, which takes | ||
| 20136 | care of automatically updating DNS entries for service providers such as | ||
| 20137 | @uref{https://dyn.com/dns/, Dyn}. | ||
| 20138 | |||
| 20139 | The following example show instantiates the service with its default | ||
| 20140 | configuration: | ||
| 20141 | |||
| 20142 | @example | ||
| 20143 | (service ddclient-service-type) | ||
| 20144 | @end example | ||
| 20145 | |||
| 20146 | Note 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, | ||
| 20149 | in an ``out-of-band'' fashion (you @emph{could} make this file part of the | ||
| 20150 | service configuration, for instance by using @code{plain-file}, but it will | ||
| 20151 | be 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 | |||
| 20156 | Los campos disponibles de @code{ddclient-configuration} son: | ||
| 20157 | |||
| 20158 | @deftypevr {@code{ddclient-configuration} parameter} package ddclient | ||
| 20159 | El paquete ddclient. | ||
| 20160 | |||
| 20161 | @end deftypevr | ||
| 20162 | |||
| 20163 | @deftypevr {@code{ddclient-configuration} parameter} integer daemon | ||
| 20164 | The period after which ddclient will retry to check IP and domain name. | ||
| 20165 | |||
| 20166 | Defaults to @samp{300}. | ||
| 20167 | |||
| 20168 | @end deftypevr | ||
| 20169 | |||
| 20170 | @deftypevr {@code{ddclient-configuration} parameter} boolean syslog | ||
| 20171 | Use syslog for the output. | ||
| 20172 | |||
| 20173 | Defaults to @samp{#t}. | ||
| 20174 | |||
| 20175 | @end deftypevr | ||
| 20176 | |||
| 20177 | @deftypevr {@code{ddclient-configuration} parameter} string mail | ||
| 20178 | Mail to user. | ||
| 20179 | |||
| 20180 | Defaults to @samp{"root"}. | ||
| 20181 | |||
| 20182 | @end deftypevr | ||
| 20183 | |||
| 20184 | @deftypevr {@code{ddclient-configuration} parameter} string mail-failure | ||
| 20185 | Mail failed update to user. | ||
| 20186 | |||
| 20187 | Defaults to @samp{"root"}. | ||
| 20188 | |||
| 20189 | @end deftypevr | ||
| 20190 | |||
| 20191 | @deftypevr {@code{ddclient-configuration} parameter} string pid | ||
| 20192 | The ddclient PID file. | ||
| 20193 | |||
| 20194 | Defaults to @samp{"/var/run/ddclient/ddclient.pid"}. | ||
| 20195 | |||
| 20196 | @end deftypevr | ||
| 20197 | |||
| 20198 | @deftypevr {@code{ddclient-configuration} parameter} boolean ssl | ||
| 20199 | Enable SSL support. | ||
| 20200 | |||
| 20201 | Defaults to @samp{#t}. | ||
| 20202 | |||
| 20203 | @end deftypevr | ||
| 20204 | |||
| 20205 | @deftypevr {@code{ddclient-configuration} parameter} string user | ||
| 20206 | Specifies the user name or ID that is used when running ddclient program. | ||
| 20207 | |||
| 20208 | Defaults to @samp{"ddclient"}. | ||
| 20209 | |||
| 20210 | @end deftypevr | ||
| 20211 | |||
| 20212 | @deftypevr {@code{ddclient-configuration} parameter} string group | ||
| 20213 | Group of the user who will run the ddclient program. | ||
| 20214 | |||
| 20215 | Defaults to @samp{"ddclient"}. | ||
| 20216 | |||
| 20217 | @end deftypevr | ||
| 20218 | |||
| 20219 | @deftypevr {@code{ddclient-configuration} parameter} string secret-file | ||
| 20220 | Secret file which will be appended to @file{ddclient.conf} file. This file | ||
| 20221 | contains credentials for use by ddclient. You are expected to create it | ||
| 20222 | manually. | ||
| 20223 | |||
| 20224 | Defaults to @samp{"/etc/ddclient/secrets.conf"}. | ||
| 20225 | |||
| 20226 | @end deftypevr | ||
| 20227 | |||
| 20228 | @deftypevr {@code{ddclient-configuration} parameter} list extra-options | ||
| 20229 | Extra options will be appended to @file{ddclient.conf} file. | ||
| 20230 | |||
| 20231 | Defaults 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 | |||
| 20244 | The @code{(gnu services vpn)} module provides services related to | ||
| 20245 | @dfn{virtual private networks} (VPNs). It provides a @emph{client} service | ||
| 20246 | for your machine to connect to a VPN, and a @emph{servire} service for your | ||
| 20247 | machine to host a VPN. Both services use @uref{https://openvpn.net/, | ||
| 20248 | OpenVPN}. | ||
| 20249 | |||
| 20250 | @deffn {Procedimiento Scheme} openvpn-client-service @ | ||
| 20251 | [#:config (openvpn-client-configuration)] | ||
| 20252 | |||
| 20253 | Devuelve un servicio que ejecuta @command{openvpn}, un daemon VPN, como | ||
| 20254 | cliente. | ||
| 20255 | @end deffn | ||
| 20256 | |||
| 20257 | @deffn {Procedimiento Scheme} openvpn-server-service @ | ||
| 20258 | [#:config (openvpn-server-configuration)] | ||
| 20259 | |||
| 20260 | Devuelve un servicio que ejecuta @command{openvpn}, un daemon VPN, como | ||
| 20261 | servidor. | ||
| 20262 | |||
| 20263 | Pueden ejecutarse simultáneamente. | ||
| 20264 | @end deffn | ||
| 20265 | |||
| 20266 | @c %automatically generated documentation | ||
| 20267 | |||
| 20268 | Los campos disponibles de @code{openvpn-client-configuration} son: | ||
| 20269 | |||
| 20270 | @deftypevr {@code{openvpn-client-configuration} parameter} package openvpn | ||
| 20271 | El paquete OpenVPN. | ||
| 20272 | |||
| 20273 | @end deftypevr | ||
| 20274 | |||
| 20275 | @deftypevr {@code{openvpn-client-configuration} parameter} string pid-file | ||
| 20276 | The OpenVPN pid file. | ||
| 20277 | |||
| 20278 | Defaults to @samp{"/var/run/openvpn/openvpn.pid"}. | ||
| 20279 | |||
| 20280 | @end deftypevr | ||
| 20281 | |||
| 20282 | @deftypevr {@code{openvpn-client-configuration} parameter} proto proto | ||
| 20283 | The protocol (UDP or TCP) used to open a channel between clients and | ||
| 20284 | servers. | ||
| 20285 | |||
| 20286 | Defaults to @samp{udp}. | ||
| 20287 | |||
| 20288 | @end deftypevr | ||
| 20289 | |||
| 20290 | @deftypevr {@code{openvpn-client-configuration} parameter} dev dev | ||
| 20291 | The device type used to represent the VPN connection. | ||
| 20292 | |||
| 20293 | Defaults to @samp{tun}. | ||
| 20294 | |||
| 20295 | @end deftypevr | ||
| 20296 | |||
| 20297 | @deftypevr {@code{openvpn-client-configuration} parameter} string ca | ||
| 20298 | The certificate authority to check connections against. | ||
| 20299 | |||
| 20300 | Defaults to @samp{"/etc/openvpn/ca.crt"}. | ||
| 20301 | |||
| 20302 | @end deftypevr | ||
| 20303 | |||
| 20304 | @deftypevr {@code{openvpn-client-configuration} parameter} string cert | ||
| 20305 | The certificate of the machine the daemon is running on. It should be | ||
| 20306 | signed by the authority given in @code{ca}. | ||
| 20307 | |||
| 20308 | Defaults to @samp{"/etc/openvpn/client.crt"}. | ||
| 20309 | |||
| 20310 | @end deftypevr | ||
| 20311 | |||
| 20312 | @deftypevr {@code{openvpn-client-configuration} parameter} string key | ||
| 20313 | The key of the machine the daemon is running on. It must be the key whose | ||
| 20314 | certificate is @code{cert}. | ||
| 20315 | |||
| 20316 | Defaults to @samp{"/etc/openvpn/client.key"}. | ||
| 20317 | |||
| 20318 | @end deftypevr | ||
| 20319 | |||
| 20320 | @deftypevr {@code{openvpn-client-configuration} parameter} boolean comp-lzo? | ||
| 20321 | Whether to use the lzo compression algorithm. | ||
| 20322 | |||
| 20323 | Defaults to @samp{#t}. | ||
| 20324 | |||
| 20325 | @end deftypevr | ||
| 20326 | |||
| 20327 | @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-key? | ||
| 20328 | Don't re-read key files across SIGUSR1 or --ping-restart. | ||
| 20329 | |||
| 20330 | Defaults to @samp{#t}. | ||
| 20331 | |||
| 20332 | @end deftypevr | ||
| 20333 | |||
| 20334 | @deftypevr {@code{openvpn-client-configuration} parameter} boolean persist-tun? | ||
| 20335 | Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1 | ||
| 20336 | or --ping-restart restarts. | ||
| 20337 | |||
| 20338 | Defaults to @samp{#t}. | ||
| 20339 | |||
| 20340 | @end deftypevr | ||
| 20341 | |||
| 20342 | @deftypevr {@code{openvpn-client-configuration} parameter} number verbosity | ||
| 20343 | Verbosity level. | ||
| 20344 | |||
| 20345 | Defaults to @samp{3}. | ||
| 20346 | |||
| 20347 | @end deftypevr | ||
| 20348 | |||
| 20349 | @deftypevr {@code{openvpn-client-configuration} parameter} tls-auth-client tls-auth | ||
| 20350 | Add an additional layer of HMAC authentication on top of the TLS control | ||
| 20351 | channel to protect against DoS attacks. | ||
| 20352 | |||
| 20353 | El valor predeterminado es @samp{#f} | ||
| 20354 | |||
| 20355 | @end deftypevr | ||
| 20356 | |||
| 20357 | @deftypevr {@code{openvpn-client-configuration} parameter} key-usage verify-key-usage? | ||
| 20358 | Whether to check the server certificate has server usage extension. | ||
| 20359 | |||
| 20360 | Defaults to @samp{#t}. | ||
| 20361 | |||
| 20362 | @end deftypevr | ||
| 20363 | |||
| 20364 | @deftypevr {@code{openvpn-client-configuration} parameter} bind bind? | ||
| 20365 | Bind to a specific local port number. | ||
| 20366 | |||
| 20367 | El valor predeterminado es @samp{#f} | ||
| 20368 | |||
| 20369 | @end deftypevr | ||
| 20370 | |||
| 20371 | @deftypevr {@code{openvpn-client-configuration} parameter} resolv-retry resolv-retry? | ||
| 20372 | Retry resolving server address. | ||
| 20373 | |||
| 20374 | Defaults to @samp{#t}. | ||
| 20375 | |||
| 20376 | @end deftypevr | ||
| 20377 | |||
| 20378 | @deftypevr {@code{openvpn-client-configuration} parameter} openvpn-remote-list remote | ||
| 20379 | A list of remote servers to connect to. | ||
| 20380 | |||
| 20381 | Defaults to @samp{()}. | ||
| 20382 | |||
| 20383 | Los campos disponibles de @code{openvpn-remote-configuration} son: | ||
| 20384 | |||
| 20385 | @deftypevr {@code{openvpn-remote-configuration} parameter} string name | ||
| 20386 | Nombre del servidor. | ||
| 20387 | |||
| 20388 | Defaults to @samp{"my-server"}. | ||
| 20389 | |||
| 20390 | @end deftypevr | ||
| 20391 | |||
| 20392 | @deftypevr {@code{openvpn-remote-configuration} parameter} number port | ||
| 20393 | Port number the server listens to. | ||
| 20394 | |||
| 20395 | Defaults 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 | |||
| 20404 | Available @code{openvpn-server-configuration} fields are: | ||
| 20405 | |||
| 20406 | @deftypevr {@code{openvpn-server-configuration} parameter} package openvpn | ||
| 20407 | El paquete OpenVPN. | ||
| 20408 | |||
| 20409 | @end deftypevr | ||
| 20410 | |||
| 20411 | @deftypevr {@code{openvpn-server-configuration} parameter} string pid-file | ||
| 20412 | The OpenVPN pid file. | ||
| 20413 | |||
| 20414 | Defaults to @samp{"/var/run/openvpn/openvpn.pid"}. | ||
| 20415 | |||
| 20416 | @end deftypevr | ||
| 20417 | |||
| 20418 | @deftypevr {@code{openvpn-server-configuration} parameter} proto proto | ||
| 20419 | The protocol (UDP or TCP) used to open a channel between clients and | ||
| 20420 | servers. | ||
| 20421 | |||
| 20422 | Defaults to @samp{udp}. | ||
| 20423 | |||
| 20424 | @end deftypevr | ||
| 20425 | |||
| 20426 | @deftypevr {@code{openvpn-server-configuration} parameter} dev dev | ||
| 20427 | The device type used to represent the VPN connection. | ||
| 20428 | |||
| 20429 | Defaults to @samp{tun}. | ||
| 20430 | |||
| 20431 | @end deftypevr | ||
| 20432 | |||
| 20433 | @deftypevr {@code{openvpn-server-configuration} parameter} string ca | ||
| 20434 | The certificate authority to check connections against. | ||
| 20435 | |||
| 20436 | Defaults to @samp{"/etc/openvpn/ca.crt"}. | ||
| 20437 | |||
| 20438 | @end deftypevr | ||
| 20439 | |||
| 20440 | @deftypevr {@code{openvpn-server-configuration} parameter} string cert | ||
| 20441 | The certificate of the machine the daemon is running on. It should be | ||
| 20442 | signed by the authority given in @code{ca}. | ||
| 20443 | |||
| 20444 | Defaults to @samp{"/etc/openvpn/client.crt"}. | ||
| 20445 | |||
| 20446 | @end deftypevr | ||
| 20447 | |||
| 20448 | @deftypevr {@code{openvpn-server-configuration} parameter} string key | ||
| 20449 | The key of the machine the daemon is running on. It must be the key whose | ||
| 20450 | certificate is @code{cert}. | ||
| 20451 | |||
| 20452 | Defaults to @samp{"/etc/openvpn/client.key"}. | ||
| 20453 | |||
| 20454 | @end deftypevr | ||
| 20455 | |||
| 20456 | @deftypevr {@code{openvpn-server-configuration} parameter} boolean comp-lzo? | ||
| 20457 | Whether to use the lzo compression algorithm. | ||
| 20458 | |||
| 20459 | Defaults to @samp{#t}. | ||
| 20460 | |||
| 20461 | @end deftypevr | ||
| 20462 | |||
| 20463 | @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-key? | ||
| 20464 | Don't re-read key files across SIGUSR1 or --ping-restart. | ||
| 20465 | |||
| 20466 | Defaults to @samp{#t}. | ||
| 20467 | |||
| 20468 | @end deftypevr | ||
| 20469 | |||
| 20470 | @deftypevr {@code{openvpn-server-configuration} parameter} boolean persist-tun? | ||
| 20471 | Don't close and reopen TUN/TAP device or run up/down scripts across SIGUSR1 | ||
| 20472 | or --ping-restart restarts. | ||
| 20473 | |||
| 20474 | Defaults to @samp{#t}. | ||
| 20475 | |||
| 20476 | @end deftypevr | ||
| 20477 | |||
| 20478 | @deftypevr {@code{openvpn-server-configuration} parameter} number verbosity | ||
| 20479 | Verbosity level. | ||
| 20480 | |||
| 20481 | Defaults to @samp{3}. | ||
| 20482 | |||
| 20483 | @end deftypevr | ||
| 20484 | |||
| 20485 | @deftypevr {@code{openvpn-server-configuration} parameter} tls-auth-server tls-auth | ||
| 20486 | Add an additional layer of HMAC authentication on top of the TLS control | ||
| 20487 | channel to protect against DoS attacks. | ||
| 20488 | |||
| 20489 | El valor predeterminado es @samp{#f} | ||
| 20490 | |||
| 20491 | @end deftypevr | ||
| 20492 | |||
| 20493 | @deftypevr {@code{openvpn-server-configuration} parameter} number port | ||
| 20494 | Specifies the port number on which the server listens. | ||
| 20495 | |||
| 20496 | Defaults to @samp{1194}. | ||
| 20497 | |||
| 20498 | @end deftypevr | ||
| 20499 | |||
| 20500 | @deftypevr {@code{openvpn-server-configuration} parameter} ip-mask server | ||
| 20501 | An ip and mask specifying the subnet inside the virtual network. | ||
| 20502 | |||
| 20503 | Defaults 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 | ||
| 20508 | A CIDR notation specifying the IPv6 subnet inside the virtual network. | ||
| 20509 | |||
| 20510 | El valor predeterminado es @samp{#f} | ||
| 20511 | |||
| 20512 | @end deftypevr | ||
| 20513 | |||
| 20514 | @deftypevr {@code{openvpn-server-configuration} parameter} string dh | ||
| 20515 | The Diffie-Hellman parameters file. | ||
| 20516 | |||
| 20517 | Defaults to @samp{"/etc/openvpn/dh2048.pem"}. | ||
| 20518 | |||
| 20519 | @end deftypevr | ||
| 20520 | |||
| 20521 | @deftypevr {@code{openvpn-server-configuration} parameter} string ifconfig-pool-persist | ||
| 20522 | The file that records client IPs. | ||
| 20523 | |||
| 20524 | Defaults to @samp{"/etc/openvpn/ipp.txt"}. | ||
| 20525 | |||
| 20526 | @end deftypevr | ||
| 20527 | |||
| 20528 | @deftypevr {@code{openvpn-server-configuration} parameter} gateway redirect-gateway? | ||
| 20529 | When true, the server will act as a gateway for its clients. | ||
| 20530 | |||
| 20531 | El valor predeterminado es @samp{#f} | ||
| 20532 | |||
| 20533 | @end deftypevr | ||
| 20534 | |||
| 20535 | @deftypevr {@code{openvpn-server-configuration} parameter} boolean client-to-client? | ||
| 20536 | When true, clients are allowed to talk to each other inside the VPN. | ||
| 20537 | |||
| 20538 | El valor predeterminado es @samp{#f} | ||
| 20539 | |||
| 20540 | @end deftypevr | ||
| 20541 | |||
| 20542 | @deftypevr {@code{openvpn-server-configuration} parameter} keepalive keepalive | ||
| 20543 | Causes ping-like messages to be sent back and forth over the link so that | ||
| 20544 | each side knows when the other side has gone down. @code{keepalive} | ||
| 20545 | requires a pair. The first element is the period of the ping sending, and | ||
| 20546 | the 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 | ||
| 20551 | The maximum number of clients. | ||
| 20552 | |||
| 20553 | Defaults to @samp{100}. | ||
| 20554 | |||
| 20555 | @end deftypevr | ||
| 20556 | |||
| 20557 | @deftypevr {@code{openvpn-server-configuration} parameter} string status | ||
| 20558 | The status file. This file shows a small report on current connection. It | ||
| 20559 | is truncated and rewritten every minute. | ||
| 20560 | |||
| 20561 | Defaults to @samp{"/var/run/openvpn/status"}. | ||
| 20562 | |||
| 20563 | @end deftypevr | ||
| 20564 | |||
| 20565 | @deftypevr {@code{openvpn-server-configuration} parameter} openvpn-ccd-list client-config-dir | ||
| 20566 | The list of configuration for some clients. | ||
| 20567 | |||
| 20568 | Defaults to @samp{()}. | ||
| 20569 | |||
| 20570 | Available @code{openvpn-ccd-configuration} fields are: | ||
| 20571 | |||
| 20572 | @deftypevr {@code{openvpn-ccd-configuration} parameter} string name | ||
| 20573 | Nombre del cliente. | ||
| 20574 | |||
| 20575 | Defaults to @samp{"client"}. | ||
| 20576 | |||
| 20577 | @end deftypevr | ||
| 20578 | |||
| 20579 | @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask iroute | ||
| 20580 | Client own network | ||
| 20581 | |||
| 20582 | El valor predeterminado es @samp{#f} | ||
| 20583 | |||
| 20584 | @end deftypevr | ||
| 20585 | |||
| 20586 | @deftypevr {@code{openvpn-ccd-configuration} parameter} ip-mask ifconfig-push | ||
| 20587 | Client VPN IP. | ||
| 20588 | |||
| 20589 | El 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 | |||
| 20603 | The @code{(gnu services nfs)} module provides the following services, which | ||
| 20604 | are most commonly used in relation to mounting or exporting directory trees | ||
| 20605 | as @dfn{network file systems} (NFS). | ||
| 20606 | |||
| 20607 | @subsubheading RPC Bind Service | ||
| 20608 | @cindex rpcbind | ||
| 20609 | |||
| 20610 | The RPC Bind service provides a facility to map program numbers into | ||
| 20611 | universal addresses. Many NFS related services use this facility. Hence it | ||
| 20612 | is automatically started when a dependent service starts. | ||
| 20613 | |||
| 20614 | @defvr {Variable Scheme} rpcbind-service-type | ||
| 20615 | A service type for the RPC portmapper daemon. | ||
| 20616 | @end defvr | ||
| 20617 | |||
| 20618 | |||
| 20619 | @deftp {Tipo de datos} rpcbind-configuration | ||
| 20620 | Data type representing the configuration of the RPC Bind Service. This type | ||
| 20621 | has the following parameters: | ||
| 20622 | @table @asis | ||
| 20623 | @item @code{rpcbind} (default: @code{rpcbind}) | ||
| 20624 | The rpcbind package to use. | ||
| 20625 | |||
| 20626 | @item @code{warm-start?} (default: @code{#t}) | ||
| 20627 | If this parameter is @code{#t}, then the daemon will read a state file on | ||
| 20628 | startup 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 | |||
| 20637 | The pipefs file system is used to transfer NFS related data between the | ||
| 20638 | kernel and user space programs. | ||
| 20639 | |||
| 20640 | @defvr {Variable Scheme} pipefs-service-type | ||
| 20641 | A service type for the pipefs pseudo file system. | ||
| 20642 | @end defvr | ||
| 20643 | |||
| 20644 | @deftp {Tipo de datos} pipefs-configuration | ||
| 20645 | Data type representing the configuration of the pipefs pseudo file system | ||
| 20646 | service. This type has the following parameters: | ||
| 20647 | @table @asis | ||
| 20648 | @item @code{mount-point} (default: @code{"/var/lib/nfs/rpc_pipefs"}) | ||
| 20649 | The 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 | |||
| 20659 | The @dfn{global security system} (GSS) daemon provides strong security for | ||
| 20660 | RPC based protocols. Before exchanging RPC requests an RPC client must | ||
| 20661 | establish a security context. Typically this is done using the Kerberos | ||
| 20662 | command @command{kinit} or automatically at login time using PAM services | ||
| 20663 | (@pxref{Servicios Kerberos}). | ||
| 20664 | |||
| 20665 | @defvr {Variable Scheme} gss-service-type | ||
| 20666 | Un tipo de servicio para el daemon del sistema de seguridad global (GSS). | ||
| 20667 | @end defvr | ||
| 20668 | |||
| 20669 | @deftp {Tipo de datos} gss-configuration | ||
| 20670 | Data type representing the configuration of the GSS daemon service. This | ||
| 20671 | type has the following parameters: | ||
| 20672 | @table @asis | ||
| 20673 | @item @code{nfs-utils} (predeterminado: @code{nfs-utils}) | ||
| 20674 | The 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"}) | ||
| 20677 | The 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 | |||
| 20687 | The idmap daemon service provides mapping between user IDs and user names. | ||
| 20688 | Typically it is required in order to access file systems mounted via NFSv4. | ||
| 20689 | |||
| 20690 | @defvr {Variable Scheme} idmap-service-type | ||
| 20691 | A service type for the Identity Mapper (IDMAP) daemon. | ||
| 20692 | @end defvr | ||
| 20693 | |||
| 20694 | @deftp {Tipo de datos} idmap-configuration | ||
| 20695 | Data type representing the configuration of the IDMAP daemon service. This | ||
| 20696 | type has the following parameters: | ||
| 20697 | @table @asis | ||
| 20698 | @item @code{nfs-utils} (predeterminado: @code{nfs-utils}) | ||
| 20699 | The 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"}) | ||
| 20702 | The directory where the pipefs file system is mounted. | ||
| 20703 | |||
| 20704 | @item @code{domain} (predeterminado: @code{#f}) | ||
| 20705 | The 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 | ||
| 20716 | continuous integration tool for Guix. It can be used both for development | ||
| 20717 | and for providing substitutes to others (@pxref{Sustituciones}). | ||
| 20718 | |||
| 20719 | El módulo @code{(gnu services cuirass)} proporciona el siguiente servicio. | ||
| 20720 | |||
| 20721 | @defvr {Procedimiento Scheme} cuirass-service-type | ||
| 20722 | The type of the Cuirass service. Its value must be a | ||
| 20723 | @code{cuirass-configuration} object, as described below. | ||
| 20724 | @end defvr | ||
| 20725 | |||
| 20726 | To add build jobs, you have to set the @code{specifications} field of the | ||
| 20727 | configuration. Here is an example of a service that polls the Guix | ||
| 20728 | repository and builds the packages from a manifest. Some of the packages | ||
| 20729 | are defined in the @code{"custom-packages"} input, which is the equivalent | ||
| 20730 | of @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 | |||
| 20765 | While information related to build jobs is located directly in the | ||
| 20766 | specifications, global settings for the @command{cuirass} process are | ||
| 20767 | accessible in other @code{cuirass-configuration} fields. | ||
| 20768 | |||
| 20769 | @deftp {Tipo de datos} cuirass-configuration | ||
| 20770 | Data type representing the configuration of Cuirass. | ||
| 20771 | |||
| 20772 | @table @asis | ||
| 20773 | @item @code{log-file} (predeterminado: @code{"/var/log/cuirass.log"}) | ||
| 20774 | Location of the log file. | ||
| 20775 | |||
| 20776 | @item @code{cache-directory} (predeterminado: @code{"/var/cache/cuirass"}) | ||
| 20777 | Location of the repository cache. | ||
| 20778 | |||
| 20779 | @item @code{user} (predeterminado: @code{"cuirass"}) | ||
| 20780 | Owner of the @code{cuirass} process. | ||
| 20781 | |||
| 20782 | @item @code{group} (predeterminado: @code{"cuirass"}) | ||
| 20783 | Owner's group of the @code{cuirass} process. | ||
| 20784 | |||
| 20785 | @item @code{interval} (predeterminado: @code{60}) | ||
| 20786 | Number of seconds between the poll of the repositories followed by the | ||
| 20787 | Cuirass jobs. | ||
| 20788 | |||
| 20789 | @item @code{database} (predeterminada: @code{"/var/lib/cuirass/cuirass.db"}) | ||
| 20790 | Location of sqlite database which contains the build results and previously | ||
| 20791 | added specifications. | ||
| 20792 | |||
| 20793 | @item @code{ttl} (predeterminado: @code{(* 30 24 3600)}) | ||
| 20794 | Specifies the time-to-live (TTL) in seconds of garbage collector roots that | ||
| 20795 | are registered for build results. This means that build results are | ||
| 20796 | protected from garbage collection for at least @var{ttl} seconds. | ||
| 20797 | |||
| 20798 | @item @code{port} (predeterminado: @code{8081}) | ||
| 20799 | Número de puerto usado por el servidor HTTP. | ||
| 20800 | |||
| 20801 | @item --listen=@var{dirección} | ||
| 20802 | Listen on the network interface for @var{host}. The default is to accept | ||
| 20803 | connections from localhost. | ||
| 20804 | |||
| 20805 | @item @code{specifications} (predeterminada: @code{#~'()}) | ||
| 20806 | A gexp (@pxref{Expresiones-G}) that evaluates to a list of specifications, | ||
| 20807 | where a specification is an association list (@pxref{Associations Lists,,, | ||
| 20808 | guile, 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}) | ||
| 20812 | This allows using substitutes to avoid building every dependencies of a job | ||
| 20813 | from source. | ||
| 20814 | |||
| 20815 | @item @code{one-shot?} (predeterminado: @code{#f}) | ||
| 20816 | Only evaluate specifications and build derivations once. | ||
| 20817 | |||
| 20818 | @item @code{fallback?} (predeterminado: @code{#f}) | ||
| 20819 | When substituting a pre-built binary fails, fall back to building packages | ||
| 20820 | locally. | ||
| 20821 | |||
| 20822 | @item @code{cuirass} (predeterminado: @code{cuirass}) | ||
| 20823 | El 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 | |||
| 20834 | El módulo @code{(gnu services pm)} proporciona una definición de servicio | ||
| 20835 | Guix para la herramienta de gestión de energía de Linux TLP. | ||
| 20836 | |||
| 20837 | TLP enables various powersaving modes in userspace and kernel. Contrary to | ||
| 20838 | @code{upower-service}, it is not a passive, monitoring tool, as it will | ||
| 20839 | apply custom settings each time a new power source is detected. More | ||
| 20840 | information can be found at @uref{http://linrunner.de/en/tlp/tlp.html, TLP | ||
| 20841 | home page}. | ||
| 20842 | |||
| 20843 | @deffn {Variable Scheme} tlp-service-type | ||
| 20844 | The service type for the TLP tool. Its value should be a valid TLP | ||
| 20845 | configuration (see below). To use the default settings, simply write: | ||
| 20846 | @example | ||
| 20847 | (service tlp-service-type) | ||
| 20848 | @end example | ||
| 20849 | @end deffn | ||
| 20850 | |||
| 20851 | By default TLP does not need much configuration but most TLP parameters can | ||
| 20852 | be tweaked using @code{tlp-configuration}. | ||
| 20853 | |||
| 20854 | Each parameter definition is preceded by its type; for example, | ||
| 20855 | @samp{boolean foo} indicates that the @code{foo} parameter should be | ||
| 20856 | specified as a boolean. Types starting with @code{maybe-} denote parameters | ||
| 20857 | that 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 | |||
| 20867 | Available @code{tlp-configuration} fields are: | ||
| 20868 | |||
| 20869 | @deftypevr {@code{tlp-configuration} parameter} package tlp | ||
| 20870 | El paquete TLP. | ||
| 20871 | |||
| 20872 | @end deftypevr | ||
| 20873 | |||
| 20874 | @deftypevr {@code{tlp-configuration} parameter} boolean tlp-enable? | ||
| 20875 | Set to true if you wish to enable TLP. | ||
| 20876 | |||
| 20877 | Defaults to @samp{#t}. | ||
| 20878 | |||
| 20879 | @end deftypevr | ||
| 20880 | |||
| 20881 | @deftypevr {@code{tlp-configuration} parameter} string tlp-default-mode | ||
| 20882 | Default mode when no power supply can be detected. Alternatives are AC and | ||
| 20883 | BAT. | ||
| 20884 | |||
| 20885 | Defaults to @samp{"AC"}. | ||
| 20886 | |||
| 20887 | @end deftypevr | ||
| 20888 | |||
| 20889 | @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-ac | ||
| 20890 | Number of seconds Linux kernel has to wait after the disk goes idle, before | ||
| 20891 | syncing on AC. | ||
| 20892 | |||
| 20893 | El valor predeterminado es @samp{0}. | ||
| 20894 | |||
| 20895 | @end deftypevr | ||
| 20896 | |||
| 20897 | @deftypevr {@code{tlp-configuration} parameter} non-negative-integer disk-idle-secs-on-bat | ||
| 20898 | Same as @code{disk-idle-ac} but on BAT mode. | ||
| 20899 | |||
| 20900 | Defaults to @samp{2}. | ||
| 20901 | |||
| 20902 | @end deftypevr | ||
| 20903 | |||
| 20904 | @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-ac | ||
| 20905 | Dirty pages flushing periodicity, expressed in seconds. | ||
| 20906 | |||
| 20907 | Defaults to @samp{15}. | ||
| 20908 | |||
| 20909 | @end deftypevr | ||
| 20910 | |||
| 20911 | @deftypevr {@code{tlp-configuration} parameter} non-negative-integer max-lost-work-secs-on-bat | ||
| 20912 | Same as @code{max-lost-work-secs-on-ac} but on BAT mode. | ||
| 20913 | |||
| 20914 | Defaults to @samp{60}. | ||
| 20915 | |||
| 20916 | @end deftypevr | ||
| 20917 | |||
| 20918 | @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-ac | ||
| 20919 | CPU frequency scaling governor on AC mode. With intel_pstate driver, | ||
| 20920 | alternatives are powersave and performance. With acpi-cpufreq driver, | ||
| 20921 | alternatives are ondemand, powersave, performance and conservative. | ||
| 20922 | |||
| 20923 | Defaults to @samp{disabled}. | ||
| 20924 | |||
| 20925 | @end deftypevr | ||
| 20926 | |||
| 20927 | @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list cpu-scaling-governor-on-bat | ||
| 20928 | Same as @code{cpu-scaling-governor-on-ac} but on BAT mode. | ||
| 20929 | |||
| 20930 | Defaults to @samp{disabled}. | ||
| 20931 | |||
| 20932 | @end deftypevr | ||
| 20933 | |||
| 20934 | @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-ac | ||
| 20935 | Set the min available frequency for the scaling governor on AC. | ||
| 20936 | |||
| 20937 | Defaults to @samp{disabled}. | ||
| 20938 | |||
| 20939 | @end deftypevr | ||
| 20940 | |||
| 20941 | @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-ac | ||
| 20942 | Set the max available frequency for the scaling governor on AC. | ||
| 20943 | |||
| 20944 | Defaults to @samp{disabled}. | ||
| 20945 | |||
| 20946 | @end deftypevr | ||
| 20947 | |||
| 20948 | @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-min-freq-on-bat | ||
| 20949 | Set the min available frequency for the scaling governor on BAT. | ||
| 20950 | |||
| 20951 | Defaults to @samp{disabled}. | ||
| 20952 | |||
| 20953 | @end deftypevr | ||
| 20954 | |||
| 20955 | @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-scaling-max-freq-on-bat | ||
| 20956 | Set the max available frequency for the scaling governor on BAT. | ||
| 20957 | |||
| 20958 | Defaults to @samp{disabled}. | ||
| 20959 | |||
| 20960 | @end deftypevr | ||
| 20961 | |||
| 20962 | @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-ac | ||
| 20963 | Limit the min P-state to control the power dissipation of the CPU, in AC | ||
| 20964 | mode. Values are stated as a percentage of the available performance. | ||
| 20965 | |||
| 20966 | Defaults to @samp{disabled}. | ||
| 20967 | |||
| 20968 | @end deftypevr | ||
| 20969 | |||
| 20970 | @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-ac | ||
| 20971 | Limit the max P-state to control the power dissipation of the CPU, in AC | ||
| 20972 | mode. Values are stated as a percentage of the available performance. | ||
| 20973 | |||
| 20974 | Defaults to @samp{disabled}. | ||
| 20975 | |||
| 20976 | @end deftypevr | ||
| 20977 | |||
| 20978 | @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-min-perf-on-bat | ||
| 20979 | Same as @code{cpu-min-perf-on-ac} on BAT mode. | ||
| 20980 | |||
| 20981 | Defaults to @samp{disabled}. | ||
| 20982 | |||
| 20983 | @end deftypevr | ||
| 20984 | |||
| 20985 | @deftypevr {@code{tlp-configuration} parameter} maybe-non-negative-integer cpu-max-perf-on-bat | ||
| 20986 | Same as @code{cpu-max-perf-on-ac} on BAT mode. | ||
| 20987 | |||
| 20988 | Defaults to @samp{disabled}. | ||
| 20989 | |||
| 20990 | @end deftypevr | ||
| 20991 | |||
| 20992 | @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-ac? | ||
| 20993 | Enable CPU turbo boost feature on AC mode. | ||
| 20994 | |||
| 20995 | Defaults to @samp{disabled}. | ||
| 20996 | |||
| 20997 | @end deftypevr | ||
| 20998 | |||
| 20999 | @deftypevr {@code{tlp-configuration} parameter} maybe-boolean cpu-boost-on-bat? | ||
| 21000 | Same as @code{cpu-boost-on-ac?} on BAT mode. | ||
| 21001 | |||
| 21002 | Defaults to @samp{disabled}. | ||
| 21003 | |||
| 21004 | @end deftypevr | ||
| 21005 | |||
| 21006 | @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-ac? | ||
| 21007 | Allow Linux kernel to minimize the number of CPU cores/hyper-threads used | ||
| 21008 | under light load conditions. | ||
| 21009 | |||
| 21010 | El valor predeterminado es @samp{#f} | ||
| 21011 | |||
| 21012 | @end deftypevr | ||
| 21013 | |||
| 21014 | @deftypevr {@code{tlp-configuration} parameter} boolean sched-powersave-on-bat? | ||
| 21015 | Same as @code{sched-powersave-on-ac?} but on BAT mode. | ||
| 21016 | |||
| 21017 | Defaults to @samp{#t}. | ||
| 21018 | |||
| 21019 | @end deftypevr | ||
| 21020 | |||
| 21021 | @deftypevr {@code{tlp-configuration} parameter} boolean nmi-watchdog? | ||
| 21022 | Enable Linux kernel NMI watchdog. | ||
| 21023 | |||
| 21024 | El valor predeterminado es @samp{#f} | ||
| 21025 | |||
| 21026 | @end deftypevr | ||
| 21027 | |||
| 21028 | @deftypevr {@code{tlp-configuration} parameter} maybe-string phc-controls | ||
| 21029 | For Linux kernels with PHC patch applied, change CPU voltages. An example | ||
| 21030 | value would be @samp{"F:V F:V F:V F:V"}. | ||
| 21031 | |||
| 21032 | Defaults to @samp{disabled}. | ||
| 21033 | |||
| 21034 | @end deftypevr | ||
| 21035 | |||
| 21036 | @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-ac | ||
| 21037 | Set CPU performance versus energy saving policy on AC. Alternatives are | ||
| 21038 | performance, normal, powersave. | ||
| 21039 | |||
| 21040 | Defaults to @samp{"performance"}. | ||
| 21041 | |||
| 21042 | @end deftypevr | ||
| 21043 | |||
| 21044 | @deftypevr {@code{tlp-configuration} parameter} string energy-perf-policy-on-bat | ||
| 21045 | Same as @code{energy-perf-policy-ac} but on BAT mode. | ||
| 21046 | |||
| 21047 | Defaults to @samp{"powersave"}. | ||
| 21048 | |||
| 21049 | @end deftypevr | ||
| 21050 | |||
| 21051 | @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disks-devices | ||
| 21052 | Dispositivos de disco duro. | ||
| 21053 | |||
| 21054 | @end deftypevr | ||
| 21055 | |||
| 21056 | @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list disk-apm-level-on-ac | ||
| 21057 | Hard 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 | ||
| 21062 | Same 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 | ||
| 21067 | Hard disk spin down timeout. One value has to be specified for each | ||
| 21068 | declared hard disk. | ||
| 21069 | |||
| 21070 | Defaults to @samp{disabled}. | ||
| 21071 | |||
| 21072 | @end deftypevr | ||
| 21073 | |||
| 21074 | @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-spindown-timeout-on-bat | ||
| 21075 | Same as @code{disk-spindown-timeout-on-ac} but on BAT mode. | ||
| 21076 | |||
| 21077 | Defaults to @samp{disabled}. | ||
| 21078 | |||
| 21079 | @end deftypevr | ||
| 21080 | |||
| 21081 | @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list disk-iosched | ||
| 21082 | Select IO scheduler for disk devices. One value has to be specified for | ||
| 21083 | each declared hard disk. Example alternatives are cfq, deadline and noop. | ||
| 21084 | |||
| 21085 | Defaults to @samp{disabled}. | ||
| 21086 | |||
| 21087 | @end deftypevr | ||
| 21088 | |||
| 21089 | @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-ac | ||
| 21090 | SATA aggressive link power management (ALPM) level. Alternatives are | ||
| 21091 | min_power, medium_power, max_performance. | ||
| 21092 | |||
| 21093 | Defaults to @samp{"max_performance"}. | ||
| 21094 | |||
| 21095 | @end deftypevr | ||
| 21096 | |||
| 21097 | @deftypevr {@code{tlp-configuration} parameter} string sata-linkpwr-on-bat | ||
| 21098 | Same as @code{sata-linkpwr-ac} but on BAT mode. | ||
| 21099 | |||
| 21100 | Defaults to @samp{"min_power"}. | ||
| 21101 | |||
| 21102 | @end deftypevr | ||
| 21103 | |||
| 21104 | @deftypevr {@code{tlp-configuration} parameter} maybe-string sata-linkpwr-blacklist | ||
| 21105 | Exclude specified SATA host devices for link power management. | ||
| 21106 | |||
| 21107 | Defaults to @samp{disabled}. | ||
| 21108 | |||
| 21109 | @end deftypevr | ||
| 21110 | |||
| 21111 | @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-ac? | ||
| 21112 | Enable Runtime Power Management for AHCI controller and disks on AC mode. | ||
| 21113 | |||
| 21114 | Defaults to @samp{disabled}. | ||
| 21115 | |||
| 21116 | @end deftypevr | ||
| 21117 | |||
| 21118 | @deftypevr {@code{tlp-configuration} parameter} maybe-on-off-boolean ahci-runtime-pm-on-bat? | ||
| 21119 | Same as @code{ahci-runtime-pm-on-ac} on BAT mode. | ||
| 21120 | |||
| 21121 | Defaults to @samp{disabled}. | ||
| 21122 | |||
| 21123 | @end deftypevr | ||
| 21124 | |||
| 21125 | @deftypevr {@code{tlp-configuration} parameter} non-negative-integer ahci-runtime-pm-timeout | ||
| 21126 | Seconds of inactivity before disk is suspended. | ||
| 21127 | |||
| 21128 | Defaults to @samp{15}. | ||
| 21129 | |||
| 21130 | @end deftypevr | ||
| 21131 | |||
| 21132 | @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-ac | ||
| 21133 | PCI Express Active State Power Management level. Alternatives are default, | ||
| 21134 | performance, powersave. | ||
| 21135 | |||
| 21136 | Defaults to @samp{"performance"}. | ||
| 21137 | |||
| 21138 | @end deftypevr | ||
| 21139 | |||
| 21140 | @deftypevr {@code{tlp-configuration} parameter} string pcie-aspm-on-bat | ||
| 21141 | Same as @code{pcie-aspm-ac} but on BAT mode. | ||
| 21142 | |||
| 21143 | Defaults to @samp{"powersave"}. | ||
| 21144 | |||
| 21145 | @end deftypevr | ||
| 21146 | |||
| 21147 | @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-ac | ||
| 21148 | Radeon graphics clock speed level. Alternatives are low, mid, high, auto, | ||
| 21149 | default. | ||
| 21150 | |||
| 21151 | Defaults to @samp{"high"}. | ||
| 21152 | |||
| 21153 | @end deftypevr | ||
| 21154 | |||
| 21155 | @deftypevr {@code{tlp-configuration} parameter} string radeon-power-profile-on-bat | ||
| 21156 | Same as @code{radeon-power-ac} but on BAT mode. | ||
| 21157 | |||
| 21158 | Defaults to @samp{"low"}. | ||
| 21159 | |||
| 21160 | @end deftypevr | ||
| 21161 | |||
| 21162 | @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-ac | ||
| 21163 | Radeon dynamic power management method (DPM). Alternatives are battery, | ||
| 21164 | performance. | ||
| 21165 | |||
| 21166 | Defaults to @samp{"performance"}. | ||
| 21167 | |||
| 21168 | @end deftypevr | ||
| 21169 | |||
| 21170 | @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-state-on-bat | ||
| 21171 | Same as @code{radeon-dpm-state-ac} but on BAT mode. | ||
| 21172 | |||
| 21173 | Defaults to @samp{"battery"}. | ||
| 21174 | |||
| 21175 | @end deftypevr | ||
| 21176 | |||
| 21177 | @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-ac | ||
| 21178 | Radeon DPM performance level. Alternatives are auto, low, high. | ||
| 21179 | |||
| 21180 | Defaults to @samp{"auto"}. | ||
| 21181 | |||
| 21182 | @end deftypevr | ||
| 21183 | |||
| 21184 | @deftypevr {@code{tlp-configuration} parameter} string radeon-dpm-perf-level-on-bat | ||
| 21185 | Same as @code{radeon-dpm-perf-ac} but on BAT mode. | ||
| 21186 | |||
| 21187 | Defaults to @samp{"auto"}. | ||
| 21188 | |||
| 21189 | @end deftypevr | ||
| 21190 | |||
| 21191 | @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-ac? | ||
| 21192 | Wifi power saving mode. | ||
| 21193 | |||
| 21194 | El valor predeterminado es @samp{#f} | ||
| 21195 | |||
| 21196 | @end deftypevr | ||
| 21197 | |||
| 21198 | @deftypevr {@code{tlp-configuration} parameter} on-off-boolean wifi-pwr-on-bat? | ||
| 21199 | Same as @code{wifi-power-ac?} but on BAT mode. | ||
| 21200 | |||
| 21201 | Defaults to @samp{#t}. | ||
| 21202 | |||
| 21203 | @end deftypevr | ||
| 21204 | |||
| 21205 | @deftypevr {@code{tlp-configuration} parameter} y-n-boolean wol-disable? | ||
| 21206 | Disable wake on LAN. | ||
| 21207 | |||
| 21208 | Defaults to @samp{#t}. | ||
| 21209 | |||
| 21210 | @end deftypevr | ||
| 21211 | |||
| 21212 | @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-ac | ||
| 21213 | Timeout duration in seconds before activating audio power saving on Intel | ||
| 21214 | HDA and AC97 devices. A value of 0 disables power saving. | ||
| 21215 | |||
| 21216 | El valor predeterminado es @samp{0}. | ||
| 21217 | |||
| 21218 | @end deftypevr | ||
| 21219 | |||
| 21220 | @deftypevr {@code{tlp-configuration} parameter} non-negative-integer sound-power-save-on-bat | ||
| 21221 | Same as @code{sound-powersave-ac} but on BAT mode. | ||
| 21222 | |||
| 21223 | Defaults to @samp{1}. | ||
| 21224 | |||
| 21225 | @end deftypevr | ||
| 21226 | |||
| 21227 | @deftypevr {@code{tlp-configuration} parameter} y-n-boolean sound-power-save-controller? | ||
| 21228 | Disable controller in powersaving mode on Intel HDA devices. | ||
| 21229 | |||
| 21230 | Defaults to @samp{#t}. | ||
| 21231 | |||
| 21232 | @end deftypevr | ||
| 21233 | |||
| 21234 | @deftypevr {@code{tlp-configuration} parameter} boolean bay-poweroff-on-bat? | ||
| 21235 | Enable optical drive in UltraBay/MediaBay on BAT mode. Drive can be powered | ||
| 21236 | on again by releasing (and reinserting) the eject lever or by pressing the | ||
| 21237 | disc eject button on newer models. | ||
| 21238 | |||
| 21239 | El valor predeterminado es @samp{#f} | ||
| 21240 | |||
| 21241 | @end deftypevr | ||
| 21242 | |||
| 21243 | @deftypevr {@code{tlp-configuration} parameter} string bay-device | ||
| 21244 | Name of the optical drive device to power off. | ||
| 21245 | |||
| 21246 | Defaults to @samp{"sr0"}. | ||
| 21247 | |||
| 21248 | @end deftypevr | ||
| 21249 | |||
| 21250 | @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-ac | ||
| 21251 | Runtime Power Management for PCI(e) bus devices. Alternatives are on and | ||
| 21252 | auto. | ||
| 21253 | |||
| 21254 | Defaults to @samp{"on"}. | ||
| 21255 | |||
| 21256 | @end deftypevr | ||
| 21257 | |||
| 21258 | @deftypevr {@code{tlp-configuration} parameter} string runtime-pm-on-bat | ||
| 21259 | Same as @code{runtime-pm-ac} but on BAT mode. | ||
| 21260 | |||
| 21261 | Defaults to @samp{"auto"}. | ||
| 21262 | |||
| 21263 | @end deftypevr | ||
| 21264 | |||
| 21265 | @deftypevr {@code{tlp-configuration} parameter} boolean runtime-pm-all? | ||
| 21266 | Runtime Power Management for all PCI(e) bus devices, except blacklisted | ||
| 21267 | ones. | ||
| 21268 | |||
| 21269 | Defaults to @samp{#t}. | ||
| 21270 | |||
| 21271 | @end deftypevr | ||
| 21272 | |||
| 21273 | @deftypevr {@code{tlp-configuration} parameter} maybe-space-separated-string-list runtime-pm-blacklist | ||
| 21274 | Exclude specified PCI(e) device addresses from Runtime Power Management. | ||
| 21275 | |||
| 21276 | Defaults to @samp{disabled}. | ||
| 21277 | |||
| 21278 | @end deftypevr | ||
| 21279 | |||
| 21280 | @deftypevr {@code{tlp-configuration} parameter} space-separated-string-list runtime-pm-driver-blacklist | ||
| 21281 | Exclude PCI(e) devices assigned to the specified drivers from Runtime Power | ||
| 21282 | Management. | ||
| 21283 | |||
| 21284 | @end deftypevr | ||
| 21285 | |||
| 21286 | @deftypevr {@code{tlp-configuration} parameter} boolean usb-autosuspend? | ||
| 21287 | Enable USB autosuspend feature. | ||
| 21288 | |||
| 21289 | Defaults to @samp{#t}. | ||
| 21290 | |||
| 21291 | @end deftypevr | ||
| 21292 | |||
| 21293 | @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-blacklist | ||
| 21294 | Exclude specified devices from USB autosuspend. | ||
| 21295 | |||
| 21296 | Defaults to @samp{disabled}. | ||
| 21297 | |||
| 21298 | @end deftypevr | ||
| 21299 | |||
| 21300 | @deftypevr {@code{tlp-configuration} parameter} boolean usb-blacklist-wwan? | ||
| 21301 | Exclude WWAN devices from USB autosuspend. | ||
| 21302 | |||
| 21303 | Defaults to @samp{#t}. | ||
| 21304 | |||
| 21305 | @end deftypevr | ||
| 21306 | |||
| 21307 | @deftypevr {@code{tlp-configuration} parameter} maybe-string usb-whitelist | ||
| 21308 | Include specified devices into USB autosuspend, even if they are already | ||
| 21309 | excluded by the driver or via @code{usb-blacklist-wwan?}. | ||
| 21310 | |||
| 21311 | Defaults to @samp{disabled}. | ||
| 21312 | |||
| 21313 | @end deftypevr | ||
| 21314 | |||
| 21315 | @deftypevr {@code{tlp-configuration} parameter} maybe-boolean usb-autosuspend-disable-on-shutdown? | ||
| 21316 | Enable USB autosuspend before shutdown. | ||
| 21317 | |||
| 21318 | Defaults to @samp{disabled}. | ||
| 21319 | |||
| 21320 | @end deftypevr | ||
| 21321 | |||
| 21322 | @deftypevr {@code{tlp-configuration} parameter} boolean restore-device-state-on-startup? | ||
| 21323 | Restore radio device state (bluetooth, wifi, wwan) from previous shutdown on | ||
| 21324 | system startup. | ||
| 21325 | |||
| 21326 | El 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 | |||
| 21334 | El módulo @code{(gnu services pm)} proporciona una interfaz con thermald, un | ||
| 21335 | servicio de escalado de frecuencia de la CPU que ayuda a prevenir el | ||
| 21336 | sobrecalentamiento. | ||
| 21337 | |||
| 21338 | @defvr {Variable Scheme} thermald-service-type | ||
| 21339 | This is the service type for @uref{https://01.org/linux-thermal-daemon/, | ||
| 21340 | thermald}, the Linux Thermal Daemon, which is responsible for controlling | ||
| 21341 | the thermal state of processors and preventing overheating. | ||
| 21342 | @end defvr | ||
| 21343 | |||
| 21344 | @deftp {Tipo de datos} thermald-configuration | ||
| 21345 | Tipo 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}) | ||
| 21350 | Ignore cpuid check for supported CPU models. | ||
| 21351 | |||
| 21352 | @item @code{thermald} (predeterminado: @var{thermald}) | ||
| 21353 | Package object of thermald. | ||
| 21354 | |||
| 21355 | @end table | ||
| 21356 | @end deftp | ||
| 21357 | |||
| 21358 | @node Servicios de audio | ||
| 21359 | @subsection Servicios de audio | ||
| 21360 | |||
| 21361 | El módulo @code{(gnu services audio)} proporciona un servicio para iniciar | ||
| 21362 | MPD (el daemon de reproducción de música). | ||
| 21363 | |||
| 21364 | @cindex mpd | ||
| 21365 | @subsubheading Daemon de reproducción de música (MPD) | ||
| 21366 | |||
| 21367 | El daemon de reproducción de música (MPD) es un servicio que puede | ||
| 21368 | reproducir música mientras se controla desde la máquina local o sobre una | ||
| 21369 | red por una multitud de clientes. | ||
| 21370 | |||
| 21371 | El 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 | ||
| 21382 | El tipo de servicio para @command{mpd}. | ||
| 21383 | @end defvr | ||
| 21384 | |||
| 21385 | @deftp {Tipo de datos} mpd-configuration | ||
| 21386 | Data type representing the configuration of @command{mpd}. | ||
| 21387 | |||
| 21388 | @table @asis | ||
| 21389 | @item @code{user} (predeterminada: @code{"mpd"}) | ||
| 21390 | Usuaria que ejecuta mpd. | ||
| 21391 | |||
| 21392 | @item @code{music-dir} (predeterminado: @code{"~/Music"}) | ||
| 21393 | The directory to scan for music files. | ||
| 21394 | |||
| 21395 | @item @code{playlist-dir} (predeterminado: @code{"~/.mpd/playlists"}) | ||
| 21396 | The directory to store playlists. | ||
| 21397 | |||
| 21398 | @item @code{db-file} (default: @code{"~/.mpd/tag_cache"}) | ||
| 21399 | The location of the music database. | ||
| 21400 | |||
| 21401 | @item @code{state-file} (default: @code{"~/.mpd/state"}) | ||
| 21402 | The location of the file that stores current MPD's state. | ||
| 21403 | |||
| 21404 | @item @code{sticker-file} (default: @code{"~/.mpd/sticker.sql"}) | ||
| 21405 | The location of the sticker database. | ||
| 21406 | |||
| 21407 | @item @code{port} (predeterminado: @code{"6600"}) | ||
| 21408 | Puerto sobre el que se ejecuta mpd. | ||
| 21409 | |||
| 21410 | @item @code{address} (predeterminada: @code{"any"}) | ||
| 21411 | The address that mpd will bind to. To use a Unix domain socket, an absolute | ||
| 21412 | path 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 | |||
| 21420 | The @code{(gnu services virtualization)} module provides services for the | ||
| 21421 | libvirt and virtlog daemons, as well as other virtualization-related | ||
| 21422 | services. | ||
| 21423 | |||
| 21424 | @subsubheading Demonio Libvirt | ||
| 21425 | @code{libvirtd} is the server side daemon component of the libvirt | ||
| 21426 | virtualization management system. This daemon runs on host servers and | ||
| 21427 | performs required management tasks for virtualized guests. | ||
| 21428 | |||
| 21429 | @deffn {Variable Scheme} libvirt-service-type | ||
| 21430 | This is the type of the @uref{https://libvirt.org, libvirt daemon}. Its | ||
| 21431 | value 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) | ||
| 21442 | Available @code{libvirt-configuration} fields are: | ||
| 21443 | |||
| 21444 | @deftypevr {@code{libvirt-configuration} parameter} package libvirt | ||
| 21445 | Paquete libvirt. | ||
| 21446 | |||
| 21447 | @end deftypevr | ||
| 21448 | |||
| 21449 | @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tls? | ||
| 21450 | Flag listening for secure TLS connections on the public TCP/IP port. must | ||
| 21451 | set @code{listen} for this to have any effect. | ||
| 21452 | |||
| 21453 | It is necessary to setup a CA and issue server certificates before using | ||
| 21454 | this capability. | ||
| 21455 | |||
| 21456 | Defaults to @samp{#t}. | ||
| 21457 | |||
| 21458 | @end deftypevr | ||
| 21459 | |||
| 21460 | @deftypevr {@code{libvirt-configuration} parameter} boolean listen-tcp? | ||
| 21461 | Listen for unencrypted TCP connections on the public TCP/IP port. must set | ||
| 21462 | @code{listen} for this to have any effect. | ||
| 21463 | |||
| 21464 | Using the TCP socket requires SASL authentication by default. Only SASL | ||
| 21465 | mechanisms which support data encryption are allowed. This is DIGEST_MD5 | ||
| 21466 | and GSSAPI (Kerberos5) | ||
| 21467 | |||
| 21468 | El valor predeterminado es @samp{#f} | ||
| 21469 | |||
| 21470 | @end deftypevr | ||
| 21471 | |||
| 21472 | @deftypevr {@code{libvirt-configuration} parameter} string tls-port | ||
| 21473 | Port for accepting secure TLS connections This can be a port number, or | ||
| 21474 | service name | ||
| 21475 | |||
| 21476 | Defaults to @samp{"16514"}. | ||
| 21477 | |||
| 21478 | @end deftypevr | ||
| 21479 | |||
| 21480 | @deftypevr {@code{libvirt-configuration} parameter} string tcp-port | ||
| 21481 | Port for accepting insecure TCP connections This can be a port number, or | ||
| 21482 | service name | ||
| 21483 | |||
| 21484 | Defaults to @samp{"16509"}. | ||
| 21485 | |||
| 21486 | @end deftypevr | ||
| 21487 | |||
| 21488 | @deftypevr {@code{libvirt-configuration} parameter} string listen-addr | ||
| 21489 | IP address or hostname used for client connections. | ||
| 21490 | |||
| 21491 | Defaults to @samp{"0.0.0.0"}. | ||
| 21492 | |||
| 21493 | @end deftypevr | ||
| 21494 | |||
| 21495 | @deftypevr {@code{libvirt-configuration} parameter} boolean mdns-adv? | ||
| 21496 | Flag toggling mDNS advertisement of the libvirt service. | ||
| 21497 | |||
| 21498 | Alternatively can disable for all services on a host by stopping the Avahi | ||
| 21499 | daemon. | ||
| 21500 | |||
| 21501 | El valor predeterminado es @samp{#f} | ||
| 21502 | |||
| 21503 | @end deftypevr | ||
| 21504 | |||
| 21505 | @deftypevr {@code{libvirt-configuration} parameter} string mdns-name | ||
| 21506 | Default mDNS advertisement name. This must be unique on the immediate | ||
| 21507 | broadcast network. | ||
| 21508 | |||
| 21509 | Defaults to @samp{"Virtualization Host <hostname>"}. | ||
| 21510 | |||
| 21511 | @end deftypevr | ||
| 21512 | |||
| 21513 | @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-group | ||
| 21514 | UNIX domain socket group ownership. This can be used to allow a 'trusted' | ||
| 21515 | set of users access to management capabilities without becoming root. | ||
| 21516 | |||
| 21517 | Defaults to @samp{"root"}. | ||
| 21518 | |||
| 21519 | @end deftypevr | ||
| 21520 | |||
| 21521 | @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-ro-perms | ||
| 21522 | UNIX socket permissions for the R/O socket. This is used for monitoring VM | ||
| 21523 | status only. | ||
| 21524 | |||
| 21525 | Defaults to @samp{"0777"}. | ||
| 21526 | |||
| 21527 | @end deftypevr | ||
| 21528 | |||
| 21529 | @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-rw-perms | ||
| 21530 | UNIX socket permissions for the R/W socket. Default allows only root. If | ||
| 21531 | PolicyKit is enabled on the socket, the default will change to allow | ||
| 21532 | everyone (eg, 0777) | ||
| 21533 | |||
| 21534 | Defaults to @samp{"0770"}. | ||
| 21535 | |||
| 21536 | @end deftypevr | ||
| 21537 | |||
| 21538 | @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-admin-perms | ||
| 21539 | UNIX 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 | ||
| 21541 | access to. | ||
| 21542 | |||
| 21543 | Defaults to @samp{"0777"}. | ||
| 21544 | |||
| 21545 | @end deftypevr | ||
| 21546 | |||
| 21547 | @deftypevr {@code{libvirt-configuration} parameter} string unix-sock-dir | ||
| 21548 | The directory in which sockets will be found/created. | ||
| 21549 | |||
| 21550 | Defaults to @samp{"/var/run/libvirt"}. | ||
| 21551 | |||
| 21552 | @end deftypevr | ||
| 21553 | |||
| 21554 | @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-ro | ||
| 21555 | Authentication scheme for UNIX read-only sockets. By default socket | ||
| 21556 | permissions allow anyone to connect | ||
| 21557 | |||
| 21558 | Defaults to @samp{"polkit"}. | ||
| 21559 | |||
| 21560 | @end deftypevr | ||
| 21561 | |||
| 21562 | @deftypevr {@code{libvirt-configuration} parameter} string auth-unix-rw | ||
| 21563 | Authentication scheme for UNIX read-write sockets. By default socket | ||
| 21564 | permissions only allow root. If PolicyKit support was compiled into | ||
| 21565 | libvirt, the default will be to use 'polkit' auth. | ||
| 21566 | |||
| 21567 | Defaults to @samp{"polkit"}. | ||
| 21568 | |||
| 21569 | @end deftypevr | ||
| 21570 | |||
| 21571 | @deftypevr {@code{libvirt-configuration} parameter} string auth-tcp | ||
| 21572 | Authentication scheme for TCP sockets. If you don't enable SASL, then all | ||
| 21573 | TCP traffic is cleartext. Don't do this outside of a dev/test scenario. | ||
| 21574 | |||
| 21575 | Defaults to @samp{"sasl"}. | ||
| 21576 | |||
| 21577 | @end deftypevr | ||
| 21578 | |||
| 21579 | @deftypevr {@code{libvirt-configuration} parameter} string auth-tls | ||
| 21580 | Authentication scheme for TLS sockets. TLS sockets already have encryption | ||
| 21581 | provided by the TLS layer, and limited authentication is done by | ||
| 21582 | certificates. | ||
| 21583 | |||
| 21584 | It is possible to make use of any SASL authentication mechanism as well, by | ||
| 21585 | using 'sasl' for this option | ||
| 21586 | |||
| 21587 | Defaults to @samp{"none"}. | ||
| 21588 | |||
| 21589 | @end deftypevr | ||
| 21590 | |||
| 21591 | @deftypevr {@code{libvirt-configuration} parameter} optional-list access-drivers | ||
| 21592 | API access control scheme. | ||
| 21593 | |||
| 21594 | By default an authenticated user is allowed access to all APIs. Access | ||
| 21595 | drivers can place restrictions on this. | ||
| 21596 | |||
| 21597 | Defaults to @samp{()}. | ||
| 21598 | |||
| 21599 | @end deftypevr | ||
| 21600 | |||
| 21601 | @deftypevr {@code{libvirt-configuration} parameter} string key-file | ||
| 21602 | Server key file path. If set to an empty string, then no private key is | ||
| 21603 | loaded. | ||
| 21604 | |||
| 21605 | El valor predeterminado es @samp{""}. | ||
| 21606 | |||
| 21607 | @end deftypevr | ||
| 21608 | |||
| 21609 | @deftypevr {@code{libvirt-configuration} parameter} string cert-file | ||
| 21610 | Server key file path. If set to an empty string, then no certificate is | ||
| 21611 | loaded. | ||
| 21612 | |||
| 21613 | El valor predeterminado es @samp{""}. | ||
| 21614 | |||
| 21615 | @end deftypevr | ||
| 21616 | |||
| 21617 | @deftypevr {@code{libvirt-configuration} parameter} string ca-file | ||
| 21618 | Server key file path. If set to an empty string, then no CA certificate is | ||
| 21619 | loaded. | ||
| 21620 | |||
| 21621 | El valor predeterminado es @samp{""}. | ||
| 21622 | |||
| 21623 | @end deftypevr | ||
| 21624 | |||
| 21625 | @deftypevr {@code{libvirt-configuration} parameter} string crl-file | ||
| 21626 | Certificate revocation list path. If set to an empty string, then no CRL is | ||
| 21627 | loaded. | ||
| 21628 | |||
| 21629 | El valor predeterminado es @samp{""}. | ||
| 21630 | |||
| 21631 | @end deftypevr | ||
| 21632 | |||
| 21633 | @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-sanity-cert | ||
| 21634 | Disable verification of our own server certificates. | ||
| 21635 | |||
| 21636 | When libvirtd starts it performs some sanity checks against its own | ||
| 21637 | certificates. | ||
| 21638 | |||
| 21639 | El valor predeterminado es @samp{#f} | ||
| 21640 | |||
| 21641 | @end deftypevr | ||
| 21642 | |||
| 21643 | @deftypevr {@code{libvirt-configuration} parameter} boolean tls-no-verify-cert | ||
| 21644 | Disable verification of client certificates. | ||
| 21645 | |||
| 21646 | Client certificate verification is the primary authentication mechanism. | ||
| 21647 | Any client which does not present a certificate signed by the CA will be | ||
| 21648 | rejected. | ||
| 21649 | |||
| 21650 | El valor predeterminado es @samp{#f} | ||
| 21651 | |||
| 21652 | @end deftypevr | ||
| 21653 | |||
| 21654 | @deftypevr {@code{libvirt-configuration} parameter} optional-list tls-allowed-dn-list | ||
| 21655 | Whitelist of allowed x509 Distinguished Name. | ||
| 21656 | |||
| 21657 | Defaults to @samp{()}. | ||
| 21658 | |||
| 21659 | @end deftypevr | ||
| 21660 | |||
| 21661 | @deftypevr {@code{libvirt-configuration} parameter} optional-list sasl-allowed-usernames | ||
| 21662 | Whitelist of allowed SASL usernames. The format for username depends on the | ||
| 21663 | SASL authentication mechanism. | ||
| 21664 | |||
| 21665 | Defaults to @samp{()}. | ||
| 21666 | |||
| 21667 | @end deftypevr | ||
| 21668 | |||
| 21669 | @deftypevr {@code{libvirt-configuration} parameter} string tls-priority | ||
| 21670 | Override the compile time default TLS priority string. The default is | ||
| 21671 | usually "NORMAL" unless overridden at build time. Only set this is it is | ||
| 21672 | desired for libvirt to deviate from the global default settings. | ||
| 21673 | |||
| 21674 | Defaults to @samp{"NORMAL"}. | ||
| 21675 | |||
| 21676 | @end deftypevr | ||
| 21677 | |||
| 21678 | @deftypevr {@code{libvirt-configuration} parameter} integer max-clients | ||
| 21679 | Maximum number of concurrent client connections to allow over all sockets | ||
| 21680 | combined. | ||
| 21681 | |||
| 21682 | Defaults to @samp{5000}. | ||
| 21683 | |||
| 21684 | @end deftypevr | ||
| 21685 | |||
| 21686 | @deftypevr {@code{libvirt-configuration} parameter} integer max-queued-clients | ||
| 21687 | Maximum length of queue of connections waiting to be accepted by the | ||
| 21688 | daemon. Note, that some protocols supporting retransmission may obey this | ||
| 21689 | so that a later reattempt at connection succeeds. | ||
| 21690 | |||
| 21691 | Defaults to @samp{1000}. | ||
| 21692 | |||
| 21693 | @end deftypevr | ||
| 21694 | |||
| 21695 | @deftypevr {@code{libvirt-configuration} parameter} integer max-anonymous-clients | ||
| 21696 | Maximum length of queue of accepted but not yet authenticated clients. Set | ||
| 21697 | this to zero to turn this feature off | ||
| 21698 | |||
| 21699 | Defaults to @samp{20}. | ||
| 21700 | |||
| 21701 | @end deftypevr | ||
| 21702 | |||
| 21703 | @deftypevr {@code{libvirt-configuration} parameter} integer min-workers | ||
| 21704 | Number of workers to start up initially. | ||
| 21705 | |||
| 21706 | Defaults to @samp{5}. | ||
| 21707 | |||
| 21708 | @end deftypevr | ||
| 21709 | |||
| 21710 | @deftypevr {@code{libvirt-configuration} parameter} integer max-workers | ||
| 21711 | Maximum number of worker threads. | ||
| 21712 | |||
| 21713 | If the number of active clients exceeds @code{min-workers}, then more | ||
| 21714 | threads are spawned, up to max_workers limit. Typically you'd want | ||
| 21715 | max_workers to equal maximum number of clients allowed. | ||
| 21716 | |||
| 21717 | Defaults to @samp{20}. | ||
| 21718 | |||
| 21719 | @end deftypevr | ||
| 21720 | |||
| 21721 | @deftypevr {@code{libvirt-configuration} parameter} integer prio-workers | ||
| 21722 | Number of priority workers. If all workers from above pool are stuck, some | ||
| 21723 | calls marked as high priority (notably domainDestroy) can be executed in | ||
| 21724 | this pool. | ||
| 21725 | |||
| 21726 | Defaults to @samp{5}. | ||
| 21727 | |||
| 21728 | @end deftypevr | ||
| 21729 | |||
| 21730 | @deftypevr {@code{libvirt-configuration} parameter} integer max-requests | ||
| 21731 | Total global limit on concurrent RPC calls. | ||
| 21732 | |||
| 21733 | Defaults to @samp{20}. | ||
| 21734 | |||
| 21735 | @end deftypevr | ||
| 21736 | |||
| 21737 | @deftypevr {@code{libvirt-configuration} parameter} integer max-client-requests | ||
| 21738 | Limit on concurrent requests from a single client connection. To avoid one | ||
| 21739 | client monopolizing the server this should be a small fraction of the global | ||
| 21740 | max_requests and max_workers parameter. | ||
| 21741 | |||
| 21742 | Defaults to @samp{5}. | ||
| 21743 | |||
| 21744 | @end deftypevr | ||
| 21745 | |||
| 21746 | @deftypevr {@code{libvirt-configuration} parameter} integer admin-min-workers | ||
| 21747 | Same as @code{min-workers} but for the admin interface. | ||
| 21748 | |||
| 21749 | Defaults to @samp{1}. | ||
| 21750 | |||
| 21751 | @end deftypevr | ||
| 21752 | |||
| 21753 | @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-workers | ||
| 21754 | Same as @code{max-workers} but for the admin interface. | ||
| 21755 | |||
| 21756 | Defaults to @samp{5}. | ||
| 21757 | |||
| 21758 | @end deftypevr | ||
| 21759 | |||
| 21760 | @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-clients | ||
| 21761 | Same as @code{max-clients} but for the admin interface. | ||
| 21762 | |||
| 21763 | Defaults to @samp{5}. | ||
| 21764 | |||
| 21765 | @end deftypevr | ||
| 21766 | |||
| 21767 | @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-queued-clients | ||
| 21768 | Same as @code{max-queued-clients} but for the admin interface. | ||
| 21769 | |||
| 21770 | Defaults to @samp{5}. | ||
| 21771 | |||
| 21772 | @end deftypevr | ||
| 21773 | |||
| 21774 | @deftypevr {@code{libvirt-configuration} parameter} integer admin-max-client-requests | ||
| 21775 | Same as @code{max-client-requests} but for the admin interface. | ||
| 21776 | |||
| 21777 | Defaults to @samp{5}. | ||
| 21778 | |||
| 21779 | @end deftypevr | ||
| 21780 | |||
| 21781 | @deftypevr {@code{libvirt-configuration} parameter} integer log-level | ||
| 21782 | Logging level. 4 errors, 3 warnings, 2 information, 1 debug. | ||
| 21783 | |||
| 21784 | Defaults to @samp{3}. | ||
| 21785 | |||
| 21786 | @end deftypevr | ||
| 21787 | |||
| 21788 | @deftypevr {@code{libvirt-configuration} parameter} string log-filters | ||
| 21789 | Filtros de log. | ||
| 21790 | |||
| 21791 | A filter allows to select a different logging level for a given category of | ||
| 21792 | logs The format for a filter is one of: | ||
| 21793 | |||
| 21794 | @itemize @bullet | ||
| 21795 | @item | ||
| 21796 | x:nombre | ||
| 21797 | |||
| 21798 | @item | ||
| 21799 | x:+nombre | ||
| 21800 | |||
| 21801 | @end itemize | ||
| 21802 | |||
| 21803 | where @code{name} is a string which is matched against the category given in | ||
| 21804 | the @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 | ||
| 21806 | of the full category name, in order to match multiple similar categories), | ||
| 21807 | the optional "+" prefix tells libvirt to log stack trace for each message | ||
| 21808 | matching name, and @code{x} is the minimal level where matching messages | ||
| 21809 | should be logged: | ||
| 21810 | |||
| 21811 | @itemize @bullet | ||
| 21812 | @item | ||
| 21813 | 1: DEBUG | ||
| 21814 | |||
| 21815 | @item | ||
| 21816 | 2: INFO | ||
| 21817 | |||
| 21818 | @item | ||
| 21819 | 3: WARNING | ||
| 21820 | |||
| 21821 | @item | ||
| 21822 | 4: ERROR | ||
| 21823 | |||
| 21824 | @end itemize | ||
| 21825 | |||
| 21826 | Multiple filters can be defined in a single filters statement, they just | ||
| 21827 | need to be separated by spaces. | ||
| 21828 | |||
| 21829 | Defaults to @samp{"3:remote 4:event"}. | ||
| 21830 | |||
| 21831 | @end deftypevr | ||
| 21832 | |||
| 21833 | @deftypevr {@code{libvirt-configuration} parameter} string log-outputs | ||
| 21834 | Logging outputs. | ||
| 21835 | |||
| 21836 | An output is one of the places to save logging information The format for an | ||
| 21837 | output can be: | ||
| 21838 | |||
| 21839 | @table @code | ||
| 21840 | @item x:stderr | ||
| 21841 | output goes to stderr | ||
| 21842 | |||
| 21843 | @item x:syslog:name | ||
| 21844 | use syslog for the output and use the given name as the ident | ||
| 21845 | |||
| 21846 | @item x:file:file_path | ||
| 21847 | output to a file, with the given filepath | ||
| 21848 | |||
| 21849 | @item x:journald | ||
| 21850 | output to journald logging system | ||
| 21851 | |||
| 21852 | @end table | ||
| 21853 | |||
| 21854 | In all case the x prefix is the minimal level, acting as a filter | ||
| 21855 | |||
| 21856 | @itemize @bullet | ||
| 21857 | @item | ||
| 21858 | 1: DEBUG | ||
| 21859 | |||
| 21860 | @item | ||
| 21861 | 2: INFO | ||
| 21862 | |||
| 21863 | @item | ||
| 21864 | 3: WARNING | ||
| 21865 | |||
| 21866 | @item | ||
| 21867 | 4: ERROR | ||
| 21868 | |||
| 21869 | @end itemize | ||
| 21870 | |||
| 21871 | Multiple outputs can be defined, they just need to be separated by spaces. | ||
| 21872 | |||
| 21873 | Defaults to @samp{"3:stderr"}. | ||
| 21874 | |||
| 21875 | @end deftypevr | ||
| 21876 | |||
| 21877 | @deftypevr {@code{libvirt-configuration} parameter} integer audit-level | ||
| 21878 | Allows usage of the auditing subsystem to be altered | ||
| 21879 | |||
| 21880 | @itemize @bullet | ||
| 21881 | @item | ||
| 21882 | 0: disable all auditing | ||
| 21883 | |||
| 21884 | @item | ||
| 21885 | 1: enable auditing, only if enabled on host | ||
| 21886 | |||
| 21887 | @item | ||
| 21888 | 2: enable auditing, and exit if disabled on host. | ||
| 21889 | |||
| 21890 | @end itemize | ||
| 21891 | |||
| 21892 | Defaults to @samp{1}. | ||
| 21893 | |||
| 21894 | @end deftypevr | ||
| 21895 | |||
| 21896 | @deftypevr {@code{libvirt-configuration} parameter} boolean audit-logging | ||
| 21897 | Send audit messages via libvirt logging infrastructure. | ||
| 21898 | |||
| 21899 | El valor predeterminado es @samp{#f} | ||
| 21900 | |||
| 21901 | @end deftypevr | ||
| 21902 | |||
| 21903 | @deftypevr {@code{libvirt-configuration} parameter} optional-string host-uuid | ||
| 21904 | Host UUID. UUID must not have all digits be the same. | ||
| 21905 | |||
| 21906 | El valor predeterminado es @samp{""}. | ||
| 21907 | |||
| 21908 | @end deftypevr | ||
| 21909 | |||
| 21910 | @deftypevr {@code{libvirt-configuration} parameter} string host-uuid-source | ||
| 21911 | Source 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 | |||
| 21922 | If @code{dmidecode} does not provide a valid UUID a temporary UUID will be | ||
| 21923 | generated. | ||
| 21924 | |||
| 21925 | Defaults to @samp{"smbios"}. | ||
| 21926 | |||
| 21927 | @end deftypevr | ||
| 21928 | |||
| 21929 | @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-interval | ||
| 21930 | A keepalive message is sent to a client after @code{keepalive_interval} | ||
| 21931 | seconds 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 | ||
| 21933 | send them and the daemon will send responses. | ||
| 21934 | |||
| 21935 | Defaults to @samp{5}. | ||
| 21936 | |||
| 21937 | @end deftypevr | ||
| 21938 | |||
| 21939 | @deftypevr {@code{libvirt-configuration} parameter} integer keepalive-count | ||
| 21940 | Maximum number of keepalive messages that are allowed to be sent to the | ||
| 21941 | client without getting any response before the connection is considered | ||
| 21942 | broken. | ||
| 21943 | |||
| 21944 | In other words, the connection is automatically closed approximately after | ||
| 21945 | @code{keepalive_interval * (keepalive_count + 1)} seconds since the last | ||
| 21946 | message received from the client. When @code{keepalive-count} is set to 0, | ||
| 21947 | connections will be automatically closed after @code{keepalive-interval} | ||
| 21948 | seconds of inactivity without sending any keepalive messages. | ||
| 21949 | |||
| 21950 | Defaults to @samp{5}. | ||
| 21951 | |||
| 21952 | @end deftypevr | ||
| 21953 | |||
| 21954 | @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-interval | ||
| 21955 | Same as above but for admin interface. | ||
| 21956 | |||
| 21957 | Defaults to @samp{5}. | ||
| 21958 | |||
| 21959 | @end deftypevr | ||
| 21960 | |||
| 21961 | @deftypevr {@code{libvirt-configuration} parameter} integer admin-keepalive-count | ||
| 21962 | Same as above but for admin interface. | ||
| 21963 | |||
| 21964 | Defaults to @samp{5}. | ||
| 21965 | |||
| 21966 | @end deftypevr | ||
| 21967 | |||
| 21968 | @deftypevr {@code{libvirt-configuration} parameter} integer ovs-timeout | ||
| 21969 | Timeout for Open vSwitch calls. | ||
| 21970 | |||
| 21971 | The @code{ovs-vsctl} utility is used for the configuration and its timeout | ||
| 21972 | option is set by default to 5 seconds to avoid potential infinite waits | ||
| 21973 | blocking libvirt. | ||
| 21974 | |||
| 21975 | Defaults to @samp{5}. | ||
| 21976 | |||
| 21977 | @end deftypevr | ||
| 21978 | |||
| 21979 | @c %end of autogenerated docs | ||
| 21980 | |||
| 21981 | @subsubheading Daemon Virtlog | ||
| 21982 | The virtlogd service is a server side daemon component of libvirt that is | ||
| 21983 | used to manage logs from virtual machine consoles. | ||
| 21984 | |||
| 21985 | This daemon is not used directly by libvirt client applications, rather it | ||
| 21986 | is called on their behalf by @code{libvirtd}. By maintaining the logs in a | ||
| 21987 | standalone daemon, the main @code{libvirtd} daemon can be restarted without | ||
| 21988 | risk of losing logs. The @code{virtlogd} daemon has the ability to re-exec() | ||
| 21989 | itself upon receiving @code{SIGUSR1}, to allow live upgrades without | ||
| 21990 | downtime. | ||
| 21991 | |||
| 21992 | @deffn {Variable Scheme} virtlog-service-type | ||
| 21993 | This 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 | ||
| 22004 | Logging level. 4 errors, 3 warnings, 2 information, 1 debug. | ||
| 22005 | |||
| 22006 | Defaults to @samp{3}. | ||
| 22007 | |||
| 22008 | @end deftypevr | ||
| 22009 | |||
| 22010 | @deftypevr {@code{virtlog-configuration} parameter} string log-filters | ||
| 22011 | Filtros de log. | ||
| 22012 | |||
| 22013 | A filter allows to select a different logging level for a given category of | ||
| 22014 | logs The format for a filter is one of: | ||
| 22015 | |||
| 22016 | @itemize @bullet | ||
| 22017 | @item | ||
| 22018 | x:nombre | ||
| 22019 | |||
| 22020 | @item | ||
| 22021 | x:+nombre | ||
| 22022 | |||
| 22023 | @end itemize | ||
| 22024 | |||
| 22025 | where @code{name} is a string which is matched against the category given in | ||
| 22026 | the @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 | ||
| 22028 | of the full category name, in order to match multiple similar categories), | ||
| 22029 | the optional "+" prefix tells libvirt to log stack trace for each message | ||
| 22030 | matching name, and @code{x} is the minimal level where matching messages | ||
| 22031 | should be logged: | ||
| 22032 | |||
| 22033 | @itemize @bullet | ||
| 22034 | @item | ||
| 22035 | 1: DEBUG | ||
| 22036 | |||
| 22037 | @item | ||
| 22038 | 2: INFO | ||
| 22039 | |||
| 22040 | @item | ||
| 22041 | 3: WARNING | ||
| 22042 | |||
| 22043 | @item | ||
| 22044 | 4: ERROR | ||
| 22045 | |||
| 22046 | @end itemize | ||
| 22047 | |||
| 22048 | Multiple filters can be defined in a single filters statement, they just | ||
| 22049 | need to be separated by spaces. | ||
| 22050 | |||
| 22051 | Defaults to @samp{"3:remote 4:event"}. | ||
| 22052 | |||
| 22053 | @end deftypevr | ||
| 22054 | |||
| 22055 | @deftypevr {@code{virtlog-configuration} parameter} string log-outputs | ||
| 22056 | Logging outputs. | ||
| 22057 | |||
| 22058 | An output is one of the places to save logging information The format for an | ||
| 22059 | output can be: | ||
| 22060 | |||
| 22061 | @table @code | ||
| 22062 | @item x:stderr | ||
| 22063 | output goes to stderr | ||
| 22064 | |||
| 22065 | @item x:syslog:name | ||
| 22066 | use syslog for the output and use the given name as the ident | ||
| 22067 | |||
| 22068 | @item x:file:file_path | ||
| 22069 | output to a file, with the given filepath | ||
| 22070 | |||
| 22071 | @item x:journald | ||
| 22072 | output to journald logging system | ||
| 22073 | |||
| 22074 | @end table | ||
| 22075 | |||
| 22076 | In all case the x prefix is the minimal level, acting as a filter | ||
| 22077 | |||
| 22078 | @itemize @bullet | ||
| 22079 | @item | ||
| 22080 | 1: DEBUG | ||
| 22081 | |||
| 22082 | @item | ||
| 22083 | 2: INFO | ||
| 22084 | |||
| 22085 | @item | ||
| 22086 | 3: WARNING | ||
| 22087 | |||
| 22088 | @item | ||
| 22089 | 4: ERROR | ||
| 22090 | |||
| 22091 | @end itemize | ||
| 22092 | |||
| 22093 | Multiple outputs can be defined, they just need to be separated by spaces. | ||
| 22094 | |||
| 22095 | Defaults to @samp{"3:stderr"}. | ||
| 22096 | |||
| 22097 | @end deftypevr | ||
| 22098 | |||
| 22099 | @deftypevr {@code{virtlog-configuration} parameter} integer max-clients | ||
| 22100 | Maximum number of concurrent client connections to allow over all sockets | ||
| 22101 | combined. | ||
| 22102 | |||
| 22103 | Defaults to @samp{1024}. | ||
| 22104 | |||
| 22105 | @end deftypevr | ||
| 22106 | |||
| 22107 | @deftypevr {@code{virtlog-configuration} parameter} integer max-size | ||
| 22108 | Maximum file size before rolling over. | ||
| 22109 | |||
| 22110 | Defaults to @samp{2MB} | ||
| 22111 | |||
| 22112 | @end deftypevr | ||
| 22113 | |||
| 22114 | @deftypevr {@code{virtlog-configuration} parameter} integer max-backups | ||
| 22115 | Maximum number of backup files to keep. | ||
| 22116 | |||
| 22117 | Defaults 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 | ||
| 22126 | of program binaries built for different architectures---e.g., it allows you | ||
| 22127 | to transparently execute an ARMv7 program on an x86_64 machine. It achieves | ||
| 22128 | this 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 | ||
| 22132 | This is the type of the QEMU/binfmt service for transparent emulation. Its | ||
| 22133 | value must be a @code{qemu-binfmt-configuration} object, which specifies the | ||
| 22134 | QEMU 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 | |||
| 22142 | In this example, we enable transparent emulation for the ARM and aarch64 | ||
| 22143 | platforms. 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 | ||
| 22149 | This is the configuration for the @code{qemu-binfmt} service. | ||
| 22150 | |||
| 22151 | @table @asis | ||
| 22152 | @item @code{platforms} (predeterminadas: @code{'()}) | ||
| 22153 | The list of emulated QEMU platforms. Each item must be a @dfn{platform | ||
| 22154 | object} as returned by @code{lookup-qemu-platforms} (see below). | ||
| 22155 | |||
| 22156 | @item @code{guix-support?} (predeterminado: @code{#f}) | ||
| 22157 | When it is true, QEMU and all its dependencies are added to the build | ||
| 22158 | environment of @command{guix-daemon} (@pxref{Invocación de guix-daemon, | ||
| 22159 | @code{--chroot-directory} option}). This allows the @code{binfmt_misc} | ||
| 22160 | handlers to be used within the build environment, which in turn means that | ||
| 22161 | you can transparently build programs for another architecture. | ||
| 22162 | |||
| 22163 | For example, let's suppose you're on an x86_64 machine and you have this | ||
| 22164 | service: | ||
| 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 | |||
| 22173 | You can run: | ||
| 22174 | |||
| 22175 | @example | ||
| 22176 | guix build -s armhf-linux inkscape | ||
| 22177 | @end example | ||
| 22178 | |||
| 22179 | @noindent | ||
| 22180 | and it will build Inkscape for ARMv7 @emph{as if it were a native build}, | ||
| 22181 | transparently using QEMU to emulate the ARMv7 CPU. Pretty handy if you'd | ||
| 22182 | like to test a package build for an architecture you don't have access to! | ||
| 22183 | |||
| 22184 | @item @code{qemu} (predeterminado: @code{qemu}) | ||
| 22185 | El paquete QEMU usado. | ||
| 22186 | @end table | ||
| 22187 | @end deftp | ||
| 22188 | |||
| 22189 | @deffn {Procedimiento Scheme} lookup-qemu-platforms @var{plataformas}@dots{} | ||
| 22190 | Return the list of QEMU platform objects corresponding to | ||
| 22191 | @var{platforms}@dots{}. @var{platforms} must be a list of strings | ||
| 22192 | corresponding 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} | ||
| 22197 | Devuelve verdadero si @var{obj} es un objeto plataforma. | ||
| 22198 | @end deffn | ||
| 22199 | |||
| 22200 | @deffn {Procedimiento Scheme} qemu-platform-name @var{plataforma} | ||
| 22201 | Devuelve 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 | |||
| 22207 | The @code{(gnu services version-control)} module provides a service to allow | ||
| 22208 | remote 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 | ||
| 22211 | server to proxy some requests to @code{git-http-backend}, or providing a web | ||
| 22212 | interface with @code{cgit-service-type}. | ||
| 22213 | |||
| 22214 | @deffn {Procedimiento Scheme} git-daemon-service [#:config (git-daemon-configuration)] | ||
| 22215 | |||
| 22216 | Devuelve un servicio que ejecuta @command{git daemon}, un servidor TCP | ||
| 22217 | simple para exponer repositorios con el protocolo Git para acceso anónimo. | ||
| 22218 | |||
| 22219 | The optional @var{config} argument should be a | ||
| 22220 | @code{<git-daemon-configuration>} object, by default it allows read-only | ||
| 22221 | access 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 | ||
| 22228 | Tipo de datos que representa la configuración para | ||
| 22229 | @code{git-daemon-service}. | ||
| 22230 | |||
| 22231 | @table @asis | ||
| 22232 | @item @code{package} (predeterminado: @var{git}) | ||
| 22233 | Package object of the Git distributed version control system. | ||
| 22234 | |||
| 22235 | @item @code{export-all?} (predeterminado: @var{#f}) | ||
| 22236 | Whether to allow access for all Git repositories, even if they do not have | ||
| 22237 | the @file{git-daemon-export-ok} file. | ||
| 22238 | |||
| 22239 | @item @code{base-path} (predeterminado: @file{/srv/git}) | ||
| 22240 | Whether to remap all the path requests as relative to the given path. If | ||
| 22241 | you run git daemon with @var{(base-path "/srv/git")} on example.com, then if | ||
| 22242 | you later try to pull @code{git://example.com/hello.git}, git daemon will | ||
| 22243 | interpret the path as @code{/srv/git/hello.git}. | ||
| 22244 | |||
| 22245 | @item @code{user-path} (predeterminado: @var{#f}) | ||
| 22246 | Whether to allow @code{~user} notation to be used in requests. When | ||
| 22247 | specified with empty string, requests to @code{git://host/~alice/foo} is | ||
| 22248 | taken as a request to access @code{foo} repository in the home directory of | ||
| 22249 | user @code{alice}. If @var{(user-path "path")} is specified, the same | ||
| 22250 | request is taken as a request to access @code{path/foo} repository in the | ||
| 22251 | home directory of user @code{alice}. | ||
| 22252 | |||
| 22253 | @item @code{listen} (predeterminado: @var{'()}) | ||
| 22254 | Whether to listen on specific IP addresses or hostnames, defaults to all. | ||
| 22255 | |||
| 22256 | @item @code{port} (predeterminado: @var{#f}) | ||
| 22257 | Whether to listen on an alternative port, which defaults to 9418. | ||
| 22258 | |||
| 22259 | @item @code{whitelist} (predeterminado: @var{'()}) | ||
| 22260 | If not empty, only allow access to this list of directories. | ||
| 22261 | |||
| 22262 | @item @code{extra-options} (predeterminadas: @var{'()}) | ||
| 22263 | Extra options will be passed to @code{git daemon}, please run @command{man | ||
| 22264 | git-daemon} for more information. | ||
| 22265 | |||
| 22266 | @end table | ||
| 22267 | @end deftp | ||
| 22268 | |||
| 22269 | The @code{git://} protocol lacks authentication. When you pull from a | ||
| 22270 | repository fetched via @code{git://}, you don't know that the data you | ||
| 22271 | receive was modified is really coming from the specified host, and you have | ||
| 22272 | your connection is subject to eavesdropping. It's better to use an | ||
| 22273 | authenticated and encrypted transport, such as @code{https}. Although Git | ||
| 22274 | allows you to serve repositories using unsophisticated file-based web | ||
| 22275 | servers, there is a faster protocol implemented by the | ||
| 22276 | @code{git-http-backend} program. This program is the back-end of a proper | ||
| 22277 | Git web service. It is designed to sit behind a FastCGI proxy. @xref{Servicios Web}, for more on running the necessary @code{fcgiwrap} daemon. | ||
| 22278 | |||
| 22279 | Guix has a separate configuration data type for serving Git repositories | ||
| 22280 | over HTTP. | ||
| 22281 | |||
| 22282 | @deftp {Tipo de datos} git-http-configuration | ||
| 22283 | Data type representing the configuration for @code{git-http-service}. | ||
| 22284 | |||
| 22285 | @table @asis | ||
| 22286 | @item @code{package} (predeterminado: @var{git}) | ||
| 22287 | Package object of the Git distributed version control system. | ||
| 22288 | |||
| 22289 | @item @code{git-root} (predeterminada: @file{/srv/git}) | ||
| 22290 | Directory containing the Git repositories to expose to the world. | ||
| 22291 | |||
| 22292 | @item @code{export-all?} (predeterminado: @var{#f}) | ||
| 22293 | Whether to expose access for all Git repositories in @var{git-root}, even if | ||
| 22294 | they do not have the @file{git-daemon-export-ok} file. | ||
| 22295 | |||
| 22296 | @item @code{uri-path} (predeterminada: @file{/git/}) | ||
| 22297 | Path prefix for Git access. With the default @code{/git/} prefix, this will | ||
| 22298 | map @code{http://@var{server}/git/@var{repo}.git} to | ||
| 22299 | @code{/srv/git/@var{repo}.git}. Requests whose URI paths do not begin with | ||
| 22300 | this prefix are not passed on to this Git instance. | ||
| 22301 | |||
| 22302 | @item @code{fcgiwrap-socket} (predeterminado: @code{127.0.0.1:9000}) | ||
| 22303 | The socket on which the @code{fcgiwrap} daemon is listening. @xref{Servicios Web}. | ||
| 22304 | @end table | ||
| 22305 | @end deftp | ||
| 22306 | |||
| 22307 | There is no @code{git-http-service-type}, currently; instead you can create | ||
| 22308 | an @code{nginx-location-configuration} from a @code{git-http-configuration} | ||
| 22309 | and 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 | ||
| 22314 | configuration. 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 | |||
| 22335 | This example assumes that you are using Let's Encrypt to get your TLS | ||
| 22336 | certificate. @xref{Servicios de certificados}. The default @code{certbot} | ||
| 22337 | service will redirect all HTTP traffic on @code{git.my-host.org} to HTTPS. | ||
| 22338 | You 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 | ||
| 22347 | repositories written in C. | ||
| 22348 | |||
| 22349 | The following example will configure the service with default values. By | ||
| 22350 | default, Cgit can be accessed on port 80 (@code{http://localhost:80}). | ||
| 22351 | |||
| 22352 | @example | ||
| 22353 | (service cgit-service-type) | ||
| 22354 | @end example | ||
| 22355 | |||
| 22356 | The @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 | |||
| 22361 | Available @code{cgit-configuration} fields are: | ||
| 22362 | |||
| 22363 | @deftypevr {@code{cgit-configuration} parameter} package package | ||
| 22364 | El paquete CGIT. | ||
| 22365 | |||
| 22366 | @end deftypevr | ||
| 22367 | |||
| 22368 | @deftypevr {@code{cgit-configuration} parameter} nginx-server-configuration-list nginx | ||
| 22369 | Configuración de NGINX. | ||
| 22370 | |||
| 22371 | @end deftypevr | ||
| 22372 | |||
| 22373 | @deftypevr {@code{cgit-configuration} parameter} file-object about-filter | ||
| 22374 | Specifies a command which will be invoked to format the content of about | ||
| 22375 | pages (both top-level and for each repository). | ||
| 22376 | |||
| 22377 | El valor predeterminado es @samp{""}. | ||
| 22378 | |||
| 22379 | @end deftypevr | ||
| 22380 | |||
| 22381 | @deftypevr {@code{cgit-configuration} parameter} string agefile | ||
| 22382 | Specifies a path, relative to each repository path, which can be used to | ||
| 22383 | specify the date and time of the youngest commit in the repository. | ||
| 22384 | |||
| 22385 | El valor predeterminado es @samp{""}. | ||
| 22386 | |||
| 22387 | @end deftypevr | ||
| 22388 | |||
| 22389 | @deftypevr {@code{cgit-configuration} parameter} file-object auth-filter | ||
| 22390 | Specifies a command that will be invoked for authenticating repository | ||
| 22391 | access. | ||
| 22392 | |||
| 22393 | El valor predeterminado es @samp{""}. | ||
| 22394 | |||
| 22395 | @end deftypevr | ||
| 22396 | |||
| 22397 | @deftypevr {@code{cgit-configuration} parameter} string branch-sort | ||
| 22398 | Flag which, when set to @samp{age}, enables date ordering in the branch ref | ||
| 22399 | list, and when set @samp{name} enables ordering by branch name. | ||
| 22400 | |||
| 22401 | Defaults to @samp{"name"}. | ||
| 22402 | |||
| 22403 | @end deftypevr | ||
| 22404 | |||
| 22405 | @deftypevr {@code{cgit-configuration} parameter} string cache-root | ||
| 22406 | Path used to store the cgit cache entries. | ||
| 22407 | |||
| 22408 | Defaults to @samp{"/var/cache/cgit"}. | ||
| 22409 | |||
| 22410 | @end deftypevr | ||
| 22411 | |||
| 22412 | @deftypevr {@code{cgit-configuration} parameter} integer cache-static-ttl | ||
| 22413 | Number which specifies the time-to-live, in minutes, for the cached version | ||
| 22414 | of repository pages accessed with a fixed SHA1. | ||
| 22415 | |||
| 22416 | Defaults to @samp{-1}. | ||
| 22417 | |||
| 22418 | @end deftypevr | ||
| 22419 | |||
| 22420 | @deftypevr {@code{cgit-configuration} parameter} integer cache-dynamic-ttl | ||
| 22421 | Number which specifies the time-to-live, in minutes, for the cached version | ||
| 22422 | of repository pages accessed without a fixed SHA1. | ||
| 22423 | |||
| 22424 | Defaults to @samp{5}. | ||
| 22425 | |||
| 22426 | @end deftypevr | ||
| 22427 | |||
| 22428 | @deftypevr {@code{cgit-configuration} parameter} integer cache-repo-ttl | ||
| 22429 | Number which specifies the time-to-live, in minutes, for the cached version | ||
| 22430 | of the repository summary page. | ||
| 22431 | |||
| 22432 | Defaults to @samp{5}. | ||
| 22433 | |||
| 22434 | @end deftypevr | ||
| 22435 | |||
| 22436 | @deftypevr {@code{cgit-configuration} parameter} integer cache-root-ttl | ||
| 22437 | Number which specifies the time-to-live, in minutes, for the cached version | ||
| 22438 | of the repository index page. | ||
| 22439 | |||
| 22440 | Defaults to @samp{5}. | ||
| 22441 | |||
| 22442 | @end deftypevr | ||
| 22443 | |||
| 22444 | @deftypevr {@code{cgit-configuration} parameter} integer cache-scanrc-ttl | ||
| 22445 | Number which specifies the time-to-live, in minutes, for the result of | ||
| 22446 | scanning a path for Git repositories. | ||
| 22447 | |||
| 22448 | Defaults to @samp{15}. | ||
| 22449 | |||
| 22450 | @end deftypevr | ||
| 22451 | |||
| 22452 | @deftypevr {@code{cgit-configuration} parameter} integer cache-about-ttl | ||
| 22453 | Number which specifies the time-to-live, in minutes, for the cached version | ||
| 22454 | of the repository about page. | ||
| 22455 | |||
| 22456 | Defaults to @samp{15}. | ||
| 22457 | |||
| 22458 | @end deftypevr | ||
| 22459 | |||
| 22460 | @deftypevr {@code{cgit-configuration} parameter} integer cache-snapshot-ttl | ||
| 22461 | Number which specifies the time-to-live, in minutes, for the cached version | ||
| 22462 | of snapshots. | ||
| 22463 | |||
| 22464 | Defaults to @samp{5}. | ||
| 22465 | |||
| 22466 | @end deftypevr | ||
| 22467 | |||
| 22468 | @deftypevr {@code{cgit-configuration} parameter} integer cache-size | ||
| 22469 | The maximum number of entries in the cgit cache. When set to @samp{0}, | ||
| 22470 | caching is disabled. | ||
| 22471 | |||
| 22472 | El valor predeterminado es @samp{0}. | ||
| 22473 | |||
| 22474 | @end deftypevr | ||
| 22475 | |||
| 22476 | @deftypevr {@code{cgit-configuration} parameter} boolean case-sensitive-sort? | ||
| 22477 | Sort items in the repo list case sensitively. | ||
| 22478 | |||
| 22479 | Defaults to @samp{#t}. | ||
| 22480 | |||
| 22481 | @end deftypevr | ||
| 22482 | |||
| 22483 | @deftypevr {@code{cgit-configuration} parameter} list clone-prefix | ||
| 22484 | List of common prefixes which, when combined with a repository URL, | ||
| 22485 | generates valid clone URLs for the repository. | ||
| 22486 | |||
| 22487 | Defaults to @samp{()}. | ||
| 22488 | |||
| 22489 | @end deftypevr | ||
| 22490 | |||
| 22491 | @deftypevr {@code{cgit-configuration} parameter} list clone-url | ||
| 22492 | List of @code{clone-url} templates. | ||
| 22493 | |||
| 22494 | Defaults to @samp{()}. | ||
| 22495 | |||
| 22496 | @end deftypevr | ||
| 22497 | |||
| 22498 | @deftypevr {@code{cgit-configuration} parameter} file-object commit-filter | ||
| 22499 | Command which will be invoked to format commit messages. | ||
| 22500 | |||
| 22501 | El valor predeterminado es @samp{""}. | ||
| 22502 | |||
| 22503 | @end deftypevr | ||
| 22504 | |||
| 22505 | @deftypevr {@code{cgit-configuration} parameter} string commit-sort | ||
| 22506 | Flag which, when set to @samp{date}, enables strict date ordering in the | ||
| 22507 | commit log, and when set to @samp{topo} enables strict topological ordering. | ||
| 22508 | |||
| 22509 | Defaults to @samp{"git log"}. | ||
| 22510 | |||
| 22511 | @end deftypevr | ||
| 22512 | |||
| 22513 | @deftypevr {@code{cgit-configuration} parameter} file-object css | ||
| 22514 | URL which specifies the css document to include in all cgit pages. | ||
| 22515 | |||
| 22516 | Defaults to @samp{"/share/cgit/cgit.css"}. | ||
| 22517 | |||
| 22518 | @end deftypevr | ||
| 22519 | |||
| 22520 | @deftypevr {@code{cgit-configuration} parameter} file-object email-filter | ||
| 22521 | Specifies a command which will be invoked to format names and email address | ||
| 22522 | of committers, authors, and taggers, as represented in various places | ||
| 22523 | throughout the cgit interface. | ||
| 22524 | |||
| 22525 | El valor predeterminado es @samp{""}. | ||
| 22526 | |||
| 22527 | @end deftypevr | ||
| 22528 | |||
| 22529 | @deftypevr {@code{cgit-configuration} parameter} boolean embedded? | ||
| 22530 | Flag which, when set to @samp{#t}, will make cgit generate a HTML fragment | ||
| 22531 | suitable for embedding in other HTML pages. | ||
| 22532 | |||
| 22533 | El valor predeterminado es @samp{#f} | ||
| 22534 | |||
| 22535 | @end deftypevr | ||
| 22536 | |||
| 22537 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-commit-graph? | ||
| 22538 | Flag which, when set to @samp{#t}, will make cgit print an ASCII-art commit | ||
| 22539 | history graph to the left of the commit messages in the repository log page. | ||
| 22540 | |||
| 22541 | El valor predeterminado es @samp{#f} | ||
| 22542 | |||
| 22543 | @end deftypevr | ||
| 22544 | |||
| 22545 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-filter-overrides? | ||
| 22546 | Flag which, when set to @samp{#t}, allows all filter settings to be | ||
| 22547 | overridden in repository-specific cgitrc files. | ||
| 22548 | |||
| 22549 | El valor predeterminado es @samp{#f} | ||
| 22550 | |||
| 22551 | @end deftypevr | ||
| 22552 | |||
| 22553 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-follow-links? | ||
| 22554 | Flag which, when set to @samp{#t}, allows users to follow a file in the log | ||
| 22555 | view. | ||
| 22556 | |||
| 22557 | El valor predeterminado es @samp{#f} | ||
| 22558 | |||
| 22559 | @end deftypevr | ||
| 22560 | |||
| 22561 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-http-clone? | ||
| 22562 | If set to @samp{#t}, cgit will act as an dumb HTTP endpoint for Git clones. | ||
| 22563 | |||
| 22564 | Defaults to @samp{#t}. | ||
| 22565 | |||
| 22566 | @end deftypevr | ||
| 22567 | |||
| 22568 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-links? | ||
| 22569 | Flag which, when set to @samp{#t}, will make cgit generate extra links | ||
| 22570 | "summary", "commit", "tree" for each repo in the repository index. | ||
| 22571 | |||
| 22572 | El valor predeterminado es @samp{#f} | ||
| 22573 | |||
| 22574 | @end deftypevr | ||
| 22575 | |||
| 22576 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-index-owner? | ||
| 22577 | Flag which, when set to @samp{#t}, will make cgit display the owner of each | ||
| 22578 | repo in the repository index. | ||
| 22579 | |||
| 22580 | Defaults to @samp{#t}. | ||
| 22581 | |||
| 22582 | @end deftypevr | ||
| 22583 | |||
| 22584 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-filecount? | ||
| 22585 | Flag which, when set to @samp{#t}, will make cgit print the number of | ||
| 22586 | modified files for each commit on the repository log page. | ||
| 22587 | |||
| 22588 | El valor predeterminado es @samp{#f} | ||
| 22589 | |||
| 22590 | @end deftypevr | ||
| 22591 | |||
| 22592 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-log-linecount? | ||
| 22593 | Flag which, when set to @samp{#t}, will make cgit print the number of added | ||
| 22594 | and removed lines for each commit on the repository log page. | ||
| 22595 | |||
| 22596 | El valor predeterminado es @samp{#f} | ||
| 22597 | |||
| 22598 | @end deftypevr | ||
| 22599 | |||
| 22600 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-remote-branches? | ||
| 22601 | Flag which, when set to @code{#t}, will make cgit display remote branches in | ||
| 22602 | the summary and refs views. | ||
| 22603 | |||
| 22604 | El valor predeterminado es @samp{#f} | ||
| 22605 | |||
| 22606 | @end deftypevr | ||
| 22607 | |||
| 22608 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-subject-links? | ||
| 22609 | Flag which, when set to @code{1}, will make cgit use the subject of the | ||
| 22610 | parent commit as link text when generating links to parent commits in commit | ||
| 22611 | view. | ||
| 22612 | |||
| 22613 | El valor predeterminado es @samp{#f} | ||
| 22614 | |||
| 22615 | @end deftypevr | ||
| 22616 | |||
| 22617 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-html-serving? | ||
| 22618 | Flag which, when set to @samp{#t}, will make cgit use the subject of the | ||
| 22619 | parent commit as link text when generating links to parent commits in commit | ||
| 22620 | view. | ||
| 22621 | |||
| 22622 | El valor predeterminado es @samp{#f} | ||
| 22623 | |||
| 22624 | @end deftypevr | ||
| 22625 | |||
| 22626 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-tree-linenumbers? | ||
| 22627 | Flag which, when set to @samp{#t}, will make cgit generate linenumber links | ||
| 22628 | for plaintext blobs printed in the tree view. | ||
| 22629 | |||
| 22630 | Defaults to @samp{#t}. | ||
| 22631 | |||
| 22632 | @end deftypevr | ||
| 22633 | |||
| 22634 | @deftypevr {@code{cgit-configuration} parameter} boolean enable-git-config? | ||
| 22635 | Flag which, when set to @samp{#f}, will allow cgit to use Git config to set | ||
| 22636 | any repo specific settings. | ||
| 22637 | |||
| 22638 | El valor predeterminado es @samp{#f} | ||
| 22639 | |||
| 22640 | @end deftypevr | ||
| 22641 | |||
| 22642 | @deftypevr {@code{cgit-configuration} parameter} file-object favicon | ||
| 22643 | URL used as link to a shortcut icon for cgit. | ||
| 22644 | |||
| 22645 | Defaults to @samp{"/favicon.ico"}. | ||
| 22646 | |||
| 22647 | @end deftypevr | ||
| 22648 | |||
| 22649 | @deftypevr {@code{cgit-configuration} parameter} string footer | ||
| 22650 | The content of the file specified with this option will be included verbatim | ||
| 22651 | at the bottom of all pages (i.e.@: it replaces the standard "generated | ||
| 22652 | by..."@: message). | ||
| 22653 | |||
| 22654 | El valor predeterminado es @samp{""}. | ||
| 22655 | |||
| 22656 | @end deftypevr | ||
| 22657 | |||
| 22658 | @deftypevr {@code{cgit-configuration} parameter} string head-include | ||
| 22659 | The content of the file specified with this option will be included verbatim | ||
| 22660 | in the HTML HEAD section on all pages. | ||
| 22661 | |||
| 22662 | El valor predeterminado es @samp{""}. | ||
| 22663 | |||
| 22664 | @end deftypevr | ||
| 22665 | |||
| 22666 | @deftypevr {@code{cgit-configuration} parameter} string header | ||
| 22667 | The content of the file specified with this option will be included verbatim | ||
| 22668 | at the top of all pages. | ||
| 22669 | |||
| 22670 | El valor predeterminado es @samp{""}. | ||
| 22671 | |||
| 22672 | @end deftypevr | ||
| 22673 | |||
| 22674 | @deftypevr {@code{cgit-configuration} parameter} file-object include | ||
| 22675 | Name of a configfile to include before the rest of the current config- file | ||
| 22676 | is parsed. | ||
| 22677 | |||
| 22678 | El valor predeterminado es @samp{""}. | ||
| 22679 | |||
| 22680 | @end deftypevr | ||
| 22681 | |||
| 22682 | @deftypevr {@code{cgit-configuration} parameter} string index-header | ||
| 22683 | The content of the file specified with this option will be included verbatim | ||
| 22684 | above the repository index. | ||
| 22685 | |||
| 22686 | El valor predeterminado es @samp{""}. | ||
| 22687 | |||
| 22688 | @end deftypevr | ||
| 22689 | |||
| 22690 | @deftypevr {@code{cgit-configuration} parameter} string index-info | ||
| 22691 | The content of the file specified with this option will be included verbatim | ||
| 22692 | below the heading on the repository index page. | ||
| 22693 | |||
| 22694 | El valor predeterminado es @samp{""}. | ||
| 22695 | |||
| 22696 | @end deftypevr | ||
| 22697 | |||
| 22698 | @deftypevr {@code{cgit-configuration} parameter} boolean local-time? | ||
| 22699 | Flag which, if set to @samp{#t}, makes cgit print commit and tag times in | ||
| 22700 | the servers timezone. | ||
| 22701 | |||
| 22702 | El valor predeterminado es @samp{#f} | ||
| 22703 | |||
| 22704 | @end deftypevr | ||
| 22705 | |||
| 22706 | @deftypevr {@code{cgit-configuration} parameter} file-object logo | ||
| 22707 | URL which specifies the source of an image which will be used as a logo on | ||
| 22708 | all cgit pages. | ||
| 22709 | |||
| 22710 | Defaults to @samp{"/share/cgit/cgit.png"}. | ||
| 22711 | |||
| 22712 | @end deftypevr | ||
| 22713 | |||
| 22714 | @deftypevr {@code{cgit-configuration} parameter} string logo-link | ||
| 22715 | URL loaded when clicking on the cgit logo image. | ||
| 22716 | |||
| 22717 | El valor predeterminado es @samp{""}. | ||
| 22718 | |||
| 22719 | @end deftypevr | ||
| 22720 | |||
| 22721 | @deftypevr {@code{cgit-configuration} parameter} file-object owner-filter | ||
| 22722 | Command which will be invoked to format the Owner column of the main page. | ||
| 22723 | |||
| 22724 | El valor predeterminado es @samp{""}. | ||
| 22725 | |||
| 22726 | @end deftypevr | ||
| 22727 | |||
| 22728 | @deftypevr {@code{cgit-configuration} parameter} integer max-atom-items | ||
| 22729 | Number of items to display in atom feeds view. | ||
| 22730 | |||
| 22731 | Defaults to @samp{10}. | ||
| 22732 | |||
| 22733 | @end deftypevr | ||
| 22734 | |||
| 22735 | @deftypevr {@code{cgit-configuration} parameter} integer max-commit-count | ||
| 22736 | Number of entries to list per page in "log" view. | ||
| 22737 | |||
| 22738 | Defaults to @samp{50}. | ||
| 22739 | |||
| 22740 | @end deftypevr | ||
| 22741 | |||
| 22742 | @deftypevr {@code{cgit-configuration} parameter} integer max-message-length | ||
| 22743 | Number of commit message characters to display in "log" view. | ||
| 22744 | |||
| 22745 | Defaults to @samp{80}. | ||
| 22746 | |||
| 22747 | @end deftypevr | ||
| 22748 | |||
| 22749 | @deftypevr {@code{cgit-configuration} parameter} integer max-repo-count | ||
| 22750 | Specifies the number of entries to list per page on the repository index | ||
| 22751 | page. | ||
| 22752 | |||
| 22753 | Defaults to @samp{50}. | ||
| 22754 | |||
| 22755 | @end deftypevr | ||
| 22756 | |||
| 22757 | @deftypevr {@code{cgit-configuration} parameter} integer max-repodesc-length | ||
| 22758 | Specifies the maximum number of repo description characters to display on | ||
| 22759 | the repository index page. | ||
| 22760 | |||
| 22761 | Defaults to @samp{80}. | ||
| 22762 | |||
| 22763 | @end deftypevr | ||
| 22764 | |||
| 22765 | @deftypevr {@code{cgit-configuration} parameter} integer max-blob-size | ||
| 22766 | Specifies the maximum size of a blob to display HTML for in KBytes. | ||
| 22767 | |||
| 22768 | El valor predeterminado es @samp{0}. | ||
| 22769 | |||
| 22770 | @end deftypevr | ||
| 22771 | |||
| 22772 | @deftypevr {@code{cgit-configuration} parameter} string max-stats | ||
| 22773 | Maximum statistics period. Valid values are @samp{week},@samp{month}, | ||
| 22774 | @samp{quarter} and @samp{year}. | ||
| 22775 | |||
| 22776 | El valor predeterminado es @samp{""}. | ||
| 22777 | |||
| 22778 | @end deftypevr | ||
| 22779 | |||
| 22780 | @deftypevr {@code{cgit-configuration} parameter} mimetype-alist mimetype | ||
| 22781 | Mimetype for the specified filename extension. | ||
| 22782 | |||
| 22783 | Defaults 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 | ||
| 22790 | Specifies the file to use for automatic mimetype lookup. | ||
| 22791 | |||
| 22792 | El valor predeterminado es @samp{""}. | ||
| 22793 | |||
| 22794 | @end deftypevr | ||
| 22795 | |||
| 22796 | @deftypevr {@code{cgit-configuration} parameter} string module-link | ||
| 22797 | Text which will be used as the formatstring for a hyperlink when a submodule | ||
| 22798 | is printed in a directory listing. | ||
| 22799 | |||
| 22800 | El valor predeterminado es @samp{""}. | ||
| 22801 | |||
| 22802 | @end deftypevr | ||
| 22803 | |||
| 22804 | @deftypevr {@code{cgit-configuration} parameter} boolean nocache? | ||
| 22805 | If set to the value @samp{#t} caching will be disabled. | ||
| 22806 | |||
| 22807 | El valor predeterminado es @samp{#f} | ||
| 22808 | |||
| 22809 | @end deftypevr | ||
| 22810 | |||
| 22811 | @deftypevr {@code{cgit-configuration} parameter} boolean noplainemail? | ||
| 22812 | If set to @samp{#t} showing full author email addresses will be disabled. | ||
| 22813 | |||
| 22814 | El valor predeterminado es @samp{#f} | ||
| 22815 | |||
| 22816 | @end deftypevr | ||
| 22817 | |||
| 22818 | @deftypevr {@code{cgit-configuration} parameter} boolean noheader? | ||
| 22819 | Flag which, when set to @samp{#t}, will make cgit omit the standard header | ||
| 22820 | on all pages. | ||
| 22821 | |||
| 22822 | El valor predeterminado es @samp{#f} | ||
| 22823 | |||
| 22824 | @end deftypevr | ||
| 22825 | |||
| 22826 | @deftypevr {@code{cgit-configuration} parameter} project-list project-list | ||
| 22827 | A list of subdirectories inside of @code{repository-directory}, relative to | ||
| 22828 | it, that should loaded as Git repositories. An empty list means that all | ||
| 22829 | subdirectories will be loaded. | ||
| 22830 | |||
| 22831 | Defaults to @samp{()}. | ||
| 22832 | |||
| 22833 | @end deftypevr | ||
| 22834 | |||
| 22835 | @deftypevr {@code{cgit-configuration} parameter} file-object readme | ||
| 22836 | Text which will be used as default value for @code{cgit-repo-readme}. | ||
| 22837 | |||
| 22838 | El valor predeterminado es @samp{""}. | ||
| 22839 | |||
| 22840 | @end deftypevr | ||
| 22841 | |||
| 22842 | @deftypevr {@code{cgit-configuration} parameter} boolean remove-suffix? | ||
| 22843 | If set to @code{#t} and @code{repository-directory} is enabled, if any | ||
| 22844 | repositories are found with a suffix of @code{.git}, this suffix will be | ||
| 22845 | removed for the URL and name. | ||
| 22846 | |||
| 22847 | El valor predeterminado es @samp{#f} | ||
| 22848 | |||
| 22849 | @end deftypevr | ||
| 22850 | |||
| 22851 | @deftypevr {@code{cgit-configuration} parameter} integer renamelimit | ||
| 22852 | Maximum number of files to consider when detecting renames. | ||
| 22853 | |||
| 22854 | Defaults to @samp{-1}. | ||
| 22855 | |||
| 22856 | @end deftypevr | ||
| 22857 | |||
| 22858 | @deftypevr {@code{cgit-configuration} parameter} string repository-sort | ||
| 22859 | The way in which repositories in each section are sorted. | ||
| 22860 | |||
| 22861 | El valor predeterminado es @samp{""}. | ||
| 22862 | |||
| 22863 | @end deftypevr | ||
| 22864 | |||
| 22865 | @deftypevr {@code{cgit-configuration} parameter} robots-list robots | ||
| 22866 | Text used as content for the @code{robots} meta-tag. | ||
| 22867 | |||
| 22868 | Defaults to @samp{("noindex" "nofollow")}. | ||
| 22869 | |||
| 22870 | @end deftypevr | ||
| 22871 | |||
| 22872 | @deftypevr {@code{cgit-configuration} parameter} string root-desc | ||
| 22873 | Text printed below the heading on the repository index page. | ||
| 22874 | |||
| 22875 | Defaults to @samp{"a fast webinterface for the git dscm"}. | ||
| 22876 | |||
| 22877 | @end deftypevr | ||
| 22878 | |||
| 22879 | @deftypevr {@code{cgit-configuration} parameter} string root-readme | ||
| 22880 | The content of the file specified with this option will be included verbatim | ||
| 22881 | below thef "about" link on the repository index page. | ||
| 22882 | |||
| 22883 | El valor predeterminado es @samp{""}. | ||
| 22884 | |||
| 22885 | @end deftypevr | ||
| 22886 | |||
| 22887 | @deftypevr {@code{cgit-configuration} parameter} string root-title | ||
| 22888 | Text printed as heading on the repository index page. | ||
| 22889 | |||
| 22890 | El valor predeterminado es @samp{""}. | ||
| 22891 | |||
| 22892 | @end deftypevr | ||
| 22893 | |||
| 22894 | @deftypevr {@code{cgit-configuration} parameter} boolean scan-hidden-path | ||
| 22895 | If set to @samp{#t} and repository-directory is enabled, | ||
| 22896 | repository-directory will recurse into directories whose name starts with a | ||
| 22897 | period. Otherwise, repository-directory will stay away from such | ||
| 22898 | directories, considered as "hidden". Note that this does not apply to the | ||
| 22899 | ".git" directory in non-bare repos. | ||
| 22900 | |||
| 22901 | El valor predeterminado es @samp{#f} | ||
| 22902 | |||
| 22903 | @end deftypevr | ||
| 22904 | |||
| 22905 | @deftypevr {@code{cgit-configuration} parameter} list snapshots | ||
| 22906 | Text which specifies the default set of snapshot formats that cgit generates | ||
| 22907 | links for. | ||
| 22908 | |||
| 22909 | Defaults to @samp{()}. | ||
| 22910 | |||
| 22911 | @end deftypevr | ||
| 22912 | |||
| 22913 | @deftypevr {@code{cgit-configuration} parameter} repository-directory repository-directory | ||
| 22914 | Name of the directory to scan for repositories (represents | ||
| 22915 | @code{scan-path}). | ||
| 22916 | |||
| 22917 | Defaults to @samp{"/srv/git"}. | ||
| 22918 | |||
| 22919 | @end deftypevr | ||
| 22920 | |||
| 22921 | @deftypevr {@code{cgit-configuration} parameter} string section | ||
| 22922 | The name of the current repository section - all repositories defined after | ||
| 22923 | this option will inherit the current section name. | ||
| 22924 | |||
| 22925 | El valor predeterminado es @samp{""}. | ||
| 22926 | |||
| 22927 | @end deftypevr | ||
| 22928 | |||
| 22929 | @deftypevr {@code{cgit-configuration} parameter} string section-sort | ||
| 22930 | Flag which, when set to @samp{1}, will sort the sections on the repository | ||
| 22931 | listing by name. | ||
| 22932 | |||
| 22933 | El valor predeterminado es @samp{""}. | ||
| 22934 | |||
| 22935 | @end deftypevr | ||
| 22936 | |||
| 22937 | @deftypevr {@code{cgit-configuration} parameter} integer section-from-path | ||
| 22938 | A number which, if defined prior to repository-directory, specifies how many | ||
| 22939 | path elements from each repo path to use as a default section name. | ||
| 22940 | |||
| 22941 | El valor predeterminado es @samp{0}. | ||
| 22942 | |||
| 22943 | @end deftypevr | ||
| 22944 | |||
| 22945 | @deftypevr {@code{cgit-configuration} parameter} boolean side-by-side-diffs? | ||
| 22946 | If set to @samp{#t} shows side-by-side diffs instead of unidiffs per | ||
| 22947 | default. | ||
| 22948 | |||
| 22949 | El valor predeterminado es @samp{#f} | ||
| 22950 | |||
| 22951 | @end deftypevr | ||
| 22952 | |||
| 22953 | @deftypevr {@code{cgit-configuration} parameter} file-object source-filter | ||
| 22954 | Specifies a command which will be invoked to format plaintext blobs in the | ||
| 22955 | tree view. | ||
| 22956 | |||
| 22957 | El valor predeterminado es @samp{""}. | ||
| 22958 | |||
| 22959 | @end deftypevr | ||
| 22960 | |||
| 22961 | @deftypevr {@code{cgit-configuration} parameter} integer summary-branches | ||
| 22962 | Specifies the number of branches to display in the repository "summary" | ||
| 22963 | view. | ||
| 22964 | |||
| 22965 | Defaults to @samp{10}. | ||
| 22966 | |||
| 22967 | @end deftypevr | ||
| 22968 | |||
| 22969 | @deftypevr {@code{cgit-configuration} parameter} integer summary-log | ||
| 22970 | Specifies the number of log entries to display in the repository "summary" | ||
| 22971 | view. | ||
| 22972 | |||
| 22973 | Defaults to @samp{10}. | ||
| 22974 | |||
| 22975 | @end deftypevr | ||
| 22976 | |||
| 22977 | @deftypevr {@code{cgit-configuration} parameter} integer summary-tags | ||
| 22978 | Specifies the number of tags to display in the repository "summary" view. | ||
| 22979 | |||
| 22980 | Defaults to @samp{10}. | ||
| 22981 | |||
| 22982 | @end deftypevr | ||
| 22983 | |||
| 22984 | @deftypevr {@code{cgit-configuration} parameter} string strict-export | ||
| 22985 | Filename which, if specified, needs to be present within the repository for | ||
| 22986 | cgit to allow access to that repository. | ||
| 22987 | |||
| 22988 | El valor predeterminado es @samp{""}. | ||
| 22989 | |||
| 22990 | @end deftypevr | ||
| 22991 | |||
| 22992 | @deftypevr {@code{cgit-configuration} parameter} string virtual-root | ||
| 22993 | URL which, if specified, will be used as root for all cgit links. | ||
| 22994 | |||
| 22995 | Defaults to @samp{"/"}. | ||
| 22996 | |||
| 22997 | @end deftypevr | ||
| 22998 | |||
| 22999 | @deftypevr {@code{cgit-configuration} parameter} repository-cgit-configuration-list repositories | ||
| 23000 | A list of @dfn{cgit-repo} records to use with config. | ||
| 23001 | |||
| 23002 | Defaults to @samp{()}. | ||
| 23003 | |||
| 23004 | Available @code{repository-cgit-configuration} fields are: | ||
| 23005 | |||
| 23006 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-list snapshots | ||
| 23007 | A mask of snapshot formats for this repo that cgit generates links for, | ||
| 23008 | restricted by the global @code{snapshots} setting. | ||
| 23009 | |||
| 23010 | Defaults to @samp{()}. | ||
| 23011 | |||
| 23012 | @end deftypevr | ||
| 23013 | |||
| 23014 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object source-filter | ||
| 23015 | Override the default @code{source-filter}. | ||
| 23016 | |||
| 23017 | El valor predeterminado es @samp{""}. | ||
| 23018 | |||
| 23019 | @end deftypevr | ||
| 23020 | |||
| 23021 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string url | ||
| 23022 | The relative URL used to access the repository. | ||
| 23023 | |||
| 23024 | El valor predeterminado es @samp{""}. | ||
| 23025 | |||
| 23026 | @end deftypevr | ||
| 23027 | |||
| 23028 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object about-filter | ||
| 23029 | Override the default @code{about-filter}. | ||
| 23030 | |||
| 23031 | El valor predeterminado es @samp{""}. | ||
| 23032 | |||
| 23033 | @end deftypevr | ||
| 23034 | |||
| 23035 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string branch-sort | ||
| 23036 | Flag which, when set to @samp{age}, enables date ordering in the branch ref | ||
| 23037 | list, and when set to @samp{name} enables ordering by branch name. | ||
| 23038 | |||
| 23039 | El valor predeterminado es @samp{""}. | ||
| 23040 | |||
| 23041 | @end deftypevr | ||
| 23042 | |||
| 23043 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-list clone-url | ||
| 23044 | A list of URLs which can be used to clone repo. | ||
| 23045 | |||
| 23046 | Defaults to @samp{()}. | ||
| 23047 | |||
| 23048 | @end deftypevr | ||
| 23049 | |||
| 23050 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object commit-filter | ||
| 23051 | Override the default @code{commit-filter}. | ||
| 23052 | |||
| 23053 | El valor predeterminado es @samp{""}. | ||
| 23054 | |||
| 23055 | @end deftypevr | ||
| 23056 | |||
| 23057 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string commit-sort | ||
| 23058 | Flag which, when set to @samp{date}, enables strict date ordering in the | ||
| 23059 | commit log, and when set to @samp{topo} enables strict topological ordering. | ||
| 23060 | |||
| 23061 | El valor predeterminado es @samp{""}. | ||
| 23062 | |||
| 23063 | @end deftypevr | ||
| 23064 | |||
| 23065 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string defbranch | ||
| 23066 | The name of the default branch for this repository. If no such branch | ||
| 23067 | exists in the repository, the first branch name (when sorted) is used as | ||
| 23068 | default instead. By default branch pointed to by HEAD, or "master" if there | ||
| 23069 | is no suitable HEAD. | ||
| 23070 | |||
| 23071 | El valor predeterminado es @samp{""}. | ||
| 23072 | |||
| 23073 | @end deftypevr | ||
| 23074 | |||
| 23075 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string desc | ||
| 23076 | The value to show as repository description. | ||
| 23077 | |||
| 23078 | El valor predeterminado es @samp{""}. | ||
| 23079 | |||
| 23080 | @end deftypevr | ||
| 23081 | |||
| 23082 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string homepage | ||
| 23083 | The value to show as repository homepage. | ||
| 23084 | |||
| 23085 | El valor predeterminado es @samp{""}. | ||
| 23086 | |||
| 23087 | @end deftypevr | ||
| 23088 | |||
| 23089 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object email-filter | ||
| 23090 | Override the default @code{email-filter}. | ||
| 23091 | |||
| 23092 | El valor predeterminado es @samp{""}. | ||
| 23093 | |||
| 23094 | @end deftypevr | ||
| 23095 | |||
| 23096 | @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-commit-graph? | ||
| 23097 | A flag which can be used to disable the global setting | ||
| 23098 | @code{enable-commit-graph?}. | ||
| 23099 | |||
| 23100 | Defaults to @samp{disabled}. | ||
| 23101 | |||
| 23102 | @end deftypevr | ||
| 23103 | |||
| 23104 | @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-filecount? | ||
| 23105 | A flag which can be used to disable the global setting | ||
| 23106 | @code{enable-log-filecount?}. | ||
| 23107 | |||
| 23108 | Defaults to @samp{disabled}. | ||
| 23109 | |||
| 23110 | @end deftypevr | ||
| 23111 | |||
| 23112 | @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-log-linecount? | ||
| 23113 | A flag which can be used to disable the global setting | ||
| 23114 | @code{enable-log-linecount?}. | ||
| 23115 | |||
| 23116 | Defaults to @samp{disabled}. | ||
| 23117 | |||
| 23118 | @end deftypevr | ||
| 23119 | |||
| 23120 | @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-remote-branches? | ||
| 23121 | Flag which, when set to @code{#t}, will make cgit display remote branches in | ||
| 23122 | the summary and refs views. | ||
| 23123 | |||
| 23124 | Defaults to @samp{disabled}. | ||
| 23125 | |||
| 23126 | @end deftypevr | ||
| 23127 | |||
| 23128 | @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-subject-links? | ||
| 23129 | A flag which can be used to override the global setting | ||
| 23130 | @code{enable-subject-links?}. | ||
| 23131 | |||
| 23132 | Defaults to @samp{disabled}. | ||
| 23133 | |||
| 23134 | @end deftypevr | ||
| 23135 | |||
| 23136 | @deftypevr {@code{repository-cgit-configuration} parameter} maybe-repo-boolean enable-html-serving? | ||
| 23137 | A flag which can be used to override the global setting | ||
| 23138 | @code{enable-html-serving?}. | ||
| 23139 | |||
| 23140 | Defaults to @samp{disabled}. | ||
| 23141 | |||
| 23142 | @end deftypevr | ||
| 23143 | |||
| 23144 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean hide? | ||
| 23145 | Flag which, when set to @code{#t}, hides the repository from the repository | ||
| 23146 | index. | ||
| 23147 | |||
| 23148 | El valor predeterminado es @samp{#f} | ||
| 23149 | |||
| 23150 | @end deftypevr | ||
| 23151 | |||
| 23152 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-boolean ignore? | ||
| 23153 | Flag which, when set to @samp{#t}, ignores the repository. | ||
| 23154 | |||
| 23155 | El valor predeterminado es @samp{#f} | ||
| 23156 | |||
| 23157 | @end deftypevr | ||
| 23158 | |||
| 23159 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object logo | ||
| 23160 | URL which specifies the source of an image which will be used as a logo on | ||
| 23161 | this repo’s pages. | ||
| 23162 | |||
| 23163 | El valor predeterminado es @samp{""}. | ||
| 23164 | |||
| 23165 | @end deftypevr | ||
| 23166 | |||
| 23167 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string logo-link | ||
| 23168 | URL loaded when clicking on the cgit logo image. | ||
| 23169 | |||
| 23170 | El valor predeterminado es @samp{""}. | ||
| 23171 | |||
| 23172 | @end deftypevr | ||
| 23173 | |||
| 23174 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-file-object owner-filter | ||
| 23175 | Override the default @code{owner-filter}. | ||
| 23176 | |||
| 23177 | El valor predeterminado es @samp{""}. | ||
| 23178 | |||
| 23179 | @end deftypevr | ||
| 23180 | |||
| 23181 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string module-link | ||
| 23182 | Text which will be used as the formatstring for a hyperlink when a submodule | ||
| 23183 | is printed in a directory listing. The arguments for the formatstring are | ||
| 23184 | the path and SHA1 of the submodule commit. | ||
| 23185 | |||
| 23186 | El valor predeterminado es @samp{""}. | ||
| 23187 | |||
| 23188 | @end deftypevr | ||
| 23189 | |||
| 23190 | @deftypevr {@code{repository-cgit-configuration} parameter} module-link-path module-link-path | ||
| 23191 | Text which will be used as the formatstring for a hyperlink when a submodule | ||
| 23192 | with the specified subdirectory path is printed in a directory listing. | ||
| 23193 | |||
| 23194 | Defaults to @samp{()}. | ||
| 23195 | |||
| 23196 | @end deftypevr | ||
| 23197 | |||
| 23198 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string max-stats | ||
| 23199 | Override the default maximum statistics period. | ||
| 23200 | |||
| 23201 | El valor predeterminado es @samp{""}. | ||
| 23202 | |||
| 23203 | @end deftypevr | ||
| 23204 | |||
| 23205 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string name | ||
| 23206 | El valor a mostrar como nombre del repositorio. | ||
| 23207 | |||
| 23208 | El valor predeterminado es @samp{""}. | ||
| 23209 | |||
| 23210 | @end deftypevr | ||
| 23211 | |||
| 23212 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string owner | ||
| 23213 | A value used to identify the owner of the repository. | ||
| 23214 | |||
| 23215 | El valor predeterminado es @samp{""}. | ||
| 23216 | |||
| 23217 | @end deftypevr | ||
| 23218 | |||
| 23219 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string path | ||
| 23220 | La ruta absoluta al directorio del repositorio. | ||
| 23221 | |||
| 23222 | El valor predeterminado es @samp{""}. | ||
| 23223 | |||
| 23224 | @end deftypevr | ||
| 23225 | |||
| 23226 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string readme | ||
| 23227 | A path (relative to repo) which specifies a file to include verbatim as the | ||
| 23228 | "About" page for this repo. | ||
| 23229 | |||
| 23230 | El valor predeterminado es @samp{""}. | ||
| 23231 | |||
| 23232 | @end deftypevr | ||
| 23233 | |||
| 23234 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-string section | ||
| 23235 | The name of the current repository section - all repositories defined after | ||
| 23236 | this option will inherit the current section name. | ||
| 23237 | |||
| 23238 | El valor predeterminado es @samp{""}. | ||
| 23239 | |||
| 23240 | @end deftypevr | ||
| 23241 | |||
| 23242 | @deftypevr {@code{repository-cgit-configuration} parameter} repo-list extra-options | ||
| 23243 | Extra options will be appended to cgitrc file. | ||
| 23244 | |||
| 23245 | Defaults to @samp{()}. | ||
| 23246 | |||
| 23247 | @end deftypevr | ||
| 23248 | |||
| 23249 | @end deftypevr | ||
| 23250 | |||
| 23251 | @deftypevr {@code{cgit-configuration} parameter} list extra-options | ||
| 23252 | Extra options will be appended to cgitrc file. | ||
| 23253 | |||
| 23254 | Defaults to @samp{()}. | ||
| 23255 | |||
| 23256 | @end deftypevr | ||
| 23257 | |||
| 23258 | |||
| 23259 | @c %end of fragment | ||
| 23260 | |||
| 23261 | However, it could be that you just want to get a @code{cgitrc} up and | ||
| 23262 | running. In that case, you can pass an @code{opaque-cgit-configuration} as | ||
| 23263 | a record to @code{cgit-service-type}. As its name indicates, an opaque | ||
| 23264 | configuration does not have easy reflective capabilities. | ||
| 23265 | |||
| 23266 | Available @code{opaque-cgit-configuration} fields are: | ||
| 23267 | |||
| 23268 | @deftypevr {@code{opaque-cgit-configuration} parameter} package cgit | ||
| 23269 | El paquete cgit. | ||
| 23270 | @end deftypevr | ||
| 23271 | |||
| 23272 | @deftypevr {@code{opaque-cgit-configuration} parameter} string string | ||
| 23273 | The contents of the @code{cgitrc}, as a string. | ||
| 23274 | @end deftypevr | ||
| 23275 | |||
| 23276 | For example, if your @code{cgitrc} is just the empty string, you could | ||
| 23277 | instantiate 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 | ||
| 23290 | repositories on a central server. | ||
| 23291 | |||
| 23292 | Gitolite can handle multiple repositories and users, and supports flexible | ||
| 23293 | configuration of the permissions for the users on the repositories. | ||
| 23294 | |||
| 23295 | The following example will configure Gitolite using the default @code{git} | ||
| 23296 | user, 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 | |||
| 23306 | Gitolite is configured through a special admin repository which you can | ||
| 23307 | clone, for example, if you setup Gitolite on @code{example.com}, you would | ||
| 23308 | run the following command to clone the admin repository. | ||
| 23309 | |||
| 23310 | @example | ||
| 23311 | git clone git@@example.com:gitolite-admin | ||
| 23312 | @end example | ||
| 23313 | |||
| 23314 | When the Gitolite service is activated, the provided @code{admin-pubkey} | ||
| 23315 | will be inserted in to the @file{keydir} directory in the gitolite-admin | ||
| 23316 | repository. If this results in a change in the repository, it will be | ||
| 23317 | committed using the message ``gitolite setup by GNU Guix''. | ||
| 23318 | |||
| 23319 | @deftp {Tipo de datos} gitolite-configuration | ||
| 23320 | Tipo de datos que representa la configuración de | ||
| 23321 | @code{gitolite-service-type}. | ||
| 23322 | |||
| 23323 | @table @asis | ||
| 23324 | @item @code{package} (predeterminado: @var{gitolite}) | ||
| 23325 | Paquete Gitolite usado. | ||
| 23326 | |||
| 23327 | @item @code{user} (predeterminado: @var{git}) | ||
| 23328 | User to use for Gitolite. This will be user that you use when accessing | ||
| 23329 | Gitolite over SSH. | ||
| 23330 | |||
| 23331 | @item @code{group} (predeterminado: @var{git}) | ||
| 23332 | Grupo usado por Gitolite. | ||
| 23333 | |||
| 23334 | @item @code{home-directory} (predeterminado: @var{"/var/lib/gitolite"}) | ||
| 23335 | Directory in which to store the Gitolite configuration and repositories. | ||
| 23336 | |||
| 23337 | @item @code{rc-file} (predeterminado: @var{(gitolite-rc-file)}) | ||
| 23338 | A ``file-like'' object (@pxref{Expresiones-G, file-like objects}), | ||
| 23339 | representing the configuration for Gitolite. | ||
| 23340 | |||
| 23341 | @item @code{admin-pubkey} (predeterminada: @var{#f}) | ||
| 23342 | A ``file-like'' object (@pxref{Expresiones-G, file-like objects}) used to | ||
| 23343 | setup Gitolite. This will be inserted in to the @file{keydir} directory | ||
| 23344 | within the gitolite-admin repository. | ||
| 23345 | |||
| 23346 | To 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 | ||
| 23356 | Tipo de datos que representa el fichero RC de Gitolite. | ||
| 23357 | |||
| 23358 | @table @asis | ||
| 23359 | @item @code{umask} (predeterminada: @code{#o0077}) | ||
| 23360 | This controls the permissions Gitolite sets on the repositories and their | ||
| 23361 | contents. | ||
| 23362 | |||
| 23363 | A value like @code{#o0027} will give read access to the group used by | ||
| 23364 | Gitolite (by default: @code{git}). This is necessary when using Gitolite | ||
| 23365 | with software like cgit or gitweb. | ||
| 23366 | |||
| 23367 | @item @code{git-config-keys} (predeterminadas: @code{""}) | ||
| 23368 | Gitolite allows you to set git config values using the "config" | ||
| 23369 | keyword. This setting allows control over the config keys to accept. | ||
| 23370 | |||
| 23371 | @item @code{roles} (predeterminados: @code{'(("READERS" . 1) ("WRITERS" . ))}) | ||
| 23372 | Set 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")}) | ||
| 23375 | This 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 | ||
| 23387 | táctica, de fantasía y basado en turnos, con varias campañas de una | ||
| 23388 | jugadora, y partidas para múltiples jugadoras (tanto en red como | ||
| 23389 | localmente). | ||
| 23390 | |||
| 23391 | @defvar {Variable Scheme} wesnothd-service-type | ||
| 23392 | Service type for the wesnothd service. Its value must be a | ||
| 23393 | @code{wesnothd-configuration} object. To run wesnothd in the default | ||
| 23394 | configuration, 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 | ||
| 23402 | Tipo de datos que representa la configuración de @command{wesnothd}. | ||
| 23403 | |||
| 23404 | @table @asis | ||
| 23405 | @item @code{package} (predeterminado: @code{wesnoth-server}) | ||
| 23406 | El paquete del servidor wesnoth usado. | ||
| 23407 | |||
| 23408 | @item @code{port} (predeterminado: @code{15000}) | ||
| 23409 | Nú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 | |||
| 23419 | The @code{(gnu services authentication)} module provides a DBus service to | ||
| 23420 | read and identify fingerprints via a fingerprint sensor. | ||
| 23421 | |||
| 23422 | @defvr {Variable Scheme} fprintd-service-type | ||
| 23423 | The service type for @command{fprintd}, which provides the fingerprint | ||
| 23424 | reading 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 | |||
| 23434 | The @code{(gnu services sysctl)} provides a service to configure kernel | ||
| 23435 | parameters at boot. | ||
| 23436 | |||
| 23437 | @defvr {Variable Scheme} sysctl-service-type | ||
| 23438 | The service type for @command{sysctl}, which modifies kernel parameters | ||
| 23439 | under @file{/proc/sys/}. To enable IPv4 forwarding, it can be instantiated | ||
| 23440 | as: | ||
| 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 | ||
| 23450 | Tipo 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"}) | ||
| 23454 | El ejecutable @command{sysctl} usado. | ||
| 23455 | |||
| 23456 | @item @code{settings} (predeterminados: @code{'()}) | ||
| 23457 | An 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 | |||
| 23464 | The @code{(gnu services security-token)} module provides the following | ||
| 23465 | service to run @command{pcscd}, the PC/SC Smart Card Daemon. | ||
| 23466 | @command{pcscd} is the daemon program for pcsc-lite and the MuscleCard | ||
| 23467 | framework. It is a resource manager that coordinates communications with | ||
| 23468 | smart card readers, smart cards and cryptographic tokens that are connected | ||
| 23469 | to the system. | ||
| 23470 | |||
| 23471 | @defvr {Variable Scheme} pcscd-service-type | ||
| 23472 | Service type for the @command{pcscd} service. Its value must be a | ||
| 23473 | @code{pcscd-configuration} object. To run pcscd in the default | ||
| 23474 | configuration, 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 | ||
| 23482 | The data type representing the configuration of @command{pcscd}. | ||
| 23483 | |||
| 23484 | @table @asis | ||
| 23485 | @item @code{pcsc-lite} (predeterminado: @code{pcsc-lite}) | ||
| 23486 | The pcsc-lite package that provides pcscd. | ||
| 23487 | @item @code{usb-drivers} (predeterminado: @code{(list ccid)}) | ||
| 23488 | List of packages that provide USB drivers to pcscd. Drivers are expected to | ||
| 23489 | be 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 | |||
| 23496 | El 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 '()] | ||
| 23500 | Return a service that runs @url{http://www.lirc.org,LIRC}, a daemon that | ||
| 23501 | decodes infrared signals from remote controls. | ||
| 23502 | |||
| 23503 | Optionally, @var{device}, @var{driver} and @var{config-file} (configuration | ||
| 23504 | file name) may be specified. See @command{lircd} manual for details. | ||
| 23505 | |||
| 23506 | Finally, @var{extra-options} is a list of additional command-line options | ||
| 23507 | passed to @command{lircd}. | ||
| 23508 | @end deffn | ||
| 23509 | |||
| 23510 | @cindex spice | ||
| 23511 | @subsubheading Servicio Spice | ||
| 23512 | |||
| 23513 | El módulo @code{(gnu services spice)} proporciona el siguiente servicio. | ||
| 23514 | |||
| 23515 | @deffn {Procedimiento Scheme} spice-vdagent-service [#:spice-vdagent] | ||
| 23516 | Returns a service that runs @url{http://www.spice-space.org,VDAGENT}, a | ||
| 23517 | daemon that enables sharing the clipboard with a vm and setting the guest | ||
| 23518 | display 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 | ||
| 23526 | The @uref{https://linuxwacom.github.io/, inputattach} service allows you to | ||
| 23527 | use input devices such as Wacom tablets, touchscreens, or joysticks with the | ||
| 23528 | Xorg display server. | ||
| 23529 | |||
| 23530 | @deffn {Scheme Variable} inputattach-service-type | ||
| 23531 | Type of a service that runs @command{inputattach} on a device and dispatches | ||
| 23532 | events from it. | ||
| 23533 | @end deffn | ||
| 23534 | |||
| 23535 | @deftp {Data Type} inputattach-configuration | ||
| 23536 | @table @asis | ||
| 23537 | @item @code{device-type} (default: @code{"wacom"}) | ||
| 23538 | The type of device to connect to. Run @command{inputattach --help}, from | ||
| 23539 | the @code{inputattach} package, to see the list of supported device types. | ||
| 23540 | |||
| 23541 | @item @code{device} (default: @code{"/dev/ttyS0"}) | ||
| 23542 | The device file to connect to the device. | ||
| 23543 | |||
| 23544 | @item @code{log-file} (default: @code{#f}) | ||
| 23545 | If 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 | ||
| 23551 | El módulo @code{(gnu services dict)} proporciona el servicio siguiente: | ||
| 23552 | |||
| 23553 | @deffn {Procedimiento Scheme} dicod-service [#:config (dicod-configuration)] | ||
| 23554 | Devuelve un servicio que ejecuta el daemon @command{dicod}, una | ||
| 23555 | implementación del servidor DICT (@pxref{Dicod,,, dico, GNU Dico Manual}). | ||
| 23556 | |||
| 23557 | El parámetro opcional @var{config} especifica la configuración para | ||
| 23558 | @command{dicod}, que debe ser un objeto @code{<dicod-configuration>}, por | ||
| 23559 | defecto proporciona el diccionario colaborativo internacional de Inglés de | ||
| 23560 | GNU. | ||
| 23561 | |||
| 23562 | You 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 | ||
| 23568 | Tipo de datos que representa la configuración de dicod. | ||
| 23569 | |||
| 23570 | @table @asis | ||
| 23571 | @item @code{dico} (predeterminado: @var{dico}) | ||
| 23572 | Package object of the GNU Dico dictionary server. | ||
| 23573 | |||
| 23574 | @item @code{interfaces} (predeterminada: @var{'("localhost")}) | ||
| 23575 | This is the list of IP addresses and ports and possibly socket file names to | ||
| 23576 | listen to (@pxref{Server Settings, @code{listen} directive,, dico, GNU Dico | ||
| 23577 | Manual}). | ||
| 23578 | |||
| 23579 | @item @code{handlers} (predeterminados: @var{'()}) | ||
| 23580 | List of @code{<dicod-handler>} objects denoting handlers (module instances). | ||
| 23581 | |||
| 23582 | @item @code{databases} (predeterminada: @var{(list %dicod-database:gcide)}) | ||
| 23583 | List of @code{<dicod-database>} objects denoting dictionaries to be served. | ||
| 23584 | @end table | ||
| 23585 | @end deftp | ||
| 23586 | |||
| 23587 | @deftp {Tipo de datos} dicod-handler | ||
| 23588 | Data type representing a dictionary handler (module instance). | ||
| 23589 | |||
| 23590 | @table @asis | ||
| 23591 | @item @code{name} | ||
| 23592 | Name of the handler (module instance). | ||
| 23593 | |||
| 23594 | @item @code{module} (predeterminado: @var{#f}) | ||
| 23595 | Name of the dicod module of the handler (instance). If it is @code{#f}, the | ||
| 23596 | module has the same name as the handler. (@pxref{Módulos,,, dico, GNU Dico | ||
| 23597 | Manual}). | ||
| 23598 | |||
| 23599 | @item @code{options} | ||
| 23600 | List 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 | ||
| 23605 | Tipo de datos que representa una base de datos de diccionario. | ||
| 23606 | |||
| 23607 | @table @asis | ||
| 23608 | @item @code{name} | ||
| 23609 | Nombre de la base de datos, será usada en las órdenes DICT. | ||
| 23610 | |||
| 23611 | @item @code{handler} | ||
| 23612 | Name 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}) | ||
| 23616 | Whether the database configuration complex. The complex configuration will | ||
| 23617 | need a corresponding @code{<dicod-handler>} object, otherwise not. | ||
| 23618 | |||
| 23619 | @item @code{options} | ||
| 23620 | List 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 | ||
| 23626 | A @code{<dicod-database>} object serving the GNU Collaborative International | ||
| 23627 | Dictionary of English using the @code{gcide} package. | ||
| 23628 | @end defvr | ||
| 23629 | |||
| 23630 | The 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 | |||
| 23651 | The @code{(gnu services docker)} module provides the following service. | ||
| 23652 | |||
| 23653 | @defvr {Scheme Variable} docker-service-type | ||
| 23654 | |||
| 23655 | This is the type of the service that runs | ||
| 23656 | @url{http://www.docker.com,Docker}, a daemon that can execute application | ||
| 23657 | bundles (sometimes referred to as ``containers'') in isolated environments. | ||
| 23658 | |||
| 23659 | @end defvr | ||
| 23660 | |||
| 23661 | @deftp {Data Type} docker-configuration | ||
| 23662 | This is the data type representing the configuration of Docker and | ||
| 23663 | Containerd. | ||
| 23664 | |||
| 23665 | @table @asis | ||
| 23666 | |||
| 23667 | @item @code{package} (default: @code{docker}) | ||
| 23668 | The Docker package to use. | ||
| 23669 | |||
| 23670 | @item @code{containerd} (default: @var{containerd}) | ||
| 23671 | The 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 | ||
| 23680 | Algunos programas necesitan ejecutarse con privilegios de ``root'', incluso | ||
| 23681 | cuando se ejecutan por usuarias sin privilegios. Un ejemplo notable es el | ||
| 23682 | programa @command{passwd}, que las usuarias ejecutan para cambiar su | ||
| 23683 | contraseña, y que necesita acceso a los ficheros @file{/etc/passwd} y | ||
| 23684 | @file{/etc/shadow}---algo normalmente restringido a root, por razones de | ||
| 23685 | seguridad obvias. Para solventarlo, estos ejecutables tienen @dfn{setuid de | ||
| 23686 | root}, lo que significa que siempre se ejecutan con privilegios de root | ||
| 23687 | (@pxref{How Change Persona,,, libc, The GNU C Library Reference Manual}, | ||
| 23688 | para más información sobre el mecanismo setuid). | ||
| 23689 | |||
| 23690 | El almacén en sí @emph{no puede} contener programas setuid: sería un | ||
| 23691 | problema de seguridad puesto que cualquier usuaria del sistema puede | ||
| 23692 | escribir derivaciones que pueblen el almacén (@pxref{El almacén}). Por tanto, | ||
| 23693 | se usa un mecanismo diferente: en vez de cambiar el bit de setuid | ||
| 23694 | directamente en los ficheros que se encuentran en el almacén, se permite que | ||
| 23695 | la administradora del sistema @emph{declare} qué programas deberían tener | ||
| 23696 | setuid de root. | ||
| 23697 | |||
| 23698 | El campo @code{setuid-programs} de una declaración @code{operating-system} | ||
| 23699 | contiene una lista de expresiones-G que denotan nombres de programas que | ||
| 23700 | tendrán setuid de root (@pxref{Uso de la configuración del sistema}). Por | ||
| 23701 | ejemplo, el programa @command{passwd}, que es parte del paquete Shadow, | ||
| 23702 | puede designarse con esta expresión-G (@pxref{Expresiones-G}): | ||
| 23703 | |||
| 23704 | @example | ||
| 23705 | #~(string-append #$shadow "/bin/passwd") | ||
| 23706 | @end example | ||
| 23707 | |||
| 23708 | Un conjunto predeterminado de programas con el bit setuid se define en la | ||
| 23709 | variable @code{%setuid-programs} del módulo @code{(gnu system)}. | ||
| 23710 | |||
| 23711 | @defvr {Variable Scheme} %setuid-programs | ||
| 23712 | Una lista de expresiones-G que denotan programas comunes que se marcan con | ||
| 23713 | setuid de root. | ||
| 23714 | |||
| 23715 | La lista incluye órdenes como @command{passwd}, @command{ping}, @command{su} | ||
| 23716 | y @command{sudo}. | ||
| 23717 | @end defvr | ||
| 23718 | |||
| 23719 | Para su implementación, los programas con setuid reales se crean en el | ||
| 23720 | directorio @file{/run/setuid-programs} durante la activación del | ||
| 23721 | sistema. 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 | ||
| 23730 | En las conexiones HTTPS a servidores Web (esto es, HTTP sobre el mecanismo | ||
| 23731 | de seguridad de la capa de transporte, TLS) se envía a los programas | ||
| 23732 | clientes un @dfn{certificado X.509} que el cliente puede usar para | ||
| 23733 | @emph{autentificar} al servidor. Para hacerlo, los clientes verifican que el | ||
| 23734 | certificado del servidor está firmado por una de las llamadas | ||
| 23735 | @dfn{autoridades de certificación} (AC, CA en inglés). Pero para verificar | ||
| 23736 | la firma de una AC, los clientes deben haber obtenido previamente el | ||
| 23737 | certificado de dicha AC. | ||
| 23738 | |||
| 23739 | Los navegadores Web como GNU@tie{}IceCat incluyen su propio conjunto de | ||
| 23740 | certificados de AC, de manera que pueden verificar las firmas | ||
| 23741 | independientemente. | ||
| 23742 | |||
| 23743 | No obstante, a la mayor parte de otros programas que pueden comunicarse a | ||
| 23744 | través de HTTPS---@command{wget}, @command{git}, @command{w3m}, etc.---se | ||
| 23745 | les debe informar de dónde pueden encontrar los certificados de CA. | ||
| 23746 | |||
| 23747 | @cindex @code{nss-certs} | ||
| 23748 | In 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 | ||
| 23752 | Mozilla's Network Security Services. | ||
| 23753 | |||
| 23754 | Fíjese que @emph{no} es parte de @var{%base-packages}, por lo que debe ser | ||
| 23755 | añadido explícitamente. El directorio @file{/etc/ssl/certs}, donde la mayor | ||
| 23756 | parte de las aplicaciones y bibliotecas buscarán los certificados de manera | ||
| 23757 | predeterminada, enlaza a los certificados instalados de manera global. | ||
| 23758 | |||
| 23759 | Las usuarias sin privilegios, incluyendo a usuarias de Guix en una | ||
| 23760 | distribución distinta, pueden también instalar su propio paquete de | ||
| 23761 | certificados en su perfil. Es necesario definir cierto número de variables | ||
| 23762 | de entorno de manera que las aplicaciones y bibliotecas sepan dónde | ||
| 23763 | encontrarlos. Por ejemplo, la biblioteca OpenSSL inspecciona las variables | ||
| 23764 | @code{SSL_CERT_DIR} y @code{SSL_CERT_FILE}. Algunas aplicaciones añaden sus | ||
| 23765 | variables de entorno propias; por ejemplo, el sistema de control de | ||
| 23766 | versiones Git inspecciona el empaquetado de certificados al que apunta la | ||
| 23767 | variable de entorno @code{GIT_SSL_CAINFO}. Por tanto, en el caso típico se | ||
| 23768 | debe 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 | |||
| 23777 | Como otro ejemplo, R necesita que la variable de entorno | ||
| 23778 | @code{CURL_CA_BUNDLE} apunte al empaquetado de certificados, de manera que | ||
| 23779 | se 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 | |||
| 23786 | Para otras aplicaciones puede tener que buscar la variable de entorno | ||
| 23787 | necesaria 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 | ||
| 23795 | El módulo @code{(gnu system nss)} proporciona una interfaz con el fichero de | ||
| 23796 | configuración del @dfn{selector de servicios de nombres} o @dfn{NSS} | ||
| 23797 | (@pxref{NSS Configuration File,,, libc, The GNU C Library Reference | ||
| 23798 | Manual}). En resumen, NSS es un mecanismo que permite la extensión de libc | ||
| 23799 | con nuevos métodos de búsqueda de ``nombres'', lo que incluye nombres de | ||
| 23800 | má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 | ||
| 23801 | Library Reference Manual}). | ||
| 23802 | |||
| 23803 | La configuración de NSS especifica, para cada base de datos del sistema, que | ||
| 23804 | método de búsqueda debe ser usado, y cómo los varios métodos se enlazan | ||
| 23805 | entre sí---por ejemplo, bajo qué circunstancias NSS deberá probar con el | ||
| 23806 | siguiente método en la lista. La configuración de NSS se proporciona en el | ||
| 23807 | campo @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 | ||
| 23813 | Como ejemplo, la siguiente declaración configura NSS para usar el | ||
| 23814 | @uref{http://0pointer.de/lennart/projects/nss-mdns/, motor @code{nss-mdns}}, | ||
| 23815 | que permite las búsquedas de nombres de máquinas sobre DNS multicast (mDNS) | ||
| 23816 | para 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 | |||
| 23843 | No se preocupe: la variable @code{%mdns-host-lookup-nss} (véase a | ||
| 23844 | continuación) contiene esta configuración, de manera que no tiene que | ||
| 23845 | escribirla si todo lo que desea es que funcione la búsqueda de nombres de | ||
| 23846 | máquina en @code{.local}. | ||
| 23847 | |||
| 23848 | Note that, in this case, in addition to setting the | ||
| 23849 | @code{name-service-switch} of the @code{operating-system} declaration, you | ||
| 23850 | also 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 | ||
| 23853 | the name service cache daemon (@pxref{Servicios base, @code{nscd-service}}). | ||
| 23854 | |||
| 23855 | Por conveniencia, las siguientes variables proporcionan configuraciones NSS | ||
| 23856 | típicas. | ||
| 23857 | |||
| 23858 | @defvr {Variable Scheme} %default-nss | ||
| 23859 | Esta es la configuración predeterminada del selector de servicios de | ||
| 23860 | nombres, un objeto @code{name-service-switch}. | ||
| 23861 | @end defvr | ||
| 23862 | |||
| 23863 | @defvr {Variable Scheme} %mdns-host-lookup-nss | ||
| 23864 | Esta es la configuración del selector de servicios de nombres que permite la | ||
| 23865 | búsqueda de nombres de máquinas por DNS multicast (mDNS) para nombres de | ||
| 23866 | máquinas terminados en @code{.local}. | ||
| 23867 | @end defvr | ||
| 23868 | |||
| 23869 | La referencia de la configuración del selector de servicios de nombres se | ||
| 23870 | proporciona a continuación. Tiene una asociación directa con el formato del | ||
| 23871 | fichero de configuración de la biblioteca C, por lo que se recomienda el | ||
| 23872 | manual de la biblioteca C para obtener más información (@pxref{NSS | ||
| 23873 | Configuration File,,, libc, The GNU C Library Reference Manual}). En | ||
| 23874 | comparación con el formato del fichero de configuración del NSS de libc, no | ||
| 23875 | solo tiene solo la ventaja de la cálida sensación proporcionada por la | ||
| 23876 | adición de paréntesis que tanto nos gustan, sino que también tiene | ||
| 23877 | comprobaciones estáticas: conocerá los errores sintácticos y tipográficos | ||
| 23878 | con la ejecución de @command{guix system}. | ||
| 23879 | |||
| 23880 | @deftp {Tipo de datos} name-service-switch | ||
| 23881 | |||
| 23882 | El tipo de datos que representa la configuración del selector de servicios | ||
| 23883 | de nombres (NSS). Cada campo a continuación representa una de las bases de | ||
| 23884 | datos 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 | ||
| 23900 | Las bases de datos del sistema que maneja el NSS. Cada uno de estos campos | ||
| 23901 | debe 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 | |||
| 23907 | Este es el tipo de datos que representa un servicio de nombres real y la | ||
| 23908 | acción de búsqueda asociada. | ||
| 23909 | |||
| 23910 | @table @code | ||
| 23911 | @item name | ||
| 23912 | Una cadena que denota el nombre de servicio (@pxref{Services in the NSS | ||
| 23913 | configuration,,, libc, The GNU C Library Reference Manual}). | ||
| 23914 | |||
| 23915 | Fijese que los servicios de nombres enumerados aquí deben ser visibles para | ||
| 23916 | nscd. Esto se consigue mediante la adición del parámetro | ||
| 23917 | @code{#:name-services} a @code{nscd-service} con la lista de paquetes que | ||
| 23918 | proporcionan los servicios de nombres necesarios (@pxref{Servicios base, | ||
| 23919 | @code{nscd-service}}). | ||
| 23920 | |||
| 23921 | @item reaction | ||
| 23922 | Una acción especificada mediante el uso del macro | ||
| 23923 | @code{lookup-specification} (@pxref{Actions in the NSS configuration,,, | ||
| 23924 | libc, 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 | ||
| 23938 | Para el propósito del arranque inicial, se le proporciona al núcleo | ||
| 23939 | Linux-libre un @dfn{disco inicial de RAM}, o @dfn{initrd}. Un initrd | ||
| 23940 | contiene un sistema de ficheros raíz temporal así como un guión de | ||
| 23941 | inicialización. Este último es responsable del montaje del sistema de | ||
| 23942 | ficheros raíz real, así como de la carga de cualquier módulo del núcleo que | ||
| 23943 | pueda ser necesario para esta tarea. | ||
| 23944 | |||
| 23945 | El campo @code{initrd-modules} de una declaración @code{operating-system} le | ||
| 23946 | permite especificar qué módulos del nucleo Linux-libre deben estar | ||
| 23947 | disponibles en el initrd. En particular, aquñi es donde se debe enumerar los | ||
| 23948 | módulos que controlen realmente el disco duro deonde su partición raíz se | ||
| 23949 | encuentre---aunque el valor predeterminado de @code{initrd-modules} debería | ||
| 23950 | cubrir la mayor parte de casos de uso. Por ejemplo, en caso de necesitar el | ||
| 23951 | módulo @code{megaraid_sas} además de los módulos predeterminados para poder | ||
| 23952 | acceder 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 | ||
| 23961 | Esta es la lista de módulos del nucleo que se incluyen en el initrd | ||
| 23962 | predeterminado. | ||
| 23963 | @end defvr | ||
| 23964 | |||
| 23965 | Má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 | ||
| 23967 | especificar qué initrd desea usar. El módulo @code{(gnu system | ||
| 23968 | linux-initrd)} proporciona tres formas de construir un initrd: el | ||
| 23969 | procedimiento de alto nivel @code{base-initrd} y los procedimientos de bajo | ||
| 23970 | nivel @code{raw-initrd} y @code{expression->initrd}. | ||
| 23971 | |||
| 23972 | El procedimiento @code{base-initrd} está pensado para cubrir la mayor parte | ||
| 23973 | de usos comunes. Por ejemplo, si desea añadir algunos módulos del nucleo que | ||
| 23974 | deben cargarse durante el arranque, puede definir el campo @code{initrd} de | ||
| 23975 | la 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 | |||
| 23986 | El procedimiento @code{base-initrd} también maneja casos de uso comunes que | ||
| 23987 | implican el uso del sistema en un anfitrión QEMU, o como un sistema ``live'' | ||
| 23988 | con un sistema de ficheros raíz volátil. | ||
| 23989 | |||
| 23990 | El procedimiento @code{base-initrd} se construye sobre el procedimiento | ||
| 23991 | @code{raw-initrd}. Al contrario que @code{base-initrd}, @code{raw-initrd} no | ||
| 23992 | funciona a alto nivel, como sería intentar deducir qué módulos del nucleo y | ||
| 23993 | paquetes deben incluirse en el initrd. Un ejemplo de uso de | ||
| 23994 | @code{raw-initrd} es cuando una usuaria tiene personalizada una | ||
| 23995 | configuración del nucleo Linux y los módulos predeterminados del núcleo que | ||
| 23996 | incluye @code{base-initrd} no están disponibles. | ||
| 23997 | |||
| 23998 | El disco inicial de RAM producido por @code{base-initrd} o @code{raw-initrd} | ||
| 23999 | inspecciona varias opciones proporcionadas por la línea de órdenes al núcleo | ||
| 24000 | Linux (esto es, argumentos pasados a través de la orden @code{linux} de | ||
| 24001 | GRUB, o de la opción @code{-append} de QEMU), notablemente: | ||
| 24002 | |||
| 24003 | @table @code | ||
| 24004 | @item --load=@var{arranque} | ||
| 24005 | Indica al disco de RAM inicial que cargue @var{arranque}, un fichero que | ||
| 24006 | contiene un programa Scheme, una vez haya montado el sistema de ficheros | ||
| 24007 | raíz. | ||
| 24008 | |||
| 24009 | Guix uses this option to yield control to a boot program that runs the | ||
| 24010 | service activation programs and then spawns the GNU@tie{}Shepherd, the | ||
| 24011 | initialization system. | ||
| 24012 | |||
| 24013 | @item --root=@var{raíz} | ||
| 24014 | Monta @var{raíz} como el sistema de ficheros raíz. @var{raíz} puede ser un | ||
| 24015 | nombre de dispositivo como @code{/dev/sda1}, una etiqueta del sistema de | ||
| 24016 | ficheros o un UUID del sistema de ficheros. | ||
| 24017 | |||
| 24018 | @item --system=@var{sistema} | ||
| 24019 | Hace 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 | ||
| 24025 | Indica al disco inicial de RAM así como a la orden @command{modprobe} (del | ||
| 24026 | paquete kmod) que deben negarse a cargar @var{módulos}. @var{módulos} debe | ||
| 24027 | ser una lista separada por comas de nombres de módulos---por ejemplo, | ||
| 24028 | @code{usbkbd,9pnet}. | ||
| 24029 | |||
| 24030 | @item --repl | ||
| 24031 | Inicia una sesión interactiva (REPL) desde el disco inicial de RAM antes de | ||
| 24032 | que intente cargar los módulos del núcleo y del montaje del sistema de | ||
| 24033 | ficheros raíz. Nuestro departamento comercial lo llama | ||
| 24034 | @dfn{arranca-en-Guile}. Como amante de Scheme, lo adorará. @xref{Using Guile | ||
| 24035 | Interactively,,, guile, GNU Guile Reference Manual}, para más información | ||
| 24036 | sobre sesiones interactivas Guile. | ||
| 24037 | |||
| 24038 | @end table | ||
| 24039 | |||
| 24040 | Now 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 | ||
| 24042 | customize 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 | ||
| 24049 | a derivation that builds a raw initrd. @var{file-systems} is a list of file | ||
| 24050 | systems to be mounted by the initrd, possibly in addition to the root file | ||
| 24051 | system 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 | ||
| 24056 | may include @code{e2fsck/static} or other packages needed by the initrd to | ||
| 24057 | check the root file system. | ||
| 24058 | |||
| 24059 | When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record | ||
| 24060 | denoting the desired console keyboard layout. This is done before | ||
| 24061 | @var{mapped-devices} are set up and before @var{file-systems} are mounted | ||
| 24062 | such that, should the user need to enter a passphrase or use the REPL, this | ||
| 24063 | happens using the intended keyboard layout. | ||
| 24064 | |||
| 24065 | Cuando @var{qemu-networking?} es verdadero, configura la red con los | ||
| 24066 | parámetros QEMU estándar. Cuando @var{virtio?} es verdadero, carga módulos | ||
| 24067 | adicionales para que la imagen en RAM pueda ser usada como un sistema | ||
| 24068 | virtualizado por QEMU con controladores paravirtualizados de E/S. | ||
| 24069 | |||
| 24070 | Cuando @var{volatile-root?} es verdadero, el sistema de ficheros raíz tiene | ||
| 24071 | permisos 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 | ||
| 24077 | generic initrd, with kernel modules taken from @var{linux}. | ||
| 24078 | @var{file-systems} is a list of file-systems to be mounted by the initrd, | ||
| 24079 | possibly in addition to the root file system specified on the kernel command | ||
| 24080 | line via @code{--root}. @var{mapped-devices} is a list of device mappings | ||
| 24081 | to realize before @var{file-systems} are mounted. | ||
| 24082 | |||
| 24083 | When true, @var{keyboard-layout} is a @code{<keyboard-layout>} record | ||
| 24084 | denoting the desired console keyboard layout. This is done before | ||
| 24085 | @var{mapped-devices} are set up and before @var{file-systems} are mounted | ||
| 24086 | such that, should the user need to enter a passphrase or use the REPL, this | ||
| 24087 | happens using the intended keyboard layout. | ||
| 24088 | |||
| 24089 | @var{qemu-networking?} y @var{volatile-root?} funcionan como en | ||
| 24090 | @code{raw-initrd}. | ||
| 24091 | |||
| 24092 | El initrd incorpora automáticamente todos los módulos del nucleo necesarios | ||
| 24093 | para @var{sistemas-de-ficheros} y para las opciones proporcionadas. Módulos | ||
| 24094 | del 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 | ||
| 24096 | arranque en el orden que aparezcan. | ||
| 24097 | @end deffn | ||
| 24098 | |||
| 24099 | No es necesario decir que los initrd que producimos y usamos embeben un | ||
| 24100 | Guile enlazado estáticamente, y que el programa de inicialización es un | ||
| 24101 | programa Guile. Esto proporciona mucha flexibilidad. El procedimiento | ||
| 24102 | @code{expression->initrd} construye un initrd de ese tipo, una vez | ||
| 24103 | proporcionado el programa a ejecutar en dicho initrd. | ||
| 24104 | |||
| 24105 | @deffn {Procedimiento Scheme} expression->initrd @var{exp} @ | ||
| 24106 | [#:guile %guile-static-stripped] [#:name "guile-initrd"] | ||
| 24107 | Devuelve como un objeto tipo-fichero el initrd de Linux (un archivador cpio | ||
| 24108 | comprimido con gzip) que contiene @var{guile} y que evalua a @var{exp}, una | ||
| 24109 | expresión-G, al arranque. Todas las derivaciones a las que @var{exp} hace | ||
| 24110 | referencia 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 | |||
| 24119 | El sistema operativo permite varios cargadores de arranque. El cargador de | ||
| 24120 | arranque se configura mediante el uso de la declaración | ||
| 24121 | @code{bootloader-configuration}. Todos los campos de esta estructura son | ||
| 24122 | independientes del cargador de arranque excepto uno, @code{bootloader}, que | ||
| 24123 | indica el cargador de arranque a configurar e instalar. | ||
| 24124 | |||
| 24125 | Algunos de los cargadores de arranque no inspeccionan todos los campos de | ||
| 24126 | @code{bootloader-configuration}. Por ejemplo, el cargador de arranque | ||
| 24127 | extlinux no permite temas y por lo tanto ignora el campo @code{theme}. | ||
| 24128 | |||
| 24129 | @deftp {Tipo de datos} bootloader-configuration | ||
| 24130 | El 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 | ||
| 24138 | El cargador de arranque a usar, como un objeto @code{bootloader}. De momento | ||
| 24139 | se 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 | ||
| 24144 | la @dfn{interfaz extendida de firmware unificada} (UEFI). Es el que debería | ||
| 24145 | ser 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 | ||
| 24150 | modo ``antiguo'' BIOS. | ||
| 24151 | |||
| 24152 | @cindex ARM, cargadores de arranque | ||
| 24153 | @cindex AArch64, cargadores de arranque | ||
| 24154 | Los cargadores de arranque se describen en los módulos @code{(gnu bootloader | ||
| 24155 | @dots{})}. En particular, @code{(gnu bootloader u-boot)} contiene | ||
| 24156 | definiciones de cargadores de arranque para un amplio rango de sistemas ARM | ||
| 24157 | y AArch64, mediante el uso del @uref{http://www.denx.de/wiki/U-Boot/, | ||
| 24158 | cargador de arranque U-Boot}. | ||
| 24159 | |||
| 24160 | @item @code{target} | ||
| 24161 | Una cadena que indica donde se instalará el cargador de arranque. | ||
| 24162 | |||
| 24163 | La interpretación depende del cargador de arranque en cuestión. Para | ||
| 24164 | @code{grub-bootloader}, por ejemplo, debe ser un nombre de dispositivo que | ||
| 24165 | entienda la orden @command{install} del cargador de arranque, como | ||
| 24166 | @code{/dev/sda} o @code{(hd0)} (@pxref{Invoking grub-install,,, grub, GNU | ||
| 24167 | GRUB Manual}). Para @code{grub-efi-bootloader}, debe apuntar al punto de | ||
| 24168 | montaje del sistema de ficheros EFI, habitualmente @file{/boot/efi}. | ||
| 24169 | |||
| 24170 | @item @code{menu-entries} (predeterminadas: @code{()}) | ||
| 24171 | Una lista posiblemente vacia de objetos @code{menu-entry} (véase a | ||
| 24172 | continuación), que indican entradas que deben aparecer en el menú del | ||
| 24173 | cargador de arranque, además de la entrada del sistema actual y la entrada | ||
| 24174 | que apunta a generaciones previas del sistema. | ||
| 24175 | |||
| 24176 | @item @code{default-entry} (predeterminada: @code{0}) | ||
| 24177 | El índice de la entrada del menú de arranque por omisión. El índice 0 es | ||
| 24178 | para la entrada del sistema actual. | ||
| 24179 | |||
| 24180 | @item @code{timeout} (predeterminado: @code{5}) | ||
| 24181 | El número de segundos que se esperará entrada por el teclado antes de | ||
| 24182 | arrancar. El valor 0 indica que se debe arrancar de forma inmediata, y -1 | ||
| 24183 | que se debe esperar indefinidamente. | ||
| 24184 | |||
| 24185 | @cindex keyboard layout, for the bootloader | ||
| 24186 | @item @code{keyboard-layout} (predeterminada: @code{#f}) | ||
| 24187 | If this is @code{#f}, the bootloader's menu (if any) uses the default | ||
| 24188 | keyboard layout, usually US@tie{}English (``qwerty''). | ||
| 24189 | |||
| 24190 | Otherwise, this must be a @code{keyboard-layout} object (@pxref{Distribución de teclado}). | ||
| 24191 | |||
| 24192 | @quotation Nota | ||
| 24193 | This 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}) | ||
| 24198 | El objeto del tema del cargador de arranque que describa el tema a usar. Si | ||
| 24199 | no se proporciona ningún tema, algunos cargadores de arranque pueden usar un | ||
| 24200 | tema por omisión, lo cual es cierto en GRUB. | ||
| 24201 | |||
| 24202 | @item @code{terminal-outputs} (predeterminada: @code{'gfxterm}) | ||
| 24203 | Los terminales de salida que se usarán para el menú de arranque, como una | ||
| 24204 | lista 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 | ||
| 24208 | manual}). | ||
| 24209 | |||
| 24210 | @item @code{terminal-inputs} (predeterminadas: @code{'()}) | ||
| 24211 | Los terminales de entrada que se usarán para el menú de arranque, como una | ||
| 24212 | lista de símbolos. Para GRUB, el valor predeterminado es el terminal nativo | ||
| 24213 | de la platafroma determinado en tiempo de ejecución. GRUB acepta los | ||
| 24214 | valores: @code{console}, @code{serial}, @code{serial@{0-3@}}, | ||
| 24215 | @code{at_keyboard} y @code{usb_keyboard}. Este campo corresponde a la | ||
| 24216 | variable GRUB @code{GRUB_TERMINAL_INPUT} (@pxref{Simple configuration,,, | ||
| 24217 | grub,GNU GRUB manual}). | ||
| 24218 | |||
| 24219 | @item @code{serial-unit} (predeterminada: @code{#f}) | ||
| 24220 | La unidad serie usada por el cargador de arranque, como un entero del 0 al | ||
| 24221 | 3. Para GRUB, se selecciona en tiempo de ejecución; actualmente GRUB | ||
| 24222 | selecciona 0 lo que corresponde a COM1 (@pxref{Serial terminal,,, grub,GNU | ||
| 24223 | GRUB manual}). | ||
| 24224 | |||
| 24225 | @item @code{serial-speed} (predeterminada: @code{#f}) | ||
| 24226 | La velocidad de la interfaz serie, como un entero. Para GRUB, el valor | ||
| 24227 | predeterminado se selecciona en tiempo de ejecución, actualmente GRUB | ||
| 24228 | selecciona 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 | ||
| 24235 | Si desease listar entradas adicionales para el menú de arranque a través del | ||
| 24236 | campo @code{menu-entries} mostrado previamente, deberá crearlas con la forma | ||
| 24237 | @code{menu-entry}. Por ejemplo, imagine que desea ser capaz de arrancar otra | ||
| 24238 | distribución (¡difícil de imaginar!), puede definir una entrada de menú de | ||
| 24239 | esta 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 | |||
| 24249 | Los detalles se encuentran a continuación. | ||
| 24250 | |||
| 24251 | @deftp {Tipo de datos} menu-entry | ||
| 24252 | El tipo de una entrada en el menú del cargador de arranque. | ||
| 24253 | |||
| 24254 | @table @asis | ||
| 24255 | |||
| 24256 | @item @code{label} | ||
| 24257 | La etiqueta a mostrar en el menú---por ejemplo, @code{"GNU"}. | ||
| 24258 | |||
| 24259 | @item @code{linux} | ||
| 24260 | La imagen del núcleo Linux a arrancar, por ejemplo: | ||
| 24261 | |||
| 24262 | @example | ||
| 24263 | (file-append linux-libre "/bzImage") | ||
| 24264 | @end example | ||
| 24265 | |||
| 24266 | Con GRUB, también es posible especificar un dispositivo explícitamente | ||
| 24267 | mediante 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 | |||
| 24274 | Si se especifica el dispositivo explícitamente como en el ejemplo anterior, | ||
| 24275 | el campo @code{device} se ignora completamente. | ||
| 24276 | |||
| 24277 | @item @code{linux-arguments} (predeterminados: @code{()}) | ||
| 24278 | La lista de parámetros extra de línea de órdenes para el núcleo Linux---por | ||
| 24279 | ejemplo, @code{("console=ttyS0")}. | ||
| 24280 | |||
| 24281 | @item @code{initrd} | ||
| 24282 | Una expresión-G o una cadena que contiene el nombre de fichero del disco | ||
| 24283 | inicial en RAM a usar (@pxref{Expresiones-G}). | ||
| 24284 | @item @code{device} (predeterminado: @code{#f}) | ||
| 24285 | El dispositivo donde se encuentran el núcleo y el initrd---es decir, para | ||
| 24286 | GRUB, @dfn{raíz} de esta entrada de menú (@pxref{root,,, grub, GNU GRUB | ||
| 24287 | manual}). | ||
| 24288 | |||
| 24289 | Puede ser una etiqueta de sistema de ficheros (una cadena), un UUID de | ||
| 24290 | sistema de ficheros (un vector de bytes, @pxref{Sistemas de ficheros}), o @code{#f}, | ||
| 24291 | en cuyo caso el cargador de arranque buscará el dispositivo que contenga el | ||
| 24292 | fichero especificado por el campo @code{linux} (@pxref{search,,, grub, GNU | ||
| 24293 | GRUB 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. | ||
| 24300 | For 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 | ||
| 24304 | Este es el tema predeterminado de GRUB que usa el sistema operativo si no se | ||
| 24305 | especifica el campo @code{theme} en el registro | ||
| 24306 | @code{bootloader-configuration}. | ||
| 24307 | |||
| 24308 | Viene 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 | |||
| 24315 | Una vez haya escrito la declaración de sistema operativo como se ha visto en | ||
| 24316 | la sección previa, puede @dfn{instanciarse} mediante el uso de la orden | ||
| 24317 | @command{guix system}. Su sinopsis es: | ||
| 24318 | |||
| 24319 | @example | ||
| 24320 | guix 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 | ||
| 24325 | sistema operativo. Actualmente se permiten los siguientes valores: | ||
| 24326 | |||
| 24327 | @table @code | ||
| 24328 | @item search | ||
| 24329 | Muestra las definiciones de tipos de servicio disponibles que corresponden | ||
| 24330 | con las expresiones regulares proporcionadas, ordenadas por relevancia: | ||
| 24331 | |||
| 24332 | @example | ||
| 24333 | $ guix system search console font | ||
| 24334 | name: console-fonts | ||
| 24335 | location: gnu/services/base.scm:729:2 | ||
| 24336 | extends: shepherd-root | ||
| 24337 | description: 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")) | ||
| 24342 | relevance: 20 | ||
| 24343 | |||
| 24344 | name: mingetty | ||
| 24345 | location: gnu/services/base.scm:1048:2 | ||
| 24346 | extends: shepherd-root | ||
| 24347 | description: Provide console login using the `mingetty' program. | ||
| 24348 | relevance: 2 | ||
| 24349 | |||
| 24350 | name: login | ||
| 24351 | location: gnu/services/base.scm:775:2 | ||
| 24352 | extends: pam | ||
| 24353 | description: Provide a console log-in service as specified by its | ||
| 24354 | + configuration value, a `login-configuration' object. | ||
| 24355 | relevance: 2 | ||
| 24356 | |||
| 24357 | @dots{} | ||
| 24358 | @end example | ||
| 24359 | |||
| 24360 | Como 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 | ||
| 24362 | recutils databases,, recutils, GNU recutils manual}). | ||
| 24363 | |||
| 24364 | @item reconfigure | ||
| 24365 | Build the operating system described in @var{file}, activate it, and switch | ||
| 24366 | to it@footnote{This action (and the related actions @code{switch-generation} | ||
| 24367 | and @code{roll-back}) are usable only on systems already running Guix | ||
| 24368 | System.}. | ||
| 24369 | |||
| 24370 | This effects all the configuration specified in @var{file}: user accounts, | ||
| 24371 | system services, global package list, setuid programs, etc. The command | ||
| 24372 | starts system services specified in @var{file} that are not currently | ||
| 24373 | running; if a service is currently running this command will arrange for it | ||
| 24374 | to be upgraded the next time it is stopped (e.g.@: by @code{herd stop X} or | ||
| 24375 | @code{herd restart X}). | ||
| 24376 | |||
| 24377 | Esta orden crea una nueva generación cuyo número es el sucesor de la | ||
| 24378 | siguiente generación (como lo muestra @command{guix system | ||
| 24379 | list-generations}). Si esa generación ya existe, será sobreescrita. Este | ||
| 24380 | comportamiento es el mismo que el de @command{guix package} (@pxref{Invocación de guix package}). | ||
| 24381 | |||
| 24382 | También añade una entrada al cargador de arranque para la nueva | ||
| 24383 | configuración del sistema operativo---en caso de que no se proporcione la | ||
| 24384 | opción @option{--no-bootloader}. Con GRUB, mueve las entradas de | ||
| 24385 | configuraciones antiguas a un submenú, permitiendo la selección de una | ||
| 24386 | generació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>. | ||
| 24391 | Es altamente recomendable ejecutar @command{guix pull} antes de la primera | ||
| 24392 | ejecució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 | ||
| 24393 | Guix una vez que @command{reconfigure} se haya completado. | ||
| 24394 | @end quotation | ||
| 24395 | |||
| 24396 | @item switch-generation | ||
| 24397 | @cindex generaciones | ||
| 24398 | Cambia a una generación existente del sistema. Esta acción cambia | ||
| 24399 | atómicamente el perfil del sistema a la generación del sistema | ||
| 24400 | especificada. También redistribuye las entradas de sistema del menú de | ||
| 24401 | arranque existentes. Marca como predeterminada la entrada de la generación | ||
| 24402 | de sistema especificada y mueve las entradas de otras generaciones a un | ||
| 24403 | submenú, si el cargador de arranque lo permite. La próxima vez que se | ||
| 24404 | arranque el sistema, se usará la generación de sistema especificada. | ||
| 24405 | |||
| 24406 | El cargador de arranque en sí no se reinstala durante esta orden. Por tanto, | ||
| 24407 | el cargador de arranque instalado se usa con un fichero de configuración | ||
| 24408 | actualizado. | ||
| 24409 | |||
| 24410 | La generación deseada puede especificarse explícitamente con su numero de | ||
| 24411 | generación. Por ejemplo, la siguiente invocación cambiaría a la generación 7 | ||
| 24412 | del sistema: | ||
| 24413 | |||
| 24414 | @example | ||
| 24415 | guix system switch-generation 7 | ||
| 24416 | @end example | ||
| 24417 | |||
| 24418 | La generación deseada puede especificarse también de forma relativa a la | ||
| 24419 | generación actual con la forma @code{+N} o @code{-N}, donde @code{+3} | ||
| 24420 | significa ``3 generaciones después de la generación actual'', y @code{-1} | ||
| 24421 | significa ``1 generación antes de la generación actual''. Cuando se | ||
| 24422 | especifica un valor negativo como @code{-1} debe ir precedido de @code{--} | ||
| 24423 | para evitar que se analice como una opción. Por ejemplo: | ||
| 24424 | |||
| 24425 | @example | ||
| 24426 | guix system switch-generation -- -1 | ||
| 24427 | @end example | ||
| 24428 | |||
| 24429 | Actualmente, el efecto de la invocación de esta acción es @emph{únicamente} | ||
| 24430 | cambiar el perfil del sistema a una generación existente y redistribuir las | ||
| 24431 | entradas del menú de arranque. Para realmente empezar a usar la generación | ||
| 24432 | deseada del sistema, debe reiniciar tras esta acción. En el futuro, se | ||
| 24433 | actualizará para hacer lo mismo que @command{reconfigure}, como activación y | ||
| 24434 | desactivación de servicios. | ||
| 24435 | |||
| 24436 | Esta acción fallará si la generación especificada no existe. | ||
| 24437 | |||
| 24438 | @item roll-back | ||
| 24439 | @cindex vuelta atrás | ||
| 24440 | Cambia a la generación de sistema previa. Tras el siguiente arranque del | ||
| 24441 | sistema, usará la generación de sistema precedente. Es la operación inversa | ||
| 24442 | de @command{reconfigure}, y es equivalente a la invocación de | ||
| 24443 | @command{switch-generation} con @code{-1} como parámetro. | ||
| 24444 | |||
| 24445 | Actualmente, como con @command{switch-generation}, debe reiniciar tras la | ||
| 24446 | ejecución de esta acción para realmente empezar a usar la generación de | ||
| 24447 | sistema precedente. | ||
| 24448 | |||
| 24449 | @item delete-generations | ||
| 24450 | @cindex deleting system generations | ||
| 24451 | @cindex saving space | ||
| 24452 | Delete system generations, making them candidates for garbage collection | ||
| 24453 | (@pxref{Invocación de guix gc}, for information on how to run the ``garbage | ||
| 24454 | collector''). | ||
| 24455 | |||
| 24456 | This works in the same way as @command{guix package --delete-generations} | ||
| 24457 | (@pxref{Invocación de guix package, @code{--delete-generations}}). With no | ||
| 24458 | arguments, all system generations but the current one are deleted: | ||
| 24459 | |||
| 24460 | @example | ||
| 24461 | guix system delete-generations | ||
| 24462 | @end example | ||
| 24463 | |||
| 24464 | You can also select the generations you want to delete. The example below | ||
| 24465 | deletes all the system generations that are more than two month old: | ||
| 24466 | |||
| 24467 | @example | ||
| 24468 | guix system delete-generations 2m | ||
| 24469 | @end example | ||
| 24470 | |||
| 24471 | Running this command automatically reinstalls the bootloader with an updated | ||
| 24472 | list of menu entries---e.g., the ``old generations'' sub-menu in GRUB no | ||
| 24473 | longer lists the generations that have been deleted. | ||
| 24474 | |||
| 24475 | @item build | ||
| 24476 | Construye la derivación del sistema operativo, que incluye todos los | ||
| 24477 | ficheros de configuración y programas necesarios para el arranque y la | ||
| 24478 | ejecución del sistema. Esta acción no instala nada en realidad. | ||
| 24479 | |||
| 24480 | @item init | ||
| 24481 | Populate the given directory with all the files necessary to run the | ||
| 24482 | operating system specified in @var{file}. This is useful for first-time | ||
| 24483 | installations of Guix System. For instance: | ||
| 24484 | |||
| 24485 | @example | ||
| 24486 | guix system init mi-conf-del-so.scm /mnt | ||
| 24487 | @end example | ||
| 24488 | |||
| 24489 | copia a @file{/mnt} todos los elementos del almacén necesarios para la | ||
| 24490 | configuración especificada en @file{mi-conf-del-so.scm}. Esto incluye los | ||
| 24491 | ficheros de configuración, paquetes y demás. También crea otros ficheros | ||
| 24492 | esenciales necesarios para la correcta operación del sistema---por ejemplo, | ||
| 24493 | los directorios @file{/etc}, @file{/var} y @file{/run}, y el fichero | ||
| 24494 | @file{/bin/sh}. | ||
| 24495 | |||
| 24496 | Esta orden también instala el cargador de arranque en el destino | ||
| 24497 | especificado en @file{mi-conf-del-so.scm}, siempre que no se proporcione la | ||
| 24498 | opción @option{--no-bootloader}. | ||
| 24499 | |||
| 24500 | @item vm | ||
| 24501 | @cindex máquina virtual | ||
| 24502 | @cindex VM | ||
| 24503 | @anchor{guix system vm} | ||
| 24504 | Build 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 | ||
| 24508 | The @code{vm} action and others below can use KVM support in the Linux-libre | ||
| 24509 | kernel. Specifically, if the machine has hardware virtualization support, | ||
| 24510 | the corresponding KVM kernel module should be loaded, and the | ||
| 24511 | @file{/dev/kvm} device node must exist and be readable and writable by the | ||
| 24512 | user and by the build users of the daemon (@pxref{Configuración del entorno de construcción}). | ||
| 24513 | @end quotation | ||
| 24514 | |||
| 24515 | Arguments given to the script are passed to QEMU as in the example below, | ||
| 24516 | which enables networking and requests 1@tie{}GiB of RAM for the emulated | ||
| 24517 | machine: | ||
| 24518 | |||
| 24519 | @example | ||
| 24520 | $ /gnu/store/@dots{}-run-vm.sh -m 1024 -net user | ||
| 24521 | @end example | ||
| 24522 | |||
| 24523 | La VM comparte su almacén con el sistema anfitrión. | ||
| 24524 | |||
| 24525 | Sistemas de ficheros adicionales pueden compartirse entre la máquina | ||
| 24526 | anfitriona y la virtual mediante el uso de las opciones @code{--share} y | ||
| 24527 | @code{--expose}: la primera especifica un directorio a compartir con acceso | ||
| 24528 | de escritura, mientras que la última proporciona solo acceso de lectura al | ||
| 24529 | directorio compartido. | ||
| 24530 | |||
| 24531 | El siguiente ejemplo crea una máquina virtual en la que el directorio de la | ||
| 24532 | usuaria 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 | ||
| 24537 | guix system vm mi-configuracion.scm \ | ||
| 24538 | --expose=$HOME --share=$HOME/tmp=/intercambio | ||
| 24539 | @end example | ||
| 24540 | |||
| 24541 | En GNU/Linux, lo predeterminado es arrancar directamente el núcleo; esto | ||
| 24542 | posee la ventaja de necesitar únicamente una pequeña imagen del disco raíz | ||
| 24543 | pequeña ya el el almacén de la anfitriona puede montarse. | ||
| 24544 | |||
| 24545 | La opción @code{--full-boot} fuerza una secuencia de arranque completa, | ||
| 24546 | desde el cargador de arranque. Esto necesita más espacio en disco ya que la | ||
| 24547 | imagen raíz que contiene el núcleo, initrd y los ficheros de datos del | ||
| 24548 | cargador de arranque deben crearse. La opción @code{--image-size} puede | ||
| 24549 | usarse 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 | ||
| 24556 | Devuelve una máquina virtual, imagen de disco o imagen Docker del sistema | ||
| 24557 | operativo declarado en @var{fichero} que es independiente. Por omisión, | ||
| 24558 | @command{guix system} estima el tamaño de la imagen necesario para almacenar | ||
| 24559 | el sistema, pero puede usar la opción @option{--image-size} para especificar | ||
| 24560 | un valor. Las imagenes Docker se construyen para que contengan exactamente | ||
| 24561 | lo que necesitan, por lo que la opción @option{--image-size} se ignora en el | ||
| 24562 | caso de @code{docker-image}. | ||
| 24563 | |||
| 24564 | Puede 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 | |||
| 24567 | When using @code{vm-image}, the returned image is in qcow2 format, which the | ||
| 24568 | QEMU emulator can efficiently use. @xref{Ejecutar Guix en una máquina virtual}, for more | ||
| 24569 | information on how to run the image in a virtual machine. | ||
| 24570 | |||
| 24571 | Con @code{disk-image} se produce una imagen de disco cruda; puede copiarse | ||
| 24572 | tal cual en una memoria USB, por ejemplo. Asumiendo que @code{/dev/sdc} es | ||
| 24573 | el dispositivo que corresponde a la memoria USB, se podría copiar la imagen | ||
| 24574 | con la siguiente orden: | ||
| 24575 | |||
| 24576 | @example | ||
| 24577 | # dd if=$(guix system disk-image mi-so.scm) of=/dev/sdc | ||
| 24578 | @end example | ||
| 24579 | |||
| 24580 | Con @code{docker-image} se produce una imagen Docker. Guix construye la | ||
| 24581 | imagen de cero, no de una imagen Docker base preexistente. Como resultado, | ||
| 24582 | contiene @emph{exactamente} lo definido en el fichero de configuración del | ||
| 24583 | sistema operativo. Puede cargar la imagen y ejecutar un contenedor Docker | ||
| 24584 | mediante el uso de ordenes como las siguientes: | ||
| 24585 | |||
| 24586 | @example | ||
| 24587 | image_id="$(docker load < guix-system-docker-image.tar.gz)" | ||
| 24588 | docker 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 | |||
| 24593 | This command starts a new Docker container from the specified image. It | ||
| 24594 | will boot the Guix system in the usual manner, which means it will start any | ||
| 24595 | services you have defined in the operating system configuration. Depending | ||
| 24596 | on what you run in the Docker container, it may be necessary to give the | ||
| 24597 | container additional permissions. For example, if you intend to build | ||
| 24598 | software 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 | ||
| 24602 | Devuelve 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 | ||
| 24604 | mecanismos de aislamiento ligeros que proporciona el núcleo Linux-libre. Los | ||
| 24605 | contenedores necesitan sustancialmente menos recursos que máquinas virtuales | ||
| 24606 | completas debido a que el núcleo, los objetos compartidos y otros recursos | ||
| 24607 | pueden compartirse con el sistema anfitrión; esto también significa que | ||
| 24608 | proporcionan un menor aislamiento. | ||
| 24609 | |||
| 24610 | En 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 | ||
| 24612 | anfitriona. | ||
| 24613 | |||
| 24614 | Como con la acción @code{vm} (@pxref{guix system vm}), sistemas de ficheros | ||
| 24615 | adicionales a compartir entre la máquina anfitriona y el contenedor pueden | ||
| 24616 | especificarse mediante el uso de las opciones @option{--share} y | ||
| 24617 | @option{--expose}: | ||
| 24618 | |||
| 24619 | @example | ||
| 24620 | guix system container mi-configuracion.scm \ | ||
| 24621 | --expose=$HOME --share=$HOME/tmp=/intercambio | ||
| 24622 | @end example | ||
| 24623 | |||
| 24624 | @quotation Nota | ||
| 24625 | Esta 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 | ||
| 24631 | comunes (@pxref{Opciones comunes de construcción}). Además, @var{opciones} puede | ||
| 24632 | contener una de las siguientes: | ||
| 24633 | |||
| 24634 | @table @option | ||
| 24635 | @item --expression=@var{expr} | ||
| 24636 | @itemx -e @var{expr} | ||
| 24637 | Consider the operating-system @var{expr} evaluates to. This is an | ||
| 24638 | alternative to specifying a file which evaluates to an operating system. | ||
| 24639 | This 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} | ||
| 24643 | Intenta la construcción para @var{sistema} en vez de para el tipo de la | ||
| 24644 | máquina anfitriona. Funciona como en @command{guix build} (@pxref{Invocación de guix build}). | ||
| 24645 | |||
| 24646 | @item --derivation | ||
| 24647 | @itemx -d | ||
| 24648 | Devuelve el nombre de fichero de la derivación del sistema operativo | ||
| 24649 | proporcionado sin construir nada. | ||
| 24650 | |||
| 24651 | @item --file-system-type=@var{tipo} | ||
| 24652 | @itemx -t @var{tipo} | ||
| 24653 | Para la acción @code{disk-image}, crea un sistema de ficheros del @var{tipo} | ||
| 24654 | proporcionado en la imagen. | ||
| 24655 | |||
| 24656 | Cuando 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 | ||
| 24662 | grabada en CD y DVD. | ||
| 24663 | |||
| 24664 | @item --image-size=@var{tamaño} | ||
| 24665 | Junto a las acciones @code{vm-image} y @code{disk-image}, crea una imagen | ||
| 24666 | del @var{ŧamaño} proporcionado. @var{tamaño} debe ser un número de bytes o | ||
| 24667 | puede incluir una unidad como sufijo (@pxref{Block size, size | ||
| 24668 | specifications,, coreutils, GNU Coreutils}). | ||
| 24669 | |||
| 24670 | Cuando se omite esta opción, @command{guix system} calcula una estimación | ||
| 24671 | del 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} | ||
| 24676 | Hace que @var{fichero} sea un enlace simbólico al resultado, y lo registra | ||
| 24677 | como una raíz del recolector de basura. | ||
| 24678 | |||
| 24679 | @item --skip-checks | ||
| 24680 | Omite las comprobaciones de seguridad previas a la instalación. | ||
| 24681 | |||
| 24682 | Por omisión, @command{guix system init} y @command{guix system reconfigure} | ||
| 24683 | realizan comprobaciones de seguridad: se aseguran de que los sistemas de | ||
| 24684 | ficheros que aparecen en la declaración @code{operating-system} realmente | ||
| 24685 | existen (@pxref{Sistemas de ficheros}) y que cualquier módulo del núcleo Linux que | ||
| 24686 | pudiese necesitarse durante el arranque se encuentre en | ||
| 24687 | @code{initrd-modules} (@pxref{Disco en RAM inicial}). El uso de esta opción | ||
| 24688 | omite todas estas comprobaciones. | ||
| 24689 | |||
| 24690 | @cindex on-error | ||
| 24691 | @cindex on-error strategy | ||
| 24692 | @cindex error strategy | ||
| 24693 | @item --on-error=@var{estrategia} | ||
| 24694 | Aplica @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 | ||
| 24699 | Informa concisamente del error y termina la ejecución. Es la estrategia | ||
| 24700 | predeterminada. | ||
| 24701 | |||
| 24702 | @item backtrace | ||
| 24703 | Del mismo modo, pero también muestra la secuencia de llamadas. | ||
| 24704 | |||
| 24705 | @item debug | ||
| 24706 | Informa del error y entra en el depurador de Guile. A partir de ahí, puede | ||
| 24707 | ejecutar órdenes como @code{,bt} para obtener la secuencia de llamads, | ||
| 24708 | @code{,locals} para mostrar los valores de las variables locales, e | ||
| 24709 | inspeccionar el estado del programa de forma más general. @xref{Debug | ||
| 24710 | Commands,,, guile, GNU Guile Reference Manual}, para una lista de órdenes de | ||
| 24711 | depuración disponibles. | ||
| 24712 | @end table | ||
| 24713 | @end table | ||
| 24714 | |||
| 24715 | Once you have built, configured, re-configured, and re-re-configured your | ||
| 24716 | Guix installation, you may find it useful to list the operating system | ||
| 24717 | generations available on disk---and that you can choose from the bootloader | ||
| 24718 | boot menu: | ||
| 24719 | |||
| 24720 | @table @code | ||
| 24721 | |||
| 24722 | @item list-generations | ||
| 24723 | Muestra un resumen de cada generación del sistema operativo disponible en el | ||
| 24724 | disco, 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 | |||
| 24727 | De manera opcional, se puede especificar un patrón, con la misma sintaxis | ||
| 24728 | que la usada en @command{guix package --list-generations}, para restringir | ||
| 24729 | la lista de generaciones mostradas. Por ejemplo, la siguiente orden muestra | ||
| 24730 | generaciones 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 | ||
| 24739 | ordenes le permiten visualizar cual es la relación entre los servicios del | ||
| 24740 | sistema: | ||
| 24741 | |||
| 24742 | @anchor{system-extension-graph} | ||
| 24743 | @table @code | ||
| 24744 | |||
| 24745 | @item extension-graph | ||
| 24746 | Emite en formato Dot/Graphviz por la salida estándar el @dfn{grafo de | ||
| 24747 | extensiones de servicio} del sistema operativo definido en @var{fichero} | ||
| 24748 | (@pxref{Composición de servicios}, para más información sobre extensiones de | ||
| 24749 | servicio). | ||
| 24750 | |||
| 24751 | La orden: | ||
| 24752 | |||
| 24753 | @example | ||
| 24754 | $ guix system extension-graph @var{fichero} | dot -Tpdf > servicios.pdf | ||
| 24755 | @end example | ||
| 24756 | |||
| 24757 | produce un fichero PDF que muestra las relaciones de extensiones entre los | ||
| 24758 | servicios. | ||
| 24759 | |||
| 24760 | @anchor{system-shepherd-graph} | ||
| 24761 | @item shepherd-graph | ||
| 24762 | Emite en formato Dot/Graphviz por la salida estándar el @dfn{grafo de | ||
| 24763 | dependencias} 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 | ||
| 24765 | ejemplo. | ||
| 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 | ||
| 24773 | To run Guix in a virtual machine (VM), one can either use the pre-built Guix | ||
| 24774 | VM 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 | ||
| 24777 | vm-image} (@pxref{Invocación de guix system}). The returned image is in qcow2 | ||
| 24778 | format, which the @uref{http://qemu.org/, QEMU emulator} can efficiently | ||
| 24779 | use. | ||
| 24780 | |||
| 24781 | @cindex QEMU | ||
| 24782 | Si ha construido su propia imagen, debe copiarla fuera del almacén y | ||
| 24783 | proporcionarse a sí misma permisos de escritura sobre dicha copia antes de | ||
| 24784 | usarla. En la invocación de QEMU debe elegir un emulador de sistema que sea | ||
| 24785 | adecuado para su plataforma hardware. Esta es una invocación de QEMU mínima | ||
| 24786 | que arrancará el resultado de @command{guix system vm-image} en hardware | ||
| 24787 | x86_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 | |||
| 24795 | Aquí está el significado de cada una de esas opciones: | ||
| 24796 | |||
| 24797 | @table @code | ||
| 24798 | @item qemu-system-x86_64 | ||
| 24799 | Esto especifica la plataforma hardware a emular. Debe corresponder con el | ||
| 24800 | anfitrión. | ||
| 24801 | |||
| 24802 | @item -net user | ||
| 24803 | Habilita la pila de red en modo de usuaria sin privilegios. El SO | ||
| 24804 | virtualizado puede acceder al anfitrión pero no al revés. Esta es la forma | ||
| 24805 | más simple de poner en línea un SO virtualizado. | ||
| 24806 | |||
| 24807 | @item -net nic,model=virtio | ||
| 24808 | Debe crear una interfaz de red del modelo proporcionado. Si la crea, el | ||
| 24809 | arranque fallará. Asumiendo que su plataforma hardware sea x86_64, puede | ||
| 24810 | obtener 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 | ||
| 24814 | Si su sistema tiene extensiones de virtualización por hardware, la | ||
| 24815 | activación de la implementación de máquinas virtuales (KVM) del núcleo Linux | ||
| 24816 | hará que la ejecución sea más rápida. | ||
| 24817 | |||
| 24818 | @item -m 256 | ||
| 24819 | RAM disponible para el sistema operativo virtualizado, en mebibytes. El | ||
| 24820 | valor predeterminado es 128@tie{}MiB, que puede ser insuficiente para | ||
| 24821 | algunas operaciones. | ||
| 24822 | |||
| 24823 | @item /tmp/imagen-qemu | ||
| 24824 | El nombre de fichero de la imagen qcow2. | ||
| 24825 | @end table | ||
| 24826 | |||
| 24827 | El 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 | ||
| 24829 | defecto. Para obtener acceso a la red desde la máquina virtual añada el | ||
| 24830 | servicio @code{(dhcp-client-service)} a su definición de sistema y arranque | ||
| 24831 | la 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 | ||
| 24833 | user} para la obtención de red es que @command{ping} no funcionará, puesto | ||
| 24834 | que usa el protocolo ICMP. Deberá usar una orden diferente para comprobar la | ||
| 24835 | conectividad 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 | ||
| 24841 | Para activar SSH dentro de una máquina virtual debe añadir un servidor SSH | ||
| 24842 | como @code{(dropbear-service)} o @code{(lsh-service)} en su máquina | ||
| 24843 | virtual. El servicio @code{(lsh-service)} no arranca actualmente sin | ||
| 24844 | supervisión, ya que precisa de entrada para inicializar el generador de | ||
| 24845 | aleatoriedad. Además tiene que redirigir el puerto SSH, 22 el | ||
| 24846 | predeterminado, 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 | |||
| 24852 | Para conectarse a la máquina virtual puede ejecutar | ||
| 24853 | |||
| 24854 | @example | ||
| 24855 | ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p 10022 | ||
| 24856 | @end example | ||
| 24857 | |||
| 24858 | La @command{-p} indica a @command{ssh} el puerto al que se debe | ||
| 24859 | conectar. @command{-o UserKnownHostsFile=/dev/null} evita que @command{ssh} | ||
| 24860 | se queje cada vez que modifique su fichero @command{config.scm} y la orden | ||
| 24861 | @command{-o StrictHostKeyChecking=no} evita que tenga que autorizar la | ||
| 24862 | conexión a una máquina desconocida cada vez que se conecte. | ||
| 24863 | |||
| 24864 | @subsection Uso de @command{virt-viewer} con Spice | ||
| 24865 | |||
| 24866 | Como alternativa al cliente gráfico predeterminado de @command{qemu} puede | ||
| 24867 | usar @command{remote-viewer} del paquete @command{virt-viewer}. Para | ||
| 24868 | conectarse proporcione la opción @command{-spice | ||
| 24869 | port=5930,disable-ticketing} a @command{qemu}. Véase la sección previa para | ||
| 24870 | más información sobre cómo hacer esto. | ||
| 24871 | |||
| 24872 | Spice también le permite hacer cosas como compartir su portapapeles con su | ||
| 24873 | máquina virtual. Para activarlo debe proporcionar también las siguientes | ||
| 24874 | opciones 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, | ||
| 24880 | name=com.redhat.spice.0 | ||
| 24881 | @end example | ||
| 24882 | |||
| 24883 | Tambié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 | |||
| 24888 | Las secciones anteriores muestran los servicios disponibles y cómo se pueden | ||
| 24889 | combinar en una declaración @code{operating-system}. ¿Pero cómo las | ||
| 24890 | definimos 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 | ||
| 24904 | Definimos un @dfn{servicio} como, @i{grosso modo}, algo que extiende la | ||
| 24905 | funcionalidad del sistema operativo. Habitualmente un servicio es un | ||
| 24906 | proceso---un @dfn{daemon}---iniciado cuando el sistema arranca: un servidor | ||
| 24907 | de shell seguro, un servidor Web, el daemon de construcción de Guix, etc. A | ||
| 24908 | veces un servicio es un daemon cuya ejecución puede ser iniciada por otro | ||
| 24909 | daemon---por ejemplo, un servidor FTP iniciado por @command{inetd} o un | ||
| 24910 | servicio D-Bus activado por @command{dbus-daemon}. De manera ocasional, un | ||
| 24911 | servicio no se puede asociar a un daemon. Por ejemplo, el servicio | ||
| 24912 | ``account'' recopila cuentas de usuaria y se asegura que existen cuando el | ||
| 24913 | sistema se ejecuta; el servicio ``udev'' recopila reglas de gestión de | ||
| 24914 | dispositivos 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 | ||
| 24918 | Guix system services are connected by @dfn{extensions}. For instance, the | ||
| 24919 | secure shell service @emph{extends} the Shepherd---the initialization | ||
| 24920 | system, running as PID@tie{}1---by giving it the command lines to start and | ||
| 24921 | stop the secure shell daemon (@pxref{Servicios de red, | ||
| 24922 | @code{openssh-service-type}}); the UPower service extends the D-Bus service | ||
| 24923 | by passing it its @file{.service} specification, and extends the udev | ||
| 24924 | service by passing it device management rules (@pxref{Servicios de escritorio, | ||
| 24925 | @code{upower-service}}); the Guix daemon service extends the Shepherd by | ||
| 24926 | passing it the command lines to start and stop the daemon, and extends the | ||
| 24927 | account service by passing it a list of required build user accounts | ||
| 24928 | (@pxref{Servicios base}). | ||
| 24929 | |||
| 24930 | Al fin y al cabo, los servicios y sus relaciones de ``extensión'' forman un | ||
| 24931 | grafo acíclico dirigido (GAD). Si representamos los servicios como cajas y | ||
| 24932 | las extensiones como flechas, un sistema típico puede proporcionar algo de | ||
| 24933 | este estilo: | ||
| 24934 | |||
| 24935 | @image{images/service-graph,,5in,Grafo típico de extensiones de servicios.} | ||
| 24936 | |||
| 24937 | @cindex servicio del sistema | ||
| 24938 | En la base, podemos ver el @dfn{servicio del sistema}, el cual produce el | ||
| 24939 | directorio que contiene todo lo necesario para ejecutar y arrancar el | ||
| 24940 | sistema, como es devuelto por la orden @command{guix system | ||
| 24941 | build}. @xref{Referencia de servicios}, para aprender acerca de otros servicios | ||
| 24942 | mostrados aquí. @xref{system-extension-graph, la orden @command{guix system | ||
| 24943 | extension-graph}}, para información sobre cómo generar esta representación | ||
| 24944 | para una definición particular de sistema operativo. | ||
| 24945 | |||
| 24946 | @cindex tipos de servicio | ||
| 24947 | Technically, developers can define @dfn{service types} to express these | ||
| 24948 | relations. There can be any number of services of a given type on the | ||
| 24949 | system---for instance, a system running two instances of the GNU secure | ||
| 24950 | shell server (lsh) has two instances of @code{lsh-service-type}, with | ||
| 24951 | different parameters. | ||
| 24952 | |||
| 24953 | La siguiente sección describe la interfaz programática para tipos de | ||
| 24954 | servicio y servicios. | ||
| 24955 | |||
| 24956 | @node Tipos de servicios y servicios | ||
| 24957 | @subsection Tipos de servicios y servicios | ||
| 24958 | |||
| 24959 | Un @dfn{tipo de servicio} es un nodo en el GAD descrito | ||
| 24960 | previamente. Empecemos con un ejemplo simple, el tipo de servicio para el | ||
| 24961 | daemon 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 | ||
| 24975 | Define tres cosas: | ||
| 24976 | |||
| 24977 | @enumerate | ||
| 24978 | @item | ||
| 24979 | Un nombre, cuyo único propósito es facilitar la inspección y la depuración. | ||
| 24980 | |||
| 24981 | @item | ||
| 24982 | Una lista de @dfn{extensiones de servicio}, donde cada extensión designa el | ||
| 24983 | tipo de servicio a extender y un procedimiento que, dados los parámetros del | ||
| 24984 | servicio, devuelve una lista de objetos para extender el servicio de dicho | ||
| 24985 | tipo. | ||
| 24986 | |||
| 24987 | Cada tipo de servicio tiene al menos una extensión de servicio. La única | ||
| 24988 | excepción es el @dfn{tipo de servicio de arranque}, que es el último | ||
| 24989 | servicio. | ||
| 24990 | |||
| 24991 | @item | ||
| 24992 | De manera opcional, un valor predeterminado para instancias de este tipo. | ||
| 24993 | @end enumerate | ||
| 24994 | |||
| 24995 | In this example, @code{guix-service-type} extends three services: | ||
| 24996 | |||
| 24997 | @table @code | ||
| 24998 | @item shepherd-root-service-type | ||
| 24999 | The @code{guix-shepherd-service} procedure defines how the Shepherd service | ||
| 25000 | is extended. Namely, it returns a @code{<shepherd-service>} object that | ||
| 25001 | defines how @command{guix-daemon} is started and stopped (@pxref{Servicios de Shepherd}). | ||
| 25002 | |||
| 25003 | @item account-service-type | ||
| 25004 | This extension for this service is computed by @code{guix-accounts}, which | ||
| 25005 | returns a list of @code{user-group} and @code{user-account} objects | ||
| 25006 | representing the build user accounts (@pxref{Invocación de guix-daemon}). | ||
| 25007 | |||
| 25008 | @item activation-service-type | ||
| 25009 | Here @code{guix-activation} is a procedure that returns a gexp, which is a | ||
| 25010 | code snippet to run at ``activation time''---e.g., when the service is | ||
| 25011 | booted. | ||
| 25012 | @end table | ||
| 25013 | |||
| 25014 | Un 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 | |||
| 25023 | El segundo parámetro a la forma @code{service} es un valor que representa | ||
| 25024 | los parámetros de esta instancia específica del | ||
| 25025 | servicio. @xref{guix-configuration-type, @code{guix-configuration}}, para | ||
| 25026 | información acerca del tipo de datos @code{guix-configuration}. Cuando se | ||
| 25027 | omite 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 | ||
| 25034 | but is not extensible itself. | ||
| 25035 | |||
| 25036 | @c @subsubsubsection Extensible Service Types | ||
| 25037 | |||
| 25038 | El tipo de servicio para un servicio @emph{extensible} puede tener esta | ||
| 25039 | forma: | ||
| 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 | |||
| 25057 | This is the service type for the | ||
| 25058 | @uref{https://wiki.gentoo.org/wiki/Project:Eudev, eudev device management | ||
| 25059 | daemon}. 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 | ||
| 25064 | Este es el procedimiento para @dfn{componer} la lista de extensiones en | ||
| 25065 | servicios de este tipo. | ||
| 25066 | |||
| 25067 | Los servicios pueden extender el servicio udev proporcionandole una lista de | ||
| 25068 | reglas; componemos estas extensiones simplemente concatenandolas. | ||
| 25069 | |||
| 25070 | @item extend | ||
| 25071 | Este procedimiento define cómo el valor del servicio se @dfn{extiende} con | ||
| 25072 | la composición de la extensión. | ||
| 25073 | |||
| 25074 | Las extensiones de udev se componen en una lista de reglas, pero el valor | ||
| 25075 | del servicio udev es en sí un registro @code{<udev-configuration>}. Por | ||
| 25076 | tanto aquí extendemos el registro agregando la lista de reglas que contiene | ||
| 25077 | al final de la lista de reglas que se contribuyeron. | ||
| 25078 | |||
| 25079 | @item description | ||
| 25080 | Es una cadena que proporciona una descripción del tipo de servicio. Dicha | ||
| 25081 | cadena puede contener lenguaje de marcado Texinfo (@pxref{Overview,,, | ||
| 25082 | texinfo, GNU Texinfo}). La orden @command{guix system search} busca estas | ||
| 25083 | cadenas y las muestra (@pxref{Invocación de guix system}). | ||
| 25084 | @end table | ||
| 25085 | |||
| 25086 | There 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} | ||
| 25088 | specifications would be ambiguous. | ||
| 25089 | |||
| 25090 | ¿Todavía aquí? La siguiente sección proporciona una referencia de la | ||
| 25091 | interfaz programática de los servicios. | ||
| 25092 | |||
| 25093 | @node Referencia de servicios | ||
| 25094 | @subsection Referencia de servicios | ||
| 25095 | |||
| 25096 | Ya hemos echado un vistazo a los tipos de servicio (@pxref{Tipos de servicios y servicios}). Esta sección proporciona referencias sobre cómo manipular | ||
| 25097 | servicios 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}] | ||
| 25101 | Devuelve un nuevo servicio de @var{tipo}, un objeto @code{<service-type>} | ||
| 25102 | (véase a continuación). @var{valor} puede ser cualquier objeto; represental | ||
| 25103 | los parámetros de esta instancia de servicio particular. | ||
| 25104 | |||
| 25105 | Cuando 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 | |||
| 25108 | Por ejemplo, esto: | ||
| 25109 | |||
| 25110 | @example | ||
| 25111 | (service openssh-service-type) | ||
| 25112 | @end example | ||
| 25113 | |||
| 25114 | @noindent | ||
| 25115 | es equivalente a esto: | ||
| 25116 | |||
| 25117 | @example | ||
| 25118 | (service openssh-service-type | ||
| 25119 | (openssh-configuration)) | ||
| 25120 | @end example | ||
| 25121 | |||
| 25122 | En ambos casos el resultado es una instancia de @code{openssh-service-type} | ||
| 25123 | con la configuración predeterminada. | ||
| 25124 | @end deffn | ||
| 25125 | |||
| 25126 | @deffn {Procedimiento Scheme} service? @var{obj} | ||
| 25127 | Devuelve verdadero si @var{obj} es un servicio. | ||
| 25128 | @end deffn | ||
| 25129 | |||
| 25130 | @deffn {Procedimiento Scheme} service-kind @var{servicio} | ||
| 25131 | Devuelve 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} | ||
| 25136 | Devuelve el valor asociado con @var{servicio}. Representa sus parámetros. | ||
| 25137 | @end deffn | ||
| 25138 | |||
| 25139 | Este 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 | |||
| 25157 | The @code{modify-services} form provides a handy way to change the | ||
| 25158 | parameters 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 | ||
| 25160 | services. 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, | ||
| 25162 | GNU Guile Reference Manual}); @code{modify-services} simply provides a more | ||
| 25163 | concise form for this common pattern. | ||
| 25164 | |||
| 25165 | @deffn {Sintaxis Scheme} modify-services @var{servicios} @ | ||
| 25166 | (@var{tipo} @var{variable} => @var{cuerpo}) @dots{} | ||
| 25167 | |||
| 25168 | Modifica los servicios listados en @var{servicios} de acuerdo a las | ||
| 25169 | cláusulas proporcionadas. Cada cláusula tiene la forma: | ||
| 25170 | |||
| 25171 | @example | ||
| 25172 | (@var{tipo} @var{variable} => @var{cuerpo}) | ||
| 25173 | @end example | ||
| 25174 | |||
| 25175 | donde @var{tipo} es un tipo de servicio---por ejemplo, | ||
| 25176 | @code{guix-service-type}---y @var{variable} es un identificador que se | ||
| 25177 | asocia dentro del @var{cuerpo} a los parámetros del servicio---por ejemplo, | ||
| 25178 | una instancia @code{guix-configuration}---del servicio original de dicho | ||
| 25179 | @var{ŧipo}. | ||
| 25180 | |||
| 25181 | El @var{cuerpo} deve evaluar a los nuevos parámetros del servicio, que serán | ||
| 25182 | usados para configurar el nuevo servicio. Este nuevo servicio reemplaza el | ||
| 25183 | original en la lista resultante. Debido a que los parámetros de servicio de | ||
| 25184 | un servicio se crean mediante el uso de @code{define-record-type*}, puede | ||
| 25185 | escribir un breve @var{cuerpo} que evalúe a los nuevos parámetros del | ||
| 25186 | servicio 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 | |||
| 25193 | A continuación se procede con la interfaz programática de los tipos de | ||
| 25194 | servicios. Es algo que debe conocer para escribir definiciones de nuevos | ||
| 25195 | servicios, 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 | ||
| 25200 | Esta es la representación de un @dfn{tipo de servicio} (@pxref{Tipos de servicios y servicios}). | ||
| 25201 | |||
| 25202 | @table @asis | ||
| 25203 | @item @code{name} | ||
| 25204 | Es un símbolo, usado únicamente para simplificar la inspección y la | ||
| 25205 | depuración. | ||
| 25206 | |||
| 25207 | @item @code{extensions} | ||
| 25208 | Una lista no vacía de objetos @code{<service-extension>} (véase a | ||
| 25209 | continuación). | ||
| 25210 | |||
| 25211 | @item @code{compose} (predeterminado: @code{#f}) | ||
| 25212 | Si es @code{#f}, entonces el tipo de servicio denota servicios que no pueden | ||
| 25213 | extenderse---es decir, servicios que no pueden recibir ``valores'' de otros | ||
| 25214 | servicios. | ||
| 25215 | |||
| 25216 | En otro caso, debe ser un procedimiento de un único parámetro. El | ||
| 25217 | procedimiento es invocado en @code{fold-services} y se le proporciona una | ||
| 25218 | lista de valores recibidos de las extensiones. Puede devolver un valor | ||
| 25219 | único. | ||
| 25220 | |||
| 25221 | @item @code{extend} (predeterminado: @code{#f}) | ||
| 25222 | Si es @code{#f}, los servicios de este tipo no pueden extenderse. | ||
| 25223 | |||
| 25224 | En otro caso, debe ser un procedimiento que acepte dos parámetros: | ||
| 25225 | @code{fold-services} lo invoca, proporcionandole el valor inicial del | ||
| 25226 | servicio como el primer parámetro y el resultado de aplicar @code{compose} a | ||
| 25227 | los valores de las extensiones como segundo parámetro. Debe devolver un | ||
| 25228 | valor 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 | |||
| 25237 | Devuelve una nueva extensión para servicios del tipo | ||
| 25238 | @var{tipo-deseado}. @var{calcula} debe ser un procedimiento de un único | ||
| 25239 | parámetro: es llamado en @code{fold-services}, proporcionandole el valor | ||
| 25240 | asociado con el servicio que proporciona la extensión; debe devolver un | ||
| 25241 | valor válido para el servicio deseado. | ||
| 25242 | @end deffn | ||
| 25243 | |||
| 25244 | @deffn {Procedimiento Scheme} service-extension? @var{obj} | ||
| 25245 | Devuelve verdadero si @var{obj} es una expresión-G. | ||
| 25246 | @end deffn | ||
| 25247 | |||
| 25248 | De manera ocasional, puede desear simplemente extender un servicio | ||
| 25249 | existente. Esto implica la creación de un nuevo tipo de servicio y la | ||
| 25250 | especificación de la extensión deseada, lo cual puede ser engorroso; el | ||
| 25251 | procedimiento @code{simple-service} proporciona un atajo para ello. | ||
| 25252 | |||
| 25253 | @deffn {Procedimiento Scheme} simple-service @var{nombre} @var{deseado} @var{valor} | ||
| 25254 | Devuelve un servicio que extiende @var{deseado} con @var{valor}. Esto | ||
| 25255 | funciona creando una instancia única del tipo de servicio @var{nombre}, de | ||
| 25256 | la cual el servicio devuelto es una instancia. | ||
| 25257 | |||
| 25258 | Por ejemplo, esto extiende mcron (@pxref{Ejecución de tareas programadas}) con una | ||
| 25259 | tarea 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 | |||
| 25267 | En el núcleo de la abstracción de los servicios se encuentra el | ||
| 25268 | procedimiento @code{fold-services}, que es responsable de la ``compilación'' | ||
| 25269 | de una lista de servicios en un único directorio que contiene todo lo | ||
| 25270 | necesario para arrancar y ejecutar el sistema---el directorio mostrado por | ||
| 25271 | la orden @command{guix system build} (@pxref{Invocación de guix system}). En | ||
| 25272 | esencia, propaga las extensiones de servicios a través del grafo de | ||
| 25273 | servicios, actualizando los parámetros de cada nodo en el camino, hasta que | ||
| 25274 | alcanza el nodo raíz. | ||
| 25275 | |||
| 25276 | @deffn {Procedimiento Scheme} fold-services @var{servicios} @ | ||
| 25277 | [#:target-type @var{system-service-type}] | ||
| 25278 | Recorre @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 | |||
| 25282 | Por último, el módulo @code{(gnu services)} también define varios tipos | ||
| 25283 | esenciales de servicios, algunos de los cuales se enumeran a continuación. | ||
| 25284 | |||
| 25285 | @defvr {Variable Scheme} system-service-type | ||
| 25286 | Esta es la raíz del grafo de servicios. Produce el directorio del sistema | ||
| 25287 | como lo devuelve la orden @code{guix system build}. | ||
| 25288 | @end defvr | ||
| 25289 | |||
| 25290 | @defvr {Variable Scheme} boot-service-type | ||
| 25291 | El tipo del ``servicio de arranque'', que produce un @dfn{guión de | ||
| 25292 | arranque}. El guión de arranque es lo que ejecuta el disco inicial de RAM | ||
| 25293 | cuando se arranca. | ||
| 25294 | @end defvr | ||
| 25295 | |||
| 25296 | @defvr {Variable Scheme} etc-service-type | ||
| 25297 | El tipo del servicio @file{/etc}. Este servicio se usa para crear los | ||
| 25298 | ficheros en @file{/etc} y puede extenderse proporcionandole pares | ||
| 25299 | nombre/fichero como estas: | ||
| 25300 | |||
| 25301 | @example | ||
| 25302 | (list `("issue" ,(plain-file "issue" "¡Bienvenida!\n"))) | ||
| 25303 | @end example | ||
| 25304 | |||
| 25305 | En este ejemplo, el ejecto sería la adición de un fichero @file{/etc/issue} | ||
| 25306 | que apunta al fichero proporcionado. | ||
| 25307 | @end defvr | ||
| 25308 | |||
| 25309 | @defvr {Variable Scheme} setuid-program-service-type | ||
| 25310 | Tipo para el ``servicio de programas setuid''. Este servicio recopila listas | ||
| 25311 | de nombres de ficheros ejecutables, proporcionados como expresiones-G, y los | ||
| 25312 | añ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 | ||
| 25317 | Tipo del servicio que genera el @dfn{perfil del sistema}---es decir, los | ||
| 25318 | programas en @file{/run/current-system/profile}. Otros servicios pueden | ||
| 25319 | extenderlo proporcionandole listas de paquetes a añadir al perfil del | ||
| 25320 | sistema. | ||
| 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 | ||
| 25330 | The @code{(gnu services shepherd)} module provides a way to define services | ||
| 25331 | managed by the GNU@tie{}Shepherd, which is the initialization system---the | ||
| 25332 | first process that is started when the system boots, also known as | ||
| 25333 | PID@tie{}1 (@pxref{Introducción,,, shepherd, The GNU Shepherd Manual}). | ||
| 25334 | |||
| 25335 | Los servicios en Shepherd pueden depender de otros servicios. Por ejemplo, | ||
| 25336 | el daemon SSH puede tener que arrancarse tras el arranque del daemon syslog, | ||
| 25337 | lo cual a su vez puede suceder únicamente tras el montaje de todos los | ||
| 25338 | sistemas de ficheros. El sistema operativo simple definido previamente | ||
| 25339 | (@pxref{Uso de la configuración del sistema}) genera un grafo de servicios como | ||
| 25340 | este: | ||
| 25341 | |||
| 25342 | @image{images/shepherd-graph,,5in,Grafo típico de servicios de shepherd.} | ||
| 25343 | |||
| 25344 | En realidad puede generar dicho grafo para cualquier definición de sistema | ||
| 25345 | operativo mediante el uso de la orden @command{guix system shepherd-graph} | ||
| 25346 | (@pxref{system-shepherd-graph, @command{guix system shepherd-graph}}). | ||
| 25347 | |||
| 25348 | The @code{%shepherd-root-service} is a service object representing | ||
| 25349 | PID@tie{}1, of type @code{shepherd-root-service-type}; it can be extended by | ||
| 25350 | passing it lists of @code{<shepherd-service>} objects. | ||
| 25351 | |||
| 25352 | @deftp {Tipo de datos} shepherd-service | ||
| 25353 | El tipo de datos que representa un servicio gestionado por Shepherd. | ||
| 25354 | |||
| 25355 | @table @asis | ||
| 25356 | @item @code{provision} | ||
| 25357 | Una lista de símbolos que indican lo que proporciona el servicio. | ||
| 25358 | |||
| 25359 | Esto son nombres que pueden proporcionarse a @command{herd start}, | ||
| 25360 | @command{herd status} y órdenes similares (@pxref{Invoking herd,,, shepherd, | ||
| 25361 | The GNU Shepherd Manual}). @xref{Slots of services, the @code{provides} | ||
| 25362 | slot,, shepherd, The GNU Shepherd Manual}, para más detalles. | ||
| 25363 | |||
| 25364 | @item @code{requirements} (predeterminados: @code{'()}) | ||
| 25365 | Lista de símbolos que indican los servicios Shepherd de los que este | ||
| 25366 | depende. | ||
| 25367 | |||
| 25368 | @cindex one-shot services, for the Shepherd | ||
| 25369 | @item @code{one-shot?} (predeterminado: @code{#f}) | ||
| 25370 | Whether this service is @dfn{one-shot}. One-shot services stop immediately | ||
| 25371 | after their @code{start} action has completed. @xref{Slots of services,,, | ||
| 25372 | shepherd, The GNU Shepherd Manual}, for more info. | ||
| 25373 | |||
| 25374 | @item @code{respawn?} (predeterminado: @code{#t}) | ||
| 25375 | Indica si se debe reiniciar el servicio cuando se para, por ejemplo cuando | ||
| 25376 | el proceso subyacente muere. | ||
| 25377 | |||
| 25378 | @item @code{start} | ||
| 25379 | @itemx @code{stop} (predeterminado: @code{#~(const #f)}) | ||
| 25380 | Los campos @code{start} y @code{stop} hacen referencia a las características | ||
| 25381 | de Shepherd de arranque y parada de procesos respectivamente (@pxref{Service | ||
| 25382 | De- and Constructors,,, shepherd, The GNU Shepherd Manual}). Se proporcionan | ||
| 25383 | como expresiones-G que se expandirán en el fichero de configuración de | ||
| 25384 | Shepherd (@pxref{Expresiones-G}). | ||
| 25385 | |||
| 25386 | @item @code{actions} (predeterminadas: @code{'()}) | ||
| 25387 | @cindex acciones, de servicios de Shepherd | ||
| 25388 | Esta es la lista de objetos @code{shepherd-action} (véase a continuación) | ||
| 25389 | que definen las @dfn{acciones} permitidas por el servicio, además de las | ||
| 25390 | acciones estándar @code{start} y @code{stop}. Las acciones que se listan | ||
| 25391 | aquí estarán disponibles como ordenes de @command{herd}: | ||
| 25392 | |||
| 25393 | @example | ||
| 25394 | herd @var{acción} @var{servicio} [@var{parámetros}@dots{}] | ||
| 25395 | @end example | ||
| 25396 | |||
| 25397 | @item @code{documentación} | ||
| 25398 | Una cadena de documentación, que se mostrará al ejecutar: | ||
| 25399 | |||
| 25400 | @example | ||
| 25401 | herd doc @var{nombre-del-servicio} | ||
| 25402 | @end example | ||
| 25403 | |||
| 25404 | where @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}) | ||
| 25408 | Esta 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 | ||
| 25415 | Este es el tipo de datos que define acciones adicionales implementadas por | ||
| 25416 | un servicio Shepherd (vea previamente). | ||
| 25417 | |||
| 25418 | @table @code | ||
| 25419 | @item name | ||
| 25420 | Símbolo que nombra la acción. | ||
| 25421 | |||
| 25422 | @item documentación | ||
| 25423 | Esta es una cadena de documentación para la acción. Puede verse ejecutando: | ||
| 25424 | |||
| 25425 | @example | ||
| 25426 | herd doc @var{servicio} action @var{acción} | ||
| 25427 | @end example | ||
| 25428 | |||
| 25429 | @item procedure | ||
| 25430 | Debe ser una expresión-G que evalua a un procedimiento de al menos un | ||
| 25431 | parámetro, el cual es el ``valor de ejecución'' del servicio (@pxref{Slots | ||
| 25432 | of services,,, shepherd, The GNU Shepherd Manual}). | ||
| 25433 | @end table | ||
| 25434 | |||
| 25435 | El siguiente ejemplo define una acción llamada @code{di-hola} que saluda | ||
| 25436 | amablemente 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 | |||
| 25448 | Asumiendo que esta acción se añade al servicio @code{ejemplo}, puede | ||
| 25449 | ejecutar: | ||
| 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 | |||
| 25458 | Esta, como puede ver, es una forma un tanto sofisticada de decir | ||
| 25459 | hola. @xref{Service Convenience,,, shepherd, The GNU Shepherd Manual}, para | ||
| 25460 | más información sobre acciones. | ||
| 25461 | @end deftp | ||
| 25462 | |||
| 25463 | @defvr {Variable Scheme} shepherd-root-service-type | ||
| 25464 | El tipo de servicio para el ``servicio raíz'' de Shepherd---es decir, | ||
| 25465 | PID@tie{}1. | ||
| 25466 | |||
| 25467 | El tipo de servicio que las extensiones declaran cuando desean crear | ||
| 25468 | servicios shepherd (@pxref{Tipos de servicios y servicios}, para un | ||
| 25469 | ejemplo). Cada extensión debe pasar una lista de @code{<shepherd-service>}. | ||
| 25470 | @end defvr | ||
| 25471 | |||
| 25472 | @defvr {Variable Scheme} %shepherd-root-service | ||
| 25473 | Este 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 | ||
| 25485 | En la mayor parte de casos, los paquetes instalados con Guix contienen | ||
| 25486 | documentación. Hay dos formatos principales de documentación: ``Info'', un | ||
| 25487 | formato hipertextual navegable usado para software GNU, y ``páginas de | ||
| 25488 | manual'' (o ``páginas man''), la documentación lineal encontrada | ||
| 25489 | tradicionalmente 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 | |||
| 25492 | Puede buscar documentación de software instalado en su sistema por palabras | ||
| 25493 | clave. Por ejemplo, la siguiente orden busca información sobre ``TLS'' en | ||
| 25494 | manuales 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 | ||
| 25506 | La orden siguiente busca por la misma palabra clave en páginas man: | ||
| 25507 | |||
| 25508 | @example | ||
| 25509 | $ man -k TLS | ||
| 25510 | SSL (7) - OpenSSL SSL/TLS library | ||
| 25511 | certtool (1) - GnuTLS certificate tool | ||
| 25512 | @dots {} | ||
| 25513 | @end example | ||
| 25514 | |||
| 25515 | Estas búsquedas son completamente locales en su máquina de modo que tiene la | ||
| 25516 | garantía de que la documentación que encuentre corresponde con lo que está | ||
| 25517 | realmente instalado, puede acceder a ella sin conexión a la red, y se | ||
| 25518 | respeta su privacidad. | ||
| 25519 | |||
| 25520 | Una vez tenga estos resultados, puede ver la documentación relevante | ||
| 25521 | mediante la ejecución de, digamos: | ||
| 25522 | |||
| 25523 | @example | ||
| 25524 | $ info "(gnutls)Core TLS API" | ||
| 25525 | @end example | ||
| 25526 | |||
| 25527 | @noindent | ||
| 25528 | o: | ||
| 25529 | |||
| 25530 | @example | ||
| 25531 | $ man certtool | ||
| 25532 | @end example | ||
| 25533 | |||
| 25534 | Los manuales Info contienen secciones e índices, así como enlaces como | ||
| 25535 | aquellos encontrados en páginas Web. El lector @command{info} (@pxref{Top, | ||
| 25536 | Info reader,, info-stnd, Stand-alone GNU Info}) y su contraparte en Emacs | ||
| 25537 | (@pxref{Misc Help,,, emacs, The GNU Emacs Manual}) proporcionan | ||
| 25538 | combinaciones de teclas intuitivas para la navegación en los | ||
| 25539 | manuales. @xref{Getting Started,,, info, Info: An Introduction}, para una | ||
| 25540 | introducció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 | ||
| 25546 | Los programas binarios, como los producidos por los compiladores GCC por | ||
| 25547 | ejemplo, se escriben típicamente en el formato ELF, con una sección que | ||
| 25548 | contiene @dfn{información de depuración}. La información de depuración es lo | ||
| 25549 | que permite que el depurador, GDB, asocie código binario a código fuente; es | ||
| 25550 | necesaria para depurar un programa compilado en condiciones adecuadas. | ||
| 25551 | |||
| 25552 | El problema con la información de depuración es que ocupa un espacio | ||
| 25553 | considerable en el disco. Por ejemplo, la información de depuración de la | ||
| 25554 | biblioteca C de GNU ocupa más de 60 MiB. Por tanto, como usuaria, mantener | ||
| 25555 | toda la información de depuración de todos los programas instalados no es | ||
| 25556 | habitualmente una opción. No obstante, el ahorro de espacio no debe ser | ||
| 25557 | impedir la depuración---especialmente en el sistema GNU, que debería | ||
| 25558 | facilitar a sus usuarias ejercitar su libertad de computación (@pxref{Distribución GNU}). | ||
| 25559 | |||
| 25560 | Afortunadamente, las utilidades binarias GNU (Binutils) y GDB proporcionan | ||
| 25561 | un mecanismo que permite a las usuarias obtener lo mejor de ambos mundos: la | ||
| 25562 | información de depuración puede extraerse de los binarios y almacenarse en | ||
| 25563 | ficheros separados. GDB es capaz entonces de cargar la información de | ||
| 25564 | depuración desde esos ficheros, cuando estén disponibles (@pxref{Separate | ||
| 25565 | Debug Files,,, gdb, Debugging with GDB}). | ||
| 25566 | |||
| 25567 | La distribución GNU toma ventaja de este hecho almacenando la información de | ||
| 25568 | depuración en el subdirectorio @code{lib/debug} de una salida separada del | ||
| 25569 | paquete llamada @code{debug} (@pxref{Paquetes con múltiples salidas}). Las | ||
| 25570 | usuarias pueden elegir si instalan la salida @code{debug} de un paquete | ||
| 25571 | cuando la necesitan. Por ejemplo, la siguiente orden instala la información | ||
| 25572 | de depuración para la biblioteca C de GNU y para GNU Guile. | ||
| 25573 | |||
| 25574 | @example | ||
| 25575 | guix package -i glibc:debug guile:debug | ||
| 25576 | @end example | ||
| 25577 | |||
| 25578 | Se debe decir entonces a GDB que busque los ficheros de depuración en el | ||
| 25579 | perfil 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 | |||
| 25587 | A partir de ese momento GDB obtendrá la información de depuración de los | ||
| 25588 | ficheros @code{.debug} bajo @file{~/.guix-profile/lib/debug}. | ||
| 25589 | |||
| 25590 | Además, probablemente desee que GDB sea capaz de mostrar el código fuente | ||
| 25591 | que está depurando. Para hacerlo, tiene que desempaquetar el código fuente | ||
| 25592 | del 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 | ||
| 25594 | fuentes 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 | ||
| 25598 | El mecanismo de la salida @code{debug} en Guix se implementa por el sistema | ||
| 25599 | de construcción @code{gnu-build-system} (@pxref{Sistemas de construcción}). Ahora mismo | ||
| 25600 | necesita una activación explícita---la información de depuración está | ||
| 25601 | disponible únicamente para paquetes con definiciones que declaren | ||
| 25602 | explícitamente una salida @code{debug}. Esto puede cambiarse por una | ||
| 25603 | activación implícita en el futuro si nuestras granjas de construcción pueden | ||
| 25604 | soportar 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 | ||
| 25613 | De manera ocasional, vulnerabilidades importantes de seguridad se descubren | ||
| 25614 | en los paquetes de software y deben parchearse. Las desarrolladoras de Guix | ||
| 25615 | tratan de seguir las vulnerabilidades conocidas y aplicar parches tan pronto | ||
| 25616 | como sea posible en la rama @code{master} de Guix (todavía no proporcionamos | ||
| 25617 | una rama ``estable'' que contenga únicamente actualizaciones de | ||
| 25618 | seguridad). La herramienta @command{guix lint} ayuda a las desarrolladoras a | ||
| 25619 | encontrar versiones vulnerables de paquetes de software en la distribución: | ||
| 25620 | |||
| 25621 | @smallexample | ||
| 25622 | $ guix lint -c cve | ||
| 25623 | gnu/packages/base.scm:652:2: glibc@@2.21: probably vulnerable to CVE-2015-1781, CVE-2015-7547 | ||
| 25624 | gnu/packages/gcc.scm:334:2: gcc@@4.9.3: probably vulnerable to CVE-2015-5276 | ||
| 25625 | gnu/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 | ||
| 25632 | En la versión @value{VERSION}, esta característica descrita a continuación | ||
| 25633 | se considera en estado ``beta''. | ||
| 25634 | @end quotation | ||
| 25635 | |||
| 25636 | Guix 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 | ||
| 25639 | puede ralentizar de manera significativa el despliegue de correcciones en | ||
| 25640 | paquetes básicos como libc o Bash, ya que básicamente la distribución al | ||
| 25641 | completo debe reconstruirse. El uso de binarios preconstruidos ayuda | ||
| 25642 | (@pxref{Sustituciones}), pero el despliegue aún puede tomar más tiempo del | ||
| 25643 | deseado. | ||
| 25644 | |||
| 25645 | @cindex injertos (grafts en inglés) | ||
| 25646 | Para afrontar esto, Guix implementa @dfn{injertos}, un mecanismo que permite | ||
| 25647 | un rápido despliegue de actualizaciones críticas sin los costes asociados | ||
| 25648 | con una reconstrucción completa de la distribución. La idea es reconstruir | ||
| 25649 | únicamente el paquete que hace falta parchear, y entonces ``injertarlo'' en | ||
| 25650 | los paquetes explícitamente instalados por la usuaria y que previamente | ||
| 25651 | hacían referencia al paquete original. El coste de realizar un injerto es | ||
| 25652 | menor que una reconstrucción completa de la cadena de dependencias. | ||
| 25653 | |||
| 25654 | @cindex reemplazos de paquetes, para injertos | ||
| 25655 | For instance, suppose a security update needs to be applied to Bash. Guix | ||
| 25656 | developers 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 | ||
| 25658 | original package definition is augmented with a @code{replacement} field | ||
| 25659 | pointing 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 | |||
| 25669 | From there on, any package depending directly or indirectly on Bash---as | ||
| 25670 | reported by @command{guix gc --requisites} (@pxref{Invocación de guix gc})---that | ||
| 25671 | is installed is automatically ``rewritten'' to refer to @code{bash-fixed} | ||
| 25672 | instead of @code{bash}. This grafting process takes time proportional to | ||
| 25673 | the size of the package, usually less than a minute for an ``average'' | ||
| 25674 | package on a recent machine. Grafting is recursive: when an indirect | ||
| 25675 | dependency requires grafting, then grafting ``propagates'' up to the package | ||
| 25676 | that the user is installing. | ||
| 25677 | |||
| 25678 | Currently, the length of the name and version of the graft and that of the | ||
| 25679 | package it replaces (@code{bash-fixed} and @code{bash} in the example above) | ||
| 25680 | must be equal. This restriction mostly comes from the fact that grafting | ||
| 25681 | works by patching files, including binary files, directly. Other | ||
| 25682 | restrictions may apply: for instance, when adding a graft to a package | ||
| 25683 | providing a shared library, the original shared library and its replacement | ||
| 25684 | must have the same @code{SONAME} and be binary-compatible. | ||
| 25685 | |||
| 25686 | La opción de línea de órdenes @option{--no-grafts} le permite anular | ||
| 25687 | voluntariamente el proceso de injerto (@pxref{Opciones comunes de construcción, | ||
| 25688 | @option{--no-grafts}}). Por tanto, la orden: | ||
| 25689 | |||
| 25690 | @example | ||
| 25691 | guix build bash --no-grafts | ||
| 25692 | @end example | ||
| 25693 | |||
| 25694 | @noindent | ||
| 25695 | devuelve el nombre de fichero del almacén de la versión original de Bash, | ||
| 25696 | mientras que: | ||
| 25697 | |||
| 25698 | @example | ||
| 25699 | guix build bash | ||
| 25700 | @end example | ||
| 25701 | |||
| 25702 | @noindent | ||
| 25703 | devuelve el nombre de fichero del almacén de la versión ``corregida'', | ||
| 25704 | reemplazo de Bash. Esto le permite distinguir entre las dos variantes de | ||
| 25705 | Bash. | ||
| 25706 | |||
| 25707 | Para verificar a qué Bash hace referencia su perfil al completo, puede | ||
| 25708 | ejecutar (@pxref{Invocación de guix gc}): | ||
| 25709 | |||
| 25710 | @example | ||
| 25711 | guix 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 | ||
| 25716 | ejemplos previos. Del mismo modo, para una generación completa del sistema | ||
| 25717 | Guix: | ||
| 25718 | |||
| 25719 | @example | ||
| 25720 | guix gc -R `guix system build mi-configuracion.scm` | grep bash | ||
| 25721 | @end example | ||
| 25722 | |||
| 25723 | Por último, para comprobar qué versión de Bash están usando los procesos en | ||
| 25724 | ejecución, puede usar la orden @command{lsof}: | ||
| 25725 | |||
| 25726 | @example | ||
| 25727 | lsof | 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 | |||
| 25738 | El lanzamiento inicial en nuestro contexto hace referencia a cómo la | ||
| 25739 | distribución se construye ``de la nada''. Recuerde que el entorno de | ||
| 25740 | construcció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 | ||
| 25742 | gallina'': ¿cómo se construye el primer paquete? ¿Cómo se compila el primer | ||
| 25743 | compilador? Fíjese que esta es una cuestión de interés únicamente para la | ||
| 25744 | hacker curiosa, no para la usuaria normal, así que puede pasar por encima | ||
| 25745 | está sección sin ninguna vergüenza si se considera una ``usuaria normal''. | ||
| 25746 | |||
| 25747 | @cindex binarios del lanzamiento inicial | ||
| 25748 | El sistema GNU está compuesto principalmente de código C, con libc en su | ||
| 25749 | base. El sistema de construcción GNU en sí asume la disponibilidad del shell | ||
| 25750 | Bourne y las herramientas de línea de órdenes proporcionadas por GNU | ||
| 25751 | Coreutils, Awk, Findutils, `sed' y `grep'. Además, los programas de | ||
| 25752 | construcción---programas que ejecutan @code{./configure}, @code{make}, | ||
| 25753 | etc.---están escritos en Scheme Guile | ||
| 25754 | (@pxref{Derivaciones}). Consecuentemente, para ser capaz de construir | ||
| 25755 | cualquier cosa, desde cero, Guix depende en binarios preconstruidos de | ||
| 25756 | Guile, GCC, Binutils, libc y otros paquetes mencionados anteriormente---los | ||
| 25757 | @dfn{binarios del lanzamiento inicial}. | ||
| 25758 | |||
| 25759 | Estos binarios del lanzamiento inicial se ``dan por supuestos'', aunque se | ||
| 25760 | pueden 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 | ||
| 25767 | del lanzamiento inicial temprano} | ||
| 25768 | |||
| 25769 | La figura previa muestra el auténtico inicio del grafo de dependencias de la | ||
| 25770 | distribució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 | ||
| 25775 | guix graph -t derivation \ | ||
| 25776 | -e '(@@@@ (gnu packages bootstrap) %bootstrap-gcc)' \ | ||
| 25777 | | dot -Tps > t.ps | ||
| 25778 | @end example | ||
| 25779 | |||
| 25780 | En este nivel de detalle, las cosas son ligeramente complejas. Primero, | ||
| 25781 | Guile en sí consiste en un ejecutable ELF, junto a muchas fuentes y ficheros | ||
| 25782 | compilados Scheme que se cargan dinámicamente durante la ejecución. Esto se | ||
| 25783 | almacena en el archivador tar @file{guile-2.0.7.tar.xz} mostrado en este | ||
| 25784 | grafo. Este archivador es parte de la distribución de ``fuentes'' de Guix, y | ||
| 25785 | se 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 | ||
| 25788 | al almacén? Para resolver este problema, la derivación | ||
| 25789 | @code{guile-bootstrap-2.0.drv}---la primera en construirse---usa @code{bash} | ||
| 25790 | como su constructor, que ejecuta @code{build-bootstrap-guile.sh}, que a su | ||
| 25791 | vez 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, | ||
| 25793 | también parte de la distribución de fuentes de Guix, cuyo único propósito es | ||
| 25794 | permitir la extracción del archivador de Guile. | ||
| 25795 | |||
| 25796 | Una vez que@code{guile-bootstrap-2.0.drv} se ha construido, tenemos un Guile | ||
| 25797 | funcional que se puede usar para ejecutar los programas de construcción | ||
| 25798 | siguientes. Su primera tarea es descargar los archivadores qu contienen los | ||
| 25799 | otros binarios preconstruidos---esto es lo que las derivaciones | ||
| 25800 | @code{.tar.xz.drv} hacen. Módulos Guix como @code{ftp-client.scm} se usan | ||
| 25801 | para este propósito. Las derivaciones @code{module-import.drv} importan esos | ||
| 25802 | módulos en un directorio del almacén, manteniendo la distribución de | ||
| 25803 | carpetas. Las derivaciones @code{module-import-compiled.drv} compilan esos | ||
| 25804 | módulos, y los escriben en un directorio con la distribución de carpetas | ||
| 25805 | correcta. Esto corresponde al parámetro @code{#:modules} de | ||
| 25806 | @code{build-expression->derivation} (@pxref{Derivaciones}). | ||
| 25807 | |||
| 25808 | Finalmente, los archivadores tar son extraídos por las derivaciones | ||
| 25809 | @code{gcc-bootstrap-0.drv}, @code{glibc-bootstrap-0.drv}, etcétera, hasta el | ||
| 25810 | punto en el que disponemos de una cadena de herramientas C funcional. | ||
| 25811 | |||
| 25812 | |||
| 25813 | @unnumberedsec Construcción de las herramientas de construcción | ||
| 25814 | |||
| 25815 | El lanzamiento inicial está completo cuando tenemos una cadena de | ||
| 25816 | herramientas completa que no depende en las herramientas preconstruidas del | ||
| 25817 | lanzamiento inicial descritas previamente. Este requisito de no-dependencia | ||
| 25818 | se verifica comprobando si los ficheros de la cadena de herramientas final | ||
| 25819 | contienen referencias a directorios de @file{/gnu/store} de las entradas del | ||
| 25820 | lanzamiento. El proceso que lleva a esta cadena de herramientas ``final'' es | ||
| 25821 | descrito por las definiciones de paquetes encontradas en el módulo | ||
| 25822 | @code{(gnu packages commencement)}. | ||
| 25823 | |||
| 25824 | La orden @command{guix graph} nos permite ``distanciarnos'' en comparación | ||
| 25825 | con el grafo previo, mirando al nivel de objetos de paquetes en vez de | ||
| 25826 | derivaciones individuales---recuerde que un paquete puede traducirse en | ||
| 25827 | varias derivaciones, típicamente una derivación para descargar sus fuentes, | ||
| 25828 | una para construir los módulos Guile que necesita y uno para realmente | ||
| 25829 | construir el paquete de las fuentes. La orden: | ||
| 25830 | |||
| 25831 | @example | ||
| 25832 | guix graph -t bag \ | ||
| 25833 | -e '(@@@@ (gnu packages commencement) | ||
| 25834 | glibc-final-with-bootstrap-bash)' | dot -Tps > t.ps | ||
| 25835 | @end example | ||
| 25836 | |||
| 25837 | @noindent | ||
| 25838 | produce 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, | ||
| 25841 | pero como es una buena aproximación, la consideraremos final}, mostrado a | ||
| 25842 | continuación. | ||
| 25843 | |||
| 25844 | @image{images/bootstrap-packages,6in,,Grafo de dependencias de los primeros | ||
| 25845 | paquetes} | ||
| 25846 | |||
| 25847 | @c See <http://lists.gnu.org/archive/html/gnu-system-discuss/2012-10/msg00000.html>. | ||
| 25848 | La primera herramienta que se construye con los binarios del lanzamiento | ||
| 25849 | inicial es GNU@tie{}Make---marcado como @code{make-boot0} en el grafo---, | ||
| 25850 | que es un pre-requisito para todos los paquetes siguientes. Una vez hecho se | ||
| 25851 | construyen Findutils y Diffutils. | ||
| 25852 | |||
| 25853 | Después viene la primera fase de Binutils y GCC, construidas como | ||
| 25854 | herramientas pseudo-cruzadas---es decir, con @code{--target} igual a | ||
| 25855 | @code{--host}. Se usan para construir libc. Gracias a este truco de | ||
| 25856 | compilación cruzada, se garantiza que esta libc no tendrá ninguna referencia | ||
| 25857 | a la cadena de herramientas inicial. | ||
| 25858 | |||
| 25859 | Posteriormente se construyen las herramientas Binutils y GCC (no mostradas | ||
| 25860 | previamente) finales, y enlazan los programas contra la libc recién | ||
| 25861 | construía. Esta cadena de herramientas se usa para construir otros paquetes | ||
| 25862 | usados por Guix y el sistema de construcción GNU: Guile, Bash, Coreutils, | ||
| 25863 | etc. | ||
| 25864 | |||
| 25865 | ¡Y voilà! En este punto tenemos un conjunto completo de herramientas de | ||
| 25866 | construcción esperadas por el sistema de construcción GNU. Están en la | ||
| 25867 | variable @code{%final-inputs} del módulo @code{(gnu packages commencement)}, | ||
| 25868 | y 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 | ||
| 25875 | Debido a que la cadena de herramientas final no depende de los binarios de | ||
| 25876 | lanzamiento, estos rara vez necesitan ser actualizados. No obstante, es útil | ||
| 25877 | tener una forma automatizada de producirlos en caso de que se dé una | ||
| 25878 | actualización, y esto es lo que proporciona el módulo @code{(gnu packages | ||
| 25879 | make-bootstrap)}. | ||
| 25880 | |||
| 25881 | La siguiente orden construye los archivadores que contienen los binarios de | ||
| 25882 | lanzamiento (Guile, Binutils, GCC, libc, y un archivador que contiene una | ||
| 25883 | mezcla de Coreutils y otras herramientas básicas de línea de órdenes): | ||
| 25884 | |||
| 25885 | @example | ||
| 25886 | guix build bootstrap-tarballs | ||
| 25887 | @end example | ||
| 25888 | |||
| 25889 | Los 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 | ||
| 25893 | llegamos a un punto fijo? ¡Esa es una pregunta interesante! La respuesta es | ||
| 25894 | desconocida, pero si pudiese investigar más a fondo (y tiene unos recursos | ||
| 25895 | computacionales y de almacenamiento significativos para hacerlo) háganoslo | ||
| 25896 | saber. | ||
| 25897 | |||
| 25898 | @unnumberedsec Reducción del conjunto de binarios de lanzamiento | ||
| 25899 | |||
| 25900 | Nuestros binarios de lanzamiento actualmente incluyen GCC, Guile, etc. ¡Eso | ||
| 25901 | es un montón de código binario! ¿Por qué es eso un problema? Es un problema | ||
| 25902 | porque esos chorros de código binario no son auditables en la práctica, lo | ||
| 25903 | que hace difícil establecer qué código fuente los produjo. Cada binario | ||
| 25904 | no-auditable también nos deja vulnerables a puertas traseras en los | ||
| 25905 | compiladores, como describió Ken Thompson en su publicación de 1984 | ||
| 25906 | @emph{Reflections on Trusting Trust}. | ||
| 25907 | |||
| 25908 | Esto se mitiga por el hecho de que nuestros binarios de lanzamiento fueron | ||
| 25909 | generados por una revisión anterior de Guix. No obstante, esto no posee el | ||
| 25910 | nivel de transparencia que obtenemos en el resto del grado de dependencias | ||
| 25911 | de los paquetes, donde Guix siempre nos da una asociación de | ||
| 25912 | fuente-a-binario. Por lo tanto, nuestro objetivo es reducir el conjunto de | ||
| 25913 | binarios de lanzamiento al mínimo posible. | ||
| 25914 | |||
| 25915 | El @uref{http://bootstrappable.org, sitio web Bootstrappable.org} enumera | ||
| 25916 | proyectos en activo realizándolo. Uno de ellos está a punto de sustituir el | ||
| 25917 | GCC de lanzamiento con una secuencia de ensambladores, interpretes y | ||
| 25918 | compiladores de complejidad incremental, que pueden ser construidos desde | ||
| 25919 | las fuentes empezando con un código ensamblador simple y auditable. ¡Su | ||
| 25920 | ayuda es bienvenida! | ||
| 25921 | |||
| 25922 | |||
| 25923 | @node Transportar | ||
| 25924 | @chapter Transportar a una nueva plataforma | ||
| 25925 | |||
| 25926 | Como se explicó previamente, la distribución GNU es autocontenida, lo cual | ||
| 25927 | se consigue dependiendo de unos ``binarios del lanzamiento inicial'' | ||
| 25928 | preconstruidos (@pxref{Lanzamiento inicial}). Estos binarios son específicos para | ||
| 25929 | un núcleo del sistema operativo, arquitectura de la CPU e interfaz binaria | ||
| 25930 | de aplicaciones (ABI). Por tanto, para transportar la distribución a una | ||
| 25931 | nueva plataforma que no está soportada todavía, se deben construir estos | ||
| 25932 | binarios del lanzamiento inicial, y actualizar el módulo @code{(gnu packages | ||
| 25933 | bootstrap)} para usarlos en dicha plataforma. | ||
| 25934 | |||
| 25935 | Por suerte, Guix puede @emph{compilar de forma cruzada} esos binarios del | ||
| 25936 | lanzamiento inicial. Cuando todo va bien, y asumiendo que la cadena de | ||
| 25937 | herramientas GNU soporta para la plataforma deseada, esto puede ser tan | ||
| 25938 | simple como ejecutar una orden así: | ||
| 25939 | |||
| 25940 | @example | ||
| 25941 | guix build --target=armv5tel-linux-gnueabi bootstrap-tarballs | ||
| 25942 | @end example | ||
| 25943 | |||
| 25944 | Para que esto funcione, el procedimiento @code{glibc-dynamic-linker} en | ||
| 25945 | @code{(gnu packages bootstrap)} debe aumentarse para devolver el nombre de | ||
| 25946 | fichero correcto para el enlazador dinámico de libc en dicha plataforma; de | ||
| 25947 | igual manera, @code{system->linux-architecture} en @code{(gnu packages | ||
| 25948 | linux)} debe modificarse para la nueva plataforma. | ||
| 25949 | |||
| 25950 | Una vez construidos, el módulo @code{(gnu packages bootstrap)} debe ser | ||
| 25951 | actualizado para hacer referencia a estos binarios en la plataforma | ||
| 25952 | deseada. Esto es, los hash y las URL de los archivadores del lanzamiento | ||
| 25953 | inicial de la nueva plataforma deben añadirse junto a aquellos de las | ||
| 25954 | plataformas disponibles actualmente. El archivador tar del Guile usado para | ||
| 25955 | el lanzamiento inicial se trata de forma especial: se espera que esté | ||
| 25956 | disponible localmente, y @file{gnu/local.mk} tiene reglas que lo descargan | ||
| 25957 | para las arquitecturas disponibles; se debe añadir una regla para la nueva | ||
| 25958 | plataforma también. | ||
| 25959 | |||
| 25960 | En la práctica puede haber algunas complicaciones. Primero, puede ser que la | ||
| 25961 | tripleta extendida GNU que especifica un ABI (como el sufijo @code{eabi} | ||
| 25962 | previamente) no es reconocida por todas las herramientas GNU. Típicamente, | ||
| 25963 | glibc reconoce algunas de ellas, mientras que GCC usa una opción de | ||
| 25964 | configuración extra @code{--with-abi} (vea @code{gcc.scm} para ejemplos de | ||
| 25965 | como manejar este caso). En segundo lugar, algunos de los paquetes | ||
| 25966 | necesarios 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 | |||
| 25976 | Guix está basado en el @uref{http://nixops.org/nix, gestor de paquetes Nix}, | ||
| 25977 | que fue diseñado e implementado por Eelco Dolstra, con contribuciones de | ||
| 25978 | otra gente (véase el fichero @file{nix/AUTHORS} en Guix). Nix fue pionero en | ||
| 25979 | la gestión de paquetes funcional, y promovió características sin | ||
| 25980 | precedentes, como las actualizaciones de paquetes transaccionales y vuelta | ||
| 25981 | atrás, perfiles por usuaria y un proceso de compilación referencialmente | ||
| 25982 | transparente. Sin este trabajo, Guix no existiría. | ||
| 25983 | |||
| 25984 | Las distribuciones de software basadas en Nix, Nixpkgs y NixOS, también han | ||
| 25985 | sido una inspiración para Guix. | ||
| 25986 | |||
| 25987 | GNU@tie{}Guix en sí es un trabajo colectivo con contribuciones de un número | ||
| 25988 | de gente. Mire el fichero @file{AUTHORS} en Guix para más información sobre | ||
| 25989 | esa gente maja. El fichero @file{THANKS} enumera personas que han ayudado | ||
| 25990 | informando de errores, haciendose cargo de la infraestructura, | ||
| 25991 | proporcionando 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: | ||
