Installation du serveur XMPP Metronome

Cet article est le premier d'une série de trois :

  1. Installation du serveur XMPP Metronome
  2. Services XMPP supplémentaires pour Metronome
  3. Configuration du service BOSH de Metronome

Dernière mise à jour de l'article : 31/10/2015.


XMPP (Extensible Messaging and Presence Protocol) est un ensemble de protocoles de communication standards et ouverts originellement dédié à la messagerie instantanée (projet Jabber). Il s'est par la suite grandement diversifié afin de proposer un nombre conséquent de fonctionnalités, étendant son champ d'actions bien au-delà du simple clavardage (VoIP, visioconférence, échange de fichiers...). Désormais très complet, XMPP peut même servir de base au déploiement de véritables réseaux sociaux.

Les géants du web ne s'y sont d'ailleurs pas trompés. Nombreux sont les services de discussions instantanées utilisant XMPP. Et lorsqu'il ne s'agit pas d'une véritable implémentation, une passerelle est bien souvent proposée. Ainsi, il se peut très probablement que vous utilisiez déjà XMPP, sans même le savoir !

Logo de XMPP
Logo de XMPP

Les serveurs XMPP sont nombreux. Cet article décrit l'installation de Metronome sur une distribution Debian GNU/Linux. Metronome a été choisi pour sa compatibilité avec les programmes Jappix et Movim. Il est également inclut dans la liste des logiciels conseillés par le site web Prism Break (à la rubrique des serveurs XMPP) pour tenter d'échapper aux programmes de surveillance globale des services secrets internationaux.

Metronome est un logiciel libre. Il s'agit d'un fork de Prosody que l'auteur explique par une divergence de points de vues couplée à des problèmes de communication avec l'équipe de développement initiale.

Informations techniques

Nom du programme : Metronome
Version utilisée : 3.7.7
Licence : MIT/ISC
Développeur principal : Marco Cirillo
Localisation : Italie
Site web : www.lightwitch.org/metronome

Distribution utilisée : Debian GNU/Linux 7.9 « Wheezy »

XMPP (article Wikipédia) : https://fr.wikipedia.org/wiki/XMPP

Préalable à l'installation

En ce qui me concerne, l'installation va s'opérer sur un conteneur OpenVZ présent sur le réseau local et protégé par un pare-feu. Afin de pouvoir communiquer avec des utilisateurs externes au réseau local il est nécessaire de disposer d'un nom de domaine, de pouvoir configurer le serveur DNS correspondant, ainsi que le pare-feu. Disposer d'une adresse IP fixe est également requis, à moins de tenir à jour son adresse dynamique.

Configuration du pare-feu

Il est nécessaire d'ouvrir et rediriger les ports TCP 5222 et 5269 depuis le routeur vers la machine hébergeant le service XMPP. Le port 5222 est utile aux communications client/serveur tandis que le 5269 l'est aux communications serveur/serveur.

Configuration du serveur DNS

Il faut tout d'abord créer un enregistrement pointant vers l'adresse IP publique de la machine, auquel on adjoindra deux enregistrements SRV spéciaux afin de permettre la découverte du service XMPP par l'ensemble du réseau. Chez moi, ça ressemble à ceci :

xmpp	86400	A	ADRESSE_IP
_xmpp-client._tcp	86400	SRV	5 0 5222 xmpp
_xmpp-server._tcp	86400	SRV	5 0 5269 xmpp

Installation du serveur XMPP

Une fois le pare-feu et le serveur DNS configurés, reste à installer le serveur XMPP. Pour ce faire, il faut commencer par se connecter à la machine sur laquelle installer le service. Les étapes suivantes sont énoncées ci-dessous.

Se connecter en super-utilisateur :

su -

Ajouter le dépôt logiciel de Prosody :

echo "deb http://packages.prosody.im/debian wheezy main" >> /etc/apt/sources.list.d/prosody.list

Importer la clef du dépôt de Prosody :

wget http://prosody.im/files/prosody-debian-packages.key -O- | apt-key add -

Mettre à jour la liste des paquets :

aptitude update

Installer les dépendances et logiciels complémentaires :

aptitude install mercurial build-essential lua5.1 liblua5.1-dev libidn11-dev libssl-dev lua-zlib lua-expat lua-event lua-socket-prosody lua-sec-prosody liblua5.1-filesystem0

Cloner le dépôt source de Metronome dans /opt :

cd /opt
hg clone --insecure https://code.lightwitch.org/metronome/

Se déplacer dans le répertoire source puis compiler et installer le programme :

cd metronome
./configure --ostype=debian
make
make install

Créer un script init.d de gestion du service :

vim /etc/init.d/metronome

Y coller ceci :

#! /bin/sh
### BEGIN INIT INFO
# Provides:          metronome
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: A XMPP server
# Description:       Metronome is a XMPP daemon, a server written in Lua.
### END INIT INFO

NAME=metronome
DAEMON=/usr/local/bin/metronomectl
PIDDIR=/var/run/$NAME
PIDFILE=$PIDDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0


do_start()
{
	mkdir -p $PIDDIR
	chown metronome:metronome $PIDDIR
	$DAEMON start
}


case "$1" in
  start)
	do_start
	;;
  stop)
	$DAEMON stop
	;;
  reload)
	$DAEMON reload
	;;
  status)
	$DAEMON status && exit 0
	;;
  restart|force-reload)
	$DAEMON restart
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload}" >&2
	exit 3
	;;
esac

:

Rendre le script exécutable et l'intégrer à la séquence de démarrage du système d'exploitation :

chmod +x /etc/init.d/metronome
update-rc.d metronome defaults

Créer un utilisateur système pour Metronome :

adduser --system --group --no-create-home metronome

Si vous disposez d'un certificat X.509 accompagné de sa clef privée, vous pouvez les déplacer dans le répertoire adéquat afin de profiter d'une connexion TLS sécurisée (si ce n'est pas le cas, deux fichiers auto-signés sont déjà présents par défaut) :

mv /home/USER/xmpp.EXAMPLE.COM.* /usr/local/etc/metronome/certs/

Les attribuer à l'utilisateur metronome :

chown metronome:metronome /usr/local/etc/metronome/certs/xmpp.EXAMPLE.COM.*

Créer le répertoire des fichiers journaux :

mkdir -p /var/log/metronome

L'attribuer à l'utilisateur metronome :

chown metronome:metronome /var/log/metronome

Le répertoire /usr/local/var/lib/metronome contiendra l'ensemble des données des comptes XMPP. Il faut l'attribuer à l'utilisateur metronome :

chown metronome:metronome /usr/local/var/lib/metronome

Sauvegarder la configuration par défaut de Metronome :

mv /usr/local/etc/metronome/metronome.cfg.lua /usr/local/etc/metronome/metronome.cfg.lua.save

Configurer Metronome :

vim /usr/local/etc/metronome/metronome.cfg.lua

Y coller ceci :

pidfile = "/var/run/metronome/metronome.pid";

modules_enabled = {
    "saslauth";
    "tls";
    "dialback";
    "disco";
    "version";
    "uptime";
    "time";
    "ping";
    "posix";
};

ssl = {
    key = "/usr/local/etc/metronome/certs/xmpp.EXAMPLE.COM.key";
    certificate = "/usr/local/etc/metronome/certs/xmpp.EXAMPLE.COM.cert";
};

c2s_require_encryption = true;
c2s_require_encryption = true;

authentication = "internal_hashed";

log = {
	info = "/var/log/metronome/metronome.log";
	error = "/var/log/metronome/metronome.err";
};

VirtualHost "EXAMPLE.COM"
	enabled = true;

	modules_enabled = {
        "roster";
        "vcard";
        "private";
        "blocklist";
        "pep";
        "register";
    };

	allow_registration = false;

Il s'agit d'une configuration extrêmement minimaliste, mais qui devrait fonctionner. Pour plus d'options, se référer au fichier par défaut ainsi qu'aux sites web de Prosody, Metronome et Jappix.

Configuration générale : www.prosody.im/doc/configure
Liste des modules : www.prosody.im/doc/modules
Options spécifiques à Metronome : www.lightwitch.org/metronome/documentation/configuration
Fichier de configuration de Jappix : https://github.com/jappix/jappix-tools/blob/master/metronome/conf...

Enfin, démarrer Metronome :

service metronome start

Le serveur XMPP devrait désormais être totalement fonctionnel. Il existe des lignes de commandes pour créer des comptes utilisateurs depuis le terminal, mais on peut tout aussi bien créer et utiliser ses comptes XMPP depuis n'importe quel client gérant correctement ce protocole (Gajim, par exemple) à condition de modifier l'option allow_registration.

Maintenant que le serveur XMPP est opérationnel, voyons comment le doter de fonctionnalités supplémentaires !

Article sous licence Creative Commons BY-SA 3.0 France.

Publié le

Jeudi 19 septembre 2013 à 00h22

Commentaires

Bonjour,

Merci pour ce tutoriel Smile

Ayant récemment décidé de passer progressivement en auto-hébergement pour remplacer tous les différents services utilisés jusque là, je viens de mettre en place un serveur XMPP Métronome sur mon petit RPi. Mais je n'ai pour l'instant pas trouvé de client capable d'assurer toutes les fonctions souhaitées :

  • Messages textes (comme n'importe quelle messagerie instantanée, Skype, WhatsApp, Viber…) ;
  • Envoi de photos (à la Viber, WhatsApp…) ;
  • Envoi de sons (petits messages vocaux, comme Heytell, WhatsApp) ;
  • Envoi de vidéos ;
  • Conversation téléphonique (à la Skype, Viber…) ;
  • Conversation vidéo (comme Skype…) ;
  • Partage de fichiers (comme Skype…).

En fait, à part la messagerie texte je n'ai pas réussi à faire marcher les autres services, peut-être faut-il activer des modules sur mon serveur XMPP ? Ou alors je n'utilise pas les bon clients ?

Sous Android j'ai essayé :

  • Xabber (je n'ai réussi à faire que de la messagerie texte) ;
  • Conversations (pas réussi à me connecter car pas de champ pour entrer l’adresse personnalisée du serveur) ;
  • Talkonaut (je n'ai réussi à faire que de la messagerie texte) ;
  • Beem (je n’ai réussi à faire que de la messagerie texte).

Sous Windows j'ai essayé :

  • Gajim (je n'ai réussi à faire que de la messagerie texte et la conversation téléphonique) ;
  • Jitsi (Je n'ai réussi à faire que de la messagerie texte et la conversation téléphonique).

Si quelqu'un à la liste des clients existants avec les fonctionnalités actives, je suis preneur Smile

Salut Yann et merci pour ton commentaire.

Gajim est le client supportant le mieux toutes les fonctionnalités de XMPP, dont une bonne partie de celles que tu cites. Voir son site web et la liste des fonctionnalités implémentées (https://gajim.org). Évidemment, pour ça, il faut avoir correctement configuré le serveur afin que le client puisse profiter des fonctionnalités proposées ; ainsi que le compte avec lequel on souhaite communiquer dispose lui-même d'un serveur correctement configuré.

Je ne crois pas qu'il existe de client Android supportant autant de fonctionnalités que Gajim sur ordinateur, mais je peux me tromper.

Bonjour,

Merci pour la réponse, mais je pense l'avoir testé et malheureusement je n'ai pas réussi à faire plus que de la messagerie texte et de la conversation téléphonique.

As-tu essayé et réussi à faire plus ? Il faut peut-être que j'active des modules sur le serveur ? Si oui comment faire ?

Sinon, certains me disent que cela vient du fait que je n'ai pas de nom de domaine, mais je n'ai pas l'utilité d'un nom de domaine (je paramètre tous mes clients avec l'adresse publique de mon serveur et n'ai pas besoin de visibilité pour que d'autres me rejoignent, en plus cela évite de passer par un tiers pour le DNS).

Salut !

Configurer un serveur DNS est vraiment très utile. Il se peut que les clients ou les serveurs de tes correspondants en aient besoin pour découvrir les services proposés. C'est d'ailleurs ainsi que fonctionne Conversations. C'est sûrement pourquoi tu n'as pas réussi à le configurer, car il ne demande que l'adresse XMPP de l'utilisateur, et utilise le DNS pour découvrir le serveur. Conversations est actuellement le meilleur client XMPP pour Android. Il gère tous les points cités, sauf les communications audio/vidéo.

Je ne crois pas que la perle rare qui sache tout faire existe déjà. Mais ça avance pas mal, aussi bien du coté client que serveur.

Bonjour Yann,

J'arrive bien plus tard, mais étant dans la même démarche que toi et cherchant désespérément en moyen d'avoir une conversation audio/vidéo sur Android sans passer par un service tiers, bizarrement c'est vraiment la galère !

Mais j'ai fini par tombé sur AstraChat : http://www.astrachat.com/MobileDirectConnectXMPP.aspx qui fait tout ça !

Visiblement l'implémentation pour l'audio (XEP-0176: Jingle ICE-UDP) est à faire coté client et non serveur.

C'est quand même fou que ce soit si compliqué de faire de la vidéo avec du logiciel libre sur Android, j'ai pas non plus trouvé d'implémentation de WebRTC qui fonctionne (certes Firefox le fait mais comme si c'était un écran taille ordi donc c'est un peu galère...).

Salut !

Je ne suis pas certain que ta solution convienne à Yann. Il s'agit a priori d'un logiciel propriétaire utilisant un service centralisé. Si le but était d'éviter de passer par un service tiers, c'est raté... Il s'agit ici d'utiliser son propre serveur XMPP avec du logiciel libre.

Ajouter un commentaire

HTML filtré

  • Balises HTML autorisées : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd> <p>
  • Textual smiley will be replaced with graphical ones.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Texte brut

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Flux RSS des commentaires de cet article.