Utilizo slapd para dar un servicio de directorio, la clásica agenda de contactos con email, teléfono y demás. Hace algunos años, cansado de tener que pasar de una a otra herramienta de gestión de contactos, según cambiaba de programa de correo (de mutt a pine; de pine a evolution; de evolution a thunderbird), decidí quedarme en el punto intermedio de todos ellos y, tras investigar un poco, éste resultó ser OpenLDAP.
Crear una estructura de directorio es sencillo (forat, cúrrate un howto ;)) y muy útil. Como, además, el servicio lastra muy poco el equipo donde está alojado, puede funcionar en máquinas no muy potentes, como es mi caso. A cambio, dispondremos de una agenda de contactos rápida, accesible desde la mayoría de clientes de correo (incluso Outlook Express) y fácil de gestionar y mantener. En mi caso era así, hasta hoy.
Hay ciertos servicios que, una vez los pones a funcionar, dejas de pensar en ellos y únicamente los utilizas, los conviertes en rutina. Por eso, cuando fallan (porque nada es infalible), la sensación de estupor es grande y no sabes por dónde empezar la batalla.
Hace dos días, slapd
decidió no arrancar más tras una actualización del equipo. El error que aparecía en syslog
era bastante feo, llegando a mencionar el sacrosanto backup, toda una osadía, en mi opinión.
slapd[18614]: backend_startup_one: starting "dc=midominio,dc=net"
slapd[18614]: bdb_db_open: database "dc=midominio,dc=net": dbenv_open(/var/lib/ldap/midominio.net).
slapd[18614]: bdb(dc=midominio,dc=net): Program version 4.8 doesn't match environment version 4.7
slapd[18614]: bdb_db_open: database "dc=midominio,dc=net" cannot be opened, err -30971. Restore from backup!
Tras bucear un rato por internet (aquí y aquí) entendí que las bases de datos que utiliza slapd tenían el formato Berkeley DB version 4.7 y, desde la última actualización, debían tener el formato Berkeley DB version 4.8. Para pasar de un formato a otro hacen falta un par de paquetes, uno por cada versión de la base de datos con que vamos a trabajar. Se instalan:
$ sudo aptitude install db4.7-util db4.8-util
El directorio de las bases de datos está definido en el fichero de configuración de slapd
(/etc/ldap/slapd.conf
) pero, por defecto es /var/lib/ldap/midominio.net
. Todas las modificaciones se harán sobre ese directorio y es conveniente, como siempre, hacer una copia de seguridad de los ficheros que vamos a tocar porque esta solución salió al tercer intento.
Lo primero es eliminar toda referencia a la versión 4.7 en los ficheros:
# db4.7_checkpoint -1 # escribe las transacciones pendienes
# db4.7_recover # deja la base de datos en un estado consistente
Y, una vez hecho esto, falta por restaurar la base de datos con la nueva versión del entorno, algo así como la nueva versión del gestor.
# db4.8_recover -e
Como los ficheros que se han tocado no pertenecen al programa que los va a usar, retoco permisos y propietario:
# chown openldap:openldap *
# chmod 600 *
Y, al reiniciar de nuevo slapd
, funciona sin más problemas.
3 ideas sobre “Recuperación de slapd (Program version 4.8 doesn’t match environment version 4.7)”
Anotado queda.
La parte de los comandos de recovery de las bases Berkeley db no las tenia fichadas, lo dicho muy útil.
Si señor, muy útil el post, es la típica cosa que cuando te pasa te puede dar más de uno, o dos, dolores de cabeza 😉
xsas, yo tampoco lo conocía, la verdad. Pero para eso están los errores desconocidos, para enseñarte nuevos y fantásticos programas :D. Por eso lo he escrito aquí, para tener una referencia la próxima vez que me pase (que pasará ;)).
dabo, ya sabes que siempre se puede contar con los servidores para sorprenderte sustos así.
saludos.