Ceci est une ancienne révision du document !
Installer un pont Signal - Matrix
Matrix est capable d'échanger avec d'autres protocoles grâce à des ponts.
Les étapes pour installer un pont sont plus ou moins les mêmes quel que soit le pont. On va voir comment installer un pont entre Signal et Matrix, matruix-signal, qui vous permettra de recevoir/envoyer des messages de ou vers vos contacts Signal.
Prérequis
Il vous faut un serveur Matrix, Synapse par exemple, et PostgreSQL. Je pars du principe que vous avez suivi le tuto sur comment Installer Matrix et que vous avez déjà ces deux logiciels d'installés.
Python3
Installez Python3 ainsi que pip et virtualenv
sudo aptitude install python3 virtualenv python3-pip
Installez le module shared-secret-authenticator :
sudo pip install git+https://github.com/devture/matrix-synapse-shared-secret-auth
Signald
Il va nous falloir également installer Signald, un logiciel qui permet d'interagir avec Signal (comme la version desktop de Signal).
On va récupérer le dépôt officiel en commençant par récupérer les clés de signature :
sudo wget -O /usr/share/keyrings/signald.gpg https://signald.org/signald.gpg
Créez le fichier
/etc/apt/sources.list.d/signald.list
Ajoutez les lignes suivante puis enregistrez
deb [signed-by=/usr/share/keyrings/signald.gpg] https://updates.signald.org unstable main
Mettez à jours les paquets
sudo aptitude update
Installez Signald
sudo aptitude install signald
Libolm et bibliothèques dev
Lancez la commande suivante pour installer Libolm, nécessaire au chiffrement :
sudo aptitude install libolm-dev python3-dev build-essential
Matruix-signal
Installation
Créez un répertoire et accédez-y
mkdir mautrix-signal && cd mautrix-signal
Créez l'environnement Python
virtualenv -p /usr/bin/python3 .
Activez-le
source ./bin/activate
Installez le pont
pip install --upgrade mautrix-signal[all]
L'installation est finie, on peut passer à la configuration
Configuration
Créez une copie du fichier example-config.yaml
cp example-config.yaml config.yaml
Ouvrez le fichier config.yaml. Si votre serveur Matrix tourne sur la même machine que le pont, remplacez la ligne
address: https://example.com
par
address: http://localhost:8008
Si le serveur Matrix tourne sur une autre machine, indiquez l'url du serveur Matrix.
Dans la ligne
domain: example.com
remplacez example.com par le domaine servant à accéder à votre serveur Matrix
Remplacer la ligne
database: postgres://username:password@hostname/db
par
database: postgres://signalbridge:motdepasse@localhost:5432/signalbridge
Mettez le mot de passe de votre choix, on créera la base de données plus tard.
Dans la partie “permissions”, adaptez les lignes à votre cas. Dans mon cas, je n'ai qu'un seul utilisateur qui est admin. J'ai donc que la ligne
'@fate:matrix.nomdedomaine.fr': admin
Remplacez “fate” par votre nom d'utilisateur ainsi que “nomdedomaine.fr” par l'url d'accès à votre serveur Matrix.
Dans la partie “encryption”, passez les options “allow” et “default” à true pour activer le chiffrement entre le pont et le serveur Matrix
Pour que le pont puisse accéder à Signald, il a besoin d'avoir accès au fichier socket (remplacez “pi” par l'utilisateur qui exécutera le pont)
sudo chown signald:pi /var/run/signald/
L'utilisateur qui exécute le pont a besoin d'être membre du groupe signald pour accéder au répertoire (sinon vous aurez des erreurs lors d'envoi de message avec des photos)
/var/lib/signald/
L'utilisateur qui exécute le pont chez moi est “pi”. Pour le rajouter au groupe signald, lancez la commande
sudo addgroup pi signald
Passons à la base de données
Création de la base de données
Connectez-vous avec l'utilisateur postgres
sudo -i -u postgres
Lancez PostgreSQL
psql
Créez l'utilisateur
CREATE ROLE signalbridge LOGIN PASSWORD 'mot_de_passe';
Mettez le même mot de passe que celui que vous avez renseigné dans le fichier config.yaml
Créez la base de données
CREATE DATABASE signalbridge OWNER signalbridge;
Quittez PostgreSQL
exit
Déconnectez-vous de l'utilisateur postgres
exit
Registration.yaml
Les ponts ont besoin d'un fichier registration.yaml pour avoir certain droits sur votre serveur. Pour le créer, lancez la commande suivante
python -m mautrix_signal -g
Ensuite ouvrez le fichier homeserver.yaml de votre serveur et indiquez l'emplacement du fichier registration après la ligne “app_service_config_files:”
# A list of application service config file to use app_service_config_files: - "/home/pi/mautrix-signal/registration.yaml"
Relancez votre serveur Matrix
sudo systemctl restart matrix-synapse.service
Lancement du pont via Systemd
Créez le fichier
/etc/systemd/system/mautrix-signal.service
Copiez les lignes suivantes dedans
[Unit] Description=mautrix-signal bridge After=matrix-synapse.service postgresql.service [Service] # N.B. If you didn't create a user with the correct home directory, set this # to the directory where config.yaml is (e.g. /opt/mautrix-signal). WorkingDirectory=/home/pi/mautrix-signal/ ExecStart=/home/pi/mautrix-signal/bin/python -m mautrix_signal User=pi [Install] WantedBy=multi-user.target
Modifier les chemins et le nom de l'utilisateur si besoin.
Activez le service au démarrage
sudo systemctl enable mautrix-signal.service
Démarrez le service
sudo systemctl start mautrix-signal.service
Dans votre client Matrix (Element), ouvrez une discussion privée avec le bot @signalbot:votre.serveur
Dans la discussion, tapez
link signal-bridge
Ca va vous afficher un QR code que vous devrez scanner avec votre application Signal pour lier les deux appareils.
Activer le double puppeting
Le “double puppeting” permet que lorsque vous envoyez un message depuis l'application Signal, le message sera également présent dans Matrix et les messages marqués comme lu dans Matrix seront également marqués comme lus sur les autres appareils.
Installez Shared Secret Authenticator
sudo -u matrix-synapse pip install git+https://github.com/devture/matrix-synapse-shared-secret-auth
Générez un secret
pwgen -s 128 1
Ouvrez le fichier homeserver.yaml de Synapse et ajoutez les lignes suivantes
modules: - module: shared_secret_authenticator.SharedSecretAuthProvider config: shared_secret: "collez ici le secret généré précédemment" # By default, only login requests of type `com.devture.shared_secret_auth` are supported. # Below, we explicitly enable support for the old `m.login.password` login type, # which was used in v1 of matrix-synapse-shared-secret-auth and still widely supported by external software. # If you don't need such legacy support, consider setting this to `false` or omitting it entirely. m_login_password_support_enabled: true
Ouvrez le fichier config.yaml et remplacez les lignes
login_shared_secret_map: example.com: foo
par
login_shared_secret_map: adresse_du_serveur_matrix: secret_généré_précédemment
Redémarrez Synapse et le pont Signal
sudo systemctl restart matrix-synapse.service
sudo systemctl restart mautrix-signal.service
Mise à jour
On va créer un script pour mettre à jour le pont. Créez le fichier update_signal_bridge.sh dans le même répertoire que le dossier mautrix-signal et ajoutez-y les lignes suivantes (remplacez votreadressemail par une adresse mail valide et modifiez le chemin vers le dossier mautrix-signal):
#!/bin/bash errorFile="../mautrix-signalErrorUpdate" versionFile="../mautrix-signalVersion" adminMail="votreadressemail" cd /chemin/vers/mautrix-signal source ./bin/activate # Si le fichier de version existe, on récupére la version if [ -f $versionFile ]; then currentVersion=$(cat $versionFile) #S'il n'existe pas, on force la version à 0 else currentVersion="0" fi # On récupère le numéro de la version présent sur le dépôt repositoryVersion=$(yolk -V mautrix-signal | awk '{print $2}') # Si la version présente sur le dépôt est plus récente, on lance la mise à jour if [ $currentVersion != $repositoryVersion ]; then # On supprime l'ancien fichier d'erreur s'il existe if [ -f $errorFile ]; then rm -f $errorFile fi # On lance la mise à jour du paquet pip install --upgrade mautrix-signal[all] > /dev/null 2> $errorFile # Si le fichier d'erreur n'est pas vide, on envoie un mail d'erreur if [ -s $errorFile ]; then echo "Une erreur s'est produite lors de la mise à jour du pont Signal-Matrix (mautrix-signal). Le message d'erreur se trouve en pièce-jointe." | mutt -x -s "Erreur lors de la mise à jour du pont Signal-Matrix" -a $errorFile -- $adminMail # Si le fichier d'erreur est vide, on envoie un mail de mise à jour et on met à jour le fichier de version else echo "Le pont mautrix-matrix (mautrix-signal) a été mis à jour de la version $currentVersion vers la version $repositoryVersion" | mutt -x -s "Mise à jour du pont mautrix-Matrix" -- $adminMail echo "$repositoryVersion" > $versionFile fi fi
Le script est commenté afin qu'il soit facile de comprendre chaque bloc. Pour que ce script fonctionne pleinement il faut que votre serveur soit capable d'envoyer des e-mails, sinon les mises à jours se lanceront mais vous ne serez pas averti lors des mises à jour ou des erreurs de mise à jour. Il vous faut également York pour récupérer les versions présentes sur les dépôts. Vous pouvez l'installer avec la commande suivante :
pip install yolk3k
On va créer une tâche cron afin que ce script se lance tous les jours. Ouvrez le fichier cron avec la commande
crontab -e
Ajoutez la ligne suivante (remplacez l'emplacement du répertoire) : <code bash>0 0 * * * /home/pi/matrix_bridges/update_signal_bridge.sh
Appuyez sur CTRL + O puis CTRL + X pour appliquer les modifications.
Tous les jours à minuit, le pont se mettra à jour si une nouvelle version est disponible.