Cómo saber qué aplicaciones dependen de X paquete

Este breve mini-tuto surge como respuesta a la inquietud de uno de nuestros lectores, Felipe, quien nos escribió preguntando: “¿cómo puedo saber cuáles son las aplicaciones que están haciendo uso de Java?“. Bueno, no creo que haya una forma de saber eso, pero sí hay una forma sencilla de saber qué paquetes (o sea, qué aplicaciones) listadas en los repositorios dependen de los paquetes JAVA. El mismo método puede usarse para cualquier otro paquete, por ejemplo, para saber qué aplicaciones dependen de MONO.


Lo más usual es querer averiguar qué otros paquetes deben estar instalados para que el paquete X funcione bien. Esos paquetes necesarios se llaman dependencias y se pueden averiguar así:

apt-cache depends mipaquete 

También podés ir a Synaptic, buscar el paquete, hacer clic derecho sobre él > Propiedades > Dependencias.

Sin embargo, el objetivo de este post es averiguar, precisamente, lo inverso: qué paquetes tienen como dependencia X paquete. O sea, en este caso conocemos el paquete “madre” y queremos saber qué otros paquetes precisan que ese paquete “madre” esté instalado para funcionar.

Pasemos al ejemplo para entender mejor el asunto. Veamos cómo detectar los paquetes que dependen del paquete openjdk-6-jre. O sea, cómo detectar aquellas aplicaciones listadas en los repositorios, que dependen de JAVA.

Abrí un terminal y escribí:

apt-cache rdepends openjdk-6-jre 

Aparecerá una larga lista de paquetes, entre ellos OpenOffice, FreeMind, OpenCol, etc.

¿Cómo descubrir el paquete “madre” correcto?

OK, hasta ahí todo muy fácil, pero ¿cómo descubrir cuál es el paquete “madre” en base al cual debo buscar? Bueno, esto requiere cierta pericia y análisis previo.

Supongamos que quiero conocer todas las aplicaciones basadas en MONO. En ese caso, yo lo que hice fue buscar las dependencias de una aplicación (GBrainy) que yo sé que usa MONO y, en base a eso, detectar el paquete “madre” y buscar las dependencias inversas. Uff, parece difícil pero es una pavada.

Abrí un terminal y escribí:

apt-cache depends gbrainy

Los resultados son estos:

  Depende: mono-runtime
 |Depende: libc6
 |Depende: libc6.1
  Depende: libc0.1
  Depende: libglib2.0-cil
  Depende: libgtk2.0-0
  Depende: libgtk2.0-cil
  Depende: liblaunchpad-integration1.0-cil
  Depende: libmono-addins-gui0.2-cil
  Depende: libmono-addins0.2-cil
  Depende: libmono-cairo2.0-cil
  Depende: libmono-corlib2.0-cil
  Depende: libmono-posix2.0-cil
  Depende: libmono-system2.0-cil
  Depende: librsvg2-2
  Depende: mono-csharp-shell

Me pareció que mono-runtime podía ser un buen candidato, así que decidí buscar todos los paquetes que dependieran de mono-runtime:

apt-cache rdepends mono-runtime

¡Voilá! Aparecen todos los paquetes que usan MONO.

Para ver un listado completo de todos los paquetes que dependen de algún paquete de MONO, podríamos haber escrito:

apt-cache rdepends mono*

Nota: este método sirve solamente para aquellas aplicaciones que se encuentran listadas en los repositorios APT.

¡Gracias Feli!


4 comentarios

  1.   Felipe Becerra dijo

    Gracias por responder Pablo, y gracias por el post 🙂

  2.   Saito Mordraug dijo

    Pablo eres mi ídolo!

    Excelente post.

  3.   Usemos Linux dijo

    Buenísimo! Gracias x el dato!

  4.   krafty dijo

    Para los que usamos distribuciones grosas………… chiste

    para los que utilizan gestores de paquetes basados en RPM se utiliza este comando

    rpm -qR paquetes

    Ejemplo:

    linux@dhcppc3:~> rpm -qR xmms
    /bin/sh
    /bin/sh
    rpmlib(PayloadFilesHavePrefix) < = 4.0-1
    rpmlib(CompressedFileNames) < = 3.0.4-1
    libICE.so.6
    libSM.so.6
    libX11.so.6
    libXxf86vm.so.1
    libc.so.6
    libc.so.6(GLIBC_2.0)
    libc.so.6(GLIBC_2.1)
    libc.so.6(GLIBC_2.3)
    libc.so.6(GLIBC_2.3.4)
    libc.so.6(GLIBC_2.4)
    libc.so.6(GLIBC_2.7)
    libdl.so.2
    libdl.so.2(GLIBC_2.0)
    libdl.so.2(GLIBC_2.1)
    libgdk-1.2.so.0
    libglib-1.2.so.0
    libgthread-1.2.so.0
    libgtk-1.2.so.0
    libpthread.so.0
    libpthread.so.0(GLIBC_2.0)
    libpthread.so.0(GLIBC_2.1)
    libpthread.so.0(GLIBC_2.3.2)
    libxmms.so.1
    rpmlib(PayloadIsLzma) <= 4.4.6-1

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.