El día de hoy tuve la necesidad instalar nmap en uno de mis servidores Debian Wheezy a fin de correr algunas pruebas simples. Pero para mi asombro, al ejecutar apt-get install nmap, el gestor de paquetes APT (Advanced Package Tool) intentó instalar nada más y nada menos que 73 dependencias. 73 paquetes adicionales ¡para una simple herramienta de redes y seguridad de línea de comandos!

root@wheezy:~# apt-get install nmap
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  fonts-droid fonts-liberation ghostscript gnuplot gnuplot-nox groff gsfonts hicolor-icon-theme
  imagemagick imagemagick-common libblas3 libblas3gf libcairo2 libcupsimage2 libdatrie1 libdjvulibre-text
  libdjvulibre21 libexiv2-12 libgd2-noxpm libgdk-pixbuf2.0-0 libgdk-pixbuf2.0-common libgfortran3 libgs9
  libgs9-common libice6 libijs-0.35 libilmbase6 libjasper1 libjbig0 libjbig2dec0 libjpeg8 liblcms1
  liblcms2-2 liblensfun-data liblensfun0 liblinear-tools liblinear1 liblqr-1-0 liblua5.1-0 libmagickcore5
  libmagickcore5-extra libmagickwand5 libnetpbm10 libopenexr6 libpango1.0-0 libpixman-1-0 librsvg2-2
  librsvg2-common libsm6 libsvm-tools libthai-data libthai0 libtiff4 libwmf0.2-7 libx11-6 libx11-data
  libxau6 libxaw7 libxcb-render0 libxcb-shm0 libxcb1 libxdmcp6 libxext6 libxft2 libxmu6 libxpm4
  libxrender1 libxt6 netpbm poppler-data ufraw-batch x11-common
Suggested packages:
  ghostscript-cups ghostscript-x hpijs gnuplot-doc imagemagick-doc autotrace cups-bsd lpr lprng curl
  enscript ffmpeg gimp grads hp2xx html2ps libwmf-bin mplayer povray radiance sane-utils texlive-base-bin
  transfig xdg-utils exiv2 libgd-tools libjasper-runtime liblcms-utils liblcms2-utils liblinear-dev
  ttf-baekmuk ttf-arphic-gbsn00lp ttf-arphic-bsmi00lp ttf-arphic-gkai00mp ttf-arphic-bkai00mp
  librsvg2-bin poppler-utils fonts-japanese-mincho fonts-ipafont-mincho fonts-japanese-gothic
  fonts-ipafont-gothic fonts-arphic-ukai fonts-arphic-uming fonts-unfonts-core ufraw

Debian tú antes molabas...



Nmap (Network Mapper) es una herramienta para explorar redes y realizar auditorías de seguridad informática. Pero a pesar de ser una de las más importantes herramientas de seguridad, muchos administradores de sistemas y redes la encontramos útil para ejecutar tareas de rutina. Nmap es una herramienta de línea de comandos cuya salida es una lista de objetivos escaneados, con información suplementaria por salida estándar (man nmap para mayor información). Por ello sorprende que quiera instalar dependencias como gnuplot (herramienta para crear gráficos), imagemagick (suite para convertir imágenes), x11-common (seriously?).

Sin embargo, al verificar cuáles son las dependencias de nmap, la herramienta apt-cache reporta que requiere python y unas pocas librerías adicionales:

root@wheezy:~# apt-cache depends nmap
nmap
  Depends: libc6
  Depends: libgcc1
  Depends: liblinear1
  Depends: liblua5.1-0
  Depends: libpcap0.8
  Depends: libpcre3
  Depends: libssl1.0.0
  Depends: libstdc++6
  Depends: python
  Conflicts: <ndiff>
  Conflicts: <ndiff:i386>
  Replaces: <ndiff>
    nmap
  Replaces: <ndiff:i386>
    nmap:i386
  Conflicts: nmap:i386

Entonces, ¿por qué quiere instalar semejante cantidad de paquetes innecesarios? Porque APT está configurado para instalar todos los paquetes recomendados. Es importante saber que en Debian y derivados todo paquete, además de tener dependencias (paquetes necesarios e indispensables para el correcto funcionamiento del paquete en cuestión), pueden tener también conjuntos de paquetes "recomendados", "sugeridos", y otras clasificaciones (paquetes opcionales que proveen funcionalidades adicionales, mejoran el rendimiento, o están relacionados de alguna forma con el paquete en cuestión).

Afortunadamente descubrí una forma de evitar instalar todas estas dependencias innecesarias, gracias a los amigos de Devuan. La solución consiste en indicarle explícitamente al gestor de paquetes APT que no instale paquetes recomendados, sólo sus dependencias fuertes:

root@wheezy:~# apt-get install --no-install-recommends nmap
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
  libblas3 libblas3gf libgfortran3 liblinear1 liblua5.1-0
Suggested packages:
  liblinear-dev
Recommended packages:
  liblinear-tools
The following NEW packages will be installed:
  libblas3 libblas3gf libgfortran3 liblinear1 liblua5.1-0 nmap
0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded.
Need to get 4,584 kB of archives.
After this operation, 17.8 MB of additional disk space will be used.

Mucho mejor.

Esto prueba que cada vez que ejecuten apt-get install, es probable que el gestor instale un montón de basura. Por ello una buena práctica (para mantener el sistema lo más limpio que sea posible) consiste en ejecutar siempre apt-get install --no-install-recommends.

Pero mejor aún, por qué no directamente configurar APT para que éste sea el comportamiento por defecto. Es decir, que nunca instale paquetes recomendados ni sugeridos. Para ello, agregar las siguientes líneas en el archivo de configuración /etc/apt/apt.conf:

APT::Install-Suggests "0";
APT::Install-Recommends "false";

Para más información ver:

man apt
man apt-get
man apt-cache
man nmap

Referencias

Debian Policy Manual - Declaring relationships between packages


Tal vez pueda interesarte


Compartí este artículo