Avancement

Les problèmes sur l’entité bachue sont en passe d’être résolus. Elle va pouvoir bientôt héberger les nouvelles versions de sylabe, et donc permettre leur diffusion dans de bonnes conditions.

L’avancement du code de sylabe continue. Un système de traduction de l’interface est implémenté et n’attend plus que d’être utilisé partout dans l’interface… C’est le temps de modifier le code aux multiples endroits où il est fait un affichage de texte.

Au cours de la conversion du site web de l’entité bachue, il est apparu un autre problème pour la mise en Å“uvre de sylabe. Le bootstrap rappelle par défaut l’objet de sylabe via la page http://localhost/, or cela ne peut pas marcher si le serveur web héberge plusieurs sites web de noms différents. La page par défaut ne connait pas les objets de l’entité bachue
Ce sera corrigé rapidement.
Cela donne ce genre d’erreur :

20140214 bootstrap error

Détournement de liens de mise à jour – suite

Suite à la réflexion de l’article Détournement de liens de mise à jour, je modifie dans le code de sylabe la vérification des paramètres pour autoriser les liens avec des ID d’objets de taille à partir de 6 octets. Cela concerne les paramètres synobj, synlnk, synunkobj, majobj, crlsrc, crldst et crlmet.

Avancement

Depuis 2 jours, le code du bootstrap est profondément remanié pour intégrer la résolution d’un graphe de relations de mise à jour des objets et surtout l’auto déploiement répliqué d’un code. Il intègre une version allégée de la librairie nebule indispensable à son fonctionnement.

L’interpréteur php ne permet pas (d’après mes essais) d’appeler du code php via la fonction include() si le fichier demandé n’a pas l’extension .php . Il n’est donc pas possible en l’état de charger un objet comme code php puisqu’un objet n’a pas d’extension. Ça n’a pas de sens pour un objet de l’affubler d’une extension. La méthode la plus fiable de typer un objet est le type mime correspondant à son contenu réel et non une simple extension. Maintenant, nebule attribue un type mime à un objet par un lien, mais cette attribution est signée et peut être multiple.
Cependant, si il n’est pas possible d’inclure un code php depuis un objet, il est possible de faire appel à du code php toujours via la fonction include() depuis un emplacement web (http). Cela fonctionne si on modifie les options qui l’autorise dans php, à savoir allow_url_fopen et allow_url_include. Cela fonctionne aussi, mais à vérifier, parce que le contenu de l’objet est transmit avec son type mime par le serveur web. Le type mime transmit avec l’objet est justement déduit d’un lien de cet objet.
Pour éviter l’inclusion d’un code non local et donc potentiellement dangereux, le lien web fait systématiquement référence à http://localhost/o/objet avec ‘objet‘ un objet nebule forcément présent et avec des liens validés par l’entité bachue ou l’entité locale, exclusivement.

Le code du bootstrap inclut maintenant la résolution du graphe des mises à jours de la librairie nebule, et charge cette librairie. Elle est donc chargée par défaut même si l’application (sylabe par défaut) ne l’utilise pas. Elle ne remplace pas le minimum nécessaire de fonctions nebule directement intégrées dans le bootstrap, en version allégées, et nécessaire au fonctionnement du bootstrap. Mais cette inclusion de la librairie complète à postériori ouvre des possibilités plus élaborées.

Le code du bootstrap ne sait pas encore aller chercher tout seul auprès de l’entité bachue les dernières version des codes de nebule et sylabe. Mais les fonctions allégées de nebule qu’il embarque si normalement capable de le faire. C’est juste une question de code à ajouter en cas d’absence d’objet comme lors d’une nouvelle installation.

Le bootstrap étant capable de trouver la dernière version de la librairie nebule et de la charger, et de trouver la dernière version du code sylabe et de le charger, leur présence sous forme de fichier n’est plus nécessaire. Les derniers essais ont été réalisés avec succès avec uniquement le bootstrap présent sous forme de fichier et donc en ayant volontairement supprimé les fichiers lib_nebule.php et sylabe.php. Ces essais ont montré aussi que bien qu’il soit possible de suivre les liens de mises à jours des anciennes versions de sylabe, leur exécution n’est souvent plus possible par ce biais puisqu’ils essaient de charger directement la librairie nebule par le nom de fichier…

Ces derniers développements ne sont pas encore en ligne parce que cela implique des modifications au niveau du serveur Apache pour chaque instance de sylabe. A venir très prochainement donc, et avec une nouvelle doc d’installation…

Gestion des versions de sylabe – mise en ligne

Suite de Gestion des versions de sylabe.

Depuis hier soir, le code de sylabe et de la librairie nebule sont mise en ligne en tant qu’objets avec liens de mise à jour :

On peut voir dans le mode nav que ces objets n’ont pas de mise à jour aujourd’hui. C’est parce que ce sont les derniers disponibles en date d’aujourd’hui. En passant par les liens, on peut remonter jusqu’à l’origine de ces codes :

Dans le mode nav apparaît bien que ces objets ont été mis à jours et que la dernière mis à jour connu correspond à un des trois objets cités précédemment.

En raison d’un petit problème technique, les liens et objets, bien que signés par bachue, sont diffusés par http://stephane.nebule.fr/ et http://zulu.nebule.fr/. Ils n’en restent pas moins tout à fait valides.

Il reste préférable de télécharger un objet en passant par le lien web dédié « Télécharger« . En effet, l’affichage des objets dans les modes aff et nav est parfois légèrement faussé.

La vue réduite des objets dans le mode nav est un peu buggée

Le mode aff ne présente pas la mise à jours d’un objet si une entité n’est pas déverrouillée. L’état de mise à jour est bien présent lorsque déverrouillée. Ce petit problème d’affichage sera corrigé.

Gestion des versions de sylabe

La diffusion du code de sylabe et de la librairie de nebule en php sous forme d’objets et diffusés par bachue est sur le point d’intervenir. Ce n’est plus qu’une question de petits ajustements et de vérification des liens générés.

Le code de mise à jour (résolution des graphes de mises à jours) est jugé maintenant fonctionnel. Il a été modifié pour permettre la synchronisation des liens et objets manquants sur demande explicite. Cette synchronisation est encore en cours de test.

Le code de bootstrap va être modifié pour intégrer le code de résolution des graphes de mises à jours et ainsi charger l’objet à jour correspondant à sylabe et plus par défaut le fichier ‘sylabe.php‘.

C’est un moment singulier du projet sylabe puisqu’il devient assez mature pour se diffuser par lui-même en tant qu’objet !

Cependant, pour éviter des problèmes de sécurités (prévisibles), le boostrap ne prendra en compte que les liens de mises à jours signés par bachue. Et ce au moins pour un certain temps…

Avancement

Maintenant que le code qui permet de résoudre le graphe des mises à jours d’un objet est prêt, même si imparfait, on peut ajouter le code pour synchroniser les liens au besoin. C’est à dire de permettre au fur et à mesure du parcours de l’arbre, de synchroniser les liens et les objets de façon à trouver la dernière mise à jour disponible auprès des autres entités. Cela doit permettre de rattraper les mises à jour d’un programme par exemple quelque soit le retard de version de ce programme. Évidement, ce comportement est bridé par les deux variables $nebule_permitsynclink et $nebule_permitsyncobject.

Une nouvelle variable $nebule_permitautosync fait son entré. Elle permet d’activer la recherche automatique des mises à jours en ligne des liens d’objets consultés. Sinon, la synchronisation est réalisée uniquement sur demande explicite via l’interface sylabe. Le comportement de tout synchroniser peut entraîner de fortes latences dans l’interface…

L’interface a été un peu remaniée pour simplifier la lecture du code. Maintenant, lorsqu’aucune action n’est réalisée, c’est affiché en haut.

L’interface, toujours, commence à devenir un peu rempli… avec les différents ajouts de fonctionnalités. Il va falloir revoir un peu l’agencement des modes et veiller à une plus grande cohérence dans l’organisation de chaque mode. Et il va falloir ajouter l’aide en ligne partout.

Avancement

Le code commence à recevoir le nécessaire pour une mise à jour de lui-même en suivant les liens de mise à jour. Il en est de même pour la librairie nebule en php et les différentes icônes.

Dans le même cadre des mises à jours du code par lui-même, il fallait permettre l’import de grandes quantités de liens non signés. Et il fallait pouvoir ajouter un lien seul mais non signé. Il va sans dire qu’il faut pour cela que l’entité soit déverrouillée pour signer ces nouveaux liens. La partie du code gérant les actions liées à l’ajout d’un lien unique et d’un fichier de liens a été modifié pour détecter si le lien est signé et si non de le signer automatiquement.
Le but directe de cette modification est de permettre la génération des liens type l et u pour les différentes versions des programmes depuis une station de développement. Puis d’importer ces liens dans l’entité bachue, hors réseau, pour quelle les signes et donc valide les mises à jours…

Il restera ensuite à modifier le bootstrap pour qu’il reconnaisse et appelle automatiquement le code de sylabe, ou autre chose.

La finalité de tout cela, c’est de ne plus avoir à pousser les mises à jours du code de sylabe. Mais de ‘simplement’ les mettre en ligne, signées, et attendre que les différentes instances de sylabe viennent se mettre à jour (quitte à l’aider).

Avancement

Le problème des icônes nébulisées mais non présentes dans l’interface est résolu. Il a fallu faire une mise à jour du code ainsi que la modification des variables $nebule_permitsynclink et $nebule_permitsyncobject. Cela a permit temporairement (si ce n’était pas définitif) de synchroniser les icônes sur l’entité bachue. Toutes les instances de sylabe ont été mises à jour.
Prochaine étape, intégrer cette synchronisation dans le bootstrap.

Quelques arrangements cosmétiques ont été réalisés dans la vue aff.

Avancement

Entre hier et aujourd’hui, il y a eu quelques ajustements cosmétiques dans les vues log et upl.

Toutes les petites icônes de la vue aff ont été nébulisées. Mais si ça marche sur la machine de développement, je n’arrive toujours pas à faire la synchronisation des objets des icônes depuis les serveurs.

La vue upl permet maintenant la synchronisation d’un objet inconnu sur les entités tierces. Un test a été ajouté lors de la synchronisation de l’objet pour vérifier que le dossier tmp est en écriture, le téléchargement des objets échoue si ce n’est pas le cas. Ce test sera ajouté dans le bootstrap index.php.

De façon moins visible, certaines fonctions de la librairie nébule, qui n’est pas sensée faire de sortie sur l’écran, vont tenir une table de leurs actions pour permettre un affichage (après coups) de ce qui s’est passé. Cela concerne déjà la synchronisation d’objet et devrait rapidement être étendu à la synchronisation de liens.

Avancement

La nouvelle version est mise en place. Il y a pas mal de choses qui ont changées.

Le mode upl a été réorganisé et on peut maintenant transmettre un fichier contenant des liens. Cette nouvelle fonctionnalité va permettre de réinjecter des liens générés sur une machine hors réseau et donc transmis dans un fichier sur un support amovible.

Un certain nombre d’icônes utilisées dans l’interface, surtout dans le mode lnk, ont été nébulisées. Ces mêmes icônes ont été nébulisées et signées par l’entité bachue. Mais la synchronisation des objets ne fonctionne pas comme attendu, donc les objets correspondants aux icônes nébulisées ne sont pas disponibles, et donc ne s’affichent pas correctement. Ce problème d’affichage n’est pas bloquant, il sera résolu plus tard…

Dans le mode aff, on peut maintenant déclarer un texte dérivé d’un objet, donc en gros un commentaire. On peut aussi déclarer un objet comme mis à jour vers un nouvel objet. C’est cette dernière fonctionnalité qui va permettre de tester intensivement le suivi des mises à jours d’un objet. On a aussi un indicateur pour savoir si l’objet en cours d’affichage a été mis à jour et quel est sa mise à jour la plus récente.

Dans le mode log, il y a beaucoup plus de variables internes affichées.

Et enfin, de l’aide a été ajouté un peu partout. A compléter aussi.

Détournement de liens de mise à jour

La librairie nebule en php, qui est utilisée par sylabe, intègre depuis ce matin le code nécessaire à la résolution des graphes des liens de mise à jour d’un objet. Ce bout de code est encore en cours de test.

Il est notamment utilisé directement comme test par sylabe. Le premier usage est de gérer l’affichage des petites icônes qui pullulent dans l’interface. Les buts sont de pouvoir faciliter la mise à jour de ces mêmes icônes en cas de besoin et de ne plus avoir à les copier lors d’une nouvelle installation de sylabe. Et c’est le mode lnk qui en profite en premier. La fonction aff_img_upd permet de renvoyer le code html pour afficher l’image, en fait l’objet de l’image, le tout en tenant compte des mises à jours.

Mais il apparaît fastidieux et volumineux de remplacer le bout de code html :

<img src="ll.png" id="iconepuce" alt="Lien">

par :

<?php aff_img_upd('e9a97c8fb1c6257284e7fa6f4a4c40458deff45dd591f939bc123cd4378de697','Lien','iconepuce'); ?>

Or, il est possible de détourner les liens de mises à jours pour créer des raccourcis d’objets. Dans notre exemple, en créant un lien de type u entre e9a9 et l’objet e9a97c8fb1c6257284e7fa6f4a4c40458deff45dd591f939bc123cd4378de697, on peut faire simplement appel à l’affichage de l’objet e9a9 qui n’existe pas et avoir l’affichage de l’image attendu… Le code précédent ressemble maintenant à ça :

<?php aff_img_upd('e9a9','Lien','iconepuce'); ?>

Il y a cependant quelques contraintes. Par définition, les liens de nebule acceptent des objets dont les empreintes sont de toutes tailles à partir du moment qu’il y a au moins un caractère, notés en hexadécimal, en minuscule et que ce ne soit pas zéro (réservé). Dans le code de sylabe, les objets ne sont pas acceptés si la taille de l’empreinte ne fait pas au minimum un quart de la longueur de bloc de l’algorithme de prise d’empreinte. Donc sylabe est plus restrictif que nebule. La contrainte de taille d’empreinte dans sylabe a été mise en place pour éviter les erreurs grossières lors de la génération de liens à la main. Et puis, ces objets ne pourront jamais avoir de contenu puisqu’il n’existe pas d’objet avec cette empreinte, et donc toute tentative d’en forcer un échouera à la vérification d’intégrité.

On peut imaginer des raccourcis tels que 571abe, faceb00k ou 90091e

Dans sylabe, la restriction est faite lors du nettoyage des variables crlink, crlsrc, crldst, crlmet, prtobj, unprtobj, supobj, forcesupobj, entuid et lnkfltobj. Il est tout à fait envisageable pour certaines variables d’accepter une taille très faible. Par contre, toutes les variables devant contenir une entité, un lien complet ou un objet à (dé)protéger ou supprimer, il n’est pas nécessaire de réduire la taille de variable attendu. On peut donc alléger le test pour les variables crlsrc, crldst et crlmet. Un minimum de 4 est raisonnable.

La diffusion de la nouvelle version avec ces icônes nébulisées doit attendre que les-dites icônes soient hébergées par bachue afin que toutes les instances de sylabe puisse se mettre à jour.

Avancement

La cryptographie vient d’être corrigée dans la librairie nebule en php. Elle est de nouveau complètement opérationnelle. Plusieurs essais ont été notamment réalisés sur le même objet qui a été protégé/déprotégé plusieurs fois de suite : ça marche.
Il faut encore corriger l’implémentation de référence de nebule en bash, mais ça ne devrait pas poser de problème.
De plus, le code a été complété pour pouvoir déprotéger un objet soit depuis l’objet en clair soit depuis l’objet chiffré.

Dans la continuité du déchiffrement d’objet, il est maintenant possible d’afficher en ligne d’un objet chiffré avec donc le déchiffrement à la volé. Il faut bien sûr déverrouiller l’entité et avoir accès à la clé de session de l’objet. Cela se traduit par la possibilité de voir directement dans sylabe, dans le mode aff, certains objets chiffrés. Son concernés les images jpeg et png, les fichiers audio mp3 et ogg, les textes brutes et les clés RSA.
C’est étonnant à voir dans le mode lnk puisque l’objet protégé apparaît rouge dans les liens puisqu’il a été effacé, mais il s’affiche quand même en haut des liens!

Un début de support existe pour les fichiers mp3 et ogg bien qu’il y ai encore un problème de définition du type mime lors de l’envoi d’un nouveau fichier de ce type.

Installation sur un nouveau serveur

Une nouvelle page vient d’être créé dans la ligne directe de l’article Création d’une nouvelle entité, c’est la page Installation visible sur la partie gauche du blog.

Elle est encore en cours de rédaction!

Cette page décrit la mise en place d’une nouvelle instance de sylabe sur un serveur. C’est typiquement l’installation d’un serveur personnel à la maison.

Pour l’instant, c’est une documentation restreinte à Debian 7.0 et Apache 2.2.

Avancement

Pas encore de correction pour la crypto, mais la page de base index.php supporte maintenant l’absence du fichier a. Sans fichier a, elle s’affiche sans basculer sur une autre interface comme sylabe. En clair, si on ne demande pas explicitement l’affichage de sylabe sur un serveur web, alors on a par défaut la page de bootstrap qui s’affiche.

Dans le même temps, un petit serveur à été monté pour les tests de réplication de codes. Il s’appelle echo et est visible à l’adresse http://echo.nebule.fr/. Et justement, il affiche par défaut la page de bootstrap :

shot-2014-01-10_00-25-13

Et oui, là c’est nebule et pas encore sylabe.

Interopérabilité du chiffrement – suite

Suite à un problème dans le déchiffrement dans sylabe d’objets chiffrés via la commande openssl, et vice versa, la diffusion des nouvelles versions de la librairie de nebule en php avait été suspendu.

Le problème ayant été trouvé, la diffusion va pouvoir reprendre.

Les corrections qui vont être apportées à sylabe vont casser les objets précédemment chiffrés à la fois dans sylabe et dans l’implémentation bash de nebule.

Voir la description du problème de OpenSSL et la cryptographie, et la résolution OpenSSL et la cryptographie – suite.

Avancement

Je n’ai pas eu le temps de corriger les problèmes de crypto.

Mais j’ai avancé un peu sur la centralisation des fonctions très bas niveau d’accès aux objets et liens. Tout ce passe dans des fichiers aujourd’hui mais rien n’interdit que cela puisse être intégré dans une base de données ou un autre système de stockage. Ça n’apporte rien pour le moment mais c’est plus propre et cela prépare potentiellement des dérivés de sylabe sur des machines spécifiques.

Création d’une nouvelle entité

La création d’un nouvelle entité depuis rien se fait en plusieurs étapes.

Tout n’est pas encore fonctionnel, la procédure sera simplifiée par la suite.

Serveur web

Il faut créer un espace de stockage pour le site web qui va recevoir le code de sylabe. Typiquement c’est un site virtuel dans Apache2.

La configuration actuelle nécessaire à sylabe (ça pourra changer) :

<VirtualHost *:80>
        ServerName stephane.nebule.fr
        ServerAdmin webmaster@starend.org
        DocumentRoot /www/stephane.nebule.fr
        <Directory /www/stephane.nebule.fr/>
                AllowOverride None
                Options -Indexes
                <limit POST>
                        allow from all
                </limit>
                <limit GET>
                        allow from all
                </limit>
        </Directory>
	AddDefaultCharset utf-8
	AddCharset UTF-8 .utf8
        ErrorLog /var/log/apache2/nebule.org_error.log
        LogLevel info
        CustomLog "|/usr/bin/logger" combined
        CustomLog /var/log/apache2/nebule.org_access.log combined
        ServerSignature Off
</VirtualHost>
<VirtualHost *:443>
        ServerName stephane.nebule.fr
        ServerAdmin webmaster@starend.org
        DocumentRoot /www/stephane.nebule.fr/
        SSLEngine On
        <Directory /www/stephane.nebule.fr/>
                AllowOverride None
                Options -Indexes
                <limit POST>
                        allow from all
                </limit>
                <limit GET>
                        allow from all
                </limit>
        </Directory>
	AddDefaultCharset utf-8
	AddCharset UTF-8 .utf8
        ErrorLog /var/log/apache2/nebule.org_error.log
        LogLevel info
        CustomLog "|/usr/bin/logger" combined
        CustomLog /var/log/apache2/nebule.org_access.log combined
        ServerSignature Off
</VirtualHost>

Il faut ensuite copier différents fichiers dans le dossier /www/stephane.nebule.fr/ :

  1. index.php – Le chargeur de pages web. Ce fichier est disponible ici.
  2. sylabe.php – Le programme sylabe. Ce fichier est disponible iciPas à jour !!!
  3. lib_nebule.php – La librairie des fonctions de nebule sous-jacente à sylabe. Ce fichier est disponible iciPas à jour !!!
  4. env_sylabe.php – L’environnement spécifique au site web. Ce fichier est disponible ici.

A terme, il est prévu que seul le fichier index.php soit suffisant pour une nouvelle installation. Tout le reste sera nébulisé.

Créer les fichiers et dossiers par défaut :

  1. Dossier o – Va contenir tous les objets.
  2. Dossier l – Va contenir tous les liens.
  3. Fichier a qui contient sylabe.php – Indique le programme à charger par défaut.
  4. Fichier c – Contient l’URL du serveur.

Donner le droit au démon Apache2 d’écrire dans o et l.

Création de l’entité autonome

Pour pouvoir créer une entité, il faut qu’un certain nombre de variables soient positionnées. Elles doivent être ajoutées dans le fichier env_sylabe.php :

$nebule_permitcreatelink = true;
$nebule_permitcreateobj = true;
$nebule_permitcreatentity = true;
$nebule_permitwrite = true;
$sylabe_permitpubcreatentity = true;

Ouvrir la page http://mon.site.net/sylabe.php?mod=ent . Dans la partie « Créer une entité :« , renseigner les champs avec au minimum un mot de passe. Il est préférable de donner un nom à l’entité. Valider.

En haut de la page se trouve le compte rendu de création de la nouvelle entité. Si tout se passe bien, il y a à la fin une ligne qui ressemble à « Basculer vers la nouvelle entité MonNom (déconnexion)« . Cliquer sur le lien.

Cliquer sur le lien rouge « Déverrouiller » tout en haut de la page.

Saisir le mot de passe et valider. Vous devez maintenant avoir le haut de page en vert.

Permanence de l’entité

Pour dire au serveur que ici c’est chez vous, il faut ajouter un fichier e contenant l’ID de votre entité. Ainsi à chaque connexion, c’est votre entité qui sera affichée par défaut.

C’est terminé!