File bind.spec of Package bind
# Defines alternaive for user and group add
%define DNS_UID 45
%define DNS_UID_NAME dns
%define DNS_GID 45
%define DNS_GID_NAME dns
%define DNS_COMMENT Name server daemon
%define DNS_HOMEDIR /opt/dns
%define DNS_SHELL /bin/bash
%define GROUPADD_NAMED getent group %{DNS_GID_NAME} >/dev/null || %{_sbindir}/groupadd -g %{DNS_GID} -o -r %{DNS_GID_NAME}
%define USERADD_NAMED getent passwd %{DNS_UID_NAME} >/dev/null || %{_sbindir}/useradd -m -r -o -g %{DNS_GID_NAME} -u %{DNS_UID} -s %{DNS_SHELL} -c "%{DNS_COMMENT}" -d %{DNS_HOMEDIR} %{DNS_UID_NAME}
#Source: ftp://ftp.isc.org/isc/bind9/
Name: bind
Version: 9.20.9
Release: 0
Summary: Domain Name System (DNS) Server (named)
License: MPL-2.0
Group: Productivity/Networking/DNS/Servers
Url: https://www.isc.org/download/
Source0: %{name}-%{version}.tar.xz
Source1: named.service
BuildRequires: libcap-devel
BuildRequires: libopenssl-devel
BuildRequires: libtool
BuildRequires: openssl
BuildRequires: liburcu-devel
BuildRequires: pkgconfig
BuildRequires: update-desktop-files
BuildRequires: pkgconfig(geoip)
BuildRequires: pkgconfig(json)
BuildRequires: pkgconfig(krb5)
BuildRequires: pkgconfig(libidn)
BuildRequires: pkgconfig(libuv)
BuildRequires: pkgconfig(libxml-2.0)
Requires: %{name}-utils
Requires(post): %fillup_prereq
Requires(post): bind-utils
Requires(post): coreutils
Requires(pre): shadow
Provides: bind9
BuildRequires: systemd-rpm-macros
BuildRequires: pkgconfig(libsystemd)
BuildRequires: pkgconfig(systemd)
BuildRequires: fstrm-devel
BuildRequires: protobuf-devel
BuildRequires: libnghttp2-devel
%define soname %(echo %{version} | sed 's/\\./_/g')
%define libdns libdns-%{soname}
%define libisc libisc-%{soname}
%define libisccc libisccc-%{soname}
%define libisccfg libisccfg-%{soname}
%define libns libns-%{soname}
%description
Berkeley Internet Name Domain (BIND) is an implementation of the Domain
Name System (DNS) protocols and provides an openly redistributable
reference implementation of the major components of the Domain Name
System. This package includes the components to operate a DNS server.
%package -n %{libdns}
Summary: DNS library used by BIND
Group: System/Libraries
%description -n %{libdns}
This subpackage contains the "DNS client" module. This is a higher
level API that provides an interface to name resolution, single DNS
transaction with a particular server, and dynamic update. Regarding
name resolution, it supports advanced features such as DNSSEC
validation and caching. This module supports both synchronous and
asynchronous mode.
%package -n %{libisc}
Summary: ISC shared library used by BIND
Group: System/Libraries
Provides: bind-libs = %{version}-%{release}
Obsoletes: bind-libs < %{version}-%{release}
%description -n %{libisc}
This library contains miscellaneous utility function used by the BIND
server and utilities. It includes functions for assertion handling,
balanced binary (AVL) trees, bit masks comparison, event based
programs, heap-based priority queues, memory handling, and program
logging.
%package -n %{libisccc}
Summary: Command Channel Library used by BIND
Group: System/Libraries
%description -n %{libisccc}
This library is used for communicating with BIND servers'
administrative command channel (port 953 by default).
%package -n %{libisccfg}
Summary: Exported ISC configuration shared library
Group: System/Libraries
%description -n %{libisccfg}
This BIND library contains the configuration file parser.
%package -n %{libns}
Summary: Bind9 library
Group: System/Libraries
%description -n %{libns}
A BIND 9 library
%package devel
Summary: Development Libraries and Header Files of BIND
Group: Development/Libraries/C and C++
Requires: %{libdns} = %{version}
Requires: %{libisccc} = %{version}
Requires: %{libisccfg} = %{version}
Requires: %{libisc} = %{version}
Requires: %{libns} = %{version}
%description devel
This package contains the header files, libraries, and documentation
for building programs using the libraries of the Berkeley Internet Name
Domain (BIND) Domain Name System implementation of the Domain Name
System (DNS) protocols.
%package doc
Summary: BIND documentation
Group: Documentation/Other
BuildArch: noarch
%description doc
Documentation of the Berkeley Internet Name Domain (BIND) Domain Name
System implementation of the Domain Name System (DNS) protocols. This
includes also the BIND Administrator Reference Manual (ARM).
%package libns
Summary: Bind9 library
Group: Productivity/Networking/DNS/Utilities
%description libns
Bind9 library
%package utils
Summary: Utilities to query and test DNS
Group: Productivity/Networking/DNS/Utilities
%description utils
This package includes the utilities "host", "dig", and "nslookup" used to
test and query the Domain Name System (DNS). The Berkeley Internet
Name Domain (BIND) DNS server is found in the package named bind.
%prep
%setup -q
%build
autoreconf -fvi
export CFLAGS="$CFLAGS %{optflags} -fPIE"
export LDFLAGS="$LDFLAGS -pie"
%configure \
--without-python \
--includedir=%{_includedir}/bind \
--disable-static \
--with-openssl \
--with-libtool \
--with-libxml2 \
--with-libjson \
--with-pic \
--with-tuning=large \
--with-dlopen \
--disable-isc-spnego \
--enable-fixed-rrset \
--enable-full-report
make %{?_smp_mflags}
%install
mkdir -p \
%{buildroot}%{_prefix}/{bin,%{_lib},sbin,include} \
%{buildroot}/%{_defaultdocdir}/bind \
%{buildroot}%{_localstatedir}/lib/bind \
%{buildroot}%{_mandir}/{man1,man3,man5,man8} \
%{buildroot}%{_fillupdir} \
%{buildroot}/%{_libdir}/bind \
%{buildroot}%{_includedir}/bind/dns \
%{buildroot}%{_libexecdir}/bind \
%{buildroot}%{_sysconfdir}
echo '//named.conf' > %{buildroot}/%{_sysconfdir}/named.conf
%make_install
install -D -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/named.service
ln -s /sbin/service %{buildroot}%{_sbindir}/rcnamed
# remove useless .la files
rm -f %{buildroot}/%{_libdir}/lib*.{la,a}
find %{buildroot}/%{_libdir} -type f -name '*.so*' -print0 | xargs -0 chmod 0755
# Cleanup doc
rm doc/misc/Makefile*
find doc/arm -type f ! -name '*.html' -print0 | xargs -0 rm -f
rm -rf doc/misc/.libs
rm -rf doc/misc/cfg_test
# Create doc as we want it in bind and not bind-doc
mkdir -p %{buildroot}/%{_defaultdocdir}/bind/
for file in COPYRIGHT README* doc/{arm,misc}; do
basename=$( basename ${file})
cp -a ${file} %{buildroot}/%{_defaultdocdir}/bind/${basename}
echo "%doc %{_defaultdocdir}/bind/${basename}" >>filelist-bind-doc
done
cp -p bind.keys %{buildroot}/%{_sysconfdir}/
%pre
%{GROUPADD_NAMED}
%{USERADD_NAMED}
%service_add_pre named.service
%preun
%service_del_preun named.service
%post
%service_add_post named.service
%postun
%service_del_postun named.service
%post -n %{libdns} -p /sbin/ldconfig
%postun -n %{libdns} -p /sbin/ldconfig
%post -n %{libisc} -p /sbin/ldconfig
%postun -n %{libisc} -p /sbin/ldconfig
%post -n %{libisccc} -p /sbin/ldconfig
%postun -n %{libisccc} -p /sbin/ldconfig
%post -n %{libisccfg} -p /sbin/ldconfig
%postun -n %{libisccfg} -p /sbin/ldconfig
%post -n %{libns} -p /sbin/ldconfig
%postun -n %{libns} -p /sbin/ldconfig
%post utils
%files
%defattr (-,root,root,-)
%license LICENSE
%{_unitdir}/named.service
%{_bindir}/named-rrchecker
%{_sbindir}/rcnamed
%{_sbindir}/named
%{_bindir}/named-checkconf
%{_bindir}/named-checkzone
%{_bindir}/named-compilezone
%{_mandir}/man1/named-rrchecker.1%{ext_man}
%{_mandir}/man5/named.conf.5%{ext_man}
%{_mandir}/man1/named-checkconf.1%{ext_man}
%{_mandir}/man1/named-checkzone.1%{ext_man}
%{_mandir}/man8/named.8%{ext_man}
%{_mandir}/man1/named-compilezone.1%{ext_man}
%{_mandir}/man8/filter-aaaa.8%{ext_man}
%{_mandir}/man8/filter-a.8%{ext_man}
%attr(-,dns,dns) %dir %{_libdir}/bind
%attr(-,dns,dns) %dir %{_var}/lib/bind
%dir %{_libexecdir}/bind
%{_libdir}/bind/filter-aaaa.so
%{_libdir}/bind/filter-a.so
%{_libdir}/bind/filter-aaaa.la
%{_libdir}/bind/filter-a.la
%files -n %{libdns}
%defattr (-,root,root,-)
%{_libdir}/libdns-%{version}.so*
%files -n %{libisc}
%defattr (-,root,root,-)
%{_libdir}/libisc-%{version}.so*
%files -n %{libisccc}
%defattr (-,root,root,-)
%{_libdir}/libisccc-%{version}.so*
%files -n %{libisccfg}
%defattr (-,root,root,-)
%{_libdir}/libisccfg-%{version}.so*
%files -n %{libns}
%defattr (-,root,root,-)
%{_libdir}/libns-%{version}.so*
%files devel
%defattr (-,root,root,-)
%{_libdir}/libdns.so
%{_libdir}/libisc.so
%{_libdir}/libisccc.so
%{_libdir}/libisccfg.so
%{_libdir}/libns.so
%{_includedir}/bind
%files doc -f filelist-bind-doc
%defattr (-,root,root,-)
%dir %doc %{_defaultdocdir}/bind
%files utils
%defattr (-,root,root,-)
%config(noreplace) %{_sysconfdir}/bind.keys
%config(noreplace) %{_sysconfdir}/named.conf
%{_bindir}/delv
%{_bindir}/dig
%{_bindir}/host
%{_bindir}/mdig
%{_bindir}/nslookup
%{_bindir}/nsupdate
%{_bindir}/arpaname
%{_sbindir}/ddns-confgen
%{_bindir}/dnssec-dsfromkey
%{_bindir}/dnssec-importkey
%{_bindir}/dnssec-keyfromlabel
%{_bindir}/dnssec-keygen
%{_bindir}/dnssec-revoke
%{_bindir}/dnssec-settime
%{_bindir}/dnssec-signzone
%{_bindir}/dnssec-verify
%{_bindir}/dnssec-cds
%{_bindir}/dnssec-ksr
%{_bindir}/named-journalprint
%{_bindir}/nsec3hash
%{_sbindir}/rndc
%{_sbindir}/rndc-confgen
%{_sbindir}/tsig-keygen
%dir %doc %{_defaultdocdir}/bind
%{_mandir}/man1/arpaname.1%{ext_man}
%{_mandir}/man1/delv.1%{ext_man}
%{_mandir}/man1/dig.1%{ext_man}
%{_mandir}/man1/host.1%{ext_man}
%{_mandir}/man1/mdig.1%{ext_man}
%{_mandir}/man1/nslookup.1%{ext_man}
%{_mandir}/man1/nsupdate.1%{ext_man}
%{_mandir}/man5/rndc.conf.5%{ext_man}
%{_mandir}/man8/ddns-confgen.8%{ext_man}
%{_mandir}/man1/dnssec-dsfromkey.1%{ext_man}
%{_mandir}/man1/dnssec-importkey.1%{ext_man}
%{_mandir}/man1/dnssec-keyfromlabel.1%{ext_man}
%{_mandir}/man1/dnssec-keygen.1%{ext_man}
%{_mandir}/man1/dnssec-revoke.1%{ext_man}
%{_mandir}/man1/dnssec-settime.1%{ext_man}
%{_mandir}/man1/dnssec-signzone.1%{ext_man}
%{_mandir}/man1/dnssec-verify.1%{ext_man}
%{_mandir}/man1/dnssec-cds.1%{ext_man}
%{_mandir}/man1/dnssec-ksr.1%{ext_man}
%{_mandir}/man1/named-journalprint.1%{ext_man}
%{_mandir}/man1/nsec3hash.1%{ext_man}
%{_mandir}/man8/rndc.8%{ext_man}
%{_mandir}/man8/rndc-confgen.8%{ext_man}
%{_mandir}/man8/tsig-keygen.8%{ext_man}
%changelog