summaryrefslogtreecommitdiffstats
path: root/net/coredns/Makefile
blob: 04f89d678e4de3cfe69b085f7d41b1ad7f57e1c7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
include $(TOPDIR)/rules.mk

PKG_NAME:=coredns
PKG_VERSION:=1.15.0
PKG_RELEASE:=1

PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/coredns/coredns.git
PKG_MIRROR_HASH:=93aa34fee51cd478365859810f239e6a86ed4d88c93ca8a48f7a83a48ed1c0bc
PKG_SOURCE_VERSION:=v$(PKG_VERSION)

PKG_LICENSE:=Apache-2.0
PKG_LICENSE_FILES:=LICENSE
PKG_MAINTAINER:=Vladimir Ermakov <vooon341@gmail.com>
PKG_CPE_ID:=cpe:/a:coredns.io:coredns

PKG_BUILD_DEPENDS:=golang/host
PKG_BUILD_PARALLEL:=1
PKG_BUILD_FLAGS:=no-mips16

GO_PKG:=github.com/coredns/coredns
GO_PKG_EXCLUDES:=test
GO_PKG_LDFLAGS_X:= \
	github.com/coredns/coredns/coremain.GitCommit=v$(PKG_VERSION) \
	github.com/coredns/coredns/coremain.gitTag=v$(PKG_VERSION)

include $(INCLUDE_DIR)/package.mk
include ../../lang/golang/golang-package.mk

define Package/coredns
  SECTION:=net
  CATEGORY:=Network
  SUBMENU:=IP Addresses and Names
  TITLE:=CoreDNS
  URL:=https://coredns.io
  DEPENDS:=$(GO_ARCH_DEPENDS) +COREDNS_PLUGIN_WGSD:kmod-wireguard
  MENU:=1
endef

define Package/coredns/description
  CoreDNS is a fast and flexible DNS server.
  The key word here is flexible: with CoreDNS you are able to do what you want
  with your DNS data by utilizing plugins.
endef

define Package/coredns/config
  source "$(SOURCE)/Config.in"
endef

define Package/coredns/conffiles
/etc/config/coredns
/etc/Corefile
/etc/coredns/
endef

# Keep pristine plugin.cfg, so every configure starts from upstream order
define Build/Prepare
	$(call Build/Prepare/Default)
	cp "$(PKG_BUILD_DIR)/plugin.cfg" "$(PKG_BUILD_DIR)/plugin.cfg.orig"
endef

# configure-plugin <enabled> <name> <package> [<anchor> [i|a]]
# plugin.cfg order defines plugin chain order. Built-in plugins keep their
# upstream position; new ones are inserted before (i, default) or after (a)
# <anchor>, or appended at the end if no anchor given.
define configure-plugin
	$(if $(filter y,$(1)),\
		grep -q '^$(2):' "$(PKG_BUILD_DIR)/plugin.cfg" || \
		$(if $(4),\
			{ grep -q '^$(4):' "$(PKG_BUILD_DIR)/plugin.cfg" && \
			$(SED) '/^$(4):/$(or $(5),i) $(2):$(3)' "$(PKG_BUILD_DIR)/plugin.cfg"; },\
			echo "$(2):$(3)" >> "$(PKG_BUILD_DIR)/plugin.cfg"),\
		$(SED) '/^$(2):/d' "$(PKG_BUILD_DIR)/plugin.cfg")
endef

define Build/Configure
	$(call GoPackage/Build/Configure,$(1))
	cp "$(PKG_BUILD_DIR)/plugin.cfg.orig" "$(PKG_BUILD_DIR)/plugin.cfg"

	# NOTE: allow to disable unneded heavy plugin
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_GEOIP),geoip,geoip)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_TLS),tls,tls)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_QUIC),quic,quic)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_ROUTE53),route53,route53)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_AZURE),azure,azure)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_CLOUDDNS),clouddns,clouddns)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_K8S_EXTERNAL),k8s_external,k8s_external)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_KUBERNETES),kubernetes,kubernetes)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_ETCD),etcd,etcd)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_GRPC),grpc,grpc)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_PROXYPROTO),proxyproto,proxyproto)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_ON),on,github.com/coredns/caddy/onevent)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_NOMAD),nomad,nomad)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_SIIT),siit,siit)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_DYNUPDATE),dynupdate,dynupdate)
	# NOTE: third-party plugins, positioned per upstream recommendations
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_NETBOX),netbox,github.com/oz123/coredns-netbox-plugin,cache,a)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_FINALIZE),finalize,github.com/tmeckel/coredns-finalizer,cache,a)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_MULTICLUSTER),multicluster,github.com/coredns/multicluster,file)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_WGSD),wgsd,github.com/jwhited/wgsd,file)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_GSLB),gslb,github.com/dmachard/coredns-gslb,file)
	$(call configure-plugin,$(CONFIG_COREDNS_PLUGIN_FANOUT),fanout,github.com/networkservicemesh/fanout,forward)

	cd $(PKG_BUILD_DIR); \
	$(GO_GENERAL_BUILD_CONFIG_VARS) \
	$(GO_PKG_BUILD_CONFIG_VARS) \
	go generate coredns.go

	# NOTE: custom plugins needs go get to pull new dependencies
ifeq ($(CONFIG_COREDNS_REQUIRE_GO_GET),y)
	cd $(PKG_BUILD_DIR); \
	$(GO_GENERAL_BUILD_CONFIG_VARS) \
	$(GO_PKG_BUILD_CONFIG_VARS) \
	$(GO_PKG_VARS) \
	go get ./...
endif
ifeq ($(CONFIG_COREDNS_PLUGIN_WGSD),y)
	# wgsd -> wgctrl -> genetlink -> netlink v1.6.2 is incompatible with
	# socket v0.5.x (Sendmsg/Recvmsg gained context.Context); pin to v1.7.2
	cd $(PKG_BUILD_DIR); \
	$(GO_GENERAL_BUILD_CONFIG_VARS) \
	$(GO_PKG_BUILD_CONFIG_VARS) \
	$(GO_PKG_VARS) \
	go get github.com/mdlayher/netlink@v1.7.2
endif

endef

define Package/coredns/install
	$(call GoPackage/Package/Install/Bin,$(1))

	$(INSTALL_DIR) $(1)/etc/
	$(INSTALL_CONF) $(CURDIR)/files/Corefile $(1)/etc/Corefile
	$(INSTALL_DIR) $(1)/etc/config/
	$(INSTALL_CONF) $(CURDIR)/files/coredns.conf $(1)/etc/config/coredns
	$(INSTALL_DIR) $(1)/etc/init.d/
	$(INSTALL_BIN) $(CURDIR)/files/coredns.init $(1)/etc/init.d/coredns

	$(INSTALL_DIR) $(1)/etc/coredns/zones/
endef

$(eval $(call BuildPackage,coredns))