Actualizar Debian Wheezy automáticamente mediante unattended-upgrades | Algo de Linux

lunes, 26 de octubre de 2015

Actualizar Debian Wheezy automáticamente mediante unattended-upgrades

En un post de mayo de 2012 os mostré cómo actualizar los paquetes de Debian Squeeze automáticamente utilizando unattended-upgrades, una aplicación para realizar instalaciones automáticas de actualizaciones de seguridad, ideal para mantener actualizado el software de nuestro equipo de forma desatendida.

Como desde la versión que teníamos instalada en Debian Squeeze han cambiado algunas cosillas (por ejemplo: ya no corre como demonio), vamos a dar un repaso de nuevo a esta herramienta.

Instalar unattended-upgrades en Debian Wheezy sigue siendo igual de sencillo, puesto que el paquete se encuentra en los repositorios:
# apt-get install unattended-upgrades
Una vez instalado, echaremos un vistazo al principal fichero de configuración: /etc/apt/apt.conf.d/50unattended-upgrades:
// Automatically upgrade packages from these origin patterns
Unattended-Upgrade::Origins-Pattern {
        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
//      "o=Debian,a=stable";
//      "o=Debian,a=stable-updates";
//      "o=Debian,a=proposed-updates";
        "origin=Debian,archive=stable,label=Debian-Security";
        "origin=Debian,archive=oldstable,label=Debian-Security";
};

// List of packages to not update
Unattended-Upgrade::Package-Blacklist {
//      "vim";
//      "libc6";
//      "libc6-dev";
//      "libc6-i686";
};

// This option allows you to control if on a unclean dpkg exit
// unattended-upgrades will automatically run
//   dpkg --force-confold --configure -a
// The default is true, to ensure updates keep getting installed
//Unattended-Upgrade::AutoFixInterruptedDpkg "false";

// Split the upgrade into the smallest possible chunks so that
// they can be interrupted with SIGUSR1. This makes the upgrade
// a bit slower but it has the benefit that shutdown while a upgrade
// is running is possible (with a small delay)
//Unattended-Upgrade::MinimalSteps "true";

// Install all unattended-upgrades when the machine is shuting down
// instead of doing it in the background while the machine is running
// This will (obviously) make shutdown slower
//Unattended-Upgrade::InstallOnShutdown "true";

// Send email to this address for problems or packages upgrades
// If empty or unset then no email is sent, make sure that you
// have a working mail setup on your system. A package that provides
// 'mailx' must be installed. E.g. "user@example.com"
//Unattended-Upgrade::Mail "root";

// Set this value to "true" to get emails only on errors. Default
// is to always send a mail if Unattended-Upgrade::Mail is set
//Unattended-Upgrade::MailOnlyOnError "true";

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

// Automatically reboot *WITHOUT CONFIRMATION* if a
// the file /var/run/reboot-required is found after the upgrade
//Unattended-Upgrade::Automatic-Reboot "false";

// Use apt bandwidth limit feature, this example limits the download
// speed to 70kb/sec
//Acquire::http::Dl-Limit "70";
Este fichero es muy fácil de entender, sobre todo teniendo en cuenta los comentarios que explican los parámetros. Como podéis comprobar, viene configurado para realizar tan sólo las actualizaciones de Debian-Security, pero podemos modificarlo para que se actualicen de forma desatendida los paquetes de todos nuestros repositorios.

El siguiente bloque del fichero de configuración permite definir los repositorios desde los que queremos actualizar automáticamente los paquetes:
// Automatically upgrade packages from these origin patterns
Unattended-Upgrade::Origins-Pattern {
        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
//      "o=Debian,a=stable";
//      "o=Debian,a=stable-updates";
//      "o=Debian,a=proposed-updates";
        "origin=Debian,archive=stable,label=Debian-Security";
        "origin=Debian,archive=oldstable,label=Debian-Security";
};
En este bloque podemos añadir nuevos patrones que permitan realizar instalaciones desatendidas desde otros repositorios. Para especificar repositorios utilizaremos los siguientes campos:
  • origin (formato corto: o).
  • label (formato corto: l).
  • archive (formato corto: a).
  • suite.
  • component (formato corto: c).
  • site.
Podemos encontrar los valores de cada uno de los campos de nuestros repositorios en los ficheros _Release alojados en /var/lib/apt/lists/.

Por ejemplo, supongamos que deseamos actualizar los paquetes del repositorio de Mozilla. Como ya tenemos configurado este repositorio en nuestra máquina, obtenemos las primeras líneas del siguiente archivo, donde veremos los datos que vamos a necesitar:
# head /var/lib/apt/lists/ldap_mozilla-backports_dists_wheezy-backports_Release
Origin: Debian Mozilla Team
Label: Debian Mozilla Team
Suite: wheezy-backports
Codename: wheezy-backports
Date: Fri, 16 Oct 2015 05:45:52 UTC
Architectures: i386 amd64
Components: iceweasel-release iceweasel-esr
Description: Debian Mozilla team APT archive for wheezy-backports
MD5Sum:
 8fe44fc8853db9b7df27b21016257761 86467 iceweasel-release/binary-i386/Packages
Viendo la salida del comando anterior, podríamos construir un patrón de origen como el siguiente:
        "o=Debian Mozilla Team,suite=wheezy-backports";
Y añadirlo al fichero /etc/apt/apt.conf.d/50unattended-upgrades, para que se actualicen también los paquetes del repositorio de Mozilla de forma desatendida:
// Automatically upgrade packages from these origin patterns
Unattended-Upgrade::Origins-Pattern {
        // Archive or Suite based matching:
        // Note that this will silently match a different release after
        // migration to the specified archive (e.g. testing becomes the
        // new stable).
//      "o=Debian,a=stable";
//      "o=Debian,a=stable-updates";
//      "o=Debian,a=proposed-updates";
        "origin=Debian,archive=stable,label=Debian-Security";
        "origin=Debian,archive=oldstable,label=Debian-Security";
        "o=Debian Mozilla Team,suite=wheezy-backports";
};
Por otra parte, "descomentaremos" las líneas de las opciones que nos interese aplicar.
Por ejemplo, sería interesante aplicar esta opción para solucionar el problema de que en una ejecución anterior de dpkg se hubiera interrumpido el proceso:
Unattended-Upgrade::AutoFixInterruptedDpkg "true";

Una vez hecho ésto, creamos el fichero /etc/apt/apt.conf.d/02periodic con el siguiente contenido:
// 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";

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

// Run the "unattended-upgrade" security upgrade script
// every n-days (0=disabled)
// Requires the package "unattended-upgrades" and will write
// a log in /var/log/unattended-upgrades
APT::Periodic::Unattended-Upgrade "1";

// Do "apt-get autoclean" every n-days (0=disable)
APT::Periodic::AutocleanInterval "7";
Este fichero nos servirá para configurar las actualizaciones periódicas. Veamos lo que significa cada opción con un ejemplo: 
  • APT::Periodic::Enable "1";  Activamos las actualizaciones automáticas poniendo el valor a 1 o las desactivamos poniendo el valor a 0.
  • APT::Periodic::Update-Package-Lists "1"; Hacemos un apt-get update. Si ponemos el valor a 0 lo desactivamos.
  • APT::Periodic::Download-Upgradeable-Packages "1"; Descargamos los paquetes actualizables. Si ponemos el valor a 0 lo desactivamos.
  • APT::Periodic::AutocleanInterval "7"; Hacemos un apt-get autoclean cada 7 días. Si ponemos el valor a 0 lo desactivamos.
  • APT::Periodic::Unattended-Upgrade "1"; Ejecutar el script"unattended-upgrade" cada día. Si ponemos el valor a 0 lo desactivamos.    
unattended-upgrades se ejecuta mediante cron (/etc/cron.daily/apt). No obstante, si queremos, podemos forzar la ejecución manualmente mediante el script unattended-upgrade:
# unattended-upgrade
Además, podemos ejecutar unattended-upgrade en modo debug:
# unattended-upgrade -d
O simular la ejecución de unattended-upgrade sin llegar a actualizar:
# unattended-upgrade -d --dry-run
Publicado por primera vez en http://enavas.blogspot.com.es

No hay comentarios: