stringtranslate.com

GNU Guix

GNU Guix ( / ɡ k s / [2] ) es un gestor de paquetes multiplataforma funcional y una herramienta para instanciar y gestionar sistemas operativos tipo Unix , basado en el gestor de paquetes Nix . La configuración y las recetas de paquetes están escritas en Guile Scheme . GNU Guix es el gestor de paquetes predeterminado de la distribución GNU Guix System . [3]

A diferencia de los gestores de paquetes tradicionales , Guix (al igual que Nix) utiliza un modelo de implementación puramente funcional en el que el software se instala en directorios únicos generados a través de hashes criptográficos . Todas las dependencias de cada software se incluyen dentro de cada hash. [4] [5] Esto resuelve el problema del infierno de dependencias , [6] permite que coexistan varias versiones del mismo software y hace que los paquetes sean portables y reproducibles . La realización de cálculos científicos en una configuración de Guix se ha propuesto como una respuesta prometedora a la crisis de replicación . [7] [8]

El desarrollo de GNU Guix está entrelazado con el sistema GNU Guix , [9] una distribución de sistema operativo instalable que utiliza el núcleo Linux-libre y el sistema de inicio GNU Shepherd . [10] [11] [12]

Características generales

Los paquetes de Guix se definen a través de API funcionales de Guile Scheme diseñadas específicamente para la gestión de paquetes. Las dependencias se rastrean directamente en este lenguaje a través de valores especiales llamados "derivaciones" que son evaluados por el demonio de Guix de forma diferida . Guix realiza un seguimiento de estas referencias automáticamente para que los paquetes instalados puedan ser recolectados como basura cuando ningún otro paquete dependa de ellos; a costa de mayores requisitos de almacenamiento, se garantiza que todas las actualizaciones en Guix sean atómicas y puedan revertirse.

La característica de reversión de Guix se hereda del diseño de Nix y rara vez se encuentra en otros sistemas operativos , ya que requiere un enfoque poco ortodoxo sobre cómo debería funcionar el sistema (ver MicroOS ). Sin embargo, el administrador de paquetes Guix, como Nix , se puede usar en muchas distribuciones como Debian y Parabola . [13] [14] Esto también permite que varios usuarios instalen software de forma segura en el mismo sistema sin privilegios de administrador.

En comparación con los administradores de paquetes tradicionales, los almacenes de paquetes de Guix pueden crecer considerablemente y, por lo tanto, requieren más ancho de banda; aunque en comparación con las soluciones de contenedores (como Docker ) que también se emplean comúnmente para resolver el infierno de dependencias , Guix es más ágil y se ajusta a prácticas como no repetirse y fuente única de verdad . Si el usuario elige construir todo desde la fuente, se requiere un espacio de almacenamiento y un ancho de banda aún mayores.

La tienda

Heredado del diseño de Nix, la mayor parte del contenido del gestor de paquetes se guarda en un directorio /gnu/store donde solo el demonio Guix tiene acceso de escritura. Esto se consigue mediante montajes de enlaces especializados, donde el Store como sistema de archivos se monta como de solo lectura , prohibiendo la interferencia incluso del usuario root, mientras que el demonio Guix vuelve a montar el Store como de lectura/escritura en su propio espacio de nombres privado. Guix habla con este demonio para construir cosas o buscar sustitutos que se guardan todos en el store. Se desaconseja a los usuarios tocar manualmente el store volviéndolo a montar como de escritura, ya que esto anula todo el propósito del store.

Recolección de basura

Guix, al igual que Nix, tiene funciones de recolección de basura integradas para ayudar a eliminar los elementos muertos del almacén y conservar los activos . [15]

Definiciones de paquetes

Este es un ejemplo de una definición de paquete para el paquete hello:

( define-public hello ( package ( name "hello" ) ( version "2.10" ) ( source ( origin ( method url-fetch ) ( uri ( string-append "mirror://gnu/hello/hello-" version ".tar.gz" )) ( sha256 ( base32 "0ssi1wpaf7plaswqqjwigppsg5fyh99vdlb9kzl7c9lng89ndq1i" )))) ( build-system gnu-build-system ) ( synopsis "Hola, mundo GNU: Un paquete GNU de ejemplo" ) ( description "GNU Hello imprime el mensaje \" ¡Hola, mundo! \" y luego sale. Sirve como un ejemplo de las prácticas de codificación estándar de GNU. Como tal, admite argumentos de línea de comandos, múltiples idiomas, etc." ) ( home-page "https://www.gnu.org/software/hello/" ) ( licencia gpl3+ )))                            

Está escrito con Guile. Las recetas de paquetes se pueden inspeccionar fácilmente (ejecutando, por ejemplo, guix edit hello ) y modificar en Guix, lo que hace que el sistema sea transparente y muy fácil de modificar.

Actualizaciones transaccionales

Heredado del diseño de Nix, toda manipulación de los elementos de la tienda es independiente entre sí, y los directorios de la tienda comienzan con un hash codificado en base32 del código fuente de la derivación junto con sus entradas.

Perfiles

El paquete Guix utiliza generaciones de perfiles, que son una colección de enlaces simbólicos a elementos específicos de la tienda que juntos comprenden lo que el usuario ha instalado en el perfil. Cada vez que se instala o elimina un paquete, se crea una nueva generación.

Por ejemplo, el perfil de un usuario que solo instaló GNU Hello contiene enlaces al elemento de la tienda que contiene la versión de Hello instalada con el guix utilizado actualmente.

Por ejemplo, en la versión c087a90e06d7b9451f802323e24deb1862a21e0f de guix, esto corresponde al siguiente elemento: /gnu/store/md2plii4g5sk66wg9cgwc964l3xwhrm9-hello-2.10 (construido a partir de la receta anterior).

Además de los enlaces simbólicos, cada perfil que construye Guix también contiene una unión de todos los manuales de información, páginas de manual, íconos, fuentes, etc. para que el usuario pueda explorar la documentación y tener acceso a todos los íconos y fuentes instalados.

Los enlaces simbólicos predeterminados a las generaciones de perfiles se almacenan en /var/guix en el sistema de archivos.

Múltiples perfiles de usuario

El usuario puede crear cualquier cantidad de perfiles invocando guix package -p PROFILE-NAME COMMAND. Se creará un nuevo directorio con el nombre del perfil y los enlaces simbólicos de generación de perfiles en el directorio actual.

Retroceder

El paquete Guix permite volver instantáneamente a una generación de perfil anterior cambiando el enlace simbólico a una generación de perfil anterior. [16] Los perfiles también se almacenan en la tienda, por ejemplo, este elemento es un perfil que contiene hola arriba: /gnu/store/b4wipjlsapvnijmbawl7sh76087vpl4n-profile (construido y activado al ejecutar guix install hello ).

Entorno de shell

El shell Guix permite al usuario ingresar fácilmente a un entorno donde están presentes todos los paquetes necesarios para el desarrollo de software sin saturar el perfil predeterminado del usuario con dependencias para múltiples proyectos. [17]

Por ejemplo, al ejecutarse se ingresa a un entorno desechable donde está presente todo lo necesario para compilar hello en guix (gcc, guile, etc.).guix shell --development hello

Sin el indicador, solo se instalaría el paquete hello y no sus dependencias de compilación. Esto reemplaza al comando, que instala las dependencias de un paquete de manera predeterminada, ya que se consideró más intuitivo que el comando instalara los paquetes especificados de manera predeterminada y solo instalara las dependencias de desarrollo con un indicador. [18]--developmentguix environment

Entorno de desarrollo persistente

Si desea un entorno persistente con raíz gc que no se recolecte basura en la próxima ejecución de guix gc, puede crear una raíz:

Por ejemplo, al ejecutarse se ingresa a un entorno donde todo lo necesario para compilar guix está presente (gcc, guile, etc.) y registrado como raíz en el directorio actual (mediante un enlace simbólico a los elementos en el almacén).guix shell --root=hello-root --development hello

Embalar

El paquete Guix permite al usuario agrupar elementos de la tienda y generarlos como una imagen binaria de Docker, un tarball reubicable , un archivo de paquete Debian o un binario squashfs . [19]

Gráfico

El gráfico de Guix permite al usuario ver diferentes gráficos de los paquetes y sus dependencias. [20]

Sistema Guix (sistema operativo)

GNU Guix System o Guix System [25] [26] (anteriormente conocido como GuixSD [27] ) es una distribución Linux de código abierto , libre y de lanzamiento continuo construida alrededor de Guix, similar a cómo NixOS está construido alrededor de Nix . [28] [29] Permite una configuración declarativa del sistema operativo [30] y permite actualizaciones del sistema que el usuario puede revertir . [31] Utiliza el sistema de inicio GNU Shepherd [32] [33] y el kernel Linux-libre , con el apoyo del kernel GNU Hurd en desarrollo. [34] El 3 de febrero de 2015, la Free Software Foundation agregó la distribución a su lista de distribuciones Linux libres respaldadas. [35]

Soporte de arquitectura

Las siguientes arquitecturas de CPU son compatibles actualmente: [36]

Servicios del sistema

Los servicios del sistema, que se definen en el esquema Guile, [39] permiten al usuario componer de forma declarativa la configuración de los daemons y los servicios en segundo plano y especificar configuraciones. Esto permite al usuario, dentro de un único archivo de configuración o configuración modularizada, configurar todo el sistema operativo (por ejemplo, tener un proxy Tor , un servidor ssh y un servidor web que sirva guix-web a través de nginx en un puerto específico en el arranque). Pueden: [40]

Sistema de inicio GNU Shepherd

El sistema Guix utiliza el GNU Daemon Shepherd, anteriormente conocido como "dmd" ("Daemon Managing Daemons"), como su sistema de inicio , que se desarrolla en conjunto con Guix y está escrito y configurable en Guile . [41] Proporciona funcionalidad de espacio de usuario de forma asincrónica como servicios, que bajo Shepherd son funciones genéricas y tipos de datos de objetos que utiliza para extender el sistema operativo base de una manera definida. A diferencia de systemd , un proceso shepherd de espacio de usuario se ejecuta como el usuario. Central para el modelo Shepherd de inicialización de espacio de usuario es el concepto de extensión , una forma de componibilidad mediante la cual los servicios están diseñados para ser superpuestos a otros servicios, aumentándolos con comportamientos más elaborados o especializados según se desee. [42] Esto expresa las relaciones de dependencia basadas en instanciación que se encuentran en muchos sistemas de inicio modernos, [43] lo que hace que el sistema sea modular, pero también permite que los servicios interactúen de manera variable con otros servicios de formas arbitrarias, por ejemplo, un servicio que extiende otros dos servicios, requiriendo solo que uno esté presente, pero extendiendo fácilmente el segundo si se instancia más tarde sin la necesidad de ninguna reconfiguración o configuración adicional.

Shepherd también proporciona servicios virtuales que permiten el envío dinámico sobre una clase de objetos de servicio relacionados, como todos aquellos que instancian un agente de transferencia de correo (MTA) para el sistema. [44] Un sistema gobernado a través del demonio Shepherd puede representar su espacio de usuario como un gráfico acíclico dirigido , con el "servicio del sistema", que es responsable de las primeras fases de arranque e inicialización, como su raíz, y todos los servicios inicializados posteriormente como extensiones de la funcionalidad del servicio del sistema, ya sea directamente o de forma transitiva sobre otros servicios. [42] [45]

Está destinado a ser altamente programable por el administrador del sistema que utiliza Guile, pero también se puede utilizar para gestionar perfiles por usuario de servicios y demonios sin privilegios. [46] Sus servicios y configuración se almacenan de manera uniforme como código Scheme orientado a objetos , y mientras que un conjunto básico de servicios se proporciona con el sistema Guix básico, [47] se pueden declarar de manera flexible nuevos servicios arbitrarios y, a través del sistema de objetos de Guile , GOOPS, los servicios existentes se pueden redefinir a discreción del usuario pidiendo al Shepherd que reescriba dinámicamente los servicios de formas específicas en la instanciación. [48] [49]

GNU Shepherd fue diseñado originalmente para funcionar con GNU Hurd , y luego fue adoptado por Guix System. [50]

Retroceder

Similar a la característica de reversión de Nix , si una actualización del sistema deja a los usuarios con un sistema roto, los usuarios pueden revertir fácilmente paquetes individuales así como el estado completo del sistema con un simple comando:
guix package --roll-back[51]
Esto significa que el tipo de canal estable que es muy común en otras distribuciones de Linux ya no es necesario para los usuarios que están dispuestos a informar un error y esperar unos minutos, cuando intentan actualizar a través de guix pull . Esto se logra mediante una combinación del administrador de paquetes funcional de Guix , que trata cada paquete y configuración del sistema como una entidad inmutable y reproducible, [52] y el sistema de generación que mantiene un historial de configuraciones del sistema como "generaciones". Estas generaciones se almacenan como perfiles separados, que le permiten volver a cualquier configuración anterior, [53] y puede ver estas generaciones con
guix package --list-generations.

Recepción

Jesse Smith de DistroWatch Weekly revisó GNU Guix System 0.15.0 (en ese momento llamado GuixSD) y dijo: "GuixSD tiene un administrador de paquetes que me gusta", pero criticó el soporte de hardware limitado y su documentación limitada. [54] Desde entonces, la documentación se ha ampliado y mejorado con videos [55] y un libro de cocina [56] en seis idiomas con tutoriales, guías prácticas y ejemplos.

Historia

El proyecto fue iniciado en junio de 2012 por Ludovic Courtès, uno de los hackers de GNU Guile. [57]

El Proyecto GNU anunció en noviembre de 2012 el primer lanzamiento de GNU Guix, un gestor de paquetes funcional basado en Nix que proporciona, entre otras cosas, API de Guile Scheme . [58]

El 20 de agosto de 2015, se anunció que Guix había sido portado a GNU Hurd . [59]

Lanzamientos

El proyecto no tiene un cronograma de lanzamiento fijo y hasta ahora se ha lanzado aproximadamente cada 6 meses.

Hay planes para un próximo lanzamiento de la versión 1.5.0 ya que ha habido una brecha de 20 meses desde el lanzamiento de la versión 1.4.0. [60]

Véase también

Referencias

  1. Ludovic Courtès (19 de diciembre de 2022). "Lanzamiento de GNU Guix 1.4.0" . Consultado el 21 de diciembre de 2022 .
  2. ^ "Manual de referencia de GNU Guix". www.gnu.org . Consultado el 23 de abril de 2018 .
  3. ^ Ludovic Courtès (2013). Gestión funcional de paquetes con Guix. Madrid , España : European Lisp Symposium.
  4. ^ Dolstra, E., de Jonge, M. y Visser, E. "Nix: Un sistema seguro y sin políticas para la implementación de software". En Damon, L. (Ed.), 18.ª Conferencia sobre administración de sistemas de grandes instalaciones (LISA '04) , páginas 79–92, Atlanta, Georgia, EE. UU. USENIX, noviembre de 2004.
  5. ^ Dolstra, E. El modelo de implementación de software puramente funcional. Tesis doctoral, Facultad de Ciencias, Utrecht, Países Bajos. Enero de 2006. ISBN 90-393-4130-3
  6. ^ Prins, P., Suresh, J. y Dolstra, E., "Nix soluciona el problema de las dependencias en todas las distribuciones Linux", archivado el 26 de diciembre de 2008 en Wayback Machine linux.com , 22 de diciembre de 2008
  7. ^ Hinsen, Konrad (julio de 2020). «Computación por etapas: la técnica que no sabías que estabas usando». Computing in Science and Engineering . 22 (4): 99–103. Bibcode :2020CSE....22d..99H. doi :10.1109/MCSE.2020.2985508. ISSN  1558-366X. S2CID  219990590 . Consultado el 4 de noviembre de 2022 . Icono de acceso abierto
  8. ^ Vallet, Nicolas; Michonneau, David; Tournier, Simon (4 de octubre de 2022). "Hacia una investigación práctica, transparente, verificable y reproducible a largo plazo utilizando Guix" (PDF) . Datos científicos . 9 (1): 597. Bibcode :2022NatSD...9..597V. doi :10.1038/s41597-022-01720-9. ISSN  2052-4463. PMC 9532446 . PMID  36195618 . Consultado el 4 de noviembre de 2022 .  Icono de acceso abierto
  9. ^ "¿Cómo llamar a Guix?" (Lista de correo). gnu-system-discuss. 15 de enero de 2015.
  10. ^ Interfaz de programación (Manual de referencia de GNU Guix)
  11. ^ Guix: un nuevo gestor de paquetes y distribución GNU - Phoronix
  12. ^ "guix-europe". git.savannah.gnu.org . Archivado desde el original el 24 de enero de 2021 . Consultado el 16 de mayo de 2019 .
  13. ^ "Guix - Rastreador de paquetes Debian".
  14. ^ "Parabola GNU/Linux-libre - Búsqueda de paquetes". www.parabola.nu . Consultado el 14 de septiembre de 2021 .
  15. ^ "Invocación de guix gc". gnu.org . Consultado el 16 de mayo de 2019 .
  16. ^ "Invocación del paquete guix". gnu.org . Consultado el 16 de mayo de 2019 .
  17. ^ "Invocación de la shell de Guix". gnu.org . Consultado el 22 de noviembre de 2023 .
  18. ^ "Del 'entorno guix' al 'shell guix'". gnu.org . Consultado el 22 de noviembre de 2023 .
  19. ^ "Invocación de guix pack". gnu.org . Consultado el 3 de septiembre de 2024 .
  20. ^ "Invocación de guix graph". gnu.org . Consultado el 16 de mayo de 2019 .
  21. ^ "Acerca de GuixSD". gnu.org . Archivado desde el original el 12 de abril de 2017 . Consultado el 16 de marzo de 2017 .
  22. ^ "Preguntas frecuentes sobre GNU/Linux - Proyecto GNU - Free Software Foundation". Free Software Foundation . Archivado desde el original el 7 de septiembre de 2013. Consultado el 14 de mayo de 2017 .
  23. ^ "Descargar — GNU Guix". Archivado desde el original el 1 de agosto de 2020. Consultado el 3 de noviembre de 2019 .
  24. Ludovic Courtès (19 de diciembre de 2022). «Lanzado GNU Guix 1.4.0 (inglés)» . Consultado el 30 de diciembre de 2022 .
  25. ^ "Acerca de GNU Guix". guix.gnu.org . Consultado el 11 de diciembre de 2021 .
  26. ^ "Distribuciones libres de GNU/Linux". www.gnu.org .
  27. ^ "¿Cómo se llama Guix?" (Lista de correo). gnu-system-discuss. 15 de enero de 2015. Archivado desde el original el 7 de agosto de 2020. Consultado el 3 de agosto de 2020 .
  28. ^ "Lista de distribuciones GNU/Linux libres". www.gnu.org . Archivado desde el original el 6 de julio de 2020 . Consultado el 3 de febrero de 2015 .
  29. ^ "Guix: Un nuevo gestor de paquetes y distribución GNU". Phoronix . Archivado desde el original el 2 de febrero de 2015 . Consultado el 3 de febrero de 2015 .
  30. ^ "Uso del sistema de configuración". www.gnu.org . Archivado desde el original el 29 de abril de 2019 . Consultado el 27 de abril de 2019 .
  31. ^ "Gestión de paquetes". www.gnu.org . Archivado desde el original el 21 de mayo de 2019 . Consultado el 27 de abril de 2019 .
  32. ^ "Interfaz de programación (Manual de referencia de GNU Guix)". guix.gnu.org . Archivado desde el original el 7 de agosto de 2020 . Consultado el 3 de agosto de 2020 .
  33. ^ "Guix: Un nuevo gestor de paquetes y distribución GNU - Phoronix". www.phoronix.com . Archivado desde el original el 6 de julio de 2018 . Consultado el 3 de agosto de 2020 .
  34. ^ "GNU Guix & GuixSD 0.12.0 released" (Lista de correo). guix-devel. 2016-12-21. Archivado desde el original el 1 de agosto de 2020 . Consultado el 3 de agosto de 2020 .
  35. ^ "FSF añade Guix System Distribution a la lista de distribuciones aprobadas". Free Software Foundation. 3 de febrero de 2015. Archivado desde el original el 3 de febrero de 2015 . Consultado el 3 de febrero de 2015 .
  36. ^ "Descargar". gnu.org . Archivado desde el original el 6 de octubre de 2021 . Consultado el 12 de enero de 2024 .
  37. ^ Mathieu Othacehe. «Porting GuixSD to ARMv7». Archivado desde el original el 25 de diciembre de 2017. Consultado el 17 de febrero de 2018 .
  38. ^ Marusich, Chris; Le Bouter, Léo (12 de abril de 2021). «Nueva plataforma compatible: powerpc64le-linux». Archivado desde el original el 16 de mayo de 2021. Consultado el 6 de octubre de 2021 .
  39. ^ "guix.git". git.savannah.gnu.org . Archivado desde el original el 11 de mayo de 2019 . Consultado el 11 de mayo de 2019 .
  40. ^ Wurmus, Ricardo. "Re: Ayuda con la preparación para la migración de Arch Linux a Guix" (Lista de correo). Archivado desde el original el 1 de agosto de 2020. Consultado el 11 de mayo de 2019 .
  41. ^ "Listas de correo de guix-devel". Archivado desde el original el 19 de septiembre de 2019 . Consultado el 5 de noviembre de 2016 .
  42. ^ ab "Manual de referencia de GNU Guix: Composición de servicios". Proyecto GNU. Archivado desde el original el 1 de enero de 2019. Consultado el 5 de noviembre de 2016 .
  43. ^ "systemd: Dependencias de unidades y orden". Revista Fedora. 25 de noviembre de 2015. Archivado desde el original el 1 de agosto de 2020. Consultado el 5 de noviembre de 2016 .
  44. ^ "El Manual del Pastor GNU: Un Punto de Partida". Proyecto GNU. Archivado desde el original el 1 de agosto de 2020. Consultado el 5 de noviembre de 2016 .
  45. ^ "Manual de referencia de GNU Guix: Servicios de Shepherd". Proyecto GNU. Archivado desde el original el 1 de enero de 2019. Consultado el 5 de noviembre de 2016 .
  46. ^ "El Manual del Pastor GNU". Proyecto GNU. Archivado desde el original el 1 de agosto de 2020. Consultado el 5 de noviembre de 2016 .
  47. ^ "Manual de referencia de GNU Guix: Servicios". Proyecto GNU. Archivado desde el original el 25 de diciembre de 2018. Consultado el 5 de noviembre de 2016 .
  48. ^ "Manual de referencia de GNU Guix: tipos de servicios y servicios". Proyecto GNU. Archivado desde el original el 5 de enero de 2019. Consultado el 5 de noviembre de 2016 .
  49. ^ "Manual de referencia de GNU Guix: Uso del sistema de configuración". Proyecto GNU. Archivado desde el original el 29 de abril de 2019. Consultado el 5 de noviembre de 2016 .
  50. ^ "GNU Shepherd". Proyecto GNU. Archivado desde el original el 12 de febrero de 2016. Consultado el 12 de febrero de 2016 .
  51. ^ "Invocación del sistema guix". www.gnu.org . Archivado desde el original el 26 de mayo de 2019 . Consultado el 27 de abril de 2019 .
  52. ^ Courtès, Ludovic (2013). "Gestión funcional de paquetes con Guix". pág. 2. arXiv : 1305.4584 [cs.PL].
  53. ^ "Transacciones multidimensionales y reversiones, ¡Dios mío!". guix.gnu.org .
  54. ^ Smith, Jesse. «Guix System Distribution 0.15.0 y ReactOS 0.4.9». distrowatch.com (778). Archivado desde el original el 30 de julio de 2019. Consultado el 30 de agosto de 2018 .
  55. ^ "Videos". Archivado desde el original el 1 de agosto de 2020. Consultado el 3 de marzo de 2020 .
  56. ^ "Receta". Archivado desde el original el 1 de agosto de 2020. Consultado el 3 de marzo de 2020 .
  57. ^ Stallman, Richard (5 de junio de 2012). "Una distribución GNU" (Lista de correo). gnu-system-discuss.
  58. ^ Courtès, Ludovic (23 de noviembre de 2012). "Introducción a GNU Guix" (Lista de correo). gnu-system-discuss.
  59. ^ Ragkousis, Manolis (20 de agosto de 2015). «[GSoC update] Porting Guix to GNU/Hurd» (Lista de correo). guix-devel . Consultado el 20 de agosto de 2015 .
  60. ^ https://lists.gnu.org/archive/html/guix-devel/2024-09/msg00018.html
  61. ^ "Acerca de GuixSD". www.gnu.org . Consultado el 3 de mayo de 2018 .

Enlaces externos