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.

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