web-dev-qa-db-fra.com

Impossible de démarrer dhcpd sur Ubuntu avec systemd

Je rencontre un problème étrange avec dhcpd sur Ubuntu (x64). J'utilise systemd pour démarrer dhcpd au démarrage et il se ferme.

Quand je demande le statut du service

$ systemctl status dhcpd
dhcpd.service - dhcpcd service
 Loaded: loaded (/etc/systemd/system/dhcpd.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Tue 2016-08-16 20:37:11 UTC; 15min ago
Process: 1591 ExecStart=/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1 (code=exited, status=0/SUCCESS)
Main PID: 1591 (code=exited, status=0/SUCCESS)

Quand je regarde le journal, je ne vois aucune erreur non plus:

journalctl _PID=1591

Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Internet Systems Consortium DHCP Server 4.3.3-P1
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Internet Systems Consortium DHCP Server 4.3.3-P1
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Copyright 2004-2016 Internet Systems Consortium.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Copyright 2004-2016 Internet Systems Consortium.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: All rights reserved.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: For info, please visit https://www.isc.org/software/dhcp/
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: All rights reserved.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: For info, please visit https://www.isc.org/software/dhcp/
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Config file: /etc/dhcp/dhcpd.conf
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Config file: /etc/dhcp/dhcpd.conf
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Database file: /var/lib/dhcp/dhcpd.leases
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Database file: /var/lib/dhcp/dhcpd.leases
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: PID file: /var/run/dhcpd.pid
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: PID file: /var/run/dhcpd.pid
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Wrote 0 leases to leases file.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Wrote 0 leases to leases file.
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Listening on LPF/eth1/08:00:27:10:48:17/192.168.0.0/24
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Listening on LPF/eth1/08:00:27:10:48:17/192.168.0.0/24
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Sending on   LPF/eth1/08:00:27:10:48:17/192.168.0.0/24
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Sending on   LPF/eth1/08:00:27:10:48:17/192.168.0.0/24
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Sending on   Socket/fallback/fallback-net
Aug 16 20:37:11 kirk.sb.computer dhcpd[1591]: Sending on   Socket/fallback/fallback-net

Il semble que tout va bien, mais dhcpd ne fonctionne pas.

Mon fichier de configuration (/etc/dhcp/dhcpd.conf) est très simple:

# dhcp server configuration file

allow bootp;  #allow bootp protocol

#define DHCP subnet
#specify /etc/spock/spock.ub as boot file
subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.2 192.168.0.200;
    filename "/etc/spock/spock.ub";
}

Dans mon script de service, je m'assure que dhcpd ne démarre pas tant que le réseau n'est pas en place:

# Start and stop dhcpcd service on eth1 interface

[Unit]
Description=dhcpcd service
# Come up after networking
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
#start dhcpd on eth1
ExecStart=/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1

[Install]
WantedBy=multi-user.target

Il se ferme également lorsque j'essaie de le démarrer via systemctl start dhcpd Cependant, si j'exécute '/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1' à partir de la ligne de commande, tout fonctionne correctement.

Une idée pourquoi ça sort?

4
Alex Gdalevich

dhcpd se forque alors je devais changer le type de service en conséquence:

 [Service] 
 Type = forking 
 ExecStart =/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1 

Maintenant ça marche

1
Alex Gdalevich

Si ce script doit être exécuté après que l'interface réseau soit pleinement fonctionnelle et capable de se connecter au monde extérieur, comme le suggère network-online.target, vous souhaiterez peut-être d'abord tester la connexion en envoyant une requête ping à Google, par exemple.

Je vous suggère de créer un script distinct contenant le test ping avant votre commande /sbin/dhcpd -cf /etc/dhcp/dhcpd.conf eth1, puis d'exécuter ce script à l'aide de ExecStart dans votre service.

0
Shady Programmer