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 contenido, junto con los metadatos. Un repositorio de software suele ser gestionado por administradores de repositorio o de control de fuente. Los administradores de paquetes permiten instalar y actualizar los repositorios (a veces llamados "paquetes") en lugar de tener que hacerlo manualmente.
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 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 Advanced Packaging Tool (APT), que se encuentra comúnmente en distribuciones basadas en Debian , o yum que se encuentra en distribuciones basadas en Red Hat . También hay varios sistemas de gestión de paquetes independientes, como pacman, que se utiliza en Arch Linux y equo, que se encuentra en Sabayon Linux .
Como los repositorios de software están diseñados para incluir paquetes útiles, los repositorios principales están diseñados para estar libres de malware . Si una computadora está configurada para usar un repositorio firmado digitalmente de un proveedor de renombre 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 requieren software anti-malware 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 se usa generalmente para almacenar artefactos o para reflejar repositorios externos que pueden ser inaccesibles 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 generalmente admiten una variedad de formatos en un paquete, para satisfacer todas las necesidades de una empresa y, por lo tanto, con el objetivo de proporcionar un solo punto de verdad. Ejemplos populares son JFrog Artifactory [2] [3] y el repositorio Nexus. [4]
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 generalmente es administrado por administradores de repositorio o de control de fuente. Algunos de los administradores de repositorios permiten agregar otra ubicación de repositorio en una URL y proporcionan un proxy de almacenamiento en caché. Cuando se realizan 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 frente al 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 coherente. Por lo tanto, un sistema de administración de paquetes podría usarse para producir una distribución de Linux , posiblemente una distribución adaptada a una aplicación restringida específica.
Un proceso de desarrollo de paquetes, por el contrario, se utiliza para gestionar el co-desarrollo 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 serán completas ni utilizables por sí mismas. Un buen proceso de desarrollo de paquetes ayudará a los usuarios a ajustarse a las 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 para el software contribuido. La columna "Autochecks" 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 R , Comprehensive R Archive Network (CRAN) ejecuta pruebas de forma rutinaria. Para ver lo valioso que es esto, suponga que 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 en lenguaje R. Si uno de ellos genera un error, recibe ese mensaje de error. Con suerte, ese mensaje de error puede ser suficiente para permitirle corregir el error, incluso si no puede replicarlo con el hardware y el software que tiene. A continuación, suponga que John contribuye al repositorio con un paquete B que usa 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 prueba automatizada 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 las versiones de desarrollo del lenguaje principal. Si Sally (en el ejemplo anterior) recibe un mensaje de error que no comprende o cree que es inapropiado, especialmente de una versión de desarrollo del lenguaje, puede (y a menudo lo hace con R) pedir ayuda al equipo de desarrollo central para el lenguaje. . De esta forma, el repositorio puede contribuir a mejorar la calidad del software del lenguaje central.
Idioma / propósito | Proceso de desarrollo de paquetes | Repositorio | Instalar métodos | Plataforma de desarrollo colaborativo | Autocomprobaciones |
---|---|---|---|---|---|
Haskell | Arquitectura común para la creación de aplicaciones y bibliotecas [5] | Pirateo | cabal (software) | ||
Java | Maven [6] | ||||
Julia [7] | |||||
Lisp común | Quicklisp [8] | ||||
.NETO | NuGet | NuGet [9] | |||
Node.js | npm [10] | ||||
Perl | CPAN | PPM [11] | |||
PHP | PEAR , Compositor | PECL , Packagist | |||
Pitón | Herramientas de configuración | PyPI | pip , EasyInstall , PyPM , Anaconda | ||
R | R Proceso de verificación de CMD [12] [13] | GRÚA [14] | install.packages [15] controles remotos [16] | GitHub [17] | Con frecuencia en 12 plataformas o combinaciones de diferentes versiones de R (desarrollado, prerel, parcheado, lanzamiento) en diferentes sistemas operativos (diferentes versiones de Linux, Windows, macOS y Solaris). |
Rubí | RubyGems | Archivo de aplicaciones Ruby | RubyForge | ||
Oxido | Carga [18] | Cajas [19] | Carga [18] | ||
TeX , LaTeX | CTAN |
(Partes de esta tabla se copiaron de una "Lista de repositorios principales por lenguaje de programación" en Stack Overflow [20] )
Muchos otros lenguajes de programación, entre ellos C , C ++ y Fortran , no poseen un repositorio central de software con alcance universal. Los repositorios notables con alcance limitado incluyen:
- Netlib , principalmente rutinas matemáticas para Fortran y C, históricamente uno de los primeros repositorios de software abiertos;
- Boost , una colección estrictamente seleccionada de bibliotecas de alta calidad para C ++; algún código desarrollado en Boost se convirtió más tarde en parte de la biblioteca estándar de C ++.
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 administrar cosas como las dependencias entre otros repositorios de software. Algunos ejemplos de administradores de paquetes incluyen:
Gerente de empaquetación | Descripción |
---|---|
npm | Un administrador de paquetes para Node.js [21] |
pepita | Un instalador de paquetes para Python [22] |
apto | Para administrar paquetes Debian [23] |
Cerveza casera | Un instalador de paquetes para MacOS que te permite instalar paquetes que Apple no tenía [24] |
vcpkg | Un administrador de paquetes para C y C ++ [25] [26] |
yum y dnf | Administrador de paquetes para Fedora y Red Hat Enterprise Linux [27] |
pacman | Administrador de paquetes para Arch Linux [28] |
Administradores 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 la integración continua . Esto puede interactuar con un administrador de repositorios binarios 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:
- Qué usuario activó la compilación (ya sea manualmente o comprometiéndose con el control de revisión)
- Que módulos fueron construidos
- Qué fuentes se utilizaron (id de confirmación, revisión, rama)
- Dependencias utilizadas
- Variables de entorno
- Paquetes instalados
Artefactos y paquetes
Los artefactos y los paquetes significan cosas diferentes de forma inherente. Los artefactos son simplemente una salida o una 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 solo archivo de almacenamiento en un formato bien definido (por ejemplo, NuGet ) que contiene archivos apropiados para el tipo de paquete (por ejemplo, DLL, PDB). [29] Muchos artefactos son el resultado de construcciones, pero otros tipos también son cruciales. Los paquetes son esencialmente una de dos cosas: una biblioteca o una aplicación. [30]
En comparación con los archivos de origen, los artefactos binarios suelen ser más grandes en órdenes de magnitud, rara vez se eliminan o sobrescriben (excepto en casos raros, 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 de metadatos comunes y sus usos:
Tipo de metadatos | Usado para |
---|---|
Versiones disponibles | Actualizar y degradar automáticamente |
Dependencias | Especificar otros artefactos de los que depende el artefacto actual |
Dependencias posteriores | Especificar otros artefactos que dependen del artefacto actual |
Licencia | Cómplice legal |
Fecha y hora de construcción | Trazabilidad |
Documentación | Proporcionar disponibilidad sin conexión para la documentación contextual en IDE |
Información de aprobación | Trazabilidad |
Métrica | Cobertura de código, cumplimiento de reglas, resultados de pruebas |
Metadatos creados por el usuario | Informes y procesos personalizados |
Ver también
- Gerente de empaquetación
- Administrador de paquetes RPM
- Sináptico
- Puertos FreeBSD
- Biblioteca multimedia definitiva
- dpkg
- Simtel
- APTonCD
Referencias
- ^ itmWEB: Cómo afrontar los virus informáticos Archivado el 14 de octubre de 2007 en Wayback Machine
- ^ https://www.wikieduonline.com/wiki/JFrog_Artifactory
- ^ https://jfrog.com/artifactory/
- ^ https://www.sonatype.com/products/repository-pro
- ^ "The Haskell Cabal | Descripción general" . www.haskell.org . Consultado el 25 de marzo de 2019 .
- ^ "Maven - Bienvenido a Apache Maven" . maven.apache.org . Consultado el 25 de marzo de 2019 .
- ^ "Listado de paquetes de Julia" . pkg.julialang.org . Consultado el 25 de marzo de 2019 .
- ^ "Quicklisp beta" . www.quicklisp.org . Consultado el 25 de marzo de 2019 .
- ^ karann-msft. "Referencia de la interfaz de usuario de NuGet Package Manager" . docs.microsoft.com . Consultado el 25 de marzo de 2019 .
- ^ "npm" . www.npmjs.com . Consultado el 25 de marzo de 2019 .
- ^ "Instalación de módulos Perl - www.cpan.org" . www.cpan.org . Consultado el 25 de marzo de 2019 .
- ^ Leisch, Friedrich. "Creación de paquetes R: un tutorial" (PDF) .
- ^ Graves, Spencer B .; Dorai-Raj, Sundar. "Creación de paquetes R, uso de CRAN, R-Forge y redes de archivo locales R y repositorios de subversión (SVN)" (PDF) .
- ^ "La red integral de archivos de R" . cran.r-project.org . Consultado el 25 de marzo de 2019 .
- ^ "Instalación y administración de R" . cran.r-project.org . Consultado el 25 de marzo de 2019 .
- ^ Wickham, Hadley; Bryan, Jenny. "Estructura y estado del paquete" . R paquetes . O'Reilly.
- ^ 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 los talleres de la Conferencia Europea de Arquitectura de Software de 2015 - ECSAW '15 : 1–6. doi : 10.1145 / 2797433.2797476 .
- ^ a b "El libro de carga" . Documentación. Lenguaje de programación Rust . Consultado el 26 de agosto de 2019 .
- ^ "Registro de paquetes Rust" . crates.io . Consultado el 26 de agosto de 2019 .
- ^ "Lista de repositorios principales por lenguaje de programación" . Desbordamiento de pila . Consultado el 14 de abril de 2010 .
- ^ "npm Acerca de" . www.npmjs.com . Consultado el 21 de noviembre de 2019 .
- ^ desarrolladores, The pip, pip: la herramienta recomendada por PyPA para instalar paquetes de Python. , consultado el 21-11-2019
- ^ "Apt - Debian Wiki" . wiki.debian.org . Consultado el 22 de noviembre de 2019 .
- ^ "Homebrew" . Homebrew . 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" . Tiempos SD . 20 de septiembre de 2016.
- ^ "El administrador de bibliotecas C ++ de Microsoft ahora está disponible para Linux y macOS" . Tiempos SD . 25 de abril de 2018.
- ^ Chinthaguntla, Keerthi. "Gestión de paquetes Linux con YUM y RPM" . Habilite Sysadmin . Consultado el 11 de abril de 2021 .
- ^ "pacman - ArchWiki" . wiki.archlinux.org . Consultado el 11 de abril de 2021 .
- ^ "Esquemas de clasificación de repositorios de Linux" . braintickle.blogspot.com . Consultado el 1 de marzo de 2008 .