miércoles, 29 de enero de 2014

Script para automatizar la instalación de Webmin

A continuación os propongo un Shell Script que automatiza la instalación de Webmin para Linux en su versión 1.670. Webmin permite, entre otras cosas: gestionar múltiples servicios de un servidor, modificar la configuración del sistema y otras muchas utilidades que a un administrador de sistemas le pueden facilitar el trabajo diario con sus servidores Linux.

La mayor ventaja es que Webmin permite todas estas acciones a través de un navegador web, concretamente con la utilización del puerto 10000.

Pues bien, este código fuente intenta comprobar la existencia de Webmin en el servidor, si existe lo actualiza y si no existe procede a su descarga e instalación. Finalmente, se eliminan los archivos temporales utilizados.

Es interesante observar que los mensajes al usuario que el propio script muestra en pantalla, han sido destacados mediante letra en negrita. Esto se consigue utilizando unos patrones para el formateo del texto emitido con la orden echo. Aquí teneis un enlace para tener más información sobre Colores en Shell Scripts.

#!/bin/bash

#Script que automatiza la instalación de webmin en su versión 1.670
#Creación: 29/01/2014

#Variables para poner letra en negrita
abrenegrita="\033[1m"
cierranegrita="\033[0m"


if [ $LOGNAME != "root" ]
then
    echo -e "$abrenegrita Lo siento, este script requiere ejecutarse con privilegios de root. $cierranegrita"
    read
    exit 1
fi

#Comprobamos si Webmin está instalado
if [ -f /etc/init.d/webmin ]
then
    echo -e "$abrenegrita Webmin se encuentra instalado en su sistema. $cierranegrita"
    version=`cat /etc/webmin/version`   
    echo -e "$abrenegrita Versión actual: $version $cierranegrita "
else
    echo -e "$abrenegrita Webmin no se encuentra instalado en su sistema, procediendo a la instalación... $cierranegrita"
fi


#Comprobamos si está instalado aptitude
which aptitude > /dev/null
if [ $? -ne 0 ]
then
    apt-get install aptitude   
fi

#Instalamos los paquetes previos necesarios para Webmin
aptitude install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions
if [ $? -eq 0 ]
then
    echo -e "$abrenegrita Instalación satisfactoria de paquetes adicionales necesarios para webmin.$cierranegrita"
else
    echo -e "$abrenegrita Error en la instalación de paquetes necesarios para webmin.$cierranegrita"
    echo -e "$abrenegrita El script se cerrará.$cierranegrita"
    read
    exit 1
fi

#Descargamos en la carpeta tmp el paquete deb de instalación de webmin
#para ello creamos una carpeta específica

if [ -d /tmp/descarga_webmin ]
then
    echo -e "$abrenegrita Descargando...$cierranegrita"
else
    mkdir /tmp/descarga_webmin
fi

if [ $? -eq 0 ]
then
    cd /tmp/descarga_webmin
    #nos posicionamos en la nueva carpeta temporal y descargamos webmin
    wget http://prdownloads.sourceforge.net/webadmin/webmin_1.670_all.deb   
else
    echo -e "$abrenegrita Error en la descarga del paquete .deb de webmin.$cierranegrita"
    echo -e "$abrenegrita El script se cerrará.$cierranegrita"
    read
    exit 1
fi

if [ -f /tmp/descarga_webmin/webmin_1.670_all.deb ]
then
    echo -e "$abrenegrita El paquete webmin en su versión 1.670 existe, instalando...$cierranegrita"
    dpkg -i webmin_1.670_all.deb
    if [ $? -eq 0 ]
    then
        echo -e "$abrenegrita Instalación satisfactoria, pulsa una tecla para comprobar...$cierranegrita"
        firefox -new-window https://localhost:10000
    else
        echo -e "$abrenegrita Error al instalar webmin.$cierranegrita"
        echo -e "$abrenegrita El script se cerrará.$cierranegrita"
        read
        exit 1
    fi
else
    echo -e "$abrenegrita El paquete .deb no se encuentra en la ubicación predeterminada.$cierranegrita"
    echo -e "$abrenegrita Imposible instalar webmin.$cierranegrita"
    echo -e "$abrenegrita El script se cerrará.$cierranegrita"
    read
    exit 1
fi

#Eliminamos la carpeta temporal y el archivo descargado
respuesta=""

while [ "$respuesta" == "" ]
do
    read -p "¿Desea eliminar los archivos temporales utilizados en la instalación? (S/N)" respuesta
    case $respuesta in
        s|S) rm -r /tmp/descarga_webmin;break;;   
        n|N) echo "Ok, se mantendrán en /temp/descarga_webmin";break;;
        *)echo "No ha introducido una respuesta válida";;
    esac
done

echo -e "$abrenegrita Fin del Script. $cierranegrita"
read -p "Pulse una tecla."
exit 0

No hay comentarios: