include $(TOPDIR)/rules.mk PKG_NAME:=pdns PKG_VERSION:=4.8.4 PKG_RELEASE:=1 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=https://downloads.powerdns.com/releases/ PKG_HASH:=7f40c8cbc4650d06fe49abba79902ebabb384363dabbd5cef271964a07c3645c PKG_MAINTAINER:=Peter van Dijk PKG_LICENSE:=GPL-2.0-only PKG_LICENSE_FILES:=COPYING PKG_CPE_ID:=cpe:/a:powerdns:authoritative PKG_FIXUP:=autoreconf PKG_INSTALL:=1 PKG_BUILD_PARALLEL:=1 PKG_BUILD_DEPENDS:=unixodbc/host protobuf-c/host include $(INCLUDE_DIR)/package.mk define Package/pdns/Default SECTION:=net CATEGORY:=Network SUBMENU:=IP Addresses and Names TITLE:=PowerDNS Authoritative Server DEPENDS:=+libatomic URL:=https://www.powerdns.com/auth.html endef define Package/pdns/description PowerDNS is a versatile nameserver which supports a large number of different backends ranging from simple zonefiles to relational databases and load balancing/failover algorithms. PowerDNS tries to emphasize speed and security. This is the authoritative nameserver that answers questions about domains that it knows about. You also need at least one backend installed to serve data. endef PDNS_BACKENDS = define Package/pdns-backends $(call Package/pdns/Default) TITLE+= (all backends) DEPENDS+= $(PDNS_DEPENDS) HIDDEN:=1 endef define Package/pdns-backends/description This meta package contains only dependencies for PowerDNS backends. endef # Create a meta-package of dependent backends (for ALL) define Package/pdns-backends/install true endef define Package/pdns-tools $(call Package/pdns/Default) TITLE:=Tools for DNS debugging by PowerDNS DEPENDS+=+boost +boost-program_options +libcurl +libmbedtls +libopenssl +p11-kit +protobuf endef define Package/pdns-tools/description PowerDNS is a versatile nameserver which supports a large number of different backends ranging from simple zonefiles to relational databases and load balancing/failover algorithms. PowerDNS tries to emphasize speed and security. This package contains several tools to debug DNS issues. These tools do not require any part of the PowerDNS server components to work. * dnsbulktest: A resolver stress-tester * dnsgram: Show per 5-second statistics to study intermittent resolver issues * dnsreplay: Replay a pcap with DNS queries * dnsscan: Prints the query-type amounts in a pcap * dnsscope: Calculates statistics without replaying traffic * dnstcpbench: Perform TCP benchmarking of DNS servers * dnswasher: Clean a pcap of identifying IP information * ixplore: Explore diffs from IXFRs * nsec3dig: Calculate the correctness of NSEC3 proofs * saxfr: AXFR zones and show extra information endef define Package/pdns-ixfrdist $(call Package/pdns/Default) TITLE:=Redistribute zones via AXFR and IXFR DEPENDS+=+boost +boost-program_options +libopenssl +libyaml-cpp +p11-kit +protobuf endef define Package/pdns-ixfrdist/description PowerDNS is a versatile nameserver which supports a large number of different backends ranging from simple zonefiles to relational databases and load balancing/failover algorithms. PowerDNS tries to emphasize speed and security. This package contains the ixfrdist tool that can redistribute multiple versions of zones over AXFR and IXFR. This tool does not require any part of the PowerDNS server components to work. endef define Package/pdns $(call Package/pdns/Default) DEPENDS+=+boost +boost-program_options +libcurl +liblua +libopenssl +libsqlite3 +p11-kit endef define Package/pdns/config menu "Select PowerDNS backends" depends on PACKAGE_pdns comment "PowerDNS backends" $(foreach backend,$(PDNS_BACKENDS), \ config PACKAGE_pdns-backend-$(backend) prompt "$(PDNS_BACKEND_$(backend)_DESC) backend" default m if ALL ) endmenu endef # 1: short name # 2: dependencies on other PowerDNS libraries (short name) # 3: dependencies on other packages # 4: conditional/inward dependencies # 5: friendly display name define DefinePdnsBackend PDNS_DEPENDS+= +pdns-backend-$(1) PKG_CONFIG_DEPENDS+= CONFIG_PACKAGE_pdns-backend$(1) PDNS_BACKENDS+= $(1) PDNS_BACKEND_$(1)_DESC=$(if $(5),$(5),$(1)) PDNS_BACKEND_$(1)_LIB=$(if $(4),$(4),$(1)) define Package/pdns-backend-$(1) $(call Package/pdns/Default) TITLE+= ($(1)) DEPENDS+= pdns $$(foreach backend,$(2),+pdns-backend-$$(backend)) \ $$(foreach dependency,$(3),+$$(dependency)) HIDDEN:=1 endef define Package/pdns-backend-$(1)/description PowerDNS is a versatile nameserver which supports a large number of different backends ranging from simple zonefiles to relational databases and load balancing/failover algorithms. PowerDNS tries to emphasize speed and security. This package contains the $(if $(5),$(5),$(1)) backend for the PowerDNS nameserver. endef endef $(eval $(call DefinePdnsBackend,geoip,,libmaxminddb libyaml-cpp,,GeoIP)) $(eval $(call DefinePdnsBackend,mysql,,libmysqlclient,gmysql,MySQL)) $(eval $(call DefinePdnsBackend,odbc,,unixodbc,godbc,ODBC)) $(eval $(call DefinePdnsBackend,pgsql,,libpq,gpgsql,PostgreSQL)) $(eval $(call DefinePdnsBackend,sqlite3,,libsqlite3,gsqlite3,SQLite 3)) $(eval $(call DefinePdnsBackend,ldap,,libopenldap krb5-libs,,OpenLDAP)) $(eval $(call DefinePdnsBackend,lua2,,lua liblua,,Lua2)) $(eval $(call DefinePdnsBackend,pipe,,,,Pipe)) $(eval $(call DefinePdnsBackend,remote,,,,Remote)) define Package/pdns/conffiles /etc/powerdns/pdns.conf /etc/init.d/pdns endef TARGET_CXX+=-std=c++17 CONFIGURE_ARGS+= \ --sysconfdir=/etc/powerdns \ --libdir=/usr/lib/powerdns \ --with-dynmodules="$(foreach backend,$(PDNS_BACKENDS),$(if $(CONFIG_PACKAGE_pdns-backend-$(backend)),$(PDNS_BACKEND_$(backend)_LIB),))" \ --with-lua="lua" \ --with-modules="bind" \ --with-mysql-lib=$(STAGING_DIR)/usr \ --with-mysql-includes=$(STAGING_DIR)/usr \ $(if $(CONFIG_PACKAGE_pdns-tools),--enable-tools,) \ --with-protobuf \ --without-libsodium \ --enable-experimental-pkcs11 \ --enable-lua-records \ --enable-reproducible \ $(if $(CONFIG_PACKAGE_pdns-ixfrdist),--enable-ixfrdist,) define Package/pdns/install $(INSTALL_DIR) $(1)/etc/powerdns $(INSTALL_CONF) ./files/pdns.conf-dist $(1)/etc/powerdns/pdns.conf-dist $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/pdns.init $(1)/etc/init.d/pdns $(INSTALL_DIR) $(1)/usr/bin $(CP) $(PKG_INSTALL_DIR)/usr/bin/pdns_control $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/pdnsutil $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/zone2sql $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/zone2json $(1)/usr/bin/ $(INSTALL_DIR) $(1)/usr/sbin $(CP) $(PKG_INSTALL_DIR)/usr/sbin/pdns_server $(1)/usr/sbin/ endef define Package/pdns/Default/install $(INSTALL_DIR) $(1)/usr/lib/powerdns/pdns $(CP) $(PKG_INSTALL_DIR)/usr/lib/powerdns/pdns/lib$(PDNS_BACKEND_$(2)_LIB)backend.so $(1)/usr/lib/powerdns/pdns/ if [ "$(PDNS_BACKEND_$(2)_LIB)" == "ldap" ]; then \ $(INSTALL_DIR) $(1)/usr/bin; \ $(CP) $(PKG_INSTALL_DIR)/usr/bin/zone2ldap $(1)/usr/bin/; \ fi endef define Package/pdns-ixfrdist/install $(INSTALL_DIR) $(1)/etc/powerdns $(CP) $(PKG_INSTALL_DIR)/etc/powerdns/ixfrdist.example.yml $(1)/etc/powerdns/ $(INSTALL_DIR) $(1)/usr/bin $(CP) $(PKG_INSTALL_DIR)/usr/bin/ixfrdist $(1)/usr/bin/ endef define Package/pdns-tools/install $(INSTALL_DIR) $(1)/usr/bin $(CP) $(PKG_INSTALL_DIR)/usr/bin/dnsgram $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dnsreplay $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dnsscan $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dnsscope $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dnswasher $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dumresp $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/pdns_notify $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/nproxy $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/nsec3dig $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/saxfr $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/stubquery $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/ixplore $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/sdig $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/calidns $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dnsbulktest $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dnstcpbench $(1)/usr/bin/ $(CP) $(PKG_INSTALL_DIR)/usr/bin/dnspcap2protobuf $(1)/usr/bin/ endef define BuildPdnsBackend define Package/pdns-backend-$(1)/install $(call Package/pdns/Default/install,$$(1),$(1)) endef $$(eval $$(call BuildPackage,pdns-backend-$(1))) endef $(foreach backend,$(PDNS_BACKENDS),$(eval $(call BuildPdnsBackend,$(backend)))) $(eval $(call BuildPackage,pdns)) $(eval $(call BuildPackage,pdns-tools)) $(eval $(call BuildPackage,pdns-ixfrdist))