Un administrador de paquetes o un sistema de gestión de paquetes es una colección de herramientas de software que automatiza el proceso de instalación, actualización, configuración y eliminación de programas informáticos de una computadora de manera consistente. [1]
Un administrador de paquetes se ocupa de los paquetes , las distribuciones de software y los datos en archivos de almacenamiento . Los paquetes contienen metadatos , como el nombre del software, la descripción de su propósito, el número de versión, el proveedor, la suma de comprobación (preferiblemente una función hash criptográfica ) y una lista de dependencias necesarias para que el software se ejecute correctamente. Tras la instalación, los metadatos se almacenan en una base de datos de paquetes local. Los administradores de paquetes suelen mantener una base de datos de dependencias de software e información de versiones para evitar desajustes de software y prerrequisitos faltantes. Trabajan en estrecha colaboración con repositorios de software , administradores de repositorios binarios y tiendas de aplicaciones .
Los administradores de paquetes están diseñados para eliminar la necesidad de instalaciones y actualizaciones manuales. Esto puede resultar especialmente útil para grandes empresas cuyos sistemas operativos suelen estar compuestos por cientos o incluso decenas de miles de paquetes de software distintos. [2]
Uno de los primeros gestores de paquetes fue SMIT (y su backend installp) de IBM AIX . SMIT se introdujo con AIX 3.0 en 1989. [ cita requerida ]
Los primeros administradores de paquetes, de alrededor de 1994, no tenían resolución automática de dependencias [3] pero ya podían simplificar drásticamente el proceso de agregar y eliminar software de un sistema en ejecución. [4]
Alrededor de 1995, comenzando con CPAN , los administradores de paquetes comenzaron a realizar el trabajo de descargar paquetes de un repositorio, resolver automáticamente sus dependencias e instalarlos según fuera necesario, lo que hizo mucho más fácil instalar, desinstalar y actualizar el software de un sistema. [5]
Un paquete de software es un archivo que contiene un programa informático y los metadatos necesarios para su implementación. El programa informático puede estar en código fuente que debe compilarse y crearse primero. [6] Los metadatos del paquete incluyen la descripción del paquete, la versión del paquete y las dependencias (otros paquetes que deben instalarse de antemano).
Los administradores de paquetes se encargan de buscar, instalar, mantener o desinstalar paquetes de software según las órdenes del usuario. Las funciones típicas de un sistema de administración de paquetes incluyen:
Los sistemas informáticos que dependen de la vinculación dinámica de bibliotecas , en lugar de la vinculación estática de bibliotecas , comparten bibliotecas ejecutables de instrucciones de máquina entre paquetes y aplicaciones. En estos sistemas, las relaciones conflictivas entre diferentes paquetes que requieren diferentes versiones de bibliotecas dan como resultado un desafío conocido coloquialmente como " infierno de dependencias ". En los sistemas Microsoft Windows , esto también se denomina " infierno de DLL " cuando se trabaja con bibliotecas vinculadas dinámicamente. [7]
Los administradores de paquetes modernos han resuelto en su mayoría estos problemas, al permitir la instalación paralela de múltiples versiones de una biblioteca (por ejemplo, el sistema Framework de OPENSTEP ), una dependencia de cualquier tipo (por ejemplo, slots en Gentoo Portage ), e incluso de paquetes compilados con diferentes versiones del compilador (por ejemplo, bibliotecas dinámicas creadas por Glasgow Haskell Compiler , donde no existe una ABI estable ), para permitir que otros paquetes especifiquen contra qué versión fueron vinculados o incluso instalados.
Los administradores de sistemas pueden instalar y mantener software utilizando herramientas distintas al software de administración de paquetes. Por ejemplo, un administrador local puede descargar código fuente desempaquetado, compilarlo e instalarlo. Esto puede provocar que el estado del sistema local pierda la sincronización con el estado de la base de datos del administrador de paquetes . El administrador local deberá tomar medidas adicionales, como administrar manualmente algunas dependencias o integrar los cambios en el administrador de paquetes.
Existen herramientas disponibles para garantizar que los paquetes compilados localmente se integren con la administración de paquetes. Para distribuciones basadas en archivos .deb y .rpm , así como Slackware Linux, existe CheckInstall , y para sistemas basados en recetas como Gentoo Linux y sistemas híbridos como Arch Linux , es posible escribir primero una receta, lo que luego garantiza que el paquete se ajuste a la base de datos de paquetes local. [ cita requerida ]
Las actualizaciones de los archivos de configuración son especialmente problemáticas en el caso de las actualizaciones de software. Dado que los gestores de paquetes, al menos en los sistemas Unix, se originaron como extensiones de las utilidades de archivado de archivos , normalmente sólo pueden sobrescribir o conservar los archivos de configuración, en lugar de aplicarles reglas. Hay excepciones a esto que suelen aplicarse a la configuración del núcleo (que, si se rompe, dejará la computadora inutilizable después de un reinicio). Pueden surgir problemas si cambia el formato de los archivos de configuración; por ejemplo, si el archivo de configuración antiguo no deshabilita explícitamente las nuevas opciones que deberían estar deshabilitadas. Algunos gestores de paquetes, como dpkg de Debian , permiten la configuración durante la instalación. En otras situaciones, es deseable instalar paquetes con la configuración predeterminada y luego sobrescribir esta configuración, por ejemplo, en instalaciones sin interfaz gráfica en una gran cantidad de computadoras. Este tipo de instalación preconfigurada también es compatible con dpkg.
Para dar a los usuarios más control sobre los tipos de software que permiten instalar en sus sistemas (y a veces debido a razones legales o de conveniencia por parte de los distribuidores), el software a menudo se descarga desde varios repositorios de software . [8]
Cuando un usuario interactúa con el software de administración de paquetes para realizar una actualización, es habitual presentar al usuario la lista de acciones que se ejecutarán (normalmente la lista de paquetes que se actualizarán, y posiblemente los números de versión antigua y nueva), y permitir al usuario aceptar la actualización en bloque o seleccionar paquetes individuales para las actualizaciones. Muchos administradores de paquetes pueden configurarse para que nunca actualicen determinados paquetes o para que los actualicen solo cuando se encuentren vulnerabilidades o inestabilidades críticas en la versión anterior, según lo definido por el empaquetador del software. Este proceso a veces se denomina fijación de versiones .
Por ejemplo:
Algunas de las funciones de administración de paquetes más avanzadas ofrecen "eliminación de paquetes en cascada", [10] en la que también se eliminan todos los paquetes que dependen del paquete de destino y todos los paquetes de los que solo depende el paquete de destino.
Aunque los comandos son específicos para cada administrador de paquetes en particular, son en gran medida traducibles, ya que la mayoría de los administradores de paquetes ofrecen funciones similares.
La wiki Pacman/Rosetta de Arch Linux ofrece una descripción general extensa. [16]
Los administradores de paquetes como dpkg existen desde 1994. [17]
Las distribuciones de Linux orientadas a paquetes binarios dependen en gran medida de los sistemas de gestión de paquetes como su principal medio de gestión y mantenimiento de software. Los sistemas operativos móviles como Android (basado en Linux), iOS ( basado en Unix ) y Windows Phone dependen casi exclusivamente de las tiendas de aplicaciones de sus respectivos proveedores y, por lo tanto, utilizan sus propios sistemas de gestión de paquetes dedicados.
pacman
, una utilidad CLI para distribuciones basadas en ArchA menudo, a un administrador de paquetes se lo denomina "administrador de instalación", lo que puede generar confusión entre los administradores de paquetes y los instaladores . Las diferencias incluyen:
La mayoría de los sistemas de gestión de configuración de software tratan la creación y la implementación de software como pasos separados e independientes. Una utilidad de automatización de la creación normalmente toma archivos de código fuente legibles por humanos que ya están en una computadora y automatiza el proceso de convertirlos en un paquete ejecutable binario en la misma computadora o en una remota. Luego, un administrador de paquetes que normalmente se ejecuta en otra computadora descarga esos paquetes ejecutables binarios precompilados a través de Internet y los instala.
Sin embargo, ambos tipos de herramientas tienen muchos puntos en común:
make install
.Algunas herramientas, como Maak y AAP , están diseñadas para gestionar tanto la compilación como la implementación, y pueden utilizarse como una utilidad de automatización de la compilación o como un administrador de paquetes, o ambos. [18]
Las tiendas de aplicaciones también pueden considerarse administradores de paquetes a nivel de aplicación (sin la capacidad de instalar todos los niveles de programas [19] [20] ). A diferencia de los administradores de paquetes tradicionales, las tiendas de aplicaciones están diseñadas para permitir el pago del software en sí (en lugar de por el desarrollo del software), y solo pueden ofrecer paquetes monolíticos sin dependencias ni resolución de dependencias. [21] [20] Por lo general, son extremadamente limitadas en su funcionalidad de gestión, debido a un fuerte enfoque en la simplificación sobre la potencia o la emergencia , y son comunes en sistemas operativos comerciales y dispositivos "inteligentes" bloqueados.
Los administradores de paquetes también suelen tener solo código revisado por humanos. Muchas tiendas de aplicaciones, como Google Play y la App Store de Apple, examinan las aplicaciones principalmente usando solo herramientas automatizadas; el malware con dispositivos de desactivación puede pasar estas pruebas, detectando cuándo se está probando automáticamente el software y retrasando la actividad maliciosa. [22] [23] [24] Sin embargo, hay excepciones; la base de datos de paquetes npm , por ejemplo, depende completamente de la revisión posterior a la publicación de su código, [25] [26] mientras que la base de datos de paquetes Debian tiene un extenso proceso de revisión humana antes de que cualquier paquete ingrese a la base de datos estable principal. La puerta trasera XZ Utils usó años de construcción de confianza para insertar una puerta trasera, que, no obstante, fue detectada mientras estaba en la base de datos de prueba.
También conocido como gestor de repositorio binario , es una herramienta de software diseñada para optimizar la descarga y el almacenamiento de archivos binarios, artefactos y paquetes utilizados y producidos en el proceso de desarrollo de software . [27] Estos gestores de paquetes tienen como objetivo estandarizar la forma en que las empresas tratan todos los tipos de paquetes. Ofrecen a los usuarios la capacidad de aplicar métricas de seguridad y cumplimiento en todos los tipos de artefactos. Se ha hecho referencia a los gestores de paquetes universales como el centro de una cadena de herramientas DevOps . [28]
Cada administrador de paquetes depende del formato y los metadatos de los paquetes que puede administrar. Es decir, los administradores de paquetes necesitan que se incluyan grupos de archivos para el administrador de paquetes específico junto con los metadatos apropiados, como las dependencias. A menudo, un conjunto básico de utilidades administra la instalación básica de estos paquetes y varios administradores de paquetes usan estas utilidades para proporcionar funciones adicionales.
Por ejemplo, yum depende de rpm como backend . Yum extiende la funcionalidad del backend agregando características como una configuración simple para mantener una red de sistemas. Como otro ejemplo, Synaptic Package Manager proporciona una interfaz gráfica de usuario mediante el uso de la biblioteca Advanced Packaging Tool (apt) , que, a su vez, depende de dpkg para la funcionalidad principal.
Alien es un programa que convierte entre diferentes formatos de paquetes de Linux , admitiendo la conversión entre paquetes .rpm compatibles con Linux Standard Base (LSB) , .deb , Stampede (.slp), Solaris (.pkg) y paquetes Slackware ( .tgz , .txz , .tbz, .tlz).
En los sistemas operativos móviles, Google Play utiliza el formato de paquete de aplicaciones de Android (APK), mientras que Microsoft Store utiliza los formatos APPX y XAP . (Tanto Google Play como Microsoft Store tienen administradores de paquetes homónimos).
Por la naturaleza del software libre y de código abierto , los paquetes con licencias similares y compatibles están disponibles para su uso en varios sistemas operativos. Estos paquetes se pueden combinar y distribuir utilizando sistemas de empaquetado internamente complejos y configurables para manejar muchas permutaciones de software y gestionar dependencias y conflictos específicos de la versión. Algunos sistemas de empaquetado de software libre y de código abierto también se publican como software libre y de código abierto. Una diferencia típica entre la gestión de paquetes en sistemas operativos propietarios, como Mac OS X y Windows, y aquellos en software libre y de código abierto, como Linux, es que los sistemas de software libre y de código abierto permiten que también se instalen y actualicen paquetes de terceros a través del mismo mecanismo, mientras que los administradores de paquetes de Mac OS X y Windows solo actualizarán el software proporcionado por Apple y Microsoft, respectivamente (con la excepción de algunos controladores de terceros en Windows). La capacidad de actualizar continuamente el software de terceros generalmente se agrega agregando la URL del repositorio correspondiente al archivo de configuración de la gestión de paquetes.
Además de los administradores de aplicaciones a nivel de sistema, existen algunos administradores de paquetes complementarios para sistemas operativos con capacidades limitadas y para lenguajes de programación en los que los desarrolladores necesitan las bibliotecas más recientes .
A diferencia de los administradores de paquetes a nivel de sistema, los administradores de paquetes a nivel de aplicación se centran en una pequeña parte del sistema de software. Por lo general, residen dentro de un árbol de directorios que no es mantenido por el administrador de paquetes a nivel de sistema, como c:\cygwin o /opt/sw . [29] Sin embargo, este podría no ser el caso de los administradores de paquetes que se ocupan de las bibliotecas de programación, lo que lleva a un posible conflicto ya que ambos administradores de paquetes pueden afirmar que son "dueños" de un archivo y podrían interrumpir las actualizaciones.
En 2016, Edgard Marx, un científico informático de la Universidad de Leipzig, acuñó el término Gestión de Dependencia de Datos [30] para referirse a los sistemas que se ocupan de la gestión de datos. Los sistemas de Gestión de Dependencia de Datos están diseñados para facilitar la implementación y la gestión de datos en la nube, ordenadores personales o dispositivos inteligentes (edge). Los marcos de gestión de dependencia de datos se pueden utilizar para describir cómo se concibieron los datos, las licencias y sus dependencias. El concepto de gestión de dependencia de datos proviene de herramientas de gestión de dependencia de paquetes de software como npm para JavaScript, gem para Ruby y NuGet para .NET. Su fundamento es permitir a los usuarios gestionar la dependencia del software de los datos, como los modelos de aprendizaje automático para aplicaciones basadas en datos. Son útiles para publicar, localizar e instalar paquetes de datos. Un ejemplo típico de marcos de gestión de dependencia de datos son Hugging Face, KBox, [31] entre otros.
Ian Murdock había comentado que la gestión de paquetes es "el mayor avance que Linux ha traído a la industria", que difumina los límites entre el sistema operativo y las aplicaciones, y que hace "más fácil introducir nuevas innovaciones [...] en el mercado y [...] hacer evolucionar el sistema operativo". [32]
También existe una conferencia para desarrolladores de gestores de paquetes conocida como PackagingCon. Se creó en 2021 con el objetivo de comprender los diferentes enfoques de la gestión de paquetes. [33]
{{cite web}}
: CS1 maint: URL no apta ( enlace )