Première rédaction de cet article le 25 avril 2019
Le fédivers (ou fediverse, ou fédiverse) est l'ensemble des systèmes qui communiquent sur l'Internet en échangeant des messages typiquement assez courts, dans une logique de microblogging et en utilisant en général le format Activity Streams et le protocole ActivityPub. Il existe plusieurs logiciels qui permettent de participer au fédivers, et cet article va parler de mon expérience avec Pleroma.
Mon résumé du fédivers vous a semble bien vague et bien nébuleux ? C'est normal, le fédivers n'a pas de définition claire. Beaucoup de gens le confondent avec Mastodon, qui n'est qu'un des logiciels permettant l'accès au fédivers. En pratique, il est vrai que « fédivers » est souvent défini de facto comme « tout ce qui peut échanger des messages avec Mastodon ».
Mon compte fédivers personnel, bortzmeyer@mastodon.gougere.fr
,
est sur Mastodon, mais je pense qu'il est crucial d'avoir un
pluralisme des logiciels utilisés. Ce serait triste de fuir les
rézosocios centralisés des
GAFA pour retrouver un monopole dans le
logiciel, même si c'est un logiciel libre. Et puis, je voulais gérer ma
propre instance (ma propre machine connectée
au fédivers) et l'installation et l'administration de Mastodon me
faisaient un peu peur, surtout sur une petite machine. Donc, je me
suis tourné vers le logiciel des pauvres,
Pleroma.
Un mot d'abord pour les utilisateurs, et je parlerai des
administrateurs système par la suite. Si
vous voulez expérimenter avec Pleroma, il existe au moins une
instance publique en France,
. Vous pouvez y créer un
compte et essayer ainsi le logiciel (j'ai d'ailleurs un compte sur
cette instance, https://pleroma.fr/
bortzmeyer@pleroma.fr
,
même si je m'en sers peu). Contrairement à Mastodon, où le serveur
et l'interface utilisateur sont développés et distribués ensemble,
Pleroma sépare les deux. L'interface Web par défaut est nommée
Pleroma FE (FE pour FrontEnd) mais on peut en
utiliser d'autres, y compris celle de Mastodon (Mastodon FE). Bon,
mais on ne va parler que de Pleroma FE.
Contrairement à Mastodon FE, tous les pouètes sont sur une seule colonne, et on utilise les liens à gauche pour afficher les messages des gens qu'on suit, les messages qui nous mentionnent, les messages privées, ou bien tous les messages connus de l'instance.
Pour écrire, on tape son pouète (son message, son toot) dans la fenêtre (celle avec le choix par défaut « Just landed in L.A. », je n'ai pas encore trouvé comment le modifier…) Le protocole ActivityPub laisse plein de choses non décidées. Ainsi, il n'y a aucune règle sur la taille maximale des pouètes. Mastodon la limite à 500 caractères par défaut (mais l'administrateurice de l'instance peut le changer), Pleroma à 5 000 (également modifiable). Le format des pouètes n'est pas non plus normalisé et Pleroma permet (ce n'est pas activé par défaut) de mettre du gras, de l'italique… (Les utilisateurices les plus avancé·e·s noteront qu'on peut utiliser la syntaxe Markdown.)
Comme Pleroma est par défaut mono-colonne et Mastodon par défaut multi-colonnes, cela déroute parfois ceux et celles qui viennent de Mastodon. Quelques petites particularités de l'interface Pleroma FE, listées par lord :
Autre avantage de Pleroma par rapport à Mastodon : le moteur de recherche cherche dans tous les messages, pas seulement ceux marqués avec un croisillon.
Outre l'instance
citée plus haut, il existe
d'autres instances du fédivers utilisant Pleroma. La mienne est
https://pleroma.fr/
.
Elle n'est pas ouverte au public, mais si vous demandez
gentiment, je peux vous y ouvrir un compte. Les
CGU de cette instance sont simples :
« l'administrateur [moi] fait ce qu'il veut ». Bon, c'est pareil
sur toutes les autres instances mais, ici, c'est moins
hypocrite. (Sur une instance qui accepte les créations de compte à
tou·te·s, pensez à éditer
https://pleroma.bortzmeyer.fr/
priv/static/static/terms-of-service.html
pour
indiquer les CGU.)
Le reste de cet article concerne plutôt les administrateurs système, qui voudraient installer une instance Pleroma sur leur machine.
Un des principaux intérêts de Pleroma par rapport à Mastodon est d'être très léger et de pouvoir tourner sur une petite machine. Dans mon cas, il s'agit d'un container LXC sur une Turris Omnia. J'ai installé Alpine Linux dessus, car c'est un système peu consommateur de ressources (et qui n'a pas systemd, chic).
Comme je n'ai qu'une seule adresse IPv4,
le container n'a pas d'adresse IPv4 publique. Donc, j'ai
configuré un relais sur la machine ayant
l'adresse publique. Ce relais utilise nginx
et sa configuration est celle proposée par Pleroma
(installation/pleroma.nginx
dans les sources
de Pleroma), notamment :
server { listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /var/lib/dehydrated/certs/pleroma.bortzmeyer.fr/fullchain.pem; ssl_certificate_key /var/lib/dehydrated/certs/pleroma.bortzmeyer.fr/privkey.pem; server_name pleroma.bortzmeyer.fr; # Redirection vers le container qui porte Pleroma location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_pass http://LE.CONTAINER.À.MOI:4000; }
Cela a également l'avantage de permettre de gérer les certificats Let's Encrypt (ce que Pleroma ne sait pas faire seul).
Pleroma n'est apparemment distribué que sous forme de
code source. Il faut donc le compiler. Il
est écrit en Elixir et il faut donc un
compilateur Elixir (cf. mon
article à propos d'Elixir). Sur Alpine, Elixir est dans la section
community
et pas
main
. Il faut donc ajouter
l'URL de community
à /etc/apk/repositories
.
Ensuite, on télécharge les sources. Le site de référence est
. Le
téléchargement se fait via le
répertoire des versions livrées, ou bien avec git si on veut
la version de développement :
https://git.pleroma.social/pleroma/pleroma
% git clone https://git.pleroma.social/pleroma/pleroma.git
Une fois que c'est fait, il n'y a plus qu'à suivre les instructions
d'installation. (Si vous vous demandez ce qu'est ce
mix
, c'est l'outil de gestion de tâches
d'Elixir. Un peu comme
make pour C. Il
permet entre autres d'installer les
dépendances.)
% mix deps.get % mix pleroma.instance gen What domain will your instance use? (e.g pleroma.soykaf.com) [] pleroma.bortzmeyer.fr What is the name of your instance? (e.g. Pleroma/Soykaf) [] Unsafe What is your admin email address? [] stephane+pleroma@bortzmeyer.org What is the hostname of your database? [localhost] What is the name of your database? [pleroma_dev] pleroma What is the user used to connect to your database? [pleroma] What is the password used to connect to your database? [autogenerated] Writing config to config/generated_config.exs. You should rename it to config/prod.secret.exs or config/dev.secret.exs. Writing config/setup_db.psql. To get started: 1. Verify the contents of the generated files. 2. Run `sudo -u postgres psql -f 'config/setup_db.psql'`. 3. Run `mv 'config/generated_config.exs' 'config/prod.secret.exs'`.
Arrivé à ce stade, le SGBD PostgreSQL doit être installé, et tourner, pour faire la suite.
% sudo -u postgres psql -f 'config/setup_db.psql' % mv 'config/generated_config.exs' 'config/prod.secret.exs'
On peut alors lancer à la main Pleroma (le code va être compilé par mix) :
% mix phx.server
Et voilà, votre Pleroma tourne. Essayez de vous connecter sur
https://MON-INSTANCE/
pour voir. Si vous
n'avez pas fait proprement la redirection depuis le relais nginx,
vous aurez des choses bizarres, comme des boutons présents mais inactifs.
Pour activer Pleroma sur Alpine, avec OpenRC, on copie le script proposé,
installation/init.d/pleroma
en
/etc/init.d/pleroma
et on peut alors indiquer
que Pleroma doit être lancé au démarrage, avec rc-update
add pleroma
. Si on veut le démarrer tout de suite,
c'est rc-service pleroma start
.
Notez que Pleroma permet de gérer facilement deux
environnements, de production et de développement, en fonction de
la variable d'environnement
MIX_ENV
. Comme je n'ai qu'un environnement,
j'ai défini MIX_ENV=prod
dans mes fichiers de
configuration. Sinon, il faut y penser à chaque commande :
% MIX_ENV=prod mix phx.server
Bon, Pleroma est maintenant démarré. Créons un·e utilisateurice :
% mix pleroma.user new dominique dominique@example.net --password toto
Et voilà, dominique
peut désormais se
connecter via l'interface Web, et envoyer des pensées profondes et
des photos de chats à tout le fédivers.
Vous trouvez que le mot de passe mis est vraiment trop nul ? Laissons l'utilisateur le changer mais on peut aussi l'aider :
% mix pleroma.user reset_password dominique
Où ai-je trouvé ces commandes ? Sur l'ancien
Wiki, plus mis à jour mais qui contient des informations que
je ne trouve pas facilement dans la
documentation officielle (Haelwenn me signale que toutes ces
tâches mix sont documentées
ici.) On peut aussi voir toutes les commandes avec
mix help pleroma.user
. Et il y a bien sûr
l'examen du source
(lib/mix/tasks/pleroma/user.ex
)… Maintenant
qu'ielle a un bon mot de passe, dominique peut être nommé·e
administrateurice :
% mix pleroma.user set dominique --admin
Ou bien « modérateurice » (censeur) :
% mix pleroma.user set dominique --moderator
Il n'y a pas à ma connaissance de page Web pour l'administrateur
d'une instance Pleroma. On édite le fichier de configuration
(config/prod.secret.exs
, qui est du code
Elixir) et on
tape des commandes comme celles ci-dessus. Pour changer l'apparence
de son instance Pleroma, par exemple, on regarde cette
page. Pour contrôler le robots.txt
,
voir
cette documentation.
Qu'est-ce que Pleroma va afficher lors de son exécution ? Cela se règle également dans le fichier de configuration :
config :logger, level: :info
(Si vous êtes curieu·x·se, le deux-points indique un atome Elixir.) Et si on veut tous les détails (vraiment tous) :
config :logger, level: :debug
Un des intérêts d'avoir sa propre instance, est qu'on peut fouiller dans la base de données, au-delà de ce que permet l'interface, ce qui est pratique, les capacités de recherche de pouètes de Mastodon et de Pleroma étant limitées. On se connecte à la base PostgreSQL :
% sudo -u postgres psql pleroma
Et on peut alors taper les requêtes SQL de son choix (ici, émetteur et date d'arrivée du message) :
pleroma=# SELECT actor,inserted_at FROM activities ORDER BY inserted_at DESC LIMIT 10; actor | inserted_at ----------------------------------------------+--------------------- https://hostux.social/users/R1Rail | 2019-04-24 15:30:38 https://hostux.social/users/R1Rail | 2019-04-24 15:27:30 https://mastodon.gougere.fr/users/bortzmeyer | 2019-04-24 15:25:02 https://hostux.social/users/R1Rail | 2019-04-24 15:25:02 https://mastodon.social/users/jpmens | 2019-04-24 15:21:20 https://mamot.fr/users/Shaft | 2019-04-24 15:21:20 https://mastodon.host/users/federationbot | 2019-04-24 15:18:58 https://mastodon.host/users/federationbot | 2019-04-24 15:18:12 https://misskey.io/users/7rmk7gm7ew | 2019-04-24 15:18:12 https://mastodon.host/users/federationbot | 2019-04-24 15:16:55 (10 rows)
Et si on veut tout le contenu en Activity Streams du pouète (ici, je restreins aux messages que j'ai envoyé) :
pleroma=# SELECT actor,inserted_at,data FROM activities WHERE actor LIKE 'https://pleroma.bortzmeyer.fr/%' ORDER BY inserted_at DESC LIMIT 10; https://pleroma.bortzmeyer.fr/users/stephane | 2019-04-24 10:04:20 | {"cc": ["https://pleroma.bortzmeyer.fr/users/stephane/followers"], "id": "https://pleroma.bortzmeyer.fr/activities/586a3505-d8e7-4bb9-958c-18c18e098e7b", "to": ["https://www.w3.org/ns/activitystreams#Public"], "type": "Create", "actor": "https://pleroma.bortzmeyer.fr/users/stephane", "object": {"cc": ["https://pleroma.bortzmeyer.fr/users/stephane/followers"], "id": "https://pleroma.bortzmeyer.fr/objects/207538f4-759d-4126-bb0a-a41fcbe60129", "to": ["https://www.w3.org/ns/activitystreams#Public"], "tag": ["pleroma"], "type": "Note", "actor": "https://pleroma.bortzmeyer.fr/users/stephane", "emoji": {}, "content": "As an user, I can change the <a class='hashtag' data-tag='pleroma' href='https://pleroma.bortzmeyer.fr/tag/pleroma' rel='tag'>#Pleroma</a> theme at will but changing the default theme in the secret.exs file seems ignored. Why?", "context": "https://pleroma.bortzmeyer.fr/contexts/cd07dc37-4472-4e87-b157-90df23a00e8e", "summary": null, "published": "2019-04-24T10:04:20.185186Z", "attachment": [], "context_id": 174350, "announcements": ["https://mastodon.gougere.fr/users/bortzmeyer", "https://pleroma.fr/users/bortzmeyer"], "announcement_count": 2}, "context": "https://pleroma.bortzmeyer.fr/contexts/cd07dc37-4472-4e87-b157-90df23a00e8e", "published": "2019-04-24T10:04:20.177118Z", "context_id": 174350, "directMessage": false} ...
La colonne data
contient l'objet
Activity Streams, en JSON.
J'ai indiqué que j'utilisais la version de développement de
Pleroma. Il y a donc du nouveau régulièrement et, après un
git pull
, il faut penser à charger les
dépendances nouvelles :
% mix deps.get
Si le schéma de la base de données a changé, il faut également mettre à jour votre base :
% mix ecto.migrate
(Ecto est l'interface aux bases de données utilisé par Elixir.) Si vous avez un doute sur la nécessité de ces deux commandes, n'hésitez pas, lancez-les, elles sont inoffensives si le travail est déjà fait. Vous trouverez davantage d'informations sur la mise à jour de votre instance sur l'ancien Wiki (pas encore trouvé où c'était sur la documentation officielle).
Et si je veux hacker Pleroma sérieusement ? Voyez ce bon article, avec explications sur Elixir, Ecto, Mix, etc. Au passage, vous devrez apprendre Elixir donc les documentations sont là (dont une pour débutants.) Sinon, il y a le livre de Dave Thomas. Si vous trouvez des bogues dans Pleroma, signalez-les.
Enfin, pour finir, quelques articles et informations sur l'administration d'un serveur Pleroma :
#pleroma
du réseau IRC
Freenode.https://matrix.heldscal.la/#/room/#freenode_#pleroma:matrix.org
(accessible avec un navigateur Web, si vous n'avez pas de client
Matrix).#Pleroma
).lain@pleroma.soykaf.com
(mais, comme vous vous en doutez, ielle est assez occupé·e).Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)