domingo, 2 de mayo de 2010

Debian Lenny: Dos teclados al mismo tiempo


Recientemente me topé con la necesidad de poder configurar un teclado adicional en mi laptop HP-COMPAQ nx6115.

Este laptop es mi caballo de batalla y afortunadamente viene con tres puertos USB. Precisamente a través de uno de estos puertos es que instalaré un teclado adicional marca Genius modelo KB-06XE (K639).

Como no me gusta estar usando teclados deficientemente configurados, es decir, cuyas etiquetas de las teclas dicen una cosa y "de memoria" las presiono para que hagan otras, entonces decidí que cada uno de los teclados debía mantener simultáneamente sus layouts correspondientes.

En mi caso, el teclado del laptop tiene una configuración latinoamericana (latam) y el teclado Genius tiene otra configuración en español (es).

Luego de investigar un poco, encontré que una vía era a través de "evdev" que es un controlador de entrada para el servidor X11 X.ORG. Este controlador intermedio, permite que los periféricos de entrada se comuniquen de una forma directa con los controladores expuestos por el kernel.

Entonces ya tenía prácticamente esta batalla ganada ya que sabía que se trataba de una configuración en el X.ORG en donde especificara cómo manejaría cada uno de los teclados considerando sus comportamientos particulares.

Para ello edité el archivo "/etc/X11/xorg.conf" de la siguiente manera:

1. En la sección "Server Layout" agregué la definición de un nuevo dispositivo:
  • Section "ServerLayout"
  • Identifier "aticonfig Layout"
  • Screen 0 "aticonfig-Screen[0]-0" 0 0
  • InputDevice "TecladoUsbGenius" "SendCoreEvents"
  • EndSection
2. Agregué una opción en "ServerFlags" que en mi caso no existía y la creé:
  • Section "ServerFlags"
  • Option "AutoAddDevices" "false"
  • EndSection
3. Agregué la configuración del nuevo teclado (Genius):
  • Section "InputDevice"
  • Identifier "TecladoUsbGenius"
  • Driver "evdev"
  • Option "Protocol" "evdev"
  • Option "XkbRules" "xorg"
  • Option "XkbModel" "pc105"
  • Option "XkbLayout" "es"
  • Option "Device" "/dev/input/event2"
  • EndSection
Se puede apreciar tres detalles importantes:
  1. Se indica el "driver" que administrará las "señales" de este dispositivo.
  2. El layout para este teclado es "es" que significa español.
  3. El dispositivo reconocido por el sistema operativo está identificado como el evento "event2".
Para saber a qué evento está asociado el teclado ejecuté el siguiente comando:
  • jgdu-laptop:/etc/X11# ls -l /dev/input/by-id/
  • total 0
  • lrwxrwxrwx 1 root root 9 2010-05-02 22:13 usb-04f3_0103-event-kbd -> ../event2
  • lrwxrwxrwx 1 root root 9 2010-05-02 19:41 usb-Cypress_Sem_PS2.USB_Browser_Combo_Mouse-event-mouse -> ../event1
  • lrwxrwxrwx 1 root root 9 2010-05-02 19:41 usb-Cypress_Sem_PS2.USB_Browser_Combo_Mouse-mouse -> ../mouse0
Como se puede apreciar, el teclado Genius está asociado al "event2".

Finalmente, reinicié el servidor X presionando "CTRL+BackSpace" y ...VOILÁ! ... quedó configurado el teclado Genius conectado vía USB.

Lo interesante de todo esto es que el comportamiento del teclado del laptop quedó exactamente igual que antes y de manera simultánea pude escribir tanto en un teclado como el otro respetando el layout de cada uno de ellos.

Espero sea de utilidad.

Éxitos!

José Gregorio.

Referencias
  1. http://es.wikipedia.org/wiki/Evdev
  2. http://www.xfree86.org/current/XKB-Config2.html
  3. https://doc.ikw.uni-osnabrueck.de/node/3172

miércoles, 28 de abril de 2010

Eprints con GNU/Linux Debian Lenny

Recientemente vengo trabajando en un proyecto relacionado con el almacenamiento digital de recursos y objetos de aprendizaje. Es algo así como una biblioteca digital en línea que permite catalogar los materiales según taxonomías específicas tales como Dublin Core y LOM IEEE.

Desde el mundo del software libre, se ofrecen varias alternativas interesantes para cumplir esta misión.

Algunos sistemas disponibles son:

  • Eprints.
  • DSpace.
  • Drupal.
En este artículo voy a describir cómo realizar la instalación básica del sistema "Eprints" para uso local en mi GNU/Linux Debian Lenny. Mi elección se basa en que está desarrollado en PERL y entiendo que es un lenguaje muy poderoso en la gestión de cadenas y búsquedas.

Paso 0: preliminares.

"Eprints" es un sistema que requiere entre otras dependencias un servidor MySql.

Durante la instalación, se solicitará el nombre de usuario y clave de acceso para crear una base de datos asociada al repositorio que se crea.

Para resolver las dependencias, el camino más práctico es lograr instalar a partir de algún repositorio vía "aptitude".

Paso 1: instalar "eprints".

Como buen aprendiz, primero busqué si existía la posibilidad de instalar a partir de los repositorios oficiales.

Pese a que no está disponible en los repos oficiales, si está disponible en una rama publicada en "www.eprints.org".

Entonces lo primero es agregar las siguientes líneas a nuestro "sources.list":
  • # vim /etc/apt/sources.list
  • ...
  • deb http://deb.eprints.org/3.2/ stable/
  • deb-src http://deb.eprints.org/3.2/ source/
  • ...
  • # aptitude update
  • (por si acaso tenemos alguna actualización pendiente)
  • # aptitude safe-upgrade
Esto permitirá la instalación de "Eprints" a partir del gestor de programas "aptitude".

Paso 2: configurar nombre del repositorio local.

"Eprints" crea los repositorios de manera individual identificándolos a partir de subdominios como por ejemplo "mirepo.localdomain", "turepo.dominio.com", etc. De aquí podemos inferir que "Eprints" trabaja con nuestro servidor web a partir de hosts virtuales.

Dado que mi repositorio es para pruebas y no estará expuesto a otras PC, bastará con configurar un nombre cualquiera en mi sistema local.

Para lograr esto, editamos el archivo "hosts":
  • # vim /etc/hosts
  • ...
  • 127.0.0.1 mirepositorio.localdomain
  • ...
Con esta configuración, podré acceder desde el navegador de páginas web en mi laptop el repositorio que crearé.

Entonces, cada vez que "Eprints" pregunte alguna información referente al URL del repositorio deberemos indicar "mirepositorio.localdomain". De la misma manera, si el sistema se mantiene local entonces podemos indicar como correo "admin@mirepositorio.localdomain".

Paso 3: crear el repositorio "mirepositorio".

Para crear el primer repositorio es necesario asumir la identidad del usuario "eprints" creado durante el proceso de instalación. Luego, debemos ejecutar un script que trae "Eprints" para crear fácilemente repositorios:
  • # su eprints
  • $ cd
  • ./bin/epadmin create
Se puede crear el repositorio sin mayores dificultades respondiendo con las respuestas predeterminadas que sugiere el script de instalación. Para hacer esto, basta con presionar "ENTER" y estar atento al valor encerrado entre corchetes ([valor]) que indica la respuesta predeterminada.

A continuación algunas consideraciones importantes:
  • El nombre del repositorio será "mirepositorio.localdomain".
  • El correo electrónico asociado al repositorio es "admin@mirepositorio.localdomain".
  • Tener a la mano un usuario y clave del servidor MySQL que permita la creación de una base de datos.
  • Tomar nota del usuario "admin" y clave de acceso para administrar el repositoio "mirepositorio.localdomain".
Paso 4: habilitar el sitio "eprints".

Una vez creado el repositorio "mirepositorio.localdomain", también se habrán creado los archivos correspondientes al host virtual.

Para configurar el host virtual "mirepositorio.localdomain" es necesario habilitar el sitio web "eprints" ubicado en "/etc/apache2/sites-available/eprints".

Bastará con ejecutar el siguiente comando con privilegios de "root":
  • # a2ensite
  • Your choices are: default default-ssl eprints3 eprints3-viejo
    Which site(s) do you want to enable (wildcards ok)?
  • eprints
  • Enabling site eprints3.
    Run '/etc/init.d/apache2 reload' to activate new configuration!
  • /etc/init.d/apache2 restart
En este momento ya está disponible el repositorio y es accesible a través de un explorador web instalado en mi laptop en la dirección:
  • http://mirepositorio.localdomain
Espero sea de utilidad.

Éxitos!

Referencias
  1. http://www.youtube.com/watch?v=ycPUHjZPJXI
  2. http://wiki.eprints.org/w/Installing_EPrints_3_via_apt_(Debian/Ubuntu)
  3. http://wiki.eprints.org/w/Debian_Known_Issues

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.