avahi/avahi.spec
2024-01-15 12:44:01 +03:00

654 lines
19 KiB
RPMSpec

%define commit 35bb1bae902ae9ff2da809fb5f577ba873c43359
%define commit_short %(echo %{commit} | head -c6)
# CVE-2021-26720 specific to Debian
# Fixed in git after v0.8:
# CVE-2023-38469
# CVE-2023-38473
# CVE-2023-38470 (https://github.com/lathiat/avahi/commit/94cb6489)
# CVE-2023-38471
# CVE-2023-38472
# CVE-2021-3468
%define client_name %{name}-client
%define common_name %{name}-common
%define core_name %{name}-core
%define dns_sd_name %{name}-compat-libdns_sd
%define glib_name %{name}-glib
%define gobject_name %{name}-gobject
%define howl_name %{name}-compat-howl
%define libevent_name %{name}-libevent
%define qt5_name %{name}-qt5
%define ui_name %{name}-ui
%define ui_gtk3_name %{name}-ui-gtk3
%define client_major 3
%define common_major 3
%define core_major 7
%define dns_sd_major 1
%define glib_major 1
%define gobject_major 0
%define howl_major 0
%define libevent_major 1
%define qt5_major 1
%define ui_major 0
%define ui_gtk3_major 0
%define lib_client_name %mklibname %{client_name} %{client_major}
%define develnameclient %mklibname %{client_name} -d
%define lib_common_name %mklibname %{common_name} %{common_major}
%define develnamecommon %mklibname %{common_name} -d
%define lib_core_name %mklibname %{core_name} %{core_major}
%define develnamecore %mklibname %{core_name} -d
%define lib_dns_sd_name %mklibname %{dns_sd_name} %{dns_sd_major}
%define develnamedns_sd %mklibname %{dns_sd_name} -d
%define lib_glib_name %mklibname %{glib_name} %{glib_major}
%define develnameglib %mklibname %{glib_name} -d
%define lib_gobject_name %mklibname %{gobject_name} %{gobject_major}
%define develnamegobject %mklibname %{gobject_name} -d
%define lib_howl_name %mklibname %{howl_name} %{howl_major}
%define develnamehowl %mklibname %{howl_name} -d
%define lib_libevent_name %mklibname %{libevent_name}_ %{libevent_major}
%define develnamelibevent %mklibname %{libevent_name} -d
%define lib_qt5_name %mklibname %{qt5_name}_ %{qt5_major}
%define develnameqt5 %mklibname %{qt5_name} -d
%define lib_ui_name %mklibname %{ui_name} %{ui_major}
%define develnameui %mklibname %{ui_name} -d
%define lib_ui_gtk3_name %mklibname %{ui_gtk3_name}_ %{ui_gtk3_major}
%define develnameui_gtk3 %mklibname %{ui_gtk3_name} -d
%{?build_qt5}%{?!build_qt5:%bcond_without qt5}
%{?build_gtk3}%{?!build_gtk3:%bcond_without gtk3}
%bcond_with mono
%bcond_without qt5
%bcond_without gtk3
%bcond_without python
Summary: Avahi service discovery (mDNS/DNS-SD) suite
Name: avahi
Version: 0.8
Release: 12.git%{commit_short}.3
License: LGPLv2+
Group: System/Servers
Url: http://avahi.org/
#Source0: http://avahi.org/download/%{name}-%{version}.tar.gz
Source0: https://github.com/lathiat/avahi/archive/%{commit}.tar.gz?/%{name}-%{commit}.tar.gz
Source1: avahi-hostname.sh
Source2: sysusers.avahi.conf
Source100: %{name}.rpmlintrc
Patch0: avahi-0.6.31-gtk-is-broken-beyond-repair-gtk-die-die-die.patch
Patch1: avahi-0.6.31.workaround.patch
BuildRequires: intltool
BuildRequires: cap-devel
BuildRequires: expat-devel >= 2.0.1
BuildRequires: gdbm-devel
BuildRequires: %{_bindir}/xmltoman
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(libevent)
%if %{with python}
BuildRequires: python3egg(dbus-python)
BuildRequires: pkgconfig(pygobject-3.0)
%endif
BuildRequires: pkgconfig(libdaemon)
BuildRequires: pkgconfig(libglade-2.0)
%if %{with qt5}
BuildRequires: pkgconfig(Qt5Core)
%endif
%if %{with gtk3}
BuildRequires: pkgconfig(gtk+-3.0)
%endif
BuildRequires: systemd-units
Recommends: nss_mdns
Requires(pre): /bin/systemd-sysusers
%description
Avahi is a system which facilitates service discovery on a local
network -- this means that you can plug your laptop or computer into a
network and instantly be able to view other people who you can chat
with, find printers to print to or find files being shared. This kind
of technology is already found in MacOS X (branded 'Rendezvous',
'Bonjour' and sometimes 'ZeroConf') and is very convenient.
%files -f avahi.lang
%dir %{_sysconfdir}/%{name}/
%dir %{_sysconfdir}/%{name}/services/
%config(noreplace) %{_sysconfdir}/%{name}/hosts
%config(noreplace) %{_sysconfdir}/%{name}/%{name}-daemon.conf
%config(noreplace) %{_sysconfdir}/%{name}/avahi-autoipd.action
%config(noreplace) %{_datadir}/dbus-1/system.d/%{name}-dbus.conf
%attr(0755,avahi,avahi) %dir %{_localstatedir}/avahi
%{_sysconfdir}/sysconfig/network-scripts/hostname.d/avahi
%{_bindir}/%{name}-browse
%{_bindir}/%{name}-browse-domains
%{_bindir}/%{name}-publish
%{_bindir}/%{name}-publish-address
%{_bindir}/%{name}-publish-service
%{_bindir}/%{name}-resolve
%{_bindir}/%{name}-resolve-address
%{_bindir}/%{name}-resolve-host-name
%{_bindir}/%{name}-set-host-name
%{_sbindir}/%{name}-daemon
%{_sbindir}/avahi-autoipd
%{_datadir}/%{name}/%{name}-service.dtd
%{_datadir}/dbus-1/interfaces/*.xml
%{_mandir}/man1/%{name}-browse-domains.1*
%{_mandir}/man1/%{name}-browse.1*
%{_mandir}/man1/%{name}-discover.1*
%{_mandir}/man1/%{name}-publish.1*
%{_mandir}/man1/%{name}-publish-address.1*
%{_mandir}/man1/%{name}-publish-service.1*
%{_mandir}/man1/%{name}-resolve.1*
%{_mandir}/man1/%{name}-resolve-address.1*
%{_mandir}/man1/%{name}-resolve-host-name.1*
%{_mandir}/man1/%{name}-set-host-name.1*
%{_mandir}/man5/%{name}-daemon.conf.5*
%{_mandir}/man5/%{name}.hosts.5*
%{_mandir}/man5/%{name}.service.5*
%{_mandir}/man8/%{name}-daemon.8*
%{_mandir}/man8/avahi-autoipd*
%dir %{_libdir}/avahi
%if %{with python}
%{_libdir}/avahi/service-types.db
%endif
%{_sysusersdir}/%{name}.conf
%{_unitdir}/avahi-daemon.service
%{_unitdir}/avahi-daemon.socket
%{_datadir}/dbus-1/system-services/org.freedesktop.Avahi.service
%pre
%sysusers_create_package %{name} %{SOURCE2}
%post
%systemd_post %{name}-daemon.service
%preun
%systemd_preun %{name}-daemon.service
#----------------------------------------------------------------------------
%package dnsconfd
Summary: Avahi DNS configuration server
Group: System/Servers
Requires: %{name} = %{EVRD}
%description dnsconfd
avahi-dnsconfd is a small daemon which may be used to configure
conventional DNS servers using mDNS in a DHCP-like fashion.
Especially useful on IPv6.
%files dnsconfd
%{_sysconfdir}/%{name}/%{name}-dnsconfd.action
%{_unitdir}/avahi-dnsconfd.service
%{_sbindir}/%{name}-dnsconfd
%{_mandir}/man8/%{name}-dnsconfd.8*
%{_mandir}/man8/%{name}-dnsconfd.action.8*
%post dnsconfd
%systemd_post %{name}-dnsconfd.service
%preun dnsconfd
%systemd_preun %{name}-dnsconfd.service
#----------------------------------------------------------------------------
%package x11
Summary: Graphical tools for Avahi
Group: System/Servers
Requires: %{name} = %{EVRD}
%description x11
Graphical tools for Avahi.
It includes avahi-discover-standalone.
%files x11
%if %{with gtk3}
%{_bindir}/%{name}-discover-standalone
%{_bindir}/bshell
%{_bindir}/bssh
%{_bindir}/bvnc
%{_datadir}/applications/bssh.desktop
%{_datadir}/applications/bvnc.desktop
%{_datadir}/%{name}/interfaces/%{name}-discover.ui
%{_mandir}/man1/bshell.1*
%{_mandir}/man1/bssh.1*
%{_mandir}/man1/bvnc.1*
%endif
%if %{with python}
%{_datadir}/applications/%{name}-discover.desktop
%endif
#----------------------------------------------------------------------------
%if %{with python}
%package python3
Summary: Python bindings and utilities for Avahi
Group: System/Libraries
Requires: python3egg(twisted)
Requires: python3egg(dbus-python)
Requires: %{name}
Requires: %{name}-x11
%description python3
Python bindings and utilities for Avahi.
It includes avahi-bookmarks and avahi-discover.
%files python3
%{_bindir}/%{name}-bookmarks
%{_bindir}/%{name}-discover
%{py3_puresitedir}/%{name}/*.py*
%{py3_puresitedir}/%{name}/__pycache__
%{_mandir}/man1/%{name}-bookmarks.1*
%endif
#----------------------------------------------------------------------------
%if %{with mono}
%package sharp
Summary: Mono bindings for Avahi
Group: System/Libraries
BuildRequires: mono-tools
BuildRequires: mono-devel
BuildRequires: pkgconfig(gtk-sharp-2.0)
#gw this is needed by mono-find-requires:
#BuildRequires: avahi-ui-devel
Requires: %{lib_client_name} = %{EVRD}
Requires: %{lib_common_name} = %{EVRD}
Requires: %{lib_glib_name} = %{EVRD}
%description sharp
Mono bindings for Avahi.
%files sharp
%{_prefix}/lib/mono/%{name}-sharp/%{name}-sharp.dll
%{_prefix}/lib/mono/gac/%{name}-sharp/
%{_libdir}/pkgconfig/%{name}-sharp.pc
%{_libdir}/pkgconfig/%{name}-ui-sharp.pc
#----------------------------------------------------------------------------
%package sharp-doc
Summary: Development documentation for avahi-sharp
Group: Development/Other
Requires(post,postun): mono-tools
%description sharp-doc
This package contains the API documentation for the avahi-sharp in
Monodoc format.
%files sharp-doc
%{_usr}/lib/monodoc/sources/%{name}-sharp-docs.source
%{_usr}/lib/monodoc/sources/%{name}-sharp-docs.tree
%{_usr}/lib/monodoc/sources/%{name}-sharp-docs.zip
%post sharp-doc
%{_bindir}/monodoc --make-index > /dev/null
%postun sharp-doc
if [ "$1" = "0" -a -x %{_bindir}/monodoc ]; then %{_bindir}/monodoc --make-index > /dev/null
fi
%endif
#----------------------------------------------------------------------------
%package -n %{lib_client_name}
Summary: Library for avahi-client
Group: System/Libraries
%description -n %{lib_client_name}
Library for avahi-client.
%files -n %{lib_client_name}
%{_libdir}/lib%{name}-client.so.%{client_major}*
#----------------------------------------------------------------------------
%package -n %{develnameclient}
Summary: Devel library for avahi-client
Group: Development/C
Requires: %{lib_client_name} = %{EVRD}
Provides: %{client_name}-devel = %{EVRD}
%description -n %{develnameclient}
Devel library for avahi-client.
%files -n %{develnameclient}
%{_includedir}/%{name}-client
%{_libdir}/lib%{name}-client.so
%{_libdir}/pkgconfig/%{name}-client.pc
#----------------------------------------------------------------------------
%package -n %{lib_common_name}
Summary: Library for avahi-common
Group: System/Libraries
%description -n %{lib_common_name}
Library for avahi-common.
%files -n %{lib_common_name}
%{_libdir}/lib%{name}-common.so.%{common_major}*
#----------------------------------------------------------------------------
%package -n %{develnamecommon}
Summary: Devel library for avahi-common
Group: Development/C
Requires: %{lib_common_name} = %{EVRD}
Provides: %{common_name}-devel = %{EVRD}
%description -n %{develnamecommon}
Devel library for avahi-common.
%files -n %{develnamecommon}
%{_includedir}/%{name}-common
%{_libdir}/lib%{name}-common.so
#----------------------------------------------------------------------------
%package -n %{lib_core_name}
Summary: Library for avahi-core
Group: System/Libraries
%description -n %{lib_core_name}
Library for avahi-core.
%files -n %{lib_core_name}
%{_libdir}/lib%{name}-core.so.%{core_major}*
#----------------------------------------------------------------------------
%package -n %{develnamecore}
Summary: Devel library for avahi-core
Group: Development/C
Requires: %{lib_core_name} = %{EVRD}
Provides: %{core_name}-devel = %{EVRD}
%description -n %{develnamecore}
Devel library for avahi-core.
%files -n %{develnamecore}
%{_includedir}/%{name}-core
%{_libdir}/lib%{name}-core.so
%{_libdir}/pkgconfig/%{name}-core.pc
#----------------------------------------------------------------------------
%package -n %{lib_dns_sd_name}
Summary: Avahi compatibility library for libdns_sd
Group: System/Libraries
%description -n %{lib_dns_sd_name}
Avahi compatibility library for libdns_sd.
%files -n %{lib_dns_sd_name}
%{_libdir}/libdns_sd.so.%{dns_sd_major}*
#----------------------------------------------------------------------------
%package -n %{develnamedns_sd}
Summary: Avahi devel compatibility library for libdns_sd
Group: Development/C
Requires: %{lib_dns_sd_name} = %{EVRD}
Provides: %{dns_sd_name}-devel = %{EVRD}
%description -n %{develnamedns_sd}
Avahi devel compatibility library for libdns_sd.
%files -n %{develnamedns_sd}
%{_includedir}/%{name}-compat-libdns_sd
%{_libdir}/libdns_sd.so
%{_libdir}/pkgconfig/%{name}-compat-libdns_sd.pc
#----------------------------------------------------------------------------
%package -n %{lib_glib_name}
Summary: Library for avahi-glib
Group: System/Libraries
%description -n %{lib_glib_name}
Library for avahi-glib.
%files -n %{lib_glib_name}
%{_libdir}/lib%{name}-glib.so.%{glib_major}*
#----------------------------------------------------------------------------
%package -n %{develnameglib}
Summary: Devel library for avahi-glib
Group: Development/C
Requires: %{lib_glib_name} = %{EVRD}
Provides: %{glib_name}-devel = %{EVRD}
%description -n %{develnameglib}
Devel library for avahi-glib.
%files -n %{develnameglib}
%{_includedir}/%{name}-glib
%{_libdir}/lib%{name}-glib.so
%{_libdir}/pkgconfig/%{name}-glib.pc
#----------------------------------------------------------------------------
%package -n %{lib_gobject_name}
Summary: Library for avahi-gobject
Group: System/Libraries
%description -n %{lib_gobject_name}
Library for avahi-gobject.
%files -n %{lib_gobject_name}
%{_libdir}/lib%{name}-gobject.so.%{gobject_major}*
#----------------------------------------------------------------------------
%package -n %{develnamegobject}
Summary: Devel library for avahi-gobject
Group: Development/C
Requires: %{lib_gobject_name} = %{EVRD}
Provides: %{gobject_name}-devel = %{EVRD}
%description -n %{develnamegobject}
Devel library for avahi-gobject.
%files -n %{develnamegobject}
%{_includedir}/%{name}-gobject
%{_libdir}/lib%{name}-gobject.so
%{_libdir}/pkgconfig/%{name}-gobject.pc
#----------------------------------------------------------------------------
%package -n %{lib_howl_name}
Summary: Avahi compatibility library for howl
Group: System/Libraries
%description -n %{lib_howl_name}
Avahi compatibility library for howl.
%files -n %{lib_howl_name}
%{_libdir}/libhowl.so.%{howl_major}*
#----------------------------------------------------------------------------
%package -n %{develnamehowl}
Summary: Avahi devel compatibility library for libdns_sd for howl
Group: Development/C
Requires: %{lib_howl_name} = %{EVRD}
Provides: %{howl_name}-devel = %{EVRD}
%description -n %{develnamehowl}
Avahi devel compatibility library for libdns_sd for howl.
%files -n %{develnamehowl}
%{_includedir}/%{name}-compat-howl
%{_libdir}/libhowl.so
%{_libdir}/pkgconfig/%{name}-compat-howl.pc
%{_libdir}/pkgconfig/howl.pc
#----------------------------------------------------------------------------
%package -n %{lib_libevent_name}
Summary: Library for avahi-libevent
Group: System/Libraries
%description -n %{lib_libevent_name}
Library for avahi-libevent.
%files -n %{lib_libevent_name}
%{_libdir}/lib%{name}-libevent.so.%{libevent_major}*
%package -n %{develnamelibevent}
Summary: Devel library for avahi-libevent
Group: Development/C
Provides: %{libevent_name}-devel = %{EVRD}
Requires: %{lib_libevent_name} = %{EVRD}
Requires: %{develnamecore} = %{EVRD}
%description -n %{develnamelibevent}
Devel library for avahi-libevent.
%files -n %{develnamelibevent}
%{_includedir}/%{name}-libevent
%{_libdir}/lib%{name}-libevent.so
%{_libdir}/pkgconfig/%{name}-libevent.pc
#----------------------------------------------------------------------------
%if %{with qt5}
%package -n %{lib_qt5_name}
Summary: Library for avahi-qt5
Group: System/Libraries
%description -n %{lib_qt5_name}
Library for avahi-qt5.
%files -n %{lib_qt5_name}
%{_libdir}/lib%{name}-qt5.so.%{qt5_major}*
#----------------------------------------------------------------------------
%package -n %{develnameqt5}
Summary: Devel library for avahi-qt5
Group: Development/C
Provides: %{qt5_name}-devel = %{EVRD}
Requires: %{lib_qt5_name} = %{EVRD}
%description -n %{develnameqt5}
Devel library for avahi-qt5.
%files -n %{develnameqt5}
%{_includedir}/%{name}-qt5
%{_libdir}/lib%{name}-qt5.so
%{_libdir}/pkgconfig/%{name}-qt5.pc
%endif
#----------------------------------------------------------------------------
%if %{with gtk3}
%package -n %{lib_ui_gtk3_name}
Summary: Library for avahi-gtk3
Group: System/Libraries
%description -n %{lib_ui_gtk3_name}
Library for avahi-gtk3.
%files -n %{lib_ui_gtk3_name}
%{_libdir}/lib%{name}-ui-gtk3.so.%{ui_gtk3_major}*
%endif
#----------------------------------------------------------------------------
%if %{with gtk3}
%package -n %{develnameui_gtk3}
Summary: Devel library for avahi-gtk3
Group: Development/C
Requires: %{lib_ui_gtk3_name} = %{EVRD}
Provides: %{ui_gtk3_name}-devel = %{EVRD}
%description -n %{develnameui_gtk3}
Devel library for avahi-gtk3.
%files -n %{develnameui_gtk3}
%{_libdir}/libavahi-ui-gtk3.so
%{_libdir}/pkgconfig/avahi-ui-gtk3.pc
%{_includedir}/avahi-ui/avahi-ui.h
%endif
#----------------------------------------------------------------------------
%prep
%autosetup -p1 -n %{name}-%{commit}
cp %{SOURCE1} avahi-hostname.sh
find . -name "Makefile*" -o -name "*.in" -o -name "*.ac" |sort |uniq |xargs sed -i -e 's,localstatedir\@/run,localstatedir\@,g;s,localstatedir}/run,localstatedir},g'
for f in config.guess config.sub ; do
test -f /usr/share/libtool/config/$f || continue
find . -type f -name $f -exec cp /usr/share/libtool/config/$f \{\} \;
done
%build
autoreconf -ifv
export PYTHON=%{__python3}
%configure \
--disable-static \
%if %{without mono}
--disable-mono \
%endif
--disable-qt3 \
%if %{without qt5}
--disable-qt5 \
%else
--enable-qt5 \
%endif
%if %{without python}
--disable-python \
%endif
--localstatedir=%{_localstatedir} \
--runstatedir=%{_rundir} \
--with-avahi-priv-access-group="avahi" \
--enable-compat-libdns_sd \
--enable-compat-howl \
--with-distro=mandriva \
--enable-introspection=no \
--with-systemdsystemunitdir=%{_unitdir} \
%if %{without gtk3}
--disable-gtk3
%else
--enable-gtk3
%endif
%make_build
%install
%make_install
mkdir -p %{buildroot}%{_localstatedir}/avahi
# https://bugzilla.rosalinux.ru/show_bug.cgi?id=9855
# https://wiki.archlinux.org/index.php/Avahi#Troubleshooting
sed -i -e 's,^publish-workstation=no,publish-workstation=yes,g' \
-e 's,^use-ipv6=yes,use-ipv6=no,g' \
%{buildroot}/%{_sysconfdir}/%{name}/avahi-daemon.conf
# validate
grep -q '^publish-workstation=yes' \
%{buildroot}/%{_sysconfdir}/%{name}/avahi-daemon.conf || exit 1
grep -q '^use-ipv6=no' \
%{buildroot}/%{_sysconfdir}/%{name}/avahi-daemon.conf || exit 1
# We have a seperate Avahi service in openssh package
rm -f %{buildroot}/%{_sysconfdir}/%{name}/services/ssh.service
rm -f %{buildroot}/%{_sysconfdir}/%{name}/services/sftp-ssh.service
ln -s avahi-compat-howl.pc %{buildroot}%{_libdir}/pkgconfig/howl.pc
%if "%{_lib}" != "lib" && %{with mono}
mkdir -p %{buildroot}%{_prefix}/lib
mv %{buildroot}%{_libdir}/mono %{buildroot}%{_prefix}/lib
perl -pi -e "s/%{_lib}/lib/" %{buildroot}%{_libdir}/pkgconfig/avahi-{,ui-}sharp.pc
%endif
# install hostname.d hook
mkdir -p %{buildroot}/%{_sysconfdir}/sysconfig/network-scripts/hostname.d/
install -m755 avahi-hostname.sh %{buildroot}/%{_sysconfdir}/sysconfig/network-scripts/hostname.d/avahi
rm -rf %{buildroot}%{_initrddir}/%{name}-daemon
rm -rf %{buildroot}%{_initrddir}/%{name}-dnsconfd
rm -f %{buildroot}%{_sysconfdir}/avahi/services/sftp-ssh.service
mkdir -p %{buildroot}%{_sysusersdir}
install -m 0644 %{SOURCE2} %{buildroot}%{_sysusersdir}/%{name}.conf
%find_lang %{name}