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

Posté par  (site web personnel) . Édité par Ysabeau 🧶 🧦. Modéré par Ysabeau 🧶 🧦. Licence CC By‑SA.
Étiquettes :
27
11
mar.
2021
Bureautique

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 :

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

Sommaire

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 deux choses :

  • une suite bureautique avec interface Web ;
  • un client WOPI, 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

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

II.a. Le serveur WOPI

É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

Un CentOS 7 bien à jour fournira Python 3 :

$ yum install python3 python3-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 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 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

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

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

co5

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

Et voilà !

Aller plus loin

  • # centos7

    Posté par  . Évalué à 3.

    QQ éléments qui peuvent intéresser:

    pour python3 plus besoin de passer par les EPELs (qui est d'ailleur vieux)
    python3-3.6.8-18.el7.x86_64.rpm est dispo sur le depos centos:

    yum install python3

    Si vous voulez plus ressent une version 3.8 existe dans les SCL: https://www.softwarecollections.org/en/scls/rhscl/rh-python36/
    rh-python38-python-3.8.6-1.el7.x86_64.rpm est dispo (le site web n'est pas a jours…)
    de mémoire un truc comme ça doit marcher

    yum-config-manager --enable centos-sclo-rh
    yum install rh-python38
    source /opt/rh/rh-python38/enable

    et puis un env virtuel (comme ca plus besoin de faire le source a chaque fois)

    • [^] # Re: centos7

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

      Hello djip007, je vous remercie beaucoup !

      Vous avez sans doute deviné que ma machine de démo a été mise en place il y a des plombes (encore heureux qu'elle ait les màj de sécu…). J'ai donc repris mes étapes "Python 3" d'époque avec indolence.

      Je proposerais bien qu'on mette à jour la dépêche pour remplacer la partie EPEL par ce :

      yum install python3
      

      (pas besoin de 3.8.6), ce qui rapprochera en plus ce tuto de RHEL/CentOS 8 -c'est quasi la seule différence. C'est possible, Ysabeau ?

      • [^] # Re: centos7

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

        Je remplace ça

        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
        

        par quoi ? Uniquement la commande ? Quelque chose du genre :

        CentOS 7 ne fournit pas Python 3 de base, pour les installer :

        yum install python3
        

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

        • [^] # Re: centos7

          Posté par  (site web personnel) . Évalué à 2. Dernière modification le 15 mars 2021 à 10:47.

          Tout le bloc que tu cites, par :

          Un CentOS 7 bien à jour fournira Python 3 :

          yum install python3 python3-pip
          

          Ça devrait le faire. En te remerciant -et en m'excusant de ne pas avoir vu la dépêche de suite :).

  • # C'est valable pour d'autres distributions ?

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

    Forcément, j’ai dû relire ça plus attentivement (et j’ai enfin compris la vanne sur en root pour la planète).

    Du coup j’ai pensé concrètement à des gens à qui ça pourrait servir. Est-ce que ces commandes sont valables pour d’autres distributions ? Ou sont-elles spécifiques à CentOS (toutes ou certaines) ?

    Une autre question, je ne suis pas bien sûre de comprendre ce qu’est un serveur WOPI par rapport à un serveur Apache, c’est un truc en plus ou un autre truc ou bien ?

    Je sais, ce sont des questions basiques (même pas honte).

    Merci.

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

    • [^] # Re: C'est valable pour d'autres distributions ?

      Posté par  (site web personnel) . Évalué à 4. Dernière modification le 14 mars 2021 à 10:08.

      Est-ce que ces commandes sont valables pour d’autres distributions ?

      Oui, et d'ailleurs quelqu'un pose ici la question pour Debian. Techniquement ça s'installe aussi sur Debian/Ubuntu/openSUSE -on note un biais "entreprise".

      Ce qui est propre à CentOS, c'est toutes les commandes commençant par wget/yum qui sont des installations de paquets ; le reste devrait être universel, quoique… ils utilisent bien systemd sous Debian, hein ? ;-).

      je ne suis pas bien sûre de comprendre ce qu’est un serveur WOPI par rapport à un serveur Apache

      Alors un serveur WOPI, c'est effectivement d'abord un serveur Web comme Apache ; mais rien de fou quand un simple python3 -m http.server t'en lance un en local.

      Sa spécificité, c'est sa capacité à générer, à partir de la tentative d'accès à une URL de document (mon fameux /Tarnyko/Documents/Waurde/file.doc), une série de réponses protocolaires en JSON/WebSockets qui permettent :
      - d'obtenir des infos additionnelles (métadonnées) sur le document ;
      - de télécharger le document, l'enregistrer, loguer les actions et le renvoyer au serveur, dans une optique collaborative (pas de verrou exclusif, etc).

      Cette norme est supportée par toute la clique des suites online : Collabora Online, Nuxeo Office Online, M$ Office Online…
      Tu pourrais recréer un WOPI à partir d'Apache et beaucoup d'huile de coude :-).

  • # LibreOffice

    Posté par  . Évalué à 2. Dernière modification le 14 mars 2021 à 07:19.

    Utiliser la version en ligne est contraignant.

    Est-ce qu'il est possible de bénéficier d'une édition collaborative à partir de LibreOffice installé sur l'ordinateur en client lourd ?

    Ou lorsque CODE est installé sur le serveur Nextcloud, il faut obligatoirement installer la suite Collabora Office pour en bénéficier ?

    • [^] # Re: LibreOffice

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

      En fait ce que tu demandes, c'est d'ajouter le support WOPI à la version "client lourd" de LibreOffice.
      Cela vous permettrait de répartir vos documents sur des serveur distants, et d'y accéder en simultané (et bien plus après !).

      ( Perso, j'ai vraiment eu du mal avec le discours entre LibreOffice/LibreOffice Online/Collabora Online/Collabora Office. Même la FAQ m'a peu aidé. Mais j'ai trouvé cette page :

      CODE is built around the Collabora Office core )

      Donc si les fonctions collab' (WOPI) de CODE proviennent de Collabora Office, qui se trouve être la version "entreprise", ça voudrait bien dire qu'il faut passer par elle… ?
      Après techniquement LibreOffice est OSS, CODE est OSS… mais tu devrais t'adresser d'abord à Collabora, ils tentent de vivre de leur bébé :).

      • [^] # Re: LibreOffice

        Posté par  . Évalué à 2.

        Merci pour ces précisions. J'ai également beaucoup de mal à comprendre les différences et les fonctions dont on est en mesure de bénéficier selon les versions. La page que tu cites et que j'avais consulté, censée expliquer les différences ne précise même pas que la version CODE est limité à 10 documents ouverts en simultané. Uniquement que c'est une version non adapté pour les entreprises…

        Je voulais me renseigner avant d'appeler Collabora, mais il n'y a pas le choix, au moins pour connaître le prix qui n'est même pas indiqué sur leur site.

        • [^] # Re: LibreOffice

          Posté par  (site web personnel) . Évalué à 2.

          ne précise même pas que la version CODE est limité à 10 documents ouverts en simultané

          Tu me l'apprends 😲 !
          C'est donc vraiment une "démo" ; il y a sans doute d'autres limites si on pousse plus loin…

          appeler Collabora […] au moins pour connaître le prix qui n'est même pas indiqué sur leur site.

          Ça paraît le plus sage.

Suivre le flux des commentaires

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