Errol is a file sender that rely on inotify. It can be used to watch a directory and automatically transfer the new files (or modified ones) with XMPP.
Errol is a file sender that rely on inotify. It can be used to watch a directory and automatically transfers the new files (or modified ones) with XMPP.
Errol needs the following requirements:
- A system supporting inotify (Linux).
- an XMPP (jabber) account supporting the following XEPs: Stream Management, Publish-Subscribe, Multi-User Chat
- A pubsub service where the nodes can be set as open. The node name is defined in the configuration file. I personally use sat_pubsub. A pubsub component developed for the project Salut à Toi.
- A Multi-User Chat because not all XMPP accounts support PubSub. For now, some information are still shared through MUC messages. This behavior could change in the future.
Create the pubsub node
$ jp pubsub node create -f publish_model open be.agayon.errol:0 -s pubsub.agayon.be -c
The node name be.agayon.errol:0 is recommended in order to identify the functionnality.
As an example, there are the node options on the service 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
Getting started with Errol
First you need to clone the repository. Errol needs the following dependencies:
You can easily install errol with pip:
$ pip install errol
$ python3 setup.py install
Errol can easily be installed in a virtualenv.
A PKGBUILD will be available soon.
You need to provide information about the XMPP account.
$ cat config.example.ini [XMPP] pubsub=pubsub.example.org node=be.agayon.errol:0 firstname.lastname@example.org email@example.com/errol password=pass ressource_receiver=-receiver ressource_sender=- nick_sender=example_sender nick_receiver=example_receiver firstname.lastname@example.org/errol-receiver presence_file=/tmp/errol_presence.txt
- jid : the jabber account
- password: the xmpp password
- pubsub: the pubsub server (publish activity)
- room: the MUC (chatroom) where errol display information.
- presence_file: a writable file used to keep track of presences. When receiver is online, the file contains ‘1’ and ‘0’ otherwise.
Once installed, Errol can be launched in a 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
On device A
If you want to watch the directory /tmp/sender, the following command can be used:
$ errol -f config.example.ini -p /tmp/sender -c watcher
All modified or new files created in the watched location will be sent by XMPP.
On device B
If you want to receive the files, you have to launch Errol with the following command line.
$ errol -f config.example.ini -p /tmp/receiver -c xmpp
All the received files will be stored in the directory defined with the option ‘-p’.
Launch with systemd
Errol can be launched with systemd. Two unit files are provided to help you:
First, you need to create the config directory and copy the unit files.
$ mkdir -p ~/.config/errol/ $ mkdir -p ~/.config/systemd/user/ $ cp systemd/environment.sh ~/.config/errol/ $ cp systemd/errol_watcher.service ~/.config/systemd/user/ $ cp systemd/errol_sender.service ~/.config/systemd/user/
Then, you can edit the environment and the unit files to match your preferences and reload the units.
$ systemctl --user daemon-reload
The units can then be launched and activated at boot:
$ systemctl --user start errol_sender $ systemctl --user start errol_watcher $ systemctl --user enable errol_sender $ systemctl --user enable errol_watcher
If you encounter some problems, you can read the logs with the following command:
$ journalctl --user -xe $ systemctl --user status errol_watcher.service $ systemctl --user status errol_sender.service
This project is licensed under the GPLv3 - see the LICENSE.txt file for details