Los sysadmins GNU/Linux amamos todas las herramientas que automaticen tareas y simplifiquen la administración de los servidores. Este artículo presenta un script que he desarrollado para verificar a diario las actualizaciones de paquetes disponibles en los repositorios y enviar un mail con el resumen.
En entornos corporativos suelen existir aplicaciones o servicios desarrollados a medida que dependen de versiones específicas de paquetes, por lo que no se recomienda, o a veces no es posible, habilitar las actualizaciones de paquetes automáticas. En cambio se debe verificar y aplicar cada actualización de forma manual.
La idea del script, al que he llamado verificar_actualizaciones.sh
, es obtener la lista de actualizaciones utilizando los gestores de paquetes (apt-get si se trata de Debian o yum si se trata de CentOS) y luego enviar un mail utilizando sendmail para notificar cuales son las actualizaciones disponibles.
He desarrollado dos versiones, una para Debian y otra para CentOS, ya que utilizan diferentes gestores de paquetes y las salidas de éstos son muy diferentes.
Versión para Debian
La versión para Debian utiliza la herramienta apt-get
para obtener una lista de actualizaciones disponibles y grep
para parsear la salida.
/root/scripts/verificar_actualizaciones.sh
#!/bin/sh servidor=$(hostname) destinatario="admin@pepe.net" actualizaciones=$(/usr/bin/apt-get -s -q -u upgrade | grep -v '\.\.\.' | grep -v ':' | grep -v 'Inst ' | grep -v 'Conf ') asunto="Actualizaciones disponibles para $servidor" mensaje="Se encuentran disponibles las siguientes actualizaciones para el servidor $servidor:\n\n$actualizaciones" echo "$mensaje" | /usr/bin/mail -s "$asunto" $destinatario
Ejemplo:
Se encuentran disponibles las siguientes actualizaciones para el servidor pepe-debian: libxml2 1 actualizados, 0 se instalarán, 0 para eliminar y 0 no actualizados.
Versión para CentOS
La versión para CentOS utiliza la herramienta yum
para obtener una lista de actualizaciones disponibles y sed
para parsear la salida.
/root/scripts/verificar_actualizaciones.sh
#!/bin/sh servidor=$(hostname) destinatario="admin@pepe.net" actualizaciones=$(/usr/bin/yum check-update | sed '1,/^$/d') total=$(echo "$actualizaciones" | wc -l) asunto="$total actualizaciones disponibles para $servidor" mensaje="Se encuentran disponibles las siguientes actualizaciones para el servidor $servidor: $actualizaciones " echo "$mensaje" | /bin/mail -s "$asunto" $destinatario
Ejemplo:
Se encuentran disponibles las siguientes actualizaciones para el servidor pepe-centos: NetworkManager.x86_64 1:0.8.1-34.el6_3 updates NetworkManager-glib.x86_64 1:0.8.1-34.el6_3 updates NetworkManager-gnome.x86_64 1:0.8.1-34.el6_3 updates bind-libs.x86_64 32:9.8.2-0.10.rc1.el6_3.6 updates bind-utils.x86_64 32:9.8.2-0.10.rc1.el6_3.6 updates firefox.x86_64 10.0.11-1.el6.centos updates google-chrome-stable.x86_64 23.0.1271.95-169798 google-chrome kexec-tools.x86_64 2.0.0-245.el6_3.1 updates libxml2.x86_64 2.7.6-8.el6_3.4 updates libxml2-devel.x86_64 2.7.6-8.el6_3.4 updates libxml2-python.x86_64 2.7.6-8.el6_3.4 updates mysql.x86_64 5.1.66-2.el6_3 updates mysql-libs.x86_64 5.1.66-2.el6_3 updates mysql-server.x86_64 5.1.66-2.el6_3 updates pango.x86_64 1.28.1-7.el6_3 updates pango-devel.x86_64 1.28.1-7.el6_3 updates qemu-img.x86_64 2:0.12.1.2-2.295.el6_3.8 updates qemu-kvm.x86_64 2:0.12.1.2-2.295.el6_3.8 updates qemu-kvm-tools.x86_64 2:0.12.1.2-2.295.el6_3.8 updates unixODBC.x86_64 2.2.14-12.el6_3 updates
Cron
Se debe agregar el siguiente link simbólico en el directorio /etc/cron.daily/
para que el demonio crond lo ejecute automáticamente una vez por día:
ln -s /root/scripts/verificar_actualizaciones.sh /etc/cron.daily/actualizaciones
De esta forma nos llegará un mail por día indicando las actualizaciones disponibles.
Tal vez pueda interesarte