Un administrador de paquetes o sistema de administració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 para una computadora de manera consistente. [1]
Un administrador de paquetes se ocupa de paquetes , distribuciones de software y datos en archivos de almacenamiento . Los paquetes contienen metadatos , como el nombre del software, descripción de su propósito, número de versión, proveedor, suma de verificació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 versión para evitar discrepancias de software y requisitos previos 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 constar de cientos o incluso decenas de miles de paquetes de software distintos. [2]
Uno de los primeros administradores de paquetes fue SMIT (y su instalación backend) de IBM AIX . SMIT se introdujo con AIX 3.0 en 1989. [ cita necesaria ]
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 hacer el trabajo de descargar paquetes de un repositorio, resolviendo automáticamente sus dependencias e instalándolos según fuera necesario, haciendo mucho más fácil instalar, desinstalar y actualizar software de un sistema. [5]
Un paquete de software es un archivo que contiene un programa informático, así como los metadatos necesarios para su implementación. El programa de computadora puede estar en un código fuente que primero debe compilarse y construirse. [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 la tarea de buscar, instalar, mantener o desinstalar paquetes de software según las órdenes del usuario. Las funciones típicas de un sistema de gestió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 dependencia ". 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, ranuras en Gentoo Portage ) e incluso paquetes compilados con diferentes versiones del compilador. (por ejemplo, bibliotecas dinámicas creadas por el compilador Haskell de Glasgow , donde no existe una ABI estable ), para permitir que otros paquetes especifiquen con qué versión se vincularon o incluso se instalaron.
Los administradores del sistema pueden instalar y mantener software utilizando herramientas distintas al software de administración de paquetes. Por ejemplo, un administrador local puede descargar el código fuente sin empaquetar, compilarlo e instalarlo. Esto puede hacer que el estado del sistema local no esté sincronizado con el estado de la base de datos del administrador de paquetes . Se requerirá que el administrador local tome medidas adicionales, como administrar manualmente algunas dependencias o integrar los cambios en el administrador de paquetes.
Hay herramientas disponibles para garantizar que los paquetes compilados localmente se integren con la gestió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 encaje en la base de datos de paquetes local. [ cita necesaria ]
Particularmente problemáticas con las actualizaciones de software son las actualizaciones de los archivos de configuración. Dado que los administradores de paquetes, al menos en los sistemas Unix, se originaron como extensiones de las utilidades de archivo de archivos , generalmente solo pueden sobrescribir o retener archivos de configuración, en lugar de aplicarles reglas. Hay excepciones a esto que generalmente se aplican a la configuración del kernel (que, si se rompe, dejará la computadora inutilizable después de reiniciar). 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 deshabilitarse. Algunos administradores 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 cabeza en una gran cantidad de computadoras. Este tipo de instalación preconfigurada también es compatible con dpkg.
Para brindar a los usuarios más control sobre los tipos de software que permiten instalar en su sistema (y, a veces, por razones legales o de conveniencia por parte de los distribuidores), el software a menudo se descarga de 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 presentarle la lista de acciones que se ejecutarán (generalmente 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 de forma masiva o seleccionar paquetes individuales para las actualizaciones. Muchos administradores de paquetes se pueden configurar para que nunca actualicen ciertos paquetes, o para actualizarlos 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 versión .
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 sólo depende el paquete de destino.
Aunque los comandos son específicos para cada administrador de paquetes en particular, en gran medida son traducibles, ya que la mayoría de los administradores de paquetes ofrecen funciones similares.
La wiki de Arch Linux Pacman/Rosetta ofrece una descripción general extensa. [16]
Los administradores de paquetes como dpkg existen ya en 1994. [17]
Las distribuciones de Linux orientadas a paquetes binarios dependen en gran medida de los sistemas de gestión de paquetes como medio principal para gestionar y mantener el 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 tanto, utilizan sus propios sistemas de gestión de paquetes dedicados.
pacman
, una utilidad CLI para distribuciones basadas en ArchUn administrador de paquetes a menudo se 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 de software y su implementación como pasos separados e independientes. Una utilidad de automatización de compilación generalmente 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. Más tarde, un administrador de paquetes que normalmente se ejecuta en otras computadoras descarga esos paquetes ejecutables binarios prediseñados 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 manejar tanto la construcción como la implementación, y pueden usarse como una utilidad de automatización de construcción, como administrador de paquetes o ambas. [18]
Las tiendas de aplicaciones también pueden considerarse administradores de paquetes a nivel de aplicaciones, 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 por el software en sí (en lugar del desarrollo de software) y solo pueden ofrecer paquetes monolíticos sin dependencias ni resolución de dependencias. [21] [20] Por lo general, su funcionalidad de gestión es extremadamente limitada, debido a un fuerte enfoque en la simplificación por encima del poder 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 App Store de Apple, seleccionan aplicaciones en su mayoría utilizando únicamente herramientas automatizadas; el malware con dispositivos de desactivación puede pasar estas pruebas, detectando cuándo el software se está probando automáticamente 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 entre en la base de datos estable principal. La puerta trasera de XZ Utils utilizó años de creación de confianza para insertar una puerta trasera, que aún así fue detectada mientras estaba en la base de datos de prueba.
También conocido como administrador de repositorios binarios , es una herramienta de software diseñada para optimizar la descarga y el almacenamiento de archivos, artefactos y paquetes binarios utilizados y producidos en el proceso de desarrollo de software . [27] Estos administradores de paquetes tienen como objetivo estandarizar la forma en que las empresas tratan todos los tipos de paquetes. Brindan a los usuarios la capacidad de aplicar métricas de seguridad y cumplimiento en todos los tipos de artefactos. Se ha dicho que los administradores de paquetes universales están en el centro de una cadena de herramientas de 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 agrupar 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 gestiona la instalación básica de estos paquetes y varios administradores de paquetes utilizan estas utilidades para proporcionar funcionalidad adicional.
Por ejemplo, yum depende de rpm como backend. Yum amplía 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, se basa en dpkg para su funcionalidad principal.
Alien es un programa que convierte entre diferentes formatos de paquetes de Linux y admite la conversión entre paquetes .rpm compatibles con Linux Standard Base (LSB) , .deb , Stampede (.slp), Solaris (.pkg) y Slackware ( .tgz , .txz , . tbz, .tlz) paquetes.
En los sistemas operativos móviles, Google Play consume el formato de paquete de paquete de aplicaciones de Android (APK), mientras que Microsoft Store usa los formatos APPX y XAP . (Tanto Google Play como Microsoft Store tienen administradores de paquetes del mismo nombre).
Por la naturaleza del software gratuito y de código abierto , hay paquetes con licencias similares y compatibles disponibles para su uso en varios sistemas operativos. Estos paquetes se pueden combinar y distribuir utilizando sistemas de empaquetado configurables e internamente complejos para manejar muchas permutaciones de software y gestionar dependencias y conflictos específicos de la versión. Algunos sistemas de empaquetado de software gratuito y de código abierto también se publican como software gratuito 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 también permiten instalar y administrar paquetes de terceros. actualizado 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 software de terceros generalmente se agrega agregando la URL del repositorio correspondiente al archivo de configuración de administració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 del 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 genera 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, informático de la Universidad de Leipzig, acuñó el término Data Dependency Management [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 gestión de datos en la nube, computadoras 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 razón fundamental es permitir a los usuarios gestionar la dependencia del software en 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 aportado a la industria", que desdibuja los límites entre el sistema operativo y las aplicaciones, y que hace que sea "más fácil impulsar nuevas innovaciones [...] mercado y [...] evolucionar el sistema operativo". [32]
También hay una conferencia para desarrolladores de administradores de paquetes conocida como PackagingCon. Se estableció en 2021 con el objetivo de comprender diferentes enfoques para la gestión de paquetes. [33]
{{cite web}}
: Mantenimiento CS1: URL no apta ( enlace )