martes, 7 de abril de 2009

Script Backup [ tar , md5 , cifs ]

Dejo un pequeño script para backups en un disco Western Digital de 1TB con Ethernet 1GB. Resumen:
  • De Lunes a Sabado realiza backup de los directorios definidos en $DESTINO.
  • Los Domingos añade los directorios definidos en $DIRECTORIO_ADICIONALES.
  • Mantiene los ficheros durante 14 días.Suficiente en este caso.
  • Opcion gzip comentada, haciendo pruebas me interesaba observar el funcionamiento del script.Se recomienda descomentar la linea.
  • Comprueba el montaje del directorio destino, en este ejemplo /usb/copias.
  • Detalles en el fichero log especificado en la variable $REPORTE.
  • Genera suma md5 del fichero y lo imprime en el log.
  • Envia por correo el resultado del backup.
No es nada del otro mundo, pero funciona. Las sugerencias son bienvenidas!

#!/bin/bash
#Backup Script Alberto Permuy Leal
#Version 0.0.1
#Licencia: GPLv2 o cualquiera de sus variantes
#
#
#
#
#Fecha: Abril 2009
#
#
#Definicion de variables
#
#Fichero Reporte Backup
REPORTE=/tmp/reporte-backup-$(date +%d-%m-%y).txt
#
#Variables Tiempo
FECHA=$(date +%d-%m-%y)
DIA_SEMANA=`echo $(date +%w)`
#
#Variables Host/Fichero
HOST=`/bin/hostname `
SISTEMA=`/bin/uname -sr `
#
#
#Variables Generales
DESTINO="/usb/copias"
DIRECTORIOS_BACKUP="/etc /root /var/lib/mysql"
DIRECTORIO_ADICIONALES="/var/log"
DESTINATARIO="user@dominio.com"
ASUNTO="InformeBackup"
#
#
#CABECERA
rm -rf $REPORTE
touch $REPORTE
echo "-----------------------------" > $REPORTE
echo "REPORTE BACKUP " >> $REPORTE
echo "-----------------------------" >> $REPORTE
echo "" >> $REPORTE
echo "Host:"$HOST >> $REPORTE
echo "Sistema:"$SISTEMA >> $REPORTE
echo "" >> $REPORTE
echo "Fecha Copia Seguridad :"$FECHA >> $REPORTE
echo "El destinatario del email es:"$DESTINATARIO >> $REPORTE
###############################################################
# #
#COMIENZO DEL SCRIPT #
# #
###############################################################
if [ -d /usb/copias ]; then
echo "Parece que el disco USB está montado"
else
echo "Montando disco USB"
mount.cifs //192.168.1.200/PROGRAMAS /usb -o username=user,password=pass,rw
echo "Fin montaje"
fi
#
#
case $DIA_SEMANA in
1)
NOMBRE_DIA="lunes"
;;
2)
NOMBRE_DIA="martes"
;;
3) NOMBRE_DIA="miercoles"
;;
4)
NOMBRE_DIA="jueves"
;;
5) NOMBRE_DIA="viernes"
;;
6) NOMBRE_DIA="sabado"
;;
0) NOMBRE_DIA="domingo"

esac

case $DIA_SEMANA in

[1-6])
echo "Hoy es :"$NOMBRE_DIA
echo "Backup iniciado a las: "`date |awk '{ print $4 }'` >> $REPORTE
rm -rf $DESTINO/$NOMBRE_DIA-old.tar
mv $DESTINO/$NOMBRE_DIA.tar $DESTINO/$NOMBRE_DIA-old.tar
tar cvf $DESTINO/$NOMBRE_DIA.tar $DIRECTORIOS_BACKUP
#gzip $DESTINO/$NOMBRE_DIA.tar
echo "El fichero ocupa :"`du -sh $DESTINO/$NOMBRE_DIA.tar|awk '{ print $1 }'` >> $REPORTE
echo "Se ha realizado backup de los directorios:"$DIRECTORIOS_BACKUP >> $REPORTE
echo "La suma MD5 del fichero es:"`md5sum $DESTINO/$NOMBRE_DIA.tar|awk '{ print $1 }'` >> $REPORTE
echo "Esta cifra puede ayudarle a comprobar coherencias en caso de restaurar la copia." >> $REPORTE
if [ -f $DESTINO/$NOMBRE_DIA-old.tar ]; then
echo "El fichero de la semana anterior existe.Parece que todo esta en orden." >> $REPORTE
else
echo "El fichero de la semana anterior no existe." >> $REPORTE
echo "Es probable que todavia no se haya cumplido el ciclo de rotaciones de backups." >> $REPORTE
echo "Si continua recibiendo este mensaje.Contacte con el Administrador." >> $REPORTE
fi
echo "Backup finalizado a las: "`date |awk '{ print $4 }'` >> $REPORTE

;;
0)
echo "Hoy es Domingo.Se han añadido directorios adicionales a la copia de seguridad." >> $REPORTE
echo "Son los siguientes :"$DIRECTORIOS_ADICIONALES >> $REPORTE
echo "Backup iniciado a las: "`date |awk '{ print $4 }'` >> $REPORTE
rm -rf $DESTINO/$NOMBRE_DIA-old.tar
sleep 2
mv $DESTINO/$NOMBRE_DIA.tar $DESTINO/$NOMBRE_DIA-old.tar
sleep 2
tar cvf $DESTINO/$NOMBRE_DIA.tar $DIRECTORIOS_BACKUP $DIRECTORIOS_ADICIONALES
#gzip $DESTINO/$NOMBRE_DIA.tar
echo "El fichero ocupa :"`du -sh $DESTINO/$NOMBRE_DIA.tar|awk '{ print $1 }'` >> $REPORTE
echo "Se ha realizado backup de los directorios:"$DIRECTORIOS_BACKUP >> $REPORTE
echo "La suma MD5 del fichero es:"`md5sum $DESTINO/$NOMBRE_DIA.tar|awk '{ print $1 }'` >> $REPORTE
echo "Esta cifra puede ayudarle a comprobar coherencias en caso de restaurar la copia." >> $REPORTE
if [ -f $DESTINO/$NOMBRE_DIA-old.tar ]; then
echo "El fichero de la semana anterior existe.Parece que todo esta en orden." >> $REPORTE
else
echo "El fichero de la semana anterior no existe." >> $REPORTE
echo "Es probable que todavia no se haya cumplido el ciclo de rotaciones de backups." >> $REPORTE
echo "Si continua leyendo este mensaje.Contacte con el Administrador." >> $REPORTE

fi
echo "Backup finalizado a las: "`date |awk '{ print $4 }'` >> $REPORTE

;;

esac
echo "-----------------------------" >> $REPORTE
echo "SysAdmin - Alberto Permuy Leal" >> $REPORTE
echo "Contact :" >> $REPORTE
echo "Email: email at dominio com" >> $REPORTE
echo "Mobile: +0034 666 666 66 " >> $REPORTE
echo "-----------------------------" >> $REPORTE
mail -s $ASUNTO $DESTINATARIO < $REPORTE

lunes, 6 de abril de 2009

Alternativas a Postfix: ssmtp

Habitualmente , no necesitamos configurar un servidor de correo en un sistema Linux de escritorio. La mayoría de los clientes de email gráficos(GUI), como por ejemplo Mozilla Thunderbird, soportan configuraciones IMAP y POP3 para cuentas de Gmail.Pero, ¿cómo envías un email por el típico /usr/bin/mail o por un shell script? Aplicaciones como Sendmail,Postfix o Exim pueden ser configurados como relayhost de Gmail, pero requieren un mayor tiempo de configuración.

Podemos usar Gmail como "smart host" para enviar todos los mensajes desde un sistema Linux/Unix de escritorio. Necesitas una aplicación simple llamada ssmtp, que acepta el envio de mensajes desde una entrada estándar a buzones de correo específicos desde la línea de comandos , que redirige el mensaje al MTA configurado como relayhost. Los mensajes fallidos se depositan en el fichero dead.letter, dentro directorio home del usuario que envia el mensaje.
Instalar ssmtp
En sistemas Fedora/RedHat/CentOS

[root@localhost] yum install ssmtp

En sistemas Debian GNU/Linux / Ubuntu

[root@localhost] apt-get update && apt-get install ssmtp

Configurar gmail como relayhost:
Editamos el fichero /etc/ssmtp/ssmtp.conf con el siguiente contenido

AuthUser = usuario@gmail.com
AuthPass = passwordgmail
FromLineOverride = YES
mailhub = smtp.gmail.com:587
UserSTARTTLS = YES

También debemos asegurarnos de deshabilitar Sendmail:
En sistemas Fedora/RedHat/CentOS

[root@localhost] service sendmail stop
[root@localhost] chkconfig sendmail stop
[root@localhost] mkdir /root/.backup
[root@localhost] mv /usr/sbin/sendmail /root/.backup
[root@localhost] ln -s /usr/local/ssmtp/sbin/ssmtp /usr/sbin/sendmail

En sistemas Debian GNU/Linux / Ubuntu

[root@localhost] /etc/init.d/sendmail stop
[root@localhost] update-rc.d -f sendmail remove
[root@localhost] mkdir /root/.backup
[root@localhost] mv /usr/sbin/sendmail /root/.backup
[root@localhost] ln -s /usr/local/ssmtp/sbin/ssmtp /usr/sbin/sendmail

Ahora ya podemos usar el comando mail o mailx para enviar mensajes, y probar la configuración con el siguiente ejemplo:

echo "Email Prueba" | mail -s "Probando 1,2,3" usuario@dominio.com

Nota acerca de ssmtp:
ssmtp funciona perfectamente para equipos de escritorio, pero no es un reemplazo a Sendmail, Postfix o Qmail.
Nota del traductor: Añadida la distinción entre Debian/Fedora a la hora de deshabilitar sendmail.El artículo original lo podéis encontrar aquí , escrito por Vivek Gite.


jueves, 2 de abril de 2009

Articulo Squid 2.6 Linux + DVD



Hace más de año que han publicado el artículo de Squid que escribí para Linux + DVD. Dejo la URL, por si interesa. La verdad es que ni me acordaba, pero posteo el enlace por nostalgía de otros tiempos que no fueron mejores, curioso, no?

Squid 2.6 en la PYME por Alberto Permuy Leal

miércoles, 1 de abril de 2009

Genial!

JRMora, genial , como casi siempre. Recomiendo encarecidamente visitar su web http://www.jrmora.com .

martes, 31 de marzo de 2009

Me interesa...

Preparando la ponencia de las VI Xornadas de Software Libre del Concello de Mugardos, que se celebrarán el próximo mes de Junio,he visto una serie de paquetes para Debian GNU/Linux que me interesan mucho. Algunos los conocía y otros, lo cierto es que no. El título de la charla, aún no definitivo(el título) será: Servidor Casero con GNU/Linux: reutilizando PCs con Software Libre. En mi breve camino por las charlas Linuxeras, está será la octava, y la tercera en relación a la temática. La primera fue "Squid: cacheando la red",la segunda "Postfix: Servidores de Correo en GNU/Linux". Es una responsabilidad que asumo y con la que disfruto. Me permite mostrar, desde mi ignorancia, conceptos que he ido aprendiendo y asimilando a lo largo de esto años, y de paso , profundizar en ciertos temas, a veces, olvidados.

Samba: ¿Qué decir que no se haya dicho ya? Recuerdo que no hace mucho, en un post, mencionaba a Andrew Tridgell, desarrollador de rsync y también de Samba. Pues de nuevo, me quitaré el sombrero ante esta eminencia.Al grano. Me interesa para la charla,citar aspectos relativos a la seguridad, como por ejemplo, especificar las interfaces en las que escuchará peticiones Samba, denegación de conexiones por IP o Red de origen, así como especificar opciones relativas al fichero log.

#Fichero: /etc/samba/smb.conf [global]
...
#Solo permitimos acceso a la red de indicada
hosts allow = 192.168.11.
#Especificamos interfaz de red
interfaces = wlan0 192.168.11.0/29
#Denegamos el acceso a los clientes de la red indicada
hosts deny = 192.168.2.0/24
#
#Fichero Log log file = /var/log/samba.log
#Fichero log como maximo 5MB
max log size = 5000

Recomendado además, revisar logrotate , para configurar las rotaciones de este fichero log, ya que por defecto, intentará rotar el fichero /var/log/samba/log.smbd, como podemos ver en el siguiente ejemplo:
root@polinico apermuy#cat /etc/logrotate.d/samba
/var/log/samba/log.smbd {
weekly
missingok
rotate 7
postrotate
invoke-rc.d --quiet samba reload > /dev/null
endscript
compress
notifempty
}

/var/log/samba/log.nmbd {
weekly
missingok
rotate 7
postrotate
[ ! -f /var/run/samba/nmbd.pid ] || kill -HUP `cat /var/run/samba/nmbd.pid`
endscript
compress
notifempty
}


He omitido temas de permisos, ya que considero que para una charla introductoria, citar los distintos tipos de autenticación serán más que suficiente. Muchas veces asiste gente que ni siquiera ha utilizado GNU/Linux!


Me interesa S.M.A.R.T, concretamente el paquete smartmontools.Si lo he utilizado, pero quizá no lo que debería. En la wikipedia tenéis, como suele ser habitual, una definición muy completa de la tecnología.Básicamente podemos definir la tecnología S.M.A.R.T como la capacidad para la detección de fallos en un disco duro. Dos cosillas básicas: obtener información del disco duro y realizar un test basico. Para obterner la información del disco duro.

root@polinico apermuy#smartctl -i /dev/hda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda 7200.8 family
Device Model: ST3300831A
Serial Number: 4NF0NQX1
Firmware Version: 3.06
User Capacity: 300,069,052,416 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 7
ATA Standard is: Exact ATA specification draft version not indicated
Local Time is: Tue Mar 31 23:32:15 2009 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

Como podemos comprobar el soporte SMART está habilitado para este disco duro. A día de hoy, es normal que casi todas las placas base y discos duros tengan soporte SMART.
Para obtener la información del disco duro, en este caso /dev/hda,primero debemos ejecutar el test y después visualizar la información.

root@polinico apermuy#smartctl -t short /dev/hda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Short self-test routine immediately in off-line mode".
Drive command "Execute SMART Short self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 1 minutes for test to complete.
Test will complete after Tue Mar 31 23:38:06 2009

Use smartctl -X to abort test.

Esperaremos dos minutos(sí, ya se que dice Please wait 1 minute...) y visualizaremos el resultado del test.

root@polinico apermuy#smartctl -l selftest -i /dev/hda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF INFORMATION SECTION ===
Model Family: Seagate Barracuda 7200.8 family
Device Model: ST3300831A
Serial Number: 4NF0NQX1
Firmware Version: 3.06
User Capacity: 300,069,052,416 bytes
Device is: In smartctl database [for details use: -P show]
ATA Version is: 7
ATA Standard is: Exact ATA specification draft version not indicated
Local Time is: Tue Mar 31 23:39:54 2009 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled

=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Short offline Completed without error 00% 2583 -

También es posible visualizar el resultado de la "salud del disco", del siguiente modo:

root@polinico apermuy#smartctl -H /dev/hda
smartctl version 5.38 [i686-pc-linux-gnu] Copyright (C) 2002-8 Bruce Allen
Home page is http://smartmontools.sourceforge.net/

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

Como siempre, más, mejor y más detallada información en la web del proyecto smartmontools. Dejo unos links sobre smartmontools que he leído antes de escribir este post. [ Link 1] [ Link 2 ] [ Link3 ]

Por último, y para finalizar, que son las 23:49 y llevo como unas 14 horas delante del PC...
He visto un mini-mini-micro how to para Nagios interesante. Vía RSS de Mancomun, me entero de Listen Project. Y vía SNMP mi cerebro recibe información sobre todas las partes de mi cuerpo : hora de domir!