Ubuntu, XMPP (Jabber), Google Apps et ligne de commande.


Pour des besoins de monitoring j’ai besoin de recevoir des alertes via le protocole XMPP (Jabber) et pour cela j’ai besoin d’envoyer des messages XMPP via mes scripts et donc la ligne de commande.
Il existe certain script en Perl qui font cela mais j’ai une préférence pour le Python. Le seul existant en Python d’après mes recherches est xmpppy . Pour pouvoir utiliser ce script dans de bonne condition, il faudra ajouter une dépendance sur le paquet python-xmpp et rajouter des entrées dans la zone DNS de votre domaine.

Installation:

wget http://xmpppy.sourceforge.net/examples/xsend.py
chmod +x xsend.py
sudo apt-get install python-xmpp

Configuration:

  • De base le script utilise un fichier ~/.xsend mais il est possible de modifier le script pour pouvoir mettre les identifiants du compte éméteur. Je vais utiliser le fichier .xsend
nano ~/.xsend

Voici le contenu à mettre, il faut bien entendu replacer les éléments en Majuscules après le “=” pour que cela puisse fonctionner. Attention si le domaine est sur Google Apps, il faut que ce compte soit activé en se connectant au moins une fois à Gmail Apps et qu’il ajoute les contacts dont il a besoin. Sans cela aucun message ne passera.

#Uncomment fields before use and type in correct credentials.
JID=USER@DOMAIN.TLD/RESSOURCE (/resource is optional)
PASSWORD=SECRET
  • Le protocole XMPP permet d’utiliser des entrées DNS afin de trouver le serveur XMPP si celui ci n’est pas le domaine principal. Cet enregistrement DNS est un SRV comme suit:
_xmpp-server._tcp       28800  IN SRV    5 0 5269 xmpp-server.l.google.com.
_xmpp-client._tcp       28800  IN SRV    5 0 5222 talk.l.google.com.
  • Sur Ubuntu 10.10 et Ubuntu 10.04, Python 2.6 est installé et pose problème avec les modules de chiffrement (md5 et sha). Il faut donc modifier une partie du code pour utiliser hashlib.

Changement dans le fichier /usr/lib/python2.6/dist-packages/xmpp/auth.py à partir de la ligne 24:


#import sha,base64,random,dispatcher,re
import hashlib,base64,random,dispatcher,re

#import md5

  • Sur Ubuntu 11.04 pas de soucis Python 2.7 est utilisé et tout fonctionne Out of the Box sans aucun message d’avertissement.

Tests:

Une fois les DNS configurés il est possible de les tester mais attention, pour que les modifications soient visible sur Internet cela peut prendre du temps, autant tester directement avec les DNS de son fournisseur DNS.

Si les DNS du FAI qui essaye d’envoyer le message ne sont pas encore à jour, il y a de forte chance que cela ne fonctionne pas encore. Les résultats suivant sont volontairement tronqués pour ne pas allonger inutilement l’article.

brice@capelle:~$ dig SRV _xmpp-server._tcp.DOMAINE.TLD @DNS.SUPPLYER.TLD

;; QUESTION SECTION:
;_xmpp-server._tcp.DOMAINE.TLD. IN SRV

;; ANSWER SECTION:
_xmpp-server._tcp.DOMAINE.TLD. 28800 IN SRV 5 0 5269 xmpp-server.l.google.com.

brice@capelle:~$ dig SRV _xmpp-client._tcp.DOMAINE.TLD @DNS.SUPPLYER.TLD

;; QUESTION SECTION:
;_xmpp-client._tcp.DOMAINE.TLD. IN SRV

;; ANSWER SECTION:
_xmpp-client._tcp.DOMAINE.TLD. 28800 IN SRV 5 0 5222 talk.l.google.com.

Si tous les tests précedents sont OK et que l’utilisateur a bien ajouté les contacts alors on peut tester l’envoi de messages:

./xsend.py DOMAIN_USER@DOMAIN.TLD SERVEUR core00 \: Down \!

Il prend aussi les variables sans problèmes:

./xsend.py DOMAIN_USER@DOMAIN.TLD SERVEUR $HOSTNAME \: Up \!

Les \ sont importants pour les caractères spéciaux afin de ne pas les interpréter, sinon le message ne passe pas ou alors le shell renvoi une erreur. Et il n’est pas besoin de mettre le message entre guillemets (“).

En espérant que cela puisse aider certains car j’ai eu beaucoup de mal à trouver des informations sur le sujet, même sur la documentations de Google.

, ,

2 responses to “Ubuntu, XMPP (Jabber), Google Apps et ligne de commande.”

  1. Très bonne idée que ce tuto 🙂
    Utiliser Jabber pour monitorer ses serveurs me semble plein de bon sens 🙂

    J’ai toutefois une erreur pour faire partir un message :
    ====================================
    aedania:/home/admin# bin/xsend.py hedy@spheerys.fr toto
    Traceback (most recent call last):
    File “bin/xsend.py”, line 16, in
    key,val=ln.strip().split(‘=’,1)
    ValueError: need more than 1 value to unpack
    ====================================

    une idée ?

    • Merci 🙂

      Pour ce qui est de ton problème dans l’immédiat je ne vois pas.

      Il semble manquer une valeur quelque part. Le fichier .xsend est bien rempli car la ligne 16 du script parle bien de ce fameux fichier .xsend . Peut être un caractère pourri mais invisible …

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.