dhcp: add systemd service file
authorEric Le Bihan <eric.le.bihan.dev@free.fr>
Mon, 15 Sep 2014 21:04:43 +0000 (23:04 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Wed, 29 Oct 2014 22:00:02 +0000 (23:00 +0100)
Add a systemd service file to start dhcpd.

The network interfaces to listen on can be set via the variable
INTERFACES in /etc/default/dhcpd.conf. Example:

  INTERFACES="eth0 eth1"

Also install a tmpfiles.d file to create /var/lib/dhcp/dhcpd.leases
(needed at dhcpd start-up).

Signed-off-by: Eric Le Bihan <eric.le.bihan.dev@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/dhcp/dhcp.mk
package/dhcp/dhcpd.service [new file with mode: 0644]

index 736635afe80a6e4fcb7de85744680c68fd06b9f0..8b38fd0a22cff3d2ccfa2e26641d775de5ee55d2 100644 (file)
@@ -73,6 +73,21 @@ define DHCP_INSTALL_INIT_SYSV
                $(TARGET_DIR)/etc/init.d/S80dhcp-relay
 endef
 
+define DHCP_INSTALL_INIT_SYSTEMD
+       $(INSTALL) -D -m 644 package/dhcp/dhcpd.service \
+               $(TARGET_DIR)/lib/systemd/system/dhcpd.service
+
+       mkdir -p $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants
+
+       ln -sf ../../../../lib/systemd/system/dhcpd.service \
+               $(TARGET_DIR)/etc/systemd/system/multi-user.target.wants/dhcpd.service
+
+       echo "d /var/lib/dhcp 0755 - - - -" > \
+               $(TARGET_DIR)/usr/lib/tmpfiles.d/dhcpd.conf
+       echo "f /var/lib/dhcp/dhcpd.leases - - - - -" >> \
+               $(TARGET_DIR)/usr/lib/tmpfiles.d/dhcpd.conf
+endef
+
 define DHCP_INSTALL_TARGET_CMDS
        $(DHCP_INSTALL_RELAY)
        $(DHCP_INSTALL_SERVER)
diff --git a/package/dhcp/dhcpd.service b/package/dhcp/dhcpd.service
new file mode 100644 (file)
index 0000000..7b265cb
--- /dev/null
@@ -0,0 +1,13 @@
+[Unit]
+Description=DHCP server
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/dhcpd.pid
+ExecStart=/usr/sbin/dhcpd -q -pf /run/dhcpd.pid $INTERFACES
+KillSignal=SIGINT
+EnvironmentFile=/etc/default/dhcpd.conf
+
+[Install]
+WantedBy=multi-user.target