Linux (fr)

Dépêches LinuxFR

  • Agenda du Libre pour la semaine 26 de l'année 2018

    Calendrier web, regroupant des événements liés au Libre (logiciel, salon, atelier, install party, conférence), annoncés par leurs organisateurs. Voici un récapitulatif de la semaine à venir. Le détail de chacun de ces 30 événements (1 en Belgique, 29 en France, 0 au Luxembourg, 0 au Québec 0 en Suisse et 0 en Tunisie) est en seconde partie de dépêche.

    Sommaire

    [FR Nantes] Cycle café vie privée Protection de son trafic sur Internet (VPN) - Le lundi 25 juin 2018 de 18h00 à 21h00.

    Protection de son trafic sur Internet

    Pourquoi et comment chiffrer son trafic sur Internet avec un VPN (réseau privé virtuel) ?
    Présentation du fonctionnement d’un VPN, de son intérêt et de sa mise en place.

    Au bar associatif La Dérive https://lajavadesbonsenfantsblog.wordpress.com/

    [FR Grenoble] Contribuer à BANO, la base d’adresse nationale d’OSM - Le lundi 25 juin 2018 de 18h30 à 20h30.

    Le collectif OpenStreetMap Grenoble vous invite à son prochain atelier OSM, La Base Adresses Nationale Ouverte (BANO) est une initiative d’OpenStreetMap France.

    Elle a pour objet la constitution d’une base la plus complète possible de points d’adresse à l’échelle de la France.

    L’objectif est de proposer une couverture d’adresses la plus étendue possible et la plus homogène possible.

    Cela doit permettre de réaliser sur le plus largement possible des opérations de géocodage (Quelle position correspond à cette adresse) et de géocodage inversé (Quelle adresse correspond à cette position).

    Lors de ce mapathon, le collectif OpenStreetMap Grenoble vous propose d’apprendre à contribuer à la BANO.  

    À partir de 18h30 à La Coop-Infolab. 31 rue Gustave Eiffel – 38 000 Grenoble

    BANO ou BAN

    La BAN (Base Adresse Nationale) est la base de référence nationale issue d’une convention signée entre l’IGN, le Groupe La Poste, l’État et OpenStreetMap France.

    BANO est un projet initié par OpenStreetMap France début 2014 et n’a pas encore intégré de données issues de la BAN (chantier en cours). Le contenu de la BAN est plus complet (plus de 20 millions d’adresses) que BANO (15. 5M d’adresses), mais n’intègre(ra) pas de contributions faites sur OpenStreetMap et encore très peu de données opendata diffusées par certaines collectivités.

    C’est quoi OSM

    OpenStreetMap (OSM) est un projet international fondé en 2004 dans le but de créer une carte libre du monde.

    Nous collectons des données dans le monde entier sur les routes, voies ferrées, les rivières, les forêts, les bâtiments et bien plus encore

    Les données cartographiques collectées sont ré-utilisables sous licence libre ODbL (depuis le 12 septembre 2012). Pour plus d’information inscrivez-vous à la liste locale OSM de Grenoble

    [FR Gaillac] Atelier informatique libre - Le lundi 25 juin 2018 de 19h30 à 23h00.

    Un atelier d’informatique libre voit le jour au sein du chinabulle, pour créer un espace temps d’échange autour des solutions informatiques libres.

    [FR Marseille] PGDay France - Le mardi 26 juin 2018 de 08h30 à 17h30.

    Le PGDay France est un moment de rencontres et de conférences pour la communauté francophone de PostgreSQL.

    Les conférences s’adressent à tous les utilisateurs du logiciel étudiants, administrateurs systèmes, DBA, développeurs, chefs de Projets, décideurs.

    [FR Aiglun] Après-midi « Open data » et « Cartopartie » - Fête de l'été - Le mardi 26 juin 2018 de 15h00 à 19h00.

    Démarche participative et collaborative, il s’agit notamment de permettre aux associations, producteurs locaux, habitants et usagers de cartographier les services / activités qui constituent la richesse de notre territoire sur un outil libre (Openstreetmap).

    Les données publiques communales mises en ligne et la création d’un agenda partagé (à destination des associations) seront également valorisées.

    Les organisateurs du marché d’Aiglun proposeront de nombreuses animations à travers la fête l’été. Venez nombreux

    Tout l’après-midi marché bio et des producteurs locaux, animation musicale, balades avec les ânes, jeux, atelier de cartographie libre

    À 15 h, 16 h et 17 h visite du champ de lavande rendez-vous sur la place du marché

    À partir de 17 h dégustations des produits du marché préparés par le restaurant Le Pressoir Gourmand et grillades d’agneau

    À 18 h apéritif local offert par la mairie d’Aiglun, débat sur la cartographie et les données ouvertes

    [FR Quetigny] Découvrir, tester, installer Linux et d’autres logiciels libres - Le mardi 26 juin 2018 de 20h30 à 23h30.

    COAGUL est une association d’utilisateurs de logiciels libres et de GNU Linux en particulier.

    Nous utilisons toutes sortes de distributions GNU / Linux (Ubuntu, CentOs, Fedora, Debian, Arch…) et toutes sortes de logiciels pourvu qu’ils soient libres (VLC, LibreOffice, Firefox, Thunderbird, GPG, Tor, OpenNebula, LXC, Apache…).

    Nous partageons volontiers nos connaissances des logiciels libres et l’entraide est de mise dans nos réunions.

    Les permanences servent à se rencontrer et à partager nos expériences et notre savoir sur le logiciel libre.

    Vous souhaitez nous rencontrer nous vous accueillerons à notre permanence.

    On adore les gâteaux et les chocolats, vous pouvez donc en apporter-)

    [FR Le Mans] Permanence du mercredi après-midi - Le mercredi 27 juin 2018 de 12h00 à 17h00.

    Assistance technique et démonstration concernant les logiciels libres.

    [FR Rennes] Sécuriser son infrastructure - Le mercredi 27 juin 2018 de 18h30 à 21h00.

    La sécurité informatique ne repose pas que sur la qualité du code et le chiffrement (même s’ils sont essentiels), c’est aussi une question d’architecture.

    Vous (re)découvrirez quelques principes de sécurisation des infrastructures informatiques tels que la séparation des flux, la redondance et d’autres éléments pouvant améliorer la protection et la disponibilité des services.

    La conférence sera présentée par
      Thomas MICHEL
      Esprit Libre
      esprit-libre-conseil.com (link is external)

    mercredi 27 juin - 18h30

    FrenchTech Rennes - Saint-Malo
    2 rue de la Mabilais
    Rennes

    >>> S’inscrire

    [FR Montpellier] Rencontres des Groupes OpenStreetMap OSM - Le mercredi 27 juin 2018 de 19h00 à 22h00.

    Ces rencontres mensuelles se veulent être des instants conviviaux pour faire un compte-rendu des activités du mois précédent, mais aussi pour présenter les opérations et rendez-vous à venir que proposent les groupes HérOSM et le Collectif des Garrigues. Naturellement, elles sont également ouvertes à tout public.

    Si vous avez des propositions n’hésitez pas à compléter la page dédiée.

    Proposition de programme

    • En première partie de soirée, une initiation pour les débutants est prévue
    • Possibilité d’initiation à la contribution pour les débutants qui le désire
    • Préparation du dossier pour le budget de l’Opération Libre
    • Préparation de l’Opération Libre à Jacou
    • Travail sur les voies manquantes sur (enjeu évident de géocodage d’adresses, comme celles fournies par SIRENE ou FANTOIR par exemple
    • Petit topo sur la saisie des noms de rues à partir des données cadastre/fantoir par département
    • Propositions au sujet du calcul d’itinéraire multimodal (auto, vélo, piéton) dans les futures discussions

      • La pratique des cartoparties
      • Faut-il prioriser la cartographie de certains endroits (gares et arrêts de tram, par exemple) ?
    • Contributions libres

    Déroulement de la rencontre

    Nous vous présenterons les projets en cours, nous vous vous proposerons de contribuer, faire de la production de données, puis nous passerons à un instant convivial sur la terrasse.
    Comme d’habitude, chacun amène ce qu’il veut à manger et à boire pour un repas partagé.
    N’oubliez pas vos ordinateurs portables pour la séance de saisie

    Le dernier mercredi de chaque mois
    Mercredi 27 septembre 2017 de 19h00 à 22h00
    Mercredi 25 octobre 2017 de 19h00 à 22h00
    Mercredi 29 novembre 2017 de 19h00 à 22h00
    Mercredi 20 décembre 2017 de 19h00 à 22h00
    Mercredi 24 janvier 2018 de 19h00 à 22h00
    Mercredi 28 février 2018 de 19h00 à 22h00
    Mercredi 28 mars 2018 de 19h00 à 22h00
    Mercredi 25 avril 2018 de 19h00 à 22h00
    Mercredi 30 mai 2018 de 19h00 à 22h00
    Mercredi 27 juin 2018 de 19h00 à 22h00

    Mercredi 27 septembre 2017 de 19h00 à 22h00
    Le Faubourg - 15, rue du Faubourg de Nîmes, 34 000 Montpellier

    Tramway lignes 1, 2 et 4 arrêt Corum
    GPS Latitude 43.614186 | Longitude 3.881404
    Carte OpenStreetMap

    Le dernier mercredi de chaque mois.

    [FR Toulouse] Rencontres Tetalab - Le mercredi 27 juin 2018 de 20h30 à 23h30.

    Rencontre hebdomadaire des hackers et artistes libristes Toulousains.

    Ouvert au public tous les mercredi soir.

    Venez nombreux.

    [FR Choisy-le-Roi] Pas Sage en Seine - Du jeudi 28 juin 2018 à 10h00 au dimanche 1 juillet 2018 à 20h00.

    Le festival auto-organisé par vous et l’équipe de Pas Sage En Seine se tiendra du 28 juin au 1er juillet 2017 à Choisy-le-Roi dans et aux abords de la Médiathèque Louis Aragon.

    Nous vous invitons à participer à PSES2018 et venir participer à ses ateliers et conférences bien sûr, mais aussi installations, discussions et autres formes d’interventions.

    Des thèmes sont proposés, pas imposés, pour laisser place à la manifestation d’idées originales.

    Le Festival sera un moment convivial et festif pour décrire nos modes d’organisation, nos outils, nos perspectives, évoquer les usages d’autodéfense numériques faces aux perpétuelles manipulations sécuritaires.

    Le vendredi sera une journée spéciale consacrée au RGPD, et le samedi soir (lors de la micro-nocturne jusqu’à 21h30) vous pourrez assister à un concert de chiptune réalisé par le collectif Chip Bangers.

    L’Hacktiviste naît de cette prise de conscience intégrale. Il ouvre, détourne, invente tous les possibles, ou presque… Être et faire politiquement ensemble sera notre prochaine étape

    Le trajet depuis le centre de Paris prend une petite vingtaine de minutes uniquement (Gare du RER C Choisy-le-Roi).

    [FR Rennes] Conseil d’administration de Gulliver - Le jeudi 28 juin 2018 de 12h00 à 14h00.

    Gulliver tiendra son conseil d’administration à la Maison de la Consommation et de l’Environnement (MCE) le jeudi 28 juin 2018 à partir de 12 h. L’ordre du jour est donné dans le lien ci-dessous.

    Ce conseil d’administration est ouvert à tous. Toute personne, membre ou non membre de Gulliver, peut y assister (sauf CA exceptionnel signalé à l’avance), voir comment fonctionne notre association et y donner son avis.

    La MCE est située 42 bd Magenta à Rennes (plan d’accès). La salle réservée est celle de l’accueil.

    [FR Martigues] Permanence du jeudi de l'ULLM - Le jeudi 28 juin 2018 de 16h30 à 18h30.

    Comment utiliser et les Logiciels Libres.

    avec l’association des Utilisateurs de Logiciels Libres du Pays de Martégal (ULLM).

    28 2018 de 16h30 à 18h30 à la (quai des Anglais).

    Entrée Libre. Tout public.

    [FR Challans] Permanence Linux - Le jeudi 28 juin 2018 de 18h00 à 20h00.

    Chaque dernier jeudi du mois, Linux Challans vous donne rendez-vous à l’Albanera Café, 17 rue du Général Leclerc 85 300 Challans.

    Nous vous proposons lors de ces rendez-vous mensuels d’échanger autour du Libre, des conseils ou une assistance technique.

    Vous pouvez venir pour vous faire aider, ou aider, à installer et paramétrer une distribution GNU/Linux de votre choix ou des logiciels libres sur votre ordinateur.

    Recommandations

    • Sauvegardez vos données avant de venir.
    • Libérez de la place sur le disque dur (20 Go minimum) et défragmentez Windows si vous voulez le conserver.
    • Nous prévenir de votre passage via la messagerie.

    Vous pouvez aussi venir pour une première prise d’informations et de contacts.

    Nous vous attendons toujours plus nombreux

    [FR Bordeaux] Jeudi Giroll - Le jeudi 28 juin 2018 de 18h30 à 20h30.

    Les membres du collectif Giroll, GIROnde Logiciels Libres, se retrouvent une fois par semaine, pour partager leurs  savoir-faire et expériences autour des logiciels libres.

    Le collectif réalise aussi une webradio mensuelle, tous les second mardis du mois, à retrouver en direct sur le site de Giroll.

     Ses rencontres sont ouvertes à tous.

    [FR Peymeinade] Install-Party GNU/Linux - Le jeudi 28 juin 2018 de 19h00 à 21h00.

    Désormais tous les 4ᵉˢ mercredi du mois, Clic Ordi et Linux Azur vous proposent une install-party ouverte à tous et gratuite.

    • Découvrez un monde rempli de Papillons, licornes, mais surtout de manchots
    • Plus besoin de se soucier des virus et autres logiciels malveillants.
    • Le support de Windows Vista s’arrête dans un an, et les principaux logiciels ont déjà arrêté leurs mise à jour, réagissez
    • Ramenez vos ordinateurs obsolètes et donnez leur une seconde vie.

    Nous aimerions développer autour de Handy-Linux (et de sa future mouture avec Debian-Facile) afin de répondre à des besoins simples pour des personnes difficiles à former et pouvant se retrouver en fracture numérique).

    Nous sommes ouverts à tout, y compris à la bidouille sur l’atelier avec le fer à souder.

    Organisé conjointement par http://clic-ordi.com/fr et https://www.linux-azur.org

    [FR Vesseaux] Projection-débat du film « Nothing to hide » - Le jeudi 28 juin 2018 de 19h00 à 22h00.

    Ouverture des portes à 19h pour partager un moment de convivialité, discuter des choses et d’autres comme les logiciels libres, les données personnelles, la vie privée

    Il y a une buvette sur place, et vous pouvez également apporter un plat à partager ou biscuits apéro

    La projection du film documentaire Nothing to Hide aura lieu à 20h30, et sera suivie d’un débat pour répondre à vos questions

    « Dire que votre droit à la vie privée importe peu, car vous n’avez rien à cacher revient à dire que votre liberté d’expression importe peu, car vous n’avez rien à dire. Car même si vous n’utilisez pas vos droits aujourd’hui, d’autres en ont besoin. Cela revient à dire les autres ne m’intéressent pas », Edward Snowden

    Ce documentaire aborde le thème de la vie privée et des données personnelles.

    L’entrée est à prix libre (adhésion à l’association Vesseaux-Mère).

    [FR Paris] Soirée de Contribution au Libre - Le jeudi 28 juin 2018 de 19h30 à 22h30.

    Parinux propose aux utilisateurs de logiciels libres de se réunir régulièrement afin de contribuer à des projets libres. En effet, un logiciel libre est souvent porté par une communauté de bénévoles et dépend d’eux pour que le logiciel évolue.

    Nous nous réunissons donc tous les dans un environnement propice au travail (pas de facebook, pas de télé, pas de jeux vidéos, pas de zombies).

    Vous aurez très probablement besoin d’un ordinateur portable, mais électricité et réseau fournis.

    En cas de difficulté, vous pouvez joindre un des responsables de la soirée, Emmanuel Seyman (emmanuel (at) seyman.fr), Paul Marques Mota mota (at) parinux.org, ou Magali Garnero (Bookynette) tresorier (at) parinux.org.

    Pour obtenir le code d’entrée de la porte cochère, envoyez un mail au responsable.

    On peut amener de quoi se restaurer (Franprix, 8 rue du Chemin Vert, ferme à 22h)

    Regazouillez sur Twitter - Wiki des soirées

    Programme non exhaustif

    • Fedora (sa traduction)
    • Parinux, ses bugs et son infrastructure
    • April, … y a toujours quelque chose à faire
    • Open Food Facts/ Open Beauty Facts, sa base de données, ses contributeurs, sa roadmap
    • Schema racktables, son code
    • Agenda du Libre, mise à jour et amélioration du code
    • Ubuntu-Fr, son orga, ses événements
    • En vente libre, maintenance et commandes
    • Open street map, une fois par mois
    • Linux-Fr sait faire
    • en vente libre

    tout nouveau projet est le bienvenu.

    [FR Montpellier] Atelier du Libre Ubuntu et Logiciels Libres - Le vendredi 29 juin 2018 de 18h00 à 23h00.

    L’équipe de Montpel’libre vous propose une permanence Logiciels Libres, discussions libres et accompagnements techniques aux systèmes d’exploitation libres, pour vous aider à vous familiariser avec votre système GNU/Linux au quotidien.

    Le contenu de l’atelier s’adapte aux problèmes des personnes présentes et permet ainsi l’acquisition de nouvelles compétences au rythme de chacun.

    Vous pourrez y aborder plusieurs thèmes

    • Discussions conviviales entre utilisateurs autour de Linux en général
    • Préinscription aux prochains Cafés Numériques et Install-Party
    • Premières explorations du système
    • Installations et configurations complémentaires
    • Mise à jour et installation de nouveaux logiciels
    • Prise en main, découverte et approfondissement du système

    Les Ateliers du Libre ont lieu à la Mpt Melina Mercouri de Montpellier, tous les derniers vendredis de chaque mois de 18h00 à 20h00, sauf période de vacances.

    Entrée libre et gratuite sur inscription. Une simple adhésion à l’association est possible et auprès de la Mpt.

    Cet événement est proposé par le partenariat qui lie la Mpt Melina Mercouri de Montpellier et Montpel’libre.

    Toute une équipe de passionnés, vous propose l’animation de l’Atelier du Libre par les membres de Montpel’libre. Permanence Logiciels Libres, discussions libres et accompagnements des utilisateurs aux systèmes exploitation libres, Linux, sur le cyberespace de consultations libres.

    En fin de soirée, l’atelier fera progressivement place à un instant très convivial, les RDVL sont des rendez-vous mensuels de discussions sur le thème des logiciels libres, des arts libres, de l’open source et plus généralement de la culture du libre et du numérique.

    Cette soirée, très conviviale, se passe autour d’un repas partagé, chacun porte un plat, entrée, spécialité, dessert, boisson… Ordinateurs et réseaux disponibles.

    Notre équipe vous attend pour répondre à vos questions et satisfaire votre curiosité.

    Maison pour tous Mélina Mercouri 842, rue de la vieille poste, 34 000 Montpellier

    Bus ligne 9, La Ronde arrêt Pinville
    GPS Latitude 43.61354 Longitude 3.908768
    Carte OpenStreetMap

    Rendez-vous mensuel, tous les derniers vendredis, salle jamais le dimanche

    [FR Paris] Apéro April - Le vendredi 29 juin 2018 de 19h00 à 22h00.

    Un apéro April consiste à se réunir physiquement afin de se rencontrer, de faire plus ample connaissance, d’échanger, de partager un verre et manger mais aussi de discuter sur le logiciel libre, les libertés informatiques, fondamentales, l’actualité et les actions de l’April…

    Un apéro April est ouvert à toute personne qui souhaite venir, membre de l’April ou pas.

    N’hésitez pas à venir nous rencontrer.

    Où et quand cela se passe-t-il

    L’apéro parisien aura lieu vendredi 29 juin 2018 à partir de 19h00 dans les locaux de l’April.

    L’adresse
    April, 44/46 rue de l’Ouest, bâtiment 8, 75 014 Paris (entrée possible par la place de la Catalogne, à gauche de la Biocoop, au niveau des Autolib).
    Métros Gaîté, Pernety, Montparnasse. Sonner à « April » sur l’interphone.
    Le téléphone du local 01 78 76 92 80.

    L’Apéro a lieu à Paris notamment parce que le local s’y trouve ainsi que les permanents et de nombreux actifs. Pour les apéros dans les autres villes voir sur le pad plus bas.

    En ouverture de l’apéro nous ferons un court point sur les dossiers/actions en cours.

    Le glou et le miam

    Vous pouvez apporter de quoi boire et manger afin de reprendre des forces régulièrement. Nous prévoirons bien sûr un minimum vital.

    Vous pouvez vous inscrire sur le pad.

    [FR Dijon] Atelier de création numérique et électronique - Le vendredi 29 juin 2018 de 20h30 à 23h59.

    Le fablab et hackerspace l’abscisse vous propose comme tous les vendredis soir un atelier de création numérique et électronique.

    L’atelier est équipé de différents outils perceuse, CNC, Arduino, Raspberry Pi, ordinateurs, oscilloscope, multimètre.

    Une ressourcerie est à disposition, vous y trouverez des composants électroniques et des pièces détachées à prix libre.

    Vous pouvez venir découvrir l’atelier et les usagers du fablab à partir de 20h30.

    Vous pouvez aussi venir pour participer aux travaux numériques en cours, partager vos connaissances et vos savoir-faire.

    Tous nos travaux sont libres et documentés sous licence libre.

    [FR Saint-Jean-de-Védas] Repair Café - Le samedi 30 juin 2018 de 09h00 à 13h00.

    Nous vous proposons ce rendez-vous, où, bricoleurs, acteurs, bénévoles, associations, vous attendent pour vous aider à donner une deuxième vie à vos objets.

    Réparer ensemble, c’est l’idée des Repair Cafés dont l’entrée est ouverte à tous. Outils et matériel sont disponibles à l’endroit où est organisé le Repair Café, pour faire toutes les réparations possibles et imaginables. Vêtements, meubles, appareils électriques, bicyclettes, vaisselle, objets utiles, jouets, et autres. D’autre part sont présents dans le Repair Café des experts bénévoles, qui ont une connaissance et une compétence de la réparation dans toutes sortes de domaines.

    On y apporte des objets en mauvais état qu’on a chez soi. Et on se met à l’ouvrage avec les gens du métier. Il y a toujours quelque chose à apprendre au Repair Café. Ceux qui n’ont rien à réparer prennent un café ou un thé, ou aident à réparer un objet appartenant à un autre. On peut aussi toujours y trouver des idées à la table de lecture qui propose des ouvrages sur la réparation et le bricolage.

    Repair Café est un atelier consacré à la réparation d’objets et organisé à un niveau local, entre des personnes qui habitent ou fréquentent un même endroit, par exemple un quartier ou un village. Ces personnes se rencontrent périodiquement en un lieu déterminé, dans un café, une salle des fêtes ou un local associatif où des outils sont mis à leur disposition et où ils peuvent réparer un objet qu’ils ont apporté, aidés par des volontaires.

    Les objectifs de cette démarche alternative sont divers

    • réduire les déchets
    • préserver l’art de réparer des objets
    • renforcer la cohésion sociale entre les habitants des environs

    Seront présents

    • Autour.com : On se rend des services entre voisins, on partage des infos, on prête, on loue, on donne…
    • L’Accorderie : Est un système d’échange de services entre habitants d’un même quartier ou d’une même ville.
    • La Gerbe : Contribuer à la formation de citoyens éveillés, engagés et solidaires en offrant aux enfants et aux jeunes un espace privilégié d’expression et d’épanouissement Crèche, Centre de loisirs, Scoutisme, Ateliers, chacun peut y trouver un cadre pour son développement grâce au travail d’une équipe de professionnels et de bénévoles.
    • Les Compagnons Bâtisseurs : Prévoient d’amener des outils
    • Les Petits Débrouillards : est un réseau national de culture scientifique et technique, ils viendront avec pleins de conseils et une imprimante 3D.
    • Le Faubourg : Hébergera le Repear Café.
    • Montpel’libre : Sera là avec des pièces informatiques, pour essayer de reconditionner des ordinateurs, dépanner ceux qui ne fonctionnent plus, expliquer comment ça marche, faire comprendre le choix judicieux du logiciel libre, contourner l’obsolescence programmée grâce à GNU/Linux, comment réparer et entretenir son matériel soi-même, nous porterons un jerry.
    • TechLabLR : Accompagne les projets à composantes technologiques afin de les amener au pré-prototype, puis les guider vers les structures d’accompagnements.
    • Violons Dingues : Passionnés de la vie, des autres, de la culture, de l’art, du sport, de la mécanique, de la moto, de la photo, de la musique, des animaux, des insectes, des plantes, de l’environnement, enfin de tout ce qui circule (au propre comme au figuré) sur notre planète.
    • Zéro Waste Montpellier : La démarche « Zéro Waste » est une démarche positive pour aller vers une société zéro déchet et zéro gaspillage.

    • Maison des Associations, 18 bis rue Fon de l’Hospital, Saint-Jean-de-Védas, Occitanie, France

    • Adresse web http://montpel-libre.fr

    • Tags
      montpel-libre, repair-cafe, atelier

    [FR Casseneuil] Install Partie GNU/Linux - Le samedi 30 juin 2018 de 10h00 à 17h00.

    Le Samedi 30 Juin les bénévoles d’aGeNUx sont invités dans les locaux d’Avec 2L pour une Install-party.

    Venez découvrir et partager le monde du logiciel libre en toute sérénité.

    Animation Libre et non payante.

    Auberge Espagnole le midi.

    Avec 2L se situe derrière la poste de Casseneuil

    [FR Wintzenheim] Réunion du Club Linux - Le samedi 30 juin 2018 de 13h00 à 19h00.

    Comme tous les 3 samedis, le Club Linux de la MJC du Cheval Blanc se réunit et accueille toutes les personnes qui souhaitent découvrir ou approfondir Linux et les Logiciels Libres. Aucune compétence n’est demandée.  

    Pendant ces rencontres, informelles,

    • nous accueillons celles et ceux qui cherchent une réponse ou souhaitent découvrir Linux et les Logiciels Libres,
    • nous installons Linux sur des ordinateurs, la plupart des fois en « dual boot »(*), ce qui permet de conserver l’ancien système (par exemple Windows) et d’utiliser quand même, en choisissant au démarrage,
    • nous partageons nos recherches et nos découvertes, les nouveautés.

    Le Club Linux est également impliqué dans une démarche de libération des GAFAM (Google Apple Facebook Amazon Microsoft) et de promotion de solutions libres comme, entre autres, Wikipedia, Openstreetmap, les Framatrucs (*), les Chatons (*) et beaucoup d’autres.

    (*) : mais on vous expliquera

    [FR Villefranche-sur-Saône] Repaircafé - Le samedi 30 juin 2018 de 13h30 à 17h30.

    Dernier Repaircafé caladois mensuel de la saison avant les vacances.

    Avec la participation habituelle de la CAGULL.

    [FR Marseille] Install Party GNU/Linux - Le samedi 30 juin 2018 de 14h00 à 19h00.

    L’association (CercLL d’Entraide et Réseau Coopératif autour des Logiciels Libres) vous invite à une install party GNU/Linux, le, dans la salle du Foyer du Peuple 50 rue Brandis 13 005 Marseille.

    Vous avez envie de découvrir un système d’exploitation libre, simple d’utilisation, stable, rapide et sécurisé. Une nouvelle façon d’utiliser votre ordinateur.

    Vous vous sentez une affection naissante pour le Gnou et le, les mascottes de

    Au programme

    DÉCOUVERTE de l’univers des logiciels libres.

    INSTALLATION d’un environnement GNU/ Linux, ainsi que le meilleur des logiciels libres.

    Venez avec votre ordinateur, nous installerons ensemble une distribution avec un ensemble de et pour une utilisation quotidienne.

    Ouvert à tous – accessible aux débutant-e-s

    Une participation de 2 euros est demandée.

    L’adhésion à l’association est de 20 euros annuelle.(L’adhésion n’est pas obligatoire).

    Plan d’accés

    [BE Liège] Linux Install Party - Le samedi 30 juin 2018 de 14h00 à 18h00.

    Une Linux Install Party a lieu tous les derniers samedis du mois de septembre à juin, dans les locaux du Cyber Seniors Énéo de Grivegnée, où je suis animateur.

    L’accès et la participation à l’Install Party est ouvert à tous et est gratuit.

    Vous venez avec votre ordinateur et on y installe le Linux que vous désirez.

    Les installations commencent à 14h et finissent à 18h.
    Prévoyez de venir avant 17h, parfois ça peut durer longtemps.

    [FR Ivry sur Seine] Cours de l’Ecole du Logiciel Libre - Le samedi 30 juin 2018 de 14h30 à 18h30.

    Présentation de l’E2L

    Quel est le rôle de l’école du logiciel libre

    Tout d’abord, ce n’est pas une école comme les autres. Elle n’a pas d’établissement fixe, pas de cours de récréation, pas de carte d’étudiant, ni de diplôme de fin d’année.

    Comme toutes les écoles, son rôle est d’apprendre à ses élèves les logiciels libres, c’est-à-dire

    • comment en trouver de bons parmi les nombreux sites qui en proposent,
    • comment en prendre possession en fonction des licences,
    • comment les installer en fonction de ses besoins,
    • comment les tester et les utiliser,
    • comment en comprendre le fonctionnement pour ensuite les modifier,
    • comment écrire ses propres logiciels libres.

    En fait, l’école du logiciel libre est une université populaire, comme celles qui ont vu le jour en France à partir du 19ᵉ siècle, et dont le but est de transmettre des connaissances théoriques ou pratiques à tous ceux qui le souhaitent. Et pour atteindre ce but, sa forme juridique est de type " association à but non lucratif ".

    Comment fonctionne l’école

    Cette école étant une association, elle possède, comme toutes les autres, un bureau, élu chaque année en assemblée générale, pour l’administrer. Mais elle a aussi des responsables pédagogiques dont le rôle est essentiel, car ce sont eux qui établissent les programmes des cours en fonction des souhaits des adhérents, valident les candidatures des enseignants et affectent les sessions.

    Les membres du bureau et les responsables pédagogiques forment « l’encadrement de l’école ». Tous les membres « encadrants » doivent être membres de l’association.

    Les locaux où se déroulent les cours seront ceux que l’on veut bien nous prêter une salle des fêtes, un théâtre, une salle de réunion publique, un amphi dans une école publique, ou autre.

    Les thèmes des cours sont définis par les adhérents en fonction de leurs envies, de leurs besoins. Les cours sont ensuite décidés par les responsables pédagogiques de l’école en fonction des enseignants disponibles.

    Afin de permettre au plus grand nombre de participer et d’assister aux cours, les sessions se tiennent essentiellement le samedi. Une première de 9h à 12h30, et une autre de 14h à 17h30.

    Programme détaillé sur le site http://e2li.org

    [FR Courbevoie] Assemblée Générale annuelle de l'association StarinuX - Le samedi 30 juin 2018 de 14h30 à 17h00.

    L'association GULL StarinuX vous invite à  son

    ASSEMBLÉE GÉNÉRALE annuelle

    le samedi 30 juin 2018 à 14h30,

    48 rue de Colombes 92 400 Courbevoie

    (SNCF Gare de Courbevoie,  Saint Lazare <=> La Défense).

    Seuls les adhérent(e)s peuvent voter, mais les discussions restent ouvertes à tous les présents.

    Un déjeuner facultatif aura lieu à 12h30.

    Au plaisir de nous rencontrer à l’AG 2018

    Le Bureau de StarinuX

    [FR Poucharramet] Festival AgitaTerre - Le dimanche 1 juillet 2018 de 09h30 à 23h00.

    L’association 3PA Formation vous invite à la cinquième édition du Festival AgitaTerre Nous vous donnons rendez-vous le dimanche 1er juillet au coeur du village de Poucharramet (31), entre la place des Marronniers et La Maison de la Terre

    Venez découvrir des alternatives durables, locales et citoyennes qui font vivre notre territoire. Cette année, le festival investit le thème des Communs venez en apprendre plus

    Un événement gratuit et tout public

    9h30-18h

    Marché de producteurs et artisans-créateurs locaux
    Forum associatif & Village des Communs

    Conférences
    Expositions « C’est quoi les Communs »
    Ateliers tous publics

    Expositions d’artistes sculpteurs sur bois
    Mur d’expression libre
    Vannerie géante collective

    Concerts
    Spectacles et animations

    Buvette & Restauration
    Espace enfants

    20h30 Grand concert en plein air avec notre partenaire La Maison de la Terre

    Programmation et exposants sur www.agitaterre.fr

    Infos agitaterre@3paformation.fr // 3PA 05.61.08.11.30

    Parking sur place
    Adapté aux personnes à mobilité réduite

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Dr. Geo 18.06

    GNU Dr. Geo est un logiciel de géométrie interactive euclidienne du plan, pour une utilisation à l'école secondaire et primaire. Il permet d'organiser des activités pédagogiques dans l'enseignement de la géométrie, voire d'autres domaines liés des mathématiques.
    Intégré à un environnement dynamique de programmation Smalltalk, il propose également une approche de la géométrie dynamique par la programmation, soit par l'utilisation de script(s) intégré(s) à une figure, soit par une description purement programmatique d'une construction géométrique. En outre, Dr. Geo est toujours modifiable depuis lui-même, fonctionnalité héritée de son environnement de développement.

    Dr. Geo 18.06

    La version 18.06 fait suite à la version 17.07 sortie en juillet 2017. Une grande partie de l'effort fut de porter le code de la version 3 à la version 7 de l'environnement Smalltalk Pharo avec lequel est développé Dr. Geo. Outre les corrections de bugs inhérentes à ce portage, quelques fonctionnalités nouvelles ont fait leur apparition.

    Nouvelles fonctionalités

    Dans Dr. Geo, un script est défini par une classe Pharo. L'utilisateur insère alors une instance du script dans la figure géométrique ; il lui associe si nécessaire d'autres objets géométriques de la figure en paramètres. Un script effectue un traitement ad-hoc, calculs ou modifications sur d'autres objets de la figure tels que programmés dans les méthodes du script. Une fois défini, le script est facile à utiliser.

    L'édition de script se fait maintenant à l'aide d'un outil d'édition de code dédié, et non plus par l'intermédiaire du navigateur de code de Pharo, qui est pour le moins impressionnant.

    À noter que l'ajout d'attribut au script nécessite toujours l'utilisation du navigateur de code de Pharo. Ce besoin est nécessaire uniquement lorsque le script a un état dont il doit se souvenir tout au long du cycle de vie de la figure.
    Editeur de script

    Le manuel utilisateur a une section dédiée au script.

    Inspecteur sur code de figures programmées

    Une figure programmée est l'autre forme d'utilisation de la programmation dans la géométrie dynamique. Dans cette approche la figure géométrique est entièrement définie par un code Smalltalk et l'utilisation de l'API dédiée.

    Il est dorénavant plus aisé de gérer ses fichiers de figures programmées. Le nouvel inspecteur de Pharo — outre l'inspection d'attributs d'instance de classe — propose aussi de voir, d'exécuter, d'éditer et de créer les scripts de figures programmées.
    Inspecteur sur scripts de figures programmées

    Zoom positionnel

    Pour zoomer dans une figure l'utilisateur dispose du widget de molette orange en haut à droite de chaque figure ou de la molette de la souris. Le zoom par la souris est maintenant positionnel, focalisé sur la position du curseur souris ; celui par le widget reste, lui, centré au milieu de la zone visible de la figure.

    Détection de polygone sans surface

    Lorsqu'un polygone est sans surface (vide), Dr. Geo ne détectera que ses lignes, et non plus sa surface intérieure puisqu'elle n'existe pas.
    Polygone sans/avec surface

    Tests unitaires basés sur figures programmées

    Le petit corpus de figures programmées distribué avec Dr. Geo est également utilisé pour définir une série supplémentaire de tests unitaires.

    Partage réseau

    Dans le cadre d'une activité pédagogique en salle informatique, distribuer aux élèves des fichiers de figures est pratique. Dr. Geo propose maintenant une fonctionnalité de partage en réseau local, indépendante des services du réseau local (NFS, Samba, Windows, etc.). La marche à suivre est la suivante :

    1. L'enseignant sauve les documents à partager dans son dossier DrGeo.app/MyShares : MyShares
    2. L'enseignant active le partage réseau local depuis le navigateur de préférences de DrGeo (menu Système, Préférences) : Activation du partage
    3. L'élève, depuis l'outil habituel d'ouverture de figures, parcourt les figures partagées (bouton 'Partage enseignant') : Parcourir les figures partagées

    Cette fonctionnalité peut s'utiliser de façon croisée avec Linux, Mac et Windows.

    Thèmes graphiques

    Le navigateur de préférences (menu Système, Préférences) donne accès à deux thèmes graphiques, hérités de Pharo :

    • Thème sombre, par défaut, à privilégier lorsque Dr. Geo est utilisé de façon autonome sur un seul poste.
      Thème sombre

    • Thème clair, à utiliser en vidéo projection, par exemple, car le thème sombre manque de contraste.
      Thème clair

    Option plein écran

    Depuis le menu système, l'utilisateur peut basculer en affichage plein écran ; le système hôte est alors complètement masqué. Pratique pour que les élèves se concentrent sur leur activité de géométrie dynamique.

    Les autres modifications de la version 18.06.

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Faille Lazy FPU state restore

    Intel est de nouveau confronté à la découverte d’une faille, le Lazy FPU State Restore flaw.
    Cette fois, seule la famille des Intel Core serait concernée.

    Sommaire

    Le FPU

    Le FPU, c’est le bordel, par Ingo Molnar

    L’unité de calcul en virgule flottante, le FPU, possède une série de registres qui lui permet de « définir » son état courant. Lors du basculement d’une tâche à une autre (context switching), cet état est alors restauré pour retrouver un contexte correspondant au processus en cours. Ces opérations peuvent être coûteuses car les registres du FPU sont plus gros que les autres, c’est pourquoi les FPU fournissent une option pour désactiver toute opération en virgule flottante (CR0:TS). Aussi, dès qu’un calcul en virgule flottante est appelé, une exception est lancée pour « réveiller » le FPU avant de lancer l’opération normalement.
    Lorsque cette exception (fpudna, FPU Device Not Available) se produit, un « gestionnaire de contexte FPU » vérifie quel processus a la main sur le FPU à ce moment‐là.
    S’il s’agit d’un autre processus, il procède à la sauvegarde puis la restauration des registres, ou s’il s’agit d’un nouveau contexte, la sauvegarde puis le nettoyage des registres ; sinon, il ne fait rien : c’est le mode « paresseux » (lazy). À la sortie du processus, il ne faut pas oublier de « nettoyer » ces tables et de (re)lever tous les drapeaux liés à cette exception.

    En mode eager (zélé, volontaire), la sauvegarde et restauration des registres associés au FPU est effectuée quoiqu’il advienne, au moment du changement de tâche et non durant l’exécution de la tâche qui vient de prendre la main.

    Le bâton

    Au fil des années, les processeurs ont multiplié les registres pour prendre en charge les instructions de type SIMD, soit une instruction capable de procéder au même calcul sur un ensemble de paires de données.

    Les registres SSE, AVX et MMX restent associés au FPU et seront donc intégrés au mécanisme de sauvegarde et restauration… et ils peuvent contenir jusqu’à 2 048 bits de données, rien que sur l’AVX.

    [    0.000000] Linux version 4.14.48-intel-pk-standard (oe-user@oe-host) (icc version 18.0.2 (gcc version 7.3.0 compatibility)) #2 SMP PREEMPT Wed Jun 20 13:21:48 UTC 2018                                                              
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'                               
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'                                              
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'                                       
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'                                                    
    [    0.000000] x86/fpu: xstate_offset[3]:  576, xstate_sizes[3]:   64                                                
    [    0.000000] x86/fpu: xstate_offset[4]:  640, xstate_sizes[4]:   64                                                
    [    0.000000] x86/fpu: Enabled xstate features 0x1b, context size is 704 bytes, using 'compacted' format.
    

    Pour se faire battre

    Par le biais désormais connu de l’exécution spéculative puis de l’analyse de cache, un attaquant pourra lire ces registres depuis un autre processus, voire depuis une machine virtuelle. En effet, en mode lazy la sauvegarde des registres d’une tâche s’effectue au cours de l’exécution d’une autre tâche. La spéculation ignorant le drapeau CR0:TS, tout est alors possible.

    Ces registres peuvent contenir des informations sensibles comme des clefs de chiffrement (AES), par le biais des instructions d’accélération matérielle AES-NI.

    Delivers Fast, Affordable Data Protection and Security. AHeum.

    Colin Percival, ex‐membre de l’équipe sécurité de FreeBSD, a codé un exploit en quelques heures et note, dans un tweet :

    « You need to be able to execute code on the same CPU as the target process in order to steal cryptographic keys this way. You also need to perform a specific sequence of operations before the CPU pipeline completes, so there’s a narrow window for execution. »

    « Vous devez être en mesure d’exécuter le code de [l’exploit] sur le même processeur que celui de la cible pour voler les clefs de cette manière. Vous devrez en outre appliquer une suite précise d’opérations avant que la chaîne de traitement du processeur ne se termine ; de fait, la fenêtre de tir est très étroite. »

    Ce qui semble vouloir dire que, pour l’instant, coder le vol de données depuis un script venu du Web n’est pas simple à réaliser. Le temps nécessaire au vol des données des registres est la clef de l’attaque. Il faut le terminer avant que le séquenceur ne préempte la victime et que les valeurs des registres ne soient modifiées.

    Pour y arriver, les chercheurs ont utilisé plusieurs méthodes :

    Exception

    Il s’agit de coder la fuite de données à l’ombre d’une exception, sciemment provoquée, tel un page fault, par exemple. Mais il s’avère que cette solution est trop lente pour récupérer tout un jeu de registres.

    Intel TSX

    Cette mécanique n’est disponible que sur les architectures récentes (à partir de Haswell), ce qui limite l’angle d’attaque. Cette technologie comporte un jeu d’instructions appelé RTM (Restricted Transactional Memory) qui permet d’annuler un bloc d’exécution en cas d’interruption ; il suffit d’y encadrer le code malicieux, qui va innocemment faire appel au FPU, pour lever l’exception fpudna… Ce serait presque « étudié pour ».

    Retpoline

    Il s’agit au départ d’une contre‐mesure pour Spectre. Elle vise à fourvoyer sciemment le processeur sur l’adresse de retour d’un RET en plaçant une « fausse » boucle et donc le forcer à exécuter de manière spéculative un code innocent. Le code malicieux sera donc placé à cet endroit.

    Les correctifs

    Le mode lazy semble moins pertinent aujourd’hui. Les gains en performance sont faibles avec les architectures récentes et, surtout, selon les usages actuels. Le FPU étant même beaucoup plus utilisé dans nos logiciels, son usage serait contre‐productif.
    En effet, les compilateurs choisissent d’appeler les instructions SIMD (i.e. -sse) pour optimiser le code des logiciels. De fait, ceux‐ci auront de toute façon sauvegardé et restauré les registres du FPU à chaque changement de contexte. La gestion de l’exception sera inutile et va juste alourdir le processus. En outre, l’empreinte d’une sauvegarde et restauration serait moindre que celle de la gestion des drapeaux, des registres et de leurs états suite à l’interruption, le transfert de registres FPU en mémoire étant plus rapide car optimisé.

    Il est donc préconisé d’éviter le mode lazy au profit du mode eager.

    • Linux propose le mode eager plutôt que le mode lazy depuis la version 3.7 et l’active par défaut depuis la version 4.9 ;
    • ajoutez eagerfpu=on sur la ligne de démarrage pour les versions antérieures à la 4.9 ;
    • FreeBSD a poussé un correctif pour la Release 11.2 ; c’est un FreeBSD 11.1 qui a servi de cobaye ;
    • DragonFly BSD a poussé un correctif dans la version 5.2.2 ;
    • Microsoft poussera un correctif en juillet ;
    • OpenBSD a poussé un correctif le 14 juin pour la version 6.3 ;
    • NetBSD a poussé un correctif le 16 juin sur MAIN ;
    • Illumos a poussé un correctif le 19 juin.

    Conclusion

    Ils ne sont pas à la fête cette année, chez Intel. Le point positif est que la correction de cette faille devrait conduire à une amélioration des performances, voire de la consommation d’énergie.

    Theo de Raadt avait prévenu 11 ans auparavant que l’architecture Intel Core 2 promettait ce genre de faille :

    « These processors are buggy as hell, and some of these bugs don’t just cause development/debugging problems, but will ASSUREDLY be exploitable from userland code. »

    « Ces processeurs sont bogués comme jamais et nombre de ces bogues ne provoquent pas seulement des soucis de développement et d’analyse, mais ils vont assurément être exploitables depuis l’espace utilisateur. »

    Pour la petite histoire, l’embargo s’est terminé le 6 juin. Colin Percival, qui assistait à une conférence de Théo de Raadt lors de la BSDCan 2018, a codé un exploit dans la foulée, qu’il n’a pas encore rendu public. Mais il a convaincu Intel de lever l’embargo au plus vite.
    Il est notable qu’aucun des deux n’avait été mis dans la confidence ; OpenBSD signale même qu’ils en ont fait la demande (des rumeurs circulaient autour d’une énième version de Spectre), mais sans obtenir de réponse.

    Invitation to Embargo? No.
    We asked.
    No reply.

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Lazy FPU state restore

    Intel est de nouveau confronté à la découverte d'une faille, le
    Lazy FPU State Restore flaw.
    Cette fois, seule la famille des intel core serait concernée.

    Sommaire

    Le FPU

    L'unité de calculs flottants, le FPU, possède une série de registres qui lui permet de définir son état courant.
    Lors du basculement d'une tâche à une autre ( context switch), cet état est alors restauré pour retrouver un contexte correspondant au processus en cours.

    Ces opérations peuvent être coûteuses car les registres sont plus gros que ceux du CPU, c'est pourquoi les FPU fournissent une option pour désactiver toute opération flottante (CR0:TS) ; aussi, dès qu'un calcul flottant est appelé une exception est lancée pour réveiller le FPU avant de lancer l'opération normalement.
    Lorsque cette exception (fpudna, FPU Device Not Available) se produit, un gestionnaire de contexte fpu vérifie quel processus a la main sur le FPU à ce moment-là.
    S'il s'agit d'un autre processus, il procède à la sauvegarde puis restauration des registres, ou s'il s'agit d'un nouveau contexte, la sauvegarde puis nettoyage des registres ; sinon, il ne fait rien : c'est le mode «paresseux» (lazy). À la sortie du processus, il ne faut pas oublier de nettoyer ces tables et de (re)lever tous les drapeaux liés à cette exception.

    En mode eager (zélé, volontaire), la sauvegarde/restauration des registres associés au FPU est effectuée quoiqu'il advienne, au moment du changement de tâche et non durant l'exécution de la tache qui vient de prendre la main.

    Le bâton

    Au fil des années, les processeurs ont multiplié les registres pour prendre en charge les instructions de type SIMD, soit une instruction capable de procéder au même calcul sur un ensemble de paires de données.

    Les registres SSE, AVX et MMX restent associés au FPU et seront donc intégrés au mécanisme de sauvegarde/restauration…
    … et ils peuvent contenir jusqu'à 2Kb de données, rien que sur l'AVX.

    [    0.000000] Linux version 4.14.48-intel-pk-standard (oe-user@oe-host) (icc version 18.0.2 (gcc version 7.3.0 compatibility)) #2 SMP PREEMPT Wed Jun 20 13:21:48 UTC 2018                                                              
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'                               
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'                                              
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'                                       
    [    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'                                                    
    [    0.000000] x86/fpu: xstate_offset[3]:  576, xstate_sizes[3]:   64                                                
    [    0.000000] x86/fpu: xstate_offset[4]:  640, xstate_sizes[4]:   64                                                
    [    0.000000] x86/fpu: Enabled xstate features 0x1b, context size is 704 bytes, using 'compacted' format.
    

    Pour se faire battre

    Par le biais désormais connu de l’exécution spéculative puis de l'analyse de cache, un attaquant pourra lire ces registres depuis un autre processus, voire, depuis une machine virtuelle. En effet, en mode lazy la sauvegarde des registres d'une tâche s'effectue au cours de l'exécution d'une autre tâche. La spéculation ignorant le drapeau CR0:TS, tout est alors possible.

    Ces registres peuvent contenir des informations sensibles comme des clefs de chiffrement (AES), par le biais des instructions d'accélération matérielle AES-NI.

    Delivers Fast, Affordable Data Protection and Security. AHeum.

    Colin Percival, ex membre de l'équipe sécurité de FreeBSD, a codé un exploit en quelques heures et note, dans un tweet :

    You need to be able to execute code on the same CPU as the target process in order to steal cryptographic keys this way. You also need to perform a specific sequence of operations before the CPU pipeline completes, so there’s a narrow window for execution

    Vous devez être en mesure d'exécuter le code [de l'exploit] sur le même CPU que celui de la cible pour voler les clefs de cette manière. Vous devrez en outre appliquer une suite précise d'opérations avant que la chaîne de traitement du CPU ne se termine ; de fait, la fenêtre de tir est très étroite.

    Ce qui semble vouloir dire que, pour l'instant, coder le vol de données depuis un script venu du Web n'est pas simple à produire. Le temps nécessaire au vol des données des registres est la clef de l'attaque. Il faut le terminer avant que le séquenceur ne préempte la victime et que les valeurs des registres ne soient modifiées.

    Pour y arriver, les chercheurs ont utilisé plusieurs méthodes:

    • Exception

    Il s'agit de coder la fuite de données à l'ombre d'une exception, sciemment provoquée, tel un page fault par exemple. Mais il s'avère que cette solution est trop lente pour récupérer tout un jeu de registres.

    • Intel TSX

    Cette mécanique n'est disponible que sur les architectures récentes (à partir de Haswell) ce qui limite l'angle d'attaque. Cette technologie comporte un jeu d'instructions appelé RTM (Restricted Transactional Memory) qui permet d'annuler un bloc d'exécution en cas d'interruption ; il suffit d'y encadrer le code malicieux, qui va innocemment faire appel au FPU, pour lever l'exception fpudna… Ce serait presque « étudié pour ».

    • Retpoline

    Il s'agit au départ d'une contre-mesure pour spectre.
    Elle vise à fourvoyer sciemment le CPU sur l'adresse de retour d'un RET en plaçant une fausse boucle et donc le forcer à exécuter de manière spéculative un code innocent. Le code malicieux sera donc placé à cet endroit.

    Les correctifs

    Le mode lazy semble moins pertinent aujourd'hui. Les gains en performance sont faibles sous les architectures récentes et surtout selon les usages actuels ; voire, le FPU étant beaucoup plus utilisé dans nos logiciels, son usage serait contre-productif.
    En effet, les compilateurs choisissent d'appeler les instructions SIMD (i.e. -sse) pour optimiser le code des logiciels. De fait, ceux-ci auront de toute façon sauvegardé et restauré les registres du FPU à chaque changement de contexte. La gestion de l'exception sera inutile et va juste alourdir le processus.
    En outre, l'empreinte d'une sauvegarde/restauration serait moindre que celle de la gestion des drapeaux, des registres et de leurs états suite à l'interruption, le transfert de registres FPU en mémoire étant plus rapide car optimisé.

    Il est donc préconisé d'éviter le mode lazy au profit du mode eager.

    • Linux propose le mode eager plutôt que le mode lazy depuis la version 3.7 et l'active par défaut depuis la version 4.9.

      • Ajoutez eagerfpu=on sur la ligne de démarrage pour les versions antérieures à la 4.9.
    • FreeBSD a poussé un patch pour la Release 11.2. C'est un FreeBSD 11.1 qui a servi de cobaye ;

    • DragonFly BSD a poussé un patch dans la version 5.2.2 ;

    • Microsoft poussera un patch en juillet ;

    • OpenBSD a poussé un patch le 14 juin pour la version 6.3 ;

    • NetBSD a poussé un patch le 16 Juin sur MAIN .

    Conclusion

    Ils ne sont pas à la fête cette année, chez Intel. Le point positif est que la correction de cette faille devrait conduire à une amélioration des performances, voire de la consommation d'énergie.

    Theo de Raadt avait prévenu 11 ans auparavant que l'architecture Intel Core2 promettait ce genre de faille :

    These processors are buggy as hell, and some of these bugs don't just
    cause development/debugging problems, but will ASSUREDLY be
    exploitable from userland code.

    Ces processeurs sont bugués comme jamais et nombre de ces bugs ne provoquent pas seulement des soucis de développement et d'analyse, mais ils vont assurément être exploitables depuis l'espace utilisateur.

    Pour la petite histoire, l'embargo s'est terminé le 6 Juin.
    Colin Percival, qui assistait à une conférence de Théo de Raadt lors de la BSDCan 2018, a codé un exploit dans la foulée, qu'il n'a pas encore rendu public. Mais il a convaincu Intel de lever l'embargo au plus vite.
    Il est notable qu'aucun des deux n'avait été mis dans la confidence ; OpenBSD signale même qu'ils en ont fait la demande ( des rumeurs circulaient autour d'une énième version de spectre) mais sans obtenir de réponse.

    Invitation to Embargo? No.
    We asked.

    No reply.

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • RyDroid Web Proxy (1.0) : outil de capture de sessions Web

    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.

    Logo de CLIF Web Proxy (nom originel de RyDroid Web Proxy)

    Sommaire

    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.

    Logo de Apache JMeter

    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.

    Logo de Tsung

    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".

    Logo de Locust

    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.

    Logo de Taurus

    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.

    Logo de CLIF

    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.

    Logo de Loads et Molotov par Juan Pablo Bravo

    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.

    Schéma du fonctionnement de NeoLoad Recorder

    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).

    Schéma du fonctionnement de HP TruClient

    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).

    Schéma du fonctionnement de BlazeMeter Recorder

    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 :
      • tuleap (une forge logicielle, comprenant des outils élaborés de gestion de projets et des possibilités de gestion fine des droits)
      • GitLab (de plus en plus utilisé, pensé avant tout pour les développeurs et développeuses, et je l'utilise pour des projets personnels)

    Les outils pour les tests

    Les outils « annexes »

    Le résultat

    Schéma du fonctionnement de mon proxy en PHP

    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 et proxy-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 avec img@src, les scripts avec script@src, les frames avec frame@src, des vidéos avec video@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 balise img peut maintenant avoir un attribut srcset, 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 balise picture qui peut contenir une ou plusieurs balises source qui peuvent avoir un attribut src ou srcset (//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:// et https:// 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'attribut href. En effet, il y a des liens d'actions (qui ne doivent pas être "proxifiés"), pour le courriel avec mailto:, pour le téléphone avec tel: (défini dans la RFC 3966), pour le JavaScript avec javascript: (malgré qu'il y ait l'attribut facultatif onclick 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 par https:// ou http:// 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 balise meta 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 attribut rel avec la valeur stylesheet en indiquant l'URL comme valeur de l'attribut href. 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 balise style (/html//style[not(@type) or lower-case(@type)='text/css'] en XPath 2.0) et l'attribut style (/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 exemple background-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'attribut form@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 balise input) pour l'URL "proxifiée" et le cacher (ce qui se fait en créant un attribut type et lui attribuant la valeur hidden).

    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éthode send. Il suffit de "proxifier" le deuxième argument de la méthode open (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 attribut src existant et avec une valeur non nulle. Cela déclenche la récupération du script (grâce à son URL issue de l'attribut src), puis l'exécute (ce qui permet d'éviter la fonction eval). Un élément DOM a une méthode setAttribute, il faut donc la "proxifier" quand elle est appelée sur une balise script 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 comme type).

    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ègle install et une autre uninstall 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 facultatif DESTDIR, 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) que dh_make utilise automatiquement, comme la règle test (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/* et wc -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

  • Falkon 3 le nouveau navigateur pour KDE

    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.
    Logo du navigateur Falkon
    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.

    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 :
    Onglets avec indicateurs
    Le (très pratique) gestionnaire de sessions :
    Gestionnaire de sessions dans Falkon
    Le (sympathique) menu déroulant « clic droit » :
    Le menu contextuel de Falkon

    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 :
    Recherche par l’image sur Falkon
    L’extension Vertical Tabs en mode hiérarchique :
    Onglets verticaux dans Falkon

    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

  • Revue de presse de l'April pour la semaine 24 de l'année 2018

    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
    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 :

    [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 :

    Voir aussi :

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • PyConFR 2018, du 4 au 7 octobre à Lille : appel à contributions

    PyConFR18

    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…

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Microcontrôleur de DEL basé sur ESP8266

    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.
    plan du Anavi Light Controller sur KiCAD
    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.

    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)…

    webthing-esp8266-webapp-20180602rzr

    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

  • Microcontrolleur de LED basé ESP8266

    ANAVI Light Controller est une nouvelle carte OpenSourceHardWare pour contrôler un ruban de DEL (LED strip RGB). Ce projet est OpenSource et conçu avec KiCAD, et disponible a l'achat à partir de 25€ jusqu'au 27 juin 2018.
    plan du Anavi Light Controller sur KiCAD
    La carte peut être utilisée de façon autonome avec le logiciel embarqué de demo 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, du coup 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's car un bloc WiFi (pas libre?) est intégré au MCU.

    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 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 video)….

    webthing-esp8266-webapp-20180602rzr

    Pour ceux qui ne veulent pas faire un pas hors de leur OS préféré, considérez le précédent produit de Leon pour RaspberryPi.

    Finalement, si vous utilisez Mozilla-IoT, les retours sont bienvenus.

    Commentaires : voir le flux atom ouvrir dans le navigateur

Journaux LinuxFR

  • LinuxFr.org : première quinzaine de juin 2018

    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é)

    • idée de dépêche : NetHammer (finalement parue sous forme de lien)
    • avis de grand calme

    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

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • LinuxFr.org : première quinzaine de juin 2018

    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é)

    • idée de dépêche : NetHammer (finalement parue sous forme de lien)
    • avis de grand calme

    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

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Rumeurs sur l'hyper-threading - TLBleed

    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.

    Colin Percival, auteur en 2005 de:

    1. un papier sur les attaques via les caches, Cache Missing for Fun and Profit
    2. 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 en side 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

  • Surface d'attaque des serveurs dans les nuages (cloud)

    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

  • Tutoriel 3D - 2D découpe au laser, le retour du tux

    Sommaire

    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.

    où trouver le changement metrique

    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 :

    Tux pattes interconnectées

    Il faut les réunir par booléen union au corps pour avoir un seul objet avec un intérieur/extérieur propre.

    tux vue pattes melees

    On peut maintenant appliquer une subdivision sur le tux CTRL+3, parce que le tux aime la douceur, et pas que celle angevine.
    c'est mieux avec les pattes creuses, c'est comme les heures à l'edf

    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.

    tux sculptation des yeux (ou sculptage selon les régions)

    la même en couleur

    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 :

    ailes dissociées

    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 :

    queue perdue

    J’ajoute un bloc en union au niveau de la queue, le plus ajusté possible par un booléen union.

    jointure queue

    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 :

    retirer les morceaux à l’intérieur des autres

    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 :

    plan des tranches

    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èmes

    problème de tranche

    Une 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 :

    option thresold

    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 :

    trou du cul de tux

    Nickel !

    bonnes tranches

    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 :

    simul résultat final

    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.

    trapeze

    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).

    tete de tux

    En dessous ajuster aussi la taille en X pour donner un beau trapèze

    mise en trapeze

    On voit que c’est moche au niveau du pied

    tux chaplin

    On va donc remodeler un peu le trapèze pour qu’il soit plus joli à cet endroit.

    remodelage du pied

    aspect final

    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 visible

    vue fil de fer du tux trapeziste

    C’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

    90cm etalon

    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.

    100 pourcent

    puis placer la caméra assez bien au dessus de la scène et changez les paramètres :

    ortho

    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 :

    serrez les rangs

    Maintenant depuis les user pref, activez le svg freestyle exporter :

    options rendering

    Et activez les deux options freestyle et svg export depuis les options rendering

    option rendering activee

    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 :

    retailler

    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.

    points artefacts

    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.

    planche à découper

    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

    boite

    et la planche dans la mousse

    planche entourée de 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.

    scotch sur les pieces

    Je numérote mes pièces avant de défaire, c’est moins cher que de faire des numéros au laser.

    sans scotch à numéroter

    Ensuite on empile jusqu’à la fameuse pièce 33 qu’il faudra redécouper.

    debut d'empilage

    piece 33

    redecoupe de la 33

    piece 33 empilee

    Tadaaaa

    Entrer une description pour l'image ici

    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 svg

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • AlterncCamp c'est dès jeudi 21 juin

    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

    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

    Sommaire

    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 lecteur C: 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
    • 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.
          • 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
        • 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
        • 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).
        • 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
          • Puis lancer bcdboot N:\windows /l fr-fr /s S: /f UEFI
            • N:\Windows est le répertoire contenant le clone de Windows sur le SSD)
            • S: = partition EFI
    • 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 avec
      bcdboot 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 avec reagentc.exe /info . Et s'il y a une erreur essayer avec reagentc.exe /enable /setreimage /path C:\Recovery\WindowsREC:\Recovery\WindowsRE est le dossier où se trouve le fichier Winre.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 BIOS

    • On 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:
    • 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 bcdboot N:\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
    • 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:

    A propos de l'entrée MountedDevices du registre:
    http://diddy.boot-land.net/firadisk/files/mounteddevices.htm

    Si 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:

    MBR Partition ID

    A propos des disk ID (=Disk signatures):

    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 libres

    • 2018-06-11 : Correction de la forme et de fautes d'orthographe

    • 2018-05-28

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Un rachat, un summit et un BIOS qui s'ouvre de plus en plus grâce à linux

    Me revoilà après plusieurs mois de silence. Il faut dire que depuis la fin 2017, mon agenda s'est retrouvé complètement chamboulé. La société que j'ai créée avec Isabelle (ma moitié comme on dit), a été rachetée par une société américaine, un de nos partenaires de longue date. Nous avons créée Splitted-Desktop Systems (SDS) il y a 11 ans avec pour objectif de concevoir des ordinateurs silencieux respectueux de l'environnement en France. On a beaucoup travaillé (vraiment beaucoup), on a beaucoup galéré (vendre des ordinateurs français à des français c'est complexe (mais je tiens a remercier les membres de linuxfr qui ont été nos clients durant ces dernières années !), et le dernier tweet d'oles me laisse d'ailleurs dubitatif (https://twitter.com/olesovhcom/status/1007519400734359552), on est dans un mode hôpital qui se moque un peu de la ch… . Bon quoiqu'il en soit nos technos frenchies ont et intéressent des américains, on a donc décidé de répondre positivement à l'offre et on s'est pris un Tsunami sur la tête, mais voilà c'est fait ! Annonce rachat

    Certains diront qu'on se vend à l'axe du mal, j'aurai tendance à dire qu'on peut y voir pleins de choses positives. La première c'est un des premiers rachats significatif dans le domaine de l'Open Hardware pour les serveurs. On est racheté par un de nos partenaires de longue date qui a valorisé à un niveau trois fois supérieure notre société par rapport aux meilleurs propositions d'investisseurs français, on pérénise nos emplois et on embauche, on va accélérer sur des tonnes de sujets dont linuxboot, FreeCAD et l'impact de l'open hardware sur les modèles d'économie circulaire ce qui est en soit juste genial !

    Ce qui m'ammène à parler du futur summit Open Compute en Europe. Il se tiendra à Amsterdam (ok c'est pas la France, mais c'est pas loin), et j'y animerai une session complète sur linuxboot durant laquelle on présentera des machines qui fonctionnent sous cet environnement, on aura des sessions de hacking et on discutera de la futur roadmap du projet. Pour ceux qui ne suivent pas ce projet, l'objectif de linuxboot est de remplacer UEFI par un kernel linux dans l'optique de mieux maitriser les phases de démarrage des serveurs, simplifier leur provisioning et surtout de les maintenir en condition opérationnelle le plus longtemps possible grace à l'ouverture du code ! Ca fonctionne, c'est un projet qu'on a créée avec Google, Facebook et quelques autres hackers de haut vol. Si vous êtes impliqués dans le déploiement de serveurs et un peu curieux vous ne pouvez pas louper cet événement ainsi que l'osfc organisé par 9elements (osfc).

    A bientôt, et j'espere vous croiser au summit ou en Allemagne !

    vejmarie

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Neatmail: un client mail minimaliste

    Sommaire

    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

  • Compilation de VSCode sous Centos 6

    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

Laboratoire Linux SUPINFO

  • Tutoriel : Comment utiliser la forge GitLab du labo pour gérer un projet ?

    Initialiser un nouveau projet :

    1. Créer un compte sur la forge : http://code.labo-linux.org/users/sign_up
    2. Se connecter : http://code.labo-linux.org/users/sign_in
    3. Ajouter votre clé SSH : http://code.labo-linux.org/profile/keys
    4. Créer un nouveau projet : http://code.labo-linux.org/projects/new
    5. Suivre les instructions de lignes de commande GIT à exécuter pour initialiser le dépôt

    Le dossier ainsi créé va suivre les modification de tous vos fichiers. Vous devez maintenant apprendre à utiliser GIT en suivant dans l'ordre cette série de tutoriels : https://www.atlassian.com/fr/git/tutorial

    Si la ligne de commande vous rebute, il y a un client multiplateforme extrèmement complet : http://www.syntevo.com/smartgit/download (veillez à prendre la licence complète gratuite à usage non commercial).

    Pour que le versionnage soit utile, il faut Commit/Push à chaque fois que quelque chose est complété (comme un bug, une fonctionnalité, etc). Cela évite d'avoir des régressions et de pouvoir faire machine arrière le cas échéant.


    Découper son projet en toutes petites étapes :

    Cela permet d'y voir plus clair et de savoir par où commencer. Vous augmenterez votre motivation en évitant la paralysie de la feuille blanche.

    1. Se rendre sur l'interface Issues de votre projet (les liens sont à adapter) : http://code.labo-linux.org/root/demo/issues
    2. Cliquer sur New issue
    3. Décrire une tâche de l'ordre de « faire un hello world avec le framework X », « gérer le login/logout », « envoyer un email sur telle action », « créer une page de statistiques » ...
    4. Optionnellement, vous pouvez rattacher ces issues à des milestones (c'est un jalon, une version)


    Autres fonctionnalités utiles :

    1. Dans les champs texte, GitLab gère des symbols actifs comme le "@" (vous suggèrera les pseudos des membres) et le "#" (vous suggèrera vos issues).
    2. Préciser le numéro d'une issue dans un message de commit créé un référencement du commit dans l'issue. Exemple : le message de commit "Hello World #1" fera apparaitre un nouveau commentaire "mentionned in commit xxxxxx" dans l'issue n°1.
    3. Vous pouvez fermer automatiquement des issues dans vos messages de commit ! À découvrir en lisant ceci : https://about.gitlab.com/2013/09/22/gitlab-community-edition-6-dot-1-released/


    Git est un outil extrèmement puissant que vous découvrirez au fur et à mesure de vos besoins. Travailler en équipe requiers une réelle organisation en dehors de l'outil : répartition de tâches, tests préalables avant toute mise en commun pour limiter l'instabilité du logiciel, découpage en jalons, etc.

    Vous trouverez des réflexions sur les « workflows » (manière de s'organiser) sur cette page : https://www.atlassian.com/fr/git/workflows


    Gestion de projet plus globale

    La gestion d'issues proposée par GitLab ne peut pas se soustraire à une gestion d'équipe plus globale. Les Méthodes Agiles que vous découvrirez pendant votre cursus proposent de grands concepts qui évitent à de votre groupe de s'enrayer :

    1. Une réunion de départ qui dégage les jalons du projet, c'est à dire un premier découpage de ses grandes étapes qui n'entre pas dans le détail mais permet de fixer des échelles de temps
    2. Une revue hebdomadaire obligatoire, qui permet de définir à l'avance un objectif court terme pour l'équipe
    3. Un point journalier rapide, même s'il ne s'est rien passé, où chaque membre de l'équipe doit avouer ses difficultés et exprimer ce qui a été fait. Cela permet d'identifier au plus tôt qui a besoin d'aide.
    4. Une revue de projet (et une seule) toutes les deux semaines / un mois pour statuer sur l'avancée du jalon en cours ainsi que sur la prévision du prochain.

    Cette structuration de l'équipe par des cérémonies ponctuelles dans le temps neutralise l'effet « sous-marin » et permet à chaque membre de l'équipe de savoir où se situent les autres.

    L'objectif n°1 de ces méthodes est de faire passer le client et la qualité du logiciel avant toute chose. En itérant régulièrement, votre travail évoluera sur des bases saines car validerez au fur et à mesure qu'il correspond toujours aux attentes du client. La gestion des bugs devient ainsi prioritaire sur les fonctionnalités, si cela est pertinent. Ce fonctionnement est en totale opposition aux cahiers des charges dont le but est de figer un processus jusqu'à son aboutissement.

    Les Méthodes Agiles sont un genre de framework qui délimite bien d'autres routines d'équipe qui ne sont pas toujours adaptées à la situation : à vous de prendre ce qui vous plait ! C'est l'essence même de ces méthodes.

  • Zet Uw Volgende Sigaret Into Your Last Met Deze Stoppen Met Roken Tips

    e liquid ingredients. Als je een roker bent , is de kans groot dat u wilt stoppen en gewoon niet weten hoe dit te doen . Wees niet ontmoedigd , omdat de informatie en technieken die in dit artikel zijn bedoeld om mensen zoals jij te helpen . Gebruik de tips in dit artikel om u te helpen langs de weg om een ​​niet-roker

    does e liquid get you highOm uw kansen op succesvol stoppen met roken te stimuleren , denken zetten op papier alle potentiële voordelen en gevolgen van stoppen . Aanbrengen van de kwestie schriftelijk zal u helpen om het beter te kunnen zien . Dit kan u helpen gemotiveerd te blijven , en kunnen stoppen gemakkelijker te maken .

    Als u rookt als een manier om stress te beheersen , wil je andere stress saneringstechnieken klaar hebben wanneer je besluit om te stoppen . Blijf uit situaties die je kan stress voor de eerste paar weken nadat je hebt gestopt . U kunt ook uw stress te beheren door middel van yoga , meditatie of door het krijgen van een massage .

    Vergeet niet dat uw houding is alles. Wanneer u begint te voelen beneden , moet je proberen om jezelf er trots op dat je stoppen te maken. Roken is slecht voor je en elke keer dat je de drang om te roken te veroveren , moet je trots voelt als u het nemen van belangrijke stappen in de richting van een gezonder je .

    Maak een studie van wat triggers uw roken en zoek manieren om je triggers te vermijden. Bijvoorbeeld zaken als roken tijdens het rijden of het lezen , zodat je niet automatisch denken over je rookgedrag te veranderen . Je nodig hebt om een afleiding te vinden, om na te denken over iets anders.

  • The MagPi n°7 et 8 distribués gratuitement sur les campus de Caen, Grenoble, Lyon, Troyes et Mâcon !

    En ce début d'année 2014, certain ont pu découvrir que le Père Noel était passé à SUPINFO, principalement à l'attention des laboratoires Linux, Robotique et SL3 mais aussi et surtout à tous les étudiants curieux d'électronique.

    The MagPi est un magazine communautaire anglophone qui a été traduit et édité sous licence Creative Commons BY-NC-SA, permettant ainsi à SUPINFO de l'imprimer et de le diffuser à titre gratuit, en sa qualité d'association loi 1901.

    Les magazines profitent de la même qualité d'impression que le Supinfo Inside, les étudiants des campus sélectionnés découvriront ainsi en version papier comment faire de la rétroingénierie classique, asservir une carte Arduino avec une carte Raspberry Pi (ainsi que les avantages que cela procure), de quoi stimuler leur imagination sur des projets robotiques ou domotiques. La sélection s'est basée sur la réalisation de projets publiés sur les sites des labos. Les magazines restent disponibles en PDF sur le site du MagPi.

    image

    Sophie, notre assistante de direction à Caen, semblait intriguée par le magazine !

    image

  • Projet de tableau numérique interactif à base de Wiimote

    Note: Cet article est le compte-rendu d'un projet personnel visant à créer un tableau numérique interactif avec une Wiimote comme composant principal. Vous pouvez télécharger le code source du logiciel ici (celui-ci se présente sous la forme d'un projet pour l'IDE Code-Blocks).

     

    1. L'idée du projet

    L'idée de ce projet m'est venue au cours d'une session sur le web. Je suis tombé sur un site qui vantait les mérites de ce qu'il appelait le TNWii ; c'est à dire un tableau numérique interactif basé sur les capacités des Wiimotes de la console de Nintendo.
    Le concept à été imaginé par Johnny Chung Lee, un chercheur sur les interactions homme-machine employé chez Microsoft. Il a pensé à réutiliser les caractéristiques de la manette de la console Wii et de la détourner afin d'en trouver d'autres utilisations.
    L'intérêt de cette manette est son capteur infrarouge. Il suffit de lui montrer une ou plusieurs source de lumière infrarouge et d'avoir le logiciel adéquat afin d'obtenir un outil de suivi de points basique. De plus, la Wiimote n'est pas filaire et utilise le protocole Bluetooth, ce qui permet donc de la relier facilement à un ordinateur.
    Johnny Chung Lee a abouti, entre autres choses, à la création d'un tableau numérique interactif. Son idée ayant fait des émules, différents logiciels ont été créés pour améliorer la chose, chacun fournissant plus ou moins de fonctions.
    Mais ces programmes sont en grande majorité écrits pour Windows, et n'ayant personnellement pas réussi à faire fonctionner les rares conçu pour les systèmes Linux, ainsi qu'étant curieux de connaître le fonctionnement d'un programme agissant avec un matériel de ce type, je me mis en tête de coder un logiciel basique pour Linux permettant de faire fonctionner la manette dans le cadre d'un tableau numérique.
    Bien qu'ayant un but fonctionnel, ce projet était principalement voué à m'apprendre des techniques avancées de programmation ainsi que le fonctionnement de petits matériels électronique.

     

    2. Description générale du tableau interactif et recherches préliminaires

    Le tableau interactif est constitué de quatre composants :

    • un projecteur qui affiche l'image de l'ordinateur contre un mur, un écran ou tout autre surface lisse.
    • un stylet infrarouge qui permet d'émettre un point de lumière sur la surface projetée afin d'indiquer un clic de souris.
    • une Wiimote qui récupère la position du point dans l'espace via sa caméra frontale et la transmet à l'ordinateur.
    • et enfin un ordinateur équipé d'un module Bluetooth (intégré ou sur un dongle USB) qui, grâce à un logiciel dédié, traite le signal reçu et effectue un clic de souris à l'emplacement du point infrarouge.

    Ceci donne donc juste la possibilité de faire un « clic gauche » de souris, mais certains logiciel plus évolués permettent d'effectuer des « clics droit » ainsi que d'autres actions.
    Possédant déjà une Wiimote ainsi qu'un ordinateur équipé d'une puce Bluetooth, il me restait donc à concevoir un stylet infrarouge ainsi qu'un programme dialoguant avec la Wiimote.

    Après quelques recherches plus poussées, je pus établir un plan des notions à assimiler et à mettre en pratique pour le développement du logiciel.
    La première chose à choisir était le langage de programmation à utiliser. J'avais tout d'abord opté pour le Python, dont l'interpréteur est très répandu sur les systèmes Linux et dont je possédait déjà des connaissances. Malheureusement, et bien que la bibliothèque de modules de Python soit très fournie, les rares modules conçus pour le support de Bluetooth sont trop anciens et obsolètes. Je me suis donc rabattu vers un autre langage de plus bas niveau : le C.
    Une interface graphique étant prévue pour mon logiciel, je choisis la bibliothèque graphique GTK+ car je l'avais déjà utilisé en Python.
    Ensuite il me fallait pouvoir communiquer avec la Wiimote. Or n'ayant aucune connaissance du protocole Bluetooth, j'allais devoir apprendre son fonctionnement.
    Une fois ceci fait, je devrai faire de même pour connaître la marche interne de la Wiimote ainsi que les commandes à lui envoyer pour lui faire effectuer les actions voulues.
    Il me resterai ensuite la création de l'algorithme de traitement des coordonnées des points infrarouges sur l'image projetée et leur interprétation pour les placer sur l'image réelle de l'écran d'ordinateur.
    Enfin, le tableau blanc interactif n'étant pas constitué de la seule Wiimote et d'un programme, il me fallait une source de lumière infrarouge qu'elle puisse capter. Cette source infrarouge serait incarnée ici sous la forme d'un stylet à construire moi-même.

    La liste des choses à faire ainsi que le choix des technologies faits j'allais pouvoir débuter la conception de mon TNWii.

     

    3. Construction de l'interface et prise en main du protocole Bluetooth

    J'ai donc commencé par faire un schéma afin de bien savoir visualiser ce qu'il y avait à construire au niveau de l'interface.

    Schéma d'interface du logiciel de tableau numérique à base de Wiimote.

    Cette interface est simple mais suffit à obtenir quelque chose de fonctionnel.

    La concrétisation de ce schéma ne m'a pas posé de vrai problème. Une fois que l'on a saisi le fonctionnement de la bibliothèque GTK+ la construction d'une interface n'est pas très compliquée.
    Voici par exemple ce que cela donne sur mon ordinateur :

    Interface du logiciel

    Là où les choses sont devenues plus difficiles, c'est lorsque j'ai dû utiliser le protocole Bluetooth. Celui-ci utilise les mêmes concepts de sockets que la programmation réseau classique, mais n'ayant pas non plus eu l'occasion de pratiquer cette dernière, j'ai dû tout apprendre de zéro. Cela m'a permis entre autre d'acquérir les notions de sockets, threads, mutex et endianess spécifiques à la programmation réseau.
    Mais au départ, j'ai quand même eu des problèmes pour trouver des ressources sur l'utilisation de la bibliothèque Bluez permettant l'accès à la pile Bluetooth sous Linux. Que ce soit en Français ou en Anglais, il y a très peu de documentation sur le sujet. C'est pourquoi, lorsque j'ai pu en trouver une de très bonne qualité, j'en ai effectué une traduction vers le Français car elle pourrait être très utile à tout développeur voulant utiliser le Bluetooth sous Linux.
    Ce document détaille l'utilisation des protocoles RFCOMM et L2CAP (équivalents de TCP et UDP) et donne des exemples d'implémentation. La version originale est disponible ici et ma traduction ici.

     

    4. Fonctionnement de la Wiimote

     

    4.1 Établissement de la connexion Bluetooth

    Le deuxième gros morceau de nouveauté à été la Wiimote. Connaître son fonctionnement n'est pas inné. Heureusement des hackers (au sens premier du terme, à savoir "bidouilleurs") ont effectué un gros travail de rétro-ingénierie, ce qui à aboutit à une documentation détaillant l'utilisation de chaque fonctionnalité pour les programmeurs et qui sera ma principale source de savoir.
    Je vais expliquer ici son fonctionnement en Français, car c'est l'un des buts de ce projet. Attention cependant, beaucoup de notions propres à Bluetooth sont utilisées donc il vaut mieux être à l'aise avec ce dernier.
    Pour établir la connexion avec la manette on utilise donc le protocole Bluetooth, mais il n'est pas nécessaire (bien que ce soit possible) d'effectuer un « pairing » avec celle-ci. Il suffit juste de la placer en mode découverte en appuyant sur le bouton « sync » (situé dans le compartiment des piles). Il est aussi possible, pour les Wiimote de première génération, d'appuyer sur les boutons 1 et 2 en même temps pour lancer le mode découverte.
    Le "nom convivial" (traduction de "friendly name") envoyé alors est RVL-CNT-01 pour les Wiimotes de première génération et RVL-CNT-01-TR pour celles de seconde génération.
    Une fois la découverte activée, deux PSM du protocole L2CAP sont prévus pour communiquer. Le PSM 0x11 est utilisé pour le flux de contrôle et le 0x13 pour le flux de données, bien que dans la réalité le 0x11 soit quasiment inutilisé.

    Note: Pour rappel, le protocole L2CAP est en quelque sorte un équivalent de UDP en Bluetooth et les PSM (pour « Protocoles Services Multiplexers ») sont les noms des ports de ce protocole. Ces numéros de PSM étant donnés en hexadécimal, nous avons ici donc en réalité les ports 17 et 19.

    Il suffit donc pour établir une connexion avec la manette, de la détecter, de récupérer son adresse MAC et d'y connecter un socket avec comme contexte d'adressage les informations données ci-dessus.

     

    4.2 Schéma général des communications

    Ensuite nous pouvons réellement dialoguer avec la Wiimote. Cela se fait par l'envoi de ce que l'on appel des rapports. Les rapports sont des messages constitués d'une suite d'octets dont la valeur est écrite en hexadécimal et qui suivent un format précis.
    Chaque type de rapport ne peut être envoyé que dans un sens. Un rapport entrant se fait dans le sens périphérique -> hôte et sera préfixé d'un octet contenant 0xa1 , alors qu'un rapport sortant se fait dans le sens hôte -> périphérique et débutera lui par un octet contenant 0xa2.

    Voici la liste des types de rapports disponibles pour communiquer avec la Wiimote :

    Sens ID Taille Fonction
    Sortant 0x10 1 Inconnue
    Sortant 0x11 1 Allumage des LEDs
    Sortant 0x12 2 Choix du mode de rapport pour les données envoyées par la Wiimote
    Sortant 0x13 1 Allumage de la caméra infrarouge (1ère partie)
    Sortant 0x14 1 Allumage du haut-parleur
    Sortant 0x15 1 Requête de demande de status
    Sortant 0x16 21 Écriture dans une mémoire ou un registre
    Sortant 0x17 6 Lecture d'une mémoire ou d'un registre
    Sortant 0x18 21 Envoie de données au haut-parleur
    Sortant 0x19 1 Passer le haut-parleur en muet
    Sortant 0xa 1 Allumage de la caméra infrarouge (2ème partie)
    Entrant 0x20 6 Informations de statut de la Wiimote
    Entrant 0x21 21 Données renvoyées lors de la lecture des mémoires et registre
    Entrant 0x22 4 Acquittement d'un rapport sortant (résultat du traitement du rapport ou code erreur)
    Entrant 0x30-0x3f 2-21 Données renvoyées par la Wiimote après le choix du mode de rapport de données.

    Les rapports envoyés ou reçus auront donc la forme suivante :

    Note: Dans la suite, pour les exemples de rapport comme celui ci-dessous, je n'inscrirai pas les 0x au début de chaque octet (bien qu'ils soient en notation héxadécimale) afin de rendre le contenu plus lisible.

    a1 30 00 00

    Ce rapport sera par exemple un rapport entrant (0xa1) contenant des données reçues de la Wiimote (0x30) et dont les deux derniers octets sont les données en question.

    Pour rappel, mon but est de localiser les points infrarouges vus par la Wiimote en récupérant leur coordonnées. Pour obtenir ces coordonnées il lui faut faire nous envoyer un rapport de données (les types 0x30 à 0x3f). Mais il existe plusieurs modes de rapports de données, chacun permettant de récupérer un contenu différent. Il faut donc sélectionner le mode de rapport que l'on veut obtenir. Cela se fait par l'envoi d'un rapport de type 0x12 dédié spécialement à ce choix.
    Le type de rapport 0x12 se présente ainsi :

    a2 12 TT MM

    Nous avons donc un premier octet pour le sens du rapport, un second pour le type, puis deux octets de contenu.
    Le premier octet de contenu, ici nommé TT, permet en activant son bit 2 (c'est à dire en mettant sa valeur à 0x04) de spécifier à la Wiimote que l'on veut qu'elle envoie des rapports de données en continu même si les valeurs sont restées inchangées. S'il est laissé à 0x00, ces rapports ne seront envoyés qu'à chaque changement de valeur.
    Le second, nommé MM, permet de choisir le mode de rapport proprement dit.
    Voici les différents modes disponibles :

    ID Contenu
    0x30
    a1 30 BB BB
    Ce mode retourne 2 octets ( BB ) contenants les valeurs des boutons appuyés de la Wiimote
    0x31
    a1 31 BB BB AA AA AA
    Ce mode retourne :
    • 2 octets ( BB ) contenants les valeurs des boutons appuyés
    • 3 octets ( AA ) contenants les données de l'accéléromètre
    0x32
    a1 32 BB BB EE EE EE EE EE EE EE EE
    Ce mode retourne :
    • 2 octets ( BB ) contenants les valeurs des boutons appuyés
    • 8 octets ( EE ) contenants les valeurs d'un périphérique d'extension que l'on peut brancher à la manette
    0x33
    a1 33 BB BB AA AA AA II II II II II II II II II II II II
    Ce mode retourne :
    • 2 octets ( BB ) contenants les valeurs des boutons appuyés
    • 3 octets ( AA ) contenants les données de l'accéléromètre
    • 12 octets ( II ) contenants les coordonnées des points détectés par la caméra infrarouge
    0x34
    a1 34 BB BB EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
    Ce mode retourne :
    • 2 octets ( BB ) contenants les valeurs des boutons appuyés
    • 19 octets ( EE ) contenants les valeurs d'un périphérique d'extension que l'on peut brancher à la manette
    0x35
    a1 35 BB BB AA AA AA EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
    Ce mode retourne :
    • 2 octets ( BB ) contenants les valeurs des boutons appuyés
    • 3 octets ( AA ) contenants les données de l'accéléromètre
    • 16 octets ( EE ) contenants les valeurs d'un périphérique d'extension que l'on peut brancher à la manette
    0x36
    a1 36 BB BB II II II II II II II II II II EE EE EE EE EE EE EE EE EE
    Ce mode retourne :
    • 2 octets ( BB ) contenants les valeurs des boutons appuyés
    • 10 octets ( II ) contenants les coordonnées des points détectés par la caméra infrarouge
    • 9 octets ( EE ) contenants les valeurs d'un périphérique d'extension que l'on peut brancher à la manette
    0x37
    a1 37 BB BB AA AA AA II II II II II II II II II II EE EE EE EE EE EE
    Ce mode retourne :
    • 2 octets ( BB ) contenants les valeurs des boutons appuyés
    • 3 octets ( AA ) contenants les données de l'accéléromètre
    • 10 octets ( II ) contenants les coordonnées des points détectés par la caméra infrarouge
    • 6 octets ( EE ) contenants les valeurs d'un périphérique d'extension que l'on peut brancher à la manette
    0x3d
    a1 3d EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE EE
    Ce mode retourne :
    • 21 octets ( EE ) contenants les valeurs d'un périphérique d'extension que l'on peut brancher à la manette
    0x3e-f
    a1 3e BB BB AA II II II II II II II II II II II II II II II II II II
    a1 3f BB BB AA II II II II II II II II II II II II II II II II II II
    Les rapports 0x3e et 0x3f sont, lorsqu'ils sont choisit, envoyés alternativement par la manette et retournent :
    • 2 octets ( BB ) à chaque rapport contenants les valeurs des boutons appuyés
    • 2 octets ( AA ) sur deux rapports (donc à ré-assembler) contenants les données de l'accéléromètre
    • 36 octets ( II ) sur deux rapport (donc à ré-assembler) contenants les coordonnées des points détectés par la caméra infrarouge

    Note: Dans la suite, je ne détaillerai que les types de rapport dont je me suis servi. C'est à dire majoritairement ceux en lien avec la caméra infrarouge de la manette.

    Suivant les différents modes, on peut constater que le nombre d'octets renvoyés pour les données infrarouge varie. Pour savoir quelle en est la raison, il faut se pencher sur le format de ces données renvoyées.

    4.3 Allumage et configuration de la caméra infrarouge

    La caméra de la Wiimote a une résolution native de 128x96, qui est ensuite augmenté 8 fois par un processeur interne faisant une analyse sous-pixel, et qui permet d'atteindre une résolution de 1024x768. La manette est capable de renvoyer au total les coordonnées de 4 points infrarouges.

    L'allumage et l'initialisation de la caméra se fait par l'envoi d'une suite de commande précise :

    1. Il faut en premier lieu l'activer en lui envoyant un rapport 0x13 dont le bit 2 de l'octet de charge utile sera à 1. Cette octet de charge utile aura donc la valeur finale de 0x04. :
      a2 13 04
    2. Puis faire de même en lui envoyant un rapport 0x1a dont le bit 2 de l'octet de charge utile sera lui aussi à 1. Cette octet de charge utile aura donc la valeur finale de 0x04. :
      a2 1a 04
    3. La troisième action consiste à écrire 0x08 dans le registre 0xb00030.
      Les registres sont des zones mémoire et écrire dedans se fait par l'envoi d'un rapport 0x16 formaté comme ceci :
      a2 16 MM FF FF FF SS DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD

      Avec :
      • MM pour sélectionner le type de mémoire sur laquelle on veut écrire. On peut le placer à 0x04 pour sélectionner les registres (zones de mémoire vive) ou le laisser à 0x00 pour utiliser la EEPROM (mémoire morte). Il faut bien faire attention à ne pas réécrire la EEPROM et bien placer cet octet à 0x04
      • FF les octets pour choisir le registre sur lequel écrire.
      • SS pour déclarer la quantité de données à écrire (en octets).
      • DD les données à écrire. Si les données ne prennent pas toute la place disponible (ce qui est notre cas), il suffit de remplir les octets restants avec la valeur hexadécimale ff.
      En remplaçant avec nos informations, nous obtenons le paquet ci-dessous :
      a2 16 04 b0 00 30 01 08 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    4. En quatre, il nous faut choisir la sensibilité de la caméra. Cela se fait en écrivant deux blocs de 9 et 2 octets respectivement dans les registres 0xb00000 et 0xb0001a.
      Voici un tableau des différentes valeurs (retrouvées par rétro-ingénierie) pour les deux blocs de sensibilités :
      Bloc 1 Bloc 2 Notes
      00 00 00 00 00 00 90 00 C0 40 00  
      00 00 00 00 00 00 FF 00 0C 00 00 Sensibilité maximale
      00 00 00 00 00 00 90 00 41 40 00 Haute sensibilité
      02 00 00 71 01 00 64 00 fe fd 05 Wii niveau 1
      02 00 00 71 01 00 96 00 b4 b3 04 Wii niveau 2
      02 00 00 71 01 00 aa 00 64 63 03 Wii niveau 3
      02 00 00 71 01 00 c8 00 36 35 03 Wii niveau 4
      07 00 00 71 01 00 72 00 204 1f 03 Wii niveau 5
      C'est le dernier octet du bloc 1 qui détermine l'intensité de la sensibilité, et plus sa valeur est grande, moins la sensibilité est élevée. Il est recommandé de placer la sensibilité aussi haut que possible, en évitant la pollution lumineuse autre que le stylet, pour pouvoir bénéficier au maximum de l'analyse sous-pixel du processeur de la Wiimote. Plus la sensibilité est réduite, plus la résolution sous-pixel l'est aussi, et plus on se rapproche de la résolution native de la caméra (128x96).
      Nous envoyons donc les deux rapports afin d'écrire dans les registres la sensibilité choisie :
      // Rapport d'écriture du bloc 1
      a2 16 04 b0 00 00 09 00 00 00 00 00 00 ff 00 0c ff ff ff ff ff ff ff
      // Rapport d'écriture du bloc 2
      a2 16 04 b0 00 00 02 00 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
    5. La cinquième étape consiste au choix du mode d'envois des données par la Wiimote. Il existe trois modes différents renvoyant chacun des données de tailles différentes. Ces tailles correspondants à celles des différents modes de rapports de données vus plus haut. Il faudra donc choisir le mode de rapport de la Wiimote suivant le mode de données choisit pour la caméra.
      Mais ce qu'il faut savoir tout d'abord, c'est la façon dont la manette gère les points qu'elle voit. Elle dispose de quatre slots et lorsqu'elle reconnaît un point lumineux, elle l'associe aux premier slot disponible. C'est à dire que si un objet sort de son champs de vision puis revient, il retrouvera le numéro de slot qu'il avait auparavant.
      Ci-dessous un petit tableau des modes disponibles :
      Mode
      Numéro du mode
      Basique
      1
      Étendu
      3
      Complet
      5
      Et voici un descriptif de chaque mode :
      • En mode basique, la caméra retourne 10 octets de données correspondants aux coordonnées X et Y de chaque point. Chaque coordonnées est codée sur 10 bits et s'étend de 0 à 1023 pour les X et de 0 à 767 pour les Y. Les données retournées sont divisées en deux paquets de 5 octets contenants chacun les coordonnées de 2 points.
        Voici un schéma pour comprendre comment sont répartis les bits de chaque point :
         
        Bit
        Octet
        7
        6
        5
        4
        3
        2
        1
        0
        0
        X1
        1
        Y1
        2
        Y1
        X1
        Y2
        X2
        3
        X2
        4
        Y2
      • Le mode étendu est quasiment similaire au mode basique, à part le fait qu'une information en plus est embarquée pour chaque point, à savoir sa taille. Cette taille est une valeur estimé et va de 0 à 15. L'ajout de cette valeur fait que chaque point est codé sur 3 octets entiers. Il faut donc au total 12 octets pour transporter les valeurs des 4 points.
        Ci-dessous un tableau détaillant la façon dont sont organisés les bits de chaque points :
         
        Bit
        Octet
        7
        6
        5
        4
        3
        2
        1
        0
        0
        X1
        1
        Y1
        2
        Y1
        X1
        S
      • Enfin, en mode complet, chaque point est codé sur 9 octets. Les trois premiers octets contiennent les même informations que le mode étendu, auquel on ajoute les coordonnées de la surface englobant chaque point ainsi qu'une valeur de l'intensité perçue du point. Il faut donc un total de 36 octets pour transporter toutes ces informations, ce que seul permettent les rapports 0x3e et 0x3f combinés.
        Voici le schéma correspondant à la façon dont sont organisés les bits de chaque point dans ce mode :
         
        Bit
        Octet
        7
        6
        5
        4
        3
        2
        1
        0
        0
        X1
        1
        Y1
        2
        Y1
        X1
        Y2
        X2
        3
        0
        X min
        4
        0
        Y min
        5
        0
        X max
        6
        0
        Y max
        7
        0
        8
        Intensité
    6. Enfin, pour valider tous nos choix, il faut répéter l'étape numéro 3 en envoyant la valeur 0x08 au registre 0xb0003.

    Une fois cette série d'étapes effectuée, la Wiimote devrait commencer à renvoyer les octets selon le mode de rapport de données et le mode de la caméra infrarouge que l'on a choisi.

     

    4.4 Extraction des coordonnées des points reçues

    Il ne suffit pas de faire une conversion des octets reçus au format hexadécimal vers la notation décimale pour obtenir les coordonnées des points.
    Comme on l'a vu dans les tableaux précédents, les coordonnées X et Y sont chaque fois codées sur 10 bits répartis sur 2 octets. Il faut donc convertir les valeurs hexadécimales au format binaire, isoler les bits intéressants, les associer avec leurs correspondants et reconvertir le tout en décimal.
    Ça c'est pour la description rapide, je vais détailler ci-dessous la démarche complète.

    Note: Je ne traiterai ici que de la conversion d'un seul point, vu que c'est ce que j'aurai concrètement dans le cadre de mon tableau numérique. Mais de toute façon, une fois que l'on a compris la procédure avec un point, le faire pour quatre n'est pas plus compliqué.

    Tout d'abord, il faut savoir que j'ai choisi le mode basique comme organisation des coordonnées renvoyées par la caméra infrarouge car je n'ai seulement besoin que de ces coordonnées sans informations supplémentaires. Ce mode de caméra renvoyant 10 octets, je n'ai le choix comme type de rapport de donnée qu'entre les rapports 0x36 et 0x37. J'ai personnellement opté pour le type 0x36.
    Pour rappel, les rapports que je vais recevoir de la Wiimote auront la forme suivante :

    a1 36 BB BB II II II II II II II II II II EE EE EE EE EE EE EE EE EE

    Donc, si on les numérote à partir de 0, les octets correspondants aux données infrarouges vont du numéro 4 au numéro 13. Dans ces 10 octets, les 5 premiers contiennent les coordonnées des 2 premiers points et les 5 suivants ceux des 2 derniers points. N'ayant qu'un point à convertir nous allons nous concentrer sur les données des 5 premiers octets.
    Imaginons que ceux-ci aient les valeurs suivantes :

    57 A4 30 00 00

    D'après le tableau de description du mode basique, nous pouvons savoir que :

    • le premier octet (0x57) contient les 8 bits de poids faible de la coordonnée X du premier point
    • le deuxième octet (0xA4) contient les 8 bits de poids faible de la coordonnée X du premier point
    • le troisième octet (0x30) contient les 2 bits de poids fort des coordonnées X et Y du premier et second points.

    Les autres octets contenant seulement les coordonnées du point 2, qui sont vides et ne nous intéressent pas, nous les laissons de côté.
    Nous allons maintenant convertir en binaire les valeurs de ces trois octets :

    Numéro de l'octet
    Valeur Hexadécimale
    Valeur binaire
    0
    0x57
    01010111
    1
    A4
    10100100
    2
    30
    00110000

    Grâce à ces valeurs binaire on peut recomposer les coordonnées complètes de 10 bits. Pour mieux les discerner, je les ait placées dans le tableau présentant l'organisation des bits du mode basique :

     
    Bit
    Octet
    7
    6
    5
    4
    3
    2
    1
    0
    0
    0
    1
    0
    1
    0
    1
    1
    1
    1
    1
    0
    1
    0
    0
    1
    0
    0
    2
    0
    0
    1
    1
    0
    0
    0
    0
    3
    0
    0
    0
    0
    0
    0
    0
    0
    4
    0
    0
    0
    0
    0
    0
    0
    0

    Sont coloriés en orange les bits de la coordonnée X et en bleu les bits de la coordonnée Y.
    Et maintenant en réorganisant les bits et en faisant la conversion en décimal, on obtient les coordonnées compréhensibles :

    Coordonnée
    Réorganisation en binaire
    Valeur convertie en décimal
    X
    1101010111
    855
    Y
    0010100100
    164

    La conversion est finie. Dans mon programme j'ai implémenté cette même démarche afin d'effectuer la conversion des coordonnées.

     

    5. Conversion des points vus par la Wiimote en points à inscrire sur l'écran

    Les coordonnées des points vus par la Wiimotes ne sont pas applicables directement pour l'affichage à l'écran. Ceci pour deux raisons :

    1. La caméra de la manette n'a pas forcément la même définition que l'écran sur lequel on va afficher.
    2. Les coordonnées récupérées sont définies dans le repère formé par la résolution de la caméra de la Wiimote et non par rapport à l'image projetée de l'écran qui nous intéresse.

    Pour ces deux raisons, il faut donc effectuer une conversion. Ce qui nous fait rentrer dans le domaine de la vision par ordinateur.

    Pour expliciter un peu mieux la chose rien ne vaut un schéma :

    Schéma montrant la différence de coordonnées d'un point entre ce que voit la Wiimote et sa position réelle sur la zone affichée.

    Sur ce schéma, est délimité en bleu la zone visible par la Wiimote. Celle-ci est rectangle et mesure 1024x768 pixel.
    Ensuite en vert, est symbolisé le périmètre de l'écran projeté et vu par la manette. Il n'est pas forcément aligné avec le cadre de la Wiimote suivant comment cette dernière est placée. Il n'est pas forcément rectangle pour les mêmes raisons.
    Enfin en rouge, le point infrarouge émit par le stylet.

    Il nous faut donc déduire, à partir des coordonnées du point [x, y] vues par la Wiimote, les coordonnées du point [x', y'] par rapport à l'écran projeté.
    Pour cela, il faut calculer la transformation entre les dimensions réelles de l'écran projeté (par exemple 1440x900) et celles vues par la Wiimote. Cela se fait par la résolution d'un système d'équations exprimé sous forme d'une matrice tel que décrit dans ce document.
    Des applications dans différents langages de ce document théorique sont disponibles sur cette page du forum developpez.net.
    La première application de l'utilisateur pseudocode en Java décrit la transformation inverse de celle que je doit mettre en œuvre. La seconde en C, de l'utilisateur luxigo donne la transformation dans les deux sens, mais est incomplète. Il a donc fallut que j'écrive à partir de ces exemples, la suite de calcul nécessaire à mes besoins.

    Malheureusement, n'ayant pas parfaitement compris l'algorithme en question, je me suis contenté de l'appliquer dans mon logiciel et je me garderai d'en fournir ici une explication potentiellement erronée. Je laisse cependant libre consultation de mon code si quelqu'un à besoin d'effectuer la même opération que moi à l'avenir.

     

    6. Déplacement du curseur aux coordonnées calculées

    Bien qu'amené à changer dans un futur plus ou moins proche avec l'arrivée de Wayland, les systèmes Linux utilisent actuellement le serveur d'affichage X.org. Afin de déplacer le curseur sur l'écran et de simuler des clics de souris, je me suis servis de la Xlib qui permet d'interagir avec ce serveur d'affichage.
    On peut trouver sur le Web des exemples de codes permettant de bouger le curseur assez facilement, mais pour effectuer des clics de souris cela devient très compliqué. Une façon plus méconnue d'effectuer cette action est d'utiliser une extension de la Xlib nommée XTest. Bien qu'étant une extension, elle est intégrée sur la grande majorité des distributions Linux.
    Grâce à celle-ci, les actions voulus peuvent être faites en appelant une simple fonction.
    Voici un exemple rapide :

    #include &ltX11/extensions/XTest.h&gt
    int X = 192;
    int Y = 42;
    // Création de la connexion au serveur X
    Display *d = XOpenDisplay(NULL);
    // Déplacement du curseur de la souris aux coordonnées X, Y
    XTestFakeMotionEvent(d, -1, X, Y, CurrentTime);
    // Clic de souris (bouton 1)
    XTestFakeButtonEvent(d, 1, True, CurrentTime);
    // Déclic de souris (bouton 1)
    XTestFakeButtonEvent(d, 1, False, CurrentTime);
    // Application des actions
    XSync(d, 0);

    De plus amples explications avec des liens vers d'autres exemples sont accessibles dans la bibliographie à la fin de ce document.

     

    7. Le stylet infrarouge

    Le stylet infrarouge est la seule partie matérielle de ce tableau numérique interactif à construire soit même.
    Le schéma électronique de ce stylet est des plus simple vu qu'il n'est constitué que d'une LED infrarouge, d'un interrupteur bouton-poussoir et d'une pile :

    Schéma électronique d'un stylet infra-rouge

    Seul le choix de la LED est déterminant pour le stylet. Pour ce composant, deux paramètres rentrent en compte :

    • Pour que la tâche de lumière qu'elle projette soit la plus resserrée possible, il faut choisir la LED avec un angle de demi-intensité (noté φ) le plus petit possible. Idéalement il faut qu'il soit au moins inférieur à 30°.
    • L'autre paramètre important est la longueur d'onde de la lumière émise par la LED. Il est préférable qu'elle soit comprise entre 800 et 1000nm.

    Cette LED n'étant pas un laser, il faudra tout de même la maintenir très près du support lors de l'utilisation du stylet pour que la Wiimote puisse voir la tâche de lumière qu'elle émet.

    Enfin, voici un exemple de mon stylet :

    Photo de mon stylet infrarouge

    On y retrouve tous les composant cités précédemment. En dehors du fil que je n'ai pas pu faire loger à l'intérieur, ce stylet est maniable et tiens bien en main.

     

    8. Informations sur le tableau numérique à base de Wiimote

    Voici quelques informations à savoir lorsque l'on veut mettre en place ce type de tableau interactif.
    Premièrement il possède des avantages, mais aussi des inconvénients.
    Avantages :

    • Il est très économique. En dehors du projecteur, il faut compter le prix de la Wiimote (une quarantaine d'euros), ceux des composants du stylet (j'en ai personnellement eu pour 1,75€ pour le bouton-poussoir et la LED infrarouge) et celui de l'adaptateur Bluetooth s'il n'est pas intégré à l'ordinateur que l'on souhaiter utiliser. Ceci est au final largement moins qu'un tableau interactif disponible sur le marché.
    • Installable rapidement

    Inconvénients :

    • Il faut éviter les sources infrarouges parasite. Le soleil par exemple en émet, et s'il est trop puissant, il vient diminuer le contraste entre le fond et le point infrarouge du stylet.
    • Il faut toujours veiller à ne pas se situer entre le point infrarouge et la Wiimote, ce qui oblige à tendre le bras.

    Une fois ces caractéristiques prises en compte, il y a quelques autres choses à savoir pour exploiter au mieux ce tableau interactif. Tout d'abord les angles de vision de la Wiimote sont de 33 degrés horizontalement et 23 degrés verticalement. Il faudra donc veiller à placer la manette à la bonne distance pour qu'elle puisse voir tout l'écran projeté. Pour rappel, il faudra aussi veiller à ne pas se placer entre la manette et l'écran.

     

    9. Résultat final

    Au final, j'ai réussi à concevoir le programme auquel je pensais pour qu'il soit fonctionnel. Le développement de ce logiciel m'aura permis d'apprendre de multiples notions avancées en C (sockets, endianess, threads, mutex, utilisations de bibliothèques diverses, etc). J'ai commenté le plus possible le code afin qu'une autre personne intéressée puisse le comprendre.

    De plus, j'encourage d'autres étudiants à implémenter le concept de tableau numérique pour l'utiliser en classe.

     


     

    Bibliographie

    Concept général :

    Documentations sur la programmation C nécessaires au développement du logiciels :

  • Les bons outils GNU/Linux pour travailler à SUPINFO

    Les bons outils GNU/Linux pour travailler à SUPINFO

     

    Tu es étudiant à SUPINFO, tu aimes ton système GNU/Linux et tu voudrais travailler dessus le plus souvent possible ? Alors voici une sélection d'outils qui vont essayer de te rendre la vie plus simple pour effectuer les différents travaux à rendre durant ta scolarité, tout en restant sur ton système préféré.
    Ce billet s'adresse principalement aux nouveaux venus, mais j'espère qu'il fera connaître quelques outils à certains utilisateurs plus avancés des systèmes Linux.

    Je passerai dans cet article sur le choix de votre outils de traitement de texte préféré que vous soyez adepte du cliquodrome, en utilisant par exemple LibreOffice, ou plutôt barbus préférant se concentrer sur le contenu et laissant l’esthétique au choix d'un algorithme comme avec LaTeX.

     

    1. Un bon virtualiseur

    À SUPINFO un grand nombre de matières nécessitent l'utilisation d'un logiciel de virtualisation. Les machines virtuelles ainsi fournies sont conçus pour être utilisées avec un logiciel de l'éditeur VMware (VMware Player, WMware Workstation, etc...). Mais bien que ces logiciels tournent sous Linux, on peut toujours rechercher une solution plus libre. C'est le cas de VirtualBox. Ce logiciel prend en charge les disques virtuels au format VMDK (format VMware) et il suffit souvent de juste changer quelques options dans les paramètres de la machine virtuelle pour que celle-ci fonctionne sur VirtualBox.

    VirtualBox offre ainsi quelques avantages comme par exemple l'intégration native (sans avoir besoins d'installer les additions client) de la souris sur les systèmes invités Linux (le curseur de la souris ne reste pas « bloqué » à l'intérieur de la VM).

    Durant ma scolarité à SUPINFO, j'ai personnellement toujours réussi à utiliser les machines virtuelles des cours avec VirtualBox.

    Le seul gros problème que j'ai eu à été lors de l'utilisation de gros logiciels pour Windows Server (en l'occurence Exchange et Sharepoint). Une fois ces logiciels installés, les VMs sont devenues inutilisables tellement chaque action demandait énormément de temps pour s'effectuer. Cela se passait donc avec un système invité Windows sur un système hôte Linux. La solution de contournement que j'ai trouvé, à été de retourner temporairement sur mon système natif Windows. Et en utilisant la même version de VirtualBox, les machines sont devenues très fluides à utiliser.

    Mais à part ça j'ai toujours pu me débrouiller avec ce magnifique logiciel.

     

    2. Faire de bonnes captures d'écran

    Dans les TP SUPINFO il est souvent demandé de répondre aux questions en justifiant les procédures mises en œuvres par des captures d'écran. Ces TP étant d'une durée limitée, il est inutile de perdre du temps dans la prise de ces captures. Un bon outils dédié à cette tâche vous sera donc indispensable.

    Sur les plate-formes GNU/Linux, l'utilitaire le plus réputé pour effectuer des captures d'écran est Shutter, disponible sous licence GPLv3 sur son site officiel ou dans le gestionnaire de paquets de votre distribution préférée.

    Grâce à lui vous pourrez capturer soit un bureau entier (pratique si vous avez plusieurs bureaux virtuels et que vous ne voulez pas en changer pour prendre votre capture d'écran), une fenêtre seule, un élément d'une fenêtre (très utile par exemple pour capturer uniquement la zone de votre machine virtuelle et non la fenêtre entière de votre virtualiseur), ou encore une section de l'écran que vous aurez choisi, un menu, une infobulle et même une page web en installant le paquet gnome-web-photo (ce qui pourra vous être utile lors d'un projet de développement web).

    Vous pourrez lancer la capture depuis la fenêtre du logiciel mais aussi depuis l'icône présente dans la zone de notification de votre gestionnaire de bureau.

    Mais ce n'est pas tout, car vous aurez peut-être besoin d'expliciter la signification d'une portion de la capture en l'encadrant ou en y ajoutant une annotation. Et autant éviter d'ouvrir un autre programme dans ce but. Shutter vous permet d'ajouter ces annotations, ainsi que diverses formes et icônes sur votre capture.

    Shutter est donc un logiciel très complet qui vous fera gagner un temps très précieux lors des évaluations.

     

    3. Dessinez de jolis diagrammes

    Dans les projets de groupes ainsi que dans certains TP il est nécessaire de faire un ou plusieurs diagrammes pour expliquer l'architecture d'un programme ou d'un parc informatique.
    Il n'y a malheureusement pas encore d'outil ultime sous GNU/Linux et qui soit aussi avancé qu'un Visio mais on peut trouver quelques alternatives :

    Le premier d'entre eux est Dia, logiciel assez vieux et dont le développement est arrêté. Il aurait pu être bien mais maintenant ses capacités sont loin des standards actuels. Je tenais quand même à le mentionner car il était bon en son temps.

    Ensuite, si vous utilisez LibreOffice, vous pourrez profiter de son module Draw qui permet de faire des schémas et dispose d'une bibliothèque de formes assez importante. Avec lui vous pourrez obtenir des diagrammes assez évolués, mais on reste quand même derrière le concurrent de la suite office de Microsoft.

    Enfin dernier logiciel, plus récent, et selon moi le plus abouti : Pencil.
    Outre les formes basiques et les objets de diagramme habituels, Pencil fournit des éléments pour construire des schémas d'interfaces graphiques pour systèmes de bureau (Windows, Linux) ou portables (Android, iOS). Ces dernières fonctions le rendent très utile pour créer des ébauches d'interface avant de se lancer dans le développement.
    Pencil utilise l'environnement d'exécution XULrunner comme Firefox, ce qui lui permet d'être disponible en tant qu'application stand-alone ou en addon de Firefox.
    Il lui reste tout de même deux petit points noir. Les releases de ce logiciels sont assez éloignées dans le temps, ce qui donne l'impression que le projet n'avance pas vite, et deuxièmement, il reste quelques bugs par-ci par-là.
    Mais malgré cela, Pencil est un très bon logiciel de création de schémas.

     

    4. Autres outils intéressants

    Il n'y a pas que les « gros » logiciels dans la vie. De petits utilitaires en ligne de commande peuvent aussi rendre de grand services.

    Celui auquel je pense en particulier est ipcalc. Lors des cours de réseau (Cisco), ou si dans un TP vous devez mettre en place un nouveau réseau de toute pièce, il faudra obligatoirement passer par l'étape de calcul des plages d'adresses IP, des masques de sous-réseau, etc...
    On peut bien sûr le faire à la main, mais en entreprise on préfère toujours la solution la plus rapide.
    Ainsi, en lui fournissant en paramètre, l'adresse réseau et le masque que vous aurez choisi, ipcalc vous calculera automatiquement le nombre d'adresses dont vous disposerez par plage, les adresses de début et de fin à attribuer au postes ainsi que l'adresse de broadcast.
    Ipcalc ne prenant en compte qu'IPv4, si vous avez besoin d'adresses en version 6, tournez vous vers son cousin sipcalc.

    Dans une autre catégorie, vous pourrez utiliser le programme watch qui lancera la même commande en boucle à intervalle défini et vous permettra de visualiser un quelconque changement. C'est utile par exemple si vous faites des tests de connexion à un serveur que vous installez ou configurez et ainsi vous rendre compte à quel moment il est en bonne marche sans avoir à relancer la commande manuellement.

     

    Conclusion

    Le système Linux, dispose ainsi d'un grand nombre d'utilitaires pouvant vous faciliter la vie. Testez ceux qui vous plaisent et exploitez votre système à son maximum !

  • De la différence entre PAM et NSS

    De la différence entre PAM et NSS

     

    Note: ce document est le dernier d'un cycle de trois articles sur l'authentification sur les systèmes Linux. Les premier se trouvant ici et le deuxième .

    Lorsque l'on aborde l'authentification sous Linux, on est vite confronté aux deux mécanismes que sont PAM et NSS. Et à ce moment là une question peut venir à l'esprit : Quelle est la différence entre PAM et NSS qui permette de choisir l'une ou l'autre de ces solutions ?
    C'est donc à cette question que je vais essayer de répondre ici.

     

    Il est vrai qu'au premier abord ces mécanismes semblent faire la même chose, à savoir pouvoir s'authentifier sur un système Linux en utilisant différents services (fichiers plats locaux, serveur LDAP, serveur Active Directory, etc).

    Mais en regardant de plus près, on peut s'apercevoir qu'ils n'ont qu'une petite partie commune.
    En effet, il suffit simplement de s'intéresser à leurs noms pour comprendre leur fonction réelle.
    Pour PAM, Pluggable Authentification Modules, on se rend bien compte que son rôle est l'authentification des utilisateurs. Par contre, pour NSS, Name Service Switch, c'est une autre histoire. NSS est, comme son nom l'indique, une série d'interrupteurs pour choisir les services de données du système. Ces données peuvent être les utilisateurs, et dans ce cas là cela peut rentrer en compte pour l'authentification, mais ils peuvent être aussi beaucoup d'autres choses comme des noms de domaines, des listes d'alias d'adresses email, des correspondances entres des numéros de port et des services, etc. Le rôle de NSS est en fait de gérer les sources qui alimenteront la liste de ces types de données.

    Afin de mieux comprendre à quel moment PAM et NSS peuvent se chevaucher, il suffit de s'intéresser à l'évolution de l'authentification sur les systèmes Linux.

    À l'origine, les applications authentifiaient l'utilisateur en faisant appel aux bibliothèques du système. Ces dernières allaient alors regarder dans les fichiers /etc/passwd et /etc/shadow afin de vérifier l'existence de l'utilisateur et la conformité du mot de passe entré.
    On peut schématiser ce processus ainsi :

    Schéma du processus d'authentification basique sous Linux

    Ensuite, avec l'arrivée de NSS, on a pu élargir le nombre de sources pour les données du système. Concrètement, au lieu d'aller chercher les données seulement dans les fichiers plats, les bibliothèques système ont pu utiliser d'autres sources comme un serveur LDAP, une base de données SQL, un serveur Active Directory, etc. Mais ce sont toujours ces bibliothèques qui gardent le rôle d'authentifier l'utilisateur et donc cette authentification se fait sur le système local.
    Cela a au final changé notre précédent schéma ainsi :

    Schéma du processus d'authentification sous Linux avec NSS

    Enfin, lorsque les distributions Linux ont implémenté PAM, l'authentification n'a plus forcément été faite par les bibliothèques du système. C'est PAM qui à ce moment là choisit comment se fait l'authentification, suivant les modules qui sont activés. Si le module est pam_unix.so, l'authentification sera toujours gérée par les bibliothèques système en fonction des données fournies par NSS. Au contraire, si le module est pam_ldap.so ou pam_krb5.so, l'authentification se fera via un serveur LDAP ou Kerberos. C'est à dire que dans ce dernier cas, c'est au serveur externe que sera déléguée la vérification du jeton (ou mot de passe) et non plus sur le système local.
    En reprenant notre schéma, on arrive à ce résultat :

    Schéma du processus d'authentification sous Linux avec PAM et NSS

    On se rend maintenant compte pourquoi on peut avoir l'impression que PAM et NSS se chevauchent dans leur rôle.

    Les principales différences que l'on peut noter entre ces deux mécanismes sont donc les suivantes :

    • Avec NSS l'authentification est gérée par le système local, alors qu'avec PAM elle est délégué à un serveur externe (lorsque le module choisit n'est pas pam_unix.so). L'avantage qui en découle pour PAM est que le mécanisme d'authentification sera le même sur toutes les machines du réseau.
      Au contraire, cela pouvait poser problème avec NSS car chaque machine vérifiait le mot de passe suivant son propre mécanisme. En effet, si les machines d'un parc utilisent NSS et qu'une de celles-ci créé un utilisateur avec un mot de passe chiffré en MD5 qui est ensuite stocké dans un serveur LDAP, l'utilisateur ne pourra pas se connecter sur un machine chiffrant ses mots de passe en SHA-2 car la vérification sera fausse.
    • PAM est réellement dédié à l'authentification contrairement à NSS qui lui gère les sources qui alimenteront une liste de données. PAM permet donc d'effectuer diverses actions en plus de la simple vérification du jeton. Il peut par exemple limiter l'accès de l'utilisateur à certains horaires ou certains moyens (console, interface graphique) ou empêcher l'authentification après un certain nombre d'échecs.
      C'est aussi parce qu'il est dédié à l'authentification que PAM peut authentifier un utilisateur via Kerberos contrairement à NSS. En effet Kerberos utilise des jetons, ce qui ne sert à rien à NSS pour alimenter les listes de données qu'il a à gérer.

    Pour conclure, le choix entre PAM et NSS est une question qui a déjà été évoquée sur le Web, mais sans obtenir de réponse précise et développée. J'espère donc avoir pu éclairer les utilisateurs qui se retrouvent un jour confrontés au système d'authentification de Linux.

     

    Ressource supplémentaire :

     

  • La gestion de l'authentification sous Linux avec PAM

    La gestion de l'authentification sous Linux avec PAM

     

    Note: ce document est le second d'un cycle de trois articles sur l'authentification sur les systèmes Linux. Le premier se trouvant ici et le troisième .

    Il est possible de personnaliser finement tous les aspects de l'authentification des utilisateurs Linux et ce pour chaque application du système.

     

    Linux-PAM

    En effet, il a été choisi de centraliser le mécanisme d'authentification système sous Linux pour plusieurs raisons :

    • afin d'éviter de réimplémenter les mêmes schémas d'authentification dans tous les logiciels.
    • ne pas avoir à recompiler toutes les applications lors du changement des méthodes d'authentification.
    • permettre à l'administrateur de choisir quel mécanisme d'authentification chaque application utilise.

    Ces raisons ont conduit à la naissance de Linux-PAM (pour Pluggable Authentication Modules, soit en français Modules d'Authentification Enfichables).

    Avant PAM, pour pouvoir authentifier un utilisateur, une application faisait appel aux bibliothèques du système (via getpwnam() par exemple) qui la plupart du temps (à moins que NSS ne lui dise d'utiliser une autre source ailleurs) regardaient dans les fichiers /etc/passwd et /etc/shadow pour vérifier l'existence de l'utilisateur et la validité de son mot de passe. Cette technique fonctionnait mais n'était pas très souple pour les raisons évoquées précédemment.

    Dorénavant, une application compatible PAM délègue cette tâche à Linux-PAM (via un appel à la PAM-API), et celui-ci, suivant les directives inscrites dans ses fichiers de configuration, autorise ou non l'authentification.

    Mais PAM ne s'occupe pas seulement de la vérification du mot de passe. Il offre un total de six primitives d'authentification grâce à des modules fournissant certaines fonctions. Ces primitives sont regroupés dans les quatre catégories que voici :

    account
    • Gère la disponibilité du compte. Cette disponibilité regroupe l'accès au serveur sur lequel est stocké le compte, mais aussi si l'utilisateur est autorisé à utiliser ce compte à ce moment donné et par ce moyen. Par exemple on pourra spécifier qu'il n'est autorisé à se connecter qu'entre 8h30 et 17h00 et seulement en console.
    auth
    • Premièrement, c'est dans cette catégorie que l'on vérifie le moyen d'authentification (le mot de passe, le jeton, etc).
    • Ensuite c'est ici que l'on affecte les credentials de l'utilisateur, c'est à dire ses privilèges et les groupes auxquels il appartient.
    password
    • Les modules classés dans cette catégorie permettent simplement de mettre à jour le jeton d'authentification de l'utilisateur. Cela peut être parce que ce jeton à expiré, ou, si c'est un mot de passe, parce que l'utilisateur veut le modifier.
    session
    • Mise en place de la session
    • Fermeture de la session
    Pour ces deux aspects, cela prend en compte l'écriture dans les journaux système, l'affichage d'un message personnalisé, l'assignation des variables d'environnement, ou bien encore le montage/démontage de certains lecteurs.

     

    Les fichiers de configuration

    La configuration de PAM peut se faire de deux façon différentes. Soit dans un fichier unique nommé /etc/pam.conf ou soit dans une série de fichiers situés dans le répertoire /etc/pam.d. À noter que la présence de ce répertoire fait que PAM ignorera le fichier pam.conf.
    La façon la plus claire de faire et aussi la plus répandue est l'utilisation du dossier pam.d et c'est cette méthode que je vais détailler ici.

    Chaque fichier du répertoire pam.d gère la configuration du service homonyme. Par exemple le fichier /etc/pam.d/sudo configure l'authentification faite par l'intermédiaire de l'outil sudo.
    Il y a cependant une exception à cela. Le fichier /etc/pam.d/other contient la configuration pour les services n'ayant pas leur propre fichier.

    Ensuite, ces fichiers sont tous organisés suivant le même schéma. Ils sont composés d'une suite d'instructions qui constituent ce que l'on nomme une pile. Chaque instruction est inscrite sur une ligne et chaque ligne est organisée comme ci-dessous :

    catégorie contrôle chemin-du-module arguments-du-module

    Ces lignes sont donc empilées les unes au-dessus des autres pour combiner les actions des modules qui les composes. On pourra par exemple avoir une ligne ayant un module d'authentification vers un serveur LDAP, suivi d'une autre avec un module d'authentification vers un serveur Kerberos pour enchaîner ces deux méthodes.

    Dans l'instruction d'exemple ci-dessus, la catégorie est choisie parmi celles décrites dans la section précédente (account, auth, password ou session).

    Le contrôle est le comportement que la PAM-API doit adopter lorsque le module échoue à sa tâche. Il peut soit prendre la forme d'un simple mot clé, ou soit une forme plus compliquée composée d'une suite de valeur=action entourées de crochets.

    Voici les valeurs que peut prendre ce contrôle lorsque c'est un simple mot clé :

    required Si un module required échoue, un statut d'erreur sera retourné par la PAM-API, mais seulement après avoir exécuté les autres instructions du fichier ayant la même catégorie.
    requisite Comme pour required un statut d'erreur est retourné si un module requisite échoue, mais cependant la main est directement redonné à l'application appelante sans exécuter les modules suivants de la pile. Le statut d'erreur retourné est celui du premier module required ou requisite à échouer.
    sufficient Si aucun module précédent n'a échoué et l'exécution de ce module est un succès, les autres instructions de la pile ne sont pas exécutés et la main est redonnée à l'application en lui signalant la validation de l'authentification.
    Si le module échoue, son statut de retour est ignoré et le reste des instructions de la pile est exécuté.
    optionnal Le succès ou l'échec d'un tel module n'est important que s'il est le seul module de la pile de cette catégorie, sinon son statut de retour est ignoré.

     

    Quant à la syntaxe complexe du contrôle, elle a la forme suivante :

    [valeur1=action1 valeur2=action2 ...]

    valeurN correspond au code de retour de la fonction invoquée dans le module. Ce code de retour dépend des modules et est l'un des suivants (pour connaître ceux que peut renvoyer un module, se reporter à la page de manuel de celui-ci) :

    success Succès de l'établissement de la session.
    open_err Le module ne peut pas être ouvert (par exemple il peut ne pas être trouvé).
    symbol_err Un objet nécessaire au module (par exemple un fichier) est introuvable.
    service_err Une erreur interne au module est survenue.
    system_err Une erreur système est survenue (par exemple si l'appel à la PAM-API n'est pas formaté correctement).
    buf_err Une erreur mémoire est survenue.
    perm_denied Une permission d'accès à été refusée à l'utilisateur.
    auth_err L'authentification à échouée. Cette erreur arrive généralement car le jeton (ou mot de passe) est invalide.
    cred_insufficient Pour une raison quelconque l'application n'a pas les privilèges nécessaires pour authentifier l'utilisateur.
    authinfo_unavail Les informations d'authentification sont inaccessibles. Par exemple si ces informations sont sur un serveur LDAP et qu'il y a une coupure réseau, ce statut sera retourné.
    user_unknown L'utilisateur est inconnu.
    maxtries Le nombre maximal d'essais pour l'authentification à été atteint.
    new_authtok_reqd Le compte utilisateur est valide mais le jeton à expiré. L'action généralement faite par l'application suite à ce statut est de demander à l'utilisateur de changer son jeton.
    acct_expired Le compte utilisateur à expiré.
    session_err L'établissement de la session à échouée.
    cred_unavail Impossible de retrouver les credentials de l'utilisateur.
    Les « credentials » sont tout ce qui identifie de manière unique l'utilisateur, comme par exemple son numéro identifiant, les groupes auquel il appartient, etc.
    cred_expired Les credentials de l'utilisateur ont expirés.
    cred_err Impossible d'assigner ses credentials à l'utilisateur.
    no_module_data Des données spécifiques au module n'ont pas été trouvées.
    conv_err Erreur de conversation.
    authtok_err Le module n'a pas été capable d'obtenir un nouveau jeton d'authentification (par exemple lors du changement de celui-ci).
    authtok_recover_err Le module n'a pas été capable de retrouver l'ancien jeton.
    authtok_lock_busy Le module n'a pas été capable de changer le jeton d'authentification car celui-ci était verrouillé.
    authtok_disable_aging Le vieillissement du jeton (en vue de son expiration) à été désactivé.
    try_again Les tests préalables au changement du jeton d'authentification ont échoués, réessayer plus tard. Ces tests peuvent être par exemple le bon accès au serveur Kerberos si le jeton est un ticket Kerberos.
    ignore Ignorer le résultat de ce module. Il ne participera donc pas au code de retour de la pile de modules.
    abort Erreur critique, sortie du module immédiate.
    authtok_expired Le jeton d'authentification a expiré.
    module_unknown Le module est inconnu.
    bad_item L'application a essayée de définir ou d'accéder à un objet non disponible (un fichier par exemple).
    conv_again  
    incomplete  
    default Toute valeur précédemment listée non mentionnée explicitement.

     

    Quant à actionN il peut prendre une des formes suivantes :

    ignore Lorsqu'utilisé sur une pile de modules (donc que ce n'est pas le seul module de cette catégorie), le statut de retour de ce module ne participera pas au choix du code de retour envoyé à l'application.
    bad Cette action indique que le code de retour doit être considéré comme indicatif si le module échoue. Si ce module est le premier de la liste à échouer, sa valeur sera utilisée comme valeur de retour après l'exécution des autres instructions.
    die Équivalent à bad avec comme effet de quitter immédiatement la pile de modules (sans exécuter les modules suivants) et redonner la main à l'application.
    ok Cette action dit à PAM que le statut de retour de ce module doit contribuer directement au code de retour global renvoyé par la PAM-API après avoir lu la pile de modules. Autrement dit, si le statut renvoyé initialement devait être PAM_SUCCESS, le statut de retour du module remplacera cette valeur. À noter tout de même, si l'état initial de la pile était un code d'échec, cette valeur ne serait pas remplacée.
    done Équivalent à ok avec comme effet de quitter immédiatement la pile de modules (sans exécuter les modules suivants) et redonner la main à l'application.
    N (un entier non signé) Équivalent à ok avec comme effet de sauter les N modules suivants de la pile. Un N égal à 0 n'est pas permis (et serait égal à ok).
    reset Efface le statut de retour de la pile de modules et recommence avec le prochain module.

     

    En sachant cela, les quatre mots clés de la forme simple (required, requisite, sufficient et optionnal) peuvent se représenter de la façon suivante avec la syntaxe complexe :

    • required : [success=ok new_authtok_reqd=ok ignore=ignore default=bad]
    • requisite : [success=ok new_authtok_reqd=ok ignore=ignore default=die]
    • sufficient : [success=done new_authtok_reqd=done default=ignore]
    • optionnal : [success=ok new_authtok_reqd=ok default=ignore]

    L'élément suivant des instructions est le chemin-du-module qui peut être soit le chemin complet vers le module, ou soit le chemin relatif depuis le dossier par défaut des modules (cela peut être par exemple /lib/security, /lib64/security, /lib/x86_64-linux-gnu/security/, etc).

    Enfin, on termine les instructions par les argument-du-module. Pour les connaître, il faut consulter la page de manuel du module en question. Les arguments étant séparés par des espaces, afin de pouvoir placer un espace dans un argument, il faut entourer celui-ci de crochets.

     

    Les modules

    Les modules sont au cœur du système PAM. C'est grâce à eux que l'on peut définir le schéma d'authentification. Ils s'occupent chacun de la gestion d'un mécanisme d'authentification spécifique.
    Voici une liste des modules les plus communs :

    Nom Catégories compatibles Description courte
    pam_access.so Toutes Détermine l'endroit depuis lequel l'utilisateur à le droit de se connecter (en local, depuis telle adresse IP, etc...)
    pam_debug.so Toutes Aide à débugger le comportement de PAM en renvoyant le code de retour demandé par l'utilisateur.
    pam_deny.so Toutes Refuser l'accès de l'utilisateur. On invoque généralement ce module après avoir essayé les autres méthodes d'authentification.
    pam_echo.so Toutes Retourne un message texte personnalisé.
    pam_env.so Auth
    Session
    Permet de définir les variables et de supprimer les variables d'environnement de la session utilisateur.
    pam_exec.so Toutes Exécute une commande personnalisée.
    pam_faildelay.so Auth Change le délais d'attente avant de considérer l'authentification comme un échec pour une application.
    pam_filter.so Toutes Peut se placer pour filtrer les entrées/sorties entre l'utilisateur et l'application. Il peut par exemple forcer les minuscules surt tout ce que l'utilisateur écrira une fois loggé. Ne fonctionne cependant que pour les tty et les applications basées sur stdin/stdout.
    pam_ftp.so Auth Permet de se connecter à un serveur FTP.
    pam_getenv.so   Récupère les variables d'environnement depuis le fichier /etc/environment.
    pam_group.so Auth Assigne à l'utilisateur les groupes auquel il appartient.
    pam_issue.so Auth Affiche le contenu d'un fichier issue (par défaut /etc/issue) avant le prompt de l'utilisateur.
    pam_krb5.so Toutes Permet l'authentification via un serveur Kerberos.
    pam_lastlog.so Session Affiche une ligne d'information sur la dernière connexion de l'utilisateur.
    pam_ldapd.so Toutes Permet l'authentification via un serveur LDAP.
    pam_limits.so Session Permet de limiter l'usage des ressources système à l'utilisateur (charge CPU, nombre maximal de processus, etc).
    pam_listfile.so Toutes Accepte ou refuse l'authentification des utilisateurs en fonction du contenu d'un fichier.
    pam_localuser.so Toutes N'accepte que les utilisateurs listés dans le fichier /etc/passwd.
    pam_loginuid Session Applique l'UID de l'utilisateur au processus demandant l'authentification.
    pam_mail.so Auth
    Session
    Affiche un message si l'utilisateur a de nouveaux emails.
    pam_mkhomedir.so Session Créé le répertoire de l'utilisateur ci celui-ci n'existe pas.
    pam_motd.so Session Affiche le message du jour (par défaut le contenu du fichier /etc/motd).
    pam_mount.so Auth
    Session
    Donne la possibilité de monter un disque local ou distant à l'ouverture de la session utilisateur.
    pam_mysql.so ? Permet l'authentification via un serveur MySQL.
    pam_namespace.so Session Créé un espace de nommage pour la sessions (voir plus de détails dans la page de manuel du module).
    pam_nologin.so Account
    Auth
    Empêche les utilisateurs non-root de se connecter.
    pam_permit.so Toutes Module qui autorise tout le temps l'accès. À utiliser avec précaution pour des raisons de sécurité.
    pam_pwhistory.so Password Retient les anciens mots de passe des utilisateurs pour forcer à en avoir un différent lors du renouvellement de celui-ci.
    pam_rhosts.so Auth Permet l'authentification des utilisateurs sur la machine locale par SSH.
    pam_rootkok.so Auth Authentifie l'utilisateur sans avoir besoin de rentrer un mot de passe, du moment que son UID est 0 (l'UID de l'utilisateur Root).
    pam_securetty.so Auth Restreint la connexion de Root aux tty (terminaux) listés dans /etc/securetty.
    pam_selinux.so Session Met en place le contexte de sécurité pour la session qui s'ouvre.
    pam_sepermit.so Account
    Auth
    L'authentification est permise seulement si l'utilisateur possède une entrée dans fichier /etc/security/sepermit.conf.
    pam_shells.so Account
    Auth
    Autorise l'authentification seulement depuis les shells listés dans /etc/shells.
    pam_succeed_if.so Toutes Valide l'authentification suivant des tests faits sur les caractéristiques de l'utilisateur (nom, UID, GID, shell, home, etc).
    pam_tally2.so Account
    Auth
    Maintient un compteur du nombre d'essais d'authentifications. Ce compteur est réinitialisé lorsque l'authentification réussie. Utile pour bloquer un compte après un certain nombre de tentatives ratées.
    pam_time.so Account Permet de restreindre l'accès de l'utilisateur suivant l'heure de la journée, le jour de la semaine, le service sur lequel il se connecte et le terminal depuis lequel il se connecte.
    pam_timestamp.so Auth
    Session
    Permet de valider automatiquement l'authentification sans demander de mot de passe si la dernière authentification réussie est inférieur à une certaine date.
    pam_tty_audit.so Session Permet d'activer l'enregistrement de ce que l'utilisateur écrira dans un tty.
    pam_umask.so Session Définie l'umask sur la création des fichiers pour la session qui s'ouvre.
    pam_unix.so Toutes Authentification via les mécanismes standard, c'est à dire en faisant appel aux bibliothèques du système (ces dernières regardant par défaut dans les fichier /etc/passwd et /etc/shadow).
    pam_userdb Account
    Auth
    Authentification via une base de données Berkeley DB.
    pam_warn.so Toutes Module qui inscrit dans les logs l'authentification de l'utilisateur.
    pam_wheel.so Account
    Auth
    Autorise l'accès seulement aux utilisateurs du groupe wheel (ou du groupe au GID 0 si le groupe wheel n'existe pas).
    pam_winbind.so Toutes Permet l'authentification via un serveur Active Directory.
    pam_xauth.so Session Permet de conserver les clés xauth (cookies du serveur X) lors du changement de session.

     

    Il existe bien d'autres modules qui permettent d'utiliser tout types de serveurs pour l'authentification ou d'autres types de jetons (comme par exemple des cartes magnétiques). Mais vu qu'ils sont utilisés plus rarement, je vous laisse les découvrir par vous même.

     

    Conclusion

    PAM est un mécanisme très puissant pour la gestion de l'authentification sous Linux. Bien qu'assez complexe sur certains aspects, il permet à l'administrateur d'avoir un total contrôle de l'accès au système par les utilisateurs. C'est aussi un point clé lorsque l'on veut centraliser l'authentification des machines d'un réseau.

     

    Ressources supplémentaires

     

  • Les sources de données système sous Linux avec NSS

    Les sources de données système sous Linux avec NSS

     

    Note: ce document est le premier d'un cycle de trois articles sur l'authentification sur les systèmes Linux. Les suivants se trouvant ici et .

    On utilise souvent la commande cat /etc/passwd pour connaitre la liste des utilisateurs d'un système Linux. Bien que le résultat renvoyé soit correct dans la grande majorité des cas, ce n'est pas la méthode que l'on devrait utiliser. En effet l'affichage du fichier /etc/passwd renvoie la liste des utilisateurs locaux uniquement. Mais si le système est relié à un serveur LDAP, les utilisateurs de ce serveur n’apparaîtront pas, bien qu'il soit possible de se connecter avec sur la machine.

     

    Name Service Switch

    La bonne méthode pour afficher la liste des utilisateurs est l'utilisation de la commande getent suivie du paramètre passwd. Celle-ci va interroger les différentes sources d'utilisateurs définies pour le système. Ces sources sont gérées par le mécanisme NSS (pour « Name Service Switch »). Et NSS ne s'occupe pas seulement des sources d'utilisateurs, mais aussi de leurs mots de passe, des groupes d'utilisateurs, des noms d'hôtes, des protocoles et services connus du système, etc.

    Cependant, bien que NSS permette de choisir les sources de données depuis lesquelles le système ira chercher les informations dont il a besoin, ce n'est pas lui qui défini les connexions vers ces sources de données.

    Voici la liste des bases de données (présentes habituellement sous la forme de fichiers plats) que l'on a l'habitude d'interroger en général et que NSS est capable de gérer :

    Bases de données Description Fichier correspondant
    aliases Alias des adresses e-mail /etc/aliases
    ethers Numéros Ethernet /etc/ethers
    group Groupes d'utilisateurs pour l'accès aux fichiers /etc/group
    hosts Correspondances entre les noms d'hôtes et les adresses IP /etc/hosts
    netgroup Groupes d'utilisateurs pour l'accès aux ressources réseau /etc/netgroup
    networks Noms et masques de réseau /etc/networks
    passwd Utilisateurs système /etc/passwd
    publickey Clés publiques utilisées par NFS et NIS+ /etc/publickey
    rpc Correspondances entre les noms et les numéros de RPC connus /etc/rpc
    services Correspondances entres les numéros de ports et les services réseau connus /etc/services
    shadow Mots de passes chiffrés des utilisateurs /etc/shadow

     

    Ces bases de données ne sont pas utilisées sur tous les systèmes, comme par exemple les aliases plutôt réservés aux serveurs mail, mais on retrouve les bases standard comme passwd, shadow ou group.

    Pour chacune de ces bases de données on va pouvoir demander à NSS d'interroger les fichiers plats locaux listés ci-dessus ainsi que diverses sources externes. Par exemple pour les noms d'hôtes, on va pouvoir configurer NSS pour interroger le fichier /etc/hosts puis les serveurs DNS.

     

    Le fichier nsswitch.conf

    La configuration de l'ordre d'interrogation des sources se fait très simplement à l'aide du fichier /etc/nsswitch.conf. Voici un fichier d'exemple issue d'un système Ubuntu :

    passwd:		compat 
    group:		compat 
    shadow:		compat 
    
    hosts:		files mdns4_minimal [NOTFOUND=return] dns mdns4 
    networks:	files 
    
    protocols:	db files 
    services: 	db files 
    ethers:		db files 
    rpc:		db files 
    
    netgroup:	nis
    

    Sur chaque ligne de celui-ci, est décrit une base de données et les sources depuis lesquelles on va chercher ces données. Chaque ligne aura donc cette forme :

    base_de_données:	source1 [STATUT=action] source2 source3

    NSS ira interroger chaque source une par une dans l'ordre dans lesquelles elles sont inscrites. Chaque interrogation d'une source renverra un statut parmi ceux listés ci-dessous et sera suivie par l'action par défaut :

    Statut Description Action par défaut
    success Succès de la récupération de la donnée recherchée. return
    notfound Accès au service de donnée réussi mais donnée non trouvée. continue
    unavail Le service est indisponible de manière permanente. Cela peut indiquer que le fichier nécessaire n'est pas lisible, ou, pour les services réseau, que le serveur n'est pas disponible ou n'accepte pas les requêtes. continue
    tryagain Le service est temporairement indisponible. Cela signifie qu'un fichier est verrouillé, et qu'un serveur ne peut pas actuellement accepter davantage de connexions. continue

     

    Il est possible de demander à arrêter ou continuer le processus entre deux sources suivant ce statut grâce à une mention du type [STATUT=action]. Cela permet d'exécuter l'action de son choix et non celle par défaut.

    L'action peut être l'une des deux suivantes :

    • return : s'arrêter ici et renvoyer les résultats trouvés
    • continue : interroger le service suivant

     

    Les sources de données disponibles

    Pour obtenir les données recherchées, on peut interroger différents services locaux ou distant comme par exemple les fichiers plats, un annuaire LDAP, une base de données SQL, etc. Par défaut les services disponibles sont files, db, nis et nisplus ainsi que compat pour les bases passwd, group et shadow. De plus, la base données hosts dispose de la source dns qui n'est utilisable que sur elle.

    Mais pour se connecter à des services plus évolués il faut disposer des bons modules. Ceux-ci se trouvent le plus souvent dans le répertoire /lib et ont un nom de la forme libnss_XXX.so.Y. Avec XXX pour le nom du service et Y le numéro de version de la glibc dans laquelle il s'intègre. Ces modules sont en grande partie installables depuis le gestionnaire de paquet de votre distribution.

    Et en voici une liste des plus courants :

    Nom du module Description
    files Utiliser les fichiers plats du système local.
    compat Similaire à files mais permet en plus d'utiliser un annuaire NIS inclus directement dans les fichiers passwd, groups et shadow et non dans le fichier nsswitch.conf. Pour plus d'informations, voir le lien correspondant à la fin de cet article.
    db Utiliser les fichiers au format Berkeley Database File.
    nis Connexion à un annuaire NIS (ancêtre de LDAP).
    nisplus Connexion à un annuaire NIS+ (version plus sécurisée de NIS).
    dns Connexion aux DNS. Utilisable seulement pour la base de données hosts.
    mdns Résolution en Multicast-DNS. Utilisable seulement pour la base de données hosts.
    ldap Connexion à un serveur LDAP
    winbind Connexion à un serveur Samba (ou Active Directory).
    cache Utilisation des fichiers de cache des noms de domaines de nscd (Name Service Cache Daemon).
    extrausers Utilisation des fichiers passwd, group et shadow situés dans le dossier /var/lib/extrausers. Ce dossier permet d'accueillir les fichiers précédemment cités venant d'autres systèmes sans copier leur contenu dans les fichiers locaux situés dans /etc.
    sshsock2 Connexion à un autre système via un socket ssh afin d'utiliser les utilisateurs de celui-ci. Valable seulement pour les bases de données passwd et group.
    lwres Lire le cache fournit par lwres (lightweight resolver). Utilisable seulement pour la base de donnnées hosts.
    mysql-bg Utilisation d'une base de données MySQL.
    pgsql2 Interrogation d'une base de données PostgreSQL.
    sss Interrogation d'un démon SSSd.

     

    La commande getent

    La commande getent citée au début de cet article permet quand à elle d'effectuer une requête pour une base de données sur les services inclus dans NSS.

    La commande est de la forme suivante :

    getent base_de_données [clé]

    La base_de_données est un nom parmi ceux listés dans le premier tableau de cet article. La clé n'est, elle, pas obligatoire. Si elle est présente, la commande n'affichera que la ligne concernant le nom recherché. Au contraire, si elle est absente, getent listera tous les éléments lorsque la base permet l'énumération.

    Par exemple, un annuaire LDAP permet l'énumération, et s'il est utilisé pour l'authentification sur votre système, vous pourrez lister tous les utilisateurs disponibles. À l'inverse, les services DNS ne permettent pas l'énumération (il est impossible de lister tous les noms de domaines existants) et vous serez obligés de fournir une clé (ici un nom de domaine) pour avoir son adresse IP correspondante.

     

    Conclusion

    On l'a vu au travers de cette article, NSS est un mécanisme qui nous permet de choisir les sources de données nécessaires au système. Il permet d'utiliser les fichiers locaux ou de déléguer la gestion de ces données à des services externes. Il est donc nécessaire lors de l'intégration d'une machine à un système centralisé.

     

    Ressources supplémentaires

     

  • Rejoindre le labo, entrer en contact avec la communauté

    Si vous êtes à Caen, Clermont Ferrand, Lyon, Paris ou Rennes, il existe déjà des étudiants qui travaillent en local que vous devriez contacter (cf. le guide des labo de l'an dernier pour retrouver les contacts). Vous devriez aller vous inscrire sur le site de votre campus que vous retrouverez dans cette liste.

    Si vous êtes le premier étudiant de ce labo sur votre campus, vous pouvez créer un compte ici même. Si de nombreux étudiants se joignent à vous, il vous sera possible de demander l'ouverture d'un site dédié.

    Pour communiquer, nous vous recommandons de rejoindre le réseau de messagerie instantannée décentralisé XMPP, qui repose sur une liste d'amis permanente. Le salon de discussion du labo est : labo-linux@conference.labo-linux.org

    Si vous n'avez pas de compte, vous avez la possibilité d'en créer un sur http://xmpp.labo-linux.org Ce client Web offre une interface Responsive pour téléphones ainsi qu'un réseau social. Il existe des clients lourds tels que Gajim, Pidgin ou Adium.

     

    image

  • Choix ou obligation : quelle licence pour publier un projet ?

    Selon la loi en vigueur en France, tout ce que vous créez vous attribue un droit moral perpétuel inaliénable et imprescriptible. Les droits d'utilisation, de modification ou de partage sont accordés indépendamment.

    Toute publication sans mention particulière relève ainsi uniquement du droit d'auteur (« Tous droits réservés »). Si vous pensiez permettre à d'autres étudiants de découvrir vos travaux (sources, tutos) et de pouvoir s'en servir simplement en les publiant, vous les exposez à des risques légaux en cas de réutilisation de leur part (lucrative ou non) sans votre consentement explicite.

    Car il faut également savoir que toute publication sur un élément de l'infrastructure mise en place par SUPINFO réserve à l'établissement les droits d'exploitation les plus étendus sur vos travaux (rubrique Propriété intellectuelle / droit d'auteur).

    En revanche, rien n'est prévu à destination des étudiants. Si vous souhaitez permettre la réutilisation de vos publications vous devez donc choisir une licence permissive et l'appliquer correctement.

    Vous pouvez visiter le comparatif mis en place par GitHub sur http://choosealicense.com/

Linux Certif

  • Le humble bundle Frozenbyte

    Le humble bundle est un pack de jeux indies vendu sans prix définit. Le principe est que l'acheteur choisit combien il est prêt à donner pour les jeux.

    Le système a quelques règles qui en font une offre particulièrement honnête par rapport à ce qui se fait habituellement en jeux vidéo:

    1. aucun DRM
    2. les jeux fonctionnent sur Linux, Mac OS X et même Windows
    3. vous payez ce que vous voulez

    Il y a déjà eu deux événement humble bundle, le troisième est actuellement en cours. Ce dernier s'appelle le "Humble Frozenbyte Bundle" car tout les jeux viennent de l'éditeur Finlandais Frozenbyte.

    Les jeux proposés sont:

    Le humble bundle est une très bonne opportunité de supporter les jeux indie et le jeux sur Linux. Pour le moment, les Linuxiens donnent 12$ en moyenne pour le pack, soit environ 8€.

    Si vous avez envie d'essayer ces jeux, il vous reste 10 jours pour participer.

  • Le WeTab maintenant à partir de 254€

     Le WeTab, la tablette Linux basée sur Meego, est maintenant vendu à 253,99€ pour la version Wifi, et 333€ pour la version 3G.

    Pour rappel, le Wetab est une tablette sortie l'année passée et se voulait complètement à contre courant des autres tablettes.

    Quelques caractéristiques:

    • Linux complet avec X11 et gestionnaire de packet (plutôt qu'un Linux édulcoré pour téléphone)
    • MeeGo (plutôt que Android)
    • Processeur Intel Atom (plutôt que ARM)
    • Plutôt ouvert et avec une communautée
    Les raisons de la baisse de prix sont inconnues. Personellement, j'épère qu'un nouveau modèle va arriver. La possibilité que le projet est abandonné n'est pas a exclure.
  • Sortie de Firefox 4

    Après une longue et pénible période de développement, Mozilla sort aujourd'hui son nouveau bébé: Firefox 4.

    Cette version de Firefox a été pénible à réaliser dû à la pression constante de la concurrence et aux changement soutenus de HTML 5.

    Pour les utilisateurs, Mozilla ne met en avant les performances accrues avec cette version. Les utilisateurs de Windows en particulier peuvent profiter d'améliorations significatives de la vitesse de rendu.

    Pour les développeurs Web, ce Firefox 4 est une bonne nouvelle avec de nombreuses API HTML 5 mises à jour ou tout simplement ajoutés.

  • Mise à jour des pages de manuel de Fedora

    Je suis motivé en ce moment :)

    Une fois de plus, j'ai mis à jour les pages de manuel, cette fois à partir des pages de la distribution Fedora.

    Depuis peu, mon ordinateur fonctionne grâce à Arch Linux, ce qui a posé pas mal de problème pour l'importation des pages. J'ai vérifié les pages manuellement et tout semble correct mais il est impossible d'être sûr lorsqu'on manipule autant de pages. N'hésitez pas à écrire si vous trouvez des problèmes.

    C'est 18545 pages de plus qui ont été ajouté au site (toutes langues confondues). Au total, le site héberge désormais plus de 200 000 pages! :)

    Il semble que Fedora ai réalisé un important effort de documentation. Beaucoup de nouvelle pages et de nouvelles traductions ont été introduite.

  • Mise à jour des pages de manuel pour MeeGo 1.1

    Suite à la mise à jour pour Ubuntu, j'ai découvert un bug dans l'algorithme qui crée les liens entre les pages de manuel.

    Je viens de corriger ça et j'en ai profité pour importer de nouvelles pages de manuel.

    Cette fois, les pages viennent de la distribution MeeGo. La version 1.1 de Meego vient de sortir, c'est donc cette version qui a été importé.

    Assez peu de nouvelles pages ont été importé. Parmi celles-ci, quelques pages inédite de quelques nouveaux outils:

    • bugle
    • gldb-gui
    • Chrome (navigateur par défaut de MeeGo pour Netbook, curieusement cette page de manuel est absente des autres distributions)
    • yumdb
    • etc
  • Mise à jour des pages de manuel pour Ubuntu 10.10

    J'ai récemment reçu un email sympa sur la fonctionnalité "Pages de manuel" du site. Suite à cela et à la récente mise à jour 10.10 de Ubuntu, j'ai décidé de prendre le temps nécessaire pour importer les nouvelles pages de manuel.

    Les pages de manuel n'avaient pas été mises à jour depuis environ un an. À ma grande surprise, énormément de nouvelle page ont été introduite. Quelques exemples de nouvelles pages:

    Au total, ce n'est pas moins de 37325 pages qui ont été importé (toute langues confondues et y compris les mises à jour de pages existante). J'espère que ça aidera quelqu'uns d'entre vous :)

  • Site indisponible hier

    Linux Certif fut indisponible une partie de la journée d'hier.

    J'ai été trop généreux sur la ram que pouvait prendre PostgreSQL, ce a fini par crasher le serveur quand il n'y eu plus de mémoire virtuelle (apparemment un bug dans le noyau car c'est le killer d'application qui a provoqué le kernel panic).

    Cela m'a pris longtemps avant de pouvoir redémarrer la machine car je n'avais pas les code d'accès sur mon lieu de travail.

    Tout est rentré dans l'ordre.

  • Sortie de KDE 4.3

    La dernière version de KDE est sortie aujourd'hui: KDE 4.3.

    Cette sortie montre une fois de plus la vitesse de développement de KDE 4, ce qui conforte les développeurs dans leur choix initiaux.

    Le passage à Qt 4 s'était accompagné d'une modernisation des fondations de KDE, ce qui avait retardé le projet et entrainé la sortie du très critiqué KDE 4.0. Depuis, la flexibilité accrue par le projet a permis d'avancer à pas de géant, ce qui permet de distancer GNOME en terme de fonctionnalités.

    Par rapport à KDE 4.2, KDE 4.3 soigne les détails et améliore encore d'avantage les performances.  Pour un aperçu de l'ensemble des nouvelles fonctionnalités, je vous laisse lire l'annonce de la sortie KDE 4.3.

  • La sortie de KDE 4.3 est proche

    La troisième release candidate de KDE 4.3 vient de sortir.

    KDE 4.3 amènera moins de fonctionnalités de les deux précédente version de KDE car les développeurs se sont concentré à améliorer encore les performance et la stabilité.

    Les responsables de l'assurance qualité de KDE viennent de décider de realiser une version release candidate supplémentaire afin de tester convenablement quelques changement récent.

    La sortie de KDE 4.3 est donc retardée de une semaine, si tout ce passe bien elle arrivera donc le 4 aout.

  • Ces iPods qui prennent feux

    Les journalistes de KIRO 7 ont percé un secret que Apple était parvenu garder hors de vue des medias: les iPods qui prennent feu ou explosent.

    Un certain nombre d'iPod explosent ou prennent feu, blessant parfois leur propriétaire (généralement des brulures). Ces accidents sont soinieusement étouffé par Apple qui a jusqu'ici prétendu qu'il s'agissait de cas isolés.

    Il semble que les iPods les plus touchés soit les iPod shuffle et iPod Nano (par le passé le gouvernement Japonnais avait déjà publié des avertissements sur les dangers de brulure de ces iPods).

    Ces problèmes avaient jusqu'ici été attribué à l'ancien type de batterie lithium-ion, mais une récente explosion d'iPod touch semble indiquer que les mauvaises batterie sont toujours vendues.

    Comme d'habitude, Apple a refusé de commenter sur les danger lié à ses produits.