_______ Feed on Posts or Comments

Category Archivelinux



linux & spanish Franchu on 22 Jun 2007

Instalación de un servidor LDAP

Hace un tiempo me propuse instalar un servidor LDAP para dar acceso estandar a la información contenida en una base de datos y permitir la autenticación de los usuarios almacenados en ella.

A priori puede parecer que esta solución trata de matar moscas a cañonazos, pero cobra sentido cuando se tiene en cuenta que la estructura de la base de datos a nivel de tablas de MySQL roza la calificación de infernal y que hay cerca de 5000 usuarios a los que dar acceso. Hacer una restructuración de la base de datos no es factible, ya que está generada dinámicamente con por un framework de desarrollo web llamado Makumba.

Entre las características de Makumba, están la facilidad y rapidez de desarrollo de aplicaciones web con funcionalidad CRUD permitiendo la definición de la estructura de la base de datos en un simple fichero de texto, y mostrar listas y formularios autoformateados por medio de unos tags dentro del código JSP de la página. Esto que ahora parece totalmente normal y lo proporcionan muchos otros frameworks como puede ser RoR (Ruby on Rails) que tan de moda está últimamente; era totalmente innovador en el año 2000 cuando se empezó a desarrollar.

Una vez explicada la necesidad de implementar un servicio LDAP para facilitar la autenticación de los usuarios en distintos servidores y servicios, era necesario elegir un servidor LDAP. La opción clara era OpenLDAP por poder ejecutarse sobre linux, tener una larga historia de desarrollo, una comunidad activa y un gran número de instalaciones con éxito.

Llegados a este punto, en el que tenemos datos en una base de datos MySQL y un servidor OpenLDAP, es necesario plantearse cómo mantener sincronizadas las bases de datos de ambos servicios. La solución lógica y natural sería emplear la base de datos de MySQL sobre la que Makumba trabaja como backend para el servidor LDAP, así que me lancé a implementar esa solución gracias al backend SQL que incorpora OpenLDAP.

Tras varios intentos, noches en vela y muchas horas mirando a ver cómo lo habían hecho otros, llegué a la conclusión de que se necesita una estructura de tablas muy estricta para hacerlo funcionar y la necesidad de crear un índice en una tabla especial para el servidor OpenLDAP, lo que lo hace dificil de mantener cuando los datos de los usuarios cambian con cierta frecuencia. La solución era pues, totalmente inviable sin el uso de vistas que por entonces MySQL no soportaba (version < 5.0). Luego apareció el soporte para vistas, pero como no existía un paquete estable de debian, por política de empresa no se podía instalar... había pues que esperar para poder seguir investigando esta solución para un entorno de producción.

Entonces, me encontré con una solución Java para un servidor LDAP con un backend MySQL de forma nativa. Esta "solución" se llama Penrose y tras intentarlo con ello, descubrí una vez más que de lo que pone en la página web a lo que realmente funciona va un trecho. Mi problema era que a la hora de hacer la query para obtener la información, en vez de realizar las uniones de tablas en la base de datos, obtenían todos los datos de la tabla y realizaban las uniones y aplicaban las condiciones en Java, con lo cual cada solicitud al servidor Java se eternizaba. Una vez más con una estructura de tablas favorable, la solución funciona, pero como interfaz para enmascarar la complejidad de la base de datos falla estrepitosamente. Solicité a los chicos de Safehaus que mejorasen la política de queries para que se ejecuten en la base de datos en vez de en la parte Java, pero el bug sigue estando ahí en el sistema Jira que utilizan y lo van pasando de versión… desde el 2005 creo que ya está bien!

Cuando por fin salió Debian Etch, y ya tuvimos un paquete de MySQL 5.0 disponible, volví a intentarlo con el backend SQL de OpenLDAP. Tras crear las vistas para que fuesen como una tabla simple y tener el sistema más o menos funcional, los tiempos de acceso a los datos eran muy malos (aproximadamente 30 segundos para recuperar un registro) lo que lo hacía totalmente inviable para operaciones de autenticación.

Así pues, una vez descartadas las soluciones disponibles para usar la misma base de datos, decidí exportar la información que me interesaba de la base de datos de MySQL a formato LDIF e importarlo en el servidor LDAP. Repitiendo este procedimiento periodicamente, mantengo las bases de datos sincronizadas la mayoría del tiempo. Sin embargo esto no es lo suficientemente bueno para alguna información que depende de forma crítica con el tiempo (eg. passwords). En el caso de que un usuario cambie su contraseña, no va a entender que se cambie en algunos servicios de forma instantánea y en otros tenga que esperar.

Para resolver esto, he añadido unos triggers en la base de datos de MySQL (ahora que tenemos una versión 5.0 :)) que llaman a un script en python que actualiza la información modificada en el servidor LDAP.

Ahora con el LDAP funcionando, ya se puede pensar en montar más servicios… servidor Jabber con provisión de cuentas contra el LDAP, ACL en webs contra el LDAP, etc…

english & linux Franchu on 11 Apr 2007

Solaris 10 on a MacBook Pro

Today I received the free CDs of the Solaris 10 OS by Sun Microsystems that I had ordered on 22/01/07. That same day I got in my e-mail a confirmation that said:

We have received your request for a free Solaris 10 and Developer Tools DVD Software Kit. Please allow at least 10 business days for your kit to arrive to the mailing address you provided. Please also note there are some countries Sun cannot ship media to.

Well… it seems it took a bit longer :)

Anyway, now I have at home a wonderful box with three original Solaris 10 DVDs:

  • Solaris 10 Operating System - SPARC DVD
  • Solaris 10 Operating System - x86 DVD
  • Developer Tools - Sun Studio 11, Sun Java Studio Creator 2 Update 1, Sun Java Studio Enterprise 8, NetBeans 5.0

In order to try it, I have installed it as a virtual machine in Parallels in my MacBook Pro. The installation was very easy and straightforward: New VM –> OS Type: Solaris 10 –> You set up the drive size and memory allocated to the VM, and then the installation starts from the DVD :)

Then the installation is menu based, and by leaving the default options the installations proceeds flawlessly :)

After the installation finishes, if you want to enable the X11 server, just follow the instructions that I found in one of the Parallels forums:

/usr/X11/bin/xorgconfig
and then the following entries (the –> denotes my comments - don’t type these
[ENTER]
5 –> PS/2 Mouse
Y –> emulate 3 button mouse
[ENTER] –> default for /dev/kdmouse
7 –> Generic 104-Key PC
87 –> UK Keyboard
[ENTER] –> for keyboard variant
n –> additional XKB options
[ENTER]
6 –> Non-interlaced SVGA 1024×768
2 –> 50-90 vertical sync rate
apple20 –> identifier for your monitor
y –> yes, you would like to look at the card database
0 –> Generic Vesa compatible option
[ENTER] –> to continue
5 –> 4096K of memory
ati1600 –> identifier for you graphics card
4 –> the modes are ok
4 –> 16 bits
then say Y to write to /etc/X11.conf

Afterwards you just need to reboot, and you have a fully operation Solaris10 VM :)

You can see two screenshots I have taken, one of the login window, and another one of the desktop.

I will keep writing about it when I’ll discover more interesting things :)

english & linux Franchu on 05 Nov 2006

Recovering GRUB in Ubuntu

I have already found myself twice in the situation that after having to re-install Windows in a machine that had dual-boot with Ubuntu, the windows installer messes up with the MBR and it is not possible to access Ubuntu anymore.
As I always spend quite a lot of time remembering where I saw the easy solution, I decided to write it down myself in a place I would have always at hand.
The instructions should work in other linux flavors and specially in any Debian based distro.
Continue Reading »