2021-03-01
Collabora Online (aka la version hébergée de LibreOffice Online, concurrent libre d'Office 365) est assez complexe à héberger soi-même.

C'est-à-dire que l'on trouve des tutoriels, mais tous basés sur :
et donc très lourds, surtout qu'ils n'expliquent rien des ports ouverts, démons système et configurations faites...
Et quand à suivre le tutoriel officiel d'installation de l'édition communautaire nommé CODE, il se limite à "juste les paquets" ; on n'est donc pas plus avancé !
Heureusement que je suis là.
Par la suite, toutes les commandes seront demontrées :
Collabora Online en fait, c'est deux choses :
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
# CentOS >= 8:
# dnf config-manager --add-repo ...
# Fedora >= 41:
# dnf config-manager addrepo --from-repofile=...
#
# dnf -y install ...
L'installeur ne crée pas les paires de clés nécessaires au HTTPS (requis), 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 de l'ensemble :
systemctl restart loolwsd
systemctl status loolwsd
On ne peut à ce moment pas encore accéder à des documents ; mais d'ores et déjà découvrir les formats supportés via l'URL de base au :
https://localhost:9980/hosting/discovery

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

Cela ne fonctionne pas car, même si nous avions effectivement un fichier file.doc sur notre 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.
Vous l'avez compris : ownCloud/nextClould/… sont en réalité des serveurs WOPI. Dans leur explorateur de fichiers, en faisant clic-droit-> « Éditer dans LibreOffice », ils génèrent en fait un tel fichier JSON et le fournissent à CODE via HTTP/REST ou WebSocket.
Heureusement, pas besoin d’installer ces monstres ; on va s’entraîner avec bien plus simple !
Écrit en Python 3, ce serveur WOPI est une sorte d'implémentation de réference.
Il ne fournit pas d'interface graphique ni web, 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
Il existe ensuite deux écoles. L'on peut soit :
pip3.6 install -r requirements.txt
tar xfvj python36-el7-wopiserver_deps.tar.bz2
cd python36-el7-wopiserver_deps/
./install.sh -y
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 uniquement 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 :
Copions-y donc un document Waurde 2003© et, dans un nouveau terminal, démarrons le serveur WOPI :
cp file.doc /var/wopi_local_storage/
python3.6 src/wopiserver.py
(si le shell revient à la ligne, il 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

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

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

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

Et voilà !