Anteriormente demostré cómo listar todos los paquetes instalados por el usuario en Debian y derivados y cómo saber cuáles son las dependencias de un paquete. Veamos ahora cómo saber por qué fue instalado un paquete.

Revisando un servidor Web Debian descubrí (al listar los paquetes instalados con apt) que estaba instalado el paquete xserver-common (archivos correspondientes al servidor gráfico X.org) y quise saber por qué. Es una tarea sencilla si se recurre a la herramienta adecuada.

Si el sistema cuenta con el gestor de paquetes de alto nivel aptitude, es tan simple como ejecutar:

# aptitude why PAQUETE

Pero si el sistema no cuenta con aptitude, se puede recurrir a apt-cache (el cual además entrega información más detallada):

# apt-cache rdepends --installed --recurse PAQUETE

Para el caso:

root@debian:~# apt-cache rdepends --installed --recurse xserver-common
xserver-common
Reverse Depends:
  xvfb
  xnest
  xvfb
  xnest
xvfb
Reverse Depends:
  wkhtmltopdf
xnest
Reverse Depends:
wkhtmltopdf
Reverse Depends:

Se deduce que el "culpable" de la instalación de xserver-common es wkhtmltopdf. Se trata de un paquete que permite convertir documentos HTML a PDF. De gran utilidad para sitios Web que requieren generar comprobantes de pago, facturas, transferencias, etc.

Ahora veamos qué otros paquetes están instalados "por culpa" (como dependencia) de wkhtmltopdf...

Si recurrimos al comando apt-cache depends --installed --recurse wkhtmltopdf la lista puede ser infinita. Esto se debe a que muestra recomendados y sugeridos (además de dependencias reales) recursivamente. Lo más simple es simular una desinstalación con apt-get:

root@debian:~# apt-get -s purge wkhtmltopdf
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  adwaita-icon-theme at-spi2-core dconf-gsettings-backend dconf-service fontconfig glib-networking glib-networking-common
  glib-networking-services gsettings-desktop-schemas gstreamer1.0-plugins-base gtk-update-icon-cache hicolor-icon-theme
  libatk-bridge2.0-0 libatk1.0-0 libatk1.0-data libatspi2.0-0 libavahi-client3 libavahi-common-data libavahi-common3
  libcairo-gobject2 libcairo2 libcdparanoia0 libcolord2 libcups2 libdatrie1 libdconf1 libdouble-conversion1 libegl1-mesa
  libepoxy0 libevdev2 libgbm1 libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libglew2.0 libglu1-mesa libgraphite2-3
  libgstreamer-plugins-base1.0-0 libgstreamer1.0-0 libgtk-3-0 libgtk-3-bin libgtk-3-common libgudev-1.0-0 libharfbuzz0b
  libicu57 libinput-bin libinput10 libjson-glib-1.0-0 libjson-glib-1.0-common liblcms2-2 libmtdev1 libogg0 libopus0
  liborc-0.4-0 libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libproxy1v5 libqt5core5a libqt5dbus5 libqt5gui5
  libqt5network5 libqt5opengl5 libqt5printsupport5 libqt5qml5 libqt5quick5 libqt5sql5 libqt5sql5-sqlite libqt5svg5
  libqt5webkit5 libqt5widgets5 libqt5xmlpatterns5 librest-0.7-0 librsvg2-2 librsvg2-common libsoup-gnome2.4-1 libsoup2.4-1
  libthai-data libthai0 libtheora0 libvisual-0.4-0 libvorbis0a libvorbisenc2 libwacom-bin libwacom-common libwacom2
  libwayland-client0 libwayland-cursor0 libwayland-egl1-mesa libwayland-server0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1
  libxcb-randr0 libxcb-render-util0 libxcb-render0 libxcb-shape0 libxcb-shm0 libxcb-util0 libxcb-xfixes0 libxcb-xinerama0
  libxcb-xkb1 libxcomposite1 libxcursor1 libxi6 libxinerama1 libxkbcommon-x11-0 libxkbcommon0 libxrandr2 libxrender1 libxtst6
  mesa-utils qt5-gtk-platformtheme qttranslations5-l10n
Use 'apt autoremove' to remove them.
The following packages will be REMOVED:
  wkhtmltopdf*
0 upgraded, 0 newly installed, 1 to remove and 4 not upgraded.
Purg wkhtmltopdf [0.12.3.2-3]

Los paquetes en la lista "instalados automáticamente" de la salida de apt-get -s purge corresponden a las dependencias del paquete en cuestión.

Es posible determinar la cantidad de dependencias (más el paquete en cuestión) con el siguiente oneliner:

root@debian:~# apt-get -s purge wkhtmltopdf | grep '^ ' | sed 's/  //g' | sed 's/ /\n/g' | wc -l
114

Compartí este artículo