apt vs apt-get vs aptitude: Algunas notas
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ón | apt-get | aptitude | apt |
Instalar paquete | apt-get install app | aptitude install app | apt install app |
Desinstalar un paquete | apt-get remove app | aptitude remove app | apt remove app |
Eliminar un paquete y su configuración | apt-get purge app | aptitude purge app | apt purge app |
Actualizar el repositorio | apt-get up date | aptitude update | apt update |
Actualizar paquetes (sin eliminar ni reinstalar) | apt-get upg rade | aptitude safe-upgrade | apt upgrade (*) |
Actualizar paquetes (eliminando y reinstalando si es necesario) | apt-get dist-upg rade | aptitude full-upgrade | apt full-upgrade |
Eliminar dependencias innecesarias | apt-get autore move | aptitude autoremove | apt autoremove |
Buscar paquetes | apt-cache sear ch app | aptitude search app | apt search app |
Mostrar info de un paquete | apt-cache sh ow app | aptitude show app | apt show app |
Mostrar estado y candidato de instalación | apt-cache poli cy app | aptitude policy app | apt policy app |
Mostrar las fuentes a repositorios | apt-cache policy | aptitude policy | apt policy |
Edición de repositorios fuente | – | – | apt edit-sources |
Listar paquetes por criterio | dpkg --g et-selections > lista.txt | dpkg –get-selections > lista.txt | apt 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.
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:
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:
Yo elegí neovim
para editar, y automáticamente me abre el archivo /etc/apt/sources.list
con este editor:
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:
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
aptitude
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
?:
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!!