informatique:reseau:ldap:migration_bdb_hdb_mdb

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 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.
  • informatique/reseau/ldap/migration_bdb_hdb_mdb.txt
  • Dernière modification : 2022/11/16 11:57
  • de bn8