Contenido

Introducción

El mantenimiento es una parte importante de cualquier sistema, ya sea un auto, una máquina o un servidor. Si tu servidor corre Debian Linux o alguno de sus derivados como Ubuntu, tenés distintas herramientas para mantenerlo funcionando correctamente.

Las tareas de mantenimiento en servidores Linux son importantes, especialmente por los riesgos de seguridad a los que está expuesto un sistema que no se actualiza ni se mantiene.

La Herramienta Avanzada de Paquetes

Un gestor de paquetes es un conjunto de herramientas para instalar, actualizar y mejorar los programas que el equipo necesita para funcionar. El gestor de paquetes se ocupa de las dependencias y compatibilidades para asegurar el correcto funcionamiento de los programas instalados.

Para lograr eso, un buen gestor de paquetes lleva un registro de todos los programas instalados y las dependencias que cada uno necesita — toda esa información se guarda en una base de datos. La información básica que se almacena incluye:

En Debian ese conjunto de herramientas es APT, que significa Advanced Package Tool. La herramienta base es dpkg; sobre ella se construyen las herramientas más conocidas: apt-get, apt-cache y apt. Esta última no debe confundirse con APT, la Advanced Package Tool. Otras alternativas son: aptitude y, para una interfaz gráfica, Synaptic.

Fuentes

Para funcionar, APT y otras herramientas necesitan una lista de fuentes — otro servidor que actúa como repositorio de todos los paquetes que conforman una distribución Debian. Esa lista se configura en /etc/apt/sources.list. Cuando se invoca APT, lee ese archivo y descarga la lista de paquetes publicados por cada fuente. Entre bastidores, APT descarga Packages.gz o Packages.bz2 para paquetes binarios, o Sources.gz / Sources.bz2 para paquetes de código fuente.

APT mantiene esos archivos actualizados descargando diferencias incrementales ante cualquier cambio en los repositorios.

El formato del archivo sources.list es:

deb http://site.example.com/debian distribución componente1 componente2 componente3
deb-src http://site.example.com/debian distribución componente1 componente2 componente3
Elemento Descripción
deb / deb-src deb es para binarios, deb-src es para código fuente
URL del repositorio La URL del repositorio donde buscar paquetes
Distribución Un nombre específico como bookworm o trixie, o una clase como stable, testing, unstable
Componente main, contrib o non-free

dpkg

dpkg es la herramienta principal de línea de comandos para gestión de paquetes. Se usa normalmente cuando querés instalar un archivo .deb que ya descargaste. Lleva un registro de todo el software instalado, pero no conoce el software disponible para instalar — esto significa que si una dependencia no está instalada, la instalación fallará.

En general conviene usar apt o aptitude para evitar fallas por dependencias. Tanto apt-get como dpkg tienen sus usos: dpkg es más una herramienta de sistema, apt más una herramienta de usuario.

Instalar software con dpkg

Descargá el archivo .deb de una fuente confiable y ejecutá:

dpkg -i htop_2.2.0-2_amd64.deb

Salida:

Selecting previously unselected package htop.
(Reading database ... 37412 files and directories currently installed.)
Preparing to unpack htop_2.2.0-2_amd64.deb ...
Unpacking htop (2.2.0-2) ...
Setting up htop (2.2.0-2) ...
Processing triggers for mime-support (3.64) ...
Processing triggers for man-db (2.9.1-1) ...

Verificar si el programa quedó instalado

dpkg -l | grep htop

Salida:

ii  htop  2.2.0-2  amd64  interactive processes viewer

Desinstalar software con dpkg

dpkg -r htop

Esto desinstala el programa pero deja los archivos de configuración — útil para una reinstalación rápida. Para eliminar todo sin rastros:

dpkg -P htop

Archivo de log de dpkg

Si algo falla, revisá el log en /var/log/dpkg.log.

apt

No hay que confundir apt con APT. apt es la herramienta de línea de comandos para instalar, eliminar y actualizar software en Debian. Es una evolución de apt-get y apt-cache, con las opciones más usadas reunidas en un solo comando más simple. Del man apt:

apt (Advanced Package Tool) is the command-line tool for handling packages.
It provides a commandline interface for the package management of the system.
See also apt-get(8) and apt-cache(8) for more low-level command options.

Instalar un paquete

apt install htop

Desinstalar un paquete

apt remove htop

Esto elimina el programa pero conserva los archivos de configuración. Para eliminar todo:

apt purge htop

Mantener el sistema actualizado

Por razones de seguridad, conviene tener siempre el sistema actualizado. En Debian Stable, las nuevas funcionalidades llegan con actualizaciones mayores — pero los parches de seguridad se publican continuamente.

Actualizar la base de datos de fuentes

apt update

Actualizar los paquetes instalados

apt upgrade

Actualización completa a una nueva versión

apt full-upgrade

Actualiza todos los paquetes y elimina los que generen conflictos. Ver el proceso completo en la sección Actualizar más abajo.

Listar todos los paquetes instalados

apt list --installed

Buscar un paquete

apt search htop

Ver los detalles de un paquete

apt show htop

Editar las fuentes

apt edit-sources

apt-get, apt-cache

apt-get y apt-cache pueden realizar las mismas tareas que apt pero ofrecen opciones más detalladas. Para la mayoría de los usuarios, apt es suficiente. Referencia rápida:

Tarea apt apt-get / apt-cache
Instalar apt install foo apt-get install foo
Eliminar apt remove foo apt-get remove foo
Actualizar índice apt update apt-get update
Actualizar paquetes apt upgrade apt-get upgrade
Actualización completa apt full-upgrade apt-get dist-upgrade
Buscar apt search foo apt-cache search foo
Ver info apt show foo apt-cache show foo
Listar por prefijo apt-cache pkgnames alsa

Buscar todos los paquetes que empiezan con un término

apt-cache pkgnames alsa

aptitude

aptitude es una alternativa más inteligente a apt-get. Su principal ventaja es la capacidad de ofrecer distintas opciones para resolver conflictos durante la instalación de software.

Características:

Modo interactivo

aptitude

Aptitude Interactive

Atajos de teclado:

Equivalencias de comandos

Acción apt aptitude
Instalar foo apt install foo aptitude install foo
Buscar foo apt search foo aptitude search foo
Listar instalados apt list --installed aptitude search ~i
Eliminar foo apt remove foo aptitude remove foo
Ver info del paquete apt show foo aptitude show foo
Descargar fuentes apt source foo aptitude source foo

Actualizar Debian a una nueva versión

La versión estable actual es Debian 12 Bookworm. El proceso a continuación cubre la actualización desde Debian 11 Bullseye a Bookworm. Los mismos pasos aplican a versiones futuras — solo hay que reemplazar los nombres de versión.

Actualizar la versión actual primero

apt update && apt upgrade

Reiniciar si se instaló un nuevo kernel:

reboot

Editar las fuentes

apt edit-sources

Cambiar todas las ocurrencias de bullseye por bookworm.

Actualizar los repositorios

apt update

Actualizar los paquetes

apt upgrade

Seguí las instrucciones. Conservá tus archivos de configuración editados si los modificaste.

Actualización completa a la nueva versión

apt full-upgrade

Reiniciar

reboot

Instalar paquetes desde Backports

Debian Stable es excelente por su estabilidad, pero el software se desactualiza con el tiempo. Cuando necesitás una versión más nueva de un paquete que no está disponible en Stable, los backports son la solución. Según el sitio de backports:

Los backports son paquetes tomados de la próxima versión de Debian (llamada "testing"), ajustados y recompilados para su uso en Debian stable.

Agregar Backports a las fuentes

apt edit-sources

Agregar esta línea:

deb http://deb.debian.org/debian bookworm-backports main

Actualizar los repositorios

apt update

Instalar software desde backports

apt-get -t bookworm-backports install htop

Mantener el sistema limpio

Linux está pensado para vivir mucho tiempo en tu máquina, y cuando algo vive tanto tiempo se acumula basura. Para mantener todo limpio, podés usar autoremove y clean.

apt autoremove elimina paquetes que fueron instalados como dependencias pero ya no son necesarios:

apt autoremove

apt clean limpia la caché local de archivos de paquetes descargados — ya no son necesarios una vez instalados:

apt clean

Si querés eliminar solo los paquetes que ya no se pueden descargar, dejando el resto de la caché intacta:

apt autoclean

Correr autoremove y clean de vez en cuando es un buen hábito, especialmente en servidores donde el espacio en disco importa.

Ver paquetes con actualización disponible

Antes de actualizar a ciegas puede que quieras ver los paquetes marcados para actualización. Un comando te da la lista completa:

apt list --upgradable

Así sabés exactamente qué va a cambiar en el sistema antes de comprometerte con la actualización — útil cuando querés revisar una lista larga o verificar si un paquete específico está entre los candidatos.

Congelar paquetes

Cuando trabajás con aplicaciones puede que quieras mantener una versión específica de un paquete. Fue mi caso con Ruby al usar Middleman — si gestionás esto con las herramientas de paquetes de Debian, tenés hold y unhold para marcar un paquete para que no se actualice.

apt-mark hold ruby

Para ver qué paquetes están actualmente congelados:

apt-mark showhold

Cuando estés listo para dejar que se actualice:

apt-mark unhold ruby

Actualizaciones de seguridad automáticas

La seguridad es cada vez más importante. Realmente querés tener tu sistema con las actualizaciones de seguridad al día aunque no estés trabajando o revisando el servidor todos los días. El paquete unattended-upgrades se encarga de eso automáticamente.

apt install unattended-upgrades
dpkg-reconfigure -pmedium unattended-upgrades

El segundo comando abre un prompt interactivo — respondé que sí para habilitar las actualizaciones automáticas. Por defecto aplica solo actualizaciones de seguridad, dejándote en control de todo lo demás.

Repositorios de terceros

Muchas aplicaciones se desarrollan para Debian o Ubuntu y la mayoría tiene sus propios repositorios. Así se gestionan.

La forma moderna usa un archivo de claves dedicado y una referencia signed-by en la entrada de la fuente — más seguro que el método obsoleto con apt-key. Por ejemplo, para agregar el repositorio oficial de Docker:

# Descargar y guardar la clave de firma
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Agregar el repositorio
echo \
  "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list

# Actualizar e instalar
apt update
apt install docker-ce

Cada repositorio de terceros te dará sus propias instrucciones, pero el patrón es siempre el mismo: guardá la clave en /etc/apt/keyrings/, agregá un archivo .list en /etc/apt/sources.list.d/, y referenciá la clave con signed-by=.

Organizar las fuentes

Invertir tiempo hoy en mantener el sistema ordenado es tiempo que vas a disfrutar en el futuro. En lugar de agregar todo en /etc/apt/sources.list, mantené ese archivo limpio colocando cada fuente adicional en su propio archivo dentro de /etc/apt/sources.list.d/:

ls /etc/apt/sources.list.d/

Cada archivo ahí sigue el mismo formato que sources.list. Mantenerlos separados significa que podés deshabilitar o eliminar un repositorio simplemente borrando o renombrando su archivo — sin necesidad de tocar sources.list.

# Deshabilitar un repo sin borrarlo
mv /etc/apt/sources.list.d/docker.list /etc/apt/sources.list.d/docker.list.disabled

# Volver a habilitarlo
mv /etc/apt/sources.list.d/docker.list.disabled /etc/apt/sources.list.d/docker.list

Referencias

Contribuir

Si querés contribuir podés hacerlo en GitHub