Postulat de départ : vous avez un database configurée en tant que olcDatabase={1}hdb,cn=config et utilisant le backend HDB (ou un database configurée en tant que olcDatabase={1}bdb,cn=config et utilisant le backend BDB) et vous voulez passez sur une base utilisant le backend MDB.
Pré-requis : Installer le script check_slapdd_crc32 pour corriger le CRC32 des fichiers de configuration d'OpenLDAP.
Il faut d'abord charger le module back_mdb :
ldapmodify -Y EXTERNAL -H ldapi:/// << EOF dn: cn=module{0},cn=config changetype: modify add: olcModuleLoad olcModuleLoad: back_mdb EOF
On sauvegarde et prépare une copie de la configuration d'OpenLDAP :
rsync -av /etc/ldap/slapd.d/ /etc/ldap/slapd.d.bkp/ check_slapdd_crc32 -f rsync -av /etc/ldap/slapd.d/ /etc/ldap/slapd.d.new/
On migre la configuration :
cd '/etc/ldap/slapd.d.new/cn=config' # Pour HDB : [ -e 'olcDatabase={1}hdb.ldif' ] && mv 'olcDatabase={1}hdb.ldif' 'olcDatabase={1}mdb.ldif' [ -d 'olcDatabase={1}hdb' ] && mv 'olcDatabase={1}hdb' 'olcDatabase={1}mdb' # Ou pour BDB : [ -e 'olcDatabase={1}bdb.ldif' ] && mv 'olcDatabase={1}bdb.ldif' 'olcDatabase={1}mdb.ldif' [ -d 'olcDatabase={1}bdb' ] && mv 'olcDatabase={1}bdb' 'olcDatabase={1}mdb'
sed -i 's/{1}[hb]db/{1}mdb/' 'olcDatabase={1}mdb.ldif'
sed -i 's/olc[HB]dbConfig/olcMdbConfig/g' 'olcDatabase={1}mdb.ldif'
olcDbCacheFree
olcDbCacheSize
olcDbChecksum
olcDbConfig
olcDbCryptFile
olcDbCryptKey
olcDbDNcacheSize
olcDbDirtyRead
olcDbIDLcacheSize
olcDbLinearIndex
olcDbLockDetect
olcDbPageSize
olcDbShmKey
olcDbMaxSize: 1073741824
check_slapdd_crc32 -p /etc/ldap/slapd.d.new/ -f slaptest -F /etc/ldap/slapd.d.new/ slapschema -F /etc/ldap/slapd.d.new/ -b cn=config
Maintenant que la configuration est préparer, on va :
Cela devrait être assez rapide, tout dépends de la taille de l'annuaire LDAP :
DB_DIRECTORY=$( grep -iE '^olcDbDirectory: ' '/etc/ldap/slapd.d.new/cn=config/olcDatabase={1}mdb.ldif'|sed 's/^olcDbDirectory: //' ) echo "DB directory: $DB_DIRECTORY" [ -n "$DB_DIRECTORY" -a -d "$DB_DIRECTORY/" ] && \ service slapd stop && \ slapcat -n1 > /tmp/ldif && \ rsync -av --delete /etc/ldap/slapd.d.new/ /etc/ldap/slapd.d/ && \ rm -f $DB_DIRECTORY/*.bdb $DB_DIRECTORY/DB_CONFIG $DB_DIRECTORY/__db.* $DB_DIRECTORY/log.* $DB_DIRECTORY/alock && \ slapadd -n 1 -q -l /tmp/ldif && \ chown openldap: -R $DB_DIRECTORY && \ service slapd start
Si tout est ok, vous pouvez supprimer les sauvegardes :
rm -fr /tmp/ldif /etc/ldap/slapd.d.bkp/ /etc/ldap/slapd.d.new/