Controlar el orden de arranque de servicios slapd -> dnsdist -> isc-dhcp-server

Para controlar el orden de arranque en systemd sin modificar los archivos originales del paquete, debemos usar override files (drop-ins). Es la forma correcta y mantenible.

Principios clave de systemd (importante)

  • After= → orden de arranque (no implica dependencia)
  • Requires= → si el servicio requerido falla, el actual también falla
  • Wants= → dependencia débil (recomendado cuando el servicio puede existir sin el otro)
  • network-online.target NO garantiza que DNS o LDAP estén listos

Para servicios críticos como los mencionados, usaremos:

  • After= para garantizar el orden
  • Requires= solo cuando no tiene sentido arrancar sin el anterior

slapd (LDAP)

No depende de los otros, así que no lo tocaremos salvo que queramos asegurar red:

sudo systemctl edit slapd
[Unit]
After=network-online.target
Wants=network-online.target

[Service]
# Opcional: esperar a que la red esté lista
ExecStartPre=/usr/bin/bash -c 'until ping -c1 127.0.0.1 >/dev/null 2>&1; do sleep 1; done'
  • Esto asegura que la red esté disponible antes de arrancar slapd.
  • No depende de nada más.

dnsdist (DNS)

Como nuestros servidores DNS usan como backend ldap, dnsdist debe esperar a slapd:

sudo systemctl edit dnsdist
[Unit]
After=slapd.service
Requires=slapd.service

[Service]
# Esperar a que LDAP responda antes de arrancar dnsdist
ExecStartPre=/usr/bin/bash -c 'until ldapsearch -x -H ldap://127.0.0.1 -b "" -s base >/dev/null 2>&1; do sleep 2; done'
  • After=slapd.service → arranca después de LDAP
  • Requires=slapd.service → falla si LDAP falla
  • ExecStartPre → loop hasta que LDAP responda realmente
  • Si slapd no arranca → dnsdist no debe arrancar

isc-dhcp-server (DHCP)

En principio, sería suficiente con que isc-dhcp-server esperara a ldap, pero hacemos que espere también a dnsdist, por si usáramos resolución DNS en las configuraciones de dhcp:

sudo systemctl edit isc-dhcp-server
[Unit]
After=dnsdist.service slapd.service
Requires=dnsdist.service

[Service]
# Esperar a que DNS responda antes de arrancar DHCP
ExecStartPre=/usr/bin/bash -c 'until dig @127.0.0.1 . SOA +short >/dev/null 2>&1; do sleep 2; done'
  • After=dnsdist.service slapd.service → arranca después de DNS y LDAP
  • Requires=dnsdist.service → falla si DNS falla
  • ExecStartPre → loop hasta que el DNS responda

Recargar systemd y probar

sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart slapd dnsdist isc-dhcp-server