Package libreoffice-online: Specfile

%define service_name loolwsd
%define service_user lool
%define default_loroot %_libdir/LibreOffice
%define loolparent %_localstatedir

Name: libreoffice-online
Version: 6.0.2.3
Release: alt1%ubt

Summary: LibreOffice Online WebSocket Daemon

License: MPLv2
Group: Office
Url: https://gerrit.libreoffice.org/p/online.git

Source0: %name-%version.tar
Source1: %service_name.init
Source2: %name.conf.nginx
Source3: %name.conf.apache2
Source4: node-modules.tar

Patch0: remove-rpath.patch
Patch1: disable-setcap.patch
Patch2: disable-copying-libs.patch
Patch3: fix-conf-dir.patch
Patch4: log-to-file.patch
Patch5: i586-build.patch
Patch6: i586-lfs-support.patch
Patch7: ru-translation.patch
Patch8: npm-shrinkwrap.patch
Patch9: package.patch
Patch10: loleaflet-makefile.patch

Requires: LibreOffice python3 fonts-ttf-core

BuildRequires(pre): rpm-build-ubt rpm-build-python3
BuildRequires: libtool_2.4 automake_1.14 npm libcap-utils fontconfig
BuildRequires: libpoco-devel libpng-devel libcap-devel cppunit-devel
BuildRequires: pam-devel libpcre-devel
BuildRequires: python-module-polib python-module-lxml

%description
This is LibreOffice Online, which provides basic collaborative editing of
documents in a browser by re-using the LibreOffice core.
Rendering fidelity should be excellent,
and interoperability match that of LibreOffice.

%package nginx
Summary: nginx web-server default configuration for %name
Group: Networking/WWW
Requires: %name nginx

BuildArch: noarch

%description nginx
nginx web-server default configuration for %name.

%package apache2
Summary: Apache 2.x web-server default configuration for %name
Group: Networking/WWW
Requires: %name apache2

BuildArch: noarch

%description apache2
Apache 2.x web-server default configuration for %name.

%prep
%setup
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1

%if %_arch != x86_64
%patch5 -p1
%patch6 -p1
%endif

tar -xf %SOURCE4 -C loleaflet/

%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1

%build
sh autogen.sh

%configure --enable-silent-rules \
           --with-lokit-path=bundled/include \
           --disable-setcap \
           --with-lo-path=%default_loroot \
           --localstatedir=%_var \
%if %_arch != x86_64
           --disable-seccomp
%endif

mkdir -p bin && cd bin
ln -s ../loleaflet/node_modules/jake/bin/cli.js jake
cd -
export PATH="$PATH:$(pwd)/bin"

%make_build

%install
export PATH="$PATH:$(pwd)/bin"
%makeinstall_std

unit_file="%buildroot%_unitdir/%service_name.service"

mkdir -p %buildroot%_unitdir

cat > "$unit_file" << EOF
[Unit]
Description=LibreOffice Online WebSocket Daemon
After=network.target

[Service]
EnvironmentFile=-%_sysconfdir/sysconfig/%service_name
ExecStart=%_bindir/%service_name --version \
--o:sys_template_path=%loolparent/%service_user/systemplate \
--o:lo_template_path=%default_loroot \
--o:child_root_path=%loolparent/%service_user/child-roots \
--o:file_server_root_path=%_datadir/%name
User=%service_user
KillMode=control-group
Restart=always

[Install]
WantedBy=multi-user.target
EOF

install -D -m 755 %SOURCE1 %buildroot%_initdir/%service_name

install -d -m 755 %buildroot%_var/adm/fillup-templates
install -d -m 755 %buildroot%_cachedir/%name
install -d -m 755 %buildroot%loolparent/%service_user/child-roots 
install -d -m 755 %buildroot%loolparent/%service_user/systemplate
install -D -m 644 sysconfig.%service_name %buildroot%_sysconfdir/sysconfig/%service_name

mkdir -p %buildroot%_sysconfdir/cron.d
echo "#Remove old tiles once every 10 days at midnight" > %buildroot%_sysconfdir/cron.d/%service_name.cron
echo "0 0 */1 * * root find %_cachedir/%name -name \"*.png\" -a -atime +10 -exec rm {} \;" >> %buildroot%_sysconfdir/cron.d/%service_name.cron

mkdir -p %buildroot%_sysconfdir/pam.d
echo "auth       required     pam_unix.so" > %buildroot%_sysconfdir/pam.d/%service_name
echo "account    required     pam_unix.so" >>  %buildroot%_sysconfdir/pam.d/%service_name

install -pD -m0644 %SOURCE2 %buildroot%_sysconfdir/nginx/sites-available.d/%name.conf
install -pD -m0644 %SOURCE3 %buildroot%_sysconfdir/httpd2/conf/sites-available/%name.conf

mkdir -p %buildroot%_logdir
touch %buildroot%_logdir/%service_name.log

install -pD -m0644 etc/*.pem %buildroot%_sysconfdir/%name

%pre
getent group %service_user >/dev/null || groupadd -r %service_user
getent passwd %service_user >/dev/null || useradd -g %service_user -r %service_user -d %loolparent/%service_user -s /bin/bash

%post
rm -rf %_cachedir/%name/*
rm -rf %loolparent/%service_user/child-roots/*

%post_service %service_name

%preun
%preun_service %service_name

%post apache2
a2ensite %name
a2enmod ssl
a2enport https
a2enmod rewrite
a2enmod env
a2enmod headers
%_initdir/httpd2 condreload

%postun apache2
%_initdir/httpd2 condreload

%files
%_bindir/*
%_datadir/%name
%_defaultdocdir/%name
%dir %_sysconfdir/%name/
%attr(755,%service_user,%service_user) %_cachedir/%name
%dir %attr(755,%service_user,%service_user) %loolparent/%service_user
%attr(755,%service_user,%service_user) %loolparent/%service_user/child-roots
%attr(755,%service_user,%service_user) %loolparent/%service_user/systemplate
%attr(644,%service_user,%service_user) %_logdir/%service_name.log
%config(noreplace) %attr(640,%service_user, root) %_sysconfdir/%name/*.pem
%attr(755,root,root) %_initdir/%service_name
%config(noreplace) %_sysconfdir/sysconfig/%service_name
%config(noreplace) %_sysconfdir/cron.d/%service_name.cron
%config(noreplace) %_sysconfdir/pam.d/%service_name
%config(noreplace) %attr(640, %service_user, root) %_sysconfdir/%name/%service_name.xml
%config(noreplace) %_sysconfdir/%name/loolkitconfig.xcu
%config %attr(644, root, root) %_unitdir/%service_name.service

%doc AUTHORS ChangeLog README NEWS TODO

%files nginx
%config(noreplace) %attr(0644,root,root) %_sysconfdir/nginx/sites-available.d/%name.conf

%files apache2
%config(noreplace) %attr(0644,root,root) %_sysconfdir/httpd2/conf/sites-available/%name.conf

%changelog
* Wed Apr 18 2018 Maxim Voronov <mvoronov@altlinux.org> 6.0.2.3-alt1%ubt
- initial build for ALT