biboumi

Biboumi est une passerelle XMPP ↔ IRC qui s'installe côté serveur XMPP et permet de rejoindre des salons IRC avec un client XMPP standard (donc sans avoir besoin d'installer un client IRC en plus d'un client XMPP déjà installé).

Au démarrage biboumi se connecte à ejabberd sur un port TCP dédié en tant que composant XMPP et ejabberd proposera alors automatiquement aux clients un service supplémentaire de salons IRC. Pour que ça fonctionne ejabberd et biboumi doivent partager un secret.

Installation

apt install biboumi

Créer le fichier /etc/biboumi/biboumi.cfg :

hostname=biboumi.parinux.org # le vhost XMPP dédié
password=xxxxxxxxxxxx # le secret partagé avec ejabberd
xmpp_server_ip=127.0.0.1 # l'IP de ejabberd
port=8888 # le port d'écoute côté ejabberd
db_name=/var/lib/biboumi/biboumi.sqlite
admin=pitchum@parinux.org
realname_customization=true
realname_from_jid=false
log_level=1
log_file=/var/log/biboumi/biboumi.log
ca_file=

Puis

mkdir /var/log/biboumi/
chown _biboumi: /var/log/biboumi

Contournement spécifique

Je soupçonne que c'est dû au fait que le noyau est trop vieux (3.16.x) même si j'ai pas trouvé d'info précise confirmant cette hypothèse. Bref, le service biboumi n'arrive pas à se lancer et journalctl affiche :

janv. 03 21:59:32 xmpp-1 systemd[1]: Starting Biboumi, XMPP to IRC gateway...
janv. 03 21:59:32 xmpp-1 systemd[7827]: biboumi.service: Failed to apply ambient capabilities (before UID change): Invalid argument
janv. 03 21:59:32 xmpp-1 systemd[7827]: biboumi.service: Failed at step CAPABILITIES spawning /usr/bin/biboumi: Invalid argument
janv. 03 21:59:32 xmpp-1 systemd[1]: biboumi.service: Main process exited, code=exited, status=218/CAPABILITIES

Voici comment j'ai contourné ce problème :

cp /lib/systemd/system/biboumi.service /etc/systemd/system/

Puis j'ai ajouté ces 2 lignes dans /etc/systemd/system/biboumi.service :

[Service]
...
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
...

Puis systemctl daemon-reload et systemctl restart biboumi.

contournement du contournement

En fait, pour une raison que j'ignore, le contournement précédent n'a pas fonctionné lors du restart de biboumi par la suite. J'ai donc mis en place un autre contournement à l'arrache :

identd_port=1113 dans biboumi.cfg et redirection iptables :113 → :1113 sur troll3.

Interfaçage avec ejabberd

Activer l'écoute côté ejabberd

Dans /etc/ejabberd/ejabberd.yml :

...
  - 
    port: 8888
    ip: "127.0.0.1" # l'interface sur laquelle ejabberd accepte les connexions de composants XMPP externes tels que biboumi mais pas seulement
    module: ejabberd_service
    access: all
    shaper: fast # je sais pas à quoi ça sert mais c'est dans la doc alors je le laisse
    hosts:
      "biboumi.parinux.org":
        password: "xxxxxxxxxxxx" # le secret partagé avec biboumi
...

sudo -u ejabberd ejabberdctl reload_config

Suite à quoi on doit voir une ligne comme celle-ci dans /var/log/ejabberd/ejabberd.log :

2019-01-03 21:38:59.735 [info] <0.720.0>@ejabberd_listener:init:143 Start accepting TCP connections at 127.0.0.1:8888 for ejabberd_service 

Et lorsque le service biboumi sera lancé on verra ceci dans les logs ejabber :

2019-01-03 21:56:45.767 [info] <0.737.0>@ejabberd_service:handle_auth_success:161 (tcp|<0.737.0>) Accepted external component handshake authentication for biboumi.parinux.org from 127.0.0.1