public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/bind] rawhide: Seemingly working alternatives including unit files
@ 2026-07-01 9:47
0 siblings, 0 replies; only message in thread
From: @ 2026-07-01 9:47 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/bind
Branch : rawhide
Commit : 448bd64587914a981f858b710b60dc69793acf59
Author : Petr Menšík <pemensik@redhat.com>
Date : 2026-06-24T15:27:14+02:00
Stats : +289/-29 in 1 file(s)
URL : https://src.fedoraproject.org/rpms/bind/c/448bd64587914a981f858b710b60dc69793acf59?branch=rawhide
Log:
Seemingly working alternatives including unit files
Support basic systemd unit handling
Fix double inclusion of bind9 include subdirectory
Fix bind-dnssec-utils ghost files
Make permissions match target binaries too.
Do not use alternatives for named-checkzone and named-compilezone
Use alternatives, prefix name with %{upname}-
Add also usage of --initscript %{name}. Not use if named service name
should not be used there instead. Match also remove names.
Define reusable variables with tool names
Use it to define common lists, reuse them multiple times.
Add named-{checkzone,compilezone}. Fix utils man8 typo.
Handle mans and units too.
---
diff --git a/bind.spec b/bind.spec
index eec79dd..8b0c29c 100644
--- a/bind.spec
+++ b/bind.spec
@@ -36,6 +36,7 @@
%bcond_with OPENSSL_ENGINE
%endif
+%{!?manext:%global manext .gz}
%{!?_pkgdocdir:%global _pkgdocdir %{_docdir}/%{name}-%{version}}
%global bind_dir /var/named
%global chroot_prefix %{bind_dir}/chroot
@@ -68,6 +69,9 @@
# lib*.so.X versions of selected libraries no longer provided,
# lib*-%%{version}-RH.so is provided as an internal implementation detail
+# priority of this srpm executables
+%global alternatives_prio 10
+
# Upstream package name
%global upname bind
# Epoch is intentionally missing from Provides to be lower than bind package
@@ -164,6 +168,8 @@ Requires: coreutils
Requires(post): shadow-utils
Requires(post): glibc-common
Requires(post): grep
+Requires(post): %{_bindir}/alternatives
+Requires(postun): %{_bindir}/alternatives
Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
Recommends: %{name}-utils %{name}-dnssec-utils
%upname_compat %{upname}
@@ -255,6 +261,8 @@ Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
# For compatibility with Debian package
Provides: dnsutils = %{epoch}:%{version}-%{release}
Obsoletes: %{name}-pkcs11-utils < 32:9.18.4-2
+Requires(post): %{_bindir}/alternatives
+Requires(postun): %{_bindir}/alternatives
%upname_compat %{upname}-utils
%description utils
@@ -273,6 +281,8 @@ Requires: %{name}-libs%{?_isa} = %{epoch}:%{version}-%{release}
Recommends: %{name}-utils
Obsoletes: python3-%{name} < 32:9.18.0
Obsoletes: %{name}-dnssec-doc < 32:9.18.4-2
+Requires(post): %{_bindir}/alternatives
+Requires(postun): %{_bindir}/alternatives
%upname_compat %{upname}-dnssec-utils
%description dnssec-utils
@@ -480,6 +490,9 @@ popd # build
# Prepare unit files
for SERVICEFILE in %{SOURCE37} %{SOURCE38} %{SOURCE44} %{SOURCE46}; do
NEWNAME="$(basename -- "$SERVICEFILE" .in)"
+ if ! echo "$NEWNAME" | grep -q -- -chroot; then
+ NEWNAME="$(echo "$NEWNAME" | sed -e "s,^named,%{name},")"
+ fi
sed -e "s|%%{program_suffix}|%{program_suffix}|g" \
-e "s|%%{name}|%{name}|g" \
-e "s|%%{bind_libexecdir}|%{bind_libexecdir}|g" \
@@ -721,8 +734,117 @@ mkdir -p ${RPM_BUILD_ROOT}%{_tmpfilesdir}
install -p -m 644 %{SOURCE35} ${RPM_BUILD_ROOT}%{_tmpfilesdir}/%{name}.conf
install -p -m 644 %{SOURCE51} ${RPM_BUILD_ROOT}%{_tmpfilesdir}/%{name}-chroot.conf
+
+%if %{with DNSTAP}
+ %global utils_bin1_dnstap dnstap-read
+%endif
+%if %{with LMDB}
+ %global utils_bin1_lmdb named-nzd2nzf
+%endif
+
+%global utils_bin1 dig host delv nslookup nsupdate arpaname nsec3hash named-{checkzone,compilezone} %{?utils_bin1_dnstap} %{?utils_bin1_lmdb}
+%global utils_bin8 ddns-confgen tsig-keygen
+%global main_bin8 named rndc{,-confgen}
+%global main_bin1 named{-journalprint,-checkconf,-rrchecker} mdig
+%global dnssec_utils_bin1 dnssec-{cds,dsfromkey,importkey,keyfromlabel,keygen,revoke,verify}
+%global main_man5 named.conf rndc.conf
+%global main_unit named.service named-setup-rndc.service
+%global main_lib filter-{a,aaaa}
+
+# Alternatives touches symlinks targets
+for BIN in %{utils_bin1} %{main_bin1} %{dnssec_utils_bin1}; do
+ install -m 0755 /dev/null ${RPM_BUILD_ROOT}%{_bindir}/${BIN}
+ touch ${RPM_BUILD_ROOT}%{_mandir}/man1/${BIN}.1
+done
+
+for BIN in %{main_bin8}; do
+ install -m 0755 /dev/null ${RPM_BUILD_ROOT}%{_sbindir}/${BIN}
+ touch ${RPM_BUILD_ROOT}%{_mandir}/man8/${BIN}.8
+done
+
+for MAN in %{main_man5}; do
+ touch ${RPM_BUILD_ROOT}%{_mandir}/man5/$MAN.5
+done
+for MAN in %{utils_bin8}; do
+ touch ${RPM_BUILD_ROOT}%{_mandir}/man8/$MAN.8
+done
+
+# named-chroot*.service are missing intentionally now
+# let bind*-chroot conflict
+for UNIT in %{main_unit}; do
+ touch ${RPM_BUILD_ROOT}%{_unitdir}/$UNIT
+done
+
+
+%define altfbin() \\\
+ --follower %{_bindir}/%{1} %{upname}-%{1} %{_bindir}/%{1}%{program_suffix}
+%define altfman() \\\
+ --follower %{_mandir}/man%{2}/%{1}.%{2}%{manext} %{upname}-%{1}.%{2} %{_mandir}/man%{2}/%{1}%{program_suffix}.%{2}%{manext}
+# {1} (_unitdir/)compat-service {2} new-version-specific-service
+%define altfunit() \\\
+ --follower %{_unitdir}/%{1} %{upname}-%{1} %{_unitdir}/%{2}
+
+# {1} (_bindir/)exec-name {2} man-category
+%define altfbinman() \\\
+ --follower %{_bindir}/%{1} %{upname}-%{1} %{_bindir}/%{1}%{program_suffix} \\\
+ --follower %{_mandir}/man%{2}/%{1}.%{2}%{manext} %{upname}-%{1}.%{2} %{_mandir}/man%{2}/%{1}%{program_suffix}.%{2}%{manext}
+
+%define altfsbin() \\\
+ --follower %{_sbindir}/%{1} %{upname}-%{1} %{_sbindir}/%{1}%{program_suffix}
+
+# {1} (_sbindir/)exec-name {2} man-category
+%define altfsbinman() \\\
+ --follower %{_sbindir}/%{1} %{upname}-%{1} %{_sbindir}/%{1}%{program_suffix} \\\
+ --follower %{_mandir}/man%{2}/%{1}.%{2}%{manext} %{upname}-%{1}.%{2} %{_mandir}/man%{2}/%{1}%{program_suffix}.%{2}%{manext}
+
+%define altflibman() \\\
+ --follower %{_libdir}/bind/%{1}.so %{upname}-%{1}.so %{_libdir}/bind/%{1}.so%{program_suffix} \\\
+ --follower %{_mandir}/man%{2}/%{1}.%{2}%{manext} %{upname}-%{1}.%{2} %{_mandir}/man%{2}/%{1}%{program_suffix}.%{2}%{manext}
+
+%define altrmbinman() \
+ BINX="%{_bindir}/%{1}"; \
+ MANX="%{_mandir}/man%{2}/%{1}.%{2}%{?manext}"; \
+ if ! [ -L "$BINX" ] && [ -f "$BINX" ] && [ -x "$BINX" ]; then \
+ rm -f -- "$BINX"; \
+ fi; \
+ if ! [ -L "$MANX" ] && [ -f "$MANX" ]; then \
+ rm -f -- "$MANX"; \
+ fi
+%define altrmsbinman() \
+ BINX="%{_sbindir}/%{1}"; \
+ MANX="%{_mandir}/man%{2}/%{1}.%{2}%{?manext}"; \
+ if ! [ -L "$BINX" ] && [ -f "$BINX" ] && [ -x "$BINX" ]; then \
+ rm -f -- "$BINX"; \
+ fi; \
+ if ! [ -L "$MANX" ] && [ -f "$MANX" ]; then \
+ rm -f -- "$MANX"; \
+ fi
+
+%define altrmlibman() \
+ BINX="%{_libdir}/bind/%{1}.so"; \
+ MANX="%{_mandir}/man%{2}/%{1}.%{2}%{?manext}"; \
+ if ! [ -L "$BINX" ] && [ -f "$BINX" ] && [ -x "$BINX" ]; then \
+ rm -f -- "$BINX"; \
+ fi; \
+ if ! [ -L "$MANX" ] && [ -f "$MANX" ]; then \
+ rm -f -- "$MANX"; \
+ fi
+
+%define altrmman() \
+ MANX="%{_mandir}/man%{2}/%{1}.%{2}%{?manext}"; \
+ if ! [ -L "$MANX" ] && [ -f "$MANX" ]; then \
+ rm -f -- "$MANX"; \
+ fi
+
+%define altrmunit() \
+ UNITX="%{_unitdir}/%{1}" \
+ if ! [ -L "$UNITX" ] && [ -f "$UNITX" ]; then \
+ rm -f -- "$UNITX"; \
+ fi
+
+
%post
-%?ldconfig
+%{?ldconfig}
if [ "$1" -eq 1 ]; then
# Initial installation
[ -x /sbin/restorecon ] && /sbin/restorecon /etc/rndc.* /etc/named.* >/dev/null 2>&1 ;
@@ -745,17 +867,105 @@ else
fi
fi
fi
-%systemd_post named.service
+%if "%{program_suffix}" != ""
+ ALTS=""
+ for BIN in %{main_bin1}; do
+ ALTS+="%{altfbinman $BIN 1}"
+ %{altrmbinman $BIN 1}
+ done
+ for BIN in %{main_bin8}; do
+ ALTS+="%{altfsbinman $BIN 8}"
+ %{altrmsbinman $BIN 8}
+ done
+ for MAN in %{main_man5}; do
+ %{altrmman $MAN 5}
+ ALTS+="%{altfman $MAN 5}"
+ done
+ for LIB in %{main_lib}; do
+ %{altrmlibman $LIB 8}
+ ALTS+="%{altflibman $LIB 8}"
+ done
+ for UNIT in %{main_unit}; do
+ %{altrmunit $UNIT}
+ done
+ alternatives --install %{_sbindir}/named %{upname}-named %{_sbindir}/named%{program_suffix} %{alternatives_prio} \
+ %{altfman named 8} \
+ %{altfunit named.service %{name}.service} \
+ %{altfunit named-setup-rndc.service %{name}-setup-rndc.service} \
+ --initscript %{name} \
+ ${ALTS}
+%endif
+%systemd_post %{name}.service
:;
%preun
# Package removal, not upgrade
-%systemd_preun named.service
+%systemd_preun %{name}.service
%postun
-%?ldconfig
+%{?ldconfig}
# Package upgrade, not uninstall
-%systemd_postun_with_restart named.service
+%systemd_postun_with_restart %{name}.service
+%if "%{program_suffix}" != ""
+if [ $1 -eq 0 ] ; then
+ alternatives --remove %{upname}-named %{_sbindir}/named%{program_suffix}
+fi
+%endif
+%end
+
+%post utils
+%if "%{program_suffix}" != ""
+ ALTS=""
+ for BIN in %{utils_bin1}; do
+ %{altrmbinman ${BIN} 1}
+ [ "$BIN" != dig ] && ALTS+="%{altfbinman $BIN 1}"
+ done
+ for BIN in %{utils_bin8}; do
+ %{altrmsbinman ${BIN} 8}
+ ALTS+="%{altfbinman $BIN 8}"
+ done
+ alternatives --install %{_bindir}/dig %{upname}-utils-dig %{_bindir}/dig%{program_suffix} %{alternatives_prio} \
+ %{altfman dig 1} \
+ ${ALTS}
+%endif
+%end
+
+%postun utils
+%if "%{program_suffix}" != ""
+if [ $1 -eq 0 ] ; then
+ alternatives --remove %{upname}-utils-dig %{_bindir}/dig%{program_suffix}
+fi
+%endif
+%end
+
+%post dnssec-utils
+%if "%{program_suffix}" != ""
+ ALTS=""
+ for BIN in %{dnssec_utils_bin1}; do
+ BINX="%{_bindir}/${BIN}"
+ MANX="%{_mandir}/man1/${BIN}.1%{manext}"
+ if ! [ -L "$BINX" ] && [ -f "$BINX" ] && [ -x "$BINX" ]; then
+ rm -f -- "$BINX"
+ fi
+ if ! [ -L "$MANX" ] && [ -f "$MANX" ]; then
+ rm -f -- "$MANX"
+ fi
+ [ "$BIN" != dnssec-verify ] && ALTS+="%{altfbinman $BIN 1}"
+ done
+ alternatives --install %{_bindir}/dnssec-verify %{upname}-dnssec-utils %{_bindir}/dnssec-verify%{program_suffix} %{alternatives_prio} \
+ %{altfman dnssec-verify 1} \
+ $ALTS
+%endif
+%end
+
+%postun dnssec-utils
+%if "%{program_suffix}" != ""
+if [ $1 -eq 0 ] ; then
+ alternatives --remove %{upname}-dnssec-utils %{_bindir}/dnssec-verify%{program_suffix}
+fi
+%endif
+%end
+
# Fix permissions on existing device files on upgrade
%define chroot_fix_devices() \
@@ -807,37 +1017,60 @@ fi;
# TODO: Move from lib/bind to lib/named, as used by upstream
# FIXME: current build targets filters into %%_libdir/bind again?
%dir %{_libdir}/bind
-%{_libdir}/bind/filter*.so
+%{_libdir}/bind/filter-{a,aaaa}%{program_suffix}.so
%dir %{_libdir}/named
%config(noreplace) %verify(not md5 size mtime) %{_sysconfdir}/sysconfig/named
%config(noreplace) %attr(0644,root,named) %{_sysconfdir}/named.root.key
%config(noreplace) %attr(0644,root,named) %{_sysconfdir}/named.ca
%config(noreplace) %{_sysconfdir}/logrotate.d/named
%{_tmpfilesdir}/%{name}.conf
-%{_unitdir}/named.service
-%{_unitdir}/named-setup-rndc.service
+%{_unitdir}/%{name}.service
+%{_unitdir}/%{name}-setup-rndc.service
%{_sysusersdir}/%{name}.conf
%{_bindir}/named-journalprint%{program_suffix}
%{_bindir}/named-checkconf%{program_suffix}
%{_bindir}/named-rrchecker%{program_suffix}
%{_bindir}/mdig%{program_suffix}
%{_sbindir}/named%{program_suffix}
-%{_sbindir}/rndc*
+%{_sbindir}/rndc%{program_suffix}
+%{_sbindir}/rndc-confgen%{program_suffix}
+%ghost %{_unitdir}/named.service
+%ghost %{_unitdir}/named-setup-rndc.service
+%ghost %{_libdir}/bind/filter-{a,aaaa}.so
+%ghost %{_bindir}/named-checkconf
+%ghost %{_bindir}/named-journalprint
+%ghost %{_bindir}/named-rrchecker
+%ghost %{_bindir}/mdig
+%ghost %{_sbindir}/named
+%ghost %{_sbindir}/rndc
+%ghost %{_sbindir}/rndc-confgen
%if "%{_sbindir}" != "%{_bindir}"
%{_sbindir}/named-checkconf%{program_suffix}
+%ghost %{_sbindir}/named-checkconf
%endif
%{_libexecdir}/%{name}/generate-rndc-key.sh
%{_libexecdir}/%{name}/setup-named-softhsm.sh
+# man pages
%{_mandir}/man1/mdig%{program_suffix}.1*
+%{_mandir}/man1/named-checkconf%{program_suffix}.1*
+%{_mandir}/man1/named-journalprint%{program_suffix}.1*
%{_mandir}/man1/named-rrchecker%{program_suffix}.1*
%{_mandir}/man5/named.conf%{program_suffix}.5*
%{_mandir}/man5/rndc.conf%{program_suffix}.5*
%{_mandir}/man8/rndc%{program_suffix}.8*
%{_mandir}/man8/named%{program_suffix}.8*
-%{_mandir}/man1/named-checkconf%{program_suffix}.1*
%{_mandir}/man8/rndc-confgen%{program_suffix}.8*
-%{_mandir}/man1/named-journalprint%{program_suffix}.1*
-%{_mandir}/man8/filter-*%{program_suffix}.8.gz
+%{_mandir}/man8/filter-{a,aaaa}%{program_suffix}.8*
+%ghost %{_mandir}/man1/mdig.1*
+%ghost %{_mandir}/man1/named-checkconf.1*
+%ghost %{_mandir}/man1/named-journalprint.1*
+%ghost %{_mandir}/man1/named-rrchecker.1*
+%ghost %{_mandir}/man5/named.conf.5*
+%ghost %{_mandir}/man5/rndc.conf.5*
+%ghost %{_mandir}/man8/rndc.8*
+%ghost %{_mandir}/man8/named.8*
+%ghost %{_mandir}/man8/rndc-confgen.8*
+%ghost %{_mandir}/man8/filter-{a,aaaa}.8*
%doc README.md named.conf.default
%doc sample/
@@ -866,7 +1099,7 @@ fi;
# ^- The default rndc.conf which uses rndc.key is in named's default internal config -
# so rndc.conf is not necessary.
%defattr(-,named,named,-)
-%dir /run/named
+%dir %{_rundir}/named
%files libs
%{_libdir}/libbind9-%{version}*.so
@@ -880,45 +1113,73 @@ fi;
%license COPYRIGHT
%files utils
-%{_bindir}/dig%{program_suffix}
+%{_bindir}/arpaname%{program_suffix}
%{_bindir}/delv%{program_suffix}
+%{_bindir}/dig%{program_suffix}
%{_bindir}/host%{program_suffix}
+%{_bindir}/nsec3hash%{program_suffix}
%{_bindir}/nslookup%{program_suffix}
%{_bindir}/nsupdate%{program_suffix}
-%{_bindir}/arpaname%{program_suffix}
-%{_sbindir}/ddns-confgen%{program_suffix}
-%{_sbindir}/tsig-keygen%{program_suffix}
-%{_bindir}/nsec3hash%{program_suffix}
%{_bindir}/named-checkzone%{program_suffix}
%{_bindir}/named-compilezone%{program_suffix}
+%{_sbindir}/ddns-confgen%{program_suffix}
+%{_sbindir}/tsig-keygen%{program_suffix}
+%ghost %{_bindir}/arpaname
+%ghost %{_bindir}/delv
+%ghost %{_bindir}/dig
+%ghost %{_bindir}/host
+%ghost %{_bindir}/nsec3hash
+%ghost %{_bindir}/nslookup
+%ghost %{_bindir}/nsupdate
+%ghost %{_bindir}/named-checkzone
+%ghost %{_bindir}/named-compilezone
+%ghost %{_sbindir}/ddns-confgen
+%ghost %{_sbindir}/tsig-keygen
%if "%{_sbindir}" != "%{_bindir}"
-%{_sbindir}/named-checkzone%{program_suffix}
-%{_sbindir}/named-compilezone%{program_suffix}
+%{_sbindir}/named-checkzone
+%{_sbindir}/named-compilezone
%endif
%if %{with DNSTAP}
%{_bindir}/dnstap-read%{program_suffix}
%{_mandir}/man1/dnstap-read%{program_suffix}.1*
+%ghost %{_bindir}/dnstap-read
+%ghost %{_mandir}/man1/dnstap-read.1*
%endif
%if %{with LMDB}
%{_bindir}/named-nzd2nzf%{program_suffix}
%{_mandir}/man1/named-nzd2nzf%{program_suffix}.1*
+%ghost %{_bindir}/named-nzd2nzf
+%ghost %{_mandir}/man1/named-nzd2nzf.1*
%endif
-%{_mandir}/man1/host%{program_suffix}.1*
-%{_mandir}/man1/nsupdate%{program_suffix}.1*
-%{_mandir}/man1/dig%{program_suffix}.1*
+%{_mandir}/man1/arpaname%{program_suffix}.1*
%{_mandir}/man1/delv%{program_suffix}.1*
+%{_mandir}/man1/dig%{program_suffix}.1*
+%{_mandir}/man1/host%{program_suffix}.1*
%{_mandir}/man1/nslookup%{program_suffix}.1*
-%{_mandir}/man1/arpaname%{program_suffix}.1*
-%{_mandir}/man8/ddns-confgen%{program_suffix}.8*
-%{_mandir}/man8/tsig-keygen%{program_suffix}.8*
+%{_mandir}/man1/nsupdate%{program_suffix}.1*
%{_mandir}/man1/nsec3hash%{program_suffix}.1*
%{_mandir}/man1/named-checkzone%{program_suffix}.1*
%{_mandir}/man1/named-compilezone%{program_suffix}.1*
+%{_mandir}/man8/ddns-confgen%{program_suffix}.8*
+%{_mandir}/man8/tsig-keygen%{program_suffix}.8*
+%ghost %{_mandir}/man1/arpaname.1*
+%ghost %{_mandir}/man1/delv.1*
+%ghost %{_mandir}/man1/dig.1*
+%ghost %{_mandir}/man1/host.1*
+%ghost %{_mandir}/man1/nslookup.1*
+%ghost %{_mandir}/man1/nsupdate.1*
+%ghost %{_mandir}/man1/nsec3hash.1*
+%ghost %{_mandir}/man1/named-checkzone.1*
+%ghost %{_mandir}/man1/named-compilezone.1*
+%ghost %{_mandir}/man8/ddns-confgen.8*
+%ghost %{_mandir}/man8/tsig-keygen.8*
%{_sysconfdir}/trusted-key.key
%files dnssec-utils
-%{_bindir}/dnssec*
-%{_mandir}/man1/dnssec*.1*
+%{_bindir}/dnssec-{cds,dsfromkey,importkey,keyfromlabel,keygen,revoke,settime,signzone,verify}%{program_suffix}
+%{_mandir}/man1/dnssec-{cds,dsfromkey,importkey,keyfromlabel,keygen,revoke,settime,signzone,verify}%{program_suffix}.1*
+%ghost %{_bindir}/dnssec-{cds,dsfromkey,importkey,keyfromlabel,keygen,revoke,settime,signzone,verify}
+%ghost %{_mandir}/man1/dnssec-{cds,dsfromkey,importkey,keyfromlabel,keygen,revoke,settime,signzone,verify}.1*
%files devel
%{_libdir}/libbind9-%{mver}.so
@@ -937,7 +1198,6 @@ fi;
%{bind_include}/irs
%{bind_include}/isc
%{bind_include}/isccfg
-%{bind_include}/bind9
%files chroot
%config(noreplace) %{_sysconfdir}/named-chroot.files
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-01 9:47 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-07-01 9:47 [rpms/bind] rawhide: Seemingly working alternatives including unit files
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox