lunes, 29 de agosto de 2011

Actualizar Ubuntu automáticamente con APT y CRON [Repost]


Hace unos meses vimos cómo crear un ALIAS para actualizar Ubuntu de forma rápida, pero como administradores de sistemas tenemos muchas tareas que hacer, y GNU/Linux tiene una amplia gama de herramientas para ayudarnos a hacer esas tareas lo más automatizadas posible. Entre ellas tenemos los scripts de Bash y los comandos at y cron. De estas cron y los scripts constituyen el dúo más utilizado entre los administradores. Y es que cron, utilizando scripts o no, en verdad nos hace la vida más cómoda cuando lo sabemos utilizar.

A continuación veremos como programar una tarea en cron para actualizar los paquetes del sistema. El mismo procedimiento podría utilizarse para actualizar la versión completa o para hacer un dist-upgrade cuando hay kernel nuevo para instalar o versiones completamente nuevas de aplicaciones instaladas, haciendo los ajustes necesarios. Además es muy posible que funcione en Fedora con YUM haciendo los ajuses pertinentes. Todo esto lo haremos con APT, el gestor de paquetes más utilizado en Ubuntu y Debian.
Manos a la obra...

Nota: Ya que el daemon cron es ejecutado por root, no es necesario utilizar sudo en los comandos.

Creamos el script de Bash, por ej. en nuestro /home/

fraterneo@rainbow:~$ nano auto-update.sh

#!/bin/bash

# Actualizamos la base de datos de APT, descargamos e instalamos los paquetes, 
# removemos los paquetes innecesarios, limpiamos la caché de APT
# y enviamos los mensajes de salida y errores al archivo auto_update.log
(apt-get update && apt-get upgrade -y && apt-get autoremove && apt-get clean) 2>&1 >> /var/log/auto_update.log

Nota: Ya que en los casos en que hay nuevas versiones del kernel o de aplicaciones, el apt-get upgrade no las instala porque simplemente no son actualizaciones sino nuevas versiones. Para resolver eso podríamos reemplazar nuestro conjunto de comandos en el script por este que hace el trabajo completo (actualizar e instalar los nuevos): 


(apt-get update && apt-get dist-upgrade -y && apt-get autoremove && apt-get clean) 2>&1 >> /var/log/auto_update.log


Le otorgamos permisos de ejecución al script:

fraterneo@rainbow:~$ sudo chmod +x auto-update.sh 

Probamos que funcione correctamente ejecutándolo y verificando la salida en el fichero auto_update.log:

fraterneo@rainbow:~$ sudo ./auto-update.sh
fraterneo@rainbow:~$ tail -f /var/log/auto-update.log
........
........
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Hit http://ppa.launchpad.net lucid/main Packages
Reading package lists...
Reading package lists...
Building dependency tree...
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.


Crear la tarea en cron, para que por ej. ejecute el script todos los días a las 2 de la mañana:

Agregamos la siguiente línea al final del fichero crontab:

fraterneo@rainbow:~$ sudo nano /etc/crontab


0 2 * * * root /home/fraterneo/auto-update.sh 

Y todo listo! Ya tenemos un trabajo menos que realizar manualmente!


Existe además cron-apt, la cual es una herramienta que puede hacer todo esto de forma directa, ya que es una especie de crontab para APT con un fichero de configuración muy similar al crontab normal. Para saber más sobre cron-apt visita este enlace.

1 comentario: