Bonjour à tous,
cela fait un bail que je n'ai pas posté en ces lieux mais je viens de faire une petite manip qui pourrait en dépanner certains.
Depuis le passage de Fedora à
systemd et notamment avec le portage de
sendmail dessus, je me trouvais confronté au problème de démarrage suivant.
sendmail refusait de démarrer avec l'erreur, dans
/etc/log/maillog:
sendmail[1336]: NOQUEUE: SYSERR(root): /etc/mail/sendmail.cf: line 155: ldap_init/ldap_bind failed to localhost in map M: Unknown error 325
sendmail[1336]: NOQUEUE: SYSERR(root): /etc/mail/sendmail.cf: line 155: fileclass: F{M}: map open failed
Rien de bien grave me direz-vous puisque démarrer manuellement
sendmail par la suite permet de contourner le problème.
Certes... mais ça m'irritait quand même...
J'ai fini par comprendre que le fondement du système de démarrage de services de
systemd passe par la parallélisation des différents démarrages et donc relègue aux services eux même la responsabilité d'attendre une resource qui serait en cours de démarrage.
En l'occurence,
sendmail devrait attendre l'apparition du socket ldap pour récupérer sa
mailertable mais la configuration par défaut ne prévoit pas une telle dépendance entre
sendmail et
ldap.
Ben il suffit juste de la rajouter...
Pour ce faire, j'ai d'abord copié la définition de distrib du service
sendmail:
/lib/systemd/system/sendmail.service dans
/etc/systemd/system, le répertoire destiné à recevoir les configurations modifiées de
systemd et j'ai joué avec..
- j'ai rajouté une dépendance au service slapd
[Unit]
Description=Sendmail Mail Transport Agent
After=syslog.target network.target sldapd.service <= ICI
Requires=sldapd.service <= et LA
Conflicts=postfix.service exim.service
Wants=sm-client.service
Ceci a eu pour effet de forcer le démarrage de sendmail après celui de slapd.
Mais cela n'a pas été suffisant pour résoudre mon problème car slapd a, chez moi, une fâcheuse tendance à démarrer lentement (faut pas non plus lui jeter la pierre, il fait ses réplications après tout) et sendmail était toujours lancé trop tôt.
- j'ai donc finalement fait précéder le démarrage de sendmail par une attente active de slapd
[Service]
Type=forking
PIDFile=/run/sendmail.pid
Environment=SENDMAIL_OPTS=-q1h
EnvironmentFile=-/etc/sysconfig/sendmail
ExecStartPre=-/etc/mail/make
ExecStartPre=-/etc/mail/make aliases
ExecStartPre=-/etc/mail/wait-ldap-on <= ICI
ExecStart=/usr/sbin/sendmail -bd $SENDMAIL_OPTS $SENDMAIL_OPTARG
Où /etc/mail/wait-ldap-on est un script de mon cru qui utilise ldapsearch pour attendre slapd.
En voici une version adaptable à d'autres besoins:
#!/bin/sh
URI=ldap://localhost
BIND_DN=cn=Manager,dc=example,dc=com
SECRET_FILE=/etc/mail/ldap.secret
TIMELIMIT=20
SEARCH_BASE=dc=example,dc=com
until ldapsearch -c -l ${TIMELIMIT} -H ${URI} -x -D ${BIND_DN} -y ${SECRET_FILE} -b ${SEARCH_BASE} -s sub "(cn=Manager)" dn 2>/dev/null
do
sleep 1;
done
Et voilou, problème résolu.
Bon, ça ne casse pas trois pattes à un canard mais chuis content et si ça peut rendre service à quelqu'un...
A+
A