Apt-rdepends

APT-RDEPENDS

Cuantas veces nos hemos encontrado con problemas de dependencias al querer instalar un paquete? , o simplemente queremos saber sus dependencias para no tener problemas en su instalación?
Esta pequeña guía es fruto de mis ratos de ocio husmeando por las paginas man de mi Debian GNU/Linux , y en la cual veremos como podemos saber y controlar las dependencias de un paquete con la herramienta apt-rdepends en Debian y derivadas.

Nombre

apt-rdepends
Esta herramienta puede listar de manera recursiva dependencias entre paquetes, ya sea hacia delante o hacia detrás. También lista hacia adelante
las dependencias de compilación.
El formato de salida se parece bastante al de «apt-cache depends». De igual forma, puede generar gráficos a partir de un archivo .dot, muy
parecidos a los de apt-cache en modo dotty.

Sintaxis

apt-rdepends [opciones] [paquete]

Instalación

Por supuesto lo encontramos en los repositorios debian , así que no queda mas que ejecutar desde consola:

#apt-get install apt-rdepends

Luego de su instalación estamos en condiciones de resolver las dependencias del paquete seleccionado.
Si bien mas adelante veremos algunas (sino todas) opciones, es aconsejable darse una leída a :

man apt-rdepends

Seguramente la forma mas útil y que generalmente usaremos sera solamente dando el nombre del paquete que nos interesa:

apt-rdepends nombrepaquete

Mas adelante tratare de explicar las opciones ofrecidas por esta herramienta , ya que no he encontrado documentación al respecto en Español acerca de estas.
De mas esta decir que todo aporte por parte de los lectores es bienvenido.
Por lo tanto ,y para ir entrando en el tema , si queremos saber las dependencias del paquete por ejemplo) esound , haríamos:
NOTA: Los ejemplos son realizados en la versión lenny de Debian , por lo que pueden variar según la versión del sistema que tengamos instalado.)

apt-rdepends esound

cuya salida sera algo similar a :

sudo apt-rdepends esound
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
esound
  Depende: esound-common (>= 0.2.36-3)
  Depende: libaudiofile0 (>= 0.2.3-4)
  Depende: libc6 (>= 2.3.5-1)
  Depende: libesd-alsa0 (>= 0.2.35)
  Depende: libesd0 (>= 0.2.35)
  Depende: libwrap0
esound-common
libaudiofile0
  Depende: libc6 (>= 2.5-5)
libc6
  Depende: libgcc1
libgcc1
  Depende: gcc-4.3-base (= 4.3.1-9)
  Depende: libc6 (>= 2.7-1)
gcc-4.3-base
libesd-alsa0
  Depende: esound-common (>= 0.2.36-3)
  Depende: libasound2 (>> 1.0.10)
  Depende: libaudiofile0 (>= 0.2.3-4)
  Depende: libc6 (>= 2.3.5-1)
libasound2
  Depende: libc6 (>= 2.7-1)
libesd0
  Depende: esound-common (>= 0.2.36-3)
  Depende: libaudiofile0 (>= 0.2.3-4)
  Depende: libc6 (>= 2.3.5-1)
libwrap0
  Depende: libc6 (>= 2.7-1)

Opciones

-b, --build-depends
Muestra las dependencias directas del paquete seleccionado.

sudo apt-rdepends -b esound

la salida generada al ser muy extensa (y para no aburrir) la he suprimido.
De todas formas los valores posibles que encontraremos son: Build-Depends, Build-Depends-Indep, Build-Conflicts, Build-Conflicts-Indep

-d, --dotty
Esta es una opción que a mi me ha gustado particularmente , claro , todo depende el uso que le demos.
En modalidad dotty nos lista los paquetes en la línea de comandos y genera la salida adecuada para ser usado por springgraph.El resultado será un conjunto de nodos y bordes que representan las relaciones entre los paquetes.
Ver:
http://www.esdebian.org/wiki/graficar-dependencias-debian

sudo apt-rdepends -d esound
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
digraph packages {
concentrate=true;
size="30,40";
"esound" [shape=box];
"esound" -> "esound-common";
"esound" -> "libaudiofile0";
"esound" -> "libc6";
"esound" -> "libesd-alsa0";
"esound" -> "libesd0";
"esound" -> "libwrap0";
"esound-common" [shape=ellipse];
"libaudiofile0" [shape=box];
"libaudiofile0" -> "libc6";
"libc6" [shape=box];
"libc6" -> "libgcc1";
"libgcc1" [shape=box];
"libgcc1" -> "gcc-4.3-base";
"libgcc1" -> "libc6";
"gcc-4.3-base" [shape=ellipse];
"libesd-alsa0" [shape=box];
"libesd-alsa0" -> "esound-common";
"libesd-alsa0" -> "libasound2";
"libesd-alsa0" -> "libaudiofile0";
"libesd-alsa0" -> "libc6";
"libasound2" [shape=box];
"libasound2" -> "libc6";
"libesd0" [shape=box];
"libesd0" -> "esound-common";
"libesd0" -> "libaudiofile0";
"libesd0" -> "libc6";
"libwrap0" [shape=box];
"libwrap0" -> "libc6";
}

Las lineas azules son pre-dependencias , las verdes son conflictos , las amarillas son sugeridos , naranja son recomendados , rojas son reemplazos , y las negras son dependencias.

Atención , dotty no esta capacitado para graficar grandes listas de paquetes.

-p, --print-state
Muestra la versión del paquete y su estado.

sudo apt-rdepends -p esound
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
esound
  Depende: esound-common (>= 0.2.36-3) [Installed]
  Depende: libaudiofile0 (>= 0.2.3-4) [Installed]
  Depende: libc6 (>= 2.3.5-1) [Installed]
  Depende: libesd-alsa0 (>= 0.2.35) [NotInstalled]
  Depende: libesd0 (>= 0.2.35) [Installed]
  Depende: libwrap0 [Installed]
esound-common
libaudiofile0
  Depende: libc6 (>= 2.5-5) [Installed]
libc6
  Depende: libgcc1 [Installed]
libgcc1
  Depende: gcc-4.3-base (= 4.3.1-9) [Installed]
  Depende: libc6 (>= 2.7-1) [Installed]
gcc-4.3-base
..................................

-r, --reverse
Lista todos los paquetes que dependen del especificado. Además , se buscara en los paquetes que dependen de estos y encontrara sus dependientes.

sudo apt-rdepends -r esound
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
esound
  Reverse Depende: fkiss (0.35-1)
  Reverse Depende: gkrellmss (2.6-7)
  Reverse Depende: moon-buggy-esd (1.0.51-5)
fkiss
gkrellmss
moon-buggy-esd

-f, --follow=DEPENDS
Dada una lista de DEPENDS separadas por coma nos dara sus dependencias y predependencias.

Los valores posibles para DEPENDS son : Depends, PreDepends, Suggests, Recommends, Conflicts, Replaces, y Obsoletes.
ejemplo:

apt-rdepends -f depends , depends
o
apt-rdepends --follow=depends , depends
sudo apt-rdepends -f fkiss, esound

Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
esound
  Depende: esound-common (>= 0.2.36-3)
  Depende: libaudiofile0 (>= 0.2.3-4)
  Depende: libc6 (>= 2.3.5-1)
  Depende: libesd-alsa0 (>= 0.2.35)
  Depende: libesd0 (>= 0.2.35)
  Depende: libwrap0

-s, --show=DEPENDS
solo muestra las dependencias de los DEPENDS

sudo apt-rdepends -s fkiss, esound
o
apt-rdepends --show=fkiss , esound

Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
esound
esound-common
libaudiofile0
libc6
libgcc1
gcc-4.3-base
libesd-alsa0
libasound2
libesd0
libwrap0

--state-follow=STATES
--state-show=STATES

Estas dos opciones son similares a --follow y --show.Ambos tratan con el estado actual de un paquete.Por defecto , el valor de STATES es Unknown, NotInstalled, UnPacked, HalfConfigured, HalfInstalled, ConfigFiles, y Installed.

Estas opciones son útiles , si solo deseamos que busque las dependencias entre los paquetes instalados en el sistema .
Lo podemos llamar así:

apt-rdepends --state-follow=Installed paquete
sudo apt-rdepends --state-follow=Installed esound
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
esound
  Depende: esound-common (>= 0.2.36-3)
  Depende: libaudiofile0 (>= 0.2.3-4)
  Depende: libc6 (>= 2.3.5-1)
  Depende: libesd-alsa0 (>= 0.2.35)
  Depende: libesd0 (>= 0.2.35)
  Depende: libwrap0

esound-common
libaudiofile0
  Depende: libc6 (>= 2.5-5)
libc6
  Depende: libgcc1
libgcc1
  Depende: gcc-4.3-base (= 4.3.1-9)
  Depende: libc6 (>= 2.7-1)
gcc-4.3-base
libesd0
  Depende: esound-common (>= 0.2.36-3)
  Depende: libaudiofile0 (>= 0.2.3-4)
  Depende: libc6 (>= 2.3.5-1)
libwrap0
  Depende: libc6 (>= 2.7-1)

O si solo queremos ver los paquetes instalados en el sistema.

apt-rdepends --state-follow=Installed --state-show=Installed paquete

Fuentes: http://packages.debian.org/lenny/apt-rdepends
man apt-rdepends