1) Instalamos tasksel - sudo apt-get install tasksel
2) Ejecutamos tasksel - sudo tasksel
3) Instalamos LAMP
4) Instalamos phpmyadmin - sudo apt-get install phpmyadmin
5) Descargamos paquete deb de webmin
6) Instalamos paquete webmin con dpkg
7) Abrimos el navegador con https://localhost:10000 para mostrar que funciona
lunes, 17 de febrero de 2014
Expresiones regulares, grep, awk y sed
Cuando nos encontramos realizando scripts para Linux, son múltiples las ocasiones en las que necesitamos filtrar o buscar un determinado conjunto de caracteres o algún patrón especial. Para ello utilizamos las expresiones regulares combinadas con algunos de los comandos grep, awk o sed.
Para conocer expresiones regulares diferentes, así como su explicación correcta debes acceder al siguiente enlace: Expresiones Regulares en la shell. Ejemplos de uso con grep, awk y sed.
Por otro lado, las expresiones regulares habrán de ser combinadas con el comando grep o egrep para realizar las búsquedas adecuadamente. Por hacer un simil, considero a grep como un perro buscador. En cambio, cuando lo que necesitamos es cambiar o sustituir algún patrón de texto o cadena de caracteres, utilizaremos el comando sed.
Etiquetas:
awk,
egrep,
expresiones regulares,
GNU/Linux,
grep,
patron,
Scripts Linux,
sed
Ejecución descontrolada de procesos - Bombas FORK
Buscando en Internet información relativa a comandos sobre procesos, he encontrado una información muy interesante sobre la Ejecución descontrolada de procesos en un sistema Linux a través del comando fork.
En definitiva, se trata del clásico problema de ejecución de múltiples procesos que solicitan recursos en un sistema hasta que lo dejan KO. Gracias a los datos aportados en la web Planet Ubuntu, podemos aprender mucho más sobre lo vulnerable que es un sistema operativo. Puedes acceder a toda la información en este enlace: Bombas FORK. o pasándote por el Blog de Vicente Navarro: Fork, ulimit y limits.conf que es la fuente original.
Etiquetas:
bombas fork,
fork,
GNU/Linux,
Monitorización de Servidores,
script,
Scripts Linux,
shell,
ulimit
lunes, 10 de febrero de 2014
Filtro básico de entrada con CASE
Aquí os dejo un filtro básico de letras realizado con expresiones y la estructura condicional múltiple case-esac.
#!/bin/bash
#Este script implementa un filtro de datos
#a través de expresiones y la estructura
#condicional múltiple case
dato=""
while [ "$dato" == "" ]
do
read -p "Introduce una letra mayúscula: " dato
case $dato in
[A-Z]) echo "Ok, has introducido la letra $dato";;
[a-z]) echo "Error, has introducido una minúscula";;
[0-9]) echo "Error, has introducido un número";;
*) echo "Error, ¿Qué has introducido?";;
esac
done
#!/bin/bash
#Este script implementa un filtro de datos
#a través de expresiones y la estructura
#condicional múltiple case
dato=""
while [ "$dato" == "" ]
do
read -p "Introduce una letra mayúscula: " dato
case $dato in
[A-Z]) echo "Ok, has introducido la letra $dato";;
[a-z]) echo "Error, has introducido una minúscula";;
[0-9]) echo "Error, has introducido un número";;
*) echo "Error, ¿Qué has introducido?";;
esac
done
Etiquetas:
GNU/Linux,
Monitorización de Servidores,
script,
scripts,
Scripts Linux,
servidores,
shell
viernes, 7 de febrero de 2014
Instalador servicio correo ssmtp para alertas por email
Complementando las entradas de script de instalación y configuración automática de servicios en un servidor, os propongo una posible solución para dotar a un servidor de capacidad para enviar correos electrónicos de alerta a su administrador. Para ello, se realiza la instalación del servicio ssmtp (servicio de correo electrónico simple) y su correspondiente configuración modificando los archivos ssmtp.conf y revaliases, según la configuración que se indique desde teclado.
Para comprobar el correcto funcionamiento del servicio ssmtp, una vez haya sido instalado y configurado desde el script, sólo tendremos que teclear en la consola de comandos algo como esto:
ssmtp dirección_destino@loquesea.com < mensaje.txt
donde mensaje.txt deberá tener un formato adecuado, tal que así:
from: servidor que envia la alerta
subject: asunto de la alerta
# línea en blanco
texto de la alerta, tantas líneas como se necesiten
En este enlace puedes encontrar más información relacionada con el envío y preparación de correos electrónicos a través de consola. Y hacia el final de esta otra entrada podrás encontrar la primera versión de instalación automática del servicio ssmtp y envío de alertas por email.
En próximas entradas de este mismo blog, os mostraremos scripts que construirán mensajes de alerta automáticos en función del servicio/os que puedan haber caído.
#!/bin/bash
#Script que instala y configura servicio
#de correo electrónico ssmtp
#-------------------------------------
# FUNCIONES
#-------------------------------------
function eresroot()
{
if [ "$LOGNAME" != "root" ]
then
echo "Este script debe ser ejecutado con privilegios de root."
exit 1
fi
}
function configura()
{
#1) Saco copia de seguridad
if [ -f /etc/ssmtp/ssmtp.conf.old ]
then
echo "No se sacará copia de seguridad de ssmtp.conf"
else
cp /etc/ssmtp/ssmtp.conf /etc/ssmtp/ssmtp.conf.old
fi
if [ -f /etc/ssmtp/revaliases.old ]
then
echo "No se sacará copia de seguridad de revaliases"
else
cp /etc/ssmtp/revaliases /etc/ssmtp/revaliases.old
fi
#2) Modifico ssmtp.conf
read -p "Introduce el usuario de gmail (sin @gmail.com): " usuario_gmail
read -s -p "Introduce la contraseña: " clave_gmail
echo "root=$usuario_gmail@gmail.com
mailhub=smtp.gmail.com:587
rewriteDomain=
hostname=$usuario_gmail
AuthUser=$usuario_gmail@gmail.com
AuthPass=$clave_gmail
FromLineOverride=YES
UseSTARTTLS=YES " > /etc/ssmtp/ssmtp.conf
#3) Modifico revaliases
echo "root:$usuario_gmail@gmail.com:smtp.gmail.com:587
tu_usuario_linux:$usuario_gmail@gmail.com:smtp.gmail.com:587" >> /etc/ssmtp/revaliases
}
function instala()
{
which ssmtp
if [ $? -ne 0 ]
then
# Hacemos una instalación silenciosa y sin confirmación
sudo apt-get install -y -q=2 ssmtp
if [ $? -eq 0 ]
then
echo "Instalación correcta de ssmtp"
configura
else
echo "Error en la instalación de ssmtp"
exit 1
fi
else
configura
fi
}
#-------------------------------------
# PROGRAMA PRINCIPAL
#-------------------------------------
eresroot
instala
Etiquetas:
asistente,
ciclos formativos,
correos,
email,
GNU/Linux,
monitorización,
Monitorización de Servidores,
script,
scripts,
Scripts Linux,
servidor,
servidores,
shell,
ssmtp
miércoles, 5 de febrero de 2014
Preinstalación automática de Servidor (Shell Script)
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.
Etiquetas:
asistente,
ciclos formativos,
fp,
GNU/Linux,
monitorización,
Monitorización de Servidores,
open source,
respaldo,
script,
scripts,
Scripts Linux,
servidor,
ssmtp
sábado, 1 de febrero de 2014
"Despechejando" un Servidor
Aquí os dejo un video demostrativo de cómo dos técnicos de DELL
despellejan y destripan uno de sus nuevos servidores. Nos cuentan sus
bondades y características más relevantes. Pero lo más importante para
nosotros como Administradores de Sistemas, es comprender cómo se
organizan este tipo de servidores de alta gama.
Más información en este enlace.
Más información en este enlace.
Etiquetas:
blade,
ciclos formativos,
GNU/Linux,
hardware,
Monitorización de Servidores,
montaje,
rack,
servidor,
servidores,
tecnología
jueves, 30 de enero de 2014
Asistente Jarvis (Shell Script)
En este script podemos ver cómo integrar un software de sintetización de voz y hacer que reproduzca lo que deseemos. Se trata de un asistente que emite a través del comando espeak todo aquel texto que se le pase como parámetro. Según vamos escribiendo el asistente lo va emitiendo a través del sistema de audio del equipo. Es un ejercicio sencillo que puede servirnos para practicar el uso de parámetros.
#!/bin/bash
#Asistente Jarvis
clear
#Preconfiguramos el tono, velocidad y demás elementos
#relacionados con el comando espeak, para que la voz de nuestro
#asistente se entienda adecuadamente.
parametros="-v es -s 150 -p45"
echo "ASISTENTE DE CONVERSACIÓN: JARVIS"
mensaje_bienvenida="Bienvenido al asistente de conversación digital: Jarvis"
espeak $parametros "$mensaje_bienvenida" 2>/dev/null
frase="Escribe tus mensajes a continuación"
espeak $parametros "$frase" 2>/dev/null
#Preparamos un bucle infinito que solicitará
#contínuamente la introducción de cualquier texto
#para que sea reproducido. Podremos parar con Ctrl+C
#La salida del programa debería mejorarse.
while [ 1 ]
do
read -p "Texto a emitir (* para salir): " texto
if [ "$texto" == "*" ]
then
break
else
espeak $parametros "$texto" 2>/dev/null
fi
done
echo "Gracias por utilizar este software"
espeak $parametros "Gracias por utilizar este software"
exit 0
Etiquetas:
asistente,
ciclos formativos,
fp,
GNU/Linux,
jarvis,
Linux,
pc,
script,
scripts,
Scripts Linux,
shell,
sintetización de voz,
sintetizador,
speak,
tecnología
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
Etiquetas:
ciclos formativos,
deb,
dpkg,
GNU/Linux,
Linux,
Monitorización de Servidores,
open source,
script,
scripts,
Scripts Linux,
shell,
webmin
Suscribirse a:
Entradas (Atom)