L'infrastructure du CHATONS sans-nuage.fr de Alsace Réseau Neutre

sans-nuage.fr est un serveur YunoHost installé sur une machine virtuelle “VM” sur le cluster de serveur d'ARN. Notre infrastructure Matrix et les bridges qui vont avec repose donc sur des paquets d'application YunoHost :

  1. Application Synapse : https://github.com/YunoHost-Apps/synapse_ynh (Maintenu par la communauté)
  2. Client Element : https://github.com/YunoHost-Apps/element_ynh (Maintenu par la communauté)
  3. Bridge Signal : https://github.com/YunoHost-Apps/mautrix_signal_ynh (jusque 03/2022 maintenu par gaut d'ARN (gaut)
  4. Bridge Whatsapp : https://github.com/YunoHost-Apps/mautrix_whatsapp_ynh (jusque 03/2022 maintenu par gaut d'ARN (gaut)
  5. Documentation de déployement et maintenance : https://wiki.arn-fai.net/benevoles:procedures:sans-nuage
  6. Documentation utilisateur (cette doc) : https://wiki.arn-fai.net/documentation:sans-nuage:whatsapp
  7. Installation Application YunoHost mautrix_whatsapp (https://github.com/YunoHost-Apps/mautrix_whatsapp_ynh)

Maintenance du Bridge WhatsApp

  1. Le bridge est basé sur Whatsapp Web, une page web permettant de discuter via navigateur sur Whatsapp.
  2. Whatsapp ne permet une connexion principale sur le web, il est nécessaire de se connecter sur un téléphone régulièrement toutes les 2 semaines afin de maintenir la session web actif.
    1. L'application peut être maintenue sur une machine virtuelle Android.
  3. Si le bridge est bien à jour, bien login à l'App whatsapp de la VM et que celle ci est bien à jour, alors
    1. Regarder les logs /var/log/mautrix_whatsapp/mautrix_whatsapp.log et /var/log/matrix-synapse/homeserver.log
    2. Envoyer les erreurs sur le salon de support du bridge whatsapp : https://matrix.to/#/#whatsapp:maunium.net

Perte de connexion

  1. Se connecter avec le compte robot “@arnmessager:sans-nuage.fr”sur le client Element. Vérifier l'état du bridge avec les commandes dans la discussion “WhatsApp Bridge Bot”
  2. OU Aller sur n'importe quel salon bridgé WhatsApp avec un compte qui est admin d'ARN-Messager (https://code.ffdn.org/arn/arn-messager/-/blob/testing/arn-messager_domain.tld.yml#L23)
    1. Taper la commande “!wa ping” pour vérifier l'état de la connexion
    2. Si la connexion semble problématique, Entrer la commande “!wa reconnect”
  3. Vérifier s'il existe une mise à jour pour le bridge, voir la section “ Mettre à jour les paquets ”
  4. Si le bridge semble ne plus etre login à l'App WhatsApp de la VM LineageOS, voir le point suivant

Connexion à la VM LineageOS et l'app WhatsApp

  1. Installer Tight VNC (vncviewer) et Java sur votre poste si ce n'est pas déja fait
  2. Se connecter à l'hôte qui fait tourner la VM: hwhost-1 ou -2
  3. si lsvps | grep lineageos n'indique pas running, Démarrer la VM : gnt-instance start lineageos
  4. Une fois démarrée, ouvrez un terminal sur votre poste pour vous y connecter.
  5. Créer un pont ssh entre un port de la VM Android WhatsApp de l'infrastructure et votre PC : ssh -L 11020:127.0.0.1:11020 -N -f -p 2222 nomutilisateur@hwhost-1.arn-fai.net
  6. Lancer VNC : vncviewer localhost::11020
  7. Sur l'écran de déverrouillage, appuyez sur la touche espace afin d'ouvrir l'interface de saisie de mot de passe
    1. Utiliser le mot de passe du trousseau Sans-nuage et le clavier virtuel proposé par le système
  8. Pour lancer l'application Whatsapp
    1. L'application Whatsapp est protégée contre l'ouverture, il faut cliquer sur une notification ou aller dans Aurora Store pour l'ouvrir
    2. Rentrer le schéma présent dans le trousseau Sans-nuage pour déverrouiller l'app
    3. vérifier dans l'app WA que le Bridge apparaît dans les appareils connectés. Si non, les ennuis commencent :D

⇒ Voir à partir du point 7. de la section “Déployement VM LineageOS/WhatsApp sur l'infra”

Installation du Bridge WhatsApp sur sans-nuage

  1. Installation Application YunoHost mautrix_whatsapp (https://github.com/YunoHost-Apps/mautrix_whatsapp_ynh)
    1. Administrateur @arnmessager:sans-nuage.fr
    2. User domain ou sans-nuage.fr (devrait être égal)
  2. Connexion à chat.sans-nuage.fr avec arnmessager
  3. Invitation du robot WA @whatsappbot:sans-nuage.fr

Configuration/upgrade du bridge

  1. Pour changer l'avatar du bridge il faut d'abord upload un avatar dans un salon, puis récupérer son ID (clic droit, copier l'adresse de l'image), puis le rajouter dans la config du bridge.
  1. Dans /opt/yunohost/mautrix_whatsapp/config.yaml
    1. Nota - Laissé par défaut allow_user_invite: false
    2. Permissions
      1. Correction de l'administrateur “@arnmessager:sans-nuage.fr”: admin
      2. Ajout de `matrix.fdn.fr: user`
    3. Définition de @arnmessager:sans-nuage.fr comme invité relai
    4. Changement de l'avatar de whatsappbot dans config.yaml (mettre le lien récupéré

Tant que https://github.com/YunoHost-Apps/mautrix_whatsapp_ynh/issues/33 n'est pas résolu, après une màj du bridge, il faut mettre à jour le fichier “ opt/yunohost/mautrix_whatsapp/config.yaml ” avec les valeurs de l'instance de sans-nuage.fr listées ci-dessus

  1. Les logs de la mise à jour Yunohost montrent les anciennes valeurs du fichier à reprendre

A priori pas besoin car tous les utilisateurs sans-nuage sont autorisés à le faire :

  1. Ajout de droits administrateur synapse pour pouvoir créer des communautés
    1. sudo yunohost app action run synapse set_admin_user -a username=whatsappbot

Configuration du robot-relai mautrix-whatsapp

cf. https://github.com/tulir/mautrix-whatsapp/wiki/Relaybot

Prérequis sur l'interface admin de sans-nuage https://sans-nuage.fr/yunohost/admin/ :

  • synapse installé sur le domaine matrix.sans-nuage.fr
  • element installé sur chat.sans-nuage.fr
  • mautrix_whatsapp installé pour l'instance synapse matrix.sans-nuage.fr
  • ARN-Messager installé
  • Utilisateur arnmessager créé
  1. Se connecter sur chat.sans-nuage.fr (Element) avec le compte d'administration des bots mautrix d'ARN mautrix_admin
  1. Restart mautrix_whatsapp puis Inviter @whatsappbot:sans-nuage.fr
  2. Mautrix répond ``This is the relaybot management room. Send `!wa help` to get a list of commands.``
  3. écrire ``!wa login`` dans ce salon
  4. whatsappbot envoie un QR-code sous forme d'une image téléchargeable au lien du type https://matrix.sans-nuage.fr/_matrix/media/r0/download/sans-nuage.fr/PCwbjLdvxxxfbZlUAvSADne
  5. Flash le QR-code avec la VM whatsapp puis transfère la VM sur l'infra

Autorisation de nouveaux utilisateurs à bridger des salons, càd à “utiliser whatsappbot”. Ajouter une ligne avec niveau d'autorisation 10 dans /opt/yunohost/mautrix_whatsapp/config .yaml

permissions: '*': 5 '@arn:sans-nuage.fr': 100 matrix.fdn.fr: 10 sans-nuage.fr: 10

L'autorisation 100 permet d'administrer le bridge, donc lui envoyer des commandes !wa login, etc.

  You may also want to set allow_user_invite to true so that you can invite more users to portals created by the bridge. The option is not applied retroactively, but you can use !wa set-pl to make yourself admin in existing rooms.

Mettre à jour les paquets YunoHost des bridges

  1. Dans le cas de modifications mineures, sur Github
    1. Mettre à jour le paquet Upstream.
      1. Modifier les sources des fichiers dans “conf/xxx.src” pour que le paquet aille chercher les nouvelles sources automatiquement.
        1. Changer l'URL de la source
        2. Le Checksum SHA 256
        3. La valeur SUM correspondante
      2. rmq: le paquet yunohost télécharge les sources du paquet upstream (synapse, mautrix_whatsapp,..).
    2. Mettre à jour le fichier “conf/config.yaml ”
      1. En comparant les deux versions, via le lien suivant : https://github.com/mautrix/whatsapp/compare/v0.2.4...v0.3.0 , en prenant soin de vérifier les deux versions concernées.
      2. Le but est de conserver les paramètres du paquet Yunohost (ENCRYPTION,…) en mettant à jour les lignes concernées par les nouvelles mises à jour.
    3. Modifier le numéro de version dans le “manifest.json” du paquet concerné.

Rmq: les paquets yunohost sont toujours centrés sur 5 scripts, backup, … etc et donc entre version de yunohost ça peut changer genre upgrade de bullseye.

  La partie settings:

il y a la liste des messages autorisés que le bot doit prendre en compte. Si tu en mets un en commentaire ça le supprime de la liste des messages autorisés. Permet entre autre de ne pas relayer les messages du bot whatsapp vers signal et vice-versa

Déploiement VM LineageOS/WhatsApp sur l'infra

!!! Attention à toujours bien vérifier que suffisamment de place est dispo lors de la création et de déplacement des disques virtuels

Pour quelques indications plus visuelles, voir https://sans-nuage.fr/file/f/131980 (ce serait cool de rajouter des screenshots dans ce tuto)

  1. créer une VM d'infra à l'aide du script create-vm-arn 5GoSSD 1Go RAM
  2. Monter l'ISO de LineageOS (anciennement CyanogenMod) 14.1 https://www.android-x86.org/releases/releasenote-cm-x86-14-1-r4.html par exemple cm-x86_64-14.1-r4-k419.iso
  3. Installer LineageOS sans fioritures (ext4, puis GRUB, et /system en mode read-write pas nécessaire sauf pour bidouiller en
  4. avancé ⇒ auto-install
  5. francais
  6. configurer en tant que nouvel appareil
  7. configurer le réseau VirtWifi
    1. IP statique
    2. 89.234.141.76
    3. Passerelle : 169.254.42.1
    4. longueur préfixe : 32
    5. DNS 1 : 89.234.141.66
    6. DNS 2: 80.67.169.12
  1. Trouver l'ID du disque virtuel associé (.disk0_data)
  2. Compresser le disque virtuel au format qcow2: qemu-img convert -p -O qcow2 -c /dev/vg0/801c39ab-c6fc-47d3-9e55-3225f8f8f754.disk0_data lineage_ganeti_5GB_compressed.qcow2
  3. Déplacer le disque virtuel vers un laptop avec webcam. Depuis le laptop taper : scp user@serveur.fr:~/lineage_ganeti_5GB_compressed.qcow2 ~/
  4. Créer la VM sur l'hyperviseur du laptop, (testé avec VirtualBox) à partir du disque virtuel précédent
  5. Pour cela, reconvertissez la VM au format .vdi, puis utilisez le fichier comme support de stockage de la machine virtuelle
  6. Configurer LineageOS, surtout le réseau VirtWifi en DHCP
  7. Webcam : Clic droit sur les périphériques et activez la webcam
  8. flasher le QR code fourni par le bot mautrix_whatsapp
  9. Vérifier que tout fonctionne au niveau du bridge.
  10. Eteindre la VM sur l'hyperviseur du laptop
  11. Compresser le disque virtuel au format qcow2 si besoin
  12. vérifier que suffisamment de place est dispo sur l'host où vous voulez upload le disque
  13. Replacer le disque de la VM configurée sur l'host primaire de la VM lineageOS sur l'infra. Depuis le laptop taper : scp ~/lineage_ganeti_5GB_compressed.qcow2 user@serveur.fr:~/lineage_ganeti_5GB_compressed_bridge_loggedin.qcow2
  14. Si vous avez copié sur le mauvais host, faites gnt-cluster copyfile lineage_ganeti_10GB_compressed_20210109_loggedin.qcow2
  15. Décompresser le disque virtuel vers le LV originellement créé par ganeti: qemu-img convert -p -O raw lineage_ganeti_5GB_compressed_bridge_loggedin.qcow2 /dev/vg0/801c39ab-c6fc-47d3-9e55-3225f8f8f754.disk0_data
  16. Repasser sur master le cas échéant puis démarrer la VM
  17. Rentrer le mot de passe lineage au démarrage de la VM.