From 5459bd9b30d13fff91cae47e69d481c1656a9e51 Mon Sep 17 00:00:00 2001 From: Stijn Tintel Date: Mon, 2 Aug 2021 00:41:45 +0300 Subject: [PATCH 1/4] kea: add package for lease commands hook This is required for the HA hook. Signed-off-by: Stijn Tintel --- net/kea/Makefile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/net/kea/Makefile b/net/kea/Makefile index 240fa0268..fffca88f2 100644 --- a/net/kea/Makefile +++ b/net/kea/Makefile @@ -120,6 +120,16 @@ define Package/kea-admin/description checking versions, upgrading etc.). endef +###### ************************************************************************* +define Package/kea-hook-lease-cmds + $(call Package/kea/Default) + TITLE+=Lease Commands hook library + DEPENDS:=+kea-libs +endef +define Package/kea-hook-lease-cmds/description + The lease commands hook library. +endef + ##### ************************************************************************* define Package/kea-lfc $(call Package/kea/Default) @@ -235,6 +245,11 @@ define Package/kea-admin/install $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kea-admin $(1)/usr/sbin/kea-admin endef +define Package/kea-hook-lease-cmds/install + $(INSTALL_DIR) $(1)/usr/lib/kea/hooks + $(CP) $(PKG_INSTALL_DIR)/usr/lib/kea/hooks/libdhcp_lease_cmds.so $(1)/usr/lib/kea/hooks +endef + define Package/kea-ctrl/install $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/kea $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/keactrl $(1)/usr/sbin/keactrl @@ -265,6 +280,7 @@ $(eval $(call BuildPackage,kea-dhcp4)) $(eval $(call BuildPackage,kea-dhcp6)) $(eval $(call BuildPackage,kea-dhcp-ddns)) $(eval $(call BuildPackage,kea-admin)) +$(eval $(call BuildPackage,kea-hook-lease-cmds)) $(eval $(call BuildPackage,kea-lfc)) $(eval $(call BuildPackage,kea-perfdhcp)) $(eval $(call BuildPackage,kea-shell)) From f59243aa83a471f30fe41ee2d1c8b3f471b3b731 Mon Sep 17 00:00:00 2001 From: Stijn Tintel Date: Mon, 2 Aug 2021 00:45:27 +0300 Subject: [PATCH 2/4] kea: add package for high availability hook This allows running multiple kea instances in load balancing or hot-standby mode, minimizing risk of downtime. Signed-off-by: Stijn Tintel --- net/kea/Makefile | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/net/kea/Makefile b/net/kea/Makefile index fffca88f2..09f581fda 100644 --- a/net/kea/Makefile +++ b/net/kea/Makefile @@ -120,6 +120,16 @@ define Package/kea-admin/description checking versions, upgrading etc.). endef +###### ************************************************************************* +define Package/kea-hook-ha + $(call Package/kea/Default) + TITLE+=High Availability hook library + DEPENDS:=+kea-libs +kea-hook-lease-cmds +endef +define Package/kea-hook-ha/description + The high availability hook library. +endef + ###### ************************************************************************* define Package/kea-hook-lease-cmds $(call Package/kea/Default) @@ -245,6 +255,11 @@ define Package/kea-admin/install $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kea-admin $(1)/usr/sbin/kea-admin endef +define Package/kea-hook-ha/install + $(INSTALL_DIR) $(1)/usr/lib/kea/hooks + $(CP) $(PKG_INSTALL_DIR)/usr/lib/kea/hooks/libdhcp_ha.so $(1)/usr/lib/kea/hooks +endef + define Package/kea-hook-lease-cmds/install $(INSTALL_DIR) $(1)/usr/lib/kea/hooks $(CP) $(PKG_INSTALL_DIR)/usr/lib/kea/hooks/libdhcp_lease_cmds.so $(1)/usr/lib/kea/hooks @@ -280,6 +295,7 @@ $(eval $(call BuildPackage,kea-dhcp4)) $(eval $(call BuildPackage,kea-dhcp6)) $(eval $(call BuildPackage,kea-dhcp-ddns)) $(eval $(call BuildPackage,kea-admin)) +$(eval $(call BuildPackage,kea-hook-ha)) $(eval $(call BuildPackage,kea-hook-lease-cmds)) $(eval $(call BuildPackage,kea-lfc)) $(eval $(call BuildPackage,kea-perfdhcp)) From 8c855f390e53e6f285e229f22199242eb4cfee76 Mon Sep 17 00:00:00 2001 From: Stijn Tintel Date: Thu, 5 Aug 2021 20:52:00 +0300 Subject: [PATCH 3/4] kea: add conffiles Add the /etc/kea directory to conffiles, so configuration will not be lost during sysupgrade. Signed-off-by: Stijn Tintel --- net/kea/Makefile | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/net/kea/Makefile b/net/kea/Makefile index 09f581fda..9e7796692 100644 --- a/net/kea/Makefile +++ b/net/kea/Makefile @@ -39,6 +39,14 @@ define Package/kea/Default URL:=https://www.isc.org/kea endef +define Package/kea/conffiles +/etc/kea/ +endef + +Package/kea-ctrl/conffiles = $(Package/kea/conffiles) +Package/kea-dhcp4/conffiles = $(Package/kea/conffiles) +Package/kea-dhcp6/conffiles = $(Package/kea/conffiles) +Package/kea-dhcp-ddns/conffiles = $(Package/kea/conffiles) ###### ************************************************************************* define Package/kea From 3649ed721d6f87068abbed516b3c0ab73543a9d0 Mon Sep 17 00:00:00 2001 From: Stijn Tintel Date: Thu, 5 Aug 2021 22:26:20 +0300 Subject: [PATCH 4/4] kea: add kea-uci package with basic init script This init script allows to start the Kea Control Agent, the DHCPv4 server, the DHCPv6 server, and the DHCP-DDNS server. It expects the config files to be where the packages install them. As this is a single init script that can start 4 different binaries that are each in their own package, these files cannot be included in any of these other package, so create a dedicated package for it. Signed-off-by: Stijn Tintel --- net/kea/Makefile | 18 ++++++++++++++++++ net/kea/files/kea.config | 11 +++++++++++ net/kea/files/kea.init | 41 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+) create mode 100644 net/kea/files/kea.config create mode 100755 net/kea/files/kea.init diff --git a/net/kea/Makefile b/net/kea/Makefile index 9e7796692..f0def030b 100644 --- a/net/kea/Makefile +++ b/net/kea/Makefile @@ -182,6 +182,17 @@ define Package/kea-shell/description Control Agent. endef +###### ************************************************************************* +define Package/kea-uci + $(call Package/kea/Default) + TITLE+=UCI support + DEPENDS:=@(PACKAGE_kea-ctrl||PACKAGE_kea-dhcp4||PACKAGE_kea-dhcp6||PACKAGE_kea-dhcp-ddns) +endef +define Package/kea-uci/description + Kea PROCD/UCI support. This package installs a UCI config file and + a PROCD service file. +endef + ###### ************************************************************************* HOST_CONFIGURE_ARGS += \ --with-boost-include="$(STAGING_DIR_HOSTPKG)" \ @@ -296,6 +307,12 @@ define Package/kea-shell/install $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kea-shell $(1)/usr/sbin/kea-shell endef +define Package/kea-uci/install + $(INSTALL_DIR) $(1)/etc/config $(1)/etc/init.d + $(INSTALL_CONF) ./files/kea.config $(1)/etc/config/kea + $(INSTALL_BIN) ./files/kea.init $(1)/etc/init.d/kea +endef + $(eval $(call HostBuild)) $(eval $(call BuildPackage,kea-libs)) $(eval $(call BuildPackage,kea-ctrl)) @@ -308,3 +325,4 @@ $(eval $(call BuildPackage,kea-hook-lease-cmds)) $(eval $(call BuildPackage,kea-lfc)) $(eval $(call BuildPackage,kea-perfdhcp)) $(eval $(call BuildPackage,kea-shell)) +$(eval $(call BuildPackage,kea-uci)) diff --git a/net/kea/files/kea.config b/net/kea/files/kea.config new file mode 100644 index 000000000..9edd65508 --- /dev/null +++ b/net/kea/files/kea.config @@ -0,0 +1,11 @@ +config service 'ctrl_agent' + option disabled '1' + +config service 'dhcp4' + option disabled '1' + +config service 'dhcp6' + option disabled '1' + +config service 'dhcp_ddns' + option disabled '1' diff --git a/net/kea/files/kea.init b/net/kea/files/kea.init new file mode 100755 index 000000000..ee4bf88da --- /dev/null +++ b/net/kea/files/kea.init @@ -0,0 +1,41 @@ +#!/bin/sh /etc/rc.common + +USE_PROCD=1 +START=25 +STOP=85 + +BIN_PATH="/usr/sbin" +CONF_PATH="/etc/kea" + +start_service() { + config_load "kea" + config_foreach start_kea "service" +} + +start_kea() { + local cfg="$1" + + config_get_bool disabled "$cfg" disabled 0 + [ "$disabled" = "0" ] || return + + config_get name "$cfg" name "$cfg" + + case "$name" in + ctrl_agent|dhcp4|dhcp6|dhcp_ddns) + name="${name/_/-}" + cmd="${BIN_PATH}/kea-${name}" + cnf="${CONF_PATH}/kea-${name}.conf" + ;; + *) + return 0 + esac + + procd_open_instance "$name" + procd_set_param command "$cmd" -c "$cnf" + procd_set_param env KEA_LOCKFILE_DIR=/tmp + procd_append_param env KEA_PIDFILE_DIR=/tmp + procd_set_param file "$cnf" + procd_set_param stderr 1 + procd_set_param stdout 1 + procd_close_instance ctrl_agent +}