====== Migration BDB/HDB vers MDB ======
**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 [[https://gogs.zionetrix.net/bn8/check_slapdd_crc32|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 :
* On renomme le fichier //olcDatabase={1}hdb// ou //olcDatabase={1}bdb// en tant que //olcDatabase={1}mdb// : 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'
* On adapte le fichier //olcDatabase={1}mdb.ldif// :
* **dn et olcDatabase :** changer //hdb// (ou //bdb//) en //mdb// : sed -i 's/{1}[hb]db/{1}mdb/' 'olcDatabase={1}mdb.ldif'
* **objectClass et structuralObjectClass :** changer //olcHdbConfig// (ou //olcBdbConfig//) en //olcMdbConfig// : sed -i 's/olc[HB]dbConfig/olcMdbConfig/g' 'olcDatabase={1}mdb.ldif'
* **olcDbCheckpoint :** conserver en l'état
* supprimer les lignes des attributs suivants:
* ''olcDbCacheFree''
* ''olcDbCacheSize''
* ''olcDbChecksum''
* ''olcDbConfig''
* ''olcDbCryptFile''
* ''olcDbCryptKey''
* ''olcDbDNcacheSize''
* ''olcDbDirtyRead''
* ''olcDbIDLcacheSize''
* ''olcDbLinearIndex''
* ''olcDbLockDetect''
* ''olcDbPageSize''
* ''olcDbShmKey''
* ajouter la ligne ''olcDbMaxSize: 1073741824''
* On vérifie la nouvelle configuration :
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 :
* Stopper OpenLDAP
* Exporter au format LDIF les données de l'annuaire
* Mettre en place la nouvelle configuration
* Supprimer et réimporter les données de l'annuaire
* Relancer OpenLDAP
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/
Si vous aviez un cron de purge des logs binaires //BDB//, pensez à le supprimer.