Tout (fr)
-
Microcontrôleur de DEL basé sur ESP8266
(Dépêches LinuxFR)
ANAVI Light Controller est une nouvelle carte matérielle libre pour contrôler un ruban de DEL (LED strip RGB). Ce projet est libre et conçu avec KiCAD, et disponible à l’achat à partir de 25 € jusqu’au 27 juin 2018.
La carte peut être utilisée de façon autonome avec le logiciel embarqué de démo en se connectant sur une page Web (MQTT d’Eclipse Paho). Mais passer par Internet via un broker MQTT public n’est peut‐être pas idéal pour tous, donc une autre solution est tout aussi envisageable via une passerelle locale (et optionnellement accessible à distance).Naturellement, ce microcontrôleur (MCU) ESP8266 peut être aussi reprogrammé, c’est une alternative intéressante aux populaires Arduino car un bloc Wi‐Fi (pas libre ?) est intégré au MCU.
- lien n°1 : Commander l’ANAVI Light Controller sur Crowd Supply
- lien n°2 : Vidéo de démo avec Mozilla Web Things
Pour ma part, j’ai eu la chance de tester le produit, ça fait le job comme on dit ! Mais je vous invite à lire la revue en français sur le blog Framboise314.
Pour utiliser une passerelle locale, il faut préalablement installer Mozilla IoT Gateway sur Raspberry Pi et reprogrammer le MCU avec mon implémentation de RGBLamp qui utilise l’API WebThings de Mozilla se connectant ensuite via mDNS, HTTP, REST (voir vidéo)…
Pour ceux qui ne veulent pas faire un pas hors de leur système d’exploitation préféré, considérez le précédent produit de Léon pour Raspberry Pi.
Finalement, si vous utilisez Mozilla IoT, les retours sont bienvenus.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Cartographie et images de rues : Mapillary et OpenStreetCam
(Dépêches LinuxFR)
Vous connaissez probablement déjà OpenStreetMap, la base de données cartographique libre. Mais vous connaissez sans doute aussi des concurrents qui proposent en plus des cartes d’autres services, comme les images aériennes, et depuis une dizaine d’années vous avez peut‐être pris l’habitude des images prises directement dans les rues : StreetView chez Google, StreetSide chez Microsoft…
Des alternatives libres se mettent en place, et c’est ce dont nous allons parler : OpenStreetCam, né en 2013, et Mapillary. Les deux initiatives sont ouvertes, tout le monde peut participer facilement via une application pour mobile.
Ces solutions permettent une alternative libre pour les utilisateurs et sont une aide très précieuse pour les contributeurs d’OpenStreetMap.
- lien n°1 : Mapillary
- lien n°2 : OpenStreetCam
- lien n°3 : Discussion et comparaison entre Mapillary et OpenStreetCam sur le projet GitHub d’OpenStreetCam
- lien n°4 : OpenStreetCam sur le wiki d’OpenStreetMap
- lien n°5 : Mapillary sur le wiki d’OpenStreetMap
Sommaire
Réunir une telle collection d’images aurait pu paraître impossible il y a peu, mais l’avènement des smartphones change la donne : cartographier une rue peut être aussi simple que de fixer son téléphone sur son vélo, sa voiture, ou le tenir à la main en marchant. Une application s’occupe de prendre des photos (géolocalisées, bien sûr) périodiquement et de les envoyer vers les serveurs qui s’occupent du reste.
Dur d’atteindre la qualité des images panoramiques à 360° des concurrents, mais, à l’inverse, permettre à tout le monde de contribuer permet aussi de couvrir les zones inaccessibles en voiture.
En cinq ans, Mapillary a collecté 179 millions d’images (après avoir passé les 100 millions il y a moins d’un an), soit plus de trois millions de kilomètres couverts. La couverture OpenStreetCam n’est pas encore aussi bonne, mais c’est quand même plus de 50 millions d’images, et la croissance est très forte de ce côté aussi (multiplication par quatre depuis novembre 2016).
À quoi tout ceci peut‐il servir ?
- Pour tout le monde : comme la concurrence, à savoir à quoi ressemble un endroit sans y être allé, à planifier un itinéraire… On peut accéder aux images depuis un navigateur via le site des deux projets. Mapillary est intégré à l’application libre Android OsmAnd depuis la version 2.7 de juillet 2017 (disponible sur le dépôt F-Droid sous le nom OsmAnd~). On peut maintenant visualiser les séquences Mapillary directement sur la carte :
Ou plus simplement, une section « photos en ligne » est maintenant disponible quand on examine les détails d’un lieu :
- Pour les contributeurs OpenStreetMap, c’est un outil précieux pour la cartographie de fauteuil, c’est‐à‐dire la possibilité d’éditer la carte OpenStreetMap sans être sur le lieu qu’on édite et éventuellement sans avoir fait de reconnaissance au préalable. L’éditeur ID en ligne sur https://openstreetmap.org permettait déjà d’éditer sur fond d’images aériennes ou de plan de cadastre par exemple. On peut maintenant visualiser les images de Mapillary directement depuis l’éditeur et, mieux encore, voir directement les panneaux de signalisation détectés par Mapillary en analysant les images.
Mapillary
Le principe de Mapillary est de récolter puis d’analyser un maximum d’images. L’analyse d’image permet de repérer les panneaux, feux tricolores, et aussi d’autres éléments comme les voitures, garages à vélo, verdure, poubelles… Ces données sont utilisables librement par OpenStreetMap, et l’entreprise derrière Mapillary monnaye ces données.
Voici par exemple ce que Mapillary détecte place du Trocadéro :
Ces données sont utilisables directement depuis les éditeurs OpenStreetMap ID (éditeur par défaut depuis le site Web) et JOSM (client lourd). Lire l’article de blog et les vidéos associées pour les détails. Les éléments de carte peuvent être associés à une image Mapillary via l’étiquette
mapillary=…
.Mapillary est également intégré dans l’application Android OsmAnd.
OpenStreetCam
OpenStreetCam est mené par Telenav, qui s’appuie sur OpenStreetMap pour les outils de navigation qu’elle commercialise.
Une originalité d’OpenStreetCam est sa manière d’encourager les contributeurs par un système de points : on gagne des points en contribuant des images, et d’autant plus de points qu’on couvre des zones non couvertes.
OpenStreetCam est intégré dans l’éditeur JOSM, mais pas (encore ?) dans ID ni OsmAnd.
Historiquement, le projet s’est lancé sous le nom OpenStreetView pour reprendre le nom de domaine d’un projet lancé en 2009 qui n’avait pas réussi à devenir populaire. Il a été renommé plus tard en OpenStreetCam pour éviter la confusion possible avec la solution de Google.
Est‐ce vraiment libre ?
On lit çà et là sur le Web des controverses comme quoi l’une des solutions est commerciale et l’autre libre. En réalité, les deux solutions sont supportées par des entités commerciales (Mapillary AB est une entreprise basée en Suède centrée sur le service mapillary.com, et OpenStreetCam est mené par l’entreprise Telenav qui vend des systèmes de navigation pour voiture qui utilisent OpenStreetMap). Et les deux solutions sont « en grande partie libre ».
Les deux services distribuent les images sous licence CC-BY-SA, et dans les deux cas les contributeurs donnent au service une licence qui lui permet d’utiliser les images sans restrictions.
Chez OpenStreetCam, le code du site Web et des applications pour Android et pour iOS sont libres (mais au moins l’application Android a des dépendances non libres qui empêchent, entre autres, son inclusion dans F-Droid). Mapillary fournit plusieurs logiciels libres, par exemple mapillary-js, le code qui permet l’affichage des images sur leur site Web, mais l’application pour Android et iOS n’est pas libre (elle pourrait le devenir prochainement).
Pour Mapillary, il faut distinguer les conditions d’utilisation du service et la licence des images. Les conditions pour le service ne permettent pas l’usage commercial hors contrat avec lui (d’après la partie 1.2 de ses conditions d’utilisations) et limitent par défaut les téléchargements à 50 000. La licence des images est la licence CC-by-SA et il est possible de re‐licencier les travaux dérivés dans le cadre d’OpenStreetMap selon les conditions de la fondation OpenStreetMap. En d’autres termes, il y a des restrictions sur le téléchargement d’images, mais une fois les images téléchargées, elles sont utilisables librement. Les images sont libres, mais le service n’est pas entièrement gratuit (250 €/mois pour le pack « professional », par exemple).
Pour un comparatif des conditions des deux services (écrite par un employé Mapillary), voir par exemple ici.
Et la pérennité ?
L’ouverture est souvent citée comme gage de pérennité. Si l’auteur d’un logiciel libre décide de passer à autre chose, quelqu’un d’autre peut, au moins en théorie, prendre le relai.
Pour OpenStreetCam et Mapillary, la situation est un peu plus compliquée. Le scénario catastrophe où l’un des deux arrête son activité ou se fait racheter par une entreprise qui décide d’arrêter de diffuser les images sous licence libre est tout à fait possible. Pour qu’une autre entité puisse reprendre la suite, il faut que deux conditions soient réunies : que les images soient réutilisables (c’est le cas avec la licence CC-BY-SA), et que quelqu’un ait gardé les images avant qu’elles ne disparaissent. C’est le deuxième point qui est problématique : les bases d’images sont colossales (plus de 500 téraoctets pour Mapillary, un peu moins pour OpenStreetCam, mais fort taux de croissance dans les deux cas) donc maintenir un stockage correctement fiabilisé pour un miroir aurait un coût de l’ordre de la centaine de milliers d’euros par an (en calcul de coin de table…). Ajouté à la limite de téléchargement pour Mapillary, maintenir un miroir n’est clairement pas à la porté du premier venu (même si en comparaison une fondation comme celle de Wikipédia gère un budget autrement plus élevé). Côté OpenStreetCam, certains en ont discuté, mais toujours pas de miroir non plus.
On peut espérer que les deux services ne fermeront pas en même temps, donc une solution pour les contributeurs pour pérenniser leurs images est d’envoyer les images aux deux, mais ce n’est pas faisable directement depuis les applications pour mobile. Certains contributeurs conservent également une copie de leurs images localement, « au cas où ».
Comment contribuer ?
Contribuer est très facile si vous avez un smartphone. Un contributeur peut installer l’application et prendre des images de sa rue à pied et sans matériel supplémentaire en quelques minutes, ou se fixer des objectifs plus ambitieux comme certains contributeurs qui s’imposent de dépasser le million d’images contribuées en un mois. Pour contribuer en voiture ou à vélo, il est recommandé d’avoir un support, Mapillary en envoie gratuitement sur demande aux contributeurs si besoin. Toute la richesse de ces bases d’images vient de la diversité des contributeurs, donc de la diversité des images qu’elles contiennent.
Alors, vous avez commencé ? Qu’attendez‐vous ? ;-)
-
RyDroid Web Proxy (1.0) : outil de capture de sessions Web
(Dépêches LinuxFR)
Pendant l’année scolaire 2016-2017, j’étais en dernière année d’école d’ingénieurs
(l’ENSICAEN). J’ai donc fait un stage de fin d’études (à Orange, en France), avec le rapport qui va avec. J’ai fait un logiciel libre qui a été publié. En conséquence, il m’a paru logique de publier mon rapport, après avoir enlevé quelques parties (remerciements, présentation du collectif de production, conclusion personnelle, etc.) et fait de petites retouches pour qu’il soit cohérent avec ce nouveau format et la visibilité qui va avec. Cela permet de présenter plus largement ce que j’ai fait, tout en expliquant le pourquoi et comment, ce qui pourrait servir à d’autres personnes.- lien n°1 : Présentation de RyDroid Web Proxy sur mon site Web
- lien n°2 : Dépôt Git sur l’instance GitLab d’OW2
- lien n°3 : Dépôt Git sur GitLab.com
- lien n°4 : Site Web du projet CLIF
- lien n°5 : Paquet Debian
Sommaire
- Le sujet
- État de l’art
-
La réalisation du projet
- Les outils utilisés
-
Le résultat
- Comparaison avec un proxy classique
- « Proxifier » une URL
- Récupérer une ressource Web
- La gestion du HTML
- La gestion du CSS
- La gestion du HTTP
- Gérer les formulaires Web
- La gestion du JavaScript
- La configuration
- Enregistrement des données
- Conversion des données
- L’API Web
- L’interface graphique
- L’installation facile
- Le paquet Debian
- Possibilités pour améliorer les performances
- Et après ?
- Pourquoi ce nom ?
- Conclusion
Le sujet
Celui qui a été mon tuteur de stage participe activement au développement d'un outil de test de performance à travers le réseau, qui s'appelle CLIF et qui est présenté plus loin dans cet article. Le cas le plus courant est le test pour le web, avec le protocole HTTP et sa version chiffrée HTTPS. Pour faciliter l'usage pour ce cas commun, il faut que créer un scénario de test pour ce dernier soit aisé.
Il existait déjà une solution : un proxy pouvait être configuré dans le navigateur web pour intercepter les flux réseaux et ainsi enregistrer les informations pertinentes dans le format adéquat (basé sur XML) pour rejouer une session web avec CLIF. Configurer un proxy dans un navigateur web peut être difficile pour certaines personnes ou perçu comme tel. De plus, le proxy ne gère pas le HTTPS (qui est de plus en plus courant), bien qu'il aurait été possible d'en ajouter la gestion, cela aurait nécessité d'ajouter un certificat dans le navigateur web. Mon tuteur voulait un outil plus simple à utiliser et qui gèrent le HTTPS, d'où ce stage.
Comme CLIF, l'outil réalisé devait être du logiciel libre sous licence GNU LGPL en version 3.
État de l’art
Outils de test de charge
La liste n'est pas exhaustive, mais il y a un article sur Wikipédia en anglais si on en désire une qui cherche à l'être. Cette partie a pour intérêt de présenter rapidement des outils cités plus loin dans l'article présent et de mettre en perspective le programme de mon tuteur de stage.
Apache JMeter
JMeter est un logiciel libre de la fondation Apache. Il est très populaire et packagé par au moins Debian et Trisquel GNU/Linux. Pour définir un test de charge, il faut lui soumettre un fichier XML. Il est extensible avec des modules complémentaires.
Gatling
Gatling est un logiciel de test de charge, avec un focus sur les applications web. Il est sous licence Apache 2.0, donc libre. Il est écrit en Scala. Il est packagé par au moins Debian et Trisquel GNU/Linux.
Selenium
Selenium est un logiciel pour automatiser la navigation web à travers un navigateur web. Il peut donc servir à faire des tests, mais aussi automatiser des tâches administratives se faisant via le Web. Il est libre via la licence Apache 2.0.
Tsung
Tsung est un logiciel de test de charge distribué. Il gère différents protocoles (dont HTTP, XMPP, LDAP, et MQTT). Il est libre sous licence GNU GPL version 2.0. Le langage de programmation utilisé est Erlang. Il prend en entrée un fichier XML. Il est disponible sous forme de paquet dans au moins Trisquel GNU/Linux et Debian.
Locust
Locust a la particularité d'utiliser des scripts en Python pour définir le comportement des utilisateurs virtuels, alors que les autres outils utilisent généralement du XML et/ou une interface graphique. C'est un logiciel libre sous licence "MIT".
The Grinder
The Grinder est un framework pour le test de charge. Il est adapté pour le test distribué sur plusieurs machines. Il est libre et écrit en langage Java.
Taurus
Taurus a pour but de cacher la complexité des tests fonctionnels et de performance. Il fait cela en étant une enveloppe pour JMeter, Gatling, Locust, Grinder, et Selenium WebDriver. Il prend en entrée un fichier au format YAML. C'est un logiciel libre sous licence Apache 2.0.
CLIF
CLIF est un logiciel libre initié, piloté, et maintenu par celui qui a été mon tuteur de stage (Bruno Dillenseger). C'est un acronyme récursif pour "CLIF is a Load Injection Framework". Ce projet est hébergé par le consortium OW2. Il est écrit dans le langage de programmation Java. Il a une interface en ligne de commande et une interface graphique sous forme de module complémentaire pour Eclipse. Il propose plusieurs manières de définir un test de charge, comme cela est expliqué dans une sous-sous-section (de cet article) partiellement dédiée. Il n'y a pas de paquet Debian, notamment à cause des nombreuses dépendances et d'au moins une dont les sources n'auraient pas été retrouvées.
CLIF permet de déployer des injecteurs de requêtes répartis pour mesurer les temps de réponse. Il permet également de déployer des sondes afin de mesurer la consommation des ressources (processeur, réseau, mémoire, disque, etc.). Son environnement de scénario ISAC offre une façon formelle de définir les scénarios sous forme de comportements d'utilisateurs virtuels et d'une spécification du nombre d'utilisateurs virtuels actifs de chaque comportement au cours du temps. CLIF a été spécialement conçu pour être rapidement adaptable à toute sorte de cas de test (un assistant Eclipse permet de définir ses propres modules complémentaires pour intégrer de nouveaux protocoles ou de nouveaux jeux de données), y compris des hauts niveaux de charge (comme des centaines d'injecteurs et des millions d'utilisateurs virtuels). En pratique, CLIF est utilisé pour des tests de tenue en charge, mais également pour des tests fonctionnels, des tests en intégration continue et de la supervision de qualité d'expérience utilisateur, notamment via son module complémentaire pour Jenkins.
Le code source est sur l'instance GitLab de OW2, à part le module complémentaire pour Jenkins qui est sur GitHub. CLIF est aussi disponible sur la forge historique de OW2 (qui propose des versions compilées).
Loads et Molotov
Loads et Molotov sont libres et écrits en langage Python. Ils permettent d'écrire des tests unitaires. Loads est développé et testé sur Python 2.6 et 2.7, tandis que Molotov nécessite Python 3.5 ou plus.
HPE LoadRunner
HPE LoadRunner est un logiciel privateur de test de charge, qui ne fonctionne complètement que sous Microsoft Windows. Il peut être étendu via des formats d'autres outils (comme JMeter) et des scripts dans différents langages (comme C et Java). Sa première version date de l'an 2000, il est depuis toujours amélioré, ce qu'il lui a permis d'acquérir une place importante dans le domaine du test de charge.
megaLOAD
megaLOAD est présenté comme étant une plateforme en ligne de test de charge qui serait facile à utiliser et capable de monter à l'échelle. Il aurait été spécialement créé pour tester les services de type back-end ayant vocation à être très robustes. Il est fait par Erlang Solutions. Il gère HTTP et serait suffisamment extensible pour gérer n'importe quel protocole. Il serait possible de l'utiliser via un navigateur web et/ou une interface de programmation RESTful. Il est disponible sur AWS (Amazon Web Services).
Siege
Siege est un outil libre pour tester la capacité de charge des implémentations des protocoles HTTP(S) (version 1.0 et 1.1) et FTP. Il est écrit en langage C et fonctionne sur divers systèmes d'exploitation POSIX (comme GNU/Linux et des BSD récents, mais pas Windows). Il est libre sous la licence GPL en version 3.0.
Outils de capture d’utilisation Internet
Différentes organisations proposent des services web pour l'injection de charge. Certaines d'entre elles proposent un outil pour facilement capturer une session d'usage du réseau, ce qui permet ensuite de la rejouer facilement.
On pourrait naïvement penser que tcpdump, Wireshark, ou Scapy sont de bons candidats sans rien faire. Ce serait vrai si les communications passaient toutes, ou au moins une vaste majorité, en clair sur les réseaux et que cela n'était pas amené à changer. En effet, elles sont de plus en plus chiffrées (avec une accélération depuis 2013 suite aux révélations d'Edward Snowden), ce qui permet de "garantir" (par les mathématiques) la confidentialité de ce qui est chiffré (il y aura toujours un minimum de méta-données non chiffrées). Il faut donc trouver un moyen de contourner le chiffrement quand il y en a, ce que tcpdump, Wireshark, et Scapy ne font pas automatiquement. De plus, ces derniers montrent une quantité de détails techniques inutiles pour l'individu (dans notre contexte) et qui pourraient le perturber (par peur de l'inconnu et/ou difficulté à percevoir ce qui est pertinent).
NeoLoad
NeoLoad Recorder est une application qui enregistre un parcours utilisateur fait à travers un proxy. Pour cela, il crée un proxy sur la machine sur laquelle il est exécuté. Ensuite, il génère un certificat X.509 qui va servir à déchiffrer les échanges chiffrés via TLS. Puis, il démarre Firefox dans lequel il faut configurer le proxy et ajouter le certificat si on souhaite enregistrer les communications chiffrées via TLS. Après cela, il n'y a plus qu'à naviguer. Une fois que l'on veut arrêter, il faut penser à enlever le proxy (mais on s'en rendra vite compte si on oublie), et ne plus faire confiance au certificat (ce qui ne sera rappelé par aucune erreur).
Cette solution technique est problématique si on doit passer par un proxy pour accéder à un réseau sur lequel le site web à tester est accessible. Techniquement, il est écrit en Java. Les données sont enregistrées dans un format inconnu et non trivial.
HPE StormRunner Load
HPE StormRunner Load est un service distant pour faire du test de charge et en analyser les résultats. Il est basé sur du logiciel privateur et se manipule via une interface web. Pour faciliter son usage, divers outils (non libres) sont mis à disposition.
Pour rendre aisé la capture de la navigation web, il propose 2 outils : TruClient Lite et TruClient Standalone. Ils ont pour but de capturer (directement) ce qui se passe dans un navigateur web (donc sans proxy externe et sans certificat pour le HTTPS). TruClient Lite est un module complémentaire pour Chromium (et donc son principal dérivé Google Chrome), qui utilise les paramètres de proxy du navigateur web. TruClient Standalone est un logiciel (fonctionnant uniquement sur Windows) qui peut au choix se baser sur les moteurs de Firefox (Gecko), Chromium, ou Internet Explorer, mais également simuler un mobile ou une tablette (en configurant correctement la résolution du navigateur web et son agent utilisateur), il prend les contrôles sur le proxy du navigateur web. L'absence de contrôle sur le proxy est problématique si on doit passer par un proxy pour quitter un réseau interne, mais il est possible de lui indiquer un proxy après que le script soit généré. Ils enregistrent les clics sur les boutons avec leurs intitulés (même s'ils ne sont pas des liens), et se basent sur l'intitulé des boutons pour naviguer et pas sur les URLs, ce qui est pratique si les références des liens changent. Ils permettent également de rejouer (automatiquement) un script enregistré avec une visualisation graphique, cependant ils sont perdus s'ils essayent de rejouer mais que le texte du bouton n'est pas le même (par exemple à cause de la langue par défaut différente en fonction du navigateur web).
BlazeMeter
BlazeMeter est une plateforme SaaSS web. Il peut réaliser des tests de charge et montrer des statistiques (en temps réel) qui en résultent. Il propose une API web pour automatiser les tests, par exemple dans le cadre de l'intégration continue (via Jenkins ou un autre outil similaire). Il utilise divers logiciel libres (dont JMeter, Gatling, et Taurus) et gère donc leurs formats de données.
Pour simplifier les tests web, un outil de capture de session web est proposé, BlazeMeter Proxy Recorder. C'est malheureusement du logiciel privateur. On peut le tester gratuitement pendant 1 mois. Pour l'utiliser, il faut s'inscrire et l'activer. Ensuite, il faut aller dans son interface, ce qui crée un proxy (sans intervention du testeur ou de la testeuse) et un certificat X.509 (souvent appelé d'une manière réductrice certificat TLS). Pour enregistrer ce que l'on fait via un client web, il faut activer le proxy (via un simple bouton) et configurer ce dernier dans notre client web. S'il l'on souhaite que les communications chiffrées soient enregistrées, il faut ajouter un certificat qui va permettre au proxy de déchiffrer avec une de ses clés privées (au lieu d'une clé privée du service web consulté). Au fur et à mesure de la navigation (via le proxy), l'interface graphique de BlazeMeter Recorder montre ce qu'il a capturé. Pour finaliser une session, il suffit de cliquer sur un bouton (de l'interface web). On peut ensuite avoir le résultat sous divers formes (URL pour BlazeMeter, fichier JMeter, fichier pour Selenium WebDriver, ou fichier pour Taurus).
SOASTA Cloud Test
SOASTA Cloud Test est un SaaSS web pour le test de charge et l'analyse des données (en temps réel) qui en sont issues. Parmi les analyses qu'il propose, il a l'originalité de proposer une comparaison du temps de chargement et du revenu généré sur une période. Il permet de choisir où seront géographiquement les utilisateurs virtuels d'un test. Il propose une interface en 3 dimensions avec les flux réseaux qu'il génère sur une carte de la Terre, dont l'intérêt est probablement discutable, mais cela peut être pertinent pour se faire payer le service par un·e commercial·e. Il peut importer des fichiers JMeter.
Contrairement à certains de ses concurrents, son outil de capture d'usage du réseau fonctionne sur plusieurs protocoles Internet (temps des connexions TCP, DNS, TLS, HTTP, etc.). C'est une machine virtuelle (sous CentOS) qui fonctionne avec VMware Player, ce qui est très lourd (en termes de puissance de calcul, de mémoire vive, et de place dans la mémoire persistante puisque le disque de la machine virtuelle fait 15Go). Ce choix technique le réserve à des informaticien·ne·s ayant du temps ou des personnes ne voulant pas se limiter au Web.
La réalisation du projet
Les outils utilisés
Les outils pour le développement lui-même
- Système d'exploitation : Debian GNU/Linux 9 "Stretch" (qui devenu stable pendant mon stage, inclut PHP 7, et est vastement utilisé)
- Éditeur de code : GNU Emacs (parce qu'il ne nécessite pas de souris et qu'il est beaucoup plus léger qu'un environnement de développement intégré)
- Langage de programmation : PHP 7 (qui a une librairie standard fourni pour le Web, permet la déclaration de type sur tous les types non objets, et a des avantages de facilité d'installation pour les applications se basant dessus comme cela est expliqué dans la partie qui est dédiée à ce sujet)
Les outils pour gérer le développement
- Gestionnaire de versions : git ("le gestionnaire de contenu stupide" (d’après son manuel) est un logiciel libre de gestion de versions décentralisé, libre, performant, et populaire)
- Forges logicielles :
Les outils pour les tests
- Outils de tests :
- Outils de tests génériques : (pour des choses simples comme le nombre maximal et la taille maximale des lignes des fichiers)
- Outils de tests pour PHP :
- PHPMD (PHP Mess Detector) (un équivalent de PMD pour PHP, qui permet de prévenir quand le code contient de potentiels problèmes)
- PHPCDP (PHP Copy/Paste Detector) (détecte les copier/coller pour inciter à factoriser le code plutôt qu'à le dupliquer)
- PHP_CodeSniffer (pour alerter que la manière, préalablement définie, d'écrire le code n'est pas suivie)
- PHPUnit (pour les tests unitaires) (en version 5, parce que c'est la version fournie par Debian 9 "Stretch")
- Outils de tests pour JavaScript :
- Closure Compiler (qui permet notamment de vérifier la syntaxe et la cohérence des types en se basant sur des annotations au format JSDoc)
- Outils de tests pour XML :
- xmllint (du projet GNOME)
- Processeurs XSLT :
- xsltproc (du projet GNOME)
- Apache Xalan
-
Saxon XSLT (uniquement les versions libres, c'est-à-dire dans Debian 9 :
libsaxon-java
,libsaxonb-java
,libsaxonhe-java
)
- Outils de tests pour YAML :
- Intégration continue : (pour exécuter automatiquement des tests quand des modifications ont été validées)
- Jenkins, avec le plugin Travis YML (pour mettre les tests dans un fichier versionné plutôt que dans l'interface graphique)
- GitLab CI (qui utilise aussi un fichier versionné au format YAML)
Les outils « annexes »
- Automatisations diverses : make
- Génération d'une documentation : Doxygen avec Graphviz (pour les graphiques)
- Paquet Debian : devscripts et dh-make
Le résultat
Comparaison avec un proxy classique
Un proxy classique est légèrement plus dur à utiliser. En effet, il faut que l'utilisateur ou utilisatrice configure un proxy. De plus, pour les échanges chiffrés, il faut ajouter un certificat.
Néanmoins, un proxy classique a un énorme avantage, il est techniquement plus simple, puisqu'il fait moins de choses, et est donc bien plus performant. En effet, le proxy que j'ai réalisé doit détecter puis analyser entre autres le HTML et le CSS, et enfin potentiellement les modifier, ce qui nécessite une puissance de calcul non négligeable si plusieurs agents l'utilisent en même temps.
« Proxifier » une URL
Mon proxy n'est pas un proxy "classique", il change les URLs pour qu'elles pointent toutes vers lui, c'est ce que l'on peut nommer la "proxification" d'URL. En simplifiant, cela revient à ajouter un préfixe à l'URL. Techniquement le préfixe est une référence du proxy (nom de domaine, adresse IP, ou nom purement symbolique comme localhost), puis la page qui "proxifie", et enfin le ou les différents paramètres GET à passer à la page.
Il y a un paramètre obligatoire qui est l'URL de la page à "proxifier". Celui-ci peut contenir des caractères illégaux comme valeur de paramètre GET (comme un point d'interrogation "?" ou une esperluette "&"), il faut donc encoder ce paramètre au moment de la "proxification", et le décoder au moment de son usage. Cela est fait avec les fonctions PHP urlencode et urldecode (pour lesquels il existe des équivalents en JavaScript).
Il y a aussi 2 paramètres GET facultatifs. Ils ont pour nom
proxy-url
etproxy-port
et permettent d'indiquer à mon proxy d'utiliser un proxy classique (en spécifiant à minima une URL et potentiellement un numéro de port). Il y a d'autres moyens pour cela, mais ce moyen est prioritaire sur les autres. Si au moins un est indiqué, il faut le(s) propager à toutes les URLs à "proxifier".Récupérer une ressource Web
Un proxy réseau sert d’intermédiaire pour récupérer une ressource. La problématique est banale, mais nécessite néanmoins un peu de temps pour être gérée correctement.
La première approche que j'ai utilisée est d'utiliser la fonction
file_get_contents
. C'est une fonction de haut niveau qui prend en entrée obligatoire le chemin vers une ressource (du système de fichiers ou via le Web), et retourne le contenu si elle a réussi à l'obtenir. C'est très facile d'emploi, cependant elle a un gros manque : elle ne récupère pas les en-têtes HTTP, or elles peuvent être pertinentes pour rejouer une session web (ce qui pour rappel est la finalité indirecte de mon proxy). Il fallait donc proposer un autre moyen activé par défaut si disponible.Il y a une commande et une bibliothèque associée pour récupérer (entre autres) une ressource sur le Web qui est très connu et a de nombreuses options : il s'agit de curl. C'est libre et existe depuis longtemps (la première version date de 1997), ce qui explique au moins en partie qu'il y ait des fonctions pour utiliser curl dans la librairie standard de PHP. Dans les archives officielles de Debian, il est dans le paquet php-curl qui n'est pas une dépendance du paquet php, probablement pour mettre une installation minimaliste de PHP quand toute la librairie standard du langage n'est pas nécessaire.
Une application web ne se sert pas nécessairement que de l'URL pour définir (et potentiellement générer) la ressource à envoyer. En effet, une ou des en-têtes HTTP de la requête peuvent être utilisées. Il a donc fallu faire suivre les en-têtes du client web envoyés au proxy au service web "proxifié". Cela a pu être fait avec les 2 méthodes de récupération de ressources.
Certaines URLs commencent par
//
, ce qui indique qu'il faut deviner quel protocole utiliser. Le moyen employé pour gérer ce cas est de faire d'abord une requête en HTTPS (la version sécurisée de HTTP), puis renvoyer la réponse si elle est non nulle, sinon renvoyer la réponse de la requête en HTTP.Mon proxy peut nécessiter de passer par un proxy réseau non transparent pour accéder à Internet ou un autre réseau IP. C'est le cas dans un nombre non négligeables d'organisations, or certaines applications faites en interne peuvent n'être disponibles qu'en externe et le Web regorge d'exemples pour tester mon proxy. Il fallait donc que mon proxy puisse récupérer une ressource en passant par un proxy réseau non transparent. Cela a été implémenté avec les 2 méthodes de récupération de ressources et il y a plusieurs manières de configurer un proxy (paramètres HTTP GET, cookies, et fichiers INI).
La gestion du HTML
Il faut "proxifier" chaque URL d'un document HTML. Le HTML se manipule facilement via DOM et peut être parcouru avec XPath. Il parait donc assez simple de gérer le HTML. Ça l'est… dans la majorité des cas, mais quelques cas rares compliquent les choses.
Dans les cas triviaux, on peut citer (avec l'expression XPath) : des liens avec
a@href
, des images avecimg@src
, les scripts avecscript@src
, les frames avecframe@src
, des vidéos avecvideo@src
, et d'autres. Mais comme nous allons le voir, le HTML est plus compliqué que cela.Démarrons avec un cas méconnu si on a appris le HTML récemment, car notoirement obsolète : l'attribut
background
. Il permet de définir un fond avec l'URL d'une image pour un élément HTML. Pour séparer la structure de la forme, il faudrait utiliser du CSS. Mais il reste de veilles pages web et des personnes n'ayant pas mis à jour leurs connaissances, il a donc fallu gérer ce cas. Cet attribut n'est valide que sur//html/body
, mais en pratique certains sites web l'utilisent sur d'autres éléments (comme http://www.volonte-d.com/) et au moins Firefox prend en compte ce cas non standard, qu'il a fallu gérer.Poursuivons avec un cas inverse, que l'on ne connait bien que si on a des connaissances à jour : les images ! En effet, il y avait un temps où il y avait uniquement
img@src
. Cependant pour optimiser la bande passante et avoir une image matricielle d'une taille adaptée, il est maintenant possible de proposer plusieurs URLs pour différentes tailles et formats. La baliseimg
peut maintenant avoir un attributsrcset
, qui contient une ou plusieurs URLs séparées par des virgules et avec des indications de la qualité (par exemple<img srcset="img1.png 1x, img2.png 2x" />
). Il y a également la balisepicture
qui peut contenir une ou plusieurs balisessource
qui peuvent avoir un attributsrc
ousrcset
(//html/body/picture/source@srcset
a la même syntaxe que//html/body/img@src
).La naïveté peut laisser penser que les liens sont triviaux à gérer, c'est presque le cas. Les liens commençant par
http://
ethttps://
sont les plus courants et il faut les "proxifier", mais il y a d'autres cas. Tout d'abord, il n'y a pas que HTTP et HTTPS, il y a d'autres protocoles dont il peut y avoir des références sur le Web et qui ne sont pas gérés par mon proxy, le plus courant étant probablement l'historique FTP (File Transfer Protocol). De plus, il y a des liens sans protocoles pour l'attributhref
. En effet, il y a des liens d'actions (qui ne doivent pas être "proxifiés"), pour le courriel avecmailto:
, pour le téléphone avectel:
(défini dans la RFC 3966), pour le JavaScript avecjavascript:
(malgré qu'il y ait l'attribut facultatifonclick
et un événement associé en DOM 2), et pour une ressource d'un réseau pair-à-pair avec "magnet:
". Il y a également des liens avec un protocole implicite ! Ils commencent par//
et les clients web les remplacent parhttps://
ouhttp://
ou essayent l'un puis l'autre, il faut donc les "proxifier".Rediriger une page web peut se faire via HTTP, mais aussi en HTML. L'intérêt de la méthode en HTML est de pouvoir rediriger après un certain temps (en secondes) et potentiellement uniquement s'il n'y a pas de support JavaScript (en utilisant la balise
noscript
pour faire cette condition). Cela se fait avec une balisemeta
dans//html/head
(et sans autre parent) en indiquant un temps et potentiellement une URL (par exemple<meta http-equiv="refresh" content="5" />
ou<meta http-equiv="refresh" content="0; url=https://example.net/" />
). Il faut donc chercher ce genre de balise (par exemple avec/html/head/meta[lower-case(@http-equiv)='refresh' and contains(lower-case(@content), 'url=')]
en XPath 2.0), puis extraire l'URL, ensuite la "proxifier", et enfin changer la valeur de l'attribut tout en conservant le temps.Pour utiliser du CSS dans du HTML, il y a plusieurs possibilités. La méthode la plus utilisée et recommandée est de faire référence à un ou plusieurs fichiers via une balise
meta
avec un attributrel
avec la valeurstylesheet
en indiquant l'URL comme valeur de l'attributhref
. On peut également vouloir inclure du CSS dans le HTML, ce qui est une mauvaise pratique, mais elle est toujours permise par les navigateurs web. Il y a 2 moyens pour cela : la balisestyle
(/html//style[not(@type) or lower-case(@type)='text/css']
en XPath 2.0) et l'attributstyle
(/html/body[string(@style)] | /html/body//*[string(@style)]
). Il faut donc récupérer le CSS puis le "proxifier" et ensuite mettre la version "proxifiée" dans la balise.La gestion du CSS
Je n'y avais pas pensé au début, mais il peut y avoir des URLs dans du CSS. Elles peuvent par exemple servir pour définir un fond avec une image, inclure un autre fichier CSS, ou importer une police d'écriture
(depuis CSS3 avec@font-face
). Puisque le CSS sert pour la mise en page, il n'est pas négligeable, et a donc du être géré.J'ai identifié 2 situations où des URLs sont utilisées dans du CSS. La première et la plus courante est avec la "fonction"
url
en tant que valeur d'une propriété (par exemplebackground-image: url(image.png);
) Le paramètre peut contenir des espaces avant et après. De plus, il peut être entouré d'un séparateur (soit un guillemet simple soit un double guillemet, heureusement que les formes valides en ASCII sont prises en compte). Le deuxième cas est avec l'instruction@import
. Elle peut prendre directement une URL (avec les mêmes séparateurs que la "fonction"url
) (par exemple@import "style.css";
) ou via la "fonction"url
(par exemple@import url(style1.css);
).Même avec la version 7 de PHP (une version récente d'un langage de programmation orienté web), il n'y a pas de manipulateur lexical pour CSS dans la bibliothèque standard. Plutôt que d'ajouter une dépendance potentiellement non maintenue sur le long terme, j'ai écrit du code pour mon cas particulier. Cela a été motivé par le fait que CSS continue d'évoluer et qu'une avancée de ce dernier pourrait casser le fonctionnement d'un analyseur lexical. Néanmoins mon code souffre d'une limitation : il analyse le CSS ligne par ligne, or la valeur d'une propriété peut être définie sur plusieurs lignes (mais c'est peu courant notamment avec l'usage de programmes pour réduire la taille d'un fichier CSS comme clean-css et YUI Compressor). De plus, mon code ne "proxifie" pas toutes les URLs sur certaines lignes longues pour une raison inconnue. Un analyseur syntaxique de CSS pourrait être utilisé pour "proxifier" toutes les URLs (puisque mon code ne gère pas tous les cas), comme PHP-CSS-Parser de sabberworm, cssparser de Intekhab Rizvi, ou celui de Hord (pour lequel Debian a un paquet). Une option pourrait être ajoutée pour désactiver l'analyseur syntaxique au profit de mon code s'il venait à émettre une erreur fatale à cause d'un cas non géré (potentiellement nouveau) de CSS ou d'une approche moins laxiste que les navigateurs web (qui ont tendance à vouloir gérer à tout prix du code même non valide).
La gestion du HTTP
Hormis la ressource demandée par une requête HTTP, il peut y avoir au moins une URL pertinente à "proxifier" (mais cette fois à la réception d'une requête et pas en modifiant préalablement les éléments pouvant en engendrer). Un cas a été identifié : l'en-tête
Location
. Elle permet d'indiquer une nouvelle URL pour une ressource, expliqué autrement elle sert pour faire une redirection. C'est trivial à gérer si on a déjà le nécessaire pour "proxifier" une URL. En effet, chaque champ d'une requête a un intitulé et une valeur séparée par ":" et sur une seule ligne. C'est donc très simple à analyser et par extension de créer une structure de données pour le HTTP.La gestion du HTTP ne s'arrête néanmoins pas là. En effet, un serveur web répond à des requêtes HTTP, or le but de mon stage (et du projet qui en découle) est de rejouer une session web. Il faut donc à minima enregistrer les URLs demandées en extrayant chacune du paramètre GET correspondant. De plus, un serveur web ou une application peuvent répondre différemment en fonction des en-têtes HTTP (heureusement sinon aucun logiciel ne les utiliserait et elles seraient donc inutiles). Il y a donc un intérêt potentiel à les stocker (pour pouvoir reproduire exactement une session web) et en enlever certaines (que l'on peut juger superflues). Il a donc été fait en sorte de les enregistrer et des options ont été faites pour en enlever certaines.
Gérer les formulaires Web
Les formulaires web représentent un cas spécial. On pourrait naïvement penser que ce n'est qu'une question de HTML. Mais c'est légèrement plus compliqué que cela.
Pour les formulaires qui utilisent (implicitement ou explicitement) la méthode HTTP GET (
/html/body//form[not(@action) or (string(@action) and lower-case('@method')='get') or not(@method))]
en XPath 2.0), il s'agit purement de HTML. Les paramètres GET potentiellement présents dans l'URL de l'attributform@action
(qui définit à quelle URL envoyer les données du formulaire) sont ignorés, en effet ce sont les champs du formulaire qui sont passés en paramètres GET. Il faut donc créer un champ dans le formulaire (avec la baliseinput
) pour l'URL "proxifiée" et le cacher (ce qui se fait en créant un attributtype
et lui attribuant la valeurhidden
).Pour les formulaires utilisant la méthode HTTP POST (c'est l'unique autre possibilité), il faut "proxifier" l'URL de l'attribut action s'il y en a un. Une fois la requête POST reçu sur mon proxy, il faut détecter que c'est une méthode POST pour : la renvoyer en méthode POST au service "proxifié" (par défaut c'est la méthode GET qui est utilisée), ne pas essayer de "proxifier" le contenu, et ne pas renvoyer l'en-tête HTTP
Content-Length
(défini dans la section 14.13 de la RFC 2616) (ce qui peut faire échouer l'appel PHP à curl, probablement dans le cas où PHP ait encodé différemment le contenu et donc potentiellement changé la taille). Bien entendu, il faut aussi penser à enregistrer ces paramètres POST.La gestion du JavaScript
Je n'y avais pas pensé au début (alors que c'est évident quand on fait du web en 2017), mais le JavaScript peut être source de requêtes web. Il faut "proxifier" les URLs de ces requêtes, bien entendu avant qu'elles n'aient lieu. La première idée qui pourrait venir à l'esprit serait d'utiliser un analyseur syntaxique de JavaScript, ce qui serait très lourd et il en existe à priori qu'en C et C++ (comme V8 de Google qui est libre) (mais il est possible d'appeler des binaires issus de ces langages avec PHP). Heureusement il n'y a pas de moyen de faire des requêtes avec le langage uniquement (c'est-à-dire avec des mots-clés de ce dernier), il faut en effet utiliser la bibliothèque standard du JavaScript. En JavaScript, une fonction peut être redéfinie sans erreur, y compris celles de la bibliothèque standard, c'est considéré comme dangereux (à juste titre) par certains, mais cela peut être fort utile dans de rares cas, comme celui présentement décrit.
2 cas de fonctions à surcharger pour "proxifier" des URLs ont été identifiés et gérés. Dans chaque cas, il faut garder en mémoire la fonction actuelle (peut être qu'un autre script a déjà changé le comportement de base de la fonction), puis créer une nouvelle fonction qui "proxifie" le ou les arguments contenant potentiellement une ou plusieurs URLs, et enfin appeler la fonction à "proxifier" avec les arguments potentiellement modifiés, tout en retournant son résultat si elle en retourne un. Il ne reste ensuite plus qu'à surcharger, en donnant le même nom pour une fonction ou en modifiant le prototype de la classe pour une méthode d'instance (en effet le JavaScript a un système de classe par prototype qui diffère du modèle traditionnel présent par exemple en PHP et Java). Le terme "fonction" doit ici être compris comme une fonction en C ou en PHP, ce qui ne doit pas être confondu avec la notion de fonction en JavaScript, car celle-ci est bien plus large (les constructeurs et les méthodes sont aussi des fonctions et d'ailleurs défini avec le même mot-clé
function
).Le premier cas est facile à deviner, il s'agit de la fonction à laquelle on passe une URL pour une requête AJAX. C'est l'abréviation de "Asynchronous JavaScript and XML" et désigne un moyen de faire des requêtes synchrones ou asynchrones avec le langage JavaScript. Pour cela, il faut créer un objet de classe XMLHttpRequest (on passe ici sous silence partiel le cas de veilles versions d'Internet Explorer de Microsoft), ensuite définir un comportement (sous forme de fonction) pour le changement d'état (envoyé, reçu, etc.) puis utiliser sa méthode
open
, et enfin envoyer la requête avec la méthodesend
. Il suffit de "proxifier" le deuxième argument de la méthodeopen
(le premier étant pour la méthode HTTP).Le second cas est moins commun et je ne soupçonnais pas son existence. Il s'agit de l'inclusion dynamique (en JavaScript) de balise
script
avec un attributsrc
existant et avec une valeur non nulle. Cela déclenche la récupération du script (grâce à son URL issue de l'attributsrc
), puis l'exécute (ce qui permet d'éviter la fonctioneval
). Un élément DOM a une méthodesetAttribute
, il faut donc la "proxifier" quand elle est appelée sur une balisescript
et ne "proxifier" le second argument (qui correspond à la valeur de l'attribut) que quand le premier argument vaut (en étant insensible à la casse)src
(puisque cette balise peut avoir d'autres attributs commetype
).La configuration
Un certain nombre de choses est configurable. Il y a 4 catégories : le proxy pour faire des requêtes (une URL et un numéro de port), la capture de session (enregistrer ou pas, en-têtes HTTP à garder, etc.), le journal d'erreurs et d'avertissements (emplacement en tant que fichier, est-il publique ou non, etc.), et l'interface graphique (montrer des aides au débogage ou pas, afficher certains éléments facultatifs ou pas, etc.).
La configuration se fait via plusieurs sources et sous forme de cascade. En effet, une source peut avoir une valeur indéfinie, mais une source de moindre priorité peut avoir une valeur définie. De plus, certaines sources ne doivent pas pouvoir définir des valeurs pour certaines propriétés. Par exemple, une source venant du client web ne doit pas être en mesure de définir le chemin d'enregistrement du fichier journal (puisqu'il pourrait s'en servir pour écrire un fichier utilisé par une autre application). Pour configurer au niveau du serveur, il faut utiliser un ou plusieurs fichiers INI.
Les différentes sources de la plus prioritaire à celle qui l'est le moins est :
- les paramètres GET dans l'URL
- les cookies HTTP
- la session PHP
- un fichier INI spécifique à une catégorie dans le dossier de l'application
- un fichier INI général pour toutes les catégories dans le dossier de l'application
- un fichier INI général pour toutes les catégories dans un dossier système
- les valeurs par défaut (qui sont codées en dur)
Exemple de configuration (au format INI)
# Une ligne commençant par un croisillon "#" est un commentaire. # Le dièse "♯" ne marche pas. # Une section aurait pu être utilisée. proxy-url=https://proxy proxy-port=80 [session-captured] save-session=true save-cookies=false
Enregistrement des données
À chaque fois qu'une ressource est récupérée par le proxy, celui-ci doit pouvoir enregistrer la demande. L'enregistrement se fait dans le format XML, pour sa manipulation aisée (notamment via DOM, XPath, et XSLT), les nombreuses bibliothèques le gérant, le fait qu'il soit standardisé, et qu'il ne demande pas un serveur de gestion de bases de données. Néanmoins, l'enregistrement en XML est "isolé", de sorte qu'il soit facile (en ajoutant le code nécessaire) d'enregistrer dans un autre format (comme le JSON) ou avec un système de base de données (qui ajouterait une dépendance et une lourdeur) et d'ajouter une option pour choisir le format.
Un client web peut faire plusieurs requêtes simultanées (notamment pour réduire la latence avec HTTP 1). Or cela peut provoquer une écriture simultanée de nouveaux enregistrements, ce qui est presque certain de résulter en un fichier incorrect. Il a donc fallu mettre en place un verrou pour qu'un fichier d'enregistrement ne puisse être utilisé que pour un enregistrement à la fois. Cela a été fait avec la fonction
flock
(qui se base sur la fonction C du même nom). La mise en place et la gestion du verrou est dans une classe abstraite qui pourrait être réutilisée pour un autre format de fichier.Le proxy était à la base mono-utilisateur. En effet, toutes les données enregistrées étaient nécessairement dans un seul et même fichier. Pour que chaque utilisateur/utilisatrice n'ait pas à installer le proxy, il fallait qu'il soit mutualisable et donc capable de gérer plusieurs personnes. Plutôt qu'un processus de création d'un compte (qui aurait été lourd à utiliser et implémenter), un système d'identifiant de session a été mis en place. Concrètement une personne qui demande à créer une session d'enregistrement se voit retourner un identifiant textuel sous forme de cookie HTTP. Cet identifiant est un nombre pseudo-aléatoire (puisqu'il n'y a pas de réel aléatoire en informatique) obtenu avec une fonction réputée sûre pour la cryptographie (donc imprédictible) (dans mon cas la fonction
random_bytes
de PHP), ce qui permet de s'assurer que l'on ne puisse pas prédire l'identifiant des autres utilisateurs et utilisatrices. L'identifiant est utilisé comme une partie du nom de fichier, or le nom du fichier aurait été très grand avec la valeur en décimale et illisible avec la valeur en ASCII ou unicode, il est donc le résultat d'une fonction qui prend en entrée le nombre aléatoire et retourne une valeur en hexadécimale. La fonction de hashage SHA-512 a été utilisée, car elle a l'intérêt de créer très peu de collisions (2 valeurs d'entrée ayant la même valeur de sortie) et peut compliquer une attaque s'il venait à être découvert que la fonction n'est pas cryptographiquement sûr (puisqu'une fonction de hashage est censée ne pas avoir de fonction inverse).À tout cela, il manquait un élément clé. En effet, les données sont enregistrées pour rejouer un "session web", ce qui nécessite d'enregistrer des éléments techniques, mais également la temporalité de ceux-ci. Pour ce faire un timestamp POSIX (c'est-à-dire le nombre de secondes depuis le premier janvier 1970) est enregistré pour chaque requête. Ce format a l'avantage d'être simple et d'être très courant. Néanmoins la seconde (au format entier) n'est pas une unité très précise, puisqu'un client web sur un ordinateur moderne met moins d'une seconde pour demander différents éléments d'une page web, donc une fonction qui renvoie un timestamp avec les micro-secondes a été utilisée (il s'agit en l'occurrence de la fonction
microtime
).Conversion des données
Les données sont enregistrées dans un format de données en XML. J'ai moi-même inventé ce format qui est simple et reflète la manière dont les données sont manipulées par le proxy. Cependant les données ne sont pas enregistrées pour un usage interne au proxy, mais pour être données en entrée d'un programme de test de performance. Puisque mon tuteur travaille sur CLIF, c'est pour cet outil qu'il était nécessaire (dans le cadre du stage) de proposer un moyen de faire une conversion. Cependant il n'y aurait aucun problème technique à convertir aussi pour d'autres outils similaires.
CLIF peut jouer un scénario de test avec du code Java (un langage de programmation très répandu) ou avec des données en XML pour ISAC (qui est un jeu de mot recursif : ISAC is a Scenario Architecture for CLIF). Un moyen de convertir pour le format d'ISAC est de loin ce qui est le plus simple et ne pose aucun problème de limitation dans ce cas (il est possible de coder des comportements plus complexes en Java). C'est donc ce format qui a été choisi.
Convertir un XML en un autre XML est une volonté courante. La structuration de ce format permet d'envisager facilement de répondre à cette volonté, et un langage est même dédié à cela : XSLT. La conversion est presque entièrement faite en XSLT (en moins de 300 lignes de codes), malgré des différences non négligeables (notamment la manière d'enregistrer les en-têtes HTTP). Cela a été fait en utilisant la version 1.0 du langage XSLT, car la version 2.0 apporte très peu et n'est à priori gérée que par 2 implémentations libres (Saxon-B XSLT et Saxon-HE XSLT).
Le seul élément que je n'ai pas réussi à convertir avec XSLT est le temps. En effet, mon proxy enregistre le timestamp de chaque requête alors qu'ISAC a besoin du temps entre chaque requête. Il faut donc vérifier pour chaque requête qu'il y a en une suivante (ou précédente), puis faire la soustraction des timestamp, pour ensuite ajouter un élément entre les 2 indiquant le temps qui les sépare. Il a donc fallu faire un script, à appeler avant la conversion XSLT, pour ajouter cette pause.
L'exécution du script et l'appel de la conversion XSLT sont faits en JavaScript sur le client web. L'opération est presque instantanée avec un ordinateur moderne, néanmoins c'est très dépendant de l'ampleur des données à convertir. L'avantage que ce soit le client web qui fasse l'opération est que le serveur ne nécessite pas les ressources pour cela.
Exemple de données enregistrées par mon proxy
<?xml version="1.0" encoding="UTF-8"?> <session> <resource> <url value="https://www.w3.org/XML/" /> </resource> <pause value="5003.14" unit="ms" /> <resource> <url value="http://clif.ow2.org/" /> <method value="GET" /> <timeRequest value="1497965627.5526" unit="ms" type="unix-timestamp" /> <timeResponse value="1497965627.6498" unit="ms" type="unix-timestamp" /> <headers from="client"> <header key="User-Agent" value="Mozilla/5.0 (X11; i686) Firefox/45" /> <header key="Accept-Language" value="en-us"/> <header key="Connection" value="keep-alive" /> <header key="If-Modified-Since" value="Wed, 28 Oct 2015 15:47:33 GMT" /> <header key="Cache-Control" value="max-age=0" /> </headers> <proxy url="https://proxy" port="80" /> </resource> </session>
Exemple de données converties pour ISAC de CLIF
<?xml version="1.0" encoding="utf-8"?> <scenario> <behaviors> <plugins> <use id="replayHttp" name="HttpInjector" /> <use id="replayTimer" name="ConstantTimer" /> </plugins> <behavior id="session"> <sample use="replayHttp"> <params> <param name="uri" value="https://www.w3.org/XML/" /> </params> </sample> <timer use="replayTimer" name="sleep"> <params> <param name="duration_arg" value="5003" /> </params> </timer> <sample use="replayHttp" name="get"> <params> <param name="uri" value="http://clif.ow2.org/" /> <param name="headers" value="header=User-Agent|value=Mozilla/5.0 (X11\; i686) Firefox/45|;header=Accept-Language|value=en-us|;header=Connection|value=keep-alive|;header=If-Modified-Since|value=Wed, 28 Oct 2015 15:47:33 GMT|;header=Cache-Control|value=max-age=0|;" /> <param name="proxyhost" value="https://proxy" /> <param name="proxyport" value="80" /> </params> </sample> </behavior> </behaviors> </scenario>
L’API Web
Une API (Application Programming Interface) web basique a été faite. Elle ne s'appuie ni sur XML ni sur JSON (qui sont beaucoup utilisés pour faire une API web). En effet, elle utilise les paramètres GET (en entrée uniquement), les cookies HTTP (en entrée et en sortie), et le contenu HTTP (en sortie uniquement). Elle permet de "proxifier" une ressource, gérer une session (créer, détruire, et en recréer une qui écrase l'actuelle), obtenir les données de la session dans mon format, et d'obtenir la configuration au format HTML (il pourrait être utile de faire de même en JSON et/ou XML). Elle est utilisée par l'application, mais elle pourrait être utilisée par une application tierce. Elle est plus amplement documentée dans un fichier qui est converti en page web et accessible depuis le menu du proxy.
L’interface graphique
L'interface graphique est visuellement rudimentaire, mais elle est facile à utiliser et est adaptée à un écran de mobile. La page d'accueil permet de gérer une session (en utilisant l'API web qui peut rediriger vers la page précédente), d'être envoyé sur le formulaire pour "proxifier", de télécharger les données de la session (s'il y en a), et de gérer la configuration.
Il est possible de télécharger les données de la session telles qu'elles sont enregistées par mon proxy. Il est également possible de télécharger les données converties. La conversion est pour l'instant possible uniquement pour CLIF, mais il serait facile d'ajouter le nécessaire dans l'interface graphique pour d'autres outils similaires. Pour récupérer les données converties, il y a un formulaire pré-rempli avec les données de mon proxy (récupérées via l'API grâce à une requête AJAX) qui fait la conversion dans le format sélectionné au moindre changement dans les données d'entrée dans le client web (pour éviter que le serveur ait à faire ce traitement) et en utilisant "uniquement" du JavaScript (mais le JavaScript peut utiliser du XSLT).
La configuration se fait via des formulaires. Actuellement, ils sont gérés uniquement en JavaScript, mais il serait possible d'ajouter une gestion sans JavaScript. L'avantage de passer par JavaScript est de pouvoir afficher la nouvelle configuration effective sans recharger la page et sans soumettre le formulaire pour les cases à cocher (en positionnant des cookies dans ce langage et en utilisant des requêtes AJAX avec l'API web pour la configuration).
L’installation facile
Il n'y avait aucune certitude que quelqu'un continue régulièrement de développer l'outil, il fallait donc considérer par précaution qu'il n'y aurait que moi qui en aurait une bonne connaissance technique. Il faut donc que l'installation soit facile, même sans moi, pour éviter que ce que j'ai créé tombe dans l'oubli.
La partie cliente nécessite un navigateur web avec JavaScript, comme Mozilla Firefox ou Chromium, ce qui est très simple à installer et très courant. La partie serveur est faite en PHP (dans sa version 7), qui est très courant pour faire un site web ou une application web. C'est un langage de script sans compilation, il suffit donc d'appeler un script PHP avec un interpréteur adéquat (ainsi que la bibliothèque standard) pour l'exécuter avec succès. Pour appeler automatiquement les scripts via le web, il faut un serveur web gérant CGI (Common Gateway Interface). Il y a pour cela Apache qui est libre (sous licence Apache 2.0), fonctionne sur les principaux systèmes utilisés pour faire serveur (GNU/Linux, les BSD, Microsoft Windows, et Apple macOS), packagé par les principales distributions GNU/Linux (notamment Debian, RHEL/CentOS, et Ubuntu) et est le logiciel faisant serveur web le plus utilisé au monde. Cela n'a pas été testé, mais il ne devrait pas y avoir de problème avec nginx qui est le principal concurrent libre. Les pré-requis pour l'installation et l'usage sont donc, aussi bien au niveau client que serveur, simples et courants, tout en ne nécessitant pas du logiciel privateur.
Ce que j'ai créé ne s'appuie sur rien de spécifique à un système d'exploitation (y compris pour écrire de potentielles données de sessions et de potentiels journaux d'erreurs ou avertissements) et n'a besoin que de la bibliothèque standard de PHP, déposer le code source à un endroit où un serveur web va chercher des ressources et potentiellement exécuter du code PHP (en version 7) suffit pour installer et faire fonctionner la partie serveur. Cette méthode est simple et ne nécessite que d'avoir des droits d'écriture dans un dossier qu'un serveur web utilise.
Le paquet Debian
Il y a de fortes probabilités pour que mon outil soit utilisé sur un système Debian ou un dérivé (comme Ubuntu, Mint, et Trisquel GNU/Linux). La manière propre et usuelle pour installer un élément sur un de ces systèmes est de passer par un ou des paquets Debian (qui sont des archives organisées d'une certaine manière et ont usuellement deb comme extension). Un paquet Debian a des avantages (par rapport à une installation par copier/coller), tels que pouvoir être facilement mis à disposition via un dépôt de paquets, contenir des méta-données (comme la version, un journal des modifications synthétique, et la licence de chaque fichier du paquet source), permettre l'installation automatique des dépendances (avec APT ou un outillage similaire), et il peut être vérifié qu'il suit les bonnes pratiques. Il a donc été décidé de faire un paquet Debian, ou plutôt un moyen automatique et aisé d'en faire un.
Le plus gros du travail est fait par
dh_make
, qui est un programme libre qui automatise de nombreuses parties de la construction d'un paquet Debian propre. Hormis le fichier control (qui contient une partie importante des méta-données) et le fichier copyright (qui indique des informations vis-à-vis des auteurs/autrices et des licences), il a essentiellement fallu faire une règleinstall
et une autreuninstall
dans le makefile (qui permettent respectivement, par logique élémentaire et convention, d'installer et de désinstaller un projet utilisable) (en utilisant le paramètre facultatifDESTDIR
, qui permet par exemple de faire une installation à un emplacement où il n'y a pas besoin de privilèges d'écriture de SuperUser/root) quedh_make
utilise automatiquement, comme la règletest
(quand elle existe) qui lui permet de tester que les tests passent avant une potentielle construction du paquet.La construction est faite avec debuild qui appelle le programme Lintian. Celui-ci fait des tests sur les paquets et signale des erreurs pour les problèmes graves (qui ne sont pas tolérés pour un paquet dans l'archive Debian officiel) ainsi que des avertissements pour les problèmes non significatifs (mais dont l'évaluation pourrait changer à l'avenir) (comme des fichiers sans licence ou l'inclusion de jQuery alors que cette bibliothèque JavaScript est déjà packagée dans libjs-jquery et ne devrait pas être installée plusieurs fois). Toutes les erreurs et avertissements ont été corrigés, mais il y aurait probablement des petites choses à améliorer. La création automatique du paquet en génère donc un de qualité, bien qu'il ne soit pas parfait.
Possibilités pour améliorer les performances
- Réécrire le logiciel en langage Go : c'est un langage avec 2 implémentations libres (l'officielle et gccgo), qui peut se compiler en code natif (contrairement à PHP) et est adapté pour le Web (ce dont on peut se douter quand on connait son auteur, à savoir Google)
- Réécrire les parties nécessitant une puissance de calcul non négligeable en C ou C++ et les appeler en PHP (le C peut aussi être appelé en Go)
- Actuellement, il y a une classe par cas à gérer (lien, image, formulaire, script, etc.), ce qui permet de décomposer au maximum. Pour les documents HTML, chaque classe fait une requête XPath. Il serait possible d'en faire moins avec une classe qui aurait plus de responsabilités, au détriment de la qualité et maintenabilité du code source.
- Manipuler le HTML en JavaScript sur le client : cela déchargerait notablement le serveur, mais cela nécessiterait la gestion du JavaScript sur le client et il faudrait arriver à faire les changements d'URL avant que le client web ne les utilise pour obtenir les ressources correspondantes.
- Mon proxy récupère toutes les ressources demandées, mais il n'a aucun mécanisme de cache, ce qui peut le conduire à demander inutilement une même ressource plusieurs fois. Une solution serait d'implémenter un mécanisme de cache dans mon proxy, cela demanderait du temps mais aurait l'avantage que ce soit intégré et donc installé automatiquement. Une autre solution est de le faire utiliser un proxy web (comme Squid, Polipo, ou Varnish HTTP Cache), ce qui est facile et permet de ne pas recréer la roue, ainsi que d'être optimisé et déjà testé. Cette possibilité d'ajouter un cache n'a d'intérêt que s'il y a plusieurs utilisateurs/utilisatrices, si plusieurs clients web ne partageant pas un cache commun sont utilisés, ou si au moins un des clients web utilisés n'a pas de cache.
Et après ?
Il reste des cas non gérés ou mal gérés, comme la "proxification" des URLs dans le CSS, l'attribut pour l'intégrité en HTML, et un problème d'encodage sur de rares sites web. De plus, l'interface graphique est fonctionnelle et simple, mais a une apparence graphique très sobre, ce qui pourrait être changé par exemple avec un style CSS pré-existant comme KNACSS (qui est sous licence WTFPL), Milligram ou Twitter Bootstrap (qui sont sous la licence libre "MIT"). Il y a donc des choses à faire pour améliorer l'existant.
On peut aussi vouloir aller au-delà. Il pourrait par exemple être intéressant de faire un moyen d'exporter les données pour Apache JMeter et Tsung, qui sont 2 outils libres qui peuvent prendre du XML en entrée et qui sont packagés par la majorité des distributions GNU/Linux. Les flux de syndication (au format Atom et RSS) ne sont pas gérés, or certains navigateurs web les gèrent. De plus, on pourrait imaginer une séparation de l'API web et de l'interface graphique en 2 services différents (mais dont l'un dépend de l'autre), ce qui faciliterait la contribution à une seule des 2 parties et simplifierait la maintenance de chacune.
Il y a de nombreux tests unitaires, du moins pour PHP (qui représente la vaste majorité du code). Ainsi pour environ 15 000 lignes de codes PHP utilisés dans l'application, il y a environ 10 000 lignes de tests unitaires en PHP (chiffres obtenus respectivement avec
wc -l src/include/php/class/*
etwc -l tests/php/*
, ce qui inclut les commentaires dont les en-têtes pour spécifier la licence de chaque fichier, les lignes vides, etc.). Il y a également d'autres tests automatiques et pas uniquement sur le code PHP. Il y a donc un filet de sécurité si l'on veut contribuer sans casser le fonctionnement et écrire le code en respectant certaines règles (pour qu'il garde une certaine homogénéité et soit donc plus facile à lire que s'il n'en avait pas). Puisque les 2 langages de programmation utilisés sont PHP et JavaScript (on fait ici exception du XSLT qui représente environ 300 lignes de code, ainsi que de HTML et CSS que tout développeur/développeuse web connait), il est facile de trouver une personne compétente pour modifier le code, car ce sont des langages courants et qui ne disparaitront pas avant de nombreuses années.Pourquoi ce nom ?
Le nom originel est CLIF Web Proxy (d'où le logo qui n'a pas été modifié par la suite). C'était trivial et ça reflétait bien le projet, un proxy web pour le logiciel CLIF pour celles et ceux qui auraient directement sauté à cette partie (ou presque). Puisque le logiciel que j'ai produit peut être utilisé comme simple proxy web et qu'il pourrait servir pour d'autres logiciels de test de charge que CLIF, j'ai décidé de lui donner un nom plus général.
Continuant dans mon imagination prodigieuse, je l'ai nommé RyDroid Web Proxy. Cela permet de rendre hommage au Créateur Suprême. En effet, RyDroid est un pseudonyme qu'il utilise couramment sur Internet. Certains racontent que c'est un mégalomane, tandis que d'autres prétendent qu'il avait bien peu d'imagination (au moins à ce moment là), je vous laisse vous faire votre avis. Après tant d'explications techniques, vous me ou lui (c'est qu'on se perd !) pardonnerez un moment de déconne et ça peut permettre de faire émerger un sourire avant la conclusion (quel sens de la transition !).
Conclusion
J'ai réalisé un proxy pour enregistrer une session web et la sauvegarder dans un format pour un outil de test de charge (en l'occurrence CLIF). Il est utilisable en l'état, mais il y a des manques qui peuvent être dérangeants dans certaines situations, et des fonctionnalités additionnelles qui pourraient être plaisantes. 2 moyens simples d'installation sont proposés, ce qui facilite l'utilisation de ma réalisation technique.
Celle-ci a été publiée via Internet sous une licence libre, ce qui en fait un bien commun. De plus, il ne dépend que de technologies libres, ce qui permet d'avoir un contrôle total sur ce qu'il fait, mais aussi sur son évolution future, à laquelle un ou plusieurs autres contribueront potentiellement. Grâce au copyleft, les personnes distribuant des versions modifiées ont l'obligation légale de mettre leurs apports dans le pot commun, et ainsi créer un cercle vertueux qui ne soit pas basé sur l'exclusivité.
Bonnes captures Web et vive le logiciel libre !
Commentaires : voir le flux atom ouvrir dans le navigateur
-
LinuxFr.org : première quinzaine de juin 2018
(Journaux LinuxFR)
Nonante huitième épisode dans la communication entre les différents intervenants autour du site LinuxFr.org : l’idée est tenir tout le monde au courant de ce qui est fait par les rédacteurs, les admins, les modérateurs, les codeurs, les membres de l’association, etc.
L’actu résumée (
[*]
signifie une modification du sujet du courriel) :Statistiques
Du 1er au 15 juin 2018
- 1528 commentaires publiés (dont 8 masqués depuis) ;
- 248 tags posés ;
- 80 comptes ouverts (dont 6 fermés depuis) ;
- 35 entrées de forums publiées (dont 0 masquée depuis) ;
- 20 liens publiés (dont 1 masqué depuis) ;
- 21 dépêches publiées ;
- 25 journaux publiés (dont 1 masqué depuis) ;
- 3 entrées nouvelles, 1 corrigée dans le système de suivi ;
- 1 sondage publié ;
- 0 pages wiki publiées (dont 0 masquée depuis).
Listes de diffusion (hors pourriel)
Liste webmaster@ - [restreint]
- R.A.S.
Liste linuxfr-membres@ — [restreint]
- [membres linuxfr] Bouffe des 20 ans le 28 juin à Paris
Liste meta@ - [restreint]
- [Meta] Incident du jour sur SSL/TLS
- [Meta] Quel avenir pour la tribune ?
Liste moderateurs@ - [restreint]
- [Modérateurs] certificat linuxfr expiré
- [Modérateurs] Incident du jour sur SSL/TLS
- [Modérateurs] Certificat SSL
- [Modérateurs] où se trouve les CSS de Linuxfr
- [Modérateurs] forum - bug pour s'inscrire ?
Liste prizes@ - [restreint]
- [Prizes] LinuxFr prizes recap du samedi 9 juin 2018, 13:35:23 (UTC+0200)
- [Prizes] J'ai gagné un livre!
Liste redacteurs@ - [public]
- [Rédacteurs] Incident du jour sur SSL/TLS
Liste team@ - [restreint]
- [team linuxfr] Certificat SSL du site linuxfr.org expiré
- [team linuxfr] Tweet de Laurent Jouanneau (@ljouanneau)
- [team linuxfr] Incident du jour sur SSL/TLS
- [team linuxfr] Purge du compte X
[*]
- [team linuxfr] réouverture de compte
- [team linuxfr] Organisez des événements dans le cadre de la Fête des Possibles, du 15 au 30 septembre 2018
Liste webmaster@ — [restreint]
- R.A.S.
Canal IRC adminsys (résumé)
- certificat X.509 périmé (encore merci à tous ceux qui l'ont signalé), passage à Let's Encrypt et communication post-incident
- renouvellement du domaine (encore merci Yann)
- dernière version de Jessie (8.11) prévu le 23 juin, et ensuite passage en fin de vie
- question relative à la configuration DMARC de la liste Sympa des modérateurs qui change le From de l'émetteur dans certains cas
- rachat de GitHub par Microsoft et dépôts LinuxFr.org. Faut-il bouger et pourquoi.
- Let's Encrypt et HTTP en clair pour le renouvellement ? Voir par exemple la discussion
- discussion sur les aspects sécurité de l'affichage distant d'images sur la tribune
- « 20 ans le bel âge pour mourir », ah non ça parle de Yahoo Messenger, pas de nous
- 20 ans du site et POSS en décembre ?
- courriels envoyés pour préparer les entretiens des 20 ans
- peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
- migration de alpha et main en Jessie
- travaux en cours pour nettoyer le dépôt git d'admin (avec des fichiers générés par ansible notamment). Sans oublier de finaliser la partie Let's Encrypt…
- toujours un conteneur à migrer en Jessie, et ensuite trois en Stretch. Et aussi un hôte Trusty à mettre à jour.
Tribune de rédaction (résumé)
Tribune de modération (résumé)
- peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
- du spam
- améliorations de CSS proposées par voxdemonix
- les admins du site ont des facilités techniques pour traquer les spammeurs et les multis, par rapport aux modérateurs
- retour des Geek Faeries
Commits/pushs de code https://github.com/linuxfrorg/
- (springcleaning) admin-linuxfr.org en cours de conversion vers Ansible
- Allow users to choose the source for their tribune smileys in prefere…
- Add a border for missing title on images
- Fix max height for image on computer screen
Divers
- Geek Faëries, c'était du 1er au 3 juin : conférence « LinuxFr.org, 20 ans que ça geeke » et table ronde « Ces plates‐formes du Libre qui soutiennent les communautés » avec l'Agenda du Libre et En Vente Libre. Encore plein de mercis à Bookynette pour le Village du libre, à l'équipe organisatrice des GF, et à Marco et Marius pour l'hébergement.
- RMLL 2018 Strasbourg : conférence LinuxFr.org : les 20 ans d'un espace d'apprentissage, de communication et d'échange , table ronde Ces plateformes du Libre qui soutiennent les communautés (même thème que celle tenue aux Geek Faëries) et stand
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Revue de presse de l'April pour la semaine 24 de l'année 2018
(Dépêches LinuxFR)
La revue de presse de l’April est régulièrement éditée par les membres de l’association. Elle couvre l’actualité de la presse en ligne, liée au logiciel libre. Il s’agit donc d’une sélection d’articles de presse et non de prises de position de l’Association de promotion et de défense du logiciel libre.
Sommaire
- [Numéro Magazine] Portrait de l’artiste en hackeur qui détourne les nouvelles technologies
- [France Culture] Que reste‐t‐il du logiciel libre ?
- [RFI] Software Heritage, la grande bibliothèque du logiciel
- [Numerama] Open source : qui sont les bons élèves et les cancres parmi les géants de la tech ?
- [BFMtv] Pourquoi les mèmes sur Internet sont en danger
- lien n°1 : April
- lien n°2 : Revue de presse de l’April
- lien n°3 : Revue de presse de la semaine précédente
[Numéro Magazine] Portrait de l’artiste en hackeur qui détourne les nouvelles technologies
Par Ingrid Luquet‐Gad, le jeudi 14 juin 2018. Extrait :« Algorithmes, codage, datas, hardware… comment les artistes détournent‐ils les nouvelles technologies ? C’est la question vertigineuse à laquelle répond une double exposition au centre Pompidou, avec l’artiste japonais Ryoji Ikeda en invité d’honneur. »
[France Culture] Que reste‐t‐il du logiciel libre ?
Par Hervé Gardette, le mercredi 13 juin 2018. Extrait :« Microsoft vient de racheter la plate‐forme de création collaborative de logiciels GitHub. Est‐ce vraiment une bonne nouvelle pour le logiciel libre ? Et quelles conséquences pour les utilisateurs ? La philosophie du libre a‐t‐elle gagné ou s’est‐elle fait manger ? »
Et aussi :
[RFI] Software Heritage, la grande bibliothèque du logiciel
Par Dominique Desaunay, le mercredi 13 juin 2018. Extrait :« La plupart des activités humaines dépendent exclusivement des programmes informatiques qui permettent, par exemple, aux internautes de consulter leurs réseaux sociaux ainsi que de surfer sur n’importe quelle page Web. Des logiciels fragiles qui contrairement aux hiéroglyphes gravés dans la pierre peuvent s’altérer avec le temps et disparaître à jamais. C’est la raison pour laquelle les informaticiens de l’Institut national de recherche en informatique et en automatique ont développé une immense bibliothèque en ligne dénommée Software Heritage. »
Et aussi :
- [les-infostrateges.com] Software Heritage : une bibliothèque au service de l’archive universelle des logiciels ;
- [Industrie et Technologies] Software Heritage : les logiciels ont leur bibliothèque d’Alexandrie.
[Numerama] Open source : qui sont les bons élèves et les cancres parmi les géants de la tech ?
Par Victoria Castro, le mardi 12 juin 2018. Extrait :« Tout le monde dit aimer l’open source, mais qu’en est‐il vraiment ? Nous avons dressé un classement de 6 géants de la tech, du plus grand sympathisant de l’ouverture au plus propriétaire d’entre eux. »
[BFMtv] Pourquoi les mèmes sur Internet sont en danger
Par Elsa Trujillo, le lundi 11 juin 2018. Extrait :« L’article 13 d’un projet de directive européenne sur le droit d’auteur entend limiter drastiquement la réutilisation de contenus protégés. »
Et aussi :
- [Usbek & Rica] Adieu mèmes et parodies ? Pourquoi « l’article 13 » menace Internet ;
- [RTL.fr] Un projet de loi européen voté le 20 juin va‐t‐il changer la face du Web ? ;
- [Konbini France] Les gifs et les mèmes sont‐ils en danger de mort ?.
Voir aussi :
- Sauvons le partage de code ! Appel à signature de la lettre ouverte « Save Code Share » ;
- Campagne « Save Your Internet » (agir avant le 20 juin 2018).
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Migrer Windows 10 d'un disque BIOS/MBR, vers un SSD en mode UEFI/GPT avec des logiciels libres
(Journaux LinuxFR)
Sommaire
- Introduction
- Prérequis
- Nomenclature
- Procédure de base
- Quelques pistes si ça ne fonctionne pas…
- Documentation, pour aller plus loin…
- Historique de révisions
Introduction
Ce tutoriel vous guide pas à pas pour migrer votre installation de
Windows qui est actuellement sur un disque dur de votre PC vers un
nouveau disque, en l'occurrence un SSD. A vrai dire, vous pouvez aussi
bien migrer vers un autre HDD.La spécificité de ce tutoriel est qu'elle utilise les outils fournis par
Microsoft avec Windows ainsi que des logiciels libres (Clonezilla
principalement, mais si quelque chose devait mal tourner vous pouvez avoir
besoin d'utiliser fdisk, gdisk ou testdisk pour ne citer qu'eux). Quand
j'ai voulu faire cette migration je n'ai pas trouvé de tutoriel
expliquant de bout en bout comment faire cette migration juste avec les
outils de Microsoft et des logiciels libres.Typiquement, vous pouvez avoir envie/besoin de faire cela car vous avez
acheté un nouveau disque pour remplacer l'ancien (par exemple car
l'ancien montre des signes de faiblesse, ou vous voulez améliorer la
réactivité de votre système).En plus de la migration du système d'exploitation, ce tutoriel vous
explique comment passer d'un démarrage en mode BIOS/MBR à un démarrage
en mode UEFI/GPT.Succinctement la démarche est la suivante, d'abord installer le nouveau
disque dans le PC, et initialiser la table de partition selon les normes
Microsoft. Puis cloner/dupliquer la partition contenant le système
d'exploitation à l'aide de Clonezilla. Ensuite et avant de redémarrer
dans le clone de Windows sur le SSD, faire quelques modifications dans
le registre pour que la lettre de lecteurC:
pointe vers la bonne
partition et éventuellement modifier le mode SATA en AHCI si vous le
modifiez aussi dans le UEFI/BIOS. Après cela, on va préparer la
partition système EFI/ESP pour que le PC puisse démarrer dessus et qu'il
démarre sur le Windows du SSD. Finalement, une fois dans le Windows du
SSD, on va réactiver l'"environnement de récupération de Windows".Mise en garde : Faites une sauvegarde de vos données avant toute
opération. Personne n'est à l'abri d'une mauvaise manipulation ou d'une
erreur.Prérequis
Compétences
Niveau de difficulté : Difficile.
Vous devez être à l'aise au niveau de l'utilisation de la ligne de
commande dans Windows, mais aussi assez à l'aise pour gérer les
partitions de votre disque. Savoir modifier le paramétrage de votre
Firmware UEFI/BIOS et aussi nécessaire. Ce tutoriel guide pas à pas pour
la majorité des opérations. Certaines n'ont pas été détaillées par souci
de simplicité et d'efficacité.Matériel
Le PC où vous voulez installer le SSD. Il faut qu'il soit en état de
marche. De plus il doit avoir un firmware UEFI. S'il n'a que un BIOS
standard, sans UEFI, ce tutoriel n'est pas adapté.Clé(s) USB ou plusieurs CD/DVD sur lequel vous aurez mis
Clonezilla, System rescue
CD et un environnement de démarrage
Windows PE, ou Windows RE, ou le DVD/Disque d'installation de Windows.Le disque SSD (testé avec Samsung SSD 860 EVO 250GB). Il doit avoir une
taille suffisante pour contenir votre partition de Windows. Dans tous
les cas, la taille de la partition qui contiendra Windows sur le SSD
doit être au moins égale à la taille de la partition Windows du HDD que
vous voulez cloner. Au besoin, pour remplir ce critère, réduisez la
taille de votre partition Windows avec le gestionnaire de disque de
Windows par exemple (ou un autre outil de gestion de partition, comme
gparted, sur le System Rescue CD). Cherchez sur internet si vous ne
savez pas comment faire.Logiciel
Windows 10 installé (en version 64 bits) (testé avec Win10 v1709)
Windows 10 PE ou support d'installation de Windows 10 (clé USB ou DVD) -
En Version 64 bits (testé avec un support d'installation de Win10 v1804)System rescue CD (version 5.2.2 par
exemple)Clonezilla installé sur une clé ou un CD.
Bien vérifier avant que votre système arrive à démarrer dessus. (Testé
avec Clonezilla 2.5.5-38)Nomenclature
SSD : désigne le nouveau SSD
HDD : désigne votre disque actuel, sur lequel est installé Windows
WinPE : un environnement de démarrage Windows PE, ou Windows RE, ou le
DVD/Disque d'installation de Windows. Il doit être sur un support
amovible (USB, CD ou DVD)S: La lettre de lecteur affectée à la partition Système EFI qui sera sur
le nouveau SSD (parfois appelée ESP, EFI_System_Partition ou encore
SYSTEM, ou EFI)N: Le clone de Windows, sur le SSD
O: Le Windows cloné, sur le HDD
C: La partition dans laquelle est installée Windows, lorsqu'on est dans
Windows (que ce soit le windows cloné, ou le clone)Les commandes doivent être lancées en tant qu'administrateur.
Procédure de base
Fixer et brancher le SSD dans l’ordinateur
Désactiver Windows FastStart (cf votre moteur de recherche préféré)
-
Initialiser et partitionner le disque à l'aide de Windows
- Démarrer sur le Windows installé ou WinPE
- Pour initialiser le disque, d'abord créer une table de partition,
puis partitionner le disque. Pour ce faire :
- Suivre les instructions de partitionnement UEFI/GPT selon Microsoft. Ci-dessous mon exemple, mais peut-être avez-vous besoin d'une partition "recovery" aussi, ou votre configuration nécessite quelques aménagements. Dans ce cas, voir les instructions de Microsoft et adapter pour vos besoins.
- Par exemple: une partition EFI de 260Mo, une partition
Microsoft Reserved (MSR) de 16Mo, une partition pour Windows
(taille au moins égale à la taille de la partition de Windows
à cloner). Pour informations, dans diskpart, les tailles que
vous donnez en MB/Mo sont en réalité des MiB/Mio (220 =
10242 octets).
- Ouvrir une invite de commande en mode administrateur et
lancer
diskpart
. Et une fois dans diskpart :
- list disk pour lister les disques et connaître le n° du SSD.
- select disk # avec le numéro du SSD à la place de #
- clean Supprime le contenu du disque / l'initialise
- convert gpt Définit que le disque aura une table de partition GPT
- create partition efi size=260 Crée une partition EFI de 260MiB
- format quick fs=fat32 label="System" Formater la partition EFI au format FAT32
- assign letter="S" Lui donner la lettre S
- create partition msr size=16 Créer une partition Microsoft Reserved de 16MiB
- create partition primary
Créer la partition pour Windows (l'équivalent du
C:
) - format quick fs=ntfs label="Windows" Formater la partition pour Windows au format NTFS
- assign letter="N" Lui donner la lettre N
- list volume Liste les volumes. Permet de voir la table de partition.
- exit Quitte diskpart
- Ouvrir une invite de commande en mode administrateur et
lancer
diskpart
. Et une fois dans diskpart :
-
Cloner le Windows installé sur le HDD. Ceci sera fait à l'aide de
Clonezilla- Redémarrer dans Clonezilla
- Une fois dans clonezilla, et si vous êtes confortable avec les
lignes de commande Linux, éventuellement supprimer de la partition
Windows du HDD les fichiers
pagefile.sys
,hyberfil.sys
(désactiver windows faststart avant),swapfile.sys
. - Cloner la partition Windows du HDD vers le SSD (de préférence,
partition de même taille, et de toutes façons, la partition de
destination doit être plus grande que la source. Si ce n'est pas
le cas, réduisez d'abord la taille de votre partition Windows
depuis Windows). Dans clonezilla, utiliser le mode Partition vers
Partition, et en mode Export. Utiliser les options
-e1 auto
(automatically adjust file system geometry for a ntfs boot partition if exists)-e2
(sfdisk uses CHS of hard drive from EDD (for non grub loader)-r
(resize filesystem to fit partition size of target)-m
(do NOT clone boot loader)-v
(verbose) - Optionnellement cacher la partition contenant le windows source de la table de partition du disque source (si vous ne savez pas à quoi ça sert, passez votre chemin). Pour cela modifier le type de partition de la partition NTFS de windows (en principe, NTFS a un id de « 7 ». On peut utiliser id 17 pour la partition cachée : 17 correspond à « IFS Hidden »). Utiliser cfdisk ou fdisk pour faire ce changement (ce sont des programmes linux).
Dans le Firmware UEFI (ou BIOS-UEFI), on peut en profiter pour passer
du mode SATA "IDE" vers "AHCI". Windows n'aime pas ce changement et
il faut donc faire une opération dans le registre qui est
détaillée ci-dessous. Tant que vous ne le faites pas, vous aurez un
écran de plantage bleu de windows au démarrage (BSOD).Si vous voulez être sûr de ne pas faire de bêtise dans le Windows que
vous venez de cloner, je vous conseille d'éteindre l’ordinateur & de
débrancher l’ancien disque. Ainsi vous ne risquez pas de modifier le
mauvais fichier de registre (en l'occurrence celui de votre Windows
sur le HDD)-
Effectuer quelques opérations sur le Windows de destination (celui
sur le SSD) avant qu'on ne démarre dessus. En particulier corriger le
registre pour affecter la lettre de lecteur C: à la bonne partition,
et si le paramétrage du Firmware UEFI (BIOS-UEFI) a été modifié pour
passer de SATA Mode PCI vers AHCI, on va aussi faire ce changement
pour que ca fonctionne.- Redémarrer dans WinPE (en Mode UEFI, pas MBR !)
- Tout d'abord déterminer la lettre de lecteur affectée au clone
de Windows, celui qui est sur le SSD. Ou, s'il n'y a pas de
lettre affectée, lui en donner une, par exemple
N:
(lettre utilisée dans les exemples qui suivent)- Pour cela, lancer dans
diskpart
- list volume
Ce qui retourne la liste des volumes avec la lettre de lecteur qui a été affectée à chacun.
- list volume
- Si aucune lettre de lecteur n'est affectée, il faut alors
lui en affecter une. Pour cela, lancer dans
diskpart
- select volume # (avec # étant le numéro du volume qui contient le nouveau windows)
- assign letter=N
S'il n'est pas possible d'utiliser select volume alors faire comme ceci - list disk
- select disk # (# étant le numéro affecté au SSD)
- list partition
- select partition # (# étant le numéro affecté à la partition de Windows sur le SSD, probablement 3)
- assign letter=N
- Pour cela, lancer dans
diskpart
- Faire un CHKDSK /F sur la lettre du nouveau Win
- Pour que la partition
C:
utilisée par Windows soit celle du SSD et pas celle de l’ancien disque, modifier une clé de registre du nouveau Windows :- Lancer
REGEDIT
et dans le registre HKEY_LOCAL_MACHINE monter la ruche
N:\Windows\System32\Config\SYSTEM
. Lui donner le nom "NewWin" On s’intéresse àHKEY_LOCAL_MACHINE\NewWin\MountedDevices
. Ce sont là les valeurs qui sont dans le registre "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
" lorsqu'on est dans l'installation de Windows.- Dans
HKEY_LOCAL_MACHINE\NewWin\MountedDevices
modifier la lettre de lecteur C: en renommant \DosDevices\C: par \DosDevices\O: (car la valeur fait référence à la partition de l'ancien Windows sur le HDD et on ne veut pas, en démarrant, utiliser cette partition mais celle de son clone qui est sur le SSD). Ainsi, lorsqu'on démarrera dans le nouveau Windows, la partition contenant le Windows sur le HDD aura la lettre O:, et la partition contenant le Windows sur le SSD aura la lettre C: - Créer une nouvelle valeur binaire nommée \DosDevices\C:
et lui donner comme contenu celui de \DosDevices\N: qui
est renseignée dans le registre WinPE, c'est-à-dire là
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
(C:
étant la lettre qu'utilisait le Windows du HDD comme partition où il y a le dossier \Windows ) - ATTENTION: Bien vérifier que la copie a fonctionné et qu'il y a les bonnes valeurs, car dans mes essais, j'ai du m'y reprendre à 2 fois car le 1er "coller" ne collait pas ce que je voulais.
- En principe c'est tout. Mais d'après certaines sources,
il y aurait une clé \\?\Volume{GUID} ayant le même
contenu que le \DosDevices\O: qu’on vient de modifier.
Chez moi ce n'était pas le cas. Si vous avez une telle
valeur, alors il faut lui donner le contenu de
\DosDevices\N: depuis le registre WinPE
- Dans
- Lancer
REGEDIT
et dans le registre HKEY_LOCAL_MACHINE monter la ruche
- Si en même temps que la migration on veut aussi passer du mode
SATA IDE vers AHCI alors il faut encore faire ceci. Cela a été
repris du site
tomshardware.co.uk
- Toujours dans
REGEDIT
avec la ruche montée en
HKEY_LOCAL_MACHINE\NewWin
- Aller à
HKEY_LOCAL_MACHINE\NewWin\ControlSet000\Services\storahci\StartOverride
- Changer la valeur DWORD de 3 à 0.
- Au redémarrage, si ça n'a pas été fait, changer la paramétrage du contrôleur SATA de IDE à AHCI. Au redémarrage, Windows devrait directement démarrer correctement et sans plantage (BSOD).
- Toujours dans
REGEDIT
avec la ruche montée en
- Rendre le disque bootable en installant les outils EFI de
microsoft et configurant le Magasin BCD (BCD Store)
- D'abord assigner une lettre de lecteur à la partition ESP
- MOUNTVOL S: /S
Si ca n'a pas fonctionné, faire comme ceci dans diskpart - list disk
- select disk # (# est le numero du SSD retourné par list disk)
- list partition
- select partition # (# est probablement 1)
- assign letter=S
- MOUNTVOL S: /S
- Puis lancer
bcdboot
N:\windows /l fr-fr /s S: /f UEFI
- Où
N:\Windows
est le répertoire contenant le clone de Windows sur le SSD) - S: = partition EFI
- Où
- D'abord assigner une lettre de lecteur à la partition ESP
- Tout d'abord déterminer la lettre de lecteur affectée au clone
de Windows, celui qui est sur le SSD. Ou, s'il n'y a pas de
lettre affectée, lui en donner une, par exemple
- Redémarrer dans WinPE (en Mode UEFI, pas MBR !)
Redémarrer, et avant le lancement de Windows vérifier votre UEFI
(ou BIOS-UEFI). Il faut qu'il soit configuré pour démarrer par défaut
en mode UEFI et pas en mode BIOS. Penser aussi à corriger le
paramétrage SATA si cela a été modifié dans le registre de Windows.
Le paramétrage du démarrage avecbcdboot N:\windows /l fr-fr /s S: /f UEFI
a normalement créé le
magasin BCD, mis tous les fichiers EFI sur la partition SYSTEME (ESP,
partiton EFI, la 1ère du SSD) et dit au firmware UEFI qu'il doit
automatiquement démarrer avec le gestionnaire de démarrage
(boot manager) de Windows.-
Une fois qu’on a réussi à démarrer dans la copie de Windows
- Réactiver le "FastBoot"
- Réactiver l'environnement de récupération de Windows
en lançant, depuis une ligne de commande avec les droits
administrateur, la commande
reagentc.exe /enable
. Vérifier avecreagentc.exe /info
. Et s'il y a une erreur essayer avecreagentc.exe /enable /setreimage /path C:\Recovery\WindowsRE
oùC:\Recovery\WindowsRE
est le dossier où se trouve le fichierWinre.wim
- Vérifier que tout est en ordre. Eventuellement donner un nouveau
nom à votre partition
C:
(pour la différencier de celle sur le HDD) en lançant:LABEL [drive:][label]
- Redémarrer encore une fois en laissant le processus de démarrage se faire tout seul pour vérifier que tout est ok.
Réinsérer l'ancien disque dur.
Normalement, il devrait être possible de redémarrer dans l'ancien
Windows, du moment que vous savez comment booter en MBR, et sous
réserve de ne pas avoir modifié le mode SATA dans le UEFI/BIOS. SI
c'est le cas, vous pouvez envisager de modifier le registre du
Windows du HDD, ou de modifier le paramétrage du UEFI/BIOS.
Si vous avez aussi Linux d'installé sur le HDD, il devrait toujours
être possible de le démarrer en mode BIOSOn peut diminuer/augmenter la taille de la partition C: du SSD (Pour
un SSD TLC ou VNAND, on peut par exemple laisser de l’espace libre à
la fin ~10 % de la capacité du disque d'après le logiciel Samsung
Magician, pour un SSD 860 EVO)En principe, puisqu’on boot en EFI on peut enlever sur le clone
Windows sur le SSD les fichiers\bootmgr
et\Boot\BCD
puisque ce
sont ceux qui étaient utilisés pour un boot en mode BIOS/MBR et que
désormais on est en EFI. Vous pouvez d'abord les renommer et vérifier
que ca ne change rien au prochain boot, plutôt que de les supprimer
tout de suite.
Quelques pistes si ça ne fonctionne pas…
- Faire un chkdsk sur la nouvelle partition
- Recréer le bootsector du NTFS avec testdisk (dispo sur System Rescue CD, mais peut être aussi dans Clonezilla ? Je n'ai pas vérifié)
- Vérifier le BCD:
- On peut vérifier si le Magasin BCD est ok en lançant (en
tant qu'administrateur)
bcdedit /store s:\EFI\Boot\Microsoft\BCD /enum
(Si la partition système n'est pas montée sur S:, lancer
Mountvol s: /s
- Doc BCDEDIT (sur la page, il y a aussi les liens vers bcdboot (initialise BCD et copie fichiers de démarrage sur la partition systeme) et bootsect (pour basculer entre NTLDR et Bootmgr)
- https://msdn.microsoft.com/fr-fr/library/windows/hardware/mt450468(v=vs.85).aspx
- https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcd-system-store-settings-for-uefi
- On peut vérifier si le Magasin BCD est ok en lançant (en
tant qu'administrateur)
bcdedit /store s:\EFI\Boot\Microsoft\BCD /enum
(Si la partition système n'est pas montée sur S:, lancer
Mountvol s: /s
- Vérifier que la partition EFI est bien initialisée (présence des
fichiers
\EFI
,\EFI\Boot\
,\EFI\Microsoft\
…) Si ce n'est pas le cas, il y a eu un problème avec bcdbootN:\windows /l fr-fr /s S: /f UEFI
- Vérifier le boot manager du bios (démarrage en UEFI ou MBR ? Gestionnaire de démarrage par défaut ? Présence du gestionnaire de démarrage de Windows ?)
- A priori, pas utile : Commandes à lancer dans WinPE
- Pour recréer le boot sector de la partition systeme (EFI):
bootrec
/fixboot
- Pour chercher les OS sur le disque et les mettre dans le
bootloader
bootrec
/scanos
- Pour recréer le boot sector de la partition systeme (EFI):
bootrec
- Quelques commandes de bcdedit pour modiser la valeur de certains
éléments du magasin BCD. Inutile car le BCD Store qui est utilisé
lorsqu'on démarre en mode EFI n'est pas le même que celui utilisé
dans un démarrage en mode MBR. Donc, pas besoin de chercher à
modifier le BCD. Je garde pour info : les lettres sont celles telles
que définies dans le système où on est (WinPE par ex).
Doc BCDEDIT
- bcdedit /set {bootmgr} device \Device\HarddiskVolume1
- bcdedit /set {default} device \Device\HarddiskVolume3
- bcdedit /set {default} osdevice \Device\HarddiskVolume3
- Ou à la place de \Device\HarddiskVolume1 mettre les lettres de lecteur :
- bcdedit /set {bootmgr} device partition=S:
- bcdedit /set {default} device partition=C:
- bcdedit /set {default} osdevice partition=C:
Documentation, pour aller plus loin…
A propos du EFI/UEFI:
- La procédure de Boot en cas UEFI ou BIOS est bien décrite ici: https://www.boyans.net/RepairWindows/RepairWindowsBCD.html
- La partition Système EFI: https://wiki.archlinux.org/index.php/EFI\_System\_Partition
- Managing EFI Boot Loaders for Linux: http://www.rodsbooks.com/efi-bootloaders/principles.html
A propos de l'entrée MountedDevices du registre:
http://diddy.boot-land.net/firadisk/files/mounteddevices.htmSi on veut y accéder, par défaut les fichiers du BCD sont cachés. Pour
les rendre visibles:- attrib bcd -s -h -r
- mv bcd bcd.bak
- bootrec /rebuildbcd
Documentation bcdedit:
- http://diddy.boot-land.net/bcdedit/
- Concernant les valeurs possibles pour « device » ou « osdevice » dans bcdedit http://www.diddy.boot-land.net/bcdedit/files/device.htm
MBR Partition ID
- NB: Une partition Recovery Windows a un part_id de « 0x27 »: https://www.win.tue.nl/~aeb/partitions/partition\_types-1.html
A propos des disk ID (=Disk signatures):
- http://kb.macrium.com/KnowledgebaseArticle50152.aspx . En principe pas de pb, puisqu’on n’a pas cloné tout le disque mais juste une partition, et que le pb de signature du disque est lié à la copie du MBR (1er secteur du disque {et pas de la partition}). Cela concerne probabement aussi le clonage de la table de partition GPT puisqu'il y a aussi un id dedans…
- Fixing Disk Signature Collisions: https://blogs.technet.microsoft.com/markrussinovich/2011/11/06/fixing-disk-signature-collisions/
Si besoin de supprimer du registre les entrées de disques qui ne sont
pas connectés ou sans lettre assignée lancer:mountvol /R
. Ce
programme permet aussi de lister les lettres de volumes avec leur GUID
(GUID pour ce système uniquement, il n’est pas stocké dans la partition,
ni ailleurs sur le disque, il est assigné par windows pour un couple
(signature de disque/partition offset) dans une instance de windows
alors que dans une autre instance de windows la même partition sur le
même disque aura ce GUID différent)Changer le label du volume: commande
LABEL [drive:][label]
Historique de révisions
Vous trouverez la dernière version de ce tutoriel sur ma page perso
de tutoriels informatique.
Vous y trouverez aussi la version HTML, PDF et TXT.2018-06-17 : Ajout d'une note indiquant que ce tutoriel utilise des
logiciels libres2018-06-11 : Correction de la forme et de fautes d'orthographe
2018-05-28
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Photoshop et Lightroom – Adobe voudrait doubler le prix des abonnements mensuels
(MacBidouille)
PetaPixel rapporte qu'Adobe teste la possibilité de doubler l'abonnement mensuel de son offre photographes qui passerait alors de 10 à 20$.
Ce serait un coup dur pour ceux qui sont abonnés à cette offre.
Cela montre également le risque et les limites du fonctionnement des abonnements qui peuvent devenir du jour au lendemain bien plus coûteux. -
PyConFR 2018, du 4 au 7 octobre à Lille : appel à contributions
(Dépêches LinuxFR)
La PyConFR, c’est le rassemblement annuel francophone de passionnés et curieux du langage Python. Cette année, on invite la communauté à se retrouver à Lille du 4 au 7 octobre.
Pour ceux qui ne connaissent pas la formule, les deux premiers jours (jeudi et vendredi) sont dédiés à des sprints (hackathons), et le week‐end sera rempli de conférences et d’ateliers découverte.
Contribuez à cette édition et aidez‐nous à la rendre mémorable en proposant du contenu : conférences, ateliers, sprints !
Quelques idées de sujets : enseignement du langage, montée en charge (scaling), sécurité, science des données, apprentissage automatique (machine learning), retour d’expérience, empaquetage, présentation d’une bibliothèque, Internet des objets (IoT), asynchrone, communauté, diversité, pyre-check, 2to3, PyPy, Python vs Go, intégration et livraison continues (CI/CD), stockage de données, agents conversationnels (chatbots), Python magic, Ansible vs SaltStack et tellement d’autres…
- lien n°1 : PyConFR 2018
- lien n°2 : AFPy
- lien n°3 : L’appel à proposition
- lien n°4 : Soumettre une proposition
- lien n°5 : Suivez‐nous sur Twitter
- lien n°6 : Meetup Python Lille
- lien n°7 : Martine découvre Python
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Surface d'attaque des serveurs dans les nuages (cloud)
(Journaux LinuxFR)
Passionnant et très utile article sur le blog en anglais de James Bottomley (merci LWN.net pour le résumé) : il étudie la sécurité des solutions d'hébergement Cloud en se basant sur la solution retenue : serveurs dédiés, serveurs partagés, serveurs virtuels, conteneurs, et en comparant les profils d'attaques verticales et horizontales.
Comme vous aimez les conclusions rapides, sachez déjà que la solution conteneurs l'emporte haut la main.
Une attaque verticale c'est du code traversé : de la requête web à la base de donnée jusqu'à la réponse dans le navigateur ou l'application, et qui contient potentiellement des bugs, elle concerne uniquement votre hébergement :
all code that is traversed to provide a service all the way from input web request to database update to output response potentially contains bugs; the bug density is variable for the different components but the more code you traverse the higher your chance of exposure to exploitable vulnerabilities. We’ll call this the Vertical Attack Profile (VAP) of the stack.
Une attaque horizontale par contre peut se propager d'hébergement en hébergement :
In an IaaS cloud, part of the vertical profile belongs to the tenant (The guest kernel, guest OS and application) and part (the hypervisor and host OS) belong to the CSP. However, the CSP vertical has the additional problem that any exploit in this piece of the stack can be used to jump into either the host itself or any of the other tenant virtual machines running on the host. We’ll call this exploit causing a failure of containment the Horizontal Attack Profile (HAP).
La surveillance est répartie différemment selon l'hébergement, par exemble sur un serveur partagé l'hébergeur doit surveiller toute la pile : le matériel, le noyau, les librairies et le middleware, vous n'êtes responsable que de la couche applicative, tandis qu'avec un conteneur il surveille le matériel et le noyau hôte.
Mais les attaques sont aussi réparties différemment. Dans un hébergement partagé, si vous attaquez le noyau vous pouvez compromettre tout le système, donc tous les hébergements tandis qu'il est plus difficile de sortir d'un conteneur.
Compte tenu de quelques autres facteurs que je ne résume pas ici — veuillez lire cet article avant de commenter —, les équipes de sécurité de l'hébergeur bossent « mieux » avec des conteneurs, qui sont donc plus fiables, quoi qu'en dise votre contrat. Mais que ça ne vous dispense pas des opérations habituelles de base : backup, backup ET backup (sauvegarde, sauvegarde ET sauvegarde de leurs petits noms).
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Surface d'attaque des serveurs dans les nuages (cloud)
(Journaux LinuxFR)
Passionnant et très utile article sur le blog en anglais de James Bottomley (merci LWN.net pour le résumé) : il étudie la sécurité des solutions d'hébergement Cloud en se basant sur la solution retenue : serveurs dédiés, serveurs partagés, serveurs virtuels, conteneurs, et en comparant les profils d'attaques verticales et horizontales.
Comme vous aimez les conclusions rapides, sachez déjà que la solution conteneurs l'emporte haut la main.
Une attaque verticale c'est du code traversé : de la requête web à la base de donnée jusqu'à la réponse dans le navigateur ou l'application, et qui contient potentiellement des bugs, elle concerne uniquement votre hébergement :
all code that is traversed to provide a service all the way from input web request to database update to output response potentially contains bugs; the bug density is variable for the different components but the more code you traverse the higher your chance of exposure to exploitable vulnerabilities. We’ll call this the Vertical Attack Profile (VAP) of the stack.
Une attaque horizontale par contre peut se propager d'hébergement en hébergement :
In an IaaS cloud, part of the vertical profile belongs to the tenant (The guest kernel, guest OS and application) and part (the hypervisor and host OS) belong to the CSP. However, the CSP vertical has the additional problem that any exploit in this piece of the stack can be used to jump into either the host itself or any of the other tenant virtual machines running on the host. We’ll call this exploit causing a failure of containment the Horizontal Attack Profile (HAP).
La surveillance est répartie différemment selon l'hébergement, par exemble sur un serveur partagé l'hébergeur doit surveiller toute la pile : le matériel, le noyau, les librairies et le middleware, vous n'êtes responsable que de la couche applicative, tandis qu'avec un conteneur il surveille le matériel et le noyau hôte.
Mais les attaques sont aussi réparties différemment. Dans un hébergement partagé, si vous attaquez le noyau vous pouvez compromettre tout le système, donc tous les hébergements tandis qu'il est plus difficile de sortir d'un conteneur.
Compte tenu de quelques autres facteurs que je ne résume pas ici — veuillez lire cet article avant de commenter —, les équipes de sécurité de l'hébergeur bossent « mieux » avec des conteneurs, qui sont donc plus fiables, quoi qu'en dise votre contrat. Mais que ça ne vous dispense pas des opérations habituelles de base : backup, backup ET backup (sauvegarde, sauvegarde ET sauvegarde de leurs petits noms).
Commentaires : voir le flux atom ouvrir dans le navigateur
-
AlterncCamp c'est dès jeudi 21 juin
(Journaux LinuxFR)
Salut
Ayant déjà fait la dépéche et que le temps est passé, j'en profite pour rappeler que jeudi, vendredi et samedi il est possible d'aider à l'avancée du projet alternc
- https://linuxfr.org/news/alternc-camp-a-paris-du-21-au-23-juin-2018
- https://github.com/alternc/alternc
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Compilation de VSCode sous Centos 6
(Journaux LinuxFR)
Il y a quelques mois, le camarade freem< nous avait fait part de ses déception concernant VSCode parce qu'il ne trouvait pas matière à troller de manière satisfaisante.
J'ai voulu me faire mon propre avis et l'essayer par moi même. Malheureusement, ma machine pro est une Centos 6 et la libc disponible beaucoup trop vielle. Impossible de l'essayer et donc de partager avec vous mes impressions pertinentes et de kalitay :(. Quelques moules m'ont gentiment expliqué que je n'avais qu'à me sortir les doigts du fondement et le compiler moi même, que si je voulais vraiment, je pouvais.
Plusieurs mois plus tard, j'ai enfin trouvé le temps et la motivation d'essayer. Et à ma grande surprise, ce fut plutôt facile.
# Installation d'une version décente de GCC, python et git depuis les dépots # Softawre Collections sudo yum install centos-release-scl sudo yum install devtoolset-7 python27 rh-git29 # Installation de NodeJS et Yarn curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash - curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo sudo yum install nodejs yarm # Activation de l'environnement de compilation scl enable python27 devtoolset-7 rh-git29 bash # Récupération des sources de VSCode git clone https://github.com/Microsoft/vscode.git cd vscode # Augmentation de la limite du nombre de fichiers ouverts à 166384 # (il peut être nécessaire de modifier /etc/security/limits.conf pour atteindre # cette valeur) ulimit -n 166384 # Récupération des dépendances # (On défini la variable CXX parce que sinon un des makefile utilise # /usr/bin/g++ qui ne supporte pas C++11 ) CXX=$(which g++) yarn # Construction du paquet yarn run gulp vscode-linux-x64-min # "Instalation" mv ../VSCode-linux-x64 ~/opt/vscode
Et voilà ! À moi les joies des d'un éditeur moderne !
$ ~/opt/vscode/bin/code-oss /home/killruana/opt/vscode/bin/../code-oss: error while loading shared libraries: libgtk-3.so.0: cannot open shared object file: No such file or directory
Lourd est le parpaing de la réalité sur la tartelette aux fraises de nos illusions. :'(
Rendez-vous dans quelques mois pour la suite de mes aventures avec vscode.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Tutoriel 3D - 2D découpe au laser, le retour du tux
(Journaux LinuxFR)
Sommaire
- Tranche de pingouin
- Au début était le cube
- Il est gros vot manchot ?
- Et si on l’écartelait ?
- Mais quand est-ce qu’on coupe ?
- Et si on l’empalait ?
- On l’empale plus ?
- Parlons peu, parlons kerf
- C’est la lutte finale
- Le petit oiseau va sortir
- TuxOlaser
- Déboitage du tux et montage
- Tadaaaa
- A propos de licences
- Les fichiers
Tranche de pingouin
Chose promise, cause perdue. Voici comment transformer un modèle 3D en tranches de bois pour découpe laser. Et en bonus, mon essai initial de découpe en création originale.
Les outils que j’ai utilisé sont blender et inkscape, et ce juste parce que je les connaissais et donc plus facile pour expérimenter.Note aux amateurs de freecad, j’ai commencé à regarder comment ça marche, au cas où ce serait plus simple avec, si jamais je trouve une idée et le courage de refaire un tuto, ça me fera un zeugma.
Au début était le cube
Ouvrir un nouveau fichier dans blender et mettre la scène en métrique, car sinon les mesures ne sont pas fixées par taille réelle. Notez que à chaque étape du tuto on aura des soucis de conversion de dimensions, donc en fait… mais bon faut pas en profiter pour être négligent.
Retirer le cube et ajouter le Tux à la scène. Vous pouvez le trouver ainsi que toutes les licences à Tuuuuuuux
- Faire face au tux (1 au pavé num)
- Mettre la vue iso (5 au pavé num)
- sélectionner le tux
- passer en editor mode (tab)
- Sélectionner le dessous des pattes (B) qui est rond
- Niveler (SZ0)
- sélectionner les deux centres des pattes, (S) Snap cursor to selected
- rebasculer en object mode (tab) , transform origine to 3d cursor (object/transform)
Maintenant, le tux est calé pour avoir le plancher des pattes en comme origine, à la verticale du pseudo centre de gravité que nous venons de choisir.
mettre la bête en Z 0.
Il est gros vot manchot ?
Il nous faut choisir une taille, suffisamment grosse pour que ce soit cool, et pas trop gros pour limiter le prix. Comme l’objet c’est aussi tester une bonne quantité d’épaisseurs pour voir comment ajuster la taille théorique d’une planche par rapport à sa taille réelle (il reste du vide, la colle ça épaissit, les planches sont pas forcément pile à la taille).
Une planche 2mm chez sculpteo (chez qui je teste la découpe laser) fait 94cm*59cm, il faut aussi essayer de rester dans une seule planche avec tous les morceaux. Le tux est presque aussi large que haut, du coup on cherche une approximation de cube découpé en tranches et étalé fait la même surface en gardant un peu de marge. ça fait 55 tranches, donc une hauteur de 116.875mm
Et si on l’écartelait ?
Il nous faut séparer les pattes du corps du tux (ce sont des objets distincts dans le modèle de base en fait et elles s’interconnectent :
Il faut les réunir par booléen union au corps pour avoir un seul objet avec un intérieur/extérieur propre.On peut maintenant appliquer une subdivision sur le tux CTRL+3, parce que le tux aime la douceur, et pas que celle angevine.
Lui sculpter des yeux plus sympa, parce que même si tout le monde ne veut pas l’avouer, pour avoir l’air cool faut quand même avoir un peu l’air con.
Mais quand est-ce qu’on coupe ?
Patience, il faut regarder un peu avant de couper. Placer un plan plus grand que le tux au sol, genre 20cmx20cm et lui appliquer un booléen d’intersection avec le tux. Et regarder en bougeant le plan sur Z comment seront les tranches.
On voit deux endroits à problème, les ailes et la queue qui auront des tranches avec plus que un morceau, ce qui est plus complexe à coller.
par ex les ailes :
Ce sera lourd à coller ensuite, on peut mais pourquoi…
autant relier les ailes au tronc le plus légèrement possible, avec un lien de 1mm de large.
idem au niveau de la queue :J’ajoute un bloc en union au niveau de la queue, le plus ajusté possible par un booléen union.
Cela vous permettra de facilement coller, il sera toujours possible de le limer après collage.
Il faut bien nettoyer le résultat de l’union à l’intérieur du tux, ne pas laisser de cloisons internes, c’est à dire éviter d’avoir des plan à l’intérieur des plans :
Finir de nettoyer en retirant les doublons de vertices, boucher les trous, assurer les normales pour que ce soit clair ce qui est à l’intérieur et à l’extérieur.
Et si on l’empalait ?
Pensons au support central qui va nous permettre de facilement positionner et coller les tranches de tux, il va être en trapèze et ressembler à ça au niveau d’une tranche :
Le choix de la découpe sera donc toujours du côté le plus grand, en bas. Donc notre référence pour le positionnement des plans de découpe doit être la face basse de chaque tranche.
Replaçons le plan à 0.01mm en Z (pour éviter le chevauchement parfait des surface avec les pattes Z=0), pensez à remettre tous les éléments avec scale=1 (Ctrl+A scale and rotation) pour la suite.
Faire une array de 50 plans en Z espacés de 2.125mm, faire le booléen intersection avec le tux. Lors de la réalisation de mon bureau réel avec des tux, j’ai constaté que l’empilage de x tranches de 2mm n’a pas un résultat de x*2mm, mais avec l’air restant et la colle environ 2.125. Je vais affiner avec ce tux cette estimation mais déjà on part de 2.125mm par tranche.
On voit les tranches et on voit des petits problèmesUne tranche qui manque en haut et le cul qui a une mini tranche en bas.
Diminuer le overlap thresold du booléen pour que le problème du haut disparaisse :Remonter le point du bas du tux pour supprimer le second problème et non, ce n'est pas lui mettre un doigt dans le cul car ça ne doit pas rentrer :
Nickel !
Simulons une épaisseur des tranches pour avoir un aperçu du résultat réel, ajoutons au plan un modifier solidify 2mm avec l’offfet à +1 (vers le haut) pour suivre le plan d’avoir la face basse comme référence :
Le résultat est conforme, retirez le solidify, il ne doit pas interférer avec l’étape de création du lien central.
On l’empale plus ?
Mais si, mais si. En fait ce n’est pas obligatoire, mais ça facilite le positionnement des étages, et on peut aussi le garde sans le coller. Le lien central doit avoir une forme de trapèze et être parfaitement vertical, car pour l’instant sculpteo ne fait pas de découpe oblique.
Il doit faire une épaisseur égale à celle du bois. Pour mon exemple je suis resté sur mon approximation (2.125mm) mais normalement il faut prendre 2mm et ajuster avec l’épaisseur du kerf qui est la taille du laser laissant un vide de découpe autour du trait de coupe. En pratique lors de mon premier essai j’ai eu des soucis d’épaisseur et j’ai du poncer mon trapèze. Du coup comme ce n’est pas nécessaire d’ajuster. Je surestime cette fois-ci la taille du trapèze.
Il faut ajuster sa position pour qu’il traverse tout le tux, coup de chance c’est possible sur ce modèle en plaçant la traverse au centre de la dernière tranche du tux. Mais sinon on l’aurait simplement fait avec deux trapèzes sur deux hauteurs.
Ajustez la taille en X et la hauteur de la partie haute pour faire joli, elle va dépasser un peu et même arrondir sa tête (note postérieure en pratique le trapèze sera toujours trop court, il faut juger les tranches encore un peu plus grand que 2.125mm).En dessous ajuster aussi la taille en X pour donner un beau trapèze
On voit que c’est moche au niveau du pied
On va donc remodeler un peu le trapèze pour qu’il soit plus joli à cet endroit.
Parlons peu, parlons kerf
Le kerf c’est la partie du bois éliminée par le laser, en pratique la découpe est plus petite que le plan car le laser à une taille non ponctuelle. la découpe de la traverse dans les tranches sera donc un peu plus grande que prévu, et la traverse découpée plus court aussi que prévu.
Dans ce modèle, on peut ignorer le kerf et accepter les différences, elles seront minimes et les pièces collées seront bien ajustées.
appliquons donc le booléen différence entre le plan des tranches et la traverse
Le résultat est difficile à voir mais en vue fil de fer c’est visibleC’est la lutte finale
On peut passer à la phase finale, on réalise les “modifier” sur les planches, puis on aplati le trapèze en retirant les vertices d’un côté.
En mode éditeur, on sépare toutes les tranches (P+loose parts en mode édition) et on les étale dans le bon ordre en vue du dessus. Attention, les numéros générés lors de la réalisation de l’array ne sont pas forcément dans l’ordre de Z…
Pour ne pas me planter, je me met dans une vue adaptée et je bouge une par une les tranches avec des gx0.1 … Je vérifie bien que tout est dans l’ordre puis je met tout le monde à plat (sélectionner tout A puis SZ0)Nous allons avoir des soucis de conversion de taille entre blender puis Inkscape puis sculpteo… on commence par poser un étalon dans blender, un plan au sol de 1cm sur 90cm
Le petit oiseau va sortir
Enfin presque, il faut encore à faire la photo !
Il existe une option de rendering qui génère du svg.
Mettons la caméra au dessus en mode orthographique, d’abord une résolution 100% sur un ratio approximatif de mon rectangle incluant tout.
puis placer la caméra assez bien au dessus de la scène et changez les paramètres :L’échelle orthographique est ce qui correspond au zoom, ajustez la valeur pour que tout rentre au plus juste
Tout doit rentrer dans la fenêtre de rendering :
Maintenant depuis les user pref, activez le svg freestyle exporter :
Et activez les deux options freestyle et svg export depuis les options rendering
Pressez F12, une image svg sera générée dans le répertoire indiqué dans output nommé 0001.svg,Ouvrez le dans Inkscape, dégroupez et sélectionnez l’étalon. mettez lui une épaisseur de contour à 0 pour ne pas fausser la taille et regardez sa taille. Dans mon cas je tombe sur 35.719cm.
Je vais donc changer la résolution de l’image pour ajuster la taille d’un facteur de 90/35.719=2.52
Je change dans blender le render pour :Re F12 et vérification.
Mon étalon fait maintenant 1cm sur 90.01cm.
aller, on essaie avec un pixel de moins en Y :), on tombe sur 89.987. C’est moins bon, retour en arrière.Maintenant que l’on a les bonnes tailles dans Inkscape, il faut nettoyer. Parce que le freestyle a introduit des pixels de temps en temps.
Je prends donc chaque découpe pour la repositionner au mieux et aussi supprimer les traces.
Pour m’aider et aussi servir d’étalon entre Inkscape et sculpteo je place un cadre dans une autre couleur qui délimite ma sélection, 53.5cm de large sur 75cm de haut.
Et je fais tout rentrer dedans.
Je vérifie chaque pièce pour assurer qu’il n’y a pas de défaut, et j’assure les contours à 1px et mon cadre avec une couleur différente
C’est prêt.
Pour ceux qui sont plus observateurs que moi, vous verrez que j’ai oublié de grouper une fente dans une tranche. Moi je vais le voir au montage plus tard…TuxOlaser
J’upload chez sculpteo.
Deux couleurs sont détectées, l"une correspond au noir et l’autre au rouge du cadre. Les mesures n’ont pas été conservées, je ne sais pas pourquoi… mais mon cadre me permet de choisir un ajustement de taille à 26.5% qui me redonne les bonnes dimensions.Je peux alors désactiver le cadre rouge dans sculpteo (style 2 sur aucun et voila !
prêt à couper.Livraison comprise il vous en coûtera 53.33€.
Pour info, les tux du bureau ont coûté moins cher, ils étaient en une seule livraison et un peu plus petits, 72€ les 3.Déboitage du tux et montage
Je hais les video de unboxing, et me voilà moi même à déboiter…
Bon, puisqu’il faut :
la boite est bien protégée
et la planche dans la mousse
Les pièces sont tenues par du scotch, il faudra faire attention en retirant le scotch de ne pas casser les pièces fragiles.
Je numérote mes pièces avant de défaire, c’est moins cher que de faire des numéros au laser.
Ensuite on empile jusqu’à la fameuse pièce 33 qu’il faudra redécouper.Tadaaaa
A propos de licences
J’ai fouillé pour trouver les licences attachées au modèle de base, les voici :
https://opengameart.org/content/tux
https://opengameart.org/sites/default/files/license_images/gpl.png
http://www.gnu.org/licenses/gpl-3.0.html
https://opengameart.org/sites/default/files/license_images/cc-by.png
http://creativecommons.org/licenses/by/3.0/Les fichiers
Voila les fichiers sources blender et le inkscape (piece 33 corrigée)
fichier blender
fichier svgCommentaires : voir le flux atom ouvrir dans le navigateur
-
Falkon 3 le nouveau navigateur pour KDE
(Dépêches LinuxFR)
Vous souvenez‐vous de Qupzilla, petit projet commencé par le tout jeune David Rosca pour apprendre Qt, puis devenu un excellent navigateur WebKit ? En juillet 2017, pendant la réunion annuelle du projet KDE, l’Akademy, David Faure a proposé de remplacer Konqueror par Qupzilla.
Après quelques mois d’incubation, le bébé sort des éprouvettes : Falkon 3.01 est disponible depuis le 8 mai 2018. C’est un navigateur moderne, dont les onglets tournent dans des processus séparés, en utilisant QtWebEngine, lui‐même basé sur Chromium pour le rendu.
Il n’y a pas de grosses différences avec la dernière version de Qupzilla 2.2.6, c’est essentiellement une transposition vers le système de construction de KDE. Il faut bien commencer.- lien n°1 : Falkon.org
- lien n°2 : Qupzilla
- lien n°3 : L’annonce de la mutation
- lien n°4 : Journal des modifications
Les utilisateurs de Konqueror seront en terrain familier pour la partie Web et le menu de configuration, en revanche la navigation de fichiers n’est pas encore intégrée. Il faut bien commencer (bis).
Falkon protège bien votre vie privée (gestion des Cookies, de JavaScript, de HTML 5, Do Not Track), vous propose un greffon Flash (Pepper Flash), plusieurs moteurs de recherche (Duck Duck Go par défaut), un gestionnaire de sessions, des onglets avec indicateurs, un traducteur de pages Web, un validateur de code, des thèmes, une page « Speed Dial » facile à gérer, retrouve le contenu du formulaire quand on fait « précédent » — je reprends ma respiration, regardez les images :
Les indicateurs (cliquables) sur les onglets :
Le (très pratique) gestionnaire de sessions :
Le (sympathique) menu déroulant « clic droit » :Et comme il est jeune et crashe un peu, Falkon recharge automatiquement tous les onglets ouverts. À ce stade, vous le constatez sans doute, c’est dans l’esprit de KDE : un mélange de simplicité et de « super‐pouvoirs » à portée de configuration.
Quelques extensions disponibles :
- AdBlock, (San Ku Kaï c’est la bataille) contre les pubs ;
- KWallet Passwords, un portefeuille pour les gérer tous ;
- Vertical Tabs, les onglets bien dégagés sur les oreilles ;
- AutoScroll, pour les claustros qui craignent les ascenseurs ;
- Flash Cookie Manager, protège plus que plus la vie privée ;
- GreaseMonkey, soyez le maîîîître du navigateur (scripts dispos sur http://openuserjs.org/) ;
- ImageFinder, qui recherche par l’image, par l’image trouvera ;
- Mouse Gesture, pour les souriceaux maniaques ;
- PIM, pour jouer dans les formulaires ;
- StatusBar Icons, oh que c’est zouli ces petites friandises là en bas !
- Tab Manager, « Onglets ! Au rapport ! »
Les WebExtensions qui sont déjà gérées par Chrome/Chromium, Firefox, Edge et Opera ont encore un long chemin à parcourir.
L’extension ImageFinder en menu déroulant :
L’extension Vertical Tabs en mode hiérarchique :D’ores et déjà, Falkon est un navigateur à mon goût : avec toutes les extensions, plusieurs onglets et trois fenêtres ouvertes, il tourne comme un charme sans charger le système ; je n’ai pas de problème sur les sites Web, ou alors tellement mineurs que je fais avec.
Falkon est disponible pour GNU/Linux dans vos distributions et aussi en AppImage et Flatpak (via le dépôt KDE), sous Windows (à partir de Win 7) et macOS (à venir).
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Neatmail: un client mail minimaliste
(Journaux LinuxFR)
Sommaire
- Ali Gholami Rudi
- Ce que Neatmail ne fait pas
- Ce que Neatmail fait
- Le commande ex de neatmail
- Un script shell comme interface
- Conclusion
J’utilise depuis quelque temps un tout petit client mail, qui ne fait vraiment que le minimum, mais a une interface si particulière, qu’il me semble intéressant de vous le présenter. Il s’agit de Neatmail écrit par Ali Gholami Rudi.
Ali Gholami Rudi
Je connais Ali Gholami Rudi pour une implémentation de Troff à la fois pertinente en termes de fonctionnalités et dont le code source est très propre. Il a aussi écrit un compilateur (neatcc), une libc (neatlibc), et une implémentation de vi. C’est un développeur qui, plutôt qu’une éthique, semble défendre une certaine esthétique du logiciel, que je qualifierai de minimaliste: code source compréhensible par une personne seule, logiciel qui fait peu de choses, mais le fait bien, etc.
Neatmail le client mail qu'il s'est programmé, et celui‐ci met en scène toute l’esthétique de son auteur.
Ce que Neatmail ne fait pas
Neatmail ne fait que gérer un fichier mbox (une concaténation de mails). Ainsi, il ne sait ni rapatrier, ni envoyer les mails, il ne sait ni extraire, ni ajouter de pièce jointes, etc.
Mais en vérité, il n’a pas besoin de faire tout cela, car d’autres logiciels le font. Ali Gholami Rudi propose ainsi un pop3 pour rapatrier les mails depuis un serveur pop3, et smtp pour envoyer ses mails à un serveur smtp. Et il existe dans certaines distributions un ripmime pour extraire les pièces jointes d’un fichier mime.
Ce que Neatmail fait
Neatmail se contente donc d’effectuer des actions sur un fichier mbox. Les actions de bases sont:
‐ mk Génère une liste des mails contenus dans la mbox.
‐ ns Génère une liste des nouveaux mails présents dans la mbox.
‐ pg Affiche un des mails contenu dans la mbox.On peut donc l’utiliser ainsi:
# Obtient les mails pop3 # liste les mails, triés par fil de discussion neatmail mk ‐r ‐st ‐0 18from:48~subject: mbox # affiche le 3e mail neatmail pg mbox 3 # prépare une réponse neatmail pg ‐r mbox 3 > draft.eml vi draft.eml # envoie la réponse tail ‐n+2 draft.eml | smtp # garde une copie de la réponse cat draft.eml >> sent rm draft.eml
Mais en outre, neatmail peut interpréter les commandes ex contenues dans la liste des mails. Autrement dit, l’utilisateur est invité à ajouter des commandes à cette liste de mails, et donner le tout à neatmail qui se chargera de l’exécution:
neatmail mk ‐r ‐0 18from:48~subject > list.nm vi list.nm neatmail ex < list.nm
Le commande ex de neatmail
La commande ex de neatmail prend en entrée une liste de commandes, et les exécute sur un fichier mbox. Elle ignore toutes les lignes hormis celles commençant par deux points (commande ex) ou une lettre majuscule (un mail dans la liste). Les lignes commençant par une lettre majuscule de la forme "R100..", modifient le statut du message dont le nombre suit la lettre (ici, 100). Une telle ligne définit aussi le message actuel, celui sur lequel les commandes sont exécutées. Les commandes ex sont les suivantes:
‐ rm supprime le message courant.
‐ cp copie le message courant dans une mbox donnée.
‐ mv déplace le message courant dans une mbox donnée.
‐ hd modifie l’entête donnée du message courant.
‐ ft passe le message courant à une commande donnée.
‐ w écrit les modifications dans la mbox.
‐ tj joint les fils de discussion en modifiant l’entête "Reply‐To".
‐ ch coupe le message à l’offset indiqué.Par défaut, ces commandes agissent sur le message courant, mais il est aussi possible d’utiliser des adresses du type
2,5rm
pour effacer les messages 2 à 5. Il est aussi possible d’utiliser des expressions régulières du type/regex/rm
, oùregex
est recherché dans le sujet des messages. D’autres champs peuvent être spécifiés en utilisant l’expression^field:value
.Un script shell comme interface
Vous allez certainement penser que l’interface est un peu rude… À vrai dire, Ali Gholami Rudi n’utilise pas neatmail directement: un script shell (m) lui sert d’interface. Et c’est là que le logiciel brille: pour peu que l’on ait un peu l’habitude du shell, on peut se créer une interface sur mesure. On peut par exemple imiter l’interface de mh (un autre client mail non interactif un peu oublié). On pourrait créer une interface interactive. Bref, on peut faire ce qu’on veut.
J’utilise par exemple l’interface suivante:
m box inbox # liste les messages contenus dans la mbox inbox. m vi 3 # affiche le message 3 m next # affiche le message 4 m repl # ouvre mon éditeur sur une réponse préformatée au message 4 m add f.pdf # joint f.pdf à ma réponse m send # envoie ma réponse. m R # marque le message 4 comme lu. m com # enregistre les changements dans la mbox (ici, change l’entête du message 4)
Conclusion
Au jour le jour, je suis plutôt satisfait de l’ensemble. Le fait de travailler sur les mails en local est plutôt agréable: c’est fluide, offre une grande liberté d’organisation, s’associe bien à un système de sauvegarde ou de gestion de version, etc. Le fait que le client ne soit pas interactif apporte un certain confort d’usage: le shell est sous la main si besoin, je retrouve ma session de travail dans l’état où je l’ai laissée d’un jour à l’autre, il est facile d’implémenter des solutions pour revenir en arrière (cp…). Le fait de coupler le tout avec le shell offre une grande liberté dans la création de l’interface utilisateur.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Migrer Windows 10 d'un disque BIOS/MBR, vers un SSD en mode UEFI/GPT avec des logiciels libres
(Journaux LinuxFR)
Sommaire
- Introduction
- Prérequis
- Nomenclature
- Procédure de base
- Quelques pistes si ça ne fonctionne pas…
- Documentation, pour aller plus loin…
- Historique de révisions
Introduction
Ce tutoriel vous guide pas à pas pour migrer votre installation de
Windows qui est actuellement sur un disque dur de votre PC vers un
nouveau disque, en l'occurrence un SSD. A vrai dire, vous pouvez aussi
bien migrer vers un autre HDD.La spécificité de ce tutoriel est qu'elle utilise les outils fournis par
Microsoft avec Windows ainsi que des logiciels libres (Clonezilla
principalement, mais si quelque chose devait mal tourner vous pouvez avoir
besoin d'utiliser fdisk, gdisk ou testdisk pour ne citer qu'eux). Quand
j'ai voulu faire cette migration je n'ai pas trouvé de tutoriel
expliquant de bout en bout comment faire cette migration juste avec les
outils de Microsoft et des logiciels libres.Typiquement, vous pouvez avoir envie/besoin de faire cela car vous avez
acheté un nouveau disque pour remplacer l'ancien (par exemple car
l'ancien montre des signes de faiblesse, ou vous voulez améliorer la
réactivité de votre système).En plus de la migration du système d'exploitation, ce tutoriel vous
explique comment passer d'un démarrage en mode BIOS/MBR à un démarrage
en mode UEFI/GPT.Succinctement la démarche est la suivante, d'abord installer le nouveau
disque dans le PC, et initialiser la table de partition selon les normes
Microsoft. Puis cloner/dupliquer la partition contenant le système
d'exploitation à l'aide de Clonezilla. Ensuite et avant de redémarrer
dans le clone de Windows sur le SSD, faire quelques modifications dans
le registre pour que la lettre de lecteurC:
pointe vers la bonne
partition et éventuellement modifier le mode SATA en AHCI si vous le
modifiez aussi dans le UEFI/BIOS. Après cela, on va préparer la
partition système EFI/ESP pour que le PC puisse démarrer dessus et qu'il
démarre sur le Windows du SSD. Finalement, une fois dans le Windows du
SSD, on va réactiver l'"environnement de récupération de Windows".Mise en garde : Faites une sauvegarde de vos données avant toute
opération. Personne n'est à l'abri d'une mauvaise manipulation ou d'une
erreur.Prérequis
Compétences
Niveau de difficulté : Difficile.
Vous devez être à l'aise au niveau de l'utilisation de la ligne de
commande dans Windows, mais aussi assez à l'aise pour gérer les
partitions de votre disque. Savoir modifier le paramétrage de votre
Firmware UEFI/BIOS et aussi nécessaire. Ce tutoriel guide pas à pas pour
la majorité des opérations. Certaines n'ont pas été détaillées par souci
de simplicité et d'efficacité.Matériel
Le PC où vous voulez installer le SSD. Il faut qu'il soit en état de
marche. De plus il doit avoir un firmware UEFI. S'il n'a que un BIOS
standard, sans UEFI, ce tutoriel n'est pas adapté.Clé(s) USB ou plusieurs CD/DVD sur lequel vous aurez mis
Clonezilla, System rescue
CD et un environnement de démarrage
Windows PE, ou Windows RE, ou le DVD/Disque d'installation de Windows.Le disque SSD (testé avec Samsung SSD 860 EVO 250GB). Il doit avoir une
taille suffisante pour contenir votre partition de Windows. Dans tous
les cas, la taille de la partition qui contiendra Windows sur le SSD
doit être au moins égale à la taille de la partition Windows du HDD que
vous voulez cloner. Au besoin, pour remplir ce critère, réduisez la
taille de votre partition Windows avec le gestionnaire de disque de
Windows par exemple (ou un autre outil de gestion de partition, comme
gparted, sur le System Rescue CD). Cherchez sur internet si vous ne
savez pas comment faire.Logiciel
Windows 10 installé (en version 64 bits) (testé avec Win10 v1709)
Windows 10 PE ou support d'installation de Windows 10 (clé USB ou DVD) -
En Version 64 bits (testé avec un support d'installation de Win10 v1804)System rescue CD (version 5.2.2 par
exemple)Clonezilla installé sur une clé ou un CD.
Bien vérifier avant que votre système arrive à démarrer dessus. (Testé
avec Clonezilla 2.5.5-38)Nomenclature
SSD : désigne le nouveau SSD
HDD : désigne votre disque actuel, sur lequel est installé Windows
WinPE : un environnement de démarrage Windows PE, ou Windows RE, ou le
DVD/Disque d'installation de Windows. Il doit être sur un support
amovible (USB, CD ou DVD)S: La lettre de lecteur affectée à la partition Système EFI qui sera sur
le nouveau SSD (parfois appelée ESP, EFI_System_Partition ou encore
SYSTEM, ou EFI)N: Le clone de Windows, sur le SSD
O: Le Windows cloné, sur le HDD
C: La partition dans laquelle est installée Windows, lorsqu'on est dans
Windows (que ce soit le windows cloné, ou le clone)Les commandes doivent être lancées en tant qu'administrateur.
Procédure de base
Fixer et brancher le SSD dans l’ordinateur
Désactiver Windows FastStart (cf votre moteur de recherche préféré)
-
Initialiser et partitionner le disque à l'aide de Windows
- Démarrer sur le Windows installé ou WinPE
- Pour initialiser le disque, d'abord créer une table de partition,
puis partitionner le disque. Pour ce faire :
- Suivre les instructions de partitionnement UEFI/GPT selon Microsoft. Ci-dessous mon exemple, mais peut-être avez-vous besoin d'une partition "recovery" aussi, ou votre configuration nécessite quelques aménagements. Dans ce cas, voir les instructions de Microsoft et adapter pour vos besoins.
- Par exemple: une partition EFI de 260Mo, une partition
Microsoft Reserved (MSR) de 16Mo, une partition pour Windows
(taille au moins égale à la taille de la partition de Windows
à cloner). Pour informations, dans diskpart, les tailles que
vous donnez en MB/Mo sont en réalité des MiB/Mio (220 =
10242 octets).
- Ouvrir une invite de commande en mode administrateur et
lancer
diskpart
. Et une fois dans diskpart :
- list disk pour lister les disques et connaître le n° du SSD.
- select disk # avec le numéro du SSD à la place de #
- clean Supprime le contenu du disque / l'initialise
- convert gpt Définit que le disque aura une table de partition GPT
- create partition efi size=260 Crée une partition EFI de 260MiB
- format quick fs=fat32 label="System" Formater la partition EFI au format FAT32
- assign letter="S" Lui donner la lettre S
- create partition msr size=16 Créer une partition Microsoft Reserved de 16MiB
- create partition primary
Créer la partition pour Windows (l'équivalent du
C:
) - format quick fs=ntfs label="Windows" Formater la partition pour Windows au format NTFS
- assign letter="N" Lui donner la lettre N
- list volume Liste les volumes. Permet de voir la table de partition.
- exit Quitte diskpart
- Ouvrir une invite de commande en mode administrateur et
lancer
diskpart
. Et une fois dans diskpart :
-
Cloner le Windows installé sur le HDD. Ceci sera fait à l'aide de
Clonezilla- Redémarrer dans Clonezilla
- Une fois dans clonezilla, et si vous êtes confortable avec les
lignes de commande Linux, éventuellement supprimer de la partition
Windows du HDD les fichiers
pagefile.sys
,hyberfil.sys
(désactiver windows faststart avant),swapfile.sys
. - Cloner la partition Windows du HDD vers le SSD (de préférence,
partition de même taille, et de toutes façons, la partition de
destination doit être plus grande que la source. Si ce n'est pas
le cas, réduisez d'abord la taille de votre partition Windows
depuis Windows). Dans clonezilla, utiliser le mode Partition vers
Partition, et en mode Export. Utiliser les options
-e1 auto
(automatically adjust file system geometry for a ntfs boot partition if exists)-e2
(sfdisk uses CHS of hard drive from EDD (for non grub loader)-r
(resize filesystem to fit partition size of target)-m
(do NOT clone boot loader)-v
(verbose) - Optionnellement cacher la partition contenant le windows source de la table de partition du disque source (si vous ne savez pas à quoi ça sert, passez votre chemin). Pour cela modifier le type de partition de la partition NTFS de windows (en principe, NTFS a un id de « 7 ». On peut utiliser id 17 pour la partition cachée : 17 correspond à « IFS Hidden »). Utiliser cfdisk ou fdisk pour faire ce changement (ce sont des programmes linux).
Dans le Firmware UEFI (ou BIOS-UEFI), on peut en profiter pour passer
du mode SATA "IDE" vers "AHCI". Windows n'aime pas ce changement et
il faut donc faire une opération dans le registre qui est
détaillée ci-dessous. Tant que vous ne le faites pas, vous aurez un
écran de plantage bleu de windows au démarrage (BSOD).Si vous voulez être sûr de ne pas faire de bêtise dans le Windows que
vous venez de cloner, je vous conseille d'éteindre l’ordinateur & de
débrancher l’ancien disque. Ainsi vous ne risquez pas de modifier le
mauvais fichier de registre (en l'occurrence celui de votre Windows
sur le HDD)-
Effectuer quelques opérations sur le Windows de destination (celui
sur le SSD) avant qu'on ne démarre dessus. En particulier corriger le
registre pour affecter la lettre de lecteur C: à la bonne partition,
et si le paramétrage du Firmware UEFI (BIOS-UEFI) a été modifié pour
passer de SATA Mode PCI vers AHCI, on va aussi faire ce changement
pour que ca fonctionne.- Redémarrer dans WinPE (en Mode UEFI, pas MBR !)
- Tout d'abord déterminer la lettre de lecteur affectée au clone
de Windows, celui qui est sur le SSD. Ou, s'il n'y a pas de
lettre affectée, lui en donner une, par exemple
N:
(lettre utilisée dans les exemples qui suivent)- Pour cela, lancer dans
diskpart
- list volume
Ce qui retourne la liste des volumes avec la lettre de lecteur qui a été affectée à chacun.
- list volume
- Si aucune lettre de lecteur n'est affectée, il faut alors
lui en affecter une. Pour cela, lancer dans
diskpart
- select volume # (avec # étant le numéro du volume qui contient le nouveau windows)
- assign letter=N
S'il n'est pas possible d'utiliser select volume alors faire comme ceci - list disk
- select disk # (# étant le numéro affecté au SSD)
- list partition
- select partition # (# étant le numéro affecté à la partition de Windows sur le SSD, probablement 3)
- assign letter=N
- Pour cela, lancer dans
diskpart
- Faire un CHKDSK /F sur la lettre du nouveau Win
- Pour que la partition
C:
utilisée par Windows soit celle du SSD et pas celle de l’ancien disque, modifier une clé de registre du nouveau Windows :- Lancer
REGEDIT
et dans le registre HKEY_LOCAL_MACHINE monter la ruche
N:\Windows\System32\Config\SYSTEM
. Lui donner le nom "NewWin" On s’intéresse àHKEY_LOCAL_MACHINE\NewWin\MountedDevices
. Ce sont là les valeurs qui sont dans le registre "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
" lorsqu'on est dans l'installation de Windows.- Dans
HKEY_LOCAL_MACHINE\NewWin\MountedDevices
modifier la lettre de lecteur C: en renommant \DosDevices\C: par \DosDevices\O: (car la valeur fait référence à la partition de l'ancien Windows sur le HDD et on ne veut pas, en démarrant, utiliser cette partition mais celle de son clone qui est sur le SSD). Ainsi, lorsqu'on démarrera dans le nouveau Windows, la partition contenant le Windows sur le HDD aura la lettre O:, et la partition contenant le Windows sur le SSD aura la lettre C: - Créer une nouvelle valeur binaire nommée \DosDevices\C:
et lui donner comme contenu celui de \DosDevices\N: qui
est renseignée dans le registre WinPE, c'est-à-dire là
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
(C:
étant la lettre qu'utilisait le Windows du HDD comme partition où il y a le dossier \Windows ) - ATTENTION: Bien vérifier que la copie a fonctionné et qu'il y a les bonnes valeurs, car dans mes essais, j'ai du m'y reprendre à 2 fois car le 1er "coller" ne collait pas ce que je voulais.
- En principe c'est tout. Mais d'après certaines sources,
il y aurait une clé \\?\Volume{GUID} ayant le même
contenu que le \DosDevices\O: qu’on vient de modifier.
Chez moi ce n'était pas le cas. Si vous avez une telle
valeur, alors il faut lui donner le contenu de
\DosDevices\N: depuis le registre WinPE
- Dans
- Lancer
REGEDIT
et dans le registre HKEY_LOCAL_MACHINE monter la ruche
- Si en même temps que la migration on veut aussi passer du mode
SATA IDE vers AHCI alors il faut encore faire ceci. Cela a été
repris du site
tomshardware.co.uk
- Toujours dans
REGEDIT
avec la ruche montée en
HKEY_LOCAL_MACHINE\NewWin
- Aller à
HKEY_LOCAL_MACHINE\NewWin\ControlSet000\Services\storahci\StartOverride
- Changer la valeur DWORD de 3 à 0.
- Au redémarrage, si ça n'a pas été fait, changer la paramétrage du contrôleur SATA de IDE à AHCI. Au redémarrage, Windows devrait directement démarrer correctement et sans plantage (BSOD).
- Toujours dans
REGEDIT
avec la ruche montée en
- Rendre le disque bootable en installant les outils EFI de
microsoft et configurant le Magasin BCD (BCD Store)
- D'abord assigner une lettre de lecteur à la partition ESP
- MOUNTVOL S: /S
Si ca n'a pas fonctionné, faire comme ceci dans diskpart - list disk
- select disk # (# est le numero du SSD retourné par list disk)
- list partition
- select partition # (# est probablement 1)
- assign letter=S
- MOUNTVOL S: /S
- Puis lancer
bcdboot
N:\windows /l fr-fr /s S: /f UEFI
- Où
N:\Windows
est le répertoire contenant le clone de Windows sur le SSD) - S: = partition EFI
- Où
- D'abord assigner une lettre de lecteur à la partition ESP
- Tout d'abord déterminer la lettre de lecteur affectée au clone
de Windows, celui qui est sur le SSD. Ou, s'il n'y a pas de
lettre affectée, lui en donner une, par exemple
- Redémarrer dans WinPE (en Mode UEFI, pas MBR !)
Redémarrer, et avant le lancement de Windows vérifier votre UEFI
(ou BIOS-UEFI). Il faut qu'il soit configuré pour démarrer par défaut
en mode UEFI et pas en mode BIOS. Penser aussi à corriger le
paramétrage SATA si cela a été modifié dans le registre de Windows.
Le paramétrage du démarrage avecbcdboot N:\windows /l fr-fr /s S: /f UEFI
a normalement créé le
magasin BCD, mis tous les fichiers EFI sur la partition SYSTEME (ESP,
partiton EFI, la 1ère du SSD) et dit au firmware UEFI qu'il doit
automatiquement démarrer avec le gestionnaire de démarrage
(boot manager) de Windows.-
Une fois qu’on a réussi à démarrer dans la copie de Windows
- Réactiver le "FastBoot"
- Réactiver l'environnement de récupération de Windows
en lançant, depuis une ligne de commande avec les droits
administrateur, la commande
reagentc.exe /enable
. Vérifier avecreagentc.exe /info
. Et s'il y a une erreur essayer avecreagentc.exe /enable /setreimage /path C:\Recovery\WindowsRE
oùC:\Recovery\WindowsRE
est le dossier où se trouve le fichierWinre.wim
- Vérifier que tout est en ordre. Eventuellement donner un nouveau
nom à votre partition
C:
(pour la différencier de celle sur le HDD) en lançant:LABEL [drive:][label]
- Redémarrer encore une fois en laissant le processus de démarrage se faire tout seul pour vérifier que tout est ok.
Réinsérer l'ancien disque dur.
Normalement, il devrait être possible de redémarrer dans l'ancien
Windows, du moment que vous savez comment booter en MBR, et sous
réserve de ne pas avoir modifié le mode SATA dans le UEFI/BIOS. SI
c'est le cas, vous pouvez envisager de modifier le registre du
Windows du HDD, ou de modifier le paramétrage du UEFI/BIOS.
Si vous avez aussi Linux d'installé sur le HDD, il devrait toujours
être possible de le démarrer en mode BIOSOn peut diminuer/augmenter la taille de la partition C: du SSD (Pour
un SSD TLC ou VNAND, on peut par exemple laisser de l’espace libre à
la fin ~10 % de la capacité du disque d'après le logiciel Samsung
Magician, pour un SSD 860 EVO)En principe, puisqu’on boot en EFI on peut enlever sur le clone
Windows sur le SSD les fichiers\bootmgr
et\Boot\BCD
puisque ce
sont ceux qui étaient utilisés pour un boot en mode BIOS/MBR et que
désormais on est en EFI. Vous pouvez d'abord les renommer et vérifier
que ca ne change rien au prochain boot, plutôt que de les supprimer
tout de suite.
Quelques pistes si ça ne fonctionne pas…
- Faire un chkdsk sur la nouvelle partition
- Recréer le bootsector du NTFS avec testdisk (dispo sur System Rescue CD, mais peut être aussi dans Clonezilla ? Je n'ai pas vérifié)
- Vérifier le BCD:
- On peut vérifier si le Magasin BCD est ok en lançant (en
tant qu'administrateur)
bcdedit /store s:\EFI\Boot\Microsoft\BCD /enum
(Si la partition système n'est pas montée sur S:, lancer
Mountvol s: /s
- Doc BCDEDIT (sur la page, il y a aussi les liens vers bcdboot (initialise BCD et copie fichiers de démarrage sur la partition systeme) et bootsect (pour basculer entre NTLDR et Bootmgr)
- https://msdn.microsoft.com/fr-fr/library/windows/hardware/mt450468(v=vs.85).aspx
- https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcd-system-store-settings-for-uefi
- On peut vérifier si le Magasin BCD est ok en lançant (en
tant qu'administrateur)
bcdedit /store s:\EFI\Boot\Microsoft\BCD /enum
(Si la partition système n'est pas montée sur S:, lancer
Mountvol s: /s
- Vérifier que la partition EFI est bien initialisée (présence des
fichiers
\EFI
,\EFI\Boot\
,\EFI\Microsoft\
…) Si ce n'est pas le cas, il y a eu un problème avec bcdbootN:\windows /l fr-fr /s S: /f UEFI
- Vérifier le boot manager du bios (démarrage en UEFI ou MBR ? Gestionnaire de démarrage par défaut ? Présence du gestionnaire de démarrage de Windows ?)
- A priori, pas utile : Commandes à lancer dans WinPE
- Pour recréer le boot sector de la partition systeme (EFI):
bootrec
/fixboot
- Pour chercher les OS sur le disque et les mettre dans le
bootloader
bootrec
/scanos
- Pour recréer le boot sector de la partition systeme (EFI):
bootrec
- Quelques commandes de bcdedit pour modiser la valeur de certains
éléments du magasin BCD. Inutile car le BCD Store qui est utilisé
lorsqu'on démarre en mode EFI n'est pas le même que celui utilisé
dans un démarrage en mode MBR. Donc, pas besoin de chercher à
modifier le BCD. Je garde pour info : les lettres sont celles telles
que définies dans le système où on est (WinPE par ex).
Doc BCDEDIT
- bcdedit /set {bootmgr} device \Device\HarddiskVolume1
- bcdedit /set {default} device \Device\HarddiskVolume3
- bcdedit /set {default} osdevice \Device\HarddiskVolume3
- Ou à la place de \Device\HarddiskVolume1 mettre les lettres de lecteur :
- bcdedit /set {bootmgr} device partition=S:
- bcdedit /set {default} device partition=C:
- bcdedit /set {default} osdevice partition=C:
Documentation, pour aller plus loin…
A propos du EFI/UEFI:
- La procédure de Boot en cas UEFI ou BIOS est bien décrite ici: https://www.boyans.net/RepairWindows/RepairWindowsBCD.html
- La partition Système EFI: https://wiki.archlinux.org/index.php/EFI\_System\_Partition
- Managing EFI Boot Loaders for Linux: http://www.rodsbooks.com/efi-bootloaders/principles.html
A propos de l'entrée MountedDevices du registre:
http://diddy.boot-land.net/firadisk/files/mounteddevices.htmSi on veut y accéder, par défaut les fichiers du BCD sont cachés. Pour
les rendre visibles:- attrib bcd -s -h -r
- mv bcd bcd.bak
- bootrec /rebuildbcd
Documentation bcdedit:
- http://diddy.boot-land.net/bcdedit/
- Concernant les valeurs possibles pour « device » ou « osdevice » dans bcdedit http://www.diddy.boot-land.net/bcdedit/files/device.htm
MBR Partition ID
- NB: Une partition Recovery Windows a un part_id de « 0x27 »: https://www.win.tue.nl/~aeb/partitions/partition\_types-1.html
A propos des disk ID (=Disk signatures):
- http://kb.macrium.com/KnowledgebaseArticle50152.aspx . En principe pas de pb, puisqu’on n’a pas cloné tout le disque mais juste une partition, et que le pb de signature du disque est lié à la copie du MBR (1er secteur du disque {et pas de la partition}). Cela concerne probabement aussi le clonage de la table de partition GPT puisqu'il y a aussi un id dedans…
- Fixing Disk Signature Collisions: https://blogs.technet.microsoft.com/markrussinovich/2011/11/06/fixing-disk-signature-collisions/
Si besoin de supprimer du registre les entrées de disques qui ne sont
pas connectés ou sans lettre assignée lancer:mountvol /R
. Ce
programme permet aussi de lister les lettres de volumes avec leur GUID
(GUID pour ce système uniquement, il n’est pas stocké dans la partition,
ni ailleurs sur le disque, il est assigné par windows pour un couple
(signature de disque/partition offset) dans une instance de windows
alors que dans une autre instance de windows la même partition sur le
même disque aura ce GUID différent)Changer le label du volume: commande
LABEL [drive:][label]
Historique de révisions
Vous trouverez la dernière version de ce tutoriel sur ma page perso
de tutoriels informatique.
Vous y trouverez aussi la version HTML, PDF et TXT.2018-06-17 : Ajout d'une note indiquant que ce tutoriel utilise des
logiciels libres2018-06-11 : Correction de la forme et de fautes d'orthographe
2018-05-28
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Télécharger tous les fichiers PDF d’un site web
(Journaux LinuxFR)
Il y a quelque temps j'ai eu besoin de télécharger tous les PDF d'un gros site web, et puis d'un autre…
J'ai cherché un moment comment obtenir ce que je voulais avec
wget
mais sans grand succès, soit wget explore récursivement le site en téléchargeant toutes les pages, soit il ne récupère que les fichiers voulus, mais je n'ai pas trouvé comment associer les deux comportements (et il serait logique quewget
ait besoin de télécharger les pages du site exploré pour savoir où aller ensuite). Du coup, j'ai bidouillé un truc en Python dans l'urgence, et puis, ayant à nouveau un exercice similaire, j'ai pu raffiner. Ça donne aujourd'hui :doc_crawler.py
.L'idée est simple, sans autre arguments le logiciel explore le site web pointé et liste les URL des fichiers croisés (PDF, ODT, ZIP…). On peut alors rediriger cette liste dans un fichier, puis demander, dans un deuxième temps (typiquement la nuit suivante) à
doc_crawler.py
de télécharger ce qui est listé dans le fichier. Ça permet de vérifier que la liste a la bonne tête avant de passer aux choses sérieuses, sans changer d'outil. Par défaut,doc_crawler.py
attendra un nombre aléatoire de secondes (de 0 à 5) entre chaque téléchargement histoire de rester discret.Enfin, il est possible de passer une URL en argument et de préciser qu'il faut juste télécharger ce fichier pour finir le boulot à la main sans changer d'outil, en cas de besoin.
doc_crawler.py [--accept=jpe?g$] [--download] [--single-page] [--verbose] http://…
doc_crawler.py [--wait=3] [--no-random-wait] --download-files url.lst
doc_crawler.py [--wait=0] --download-file http://…
Tout est précisé dans le README sur (Github et Pypi, et illustré sur Grimoire-Command.es (wget, doc_crawler.py)).Commentaires : voir le flux atom ouvrir dans le navigateur
-
LinuxFr.org : première quinzaine de juin 2018
(Journaux LinuxFR)
Nonante-huitième épisode dans la communication entre les différents intervenants autour du site LinuxFr.org : l’idée est tenir tout le monde au courant de ce qui est fait par les rédacteurs, les admins, les modérateurs, les codeurs, les membres de l’association, etc.
L’actu résumée (
[*]
signifie une modification du sujet du courriel) :Statistiques
Du 1er au 15 juin 2018
- 1528 commentaires publiés (dont 8 masqués depuis) ;
- 248 tags posés ;
- 80 comptes ouverts (dont 6 fermés depuis) ;
- 35 entrées de forums publiées (dont 0 masquée depuis) ;
- 20 liens publiés (dont 1 masqué depuis) ;
- 21 dépêches publiées ;
- 25 journaux publiés (dont 1 masqué depuis) ;
- 3 entrées nouvelles, 1 corrigée dans le système de suivi ;
- 1 sondage publié ;
- 0 pages wiki publiées (dont 0 masquée depuis).
Listes de diffusion (hors pourriel)
Liste webmaster@ - [restreint]
- R.A.S.
Liste linuxfr-membres@ — [restreint]
- [membres linuxfr] Bouffe des 20 ans le 28 juin à Paris
Liste meta@ - [restreint]
- [Meta] Incident du jour sur SSL/TLS
- [Meta] Quel avenir pour la tribune ?
Liste moderateurs@ - [restreint]
- [Modérateurs] certificat linuxfr expiré
- [Modérateurs] Incident du jour sur SSL/TLS
- [Modérateurs] Certificat SSL
- [Modérateurs] où se trouvent les CSS de Linuxfr
[*]
- [Modérateurs] forum - bug pour s'inscrire ?
Liste prizes@ - [restreint]
- [Prizes] LinuxFr prizes recap du samedi 9 juin 2018, 13:35:23 (UTC+0200)
- [Prizes] J'ai gagné un livre!
Liste redacteurs@ - [public]
- [Rédacteurs] Incident du jour sur SSL/TLS
Liste team@ - [restreint]
- [team linuxfr] Certificat SSL du site linuxfr.org expiré
- [team linuxfr] Tweet de Laurent Jouanneau (@ljouanneau)
- [team linuxfr] Incident du jour sur SSL/TLS
- [team linuxfr] Purge du compte X
[*]
- [team linuxfr] réouverture de compte
- [team linuxfr] Organisez des événements dans le cadre de la Fête des Possibles, du 15 au 30 septembre 2018
Liste webmaster@ — [restreint]
- R.A.S.
Canal IRC adminsys (résumé)
- certificat X.509 périmé (encore merci à tous ceux qui l'ont signalé), passage à Let's Encrypt et communication post-incident
- renouvellement du domaine (encore merci Yann)
- dernière version de Jessie (8.11) prévu le 23 juin, et ensuite passage en fin de vie
- question relative à la configuration DMARC de la liste Sympa des modérateurs qui change le From de l'émetteur dans certains cas
- rachat de GitHub par Microsoft et dépôts LinuxFr.org. Faut-il bouger et pourquoi.
- Let's Encrypt et HTTP en clair pour le renouvellement ? Voir par exemple la discussion
- discussion sur les aspects sécurité de l'affichage distant d'images sur la tribune
- « 20 ans le bel âge pour mourir », ah non ça parle de Yahoo Messenger, pas de nous
- 20 ans du site et POSS en décembre ?
- courriels envoyés pour préparer les entretiens des 20 ans
- peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
- travaux en cours pour nettoyer le dépôt git d'admin (avec des fichiers générés par ansible notamment). Sans oublier de finaliser la partie Let's Encrypt…
- toujours un conteneur à migrer en Jessie, et ensuite trois en Stretch. Et aussi un hôte Trusty à mettre à jour.
Tribune de rédaction (résumé)
Tribune de modération (résumé)
- peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
- du spam
- améliorations de CSS proposées par voxdemonix
- les admins du site ont des facilités techniques pour traquer les spammeurs et les multis, par rapport aux modérateurs
- retour des Geek Faeries
Commits/pushs de code https://github.com/linuxfrorg/
- (springcleaning) admin-linuxfr.org en cours de conversion vers Ansible
- Allow users to choose the source for their tribune smileys in prefere…
- Add a border for missing title on images
- Fix max height for image on computer screen
Divers
- Geek Faëries, c'était du 1er au 3 juin : conférence « LinuxFr.org, 20 ans que ça geeke » et table ronde « Ces plates‐formes du Libre qui soutiennent les communautés » avec l'Agenda du Libre et En Vente Libre. Encore plein de mercis à Bookynette pour le Village du libre, à l'équipe organisatrice des GF, et à Marco et Marius pour l'hébergement.
- RMLL 2018 Strasbourg : conférence LinuxFr.org : les 20 ans d'un espace d'apprentissage, de communication et d'échange, table ronde Ces plateformes du Libre qui soutiennent les communautés (même thème que celle tenue aux Geek Faëries) et stand
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Quel est votre langage de développement préféré pour mobile en 2015 ? Venez partager votre expérience
(Développez.com)
Quel est votre langage de développement préféré pour mobile en 2015 ?
Venez partager votre expérience
Chers membres du club,
Suite au précédent sondage 2014 sur votre langage de développement préféré pour mobile en 2014, nous avons décidé de le renouveler, pour cette année 2015.
Le classement en 2014 était :
- HTML5/JavaScript avec 35,83 %
- C#/XAML avec 26,19 %
- C++ (Qt, Embarcadero, RAD Studio, etc.) avec 19,05 %
- Java avec 19,05 %
- Objective C avec 11,90 %
- QML (Qt) avec 7,14 %
- Swift avec 2,38 %
9,52... -
Tutoriel 3D - 2D découpe au laser, le retour du tux
(Journaux LinuxFR)
Sommaire
- Tranche de pingouin
- Au début était le cube
- Il est gros vot manchot ?
- Et si on l’écartelait ?
- Mais quand est-ce qu’on coupe ?
- Et si on l’empalait ?
- On l’empale plus ?
- Parlons peu, parlons kerf
- C’est la lutte finale
- Le petit oiseau va sortir
- TuxOlaser
- Déboitage du tux et montage
- Tadaaaa
- A propos de licences
- Les fichiers
Tranche de pingouin
Chose promise, cause perdue. Voici comment transformer un modèle 3D en tranches de bois pour découpe laser. Et en bonus, mon essai initial de découpe en création originale.
Les outils que j’ai utilisé sont blender et inkscape, et ce juste parce que je les connaissais et donc plus facile pour expérimenter.Note aux amateurs de freecad, j’ai commencé à regarder comment ça marche, au cas où ce serait plus simple avec, si jamais je trouve une idée et le courage de refaire un tuto, ça me fera un zeugma.
Au début était le cube
Ouvrir un nouveau fichier dans blender et mettre la scène en métrique, car sinon les mesures ne sont pas fixées par taille réelle. Notez que à chaque étape du tuto on aura des soucis de conversion de dimensions, donc en fait… mais bon faut pas en profiter pour être négligent.
Retirer le cube et ajouter le Tux à la scène. Vous pouvez le trouver ainsi que toutes les licences à Tuuuuuuux
- Faire face au tux (1 au pavé num)
- Mettre la vue iso (5 au pavé num)
- sélectionner le tux
- passer en editor mode (tab)
- Sélectionner le dessous des pattes (B) qui est rond
- Niveler (SZ0)
- sélectionner les deux centres des pattes, (S) Snap cursor to selected
- rebasculer en object mode (tab) , transform origine to 3d cursor (object/transform)
Maintenant, le tux est calé pour avoir le plancher des pattes en comme origine, à la verticale du pseudo centre de gravité que nous venons de choisir.
mettre la bête en Z 0.
Il est gros vot manchot ?
Il nous faut choisir une taille, suffisamment grosse pour que ce soit cool, et pas trop gros pour limiter le prix. Comme l’objet c’est aussi tester une bonne quantité d’épaisseurs pour voir comment ajuster la taille théorique d’une planche par rapport à sa taille réelle (il reste du vide, la colle ça épaissit, les planches sont pas forcément pile à la taille).
Une planche 2mm chez sculpteo (chez qui je teste la découpe laser) fait 94cm*59cm, il faut aussi essayer de rester dans une seule planche avec tous les morceaux. Le tux est presque aussi large que haut, du coup on cherche une approximation de cube découpé en tranches et étalé fait la même surface en gardant un peu de marge. ça fait 55 tranches, donc une hauteur de 116.875mm
Et si on l’écartelait ?
Il nous faut séparer les pattes du corps du tux (ce sont des objets distincts dans le modèle de base en fait et elles s’interconnectent :
Il faut les réunir par booléen union au corps pour avoir un seul objet avec un intérieur/extérieur propre.On peut maintenant appliquer une subdivision sur le tux CTRL+3, parce que le tux aime la douceur, et pas que celle angevine.
Lui sculpter des yeux plus sympa, parce que même si tout le monde ne veut pas l’avouer, pour avoir l’air cool faut quand même avoir un peu l’air con.
Mais quand est-ce qu’on coupe ?
Patience, il faut regarder un peu avant de couper. Placer un plan plus grand que le tux au sol, genre 20cmx20cm et lui appliquer un booléen d’intersection avec le tux. Et regarder en bougeant le plan sur Z comment seront les tranches.
On voit deux endroits à problème, les ailes et la queue qui auront des tranches avec plus que un morceau, ce qui est plus complexe à coller.
par ex les ailes :
Ce sera lourd à coller ensuite, on peut mais pourquoi…
autant relier les ailes au tronc le plus légèrement possible, avec un lien de 1mm de large.
idem au niveau de la queue :J’ajoute un bloc en union au niveau de la queue, le plus ajusté possible par un booléen union.
Cela vous permettra de facilement coller, il sera toujours possible de le limer après collage.
Il faut bien nettoyer le résultat de l’union à l’intérieur du tux, ne pas laisser de cloisons internes, c’est à dire éviter d’avoir des plan à l’intérieur des plans :
Finir de nettoyer en retirant les doublons de vertices, boucher les trous, assurer les normales pour que ce soit clair ce qui est à l’intérieur et à l’extérieur.
Et si on l’empalait ?
Pensons au support central qui va nous permettre de facilement positionner et coller les tranches de tux, il va être en trapèze et ressembler à ça au niveau d’une tranche :
Le choix de la découpe sera donc toujours du côté le plus grand, en bas. Donc notre référence pour le positionnement des plans de découpe doit être la face basse de chaque tranche.
Replaçons le plan à 0.01mm en Z (pour éviter le chevauchement parfait des surface avec les pattes Z=0), pensez à remettre tous les éléments avec scale=1 (Ctrl+A scale and rotation) pour la suite.
Faire une array de 50 plans en Z espacés de 2.125mm, faire le booléen intersection avec le tux. Lors de la réalisation de mon bureau réel avec des tux, j’ai constaté que l’empilage de x tranches de 2mm n’a pas un résultat de x*2mm, mais avec l’air restant et la colle environ 2.125. Je vais affiner avec ce tux cette estimation mais déjà on part de 2.125mm par tranche.
On voit les tranches et on voit des petits problèmesUne tranche qui manque en haut et le cul qui a une mini tranche en bas.
Diminuer le overlap thresold du booléen pour que le problème du haut disparaisse :Remonter le point du bas du tux pour supprimer le second problème et non, ce n'est pas lui mettre un doigt dans le cul car ça ne doit pas rentrer :
Nickel !
Simulons une épaisseur des tranches pour avoir un aperçu du résultat réel, ajoutons au plan un modifier solidify 2mm avec l’offfet à +1 (vers le haut) pour suivre le plan d’avoir la face basse comme référence :
Le résultat est conforme, retirez le solidify, il ne doit pas interférer avec l’étape de création du lien central.
On l’empale plus ?
Mais si, mais si. En fait ce n’est pas obligatoire, mais ça facilite le positionnement des étages, et on peut aussi le garde sans le coller. Le lien central doit avoir une forme de trapèze et être parfaitement vertical, car pour l’instant sculpteo ne fait pas de découpe oblique.
Il doit faire une épaisseur égale à celle du bois. Pour mon exemple je suis resté sur mon approximation (2.125mm) mais normalement il faut prendre 2mm et ajuster avec l’épaisseur du kerf qui est la taille du laser laissant un vide de découpe autour du trait de coupe. En pratique lors de mon premier essai j’ai eu des soucis d’épaisseur et j’ai du poncer mon trapèze. Du coup comme ce n’est pas nécessaire d’ajuster. Je surestime cette fois-ci la taille du trapèze.
Il faut ajuster sa position pour qu’il traverse tout le tux, coup de chance c’est possible sur ce modèle en plaçant la traverse au centre de la dernière tranche du tux. Mais sinon on l’aurait simplement fait avec deux trapèzes sur deux hauteurs.
Ajustez la taille en X et la hauteur de la partie haute pour faire joli, elle va dépasser un peu et même arrondir sa tête (note postérieure en pratique le trapèze sera toujours trop court, il faut juger les tranches encore un peu plus grand que 2.125mm).En dessous ajuster aussi la taille en X pour donner un beau trapèze
On voit que c’est moche au niveau du pied
On va donc remodeler un peu le trapèze pour qu’il soit plus joli à cet endroit.
Parlons peu, parlons kerf
Le kerf c’est la partie du bois éliminée par le laser, en pratique la découpe est plus petite que le plan car le laser à une taille non ponctuelle. la découpe de la traverse dans les tranches sera donc un peu plus grande que prévu, et la traverse découpée plus court aussi que prévu.
Dans ce modèle, on peut ignorer le kerf et accepter les différences, elles seront minimes et les pièces collées seront bien ajustées.
appliquons donc le booléen différence entre le plan des tranches et la traverse
Le résultat est difficile à voir mais en vue fil de fer c’est visibleC’est la lutte finale
On peut passer à la phase finale, on réalise les “modifier” sur les planches, puis on aplati le trapèze en retirant les vertices d’un côté.
En mode éditeur, on sépare toutes les tranches (P+loose parts en mode édition) et on les étale dans le bon ordre en vue du dessus. Attention, les numéros générés lors de la réalisation de l’array ne sont pas forcément dans l’ordre de Z…
Pour ne pas me planter, je me met dans une vue adaptée et je bouge une par une les tranches avec des gx0.1 … Je vérifie bien que tout est dans l’ordre puis je met tout le monde à plat (sélectionner tout A puis SZ0)Nous allons avoir des soucis de conversion de taille entre blender puis Inkscape puis sculpteo… on commence par poser un étalon dans blender, un plan au sol de 1cm sur 90cm
Le petit oiseau va sortir
Enfin presque, il faut encore à faire la photo !
Il existe une option de rendering qui génère du svg.
Mettons la caméra au dessus en mode orthographique, d’abord une résolution 100% sur un ratio approximatif de mon rectangle incluant tout.
puis placer la caméra assez bien au dessus de la scène et changez les paramètres :L’échelle orthographique est ce qui correspond au zoom, ajustez la valeur pour que tout rentre au plus juste
Tout doit rentrer dans la fenêtre de rendering :
Maintenant depuis les user pref, activez le svg freestyle exporter :
Et activez les deux options freestyle et svg export depuis les options rendering
Pressez F12, une image svg sera générée dans le répertoire indiqué dans output nommé 0001.svg,Ouvrez le dans Inkscape, dégroupez et sélectionnez l’étalon. mettez lui une épaisseur de contour à 0 pour ne pas fausser la taille et regardez sa taille. Dans mon cas je tombe sur 35.719cm.
Je vais donc changer la résolution de l’image pour ajuster la taille d’un facteur de 90/35.719=2.52
Je change dans blender le render pour :Re F12 et vérification.
Mon étalon fait maintenant 1cm sur 90.01cm.
aller, on essaie avec un pixel de moins en Y :), on tombe sur 89.987. C’est moins bon, retour en arrière.Maintenant que l’on a les bonnes tailles dans Inkscape, il faut nettoyer. Parce que le freestyle a introduit des pixels de temps en temps.
Je prends donc chaque découpe pour la repositionner au mieux et aussi supprimer les traces.
Pour m’aider et aussi servir d’étalon entre Inkscape et sculpteo je place un cadre dans une autre couleur qui délimite ma sélection, 53.5cm de large sur 75cm de haut.
Et je fais tout rentrer dedans.
Je vérifie chaque pièce pour assurer qu’il n’y a pas de défaut, et j’assure les contours à 1px et mon cadre avec une couleur différente
C’est prêt.
Pour ceux qui sont plus observateurs que moi, vous verrez que j’ai oublié de grouper une fente dans une tranche. Moi je vais le voir au montage plus tard…TuxOlaser
J’upload chez sculpteo.
Deux couleurs sont détectées, l"une correspond au noir et l’autre au rouge du cadre. Les mesures n’ont pas été conservées, je ne sais pas pourquoi… mais mon cadre me permet de choisir un ajustement de taille à 26.5% qui me redonne les bonnes dimensions.Je peux alors désactiver le cadre rouge dans sculpteo (style 2 sur aucun et voila !
prêt à couper.Livraison comprise il vous en coûtera 53.33€.
Pour info, les tux du bureau ont coûté moins cher, ils étaient en une seule livraison et un peu plus petits, 72€ les 3.Déboitage du tux et montage
Je hais les video de unboxing, et me voilà moi même à déboiter…
Bon, puisqu’il faut :
la boite est bien protégée
et la planche dans la mousse
Les pièces sont tenues par du scotch, il faudra faire attention en retirant le scotch de ne pas casser les pièces fragiles.
Je numérote mes pièces avant de défaire, c’est moins cher que de faire des numéros au laser.
Ensuite on empile jusqu’à la fameuse pièce 33 qu’il faudra redécouper.Tadaaaa
A propos de licences
J’ai fouillé pour trouver les licences attachées au modèle de base, les voici :
https://opengameart.org/content/tux
https://opengameart.org/sites/default/files/license_images/gpl.png
http://www.gnu.org/licenses/gpl-3.0.html
https://opengameart.org/sites/default/files/license_images/cc-by.png
http://creativecommons.org/licenses/by/3.0/Les fichiers
Voila les fichiers sources blender et le inkscape (piece 33 corrigée)
fichier blender
fichier svgCommentaires : voir le flux atom ouvrir dans le navigateur
-
Un petit tour des systèmes de build
(Journaux LinuxFR)
Sommaire
Parlons un peu de systèmes de build.
Mon métier consiste à programmer des jeux vidéos destinés aux plates-formes mobiles Android et iOS. Ce qui est commun aux deux plates-formes, c’est-à-dire la plus grosse partie de l'application, est écrit en C++, et ce qui est spécifique à la plate-forme est en Java ou en Objective-C. L'intérêt principal de tout faire en C++ est que les développeurs peuvent lancer l'application directement sur leur poste de travail, sous Linux ou OSX, et tester leurs modifs sans payer le prix d'un émulateur ou du transfert sur un appareil mobile.
L'inconvénient est que l'on se retrouve à gérer des builds sur quatre plates-formes.
Pour compiler une application pour iOS il faut nécessairement un projet Xcode, bien que les bibliothèques puissent être compilées classiquement en ligne de commande. Cela signifie qu'il faut maintenir un fichier de projet Xcode ou alors avoir un outil pour le générer.
Côté Android la compilation du code C++ se fait avec l'outil
ndk-build
, qui est en réalité une interface à GNU Make. Du coup les fichiers de projet sont évidemment des makefiles mais utilisant des variables et fonctions d'une sorte de framework dans le langage de Make. Là encore il faut maintenir des makefiles pour le projet, ou avoir un outil pour les générer.Pour Linux et OSX la compilation peut se faire avec des outils plus classiques mais évidemment pas avec les fichiers de build iOS ou Android. Et encore une fois il faut maintenir ces fichiers de build.
À moins qu'on ait un outil pour les générer tous…
Quelques systèmes de build
Le problème de la gestion de la compilation d'un projet a été posé bien avant ta naissance ; c'est pour cela qu'il n'existe qu'une seule méthode pour le faire, qui fait consensus depuis des décennies.
Ha ! Ha ! Ha !
Je peux te citer déjà douze outils de tête. Voyons un peu la présentation faite sur leurs sites respectifs et essayons de rester de bonne foi.
Make
D'après le site :
GNU Make est un outil qui contrôle la génération d'exécutables et autres fichiers non-source d'un programme à partir des fichiers source du programme.
J'ai mis la description du site de GNU Make mais la première version de Make date d'avril 1976. Elle précède ainsi le projet GNU de sept ans.
Le principe de base de Make est assez simple, on lui passe un fichier Makefile qui indique « voilà le fichier que je veux créer, il dépend de ces autres fichiers, et voilà les commandes à exécuter pour le créer ». Avec le mécanisme des dépendances l'outil se débrouille pour créer les cibles dans l'ordre.
Il m'arrive encore de créer des petits Makefiles manuellement mais c'est vite pénible. Par exemple, si un binaire
app
est créé à partir d'un fichiera.cpp
qui inclut un fichierb.hpp
qui inclut lui-même un fichierc.hpp
, en toute rigueur je dois lister ces trois fichiers en dépendances de la cibleapp
pour que la compilation soit refaite quand l'un d'eux est modifié. On fait ça une fois puis on cherche un truc pour que les dépendances soient gérées automatiquement.Un autre point difficile à gérer concerne la dépendance au fichier Makefile lui-même. Par exemple, si j'ajoute une option qui concerne l'édition des liens, celle-ci ne sera pas refaite par défaut.
Autotools
[Le premier objectif des Autotools] est de simplifier le développement de programmes portables. Le système permet au développeur de se concentrer sur l'écriture du programme, simplifiant de nombreux détails de portabilité entre systèmes Unix et même Windows, et permettant au développeur de décrire comment construire le programme via des règles simples plutôt que des Makefiles complexes.
Si vous avez déjà utilisé les autotools vous êtes probablement morts de rire en lisant ce paragraphe. Cette suite d'outils qui se présente comme simple et portable est en réalité ce qu'il y a de plus complexe en système de build et n'est portable que sur les systèmes Unix en évitant soigneusement Windows, le plus déployé des systèmes des trente dernières années.
Sans doute révolutionnaire à sa création, cet outil a extrêmement mal vieillit. Pour ma part j'ai eu l'occasion de compiler des logiciels tiers sous Windows avec ça et c'était tout simplement l'enfer. J'ai aussi tenté de l'utiliser pour mes propres projets et je me suis arrêté dans le tuto. Depuis je suis convaincu que ces outils sont faits pour les développeurs qui aiment transpirer.
SCons
SCons est un outil Open Source de construction de logiciel—plus précisément, une nouvelle génération d'outil de construction. Voyez SCons comme un substitut amélioré et multi-plateforme pour l'utilitaire Make classique avec des fonctionnalités intégrées similaires à autoconf/automake et aux caches de compilation tels que ccache. Pour faire court, SCons est un moyen plus facile, plus fiable et plus rapide de construire un logiciel.
Wow, là c'est carrément le futur.
Les fichiers SCons s'écrivent directement en Python, ce qui est assez sympa puisqu'on se retrouve avec un vrai langage et un a accès à un tas de bibliothèques pour décrire le projet.
J'ai compilé quelques projets en SCons il y a une quinzaine d'années et je crois que je n'ai jamais rien vu d'aussi lent. Et pas seulement parce que c'est du Python…
Il faut dire que le comportement par défaut de l'outil est de détecter les modifications des fichiers sources en calculant un md5 des fichiers, pour éviter de recompiler des fichiers dont seule la date a changé. Quand on voit le prix d'un md5 je trouve ce choix très discutable. Ce comportement peut être modifié via une option mais même en passant sur une comparaison de timestamps et en appliquant toutes les astuces connues pour le rendre plus rapide, ça reste hyper lent.
Premake
Un système de configuration de construction puissamment simple
Décrivez votre logiciel qu'une seule fois, via la syntaxe simple et facile à lire de Premake, et construisez-le partout.
Générez des fichiers de projets pour Visual Studio, GNU Make, Xcode, Code::Blocks, et plus sous Windows, Mac OS X et Linux. Utilisez l'intégralité du moteur de script Lua pour que la configuration de la construction devienne du gâteau.Pfiou, ça claque ! Ce n'est que le quatrième dans la liste et ça promet déjà de tout résoudre
Avec Premake les scripts de builds sont écrits en Lua et, à l'instar de SCons, cela permet de « programmer » son build en profitant de tout un tas de bibliothèques.
Sur le papier c'est très sympa, en pratique ça ne marche pas trop comme attendu. Il s'avère que la syntaxe de Premake est déclarative et ne se mélange pas bien avec le procédural de Lua. Par exemple, si j'écris
project "P" if false then files { "file.cpp" } end
On pourrait croire que le fichier
file.cpp
ne fera pas partie du projetP
, et bien pas du tout, leif
ne change rien du tout ici. Difficile de programmer dans ces conditions.Nous utilisons Premake depuis presque quatre ans au boulot. Le choix s'est fait en sa faveur bien que l'outil était en alpha car il permettait de générer des fichiers pour Xcode et ndk-build via deux plugins indépendants, en plus des Makefiles classiques. Aussi, il avait l'air facile à hacker ce qui était rassurant.
Maintenant j'essaye de le remplacer autant que possible.
Parmi les problèmes récurrents le plus pénible est certainement le message
error: (null)
, sans autre info, que l'outil affiche parce qu'une erreur s'est glissée dans un script. Bonne chance pour déboguer ça. J'aime aussi beaucoup le messageType 'premake5 --help' for help
qui s'affiche quand je fais une faute de frappe sur la ligne de commande. Là encore il n'y a aucune information utile et il faut se débrouiller pour trouver où on s'est trompé. Autre souci : il n'y a pas moyen de mettre des propriétés de link spécifiques à une bibliothèque. C'est embêtant quand on a besoin d'un-Wl,--whole-archive
.Le développement de Premake en lui-même a l'air très laborieux. Quatre ans après il est toujours en alpha, avec une release datant d'août 2017. Le module Xcode a été intégré mais ne gère que OSX. Il a fallu réappliquer toutes nos modifs pour iOS. Quant au module pour le NDK il ne fonctionne plus suite à des changements dans Premake (hey, c'est une alpha…). Là encore il a fallu repatcher.
Il y a de nombreux contributeurs, dont des gros, mais chacun a l'air d'aller dans sa propre direction sans qu'il y ait d'objectif commun. Il y a par exemple deux générateurs de Makefiles,
gmake
etgmake2
(j'attends impatiemmentyagmake
). Il y a des fonctionnalités qui ne marchent qu'avec Visual Studio, d'autres trucs qui fonctionnaient il y a quatre ans et qui ne fonctionnent plus. Ça m'a l'air d'être typiquement le projet qui veut tout faire parfaitement et qui au final ne fait rien de bien. Bref, le produit n'est pas à la hauteur du pitch.CMake
CMake est une suite d'outils open source et multi-plateforme conçus pour construire, tester et empaqueter des logiciels. CMake est utilisé pour contrôler le processus de compilation du logiciel via des fichiers de configuration indépendants du compilateur et de la plate-forme, et il génère des fichiers Makefiles natifs ou des projets qui peuvent être utilisé avec l'environnement de compilation de votre choix.
CMake est tout simplement mon outil de build préféré de ces quinze dernières années.
Tout est dit.
Bon OK, j'explique. CMake lit des fichiers
CMakeLists.txt
qui décrivent les projets à compiler dans un langage qui lui est propre. À partir de cela il génère des fichiers Makefile ou autres (des projets Xcode ou Visual Studio par exemple) qui permettent de construire le projet.Ce qui m'a convaincu dans cet outil est qu'il est plutôt rapide (bien qu'il ne soit pas le plus rapide) et qu'il gère parfaitement les règles de reconstruction des cibles. Par exemple, si j'ajoute un paramètre de ligne de commande pour l'édition des liens, alors l'édition des liens va être refaite. Si je modifie un fichier
CMakeLists.txt
et que j'exécutemake
sans relancer CMake, alors CMake se relance tout seul (les Makefiles ont une règle de dépendance vers lesCMakeLists.txt
, pas con!) Je peux aussi simplement définir les répertoires d'entêtes, options de compilation et autres paramètres spécifiques à chaque projet, en précisant s'il le paramètre doit être visible des projets dépendants ou non.L'outil est assez bien fichu et est très populaire dans le milieu du C++.
Un des points les plus souvent reprochés à CMake est son langage, notamment à l'époque de la version 2 de l'outil qui était excessivement verbeuse et en plus en ALL CAPS. On avait l'impression de se faire crier dessus à longueur de fichier. Aujourd'hui ces soucis sont résolus et le problème semble surtout être que cela fait un langage de plus à apprendre et qui ne sert à rien d'autre (contrairement à SCons et Premake par exemple). Perso je n'y vois pas de difficulté, c'est un bête langage à macros avec des mécanismes bien pratique pour nommer des groupes de paramètres.
Comme d'habitude la qualification « indépendants du compilateur et de la plate-forme » des fichiers de configuration est très discutable dans la mesure où il y a tout ce qu'il faut pour glisser des commandes système dans le build.
Les principaux problèmes que j'ai pu rencontrer avec une version récente de CMake concernent l'export de projet. En effet il y a une commande
install(EXPORTS)
qui permet de créer un fichier de configuration CMake pour inclure la cible en tant que dépendance dans un projet tiers. Malheureusement cette commande exporte par défaut les chemins absolus des dépendances de la cible et il faut bricoler pour exporter les dépendances proprement (en les enrobant dans des cibles importées par exemple).Un autre souci est que CMake génère plein de fichiers intermédiaires et qu'avec la pratique généralisée de lancer le build à la racine du projet on se retrouve à polluer toute l'arborescence. Idéalement il faudrait que l'outil refuse de faire un build in-source.
Ninja
Ninja est un petit système de construction se concentrant sur la vitesse. Il est différent des autres systèmes de construction sur deux aspects majeurs : il est conçu pour que ses fichiers d'entrées soient générés par un système de construction de plus haut niveau, et il est aussi conçu pour exécuter les builds le plus rapidement possible.
Ah cool, encore un outil qui se veut rapide, c'est exactement ce qu'il nous manquait. En plus quand on voit SCons et Premake qui se prétendent déjà les plus rapides, on a tout de suite confiance. Cela dit, contrairement à SCons et Premake, Ninja n'est pas un générateur de script de build. Il serait plutôt à comparer à Make.
Je n'ai jamais utilisé Ninja mais si jamais mes builds devenaient très lents je n'hésiterais pas à y jeter un coup d'œil. À moins que je ne passe à Meson.
Meson
Meson est un système open source de construction voulant être à la fois extrêmement rapide et, encore plus important, aussi accessible que possible.
Bon là je désespère. Encore un outil qui veut être le plus rapide et toujours pas d'outil qui prétend fonctionner correctement.
Je n'ai jamais utilisé Meson mais on m'a dit que c'est-nouveau-c'est-bien-tu-devrais-essayer.
Pourquoi pas, enfin moi je cherche surtout un truc qui me génère de quoi faire un build iOS, Android, OSX et Linux. Un truc qui juste marche quoi.
FASTbuild
FASTBuild est un système de construction open source et de haute performance supportant une haute montée en charge de la compilation, la mise en cache et la distribution sur le réseau.
Non mais franchement…
Là encore je n'ai pas utilisé cet outil. La promesse est sympa mais je ne vois pas trop l'intérêt par rapport aux deux mille autres outils du même genre.
Sharpmake
Sharpmake est un générateur de projets et solutions pour Visual Studio. Il est similaire à CMake et Premake, mais il est conçu pour être rapide et passer à l'échelle.
Celui-ci est développé par Ubisoft initialement en interne et libéré en septembre 2017. Apparemment il n'y a plus d'activité dans le dépôt depuis octobre de la même année. Comme son nom l'indique, les scripts de build sont écrits en C#.
D'après la doc il sait aussi générer des projets pour Xcode et des Makefiles. J'ai longtemps considéré l'utiliser en remplaçant de Premake mais d'une part c'est écrit en C#, donc c'est mort pour l'utiliser sous Linux, et d'autre part je sens bien que tout ce qui n'est pas Windows et Visual Studio va être bancal.
Maven
Apache Maven un outil de compréhension et de gestion de projet logiciel. Basé sur le concept de modèle d'objet de projet, Maven peut gérer la construction, le compte-rendu et la documentation d'un projet depuis un élément central d'information.
Je ne sais pas vous mais moi je comprends à peine le descriptif. C'est peut-être ma traduction qui est foireuse.
Maven est un outil du monde Java. J'ai pu l'utiliser un peu via des scripts déjà prêts et il n'y a pas grand-chose à lui reprocher de ce point de vue. Ça m'a l'air assez cool pour la gestion des dépendances.
C'est un outil qui a l'air très professionnel. Ah mais attend… c'est pour ça qu'on comprend rien au descriptif ! La première version date de 2004 et c'est donc tout naturellement que le langage le plus populaire du début du siècle a été choisi pour les scripts de build, je parle bien sûr du 🎉 XML 🎉.
Ant
Apache Ant est une bibliothèque Java et un outil en ligne de commande dons la mission est de piloter des processus décrits dans des fichiers de construction en tant que cibles et points d'extensions dépendant les uns des autres.
Là encore ça sent le professionnalisme. Les fichiers Ant sont des sortes de Makefiles mais écrits en XML. Faut-il le préciser, Ant est lui aussi un outil du monde Java.
Gradle
Accélérez la productivité des développeurs
Depuis les applications mobiles aux micro-services, des petites startups aux grandes entreprises, Gradle aide les équipes à construire, automatiser et livrer de meilleurs logiciels, plus rapidement.Je te laisse deviner à quel langage est destiné cet outil.
Gradle est l'outil de référence pour les builds des applications Android et c'est donc dans ce cadre que j'ai pu l'utiliser. Les scripts Gradle sont écrits en Groovy, un langage que je n'ai jamais utilisé par ailleurs. Perso je trouve pas ça génial mais c'est peut-être simplement parce ce que c'est loin de ce que l'on fait en C++.
Les trucs qui me fatiguent le plus avec Gradle sont d'abord le temps de compilation. La compilation du projet Java de nos jeux, une partie qui contient pourtant peu de code, prend quasiment une minute. L'autre souci est de trouver de la doc claire et facile à digérer. La doc officielle représente à peu près 24% du web[référence nécessaire], ce qui fait que la moindre interrogation demande déjà plusieurs heures de lectures, et les exemples de StackOverflow et divers blogs sont assez disparates.
Que choisir
Déjà douze outils et rien n'a l'air de dominer le marché :/ Sans doute faudrait-il inventer un nouvel outil pour les remplacer tous, quelque chose d'hyper rapide, évolutif, mais aussi adapté aux processes de déploiement intraprocéduraux sur concentrateur décentralisés pour les plus professionnels d'entre nous, avec des scripts dans un langage populaire, type GOTO++.
Malgré tout ce choix je n'ai rien trouvé qui résolve mon problème : générer un projet pour iOS, Android, Linux et OSX avec un seul script. Si vous avez une idée, ça m'intéresse.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
--== GUIDE DE L'ADMINISTRATEUR LINUX ==--
(Journaux LinuxFR)
Bonjour à toutes et à tous,
Je mets à disposition gratuitement un guide assez exhaustif de 80 pages, qui est le fruit de quelques années d'administration et d'ingénierie des systèmes Open-Source.
Mon objectif, en 1996, était de rédiger un pense-bête, avec l’une des premières distributions libres d’Unix (Slackware). Je l’ai ensuite étoffé via des systèmes similaires, dont RedHat, Mandrake (actuellement Mandriva). Par la suite, j’ai ajouté des commandes et syntaxes propres à Solaris ou Novell/Suse.
Il s'agit d'un document de référence, utilisé en production, dans des environnements critiques. Ce document m'a aussi servi de base pour mes supports de cours, quand j'ai œuvré en tant que consultant-formateur.
Pour vous donner une idée de ce que traitent les premiers chapitres :
LES COMMANDES
INSTALLATION
KERNEL
DEMARRAGE DU SYSTEME
LVM (Logical Volume Manager)
PACKAGES
REPERTOIRES
GESTION DES DROITS D’ACCES
GESTION DES FICHIERS
COMPRESSION – ARCHIVAGE
System daemon (systemd)
I.P. (Internet Protocol)
D.H.C.P. (Dynamic Host Configuration Protocol)
D.N.S. (Domain Name Service)
N.T.P. (Network Time Protocol)
IPTABLES
VNC
F.T.P (File Transfert Protocol)
S.S.H. (Secure Shell)
N.F.S (Network File System)
S.M.T.P / POP 3
RSYNC (remote synchronization)
QUOTAS
SYSLOGD
SHELL SCRIPTS
VI
etc, etc…Comme le monde Open-source est un monde de partage, je vous soumets l'URL pour le consulter / télécharger :) : https://pierreau.fr/Blog.php#Linux
Je vous souhaite une bonne lecture !
-
la neutralité du net bronsonisée
(Journaux LinuxFR)
Donc la neutralité du net est morte aux USA .
Dans les faits, le Congrès peut toujours annuler la décision mais sa composition actuelle a peu de chances d'aller dans ce sens.
Le PDG d'Orange Stéphane Richard s'est déjà prononcé récemment contre la neutralité du net. Logique : les FAI auraient tout intérêt à facturer des accès à internet à la demande.
Il semblerait que des FAI alternatifs commencent à apparaître aux US. Et En France, que se passerait-il si a neutralité du Net venait à disparaître ? -
Odoo génère la première facture Factur-X déposée sur Chorus Pro
(Dépêches LinuxFR)
Odoo a été utilisé pour générer la toute première facture électronique au format Factur-X déposée sur la plate‐forme Chorus Pro. Le 25 avril 2018, Chorus Pro, la plate‐forme de facturation électronique de l’administration française, a été mise à jour pour gérer la norme Factur-X. Factur-X est la nouvelle norme franco‐allemande de facture électronique publiée en version finale le 31 décembre 2017. Une facture à la norme Factur-X est une facture PDF avec un fichier XML embarqué au format CrossIndustryInvoice (CII). Une facture Factur-X peut ainsi être importée automatiquement de façon fiable dans un logiciel comptable, en évitant une fastidieuse saisie manuelle de la facture fournisseur en comptabilité. L’Abbaye Notre‐Dame de l’Annonciation utilise Odoo v10 Community en production depuis le 1er janvier 2017 et, grâce au module communautaire Factur-X pour Odoo développé par Akretion, toutes les factures émises par l’Abbaye sont au format Factur-X depuis fin 2017. Le 25 avril 2018, juste après la mise à jour de Chorus Pro, la Mère Cellerière de l’abbaye a déposé une facture au format Factur-X à destination d’une mairie de la Drôme (dans une abbaye bénédictine, la Mère Cellerière est la sœur en charge du travail et des finances). L’AIFE (Agence pour l’informatique financière de l’État) a confirmé que cette facture était bien la toute première facture au format Factur-X déposée sur Chorus Pro.
- lien n°1 : Odoo Community Association (OCA)
- lien n°2 : Les spécifications de la norme Factur-X
- lien n°3 : Chorus Pro
- lien n°4 : Projet GitHub de facturation électronique de l’OCA
- lien n°5 : Tweet de l’AIFE sur la 1ʳᵉ facture Factur-X sur Chorus
- lien n°6 : La bibliothèque Python Factur-X
- lien n°7 : Akretion
Sommaire
- Qu’est‐ce que Chorus Pro ?
- Qu’est‐ce que Factur-X ?
- Prise en charge de l’API Chorus dans Odoo
- Bibliothèque Python « factur-x »
- Contribution sur Py3o
Qu’est‐ce que Chorus Pro ?
Chorus Pro est la plate‐forme de facturation électronique de l’Administration française. Elle a été lancée par l’AIFE en septembre 2016 et est accessible à l’adresse https://chorus-pro.gouv.fr. Depuis le 1er janvier 2017, toutes les administrations françaises (État, collectivités territoriales, fonction publique hospitalière, établissements publics locaux et nationaux) ont l’obligation d’accepter les factures déposées sur Chorus Pro. Toutes les entreprises sont invitées à utiliser Chorus Pro pour facturer l’Administration dès maintenant. Les grandes entreprises de plus de 5 000 employés ont l’obligation d’utiliser Chorus Pro depuis le 1er janvier 2017, et celles de plus de 250 employés depuis le 1er janvier 2018. Pour les entreprises de plus de dix salariés, l’obligation entre en vigueur le 1er janvier 2019. Pour les micro‐entreprises, la date limite est fixée au 1er janvier 2020. Cependant, bon nombre de PME utilisent déjà Chorus Pro, sans avoir attendu la date d’entrée en vigueur de leur obligation légale, pour profiter dès à présent de ses nombreux avantages :
- date de dépôt de la facture non contestable ;
- traçabilité du cheminement de la facture de bout en bout : les factures ne se perdent plus !
- transparence sur le processus de validation de la facture et sa mise en paiement.
Depuis son lancement, Chorus Pro accepte deux types de factures :
- les factures PDF « classiques », qui sont traitées par un logiciel de reconnaissance de caractères et nécessitent une intervention manuelle de la personne qui a déposé la facture pour vérifier le résultat de la reconnaissance de caractères, corriger les informations mal reconnues et compléter les informations manquantes ;
- les factures XML, qui sont traitées automatiquement sans intervention de l’utilisateur. Chorus Pro accepte les deux grands standards internationaux de factures XML : la syntaxe Universal Business Language (UBL) et la syntaxe Cross Industry Invoice (CII), ainsi que d’autres formats spécifiques.
Depuis le 25 avril 2018 et la mise à jour de Chorus Pro en version 1.3.3 IT3, Chorus Pro accepte en plus les factures PDF au format Factur-X ! Il est donc maintenant possible de déposer une facture au format Factur-X sur Chorus Pro via le portail Web, mais aussi via l’API ou via EDI (cf. la page officielle).
Qu’est‐ce que Factur-X ?
Une facture au format Factur-X est une facture PDF qui embarque une pièce jointe au format XML utilisant la syntaxe Cross Industry Invoice (CII). En effet, la norme PDF/A-3 permet d’insérer des fichiers à l’intérieur d’un document PDF, à l’image d’une pièce jointe à l’intérieur d’un courriel. Une telle facture peut être lue avec n’importe quel lecteur PDF comme toute facture PDF « classique », mais elle peut aussi être lue de façon automatique par un logiciel comptable en exploitant le fichier XML embarqué dans le fichier PDF. Ainsi, la norme allie le meilleur des deux mondes :
- le format PDF pour son universalité, sa lisibilité et sa possibilité d’archivage à long terme ;
- le format XML, qui permet de stocker des informations de façon structurée et rend possible une lecture automatique fiable par les logiciels de comptabilité.
Factur-X est le format idéal pour une transition en douceur vers la facturation électronique. En effet, lorsque l’on envoie une facture au format Factur-X, si le destinataire est équipé d’un logiciel de comptabilité moderne, il pourra importer la facture de façon automatisée dans son logiciel de comptabilité. S’il n’est pas équipé d’un tel logiciel, le destinataire pourra lire la facture comme n’importe quelle facture PDF « classique » et la saisir manuellement dans son logiciel.
La norme Factur-X a été publiée en version bêta le 9 juillet 2017 et en version finale le 31 décembre 2017. Elle a été élaborée par le Forum National de la Facturation Électronique (FNFE-MPE) et son équivalent allemand le FeRD (Forum elektronische Rechnung Deutschland). Le fichier XML embarqué dans une facture PDF Factur-X est conforme à la norme sémantique européenne EN 16931 publiée en version finale le 28 juin 2017 ; la norme Factur-X est ainsi devenue la toute première implémentation de la norme sémantique européenne. À noter : la norme Factur-X est parfois désignée en Allemagne sous le nom ZUGFeRD 2.0.
Odoo avait été le tout premier ERP à supporter la norme Factur-X. Le 28 juillet 2017, quelques semaines après la disponibilité de la norme Factur-X en version bêta, Akretion avait annoncé la publication sous licence AGPL d’un module pour Odoo v10 permettant de générer des factures Factur-X et son déploiement en production chez la société française Mooncard, qui était ainsi devenue la toute première société au monde à émettre des factures au format Factur-X.
Prise en charge de l’API Chorus dans Odoo
Akretion a publié sous licence AGPL, au sein du projet de localisation française de l’Odoo Community Association, la prose en charge de l’API Chorus Pro pour Odoo version 10. Grâce à ce développement :
- il est possible d’envoyer une facture sur Chorus Pro directement depuis Odoo en deux clics, sans avoir besoin de se connecter manuellement sur le portail Web de Chorus Pro. L’envoi est réalisé au format Factur-X ou au format UBL XML ;
- le statut des factures déposées dans Chorus Pro est remonté quotidiennement de façon automatique dans Odoo. Ainsi, sans avoir besoin de se connecter sur le portail Web de Chorus Pro, il est possible de connaître l’état d’avancement du traitement de chaque facture : mise à disposition du destinataire, facture acceptée (ou refusée), facture mise en paiement, etc.
Jusqu’à preuve du contraire, ce développement est la toute première implémentation libre de l’API Chorus Pro dans un logiciel comptable !
Bibliothèque Python « factur-x »
Pour faciliter l’implémentation de la norme Factur-X dans d’autres logiciels comptables (pour qu’ils ne prennent pas trop de retard sur Odoo !), la partie du code indépendante d’Odoo qui assure la génération d’une facture Factur-X a été déplacé dans une bibliothèque Python dédiée dénommée factur-x. Cette bibliothèque est publiée sous licence BSD et est disponible sur Pypi, la plate‐forme de distribution des bibliothèques Python.
La principale fonction de cette bibliothèque est de générer une facture PDF conforme à la norme Factur-X à partir d’une facture classique au format PDF/A et du fichier XML correspondant au format CII. Un outil permettant de réaliser cette opération en ligne de commande est également fourni avec la bibliothèque.
Contribution sur Py3o
Py3o est une suite logicielle sous licence libre développée en Python par la société française XCG Consulting permettant de générer un fichier ODT à partir d’un modèle ODT, et de le transformer en PDF (ou en n’importe quel autre format prise en charge par LibreOffice). Py3o permet ainsi à n’importe quelle application métier de générer facilement un document ODT, DOC ou PDF.
Py3o peut être utilisé comme un moteur de rapport pour Odoo grâce aux modules Odoo report_py3o et report_py3o_fusion_server maintenus par l’Odoo Community Association. C’est une alternative au moteur de rapport QWeb, qui est le moteur de rapport par défaut d’Odoo, qui produit un document HTML qui est converti en PDF par l’outil wkhtmltopdf.
Pour que la bibliothèque factur-x produise une facture Factur-X parfaitement conforme à la norme, elle doit recevoir en entrée un fichier PDF/A (cela fonctionne aussi avec un fichier PDF non PDF/A, mais le résultat n’est alors pas parfaitement conforme à la norme Factur-X). La fonction d’exportation PDF de LibreOffice permet de générer un fichier PDF/A, mais pour cela il faut activer une option particulière dans la boîte de dialogue de l’exportation PDF de LibreOffice. Akretion a contribué la gestion de la configuration des options d’exportation PDF de LibreOffice dans Py3o et Odoo. Cette nouvelle fonctionnalité permet à Odoo de générer très facilement des documents PDF/A, mais aussi des formulaires PDF, des fichiers PDF filigranés, des fichiers PDF protégés par mot de passe, etc.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Campagne de financement pour GtkSourceView
(Dépêches LinuxFR)
GtkSourceView est une bibliothèque GNOME qui étend GtkTextView, le widget GTK+ standard pour l’édition de texte sur plusieurs lignes.
La fonctionnalité principale de GtkSourceView est la coloration syntaxique, mais il y a de nombreuses autres fonctionnalités : le chargement et la sauvegarde de fichiers, la recherche et remplacement, l’auto‐complétion, le « annuler / refaire », afficher les numéros de ligne, etc.
C’est une bibliothèque largement utilisée. Par exemple dans Debian, GtkSourceView est utilisée par plus de cinquante applications, dont notamment gedit et GNOME Builder.
Si vous voulez donner un coup de pouce au projet, il y a maintenant une campagne de financement !
- lien n°1 : Page web de GtkSourceView
- lien n°2 : Campagne de financement sur Liberapay
Le mainteneur de GtkSourceView — celui qui a lancé la campagne de financement — est cette même personne qui est en train d’écrire les lignes de cette dépêche ; oui, je suis francophone. :-)
Pour donner un peu plus de contexte, je travaille à mi‐temps en tant que programmeur dans une université (j’ai terminé mes études il n’y a pas longtemps). Ce qui me permet de continuer mes projets dans GNOME en tant qu’indépendant.
Je suis le seul mainteneur restant de GtkSourceView, les autres mainteneurs n’ayant plus assez de temps libre pour contribuer. Donc, l’avenir de cette bibliothèque repose en quelque sorte entre mes mains.
Projet à long terme
Outre la maintenance de code, le projet que j’ai à long terme pour GtkSourceView est de faciliter le développement d’éditeurs de texte, en créant des API de plus haut niveau et en fournissant davantage de fonctionnalités.
En effet, même si GtkSourceView fournit déjà actuellement beaucoup de fonctionnalités, c’est malheureusement loin d’être suffisant pour créer un éditeur de texte basique (pour avoir une implémentation de bonne qualité). Pour donner un exemple concret, le cœur de gedit — si l’on enlève tous les greffons — fait actuellement 40 000 lignes de code ! Ça fait quand même beaucoup de travail pour un développeur qui aurait envie de créer un éditeur de texte spécialisé ou un nouvel IDE.
C’est en 2013 que j’ai commencé à rendre le code de gedit plus réutilisable. D’abord en créant de nouvelles API dans GtkSourceView, puis ensuite en créant d’autres bibliothèques : gspell (pour la correction orthographique) et Tepl (acronyme pour « Text editor product line », une bibliothèque qui sert d’incubateur pour GtkSourceView, pour laisser le temps à une nouvelle API de faire ses preuves).
Comme la feuille de route pour GtkSourceView et Tepl le montre, il y a encore beaucoup de boulot.
Plate‐forme Liberapay
Le financement de GtkSourceView se fait sur Liberapay, qui a déjà été présenté sur LinuxFr.org. Je pense que c’est une plate‐forme qui a beaucoup de potentiel pour financer des logiciels libres. Un avantage en particulier est que Liberapay est géré par une association à but non lucratif, qui est financée par des dons sur la plate‐forme elle‐même.
Merci pour votre soutien !
-
Rumeurs sur l'hyper-threading - TLBleed
(Journaux LinuxFR)
La peinture de la dépêche sur la faille Lazy FPU save restore n'étais pas encore sèche
que je tombais sur de curieux messages conseillant de désactiver l'Hyper-threading.Suivis de conversations plus ou moins inquiétantes sur Twitter et dans les mailings list.
Accroche toi au pinceau
Un commit sur OpenBSD désactive l' Hyper-treading par défaut.
Le message associé est explicite:« Since many modern machines no longer provide the ability to disable Hyper-threading in
the BIOS setup, provide a way to disable the use of additional
processor threads in our scheduler. And since we suspect there are
serious risks, we disable them by default »
Puisque les machines récentes ne donnent plus la possibilité de désactiver l' Hyper-threading depuis le BIOS, trouvez un moyen de désactiver l'utilisation des threads d'un processeur dans notre ordonnanceur.
Et comme on suspecte que le risque est sérieux, désactivons le par défaut.Pour faire plus court, j'avais lu auparavant un laconique:
ps deactivate Hyper-threading on your server
Désactivez l'Hyper-threading sur vos serveurs !Venant des équipes OpenBSD, il y a de quoi s'interroger.
J'enlève l'échelle
La conférence Black Hat qui se déroulera en août prochain, propose au menu:
« This therefore bypasses several proposed CPU cache side-channel protections. Our TLBleed exploit successfully leaks a 256-bit EdDSA key from libgcrypt (used in e.g. GPG) with a
98% success rate after just a single observation of signing operation on a co-resident hyperthread and just 17 seconds of analysis time »
En outre, ceci court-circuite plusieurs protections sur le cache. Notre exploit TLBeed a réussi à voler une clef 256-bit EdDSA depuis ligcrypt (utilisée par GPG ) dans 98% des tentatives, après une simple observation des opérations de signature depuis un thread tournant sur le même CPU en seulement 17 secondes d'analyse.- sans oublier le petit message de remerciement du sieur de Raadt.
Colin Percival, auteur en 2005 de:
- un papier sur les attaques via les caches, Cache Missing for Fun and Profit
- un article qui cible plus particulièrement les risques liés à l'Hyper-threading
en remet une couche:
« I think it's worth mentioning that one of the big lessons from 2005 is that side channel attacks become much easier if you're executing on the same core as your victim »
Je pense qu'il est bon de rappeler cette grande leçon de 2005: une attaque enside channel
est tellement plus facile si vous l'exécutez sur le même cœur que votre victime.Cuisine
Intel n'est jamais clairement impliqué; mais je précise, comme ça, en passant, que l'Hyper-Threading est une implémentation Intel du Simultaneous Multi Threading.
Il s'agit de faire exécuter en parallèle, sur un même cœur, plusieurs unités fonctionnelles ou de calcul.
Et pour rendre cette technique efficace et moins gourmande en ressource, cette implémentation partage aussi les caches mémoires.Keep systems protected, efficient, and manageable while minimizing impact on productivity
Conclusion
Toutes les solutions de sécurité aujourd’hui ne sont que des châteaux forts construit sur du sable.
Si encore une fois, la désactivation de l'Hyper-threading pourrait même avoir des effets positifs sur les performances, autant en finir une fois pour toute.
Retour aux origines:
- un partage complet sans protection des ressources
- plus de mode protégé
- pas même de segmentation mémoire
Vos machines iront encore plus vite. Enfin, j'espère.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Windows 10 par abonnement : retour de la rumeur avec Microsoft 365 (pour les particuliers)
(Génération NT: logiciels)
Microsoft n'a pas fait mystère d'un abonnement Microsoft 365 pour le grand public. Avec Windows 10 compris ? C'est le retour de la rumeur.
-
Vérification des certificats X.509 sur le point d'expirer
(Journaux LinuxFR)
Comme beaucoup, j'utilise Let's Encrypt.
J'ai pas mal automatisé le renouvellement avec acme-tiny, mais il me manque surtout le petit truc qui me dit quand le certificat n'est plus valide. Et si possible, avant que ça arrive.C'est là : https://framagit.org/Glandos/lets_check
C'est simple. Éditez le script pour y mettre votre délai en jours, et vos noms d'hôtes, et lancez-le. S'il y a un problème, ça l'écrit. Si tout va bien, rien n'est écrit. C'est donc tout à fait compatible cron.
Alors, oui, c'est probablement du NIH. Je sais pas trop. Si ça existe déjà, en mieux et pas trop complexe, merci de me le dire, j'y ai passé à peine deux heures, donc ça va, c'est pas trop perdu.
-
ToOpPy Linux 2.1
(Dépêches LinuxFR)
ToOpPy Linux 2.1 est une distribution GNU-Linux multilingue (anglais natif) basée sur Puppy « Precise » de Barry Kauler, faisant suite à la version 2.0, publiée en avril 2015 (paquets de langues actuellement disponibles : danois, allemand, grec, espagnol, français [installé par défaut], hongrois [nouveau], italien, néerlandais, polonais, portugais, russe).
- Fonctionne en CD/USB amorçable : système entièrement chargé en mémoire vive - 512 Mo requis
- Installable sur tout support : disque dur interne/externe, clé USB, carte flash…
Elle s'adresse aux amateurs de systèmes légers (250 Mo), gratuits, nomades, réactifs, fiables et conviviaux.
Le gestionnaire de bureau 2PDE (2P Desktop Environment) fonctionne avec le gestionnaire de fichiers ROX et le gestionnaire de fenêtres JWM ; le tout propose un ensemble complet d'applications permettant de personnaliser/optimiser au maximum l'espace de travail (plus de 20 thèmes complets disponibles, effets d'ombre et de transparence, etc.).
- lien n°1 : Site de ToOpPy Linux
- lien n°2 : Copies d'écran
- lien n°3 : Environnement de bureau 2PDE
- lien n°4 : ToPpPy Linux sur le Forum Murga Linux
- lien n°5 : Téléchargement
ToOpPy LINUX 2.1 peut aussi bien fonctionner sur des PC dont la configuration matérielle (processeur/composants/mémoire…) ou logicielle (Windows XP devenu quasi inutilisable…) est devenue obsolète, que sur des PC (relativement) récents.
NOTE : Il arrive fréquemment que ToOpPy reconnaisse et prenne en charge du matériel dont Windows ne « veut » plus, faute de pilotes mis à jour (scanners, webcams, etc.). Il en est de même pour certains programmes Windows qui peuvent très bien fonctionner sur ToOpPy, moyennant l'installation de WINE (Wine Is Not an Emulator) ou, pour les plus anciens, de DOSBOX (émulateur DOS), tous deux installables depuis le dépôt de ToOpPy via l'interface d'installation rapide.
ToOpPy LINUX 2.1 intègre une suite bureautique/logicielle complète en mesure de satisfaire les besoins de l'immense majorité des utilisateurs pour une utilisation quotidienne. Pour les utilisateurs plus exigeants, ToOpPy propose une grande variété de programmes et d'applications à installer (GIMP, LibreOffice, Firefox, etc.), soit via un « gestionnaire de paquets » (« PPM: Puppy Package Manager », donnant accès au dépôt Ubuntu), soit via une interface d'installation rapide, soit en les téléchargeant directement à partir du dépôt de ToOpPy.
-
Qt Speech arrive avec Qt 5.8, la synthèse vocale débarque comme préversion technologique, notamment pour aider les personnes en situation de handicap
(Développez.com)
Qt Speech arrive avec Qt 5.8
La synthèse vocale débarque comme préversion technologique, notamment pour aider les personnes en situation de handicap
Parmi les nouveautés de Qt 5.8, on compte Qt Speech, en préversion technologique. Pour le moment, ses fonctionnalités se limitent à la lecture à voix haute d'un texte par un ordinateur, en utilisant les API de chaque système d'exploitation ; ainsi, il sera plus facile d'ouvrir son application aux personnes souffrant de certains handicaps (notamment...
L'actualité de cette partie est agrégé automatiquement à partir d'autres sites.
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre