Dépannage
Liste de contrôle (checklist)
La liste de contrôle suivante peut aider à identifier un problème ou au moins obtenir une piste d’investigation.
1. |
Utiliser l’outil slaptest pour vérifier les configurations avant de démarrer le service "slapd". |
[root@ldap01 cn=config]# slaptest -f slapd.1.conf
config file testing succeeded
Exemple d’un problème de configuration :
[root@ldap01 cn=config]# slaptest -f slapd.tmp
59d777ce slapd.tmp: line 28: unknown directive <xxxxx> inside
backend database definition.
slaptest: bad configuration file!
[root@ldap01 cn=config]#
Exemple en mode "debug" :
[root@ldap01 cn=config]# slaptest -f slapd.1.conf -d 256
bdb_back_initialize: Sleepycat Software: Berkeley DB 4.2.52:
(December 3, 2003)
hdb_back_initialize: Sleepycat Software: Berkeley DB 4.2.52:
(December 3, 2003)
bdb_db_init: Initializing BDB database
bdb_db_open: db_open(./db.1.a/id2entry.bdb) failed: No such file
or directory (2)
backend_startup: bi_db_open failed! (2)
slap_startup failed (test would succeed using the -u switch)
2. |
Si impossibilité de démarrer le service, alors utiliser directement le binaire de l’application en mode "debug". |
/usr/sbin/slapd -d1
Voici un exemple du résultat de cette commande :
# Output
ldap_url_parse_ext(ldap://localhost/)
ldap_init: trying...
Activer le mode "debug"
Ce mode sera utilisé le plus souvent lorsqu’il est impossible de démarrer le service "slapd".
Il y aura donc deux manières de faire :
1. |
En lançant directement le binaire. |
/usr/sbin/slapd -d 1 >/tmp/slapd.debug 2>&1
# Ou en spécifiant le répertoire de configuration
/usr/sbin/slapd slapd -F /etc/openldap/slapd.d -d 255
2. |
En modifiant le fichier /etc/sysconfig/ldap. |
# Options of slapd (see man slapd)
SLAPD_OPTIONS=-d1
3. |
Puis redémarrer le service "slapd". |
Activer et modifier la verbosité des logs
En cas de problème et donc lors de recherche de pannes, il peut s’avérer utile d’activer la journalisation des événements (on parle plus généralement de niveau de verbosité des logs) du processus "slapd" et de lui spécifier des évènements spécifiques à rechercher.
Ceci peut être réalisé dynamiquement grâce au mécanisme de configuration dynamique (OLC), en accédant à la branche dn : cn=config du DIT de configuration de l’annuaire OpenLDAP.
dn: cn=config
objectClass: olcGlobal
cn: config
olcAllows: bind_v2
olcArgsFile: /var/run/openldap/slapd.args
olcAttributeOptions: lang-
olcAuthzPolicy: none
olcConcurrency: 0
olcLocalSSF: 71
olcLogLevel: 0
...
...
olcToolThreads: 1
olcWriteTimeout: 0
Ensuite, il faudra utiliser l’attribut olcLogLevel afin d’activer le mode "debug" et de lui spécifier les événements prédéterminés à journaliser (ou logguer) ainsi référencés dans le tableau ci-dessous :
Niveau |
Mots-clés |
Description |
-1 |
any |
enable all debugging |
0 |
no debugging |
|
1 |
(0x1 trace) |
trace function calls |
2 |
(0x2 packets) |
debug packet handling |
4 |
(0x4 args) |
heavy trace debugging |
8 |
(0x8 conns) |
connection management |
16 |
(0x10 BER) |
print out packets sent and received |
32 |
(0x20 filter) |
search filter processing |
64 |
(0x40 config) |
configuration processing |
128 |
(0x80 ACL) |
access control list processing |
256 |
(0x100 stats) |
stats log connections/operations/results |
512 |
(0x200 stats2) |
stats log entries sent |
1024 |
(0x400 shell) |
print communication with shell backends |
2048 |
(0x800 parse) |
print entry parsing debugging |
16384 |
(0x4000 sync) |
syncrepl consumer processing |
32768 |
(0x8000 none) |
only messages that get logged whatever log level is set |
On peut donc configurer l’attribut...