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 :
-- 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
1. Merci, 15 janvier 2011, 15:52, par Sylvain
Merci pour cet article !
En suivant ces étapes, je viens de migrer mon serveur ejabberd vers prosody. Ce dernier est disponible dans lenny-backports en attendant squeeze.