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*
Gracias por responder Pablo, y gracias por el post 🙂
Pablo eres mi ídolo!
Excelente post.
Buenísimo! Gracias x el dato!
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