apt vs apt-get vs aptitude: Algunas notas

Publicado por Diego Córdoba en

Generalmente los usuarios de distribuciones DEB como Debian, Devuan, Ubuntu, Mint, LMDE, etc, nos preguntamos qué diferencia tiene usar el viejo apt-get, o aptitude, o el nuevo apt, y nos resulta difícil encontrar respuestas acertadas. Aquí algunas notas al respecto.

Conceptos previos

La infraestructura de administración de paquetes en Debian es simple y potente, y ha distinguido al proyecto desde sus inicios. En distros basadas en DEB, el gestor de paquetes estándar es dpkg, y permite instalar, desinstalar, en fin, administrar paquetes .deb en el sistema operativo.

Ahora bien, los paquetes en general cuentan con una serie de dependencias, esto es, paquetes que deben ser instalados previamente para poder instalar y/o usar la aplicación. Estas dependencias se gestionan mediante APT, el Advanced Package Tool, una herramienta global de alto nivel que incluye a dpkg como backend, y que le agrega las funcionalidades de gestión de repositorios externos para dependencias y actualizaciones.

APT soporta diferentes front-ends o aplicaciones que hacen uso de sus servicios (API), y pueden ser para línea de comandos, interfaz gráfica, etc. En sus inicios los usuarios se acostumbraron a utilizar un front-end llamado apt-get. A través de este front-end se pueden instalar paquetes, desinstalar, eliminar, etc. apt-get es parte de una constelación de herramientas que incluye a apt-cache para las búsquedas, por ejemplo.

No todos los usuarios se sienten cómodos con esta herramienta (bastante primitiva en algunos aspectos). Por ello, desde Debian Jessie (v8.0) y Ubuntu 16.04 se puede utilizar el gestor apt en su lugar.

apt consolida las características de apt-get, apt-cache, y otros comandos similares, y simplifica mucho el trabajo con la paquetería DEB mediante opciones y modificadores más amigables.

apt-get sigue siendo soportada por la mayoría de las distros DEB (y por ese motivo muchos usuarios no ven motivación en aprender apt), y disponer de las dos herramientas, tres con aptitude, suele ser motivo de confusión y de consulta por parte de mis alumnos. Aclaro que no es necesaria dicha migración, pero apt facilita algunas cosas, y apt-get sigue siendo muy útil para otras (ver las conclusiones abajo).

Diferencias en funcionalidades

apt no garantiza la compatibilidad hacia atrás con apt-get, pero prácticamente todos los comandos tienen su equivalente.

Por su parte, aptitude gestiona el marcado de paquetes también, y dispone de una interfaz opcional de curses que a muchos les facilita el trabajo en la terminal.

Veamos ahora algunas equivalencias entre comandos de estos tres front-ends. La palabra app hace referencia al nombre de una aplicación en el repositorio de Debian, como por ejemplo libreoffice, firefox y vlc.

Funciónapt-getaptitudeapt
Instalar paqueteapt-get install appaptitude install appapt install app
Desinstalar un paqueteapt-get remove appaptitude remove appapt remove app
Eliminar un paquete y su configuraciónapt-get purge appaptitude purge appapt purge app
Actualizar el repositorioapt-get updateaptitude updateapt update
Actualizar paquetes (sin eliminar ni reinstalar)apt-get upgradeaptitude safe-upgradeapt upgrade (*)
Actualizar paquetes (eliminando y reinstalando si es necesario)apt-get dist-upgradeaptitude full-upgradeapt full-upgrade
Eliminar dependencias innecesariasapt-get autoremoveaptitude autoremoveapt autoremove
Buscar paquetesapt-cache search appaptitude search appapt search app
Mostrar info de un paqueteapt-cache show appaptitude show appapt show app
Mostrar estado y candidato de instalaciónapt-cache policy appaptitude policy appapt policy app
Mostrar las fuentes a repositoriosapt-cache policyaptitude policyapt policy
Edición de repositorios fuenteapt edit-sources
Listar paquetes por criteriodpkg --get-selections > lista.txtdpkg –get-selections > lista.txtapt list
(*) Corresponde a apt-get upgrade --install new-pkgs

Errores de diseño en apt-get

apt corrige algunos errores de la implementación original de apt-get, no bugs, errores de diseño de la aplicación (y sí, tiene un montón de años ya, las cosas mejoran :D). Por ejemplo, además de usar apt-get originalmente para editar paquetes Debian, el sistema utilizaba apt-cache para mostrar la información de los paquetes. El nuevo apt combina ambas funcionalidades en ambos comandos y lo estructura todo mejor. apt provee características de la mayoría de los comandos comunes de apt-get y apt-cache, agregando información muy útil que antes requería opciones adicionales.

Otra mejora se puede ver en el comando apt-get update. Este comando, al igual que aptitude update, solamente reportan si pueden actualizar las listas de paquetes de los repositorios o no, mientras que apt update agrega la cantidad de paquetes que pueden ser actualizados, y sugiere usar apt list --upgradable para listar los actualizables.

apt aptitude apt-get apt-cache debian deb dpkg sources.list
Diferencias entre update de apt-get y apt
apt aptitude apt-get apt-cache debian deb dpkg sources.list
Lista de paquetes: apt list --upgradable

Otra mejora de apt es que muestra la barra de progreso de instalación en las actualizaciones de software, lo que resulta súper útil para saber cuánto resta el proceso completo:

apt aptitude apt-get apt-cache debian deb dpkg sources.list
apt upgrade y la barra de progreso

Esta barra de progreso también aparece cuando eliminamos paquetes con apt remove o apt purge.

Nuevos comandos

La salida del comando apt show está ordenada alfabéticamente y no muestra información poco importante que sí agregaba apt-cache show. El viejo apt-get dist-upgrade es cambiado por el nuevo apt full-upgrade, un nombre más significativo para las tareas que realiza.

Por su parte, los comandos apt list y apt edit-sources son nuevos en la suite apt. apt list permite listar todos los paquetes del repositorio, y con modificadores como --installed o --upgradable podemos ver qué paquetes tenemos instalados, y cuáles son los candidatos para actualización. La lista de paquetes instalados anteriormente podía verse con dpkg -l (igual se mantiene este comando).

La opción edit-sources edita por defecto el archivo /etc/apt/sources.list con el editor predeterminado en línea de comandos, mientras que si tenemos listas de repositorios en archivo dentro de /etc/apt/sources.list.d/ podemos pasar el nombre de la lista para poder editarla directamente de la misma forma.

En mi caso no tenía ningún editor predeterminado en terminal, y es por esto que el comando me da varias opciones:

apt aptitude apt-get apt-cache debian deb dpkg sources.list

Yo elegí neovim para editar, y automáticamente me abre el archivo /etc/apt/sources.list con este editor:

apt aptitude apt-get apt-cache debian deb dpkg sources.list

Y aptitude??

Aptitude agrega algunos otros comandos, y por sobre todo, la principal diferencia que tiene tanto con apt-get como con apt es su interfaz de ncurses al ejecutarlo sin argumentos:

apt aptitude apt-get apt-cache debian deb dpkg sources.list
aptitude

Yo en general suelo instalar por línea de comandos, por lo que esta interfaz no me resulta útil, así que a aptitude también lo he dejado de lado bastante, en favor de apt. No obstante, para quienes no se entiendan del todo con la terminal, aptitude con su interfaz ncurses es bastante intuitiva para listar, instalar, eliminar, etc, cualquier paquete del sistema… para los de la vieja escuela, esta interfaz es similar al viejo front-end dselect que corría sobre apt-get.

Aptitude sin embargo tiene algunas cosas interesantes, más allá de la interfaz ncurses. Aptitude tiene un sistema de resolución de dependencias basada en puntajes que le permite al usuario elegir entre una solución u otra, al estilo de «No quiero esa parte de la solución, pero sí quiero mantener esta otra parte en el siguiente intento de resolución«. Apt busca la mejor forma de solucionar las dependencias en un solo intento, y en general eso me ha servido bien en mi trabajo.

Lista de comandos disponibles

Tanto apt como apt-get y aptitude disponen de una ayuda rápida con el modificador --help que nos da una lista de los comandos más utilizados y opciones que soporta cada uno:

apt-get

apt aptitude apt-get apt-cache debian deb dpkg sources.list

aptitude

apt aptitude apt-get apt-cache debian deb dpkg sources.list

apt

Como puede verse, apt es bastante más simple que los anteriores, y hay que destacar que apt-get es una de las utilidades que incluye apt, apt-cache también tiene su opción --help con sus comandos particulares.

Además, como puede verse, aptitude incluye varias opciones para marcado de paquetes, congelado de versiones y demás. Estas tareas no son tan comunes, y no se incluyen en el comando apt, pero sí pueden trabajarse con el comando apt-mark como una extensión:

Programando shell scripts con APT

En cuanto a la programación de scripts, acabo de leer el man 8 apt y me encuentro con una nota más que interesante para todos los que hacen la pregunta ¿sigo con apt-get? ¿migro a apt?:

man apt

apt es una interfaz de línea de comandos diseñada como una herramienta de usuario final y puede tener diferencias y cambios entre las versiones, principalmente en los valores por defecto para algunas opciones. Esto dificulta la compatibilidad hacia atrás. Como todas las características de apt se encuentran en apt-get y apt-cache, y éstos comandos sí se mantienen más estables en su comportamiento, la recomendación es seguir usando apt-get para programación de scripts.

Conclusiones

He tratado de montar una fuente de referencias para entender grosso modo las diferencias entre el viejo apt-get/apt-cache, el nuevo apt, y el paquete alternativo aptitude.

apt-get y apt-cache poseen una gran cantidad de funcionalidades, un exceso de lo que un usuario promedio puede utilizar. Además, como se mencionó, muchas funcionalidades están dispersas entre apt-get y apt-cache. apt viene a solucionar este problema, y provee las opciones necesarias para gestionar los paquetes y actualizaciones en el sistema DEB.

apt-get no es un paquete desactualizado/deprecated, simplemente es un juego de herramientas de más bajo nivel que sigue y seguirá estando disponible. apt es una abstracción de algunas de estas herramientas, con un CLI más intuitivo y fácil de utilizar.

Personalmente suelo utilizar apt para uso diario en la gestión de paquetes en distros DEB, y apt-get para algunos usos en shell scripts. aptitude por su parte no suelo utilizarlo últimamente, en su lugar uso apt.

Espero que esta guía ayude a aclarar algunas dudas recurrentes de mis alumnos en cuanto a qué herramienta es mejor y por qué existen varias similares. A mis alumnos, y a quien pueda leer este artículo y le ayude!

Somos muchos usuarios de distros DEB, por lo que si quieres compartir esta entrada para que otros se vean beneficiados adelante! A alguien más le puede servir.

Será hasta la próxima!!

Referencias:


¿Preguntas? ¿Comentarios?

Si tenés dudas, o querés dejarnos tus comentarios y consultas, sumate al grupo de Telegram de la comunidad JuncoTIC!
¡Te esperamos!


Diego Córdoba

- Ingeniero en Informática - Mg. Teleinformática - Tesis pendiente - Docente universitario - Investigador