Universal Office Converter

Modèle:Convertisseurs de documents

Qu'est ce qu'unoconv?

"Unoconv" est un programme en ligne de commande qui est utilisé pour convertir entre différents formats de fichiers de documents Office. Il utilise une instance de LibreOffice pour effectuer la conversion et est utilisé par le Devoir pour convertir les documents en pdf afin qu'ils puissent être annotés. Si unoconv n'est pas installé, le seul impact est que les devoirs ne permettront les annotations que lorsque les étudiants téléchargeront un document pdf.

Les étapes requises pour installer unoconv sont différentes selon le système d'exploitation sur lequel vous avez installé Moodle.

Installer unoconv sur Linux

La version requise de unoconv est d'au moins 0.7. Selon votre goût de linux, cela peut être disponible dans votre gestionnaire de paquetages et vous pouvez l'installer directement avec :

Ubuntu 16.04 LTS

apt-get install unoconv

Si votre gestionnaire de paquetages contient une ancienne version du paquetage, vous devrez trouver une version plus récente et l'installer manuellement (Tests Debian). Unoconv lui-même n'est qu'un script python, donc il a peu de dépendances.

Problèmes potentiels :

  • Sur certains systèmes, le répertoire personnel de l'utilisateur apache est défini sur un dossier non existant. Cela peut entraîner l'échec de l'unoconv. Il y a 2 solutions à cela : l'une est de créer un répertoire personnel (accessible en écriture) pour l'utilisateur apache (comme /home/www-data). L'autre est d'exécuter un auditeur unoconv (décrit ci-dessous) comme un autre utilisateur que l'utilisateur apache (quelqu'un avec un répertoire personnel valide et écrit).
  • Si vous utilisez toujours 14.04LTS, unoconv ne fonctionnera pas tel quel. Ce n'est peut-être pas la méthode la plus efficace, mais elle a fonctionné en installant unoconv (version 0.6) depuis le gestionnaire de paquetages comme ci-dessus. Vous devrez ensuite récupérer unoconv 0.7 de Github (https://github.com/dagwieers/unoconv), puis passer à la dernière version de libreoffice en utilisant le PPA (https://launchpad.net/~libreoffice/+archive/ubuntu/ppa). Pointez moodle sur la version Github de unoconv, vous devez modifier le fichier Python unoconv en changeant "python" dans la première ligne à "python3". Vous devez également changer les permissions sur le répertoire /var/www pour que l'utilisateur www-data puisse lui écrire (www-data doit écrire dans son répertoire home ce qu'il ne peut pas faire par défaut).

Sur Debian Stable, la méthode la plus sûre pour installer unoconv est d'utiliser Jessie-backports. Tout d'abord, activez la ligne backports repo dans /etc/apt/sources.list :

#### Jessie-backports ####
deb http://ftp.debian.org/debian jessie-backports main

Ensuite, mettez à jour et installez unoconv depuis jessie-backports :

apt-get update
apt-get install -t jessie-backports unoconv

Le forfait vous apportera toutes les dépendances nécessaires.

Ubuntu 14.04 LTS

1) Naviguez jusqu'au répertoire opt

cd /opt

2) Télécharger unoconv

sudo wget https://raw.githubusercontent.com/dagwieers/unoconv/master/unoconv

3) Modifier le fichier Python unoconv en changeant "python" dans la première ligne en "python3".

sudo nano /opt/unoconv

ex.
#!/usr/bin/env python3

4) Rendre unoconv exécutable

sudo chmod ugo+x /opt/unoconv

5) Ajoutez LibreOffice PPA à votre système et installez la dernière version.

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice

6) Modifier les permissions pour qu'apache puisse écrire dans son répertoire personnel

sudo chown www-data /var/www

7) Depuis votre navigateur, naviguez jusqu'à Administration du site > Serveur > Chemin système et ajoutez le chemin vers unoconv
/opt/unoconv

  • Remarque : si vous souhaitez préserver le chemin par défaut, ajoutez un lien symbolique vers /usr/bin:
sudo ln -s /opt/unoconv /usr/bin/

8) Naviguer jusqu'à Administration du site > Plugins > Modules d'activité > Devoir > Plugin de Feedback > Annoter PDF > Tester le chemin unoconv.
Vous devriez voir :
"Le chemin unoconv semble être correctement configuré."

  • Téléchargez le fichier de test converti au format pdf. (si le PDF ne se charge pas, assurez-vous que www-data peut écrire dans son répertoire personnel : /var/www)

CentOS / RedHat

Juste avant de commencer, vous pouvez envisager d'installer la dernière version LibreOffice 5.2 directement à partir de paquetages RPM, qui ne font pas partie de la distribution que vous utilisez. A partir de nov-2016, CentOS et RedHat 7.2 sont livrés avec OpenOffice 4.3 donc si vous n'êtes pas intéressé à utiliser cette version et souhaitez installer la dernière version 5.2 indépendante LibreOffice 5.2, veuillez supprimer tout paquetage openoffice que vous pourriez avoir sur votre OS en publiant :

yum remove openoffice* libreoffice*

Il est recommandé de choisir votre version localisée de libreoffice pour de meilleures conversions de documents.

yum install libreoffice libreoffice-pyuno
git clone https://github.com/dagwieers/unoconv.git
# copier
cp unoconv/unoconv /usr/bin
# ou lier unoconv à /usr/bin
ln -s unoconv/unoconv /usr/bin/unoconv
Remarque : dépend de la version que vous installez, openoffice ou libreoffice, assurez-vous d'avoir installé le paquetage *-pyuno. (le paquetage headless est déjà compilé dans le noyau)

Assurez-vous qu'il est correctement configuré : http://your-moodle/admin/search.php?query=unoconv

Les serveurs de production devraient envisager d'exécuter unoconv en mode auditeur, voir Installation unoconv#Exécutez un auditeur unoconv ou suivre les instructions ci-dessous

vi /etc/systemd/system/unoconv.service

Puis copiez et collez la configuration suivante :

[Unité]
Description=Unoconv auditeur pour les conversions de documents
Documentation=https://github.com/dagwieers/unoconv
Après=réseau.target remote-fs.target nss-lookup.target.target

[Service]
Type=simple
Environnement="UNO_PATH=/usr/lib64/libreoffice/program"
ExecStart=/usr/bin/unoconv --listener

[Installation]
WantedBy=multi-user.target

Puis activez et démarrez le service ci-dessus

systemctl enable unoconv.service
systemctl start unoconv.service
Si votre selinux est activé, vous devez définir
#setsebool -P httpd_execmem on

Installer unoconv sur OS X

Téléchargez et installez LibreOffice pour Mac. Malheureusement, les nouvelles versions de LibreOffice ne sont pas compatibles avec unoconv pour mac et vous devrez installer LibreOffice 4.2 (lien de téléchargement direct https://downloadarchive.documentfoundation.org/libreoffice/old/4.2.5.2/mac/x86_64/LibreOffice_4.2.5.2_MacOS_x86-64.dmg).

Get the latest version of the unoconv python script. One way to do this is with http://brew.sh/ brew.

brew install unoconv

Si vous ne l'avez pas déjà fait, installez ghostscript. Une autre façon d'installer ghostscript : http://brew.sh/ brew

brew install ghostscript

Définissez les chemins vers unoconv et ghostscript dans Moodle (Administration du site > Serveur > Chemin du système). Si vous avez utilisé brew, ils seront tous les deux installés dans /usr/local/bin.

LibreOffice a besoin d'un accès en écriture au répertoire personnel des utilisateurs actuels pour créer des fichiers temporaires. Quand unoconv est exécuté en tant qu'utilisateur du serveur web (_www) il n'a normalement pas cette permission.

Il y a quelques façons de contourner ce problème, une étant de donner à l'utilisateur "_www" un accès en écriture à /Library/WebServer.

Une autre solution est de convaincre LibreOffice que ce répertoire utilisateur est ailleurs. Ceci peut être fait en insérant ce code dans le haut du script python unoconv. Code à insérer :

#  Définir la maison à un dossier inscriptible.
os.environ['HOME'] = '/tmp/'                                                                                                        

Il doit être inséré à la ligne 36 immédiatement après la ligne "exitcode = 0".


Installer unoconv sous Windows

Téléchargez et installez LibreOffice pour Windows. Open Office fonctionnera aussi bien, mais la documentation pour unonconv est fixée à Libre Office.

Téléchargez la dernière version du script unoconv sur https://github.com/dagwieers/unoconv/releases (télécharger la version zip).

Du fichier zip téléchargé, extraire le fichier "unoconv-0.7\unoconv" (sans extension de fichier). C'est le script unoconv, aucun des autres fichiers du paquetage n'est requis.

Renommez le script téléchargé en unoconv.py' et copiez-le dans un dossier dans C:\Program Files ou C:\Program Files (x 86)

Créez un fichier batch dans le même dossier que unoconv.py nommez-le quelque chose comme unoconv.bat', il doit être un fichier batch, avec ce contenu :

@"C:\Program Files\LibreOffice (or Open Office #v)\program\python.exe" c:\unoconv\unoconv.py %*  

Ensuite, vous devez "'Définir les chemins dans Moodle"'.

Connectez-vous en tant qu'administrateur et allez dans Administration du site > Serveur > Chemin du système.

Définir :

 Chemin vers Ghostscript (pathtogs) C:\Program Files\gs\gsversion\bin\gswin64c.exe  
N'utilisez pas gswin32.exe ou gswin64.exe, ce ne sont pas des programmes en ligne de commande, utilisez gswin32c.exe ou gswin64c.exe.

Définir :

Chemin vers Python (pathtopython) à C:\Program Files (x86)\OpenOffice v#(ou Libra Office v#)\program\python.exe   

Identifiez dans le chemin le programme que vous utilisez et incluez le nom complet de l'exe pour Ghostscript et Python.

Sauvegardez les instructions chemin vers et une coche verte devrait apparaître si Moodle communique avec les fichiers requis.

Allez dans Administration du site > Plugins > Convertisseurs de documents et activez Unoconv puis sélectionnez Paramètres

Saisissez l'instruction de chemin d'accès à
 Chemin d'accès au convertisseur de document unoconv : C:\Program Files (x86)\unoconv\unoconv.bat

Inclure le nom complet du fichier .bat.

Test ghostscript et unoconv fonctionnent correctement dans les pages de test de l'administrateur "Administration du site > Plugins > Modules d'activité > Devoir > Plugins de feedback > Annoter PDF".

Exécutez un auditeur unoconv

Unoconv utilise un processus client/serveur lors de la conversion de documents. Par défaut, lorsqu'il n'y a pas de processus serveur en cours d'exécution, chaque fois que unoconv s'exécute, il démarre un processus serveur, envoie sa requête et arrête le processus serveur lorsque la requête est terminée. L'inconvénient de ce mode est que si 2 requêtes sont soumises simultanément, ce qui peut entraîner l'arrêt du processus du serveur lors de la première requête alors que la seconde est toujours en cours, et la seconde requête de conversion échoue. Une façon plus robuste de configurer unoconv est de démarrer un processus serveur au démarrage, et/ou d'exécuter un script pour le surveiller et le redémarrer s'il plante.

Pour démarrer un auditeur inconvenant au démarrage, vous avez besoin d'un script de démarrage. Différents systèmes d'exploitation et distributions Linux utilisent différents scripts de démarrage, mais voici quelques exemples de scripts de démarrage pour différents systèmes.

Script Upstart pour les systèmes basés sur Ubuntu

Script de lancement pour OS X

Script d'initialisation pour Debian

Script d'initialisation pour CentOS/RedHat 6.x

Script de service SystemD pour CentOS/RedHat 7.x

Déchargement du traitement sur un autre serveur

Le traitement des documents de bureau peut augmenter la charge de travail de votre serveur Web, ce qui peut avoir un impact sur la réactivité de votre site. Si vous installez unoconv sur un grand site, vous pouvez envisager d'exécuter unoconv sur un serveur qui ne répond pas également aux requêtes Web.

Comment faire cela :

Installez unoconv sur chaque serveur web et sur le serveur distant en suivant les instructions d'installation ci-dessus.

Assurez-vous que unoconv est lancé au démarrage sur le serveur distant avec l'argument " --listener" et qu'il est surveillé et redémarré s'il sort (voir le script init de Debian pour un exemple). Par défaut, unoconv n'écoutera que sur localhost (127.0.0.1) : si vous voulez vous connecter au processus d'écoute depuis un autre serveur, vous devez aussi démarrer le processus d'écoute avec l'argument "--server" !

Un exemple de commande pour démarrer un auditeur sur un serveur distant (0.0.0.0 écoute sur toutes les interfaces) :

unoconv --listener --server 0.0.0.0 --port 2002

Ouvrez le port pare-feu 2002 entre les serveurs web moodle et la machine qui tourne sansoconv.

Partagez la racine des données de moodle entre les serveurs web et la machine qui tourne sur unoconv. Ce dossier doit être monté sur le même chemin sur tous les serveurs.

Installez un wrapper pour unoconv sur les serveurs web qui transmet les requêtes au serveur distant. Exemple :

#!/bin/bash
# Script d'emballage pour unoconv au traitement de transfert.
# Installer dans /usr/bin/unoconv-remote avec 755 permissions.
/usr/bin/unoconv --server=<ip of remote server> "$@"

Configurez le chemin vers unoconv dans les paramètres d'administration de Moodle pour pointer vers ce script wrapper.

Ressources supplémentaires

GitHub dagwieers/unoconv contient des informations supplémentaires sur l'installation de l'anticonvolution et des conseils de dépannage.

Résolution des problèmes

Voir aussi