Dependencias de paquetes de Debian

Dependencias de paquetes de Debian
Para distribuciones de Linux como Debian GNU/Linux, existen más de 60.000 paquetes de software diferentes. Todos ellos tienen un papel específico. En este artículo, explicamos cómo administra la administración de paquetes de manera confiable esta gran cantidad de paquetes de software durante una instalación, una actualización o una eliminación para mantener su sistema funcionando y completamente estable.

Para Debian GNU/Linux, esto se refiere a las herramientas Apt, Apt-Get, Aptitude, Apt-Cache, Apt-Depends, Apt-RDepends, DPKG-DEB y APT-Mark.

Disponibilidad de paquetes de software

Como ya se dijo anteriormente, una distribución de Linux consiste en toneladas de diferentes paquetes de software. A partir de hoy, el software es bastante complejo, y es por eso que es común dividir el software en varios paquetes individuales. Estos paquetes se pueden clasificar por funcionalidad o por rol, como paquetes binarios, bibliotecas, documentación, ejemplos de uso, así como colecciones específicas del lenguaje y proporcionar una parte seleccionada del software, solo. No hay una regla fija para ello, y la división es hecha por el equipo de desarrollo de una herramienta o el mantenedor de paquetes que se encarga del paquete de software para su distribución de Linux. Usando la aptitud, la Figura 1 enumera los paquetes que contienen las traducciones para los diferentes idiomas para el webbrowser Mozilla Firefox.

Figura 1: Aptitud-FireFox.png

Esta forma de trabajar hace posible que cada paquete pueda ser mantenido por un desarrollador diferente o como un equipo completo. Además, la división en componentes únicos permite que otros paquetes de software también lo utilicen para sus propios fines. Se puede aplicar una funcionalidad requerida y no es necesario reinventar.

Organización de paquetes

Las herramientas de gestión de paquetes de la distribución de Debian GNU/Linux tienen que preocuparse constantemente que las dependencias de los paquetes instalados se cumplan por completo. Este es especialmente el caso si un paquete de software debe ser instalado, actualizado o eliminado en su sistema o desde su sistema. Los paquetes faltantes se agregan al sistema, o los paquetes instalados se eliminan del sistema en caso de que ya no sean necesarios. La Figura 2 demuestra esto para la eliminación del paquete 'mc-data' usando 'apt-get'. El paquete 'MC-Data' recomienda eliminar automáticamente el paquete 'MC', porque ya no tiene sentido instalarse sin 'MC-Data'.

Figura 2: Apt-get-Remove-MC.png

Marcas y banderas de paquete

Durante su trabajo, las herramientas de gestión de paquetes respetan las banderas y las marcas del paquete que se establecen. El administrador del sistema se establece automáticamente o se establece manualmente. Especialmente este comportamiento se refiere al "paquete esencial" de la bandera que se establece para paquetes que no deben eliminarse. Se emite una advertencia clara antes de hacerlo (ver Figura 3).

Figura 3: apt-get-remove.png

Además, se tienen en cuenta las tres marcas 'automáticas', 'manuales' y 'retener'. Marcan un paquete como instalado automáticamente, instalado manualmente o no deben actualizarse (mantén la versión actual). Un paquete de software está marcado 'automático' o 'manual', pero no ambos.

Entre otros, el comando 'Apt-Mark' maneja las marcas y las banderas utilizando los siguientes subcomandos:

  • Auto: establezca un paquete como se instaló automáticamente
  • Hold: mantén la versión actual del paquete
  • Manual: establezca un paquete como instalado manualmente
  • showAuto: Mostrar los paquetes instalados automáticamente
  • ShowManual: Mostrar los paquetes instalados manualmente
  • Showhold: enumere los paquetes que están en espera
  • Descanso: elimine el indicador de retención para el paquete dado

Para enumerar todos los paquetes instalados manualmente emiten este comando:

$ apt-mark showmanual
abiña
guía
ack-grrep
LCA
ACPI

ps

Para mantener una versión de paquete, use el subcomando 'Hold'. El siguiente ejemplo muestra esto para el paquete 'MC'.

# Apt-Mark Hold MC
MC establecido en espera
#

El subcomando 'Showhold' enumera los paquetes que están en espera (en nuestro caso es el paquete 'MC', solo):

# showhold de marca adecuada
mc
#

Utilizando un método alternativo titulado 'APT PINNING', los paquetes se clasifican por prioridades. APT los aplica para decidir cómo manejar este paquete de software y las versiones que están disponibles desde el repositorio de software.

Descripción del paquete

Utilizando un método alternativo titulado 'APT PINNING', los paquetes se clasifican por prioridades. APT los aplica para decidir cómo manejar este paquete de software y las versiones que están disponibles desde el repositorio de software.

Cada paquete de software viene con su propia descripción del paquete estandarizado. Entre otros campos, esta descripción especifica explícitamente qué paquetes adicionales depende de él. Las herramientas específicas de la distribución extraen esta información de la descripción del paquete, y calcule y visualice las dependencias para usted, luego, luego. El siguiente ejemplo usa el comando 'APT-Cache Show' para mostrar la descripción del paquete del paquete 'Poppler-Utils' (ver Figura 4).

Figura 4: paquete-descripción-poppler-uTils.png

La descripción del paquete contiene una sección llamada 'depende'. Esta sección enumera los otros paquetes de software más el número de versión del que depende el paquete actual. En la Figura 4, esta sección se enmarca en rojo y muestra que 'Poppler-Utils' depende de los paquetes 'libpoppler64', 'libc6', 'libcairo2', 'libfreetype6', 'liblcms2-2', 'libstdc ++ 6' y 'zlib1g'.

Mostrar las dependencias del paquete

Leer la descripción del paquete es la manera difícil de descubrir las dependencias del paquete. A continuación, le mostraremos cómo simplificar esto.

Hay varias formas de mostrar las dependencias del paquete en la línea de comando. Para un paquete DEB como archivo local, use el comando 'dpkg -DEB' con dos parámetros: el nombre del archivo del paquete y la palabra clave 'depende'. El siguiente ejemplo demuestra esto para el paquete 'skypeforlinux-64.debutante':

$ dpkg-deb -f descargas/skypeforlinux-64.Deb depende
GCONF-Service, LibASound2 (> = 1.0.16), libatk1.0-0 (> = 1.12.4), libc6 (> = 2.17),
libcairo2 (> = 1.2.4), libcups2 (> = 1.4.0), libexPat1 (> = 2.0.1),
libfreetype6 (> = 2.4.2), libgcc1 (> = 1: 4.1.1), libgconf-2-4 (> = 3.2.5),
libgdk-pixbuf2.0-0 (> = 2.22.0), libglib2.0-0 (> = 2.31.8), libgtk2.0-0 (> = 2.24.0),
libnspr4 (> = 2: 4.9-2 ~), libnss3 (> = 2: 3.13.4-2 ~), libpango-1.0-0 (> = 1.14.0),
libpangocairo-1.0-0 (> = 1.14.0), libsecret-1-0 (> = 0.7), libv4l-0 (> = 0.5.0),
libx11-6 (> = 2: 1.4.99.1), libx11-xcb1, libxcb1 (> = 1.6), libxComposite1 (> = 1: 0.3-1),
libxcursor1 (>> 1.1.2), libxdamage1 (> = 1: 1.1), libxext6, libxfixes3,
libxi6 (> = 2: 1.2.99.4), libxrandr2 (> = 2: 1.2.99.3), libxrender1, libxss1,
libxtst6, apt-transport-https, libfontconfig1 (> = 2.11.0), libdbus-1-3 (> = 1.6.18),
libstdc ++ 6 (> = 4.8.1)
ps

Para hacer lo mismo para un paquete instalado, use 'Apt-Cache'. El primer ejemplo combina el subcomando 'show' seguido del nombre del paquete. La salida se envía al comando 'GREP' que filtra la línea 'depende':

$ apt-cache show xpdf | Grep depende
Depende: libc6 (> = 2.4), libgcc1 (> = 1: 4.1.1), libpoppler46 (> = 0.26.2),
libstdc ++ 6 (> = 4.1.1), libx11-6, libxm4 (> = 2.3.4), libxt6
ps

El comando 'GREP -STATUS -F PACPACK -S depende de XPDF' informará la misma información.

Más específico, el segundo ejemplo usa nuevamente 'apt-cache' pero con el subcomando 'depende', en cambio. El subcomando es seguido por el nombre del paquete:

$ Apt-Cache depende de XPDF
XPDF
Depende: libc6
Depende: libgcc1
Depende: libpoppler46
Depende: libstdc ++ 6
Depende: libx11-6
Depende: libxm4
Depende: libxt6
Recomienda: Poppler-Utils
Poppler-Utils: i386
Recomiende: Poppler-Data
Recomienda: GSFonts-X11
Recomiende: CUPS-BSD
Tops-BSD: i386
Choca con:
Choca con:
Choca con:
Choca con:
Reemplaza:
Reemplaza:
Reemplaza:
Reemplaza:
Choca con: xpdf: i386
ps

La lista anterior es bastante larga y se puede acortar usando el interruptor '-i' (abreviatura de '-Importante'):

$ apt -cache depende -i xpdf
XPDF
Depende: libc6
Depende: libgcc1
Depende: libpoppler46
Depende: libstdc ++ 6
Depende: libx11-6
Depende: libxm4
Depende: libxt6
ps

El comando 'apt rDepends' hace lo mismo, pero con información de la versión si se especifica en la descripción:

$ Apt-RDepends XPDF
Listas de paquetes de lectura ... Hecho
Árbol de dependencia del edificio
Lectura de la información del estado ... Hecho
XPDF
Depende: libc6 (> = 2.4)
Depende: libgcc1 (> = 1: 4.1.1)
Depende: libpoppler46 (> = 0.26.2)
Depende: libstdc ++ 6 (> = 4.1.1)
Depende: libx11-6
Depende: libxm4 (> = 2.3.4)
Depende: libxt6
libc6
Depende: libgcc1

ps

El comando 'aptitud' también funciona con interruptores. Para las dependencias, use el interruptor '~ r' seguido del nombre del paquete. La Figura 5 muestra esto para el paquete 'xpdf'. La letra 'a' en la segunda columna de la salida de 'aptitud' identifica que el paquete se está instalando automáticamente.

Figura 5: Aptitud-RDepende.png

Las dependencias de los paquetes pueden ser un poco complicadas. Puede ayudar mostrar las dependencias de los paquetes gráficamente. Use el comando 'debtree' seguido del nombre del paquete para crear una representación gráfica de las dependencias del paquete. La herramienta 'Dot' del paquete GraphViz transforma la descripción en una imagen de la siguiente manera:

$ debtree xpdf | dot -tpng> gráfico.png

En la Figura 6 ves la imagen PNG creada que contiene el gráfico de dependencia.

Figura 6: punto.png

Mostrar las dependencias inversas

Hasta ahora, mostramos, hemos respondido la pregunta sobre qué paquetes se requieren para un paquete. También está el revés: las llamadas dependencias inversas. Los próximos ejemplos tratan con el paquete, así como los paquetes que dependen de él. Ejemplo número uno usa 'apt-cache' con el subcomando 'RDepends' de la siguiente manera:

$ apt-cache rDepends xpdf
XPDF
Reverso depende:
| Octave-Doc
XPDF: i386
libfontconfig1: i386
| XMDS-DOC
XFE
wiipdf
| Vim-Latexsuite
pitón
| Ruby-Tioga
| Python-Tables-Doc
| Page-crunch
| Octave-Doc
| Muttprint-manual
mozplugger
mlpost
libmlpost-ocaml-dev

ps

Los paquetes que dependen de otros paquetes están marcados con un símbolo de tubería. No es necesario instalar estos paquetes en su sistema, pero deben aparecer en la base de datos de paquetes.

El siguiente ejemplo usa 'aptitud' para enumerar los paquetes que tienen una referencia difícil al paquete 'XPDF' (ver Figura 7).

Figura 7: APtitude-Search.png

Validar la instalación de los paquetes faltantes

'Apt-get' ofrece el subcomando 'verificación' que permite validar la instalación. Si ve la siguiente salida, no faltan paquetes:

# cheque de apt-get
Listas de paquetes de lectura ... Hecho
Árbol de dependencia del edificio
Lectura de la información del estado ... Hecho
#

Conclusión

Encontrar dependencias de paquetes funciona bien con las herramientas adecuadas. Usarlos correctamente lo ayuda a comprender por qué están instalados los paquetes y cuáles podrían faltar.

Enlaces y referencias

  • Axel Beckert, Frank Hofmann: Das Debian-PaketManagement-Buch, https: // www.dpmb.org/