Debian

Dependencias del paquete Debian

Dependencias del paquete Debian
Para distribuciones de Linux como Debian GNU / Linux, existen más de 60.000 paquetes de software diferentes. Todos ellos tienen un rol específico. En este artículo explicamos cómo la administración de paquetes administra de manera confiable esta gran cantidad de paquetes de software durante una instalación, actualización o 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 consta de toneladas de paquetes de software diferentes. A día de hoy, el software es bastante complejo y por eso es común dividir el software en varios paquetes únicos. Estos paquetes se pueden clasificar por funcionalidad o por función, como paquetes binarios, bibliotecas, documentación, ejemplos de uso, así como colecciones específicas del idioma y proporcionan una parte seleccionada del software, solo. No hay una regla fija para ello, y la división la realiza el equipo de desarrollo de una herramienta o el mantenedor del paquete que se encarga del paquete de software para su distribución de Linux. Usando aptitude, la Figura 1 enumera los paquetes que contienen las traducciones para los diferentes idiomas para el navegador web Mozilla Firefox.

Figura 1: aptitude-firefox.png

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

Organización del paquete

Las herramientas de gestión de paquetes de la distribución Debian GNU / Linux se encargan constantemente de que las dependencias de los paquetes instalados se cumplan por completo. Este es especialmente el caso si un paquete de software está destinado a ser instalado, actualizado o eliminado en 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' también, porque ya no tiene sentido instalarlo sin 'mc-data'.

Figura 2: apt-get-remove-mc.png

Marcas y banderas de paquetes

Durante su trabajo, las herramientas de administración de paquetes respetan las banderas y marcas de paquetes que se establecen. Se configuran automáticamente o manualmente por el administrador del sistema. Especialmente este comportamiento se refiere a la bandera 'paquete esencial' que se establece para paquetes que no deben eliminarse. Se emite una advertencia clara antes de hacer eso (consulte la Figura 3).

Figura 3: apt-get-remove.png

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

Entre otros, el comando 'apt-mark' maneja las marcas y banderas usando los siguientes subcomandos:

Para enumerar todos los paquetes instalados manualmente, ejecute este comando:

$ apt-mark showmanual
abiword
abs-guía
ack-grep
acl
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 en espera
#

El subcomando 'showhold' enumera los paquetes que están en espera (en nuestro caso es el paquete 'mc', únicamente):

# apt-mark showhold
mc
#

Usando 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 en el repositorio de software.

Descripción del paquete

Usando 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 en el repositorio de software.

Cada paquete de software viene con su propia descripción de paquete que está estandarizada. Entre otros campos, esta descripción especifica explícitamente de qué paquetes adicionales depende. Las herramientas específicas de distribución extraen esta información de la descripción del paquete y calculan y visualizan las dependencias por usted, luego. El siguiente ejemplo usa el comando 'apt-cache show' para mostrar la descripción 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 está enmarcada 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 forma más difícil de averiguar 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 con 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 mostrar 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 paquete -s depende de xpdf' reportará la misma información.

Más específico, el segundo ejemplo usa nuevamente 'apt-cache' pero con el subcomando 'depende', en su lugar. El subcomando va seguido del 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
Recomienda: poppler-data
Recomienda: gsfonts-x11
Recomienda: tazas-bsd
tazas-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 '-important'):

$ 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 la información de la versión si se especifica en la descripción:

$ apt-rdepends xpdf
Leyendo listas de paquetes… Listo
Construyendo árbol de dependencia
Leyendo información de estado… Listo
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 'aptitude' también funciona con interruptores. Para las dependencias, use el modificador '~ 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 'aptitude' identifica el paquete como instalado automáticamente.

Figura 5: aptitude-rdepends.png

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

$ deudaree xpdf | punto -Tpng> gráfico.png

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

Figura 6: punto.png

Mostrar las dependencias inversas

Hasta ahora mostramos que hemos respondido a la pregunta de qué paquetes son necesarios para un paquete. También existe al revés: las llamadas dependencias inversas. Los siguientes ejemplos tratan tanto del paquete como de los paquetes que dependen de él. El ejemplo número uno usa 'apt-cache' con el subcomando 'rdepends' de la siguiente manera:

$ apt-cache rdepends xpdf
xpdf
Inversa depende:
| octava-doc
xpdf: i386
libfontconfig1: i386
| xmds-doc
xfe
wiipdf
| vim-latexsuite
python-scapy
| rubí-tioga
| tablas-de-python-doc
| crujido de página
| octava-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. Estos paquetes no necesitan estar instalados en su sistema, pero deben estar listados en la base de datos de paquetes.

El siguiente ejemplo usa 'aptitude' para enumerar los paquetes que tienen una referencia estricta al paquete 'xpdf' (ver Figura 7).

Figura 7: búsqueda de aptitud.png

Validar la instalación en busca de paquetes faltantes

'Apt-get' ofrece el subcomando 'check' que permite validar la instalación. Si ve el siguiente resultado, no falta ningún paquete:

# apt-get check
Leyendo listas de paquetes… Listo
Construyendo árbol de dependencia
Leyendo información de estado… Listo
#

Conclusión

Encontrar dependencias de paquetes funciona bien con las herramientas adecuadas. Usarlos correctamente le ayuda a comprender por qué se instalan los paquetes y cuáles pueden faltar.

Enlaces y referencias

Batalla por Wesnoth 1.13.6 Desarrollo liberado
Batalla por Wesnoth 1.13.6 lanzado el mes pasado, es el sexto lanzamiento de desarrollo en el 1.13.x y ofrece una serie de mejoras, sobre todo en la i...
Cómo instalar League Of Legends en Ubuntu 14.04
Si eres fanático de League of Legends, esta es una oportunidad para que pruebes League of Legends. Tenga en cuenta que LOL es compatible con PlayOnLin...
Instale el último juego de estrategia de OpenRA en Ubuntu Linux
OpenRA es un motor de juego de estrategia en tiempo real libre / gratuito que recrea los primeros juegos de Westwood como el clásico Command & Conquer...