dbconfig
Tengo ya varios proyectos entre manos que quiero (necesito más bien) empaquetar para Debian, y he visto en dbconfig-common una forma organizada y efectiva de tratar con bases de datos.
Las siguientes son notas que he ido tomando mientras intentaba usar este mecanismo en mis programas.
Tipos de bases de datos
Se crean dos categorías para las bases de datos de un aplicación:
persistentes
: aquellas que no pueden ser reconstruídas en su totalidad en caso de borrado de la base de datos, ó aquellas que si son eliminadas pueden causar graves trastornos de funcionamiento ó abrir agujeros en la seguridad. En esta categoría podemos incluir:- bases de datos relacionales
- directorios LDAP
- históricos y acumuladores
cachés
: son las bases de datos que sí pueden ser reconstruídas suficientemente tras su borrado, ó que no causan problemas de funcionamiento ó seguridad en el sistema si son eliminadas. Y podemos incluir las siguientes:- Respuestas de configuración de paquetes (
debconf
) - Localización de archivos (
locate
) - Direcciones DNS
- Lista de paquetes disponibles (
apt
)
- Respuestas de configuración de paquetes (
Las bases de datos persistentes, según la --fhs-- deben ir en
/var/lib/PACKAGENAME
, mientras que los cachés irán en
/var/cache/PACKAGENAME
.
Instalación de paquetes con bases de datos
Configuración automática
Tendremos en cuenta lo siguiente:
- Dado que el administrador de un sistema siempre sabe más que un programa se le debe proporcionar una forma de saltarse la configuración automática.
- Se deben incluir instrucciones de instalación manual de la base de datos en la documentación del paquete.
Instalación de la base de datos
En el paquete deben incluirse llamadas a los programas dbconfig-common
en los
scripts de instalación del paquete (config, postinst, prerm y postrm),
cargando primero las librerías de funciones, tal y como vemos en el ejemplo
con una base de datos --mysql--:
1 #!/bin/sh 2 # config maintainer script for mypackage 3 4 # source debconf stuff 5 . /usr/share/debconf/confmodule 6 7 # source dbconfig-common shell library, and call the hook function 8 if [ -f /usr/share/dbconfig-common/dpkg/config.mysql ]; then 9 . /usr/share/dbconfig-common/dpkg/config.mysql 10 dbc_go mypackage $@ 11 fi
dbc_go
es una función que ejecuta el código apropiado, basándose en el
script desde el que está siendo llamada. Se le pasan varios parámetros, el
nombre del paquete (mypackage
en el ejemplo), y todos los que ha recibido el
propio script.
Si el paquete no utiliza debconf será necesario instalar explícitamente el
script config
en él; la forma más sencilla es usar dh_installdebconf
en el
archivo debian/rules
.
Actualización de la base de datos
Borrado de la base de datos
Enlaces
Sean Finney es el mantenedor del paquete debian dbconfigcommon y dispone de unas referencias interesantes: