pdns: add package

Maintainer: me

Compile tested: armv7l, OpenWRT SDK
Run tested: armv7l Linksys WRT1900ACS, OpenWrt SNAPSHOT, r9987-655fff1571 -
confirmed PowerDNS server links correctly against libraries. I'm unable to test
all the backend modules as I don't have suitable backing stores set up for each.

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 commit includes the authoritative nameserver, backends and additional tools

https://www.powerdns.com/auth.html

Signed-off-by: James Taylor <james@jtaylor.id.au>
This commit is contained in:
James Taylor
2019-06-08 01:52:23 +10:00
parent 290e23ac61
commit 6320a3b9cb
6 changed files with 968 additions and 0 deletions
+215
View File
@@ -0,0 +1,215 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=pdns
PKG_VERSION:=4.1.8
PKG_RELEASE:=1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
PKG_SOURCE_URL:=https://downloads.powerdns.com/releases/
PKG_HASH:=94561132f46c08f646399511b680ce8cda150fd2b8e3d38c0b90b4187163e617
PKG_MAINTAINER:=James Taylor <james@jtaylor.id.au>
PKG_LICENCE:=GPL-2.0-only
PKG_LICENCE_FILES:=COPYING
PKG_FIXUP:=autoreconf
PKG_INSTALL:=1
PKG_BUILD_PARALLEL:=1
PKG_BUILD_DEPENDS:=unixodbc/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 +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
$(call Package/pdns/Default)
DEPENDS+=+boost +boost-program_options +liblua +libopenssl +libsodium +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
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)) $(3)
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,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,lua,,lua liblua,,Lua))
$(eval $(call DefinePdnsBackend,mydns,,libmysqlclient,,MyDNS))
$(eval $(call DefinePdnsBackend,pipe,,,,Pipe))
$(eval $(call DefinePdnsBackend,remote,,,,Remote))
define Package/pdns/conffiles
/etc/powerdns/pdns.conf
/etc/init.d/pdns
endef
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-modules="bind random" \
--with-mysql-lib=$(STAGING_DIR)/usr \
--with-mysql-includes=$(STAGING_DIR)/usr \
$(if $(CONFIG_PACKAGE_pdns-tools),--enable-tools,) \
--with-protobuf \
--enable-libsodium \
--enable-experimental-pkcs11
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/
endef
define Package/pdns-tools/install
$(INSTALL_DIR) $(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/dnsgram $(1)/usr/bin/
$(CP) $(PKG_INSTALL_DIR)/usr/bin/dnspcap2protobuf $(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/dnstcpbench $(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/ixplore $(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/pdns_notify $(1)/usr/bin/
$(CP) $(PKG_INSTALL_DIR)/usr/bin/saxfr $(1)/usr/bin/
$(CP) $(PKG_INSTALL_DIR)/usr/bin/sdig $(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))