File nextcloud.spec of Package nextcloud
#
# spec file for package nextcloud
#
# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
# keep in sync with macros file
%define nextcloud_basedir /srv/www/vhosts/%{name}
%define nextcloud_docroot %{nextcloud_basedir}/public/
%define nextcloud_appsdir %{nextcloud_basedir}/public/apps/
%define nextcloud_datadir %{nextcloud_basedir}/data/
%define nextcloud_sessiondir %{nextcloud_basedir}/sessions/
%define nextcloud_tmpdir %{nextcloud_basedir}/tmp/
%define nextcloud_logdir /var/log/%{name}/
%define php_fpm_d /etc/%{nextcloud_php}/fpm/php-fpm.d/
%define ng_vhost_d /etc/nginx/vhosts.d/
%define nextcloup_upgrade_trigger %{nextcloud_basedir}/pending_upgrade
%bcond_without set_maintenance_mode_early
Name: nextcloud
Version: 24.0.12
Release: 0
%define pkg_version %{version}
Summary: File hosting service
License: AGPL-3.0-only
Group: Productivity/Networking/Web/Utilities
Url: https://www.nextcloud.com/
Source: https://download.nextcloud.com/server/releases/%{name}-%{pkg_version}.tar.bz2
Source1: https://download.nextcloud.com/server/releases/%{name}-%{pkg_version}.tar.bz2.asc
Source2: nextcloud-php-fpm.conf
Source3: nextcloud-cron.service
Source4: nextcloud-nginx.conf
Source5: nextcloud-permissions.sh
Source6: nextcloud-cron.timer
Source7: nextcloud-occ
Source98: nextcloud.asc
Source99: nextcloud-rpmlintrc
BuildRequires: acl
BuildRequires: apparmor-rpm-macros
BuildRequires: nginx
BuildRequires: rsync
BuildRequires: fdupes
BuildRequires: %{nextcloud_php}-APCu
%requires_eq %{nextcloud_php}-APCu
BuildRequires: %{nextcloud_php}-fpm
# requires is in php-fpm subpackage
BuildRequires: %{nextcloud_php}-imagick
%requires_eq %{nextcloud_php}-imagick
%if "php7" == "%{nextcloud_php}"
BuildRequires: %{nextcloud_php}-json
%requires_eq %{nextcloud_php}-json
%endif
BuildRequires: %{nextcloud_php}-mysql
%requires_eq %{nextcloud_php}-mysql
BuildRequires: %{nextcloud_php}-mbstring
%requires_eq %{nextcloud_php}-mbstring
BuildRequires: %{nextcloud_php}-iconv
%requires_eq %{nextcloud_php}-iconv
BuildRequires: %{nextcloud_php}-openssl
%requires_eq %{nextcloud_php}-openssl
BuildRequires: %{nextcloud_php}-ctype
%requires_eq %{nextcloud_php}-ctype
BuildRequires: %{nextcloud_php}-curl
%requires_eq %{nextcloud_php}-curl
BuildRequires: %{nextcloud_php}-gd
%requires_eq %{nextcloud_php}-gd
BuildRequires: %{nextcloud_php}-gmp
%requires_eq %{nextcloud_php}-gmp
BuildRequires: %{nextcloud_php}-opcache
%requires_eq %{nextcloud_php}-opcache
BuildRequires: %{nextcloud_php}-posix
%requires_eq %{nextcloud_php}-posix
BuildRequires: %{nextcloud_php}-redis
%requires_eq %{nextcloud_php}-redis
BuildRequires: %{nextcloud_php}-zip
%requires_eq %{nextcloud_php}-zip
BuildRequires: %{nextcloud_php}-zlib
%requires_eq %{nextcloud_php}-zlib
BuildRequires: %{nextcloud_php}-xmlreader
%requires_eq %{nextcloud_php}-xmlreader
BuildRequires: %{nextcloud_php}-xmlwriter
%requires_eq %{nextcloud_php}-xmlwriter
BuildRequires: %{nextcloud_php}-fileinfo
%requires_eq %{nextcloud_php}-fileinfo
BuildRequires: %{nextcloud_php}-bz2
%requires_eq %{nextcloud_php}-bz2
BuildRequires: %{nextcloud_php}-intl
%requires_eq %{nextcloud_php}-intl
BuildRequires: %{nextcloud_php}-ldap
%requires_eq %{nextcloud_php}-ldap
BuildRequires: %{nextcloud_php}-bcmath
%requires_eq %{nextcloud_php}-bcmath
BuildRequires: %{nextcloud_php}-ftp
%requires_eq %{nextcloud_php}-ftp
BuildRequires: %{nextcloud_php}-pear
%requires_eq %{nextcloud_php}-pear
BuildRequires: %{nextcloud_php}-pcntl
%requires_eq %{nextcloud_php}-pcntl
BuildRequires: pkgconfig(systemd)
%{?systemd_requires}
Requires: acl
Requires(pre): sudo
Requires(post): sudo
Requires(posttrans): sudo
Requires: sudo
Recommends: nextcloud-nginx
Recommends: nextcloud-php-fpm
Conflicts: nextcloud-nginx < %{version}-%{release}
Conflicts: nextcloud-php-fpm < %{version}-%{release}
BuildArch: noarch
%description
Nextcloud is a suite of client-server software for creating file hosting
services and using them.
%prep
%setup -q -n %{name}
%package php-fpm
Group: Productivity/Networking/Web/Utilities
%requires_eq %{nextcloud_php}-fpm
Requires: nextcloud-apparmor
Requires: nextcloud = %{version}
Summary: Nextcloud - PHP FPM configuration
%description php-fpm
Nextcloud is a suite of client-server software for creating file hosting
services and using them.
This package holds the php-fpm configuration.
%package nginx
Group: Productivity/Networking/Web/Utilities
Requires: nextcloud-php-fpm = %{version}
Requires: nginx
Summary: Nextcloud - NGINX configuration
%description nginx
Nextcloud is a suite of client-server software for creating file hosting
services and using them.
This package holds the nginx configuration.
%build
touch config/config.php
chmod -R u=rwX,g=rwX,o= $PWD
chmod ug+x occ
%install
install -D -d -m 0755 \
%{buildroot}%{nextcloud_basedir} \
%{buildroot}%{nextcloud_docroot} \
%{buildroot}%{php_fpm_d} \
%{buildroot}%{ng_vhost_d} \
%{buildroot}%{_unitdir} \
%{buildroot}%{_sbindir}
install -D -d -m 0770 \
%{buildroot}%{nextcloud_datadir} \
%{buildroot}%{nextcloud_sessiondir} \
%{buildroot}%{nextcloud_tmpdir} \
%{buildroot}%{nextcloud_logdir}
rsync -a ${PWD}/ %{buildroot}%{nextcloud_docroot}/
install -m 0644 %{SOURCE2} %{buildroot}%{php_fpm_d}/nextcloud.conf
install -m 0644 %{SOURCE3} %{buildroot}%{_unitdir}/nextcloud-cron.service
install -m 0644 %{SOURCE6} %{buildroot}%{_unitdir}/nextcloud-cron.timer
install -m 0644 %{SOURCE4} %{buildroot}%{ng_vhost_d}/nextcloud.conf
install -m 0750 %{SOURCE5} %{buildroot}%{_sbindir}/nextcloud-fix-permissions
install -m 0750 %{SOURCE7} %{buildroot}%{_sbindir}/nextcloud-occ
cat <<EOF > %{buildroot}%{_sbindir}/nextcloud-upgrade
#!/bin/bash
if [ -e %{nextcloup_upgrade_trigger} ] ; then
%{_sbindir}/nextcloud-fix-permissions
if [ -s %{nextcloud_docroot}/config/config.php ] ; then
%{_sbindir}/nextcloud-occ maintenance:mode --on --no-interaction >> %{nextcloud_logdir}/upgrade.log 2>&1 ||:
%{_sbindir}/nextcloud-occ upgrade --no-interaction >> %{nextcloud_logdir}/upgrade.log 2>&1 ||:
%{_sbindir}/nextcloud-occ db:add-missing-columns --no-interaction >> %{nextcloud_logdir}/upgrade.log 2>&1 ||:
%{_sbindir}/nextcloud-occ db:add-missing-primary-keys --no-interaction >> %{nextcloud_logdir}/upgrade.log 2>&1 ||:
%{_sbindir}/nextcloud-occ db:add-missing-indices --no-interaction >> %{nextcloud_logdir}/upgrade.log 2>&1 ||:
%{_sbindir}/nextcloud-occ db:convert-filecache-bigint --no-interaction >> %{nextcloud_logdir}/upgrade.log 2>&1 ||:
%{_sbindir}/nextcloud-occ maintenance:mode --off --no-interaction >> %{nextcloud_logdir}/upgrade.log 2>&1 ||:
%{_sbindir}/nextcloud-occ config:system:set config_is_read_only --type boolean --value true --no-interaction >> /var/log/nextcloud//upgrade.log 2>&1 ||:
fi
rm %{nextcloup_upgrade_trigger}
fi
EOF
cat <<EOF > %{buildroot}%{_sbindir}/nextcloud-prepare-upgrade
#!/bin/bash
touch %{nextcloup_upgrade_trigger}
%if %{with set_maintenance_mode_early}
if [ -s %{nextcloud_docroot}/config/config.php ] ; then
if grep -q "'config_is_read_only' => true," "%{nextcloud_docroot}/config/config.php" ; then
perl -p -i -e "s|'config_is_read_only' => true,\n||g" "%{nextcloud_docroot}/config/config.php"
fi
%{_sbindir}/nextcloud-occ maintenance:mode --on --no-interaction >> %{nextcloud_logdir}/upgrade.log 2>&1 ||:
fi
%endif
EOF
chmod u=rwx,go=rx %{buildroot}%{_sbindir}/nextcloud*upgrade
touch %{buildroot}%{nextcloud_logdir}/upgrade.log
ln -s /sbin/service %{buildroot}%{_sbindir}/rcnextcloud-cron
%fdupes %{buildroot}%{nextcloud_docroot}
%pre
/usr/sbin/groupadd -r %{name} &>/dev/null || :
/usr/sbin/useradd -g %{name} -s /bin/false -r -c "Nextcloud" -d %{nextcloud_datadir} %{name} &>/dev/null || :
/usr/sbin/groupadd -r %{name}-admin &>/dev/null || :
/usr/sbin/useradd -g %{name}-admin -s /bin/bash -r -c "Nextcloud Admin" -d %{nextcloud_datadir} %{name}-admin &>/dev/null || :
%service_add_pre nextcloud-cron.timer nextcloud-cron.service
%post
%service_add_post nextcloud-cron.timer nextcloud-cron.service
%preun
%service_del_preun nextcloud-cron.timer nextcloud-cron.service
%postun
if [ -e %{_sbindir}/nextcloud-occ ] ; then
touch %{nextcloup_upgrade_trigger}
%if %{with set_maintenance_mode_early}
if [ -s %{nextcloud_docroot}/config/config.php ] ; then
%{_sbindir}/nextcloud-occ maintenance:mode --on --no-interaction > /dev/null 2>&1
fi
%endif
fi
%service_del_postun nextcloud-cron.timer nextcloud-cron.service
%posttrans
# fix permissions
if [ -e %{_sbindir}/nextcloud-upgrade ] ; then
%{_sbindir}/nextcloud-upgrade
fi
%postun nginx
%service_del_postun nginx.service
%post php-fpm
%apparmor_reload /etc/apparmor.d/usr.sbin.php-fpm
%files php-fpm
%config(noreplace) %{php_fpm_d}/nextcloud.conf
%files nginx
%config(noreplace) %{ng_vhost_d}/nextcloud.conf
%files
%defattr(-,root,root)
%{_unitdir}/nextcloud-cron.service
%{_unitdir}/nextcloud-cron.timer
%{_sbindir}/rcnextcloud-cron
%{_sbindir}/nextcloud-fix-permissions
%{_sbindir}/nextcloud-occ
%{_sbindir}/nextcloud-prepare-upgrade
%{_sbindir}/nextcloud-upgrade
%dir /srv/www/vhosts
%dir %{nextcloud_basedir}
%defattr(-,nextcloud-admin,nextcloud-admin)
%dir %verify(not mode) %{nextcloud_docroot}
%config(noreplace) %verify(not mode) %{nextcloud_docroot}/config/
%verify(not mode) %{nextcloud_docroot}/3rdparty/
%verify(not mode) %{nextcloud_docroot}/apps/
%verify(not mode) %{nextcloud_docroot}/AUTHORS
%verify(not mode) %{nextcloud_docroot}/console.php
%verify(not mode) %{nextcloud_docroot}/COPYING
%verify(not mode) %{nextcloud_docroot}/core/
%verify(not mode) %{nextcloud_docroot}/dist/
%verify(not mode) %{nextcloud_docroot}/cron.php
%verify(not mode) %{nextcloud_docroot}/.htaccess
%verify(not mode) %{nextcloud_docroot}/index.html
%verify(not mode) %{nextcloud_docroot}/index.php
%verify(not mode) %{nextcloud_docroot}/lib/
%verify(not mode) %{nextcloud_docroot}/occ
%verify(not mode) %{nextcloud_docroot}/ocm-provider/
%verify(not mode) %{nextcloud_docroot}/ocs/
%verify(not mode) %{nextcloud_docroot}/ocs-provider/
%verify(not mode) %{nextcloud_docroot}/public.php
%verify(not mode) %{nextcloud_docroot}/remote.php
%verify(not mode) %{nextcloud_docroot}/resources/
%verify(not mode) %{nextcloud_docroot}/robots.txt
%verify(not mode) %{nextcloud_docroot}/status.php
%verify(not mode) %{nextcloud_docroot}/themes/
%verify(not mode) %{nextcloud_docroot}/updater/
%verify(not mode) %{nextcloud_docroot}/.user.ini
%verify(not mode) %{nextcloud_docroot}/version.php
%defattr(-,%{name},%{name})
%dir %verify(not mode) %{nextcloud_datadir}
%dir %{nextcloud_sessiondir}
%dir %{nextcloud_tmpdir}
%dir %{nextcloud_logdir}
%ghost %attr(0600,nextcloud-admin,nextcloud-admin) %{nextcloud_logdir}/upgrade.log
%changelog