Cette procédure est adaptée à Debian Wheezy (stable à l'heure où j'écris ces lignes). Il s'agit d'installer Jwchat et Punjab pour la couche transport. Alors avant de continuer, il faut quand même dire que vous utilisez Gootle Talk à vos risques et périls en termes de vie privée. Loin de moi l'idée d'encourager à utiliser ce service, mais on ne choisit pas toujours ses amis et encore moins leur système de discussion électronique.

Installation de Jwchat

apt-get install jwchat

Malheureusement, la version de libjs-jac installée sur Debian Wheezy est buguée et produit du XML invalide pour discuter en XMPP. Il faut donc backporter un paquet plus récent.

J'ajoute donc testing dans les sources de APT, puis :

apt-get source libjs-jac
cd jsjac-1.3.4+dfsg
dpkg-buildpackage

Et en root, j'installe le paquet produit :

cd ..
dpkg -i libjs-jac_1.3.4+dfsg-1_all.deb

Puis il faut configurer jwchat. Dans le fichier /etc/jwchat/config.js, on va retrouver notamment les directives suivantes:

var DEFAULTRESOURCE = "gmail.com";
var SITENAME = "xxx.drieu.org";
var BACKENDS = 
[
  {
    name:"Native Binding",
    description:"Pubjab HTTP Binding backend",
    httpbase:"/http-bind/",
    type:"binding",
  },
]; 

Remplacer SITENAME par votre site, évidemment.

Il faut ensuite configurer Apache pour servir jwchat. Ces lignes sont à placer dans le virtualhost idoine:

  Alias /jwchat/ /usr/share/jwchat/www/
  <Directory /usr/share/jwchat/www/>
    Options +Indexes +Multiviews +FollowSymLinks
  </Directory>

Une authentification par mot de passe HTTP est plus que conseillée par la maison à ce niveau, se référer aux documentations de Apache.

Installation de Punjab

Punjab va faire le lien entre gtalk et jwchat et notamment transformer une communication stateless en session XMPP valide. Punjab se récupère sur github.

Décompresser l'archive, puis se référer au fichier INSTALL de Punjab. Les dépendances sont Python 2.6, Python-Twisted 11.1 (mais en réalité je le fais fonctionner avec le Python-Twisted de Debian, soit le 10.1.0 sans problème) et pyopenssl si vous souhaitez faire du XMPP sécurisé (non nécessaire).

Pour configurer le bousin :

tar vxzf punjab-X.X.tar.gz
cd punjab
python setup.py install

Toute la configuration se fait dans le fichier punjab.tac. Voici mon fichier:

root = static.File("./html")
bosh = HttpbService(1)
bosh.white_list = ['gmail.com', 'google.com']
root.putChild('http-bind', resource.IResource(bosh))
site  = server.Site(root)
application = service.Application("punjab")
internet.TCPServer(5280, site).setServiceParent(application)

Puis pour exécuter punjab :

twistd punjab

Un fichier twistd.log contiendra les logs de Punjab.

Configuration d'Apache

Punjab va écouter en HTTP sur le port 5280, ce qui est très bien pour recevoir les commandes envoyées par jwchat, mais des mécanismes de sécurité empêchent Javascript d'envoyer des commandes sur des sites tiers, il faut donc que sur le même serveur que celui d'Apache on ait une redirection. Voici donc ma configuration Apache (qui est un peu overkill):

  ProxyPass /http-poll/ http://localhost:5280/http-poll/
  ProxyPassReverse /http-poll/ http://localhost:5280/http-poll/
  ProxyPass /http-bind/ http://localhost:5280/http-bind/
  ProxyPass /http-bind http://localhost:5280/http-bind
  ProxyPassReverse /http-bind/ http://localhost:5280/http-bind/
  ProxyPassReverse /http-bind http://localhost:5280/http-bind

Et voilà, plus qu'à tester en se rendant sur http://xxx.drieu.org/jwchat/, ça marche !