stringtranslate.com

repositorio de software

Un repositorio de software , o repositorio para abreviar, es una ubicación de almacenamiento para paquetes de software . A menudo también se almacena una tabla de contenidos, junto con metadatos. Un repositorio de software normalmente lo gestiona el control de versiones o de código fuente , o los administradores de repositorio. Los administradores de paquetes permiten instalar y actualizar automáticamente repositorios, a veces llamados "paquetes".

Descripción general

Muchos editores de software y otras organizaciones mantienen servidores en Internet para este fin, ya sea de forma gratuita o mediante una tarifa de suscripción. Los repositorios pueden ser únicamente para programas particulares, como CPAN para el lenguaje de programación Perl , o para un sistema operativo completo . Los operadores de dichos repositorios suelen proporcionar un sistema de gestión de paquetes , herramientas destinadas a buscar, instalar y manipular paquetes de software de los repositorios. Por ejemplo, muchas distribuciones de Linux utilizan la herramienta de empaquetado avanzado (APT), que se encuentra comúnmente en las distribuciones basadas en Debian , o Yellowdog Updater, modificado ( yum ), que se encuentra en las distribuciones basadas en Red Hat . También existen múltiples sistemas de gestión de paquetes independientes, como pacman, utilizado en Arch Linux y equo, que se encuentra en Sabayon Linux .

Ejemplo de una clave de repositorio firmada (con ZYpp en openSUSE )

Así como los repositorios de software están diseñados para incluir paquetes útiles, los principales repositorios están diseñados para estar libres de malware . Si una computadora está configurada para usar un repositorio firmado digitalmente de un proveedor confiable y se combina con un sistema de permisos apropiado , esto reduce significativamente la amenaza de malware para estos sistemas. Como efecto secundario, muchos sistemas que tienen estas capacidades no necesitan software antimalware como el software antivirus . [1]

La mayoría de las principales distribuciones de Linux tienen muchos repositorios en todo el mundo que reflejan el repositorio principal.

En un entorno empresarial, un repositorio de software suele utilizarse para almacenar artefactos o para reflejar repositorios externos a los que puede resultar inaccesible debido a restricciones de seguridad. Dichos repositorios pueden proporcionar funcionalidad adicional, como control de acceso, control de versiones, controles de seguridad para el software cargado, funcionalidad de clúster, etc. y normalmente admiten una variedad de formatos en un solo paquete, para satisfacer todas las necesidades de una empresa y, por lo tanto, apuntar a proporcionar un único punto de verdad. Ejemplos populares son JFrog Artifactory, [2] [3] el repositorio Nexus [4] y Cloudsmith, [5] un producto basado en la nube.

En el lado del cliente, un administrador de paquetes ayuda a instalar y actualizar los repositorios.

En el lado del servidor, un repositorio de software normalmente lo administra el control de fuente o los administradores de repositorio. Algunos de los administradores de repositorios permiten agregar otras ubicaciones de repositorios en una URL y proporcionar un proxy de almacenamiento en caché. Al realizar compilaciones continuas, se producen muchos artefactos y, a menudo, se almacenan de forma centralizada, por lo que es importante eliminar automáticamente los que no se publican.

Sistema de gestión de paquetes versus proceso de desarrollo de paquetes

Un sistema de gestión de paquetes es diferente de un proceso de desarrollo de paquetes .

Un uso típico de un sistema de gestión de paquetes es facilitar la integración de código de fuentes posiblemente diferentes en una unidad operativa independiente y coherente. Por tanto, se podría utilizar un sistema de gestión de paquetes para producir una distribución de Linux , posiblemente una distribución adaptada a una aplicación restringida específica.

Por el contrario, un proceso de desarrollo de paquetes se utiliza para gestionar el codesarrollo de código y documentación de una colección de funciones o rutinas con un tema común, produciendo así un paquete de funciones de software que normalmente no estarán completos ni utilizables por sí solos. Un buen proceso de desarrollo de paquetes ayudará a los usuarios a cumplir con buenas prácticas de documentación y codificación, integrando cierto nivel de pruebas unitarias .

Repositorios seleccionados

La siguiente tabla enumera algunos idiomas con repositorios de software contribuido. La columna "Autocomprobaciones" describe las comprobaciones de rutina realizadas.

Muy pocas personas tienen la capacidad de probar su software en múltiples sistemas operativos con diferentes versiones del código central y con otros paquetes contribuidos que puedan usar. Para el lenguaje de programación R , Comprehensive R Archive Network (CRAN) ejecuta pruebas de forma rutinaria.

Para comprender el valor de esto, imagine una situación con dos desarrolladores, Sally y John. Sally aporta un paquete A. Sally solo ejecuta la versión actual del software en una versión de Microsoft Windows y solo lo ha probado en ese entorno. A intervalos más o menos regulares, CRAN prueba la contribución de Sally en una docena de combinaciones de sistemas operativos y versiones del software principal del lenguaje R. Si uno de ellos genera un error, recibe ese mensaje de error. Con suerte, los detalles del mensaje de error pueden proporcionar información suficiente para permitir una solución al error, incluso si no puede replicarlo con su hardware y software actuales. A continuación, supongamos que John aporta al repositorio un paquete B que utiliza un paquete A. El paquete B pasa todas las pruebas y está disponible para los usuarios. Más tarde, Sally envía una versión mejorada de A, que desafortunadamente rompe B. Las comprobaciones automáticas permiten proporcionar información a John para que pueda solucionar el problema.

Este ejemplo expone tanto una fortaleza como una debilidad en el sistema de paquetes contribuidos de R: CRAN admite este tipo de pruebas automatizadas de paquetes contribuidos, pero los paquetes contribuidos a CRAN no necesitan especificar las versiones de otros paquetes contribuidos que utilizan. Existen procedimientos para solicitar versiones específicas de paquetes, pero es posible que los contribuyentes no utilicen esos procedimientos.

Más allá de esto, un repositorio como CRAN que ejecuta comprobaciones periódicas de los paquetes aportados en realidad proporciona un conjunto de pruebas extenso, aunque ad hoc, para versiones de desarrollo del lenguaje principal. Si Sally (en el ejemplo anterior) recibe un mensaje de error que no comprende o que considera inapropiado, especialmente de una versión de desarrollo del lenguaje, puede (y a menudo lo hace con R) pedir ayuda al equipo central de desarrollo del lenguaje. . De esta manera, el repositorio puede contribuir a mejorar la calidad del software del lenguaje central.

(Partes de esta tabla se copiaron de una "Lista de repositorios principales por lenguaje de programación" en Stack Overflow [24] )

Muchos otros lenguajes de programación, entre ellos C , C++ y Fortran , no poseen un repositorio de software central con alcance universal. Los repositorios notables con alcance limitado incluyen:

Administradores de paquetes

Los administradores de paquetes ayudan a administrar los repositorios y su distribución. Si se actualiza un repositorio, un administrador de paquetes normalmente permitirá al usuario actualizar ese repositorio a través del administrador de paquetes. También ayudan a gestionar cosas como las dependencias entre otros repositorios de software. Algunos ejemplos de administradores de paquetes incluyen:

Gestores de repositorios

Relación con la integración continua

Como parte del ciclo de vida del desarrollo, el código fuente se integra continuamente en artefactos binarios mediante integración continua . Esto puede interactuar con un administrador de repositorio binario de manera muy similar a como lo haría un desarrollador al obtener artefactos de los repositorios y enviar compilaciones allí. La estrecha integración con los servidores de CI permite el almacenamiento de metadatos importantes como:

Artefactos y paquetes

Los artefactos y los paquetes significan inherentemente cosas diferentes. Los artefactos son simplemente una salida o colección de archivos (por ejemplo, JAR, WAR, DLLS, RPM, etc.) y uno de esos archivos puede contener metadatos (por ejemplo, un archivo POM). Mientras que los paquetes son un archivo único en un formato bien definido (por ejemplo, NuGet ) que contiene archivos apropiados para el tipo de paquete (por ejemplo, DLL, PDB). [33] Muchos artefactos resultan de construcciones, pero otros tipos también son cruciales. Los paquetes son esencialmente una de dos cosas: una biblioteca o una aplicación. [34]

En comparación con los archivos fuente, los artefactos binarios suelen ser más grandes en órdenes de magnitud, rara vez se eliminan o se sobrescriben (excepto en casos excepcionales, como instantáneas o compilaciones nocturnas) y, por lo general, van acompañados de muchos metadatos, como identificación, nombre del paquete, versión. , licencia y más.

Metadatos

Los metadatos describen un artefacto binario, se almacenan y especifican por separado del propio artefacto y pueden tener varios usos adicionales. La siguiente tabla muestra algunos tipos de metadatos comunes y sus usos:

Ver también

Referencias

  1. ^ itmWEB: Cómo afrontar los virus informáticos Archivado el 14 de octubre de 2007 en Wayback Machine.
  2. ^ "Artefacto JFrog - wikieduonline". Archivado desde el original el 5 de marzo de 2021 . Consultado el 25 de abril de 2021 .
  3. ^ "Artefacto: gestión universal de artefactos". Archivado desde el original el 1 de mayo de 2021 . Consultado el 25 de abril de 2021 .
  4. ^ "Repositorio Nexus | Gestión de componentes de software". Archivado desde el original el 25 de abril de 2021 . Consultado el 25 de abril de 2021 .
  5. ^ "Repositorio de artefactos de Cloudsmith". Archivado desde el original el 16 de julio de 2023 . Consultado el 11 de septiembre de 2023 .
  6. ^ "La Cábala de Haskell | Descripción general". www.haskell.org . Archivado desde el original el 10 de abril de 2019 . Consultado el 25 de marzo de 2019 .
  7. ^ "Maven: bienvenido a Apache Maven". maven.apache.org . Archivado desde el original el 24 de julio de 2011 . Consultado el 25 de marzo de 2019 .
  8. ^ "Listado de paquetes de Julia". pkg.julialang.org . Archivado desde el original el 2019-01-20 . Consultado el 25 de marzo de 2019 .
  9. ^ "Quicklisp beta". www.quicklisp.org . Archivado desde el original el 23 de marzo de 2019 . Consultado el 25 de marzo de 2019 .
  10. ^ karann-msft. "Referencia de la interfaz de usuario del Administrador de paquetes NuGet". docs.microsoft.com . Archivado desde el original el 25 de marzo de 2019 . Consultado el 25 de marzo de 2019 .
  11. ^ "npm". www.npmjs.com . Archivado desde el original el 13 de abril de 2018 . Consultado el 25 de marzo de 2019 .
  12. ^ "Instalación de módulos Perl - www.cpan.org". www.cpan.org . Archivado desde el original el 14 de marzo de 2019 . Consultado el 25 de marzo de 2019 .
  13. ^ "Poesía". python-poetry.org . Archivado desde el original el 22 de mayo de 2024 . Consultado el 22 de mayo de 2024 .
  14. ^ Leisch, Friedrich. "Creación de paquetes R: tutorial" (PDF) . Archivado (PDF) desde el original el 9 de diciembre de 2017 . Consultado el 19 de julio de 2016 .
  15. ^ Tumbas, Spencer B.; Dorai-Raj, Sundar. "Creación de paquetes R, uso de CRAN, R-Forge y redes de archivos locales de R y repositorios de Subversion (SVN)" (PDF) . Archivado (PDF) desde el original el 5 de julio de 2017 . Consultado el 19 de julio de 2016 .
  16. ^ "La red integral de archivos de R". cran.r-project.org . Archivado desde el original el 23 de enero de 2019 . Consultado el 25 de marzo de 2019 .
  17. ^ "Instalación y administración de R". cran.r-project.org . Archivado desde el original el 23 de noviembre de 2015 . Consultado el 25 de marzo de 2019 .
  18. ^ Wickham, Hadley; Bryan, Jenny. "Estructura y estado del paquete". Paquetes R. O'Reilly. Archivado desde el original el 9 de noviembre de 2020 . Consultado el 20 de noviembre de 2020 .
  19. ^ ab Decan, Alexandre; Hombres, Tom; Claes, Maelick; Grosjean, Philippe (2015). "Sobre el desarrollo y distribución de paquetes R: un análisis empírico del ecosistema R". Actas de la Conferencia europea de 2015 sobre talleres de arquitectura de software . págs. 1–6. doi :10.1145/2797433.2797476. ISBN 9781450333931. S2CID  1680582. Archivado desde el original el 18 de enero de 2023 . Consultado el 26 de octubre de 2021 .
  20. ^ ab "RubyGems.org el alojamiento de gemas de tu comunidad". gemas de rubí . Archivado desde el original el 13 de febrero de 2019 . Consultado el 3 de febrero de 2022 .
  21. ^ "Bundler: la mejor manera de administrar las gemas de una aplicación Ruby". paquete.io . Archivado desde el original el 29 de enero de 2022 . Consultado el 3 de febrero de 2022 .
  22. ^ ab "El libro de carga". Documentación. Lenguaje de programación Rust . Archivado desde el original el 28 de abril de 2019 . Consultado el 26 de agosto de 2019 .
  23. ^ "Registro de paquetes Rust". cajas.io . Archivado desde el original el 28 de agosto de 2019 . Consultado el 26 de agosto de 2019 .
  24. ^ "Lista de repositorios principales por lenguaje de programación". Desbordamiento de pila . Archivado desde el original el 26 de diciembre de 2018 . Consultado el 14 de abril de 2010 .
  25. ^ "npm Acerca de". www.npmjs.com . Archivado desde el original el 19 de noviembre de 2019 . Consultado el 21 de noviembre de 2019 .
  26. ^ desarrolladores, The pip, pip: la herramienta recomendada por PyPA para instalar paquetes de Python, archivado desde el original el 14 de julio de 2020 , consultado el 21 de noviembre de 2019.
  27. ^ "Apto - Wiki Debian". wiki.debian.org . Archivado desde el original el 19 de octubre de 2019 . Consultado el 22 de noviembre de 2019 .
  28. ^ "Cervecería casera". Elaboración casera . Archivado desde el original el 5 de octubre de 2022 . Consultado el 22 de noviembre de 2019 .
  29. ^ "Yelp lanza Yelp Fusion, Microsoft crea la herramienta Vcpkg y el nuevo Touch Sense SDK para desarrolladores de Android". Tiempos SD . 20 de septiembre de 2016. Archivado desde el original el 27 de noviembre de 2020 . Consultado el 19 de noviembre de 2020 .
  30. ^ "El administrador de bibliotecas C++ de Microsoft ahora está disponible para Linux y macOS". Tiempos SD . 25 de abril de 2018. Archivado desde el original el 22 de septiembre de 2020 . Consultado el 19 de noviembre de 2020 .
  31. ^ Chinthaguntla, Keerthi (22 de abril de 2020). "Gestión de paquetes Linux con YUM y RPM". Habilite el administrador de sistemas . Archivado desde el original el 11 de abril de 2021 . Consultado el 11 de abril de 2021 .
  32. ^ "pacman - ArchWiki". wiki.archlinux.org . Archivado desde el original el 18 de agosto de 2017 . Consultado el 11 de abril de 2021 .
  33. ^ Chris, Tucker (2007-03-15). "Optimal Package Install/Uninstall Manager" (PDF). UC San Diego: 1. Archived (PDF) from the original on 2011-06-14. Retrieved 2011-09-14. {{cite journal}}: Cite journal requires |journal= (help)
  34. ^ "Linux repository classification schemes". braintickle.blogspot.com. 13 January 2006. Archived from the original on 2007-10-11. Retrieved 2008-03-01.