Journal Errol: Envoyer automatiquement des fichiers avec XMPP

Posté par (page perso) . Licence CC by-sa
31
2
jan.
2018

Sommaire

Note: ce journal est la traduction d'un article posté sur mon blog.

Errol est un programme servant à envoyer des fichiers de machine à machine. Il est basé sur inotify et le protocole XMPP. Errol peut être utilisé pour surveiller un répertoire et transférer automatiquement les nouveaux fichiers (ou les modifiés) vers une autre machine.

À l'origine

Errol a été écrit pour répondre à un besoin. J'ai l'occasion de donner un coup de main à une association locale. Je maintiens leur ERP (Odoo) et une des tâches consiste à générer un tarif biannuel à partir d'un fichier Excel (oui, je sais). Le processus est basé sur la génération d'un fichier LaTeX car j'ai beaucoup utilisé ce format dans le passé et les PDF générés sont compatibles avec le résultat souhaité. N'ayant pas envie d'installer une distribution LaTeX sur la machine de production, j'ai pris la décision de délocaliser cette tâche sur ma machine personnelle. L'utilisateur téléverse un fichier Excel sur un site web (Django), ce fichier est sauvé dans un répertoire "surveillé" et est ensuite envoyé par XMPP sur ma machine personnelle où le fichier LateX est généré. Le PDF résultat est renvoyé sur le serveur afin d'être pouvoir être téléchargé.

Pourquoi Errol?

Dans le monde fictionnel de Harry Potter, Errol est la chouette de la famille Weasley. Il est vieux et maladroit. Certains pourraient dire que XMPP est dans le même état mais Errol (le rapace) trouve son utilité, tout comme XMPP. ;-) Errol est une chouette lapone. Note: en anglais on parle de great grey owl. (voir photos)

crédit photo: blurred.ca https://www.flickr.com/photos/blurredca/10527590684/
Nimage: blurred.ca, Great Grey Owl


Howto

Prérequis

Errol nécessite l'infrastructure suivante:

  • un système supportant inotify (Linux).
  • un serveur XMPP compatible avec les XEPs suivantes: Stream Management, Publish-Subscribe, Multi-User Chat
  • un service pubsub permettant d'avoir des nœuds ouverts. Le nom du nœud est renseigné dans le fichier de configuration. Mon service est sat_pubsub, le composant pubsub du projet Salut à Toi.
  • un chat multi-utilisateurs (MUC) pour assurer la compatibilité avec certains clients et le débogage. À l'avenir, le MUC pourrait devenir obsolète.

Il est possible d'utiliser son propre serveur ou d'utiliser un service de la liste suivante.

Créer le noeud pubsub

Cette étape est optionnelle si vous disposez déjà d'un accès en écriture sur un nœud (ex: nœud de blogage). L'exemple suivant montre la création du nœud avec jp, l'interface en ligne de commande de Salut à  Toi. Les alternatives Slixmpp ou Sleekxmpp peuvent être utilisés grâce à leurs scripts d'exemples.

$ jp pubsub node create -f publish_model open be.agayon.errol:0 -s pubsub.agayon.be -c

Le nom du nœud recommandé est be.agayon.errol:0 afin d'identifier la fonctionnalité.

En guise d'exemple, voici les informations de mon nœud sur pubsub.agayon.be:

$ jp pubsub node info be.agayon.errol:0 -s pubsub.agayon.be
persist_items: True
deliver_payloads: True
serial_ids: False
publish_model: open
access_model: open
send_last_published_item: on_sub

Si votre serveur supporte Personal Eventing Protocol(PEP) ou si vous ne voulez pas utiliser un service pubsub dédié, vous pouvez utiliser un nœud de microbologage (urn:xmpp:microblog:0) et votre propre jid (adresse xmpp) pour suivre les informations dans Movim ou Salut à Toi.

$ jp pubsub node create -f publish_model open urn:xmpp:microblog:0 -s info@agayon.be -c

Tests

Vous pouvez tester votre installation avec les scripts d'exemples de slixmpp.

Exemple:

./s5b_file_sender.py -j jid@example.org -p pass -r john@example.org -f /path/to/file.txt

Les scripts fournissent plus d'information.

Démarrer avec Errol

Errol a besoin des dépendances suivantes:

Installer

Errol s'installe très bien dans un virtualenv mais ce n'est pas obligatoire.

$ pip install errol

Ou encore, après avoir cloné le dépôt:

 $ git clone https://gitlab.com/jnanar/errol.git
 $ cd errol
 $ python3 setup.py install

Configuration

Vous devez remplir un fichier de configuration pour fournir les informations suivantes:

$ cat config.example.ini

[XMPP]
pubsub=pubsub.example.org
node=be.agayon.errol:0
room=chat@chat.example.org
jid=jid@example.org/errol
password=pass
ressource_receiver=-receiver
ressource_sender=-
nick_sender=example_sender
nick_receiver=example_receiver
receiver=jid@example.org/errol-receiver
  • jid : le compte XMPP
  • password: le mot de passe du compte
  • pubsub: le serveur pubsub (peut-être le jid)
  • room: le salon MUC (chatroom)

Dans cet exemple, les fichiers seront envoyés par jid@example.org/errol-0 à jid@example.org/errol-receiver.
Les "nicks" sont les pseudos utilisés dans le MUC.

Voler

Photo credit: Wisconsin Department of Natural Resources https://www.flickr.com/photos/widnr/
Nimage: Wisconsin Department of Natural Resources, Great Grey Owl at Mauston

Une fois installé, Errol est utilisable depuis le terminal.

$ errol --help
usage: errol [-h] [-e EVENTS] [-f FILE] [-d] -p PATH -c COMMAND

Automatic XMPP file sender and directory watcher

optional arguments:
  -h, --help            show this help message and exit
  -e EVENTS, --events EVENTS
                        Number of events to watch (delete, create modify) in
                        the directory. Once reached, the program stops.
  -f FILE, --file FILE  Config file containing XMPP parameters
  -d, --debug           set logging to DEBUG
  -p PATH, --path PATH  The path watched.
  -c COMMAND, --command COMMAND
                        The executed command: xmpp or watcher

À Hogwarts

Pour surveiller le répertoire /tmp/sender, il faut utiliser la commande suivante:

$ errol -f config.example.ini -p /tmp/sender -c watcher

Tous les fichiers nouvellement créés ou modifiés seront envoyés.

À Azkaban

Pour recevoir les fichiers dans le dossier /tmp/receiver, il faut lancer errol comme suit:

$ errol -f config.example.ini -p /tmp/receiver -c xmpp

Licence

Le projet est libéré sous GPLv3.

Pourquoi pas X or Y?

Photo credit: Bernard Spragg. NZ https://www.flickr.com/photos/volvob12b/37310719232/
Nimage: Bernard Spragg. NZ, Great Grey Owl (Strix nebulosa)

Il y a 36 manière de solutionner ce problème pour ce type de besoins. Certaines sont plus matures, plus connues ou évidentes. J'ai choisi XMPP pour plusieurs raisons:

  • agayon.be possède déjà un service XMPP à jour avec les XEPs nécessaires activées.
  • Je voulais apprendre à travailler avec pubsub pour des communications machines à machines et utiliser les notifications (pourquoi pas?).

Parmi les alternatives, le service aurait pu être basé sur

  • des sockets
  • un transfert de fichier HTTP.
  • API REST
  • SSH et commandes à distances

Remerciements

Photo credit: lasta29, Great grey owl, Osaka Tennoji Zoo https://www.flickr.com/photos/115391424@N05/36873334554/
Nimage: lasta29, Great grey owl, Osaka Tennoji Zoo

Liens

  • # super

    Posté par (page perso) . Évalué à 10.

    Vraiment super d'utiliser XMPP pour autre chose que de la messagerie instantanée, et de le montrer. Tes articles sont super didactiques en plus. J'ai hâte d'en lire d'autres :)

Suivre le flux des commentaires

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