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


