Matrix

Matrix est un protocole de communication libre et décentralisé. Cette page se propose de présenter son utilisation au sein de l'IIE. Quelques astuces sont disponibles ici.

Il existe plusieurs clients :

  1. un client web
  2. un client android
  3. un client iOS
  4. un client logiciel (Windows 7+, MacOS, Debian-like)
  5. mais aussi un script pour utiliser Matrix dans weechat
  6. ainsi que d'autres clients

Connexion

Le client web est déjà configuré pour fonctionner avec le serveur IIEns, il vous suffit de vous connecter avec vos identifiants Arise. Pour les client mobiles vous devez par contre indiquer le serveur Arise.

WeeChat

WeeChat est un client IRC en console comme irssi. Il est possible de l'utiliser en tant que client Matrix, parce que vous aimez la CLI, que c'est plus discret qu'un client web, que le client web consomme trop de ram, … Il faut pour cela utiliser ce script.

Attention, ce script modifie les commandes join, part, entre autres. Une fois le script chargé, vous ne pouvez donc plus aller sur IRC.

Le script a besoin de lua-cjson qui n'est pas installé sur perso, mais on peut le faire très facilement avec LuaRocks.

wget https://luarocks.org/releases/luarocks-2.4.1.tar.gz
tar zxpf luarocks-2.4.1.tar.gz
cd luarocks-2.4.1
./configure --prefix=$HOME/.local
make build
make install
echo 'export PATH=$PATH":$HOME/.local/bin' >> $HOME/.bashrc
luarocks path >> $HOME/.bashrc
source ~/.bashrc

On peut maintenant installer le script :

luarocks install lua-cjson
git clone https://github.com/torhve/weechat-matrix-protocol-script
ln -s path/to/weechat-matrix-protocol-script/matrix.lua $HOME/.weechat/autoload/matrix.lua

Pour la configuration, dans weechat :

/set plugins.var.lua.matrix.user username
/set plugins.var.lua.matrix.password secret

Room

Sur Matrix, un salon de discussion s'appelle une room. Les rooms peuvent être partagées entre différents serveurs si des utilisateurs de plusieurs serveurs la rejoignent.

Une room dispose d'un identifiant interne, ainsi que de zéro ou plusieurs alias. Une room ne peut être rejointe qu'à partir d'un de ses alias. Les alias sont de la forme #nomdelaroom:nomduserveur. Par exemple, #arise:iiens.net est un alias valide (et existant).

Pour rejoindre une room, cliquez sur le répertoire des salons sur le client web (en bas à gauche), ou sur le bouton + sur mobile, et entrez son nom complet.

Rejoindre un channel IRC

Un des avantages de Matrix est l'existence de bridges, notamment vers IRC. Cela permet de continuer à communiquer avec les gens présents sur IRC depuis Matrix.

Sur le serveur IIEns.net, toutes les rooms de la forme ##channel:iiens.net sont bridgées avec le channel #channel correspondant. Par exemple, si vous voulez rejoindre le channel IRC #ensiie, il vous suffit de rejoindre la room ##ensiie:iiens.net.

Si vous voulez créer un nouveau channel IRC, procédez de la même manière en rejoignant le channel comme s'il existait déjà.

Nick sur IRC

Par défaut, vous aurez sur IRC le même nom que sur Matrix. Par exemple, si je m'appelle “Moise” sur Matrix, je m'appellerais aussi “Moise” sur IRC. En cas de collision, un autre nick sera utilisé (ici “Moise1”), comme le fait Irssi.

Utiliser NickServ et ChanServ depuis Matrix

C'est facile, il suffit de leur parler normalement :

Vous pouvez enregistrer votre mot de passe NickServer, pour être automatiquement authentifié en cas de reconnexion. Pour cela parlez au bot _irc_bot et utilisez la commande suivante:

!storepass password

Attention, votre mot de passe est stocké en clair (ou presque) sur le serveur faisant tourner le bridge. Utilisez un mot de passe unique pour NickServ.

Présentation Technique

Un protocole fédéré

Matrix est un protocole décentralisé et, plus exactement, fédéré. Il faut imaginer ça un peu comme le mail : plusieurs utilisateurs utilisent le même serveur mail, mais des utilisateurs utilisant des serveurs mails différents peuvent communiquer entre eux. Il en est de même pour Matrix : les utilisateurs ont un compte sur un serveur particulier (le notre est matrix.iiens.net), mais peuvent communiquer avec des utilisateurs d'autres serveurs.

Mais plus que simplement envoyer des messages textes (comme le mail), Matrix gère des rooms (c'est le nom de l'équivalent d'un channel pour IRC). Une room n'appartient pas à un serveur Matrix mais à l'ensemble des serveurs qui y participent. Si Alice sur son serveur alice.org crée une room et y invite Bob qui est sur son serveur bob.org, la room sera répliquée sur les deux serveurs qui se connecteront ensemble pour maintenir le même état de la room. Si maintenant Charlie sur son serveur charlie.org rejoint la même room, et que Alice la quitte, la room sera partagée entre les serveurs de Bob et Charlie mais plus celui d'Alice.

Alias

Comment rejoindre une room si elle appartient à plusieurs serveurs ? Une room dispose pour cela d’alias qui pointent vers son identifiant interne. Un alias est un identifiant de la forme « #nomdelaroom:serveur », par exemple, #arise:iiens.net est un alias de room valide (et qui existe).

Quand vous tentez de rejoindre une room, votre serveur matrix (appelé homeserver) tente de communiquer avec le serveur indiqué dans l'alias pour récupérer l'état de la room, et vous la fait rejoindre. Cette room fait désormais partie de votre homeserver et vous pouvez créer un nouvel alias sur votre homeserver pointant vers cette même room.

Implémentation

Le projet Matrix est porté par la fondation Matrix.org mais la communauté est la bienvenue et vous pouvez contribuer à un de leur nombreux dépôts qui sont sur Github.

Serveur

L'implémentation de référence du serveur Matrix est pour l'instant Synapse, un serveur écrit en Python, et c'est celle que nous faisons tourner. Ça fonctionne pas mal mais est un peu gourmand en ressources et n'est pas prévu pour scaler (mono thread, ne supporte pas des accès concurrents à la db).

Dendrite est un projet de serveur Matrix écrit en Go qui devrait être beaucoup plus performant et est amené à devenir la nouvelle implémentation de référence (ETA 6 mois). Il devrait permettre de scaler horizontalement beaucoup plus facilement.

Bridges

Le bridge IRC est développé en Node.js (car le SDK officiel est en JavaScript) par les gars de Matrix (mais aussi la communauté qui contribue beaucoup). C'est un des bridges les plus poussés mais il en existe d'autres, vers Slack, Telegram, Discord, XMPP, Twitter, etc.

Le principe d'un bridge est assez simple : il reçoit tous les messages à destination de certaines rooms (pour IRC chez nous, toutes les rooms de la forme ##.*:iiens.net), et se débrouille ensuite pour les transmettre au bon endroit. À l'inverse il peut aussi parler sur Matrix pour les utilisateurs du réseau distant.

Il existe un bridge Discord ↔ Matrix proposé par Moïse et s'installant facilement suivant la procédure :

  1. Inviter @_discord_bot:iiens.net dans le chan (seul étape qui doit être faite depuis matrix)
  2. Taper
    !discord help

    et suivre les instructions

Installer votre propre homeserver

Vous pouvez tout à faire installer et utiliser votre propre homeserver, et vous êtes encouragé à le faire. L'installation est relativement simple (bien qu'il faille un peu de ressources, sur un Raspberry Pi c'est limite) et vous pourrez toujours rejoindre les channels IRC à travers le bridge que nous hébergeons.

Il vous suffit de suivre la documentation officielle.

Bugs connus

  • erreur de connection “M.UNKNOWN”: c'est parce que vous n'avez plus de mail sur le trombi, allez voir #arise et demandez à ce qu'on vous en remette un

Client pc alternatif : fractal

Fractal est un client pour PC maintenu par la fondation gnome qui propose une interface utilisateur plus lisible.

Vous pouvez l'installer via flatpak avec les commandes suivantes :

flatpak install flathub org.gnome.Fractal

ou

flatpak install https://flathub.org/repo/appstream/org.gnome.Fractal.flatpakref