stringtranslate.com

Gestor de paquetes

Synaptic , ejemplo de un gestor de paquetes

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]

Historia

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]

Funciones

Ilustración de un administrador de paquetes que se utiliza para descargar software nuevo. Las acciones manuales pueden incluir la aceptación de un acuerdo de licencia o la selección de algunas opciones de configuración específicas del paquete.

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:

Desafíos de las bibliotecas compartidas

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.

Interfaces para paquetes compilados localmente

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 ]

Mantenimiento de la configuración

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.

Repositorios

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]

Supresión de actualización

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:

Eliminación de paquetes en cascada

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.

Comparación de comandos

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]

Predominio

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.

Comparación con los instaladores

A 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:

Comparación con la utilidad de automatización de compilación

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:

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]

Comparación con las tiendas de aplicaciones

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.

Gestores de paquetes y formatos comunes

Gestor de paquetes universal

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]

Formatos de paquetes

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).

Sistemas de software libre y de código abierto

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.

Gestores de paquetes a nivel de aplicación

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.

Gestión de dependencia de datos

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.

Impacto

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]

Véase también

Referencias

  1. ^ "¿Qué es un gestor de paquetes?". Archivado desde el original el 17 de octubre de 2017. Consultado el 19 de diciembre de 2018 .
  2. ^ "Distribución de software". Dell KACE. Archivado desde el original el 3 de octubre de 2015. Consultado el 11 de julio de 2012 .
  3. ^ "La historia de la gestión de paquetes *nix". 14 de agosto de 2017. Archivado desde el original el 24 de octubre de 2021 . Consultado el 12 de octubre de 2021 .
  4. ^ "Reseña de la versión de diciembre de 1994 de InfoMagic". Archivado desde el original el 29 de octubre de 2021 . Consultado el 12 de octubre de 2021 .
  5. ^ "La cronología de Perl y su cultura". Archivado desde el original el 11 de enero de 2013. Consultado el 29 de octubre de 2021 .
  6. ^ Ludovic Courtès, Gestión funcional de paquetes con Guix Archivado el 15 de mayo de 2020 en Wayback Machine , junio de 2013, Madrid, European Lisp Symposium 2013
  7. ^ Tucker, Chris (15 de marzo de 2007). "OPIUM: Optimal Package Install/Uninstall Manager" (PDF) . 29.ª Conferencia Internacional sobre Ingeniería de Software (ICSE'07). UC San Diego. pág. 1. doi :10.1109/ICSE.2007.59. ISBN 978-0-7695-2828-1. S2CID  1279451. Archivado (PDF) desde el original el 14 de junio de 2011 . Consultado el 14 de septiembre de 2011 .
  8. ^ "Esquemas de clasificación de repositorios de Linux". braintickle.blogspot.com. 13 de enero de 2006. Archivado desde el original el 11 de octubre de 2007. Consultado el 1 de marzo de 2008 .
  9. ^ "CentOS yum pinning rpms". centos.org. Archivado desde el original el 2 de noviembre de 2007. Consultado el 1 de marzo de 2008 .{{cite web}}: CS1 maint: URL no apta ( enlace )
  10. ^ ab "Página del manual de pacman(8)". archlinux.org . Archivado desde el original el 31 de agosto de 2019 . Consultado el 1 de marzo de 2008 .
  11. ^ "Cómo mantener instaladas versiones específicas de paquetes (complejo)". debian.org. Archivado desde el original el 14 de noviembre de 2019. Consultado el 1 de marzo de 2008 .
  12. ^ "Apt fija un paquete para ponerlo en la lista negra". Archivado desde el original el 22 de julio de 2011. Consultado el 19 de agosto de 2010 .
  13. ^ "documentation/sles11". en.opensuse.org . Archivado desde el original el 1 de diciembre de 2022 . Consultado el 16 de agosto de 2017 .
  14. ^ "Administrador de paquetes XBPS - Manual de Void Linux". docs.voidlinux.org . Archivado desde el original el 23 de enero de 2023 . Consultado el 19 de diciembre de 2022 .
  15. ^ "swupd-client/swupd.1.rst at master · clearlinux/swupd-client · GitHub". github.com . Archivado desde el original el 7 de diciembre de 2022 . Consultado el 22 de junio de 2022 .
  16. ^ "Pacman/Rosetta – ArchWiki". wiki.archlinux.org . Archivado desde el original el 20 de noviembre de 2016 . Consultado el 17 de septiembre de 2017 .
  17. ^ "código fuente de la versión 0.93.15 de dpkg". Archivado desde el original el 2 de abril de 2015 . Consultado el 19 de diciembre de 2018 .
  18. ^ Eelco Dolstra, "Integración de la construcción y la implementación de software" Archivado el 21 de septiembre de 2019 en Wayback Machine .
  19. ^ "Brew es el reemplazo de la tienda de aplicaciones de macOS que no sabías que necesitabas". www.msn.com . Consultado el 25 de mayo de 2024 .
  20. ^ ab King, Bertel (17 de marzo de 2017). "Comparación de las tiendas de aplicaciones de Linux: ¿cuál es la adecuada para usted?". MUO . Consultado el 25 de mayo de 2024 .
  21. ^ "¿Qué es un gestor de paquetes?". www.debian.org .
  22. ^ Barrett, Brian. "Cómo 18 aplicaciones de malware se colaron en la App Store de Apple". Wired .
  23. ^ Whittaker, Zack (24 de octubre de 2019). "Millones de personas descargaron docenas de aplicaciones de Android de Google Play que estaban infectadas con adware". TechCrunch .
  24. ^ Newman, Lily Hay. "Nunca (nunca) descargues aplicaciones de Android fuera de Google Play". Wired .
  25. ^ Ojamaa, Andres; Duuna, Karl (2012). "Evaluación de la seguridad de la plataforma Node.js". Conferencia internacional de 2012 sobre tecnología de Internet y transacciones seguras . IEEE. ISBN 978-1-4673-5325-0. Recuperado el 22 de julio de 2016 .
  26. ^ "Código de conducta de npm: contenido aceptable de los paquetes" . Consultado el 9 de mayo de 2017 .
  27. ^ Waters, John K. (8 de septiembre de 2015). "JFrog lanza un repositorio de artefactos 'universal'". Revista ADT . Revista de tendencias de desarrollo de aplicaciones. Archivado desde el original el 2 de marzo de 2016. Consultado el 19 de febrero de 2016 .
  28. ^ Decoster, Xavier (18 de agosto de 2013). "An Overview of the NuGet Ecosystem". CodeProject.com . Archivado desde el original el 5 de julio de 2020. Consultado el 6 de febrero de 2020 .
  29. ^ "Fink – Home". finkproject.org . Archivado desde el original el 18 de agosto de 2021 . Consultado el 2 de septiembre de 2021 .
  30. ^ "Gestión de dependencias de datos". github.com . Consultado el 13 de julio de 2023 .
  31. ^ "KBox". IEEE : 125–132. Enero de 2017. doi :10.1109/ICSC.2017.77. S2CID  14980310 . Consultado el 13 de julio de 2023 .
  32. ^ "Cómo la gestión de paquetes lo cambió todo". ianmurdock.com. Archivado desde el original el 23 de febrero de 2009. Consultado el 1 de marzo de 2008 .
  33. ^ "PackagingCon 2021: una conferencia para desarrolladores y empaquetadores de gestores de paquetes". packaging-con.org . Archivado desde el original el 2 de septiembre de 2021 . Consultado el 2 de septiembre de 2021 .

Enlaces externos