unattended-upgrades: Cómo automatizar las actualizaciones de nuestro linux

Una de las tareas más «pesadas» para el responsable TIC es mantener actualizado y al día tanto los sistemas operativos como las aplicaciones de los equipos del colegio. Si tienes servidores o equipos basados en Debian/Ubuntu (que usen el gestor de paquetes apt) puedes actualizarlos de forma automática y desatendida.

El proceso es sencillo y si además lo combinas con «Apt-cacher» no sobrecargarás la red durante el proceso. Todo depende del servicio «unattended-upgrades«…

[1] Instalación y activación del servicio

sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades

[2] Opciones y configuración básica

El fichero de configuración de las actualizaciones desatendidas o automáticas es el siguiente:

/etc/apt/apt.conf.d/50unattended-upgrades

En Debian y en Ubuntu la configuración estándar de unattended-upgrades solo aplicará las actualizaciones de seguridad. Si quieres modificar este comportamiento deberás editar el archivo y modificar algunos parámetros. En particular, si observas el contenido del fichero, dentro de la sección Unattended-Upgrade::Allowed-Origins { verás algo similar a esto:

Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// Extended Security Maintenance; doesn't necessarily exist for
// every release and this system may not have it installed, but if
// available, the policy for updates is such that unattended-upgrades
// should also install from here by default.
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
// "${distro_id}:${distro_codename}-updates";
// "${distro_id}:${distro_codename}-proposed";
// "${distro_id}:${distro_codename}-backports";
};

Si os fijáis, la totalidad de líneas están comentadas a excepción de las líneas que hacen referencia a las actualizaciones de seguridad. Para añadir más tipos de actualizaciones tan solo tienes que descomentar las líneas correspondientes:

  • «${distro_id}:${distro_codename}-updates»; Al hacerlo se aplicarán actualizaciones no críticas no relacionadas con actualizaciones de seguridad. Activando esta opción se mantendrá el sistema operativo más actualizado y minimizaremos el riesgo que se rompan dependencias.
  • «${distro_id}:${distro_codename}-proposed»; No recomendada para servidores. Si aplicas esta opción se instalarán paquetes que aún no han sido aun aceptados para trabajar en una versión estable.
  • «${distro_id}:${distro_codename}-backports»; No recomendada para servidores que estén en producción. Si la activan es posible que se actualicen paquetes y programas a una versión más actual. Pero con el riesgo de romper dependencias y crear inestabilidad en el sistema.

[3] Añadir repositorios adicionales a las actualizaciones automáticas

Aparte de los repositorios oficiales a mí personalmente me gusta contar en mis equipos con las versiones más recientes de algunos programas de los que previamente he añadido sus orígenes vía «PPA» o «HTML» a la lista de «apt» para que los tenga en cuenta.

Ejecuta el siguiente comando para averiguar los datos de «origen:etiqueta» y crear su entrada personalizada en el archivo de configuración (en mi caso descarto los oficiales de Ubuntu):

sudo apt update
sudo grep -R 'Origin: \|Label: ' /var/lib/apt/lists | grep -v Ubuntu

En mi caso particular la sección me quedaría como sigue:

Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// Extended Security Maintenance; doesn't necessarily exist for
// every release and this system may not have it installed, but if
// available, the policy for updates is such that unattended-upgrades
// should also install from here by default.
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
"${distro_id}:${distro_codename}-updates";
"${distro_id}:${distro_codename}-proposed";
"${distro_id}:${distro_codename}-backports";
"LP-PPA-oibaf-graphics-drivers:Updated Open Graphics Drivers";
"dl.winehq.org:winehq";
"Canonical:Partner archive";
"LP-PPA-openshot.developers:Stable PPA - Official Releases";
"LP-PPA-ubuntuhandbook1-audacity:Audacity Audio Editor and Recorder";
"Google LLC:Google";
"LP-PPA-ubuntuhandbook1-gimp:GIMP Image Editor";
"LP-PPA-obsproject-obs-studio:OBS Studio";
"LP-PPA-libreoffice:LibreOffice Fresh";
"LP-PPA-inkscape.dev-stable:Inkscape Stable";
"LP-PPA-kdenlive-kdenlive-stable:Kdenlive release";
};

[4] Kernels, paquetes no necesarios, reinicios y otras opciones

Si continúan observando el contenido del fichero de configuración verás que la sección Unattended-Upgrade::Package-Blacklist { permite definir los paquetes que no queremos que se actualicen de forma automática. A modo de ejemplo, si descomentamos las siguientes líneas:

Unattended-Upgrade::Package-Blacklist {
// The following matches all packages starting with linux-
"linux-";

// Use $ to explicitely define the end of a package name. Without
// the $, "libc6" would match all of them.
"libc6$";
"libc6-dev$";
"libc6-i686$";
...

No se actualizaría ningún paquete cuyo nombre empiece por «linux-«. Por lo tanto por ejemplo no se actualizará el Kernel. Tampoco se actualizaría ningún paquete cuyo nombre termine por «libc6», «libc6-dev» o «libc6-i686».

Más adelante aparecen (entre otras)las siguientes opciones interesantes:

  • Unattended-Upgrade::DevRelease «false»;  Permite actualizar todo el sistema a la siguiente versión disponible. Salvo que estés muy seguro deberías dejarla en «false». 
  • Unattended-Upgrade::AutoFixInterruptedDpkg «true»;  Déjala en «true» para recuperar el proceso de actualización la próxima vez si este termina con errores o es interrumpido.
  • Unattended-Upgrade::InstallOnShutdown «false»; Si está en «true» las actualizaciones se aplicarán al apagar nuestro servidor u ordenador. Esto hará el apagado del ordenador más lento.
  • Unattended-Upgrade::MinimalSteps «true»; Si es «true» las actualizaciones se dividirán en grupos más pequeños más fáciles de interrumpir si fuera necesario. Más lento pero más seguro.
  • Unattended-Upgrade::InstallOnShutdown «false»; Si es «true» las actualizaciones se aplicarían al apagar el equipo.
  • Unattended-Upgrade::Remove-Unused-Dependencies «false»; Si el valor es true después de actualizar el sistema operativo se desinstalaran de forma automática todas las dependencias que no necesitamos.
  • Unattended-Upgrade::Remove-Unused-Kernel-Packages «true»; Permite desinstalar los Kernel antiguos que no usamos de forma automática.
  • Unattended-Upgrade::Automatic-Reboot «false»; Si el valor es true permite reiniciar el servidor de forma automática en el caso que una actualización lo requiera.
  • Unattended-Upgrade::Automatic-Reboot-Time «02:00»; En conjunción con el parámetro anterior, permite que el reinicio del servidor se haga a la hora que nosotros queramos. Por lo tanto si después de actualizar el ordenador se tiene que reiniciar, no lo hará hasta que sean las 2 de la madrugada.
  • Acquire::http::Dl-Limit «70»; Para limitar el ancho de banda consumido en la actualización. Si fijamos 70, la velocidad de descarga de las actualizaciones será 70kb/segundo.

[5] Configurar la periodicidad de las actualizaciones

Edita el archivo de configuración

/etc/apt/apt.conf.d/20auto-upgrades

y asegúrate de que contenga las siguientes líneas:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";

El significado de cada una de las líneas de forma respectiva es el siguiente:

  • Como mínimo una vez al día se refrescarán los repositorios de nuestra distribución.
  • Una vez al día se intentará actualizar el sistema operativo en función de la configuración que tengamos en el fichero /etc/apt/apt.conf.d/50unattended-upgrades.
  • A diario se comprobarán si existen actualizaciones y se descargarán los paquetes binarios de la actualización. Los paquetes descargados quedarán almacenados en la cache de apt y de este modo cuando realicemos una actualización manual será mucho más rápida.
  • Cada 7 días se borrará la totalidad de paquetes que estén obsoletos en la cache del gestor de paquetes apt. De este modo la cache del gestor de paquetes apt no crecerá desmesuradamente y se mantendrá actualizada.

[6] Comprobación final

Para asegurar que la configuración aplicada es la correcta puedes ejecutar el siguiente comando:

sudo unattended-upgrade -d -v --dry-run

Esto simula el proceso de una actualización automática. Si durante la simulación no se producen errores entonces las actualizaciones automáticas se deberían realizar sin problema.

Nota: Si en vez de simular el comportamiento quieren forzar el proceso de actualización automático tan solo tiene que ejecutar el comando borrando el parámetro –dry-run

Artículo original: https://geekland.eu/actualizaciones-automaticas-en-nuestro-equipo-con-unattended-upgrades/