Ir al contenido

Configurar actualizaciones automáticas en Debian/Ubuntu

·3 mins
Linux Sistemas unattended-upgrades Debian Ubuntu actualizaciones automáticas
Jordi Fàbregas
Autor
Jordi Fàbregas
Administrador de Sistemas y Redes. Entusiasta del software libre.
Tabla de contenido

feat

Introducción:
#

Cualquier administrador de sistemas sabe lo tedioso que puede ser la actualización continua de todas las máquinas. Los desarrolladores de Debian lo saben muy bien, por eso han diseñado el paquete unattended-upgrades el cual nos permite configurar el comportamiento de las actualizaciones, pudiendo configurar que repositorios se deben actualizar automáticamente y cuando.

Aunque unattended-upgrades tiene una configuración muy fina para evitar errores, siempre se debe tener precaución y en mi caso, no lo recomendaría para sistemas críticos. Yo lo uso para la mayoría de máquinas virtuales, contenedores y estaciones de trabajo, exceptuando los propios nodos de Proxmox y las máquinas que tienen alguna funcionalidad crítica.

Instalación y configuración básica:
#

El primer paso, obviamente es instalar el paquete unattended-upgrades

sudo apt install unattended-upgrades

Si queremos habilitar la configuración por defecto sin mayores complicaciones, podemos usar la orden

sudo dpkg-reconfigure unattended-upgrades

Y respondiendo “Sí” a la pregunta.

Configuración avanzada
#

Si por el contrario queremos personalizar más la configuración, deberemos editar dos ficheros.

El primero es /etc/apt/apt.conf.d/20auto-upgrades el cual, si no se ha creado automáticamente, tendremos que crear manualmente. Este archivo controla que tareas se deben ejecutar automáticamente y cada cuantos días.

Adjunto un ejemplo de configuración del fichero 20auto-upgrades con los parámetros más relevantes.

// Enable the update/upgrade script (0=disable)
APT::Periodic::Enable "1";

// Do "apt-get update" automatically every n-days (0=disable)
APT::Periodic::Update-Package-Lists "1";

// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
APT::Periodic::Unattended-Upgrade "2";

// Do "apt-get upgrade --download-only" every n-days (0=disable)
APT::Periodic::Download-Upgradeable-Packages "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "7";

El segundo fichero a editar se encuentra en /etc/apt/apt.conf.d/50unattended-upgrades y controla el comportamiento de las actualizaciones, como por ejemplo los orígenes de software, bloquear la actualización de ciertos paquetes, limitar la velocidad de descarga, entre otros.

En este fichero se pueden configurar un gran número de opciones. Lo mejor es hacer una copia de seguridad del fichero y leer la documentación adjunta en el mismo.

A continuación adjunto algunas de las opciones más relevantes con ejemplos

// Configure the software origins
Unattended-Upgrade::Origins-Pattern {
    "${distro_id}ESMApps:${distro_codename}-apps-security",
    "${distro_id}ESM:${distro_codename}-infra-security",
    "${distro_id}:${distro_codename}",
    "${distro_id}:${distro_codename}-security"  
}

// List of packages that will NOT be upgraded:
Unattended-Upgrade::Package-Blacklist {
    "linux-image",
    "linux-headers"
}

// Do automatic removal of unused packages after the upgrade
// (equivalent to apt-get autoremove)
Unattended-Upgrade::Remove-Unused-Dependencies "false"; 

// Automatically reboot *WITHOUT CONFIRMATION* if required
Unattended-Upgrade::Automatic-Reboot "false"; 
// Unattended-Upgrade::Automatic-Reboot-WithUsers "false";
// Unattended-Upgrade::Automatic-Reboot-Time "02:00";

// APT Bandwidth limit in kb/sec
Acquire::http::Dl-Limit "250"; 

// Download and install upgrades only on AC power
Unattended-Upgrade::OnlyOnACPower "true";

Depuración y registros (logs)
#

Finalmente podremos comprobar el correcto funcionamiento del servicio, haciendo una actualización desatendida en modo debug.

unattended-upgrades -d

Además, es importante tener en cuenta que todas las acciones realizadas por unattended-upgrades se registran automáticamente en el fichero de log ubicado en /var/log/unattended-upgrades/. Allí se pueden consultar las actualizaciones aplicadas y cualquier error ocurrido durante el proceso.

Automatización:
#

Lo más simple y funcional, es configurar los dos ficheros manualmente y después se puede hacer algún script parecido a esto para copiarlos en la ubicación correcta.

#!/bin/bash

# Check if the script is being executed as root
if ! [ $(id -u) = 0 ]; then
    # If not, show an error and redirect output to STDERR
    echo -e " ERROR: This script must be executed as root. Exiting..." >&2
    exit 1
fi 

apt-get update -y && apt-get upgrade -y
apt-get install -y unattended-upgrades

cp 20auto-upgrades /etc/apt/apt.conf.d/20auto-upgrades
cp 50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades

chown root:root /etc/apt/apt.conf.d/20auto-upgrades
chown root:root /etc/apt/apt.conf.d/50unattended-upgrades

chmod 644 /etc/apt/apt.conf.d/20auto-upgrades
chmod 644 /etc/apt/apt.conf.d/50unattended-upgrades