Compilation de LibreOffice Online pour supprimer les limitations de documents ouverts et de connexions simultanées sous Debian.

Rédigé par Nicolas Sulek Aucun commentaire
Classé dans : Logiciel Mots clés : aucun
LibreOffice Online s'installe assez facilement avec les paquets fournis, à un détail près, ils contiennent deux limitations :
  • le nombre de documents ouverts (10)
  • le nombre de connexions simultanées (20).

Il est tout à fait possible de les supprimer en compilant soi même LibreOffice Online.

Cette documentation est totalement inspirée de https://www.boniface.me/post/building-libreoffice-online-for-debian .

Installation des paquets nécessaires à la compilation et à la création du paquet

apt-get install libpng-dev libcap-dev libtool m4 automake fakeroot debhelper dh-systemd build-essential unixodbc-dev libreoffice python-polib nodejs node-jake libghc-zlib-bindings-dev libghc-zlib-dev
apt-get build-dep libreoffice
Pour compiler LibreOffice Online, il va falloir installer des paquets via npm. Il faut donc installer npm et nodejs.
Personnellement, j'installe les binaires fournis par nodesource.
Ensuite, on installe les paquets nécessaires :
npm install uglify-js exorcist d3 evol-colorpicker bootstrap eslint browserify-css d3

Création des paquets LibreOffice Online

Récupération du code source

mkdir ~/loolwsd
cd ~/loolwsd/
git clone https://github.com/LibreOffice/online.git
cd online
Depuis ce clone de dépôt, on doit choisir la version pour la suite de la compilation :
git tag
Il faut choisir les versions cp :
git checkout -b debian tags/cp-4.0.8-2
On va ensuite créer une archive qui servira pour la création du paquet :
cd ..
tar -cJf loolwsd_4.0.8.orig.tar.xz online/
cd online
Le nom du fichier doit correspondre à la version du tag sans la révision mineure.

Modification des fichiers nécessaires à la création du paquet Debian

Nous allons ensuite modifier les fichiers contenus dans le répertoire debian :
  • debian/changelog
  • debian/control
  • debian/rules
  • debian/loolwsd.service
  • configure.ac

debian/changelog

Dans ce fichier, nous allons juste rajouter une information sur notre modification :
loolwsd (4.0.8-2) stable; urgency=medium

* Custom build of 4.0.8-2 for Debian Buster

-- Nicolas Sulek   Mond, 25 Nov 2019 07:47:21 -0400

debian/control

Ici, nous allons supprimer toutes les références vers Collabora Online pour pouvoir installer n'importe quelle version de LibreOffice, et rajouter libcairo2 qui est nécessaire à LibreOffice.
Il faut alors remplacer la directive Depends par :
Depends: ${shlibs:Depends}, ${misc:Depends}, libsm6, libxinerama1, libxrender1, libgl1-mesa-glx, libcups2, libxcb-render0, libxcb-shm0, locales-all, adduser, expat, fontconfig, cpio, libcap2-bin, libcairo2

debian/rules

Il faut modifier la directive CONFFLAGS pour changer les chemins et rajouter des étapes override. Le fichier final doit être :
#!/usr/bin/make -f

# see EXAMPLES in dpkg-buildflags(1) and read /usr/share/dpkg/*
DPKG_EXPORT_BUILDFLAGS = 1

include /usr/share/dpkg/default.mk

CONFFLAGS = --enable-silent-rules --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-lokit-path=`pwd`/bundled/include --disable-setcap $(CONFIG_OPTIONS)

# main packaging script based on dh7 syntax
%:
        dh $@ --with=systemd --parallel

override_dh_auto_configure:
        ./autogen.sh
        ./configure $(CONFFLAGS)

override_dh_auto_test:
        # do not test

override_dh_auto_build:
        dh_auto_build --parallel $(MAKEARGS)

override_dh_installinit:
        # no init.d scripts here, assume systemd
Attention, après les commandes override, ce sont des tabulations.

debian/loolwsd.service

Dans ce fichier, il faut indiquer le chemin vers LibreOffice et le répertoire de configuration. Il faut ainsi remplacer :
EnvironmentFile=-/etc/sysconfig/loolwsd
par
EnvironmentFile=-/etc/loolwsd
et remplacer
ExecStart=/usr/bin/loolwsd --version --o:sys_template_path=/opt/lool/systemplate --o:lo_template_path=/opt/collaboraoffice5.3 --o:child_root_path=/opt/lool/child-roots --o:file_server_root_path=/usr/share/loolwsd
par
ExecStart=/usr/bin/loolwsd --version --o:sys_template_path=/opt/lool/systemplate --o:lo_template_path=/opt/libreoffice6.2 --o:child_root_path=/opt/lool/child-roots --o:file_server_root_path=/usr/share/loolwsd
Mon choix est d'installer les binaires de LibreOffice fournis par la Document Fondation pour avoir la version la plus récente et la plus compatible avec LibreOffice Online. Ce qui fait que le chemin sera /opt/libreoffice6.2.

configure.ac

C'est dans ce fichier que sont indiquées les fameuses limites.
Deux possibilités pour le modifier :
  • soit créer des patchs à positionner dans debian/patches
  • soit éditer directement le fichier.
Dans le cas de la 2ème solution, à la création du paquet, dpkg-buildpackage protestera qu'il y a des fichiers modifiés et proposera de créer les patchs correspondants.

Les valeurs à remplacer sont :
MAX_CONNECTIONS=20
MAX_DOCUMENTS=10
et si on n'utilise pas le LibreOffice fourni par la distribution
LO_PATH="/usr/lib64/libreoffice"

Compilation

Création du paquet

On peut enfin créer nos paquets :
cd ~/loolwsd/online/
dpkg-buildpackage -us -uc -j4
[lots of output]
dpkg-buildpackage: info: full upload (original source is included)
Les paquets créés sont disponibles dans loolwsd.

Installation de LibreOffice Online

Sur le serveur cible, il ne reste plus qu'à installer le paquet loolwsd_4.0.8-2_amd64.deb créé précédemment et les paquets de libpoco suivants :
  • libpococrypto60
  • libpocodata60
  • libpocoencodings
  • libpocofoundatio
  • libpocojson60
  • libpoconet60
  • libpoconetssl60
  • libpocoutil60
  • libpocoxml60
  • libpocozip60

libpoco pour Debian Stretch

La libpoco pour Debian Stretch ne contient pas le support json pour des raisons de licence, ce qui a été corrigé dans Debian Buster.
Il faut donc recompiler libpoco si on souhaite utiliser Debian Stretch :
mkdir ~/libpoco
cd ~/libpoco/
apt-get source libpoco-dev
git clone --recursive --depth 1 --branch poco-1.7.6-release https://github.com/pocoproject/poco.git
tar -cJf poco_1.7.6-lool.orig.tar.xz poco/
cp -a poco-1.7.6+dfsg1/debian poco/
cd poco/
git checkout -b debian
dh_clean
git add debian/
git commit -m "Initial debian folder from Stretch source package"
Comme précédemment, on va modifier les fichiers contenus dans le répertoire debian.

debian/changelog

On rajoute un petit paragraphe pour expliquer nos modifications :
poco (1.7.6-lool-1) stable; urgency=medium

* A custom build of 1.7.6 including non-DFSG JSON libraries for LibreOffice Online
 -- Nicolas Sulek   Sat, 16 Feb 2019 21:58:15 +0100
Le numéro de version doit être supérieur au numéro d'origine de Debian pour être sûr d'installer notre version.

debian/control

Il faut rajouter le paquet libpocojson46 qui n'existe pas dans Debian et que nous allons créer.
Package: libpocojson46
Architecture: any
Depends: libpocofoundation46 (= ${binary:Version}), ${shlibs:Depends}, ${misc:Depends}
Description: C++ Portable Components (POCO) JSON library
The POCO C++ Libraries are a collection of open source C++ class libraries
that simplify and accelerate the development of network-centric, portable
applications in C++. The libraries integrate perfectly with the C++ Standard
Library and fill many of the functional gaps left open by it.
      .
POCO is built strictly using standard ANSI/ISO C++, including the standard
library. The contributors attempt to find a good balance between using advanced
C++ features and keeping the classes comprehensible and the code clean,
consistent and easy to maintain.
      .
This package provides the POCO JSON library.

debian/rules

Ici, on supprime l'exclusion du composant JSON en remplaçant la directive CONFFLAGS par :
CONFFLAGS = --prefix=/usr --no-samples --no-tests --unbundled --everything --odbc-lib=/usr/lib/$(DEB_HOST_MULTIARCH)/

debian/patches

Maintenant, il faut supprimer les patchs Debian désactivant JSON :
rm debian/patches/0006-Disable-JSON-targets-in-Makefiles.patch
Puis dans debian/patches/series, supprimer la ligne :
0006-Disable-JSON-targets-in-Makefiles.patch

debian/source.lintian-overrides

On supprime le fichier source.lintian-overrides qui n'est plus nécessaire :
rm debian/source.lintian-overrides

debian/libpocojson46.install

On crée le fichier d'installation des biblioéthèques du paquet libpocojson46 debian/libpocojson46.install :
usr/lib/libPocoJSON.so.*

Création des paquets libpoco

+Il ne reste plus qu'à compiler pour créer notre nouveau paquet :
dpkg-buildpackage -us -uc -j4
[lots of output]
dpkg-buildpackage: info: full upload (original source is included)      
On peut supprimer les paquets de debug et installer tous les autres paquets sur le serveur cible :
cd ..
rm *-dbgsym_*.deb
dpkg -i *.deb

Les commentaires sont fermés.