Un repositorio de software , o repo para abreviar, es un lugar de almacenamiento para paquetes de software . A menudo, también se almacena una tabla de contenido, junto con metadatos. Un repositorio de software suele ser administrado por sistemas de control de versiones o de código fuente , o por gestores de repositorios. Los gestores de paquetes permiten instalar y actualizar automáticamente los repositorios, a veces llamados "paquetes".
Descripción general
Muchos editores de software y otras organizaciones mantienen servidores en Internet para este propósito, ya sea de forma gratuita o mediante suscripción. Los repositorios pueden estar dedicados exclusivamente a programas específicos, como CPAN para el lenguaje de programación Perl , o a 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 desde los repositorios. Por ejemplo, muchas distribuciones de Linux utilizan Advanced Packaging Tool (APT), común en distribuciones basadas en Debian , o Yellowdog Updater, Modified ( yum ), presente en distribuciones basadas en Red Hat . También existen varios sistemas de gestión de paquetes independientes, como pacman, utilizado en Arch Linux , y equo, presente en Sabayon Linux .

Dado que 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 un ordenador está configurado para usar un repositorio con firma digital de un proveedor de confianza y se combina con un sistema de permisos adecuado , esto reduce significativamente la amenaza de malware para estos sistemas. Como efecto secundario, muchos sistemas que poseen estas capacidades no necesitan software antimalware, como un antivirus . [ 1 ]
La mayoría de las principales distribuciones de Linux tienen muchos repositorios en todo el mundo que replican el repositorio principal.
En el lado del cliente, un gestor de paquetes ayuda a instalar desde los repositorios y a actualizarlos.
Sistema de gestión de paquetes frente a 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 distintas en una unidad operativa independiente y coherente. Por lo tanto, un sistema de gestión de paquetes podría utilizarse para producir una distribución de Linux , posiblemente una distribución adaptada a una aplicación específica y restringida.
Por el contrario, un proceso de desarrollo de paquetes se utiliza para gestionar el desarrollo conjunto de código y documentación de un conjunto de funciones o rutinas con un tema común, produciendo así un paquete de funciones de software que, por lo general, no serán completas ni utilizables por sí solas. 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 lenguajes con repositorios de software aportado por la comunidad. La columna "Autochecks" describe las comprobaciones rutinarias que se realizan.
Muy pocas personas tienen la capacidad de probar su software en múltiples sistemas operativos con diferentes versiones del código fuente y con otros paquetes contribuidos que puedan utilizar. Para el lenguaje de programación R , la Red Integral de Archivos de R (CRAN) realiza pruebas de forma rutinaria.
Para comprender su valor, imaginemos 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 la 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 alguna de ellas genera un error, recibe el mensaje de error. Con suerte, los detalles de ese mensaje de error pueden proporcionar suficiente información para permitirle solucionar el problema, incluso si no puede reproducirlo con su hardware y software actuales. A continuación, supongamos que John aporta al repositorio un paquete B que utiliza el paquete A. El paquete B pasa todas las pruebas y se pone a disposición de los usuarios. Posteriormente, Sally envía una versión mejorada de A, que provoca un fallo en B. Las comprobaciones automáticas permiten proporcionar información a John para que pueda solucionar el problema.
Este ejemplo pone de manifiesto tanto una fortaleza como una debilidad del sistema de paquetes aportados por R: CRAN admite este tipo de pruebas automatizadas de paquetes aportados, pero los paquetes aportados a CRAN no necesitan especificar las versiones de otros paquetes aportados que utilizan. Existen procedimientos para solicitar versiones específicas de paquetes, pero es posible que los colaboradores no los utilicen.
Beyond this, a repository such as CRAN running regular checks of contributed packages actually provides an extensive if ad hoc test suite for development versions of the core language. If Sally (in the example above) gets an error message she does not understand or thinks is inappropriate, especially from a development version of the language, she can (and often does with R) ask the core development-team for the language for help. In this way, the repository can contribute to improving the quality of the core language software.
(Parts of this table were copied from a "List of Top Repositories by Programming Language" on Stack Overflow[20])
Notable repositories with limited scope include:
Package managers
Package managers help manage repositories and the distribution of them. If a repository is updated, a package manager will usually allow a user to update that repository through the manager. It also helps to manage things such as dependencies between other repositories. Examples of managers include:
Repository managers
In an enterprise environment, a software repository is usually used to store artifacts, or to mirror external repositories which may be inaccessible due to security restrictions. Such repositories may provide additional functionality, like access control, versioning, security checks for uploaded software, cluster functionality etc. and typically support a variety of formats in one package, so as to cater for all the needs in an enterprise, and thus aiming to provide a single point of truth. One example is Sonatype Nexus Repository.[29]
At server side, a software repository is typically managed by source control or repository managers. Some of the repository managers allow to aggregate other repository location into one URL and provide a caching proxy. When doing continuous builds many artifacts are produced and often centrally stored, so automatically deleting the ones which are not released is important.
Relationship to continuous integration
Como parte del ciclo de vida del desarrollo, el código fuente se compila continuamente en artefactos binarios mediante la integración continua . Esto puede interactuar con un gestor de repositorios binarios de forma similar a como lo haría un desarrollador, obteniendo artefactos de los repositorios y subiendo compilaciones a ellos. La estrecha integración con los servidores de CI permite el almacenamiento de metadatos importantes como:
- ¿Qué usuario inició la compilación (ya sea manualmente o mediante la confirmación en el control de versiones)?
- ¿Qué módulos se construyeron?
- ¿Qué fuentes se utilizaron (ID de confirmación, revisión, rama)?
- Dependencias utilizadas
- Variables ambientales
- Paquetes instalados
Artefactos y paquetes
Los artefactos y los paquetes tienen significados intrínsecamente diferentes. Los artefactos son simplemente un resultado o una colección de archivos (por ejemplo, JAR, WAR, DLL, RPM, etc.) y uno de esos archivos puede contener metadatos (por ejemplo, un archivo POM). En cambio, los paquetes son un único archivo comprimido en un formato bien definido (por ejemplo, NuGet ) que contiene archivos apropiados para el tipo de paquete (por ejemplo, DLL, PDB). [ 30 ] Muchos artefactos resultan de las compilaciones, pero otros tipos también son cruciales. Los paquetes son esencialmente una de dos cosas: una biblioteca o una aplicación. [ 31 ]
En comparación con los archivos fuente, los artefactos binarios suelen ser mucho más grandes, rara vez se eliminan o sobrescriben (excepto en casos excepcionales como instantáneas o compilaciones nocturnas) y, por lo general, van acompañados de muchos metadatos, como ID, nombre del paquete, versión, licencia y más.
Metadatos
Los metadatos describen un artefacto binario, se almacenan y especifican por separado del artefacto en sí, y pueden tener varios usos adicionales. La siguiente tabla muestra algunos tipos comunes de metadatos y sus usos:
Véase también
Referencias
- ↑ itmWEB: Cómo lidiar con los virus informáticos. Archivado el 14 de octubre de 2007 en Wayback Machine .
- ↑ "Quicklisp beta" . www.quicklisp.org . Archivado del original el 23 de marzo de 2019. Consultado el 25 de marzo de 2019 .
- 12Decan, Alexandre; Mens, Tom; Claes, Maelick; Grosjean, Philippe (2015). "On the Development and Distribution of R Packages: An Empirical Analysis of the R Ecosystem". Proceedings of the 2015 European Conference on Software Architecture Workshops. pp. 1–6. doi:10.1145/2797433.2797476. ISBN 9781450333931. S2CID 1680582. Archived from the original on 2023-01-18. Retrieved 2021-10-26.
- ↑"The Haskell Cabal | Overview". www.haskell.org. Archived from the original on 2019-04-10. Retrieved 2019-03-25.
- ↑"Maven – Welcome to Apache Maven". maven.apache.org. Archived from the original on 2011-07-24. Retrieved 2019-03-25.
- ↑"npm". www.npmjs.com. Archived from the original on 2018-04-13. Retrieved 2019-03-25.
- ↑"Julia Package Listing". pkg.julialang.org. Archived from the original on 2019-01-20. Retrieved 2019-03-25.
- ↑karann-msft. "NuGet Package Manager UI Reference". docs.microsoft.com. Archived from the original on 2019-03-25. Retrieved 2019-03-25.
- ↑"Installing Perl Modules - www.cpan.org". www.cpan.org. Archived from the original on 2019-03-14. Retrieved 2019-03-25.
- ↑"Poetry". python-poetry.org. Archived from the original on 2024-05-22. Retrieved 2024-05-22.
- ↑Leisch, Friedrich. "Creating R Packages: A Tutorial"(PDF). Archived(PDF) from the original on 2017-12-09. Retrieved 2016-07-19.
- ↑Graves, Spencer B.; Dorai-Raj, Sundar. "Creating R Packages, Using CRAN, R-Forge, And Local R Archive Networks And Subversion (SVN) Repositories"(PDF). Archived(PDF) from the original on 2017-07-05. Retrieved 2016-07-19.
- ↑"The Comprehensive R Archive Network". cran.r-project.org. Archived from the original on 2019-01-23. Retrieved 2019-03-25.
- ↑"R Installation and Administration". cran.r-project.org. Archived from the original on 2015-11-23. Retrieved 2019-03-25.
- ↑Wickham, Hadley; Bryan, Jenny. "Package structure and state". R Packages. O'Reilly. Archived from the original on 2020-11-09. Retrieved 2020-11-20.
- 12"RubyGems.org your community gem host". rubygems. Archived from the original on 2019-02-13. Retrieved 2022-02-03.
- ↑"Bundler: The best way to manage a Ruby application's gems". bundler.io. Archived from the original on 2022-01-29. Retrieved 2022-02-03.
- 12"The Cargo Book". Documentation. Rust Programming Language. Archived from the original on 2019-04-28. Retrieved 2019-08-26.
- ↑"Rust Package Registry". crates.io. Archived from the original on 2019-08-28. Retrieved 2019-08-26.
- ↑"List of Top Repositories by Programming Language". Stack Overflow. Archived from the original on 2018-12-26. Retrieved 2010-04-14.
- ↑"npm About". www.npmjs.com. Archived from the original on 2019-11-19. Retrieved 2019-11-21.
- ↑developers, The pip, pip: The PyPA recommended tool for installing Python packages., archived from the original on 2020-07-14, retrieved 2019-11-21
- ↑"Apt - Debian Wiki". wiki.debian.org. Archived from the original on 2019-10-19. Retrieved 2019-11-22.
- ↑"Homebrew". Homebrew. Archived from the original on 2022-10-05. Retrieved 2019-11-22.
- ↑"Yelp launches Yelp Fusion, Microsoft creates Vcpkg tool, and the new Touch Sense SDK for Android developers". SD Times. September 20, 2016. Archived from the original on November 27, 2020. Retrieved November 19, 2020.
- ↑"Microsoft's C++ library manager now available for Linux and macOS". SD Times. April 25, 2018. Archived from the original on September 22, 2020. Retrieved November 19, 2020.
- ↑Chinthaguntla, Keerthi (22 April 2020). "Linux package management with YUM and RPM". Enable Sysadmin. Archived from the original on 2021-04-11. Retrieved 2021-04-11.
- ↑"pacman - ArchWiki". wiki.archlinux.org. Archived from the original on 2017-08-18. Retrieved 2021-04-11.
- ↑"Nexus Repository | Software Component Management". Archived from the original on 2021-04-25. Retrieved 2021-04-25.
- ↑"Linux repository classification schemes". braintickle.blogspot.com. 13 January 2006. Archived from the original on 2007-10-11. Retrieved 2008-03-01.
- Software distribution