29.9.06

¿En qué consiste RAID?

RAID consiste en una serie de algoritmos de escritura de bloques de datos (data blocks) en múltiples discos duros. Cada modo o nivel de RAID especifica de qué forma se realizará esta escritura en los discos.
Las dos propiedades que hacen indispensable a RAID son: redundancia y velocidad. Cada nivel de RAID especifica la forma que se aprovecharán estas propiedades, velocidad de lectura/escritura, redundancia de datos o una combinación de ambas propiedades.

NIVELES DE RAID

Los niveles de RAID se nombran con un número entero, siendo los niveles más utilizados: RAID0, RAID1, RAID5 y combinaciones de los mismos (RAID0+1, RAID1+0)

RAID0 (stripping): es el nivel de RAID en que se sacrifica la redundancia en favor de la eficiencia. En este nivel se consiguen unas tasas de transferencia de lectura/escritura ideales calculables con la siguiente fórmula:

eficiencia lectura = velocidad lectura de 1 disco * número de discos
eficiencia escritura = velocidad escritura 1 disco * número de discos

Existe la creencia entre las comunidades de usuarios de en nivel 0 los bits se distribuyen de forma equitativa bit a bit entre los discos. Esto no es cierto, la repartición de datos se realiza bloque a bloque, de forma que dos bloques de datos consecutivos estarán en dos discos duros diferentes que conformen el RAID.
Al no disponer de redundancia, en nivel 0 no se dispone la posibilidad de recuperación de datos.
El mínimo número de discos necesarios para conformar un RAID0 es 2.

RAID1 (mirroring): es probablemente el nivel más utilizado en pequeños servidores. Se provee de redundancia aunque la eficiencia en escritura se ve sacrificada (debido a la redundancia). La eficiencia de este nivel puede calcularse en condiciones ideales con la siguiente fórmula:

eficiencia lectura = velocidad lectura 1 disco
eficiencia escritura = velocidad escritura 1 disco / número de discos

En este nivel cada bloque de datos es copiado en todos los discos de conforman el RAID, de forma que si un disco duro ?se cae?, los datos pueden regenerarse en un nuevo disco a partir de las copias contenidas en los restantes discos que conforman el RAID.
El número mínimo de discos necesarios para conformar un RAID1 es 2.

RAID5 (stripping with parity): es una mezcla entre RAID0 y RAID1 con la salvedad de que los bloques de datos y paridad se distribuyen entre todos los discos, en lugar de mantener imágenes de los mismos. Los cálculos de paridad se efectúan con cada proceso de escritura y son utilizados para regenerar los bloques de datos ante un fallo. Al mismo tiempo los bloques de datos consecutivos se almacenan en discos diferentes con lo que se aumenta al rendimiento tanto en lectura como en escritura. La eficiencia de un RAID5 en condiciones ideales podría calcular con la siguiente fórmula:

eficiencia lectura = velocidad 1 disco * número de discos
eficiencia escritura = velocidad 1 disco * (número de discos - 1)

RAID0+1 y RAID1+0 son modos avanzados que juntan los beneficios de RAID0 y RAID1 realizando ?grupos de RAIDs?. RAID0+1 por ejemplo, es el modo ?stripping? de un grupo de discos creando una unidad lógica mayor que los contenga en un nivel ?mirroring?. A modo de ejemplo, un RAID0+1 de 100GB estaría compuesto por 10 discos de 20GB, donde cada bloque de datos sería escrito en modo RAID0 sobre 5 discos y luego replicado en modo RAID1 sobre el otro RAID0 con los 5 discos restantes. El modo RAID1+0 es el efecto inverso.

26.9.06

Copias de seguridad por e-mail?

Hace unos días alguien me planteó la posibilidad de tener un script en el cron que enviase por correo electrónico los logs del servidor ftp. Sin lugar a dudas rsync es el rey de las copias de seguridad pero ... vamos a hacerlo con un poco de Python:

!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import zipfile
import glob, os, socket
import email
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email.Utils import COMMASPACE, formatdate
from email import Encoders

rutaFicheirosLog="/var/log/vsftdp*"
logsComprimidos="/tmp/ficheiroslog.zip"
correoSuxeito="Logs vsftpd para " + socket.gethostname()
correoCorpo="Documento adxunto comprimido Zip"

def sendMail(to, subject, text, files=[], server="smtp.meuservidor.com"):
assert type(to) == list
assert type(files) == list
fro = "Administrador_Sistemas "

msg = MIMEMultipart()
msg['From'] = fro
msg['To'] = COMMASPACE.join(to)
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = subject

msg.attach( MIMEText(text) )

for file in files:
part = MIMEBase('application', "octect-stream")
part.set_payload( open(file,"rb").read() )
Encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(file))
msg.attach(part)

smtp = smtplib.SMTP(server)
smtp.sendmail(fro, to, msg.as_string())
smtp.close()


def atopaReportes(ruta):
lstReportes = []
lstReportes = glob.glob(ruta)
return lstReportes

if __name__=="__main__":

ficheiroZip = zipfile.ZipFile(logsComprimidos,"w")
listadoLogs = atopaReportes(rutaFicheirosLog)

for ficheiro in listadoLogs:
ficheiroZip.write(ficheiro, os.path.basename(ficheiro), zipfile.ZIP_DEFLATED)

ficheiroZip.close()

sendMail(["jose@meuservidor.com"], correoSuxeito, correoCorpo, ["/tmp/ficheiroslog.zip"])


Es un poco trivial, pero para echarlo a andar por casa viene siendo útil.

11.9.06

Controlando las X-Windows remotamente

Muchos usuarios de Microsoft Windows suelen echarme por cara la facilidad que les supone el controlar máquinas de forma remota utilizando productos como Symantec PC Anywhere o Radlink Remote Administrator.
Casi todo el mundo conoce VNC pero, personalmente no termina de atraerme la gran cantidad de recursos que consume. A continuación vamos a listar un par de opciones válidas para Linux:

OPCION 1: "Compartir el monitor" y lanzar aplicaciones en una máquina remota visualizándolas en el equipo local (muy útil en redes locales). Es decir, podemos tener un servidor X-Window ligero lanzado en un 486 a 66 Mhz, compartir el monitor del 486, conectarnos a una estación más potente y lanzar desde allí los procesos, por ejemplo el Firefox y, por qué no? ... el Quake. (Más de uno se quedaría de piedra viéndolo)
Los pasos para conseguirlo son los siguientes:

1.- Desde una sesión X-Window que tengamos lanzada, abrimos un terminal y "compartimos el monitor" con xhost:

jose@pequerrecho:~$ xhost +192.168.1.32
192.168.1.32 being added to access control list


En este caso permitimos que la ip 192.168.1.32 pueda utilizar nuestro servidor X. Si queremos abrir acceso para todo el mundo:

jose@pequerrecho:~$ xhost +
access control disabled, clients can connect from any host


2.- Nos conectamos a la máquina remota desde la que queremos lanzar las aplicaciones:

jose@pequerrecho:~$ ssh jose@192.168.1.32
password:
jose@maquina2:~$


3.- Indicamos a la máquina remota que queremos usar el servidor X de nuestra máquina:

jose@maquina2:~$ export DISPLAY=192.168.1.32:0.0

4.- Lanzamos la aplicación en el equipo remoto y la visionamos en nuestro pc local:

jose@maquina2:~$ firefox &


OPCION 2: Permitir login gráfico remoto con XDMCP

Esta opción nos permite acceder a nuestro "Desktop Manager" favorito de forma remota, como si estuviésemos en el equipo local. Utilizando GDM es realmente fácil:

1.- Como root lanzamos el configurador de GDM:

jose@pequerrecho:~$ gdmsetup

2.- En la pestaña "Remota", activamos la entrada remota, en principio igual que la entrada local.

3.- Reiniciamos GDM pulsando (Ctrl + Alt + BackSpace)

4.- Desde el equipo cliente iniciamos la sesión remota:

jose@equiporemoto:$ X -query ip_servidor_XDMCP

NOTA DE SEGURIDAD: Hay que tener muy en cuenta, sobre todo si las máquinas están expuestas que hay un número de puertos que debemos asegurar/denegar/filtrar para las ips interesadas. Además, estos servicios deberían correr bajo túneles ssh como medida extra de seguridad.

Spamassassin, no más correo basura en Evolution

Los spammers utilizan cada día técnicas más enrevesadas para saltarse el software anti-spam y los filtros de muchos proveedores de correo se confunden (como Dinio) y dejan pasar demasiada basura (como por ejemplo Terra).
SpamAssassin es una herramienta muy popular y hay paquetes disponibles para la gran mayoría de distribuciones, listos para instalar en un click. En nuestra distribución favorita es realmente fácil:

apt-get install spamassassin


Para los que opten por una instalación manual, SpamAssassin requiere Perl y los siguientes módulos: perl-Time-HiRes, perl-Digest-SHA1, perl-Digest-HMAC y perl-Net-DNS.

La integración de SpamAssassin con Evolution es realmente buena, simplemente debemos de tener el demonio de SpamAssassin corriendo y decirle a Evolution que lo utilice. Para ello, lo primero será configurar SpamAssasin para arranque como demonio editando el fichero de configuración /etc/default/spamassassin y cambiando el valor de ENABLED a 1, ya que por defecto es 0:

# /etc/default/spamassassin
# Duncan Findlay
# WARNING: please read README.spamd before using.
# There may be security risks.
# Change to one to enable spamd
ENABLED=1


Luego iniciamos el demonio:

/etc/init.d/spamassassin start

Por último nos queda indicarle a Evolution que debe usar SpamAssassin (en la mayoría de los casos ya está activado). Debemos de clickar en el menú Editar/Complementos y activar la casilla "Complemento de filtro de spam con SpamAssassin".
A partir de ahora el correo basura irá directamente a la carpeta "Spam" (o Junk según el idioma de instalación). Si se cuela algún correo indeseable o SpamAssassin se equivoca e impide la entrada de correos válidos, podemos entrenarlo marcando o desmarcando como spam los correos que deseemos.

5.9.06

Escritorio 3D en el portátil sin morirse en el intento

Parece ser que están de moda los escritorios 3D con XGL pero claro, no todo el mundo tiene una tarjeta gráfica nVidia o ATI. En mi caso particular la experiencia ha sido sobre un portátil con tarjeta gráfica de Intel y driver i810.
La gran premisa es conseguir un entorno bonito, lleno de efectos que ponga a trabajar a la gráfica pero que el rendimiento de la máquina no caiga. Los pasos para conseguirlo bajo Ubuntu 6.0.6 son los siguientes:

1.- Añadir los repositorios necesarios para descargarse los paquetes:

deb http://xgl.compiz.info/ dapper main aiglx
deb-src http://xgl.compiz.info/ dapper main aiglx


2.- Instalar los módulos de DRI:

sudo apt-get install linux-dri-modules-common
sudo apt-get install linux-dri-modules-`uname -r`


3.- Instalar los siguientes paquetes:

sudo apt-get install xserver-xorg-air-core, compiz, compiz-gnome, gnome-compiz-manager

4.- Enlazar los módulos del antiguo servidor X al nuevo, de lo contrar xorg-air se quejará de que no encuentra los drivers especificados en /etc/X11/xorg.con:

sudo ln -s /usr/lib/xorg/modules/drivers/ /usr/lib/xorg-air/modules/drivers
sudo ln -s /usr/lib/xorg/modules/input/ /usr/lib/xorg-air/modules/input


5.- Editar el fichero de configuración /etc/X11/xorg.conf y tocar los siguientes parámetros:

* En la sección Modules:

Load "dri"
Load "dbe"
Load "glx"
y comentar #Load "GLCore"

* En la sección Device:

Option "XAANoOffscreenPixmaps"

* En ServerLayout:

Option "AIGLX" "true"

* En DRI (probablemente ya esté así):

Section "DRI"
Mode 0666
EndSection

* Crear una sección Extensions:

Section "Extensions"
Option "Composite" "Enable"
EndSection

6.- Tocar la configuración del GDM para que cargue el nuevo servidor X en /etc/gdm/gdm.conf-custom , añadiendo las siguientes líneas al final del fichero:

[servers]
0=aiglx
[server-aiglx]
name=aiglx server
command=/usr/bin/Xorg-air :0
flexible=true


7.- Reiniciar GDM para que cargue la nueva configuración:

sudo /etc/init.d/gdm restart

8.- Tocar el script de arranque de compiz para optimizar la ejecución, en /usr/bin/compiz-start:

#Comentar esta línea: nohup compiz --strict-binding --indirect-rendering --replace dbus csm > /dev/null & exit;

Y añadir esta otra a continuación:

nohup compiz --strict-binding --indirect-rendering --replace gconf decoration wobbly fade minimize cube rotate zoom scale move resize place switcher > /dev/null & exit;

9.- Activar GLDesktop dando con el botón derecho en el icono colocado en la barra de tareas o lanzando la aplicación gnome-compiz-preferences:

jose@pequerrecho:/usr/bin$ gnome-compiz-preferences

10.- Lanzar compiz tecleando:

jose@pequerrecho:/usr/bin$ compiz-start

11.- (Opcional)Tras probar que todo está a nuestro gusto, meter compiz en el arranque de Gnome o crear un lanzador para el comando compiz-start.