J'ai installé Lemmy
J’ai ajouté Lemmy à la liste des services du fédivers que j’héberge, voici ce que j’en pense et comment j’ai rendu l’expérience plus intéressante.
Qu’est-ce que Lemmy?
Lemmy est un aggrégateur de lien offrant une alternative libre et décentralisée à Reddit pour le fédivers.
Euh okay, mais encore?
Ce service permet à tout utilisateur de poster des liens, images ou tout simplement du texte. Le contenu posté peut ainsi être commenté par les autres utilisateurs qui peuvent également voter pour ou contre celui-ci.
Le contenu est organisé par communautés et à chaque fois qu’on doit poster quelque chose il faut choisir dans quelle communauté on souhaite le publier. Chaque utilisateur peut alors s’abonner aux communautés qui l’intéressent et voir le contenu de celles-ci s’afficher sur sa page d’accueil. Il est également possible de supprimer le filtre et d’afficher toutes les nouvelles publications indépendament de nos souscriptions ou de les trier par nombre de votes, commentaires, date de publication, activité, …
Tout ça, jusque-là c’est exactement ce que fait Reddit. Là où ça devient plus intéressant (ou pas, ça dépend à qui vous demandez, mais sur ce site ça l’est :p) c’est que le logiciel est publié sous license libre (AGPL-3.0), me permettant notamment de l’installer pour moi ou d’autres.
Là où c’est encore plus intéressant c’est que les instances peuvent être fédérées, me permettant d’accéder au contenu de toutes les instances ayant activé la fédération depuis la mienne. Je dirais même que c’est vital pour moi puisqu’il est fort probable que je sois le seul péon sur mon instance, ce qui réduit drastiquement la dimension sociale de la chose en l’absence de fédération…
À noter que le protocole utilisé pour la fédération est ActivityPub, qui est celui utilisé également par - au hasard - Mastodon et que depuis la dernière mise à jour (il y a trois jours au moment ou je publie), on peut suivre les communautés Lemmy depuis Mastodon et Pleroma.
Pourquoi et comment?
Comme j’ai tendance à le dire pour ce que j’héberge, parceque j’en ai envie et que je peux. J’aime l’idée d’un Internet décentralisé (comme il a été pensé) et j’aime administrer des serveurs et services alors la question c’est plutôt pourquoi pas?
Justement dans les arguments pour ne pas le faire, il y a le coût. Dans la mesure ou j’ai déjà les serveurs pour d’autres services, ça ne me coûte rien de plus.
Il y a également le temps que ça prend de gérer tout ça, j’en arrive donc au comment. Comme déjà exprimé sur ce blog, pour partiellement régler ce problème j’essaye au maximum d’utiliser des version packagées des applications que j’héberge. Notamment j’ai un serveur YuNoHost et ô joie, un paquet existait pour Lemmy.
Comme ça arrive parfois avec certains paquets YuNoHost, celui-ci n’était pas à jour et ne fonctionnait pas très bien (et j’en sais quelque chose, le paquet restic que j’ai créé n’est pas à jour et ne fonctionne pas parfaitement). Qu’à cela ne tienne, j’ai vu que quelqu’un avait forké le dépôt et tenté de le mettre à jour sans succès mais j’ai réussi à le corriger.
Comme je n’étais pas très sûr de la solution que j’ai choisie je l’ai postée sur la PR, si on me répond je tâcherai de faire une nouvelle PR avec la correction.
Entretemps une nouvelle mise à jour de Lemmy est sortie (celle apportant la fédération avec Mastodon et Pleroma), j’ai à nouveau mis à jour le paquet et j’ai déployé la mise à jour avec, tout tourne parfaitement.
Seul mais connecté
À ce stade j’ai une instance qui fonctionne dans la dernière version disponible, j’accède bien au contenu de lemmy.ml (l’instance maintenue par les dévelopeurs, qui a le plus d’utilisateurs) et de toutes les autres instances fédérées. Je peux également y poster du contenu depuis mon instance, bref, tout est nickel.
Enfin presque…
Par défaut, mon instance ne "connaît" que les communautés locales. Ce n’est qu’une fois que j’ai recherché une communauté distante que celle-ci peut apparaître sur mon instance, ou à fortiori si un un utilisateur local s’y est abonné.
Le problème c’est comment découvrir les communautés auxquelles je souhaite m’abonner?
Sur Mastodon on "s’abonne" aux utilisateurs (plus exactement on les suit), ce qui permet de voir leurs échanges avec d’autres et de découvrir de nouveaux comptes à suivre. Sur Lemmy, c’est aux communautés qu’on s’abonne, et dans ce cas-là on n’est jamais redirigé vers d’autres communautés.
Pour l’instant la seule solution serait d’aller sur lemmy.ml, afficher toutes les publications, repérer les communautés intéressantes, les rechercher à partir de mon instance puis m’y abonner. Un peu pénible…
Mais il y a une solution: on sait que le fait de rechercher une communauté fédérée à partir d’une instance permet de l’afficher sur celle-ci. Pourquoi ne pas lancer une recherche sur toutes les communautés d’une instance distante pour en quelque sorte les "rapatrier"?
J’ai donc pondu un script qui fait ça, j’ai quand même demandé à un admin de lemmy.ml si c’était pas trop déconnant, je n’avais pas envie que mon instance se fasse bannir, on m’a dit que c’était OK, tant que n’allait pas DDOS leur instance. Ça ira, je n’en ai ni l’intention, ni les moyens.
Voici le menu d’aide du script:
usage: lemmy-federator.py [-h] --source LEMMY_SOURCE_INSTANCE --destination LEMMY_DESTINATION_INSTANCE [--communities-batch-size COMMUNITIES_BATCH_SIZE]
[--no-dry-run]
Search a Lemmy instance's communities from another one so as to get them listed
optional arguments:
-h, --help show this help message and exit
--source LEMMY_SOURCE_INSTANCE
The instance communities are being pulled from ("lemmy.ml" for example)
--destination LEMMY_DESTINATION_INSTANCE
The instance communities are being retrieved to ("mylemmy.com" for example)
--communities-batch-size COMMUNITIES_BATCH_SIZE
Number of communities to pull on this batch
--no-dry-run Set this flag to actually do the stuff
Le script a deux dépendances: BeautifulSoup et requests très facilement installés avec un pip install bs4 requests
(perso j’utilise plutôt des virtualenvs)
Il liste toutes les communautés de l’instance source, lance une recherche à partir de l’instance de destination et stocke chaque communauté traitée dans un fichier cache.txt
dans le répertoire courant afin de ne pas la rechercher à nouveau lors d’une autre session.
Le script ne traitera à chaque fois qu’un certain nombre de nouvelles communautés (COMMUNITIES_BATCH_SIZE
) qui a une valeur de 15 par défaut.
Il ne reste donc qu’à le planifier au début toutes les quarts d’heure par exemple, le temps que toutes les communautés soient récupérées. Par la suite une fois par jour, voir tous les quelques jours devrait suffire, j’imagine qu’il n’y a pas masse de nouvelle communauté créée quotidiennement.
Voici ce que j’ai mis dans ma crontab sur un serveur pour une exécution quotidiennement à 15H29:
29 15 * * * cd /repertoire/de/lemmy-federator;/usr/bin/python3 /repertoire/de/lemmy-federator/lemmy-federator.py --source lemmy.ml --destination lemmy.coupou.fr --no-dry-run
Pour l’instant ça fonctionne comme je l’imaginais, reste à voir si les communautés ainsi recherchées ne finissent pas par être nettoyées par mon instance si elles ne servent pas. Si c’est le cas il faudra que j’ajoute un système de vérification, pour l’instant je n’ai aucune idée de comment faire, je m’en inquièterai le moment venu, s’il vient. Visiblement les communautés ainsi découvertes ne sont jamais supprimées, super!
Je rappelle que je ne suis pas dévelopeur, il y a sûrement beaucoup de choses à améliorer dans le script mais il me convient comme ça.
J’ai voulu utiliser l’API de Lemmy au début mais je n’ai pas compris comment faire. C’est sans doute lié au point précédent :p
Si jamais ce script vous est utile ou si vous l’améliorez d’une quelconque façon, faites le moi savoir!
Je suis joignable:
-
sur matrix: @lionel:chat.coupou.eu
-
sur mastodon: @lionel@toot.coupou.fr
Vous pouvez aussi en discuter sur https://lemmy.coupou.fr/post/10428