miércoles, 5 de febrero de 2014

Preinstalación automática de Servidor (Shell Script)

El código fuente de este script nos puede ser muy útil para realizar la instalación inicial de los servicios básicos de un Servidor. Entre otros, podremos instalar: Apache, PHP, MySQL, SSH, Servicio de correo electrónico, sistema de alertas por email, Webmin, PHPMyadmin, etc. Todo de una manera muy automática y relativamente cómoda.

Revísalo y cambia lo que necesites, podría tener algún bug. Es código directamente generado en clase de 2ºSMR - 2014 IES Oretania.


#!/bin/bash

#Este script sirve para preparar rápidamente un
#servidor con los servicios básicos más comunes.

#Además, es posible instalar webmin a través de 
#un script previo que se publicó en este mismo blog.
#Otras funciones añadidas permiten instalar phpmyadmin,
#así como habilitar un servidor básico de correo
#electrónico para que el servidor pueda enviar
#alertas por email a su administrador del sistema.

#----------------------------------------------------
#    FUNCIONES
#----------------------------------------------------

function menu()
{

    clear
    echo "*********** MENU SERVICIOS ***********"
    echo "*                     *"
    echo "*  1.- Iniciar asistente instalación *"
    echo "*  2.- Instalar Webmin               *"
    echo "*  3.- Instalar Php MyAdmin          *"
    echo "*  4.- Alertas por email             *"
    echo "*  5.- Salir                         *"
    echo "*                     *"
    echo "**************************************"

}

function asistente()
{

    which tasksel > /dev/null 2>&1
    if [ $? -ne 0 ]
    then   
        echo "Inicializando asistente, un momento por favor..."
        apt-get install -y tasksel #> /dev/null 2>&1
        if [ $? -ne 0 ]
        then
            echo "Error, no puede ejecutarse Tasksel."
            read -p "Pulse una tecla para finalizar."
            exit 1
        fi   
    fi
    tasksel

    #Instalaremos lo que necesitemos a través de esta
    #herramienta.

}

function phpmyadmin()
{

    which phpmyadmin > /dev/null 2>&1
    if [ $? -ne 0 ]
    then   
        echo "Instalando phpmyadmin, un momento por favor..."
        apt-get install -y phpmyadmin #> /dev/null 2>&1
        if [ $? -ne 0 ]
        then
            echo "Error, no puede ejecutarse phpmyadmin."
            read -p "Pulse una tecla para finalizar."
            exit 1
        fi   
    fi
    #Abrimos phpmyadmin para que el usuario empiece a usarlo
    firefox http://localhost/phpmyadmin

}

function webmin()
{
    #Llamamos al script de instalación de webmin
    ./instalawebmin.sh
}

function alertasemail()
{
    which ssmtp > /dev/null 2>&1
    if [ $? -ne 0 ]
    then   
        echo "Instalando ssmtp, un momento por favor..."
        apt-get install -y ssmtp #> /dev/null 2>&1
        if [ $? -ne 0 ]
        then
            echo "Error, no puede ejecutarse ssmtp."
            read -p "Pulse una tecla para finalizar."
            exit 1
        fi   
    fi

   
    read -p "Indica la dirección de destino de las alertas: " email_alertas

    if [ -f /etc/ssmtp/ssmtp.conf ]
    then
        #sacamos copia seguridad
        if [ -f /etc/ssmtp/ssmtp_old.conf ]
        then
            echo "no se sacará copia de ssmtp.conf"
        else
            cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp_old.conf
            read -p "Indica la dirección de email del servidor(sin @gmail.com): " email_servidor
            #Solicitamos contraseña de manera oculta
            echo "Indica la constraseña de la cuenta: "   
            read -s clave
        fi
        #comprobación errores?


        #Volcamos aquí toda la configuración a
        #los dos archivos de configuración de ssmtp
        echo -e "root=$email_servidor@gmail.com \n
mailhub=smtp.gmail.com:587 \n
#rewriteDomain= \n
hostname=$email_servidor \n
AuthUser=$email_servidor@gmail.com \n
AuthPass=$clave \n
FromLineOverride=YES \n
UseSTARTTLS=YES" > /etc/ssmtp/ssmtp.conf
       
    else

        echo "Error al intentar configurar ssmtp: ssmtp.conf."
        exit 1
    fi

    if [ -f /etc/ssmtp/revaliases ]
    then
        #sacamos copia seguridad
        if [ -f /etc/ssmtp/revaliases_old ]
        then
            echo "no se sacará copia de ssmtp.conf"
        else
            cp /etc/ssmtp/revaliases /etc/ssmtp/revaliases_old
        fi
       
        #Modificamos ahora el archivo
        echo "root:$email_servidor@gmail.com:smtp.gmail.com:587" >> /etc/ssmtp/revaliases
        #el nombre de usuario debe de ser uno con privilegios de
        #administrador
        echo "alumno:$email_servidor@gmail.com:smtp.gmail.com:587" >> /etc/ssmtp/revaliases
    else
        echo "Error al intentar configurar ssmtp: revaliases.conf"
        exit 1
    fi
   
    #Enviamos un email de confirmación
    ssmtp $email_alertas < correo.txt

    
    #Donde correo.txt debe tener el formato
    #from: origen del mensaje
    #subject: asunto del mensaje
    #texto del mensaje que se quiere enviar

}




#----------------------------------------------------
#    PROGRAMA PRINCIPAL
#----------------------------------------------------


menu
opcion=""
while [ "$opcion" == "" ]
do
    read -p "Introduce la opción elegida: " opcion
    case $opcion in
        1)asistente;read;;
        2)echo "Instalando Webmin...";webmin;;
        3)echo "Instalando Php MyAdmin";phpmyadmin;;
        4)echo "Alertas por email";alertasemail;;
        5)echo "Finalizando script";exit 0;;
        *)echo "Opción no válida";opcion="";;
    esac
    menu   
    opcion=""
   
done

 El correo electrónico que se ha de generar en el archivo correo.txt que se ha de enviar en la función de "alertasemail" tendría la siguiente forma:

from: servidor que envía la alerta
subject: asunto de la alerta
Este es un correo de confirmación de la correcta instalación y configuración del servicio de alertas por correo electrónico.

No hay comentarios: