%global tarname OnionBalance
%global pkgname onionbalance
%global sum Load-balancing for Tor onion services
# EL7 has a too old sphinx version
# to support generating of docs
%if 0%{?rhel} == 7
%global for_el7 1
%global with_docs 0
%global main_pkg python2-%{pkgname}
%else
%global with_docs 1
%global for_el7 0
%global main_pkg python3-%{pkgname}
%endif
# test libs are too old for running tests on EL7 & F24
%if 0%{?fedora} >= 25
%global with_test 1
%endif
%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/%{main_pkg}-%{version}}
%global toruser toranon
Name: python-%{pkgname}
Version: 0.1.8
Release: 4%{?dist}
Summary: %{sum}
License: GPLv3
URL: http://pypi.python.org/pypi/%{tarname}
Source0: https://github.com/DonnchaC/%{pkgname}/releases/download/%{version}/%{pkgname}-%{version}.tar.gz
Source1: onionbalance.service
Source2: onionbalance.tmpfiles
Source3: onionbalance.logrotate
Source4: docs-conf.py
Source5: onionbalance.torrc.example
Source6: README.fedora
BuildArch: noarch
BuildRequires: systemd-units
%if 0%{?for_el7}
BuildRequires: python-setuptools
BuildRequires: python2-devel
BuildRequires: python-stem
BuildRequires: PyYAML
BuildRequires: python2-crypto
BuildRequires: python2-future
BuildRequires: python-setproctitle
%else
BuildRequires: python3-devel
BuildRequires: python3-setuptools
BuildRequires: python3-stem
BuildRequires: python3-PyYAML
BuildRequires: python3-crypto
BuildRequires: python3-future
BuildRequires: python3-setproctitle
BuildRequires: python3-sphinxcontrib-autoprogram
BuildRequires: python3-pytest
BuildRequires: python3-pytest-mock
BuildRequires: python3-pexpect
%endif
BuildRequires: systemd
%description
OnionBalance provides load-balancing and redundancy for Tor
onion services by distributing requests to multiple back-end
Tor instances.
%package -n %{main_pkg}
%if 0%{?for_el7}
Summary: %{sum}
Requires: python-stem
Requires: PyYAML
%if 0%{?for_el7}
Requires: python-setuptools
%else
Requires: python2-setuptools
%endif
Requires: python2-crypto
Requires: python2-future
Requires: python-setproctitle
%{?python_provide:%python_provide python2-%{pkgname}}
%else
Summary: %{sum}
Requires: python3-stem
Requires: python3-PyYAML
Requires: python3-setuptools
Requires: python3-crypto
Requires: python3-future
Requires: python3-setproctitle
%{?python_provide:%python_provide python3-%{pkgname}}
%endif
Requires: tor
Requires: logrotate
Requires(pre): shadow-utils
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
%description -n %{main_pkg}
OnionBalance provides load-balancing and redundancy for Tor
onion services by distributing requests to multiple back-end
Tor instances.
This package contains systemd files as well as logrotate rules.
%prep
%autosetup -c -n %{pkgname}-%{version}
%build
find . -name '*.pyc' -delete
%if 0%{?for_el7}
%py2_build
%else
%py3_build
%endif
%if 0%{?with_docs}
# restore conf that is missing in egg
cp %{SOURCE4} docs/conf.py
PYTHONPATH=. sphinx-build -N -v -v -v -v -E -bhtml docs/ docs/_build/html
PYTHONPATH=. sphinx-build -N -E -bman docs docs/_build/man
# Fix hidden-file-or-dir warnings
rm -rf docs/_build/html/.doctrees docs/_build/html/.buildinfo
%endif
%install
%if 0%{?for_el7}
%py2_install
%else
%py3_install
%endif
%if 0%{?for_el7}
# EL7 isn't yet that new, but given it's only a little change btw. 3.11 & 3.10
# it's fine to downgrade that requirement
sed -i 's/PyYAML>=3.11/PyYAML>=3.10/' %{buildroot}/%{python2_sitelib}/*.egg-info/requires.txt
%endif
install -d %{buildroot}/etc/logrotate.d
install -d %{buildroot}/%{_sysconfdir}/%{pkgname}
install -d %{buildroot}/%{_localstatedir}/log/%{pkgname}
install -d %{buildroot}/%{_localstatedir}/lib/%{pkgname}
install -d -m 755 %{buildroot}/%{_unitdir}
install -d -m 755 %{buildroot}/%{_tmpfilesdir}
install -p -m 644 %{SOURCE1} %{buildroot}/%{_unitdir}/%{pkgname}.service
install -p -m 644 %{SOURCE2} %{buildroot}/%{_tmpfilesdir}/%{pkgname}.conf
install -p -m 644 %{SOURCE3} %{buildroot}/%{_sysconfdir}/logrotate.d/%{pkgname}.conf
%if 0%{?with_docs}
install -d -m 755 %{buildroot}/%{_mandir}/man1
cp docs/_build/man/%{pkgname}* %{buildroot}/%{_mandir}/man1/
%endif
install -p -m 644 %{SOURCE5} .
install -p -m 644 %{SOURCE6} .
%check
# on some versions test libs are too old to run
%if 0%{?with_test}
py.test-3 --ignore=test/functional
%endif
%pre -n %{main_pkg}
getent passwd %{pkgname} >/dev/null || \
useradd -r -g %{toruser} -d %{_localstatedir}/lib/%{pkgname} -s /sbin/nologin \
-c "%{pkgname} daemon user" %{pkgname}
exit 0
%post -n %{main_pkg}
%systemd_post onionbalance.service
%preun -n %{main_pkg}
%systemd_preun onionbalance.service
%postun -n %{main_pkg}
%systemd_postun_with_restart onionbalance.service
%files -n %{main_pkg}
%doc README.rst
%doc README.fedora
%doc onionbalance.torrc.example
%license COPYING
%if 0%{?with_docs}
%doc docs/_build/html
%doc %attr(0644,root,root) %{_mandir}/man1/%{pkgname}*
%endif
%if 0%{?for_el7}
%{python2_sitelib}/*
%else
%{python3_sitelib}/*
%endif
%{_bindir}/%{pkgname}
%{_bindir}/%{pkgname}-config
%{_unitdir}/%{pkgname}.service
%{_tmpfilesdir}/%{pkgname}.conf
%dir %attr(0750,root,%{toruser}) %{_sysconfdir}/%{pkgname}
%dir %attr(0750,%{pkgname},%{toruser}) %{_localstatedir}/log/%{pkgname}
%dir %attr(0750,%{pkgname},%{toruser}) %{_localstatedir}/lib/%{pkgname}
%config(noreplace) %{_sysconfdir}/logrotate.d/%{pkgname}.conf
%changelog
* Tue Jun 19 2018 Miro HronĨok <mhroncok@redhat.com> - 0.1.8-4
- Rebuilt for Python 3.7
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.8-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.8-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Thu May 04 2017 Marcel Haerry <mh+fedora@scrit.ch> - 0.1.8-1
- latest upstream release (#1447661)
* Thu Feb 23 2017 Marcel Haerry <mh+fedora@scrit.ch> - 0.1.7-1
- latest upstream release
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 0.1.6-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Fri Jan 20 2017 Marcel Haerry <mh+fedora@scrit.ch> - 0.1.6-1
initial release