mail-tester

 

Para todos los que trabajáis con servidores de correo electrónico, hoy os traemos una utilidad que os permitirá comprobar si los correos que enviáis van a ser bien recibidos por los destinatarios.

Se trata de Mail-Tester, una web donde podremos ver la calidad de los correos que estamos enviando. Al acceder nos indicará una dirección temporal donde debemos enviar un correo, y una vez recibido, realiza una serie de pruebas para comprobar si sufrimos algunos de los problemas más comunes (autenticación, listas negras, firma electrónica, etc), y nos dará una puntuación sobre 10 con el resultado.

Aunque se hecha en falta una batería de pruebas más amplia, es una herramienta indispensable para hacer una prueba rápida cuando tenemos algún problema con nuestro correo electrónico, y sobre todo, es tan sencilla de utilizar, que podemos indicarsela a nuestros clientes para que la utilicen sin importar su nivel de conocimientos.

Esperamos que os sea de utilidad


2. Introdución y Objetivos

  • Fluxbox http://fluxbox.sourceforge.net/ es un window manager, básicamente un programa que corre sobre las XFree86 (o sus alternativas compatibles) permitiendo manejar las ventanas de las aplicaciones. Fluxbox está basado en Blackbox 0.6.1 http://blackboxwm.sf.net/ y aunque tiene muchas similitudes con él, también son muchas las diferencias. Como podemos leer en su página web algunas de sus más importantes características son:
    - pestañas configurables
    - barra de iconos (para minimizar/iconificar ventanas)
    - movimiento por los escritorios con la rueda del ratón
    - títulos de las ventanas configurables
    - soporte para gnome y kde
    - combinaciones de teclas configurables
    - maximizar sobre el slit
    - configuración del orden de las dockapps del slit
    - Disponibilidad de canal alpha (transparencias) en la versión en desarrollo
  • El objetivo seria que el usuario de Linux, se familiarice con fluxbox y conociese este gran Window Manager tan desconocido para algunos y tan fascinante para otros conocedores del mismo.

3. Instalación

Fluxbox, se puede instalar compilando las fuentes, o instalando el paquete precompilado.


3.1. Compilación

VERSIÓN en DESARROLLO

Si queremos compilar nosotros el código fuente nos bajamos la última versión desde http://fluxbox.sourceforge.net/version-0.9.php o coger el código fuente directamente del CVS, véase http://fluxbox.org/download.php#cvs.

Primero debemos instalar los siguientes paquetes de desarrollo: make, gcc, g++, cvs, libc6-dev, xlibs-dev.

  • Para descargar el código fuente del CVS:

Bash$ cvs -d:pserver:anonymous@cvs.fluxbox.sourceforge.net:/cvsroot/fluxbox login

Presionamos [ Enter ] donde ponga password:

Bash$ cvs -z3 -d:pserver:anonymous@cvs.fluxbox.sourceforge.net:/cvsroot/fluxbox

  • Bajando el código comprimido de la web.

Si habíamos bajado la última versión la descomprimimos mediante:

Bash$ tar jvxf fluxbox-0.9.x.tar.bz2

  • Configuración y Compilación

En caso de que la hayamos bajado del cvs no será necesario. A continuación compilamos:

Bash$ ./configure

Bash$ make

Bash# make install

Nota: Para mas informacion véase los README y INSTALL.


3.2. Instalando FLUXBOX precompilado.

  • Versión estable

La versión estable viene en muchas distribuciones, entre ellas Debian y en todas sus ramas.

En todas la versión disponible es la 0.1.14.

Para instalar la versión estable simplemente lo instalamos por APT-GET, de la sigiuente manera.

Bash# apt-get install fluxbox

En la página web de Fluxbox podemos encotrar paquetes para la mayoría de distribuciones de Linux y las versiones de BSD.

  • Versión en Desarrollo

Si deseamos instalar la versión en desarrollo por medio de un paquete precompilado, podemos descargarlo de http://screaming-fist.net/diary/fluxbox/ para la arquitectura x86.

O bien descargarlo por medio de APT-GET introduciendo

deb http://people.debian.org/~dopey/fluxbox ./

en /etc/apt/sources.list

Después de Salvar y salir, hacemos

Bash# apt-get update

Bash# apt-cache search fluxbox ( aqui nos saldrán todos los paquetes relacionados con fluxbox, nos fijamos en la versión del paquete que sea 0.9.x y instalamos ese paquete.)


4. ARRANCANDO FLUXBOX

Si usamos gdm deberemos crear un script como el siguiente:

# ------------- corta aquí --------------------
#!/bin/sh
#
# /etc/gdm/Sessions/fluxbox
#
# global fluxbox session file -- used by gdm

exec /etc/X11/Xsession /usr/bin/fluxbox

# ------------- corta aquí --------------------

en /etc/gdm/Sessions/fluxbox sustituyendo /usr/bin/fluxbox por el directorio donde resida el binario. Si hemos compilado Fluxbox, serguramente será /usr/local/bin/fluxbox.

Si por el contrario usamos kdm: editaremos nuestro kdmrc, probablemente /etc/kde3/kdm/kdmrc y en "SessionTypes=" añadiremos fluxbox a la lista. Si somos usuarios de Debian, además tendremos que eliminar la línea generate-sessiontypes de /etc/kde3/kdm/kdm.options para que no nos regenere el kdmrc.

Quien use xdm o no use un desktop manager puede crearse un .xsession o un .xinitrc en su home. Existe una pequeña diferencia entre ellos. El .xinitrc es leído por xinit cuando arranca las X, si usamos xdm lo ignorará, así que deberemos usar el .xsession. Un ejemplo es el siguiente:

# ------------- corta aquí --------------------
#!/bin/sh
# ~/.xsession
# bencer@bencer.org . 17.12.03

# definimos el fondo de pantalla
fbsetbg -c images/wallpapers/magnaflux.jpg

# definimos nuestro mapa del teclado
xmodmap /home/bencer/.xmodmap

# root-tail es un programa que nos muestra sobre el fondo del escritorio cualquier archivo, muy útil para ir vigilando los logs
root-tail -g 150x10+160+030 -i 1 /var/log/messages -font snap -color grey &

# lanzamos algunas aplicaciones
gkrellm &
xpmumon & 
xmms &

# window manager
exec fluxbox

# ------------- corta aquí --------------------

5. MANEJANDO FLUXBOX

El manejo de este window manager es muy sencillo. En un principio no existen los iconos, aunque como veremos más adelante, es posible añadirlos con programas auxiliares.  

Accedemos al menú de aplicaciones haciendo 'clack' (botón derecho) sobre el fondo, entonces emerge el menú de aplicaciones genérico del sistema. Si hacemos click con el botón central nos muestra el menú de escritorios, donde visualizamos los escritorios activos,  podiendo eliminar y agregar nuevos.

La barra inferior se llama 'toolbar', muestra el escritorio, las aplicaciones y un reloj. Haciendo 'clack' sobre el nombre del escritorio o el reloj accedemos a un menú de configuración de la 'toolbar'. Si lo hacemos sobre las aplicaciones obtenemos un menú contextual sobre el manejo de la ventana de la aplicación.

La 'slit' es una zona del escritorio donde residirán los dockapps. Los dockapps son unas pequeñas aplicaciones de funciones muy diversas como monitorizar información ... podemos encontrar una recopilación en http://www.dockapps.or g/ o http://www.houseware.org/dockapps/ [revisar esas urls].

A partir de la versión 0.9.x las pestañas (tabs) vienen integradas en el 'titlebar' de la ventana. Para agrupar dos ventanas, hacemos click con el botón del medio en el 'titlebar' de una ventana y la arrastramos hacia la que queremos agrupar. Para desagrupar, simplemente la operación inversa. Con un 'clack' sobre el 'titlebar' obtenemos el menú contextual de la aplicación.

6. Como funcionan los ficheros de configuración de Fluxbox.

En el home de nuestro usuarios encontraremos el directorio .fluxbox, el cual tiene en su interior los distintos archivos de configuración.

Comentamos cada uno de ellos para que tengamos una idea de hasta que punto es moldeable Fluxbox.


6.1. .fluxbox/menu

Este archivo, sirve para tener en el menu que nos aparece pulsando el botón derecho del ratón, nuestras aplicaciones favoritasy ordenarlas a nuestro gusto con seciones y subsecciones.

El archivo a editar es el .fluxbox/menu de la home de nuestro usuario.

begin (Fluxbox) 
     exec    (xterm) {xterm} 
     exec (Eterm) {Eterm -D 4 -T Sistema -x --buttonbar false -O --scrollbar false --shade 60 -f yellow} 
     exec (Sylpheed) {sylpheed} 
     exec (Run) {fbrun} 

#Tambien se pueden hacer subsecciones 

submenu (Terminals) 
     exec (Eterm2) {Eterm -D 4 -T Sistema -x --buttonbar false -O --scrollbar false --shade 20 --tint blue -g x10+0+430 --no-cursor} 
     exec (Eterm3) {Eterm --buttonbar false --scrollbar false -O --shade 50 --tint green -x -g x25+160+160} 
     exec (xterm) {xterm} 
     exec (konsole) {konsole} 
end

Para configurar el menú tenemos una aplicación llamada ‘fluxmenu‘.


6.2. .fluxbox/keys

Este archivo nos permite configurar combinaciones de teclas para realizar las más diversas acciones. Veámos un ejemplo comentado:

# ~/.fluxbox/keys . combinaciones de teclas para fluxbox

# la tecla Mod1 es el Alt

# cambio de escritorios
Mod1 F1 :Workspace 1
Mod1 F2 :Workspace 2
Mod1 F3 :Workspace 3
Mod1 F4 :Workspace 4
Mod1 F5 :Workspace 5

#movimientos entre las pestañas. muy útil para grupos de ventanas.
Control right :NextTab
Control left :PrevTab

# cerrar la ventana
Control F4 :Close

# maximizar la ventana
Mod1 m :MaximizeWindow

# eliminar las decoraciones de la ventana
Mod1 n :ToggleDecor

# diversas aplicaciones
Mod1 f :ExecCommand mozilla-firebird
Mod1 a :ExecCommand aumix
Mod1 c :ExecCommand aterm -fn sans -fg grey -tr -trsb -shading 40%
Mod1 x :ExecCommand fbrun
Mod1 s :ExecCommand sylpheed
Mod1 d :ExecCommand dillo

# tomar screenshots
Control s :ExecCommand import -window root -quality 85 screenshot.png

# si tenemos un teclado "multimedia" podemos usar opciones como:

# subir y bajar el volumen
None XF86AudioLowerVolume :ExecCommand aumix -v -10
None XF86AudioRaiseVolume :ExecCommand aumix -v +10

# control del xmms
None XF86AudioPlay :ExecCommand xmms -t
None XF86AudioStop :ExecCommand xmms -s

También podemos controlar infinitud de opciones insospechadas como el ratón con MouseMove [+|-]xx y MouseClick 0; mover las ventanas, Move [+|-]xx y redimensionarlas, Resize [+|-]xx y las de Fluxbox con los parámetros ShowDesktop, RootMenu, WorkspaceMenu, Reconfigure y Restart.

Como para el init y el menu teníamos unas pequeñas aplicaciones que nos permitían generar el archivo, para el keys también existe otra llamada ‘fluxkeys’.


6.3. .fluxbox/apps

En este archivo podemos configurar como y donde se inicien determinadas aplicaciones, por ejemplo iniciar sin decoracion de ventana o en una posición determinada.

[app] (galeon-bin)
  [Workspace] {0}
[end]

[app] (xpmumon)             # Nombre comando de la aplicación
[Workspace]   {0}           # zona de trabajo por defecto 0
[Dimensions]  {125 125}     # Regulando las dimensiones de la ventana
[Position]    {17 31}       # Definimos la posición
[Deco]        {NONE}        # Se usa para quitar decoraciones de ventana 
[end]

6.4. .fluxbox/init

Este archivo determina la configuración general de Fluxbox. La mayoría de estas opciones son definidas mediante el menú de configuración de Fluxbox, veamos un ejemplo con algunos comentarios:

session.titlebar.left: Stick                           #botones a la izquierda de las ventanas
session.titlebar.right: Minimize Maximize Close        # botones a la derecha de las ventanas
session.screen0.toolbar.autoHide: false                # auto-ocultar la toolbar
session.screen0.toolbar.mode: None                     # modo de la toolbar
session.screen0.toolbar.onTop: false                   # mostrar siempre encima la toolbar
session.screen0.toolbar.maxOver: false                 # maximizar encima de la toolbar
session.screen0.toolbar.tools: workspacename, iconbar, systemtray, clock # herramientas mostradas en la toolbar
session.screen0.toolbar.visible: true                  # mostrar u ocultar la toolbar
session.screen0.toolbar.placement: BottomCenter        # posición de la toolbar
session.screen0.toolbar.height: 0                      # altura de la toolbar
session.screen0.toolbar.layer: Desktop                 # capa en la que reside la toolbar
session.screen0.toolbar.widthPercent: 70               # anchura de la toolbar
session.screen0.toolbar.onhead: 0
session.screen0.tab.width: 64                          # anchura de las pestañas
session.screen0.tab.placement: Top                     # posición respecto a la ventana de la pestaña
session.screen0.tab.rotatevertical: true
session.screen0.tab.height: 25                         # altura de la pestaña
session.screen0.tab.alignment: Left                    # alineación de la pestaña
session.screen0.slit.alpha: 100                        # transparencia del slit
session.screen0.slit.onTop: false                      # mostrar siempre encima el slit
session.screen0.slit.autoHide: false                   # auto-ocultar el slit
session.screen0.slit.maxOver: false                    # maximizar por encima del slit
session.screen0.slit.placement: CenterRight            # posición del slit
session.screen0.slit.direction: Vertical               # alineación del slit
session.screen0.slit.layer: Dock                       # capa del slit
session.screen0.slit.onHead: 0
session.screen0.slit.onhead: 0
session.screen0.iconbar.mode: Workspace
session.screen0.iconbar.alignment: Relative
session.screen0.iconbar.clientWidth: 70
session.screen0.iconbar.usePixmap: true
session.screen0.imageDither: false
session.screen0.colPlacementDirection: TopToBottom
session.screen0.windowPlacement: CascadePlacement
session.screen0.menuMode: Delay
session.screen0.fullMaximization: false                # maximizar ventana por encima de todas las zonas
session.screen0.clickRaises: true                      # eleva la ventana al clickearla
session.screen0.focusModel: SloppyFocus                # activar ventana al recibir enfoque
session.screen0.maxOverSlit: false                     # maximizar las ventanas por encima de la slit
session.screen0.sloppywindowgrouping: true
session.screen0.autoRaise: false                       # auto elevar las ventanas al recibir el enfoque
session.screen0.strftimeFormat: %R                     # formato de la hora de la toolbar. véase man date
session.screen0.showwindowposition: true               # mostrar la posición de una ventana al moverla
session.screen0.menuDelayClose: 0                      # retraso en el cierre del menú
session.screen0.workspaceNames: 1. system,2. surfing,3. comunication,4. network,5. download,	# nombres de los escritorios
session.screen0.menuDelay: 0                           # retraso en el cambio de una opción del menú a otra
session.screen0.antialias: true                        # antialiasing en la tipografía
session.screen0.resizeMode:
session.screen0.focusLastWindow: true                  # al cerrar la ventana activa, enfocar la última que tuvo el enfoque
session.screen0.edgeSnapThreshold: 0
session.screen0.rowPlacementDirection: LeftToRight     # dirección de despliegue de las ventanas
session.screen0.opaqueMove: false                      # mantener opaco el fondo de una ventana mientras se mueve
session.screen0.rootCommand:                           # comando ejecutado al inicio
session.screen0.menuAlpha: 125                         # transparencia del menú
session.screen0.workspacewarping: false                # cambiar de escritorio la ventana moviéndola al lateral
session.screen0.focusNewWindows: true                  # enfocar nuevas ventanas
session.screen0.desktopwheeling: true                  # cambio de escritorios con la rueda del ratón
session.screen0.workspaces: 5                          # número de escritorios
session.ignoreBorder: false
session.useMod1: true                                  # habilitar tecla Alt para combinaciones
session.styleFile: /home/bencer/.fluxbox/styles/cthulhain_v2 # style
session.iconbar: true                                  # habilitar iconos en la toolbar
session.groupFile: /home/bencer/.fluxbox/groups        # fichero con los autogroups
session.updateDelayTime: 5
session.cacheMax: 200l
session.menuFile: /home/bencer/.fluxbox/menu           # fichero con la configuración del menú
session.slitlistFile: /home/bencer/.fluxbox/slitlist   # fichero con la lista del slit
session.autoRaiseDelay: 0                              # retraso al mostrar un menú
session.cacheLife: 5l
session.doubleClickInterval: 250                       # intervalo doble click
session.numLayers: 13                                  # número de capas de posicionamiento de ventanas
session.opaqueMove: false                              # mantener la imagen de fondo mientras se mueve una ventana
session.keyFile: /home/bencer/.fluxbox/keys            # fichero de combinaciones de teclado
session.colorsPerChannel: 4
session.tabs: true                                     # habilitar pestañas 
el: 4

Existe una aplicación llamada ‘fluxconf‘ que nos permite configurar estos parámetros gráficamente.


7. Los Styles de Fluxbox

Los estilos de fluxbox estan ubicados en /usr/local/share/fluxbox/styles/ o bien en nuestro home en .fluxbox/styles/

Ejemplo de Style.

!Miscellaneous settings... 
style.name: GS 
style.author: GeeSeCillo 
style.date: 20/10/03 
style.credits: aLEczapKA, based upon ONE theme by <christel at geekgirl dot bz> 
style.comments: Requests or questions; <aleczapka at gmx dot net> 
 


rootCommand: bsetroot -gradient flatcrossdiagonalgradient -to \#294563 -from \#6173aa 
menu.RoundCorners: BottomLeft BottomRight TopRight TopLeft 
window.RoundCorners: TopRight TopLeft BottomLeft BottomRight 

!Toolbar settings... o Barra de minimizar ventenas

toolbar.button: Flat Solid Horizontal 
toolbar.button.color: #294563 
toolbar.button.colorTo: #28455a 
toolbar.button.picColor: #5a7494 

toolbar.button.pressed: Flat Solid Horizontal 
toolbar.button.pressed.color: #c5d3d6 
toolbar.button.pressed.colorTo: #294563 

toolbar.label: Flat Solid Horizontal 
toolbar.label.color: #294563 
toolbar.label.colorTo: #28455a 
toolbar.label.textColor: #5a7494 

toolbar.windowLabel: Flat Solid Horizontal 
toolbar.windowLabel.color: #294563 
toolbar.windowLabel.colorTo: #28455a 
toolbar.windowLabel.textColor: #5a7494 

toolbar.clock: Flat Solid Horizontal 
toolbar.clock.color: #294563 
toolbar.clock.colorTo: #28455a 
toolbar.clock.textColor: #5a7494 

toolbar: Flat Solid Horizontal 
toolbar.color: #294563 
toolbar.colorTo: #28455a 
toolbar.textColor: #5a7494 
toolbar.font: snap 
toolbar.justify: Center 
toolbar.bevelWidth: 0 
toolbar.button.borderWidth: 0 
toolbar.borderWidth: 0 
toolbar.shaped: 0 
toolbar.borderColor: #000000 


!Menu settings... Opciones del menú

menu.frame: Flat Gradient Vertical 
menu.frame.color: #294563 
menu.frame.colorTo: #385588 
menu.frame.textColor: #ffffff 
menu.frame.font: snap 
menu.frame.justify: Right 
menu.frame.disableColor: #000000 

menu.title: Flat Solid Vertical 
menu.title.color: #c5d3d6 
menu.title.textColor: #294563 
menu.title.font: snap 
menu.title.justify: Center 

menu.hilite: Flat Solid 
menu.hilite.color: #8eaabc 
menu.hilite.textColor: #000000 

menu.bullet: Triangle 
menu.bullet.position: Right 


!Window settings... Opciones de ventana

window.button.focus: Flat Solid PipeCross
window.button.focus.color: #294563 
window.button.focus.picColor: #5a7494 

window.button.unfocus: parentrelative 
window.button.unfocus.color: #28455a 
window.button.unfocus.picColor: #687071 

window.grip.focus: Flat Gradient Vertical 
window.grip.focus.color: #385588 
window.grip.focus.colorTo: #294563 

window.grip.unfocus: Flat Solid Horizontal 
window.grip.unfocus.color: #000000 

window.handle.focus: Flat Solid Vertical 
window.handle.focus.color: #294563 

window.handle.unfocus: Flat Solid Horizontal 
window.handle.unfocus.color: #28455a 

window.label.focus: Flat Gradient Vertical 
window.label.focus.color: #385588 
window.label.focus.colorTo: #28455a 
window.label.focus.textColor: #c5d3d6 
window.label.focus.font: snap 
window.label.focus.justify: Center 

window.font: snap 
window.justify: Center 
window.label.unfocus: Flat Solid CrossDiagonal
window.label.unfocus.color: #294563 
window.label.unfocus.textColor: #9aa5a7 

window.title.focus: Raised Bevel1 Gradient Horizontal 
window.title.focus.color: #294563 
window.title.focus.colorTo: #28455a 

window.title.unfocus: Flat Solid Horizontal 
window.title.unfocus.color: #294563 

window.button.pressed: Raised Bevel1 Solid Horizontal 
window.button.pressed.color: #28455a 


!doesn't work yet anyways, but good to have 

window.tab.justify: Center 
window.tab.label.unfocus: Flat Solid 
window.tab.label.unfocus.color: #294563 
window.tab.label.unfocus.textColor: #294563 
window.tab.label.focus: Flat Solid 
window.tab.label.focus.color: #385588 
window.tab.label.focus.textColor: #c5d3d6 
window.tab.borderWidth: 1 
window.tab.borderColor: rgb:10/10/10 
window.tab.font: nu 

! Opciones del Slit ( o barra de aplicaciones )

slit: flat gradient vertical 
slit.color: #385588 
slit.colorTo: SlateGrey 
slit.borderWidth: 0 
slit.bevelWidth: 0 
slit.borderColor: #000000 

window.frame.focusColor: #c5d3d6 
window.frame.unfocusColor: #28455a 
handleWidth: 3 
frameWidth: 1 
bevelWidth: 0 
borderWidth: 0 
borderColor: #28455a 

! Opciones de redondeo de esquinas

menu.roundCorners: TopRight TopLeft 
window.roundCorners: TopRight TopLeft BottomLeft BottomRight

8. Aplicaciones de Configuración Gráfica

Hay una serie de aplicaciones para la fácil configuración de Fluxbox.


8.1. Fluxconf

En este aplicación podremos definir el estilo por defecto, la ruta de los ficheros de configuración, el tamaño de la tollbar, el número de escritorios, entre otras cosas.

Aquí teneis una captura para que lo veais.

Figura 1. Fluxconf


8.2. Fluxkeys

Fluxkeys es una aplicación para poder definir atajos de teclado facilmente en modo gráfico, muy util para ahorrar tiempo y uso de ratón.

Aquí se puede ver la aplicación.

Figura 2. fluxkeys


8.3. Fluxmenu

Fluxmenu es una aplicacion grñafica de FLux Configuration tools para poder retocar nuestro menú de aplicaciones de Fluxbox

Podeis ver como es en la siguiente captura.

Figura 3. Fluxmenu


9. Como Añadir Iconos, Definir Fondo de pantalla y algunas cosillas más.

  • Añadiendo iconos al escritorioExisten varios programas que nos permiten colocar iconos en el escritorio, comentemos algunos.
    - idesk
    
    - fbdesk
    
    - rox
    
    - coolicon
    
    - dfm
    
    - tkdesk
    
    - tkworld
    
    - desklaunch
  • Como definir el fondo de pantallaFluxbox incorpora una aplicación llamada fbsetbg para configurar el fondo de pantalla.Este programa es un wrapper, más o menos un programa que basa sus funcionalidades en otros programas.

    Lo que hace fbsetbg es elegir entre todas las aplicaciones instaladas en tu sistema que permiten definir el fondo de pantalla, cúal es la mejor.

    Aplicación    Paquete     Transparencia   Obervaciones
    feh           feh         yes                     
    Esetroot      Eterm       yes
    wmsetbg       WindowMaker yes                             
    xsri          xsri        yes             Sólo en RedHat
    chbg          chbg        yes             No devuelve 1 cuando hay un error
    display       ImageMagick no                                
    qiv           qiv         no
    xv            xv          no              Enorme y lento
    xsetroot      xli         no                    
    xli           xli         no
    xsetbg        xli         no
    
    

    Lo primero que tenemos que hacer es asegurarnos que tenemos instalado alguno de esos paquetes, y para definir la imagen de fondo no tenemos que hacer más que:

    Bash$ fbsetbg -c /ruta/a/la/imagen.png

    Esta línea la podemos poner en varios sistios: en nuestro .xsession o .xinitrc, en el archivo init en session.screen0.rootCommand:, en el style, e incluso podemos definir la imagen desde el propio menú de Fluxbox, creamos el directorio ~/.fluxbox/background o un enlace a nuestra carpeta de imágenes y generamos el menú mediante

    Bash$ fluxbox-generate_menu -B

    Para hacer esto permanente en el archivo de configuración de este programa en ~/.fluxbox/menuconfig, descomentamos BACKGROUNDMENUITEM=yes. Para regenerar la lista de fondos, vamos a fluxbox-menu > tools > regen menu.

  • Poner Transparente el menu en fluxbox CVS 0.9.xSolo tenemos que darle al boton derecho y en el apartado Fluxbox menu > Configure > Menu alphaIntroducimos el valor 150 para una transparencia aceptable

En la página http://fluxbox.sourceforge.net/docs/en/faq-dev.php , podemos leer ayuda sobre Fluxbox, muy buena aunque sea en Inglés.


10. Capturas de Pantalla

Bueno ahora vamos a hacer una comparación entre la versión en desarrollo y la versión estable simplemente con un par de capturas una de cada versión.

Figura 4. Versión Estable

Figura 5. Versión Desarrollo

A simple vista podemos apreciar las transparencias del menu y decoración de ventana , asi como la del slit en la parte superior.

También las esquinas redondeadas son apreciables en la versión de Desarrollo.


11. Sobre el autor

http://www.debianitas.net

Emilio Guirado Hernández.

Jorge Salamero

Documento bajo Licencia GNU | GPL

geesecillo@debianitas.net

bencer@bencer.org

Este documento esta siempre en revisión, si ves algun error, tienes algun consejo o quieres darnos tu opinión, escribeme.

Agradecimientos especiales a Dedocrata.

Gracias a los Debianitas por la ayuda en la elaboración de este manual.

1. Copyleft 2004 debianitas.net

Jorge Salamero bencer@bencer.org

Emilio Guirado Hernandez geesecillo@debianitas.net

Se puede copiar , modificar o distribuir este manual bajo las condiciones de la licencia GNU General Public License ( GNU GPL )

Si se desea hacer una copia total o parcial del documento se deberá adjuntar debidamente la identidad del autor asi como la dirección www.debianitas.net en las partes superior e inferior del manual.

El autor no se hace responsable de los daños producidos por la utilización de la información del documento.

www.debianitas.net Copyleft 2004


Introdución y Objetivos

  • Introduciendo que son las locales, se puede decir asi por encima que es donde se almacena la informacion del lenguaje que se usa tanto en la consola como en las X
  • El objetivo seria tener en castellano tanto el teclado como las aplicaciones instaladas.

Comenzando

Una vez instalado el sistema base, deberemos configurar las locales para poder utilizar nuestro alfabeto completo o el símbolo del Euro, para ello realizaremos los siguiente:


Instalando paquetes necesarios

Bash # apt-get install locales

Bash # apt-get install user-euro-es euro-support euro-support-x euro-support-console

nota: y si queremos las paginas de manual en español:

Bash # apt-get install manpages-es manpages-es-extra

nota: ejecutamos eurocastellanizar

Bash # castellanizar


Seleccionando el idioma

ahora configuremoslo:

Bash# dpkg-reconfigure locales

seleccionamos es_ES@euro 8859-15

Figura 1. Configuración Locales


Editar /etc/environment

Editamos /etc/environment y añadimos:

LC_ALL=es_ES@euro

LANGUAGE=en_US ## Para no cambiar el idioma, especialmente man 

#LANGUAGE=es_ES@euro ## Usar este si se quiere el man en castellano

LC_TYPE=es_ES@euro

LANG=es_ES@euro

Configurando las locales

ahora ejecutaremos locale-gen

Bash # locale-gen


Terminando y configurando

Por último, saldremos de la sesión actual, y volveremos a entrar, y ejecutaremos locale para ver que efectivamente nuestras locales están bien configuradas.

Bash # locale

Si aún así quedan aplicaciones que todabía no son capaces de mostrar el símbolo del Euro correctamente tenemos dos opciones:

  • Añadir a /etc/console-tools/config la linea:SCREEN_FONT=lat0-16.psf
  • Seleccionar en la configuración de la aplicación una fuente que sí lo soporte.Enlaces de interes:

    La documentación contenida en: /usr/share/doc/user-euro-es/


Sobre el autor

http://www.debianitas.net | http://www.debianitas.org Angathule

Documento bajo Licencia GNU | GPL Angathule@debianitas.net

Este documento esta siempre en revision, si ves algun error, tienes algun consejo o quieres darnos tu opinion, escribeme.

Gracias a los Debianitas por la ayuda en la elaboración de este manual.

Copyleft 2003 debianitas.net

Angathule e-mail : Angathule#debianitas.net

Se puede copiar , modificar o distribuir este manual bajo las condiciones de la licencia GNU General Public License ( GNU GPL )

Si se desea hacer una copia total o parcial del documento se deberá adjuntar debidamente la identidad del autor asi como la dirección www.debianitas.net en las partes superior e inferior del manual.

El autor no se hace responsable de los daños producidos por la utilizacion de la informacion del documento.

www.debianitas.net Copyleft 2003 Angathule


¿ Que es eso de ftp ?

FTP son las siglas de File Transfer Protocol, o protocolo de transferencia de ficheros. Nos permite enviar/recibir ficheros por internet ( o por cualquier red ), de forma sencilla y comoda. Hemos de tener en cuenta que FTP solo es un protocolo, es decir, define la forma/manera en que se debe realizar esta transferencia, siempre de forma teorica. En la practica tendremos siempre 2
“implementaciones” de FTP, un cliente y un servidor, de tal forma que realizaremos las conexiones desde un cliente, contra un servidor.

En este documento vamos a explicar como instalar un servidor FTP que se autentifique contra un servidor de bases de datos. Pese a la breve introduccion, se da por echo que la persona que desea realizar este tipo de instalacion tiene los conocimientos basicos necesarios tanto sobre el protocolo en si, como sobre la arquitectura cliente/servidor mas sencilla.

¿ Que servidores vamos a utilizar y porque ?

Para este articulo vamos a utilizar los siguientes servidores:

  • Proftpd: Este servidor es uno de los mas extendidos para unix/linux en internet. Se caracteriza por su
    dedicacion hacia la seguridad, por su facilidad de configuracion , actualmente, es tal vez la mejor
    opcion en la actualida para montar un servidor FTP sin demasiadas complicaciones.
  • Mysql: Este es un servidor de bases de datos caracterizado por su rapidez ( esta optimizado para el uso
    en internet ), y por ser una solucion tan comoda como potente para sistemas gestores de bases de datos.

NOTA: En este documento no vamos a ver como instalar una base de datos MySql, sino que
consideraremos que el lector esta suficientemente preparado como para montarlo el solito. En cualquier
caso, es posible que en breve documente este tema con mas calma.

Enlaces relaccionados

RFC del protocolo FTP: ftp://ftp.rfc-editor.org/in-notes/rfc959.txt
RFC del protocolo FTP ( en castellano ) : http://www.rfc-es.org/getfile.php?rfc=0959
Servidor Proftpd : http://www.proftpd.net
Servidor MySql : http://www.mysql.org
Documentacion de proftpd en español ( cortesia del grupo galpon ) : http://es.proftpd.org/

Compilando Proftpd

¿ Que es lo que queremos hacer ?

Lo que se pretende con este documento es instalar un servidor FTP que guarde todos los usuarios y claves ( amen de otros datos que ya se verán ) en una base de datos. De esta forma, conseguimos que cada vez que un usuario intente acceder a nuestro servidor, se compruebe en la base de datos si existe, y en caso de que exista se valide su clave. Ademas, gracias a la base de datos no necesitamos crear usuarios de sistema ( con el posible riesgo que ello conlleva ), tenemos todos los datos centralizados, podemos mantener nuestra base de datos ( altas / bajas de usuarios ) de forma cómoda (desde la consola, a aplicaciones web muy sencillas. Hoy en dia mantener este tipo de datos centralizado (bien en una base de datos, bien en sistemas estilo LDAP ), no solo es muy comodo y relativamente sencillo de instalar, sino que para sitios grandes, con gran numero de usuarios, es casi la única opción viable.

Compilando el servidor FTP

Antes de empezar a compilar, es importante que sepamos lo que vamos a hacer. En primer lugar, en mi caso yo instalo todos los servidores bajo el directorio /opt/nombre-version , y los enlazo con un enlaze situado /opt/nombre. De esta forma, pasar de una version a otra es tan simple como parar el servidor, cambiar el enlace y reiniciar. A lo largo de este articulo seguire esta politica, de forma que si tu no usas la misma, deberás adaptar las lineas de ./configure.
Como se ha dicho, vamos a compilar el servidor proftpd, siguiendo los siguientes pasos:
cd /usr/src Nos situamos en el directorio donde vamos a trabajar
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.8.tar.bz2 Descargamos el archivo, en su ultima version estable.
tar xvjf proftpd-1.2.8.tar.bz2 Lo descomprimimos en el directorio actual.
cd proftpd-1.2.8 Entramos al directorio con los fuentes del servidor ftp
./configure –prefix=/opt/proftpd-1.2.8 –exec-prefix=/opt/proftpd-1.2.8 –with-modules=mod_sql:mod_sql_mysql –with-includes=/opt/mysql/include/mysql/ –with-libraries=/opt/mysql/lib/mysql/ Con esta instrucción preparamos la compilación de nuestro servidor. Utilizamos el script configure para indicar que queremos instalar todo el servidor a partir del directorio /opt/proftpd ( opciones –prefix y –exec-prefix, ver mas arriba )

• make: Compilamos los binarios de nuestro servidor. Durante este proceso es muy importante que estemos atentos a posibles errores , ya que de no compilarse bien no conseguiremos nada. El error mas común es que no pueda encontrar las librerías de mysql. Si esto te falla, revisa el error, y si lo deseas, mándamelo para añadirlo a este documento.

• make install: Los instalamos en los directorios que hemos escojido en el ./configure
Tras esto, en nuestro directorio /opt/proftpd-1.2.8 tendremos la estructura de nuestro servidor ftp. Es importante tener en cuenta los siguientes puntos:
• Deberemos crear un script de arranque en /etc/init.d para que nuestro servidor arranque al iniciar el sistema. En principio basta con que ejecutes el binario proftpd situado en el subdirectorio sbin. Si quieres optimizarlo mas, prueba a utilizar el que yo utilizo, o a usar alguno de los scripts de arranque de tu distribución favorita.
• Por mucho que crees el script en /etc/init.d, tu servidor no arrancara hasta que no lo enlaces desde los subdirectorios de los runlevel adecuados. Revisa la documentacion de tu distribucion para asegurarte de hacer bien este proceso.

Configurando el servidor MySql

En esta seccion vamos a ver la configuracion que hemos de utilizar en nuestro servidor mysql para poder autentificar nuestro servidor ftp. Damos por echo que ya tenemos un servidor mysql instalado y funcionando. En primer lugar crearemos una nueva base de datos, y crearemos un usuario que tenga el control de dicha base de datos. De esta forma en el caso de que otra persona sea la que tenga que administrar estos datos, no tendra acceso mas que a aquellas partes necesarias.
Todo el proceso lo realizaremos a traves de la consola de mysql, si tienes alguna herramienta distinta, úsala !.

macklus@maki:~$ /opt/mysql/bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor.
Commands end with ; or \g. Your MySQL connection id is 8 to server version: 3.23.55
Type ’help;’ or ’\h’ for help.
Type ’\c’ to clear the buffer.
mysql> create database ftpdata;
Query OK, 1 row affected (0.00 sec)
4hapter 2. Compilando Proftpd
mysql> show databases;
+----------+
| Database |
+----------+
| ftpdata |
| mysql |
| test |
| vpopmail |
+----------+
4 rows in set (0.00 sec)
mysql> GRANT ALL ON ftpdata.* TO ftpuserlist@localhost IDENTIFIED BY "ftpuser";
Query OK, 0 rows affected (0.00 sec)
mysql> use mysql;
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed
mysql> SELECT * FROM user WHERE user="ftpuserlist";
+-----------+-------------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| Host | User | Password | Select_priv | Insert_priv | Update_priv |
Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv |
Process_priv | File_priv | Grant_priv | References_priv | Index_priv |
Alter_priv |
+-----------+-------------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| localhost | ftpuserlist | 40ca4f0b09893903 | N | N | N | N | N | N | N
| N | N | N | N | N | N | N |
+-----------+-------------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
1 row in set (0.00 sec) mysql> SELECT * FROM db WHERE
user="ftpuserlist";
+-----------+---------+-------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+
| Host | Db | User | Select_priv | Insert_priv | Update_priv |
Delete_priv | Create_priv | Drop_priv | Grant_priv | References_priv |
Index_priv | Alter_priv |
+-----------+---------+-------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+
| localhost | ftpdata | ftpuserlist | Y | Y | Y | Y | Y | Y | N | Y | Y
| Y |
+-----------+---------+-------------+-------------+-------------+-------------+-------------+-------------+-----------+------------+-----------------+------------+------------+
1 row in set (0.03 sec)

En el screen anterior se ve el resultado, a continuacion vamos a ver una a una las sentencias que he empleado:
• create database ftpdata; Aqui creamos la base de datos que vamos a utilizar para mantener los datos de nuestro servidor ftp, que se llamara ftpdata
• show databases; Este comando nos mostrara las bases de datos que tenemos en el sistema, de forma que podremos
asegurarnos de que realmente existe ;)
• GRANT ALL ON ftpdata.* TO ftpuserlist@localhost IDENTIFIED BY “ftpuser”; Con esta orden, vamos a darle todos los permisos al usuario ftpuserlist, dentro de la base de datos ftpdata, siempre que conectemos desde el localhost; ademas, tendra el password ftpuser, que deberemos usar a la hora de conectarnos. El uso del comando grant nos asegura que en el caso de que
ese usuario no exista sera creado.
• use mysql; Tras crear los cambios, vamos a asegurarnos de que se ha creado bien, para ello vamos a seleccionar la
base de datos mysql.
• SELECT * FROM user WHERE user=”ftpuserlist”; Aqui nos aparecera una linea con el usuario que hemos creado, es importante asegurarnos de que no dispone de ningun permiso en esta tabla, ya que los permisos se los daremos en la tabla db.
• SELECT * FROM db WHERE user=”ftpuserlist”; En la linea que aqui nos va a aparecer, debemos asegurarnos de que si tiene todos los permisos; ya que los permisos de esta tabla solamente se aplicaran en la base de datos expecificada.
Tras esto, tendremos un usuario ( ftpuserlist ), que se podra conectar a la base de datos ftpdata con todos los permisos. El siguiente paso es intentar conectarnos desde el cliente mysql para asegurarnos de que se realiza el login de forma correcta; para ello usaremos el comando mysql -u ftpuserlist –database=ftpdata –host=localhost -p , y si tras escribir la contraseña que le hemos puesto conecta, todo ira como deberia.

Una vez que podemos conectar con nuestro usuario, el siguiente paso es crear las tablas que usara el servidor. En la documentacion oficial de proftpd no he podido encontrar un archivo con los datos necesarios para crear las tablas directamente, asi que lo he creado yo mismo, y esta disponible al final de este documento. Hay que tener en cuenta que en la configuracion que yo utilizo le añado un campo a la tabla de usuarios, llamado valida, para indicar si el usuario puede o no iniciar una sesion ftp en el sistema. Mas adelante explicaremos este punto.
Para terminar con nuestra base de datos, vamos a crear un usuario de prueba. Es importante que este usuario no sea un usuario real del sistema, para evitar posibles confusiones. En nuestro caso hemos usado la orden INSERT INTO usertable VALUES
(’usuario’,password=’secreto’,1000,1000,’/home/mack’,’/bin/bash’,0);

Si ya tenemos nuestra base de datos lista para trabajar, el ultimo paso es configurar adecuadamente
nuestro servidor ftp.

Configurando proftpd

El proceso de configuracion de proftpd no es complicado. En este caso concreto vamos a ver unicamente los parámetros de configuración concretos para nuestra configuración. Si deseas mas información sobre la configuración de este servidor, puedes acceder a la documentación existente. Para que nuestro servidor pueda trabajar con la base de datos que tenemos, bastaran las siguientes directivas:
• SQLAuthTypes Backend Le indica que las contraseñas de nuestros usuarios seran encriptadas usando metodos propios de ese servidor. En nuestro caso concreto, usaremos el método password que mysql implementa para codificar nuestras contraseñas.
• SQLAuthenticate users* le indicamos que solo queremos validar a nuestros usuarios mediante mysql.
• SQLConnectInfo ftpdata@localhost ftpuserlist ftpuser Le damos los datos necesarios para conectar con nuestro servidor MySql.
• SQLDefaultGID 65534 Indicamos el GID por defecto para nuestros usuarios
• SQLDefaultUID 65534 Indicamos el UID por defecto para nuestros usuarios
• SQLMinUserGID 500 Fijamos el GID minimo que ha de tener nuestro usuario para poder iniciar sesion.
• SQLMinUserUID 5000 Fijamos el UID minimo que ha de tener nuestro usuario para poder iniciar sesion.
• SQLUserInfo usertable userid passwd uid gid homedir shell valida Esta opcion es vital, debemos indicar la estructura de nuestra tabla de usuarios en nuestra base de datos. En primer lugar indicaremos el nombre de la tabla en si, y después el de todos los campos que tiene dicha tabla.
• SQLUserWhereClause “valida = 0″ Aquí añadimos un parámetro mas a la sentencia SELECT que determina si el usuario puede o no iniciar sesión. En este caso, añadimos la condición de que el valor del campo valida ha de ser 0 para que el usuario pueda iniciar sesion. En el caso de que este valor sea 1, el acceso sera automáticamente denegado. Con estos parámetros, podremos realizar sin problema la autentificación de nuestros usuarios contra nuestra base de datos mysql.

script sql para crear la base de datos.

— MySQL dump 8.22


— Host: localhost Database: ftpdata
———————————————————
— Server version 3.23.55

— Table structure for table ’grouptable’

CREATE TABLE grouptable (
groupname varchar(20) NOT NULL default ”,
gid smallint(6) NOT NULL default ’0’,
members longtext )
TYPE=MyISAM;

— Table structure for table
’usertable’

CREATE TABLE usertable (
userid char(12) NOT NULL default ”,
passwd char(100) NOT NULL default ”,
uid smallint(6) default NULL,
gid smallint(6) default NULL,
homedir char(50) default NULL,
shell char(20) default NULL,
valida tinyint(4) default ’0’ )
TYPE=MyISAM;

Ejemplo de configuración

# This is a basic ProFTPD configuration file (rename it to
# ’proftpd.conf’ for actual use. It establishes a single server
# and a single anonymous login. It assumes that you have a user/group
# “nobody” and “ftp” for normal operation and anon.
ServerName “ProFTPD Default Installation”
ServerType standalone
DefaultServer on
# Port 21 is the standard FTP port.
8hapter 2. Compilando Proftpd
Port 21
# Umask 022 is a good standard umask to prevent new dirs and files
# from being group and world writable.
Umask 022
# To prevent DoS attacks, set the maximum number of child processes
# to 30. If you need to allow more than 30 concurrent connections
# at once, simply increase this value. Note that this ONLY works
# in standalone mode, in inetd mode you should use an inetd server
# that allows you to limit maximum number of processes per service
# (such as xinetd).
MaxInstances 30
# Set the user and group under which the server will run. User nobody Group nogroup
# To cause every FTP user to be “jailed” (chrooted) into their home
# directory, uncomment this line.
#DefaultRoot ~
# Sentencias SQL
SQLAuthTypes Backend
SQLAuthenticate users*
SQLConnectInfo ftpdata@localhost ftpuserlist ftpuser
SQLDefaultGID 65534
SQLDefaultUID 65534
SQLMinUserGID 500
SQLMinUserUID 5000
SQLUserInfo usertable userid passwd uid gid homedir shell valida
SQLUserWhereClause “valida = 0″
# Normally, we want files to be overwriteable.
<Directory />
AllowOverwrite on
</Directory>
# A basic anonymous configuration, no upload directories. If you do not
# want anonymous users, simply delete this entire <Anonymous> section.
<Anonymous ~ftp>
User ftp
Group ftp
# We want clients to be able to login with “anonymous” as well as “ftp”
UserAlias anonymous ftp
# Limit the maximum number of anonymous logins MaxClients 10
# We want ’welcome.msg’ displayed at login, and ’.message’ displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
En este ejemplo vemos las directivas necesarias para configurar nuestro Proftpd-MySql . Por supuesto, siempre se puede perfeccionar la configuración aun mas, pero esa es otra historia, y deberá ser contada en otra ocasión…

Copyleft 2003 debianitas.net

Este documento ha sido desarrollado por Jose Pedro Andres ( macklus@debianitas.net ) Se puede copiar, modificar o distribuir este manual bajo las condiciones de la licencia GNU General Public License (GNU GPL ). Si se desea hacer una copia total o parcial del documento se deberá adjuntar debidamente la identidad del autor asi como la dirección www.debianitas.net en las partes superior e inferior del manual. El autor no se hace responsable de los daños producidos por la utilización de la informacion del documento. Este documento esta siempre en revision, si ves algun error, tienes algun consejo o quieres darnos tu
opinion, escribeme.


Para poder trabajar con Proxmox necesitaremos un servidor con un mínimo de requisitos. Según los propios desarrolladores, los requisitos recomendados para usar Proxmox serían:

  • Dual o Quad Socket Server (Quad / Six / Hexa CPUs Core ‘)
  • CPU: 64 bits (Intel EMT64 o AMD64)
  • Intel VT / AMD-V CPU capaz / Mainboard (para soporte KVM virtualización completa)
  • 8 GB de memoria RAM es bueno, más es mejor (agarrar tanto como sea posible)
  • RAID de hardware con baterías de caché protegido contra escritura (BBU) o la protección de flash
  • Discos duros rápidos y mejores resultados con 15k rpm SAS, RAID 10
  • Dos Gbit NIC (para la vinculación), adicional de NIC en función de la tecnología de almacenamiento preferido y configuración del clúster
  • Hardware con soporte Fencing

Sin embargo, después de muchas pruebas en distintos sistemas, nuestra recomendación mínima, para tener un funcionamiento razonable (sobre todo si trabajamos con varias máquinas virtuales, o éstas máquinas tienen carga de forma constante), sería:

  • Intel Core i3
  • 8 GB RAM, o, como norma, 2 GB libres para el sistema además de la RAM usada por las VM
  • Discos duros SSD o 15k rpm
  • RAID siempre mediante hardware, y solo sobre discos SAS o SSD.
  • 1 Gbit NIC

Por descontado, el rendimiento real del servidor va a depender del total de máquinas virtuales instaladas en el, y del uso que estas hagan de los recursos del sistema. Por norma general, los cuellos de botella en nuestro sistema se encontrarán en la CPU y el disco, por lo que nuestra recomendación es siempre usar los mejores discos y CPU posibles.

Aunque los desarrolladores también nos dan una serie de requisitos mínimos, es necesario entender que añadir virtualización a un sistema aumenta los recursos que este sistema necesita para funcionar, por lo que estos requisitos mínimos no son viables bajo prácticamente ninguna circunstancia, si queremos usar Proxmox en un entorno de producción.

En nuestro caso, para la elaboración de este libro hemos trabajado con un servidor EX40-SSD de Hetzner, y con un E3-SSD-1 de OVH, y el rendimiento es extremadamente fluido, aún teniendo varias máquinas virtuales que corren procesos complejos como Cpanel o servicios Java.

Por último, es importante tener en cuenta que la Virtualización Intel VT/AMD-V es solo necesaria si vamos a utilizar máquinas virtuales KVM. Es posible utilizar Proxmox en una arquitectura i686, pero estaremos restringidos a máquinas OpenVZ.




Todos los derechos reservados, de momento. Copyright debianitas.net 2003.