apt vs aptitude

4 minute read


Tanto apt (apt-get, apt-cache) como aptitude son comandos para la administración de paquetes desde la consola de texto en Debian y distribuciones derivadas como Ubuntu.  De hecho, ambos consultan los repositorios según el archivo /etc/apt/sources.list y usan los paquetes obtenidos desde dichos repositorios. Pero aún mucha gente sigue usando apt-get para instalar los paquetes siendo aptitude la mejor opción.  Inclusive, si buscamos en tutoriales o manuales en Internet podremos fijarnos que la mayoría de ellos hacen mención casi exclusivamente a apt-get y no a aptitude.

Quizás esto último se deba a que apt-get fue primero y la gente se acostumbró a usarlo. Por ejemplo, el otro día hablando con un amigo le comento que se cambie a aptitude ya que es mejor que apt-get, y la respuesta que me dio fue algo como: “mmm…yo no tengo problemas con apt. Además, si apt-get aún sirve para qué usar aptitude?”. Bien, veamos el por qué :

Las dependencias

La respuesta es que aptitude tiene mejor resolución de dependencias de paquetes que apt-get.  De hecho al momento de instalar un paquete que genera conflictos, aptitude sugiere soluciones a esos conflictos, mientras que apt-get no. Por otro lado,  apt-get no remueve las dependencias de paquetes no utilizados mientras que aptitude si.  En el siguiente ejemplo instalaremos y desinstalaremos el paquete junior-games-card con apt-get y luego con aptitude para demostrarlo:

apt

Empezamos a instalar con apt-get:

arthur:~# apt-get install junior-games-card  

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
 ace-of-penguins blt cdd-common junior-config junior-tasks pysol python-tk python2.4
 python2.4-minimal tcl8.4 tk8.4
Suggested packages:  
  blt-demo cdd-doc pysol-cardsets python-tk-dbg tix python2.4-doc python-profiler
  binfmt-support tclreadline
The following NEW packages will be installed:
  ace-of-penguins blt cdd-common junior-config junior-games-card junior-tasks pysol python-tk
  python2.4 python2.4-minimal tcl8.4 tk8.4**
0 upgraded, 12 newly installed, 0 to remove and 23 not upgraded.
Need to get 9363kB of archives.
  
After this operation, 30.9MB of additional disk space will be used.
Do you want to continue [Y/n]?

Ahora vamos a desinstalar:

arthur:~# apt-get remove junior-games-card
  
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages were automatically installed and are no longer required:
  pysol python2.4-minimal python2.4 junior-tasks blt python-tk junior-config tcl8.4 tk8.4
  ace-of-penguins cdd-common
Use 'apt-get autoremove' to remove them.
The following packages will be REMOVED:
  junior-games-card**
0 upgraded, 0 newly installed, 1 to remove and 23 not upgraded.
After this operation, 61.4kB disk space will be freed.
Do you want to continue [Y/n]

Malo, malo…solo desinstala junior-games-card y no sus dependencias (cosa que debería hacer porque ningún otro paquete las están utilizando).  Coloqué en rojo el mensaje de advertencia de apt-get  que indica que si se quiere eliminar las dependencias hay que usar la opción ‘autoremove’, la cual estoy casi que seguro que nadie usa o conoce de su existencia.

aptitude

Ahora el turno de aptitude:

arthur:~# aptitude install junior-games-card 
  
Reading package lists... Done  
Building dependency tree  
Reading state information... Done  
Reading extended state information  
Initializing package states... Done  
Reading task descriptions... Done  
The following NEW packages will be installed:
  ace-of-penguins{a} blt{a} cdd-common{a} junior-config{a} junior-games-card junior-tasks{a}
  pysol{a} python-tk{a} python2.4 {a} python2.4-minimal{a} tcl8.4{a} tk8.4{a}** 
0 packages upgraded, 12 newly installed, 0 to remove and 23 not upgraded.
Need to get 9363kB of archives. After unpacking 30.9MB will be used.
Do you want to continue? [Y/n/?]

Ahora vamos a desinstalar:

arthur:~# aptitude remove junior-games-card 
  
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
Reading task descriptions... Done
The following packages will be REMOVED:
  ace-of-penguins{u} blt{u} cdd-common{u} junior-config{u} junior-games-card junior-tasks{u}
  pysol{u} python-tk{u} python2.4{u} python2.4-minimal{u} tcl8.4{u} tk8.4{u}
0 packages upgraded, 0 newly installed, 12 to remove and 23 not upgraded.
Need to get 0B of archives. After unpacking 30.9MB will be freed.
Do you want to continue? [Y/n/?]

Queda en evidencia cual es más eficiente: aptitude.

Usando apt vs. aptitude

Pero no solamente tenemos el problema de las dependencias. Resulta que usar apt es más “complejo” que usar aptitude, ya que hay que recordar las combinaciones de órdenes y opciones, mientras que con aptitude solo hay que recordar las opciones. Veamos esto:

apt

Orden Opción Nombre de paquete Descripción
apt-get update Obtiene la lista de paquetes desde el repositorio
apt-get install junior-games-card Instala el paquete junior-games-card
apt-cache search junior-games-card Busca el paquete junior-games-card
apt-get upgrade junior-games-card Actualiza el paquete junior-games-card
apt-cache show junior-games-card Muestra la descripción del paquete junior-games-card
apt-get remove junior-games-card Desinstala el paquete junior-games-card , pero deja sus archivos de configuración
apt-get remove --purge junior-games-card Desinstala el paquete junior-games-card junto con sus archivos de configuración

aptitude

Orden Opción Nombre de paquete Descripción
aptitude update Obtiene la lista de paquetes desde el repositorio
install junior-games-card Instala el paquete junior-games-card
search junior-games-card Busca el paquete junior-games-card
upgrade junior-games-card Actualiza el paquete junior-games-card
show junior-games-card Muestra la descripción del paquete junior-games-card
remove junior-games-card Desinstala el paquetejunior-games-card , pero deja sus archivos de configuración
purge junior-games-card Desinstala el paquete junior-games-card junto con sus archivos de configuración

Aquí vemos que aptitude es más fácil de aprender y usar !

¿Quieres más?

Aun no estás convencido de que aptitude es lo mejor que puedes usar, mira de lo que te pierdes si no utilizas aptitude :

  • Ofrece acceso a todas las versiones de los paquetes
  • Lleva un registro de las acciones que ejecuta en la bitácora /var/log/aptitude
  • Muestra la salida de las búsquedas de paquetes más ordenada y útil que apt-cache  (además que solo busca en los nombre de paquetes)
  • Puede instalar de forma automática paquetes recomendados (ver opción -r en el manual)
  • Puede instalar tareas predefinidas (ver man tasksel)

Referencias:

Leave a Comment