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