# -*- coding: utf-8 -*-
# vim: syntax=spec
#
# Copyright (C) 2015-2019 GEM Foundation
#
# OpenQuake is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenQuake is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with OpenQuake. If not, see .
# Provide a custom prefix for oq
%define _oqprefix /opt/openquake
%define _oqbindir %{_oqprefix}/bin
%define _oqlibdir %{_oqprefix}/lib
# Make sure that the proper installation of python is used by macros
%define __python3 %{_oqbindir}/python3
%define __python %{__python3}
%define oqstable 0
%define oqrepo oq-engine
%define oqversion 3.8.0
%define oqrelease git83254452c0
%define oqname python3-%{oqrepo}
%define oqtimestamp 1569916445
%define oquser openquake
%if %{oqstable} == 1
%define oqformat %{oqrepo}-%{oqversion}
Release: %{oqrelease}
%else
%define oqformat %{oqrepo}-%{oqversion}-%{oqrelease}
Release: %{oqtimestamp}_%{oqrelease}
%endif
Summary: Computes earthquake hazard and risk
Name: %{oqname}
Version: %{oqversion}
License: AGPLv3
Group: Applications/Engineering
Source0: %{oqformat}.tar.gz
BuildRoot: %{_tmppath}/python-%{oqformat}-buildroot
Prefix: %{_prefix}
BuildArch: noarch
Vendor: The GEM OpenQuake team
Url: http://github.com/gem/oq-engine
Patch1: openquake.cfg.patch
Requires(pre): shadow-utils
Requires: oq-python3 python3-oq-libs >= 2.5.0
Requires: sudo systemd
BuildRequires: oq-python3 sed systemd zip
Obsoletes: python-oq-hazardlib python-oq-engine
Provides: python-oq-hazardlib python-oq-engine
%description
OpenQuake is an open source application that allows users to
compute seismic hazard and seismic risk of earthquakes on a global scale.
Copyright (C) 2010-2019 GEM Foundation
%package master
Summary: OpenQuake Engine multi-node cluster support (master node)
Group: Applications/Engineering
Requires: %{name} = %{version}-%{release} rabbitmq-server
Obsoletes: python-oq-engine-master
Provides: python-oq-engine-master
%description master
OpenQuake Engine multi-node cluster support (master node)
OpenQuake is an open source application that allows users to
compute seismic hazard and seismic risk of earthquakes on a global scale.
Copyright (C) 2010-2019 GEM Foundation
%package worker
Summary: OpenQuake Engine multi-node cluster support (worker node)
Group: Applications/Engineering
Requires: %{name} = %{version}-%{release}
Obsoletes: python-oq-engine-worker
Provides: python-oq-engine-worker
%description worker
OpenQuake Engine multi-node cluster support (worker node)
OpenQuake is an open source application that allows users to
compute seismic hazard and seismic risk of earthquakes on a global scale.
Copyright (C) 2010-2019 GEM Foundation
%prep
%setup -n %{oqformat}
%patch1 -p1
%build
%{__python3} setup.py build
%pre
getent group %{oquser} >/dev/null || groupadd -r %{oquser}
getent passwd %{oquser} >/dev/null || \
useradd -r -g %{oquser} -d %{_localstatedir}/lib/%{oquser} -s /bin/bash \
-c "The OpenQuake user" %{oquser}
%install
# Fix shebangs before installation
for f in $(find . -type f -executable | xargs --no-run-if-empty grep -rlE '^#!/usr/bin/env python3$'); do \
sed -i 's@#!.*env \+python[23]\?@#!/opt/openquake/bin/python3@g' $f; \
done
# Fix version in python init
sed -i "s/^__version__[ ]*=.*/__version__ = '%{oqversion}-%{oqrelease}'/g" openquake/baselib/__init__.py
install -p -m 755 -d %{buildroot}%{_bindir}
install -p -m 755 -d %{buildroot}%{_oqbindir}
%{__python3} setup.py install --single-version-externally-managed -O1 --root=%{buildroot} --prefix=%{_oqprefix} --install-scripts=%{_oqbindir}
ln -sf %{_oqbindir}/oq %{buildroot}%{_bindir}/oq
# create directories where the files will be located
mkdir -p %{buildroot}%{_localstatedir}/lib/openquake
mkdir -p %{buildroot}%{_sysconfdir}/openquake
mkdir -p %{buildroot}%{_datadir}/openquake/engine
mkdir -p %{buildroot}%{_datadir}/applications
mkdir -p %{buildroot}%{_datadir}/pixmaps
mkdir -p %{buildroot}%{_unitdir}
install -m 644 openquake/engine/openquake.cfg %{buildroot}/%{_sysconfdir}/openquake
install -m 644 debian/desktop/oq-engine-webui.desktop %{buildroot}%{_datadir}/applications
install -m 644 debian/desktop/openquake.png %{buildroot}%{_datadir}/pixmaps
install -m 644 debian/systemd/openquake-dbserver.service %{buildroot}%{_unitdir}/openquake-dbserver.service
install -m 644 debian/systemd/openquake-webui.service %{buildroot}%{_unitdir}/openquake-webui.service
install -m 644 debian/systemd/openquake-celery.service %{buildroot}%{_unitdir}/openquake-celery.service
cp -R demos %{buildroot}/%{_datadir}/openquake/engine
# Make a zipped copy of each demo
helpers/zipdemos.sh %{buildroot}%{_datadir}/openquake/engine/demos
cp -R utils %{buildroot}/%{_datadir}/openquake/engine
%post
%systemd_post openquake-dbserver.service
%systemd_post openquake-webui.service
%clean
rm -rf %{buildroot}
%preun
%systemd_preun openquake-dbserver.service
%systemd_preun openquake-webui.service
%postun
%systemd_postun_with_restart openquake-dbserver.service
%systemd_postun_with_restart openquake-webui.service
%files
%defattr(-,root,root)
%attr(0750, openquake, openquake) %dir %{_localstatedir}/lib/openquake
%dir %{_sysconfdir}/openquake
%dir %{_datadir}/openquake
%doc README.md LICENSE CONTRIBUTORS.txt
%doc doc/*.md
%doc doc/img/*
%doc doc/installing/*
%doc doc/running/*
%doc doc/upgrading/*
%config(noreplace) %{_sysconfdir}/openquake/openquake.cfg
%{_oqbindir}/oq
%{_oqlibdir}/python3*/site-packages/openquake*
%{_bindir}/oq
%{_datadir}/openquake/engine
%{_datadir}/applications/oq-engine-webui.desktop
%{_datadir}/pixmaps/openquake.png
%{_unitdir}/openquake-dbserver.service
%{_unitdir}/openquake-webui.service
%post master
(if ! rabbitmqctl status &>/dev/null; then
systemctl start rabbitmq-server.service
rabbit_started=true
fi
if ! rabbitmqctl list_users | grep %{oquser}; then
rabbitmqctl add_user %{oquser} %{oquser}
fi
if ! rabbitmqctl list_vhosts | grep %{oquser}; then
rabbitmqctl add_vhost %{oquser}
rabbitmqctl set_permissions -p %{oquser} %{oquser} ".*" ".*" ".*"
fi
if $rabbit_started; then
systemctl stop rabbitmq-server.service
fi
) >/dev/null || true
%files master
%doc openquake/engine/openquake.cfg.cluster-sample
%post worker
%systemd_post openquake-celery.service
%preun worker
%systemd_preun openquake-celery.service
%postun worker
%systemd_postun_with_restart openquake-celery.service
%files worker
%doc openquake/engine/openquake.cfg.cluster-sample
%{_unitdir}/openquake-celery.service
%changelog
%if %{oqstable} == 1
* %(date -d @%{oqtimestamp} '+%a %b %d %Y') GEM Automatic Packager %{oqversion}-%{oqrelease}
– Stable release of %{oqname}
%else
* %(date -d @%{oqtimestamp} '+%a %b %d %Y') GEM Automatic Packager %{oqversion}-%{oqtimestamp}_%{oqrelease}
– Unstable release of %{oqname}
%endif