Mostrar un árbol de los paquetes instalados que dependen de otro en Debian
De la época que estuve usando Gentoo recuerdo con especial cariño dos cosas: la flexibilidad y la posibilidad de personalización durante el compilado de los parámetros USE, y las herramientas de gestión de paquetes de Portage: el emerge y el equery del Gentoolkit.
El emerge viene a ser una unión de los comandos de Debian dpkg, apt-get, apt-cache y apt-build. Nigún misterio por esa parte…
Sin embargo, el equery que, como su propio nombre indica, se usa para hacer queries a la base de datos de paquetes, resulta muy útil. Por ejemplo, se puede obtener la lista de paquetes que dependen de uno dado (ejemplo copiado de Gentoolkit):
# equery depends pygtk [ Searching for packages depending on pygtk... ] app-office/dia-0.93 dev-python/gnome-python-2.0.0-r1 gnome-extra/gdesklets-core-0.26.2 media-gfx/gimp-2.0.4 x11-libs/vte-0.11.11-r1
También nos permite obtener un árbol de dependencias de un paquete dado, pero en este caso no se trata de los paquetes de los que depende el paquete, sino de sus dependencias:
# equery depgraph cdrtools
Displaying dependencies for app-cdr/cdrtools-2.01_alpha37
`-- app-cdr/cdrtools-2.01_alpha37
`-- sys-libs/glibc-2.3.4.20040808 (virtual/libc)
`-- sys-kernel/linux-headers-2.4.22 (virtual/os-headers)
`-- sys-apps/baselayout-1.10.4
`-- sys-apps/sysvinit-2.85-r1
`-- sys-apps/gawk-3.1.3-r1
`-- sys-apps/util-linux-2.12-r4
`-- sys-apps/sed-4.0.9
`-- sys-libs/ncurses-5.4-r4
`-- sys-apps/pam-login-3.14
`-- sys-libs/pam-0.77-r1
`-- sys-libs/cracklib-2.7-r10
`-- sys-apps/miscfiles-1.3-r1
`-- app-arch/gzip-1.3.5-r1
`-- sys-apps/portage-2.0.50-r10
En Debian, a menudo quiero eliminar un paquete y las dependencias no me lo permiten:
# dpkg -P libxine1 dpkg: dependency problems prevent removal of libxine1: totem-xine depends on libxine1 (>= 1.1.2-5). dpkg: error processing libxine1 (--purge): dependency problems - not removing Errors were encountered while processing: libxine1
Es posible que esté tan convencido de querer eliminar el paquete que me decida incluso a eliminar sus dependencias:
# dpkg -P totem dpkg: dependency problems prevent removal of totem: gnome-desktop-environment depends on totem (>= 1.4.3). dpkg: error processing totem (–purge): dependency problems - not removing Errors were encountered while processing: totem
Pero claro, llegados a este punto, me temo que el gnome-desktop-environment no lo quiero eliminar. De momento, los paquetes ya me los ha dejado marcados como que no los quiero instalados para aprovechar la mínima ocasión para eliminarlos:
# dpkg -l | egrep -v ^ii Desired=Unknown/Install/Remove/Purge/Hold | Status=Not/Installed/Config-files/Unpacked/Failed-config/Half-installed |/ Err?=(none)/Hold/Reinst-required/X=both-problems (Status,Err: uppercase=bad) ||/ Name Version Description +++-================-====================-============================================ pi libxine1 1.1.2+dfsg-4 the xine video/media player library, binary pi totem 2.16.5-3 A simple media player for the Gnome desktop
Como a mí me da manía dejarlos así, pues en este punto haría un “apt-get --reinstall install libxine1 totem” para que vuelvan a estar en estado ii.
La forma elegante de prever y al mismo tiempo tantear si podríamos borrar el paquete sería haber usado el “dpkg -P” con una de las tres opciones que evitan que la acción se haga en realidad:
–no-act | –dry-run | –simulate
Do everything which is supposed to be done, but don’t write any changes.
This is used to see what would happen with the specified action, without
actually modifying anything.
Be sure to give –no-act before the action-parameter, or you might end up
with undesirable results. (e.g. dpkg –purge foo –no-act will first purge
package foo and then try to purge package –no-act, even though you probably
expected it to actually do nothing)
Pero bueno, esta forma de trabajar por tanteo me parece un atraso tras haber visto lo que puede hacer el equery.










