Per ridurre i tempi di risposta di un server LDAP è necessario indicizzare i DataBase utilizzati dal 389 Directory Server.
Questa operazione richiede due fasi distinte:
La configurazione di default del 389DS prevede la possibilità di abilitare le indicizzazioni sugli attributi:
aci cn entryusn givenName mail mailAlternateAddress mailHost member memberOf nsUniqueId ntUniqueId ntUserDomainId numsubordinates objectclass owner parentid seeAlso sn telephoneNumber uid uniquemember
Ai quali, per le esigenze specifiche di INFN-AAI vanno aggiunti gli attributi
edupersonaffiliation eduPersonAssurance edupersonentitlement edupersonprincipalname infncertsubjectdn infnkerberosprincipal infnlinkeduuid infnuuid isMemberOf l objectClass schacpersonaluniquecode schacPersonalUniqueID shacpersonaluniqueid shacuserstatus uidnumber gidnumber
E questo va fatto sia nella configurazione di default, sia nella configurazione di ogni DataBase creato nel 389 Directory Server (che viene normalmente creato con una configurazione degli indici basata sul default)
Si possono configurare questi indici aggiuntivi partendo dal file additional-default-indexes.ldif.txt.
Dopo aver opportunamente definito la variabile d'ambiente SEDE
SEDE=le ; export SEDE
potete tranquillamente usare il cut-and-paste per ottenere i file da dare in pasto ad ldapmodify
wget -O additional-default-indexes.ldif http://wiki.infn.it/_media/cn/ccr/aai/howto/additional-default-indexes.ldif.txt wget -O additional-infn-indexes.ldif http://wiki.infn.it/_media/cn/ccr/aai/howto/additional-default-indexes.ldif.txt wget -O additional-$SEDE-indexes.ldif http://wiki.infn.it/_media/cn/ccr/aai/howto/additional-default-indexes.ldif.txt
Una volta scaricati questi file, bisogna modificarli opportunamente.
sed -i 's/cn=default indexes,cn=config/cn=index,cn=infn-db/' additional-infn-indexes.ldif sed -i "s/cn=default indexes,cn=config/cn=index,cn=$SEDE-db/" additional-$SEDE-indexes.ldif
Viene da sè che nel caso abbiate definito un ulteriore DB "custom" locale, tale operazione va fatta anche per tale DB
CUSTOM=local ; export CUSTOM wget -O additional-$CUSTOM-indexes.ldif http://wiki.infn.it/_media/cn/ccr/aai/howto/additional-default-indexes.ldif.txt sed -i "s/cn=default indexes,cn=config/cn=index,cn=$CUSTOM-db/" additional-$CUSTOM-indexes.ldif
A questo punto siete pronti per inserire le definizioni dei nuovi indici nella configurazione del server
cat additional-*.ldif >> /tmp/indexes.ldif ldapmodify -a -ZZ -c -v -h `hostname` -D "cn=directory manager" -W -f /tmp/indexes.ldif
Una volta inserita la definizione degli indici nella configurazione del server, bisogna inizializzarli secondo quanto descritto in http://docs.redhat.com/docs/en-US/Red_Hat_Directory_Server/7.1/html/Administrators_Guide/index1.htm#1051480 ed in http://docs.redhat.com/docs/en-US/Red_Hat_Directory_Server/8.2/html/Configuration_and_Command-Line_Tool_Reference/Perl_Scripts.html#Perl_Scripts-db2index.pl_Create_and_generate_indexes
/usr/lib64/dirsrv/slapd-$DSID/db2index.pl -v -D "cn=Directory Manager" -w - -n infn-db /usr/lib64/dirsrv/slapd-$DSID/db2index.pl -v -D "cn=Directory Manager" -w - -n $SEDE-db /usr/lib64/dirsrv/slapd-$DSID/db2index.pl -v -D "cn=Directory Manager" -w - -n $CUSTOM-db
Il DB più pesante da indicizzare è l'infn-db. Su può seguire lo stato di avanzamento usando
tail -f /var/log/dirsrv/slapd-$DSID/errors
Una macchina virtuale con 2 GB di RAM e 4 CPU QEMU Virtual CPU version (cpu64-rhel6) @ 1995.060 MHz ci mette circa 10 minuti (il processo di indicizzazione è comunque legato ad una sola CPU)