Bulles d’aide

J’ai trouvé un moyen très intéressant de placer l’aide en ligne non pas dans le contenu mais sous forme de bulles d’aide :

http://webbricks.org/bricks/bubulle/

C’est disponible sous licence « Creative Commons – Paternité 2.0 France – http://creativecommons.org/licenses/by/2.0/fr/« 

Je l’intègre au code dès que j’aurais du temps.

Merci à l’auteur Erwan Lefèvre pour le code et son partage :-)

Avancement

Le processus de gestion de l’entité bachue est toujours en cours de mise en place. Mais j’ai pu manipuler l’entité en environnement contrôlé. Les liens des dernières versions de sylabe (20140304) et de la librairie nebule (20140302) ont pu être signés par bachue.

Depuis ce matin, nous avons en ligne les toutes dernières versions :
– bootstrap : ae4d4a9acc8a754f4862c7ddf252079ee5fc9cc4b2fc878f0adecc3c37aea72f(1)
– sylabe : 0a65036105b001b926d1d0336aa4de5fde1d8a476f325f9832e524d914e7e465
– librairie nebule : 6045d142eb96144333cc99c6f1d7c2499fb25e7cf3e3b3aa7cea306d70d2eb15

La variable $nebule_io_maxdata a nécessité une augmentation de sa valeur. L’objet du code sylabe fait plus que 100000octets. Sans cette modification, le téléchargement marche bien mais l’affichage est tronqué. Ce sera répercuté dans le code de la librairie plus tard.

Les recherches de mises à jours de sylabe ne se déroulent pas correctement. Il y a visiblement un problème dans la recherche récursive des mises à jours (résolution du graphe de mise à jour). A priori, on atteint la limite permise pour le parcours récursif, fixé à 100. En regardant le fonctionnement du code, cette limite est interprétée aujourd’hui comme une limite du nombre d’objets parcourus et non du nombre de niveau traversé. Modifier ce comportement est un vrai sujet de questionnement sur la sûreté de fonctionnement de cette partie de code.
Il serait possible de garder ce mode de fonctionnement mais de permettre le fonctionnement correcte de la mise à jour même si on tape la limite. Dans certains cas extrêmes, une mise à jour pourra nécessiter d’être rejouée plusieurs fois pour obtenir les toutes dernières versions des codes.
Il est possible de réellement gérer le nombre de niveaux traversés. Mais si un niveau contient un très grand nombres de liens de mises à jours valides, on a une forme de déni de service.

(1) Le bootstrap ne doit pas être téléchargé par le navigateur. Celui-ci interprète la partie du code html qui lui semble valide et n’affiche pas le code. Il faut utiliser à la place un autre outil comme wget.

Avancement

Le mode d’affichage log a été complètement passé en revue pour ajouter la traduction des textes. Mais tous les textes ne sont pas encore traduits puisque cela se fait dans la partie spécifique à la traduction. Un grand nombre de textes sont déjà en attente de traduction vers l’anglais et l’espagnol.

Un sélecteur de chargement a été intégré à sylabe et au bootstrap pour permettre de choisir la version de librairie et la version de sylabe que l’on veut charger. Cela sert un peu au développement. Par contre, cela peut être très utile en cas de mise à jour partiel qui provoquerait une impossibilité d’accéder à sylabe, par exemple avec une fonction manquante. Dans les URL générées, cela se traduit par l’ajout des options boostrap_load= et bootstrap_lib=. La variable $sylabe_permitaskbootstrap permet d’ajouter ou non ces options automatiquement. Le fonctionnement n’est que partiel puisque toutes les URL ne sont pas corrigées.
Mais ce mécanisme à un côté pervers, il permet de la même façon de charger un autre code et une autre librairie, ou de faire appel à des versions plus anciennes et potentiellement buggées. La variable mis en place ne protège pas d’une insertion manuelle des options. Il faut mettre en place un mécanisme directement dans le bootstrap pour désactiver par défaut les options.

Avancement

Le transfert de protection d’un objet vers une autre entité est fonctionnel. Il doit être vérifié en situation réelle.

Ce transfert commence simplement en la récupération de la clé de session chiffrée avec une clé privée de l’entité courante. Ce pourrait être à terme toute entité que l’on contrôle. La clé de session est de nouveau chiffrée avec la clé privé de l’entité destinataire. Un lien de chiffrement asymétrique marque cette étape et surtout permet à l’entité destinataire de détecter cette clé de session à son usage, et donc de déchiffrer l’objet protégé.

La mise en place du processus de signature et diffusion via bachue n’est pas encore terminé. Cette évolution du code n’est donc pas encore publiquement disponible.

Avancement

Peu d’avancées ce week-end sur le code. Il y a eu quelques traductions et améliorations dans l’affichage du mode aff.

La mise en place du processus de signature et diffusion via bachue n’est pas encore terminé.

Depuis hier soir, un menu permet de choisir une entité à qui on veut transmettre un objet protégé. La mécanique derrière, qui ne marche pas encore, chiffrera la clé de session avec la clé privé de l’entité destinataire. A suivre…

Avancement

L’entité bachue diffuse depuis ce soir la version de sylabe du 18/02/2014.

La partie du code gérant la traduction de texte commence a être conséquente alors que même pas un quart du code ne l’utilise pour l’affichage des textes. Les fonctions de traduction et d’affichage de l’aide en ligne sont déplacées vers la toute fin du code. L’ensemble est un peu plus lisible…

Avancement

Quelques modifications du code ce soir dans le mode aff, mais pas encore rendu public. L’entité bachue n’est pas encore pleinement opérationnelle pour diffuser les mises à jours du code de sylabe au fur et à mesure de ses évolutions.
Dans les modifications, il y a notamment plusieurs parties qui ont été adaptées à la traduction automatique. La vue aff est maintenant à moitié traduite.

Toutes les entités du serveur publique ont été mises à jours vers sylabe en version nébulisée. La manÅ“uvre ne s’est pas déroulée de façon aussi automatisée que prévu. Le code du bootstrap n’a semble-t-il pas réussit à récupérer les versions les plus à jour de sylabe que propose bachue. Il a fallu à chaque fois faire suivre les liens de mise à jour manuellement et synchroniser les liens jusqu’au dernier lien de mise à jour. Il faut maintenant trouver d’où vient le problème.. Bref, ça marche mais ce n’est pas pratique…

Les entités à jour :
http://stephane.nebule.fr/
http://zulu.nebule.fr/

Avancement

La mise en place du bootstrap permettant l’installation de sylabe nébulisé a posé quelques problèmes. La tentative de mise à jour de l’entité zulu n’a pas fonctionné immédiatement.

Le code du bootstrap intégrait des fonctions d’inclusion d’objets php, sylabe et la librairie nebule, via le chargement de pages web, via http donc. Les codes php inclus comme pages web étant restreint au serveur local pour des problèmes de sécurité. Le code de l’inclusion étant :
include("$bootstrap_loc_entite/o/$bootstrap_load");
Avec $bootstrap_loc_entite quelque chose comme http://localhost.
Or, sur le serveur hébergeant zulu, la version de php est un peu plus ancienne. Et cette ancienne version ne supporte visiblement pas très bien les inclusion via http. Cela aurait pût être bloquant puisque cet inclusion par http avait été rendu nécessaire parce que l’interpréteur php ne supportait pas l’inclusion de fichiers sans extensions .php. Mais, heureusement, la version plus ancienne de php supporte elle l’inclusion de fichiers sans extension. Donc ça marche avec un code de ce genre :
$v = explode('.',PHP_VERSION);
$bootstrap_phpversion=($v[0] * 10000 + $v[1] * 100 + $v[2]);
if($bootstrap_phpversion < 50500) include("o/$bootstrap_load"); else include("$bootstrap_loc_entite/o/$bootstrap_load");

Il reste une petite difficulté, je ne sais pas à partir de quelle version de php ce changement de comportement s’est fait. J’ai donc placé le seuil de bascule de comportement à la version 5.5.0.

Donc, Pour l’instant tout fonctionne bien avec sylabe en version nébulisée.
Toutes les entités du serveur vont basculer progressivement pour profiter enfin des nouvelles versions.

L’entité bachue est accessible sur Internet mais elle n’est pas vraiment active. Le serveur public n’héberge qu’une copie. L’entité est déverrouillée sur une station hors ligne afin de signer les nouvelles versions de sylabe et de la librairie nebule. Une station miroir en ligne mais mieux protégée de l’Internet est en cours de mise en place. Elle va faciliter la synchronisation des liens et objets de la station isolée (qui le restera) vers le serveur miroir sur Internet accessible à l’adresse http://bachue.nebule.org/ .
Une fois le processus complet en place, la diffusion des mises à jours de sylabe sera complète :

20140216 sync bachue

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

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…

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.

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.

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.

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.