Mise à jour d'OpenLDAP 2.4 en 2.5 (passage à Debian Bookworm)
Cette mise à jour est assez impactante et mieux vaut s'y préparer.
Avant de commencer
- Si ce n'est pas déjà fait, faites la migration vers le backend MDB
- Installer check_slapdd_crc32
- Supprimer les anciennes sauvegardes automatique faites par dpkg :
rm -fri /var/backups/slapd-* /var/backups/*.ldapdb
- Vérifier l'espace disque disponible : la mise à jour va entraîner des sauvegardes automatiques des bases dans
/var/backups
:- les fichiers des bases existantes vont y être déplacés
- des dumps LDIF vont être créés dans un dossier nommé
/var/backups/slapd-[version slapd]
Mise à jour
Lancer la mise avec la commande :
apt install --upgrade slapd
Celle-ci va certainement poser problème et il faudra alors apporter les corrections suivantes :
- suppression des références aux backends BDB & HDB : supprimer le chargement des modules correspondant dans
/etc/ldap/slapd.d/cn=config/cn=module{0}.ldif
et les fichiers de configuration associés (s'ils sont présent) :sed -i '/back_[hb]db$/d' /etc/ldap/slapd.d/cn=config/cn=module{0}.ldif rm -i /etc/ldap/slapd.d/cn\=config/olcBackend\=*bdb.ldif /etc/ldap/slapd.d/cn\=config/olcBackend\=*hdb.ldif
- Module pw-argon2 : Le support des mots de passe argon2 est maintenant intégré dans _slapd core_ : si vous l'utiliser, après mise à jour il faudra :
sed -i 's/pw-argon2/argon2/' '/etc/ldap/slapd.d/cn=config/cn=module{0}.ldif'
- Module ppolicy : Le schéma _Ppolicy_ est fourni par le module (plus de schéma externe à charger) : si vous utiliser _ppolicy_, après mise à jour il faudra :
ppolicy_schema=$( ls /etc/ldap/slapd.d/cn\=config/cn\=schema/cn=*ppolicy.ldif 2> /dev/null ) if [[ -n "$ppolicy_schema" ]]; then rm -i "$ppolicy_schema" id=$( sed 's/.*cn={\([0-9]\+\)}.*/\1/' <<< "$ppolicy_schema" ) while true; do (( old_id=id+1 )) file=$( ls /etc/ldap/slapd.d/cn\=config/cn\=schema/cn=\{$old_id\}*.ldif 2> /dev/null ) [[ -z "$file" ]] && break sed -i -e "s/^dn: cn={$old_id}/dn: cn={$id}/" -e "s/^cn: {$old_id}/cn: {$id}/" "$file" new_file=$( sed "s/cn={$old_id}/cn={$id}/" <<< "$file" ) mv "$file" "$new_file" (( id++ )) done else echo "Ppolicy schema not found" fi
- Corriger les codes CRC dans la configuration d'OpenLDAP :
check_slapdd_crc32 -f
- Si la mise à jour de paquet à initialement échouée, les bases n'auront pas été restaurées. Il faudra alors :
DUMP_DIR=$( find /var/backups -type d -name 'slapd-*' ) for ldif in $DUMP_DIR/*.ldif do basedn=$( basename "$ldif" | sed 's/\.ldif$//' ) [[ "$basedn" == "cn=config" ]] && continue echo "$basedn" slapadd -b "$basedn" -q -l "$ldif" done chown -R openldap: /var/lib/ldap
- Vérifier ensuite que la configuration d'OpenLDAP est valide :
slaptest
- Si des problèmes persistes (en dehors des bases introuvables, cf. ci-dessous), corriger les avant de continuer (la doc officielle peux être utile pour cela).
- Pour finir, relancer le service :
service slapd restart
Après la mise à jour
- supprimer les fichiers laissés par la mise à jour :
rm -fri /var/backups/slapd-* /var/backups/*.ldapdb
- Module refint : Les multiples noms d'attributs dans
olcRefintAttribute
doivent être éclatés dans plusieurs valeurs de l'attribut : c'est non-bloquant, mais ça provoque des warnings. Si vous utilisé à faire après mise à jour via un ldapvi -p config) - Module dynlist : Le schéma a quelques peut évolué : l'attribut
olcDlAttrSet
a été déprécié en faveur de l'attributolcDynListAttrSet
et l'objectClassolcDynamicList
en faveur deolcDynListConfig
. La rétrocompatibilité est assurée, mais autant faire le changement tout de suite :find /etc/ldap/slapd.d/ \ -type f -name 'olcOverlay=*dynlist.ldif' \ -exec sed -e 's/olcDlAttrSet/olcDynListAttrSet/gi' -e 's/olcDynamicList/olcDynListConfig/gi' \{\} \;