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.
Además, un repositorio como CRAN, que realiza comprobaciones periódicas de los paquetes aportados, proporciona un conjunto de pruebas extenso, aunque ad hoc, para las versiones de desarrollo del lenguaje principal. Si Sally (en el ejemplo anterior) recibe un mensaje de error que no entiende o que considera inapropiado, especialmente en una versión de desarrollo del lenguaje, puede (y a menudo lo hace con R) pedir ayuda al equipo de desarrollo principal del lenguaje. De esta forma, el repositorio puede contribuir a mejorar la calidad del software del lenguaje principal.
(Partes de esta tabla se copiaron de una "Lista de los principales repositorios por lenguaje de programación" en Stack Overflow [ 20 ] )
Entre los repositorios destacados con alcance limitado se incluyen:
- Netlib , principalmente rutinas matemáticas para Fortran y C, históricamente uno de los primeros repositorios de software abierto;
- Boost es una colección cuidadosamente seleccionada de bibliotecas de alta calidad para C++; parte del código desarrollado en Boost pasó a formar parte de la biblioteca estándar de C++.
Gestores de paquetes
Los gestores de paquetes ayudan a administrar los repositorios y su distribución. Si se actualiza un repositorio, el gestor de paquetes generalmente permite al usuario actualizarlo a través del propio gestor. También ayuda a gestionar aspectos como las dependencias entre repositorios. Algunos ejemplos de gestores son:
Administradores de repositorios
En un entorno empresarial, un repositorio de software se suele utilizar para almacenar artefactos o para replicar repositorios externos que pueden ser inaccesibles debido a restricciones de seguridad. Estos repositorios pueden ofrecer funcionalidades adicionales, como control de acceso, control de versiones, comprobaciones de seguridad para el software subido, funcionalidad de clúster, etc., y normalmente admiten diversos formatos en un solo paquete, para así cubrir todas las necesidades de una empresa y, por lo tanto, proporcionar una única fuente de información fidedigna. Un ejemplo es Sonatype Nexus Repository . [ 29 ]
En el lado del servidor, un repositorio de software suele ser administrado por sistemas de control de versiones o gestores de repositorios. Algunos gestores de repositorios permiten agrupar varias ubicaciones de repositorio en una sola URL y proporcionan un proxy de caché. Al realizar compilaciones continuas, se generan muchos artefactos que a menudo se almacenan de forma centralizada, por lo que es importante eliminar automáticamente aquellos que no se han publicado.
Relación con la integración continua
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 .
- 1 2 Decan, Alexandre; Mens, Tom; Claes, Maelick; Grosjean, Philippe (2015). "Sobre el desarrollo y la distribución de paquetes R: un análisis empírico del ecosistema R" . Actas de los Talleres de la Conferencia Europea de Arquitectura de Software de 2015. págs. 1–6 . doi : 10.1145/2797433.2797476 . ISBN 9781450333931. S2CID 1680582 . Archivado del original el 18-01-2023 . Recuperado el 26-10-2021 .
- ↑ "La Cábala de Haskell | Resumen" . www.haskell.org . Archivado del original el 10 de abril de 2019. Consultado el 25 de marzo de 2019 .
- ↑ "Maven – Bienvenido a Apache Maven" . maven.apache.org . Archivado del original el 24 de julio de 2011. Consultado el 25 de marzo de 2019 .
- ↑ "npm" . www.npmjs.com . Archivado del original el 13 de abril de 2018. Consultado el 25 de marzo de 2019 .
- ↑ "Listado de paquetes de Julia" . pkg.julialang.org . Archivado del original el 20 de enero de 2019. Consultado el 25 de marzo de 2019 .
- ↑ karann-msft. "Referencia de la interfaz de usuario del administrador de paquetes NuGet" . docs.microsoft.com . Archivado del original el 25 de marzo de 2019. Consultado el 25 de marzo de 2019 .
- ↑ "Instalación de módulos Perl - www.cpan.org" . www.cpan.org . Archivado del original el 14 de marzo de 2019. Consultado el 25 de marzo de 2019 .
- ↑ "Poesía" . python-poetry.org . Archivado del original el 22 de mayo de 2024. Consultado el 22 de mayo de 2024 .
- ↑ Leisch, Friedrich. "Creación de paquetes R: un tutorial" (PDF) . Archivado (PDF) del original el 9 de diciembre de 2017. Consultado el 19 de julio de 2016 .
- ↑ Graves, Spencer B.; Dorai-Raj, Sundar. "Creación de paquetes R, uso de CRAN, R-Forge y redes locales de archivos R y repositorios Subversion (SVN)" (PDF) . Archivado (PDF) del original el 5 de julio de 2017. Recuperado el 19 de julio de 2016 .
- ↑ "The Comprehensive R Archive Network" . cran.r-project.org . Archivado del original el 23 de enero de 2019. Consultado el 25 de marzo de 2019 .
- ↑ "Instalación y administración de R" . cran.r-project.org . Archivado del original el 23/11/2015 . Consultado el 25/03/2019 .
- ↑ Wickham, Hadley; Bryan, Jenny. "Estructura y estado del paquete" . Paquetes R. O'Reilly. Archivado del original el 9 de noviembre de 2020. Consultado el 20 de noviembre de 2020 .
- 1 2 "RubyGems.org tu comunidad de alojamiento de gemas" . rubygems . Archivado del original el 13 de febrero de 2019. Recuperado el 3 de febrero de 2022 .
- ↑ "Bundler: La mejor manera de gestionar las gemas de una aplicación Ruby" . bundler.io . Archivado del original el 29/01/2022 . Consultado el 03/02/2022 .
- 1 2 "El libro de carga" . Documentación. Lenguaje de programación Rust . Archivado del original el 28 de abril de 2019. Recuperado el 26 de agosto de 2019 .
- ↑ "Registro de paquetes de Rust" . crates.io . Archivado del original el 28 de agosto de 2019. Consultado el 26 de agosto de 2019 .
- ↑ "Lista de los principales repositorios por lenguaje de programación" . Stack Overflow . Archivado del original el 26/12/2018 . Consultado el 14/04/2010 .
- ↑ "Acerca de npm" . www.npmjs.com . Archivado del original el 19/11/2019 . Consultado el 21/11/2019 .
- ↑ desarrolladores, El pip, pip: La herramienta recomendada por PyPA para instalar paquetes de Python. , archivado del original el 14-07-2020 , recuperado el 21-11-2019
- ↑ "Apt - Debian Wiki" . wiki.debian.org . Archivado del original el 19/10/2019 . Consultado el 22/11/2019 .
- ↑ "Homebrew" . Homebrew . Archivado del original el 5 de octubre de 2022. Consultado el 22 de noviembre de 2019 .
- ↑ "Yelp lanza Yelp Fusion, Microsoft crea la herramienta Vcpkg y el nuevo SDK Touch Sense para desarrolladores de Android" . SD Times . 20 de septiembre de 2016. Archivado del original el 27 de noviembre de 2020. Consultado el 19 de noviembre de 2020 .
- ↑ "El gestor de bibliotecas C++ de Microsoft ya está disponible para Linux y macOS" . SD Times . 25 de abril de 2018. Archivado del original el 22 de septiembre de 2020. Consultado el 19 de noviembre de 2020 .
- ↑ Chinthaguntla, Keerthi (22 de abril de 2020). "Gestión de paquetes Linux con YUM y RPM" . Enable Sysadmin . Archivado del original el 11 de abril de 2021. Recuperado el 11 de abril de 2021 .
- ↑ "pacman - ArchWiki" . wiki.archlinux.org . Archivado del original el 18 de agosto de 2017. Consultado el 11 de abril de 2021 .
- ↑ "Repositorio Nexus | Gestión de componentes de software" . Archivado del original el 25/04/2021 . Consultado el 25/04/2021 .
- ↑ "Esquemas de clasificación de repositorios Linux" . braintickle.blogspot.com. 13 de enero de 2006. Archivado del original el 11 de octubre de 2007. Consultado el 1 de marzo de 2008 .
- Distribución de software