LDAP : haute disponibilité

J'ai un PC portable sous Linux (cela vous étonne ?) et cela m'ennuierai d'être séparé de mes chers contacts. 
Je pourrais, bien sûr, effectuer une copie locale des données. Cette opération est en général très simple à faire et est déclenchable dans les propriétés de l'annuaire de votre programme de mail favori  (Evolution et Thunderbird le font très bien). 
Mais, la nature humaine étant ce qu'elle est, on oublie la mise à jour ... et ... un seul être vous manque et tout est dépeuplé , qu'est ce que je raconte ? Il nous manquera toujours l'adresse de M. Untel dont on a un besoin urgent. 
La solution s'appelle "réplication". Il suffit d'installer un petit LDAP "local" et d'expliquer aux deux système que l'un est "Maître" et l'autre "Esclave". 
L'esclave interroge régulièrement le maître : 
"Maître avez-vous reçu des mises à jour depuis la dernière que vous m'avez fait l'honneur de me communiquer et qui portait le numéro NNN ? " 
Et le maître répond : "non esclave je n'ai aucune mise à jour " ou bien "Oui esclave j'ai des mises à jour, les voici ......". 
Grâce aux développeurs de OpenLdap il existe une possibilité toute simple de réaliser ce miracle. Quelques petites modifications dans les paramètres de configuration et ... le tour est joué. 
Modifications du "Maître"  
Dans le fichier "/etc/ldap/slapd.conf", oui oui, j'ai dupliqué le fichier avant d'y toucher : 
Au début du fichier de configuration il faut charger dynamiquement un module spécifique : 

moduleload syncprov 

Syncprov = Synchronization Provider ? 
Un peu plus loin dans le fichier, après la directive : 
"database        bdb" il faut ajouter les lignes suivantes : 

overlay syncprov 
syncprov-checkpoint 1 5 
replica host=MON_ESCLAVE:489 
        binddn="cn=root,dc=domaine,dc=net" 
        bindmethod=simple credentials="le_mot_de_passe_secret_de_root" 
        syncprov-reloadhint TRUE 

Cette petite manip permet au maître de savoir qu'il est maître de l'esclave nommé ici, les autres peuvent aller se faire voir ! 
Une fois "slapd" redémarré le maître est prêt. On n'est pas en SSL, ni sécurisé à mort, les mots de passe sont en clair dans le fichier ... on peut faire autrement, mais si c'est plus beau c'est aussi beaucoup plus difficile. Et puis le fichier de config n'est lisible que par "root" (c'est moi) et par le groupe "openldap" où je n'ai mis que le user du même nom. Et en plus les adresses dont je dispose ne sont pas classées "données sensibles", on admettra donc ce trou de sécurité. 

Modifications de l'esclave. 
Peu après la directive : 
"database bdb" il faut ajouter les lignes suivantes : 

syncrepl rid=007 
        provider=ldap://MON_MAITRE:489 
        type=refreshOnly 
        interval=00:02:00:00 
        searchbase="dc=domaine,dc=net" 
        filter="(objectClass=*)" 
        scope=sub 
        schemachecking=off 
        bindmethod=simple 
        binddn="cn=root,dc=domaine,dc=net" 
        credentials="le_mot_de_passe_secret_de_root" 

La petite zone "00:02:00:00" permet de régler la fréquence de la mise à jour (ici 2 heures) à la seconde près ! 
Dès le démarrage le client sait qu'il a un maître et va s'enquérir des nouveautés auprès de son maître. 

On peut même s'amuser à effectuer l'opération suivante ( SUR L'ESCLAVE !)  :

  1. Stopper "slapd", sur l'esclave je me répète
  2. Aller dans le répertoire "/var/lib/ldap/domaine.net"
  3. Y détruire tout (sauf le fichier DB_CONFIG), si on est bien sur la machine esclave !
  4. Relancer "slapd"

Et le miracle s'accomplit, l'annuaire est "rempli" de données toutes fraîches, c'est  m a g i q u e ! 

Donc comme cela les adresses de mon portable seront toujours "au top" car il est souvent branché sur le réseau au contact direct de son maître préféré. 
Le seul problème est que je ne peux pas saisir d'adresses sur le portable, j'ai d'ailleurs paramétré le client mail en lecture seule.