URL:     https://linuxfr.org/news/tutoriel-installer-collabora-online-chez-soi-en-casual-rhel-centos-7
Title:   [Tutoriel] Installer Collabora Online chez soi en casual (RHEL/CentOS 7)
Authors: Tarnyko
        Ysabeau
Date:    2021-03-01T18:42:30+01:00
License: CC By-SA
Tags:
Score:   3


On discutait [récemment](https://linuxfr.org/nodes/123306/comments/1842005) du caractère disons, peu attractif, de [**Collabora Online**](https://www.collaboraoffice.com/code/) (_aka_ **LibreOffice Online**), dû à l’extrême difficulté d’obtenir une démo sans louer un Data Center Google (ce qui lui nuit face à son concurrent [Office 365](https://fr.wikipedia.org/wiki/Microsoft_365) !).



Alors si tu cherches des tutos, ça oui t’en trouves. MAIS ils se basent tous sur :



- des containers Doker ;
- [ownCloud](https://fr.wikipedia.org/wiki/OwnCloud)/[nextCloud](https://fr.wikipedia.org/wiki/Nextcloud).



et surtout n’expliquent pas ce qui se passe, alors tu te retrouves avec 4 Go de RAM de moins, 42 ports ouverts et 23 démons de plus -en gros hein- et sans la moindre idée de ce qui tourne. Et, si tu suis le seul tuto basique pour « juste les paquets » de l’édition communautaire nommée CODE, tu te retrouves à poil avec rien qui marche.


Heureusement que je suis là.

----

[Journal à l’origine de la dépêche](https://linuxfr.org/users/tarnyko/journaux/tutoriel-installer-collabora-online-chez-soi-en-casual-rhel-centos-7)
[Collabora Online](https://www.collaboraoffice.com/code/)

----

Par la suite, toutes les commandes seront sur [**CentOS 7 (x86_64)**](http://ftp.riken.jp/Linux/centos/7/isos/x86_64/) et en **root**. Pour la planète.



I. Installer Collabora Online CODE
==================================
**Collabora Online** en fait, c’est deux choses :



- une suite bureautique avec interface Web ;
- un client [WOPI](https://wopi.readthedocs.io/en/latest/), pour récupérer les documents de manière standardisée.



##I.a. Installation



Les paquets s’installent par :



   $ wget https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7/repodata/repomd.xml.key && rpm --import repomd.xml.key
   $ yum-config-manager --add-repo https://www.collaboraoffice.com/repos/CollaboraOnline/CODE-centos7
   $ yum -y install loolwsd CODE-brand



L’installeur ne crée pas les paires de clés/certificats nécessaires au HTTPS, alors allons-y :



   $ openssl genrsa -out ca.key 2048
   $ openssl req -x509 -new -nodes -key ca.key -days 3650 -out ca.crt -subj "/C=FR/ST=IDF/L=Paris/O=Tarnyko/CN=localhost"
   $ openssl genrsa -out server.key 2048
   $ openssl req -sha256 -new -key server.key -out server.csr -subj "/C=FR/ST=IDF/L=Paris/O=Tarnyko/CN=localhost"
   $ openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
   $ cp server.key /etc/loolwsd/key.pem
   $ cp server.crt /etc/loolwsd/cert.pem
   $ cp ca.crt /etc/loolwsd/ca-chain.cert.pem



I.b. Tests
---------


Ne reste plus qu’à lancer et vérifier l’état du truc :



   $ systemctl restart loolwsd
   $ systemctl status loolwsd



Alors comme ça, on n’a que la moitié de fait, car rien pour accéder aux docs qu’on veut éditer. Mais on peut déjà découvrir les formats supportés, et surtout l’URL de base de l’interface au :
**https://localhost:9980/hosting/discovery**



![co1](http://www.tarnyko.net/repo/collaboracode1.png)



On peut même, en utilisant cette URL, essayer d’en crafter une plus complète utilisant la syntaxe WOPI pour fournir un fichier `file.doc` et un token d’accès :



**https://localhost:9980/loleaflet/655a266/loleaflet.html?WOPISrc=http%3A%2F%2Flocalhost%2Ffile.doc&access_token=DASDASAS**



![co2](http://www.tarnyko.net/repo/collaboracode2.png)



Ça ne marche pas car, même si nous avions effectivement un fichier `file.doc` sur un serveur web local, CODE s’attend en fait à recevoir un fichier JSON contenant le nom, URL du fichier et plein de métadonnées propres à la norme [WOPI](https://wopi.readthedocs.io/en/latest/).



Tu l’as compris, ownCloud/nextClould/… sont en fait des serveurs WOPI. Dans leur explorateur de fichiers, en faisant clic-droit->« Éditer dans LibreOffice », ils génèrent en fait un tel fichier et le fournissent à CODE via HTTP/REST ou WebSocket.
Heureusement, pas besoin d’installer ces monstres, on va s’entraîner avec plus simple !



II. Installer CS3 WOPI Server
=============================



II.a. Le serveur WOPI
--------------------
Écrit en Python 3, ce [serveur WOPI](https://github.com/cs3org/wopiserver) est un genre d’implémentation de référence. Il ne fournit pas d’interface mais a l’avantage de la simplicité, et nous permettra de jouer en ligne de commande :


   $ git clone https://github.com/cs3org/wopiserver
   $ cd wopiserver



CentOS 7 ne fournit pas Python 3 de base, sur le mien j’avais déjà Python 3.6 via le dépôt [EPEL](https://fedoraproject.org/wiki/EPEL) :



   $ wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
   $ yum install epel-release-latest-7.noarch.rpm
   $ yum install python36 python36-pip



Après tu as deux écoles, tu peux :



- juste utiliser le gestionnaire de paquets PIP hors de vue du système :


   $ pip3.6 install -r requirements.txt



-  installer les paquets (perso, je préfère cette méthode), tous ne sont pas dans EPEL alors j’ai préféré faire une [**archive**](http://www.tarnyko.net/repo/python36-el7-wopiserver_deps.tar.bz2) avec un script `install.sh -y` a juste un usage de pip à la fin.


II.b. Installation et configuration
------------------


Reste à créer la structure de répertoires :



   $ mkdir /var/wopi_local_storage && chmod a+rwx /var/wopi_local_storage
   $ mkdir /var/log/wopi && chmod a+rwx /var/log/wopi
   $ mkdir /etc/wopi && chmod a+rwx /etc/wopi
   $ cp wopiserver.conf /etc/wopi/wopiserver.defaults.conf
   $ echo 'testsecret' > /etc/wopi/wopisecret
   $ echo 'testsecret' > /etc/wopi/iopsecret



Et éditer **/etc/wopi/wopiserver.defaults.conf** (je mets juste les sections à décommenter/modifier) :



   [general]
   storagetype = local
   port = 8880
   codeurl = https://localhost:9980
   wopiurl = http://localhost:8880
   downloadurl = http://localhost:8880/wopi/cbox/download

   [local]
   storagehomepath = /var/wopi_local_storage



Quelques explications :
- nos documents seront stockés en local dans **/var/wopi_local_storage/** ;
- le serveur WOPI écoute sur **HTTP:8880**, CODE s’y connectera pour recevoir un descriptif JSON des fichiers ;
- le serveur WOPI fournit aussi une URL de téléchargement direct, renseignée dans le JSON, dont la base sera **http://localhost:8880/wopi/cbox/download/**.



Copions-y donc un document [Waurde 2003](https://fr.wikipedia.org/wiki/Microsoft_Word) et démarrons le serveur :



   $ cp file.doc /var/wopi_local_storage/
   $ python3.6 src/wopiserver.py



_(si le shell revient à la ligne, y a un souci, voir les logs dans **/var/log/wopi/wopiserver.log**)_



II.c. Tests
-----------



Il est temps d’essayer de générer une URL avec l’outil shell :



   $ PYTHONPATH=./src python3.6 tools/wopiopen.py -v READ_WRITE /file.doc testtoken



![co3](http://www.tarnyko.net/repo/collaboracode3.png)



On peut tester la réception du JSON en utilisant la WOPI_URL (caractères spéciaux %3A,%2F remplacés par :,/) et complétée du WOPI_TOKEN (balise `b''` retirée) :


![co4](http://www.tarnyko.net/repo/collaboracode4.png)



et même utiliser la `DownloadUrl` (encadrée ci-dessus) pour télécharger le doc en direct :



![co5](http://www.tarnyko.net/repo/collaboracode5.png)



III. Mise en œuvre
===================
La syntaxe à envoyer à CODE est donc au final :
**https://localhost:9980/loleaflet/655a266/loleaflet.html?WOPISrc=$WOPI_URL&access_token=$WOPI_TOKEN**



![co6](http://www.tarnyko.net/repo/collaboracode6.png)



Et voilà !