Installer un serveur Weave sous Windows : base de données MySQL et code PHP

Sur le site http://hg.mozilla.org/services/ le serveur Weave est disponible en téléchargement libre sous plusieurs versions, aux noms malheureusement peu explicites.
Actuellement, les versions dont le nom commence par « server » (« server-core », « server-reg », « server-full », etc) sont écrites en Python. La version écrite en PHP est constituée de 2 parties principales :
- « reg-server » : correspond à l’API « user » de Weave, qui regroupe les opérations de création et de gestion d’un compte Weave (package en version 1.3.101115 à la date de rédaction de ce billet),
- « sync-server » : correspond à l’API « sync », qui regroupe les opérations de synchronisation des marque-pages, mots de passe, historiques, etc. de Firefox grâce à un compte sur un serveur Weave (package en version 1.5.101116 à la date de rédaction de ce billet).
L’extension Firefox Sync met en œuvre ces deux API, dans la version dont les numéros sont repris dans les requêtes correspondantes au serveur Weave. A la date de rédaction de ce billet, la version de l’extension  Firefox Sync la plus récente porte le numéro « 1.5.1 », et elle correspond aux versions « 1.0 » de ces deux API.
Dans la perspective d’avoir à servir un parc éventuellement hétérogène d’extensions Firefox Sync (en termes de versions d’API mises en œuvre), il est conseillé d’organiser les répertoires « c:\wamp\www\weave\weaveserver-sync\ » et « c:\wamp\www\weave\weaveserver-registration\ » précédemment créés (voir : Configuration d’Apache2 ).
Créez un sous-répertoire « 1.0 » dans chacun de ces 2 sous-répertoires, téléchargez les versions « zip » de ces 2 serveurs, extrayez-en les contenus, et placez-les dans les sous-répertoires :
- c:\wamp\www\weave\weaveserver-sync\1.0\
- c:\wamp\www\weave\weaveserver-registration\1.0\

Le serveur Weave stocke les marque-pages, mots de passe, etc. de Firefox dans une base de données MySQL. L’outil phpMyAdmin, inclus dans le package WampServer (clic droit sur l’icone de WampServer, dans la barre des tâches de Windows), permet d’initialiser cette base de données.
La structure ci-dessous correspond à la version du serveur Weave à la date de rédaction de ce billet. Il est conseillé, à chaque mise à jour de votre serveur Weave, de consulter les fichiers README accompagnant les fichiers .php, pour repérer d’éventuelles évolutions de la structure de cette base de données.

En utilisant l’outil phpMyAdmin créez une base nommée « weave » et exécutez les commandes SQL suivantes :

create table `users` (
id int(11) NOT NULL PRIMARY KEY auto_increment,
username varbinary(32) NOT NULL,
password_hash varbinary(128) default NULL,
email varbinary(64) default NULL,
status tinyint(4) default ’1′,
alert text,
reset varchar(32),
reset_expiration datetime
)ENGINE=InnoDB;

CREATE TABLE `collections` (
  `userid` int(11) NOT NULL,
  `collectionid` smallint(6) NOT NULL,
  `name` varchar(32) NOT NULL,
  PRIMARY KEY  (`userid`,`collectionid`),
  KEY `nameindex` (`userid`,`name`)
)ENGINE
=InnoDB;

CREATE TABLE `wbo` (
  `username` int(11) NOT NULL,
  `collection` smallint(6) NOT NULL default ’0′,
  `id` varbinary(64) NOT NULL default ”,
  `parentid` varbinary(64) default NULL,
  `predecessorid` varbinary(64) default NULL,
  `sortindex` int(11) default NULL,
  `modified` bigint(20) default NULL,
  `payload` longtext,
  `payload_size` int(11) default NULL,
  `ttl` int(11) default ’2100000000′,
  PRIMARY KEY  (`username`,`collection`,`id`),
  KEY `parentindex` (`username`,`collection`,`parentid`),
  KEY `modified` (`username`,`collection`,`modified`),
  KEY `weightindex` (`username`,`collection`,`sortindex`),
  KEY `predecessorindex` (`username`,`collection`,`predecessorid`),
  KEY `size_index` (`username`,`payload_size`)
)ENGINE
=InnoDB;

Créez aussi un utilisateur (par exemple « weave ») avec un mot de passe (par exemple « weave ») et donnez-lui tous les privilèges (avec ou sans « Grant », peu importe) sur cette base de données « weave ». Vous pouvez choisir librement le nom et le mot de passe de cet utilisateur.

Dans le fichier de configuration d’Apache2 « http-ssl.conf », dans sa section qui commence par <VirtualHost ajoutez les lignes suivantes :
- Alias /user/1.0 "c:/wamp/www/weave/weaveserver-registration/1.0/index.php"
- Alias /weave-registration-static "c:/vamp/www/weave/weaveserver-registration/1.0/static" 
- Alias /1.0 "c:/wamp/www/weave/weaveserver-sync/1.0/index.php"
- Alias /misc/1.0/captcha_html "c:/wamp/www/weave/weaveserver-registration/1.0/captcha.php"
- Alias /weave-password-reset "c:/vamp/www/weave/weaveserver-registration/1.0/forgot_password.php"
A l’avenir, si vous installez sur ce serveur de futures versions de Weave, il vous faudra ajouter ici les lignes nécessaires pour les Alias correspondants.
Ajoutez aussi la ligne : « DocumentRoot "C:/wamp/www/weave/" ».

Dans le répertoire « C:\wamp\www\weave\weaveserver-registration\1.0\ », renommez le fichier « weave_user_constants.php.dist » en « weave_user_constants.php ». Dans ce fichier, ajustez les lignes :
- if (!defined(‘WEAVE_MYSQL_AUTH_USER’)) { define(‘WEAVE_MYSQL_AUTH_USER’, ‘weave’); }
- if (!defined(‘WEAVE_MYSQL_AUTH_PASS’)) { define(‘WEAVE_MYSQL_AUTH_PASS’, ‘weave’); }
selon le nom et le mot de passe de l’utilisateur que vous avez créé avec tous les privilèges sur la base de données « weave ».
Dans le répertoire « C:\wamp\www\weave\weaveserver-sync\1.0\ », renommez le fichier « default_constants.php.dist » en « default_constants.php ». Dans ce fichier, ajustez de la même façon les lignes (qui figurent à 2 endroits dans ce fichier) :
- if (!defined(‘WEAVE_MYSQL_AUTH_USER’)) { define(‘WEAVE_MYSQL_AUTH_USER’, ‘weave’); }
- if (!defined(‘WEAVE_MYSQL_AUTH_PASS’)) { define(‘WEAVE_MYSQL_AUTH_PASS’, ‘weave’); }
selon le nom et le mot de passe de ce même utilisateur que vous avez créé avec tous les privilèges sur la base de données « weave ».

 

La version de Weave téléchargée au moment de l’écriture de ce billet souffre de 2 bugs bloquants, qu’il faut corriger dans le code PHP.

a) Deux fichiers portent le même nom, « cef.php », l’un dans le répertoire « c:\wamp\www\weave\weaveserver-sync\1.0\ », l’autre dans « c:\wamp\www\weave\weaveserver-registration\1.0\ ». Dans chacun de ces 2 fichiers, la ligne 18 utilise les variables PHP nommées « LOG_ODELAY» et « LOG_LOCAL4 », qui ne sont pas disponibles sous Windows. L’exécution de ces instructions génère alors une erreur, qui empêche le bon fonctionnement de l’extension Firefox Sync, dès l’étape de création d’un compte sur ce serveur Weave. Pour corriger ce problème, on pourra par exemple remplacer :
- LOG_ODELAY par LOG_PID
- LOG_LOCAL4 par LOG_USER
Des logs seront alors écrits dans le journal « applications » de Windows, sur le serveur Weave, et seront lisibles avec l’observateur d’évènements.

b) Dans le répertoire « c:\wamp\www\weave\weaveserver-sync\1.0\weave_user », le fichier « mysql.php » contient, commençant à la ligne 83, le bloc d’instructions suivant :
if (setlocale(LC_CTYPE, "UTF8", "en_US.UTF-8") == false)
{
    error_log("no standard locale available for setlocale");
    throw new Exception("Database Unavailable", 503);
}
Ce test est inutilement rigoureux pour des bases MySQL installées sur des systèmes français avec un jeu de caractères UTF-8 Unicode. Un correctif primitif, mais efficace, consiste à transformer ce bloc d’instructions en commentaires.

 

Introduction
Utilisation d’OpenSSL
Configuration d’Apache2
Base de données MySQL et code PHP