GConf, el sistema de configuración

Tabla de contenidos

Almacenes de datos
Clientes GConf
Notificaciones
Gestión de errores

Hasta hace muy poco (GNOME 1.4), el proyecto GNOME usaba, como medio de almacenamiento de la configuración de las aplicaciones, un formato de ficheros muy parecido a los famosos .INI de MS Windows. Este sistema, si bien cubre las necesidades de la mayor parte de aplicaciones (configuración local para un usuario local), no cubre las expectativas de un escritorio moderno en UNIX, donde las aplicaciones, mediante el sistema X Window, pueden ser ejecutadas en red.

Para solventar esta situación, era necesario que el sistema de configuración de las aplicaciones fuera fácilmente accesible desde cualquier máquina dentro de una red, de forma que un usuario tenga la misma configuración tanto en su ordenador personal, como cuando abre una sesión con su usuario en el servidor de la oficina. Esto sólo se podía solucionar con una herramienta de configuración distribuida, y eso es lo que hace GConf.

Según la propia definición del autor, GConf "es un sistema para almacenar información de configuración, lo que comunmente se conoce por parejas clave/valor". Aparte de esta funcionalidad básica de almacenamiento, GConf ofrece muchos adelantos con respecto a su antecesor (gnome_config), como por ejemplo su sistema de notificación, que permite a una aplicación permanecer a la escucha de los cambios que se hagan en determinadas partes de la configuración. Además, destaca tambien la flexibilidad de su arquitectura, que permite cambiar fácilmente el almacen de datos (es decir, la manera y el lugar en que se almacena la información), o incluso usar varios a la vez, o la posibilidad de que cada entrada en la base de datos (o sea, cada clave), tenga asociado un texto descriptivo, lo que facilita enormemente la labor del usuario, pues cada entrada está perfectamente documentada.

GConf, como no podía ser menos al formar parte del proyecto GNOME, está basado en CORBA, lo cual permite el acceso totalmente transparente a la configuración de las aplicaciones, tanto en entornos locales como distribuidos. Su arquitectura está basada en tres elementos principalmente:

La información en GConf se guarda en forma de árbol, de la misma forma en que se organizan los discos con sus ficheros y directorios. Así, las siguientes cadenas son entradas válidas en GConf:

      /aplicaciones/evolution/correo/servidor
      /aplicaciones/gnome/escritorio/tapiz
    

Siguiendo con la analogía con los discos, se podría decir que la base de datos de GConf se divide en ficheros (una clave que contiene un valor) y directorios (una lista de otros ficheros y directorios).

GConf sólo admite un conjunto limitado de tipos de datos, principalmente numéricos (entero, coma flotante), cadenas y valores lógicos (booleanos). Hay otros tipos especiales, como las listas, que permiten almacenar una lista de valores bajo una clave única, o los esquemas, que son tipos especiales que permiten almacenar información acerca de una clave de la base de datos, como su documentación asociada, etc

Almacenes de datos

Como comentábamos antes, GConf permite fácilmente cambiar el modo de almacenamiento de los datos. El demonio gconfd, cuando arranca, lee el fichero /etc/gconf/path, en el que se almacena una lista de las fuentes de configuración que queremos tener disponibles para GConf. Así, un ejemplo de este fichero podría ser:

	# GConf configuration path file with an include statement
	xml:readonly:/etc/gconf.xml.mandatory
	include "$(HOME)/.gconf.path"
	xml:readonly:/etc/gconf.xml.defaults
	# imaginary, no LDAP backend exists right now
	ldap::/foo/bar/whatever/ldap/address
      

En este fichero se especifican todas las fuentes de datos que queremos tener disponibles, de forma que cuando pidamos el valor correspondiente a una clave, GConf buscará por todas las fuentes especificadas en este fichero hasta que encuentre una. Cuando establecemos un valor, GConf usa la primera fuente que encuentre en la que tengamos permiso de escritura. Así, en el ejemplo que hemos visto, se puede observar que como primera fuente ponemos un fichero XML, de sólo lectura, en el que están almacenadas las claves que no queremos que puedan ser cambiadas por los usuarios (pues siempre serán leidas antes que las personales del usuario, por lo que serán esos valores los que se usen siempre). Seguidamente, aparece la directiva include que, en este caso, incluye el fichero .gconf.path que pudiera tener el usuario que activa GConf en su directorio $HOME. Finalmente, vemos que aparece otra fuente de datos XML, tambien de sólo lectura, en la que se almacenan los valores por defecto, de forma que los usuarios tuvieran un conjunto de valores por defecto la primera vez que usen GConf. Tambien vemos una fuente de datos LDAP, que, como dice el comentario en el fichero, aun no puede usarse (más que nada porque aun no ha sido implementado un "backend" que permita el acceso a servidores LDAP). Pero es un buen ejemplo para mostrar las posibilidades que nos ofrece GConf a la hora de distribuir la configuración de nuestros usuarios, permitiéndonos de este modo almacenar la información donde más nos guste, sin que esto afecte a las aplicaciones, pues éstas seguirán usando un único interfaz (GConf) para el acceso a los datos. Igual que se añade en este ejemplo una fuente de datos LDAP, se podría estar usando cualquier otra que estuviera disponible en GConf, como una base de datos SQL, un fichero remoto, etc. De momento, como decíamos antes, sólo está disponible el "backend" XML, aunque ya está en desarrollo otro basado en Berkeley DB.

La escritura de nuevos "backends" es muy sencilla, por lo que esperamos que, según se vaya asentando GConf en la plataforma de desarrollo GNOME, irán apareciendo nuevos "backends" que nos permitirán usar todo tipo de almacenes de datos para nuestra configuración, permitiendo así la adaptación del sistema a cualquier entorno.