Migrer de ejabberd vers prosody

Cet article complète la documentation officielle pour installer et importer dans prosody une base utilisateur issue de ejabberd.

Installer Prosody

La première étape est simple, il nous faut installer prosody.

Prosody bien que jeune propose un ensemble de paquets pour différents systèmes et distributions. Nous trouvons entre autre un dépôt pour Debian

Pour prendre en charge les paquets prosody sur le serveur :

  • On ajoute le dépôt officiel
    nano /etc/apt/sources.list
    #prosody
    deb http://packages.prosody.im/debian lenny main
  • On importe les clefs publiques du dépot et on actualise notre cache.
    wget http://prosody.im/files/prosody-debian-packages.key -O- | apt-key add -
    apt-get update

L’installation se fait grâce à un simple apt-get install. Il existe aussi une version prosody-dev, qui est générée toutes les nuits. Seule la version amd64 est
alors disponible.

apt-get install liblua5.1-sec0 prosody

Ejabberd

Il faut noter qu’Ejabberd par défaut utilise :en:Mnesia, une structure de données en Erlang. N’étant pas une structure des plus accessible pour les administrateurs, il existe des interfaces pour se connecter entre autre à MySql.

Lors de l’installation du serveur Ejabberd, les premiers comptes sont créés et stockés dans la base Mnesia, par la suite les nouveaux comptes peuvent être gérés dans une base SQL. Pour autant l’intégralité des données d’un utilisateur peut être répartie entre les 2 bases. On le constatera dans la suite de l’article.

Exporter les données Ejabberd

Prosody propose dans sa boite à outils 2 scripts pour importer l’ensemble des données contenues dans Ejabberd. La documentation de base est consultable sur http://prosody.im/doc/creating_accounts

Ces outils ne sont pas packagés, il est donc nécessaire de télécharger les sources.

cd ~
mkdir prosody
cd prosody
wget http://prosody.im/downloads/source/prosody-0.6.1.tar.gz
tar -xvf prosody-0.6.1.tar.gz
cd prosody-0.6.1/tools/

Nous trouvons 2 scripts :

  • ./ejabberd2prosody.lua
  • ./ejabberdsql2prosody.lua

Le premier script permet d’extraire les données contenue dans la base Mnesia. Il faut l’utiliser car généralement les premiers comptes sont gérés dans cette base.

Le second script fait de même mais en traitant un export Mysql. Il est inutile, si on n’utilisait pas de base externe à Mnesia.

Export Mnesia

Pour exporter les données, Ejabberd doit être encore actif, nous le désactiverons dans la foulée le temps de finir notre configuration.

ejabberdctl dump Ejabberd_dump.txt
ejabberdctl stop
./ejabberd2prosody.lua /var/lib/ejabberd/ejabberd_dump.txt
prosody.cfg.lua created
[success] accounts: root@im.azerttyu.net = motdepasse
[success] private: user1@im.azerttyu.net - storage:bookmarks
[success] private: root@im.azerttyu.net - storage:bookmarks
[success] private: root@im.azerttyu.net - storage:metacontacts
[success] private: user2@im.azerttyu.net - storage:bookmarks
[success] private: user1@im.azerttyu.net - storage:metacontacts
[success] private: user1@im.azerttyu.net - storage:metacontacts[success] private: user2@im.azerttyu.net - storage:metacontacts

Dans le répertoire courant nous trouvons alors :

  • un répertoire data/
  • un fichier prosody.cfg.lua

Nous reviendrons sur ces éléments par la suite.

Export Mysql

La seconde partie consiste à exporter les données de la base de données MySql.

chmod u+x ejabberdsql2prosody.lua
mysqldump -u admin -p db_ejabberd > sql_ejabberd.sql
./ejabberdsql2prosody.lua sql_ejabberd.sql im.azerttyu.net
[success] accounts: user3@im.azerttyu.net = toto
[success] accounts: user1@im.azerttyu.net = titi
[success] accounts: root@im.azerttyu.net = erre
[success] roster: user3@im.azerttyu.net - msn.im.azerttyu.net
[success] roster: user3@im.azerttyu.net - friend%msn.com@msn.im.azerttyu.net
[success] roster: user3@im.azerttyu.net - friend2@im.apinc.org
[success] roster: user3@im.azerttyu.net - friend3%msn.com@msn.im.azerttyu.net
....
[success] roster-group: user3@im.azerttyu.net - friend2@im.apinc.org - Jabber
[success] roster-group: user3@im.azerttyu.net - friend%msn.com@msn.im.azerttyu.net - msn
[success] roster-group: user3@im.azerttyu.net - friend3%msn.com@msn.im.azerttyu.net - msn
.....
[success] vCard: user1@im.azerttyu.net
[success] vCard: user2@im.azerttyu.net
[success] vCard: user3@im.azerttyu.net  
2008-04-15T16:49:36Z
[success] offline: user2@im.azerttyu.net - 2009-06-24T07:43:29Z
[success] offline: user3@im.azerttyu.net - 2009-06-24T07:43:29Z
.....

Importer les données

Revenons aux 2 éléments généré par les scripts :

  • prosody.cfg.lua

  • data/

Pour importer les données de nos utilisateurs, nous faisons :

cp -r data/* /var/lib/prosody/
chown -R prosody:prosody /var/lib/prosody

L’export propose aussi un fichier de configuration minimalisteprosody.cfg.lua avec entre autre les modules compatible entre les 2 serveurs.

Configurer le serveur

Nous allons configurer notre serveur sans se préoccuper du ficher généré préalablement. Nous le consulterons à la fin pour voir si nous n’avons rien oublié.

Le fichier est écrit en lua, un syntaxe finalement assez proche de Erlang.

nano /etc/prosody/prosody.cfg.lua

Configuration globale

Nous éditons la partie générique, qui est défini par Host "*".

Nous définissons un ou plusieurs administrateur du serveur.

       admins = { "administrateur@im.azerttyu.net" }

Nous activons les options pratiques tel que :

  • Bosh, solution pour passer à travers http
  • offline
  • la notification des créations nouveaux comptes
                       -- Other specific functionality
                               "bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
                               "offline"; -- Offline message storage and delayed delivery support
                               "watchregistrations"; --          Notify a list of JIDs on new registrations
                         };

L’ensemble des modules activables sont déclaré sur la page des modules disponibles.
Nous remarquons le module compression utile pour préserver sa bande passante.

Personnalisation

Nous recherchons la ligne Host "example.com" et éditons le code suivant.

Host "im.azerttyu.net"
       -- Remove the following line to activate this host!
       -- enabled = false -- This will disable the host, preserving the config$

       -- Assign this host a certificate for TLS, otherwise it would use the o$
       -- set in the global section (if any).
       -- Note that old-style SSL on port 5223 only supports one certificate, $
       -- use the global one.
       ssl = {
               key = "/etc/prosody/certs/azerttyu.net.key";
               certificate = "/etc/prosody/certs/azerttyu.net.crt";
               }

Pour la génération de la clef et du certificat SSL, je vous invite à suivre la procédure présente sur http://www.akadia.com/services/ssh_....

À ce stade, nous avons une configuration jabber équivalent à celle que nous avions avec Ejabberd.

Démarrer et tester

/etc/init.d/prosody restart

Nous pouvons alors nous reconnecter avec notre client de messagerie favori.
Il est possible d’avoir une notification concernant le certificat SSL ou une alerte concernant le mot de passe.

Et voilà....

La suite

Si vous avez été attentif aux sorties de code des exemples, vous aurez constaté la présence de contacts utilisant msn.

Un prochain article abordera la configuration d’une passerelle msn grâce à spectrum. Nous verrons aussi l’activation d’une passerelle irc.

Messages

Un message, un commentaire ?

Qui êtes-vous ?
Votre message

Pour créer des paragraphes, laissez simplement des lignes vides.