martes, 1 de diciembre de 2009

Respaldo programado básico para POSTGRESQL

En esta ocasión, documentaré un procedimiento muy sencillo para poder realizar respaldos de determinadas bases de datos en PostgreSQL en GNU/Linux Debian Lenny.

Se basa en un "script" muy sencillo, no obstante, refleja el concepto principal de ejecutar el respaldo de manera programada a través de "cron".

El "script" lo he almacenado en el directorio "/usr/local/sbin/respaldo-postgresql.sh"

A continuación muestro el contenido de script:

#!/bin/bash
su -l postgres -c 'pg_dump moodle_cgv > /var/backups/postgresql-backups/moodle_cgv_`date +%Y%m%d-%H%M%S`.sql'

su -l postgres -c 'pg_dump moodle_pregrado > /var/backups/postgresql-backups/moodle_pregrado_`date +%Y%m%d-%H%M%S`.sql'

su -l postgres -c 'pg_dump moodle_postgrado > /var/backups/postgresql-backups/moodle_postgrado_`date +%Y%m%d-%H%M%S`.sql'

Luego, editamos las tareas a través de:

#crontab -e

0 3 * * * postgres /usr/local/sbin/respaldo-postgresql.sh

Como se puede apreciar, el script de respaldo extrae tres bases de datos y crea archivos ".sql" en los cuales se concatena la fecha y hora del respaldo.

A través del "cron", el respaldo se realizaría todos los días del año a las 03:00 AM.

He podido encontrar en la "wikisphera", scripts mucho más elaborados que copian los respaldos en servidores externos. Así debe ser la implementación final del sistema de respaldo, sin embargo, dado que hay 1000 formas de hacerlo, a continuación muestro una de las que conseguí:

#! /bin/sh
#############################################
#Nombre: backup_diario.sh Fecha: 18/04/2007
# Script para realizar Backup de las Bases de datos existentes
# Ademas se controla la cantidad de copias que se desea guardar
# Luego de esto envia por SSH a otro servidor el respaldo,
# evitando asi cualquier tipo de riesgo por daño en el soporte
# físico (HDD)
#############################################
BACKUP_DIR=/home/postgres/backup
BACKUP_DIR_REMOTO=192.168.7.1:/home/backup/
BACKUP_NUM=7
# Realizar Backup de las DB'S
databases=`su -l postgres -c 'psql -q -t -c "select datname from pg_database;" template1'`
for d in $databases; do
if [ ! -d $BACKUP_DIR/$d ];
then echo -n "Creando directorio de respaldo $BACKUP_DIR/$d... "
su -l postgres -c "mkdir $BACKUP_DIR/$d" ] || continue
echo "done."
fi
# Establecer cantidad maxima del mismo backup $BACKUP_NUM
archive=$BACKUP_DIR/$d/$d.gz
if [ -f $archive.$BACKUP_NUM ]; then
rm -f $archive.$BACKUP_NUM;
fi
n=$(( $BACKUP_NUM - 1 ))
while [ $n -gt 0 ]; do
if [ -f $archive.$n ]; then
mv $archive.$n $archive.$(( $n + 1 ))
fi
n=$(( $n - 1 ))
done
if [ -f $archive ]; then
mv $archive $archive.1;
fi
echo -n "Respaldando la base $d... "
su -l postgres -c "(pg_dump $d |gzip -9) > $archive"
echo "Transfiriendo archivo $archive"
scp $archive root@$BACKUP_DIR_REMOTO
echo "Tarea Finalizada."
done



Este "script" es mucho más robusto sin embargo presume la copia de archivos sin solicitud de claves vía SSH en el servidor remoto.

Espero sea de utilidad.

Éxitos!

José Gregorio.

miércoles, 12 de agosto de 2009

Imagemagick: Convertir PDF a PNG


En alguna ocasión nos hemos encontrado con documentos en formato ".pdf" que contienen texto y gráficos o siemplemente son diagramas que nos interesa poder manipular en algún programa de edición.

El problema es que cuando importamos el archivo ".pdf" en herramientas como el soberano "GIMP", se pierde el nivel de calidad en la imagen.

En esta publición voy a mostrar cómo resolví convertir un documento en formato ".pdf" a una serie de archivos ".png" con la misma calidad que tenía el documento ".pdf".

Para lograr este objetivo, me apoyé en el paquete "imagemagick" que, obviamente, viene de los repositorios de GNU/Linux Debian Lenny ;-)

Supongamos que tenemos en un directorio el archivo "documento.pdf" que está conformado por 5 páginas con texto e imágenes.

Estos son los pasos que seguí:
  1. Instalar "imagemagick":
    $ sudo aptitude install imagemagick
  2. Realizamos la conversión del archivo a formato ".png" indicando 300 dpi de densidad para que no se pierda la calidad original:
    $ convert -monitor -density 300 documento.pdf documento.png
  3. El resultado será un conjunto de archivos de extensión ".png" nombrados de la siguiente manera:
    documento-0.png
    documento-1.png
    documento-2.png
    documento-3.png
    documento-4.png
  4. Cada uno de los archivos corresponde a una página del documentos "documento.pdf"
Espero sea de utilidad!

José Gregorio.

FUENTES:
  1. http://www.cyberciti.biz/faq/howto-convert-a-pdf-file-to-an-image/
  2. http://www.imagemagick.org/script/index.php

viernes, 31 de julio de 2009

Lenny y Touchpads Synaptics


Un Touchpad en un laptop para algunos puede ser una bendición y para otros una verdadera pesadilla. En mi caso, luego de un poco de práctica y costumbre, me ha ayudado a ser bastante rápido en el uso del puntero y como sustitución completa del Mouse.

En este sentido, me dediqué a revisar un poco cómo trabaja el Touchpad de mi laptop y qué cosas puedo cambiar en su comportamiento. Es muy interesante ya que el área del Touchpad se puede definir a partir de un sistema de coordenadas, de hecho, está segmentado en 9 áreas diferentes.

En esta publicación, voy a explicar brevemente mi experiencia habilitando y cambiando algunos parámetros de mi Touchpad.

Mi caja de herramientas está formada por:
  • Hardware
    Laptop HP-Compaq NX6115
  • Sofware:
    Xorg 7.3
    synclient
  1. Determinar cómo Lenny está detectando el Touchpad:
    # dmesg |grep Touchpad
    ... la respuesta de este comando fué:
    [ 11.040052] Synaptics Touchpad, model: 1, fw: 6.2, id: 0x1a0b1, caps: 0xa04713/0x200000
  2. Verificar si el servidor "Xorg" tiene debidamente configurado el Touchpad:
    # vim /etc/X11/xorg.conf
    ... en mi caso no estaba configurado, al menos de manera explícita. Lo que conseguí en el archivo relacionado con el Touchpad fue la configuración básica del mouse ...
    ...
    Section "InputDevice"
    Identifier "Configured Mouse"
    Driver "mouse"
    EndSection
  3. Comenté las líneas anteriores en el xorg.conf y configuré una nueva sección para configurar el Touchpad:
    ...
    Section "Server Layout"
    ...
    InputDevice "SynapticsTouchpad" "SendCoreEvents"
    EndSection
    ...
    Section "Module"
    Load "synaptics"
    EndSection
    ...
    Section "InputDevice"
    Identifier "SynapticsTouchpad"
    Driver "synaptics"
    Option "AlwaysCore" "true" # send events to CorePointer
    #Option "Device" "/dev/input/mice"
    Option "Device" "/dev/psaux"
    Option "Protocol" "auto-dev"
    Option "SHMConfig" "true" # configurable at runtime? security risk
    Option "LeftEdge" "1400" # x coord left
    Option "RightEdge" "5000" # x coord right
    Option "TopEdge" "1300" # y coord top
    Option "BottomEdge" "4300" # y coord bottom
    Option "FingerLow" "25" # pressure below this level triggers release
    Option "FingerHigh" "30" # pressure above this level triggers touch
    Option "MaxTapTime" "180" # max time in ms for detecting tap
    Option "VertEdgeScroll" "true" # enable vertical scroll zone
    Option "HorizEdgeScroll" "true" # enable horizontal scroll zone
    Option "CornerCoasting" "true" # enable continuous scroll with finger in corner
    Option "CoastingSpeed" "0.30" # corner coasting speed
    Option "VertScrollDelta" "45" # edge-to-edge scroll distance of the vertical scroll
    Option "HorizScrollDelta" "45" # edge-to-edge scroll distance of the horizontal scroll
    Option "MinSpeed" "0.10" # speed factor for low pointer movement
    Option "MaxSpeed" "0.60" # maximum speed factor for fast pointer movement
    Option "AccelFactor" "0.0020" # acceleration factor for normal pointer movements
    Option "VertTwoFingerScroll" "true" # vertical scroll anywhere with two fingers
    Option "HorizTwoFingerScroll" "true" # horizontal scroll anywhere with two fingers
    Option "TapButton1" "1"
    Option "TapButton2" "2"
    Option "TapButton3" "3"
    Option "EdgeMotionUseAlways" "1"
    Option "EmulateMidButtonTime" "75"
    EndSection
    ...
  4. Reiniciar.
Con esta configuración y revisando el archivo de logs del Xorg (en mi caso aparecieron al final del archivo):

less /var/log/Xorg.0.log

Verifiqué que efectivamente los cambios habían sido aplicados.

Para realizar ajustes específicos sobre el driver "synaptics" y cambiar el comportamiento del Touchpad utilicé el comando "synclient".

Para visualizar los parámetros del controlador, ejecuto:
  • # synclient -l
La respuesta del comando es una lista de todos los parámetros y sus valores actuales:

Parameter settings:
LeftEdge = 1400
RightEdge = 5000
TopEdge = 1300
BottomEdge = 4300
FingerLow = 38
FingerHigh = 43
FingerPress = 256
MaxTapTime = 180
MaxTapMove = 220
MaxDoubleTapTime = 180
SingleTapTimeout = 180
ClickTime = 100
FastTaps = 0
EmulateMidButtonTime = 75
EmulateTwoFingerMinZ = 257
VertScrollDelta = 228
HorizScrollDelta = 227
VertEdgeScroll = 1
HorizEdgeScroll = 1
CornerCoasting = 1
VertTwoFingerScroll = 1
HorizTwoFingerScroll = 1
MinSpeed = 0.102
MaxSpeed = 0.089
AccelFactor = 0
TrackstickSpeed = 40
EdgeMotionMinZ = 30
EdgeMotionMaxZ = 160
EdgeMotionMinSpeed = 1
EdgeMotionMaxSpeed = 304
EdgeMotionUseAlways = 1
UpDownScrolling = 1
LeftRightScrolling = 1
UpDownScrollRepeat = 1
LeftRightScrollRepeat = 1
ScrollButtonRepeat = 100
TouchpadOff = 0
GuestMouseOff = 0
LockedDrags = 0
LockedDragTimeout = 5000
RTCornerButton = 2
RBCornerButton = 3
LTCornerButton = 0
LBCornerButton = 0
TapButton1 = 1
TapButton2 = 2
TapButton3 = 3
CircularScrolling = 0
CircScrollDelta = 0.1
CircScrollTrigger = 0
CircularPad = 0
PalmDetect = 1
PalmMinWidth = 10
PalmMinZ = 200
CoastingSpeed = 0.3
PressureMotionMinZ = 30
PressureMotionMaxZ = 160
PressureMotionMinFactor = 1
PressureMotionMaxFactor = 1
GrabEventDevice = 1

Dado que existe un sistema de coordenadas que definen las áreas de sensibilidad del Touchpad, utilicé el comando para ver qué valores se reportaban cada vez que lo presionaba:
  • # synclient -m 100
Presioné cada una de las esquinas del Touchpad y aparecían los valores de las coordenadas. De toda la línea que aparecía, solamente me concentré en la segunda y tercera columna que son las coordenadas "x" y "y".

Por ejemplo, la esquina superior derecha del Touchpad reportó:

3.102 1309 1163 14 1 4 0 0 0 0 0 00000000 0 0 0 0 0

Entonces los valores asociados son:

x = 1309
y = 1163

Sucesivamente, presioné cada área del Touchpad y ajusté los valores aproximados de los parámetros ejecutando:
  • synclient LeftEdge=1400
  • synclient RightEdge=5000
  • synclient TopEdge=1300
  • synclient BottomEdge=4700
Estos valores se reportan al driver "synaptics" en tiempo real pero son cambios temporales. Entonces, luego de comprobar que el comportamiento del Touchpad es como quería, los convertí en cambios permanentes editando los parámetros directamente en el archivo "xorg.conf" y reiniciando.

De esta manera, podemos tener el control completo de nuestro Touchpad ;-)

Saludos!

José Gregorio.

FUENTES:
  1. http://wiki.archlinux.org/index.php/Touchpad_Synaptics
  2. http://madpenguin.org/cms/index.php/?m=show&opt=printable&id=887
  3. http://ubuntuforums.org/showthread.php?p=975421
  4. http://www.synaptics.com/sites/default/files/ACF126.pdf?q=decaf/utilities/ACF126.pdf

miércoles, 29 de julio de 2009

Lenny + ATI Drivers + Compiz


COMPIZ es un sistema de gestión de ventanas muy vistoso que crea efectos impresionantes en una computadora que tenga aceleración 3D habilitada.

En mi caso, lo uso cuando tengo que proyectar mi escritorio en presentaciones y conferencias por razones obvias :-)

En este artículo, voy a explicar cómo en mi Laptop HP-Compaq NX6115 con GNU/Linux Debian Lenny configuré:




  1. Los controladores "NON-FREE" desde los repositorios oficiales.
  2. Instalé COMPIZ.
La tarjeta de video que tiene mi laptop es una humilde:

ATI Radeon Xpress 200M 5955

Aquí voy:

INSTALACIÓN DE CONTROLADORES DE VIDEO: ATI RADEON XPRESS 200M
  1. Verificar que el sistema está actualizado completamente:
    # aptitude update
    # aptitude dist-upgrade
  2. Instalar los paquetes necesarios:
    # aptitude install module-assistant fglrx-driver fglrx-kernel-src
  3. Construir e instalar el módulo "fglrx" de ATI:
    # module-assistant auto-install fglrx-kernel-src
  4. Actualizar la configuración de XORG (xorg.conf):
    # aticonfig --initial
  5. Instalar el programa de administración gráfica del controlador:
    # aptitude install fglrx-amdcccle
Si se presenta alguna falla, como por ejemplo que no inicie correctamente el video, en el Paso No. 4 se genera un archivo de respaldo llamado "xorg.conf.fglrx-0". En mi caso, no falló nada.

INSTALACIÓN DEL COMPIZ
  1. Instalar los paquetes necesarios desde el repositorio:
    # aptitude install compiz compiz-core compiz-gnome compiz-gtk compizconfig-settings-manager compizconfig-backend-gconf compiz-plugins fusion-icon libdecoration0 libcompizconfig0 python-compizconfig compiz-fusion-plugins-main compiz-fusion-plugins-extra
  2. Configurar el servidor "XORG" para que funcione el COMPIZ:
    # vim /etc/X11/xorg.conf
    Agregar las siguientes líneas a la sección "Device":
    ...
    Option "AllowGLXWithComposite" "true"
    Option "RenderAccel" "true"
    ...
    Además la siguiente línea a la sección "Screen":
    ...
    Option "AddARGBGLXVisuals" "true"
    ...
    Finalmente, agregar al final del archivo una nueva "sección":
    ...
    Section "Extensions"
    Option "Composite" "Enable"
    EndSection
Como hemos hecho unos cuantos cambios de impacto en el sistema, lo mejor es reiniciar el sistema.

Debemos disponer de un conjunto de programas en:
  1. SYSTEM -> PREFERENCES -> ATI Catalyst Control Center : Este sirve para configurar el controlador de ATI.
  2. APPLICATIONS -> SYSTEM TOOLS -> Compiz Fusion Icon : Aparecerá en nuevo ícono en el escritorio para administrar el COMPIZ de manera muy fácil.
Lo que queda es explorar y jugar con las opciones del compiz!

Espero sea de utilidad.

Éxitos!

José Gregorio.

FUENTES:
  • http://wiki.cchtml.com/index.php/Debian_Installation_Guide
  • http://www.taringa.net/posts/linux/1207876/C%C3%B3mo-instalar-Compiz-en-Debian-Lenny.html

jueves, 18 de junio de 2009

Mejorar calidad de LATEX en MOODLE





MOODLE es un sistema de gestión de aprendizaje increíblemente flexible, robusto y ademá mantenido por una comunidad de usuarios y desarrolladores realmente bárbara.

Dado que me ha tocado realizar la virtualización de "Matemática 2" de la Universidad, el uso de fórmulas matemáticas es intensivo.

Luego de haber realizado la habilitación del filtro de "LATEX" en MOODLE, varios profesores manifestaron que la calidad de los gráficos que se generaban era pobre. Pese a que yo los veía claros, decidí darme a la tarea de conseguir mejorar lo que ya era bueno :-)

Investigando en el sitio principal de MOODLE, vi que existían una gran cantidad de discusiones relacionadas con el tema. Hasta que por fin di con un POST que me indicaba claramente lo que debía hacer.

El secreto estaba en configurar MOODLE para que en vez de generar archivos ".gif", produjera archivos ".png". Esto obligó a editar un poco el código fuente del filtro de "LATEX" que trae MOODLE, pero para mi sorpresa no fué nada complicado.

Por el momento, esta solución la considero un "patch". Esperemos que el equipo de desarrollo de MOODLE realice el cambio permanente.

A continuación la solución:
  1. Editar el archivo ubicado dentro de la carpeta de MOODLE en "./filter/tex/texed.php" y cambiar:
    $image = md5($texexp) . ".gif";
    $filetype = 'image/gif';
    ... por ...
    $image = md5($texexp) . ".png";
    $filetype = 'image/png';
  2. Editar el archivo "./filter/tex/pix.php" y cambiar:
    $md5 = str_replace('.gif','',$image);
    ... por ...
    $md5 = str_replace('.png','',$image);
  3. Editar el archivo "./filter/tex/latex.php" y aplicar un par de cambios:
    ... el primero:
    $gif = "{$this->temp_dir}/$filename.gif";
    ... por ...
    $gif = "{$this->temp_dir}/$filename.png";
    ... y el segundo:
    unlink( "{$this->temp_dir}/$filename.gif" );
    ... por ...
    unlink( "{$this->temp_dir}/$filename.png" );
  4. Editar el archivo "./filter/tex/filter.php" y aplicar este último cambio:
    $filename = $md5 . ".gif";
    ... por ...
    $filename = $md5 . ".png";
  5. Finalmente, para aumentar el tamaño de las imágenes generadas por MOODLE, en la configuración del "filtro tex", cambiar el valor de "Densidad" por "160".
En este momento, tendremos nuestro MOODLE creando fórmulas inmejorables :D.

Éxitos!

José Gregorio.

FUENTES:
  1. http://moodle.org/mod/forum/discuss.php?d=120418
  2. http://docs.moodle.org/en/TeX_filter

sábado, 23 de mayo de 2009

SITIO WEB CON APACHE2 Y SSL


La aplicación de seguridad en nuestros sitios Web debe ser una práctica constante y sobretodo cuando existen ambientes hostiles como Internet o Intranets.

En este artículo, muestro cómo realizar la instalación de un certificado autofirmado en un sitio web creado en mi máquina local.

Para este ejemplo consideramos la siguiente información:





  • Sistema operativo: Por supuesto! ... GNU/Linux Debian Lenny :D
  • hostname: jgdu-laptop
  • ip: 192.168.1.114
  • Sólo se puede configurar un sitio seguro por cada dirección IP configurada en el sistema.
  • Suponemos que está instalado el servidor web "Apache 2".
A continuación los pasos necesarios:
  1. Identificar correctamente la máquina que tiene tendrá el sitio Web seguro:
    Esto es necesario revisarlo dado que es probable que nuestra máquina de prueba no esté registrada en ningún servidor de nombres de dominio. Entonces verificamos que el archivo "/etc/hosts" contenga la entrada correspondiente asociando al IP adecuado:
    ...
    192.168.1.114 jgdu-laptop jgdu-laptop
    ...
  2. Creación del certificado digital:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2
    root@jgdu-laptop:/etc/apache2# mkdir certs
    root@jgdu-laptop:/etc/apache2#cd certs
    ... aquí viene la creación del certificado ...
    root@jgdu-laptop:/etc/apache2# openssl req $@ -new -x509 -days 365 -nodes -out jgdu-laptop.crt -keyout jgdu-laptop.key
    ... se responden unas preguntas sencillas previas a la generación de los archivos.
  3. Verificar la creación de los archivos:
    root@jgdu-laptop:/etc/apache2# ls
    ... deben aparecer los siguientes archivos ...
    jgdu-laptop.crt jgdu-laptop.key
  4. Habilitar el módulo "SSL" en el servidor Web:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/mods-available
    root@jgdu-laptop:/etc/apache2# a2enmod ssl
  5. Configurar el sitio Web SSL predeterminado:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/sites-available
    root@jgdu-laptop:/etc/apache2# vim default-ssl
    Ubicar las directivas del certificado y establecer las rutas adecuadas a los archivos generados previamente.
    ...
    SSLCertificateFile /etc/apache2/certs/jgdu-laptop.crt
    SSLCertificateKeyFile /etc/apache2/certs/jgdu-laptop.key
    ...
  6. Habilitar el sitio Web con SSL:
    root@jgdu-laptop:/etc/apache2# cd /etc/apache2/sites-available/
    root@jgdu-laptop:/etc/apache2# a2ensite default-ssl
  7. Reinicar el servicio Web Apache2:
    root@jgdu-laptop:/etc/apache2# /etc/init.d/apache2 restart
  8. Probar el acceso al sitio seguro con un explorador visitando la página:
    https://jgdu-laptop/
Si deseamos que todo el tráfico de nuestro sitio Web se realice a través de una conexión segura, debemos habilitar el módulo "Rewrite" en el Apache2 y configurar el sitio por defecto "default" ubicado en "/etc/apache2/sites-available/default" con la regla de re-escritura siguiente:

RewriteEngine On
Options +FollowSymlinks
rewriteCond %{SERVER_PORT} 80
rewriteRule ^(.*)$ https://oe.asignaturas.usb.ve/moodle$1 [R,L]

Esta información se coloca dentro de las directivas "" pero fuera de los "".

Espero sea de utilidad.

Éxitos!

José Gregorio.

FUENTES CONSULTADAS:
  1. http://crysol.org/es/node/198
  2. http://www.debian-administration.org/article/Setting_up_an_SSL_server_with_Apache2
  3. http://www.gpltarragona.org/archives/318

jueves, 7 de mayo de 2009

VSFTPD: Very Secure File Transfer Protocol Daemon

En la práctica, realmente no soy un usuario consecuente con el uso de FTP para realizar la transferencia de archivos en ningún escenario que requiera usuarios, claves y permisos. Prefiero alternativas como SSP o DAV.

Sin embargo, son muchas las personas y programas que todavía mantienen el uso de este protocolo.

Es por esto que he escogido "VSFTPD", que al menos considera unas cuantas estrategias de seguridad para la trasnferencia de información entre máquinas de una red.

El "Demonio del protocolo de transferencia de archivos muy seguro" ofrece una serie de características interesantes para fortalecer las debilidades del FTP tradicional. Entre ellas está la integración con sistemas de bases de datos como MYSQL y PAM.

Aquí vamos con la instalación:
  1. Agregar el usuario que emplearemos para acceder vía FTP al sistema:
    # adduser usuario-ftp
    Ingresamos algunos datos descriptivos y la clave de acceso.
  2. Instalar el programa VSFTPD:
    # aptitude install vsftpd
  3. Editamos el archivo de configuración:
    # vim /etc/vsftpd.conf
    El archivo tiene un montón de opciones, aquí colocaré cómo he dejado el mío para que los usuarios queden "enjaulados" y no puedan estar husmeando por mi sistema:

    listen=YES
    #listen_ipv6=YES
    anonymous_enable=NO
    local_enable=YES
    write_enable=YES
    local_umask=022
    dirmessage_enable=YES
    xferlog_enable=YES
    connect_from_port_20=YES
    xferlog_file=/var/log/vsftpd.log
    xferlog_std_format=YES
    ascii_upload_enable=YES
    ascii_download_enable=YES
    ftpd_banner=Servicio FTP.
    chroot_local_user=YES
    chroot_list_enable=NO
    chroot_list_file=/usr/local/etc/vsftpd/vsftpd.chroot_list
    ls_recurse_enable=YES
    secure_chroot_dir=/var/run/vsftpd
    pam_service_name=vsftpd
  4. Si quieren ampliar la información de estos parámetro y muchos otros basta con que revisen el manual que trae el programa:
    # man vsftpd.conf
  5. Indicar los usuarios que serán "enjaulados" en el archivo "vsftpd.chroot_list":
    # vim /usr/local/etc/vsftpd/vsftpd.chroot_list
    Agregamos el nombre del usuario "usuario-ftp" sin las comillas.
  6. Reiniciar el servicio "vsftpd":
    # /etc/init.d/vsftpd restart
Las pruebas son muy sencillas. Basta con ejecutar desde cualquier máquina el comando "ftp" e indicar el usuario y claves creados previamente:
  1. Iniciar la sesión FTP:
    # ftp 192.168.1.100
    Ingresamos usuario y clave.
  2. Podemos intentar subir un archivo con el comando "put" y luego eliminarlo con "delete".
  3. También si ejecutamos el comando "hash", se mostrará una marca "#" por cada 1024 bytes (1k) transferido.
Interesante! :D

Éxitos!

José Gregorio.

FUENTES CONSULTADAS:
  1. http://linuxsix.blogspot.com/2008/10/servidor-ftp-con-vsftpd.html
  2. http://www.alcancelibre.org/staticpages/index.php/09-como-vsftpd
  3. http://alien2thisworld.net/sitePages/tutorials/vsftpd_virtual_users_setup.html
  4. http://howto.gumph.org/content/setup-virtual-users-and-directories-in-vsftpd/
  5. http://www.howtoforge.com/vsftpd_mysql_debian_etch

martes, 7 de abril de 2009

Inrepid Ibex + Screencasts + Flash video


La publicación de "Screencasts" para compartir lo que sabemos en ocasiones puede ser una herramienta muy poderosa para transmitir información.

La frase "Una imagen vale más que mil palabras" se ve "exponencialmente" potenciada cuando la transformamos en "Un video vale más que letras". Sin ánimos de polemizar entre "videos y textos", he descubierto una herramienta muy poderosa para grabar en formato de video cuaquier cosa que quisiéramos demostrar a partir de nuestro escritorio.

En el mercado, exiten herramientas como "Captivate" y el ancestral "Robodemo" que nos permitían hacer esto de una manera muy fácil. Estas herramientas permitían además editar con cajas de texto y otras ayudas visuales el video final en formato ".swf" que se generaba. La mayor fortaleza que vi en su momento era la posibilidad de incorporar el audio del micrófono al video que se generaba.

Pues bien, para Ubuntu Intrepid Ibex he probado el programa "RecordMyDesktop" el cual me permite capturar el video y audio de mi escritorio para realizar video tutoriales. Una de las mayores ventajas que posee este programa es que permite la codificación sólo en formatos abiertos como Video Theora y Audio Vorbis encapsulando el contenido en el contenedor OGG.

Combiné esta poderosa herramienta con un programa llamado "OGV to FLV Converter 1.1" desarrollado por "Jean Claude". Este programa permite convertir de una manera extremadamente fácil nuestros video capturados desde el programa "RecordMyDesktop" a el formato de Adobe Flash FLV.

La instalación del programa "RecordMyDesktop" fué muy simple en Ubuntu Intrepid Ibex:
  • Verificamos que estén disponibles los programas necesarios:
    $sudo aptitude search zenity gnome-utils mencoder recordmydesktop gtk-recordmydesktop
  • Si es necesario, los instalamos:
    $sudo aptitude install zenity gnome-utils mencoder recordmydesktop gtk-recordmydesktop
  • Hasta el momento, hemos instalado el programa "RecordMyDesktop" y las dependencias de "OGV to FLV Converter 1.1". Descargamos el programa y lo instalamos:
    $cd /home/jgdu/
    $wget http://www.gnome-look.org/CONTENT/content-files/90837-Ogv%20to%20Flv%20Converter%20v1.1.tar.gz
    $tar xvvf 90837-Ogv\ to\ Flv\ Converter\ v1.1.tar.gz
    $cd ~/.gnome2/nautilus-scripts/
    $ mv Ogv\ to\ Flv\ Converter\ v1.1 .
    $sudo chmod +x Ogv\ to\ Flv\ Converter\ v1.1
  • Listo! ... ambos programas están instalados y listos para usar.
Para acceder el programa "RecordMyDesktop" podemos buscar una opción dentro del menú "Aplicaciones -> Sonido y video -> GTK-recordMyDesktop". Es muy intuitiva la interfaz del usuario por lo que no creo que amerite mayores explicaciones.

Luego de producir el video a partir del "RecordMyDesktop", ubicamos el archivo y con el puntero sobre él presionamos el botón del lado derecho del ratón y en el sub-menú "Scripts" encontraremos el acceso a "OGV to FLV Converter 1.1".

Para los que se sienten más cómodos con la interfaz de ventanas, aquí les dejo tres video de cómo instalar y usar los programas:
Éxitos!

José Gregorio.

FUENTES:
  • http://recordmydesktop.sourceforge.net/about.php
  • http://www.gnome-look.org/content/show.php/Ogv+to+Flv+Converter?content=90837
  • https://wiki.ubuntu.com/JeanClaude

jueves, 5 de marzo de 2009

Lighttpd: Un servidor web rápido!


En algún momento se me presentó la duda de qué clase de servidor Web podría estar usando un portal como “www.youtube.com”. Dentro de mi ilusión, pensé que debido a su popularidad “Apache2” podría ser la alternativa, sin embargo, desperté rápidamente cuando me enteré que era un servidor Web llamado “Lighttpd” o “Lighty” como lo llaman por cariño. (En esta dirección podrán confirmar la información http://highscalability.com/youtube-architecture)

Lighttpd es un servidor Web que he descubierto recientemente y me ha sorprendido su alto rendimiento, facilidad de configuración y cumplimiento de las necesidades típicas que se nos presentan a la hora de instalar una aplicación web.

Algunos de los requerimientos que se nos presentan son:
  • Administración de hosts virtuales.
  • Creación de “alias”.
  • Programación en PHP5.
  • Administración de archivos vía DAV.
  • Uso de certificados de seguridad con SSL.
Pues la sorpresa es que todas estas funciones están soportadas por “lighty” y lo mejor es que además de pertenecer a una de las creaciones de la comunidad de software libre, es realmente impresionante la rapidez con la que trabaja.

En este artículo se describen los pasos para instalar el “Lighttpd” así como configurar varias de sus funcionalidades principales.

1. Instalación de “Lighttpd”:

Suponemos que no tenemos instalado ningún otro servidor Web. En caso de tenerlo, al momento de instalarlo la se presentará un mensaje de error indicando que el puerto 80 está ocupado y no levantará a la primera.
#aptitude install lighttpd

2. Configuración de “PHP5” y el soporte para la base de datos “Mysql 5” en “Lighty”:
  • Instalamos “PHP5”:
    #aptitude install php5-cgi php5-common php5-mysql
  • Modificamos la configuración del “PHP5”:
    #vim /etc/php5/cgi/php.ini
  • Modificamos la línea:
    cgi.fix_pathinfo=1
    El archivo de configuración se encuentra en “/etc/lighttpd/lighttpd.conf”. Lo editamos para cargar el módulo “mod_cgi” y “mod_fastcgi”:
    #vim /etc/lighttpd/lighttpd.conf
  • Modificamos los siguientes parámetros:
    server.modules = (
    “mod_access”,
    “mod_alias”,
    “mod_accesslog”,
    “mod_compress”,
    “mod_cgi”,
    “mod_fastcgi”,
    # “mod_rewrite”,
    # “mod_redirect”,
    # “mod_status”,
    # “mod_evhost”,
    # “mod_usertrack”,
    # “mod_rrdtool”,
    # “mod_webdav”,
    # “mod_expire”,
    # “mod_flv_streaming”,
    # “mod_evasive”
    )
    Al final del archivo agregamos:
    ...
    fastcgi.server = ( “.php” => ((”bin-path” => “/usr/bin/php5-cgi”,”socket” => “/tmp/php.socket”)))
  • Reiniciamos el servicio Web:
    #/etc/init.d/lighttpd force-reload
3. Prueba del servidor Web:
  • Creamos el siguiente archivos en el directorio de páginas Web:
    # echo "" > /var/www/index.php
  • Verificamos la visualización de contenido visitando la página:
    http://localhost/index.php
Existen un conjunto de módulos que pueden ser activados a partir del archivo de configuración del “Lighty”. Entre ellos están “mod_rewrite”, “mod_status”, “mod_webdav” y “mod_flv_streaming”. Bastaría con estudiar un poco la finalidad de cada uno de ellos para explotar su capacidades.

En el siguiente enlace se pueden encontrar las diferencias entre configuraciones realizadas en Apache2 y Lighttpd:

http://www.onlamp.com/pub/a/onlamp/2007/04/05/the-lighttpd-web-server.html

Personalmente he probado “Lighttpd” en ambientes de concurrencia alta. Especialmente en aulas virtuales basadas en MOODLE y administradores de contenido Web como JOOMLA y el rendimiento en ambos casos ha mejorado de manera claramente importante.

Éxitos!

FUENTES:
http://www.saghul.net/blog/2007/08/14/howto-un-servidor-web-ligero-lighttpd-php5-mysql5/
http://chrisjohnston.org/2009/setting-up-a-llmp-stack-linux-lighttpd-mysql-php5-on-ubuntu-810
http://www.onlamp.com/pub/a/onlamp/2007/04/05/the-lighttpd-web-server.html
http://www.guatewireless.org/optimizando-el-servidor-web-apache-2-vs-lighttpd-1x/
http://www.guatewireless.org/lighttpd-instalacion-y-configuracion-del-web-server/

martes, 3 de marzo de 2009

APACHE2+DAV fácil


La configuración de un servidor web y su acceso puede realizarse de muchas formas.
A continuación, explico uno de los caminos más sencillos.

1. Nombres del servidor
  • Editar el archivo "/etc/hosts" agregando:
    ...
    127.0.0.1 sitio1
    127.0.0.1 sitio2
    ...
Con esto logramos que el servidor responda a los nombres "sitio1" y "sitio2" de manera local.

2. Instalación y configuración del servidor Web Apache2
  • Instalación de apache2 y PHP5
    • #aptitude install apache2 php5
  • Creamos los directorios para guardar las páginas:
    • #mkdir /var/www/sitio1
    • #mkdir /var/www/sitio2
    • #chown -R www-data.www-data /var/www/sitio1
    • #chown -R www-data.www-data /var/www/sitio2
  • Configuración del primer host virtual:
    • Crearemos un archivo por cada sitio virtual para mantener un mejor orden:
    • #vim /etc/apache2/sites-available/sitio1

ServerName sitio1
ServerAlias www.sitio1
DocumentRoot /var/www/sitio1

ErrorLog /var/log/apache2/sitio1/error.log
LogLevel warn
CustomLog /var/log/apache2/sitio1/access.log combined
ServerSignature On


  • Ahora configuramos el segundo:
    • #vim /etc/apache2/sites-available/sitio2

ServerName sitio2
ServerAlias www.sitio2
DocumentRoot /var/www/sitio2

ErrorLog /var/log/apache2/sitio2/error.log
LogLevel warn
CustomLog /var/log/apache2/sitio2/access.log combined
ServerSignature On

  • Creamos los directorios para los logs:
    • #mkdir /var/log/apache2/sitio1/
    • #mkdir /var/log/apache2/sitio2/
  • Habilitamos cada uno de los sitios:
    • #a2ensite sitio1
    • #a2ensite sitio2
  • Recargamos la configuración del servicio "Apache2":
    • #/etc/init.d/apache2 reload
4. Prueba de los "virtual hosts"
  • Creamos un par de páginas web para probar la configuración:
    • #echo "Este es el sitio 1." > /var/www/sitio1/index.html
    • #echo "Este es el sitio 2." > /var/www/sitio2/index.html
  • Con un explorador, navegamos a las direcciones:
    • http://sitio1
    • http://sitio2
5. Configuración del acceso vía DAV
  • El acceso vía DAV es alternativo al que proveen las cuentas locales del servidor.
  • Las cuentas locales pueden apoyarse en servicios como ssh, scp y ftp.
  • Los usuarios y claves de DAV pueden estar almacenados en un archivo.
  • Cargamos los módulos "dav" y "dav_fs" en el servidor apache2:
    • #a2enmod dav
    • #a2enmod dav_fs
  • Creamos un directorio para guardar el archivo de usuarios y claves para acceso vía DAV:
    • #mkdir /etc/apache2/dav-auth
  • Creamos el archivos con usuarios y claves correspondientes:
    • #htpasswd -c -m /etc/apache2/dav-auth/dav-auth-claves usuario1
    • #htpasswd -m /etc/apache2/dav-auth/dav-auth-claves usuario2
    • #chown root.www-data /etc/apache2/dav-auth/dav-auth-claves
    • #chmod 640 /etc/apache2/dav-auth/dav-auth-claves
  • Con esto hemos creado el archivo "dav-auth-claves" que contiene nombre de usuario y clave cifrada.
  • Configuramos los archivos "sitio1" y "sitio2" en "/etc/apache2/sites-available":
"/etc/apache2/sites-available/sitio1":

...
Alias /webdav /var/www/sitio1

DAV On
AuthType Basic
AuthName "Webdav del sitio 1"
AuthUserFile /etc/apache2/dav-auth/dav-auth-claves
Require valid-user

...

"/etc/apache2/sites-available/sitio2":

...
Alias /webdav /var/www/sitio2

DAV On
AuthType Basic
AuthName "Webdav del sitio 2"
AuthUserFile /etc/apache2/dav-auth/dav-auth-claves
Require valid-user

...

6. Probamos el acceso a los sitios vía DAV:
  • Para esta prueba podemos utilizar un programa de cónsola llamado "cadaver". Procedemos a su instalación:
    • #aptitude install cadaver
  • Ejecutamos la prueba para acceder al "sitio 1":
    • #cadaver http://sitio1/webdav
      ...ingresamos el usuario y la clave.
      Una vez dentro podemos ejecutar el comando "ls" para visualizar los archivos.
  • Ejecutamos la prueba para acceder al "sitio 2":
    • #cadaver http://sitio2/webdav
      ...ingresamos el usuario y la clave.
      Una vez dentro podemos ejecutar el comando "ls" para visualizar los archivos.
Es recomendable utilizar algún cliente para acceso DAV. Afortunadamente para el caso de Debian el sistema trae por defecto la opción de contectarse a un servidor vía "DAV".

En este punto tenemos un servidor web con dos hosts virtuales para ser accedidos vía DAV.

Éxitos!

FUENTES:

http://www.simplehelp.net/2008/12/16/how-to-setup-virtual-hosts-in-apache/
http://www.howtoforge.com/setting-up-webdav-with-apache2-on-debian-etch
http://www.apache2.org/
http://httpd.apache.org/docs/2.0/mod/mod_dav.html
http://lists.debian.org/debian-user-spanish/2008/11/msg00768.html

miércoles, 25 de febrero de 2009

Debian Etch + Mysql + Cambiar clave de root


Mysql Server es una de las bases de datos más difundida entre la comunidad de programadores de aplicaciones de diversa índole.

En GNU/Linux Debian, cuando instalamos por primera vez el servidor de base de datos Mysql Server, el usuario todo poderoso "root" se encuentra sin clave asignada.

Para acceder al servidor basta con ejecutar el comando:
  • mysql
... y estaremos dentro del servidor.

Existen varias formas de cambiar la clave del usuario "root", a continuación se muestran algunas que conozco y me parecen bastante prácticas:

Opción 1: Utilizando el programa "mysqladmin"

Esta es una de las maneras más sencillas y podemos identificar dos casos:
  • Cuando se cambia la primera vez:
    mysqladmin -u root password NuevaClave
    En este caso "NuevaClave" sería el nuevo valor de la clave.
  • El resto de las veces:
    mysqladmin -p -u root password NuevaClave2
    Dado que el usuario "root" ya tiene clave establecida, es necesario indicar que solicite clave con la bandera "-p". Ingresamos la clave vieja y se actualizará con el valor "NuevaClave2".
Opción 2: Utilizando instrucciones SQL
  • Ingresamos a la cónsola del servidor Mysql:
    mysql -u root -p
  • Una vez dentro de la cónsola, cambiamos la base de datos activa:
    use mysql;
  • Ingresamos la instrucción SQL para cambiar la clave del usuario "root":
    mysql> update user set password=PASSWORD("NuevaClave") where user='root';
    mysql> flush privileges;
    mysql> quit
Es prácticamente OBLIGATORIO realizar el cambio de la clave del usuario "root" en cualquier sistema recién instalado. De lo contrario estaríamos comprometiendo seriamente la seguridad del servidor.

Éxitos!

José Gregorio.

FUENTES:
  • http://www.cyberciti.biz/faq/mysql-change-root-password/

Debian Etch + Backports + Pidgin


Una de las razones para utilizar Debian en versiones estables como sistema operativo universal en mis proyectos es la amplia confianza que provee. Sin embargo, la otra cara de la moneda es que en ocasiones se dan actualizaciones en determinados programas y en los repositorios de Debian se mantienen versiones desactualizadas.

Una forma de poder utilizar versiones actualizadas de los programas sin comprometer de una forma radical la estabilidad del sistema operativo es utilizando los denominados "Backports" de Debian. Los "Backports" son un conjunto de paquetes precompilados la mayoría desde las ramas "testing" que como sabemos constituye el estado previo a la versión "estable" en el ciclo de vida de las versiones de Debian.

El portal oficial de "Backports" de Debian está disponible en esta dirección:
  • www.backports.org
Es altamente recomendable mantenerse informado de lo que ocurre en términos de seguridad en estos paquetes por lo que lo conveniente es suscribirse a la lista de correo:
  • backports-security-announce
Esta publicación explica cómo realicé la instalación del cliente de chat Pidgin que fué la evolución del proyecto "Gaim" en mi sistema Debian Etch.

PASO 1: Configurar el archivo "sources.list" de mi sistema.
  • Edité el archivo "/etc/apt/sources.list" agregando la siguiente línea:
    ...
    deb http://www.backports.org/debian etch-backports main contrib non-free
  • Actualicé el índice de archivos del repositorio:
    aptitude update
  • Instalé el programa para agregar las llaves correspondientes:
    aptitude install debian-backports-keyring
  • Actualicé el sistema:
    aptitude dist-upgrade
PASO 2: Instalar el programa "Pidgin".
  • De manera predeterminada, todos los backports están deshabilitados. Para realizar la búsqueda del programa "Pidgin" ejecuté el siguiente comando:
    aptitude -t etch-backports search pidgin
  • Una vez ubicado el programa, lo instalé:
    aptitude -t etch-backports install pidgin
PASO 3: Correr el programa "Pidgin".
  • Una vez instalado, el programa estará disponible en el grupo de programas correspondiente al sistema de escritorio que se esté utilizando.
  • En mi caso utilizo Xfce4 y se crea un grupo llamado "Internet" y hay un icono titulado "Cliente de mensajería de Internet Pidgin".
  • Finalmente configuré mi cuenta de gmail y voilá! ... tengo cliente de mensajería :D.
Como podemos ver, el truco está en saber cuando es conveniente usar un backport y cuando no.

Es importante destacar que estarán disponibles de manera predeterminada los paquetes oficiales del repositorio de Debian en la versión que estemos empleando pero si lo deseamos podremos consultar en el backport para saber si hay alguna versión más reciente.

Veamos el ejemplo del programa "Icecast2":
  • jgdu-laptop:/opt# aptitude show icecast2 |grep Versi
    RESPUESTA DEL COMANDO: "Versión: 2.3.1-5"
  • jgdu-laptop:/opt# aptitude -t etch-backports show icecast2 |grep Versi
    RESPUESTA DEL COMANDO: "Versión: 2.3.2-2~bpo40+1"
Como se puede apreciar la versión del repositorio estable es levemente inferior a la que se encuentra en el backport.

A experimentar con los "Backports" de Debian! :D

Éxitos!

José Gregorio.

FUENTES:
  • http://www.backports.org/dokuwiki/doku.php?id=instructions
  • http://packages.debian.org/etch-backports/pidgin