Journal [Tutoriel] Installer Collabora Online chez soi en casual (RHEL/CentOS 7)

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
33
1
mar.
2021

Sommaire

[Tutoriel] Installer Collabora Online chez soi en casual (RHEL/CentOS 7)

Hello nal,
On discutait récemment du caractère disons, peu attractif, de Collabora Online (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 !).

Alors si tu cherches des tutos, ça oui t'en trouves. MAIS ils se basent tous sur :
- des containers Docker ;
- ownCloud/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à.

Par la suite, toutes les commandes seront sur CentOS 7 (x86_64) et en root. Pour la planète.

I. Installer Collabora Online CODE

Collabora Online en fait, c'est 2 choses :
- une suite bureautique avec interface Web ;
- un client WOPI, pour récupérer les documents de manière standardisée.

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

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

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

Ç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.

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

Écrit en Python 3, ce serveur WOPI 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 :

$ 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 :
- 1. Juste utiliser le gestionnaire de paquets PIP hors de vue du système :

$ pip3.6 install -r requirements.txt

(- 2. Perso je préfère installer les paquets, tous ne sont pas dans EPEL alors j'ai préféré faire une archive avec un script install.sh -y a juste un usage de pip à la fin)

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 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)

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

On peut tester qu'on reçoit le 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

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

co5

III. Mise en oeuvre

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

co6

Et voilà !

  • # Heureusement que tu es là !

    Posté par  (site web personnel, Mastodon) . Évalué à 8.

    Merci beaucoup (bon je ne le ferai pas, ça me dépasse) et je suis absolument sûre qu'il y a des tas de gens que ça va intéresser.

    Je me demande si ça ne ferait pas l'objet d'une bonne dépêche cela dit. On peut aussi en faire une page du wiki de linuxfr.

    « Tak ne veut pas quʼon pense à lui, il veut quʼon pense », Terry Pratchett, Déraillé.

    • [^] # Re: Heureusement que tu es là !

      Posté par  (site web personnel) . Évalué à 3. Dernière modification le 01 mars 2021 à 14:15.

      Hello Ysabeau, en tant que première commentatrice je te fais la totale, réponse & +1 :).

      Je te remercie, c'est flatteur ! Je suis à peu près sûr que ce tuto "simplifié" est inédit.

      En tant que dépêche, je ferais éventuellement 2 modifications :
      - retirer la ligne ([Tutoriel] Installer Collabora Online chez soi […]) surnuméraire en haut ;
      - rajouter des sous-parties (I.a. Installation - I.b. Test…) là les transitions sont un peu trop brutales.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.