mardi 8 janvier 2008
Il faut faire fonctionner Jabberd2 !
Finalement je pense que je m'en suis sorti !
Et oui hier, la grande aventure, mise à jour de notre ami Cthulhu ( et oui Cthulhu, l'ami des petits et des grands ! ) en Feisty, et je me suis rendu compte que cela n'a servi à rien, au niveau de mon problème de plantage serveur Jabber...
Je vais ici vous expliquer pourquoi, et finalement quelles sont les solutions : alors pour notre ami google : installer jabberd2, configurer jabberd2, problème jabberd2 MySQL.
Faire tourner jabberd2 sous ubuntu linux ( ou autre )
Quelques explications
Qu'est ce que jabber ? c'est un protocole, utilisé notamment par gmail, de conversation sur internet. Il a ça de bien qu'il n'est pas "propriétaire", contrainement à AIM, ICQ, MSN, Yahoo et les autres. En somme, tout le monde ne se connecte pas à un même serveur, avec forcement le client imposé par ceux qui l'ont inventé, ici plein de serveurs, pleins de clients, qui se voient tous les un les autres, sans limites !!
De plus ce protocole évolue et permet ou permettra l'echange de fichier, connexion sécurisées ( SSL, PGP ), vidéo, voix sur Ip, et j'en passe.
http://fr.wikipedia.org/wiki/Jabber
Avoir son propre serveur Jabber
Vu que tout est interconnecté, on peut tout à fait avoir son serveur Jabber à la maison, avec son propre nom de domaine ( ou adresse ip mais c'est moins class :p ), ce que j'ai décidé de faire. Ainsi je peux parler a tous mes amis que j'avais déjà , mais avec mon serveur fait maison, et sur lequel je peux ajouter toutes les fonctionnalités que je souhaite - ici notamment un transport MSN. Comme mon serveur est sous Linux, Ubuntu j'ai regardé un peu des comparatifs des différents serveurs qu'on me proposait et je me suis arreté sur Jabberd2, qui était dans les paquets de mon ubuntu ( truc qui s'installe tout seul ou presque ) et je me suis lancé.
Ca a fonctionné super bien !
Premières déconvenues
J'ai ensuite installé un transport MNS : PyMSNt, qui n'est pas dans les paquets mais dont le lancement est assez simple, il suffit de lancer un programme en python, et il s occupe du reste, la configuration est très bien expliquée, par distribution, sur leur site.
http://delx.cjb.net/pymsnt/docs/server.html
Je me suis rendu compte, qu'au bout d'un certain temps ( disons, 8 heures :p car je sais que c'est 8 heures ) d'inactivité sur le serveur jabber, il n'était plus possible de s'y reconnecter sans le relancer. Cela était du au fait que je l'ai configuré sur une base de données MySQL, et qu'il se connectait de façon persistante. Car les connexions persistantes expirent au bout de 8 heures, et que le serveur jabberd2, dans cette version n'était pas censé préconiser une reconnexion passé ce délai.
Dans le journal j'ai pu voir :
[error] mysql: connection to database lost
La solution était visiblement corrigée dans une version plus récente de Jabberd2 ( vu sur le net ! ), mais ayant celle de mon paquet Edgy, et ne voulant pas l'installer "à la main", je me suis dit que de passer à une version de Linux plus récente, corrigerait automatiquement le problème : erreur ! car en fait j'avais déjà une version récente de jabberd2, mais je l'ignorai AVANT de faire cette mise à jour, idiot que je suis 
j'ai pu verifier les versions grace au site : http://packages.ubuntu.com/ qui donne la version de chaque paquet, par distribution. Plutot class quand on cherche quelque chose 
Donc j'ai cherché la solution à mon problème.Et vu que google est mon ami et qu'on risque de se marier bientot voici : http://j2.openaether.org/bugzilla/show_bug.cgi?format=multiple&id=70 En gros il faut Une version de jabberd2 au moins 2.0s7, j'étais déjà à la 2.0s8, donc tout va bien, puis ensuite ajouter dans le fichier de configuration : /etc/mysql/my.cnf ( ou /etc/my.cnf )
les lignes :
[jabberd] reconnect
Edit du 13/01/2008 : Un oubli
Il faut également patcher Jabberd2 - 2.0s7 , visiblement, mais ayant la s8 ca ne marche toujours pas chez moi, telechargez les sources avec apt-get sources jabberd2, et appliquez ce patch :--- /usr/local/src/jabberd-2.0s8/sm/storage_mysql.c Thu Mar 31 10:17:45 2005
+++ sm/storage_mysql.c Sat May 7 16:40:55 2005
@@ -562,6 +562,9 @@
return 1;
}
+ /* Set reconnect flag to 1 (set to 0 by default from mysql 5 on) */
+ conn->reconnect = 1;
+
data = (drvdata_t) malloc(sizeof(struct drvdata_st));
memset(data, 0, sizeof(struct drvdata_st));
--- c2s/authreg_mysql.c.orig Sat May 7 16:47:49 2005
+++ c2s/authreg_mysql.c Sat May 7 16:48:47 2005
@@ -512,12 +512,17 @@
return 1;
}
+ mysql_options(conn, MYSQL_READ_DEFAULT_GROUP, "jabberd");
+
/* connect with CLIENT_INTERACTIVE to get a (possibly) higher timeout value than default */
if(mysql_real_connect(conn, host, user, pass, dbname, atoi(port), NULL, CLIENT_INTERACTIVE) == NULL) {
log_write(ar->c2s->log, LOG_ERR, "mysql: connection to database failed: %s", mysql_error(conn));
mysql_close(conn);
return 1;
}
+
+ /* Set reconnect flag to 1 (set to 0 by default from mysql 5 on) */
+ conn->reconnect = 1;
mysqlcontext->conn = conn;
Personnellement, j'ai réussi à appliquer la patch, mais pas a compiler, un probleme de version OpenSSL, en ayant une version assez récente, il ne veut qd meme pas la detecter, alors j'ai vu sur le net, que c'était un probleme connu, et que globalement, la version jabberd2 pour Ubuntu était foireuse !alors j'ai récupéré tar.gz de la toute derniere version 2.14 ou 2.21 je crois , de jabberd2, pour la compiler à la main, et là pareil, ca foire sur gsasl !! version pas assez récente, mais là , c'est la faute à ubuntu qui n'en propose qu'une ancienne, après avoir vérifié les paquets sur packages.ubuntu, ça n'est mis a jour que dans deux distrib, à savoir celle qui est encore en alpha3 ( pas stable ), et les dist-upgrade, j'ai pas envie d'en faire tous les jours ....
Fin de l'EDIT
L'explication c'est que c'était un paramètre par défaut des MySQL 3 et 4 , mais que pour le 5 on est obligés de le préciser :il faut activier le flag "reconnect" apres la connexion du groupe jabberd. Dingue quand même, une version plus récente, et c'est la source de nos problèmes !!
Autre problème hérité !
Youpi je me dis, mon probleme de connexion apres 8 heures d'inactivité sur le serveur jabber est résolue ! OUI ! mais maintenant je suis confronté à un autre problème, je veux relancer mon transport PyMSNt, et ca ne marche pas je recois un message d'erreur : ( que je n'avais pas avant )
# Traceback (most recent call last):
File "./PyMSNt.py", line 14, in ?
main.main()
File "/usr/pymsnt/pymsnt-0.11.2/src/main.py", line 398, in main
app = App()
File "/usr/pymsnt/pymsnt-0.11.2/src/main.py", line 335, in init
twistd.checkPID(config.pid)
AttributeError: 'module' object has no attribute 'checkPID'
Dingue ! Finalement il s'avère que la mise a jour de "twisted" de la version 2.4 ( edgy ) à la 2.5 ( mon nouveau feisty ) en soit la cause ! encore une mise à jour qui change la façon de fonctionner de tout le bouzin ! En regardant la liste de nos chers paquets, edgy avait la version pour laquelle ca ne posait pas de problème.
Voici le patch à appliquer pour corriger le soucis : ( perso j'ai édité main.py et j'ai fait la manip à la mano ne connaissant pas encore les commandes de substitutions et n'ayant pas envie de tout griller )
Index: main.py
===================================================================
--- main.py (revision 230)
+++ main.py (working copy)
-390,7 +390,10
# Set SIGHUP to reload the config file & close & open debug file
signal.signal(signal.SIGHUP, SIGHUPstuff)
# Load some scripts for PID and daemonising
- from twisted.scripts import twistd
+ try:
+ from twisted.scripts import _twistd_unix as twistd
+ except:
+ from twisted.scripts import twistd
def main():
En gros, il faut virer la ligne avec le - et ajouter les lignes avec le + ( oui je sais c'est pointu linux ). Ce patch est censé permettre au transport de fonctionner avec les deux versions 2.4 et 2.5 de twisted.
Et hop ! PyMSNt se lance de nouveau, et fonctionne !
Merci ! On se prend bien la tête pour rien, mais si d'autres gens sont dans mon cas j'espère que google les amènera ici pour toutes ces manips ! ( ou sur les mêmes sites que moi )
A savoir que ca n'a rien corrigé, mais qu'on voit bien qu'un problème en amenant un autre je suis en train d envisager de ne plus utiliser mysql du tout pour jabberd2 et de le laisser par fichier ... plus de probleme de reconnexion. A suivre !Ce billet, écrit à 22:56 par Pierre HOPQUIN dans la catégorie Regne a suscité :
Dans le but de solution quelques problèmes que j'ai avec un certain serveur JABBER ! pour ne pas le nommer, j'ai mis a jour ma version de linux server sur cthulhu !











Voici une barre que je viens de faire, pour ajouter aux signatures sur les forums, avec un lien vers mon site, oui merci 

Voilà mon petit rêve de fou de cette nuit, en y repensant ce matin, j'étais bien a fond dedans, maintenant quand une journée s est passée, je suis moins passionné !


Voici le podcast qui débarque !





