URL: https://linuxfr.org/users/jnanar--2/journaux/errol-envoyer-automatiquement-des-fichiers-avec-xmpp Title: Errol: Envoyer automatiquement des fichiers avec XMPP Authors: jnanar Date: 2018年01月02日T23:20:59+01:00 License: CC By-SA Tags: xmpp, python3 et chouette Score: 31 Note: ce journal est la traduction d'un article posté sur mon [blog](https://blog.agayon.be/errol.html). Errol est un programme servant à envoyer des fichiers de machine à machine. Il est basé sur [inotify](https://en.wikipedia.org/wiki/Inotify) et le protocole [XMPP](https://fr.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol). 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](https://www.odoo.com/)) 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](https://www.latex-project.org/) 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**](https://en.wikipedia.org/wiki/Magical_creatures_in_Harry_Potter#The_Weasleys'_creatures) 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](https://fr.wikipedia.org/wiki/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/](https://framapic.org/gOg42tzq5q7m/h72hxjXq0dW9.jpg)](https://www.flickr.com/photos/blurredca/10527590684/) Nimage: [blurred.ca](https://www.flickr.com/photos/blurredca/), Great Grey Owl ---------------- # Howto ## Prérequis Errol nécessite l'infrastructure suivante: * un système supportant [inotify](https://en.wikipedia.org/wiki/Inotify) (Linux). * un serveur XMPP compatible avec les XEPs suivantes: [Stream Management](https://xmpp.org/extensions/xep-0198.html), [Publish-Subscribe](https://xmpp.org/extensions/xep-0060.html), [Multi-User Chat](https://xmpp.org/extensions/xep-0045.html) * 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](https://blog.agayon.be/sat_pubsub.html), le composant pubsub du projet [Salut à Toi](https://salut-a-toi.org/). * 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](https://conversations.im/compliance/). ### 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](https://blog.agayon.be/sat_jp.html), l'interface en ligne de commande de Salut à Toi. Les alternatives [Slixmpp](https://dev.louiz.org/projects/slixmpp) ou [Sleekxmpp](https://github.com/fritzy/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](https://xmpp.org/extensions/xep-0163.html)(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](https://movim.eu/) ou [Salut à Toi](https://salut-a-toi.org/). ```sh $ 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](https://git.poez.io/slixmpp). * [pubsub_client.py](https://git.poez.io/slixmpp/tree/examples/pubsub_client.py) * [pubsub_events.py](https://git.poez.io/slixmpp/tree/examples/pubsub_events.py) * [s5b_receiver.py](https://git.poez.io/slixmpp/tree/examples/s5b_transfer/s5b_receiver.py) * [s5b_sender.py](https://git.poez.io/slixmpp/tree/examples/s5b_transfer/s5b_sender.py) 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: * [slixmpp](https://dev.louiz.org/projects/slixmpp) (python 3) * [asyncio](https://docs.python.org/3/library/asyncio.html) * [configparser](https://docs.python.org/3/library/configparser.html) * [aionotify](https://github.com/rbarrois/aionotify) ## Installer Errol s'installe très bien dans un [virtualenv](https://virtualenv.pypa.io/en/stable/userguide/) mais ce n'est pas obligatoire. ``` $ pip install errol ``` Ou encore, après avoir cloné le dépôt: ```sh $ 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/](https://framapic.org/Gf90wqcgUkFX/WBcPe9hOjGoU.jpg)](https://www.flickr.com/photos/widnr/8716853721/) Nimage: [Wisconsin Department of Natural Resources](https://www.flickr.com/photos/widnr/), 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/](https://framapic.org/8crjAU7FavJD/BCm8sWkryutt.jpg)](https://www.flickr.com/photos/volvob12b/37310719232/) Nimage: [Bernard Spragg. NZ](https://www.flickr.com/photos/volvob12b/), 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](https://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/](https://framapic.org/gBx2hyf6RAAF/UGLDhZL4nxws.jpg)](https://www.flickr.com/photos/115391424@N05/36873334554/) Nimage: [lasta29](https://www.flickr.com/photos/115391424@N05/), Great grey owl, Osaka Tennoji Zoo * [Slixmpp](https://github.com/poezio/slixmpp) pour la bibliothèque sympa. * La communauté XMPP francophone (sat@chat.jabberfr.org, jabberfr@chat.jabberfr.org) * Link Mauve ([JabberFR](https://jabberfr.org/)). * Goffi ([Salut à Toi](https://salut-a-toi.org/)). # Liens * [Dépôt git](https://gitlab.com/jnanar/errol) * [Salut à Toi](https://salut-a-toi.org/) * [asyncio ](https://docs.python.org/3/library/asyncio.html) * [slixmpp](https://dev.louiz.org/projects/slixmpp) * [aionotify](https://github.com/rbarrois/aionotify)

AltStyle によって変換されたページ (->オリジナル) /