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.
- lien n°1 : April
- lien n°2 : Agenda du Libre (Belgique, France, Luxembourg, Suisse et Tunisie)
- lien n°3 : Carte des événements
- lien n°4 : Proposer un événement
- lien n°5 : Annuaire des organisations
- lien n°6 : Agenda de la semaine précédente
- lien n°7 : Agenda du Libre du Québec
Sommaire
- [FR Nantes] Cycle café vie privée Protection de son trafic sur Internet (VPN) - Le lundi 25 juin 2018 de 18h00 à 21h00.
- [FR Grenoble] Contribuer à BANO, la base d’adresse nationale d’OSM - Le lundi 25 juin 2018 de 18h30 à 20h30.
- [FR Gaillac] Atelier informatique libre - Le lundi 25 juin 2018 de 19h30 à 23h00.
- [FR Marseille] PGDay France - Le mardi 26 juin 2018 de 08h30 à 17h30.
- [FR Aiglun] Après-midi « Open data » et « Cartopartie » - Fête de l'été - Le mardi 26 juin 2018 de 15h00 à 19h00.
- [FR Quetigny] Découvrir, tester, installer Linux et d’autres logiciels libres - Le mardi 26 juin 2018 de 20h30 à 23h30.
- [FR Le Mans] Permanence du mercredi après-midi - Le mercredi 27 juin 2018 de 12h00 à 17h00.
- [FR Rennes] Sécuriser son infrastructure - Le mercredi 27 juin 2018 de 18h30 à 21h00.
- [FR Montpellier] Rencontres des Groupes OpenStreetMap OSM - Le mercredi 27 juin 2018 de 19h00 à 22h00.
- [FR Toulouse] Rencontres Tetalab - Le mercredi 27 juin 2018 de 20h30 à 23h30.
- [FR Choisy-le-Roi] Pas Sage en Seine - Du jeudi 28 juin 2018 à 10h00 au dimanche 1 juillet 2018 à 20h00.
- [FR Rennes] Conseil d’administration de Gulliver - Le jeudi 28 juin 2018 de 12h00 à 14h00.
- [FR Martigues] Permanence du jeudi de l'ULLM - Le jeudi 28 juin 2018 de 16h30 à 18h30.
- [FR Challans] Permanence Linux - Le jeudi 28 juin 2018 de 18h00 à 20h00.
- [FR Bordeaux] Jeudi Giroll - Le jeudi 28 juin 2018 de 18h30 à 20h30.
- [FR Peymeinade] Install-Party GNU/Linux - Le jeudi 28 juin 2018 de 19h00 à 21h00.
- [FR Vesseaux] Projection-débat du film « Nothing to hide » - Le jeudi 28 juin 2018 de 19h00 à 22h00.
- [FR Paris] Soirée de Contribution au Libre - Le jeudi 28 juin 2018 de 19h30 à 22h30.
- [FR Montpellier] Atelier du Libre Ubuntu et Logiciels Libres - Le vendredi 29 juin 2018 de 18h00 à 23h00.
- [FR Paris] Apéro April - Le vendredi 29 juin 2018 de 19h00 à 22h00.
- [FR Dijon] Atelier de création numérique et électronique - Le vendredi 29 juin 2018 de 20h30 à 23h59.
- [FR Saint-Jean-de-Védas] Repair Café - Le samedi 30 juin 2018 de 09h00 à 13h00.
- [FR Casseneuil] Install Partie GNU/Linux - Le samedi 30 juin 2018 de 10h00 à 17h00.
- [FR Wintzenheim] Réunion du Club Linux - Le samedi 30 juin 2018 de 13h00 à 19h00.
- [FR Villefranche-sur-Saône] Repaircafé - Le samedi 30 juin 2018 de 13h30 à 17h30.
- [FR Marseille] Install Party GNU/Linux - Le samedi 30 juin 2018 de 14h00 à 19h00.
- [BE Liège] Linux Install Party - Le samedi 30 juin 2018 de 14h00 à 18h00.
- [FR Ivry sur Seine] Cours de l’Ecole du Logiciel Libre - Le samedi 30 juin 2018 de 14h30 à 18h30.
- [FR Courbevoie] Assemblée Générale annuelle de l'association StarinuX - Le samedi 30 juin 2018 de 14h30 à 17h00.
- [FR Poucharramet] Festival AgitaTerre - Le dimanche 1 juillet 2018 de 09h30 à 23h00.
[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/
- La Dérive, 1 rue du Gué Robert, Nantes, Pays de la Loire, France
- Adresse web https://cafevieprivee-nantes.fr/category/actualites
- Tags café-vie-privée, anonymat, vpn, tunnel
[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
- La Coop Infolab, 31 rue Gustave Eiffel, Grenoble, Auvergne-Rhône-Alpes, France
- Adresse web https://www.la-coop.net/evenement/atelier-osm-juin18
- Tags osm, openstreetmap, cartographie, atelier
[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.
- Au comptoir du Chinabulle, 47 rue du Chateau du Roi, Gaillac, Occitanie, France
- Adresse web https://www.chinabulle.org
- Tags échange, transmission, logiciels-libres, découverte, chinabulle, atelier
[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.
- Théâtre Joliette, 2 place Henri Verneuil, Marseille, Provence-Alpes-Côte d’Azur, France
- Adresse web http://pgday.fr
- Tags postgresqlfr, conference, pgday
[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
- Marché bio et des producteurs locaux d'Aiglun, place Edmond Jugy, Aiglun, Provence-Alpes-Côte d'Azur, France
- Adresse web https://wiki.openstreetmap.org/wiki/Cartopartie_et_opendata_-_aiglun
- Tags openstreetmap, osm, open-data, carto-partie
[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-)
- Centre Social et Culturel Léo Lagrange, 3 rue des Prairies, Quetigny, Bourgogne-Franche-Comté, France
- Adresse web https://www.coagul.org
- Tags permanence, coagul, logiciels-libres, linux
[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.
- Centre social, salle 220, 2ᵉ étage, Pôle associatif Coluche, 31 allée Claude Debussy, Le Mans, Pays de la Loire, France
- Adresse web https://linuxmaine.org
- Tags linuxmaine, permanence, assistance
[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- FrenchTech Rennes - Saint-Malo, 2 rue de la Mabilais, Rennes, Bretagne, France
- Adresse web https://caplibre.fr/actualites/securiser-son-infrastructure
- Tags caplibre, conférence, sécurité
[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.
- 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
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 saisieLe 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 à 22h00Mercredi 27 septembre 2017 de 19h00 à 22h00
Le Faubourg - 15, rue du Faubourg de Nîmes, 34 000 MontpellierTramway lignes 1, 2 et 4 arrêt Corum
GPS Latitude 43.614186 | Longitude 3.881404
Carte OpenStreetMapLe dernier mercredi de chaque mois.
- Le Faubourg, 15 rue du Faubourg de Nîmes, Montpellier, Occitanie, France
- Adresse web http://montpel-libre.fr
- Tags osm, openstreetmap, cartographie, donnee, saisie, cartopartie, participative, rencontre, logiciels-libres, montpel-libre
[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.
- Mix'Art Myrys, 12 rue Ferdinand Lassalle, Toulouse, Occitanie, France
- Adresse web https://www.tetalab.org
- Tags rencontre, hacker, artistes-libristes, tetalab
[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).
- Médiathèque Louis Aragon, 17 rue Pierre Mendès France, Choisy-le-Roi, Île-de-France, France
- Adresse web https://passageenseine.fr
- Tags numérique, hacktivisme, communs, privacy, hacking, white, atelier, conference
[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.
- Maison de la Consommation et de l’Environnement, 48 bd Magenta, Rennes, Bretagne, France
- Adresse web http://gulliver.eu.org/conseil_dadministration_juin_2018
- Tags gulliver, conseil-administration
[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.
- Médiathèque de Martigues, quai des Anglais, Martigues, Provence-Alpes-Côte d’Azur, France
- Adresse web http://www.ullm.org
- Tags ullm, logiciels-libres, linux, permanence, gnu-linux
[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
- Albanera Café, 17 rue du Général Leclerc, Challans, Pays de la Loire, France
- Adresse web http://linuxchallans.org
- Tags linux-challans, permanence, rencontre, mensuelle, soirée, logiciels-libres, gnu-linux
[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.
- Centre d’animation Saint Pierre, 4 rue du mulet, Bordeaux, Nouvelle-Aquitaine, France
- Adresse web https://www.giroll.org
- Tags rencontre, install-partie, giroll, webradio, logiciels-libres, rencontre-hebdomadaire
[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
- Magasin Clic Ordi, 65 avenue de Boutiny, Peymeinade, Provence-Alpes-Côte d’Azur, France
- Adresse web https://www.linux-azur.org/ral/ral-peymeinade-clicordi
- Tags linux-azur, install-party, clic-ordi, bidouille, handy-linux
[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).
- le Vesseaux-Mère, 23 chemin du Prieuré, place de l'Église, Vesseaux, Auvergne-Rhône-Alpes, France
- Adresse web https://ardechelibre.org/projection-debat-du-film-documentaire-nothing-to-hide/
- Tags vie-privée, projection, nothing-to-hide, débat
[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.
- FPH, 38 rue Saint-Sabin, Paris, Île-de-France, France
- Adresse web http://www.parinux.org/
- Tags parinux, scl, soirée-de-contribution-au-libre, fph, logiciels-libres
[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 OpenStreetMapRendez-vous mensuel, tous les derniers vendredis, salle jamais le dimanche
- Maison pour tous Mélina Mercouri, 842 rue de la Vieille Poste, Montpellier, Occitanie, France
- Adresse web http://montpel-libre.fr
- Tags atelibre, accompagnement, initiation, gnu-linux, logiciels-libres, montpel-libre, ubuntu
[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.
- Bâtiment 8, 44/46 rue de l’Ouest, Paris, Île-de-France, France
- Adresse web https://pad.april.org/p/aperosapriljuin2018
- Tags apéro, april, rencontre
[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.
- Fablab et hackerspace l’abscisse, 6 impasse Quentin, Dijon, Bourgogne-Franche-Comté, France
- Adresse web https://fablab.coagul.org
- Tags lab6, coagul, électronique, atelier, fablab
[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
- Avec 2L, chemin de la Tuilerie, Casseneuil, Nouvelle-Aquitaine, France
- Adresse web http://www.agenux.org
- Tags install-party, agenux, logiciels-libres, gnu-linux
[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
- MJC du Cheval Blanc, 1 faubourg des Vosges, Wintzenheim, Grand Est, France
- Adresse web http://mjc-chevalblanc.fr/-club-linux-.html
- Tags linux, logiciel-libre, mjc-du-cheval-blanc, club-linux
[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.
- Caveau Jacques Higelin, 230 rue de la Quarantaine, Villefranche-sur-Saône, Auvergne-Rhône-Alpes, France
- Adresse web https://repaircafe.org/en/locations/repair-cafe-villefranche-sur-saone
- Tags cagull, repair-cafe, reparer, recyclage
[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).
- Foyer du Peuple, 50 rue Brandis, Marseille, Provence-Alpes-Côte d’Azur, France
- Adresse web https://cercll.wordpress.com/espace-evenement
- Tags cercll, foyer-du-peuple, install-party, logiciels-libres, gnu-linux, ubuntu, xubuntu, mageia, debian
[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.- Cyber Seniors Énéo, rue Fraischamps 74b, Liège, Liège, Belgique
- Adresse web http://www.jhc-info.be
- Tags linux, gnu-linux, install-party, installation, logiciels-libres
[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
- Salle LCR, 79 avenue Danielle Casanova, Ivry sur Seine, Île-de-France, France
- Adresse web https://e2li.org
- Tags e2l, cours, ecole-du-logiciel-libre, logiciels-libres
[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
- Bâtiment des associations, 48 rue de Colombes, Courbevoie, Île-de-France, France
- Adresse web https://www.starinux.org/ag-2018/index.php
- Tags starinux, assemblee-generale
[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 CommunsConférences
Expositions « C’est quoi les Communs »
Ateliers tous publicsExpositions d’artistes sculpteurs sur bois
Mur d’expression libre
Vannerie géante collectiveConcerts
Spectacles et animationsBuvette & Restauration
Espace enfants20h30 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- Place des Marronniers, Poucharramet, Occitanie, France
- Adresse web http://association3pa.wixsite.com/agitaterre
- Tags agitaterre, festival, alternatives, écologie, conférences
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.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.
- lien n°1 : GNU Dr. Geo
- lien n°2 : Article Wikipedia
Nouvelles fonctionalités
Navigateur de code dédié
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.
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.
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.
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 :
- L'enseignant sauve les documents à partager dans son dossier DrGeo.app/MyShares :
- L'enseignant active le partage réseau local depuis le navigateur de préférences de DrGeo (menu Système, Préférences) :
- L'élève, depuis l'outil habituel d'ouverture de figures, parcourt les figures partagées (bouton 'Partage enseignant') :
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 clair, à utiliser en vidéo projection, par exemple, car le thème sombre manque de contraste.
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.
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.- lien n°1 : Explication des inventeurs
- lien n°2 : La mécanique Lazy FPU state restore expliquée par les équipes NetBSD
- lien n°3 : Le message de Linus lors du passage en mode eager
- lien n°4 : Annonce officielle de FreeBSD
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
etMMX
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.- lien n°1 : Explication des inventeurs
- lien n°2 : La mécanique Lazy FPU state restore expliquée par les équipes NetBSD
- lien n°3 : Le message de Linus lors du passage en mode eager
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
etMMX
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 drapeauCR0: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'exceptionfpudna
… 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'unRET
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 modeeager
.-
Linux propose le mode
eager
plutôt que le modelazy
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.
- Ajoutez
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.- lien n°1 : Présentation de RyDroid Web Proxy sur mon site Web
- lien n°2 : Dépôt Git sur l’instance GitLab d’OW2
- lien n°3 : Dépôt Git sur GitLab.com
- lien n°4 : Site Web du projet CLIF
- lien n°5 : Paquet Debian
Sommaire
- Le sujet
- État de l’art
-
La réalisation du projet
- Les outils utilisés
-
Le résultat
- Comparaison avec un proxy classique
- « Proxifier » une URL
- Récupérer une ressource Web
- La gestion du HTML
- La gestion du CSS
- La gestion du HTTP
- Gérer les formulaires Web
- La gestion du JavaScript
- La configuration
- Enregistrement des données
- Conversion des données
- L’API Web
- L’interface graphique
- L’installation facile
- Le paquet Debian
- Possibilités pour améliorer les performances
- Et après ?
- Pourquoi ce nom ?
- Conclusion
Le sujet
Celui qui a été mon tuteur de stage participe activement au développement d'un outil de test de performance à travers le réseau, qui s'appelle CLIF et qui est présenté plus loin dans cet article. Le cas le plus courant est le test pour le web, avec le protocole HTTP et sa version chiffrée HTTPS. Pour faciliter l'usage pour ce cas commun, il faut que créer un scénario de test pour ce dernier soit aisé.
Il existait déjà une solution : un proxy pouvait être configuré dans le navigateur web pour intercepter les flux réseaux et ainsi enregistrer les informations pertinentes dans le format adéquat (basé sur XML) pour rejouer une session web avec CLIF. Configurer un proxy dans un navigateur web peut être difficile pour certaines personnes ou perçu comme tel. De plus, le proxy ne gère pas le HTTPS (qui est de plus en plus courant), bien qu'il aurait été possible d'en ajouter la gestion, cela aurait nécessité d'ajouter un certificat dans le navigateur web. Mon tuteur voulait un outil plus simple à utiliser et qui gèrent le HTTPS, d'où ce stage.
Comme CLIF, l'outil réalisé devait être du logiciel libre sous licence GNU LGPL en version 3.
État de l’art
Outils de test de charge
La liste n'est pas exhaustive, mais il y a un article sur Wikipédia en anglais si on en désire une qui cherche à l'être. Cette partie a pour intérêt de présenter rapidement des outils cités plus loin dans l'article présent et de mettre en perspective le programme de mon tuteur de stage.
Apache JMeter
JMeter est un logiciel libre de la fondation Apache. Il est très populaire et packagé par au moins Debian et Trisquel GNU/Linux. Pour définir un test de charge, il faut lui soumettre un fichier XML. Il est extensible avec des modules complémentaires.
Gatling
Gatling est un logiciel de test de charge, avec un focus sur les applications web. Il est sous licence Apache 2.0, donc libre. Il est écrit en Scala. Il est packagé par au moins Debian et Trisquel GNU/Linux.
Selenium
Selenium est un logiciel pour automatiser la navigation web à travers un navigateur web. Il peut donc servir à faire des tests, mais aussi automatiser des tâches administratives se faisant via le Web. Il est libre via la licence Apache 2.0.
Tsung
Tsung est un logiciel de test de charge distribué. Il gère différents protocoles (dont HTTP, XMPP, LDAP, et MQTT). Il est libre sous licence GNU GPL version 2.0. Le langage de programmation utilisé est Erlang. Il prend en entrée un fichier XML. Il est disponible sous forme de paquet dans au moins Trisquel GNU/Linux et Debian.
Locust
Locust a la particularité d'utiliser des scripts en Python pour définir le comportement des utilisateurs virtuels, alors que les autres outils utilisent généralement du XML et/ou une interface graphique. C'est un logiciel libre sous licence "MIT".
The Grinder
The Grinder est un framework pour le test de charge. Il est adapté pour le test distribué sur plusieurs machines. Il est libre et écrit en langage Java.
Taurus
Taurus a pour but de cacher la complexité des tests fonctionnels et de performance. Il fait cela en étant une enveloppe pour JMeter, Gatling, Locust, Grinder, et Selenium WebDriver. Il prend en entrée un fichier au format YAML. C'est un logiciel libre sous licence Apache 2.0.
CLIF
CLIF est un logiciel libre initié, piloté, et maintenu par celui qui a été mon tuteur de stage (Bruno Dillenseger). C'est un acronyme récursif pour "CLIF is a Load Injection Framework". Ce projet est hébergé par le consortium OW2. Il est écrit dans le langage de programmation Java. Il a une interface en ligne de commande et une interface graphique sous forme de module complémentaire pour Eclipse. Il propose plusieurs manières de définir un test de charge, comme cela est expliqué dans une sous-sous-section (de cet article) partiellement dédiée. Il n'y a pas de paquet Debian, notamment à cause des nombreuses dépendances et d'au moins une dont les sources n'auraient pas été retrouvées.
CLIF permet de déployer des injecteurs de requêtes répartis pour mesurer les temps de réponse. Il permet également de déployer des sondes afin de mesurer la consommation des ressources (processeur, réseau, mémoire, disque, etc.). Son environnement de scénario ISAC offre une façon formelle de définir les scénarios sous forme de comportements d'utilisateurs virtuels et d'une spécification du nombre d'utilisateurs virtuels actifs de chaque comportement au cours du temps. CLIF a été spécialement conçu pour être rapidement adaptable à toute sorte de cas de test (un assistant Eclipse permet de définir ses propres modules complémentaires pour intégrer de nouveaux protocoles ou de nouveaux jeux de données), y compris des hauts niveaux de charge (comme des centaines d'injecteurs et des millions d'utilisateurs virtuels). En pratique, CLIF est utilisé pour des tests de tenue en charge, mais également pour des tests fonctionnels, des tests en intégration continue et de la supervision de qualité d'expérience utilisateur, notamment via son module complémentaire pour Jenkins.
Le code source est sur l'instance GitLab de OW2, à part le module complémentaire pour Jenkins qui est sur GitHub. CLIF est aussi disponible sur la forge historique de OW2 (qui propose des versions compilées).
Loads et Molotov
Loads et Molotov sont libres et écrits en langage Python. Ils permettent d'écrire des tests unitaires. Loads est développé et testé sur Python 2.6 et 2.7, tandis que Molotov nécessite Python 3.5 ou plus.
HPE LoadRunner
HPE LoadRunner est un logiciel privateur de test de charge, qui ne fonctionne complètement que sous Microsoft Windows. Il peut être étendu via des formats d'autres outils (comme JMeter) et des scripts dans différents langages (comme C et Java). Sa première version date de l'an 2000, il est depuis toujours amélioré, ce qu'il lui a permis d'acquérir une place importante dans le domaine du test de charge.
megaLOAD
megaLOAD est présenté comme étant une plateforme en ligne de test de charge qui serait facile à utiliser et capable de monter à l'échelle. Il aurait été spécialement créé pour tester les services de type back-end ayant vocation à être très robustes. Il est fait par Erlang Solutions. Il gère HTTP et serait suffisamment extensible pour gérer n'importe quel protocole. Il serait possible de l'utiliser via un navigateur web et/ou une interface de programmation RESTful. Il est disponible sur AWS (Amazon Web Services).
Siege
Siege est un outil libre pour tester la capacité de charge des implémentations des protocoles HTTP(S) (version 1.0 et 1.1) et FTP. Il est écrit en langage C et fonctionne sur divers systèmes d'exploitation POSIX (comme GNU/Linux et des BSD récents, mais pas Windows). Il est libre sous la licence GPL en version 3.0.
Outils de capture d’utilisation Internet
Différentes organisations proposent des services web pour l'injection de charge. Certaines d'entre elles proposent un outil pour facilement capturer une session d'usage du réseau, ce qui permet ensuite de la rejouer facilement.
On pourrait naïvement penser que tcpdump, Wireshark, ou Scapy sont de bons candidats sans rien faire. Ce serait vrai si les communications passaient toutes, ou au moins une vaste majorité, en clair sur les réseaux et que cela n'était pas amené à changer. En effet, elles sont de plus en plus chiffrées (avec une accélération depuis 2013 suite aux révélations d'Edward Snowden), ce qui permet de "garantir" (par les mathématiques) la confidentialité de ce qui est chiffré (il y aura toujours un minimum de méta-données non chiffrées). Il faut donc trouver un moyen de contourner le chiffrement quand il y en a, ce que tcpdump, Wireshark, et Scapy ne font pas automatiquement. De plus, ces derniers montrent une quantité de détails techniques inutiles pour l'individu (dans notre contexte) et qui pourraient le perturber (par peur de l'inconnu et/ou difficulté à percevoir ce qui est pertinent).
NeoLoad
NeoLoad Recorder est une application qui enregistre un parcours utilisateur fait à travers un proxy. Pour cela, il crée un proxy sur la machine sur laquelle il est exécuté. Ensuite, il génère un certificat X.509 qui va servir à déchiffrer les échanges chiffrés via TLS. Puis, il démarre Firefox dans lequel il faut configurer le proxy et ajouter le certificat si on souhaite enregistrer les communications chiffrées via TLS. Après cela, il n'y a plus qu'à naviguer. Une fois que l'on veut arrêter, il faut penser à enlever le proxy (mais on s'en rendra vite compte si on oublie), et ne plus faire confiance au certificat (ce qui ne sera rappelé par aucune erreur).
Cette solution technique est problématique si on doit passer par un proxy pour accéder à un réseau sur lequel le site web à tester est accessible. Techniquement, il est écrit en Java. Les données sont enregistrées dans un format inconnu et non trivial.
HPE StormRunner Load
HPE StormRunner Load est un service distant pour faire du test de charge et en analyser les résultats. Il est basé sur du logiciel privateur et se manipule via une interface web. Pour faciliter son usage, divers outils (non libres) sont mis à disposition.
Pour rendre aisé la capture de la navigation web, il propose 2 outils : TruClient Lite et TruClient Standalone. Ils ont pour but de capturer (directement) ce qui se passe dans un navigateur web (donc sans proxy externe et sans certificat pour le HTTPS). TruClient Lite est un module complémentaire pour Chromium (et donc son principal dérivé Google Chrome), qui utilise les paramètres de proxy du navigateur web. TruClient Standalone est un logiciel (fonctionnant uniquement sur Windows) qui peut au choix se baser sur les moteurs de Firefox (Gecko), Chromium, ou Internet Explorer, mais également simuler un mobile ou une tablette (en configurant correctement la résolution du navigateur web et son agent utilisateur), il prend les contrôles sur le proxy du navigateur web. L'absence de contrôle sur le proxy est problématique si on doit passer par un proxy pour quitter un réseau interne, mais il est possible de lui indiquer un proxy après que le script soit généré. Ils enregistrent les clics sur les boutons avec leurs intitulés (même s'ils ne sont pas des liens), et se basent sur l'intitulé des boutons pour naviguer et pas sur les URLs, ce qui est pratique si les références des liens changent. Ils permettent également de rejouer (automatiquement) un script enregistré avec une visualisation graphique, cependant ils sont perdus s'ils essayent de rejouer mais que le texte du bouton n'est pas le même (par exemple à cause de la langue par défaut différente en fonction du navigateur web).
BlazeMeter
BlazeMeter est une plateforme SaaSS web. Il peut réaliser des tests de charge et montrer des statistiques (en temps réel) qui en résultent. Il propose une API web pour automatiser les tests, par exemple dans le cadre de l'intégration continue (via Jenkins ou un autre outil similaire). Il utilise divers logiciel libres (dont JMeter, Gatling, et Taurus) et gère donc leurs formats de données.
Pour simplifier les tests web, un outil de capture de session web est proposé, BlazeMeter Proxy Recorder. C'est malheureusement du logiciel privateur. On peut le tester gratuitement pendant 1 mois. Pour l'utiliser, il faut s'inscrire et l'activer. Ensuite, il faut aller dans son interface, ce qui crée un proxy (sans intervention du testeur ou de la testeuse) et un certificat X.509 (souvent appelé d'une manière réductrice certificat TLS). Pour enregistrer ce que l'on fait via un client web, il faut activer le proxy (via un simple bouton) et configurer ce dernier dans notre client web. S'il l'on souhaite que les communications chiffrées soient enregistrées, il faut ajouter un certificat qui va permettre au proxy de déchiffrer avec une de ses clés privées (au lieu d'une clé privée du service web consulté). Au fur et à mesure de la navigation (via le proxy), l'interface graphique de BlazeMeter Recorder montre ce qu'il a capturé. Pour finaliser une session, il suffit de cliquer sur un bouton (de l'interface web). On peut ensuite avoir le résultat sous divers formes (URL pour BlazeMeter, fichier JMeter, fichier pour Selenium WebDriver, ou fichier pour Taurus).
SOASTA Cloud Test
SOASTA Cloud Test est un SaaSS web pour le test de charge et l'analyse des données (en temps réel) qui en sont issues. Parmi les analyses qu'il propose, il a l'originalité de proposer une comparaison du temps de chargement et du revenu généré sur une période. Il permet de choisir où seront géographiquement les utilisateurs virtuels d'un test. Il propose une interface en 3 dimensions avec les flux réseaux qu'il génère sur une carte de la Terre, dont l'intérêt est probablement discutable, mais cela peut être pertinent pour se faire payer le service par un·e commercial·e. Il peut importer des fichiers JMeter.
Contrairement à certains de ses concurrents, son outil de capture d'usage du réseau fonctionne sur plusieurs protocoles Internet (temps des connexions TCP, DNS, TLS, HTTP, etc.). C'est une machine virtuelle (sous CentOS) qui fonctionne avec VMware Player, ce qui est très lourd (en termes de puissance de calcul, de mémoire vive, et de place dans la mémoire persistante puisque le disque de la machine virtuelle fait 15Go). Ce choix technique le réserve à des informaticien·ne·s ayant du temps ou des personnes ne voulant pas se limiter au Web.
La réalisation du projet
Les outils utilisés
Les outils pour le développement lui-même
- Système d'exploitation : Debian GNU/Linux 9 "Stretch" (qui devenu stable pendant mon stage, inclut PHP 7, et est vastement utilisé)
- Éditeur de code : GNU Emacs (parce qu'il ne nécessite pas de souris et qu'il est beaucoup plus léger qu'un environnement de développement intégré)
- Langage de programmation : PHP 7 (qui a une librairie standard fourni pour le Web, permet la déclaration de type sur tous les types non objets, et a des avantages de facilité d'installation pour les applications se basant dessus comme cela est expliqué dans la partie qui est dédiée à ce sujet)
Les outils pour gérer le développement
- Gestionnaire de versions : git ("le gestionnaire de contenu stupide" (d’après son manuel) est un logiciel libre de gestion de versions décentralisé, libre, performant, et populaire)
- Forges logicielles :
Les outils pour les tests
- Outils de tests :
- Outils de tests génériques : (pour des choses simples comme le nombre maximal et la taille maximale des lignes des fichiers)
- Outils de tests pour PHP :
- PHPMD (PHP Mess Detector) (un équivalent de PMD pour PHP, qui permet de prévenir quand le code contient de potentiels problèmes)
- PHPCDP (PHP Copy/Paste Detector) (détecte les copier/coller pour inciter à factoriser le code plutôt qu'à le dupliquer)
- PHP_CodeSniffer (pour alerter que la manière, préalablement définie, d'écrire le code n'est pas suivie)
- PHPUnit (pour les tests unitaires) (en version 5, parce que c'est la version fournie par Debian 9 "Stretch")
- Outils de tests pour JavaScript :
- Closure Compiler (qui permet notamment de vérifier la syntaxe et la cohérence des types en se basant sur des annotations au format JSDoc)
- Outils de tests pour XML :
- xmllint (du projet GNOME)
- Processeurs XSLT :
- xsltproc (du projet GNOME)
- Apache Xalan
-
Saxon XSLT (uniquement les versions libres, c'est-à-dire dans Debian 9 :
libsaxon-java
,libsaxonb-java
,libsaxonhe-java
)
- Outils de tests pour YAML :
- Intégration continue : (pour exécuter automatiquement des tests quand des modifications ont été validées)
- Jenkins, avec le plugin Travis YML (pour mettre les tests dans un fichier versionné plutôt que dans l'interface graphique)
- GitLab CI (qui utilise aussi un fichier versionné au format YAML)
Les outils « annexes »
- Automatisations diverses : make
- Génération d'une documentation : Doxygen avec Graphviz (pour les graphiques)
- Paquet Debian : devscripts et dh-make
Le résultat
Comparaison avec un proxy classique
Un proxy classique est légèrement plus dur à utiliser. En effet, il faut que l'utilisateur ou utilisatrice configure un proxy. De plus, pour les échanges chiffrés, il faut ajouter un certificat.
Néanmoins, un proxy classique a un énorme avantage, il est techniquement plus simple, puisqu'il fait moins de choses, et est donc bien plus performant. En effet, le proxy que j'ai réalisé doit détecter puis analyser entre autres le HTML et le CSS, et enfin potentiellement les modifier, ce qui nécessite une puissance de calcul non négligeable si plusieurs agents l'utilisent en même temps.
« Proxifier » une URL
Mon proxy n'est pas un proxy "classique", il change les URLs pour qu'elles pointent toutes vers lui, c'est ce que l'on peut nommer la "proxification" d'URL. En simplifiant, cela revient à ajouter un préfixe à l'URL. Techniquement le préfixe est une référence du proxy (nom de domaine, adresse IP, ou nom purement symbolique comme localhost), puis la page qui "proxifie", et enfin le ou les différents paramètres GET à passer à la page.
Il y a un paramètre obligatoire qui est l'URL de la page à "proxifier". Celui-ci peut contenir des caractères illégaux comme valeur de paramètre GET (comme un point d'interrogation "?" ou une esperluette "&"), il faut donc encoder ce paramètre au moment de la "proxification", et le décoder au moment de son usage. Cela est fait avec les fonctions PHP urlencode et urldecode (pour lesquels il existe des équivalents en JavaScript).
Il y a aussi 2 paramètres GET facultatifs. Ils ont pour nom
proxy-url
etproxy-port
et permettent d'indiquer à mon proxy d'utiliser un proxy classique (en spécifiant à minima une URL et potentiellement un numéro de port). Il y a d'autres moyens pour cela, mais ce moyen est prioritaire sur les autres. Si au moins un est indiqué, il faut le(s) propager à toutes les URLs à "proxifier".Récupérer une ressource Web
Un proxy réseau sert d’intermédiaire pour récupérer une ressource. La problématique est banale, mais nécessite néanmoins un peu de temps pour être gérée correctement.
La première approche que j'ai utilisée est d'utiliser la fonction
file_get_contents
. C'est une fonction de haut niveau qui prend en entrée obligatoire le chemin vers une ressource (du système de fichiers ou via le Web), et retourne le contenu si elle a réussi à l'obtenir. C'est très facile d'emploi, cependant elle a un gros manque : elle ne récupère pas les en-têtes HTTP, or elles peuvent être pertinentes pour rejouer une session web (ce qui pour rappel est la finalité indirecte de mon proxy). Il fallait donc proposer un autre moyen activé par défaut si disponible.Il y a une commande et une bibliothèque associée pour récupérer (entre autres) une ressource sur le Web qui est très connu et a de nombreuses options : il s'agit de curl. C'est libre et existe depuis longtemps (la première version date de 1997), ce qui explique au moins en partie qu'il y ait des fonctions pour utiliser curl dans la librairie standard de PHP. Dans les archives officielles de Debian, il est dans le paquet php-curl qui n'est pas une dépendance du paquet php, probablement pour mettre une installation minimaliste de PHP quand toute la librairie standard du langage n'est pas nécessaire.
Une application web ne se sert pas nécessairement que de l'URL pour définir (et potentiellement générer) la ressource à envoyer. En effet, une ou des en-têtes HTTP de la requête peuvent être utilisées. Il a donc fallu faire suivre les en-têtes du client web envoyés au proxy au service web "proxifié". Cela a pu être fait avec les 2 méthodes de récupération de ressources.
Certaines URLs commencent par
//
, ce qui indique qu'il faut deviner quel protocole utiliser. Le moyen employé pour gérer ce cas est de faire d'abord une requête en HTTPS (la version sécurisée de HTTP), puis renvoyer la réponse si elle est non nulle, sinon renvoyer la réponse de la requête en HTTP.Mon proxy peut nécessiter de passer par un proxy réseau non transparent pour accéder à Internet ou un autre réseau IP. C'est le cas dans un nombre non négligeables d'organisations, or certaines applications faites en interne peuvent n'être disponibles qu'en externe et le Web regorge d'exemples pour tester mon proxy. Il fallait donc que mon proxy puisse récupérer une ressource en passant par un proxy réseau non transparent. Cela a été implémenté avec les 2 méthodes de récupération de ressources et il y a plusieurs manières de configurer un proxy (paramètres HTTP GET, cookies, et fichiers INI).
La gestion du HTML
Il faut "proxifier" chaque URL d'un document HTML. Le HTML se manipule facilement via DOM et peut être parcouru avec XPath. Il parait donc assez simple de gérer le HTML. Ça l'est… dans la majorité des cas, mais quelques cas rares compliquent les choses.
Dans les cas triviaux, on peut citer (avec l'expression XPath) : des liens avec
a@href
, des images avecimg@src
, les scripts avecscript@src
, les frames avecframe@src
, des vidéos avecvideo@src
, et d'autres. Mais comme nous allons le voir, le HTML est plus compliqué que cela.Démarrons avec un cas méconnu si on a appris le HTML récemment, car notoirement obsolète : l'attribut
background
. Il permet de définir un fond avec l'URL d'une image pour un élément HTML. Pour séparer la structure de la forme, il faudrait utiliser du CSS. Mais il reste de veilles pages web et des personnes n'ayant pas mis à jour leurs connaissances, il a donc fallu gérer ce cas. Cet attribut n'est valide que sur//html/body
, mais en pratique certains sites web l'utilisent sur d'autres éléments (comme http://www.volonte-d.com/) et au moins Firefox prend en compte ce cas non standard, qu'il a fallu gérer.Poursuivons avec un cas inverse, que l'on ne connait bien que si on a des connaissances à jour : les images ! En effet, il y avait un temps où il y avait uniquement
img@src
. Cependant pour optimiser la bande passante et avoir une image matricielle d'une taille adaptée, il est maintenant possible de proposer plusieurs URLs pour différentes tailles et formats. La baliseimg
peut maintenant avoir un attributsrcset
, qui contient une ou plusieurs URLs séparées par des virgules et avec des indications de la qualité (par exemple<img srcset="img1.png 1x, img2.png 2x" />
). Il y a également la balisepicture
qui peut contenir une ou plusieurs balisessource
qui peuvent avoir un attributsrc
ousrcset
(//html/body/picture/source@srcset
a la même syntaxe que//html/body/img@src
).La naïveté peut laisser penser que les liens sont triviaux à gérer, c'est presque le cas. Les liens commençant par
http://
ethttps://
sont les plus courants et il faut les "proxifier", mais il y a d'autres cas. Tout d'abord, il n'y a pas que HTTP et HTTPS, il y a d'autres protocoles dont il peut y avoir des références sur le Web et qui ne sont pas gérés par mon proxy, le plus courant étant probablement l'historique FTP (File Transfer Protocol). De plus, il y a des liens sans protocoles pour l'attributhref
. En effet, il y a des liens d'actions (qui ne doivent pas être "proxifiés"), pour le courriel avecmailto:
, pour le téléphone avectel:
(défini dans la RFC 3966), pour le JavaScript avecjavascript:
(malgré qu'il y ait l'attribut facultatifonclick
et un événement associé en DOM 2), et pour une ressource d'un réseau pair-à-pair avec "magnet:
". Il y a également des liens avec un protocole implicite ! Ils commencent par//
et les clients web les remplacent parhttps://
ouhttp://
ou essayent l'un puis l'autre, il faut donc les "proxifier".Rediriger une page web peut se faire via HTTP, mais aussi en HTML. L'intérêt de la méthode en HTML est de pouvoir rediriger après un certain temps (en secondes) et potentiellement uniquement s'il n'y a pas de support JavaScript (en utilisant la balise
noscript
pour faire cette condition). Cela se fait avec une balisemeta
dans//html/head
(et sans autre parent) en indiquant un temps et potentiellement une URL (par exemple<meta http-equiv="refresh" content="5" />
ou<meta http-equiv="refresh" content="0; url=https://example.net/" />
). Il faut donc chercher ce genre de balise (par exemple avec/html/head/meta[lower-case(@http-equiv)='refresh' and contains(lower-case(@content), 'url=')]
en XPath 2.0), puis extraire l'URL, ensuite la "proxifier", et enfin changer la valeur de l'attribut tout en conservant le temps.Pour utiliser du CSS dans du HTML, il y a plusieurs possibilités. La méthode la plus utilisée et recommandée est de faire référence à un ou plusieurs fichiers via une balise
meta
avec un attributrel
avec la valeurstylesheet
en indiquant l'URL comme valeur de l'attributhref
. On peut également vouloir inclure du CSS dans le HTML, ce qui est une mauvaise pratique, mais elle est toujours permise par les navigateurs web. Il y a 2 moyens pour cela : la balisestyle
(/html//style[not(@type) or lower-case(@type)='text/css']
en XPath 2.0) et l'attributstyle
(/html/body[string(@style)] | /html/body//*[string(@style)]
). Il faut donc récupérer le CSS puis le "proxifier" et ensuite mettre la version "proxifiée" dans la balise.La gestion du CSS
Je n'y avais pas pensé au début, mais il peut y avoir des URLs dans du CSS. Elles peuvent par exemple servir pour définir un fond avec une image, inclure un autre fichier CSS, ou importer une police d'écriture
(depuis CSS3 avec@font-face
). Puisque le CSS sert pour la mise en page, il n'est pas négligeable, et a donc du être géré.J'ai identifié 2 situations où des URLs sont utilisées dans du CSS. La première et la plus courante est avec la "fonction"
url
en tant que valeur d'une propriété (par exemplebackground-image: url(image.png);
) Le paramètre peut contenir des espaces avant et après. De plus, il peut être entouré d'un séparateur (soit un guillemet simple soit un double guillemet, heureusement que les formes valides en ASCII sont prises en compte). Le deuxième cas est avec l'instruction@import
. Elle peut prendre directement une URL (avec les mêmes séparateurs que la "fonction"url
) (par exemple@import "style.css";
) ou via la "fonction"url
(par exemple@import url(style1.css);
).Même avec la version 7 de PHP (une version récente d'un langage de programmation orienté web), il n'y a pas de manipulateur lexical pour CSS dans la bibliothèque standard. Plutôt que d'ajouter une dépendance potentiellement non maintenue sur le long terme, j'ai écrit du code pour mon cas particulier. Cela a été motivé par le fait que CSS continue d'évoluer et qu'une avancée de ce dernier pourrait casser le fonctionnement d'un analyseur lexical. Néanmoins mon code souffre d'une limitation : il analyse le CSS ligne par ligne, or la valeur d'une propriété peut être définie sur plusieurs lignes (mais c'est peu courant notamment avec l'usage de programmes pour réduire la taille d'un fichier CSS comme clean-css et YUI Compressor). De plus, mon code ne "proxifie" pas toutes les URLs sur certaines lignes longues pour une raison inconnue. Un analyseur syntaxique de CSS pourrait être utilisé pour "proxifier" toutes les URLs (puisque mon code ne gère pas tous les cas), comme PHP-CSS-Parser de sabberworm, cssparser de Intekhab Rizvi, ou celui de Hord (pour lequel Debian a un paquet). Une option pourrait être ajoutée pour désactiver l'analyseur syntaxique au profit de mon code s'il venait à émettre une erreur fatale à cause d'un cas non géré (potentiellement nouveau) de CSS ou d'une approche moins laxiste que les navigateurs web (qui ont tendance à vouloir gérer à tout prix du code même non valide).
La gestion du HTTP
Hormis la ressource demandée par une requête HTTP, il peut y avoir au moins une URL pertinente à "proxifier" (mais cette fois à la réception d'une requête et pas en modifiant préalablement les éléments pouvant en engendrer). Un cas a été identifié : l'en-tête
Location
. Elle permet d'indiquer une nouvelle URL pour une ressource, expliqué autrement elle sert pour faire une redirection. C'est trivial à gérer si on a déjà le nécessaire pour "proxifier" une URL. En effet, chaque champ d'une requête a un intitulé et une valeur séparée par ":" et sur une seule ligne. C'est donc très simple à analyser et par extension de créer une structure de données pour le HTTP.La gestion du HTTP ne s'arrête néanmoins pas là. En effet, un serveur web répond à des requêtes HTTP, or le but de mon stage (et du projet qui en découle) est de rejouer une session web. Il faut donc à minima enregistrer les URLs demandées en extrayant chacune du paramètre GET correspondant. De plus, un serveur web ou une application peuvent répondre différemment en fonction des en-têtes HTTP (heureusement sinon aucun logiciel ne les utiliserait et elles seraient donc inutiles). Il y a donc un intérêt potentiel à les stocker (pour pouvoir reproduire exactement une session web) et en enlever certaines (que l'on peut juger superflues). Il a donc été fait en sorte de les enregistrer et des options ont été faites pour en enlever certaines.
Gérer les formulaires Web
Les formulaires web représentent un cas spécial. On pourrait naïvement penser que ce n'est qu'une question de HTML. Mais c'est légèrement plus compliqué que cela.
Pour les formulaires qui utilisent (implicitement ou explicitement) la méthode HTTP GET (
/html/body//form[not(@action) or (string(@action) and lower-case('@method')='get') or not(@method))]
en XPath 2.0), il s'agit purement de HTML. Les paramètres GET potentiellement présents dans l'URL de l'attributform@action
(qui définit à quelle URL envoyer les données du formulaire) sont ignorés, en effet ce sont les champs du formulaire qui sont passés en paramètres GET. Il faut donc créer un champ dans le formulaire (avec la baliseinput
) pour l'URL "proxifiée" et le cacher (ce qui se fait en créant un attributtype
et lui attribuant la valeurhidden
).Pour les formulaires utilisant la méthode HTTP POST (c'est l'unique autre possibilité), il faut "proxifier" l'URL de l'attribut action s'il y en a un. Une fois la requête POST reçu sur mon proxy, il faut détecter que c'est une méthode POST pour : la renvoyer en méthode POST au service "proxifié" (par défaut c'est la méthode GET qui est utilisée), ne pas essayer de "proxifier" le contenu, et ne pas renvoyer l'en-tête HTTP
Content-Length
(défini dans la section 14.13 de la RFC 2616) (ce qui peut faire échouer l'appel PHP à curl, probablement dans le cas où PHP ait encodé différemment le contenu et donc potentiellement changé la taille). Bien entendu, il faut aussi penser à enregistrer ces paramètres POST.La gestion du JavaScript
Je n'y avais pas pensé au début (alors que c'est évident quand on fait du web en 2017), mais le JavaScript peut être source de requêtes web. Il faut "proxifier" les URLs de ces requêtes, bien entendu avant qu'elles n'aient lieu. La première idée qui pourrait venir à l'esprit serait d'utiliser un analyseur syntaxique de JavaScript, ce qui serait très lourd et il en existe à priori qu'en C et C++ (comme V8 de Google qui est libre) (mais il est possible d'appeler des binaires issus de ces langages avec PHP). Heureusement il n'y a pas de moyen de faire des requêtes avec le langage uniquement (c'est-à-dire avec des mots-clés de ce dernier), il faut en effet utiliser la bibliothèque standard du JavaScript. En JavaScript, une fonction peut être redéfinie sans erreur, y compris celles de la bibliothèque standard, c'est considéré comme dangereux (à juste titre) par certains, mais cela peut être fort utile dans de rares cas, comme celui présentement décrit.
2 cas de fonctions à surcharger pour "proxifier" des URLs ont été identifiés et gérés. Dans chaque cas, il faut garder en mémoire la fonction actuelle (peut être qu'un autre script a déjà changé le comportement de base de la fonction), puis créer une nouvelle fonction qui "proxifie" le ou les arguments contenant potentiellement une ou plusieurs URLs, et enfin appeler la fonction à "proxifier" avec les arguments potentiellement modifiés, tout en retournant son résultat si elle en retourne un. Il ne reste ensuite plus qu'à surcharger, en donnant le même nom pour une fonction ou en modifiant le prototype de la classe pour une méthode d'instance (en effet le JavaScript a un système de classe par prototype qui diffère du modèle traditionnel présent par exemple en PHP et Java). Le terme "fonction" doit ici être compris comme une fonction en C ou en PHP, ce qui ne doit pas être confondu avec la notion de fonction en JavaScript, car celle-ci est bien plus large (les constructeurs et les méthodes sont aussi des fonctions et d'ailleurs défini avec le même mot-clé
function
).Le premier cas est facile à deviner, il s'agit de la fonction à laquelle on passe une URL pour une requête AJAX. C'est l'abréviation de "Asynchronous JavaScript and XML" et désigne un moyen de faire des requêtes synchrones ou asynchrones avec le langage JavaScript. Pour cela, il faut créer un objet de classe XMLHttpRequest (on passe ici sous silence partiel le cas de veilles versions d'Internet Explorer de Microsoft), ensuite définir un comportement (sous forme de fonction) pour le changement d'état (envoyé, reçu, etc.) puis utiliser sa méthode
open
, et enfin envoyer la requête avec la méthodesend
. Il suffit de "proxifier" le deuxième argument de la méthodeopen
(le premier étant pour la méthode HTTP).Le second cas est moins commun et je ne soupçonnais pas son existence. Il s'agit de l'inclusion dynamique (en JavaScript) de balise
script
avec un attributsrc
existant et avec une valeur non nulle. Cela déclenche la récupération du script (grâce à son URL issue de l'attributsrc
), puis l'exécute (ce qui permet d'éviter la fonctioneval
). Un élément DOM a une méthodesetAttribute
, il faut donc la "proxifier" quand elle est appelée sur une balisescript
et ne "proxifier" le second argument (qui correspond à la valeur de l'attribut) que quand le premier argument vaut (en étant insensible à la casse)src
(puisque cette balise peut avoir d'autres attributs commetype
).La configuration
Un certain nombre de choses est configurable. Il y a 4 catégories : le proxy pour faire des requêtes (une URL et un numéro de port), la capture de session (enregistrer ou pas, en-têtes HTTP à garder, etc.), le journal d'erreurs et d'avertissements (emplacement en tant que fichier, est-il publique ou non, etc.), et l'interface graphique (montrer des aides au débogage ou pas, afficher certains éléments facultatifs ou pas, etc.).
La configuration se fait via plusieurs sources et sous forme de cascade. En effet, une source peut avoir une valeur indéfinie, mais une source de moindre priorité peut avoir une valeur définie. De plus, certaines sources ne doivent pas pouvoir définir des valeurs pour certaines propriétés. Par exemple, une source venant du client web ne doit pas être en mesure de définir le chemin d'enregistrement du fichier journal (puisqu'il pourrait s'en servir pour écrire un fichier utilisé par une autre application). Pour configurer au niveau du serveur, il faut utiliser un ou plusieurs fichiers INI.
Les différentes sources de la plus prioritaire à celle qui l'est le moins est :
- les paramètres GET dans l'URL
- les cookies HTTP
- la session PHP
- un fichier INI spécifique à une catégorie dans le dossier de l'application
- un fichier INI général pour toutes les catégories dans le dossier de l'application
- un fichier INI général pour toutes les catégories dans un dossier système
- les valeurs par défaut (qui sont codées en dur)
Exemple de configuration (au format INI)
# Une ligne commençant par un croisillon "#" est un commentaire. # Le dièse "♯" ne marche pas. # Une section aurait pu être utilisée. proxy-url=https://proxy proxy-port=80 [session-captured] save-session=true save-cookies=false
Enregistrement des données
À chaque fois qu'une ressource est récupérée par le proxy, celui-ci doit pouvoir enregistrer la demande. L'enregistrement se fait dans le format XML, pour sa manipulation aisée (notamment via DOM, XPath, et XSLT), les nombreuses bibliothèques le gérant, le fait qu'il soit standardisé, et qu'il ne demande pas un serveur de gestion de bases de données. Néanmoins, l'enregistrement en XML est "isolé", de sorte qu'il soit facile (en ajoutant le code nécessaire) d'enregistrer dans un autre format (comme le JSON) ou avec un système de base de données (qui ajouterait une dépendance et une lourdeur) et d'ajouter une option pour choisir le format.
Un client web peut faire plusieurs requêtes simultanées (notamment pour réduire la latence avec HTTP 1). Or cela peut provoquer une écriture simultanée de nouveaux enregistrements, ce qui est presque certain de résulter en un fichier incorrect. Il a donc fallu mettre en place un verrou pour qu'un fichier d'enregistrement ne puisse être utilisé que pour un enregistrement à la fois. Cela a été fait avec la fonction
flock
(qui se base sur la fonction C du même nom). La mise en place et la gestion du verrou est dans une classe abstraite qui pourrait être réutilisée pour un autre format de fichier.Le proxy était à la base mono-utilisateur. En effet, toutes les données enregistrées étaient nécessairement dans un seul et même fichier. Pour que chaque utilisateur/utilisatrice n'ait pas à installer le proxy, il fallait qu'il soit mutualisable et donc capable de gérer plusieurs personnes. Plutôt qu'un processus de création d'un compte (qui aurait été lourd à utiliser et implémenter), un système d'identifiant de session a été mis en place. Concrètement une personne qui demande à créer une session d'enregistrement se voit retourner un identifiant textuel sous forme de cookie HTTP. Cet identifiant est un nombre pseudo-aléatoire (puisqu'il n'y a pas de réel aléatoire en informatique) obtenu avec une fonction réputée sûre pour la cryptographie (donc imprédictible) (dans mon cas la fonction
random_bytes
de PHP), ce qui permet de s'assurer que l'on ne puisse pas prédire l'identifiant des autres utilisateurs et utilisatrices. L'identifiant est utilisé comme une partie du nom de fichier, or le nom du fichier aurait été très grand avec la valeur en décimale et illisible avec la valeur en ASCII ou unicode, il est donc le résultat d'une fonction qui prend en entrée le nombre aléatoire et retourne une valeur en hexadécimale. La fonction de hashage SHA-512 a été utilisée, car elle a l'intérêt de créer très peu de collisions (2 valeurs d'entrée ayant la même valeur de sortie) et peut compliquer une attaque s'il venait à être découvert que la fonction n'est pas cryptographiquement sûr (puisqu'une fonction de hashage est censée ne pas avoir de fonction inverse).À tout cela, il manquait un élément clé. En effet, les données sont enregistrées pour rejouer un "session web", ce qui nécessite d'enregistrer des éléments techniques, mais également la temporalité de ceux-ci. Pour ce faire un timestamp POSIX (c'est-à-dire le nombre de secondes depuis le premier janvier 1970) est enregistré pour chaque requête. Ce format a l'avantage d'être simple et d'être très courant. Néanmoins la seconde (au format entier) n'est pas une unité très précise, puisqu'un client web sur un ordinateur moderne met moins d'une seconde pour demander différents éléments d'une page web, donc une fonction qui renvoie un timestamp avec les micro-secondes a été utilisée (il s'agit en l'occurrence de la fonction
microtime
).Conversion des données
Les données sont enregistrées dans un format de données en XML. J'ai moi-même inventé ce format qui est simple et reflète la manière dont les données sont manipulées par le proxy. Cependant les données ne sont pas enregistrées pour un usage interne au proxy, mais pour être données en entrée d'un programme de test de performance. Puisque mon tuteur travaille sur CLIF, c'est pour cet outil qu'il était nécessaire (dans le cadre du stage) de proposer un moyen de faire une conversion. Cependant il n'y aurait aucun problème technique à convertir aussi pour d'autres outils similaires.
CLIF peut jouer un scénario de test avec du code Java (un langage de programmation très répandu) ou avec des données en XML pour ISAC (qui est un jeu de mot recursif : ISAC is a Scenario Architecture for CLIF). Un moyen de convertir pour le format d'ISAC est de loin ce qui est le plus simple et ne pose aucun problème de limitation dans ce cas (il est possible de coder des comportements plus complexes en Java). C'est donc ce format qui a été choisi.
Convertir un XML en un autre XML est une volonté courante. La structuration de ce format permet d'envisager facilement de répondre à cette volonté, et un langage est même dédié à cela : XSLT. La conversion est presque entièrement faite en XSLT (en moins de 300 lignes de codes), malgré des différences non négligeables (notamment la manière d'enregistrer les en-têtes HTTP). Cela a été fait en utilisant la version 1.0 du langage XSLT, car la version 2.0 apporte très peu et n'est à priori gérée que par 2 implémentations libres (Saxon-B XSLT et Saxon-HE XSLT).
Le seul élément que je n'ai pas réussi à convertir avec XSLT est le temps. En effet, mon proxy enregistre le timestamp de chaque requête alors qu'ISAC a besoin du temps entre chaque requête. Il faut donc vérifier pour chaque requête qu'il y a en une suivante (ou précédente), puis faire la soustraction des timestamp, pour ensuite ajouter un élément entre les 2 indiquant le temps qui les sépare. Il a donc fallu faire un script, à appeler avant la conversion XSLT, pour ajouter cette pause.
L'exécution du script et l'appel de la conversion XSLT sont faits en JavaScript sur le client web. L'opération est presque instantanée avec un ordinateur moderne, néanmoins c'est très dépendant de l'ampleur des données à convertir. L'avantage que ce soit le client web qui fasse l'opération est que le serveur ne nécessite pas les ressources pour cela.
Exemple de données enregistrées par mon proxy
<?xml version="1.0" encoding="UTF-8"?> <session> <resource> <url value="https://www.w3.org/XML/" /> </resource> <pause value="5003.14" unit="ms" /> <resource> <url value="http://clif.ow2.org/" /> <method value="GET" /> <timeRequest value="1497965627.5526" unit="ms" type="unix-timestamp" /> <timeResponse value="1497965627.6498" unit="ms" type="unix-timestamp" /> <headers from="client"> <header key="User-Agent" value="Mozilla/5.0 (X11; i686) Firefox/45" /> <header key="Accept-Language" value="en-us"/> <header key="Connection" value="keep-alive" /> <header key="If-Modified-Since" value="Wed, 28 Oct 2015 15:47:33 GMT" /> <header key="Cache-Control" value="max-age=0" /> </headers> <proxy url="https://proxy" port="80" /> </resource> </session>
Exemple de données converties pour ISAC de CLIF
<?xml version="1.0" encoding="utf-8"?> <scenario> <behaviors> <plugins> <use id="replayHttp" name="HttpInjector" /> <use id="replayTimer" name="ConstantTimer" /> </plugins> <behavior id="session"> <sample use="replayHttp"> <params> <param name="uri" value="https://www.w3.org/XML/" /> </params> </sample> <timer use="replayTimer" name="sleep"> <params> <param name="duration_arg" value="5003" /> </params> </timer> <sample use="replayHttp" name="get"> <params> <param name="uri" value="http://clif.ow2.org/" /> <param name="headers" value="header=User-Agent|value=Mozilla/5.0 (X11\; i686) Firefox/45|;header=Accept-Language|value=en-us|;header=Connection|value=keep-alive|;header=If-Modified-Since|value=Wed, 28 Oct 2015 15:47:33 GMT|;header=Cache-Control|value=max-age=0|;" /> <param name="proxyhost" value="https://proxy" /> <param name="proxyport" value="80" /> </params> </sample> </behavior> </behaviors> </scenario>
L’API Web
Une API (Application Programming Interface) web basique a été faite. Elle ne s'appuie ni sur XML ni sur JSON (qui sont beaucoup utilisés pour faire une API web). En effet, elle utilise les paramètres GET (en entrée uniquement), les cookies HTTP (en entrée et en sortie), et le contenu HTTP (en sortie uniquement). Elle permet de "proxifier" une ressource, gérer une session (créer, détruire, et en recréer une qui écrase l'actuelle), obtenir les données de la session dans mon format, et d'obtenir la configuration au format HTML (il pourrait être utile de faire de même en JSON et/ou XML). Elle est utilisée par l'application, mais elle pourrait être utilisée par une application tierce. Elle est plus amplement documentée dans un fichier qui est converti en page web et accessible depuis le menu du proxy.
L’interface graphique
L'interface graphique est visuellement rudimentaire, mais elle est facile à utiliser et est adaptée à un écran de mobile. La page d'accueil permet de gérer une session (en utilisant l'API web qui peut rediriger vers la page précédente), d'être envoyé sur le formulaire pour "proxifier", de télécharger les données de la session (s'il y en a), et de gérer la configuration.
Il est possible de télécharger les données de la session telles qu'elles sont enregistées par mon proxy. Il est également possible de télécharger les données converties. La conversion est pour l'instant possible uniquement pour CLIF, mais il serait facile d'ajouter le nécessaire dans l'interface graphique pour d'autres outils similaires. Pour récupérer les données converties, il y a un formulaire pré-rempli avec les données de mon proxy (récupérées via l'API grâce à une requête AJAX) qui fait la conversion dans le format sélectionné au moindre changement dans les données d'entrée dans le client web (pour éviter que le serveur ait à faire ce traitement) et en utilisant "uniquement" du JavaScript (mais le JavaScript peut utiliser du XSLT).
La configuration se fait via des formulaires. Actuellement, ils sont gérés uniquement en JavaScript, mais il serait possible d'ajouter une gestion sans JavaScript. L'avantage de passer par JavaScript est de pouvoir afficher la nouvelle configuration effective sans recharger la page et sans soumettre le formulaire pour les cases à cocher (en positionnant des cookies dans ce langage et en utilisant des requêtes AJAX avec l'API web pour la configuration).
L’installation facile
Il n'y avait aucune certitude que quelqu'un continue régulièrement de développer l'outil, il fallait donc considérer par précaution qu'il n'y aurait que moi qui en aurait une bonne connaissance technique. Il faut donc que l'installation soit facile, même sans moi, pour éviter que ce que j'ai créé tombe dans l'oubli.
La partie cliente nécessite un navigateur web avec JavaScript, comme Mozilla Firefox ou Chromium, ce qui est très simple à installer et très courant. La partie serveur est faite en PHP (dans sa version 7), qui est très courant pour faire un site web ou une application web. C'est un langage de script sans compilation, il suffit donc d'appeler un script PHP avec un interpréteur adéquat (ainsi que la bibliothèque standard) pour l'exécuter avec succès. Pour appeler automatiquement les scripts via le web, il faut un serveur web gérant CGI (Common Gateway Interface). Il y a pour cela Apache qui est libre (sous licence Apache 2.0), fonctionne sur les principaux systèmes utilisés pour faire serveur (GNU/Linux, les BSD, Microsoft Windows, et Apple macOS), packagé par les principales distributions GNU/Linux (notamment Debian, RHEL/CentOS, et Ubuntu) et est le logiciel faisant serveur web le plus utilisé au monde. Cela n'a pas été testé, mais il ne devrait pas y avoir de problème avec nginx qui est le principal concurrent libre. Les pré-requis pour l'installation et l'usage sont donc, aussi bien au niveau client que serveur, simples et courants, tout en ne nécessitant pas du logiciel privateur.
Ce que j'ai créé ne s'appuie sur rien de spécifique à un système d'exploitation (y compris pour écrire de potentielles données de sessions et de potentiels journaux d'erreurs ou avertissements) et n'a besoin que de la bibliothèque standard de PHP, déposer le code source à un endroit où un serveur web va chercher des ressources et potentiellement exécuter du code PHP (en version 7) suffit pour installer et faire fonctionner la partie serveur. Cette méthode est simple et ne nécessite que d'avoir des droits d'écriture dans un dossier qu'un serveur web utilise.
Le paquet Debian
Il y a de fortes probabilités pour que mon outil soit utilisé sur un système Debian ou un dérivé (comme Ubuntu, Mint, et Trisquel GNU/Linux). La manière propre et usuelle pour installer un élément sur un de ces systèmes est de passer par un ou des paquets Debian (qui sont des archives organisées d'une certaine manière et ont usuellement deb comme extension). Un paquet Debian a des avantages (par rapport à une installation par copier/coller), tels que pouvoir être facilement mis à disposition via un dépôt de paquets, contenir des méta-données (comme la version, un journal des modifications synthétique, et la licence de chaque fichier du paquet source), permettre l'installation automatique des dépendances (avec APT ou un outillage similaire), et il peut être vérifié qu'il suit les bonnes pratiques. Il a donc été décidé de faire un paquet Debian, ou plutôt un moyen automatique et aisé d'en faire un.
Le plus gros du travail est fait par
dh_make
, qui est un programme libre qui automatise de nombreuses parties de la construction d'un paquet Debian propre. Hormis le fichier control (qui contient une partie importante des méta-données) et le fichier copyright (qui indique des informations vis-à-vis des auteurs/autrices et des licences), il a essentiellement fallu faire une règleinstall
et une autreuninstall
dans le makefile (qui permettent respectivement, par logique élémentaire et convention, d'installer et de désinstaller un projet utilisable) (en utilisant le paramètre facultatifDESTDIR
, qui permet par exemple de faire une installation à un emplacement où il n'y a pas besoin de privilèges d'écriture de SuperUser/root) quedh_make
utilise automatiquement, comme la règletest
(quand elle existe) qui lui permet de tester que les tests passent avant une potentielle construction du paquet.La construction est faite avec debuild qui appelle le programme Lintian. Celui-ci fait des tests sur les paquets et signale des erreurs pour les problèmes graves (qui ne sont pas tolérés pour un paquet dans l'archive Debian officiel) ainsi que des avertissements pour les problèmes non significatifs (mais dont l'évaluation pourrait changer à l'avenir) (comme des fichiers sans licence ou l'inclusion de jQuery alors que cette bibliothèque JavaScript est déjà packagée dans libjs-jquery et ne devrait pas être installée plusieurs fois). Toutes les erreurs et avertissements ont été corrigés, mais il y aurait probablement des petites choses à améliorer. La création automatique du paquet en génère donc un de qualité, bien qu'il ne soit pas parfait.
Possibilités pour améliorer les performances
- Réécrire le logiciel en langage Go : c'est un langage avec 2 implémentations libres (l'officielle et gccgo), qui peut se compiler en code natif (contrairement à PHP) et est adapté pour le Web (ce dont on peut se douter quand on connait son auteur, à savoir Google)
- Réécrire les parties nécessitant une puissance de calcul non négligeable en C ou C++ et les appeler en PHP (le C peut aussi être appelé en Go)
- Actuellement, il y a une classe par cas à gérer (lien, image, formulaire, script, etc.), ce qui permet de décomposer au maximum. Pour les documents HTML, chaque classe fait une requête XPath. Il serait possible d'en faire moins avec une classe qui aurait plus de responsabilités, au détriment de la qualité et maintenabilité du code source.
- Manipuler le HTML en JavaScript sur le client : cela déchargerait notablement le serveur, mais cela nécessiterait la gestion du JavaScript sur le client et il faudrait arriver à faire les changements d'URL avant que le client web ne les utilise pour obtenir les ressources correspondantes.
- Mon proxy récupère toutes les ressources demandées, mais il n'a aucun mécanisme de cache, ce qui peut le conduire à demander inutilement une même ressource plusieurs fois. Une solution serait d'implémenter un mécanisme de cache dans mon proxy, cela demanderait du temps mais aurait l'avantage que ce soit intégré et donc installé automatiquement. Une autre solution est de le faire utiliser un proxy web (comme Squid, Polipo, ou Varnish HTTP Cache), ce qui est facile et permet de ne pas recréer la roue, ainsi que d'être optimisé et déjà testé. Cette possibilité d'ajouter un cache n'a d'intérêt que s'il y a plusieurs utilisateurs/utilisatrices, si plusieurs clients web ne partageant pas un cache commun sont utilisés, ou si au moins un des clients web utilisés n'a pas de cache.
Et après ?
Il reste des cas non gérés ou mal gérés, comme la "proxification" des URLs dans le CSS, l'attribut pour l'intégrité en HTML, et un problème d'encodage sur de rares sites web. De plus, l'interface graphique est fonctionnelle et simple, mais a une apparence graphique très sobre, ce qui pourrait être changé par exemple avec un style CSS pré-existant comme KNACSS (qui est sous licence WTFPL), Milligram ou Twitter Bootstrap (qui sont sous la licence libre "MIT"). Il y a donc des choses à faire pour améliorer l'existant.
On peut aussi vouloir aller au-delà. Il pourrait par exemple être intéressant de faire un moyen d'exporter les données pour Apache JMeter et Tsung, qui sont 2 outils libres qui peuvent prendre du XML en entrée et qui sont packagés par la majorité des distributions GNU/Linux. Les flux de syndication (au format Atom et RSS) ne sont pas gérés, or certains navigateurs web les gèrent. De plus, on pourrait imaginer une séparation de l'API web et de l'interface graphique en 2 services différents (mais dont l'un dépend de l'autre), ce qui faciliterait la contribution à une seule des 2 parties et simplifierait la maintenance de chacune.
Il y a de nombreux tests unitaires, du moins pour PHP (qui représente la vaste majorité du code). Ainsi pour environ 15 000 lignes de codes PHP utilisés dans l'application, il y a environ 10 000 lignes de tests unitaires en PHP (chiffres obtenus respectivement avec
wc -l src/include/php/class/*
etwc -l tests/php/*
, ce qui inclut les commentaires dont les en-têtes pour spécifier la licence de chaque fichier, les lignes vides, etc.). Il y a également d'autres tests automatiques et pas uniquement sur le code PHP. Il y a donc un filet de sécurité si l'on veut contribuer sans casser le fonctionnement et écrire le code en respectant certaines règles (pour qu'il garde une certaine homogénéité et soit donc plus facile à lire que s'il n'en avait pas). Puisque les 2 langages de programmation utilisés sont PHP et JavaScript (on fait ici exception du XSLT qui représente environ 300 lignes de code, ainsi que de HTML et CSS que tout développeur/développeuse web connait), il est facile de trouver une personne compétente pour modifier le code, car ce sont des langages courants et qui ne disparaitront pas avant de nombreuses années.Pourquoi ce nom ?
Le nom originel est CLIF Web Proxy (d'où le logo qui n'a pas été modifié par la suite). C'était trivial et ça reflétait bien le projet, un proxy web pour le logiciel CLIF pour celles et ceux qui auraient directement sauté à cette partie (ou presque). Puisque le logiciel que j'ai produit peut être utilisé comme simple proxy web et qu'il pourrait servir pour d'autres logiciels de test de charge que CLIF, j'ai décidé de lui donner un nom plus général.
Continuant dans mon imagination prodigieuse, je l'ai nommé RyDroid Web Proxy. Cela permet de rendre hommage au Créateur Suprême. En effet, RyDroid est un pseudonyme qu'il utilise couramment sur Internet. Certains racontent que c'est un mégalomane, tandis que d'autres prétendent qu'il avait bien peu d'imagination (au moins à ce moment là), je vous laisse vous faire votre avis. Après tant d'explications techniques, vous me ou lui (c'est qu'on se perd !) pardonnerez un moment de déconne et ça peut permettre de faire émerger un sourire avant la conclusion (quel sens de la transition !).
Conclusion
J'ai réalisé un proxy pour enregistrer une session web et la sauvegarder dans un format pour un outil de test de charge (en l'occurrence CLIF). Il est utilisable en l'état, mais il y a des manques qui peuvent être dérangeants dans certaines situations, et des fonctionnalités additionnelles qui pourraient être plaisantes. 2 moyens simples d'installation sont proposés, ce qui facilite l'utilisation de ma réalisation technique.
Celle-ci a été publiée via Internet sous une licence libre, ce qui en fait un bien commun. De plus, il ne dépend que de technologies libres, ce qui permet d'avoir un contrôle total sur ce qu'il fait, mais aussi sur son évolution future, à laquelle un ou plusieurs autres contribueront potentiellement. Grâce au copyleft, les personnes distribuant des versions modifiées ont l'obligation légale de mettre leurs apports dans le pot commun, et ainsi créer un cercle vertueux qui ne soit pas basé sur l'exclusivité.
Bonnes captures Web et vive le logiciel libre !
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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.
Il n’y a pas de grosses différences avec la dernière version de Qupzilla 2.2.6, c’est essentiellement une transposition vers le système de construction de KDE. Il faut bien commencer.- lien n°1 : Falkon.org
- lien n°2 : Qupzilla
- lien n°3 : L’annonce de la mutation
- lien n°4 : Journal des modifications
Les utilisateurs de Konqueror seront en terrain familier pour la partie Web et le menu de configuration, en revanche la navigation de fichiers n’est pas encore intégrée. Il faut bien commencer (bis).
Falkon protège bien votre vie privée (gestion des Cookies, de JavaScript, de HTML 5, Do Not Track), vous propose un greffon Flash (Pepper Flash), plusieurs moteurs de recherche (Duck Duck Go par défaut), un gestionnaire de sessions, des onglets avec indicateurs, un traducteur de pages Web, un validateur de code, des thèmes, une page « Speed Dial » facile à gérer, retrouve le contenu du formulaire quand on fait « précédent » — je reprends ma respiration, regardez les images :
Les indicateurs (cliquables) sur les onglets :
Le (très pratique) gestionnaire de sessions :
Le (sympathique) menu déroulant « clic droit » :Et comme il est jeune et crashe un peu, Falkon recharge automatiquement tous les onglets ouverts. À ce stade, vous le constatez sans doute, c’est dans l’esprit de KDE : un mélange de simplicité et de « super‐pouvoirs » à portée de configuration.
Quelques extensions disponibles :
- AdBlock, (San Ku Kaï c’est la bataille) contre les pubs ;
- KWallet Passwords, un portefeuille pour les gérer tous ;
- Vertical Tabs, les onglets bien dégagés sur les oreilles ;
- AutoScroll, pour les claustros qui craignent les ascenseurs ;
- Flash Cookie Manager, protège plus que plus la vie privée ;
- GreaseMonkey, soyez le maîîîître du navigateur (scripts dispos sur http://openuserjs.org/) ;
- ImageFinder, qui recherche par l’image, par l’image trouvera ;
- Mouse Gesture, pour les souriceaux maniaques ;
- PIM, pour jouer dans les formulaires ;
- StatusBar Icons, oh que c’est zouli ces petites friandises là en bas !
- Tab Manager, « Onglets ! Au rapport ! »
Les WebExtensions qui sont déjà gérées par Chrome/Chromium, Firefox, Edge et Opera ont encore un long chemin à parcourir.
L’extension ImageFinder en menu déroulant :
L’extension Vertical Tabs en mode hiérarchique :D’ores et déjà, Falkon est un navigateur à mon goût : avec toutes les extensions, plusieurs onglets et trois fenêtres ouvertes, il tourne comme un charme sans charger le système ; je n’ai pas de problème sur les sites Web, ou alors tellement mineurs que je fais avec.
Falkon est disponible pour GNU/Linux dans vos distributions et aussi en AppImage et Flatpak (via le dépôt KDE), sous Windows (à partir de Win 7) et macOS (à venir).
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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
- [France Culture] Que reste‐t‐il du logiciel libre ?
- [RFI] Software Heritage, la grande bibliothèque du logiciel
- [Numerama] Open source : qui sont les bons élèves et les cancres parmi les géants de la tech ?
- [BFMtv] Pourquoi les mèmes sur Internet sont en danger
- lien n°1 : April
- lien n°2 : Revue de presse de l’April
- lien n°3 : Revue de presse de la semaine précédente
[Numéro Magazine] Portrait de l’artiste en hackeur qui détourne les nouvelles technologies
Par Ingrid Luquet‐Gad, le jeudi 14 juin 2018. Extrait :« Algorithmes, codage, datas, hardware… comment les artistes détournent‐ils les nouvelles technologies ? C’est la question vertigineuse à laquelle répond une double exposition au centre Pompidou, avec l’artiste japonais Ryoji Ikeda en invité d’honneur. »
[France Culture] Que reste‐t‐il du logiciel libre ?
Par Hervé Gardette, le mercredi 13 juin 2018. Extrait :« Microsoft vient de racheter la plate‐forme de création collaborative de logiciels GitHub. Est‐ce vraiment une bonne nouvelle pour le logiciel libre ? Et quelles conséquences pour les utilisateurs ? La philosophie du libre a‐t‐elle gagné ou s’est‐elle fait manger ? »
Et aussi :
[RFI] Software Heritage, la grande bibliothèque du logiciel
Par Dominique Desaunay, le mercredi 13 juin 2018. Extrait :« La plupart des activités humaines dépendent exclusivement des programmes informatiques qui permettent, par exemple, aux internautes de consulter leurs réseaux sociaux ainsi que de surfer sur n’importe quelle page Web. Des logiciels fragiles qui contrairement aux hiéroglyphes gravés dans la pierre peuvent s’altérer avec le temps et disparaître à jamais. C’est la raison pour laquelle les informaticiens de l’Institut national de recherche en informatique et en automatique ont développé une immense bibliothèque en ligne dénommée Software Heritage. »
Et aussi :
- [les-infostrateges.com] Software Heritage : une bibliothèque au service de l’archive universelle des logiciels ;
- [Industrie et Technologies] Software Heritage : les logiciels ont leur bibliothèque d’Alexandrie.
[Numerama] Open source : qui sont les bons élèves et les cancres parmi les géants de la tech ?
Par Victoria Castro, le mardi 12 juin 2018. Extrait :« Tout le monde dit aimer l’open source, mais qu’en est‐il vraiment ? Nous avons dressé un classement de 6 géants de la tech, du plus grand sympathisant de l’ouverture au plus propriétaire d’entre eux. »
[BFMtv] Pourquoi les mèmes sur Internet sont en danger
Par Elsa Trujillo, le lundi 11 juin 2018. Extrait :« L’article 13 d’un projet de directive européenne sur le droit d’auteur entend limiter drastiquement la réutilisation de contenus protégés. »
Et aussi :
- [Usbek & Rica] Adieu mèmes et parodies ? Pourquoi « l’article 13 » menace Internet ;
- [RTL.fr] Un projet de loi européen voté le 20 juin va‐t‐il changer la face du Web ? ;
- [Konbini France] Les gifs et les mèmes sont‐ils en danger de mort ?.
Voir aussi :
- Sauvons le partage de code ! Appel à signature de la lettre ouverte « Save Code Share » ;
- Campagne « Save Your Internet » (agir avant le 20 juin 2018).
Commentaires : voir le flux atom ouvrir dans le navigateur
-
PyConFR 2018, du 4 au 7 octobre à Lille : appel à contributions
La PyConFR, c’est le rassemblement annuel francophone de passionnés et curieux du langage Python. Cette année, on invite la communauté à se retrouver à Lille du 4 au 7 octobre.
Pour ceux qui ne connaissent pas la formule, les deux premiers jours (jeudi et vendredi) sont dédiés à des sprints (hackathons), et le week‐end sera rempli de conférences et d’ateliers découverte.
Contribuez à cette édition et aidez‐nous à la rendre mémorable en proposant du contenu : conférences, ateliers, sprints !
Quelques idées de sujets : enseignement du langage, montée en charge (scaling), sécurité, science des données, apprentissage automatique (machine learning), retour d’expérience, empaquetage, présentation d’une bibliothèque, Internet des objets (IoT), asynchrone, communauté, diversité, pyre-check, 2to3, PyPy, Python vs Go, intégration et livraison continues (CI/CD), stockage de données, agents conversationnels (chatbots), Python magic, Ansible vs SaltStack et tellement d’autres…
- lien n°1 : PyConFR 2018
- lien n°2 : AFPy
- lien n°3 : L’appel à proposition
- lien n°4 : Soumettre une proposition
- lien n°5 : Suivez‐nous sur Twitter
- lien n°6 : Meetup Python Lille
- lien n°7 : Martine découvre Python
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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.
La carte peut être utilisée de façon autonome avec le logiciel embarqué de démo en se connectant sur une page Web (MQTT d’Eclipse Paho). Mais passer par Internet via un broker MQTT public n’est peut‐être pas idéal pour tous, donc une autre solution est tout aussi envisageable via une passerelle locale (et optionnellement accessible à distance).Naturellement, ce microcontrôleur (MCU) ESP8266 peut être aussi reprogrammé, c’est une alternative intéressante aux populaires Arduino car un bloc Wi‐Fi (pas libre ?) est intégré au MCU.
- lien n°1 : Commander l’ANAVI Light Controller sur Crowd Supply
- lien n°2 : Vidéo de démo avec Mozilla Web Things
Pour ma part, j’ai eu la chance de tester le produit, ça fait le job comme on dit ! Mais je vous invite à lire la revue en français sur le blog Framboise314.
Pour utiliser une passerelle locale, il faut préalablement installer Mozilla IoT Gateway sur Raspberry Pi et reprogrammer le MCU avec mon implémentation de RGBLamp qui utilise l’API WebThings de Mozilla se connectant ensuite via mDNS, HTTP, REST (voir vidéo)…
Pour ceux qui ne veulent pas faire un pas hors de leur système d’exploitation préféré, considérez le précédent produit de Léon pour Raspberry Pi.
Finalement, si vous utilisez Mozilla IoT, les retours sont bienvenus.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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.
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.
- lien n°1 : Commander l'ANAVI Light Controller sur Crowd Supply
- lien n°2 : Video de demo avec Mozilla Web Things
Pour ma part, j'ai eu la chance de tester le produit, ça fait le job comme on dit ! mais je vous invite à lire la 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)….
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é)
Tribune de modération (résumé)
- peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
- du spam
- améliorations de CSS proposées par voxdemonix
- les admins du site ont des facilités techniques pour traquer les spammeurs et les multis, par rapport aux modérateurs
- retour des Geek Faeries
Commits/pushs de code https://github.com/linuxfrorg/
- (springcleaning) admin-linuxfr.org en cours de conversion vers Ansible
- Allow users to choose the source for their tribune smileys in prefere…
- Add a border for missing title on images
- Fix max height for image on computer screen
Divers
- Geek Faëries, c'était du 1er au 3 juin : conférence « LinuxFr.org, 20 ans que ça geeke » et table ronde « Ces plates‐formes du Libre qui soutiennent les communautés » avec l'Agenda du Libre et En Vente Libre. Encore plein de mercis à Bookynette pour le Village du libre, à l'équipe organisatrice des GF, et à Marco et Marius pour l'hébergement.
- RMLL 2018 Strasbourg : conférence LinuxFr.org : les 20 ans d'un espace d'apprentissage, de communication et d'échange, table ronde Ces plateformes du Libre qui soutiennent les communautés (même thème que celle tenue aux Geek Faëries) et stand
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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é)
Tribune de modération (résumé)
- peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
- du spam
- améliorations de CSS proposées par voxdemonix
- les admins du site ont des facilités techniques pour traquer les spammeurs et les multis, par rapport aux modérateurs
- retour des Geek Faeries
Commits/pushs de code https://github.com/linuxfrorg/
- (springcleaning) admin-linuxfr.org en cours de conversion vers Ansible
- Allow users to choose the source for their tribune smileys in prefere…
- Add a border for missing title on images
- Fix max height for image on computer screen
Divers
- Geek Faëries, c'était du 1er au 3 juin : conférence « LinuxFr.org, 20 ans que ça geeke » et table ronde « Ces plates‐formes du Libre qui soutiennent les communautés » avec l'Agenda du Libre et En Vente Libre. Encore plein de mercis à Bookynette pour le Village du libre, à l'équipe organisatrice des GF, et à Marco et Marius pour l'hébergement.
- RMLL 2018 Strasbourg : conférence LinuxFr.org : les 20 ans d'un espace d'apprentissage, de communication et d'échange , table ronde Ces plateformes du Libre qui soutiennent les communautés (même thème que celle tenue aux Geek Faëries) et stand
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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.- sans oublier le petit message de remerciement du sieur de Raadt.
Colin Percival, auteur en 2005 de:
- un papier sur les attaques via les caches, Cache Missing for Fun and Profit
- un article qui cible plus particulièrement les risques liés à l'Hyper-threading
en remet une couche:
« I think it's worth mentioning that one of the big lessons from 2005 is that side channel attacks become much easier if you're executing on the same core as your victim »
Je pense qu'il est bon de rappeler cette grande leçon de 2005: une attaque enside channel
est tellement plus facile si vous l'exécutez sur le même cœur que votre victime.Cuisine
Intel n'est jamais clairement impliqué; mais je précise, comme ça, en passant, que l'Hyper-Threading est une implémentation Intel du Simultaneous Multi Threading.
Il s'agit de faire exécuter en parallèle, sur un même cœur, plusieurs unités fonctionnelles ou de calcul.
Et pour rendre cette technique efficace et moins gourmande en ressource, cette implémentation partage aussi les caches mémoires.Keep systems protected, efficient, and manageable while minimizing impact on productivity
Conclusion
Toutes les solutions de sécurité aujourd’hui ne sont que des châteaux forts construit sur du sable.
Si encore une fois, la désactivation de l'Hyper-threading pourrait même avoir des effets positifs sur les performances, autant en finir une fois pour toute.
Retour aux origines:
- un partage complet sans protection des ressources
- plus de mode protégé
- pas même de segmentation mémoire
Vos machines iront encore plus vite. Enfin, j'espère.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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
- Au début était le cube
- Il est gros vot manchot ?
- Et si on l’écartelait ?
- Mais quand est-ce qu’on coupe ?
- Et si on l’empalait ?
- On l’empale plus ?
- Parlons peu, parlons kerf
- C’est la lutte finale
- Le petit oiseau va sortir
- TuxOlaser
- Déboitage du tux et montage
- Tadaaaa
- A propos de licences
- Les fichiers
Tranche de pingouin
Chose promise, cause perdue. Voici comment transformer un modèle 3D en tranches de bois pour découpe laser. Et en bonus, mon essai initial de découpe en création originale.
Les outils que j’ai utilisé sont blender et inkscape, et ce juste parce que je les connaissais et donc plus facile pour expérimenter.Note aux amateurs de freecad, j’ai commencé à regarder comment ça marche, au cas où ce serait plus simple avec, si jamais je trouve une idée et le courage de refaire un tuto, ça me fera un zeugma.
Au début était le cube
Ouvrir un nouveau fichier dans blender et mettre la scène en métrique, car sinon les mesures ne sont pas fixées par taille réelle. Notez que à chaque étape du tuto on aura des soucis de conversion de dimensions, donc en fait… mais bon faut pas en profiter pour être négligent.
Retirer le cube et ajouter le Tux à la scène. Vous pouvez le trouver ainsi que toutes les licences à Tuuuuuuux
- Faire face au tux (1 au pavé num)
- Mettre la vue iso (5 au pavé num)
- sélectionner le tux
- passer en editor mode (tab)
- Sélectionner le dessous des pattes (B) qui est rond
- Niveler (SZ0)
- sélectionner les deux centres des pattes, (S) Snap cursor to selected
- rebasculer en object mode (tab) , transform origine to 3d cursor (object/transform)
Maintenant, le tux est calé pour avoir le plancher des pattes en comme origine, à la verticale du pseudo centre de gravité que nous venons de choisir.
mettre la bête en Z 0.
Il est gros vot manchot ?
Il nous faut choisir une taille, suffisamment grosse pour que ce soit cool, et pas trop gros pour limiter le prix. Comme l’objet c’est aussi tester une bonne quantité d’épaisseurs pour voir comment ajuster la taille théorique d’une planche par rapport à sa taille réelle (il reste du vide, la colle ça épaissit, les planches sont pas forcément pile à la taille).
Une planche 2mm chez sculpteo (chez qui je teste la découpe laser) fait 94cm*59cm, il faut aussi essayer de rester dans une seule planche avec tous les morceaux. Le tux est presque aussi large que haut, du coup on cherche une approximation de cube découpé en tranches et étalé fait la même surface en gardant un peu de marge. ça fait 55 tranches, donc une hauteur de 116.875mm
Et si on l’écartelait ?
Il nous faut séparer les pattes du corps du tux (ce sont des objets distincts dans le modèle de base en fait et elles s’interconnectent :
Il faut les réunir par booléen union au corps pour avoir un seul objet avec un intérieur/extérieur propre.On peut maintenant appliquer une subdivision sur le tux CTRL+3, parce que le tux aime la douceur, et pas que celle angevine.
Lui sculpter des yeux plus sympa, parce que même si tout le monde ne veut pas l’avouer, pour avoir l’air cool faut quand même avoir un peu l’air con.
Mais quand est-ce qu’on coupe ?
Patience, il faut regarder un peu avant de couper. Placer un plan plus grand que le tux au sol, genre 20cmx20cm et lui appliquer un booléen d’intersection avec le tux. Et regarder en bougeant le plan sur Z comment seront les tranches.
On voit deux endroits à problème, les ailes et la queue qui auront des tranches avec plus que un morceau, ce qui est plus complexe à coller.
par ex les ailes :
Ce sera lourd à coller ensuite, on peut mais pourquoi…
autant relier les ailes au tronc le plus légèrement possible, avec un lien de 1mm de large.
idem au niveau de la queue :J’ajoute un bloc en union au niveau de la queue, le plus ajusté possible par un booléen union.
Cela vous permettra de facilement coller, il sera toujours possible de le limer après collage.
Il faut bien nettoyer le résultat de l’union à l’intérieur du tux, ne pas laisser de cloisons internes, c’est à dire éviter d’avoir des plan à l’intérieur des plans :
Finir de nettoyer en retirant les doublons de vertices, boucher les trous, assurer les normales pour que ce soit clair ce qui est à l’intérieur et à l’extérieur.
Et si on l’empalait ?
Pensons au support central qui va nous permettre de facilement positionner et coller les tranches de tux, il va être en trapèze et ressembler à ça au niveau d’une tranche :
Le choix de la découpe sera donc toujours du côté le plus grand, en bas. Donc notre référence pour le positionnement des plans de découpe doit être la face basse de chaque tranche.
Replaçons le plan à 0.01mm en Z (pour éviter le chevauchement parfait des surface avec les pattes Z=0), pensez à remettre tous les éléments avec scale=1 (Ctrl+A scale and rotation) pour la suite.
Faire une array de 50 plans en Z espacés de 2.125mm, faire le booléen intersection avec le tux. Lors de la réalisation de mon bureau réel avec des tux, j’ai constaté que l’empilage de x tranches de 2mm n’a pas un résultat de x*2mm, mais avec l’air restant et la colle environ 2.125. Je vais affiner avec ce tux cette estimation mais déjà on part de 2.125mm par tranche.
On voit les tranches et on voit des petits problèmesUne tranche qui manque en haut et le cul qui a une mini tranche en bas.
Diminuer le overlap thresold du booléen pour que le problème du haut disparaisse :Remonter le point du bas du tux pour supprimer le second problème et non, ce n'est pas lui mettre un doigt dans le cul car ça ne doit pas rentrer :
Nickel !
Simulons une épaisseur des tranches pour avoir un aperçu du résultat réel, ajoutons au plan un modifier solidify 2mm avec l’offfet à +1 (vers le haut) pour suivre le plan d’avoir la face basse comme référence :
Le résultat est conforme, retirez le solidify, il ne doit pas interférer avec l’étape de création du lien central.
On l’empale plus ?
Mais si, mais si. En fait ce n’est pas obligatoire, mais ça facilite le positionnement des étages, et on peut aussi le garde sans le coller. Le lien central doit avoir une forme de trapèze et être parfaitement vertical, car pour l’instant sculpteo ne fait pas de découpe oblique.
Il doit faire une épaisseur égale à celle du bois. Pour mon exemple je suis resté sur mon approximation (2.125mm) mais normalement il faut prendre 2mm et ajuster avec l’épaisseur du kerf qui est la taille du laser laissant un vide de découpe autour du trait de coupe. En pratique lors de mon premier essai j’ai eu des soucis d’épaisseur et j’ai du poncer mon trapèze. Du coup comme ce n’est pas nécessaire d’ajuster. Je surestime cette fois-ci la taille du trapèze.
Il faut ajuster sa position pour qu’il traverse tout le tux, coup de chance c’est possible sur ce modèle en plaçant la traverse au centre de la dernière tranche du tux. Mais sinon on l’aurait simplement fait avec deux trapèzes sur deux hauteurs.
Ajustez la taille en X et la hauteur de la partie haute pour faire joli, elle va dépasser un peu et même arrondir sa tête (note postérieure en pratique le trapèze sera toujours trop court, il faut juger les tranches encore un peu plus grand que 2.125mm).En dessous ajuster aussi la taille en X pour donner un beau trapèze
On voit que c’est moche au niveau du pied
On va donc remodeler un peu le trapèze pour qu’il soit plus joli à cet endroit.
Parlons peu, parlons kerf
Le kerf c’est la partie du bois éliminée par le laser, en pratique la découpe est plus petite que le plan car le laser à une taille non ponctuelle. la découpe de la traverse dans les tranches sera donc un peu plus grande que prévu, et la traverse découpée plus court aussi que prévu.
Dans ce modèle, on peut ignorer le kerf et accepter les différences, elles seront minimes et les pièces collées seront bien ajustées.
appliquons donc le booléen différence entre le plan des tranches et la traverse
Le résultat est difficile à voir mais en vue fil de fer c’est visibleC’est la lutte finale
On peut passer à la phase finale, on réalise les “modifier” sur les planches, puis on aplati le trapèze en retirant les vertices d’un côté.
En mode éditeur, on sépare toutes les tranches (P+loose parts en mode édition) et on les étale dans le bon ordre en vue du dessus. Attention, les numéros générés lors de la réalisation de l’array ne sont pas forcément dans l’ordre de Z…
Pour ne pas me planter, je me met dans une vue adaptée et je bouge une par une les tranches avec des gx0.1 … Je vérifie bien que tout est dans l’ordre puis je met tout le monde à plat (sélectionner tout A puis SZ0)Nous allons avoir des soucis de conversion de taille entre blender puis Inkscape puis sculpteo… on commence par poser un étalon dans blender, un plan au sol de 1cm sur 90cm
Le petit oiseau va sortir
Enfin presque, il faut encore à faire la photo !
Il existe une option de rendering qui génère du svg.
Mettons la caméra au dessus en mode orthographique, d’abord une résolution 100% sur un ratio approximatif de mon rectangle incluant tout.
puis placer la caméra assez bien au dessus de la scène et changez les paramètres :L’échelle orthographique est ce qui correspond au zoom, ajustez la valeur pour que tout rentre au plus juste
Tout doit rentrer dans la fenêtre de rendering :
Maintenant depuis les user pref, activez le svg freestyle exporter :
Et activez les deux options freestyle et svg export depuis les options rendering
Pressez F12, une image svg sera générée dans le répertoire indiqué dans output nommé 0001.svg,Ouvrez le dans Inkscape, dégroupez et sélectionnez l’étalon. mettez lui une épaisseur de contour à 0 pour ne pas fausser la taille et regardez sa taille. Dans mon cas je tombe sur 35.719cm.
Je vais donc changer la résolution de l’image pour ajuster la taille d’un facteur de 90/35.719=2.52
Je change dans blender le render pour :Re F12 et vérification.
Mon étalon fait maintenant 1cm sur 90.01cm.
aller, on essaie avec un pixel de moins en Y :), on tombe sur 89.987. C’est moins bon, retour en arrière.Maintenant que l’on a les bonnes tailles dans Inkscape, il faut nettoyer. Parce que le freestyle a introduit des pixels de temps en temps.
Je prends donc chaque découpe pour la repositionner au mieux et aussi supprimer les traces.
Pour m’aider et aussi servir d’étalon entre Inkscape et sculpteo je place un cadre dans une autre couleur qui délimite ma sélection, 53.5cm de large sur 75cm de haut.
Et je fais tout rentrer dedans.
Je vérifie chaque pièce pour assurer qu’il n’y a pas de défaut, et j’assure les contours à 1px et mon cadre avec une couleur différente
C’est prêt.
Pour ceux qui sont plus observateurs que moi, vous verrez que j’ai oublié de grouper une fente dans une tranche. Moi je vais le voir au montage plus tard…TuxOlaser
J’upload chez sculpteo.
Deux couleurs sont détectées, l"une correspond au noir et l’autre au rouge du cadre. Les mesures n’ont pas été conservées, je ne sais pas pourquoi… mais mon cadre me permet de choisir un ajustement de taille à 26.5% qui me redonne les bonnes dimensions.Je peux alors désactiver le cadre rouge dans sculpteo (style 2 sur aucun et voila !
prêt à couper.Livraison comprise il vous en coûtera 53.33€.
Pour info, les tux du bureau ont coûté moins cher, ils étaient en une seule livraison et un peu plus petits, 72€ les 3.Déboitage du tux et montage
Je hais les video de unboxing, et me voilà moi même à déboiter…
Bon, puisqu’il faut :
la boite est bien protégée
et la planche dans la mousse
Les pièces sont tenues par du scotch, il faudra faire attention en retirant le scotch de ne pas casser les pièces fragiles.
Je numérote mes pièces avant de défaire, c’est moins cher que de faire des numéros au laser.
Ensuite on empile jusqu’à la fameuse pièce 33 qu’il faudra redécouper.Tadaaaa
A propos de licences
J’ai fouillé pour trouver les licences attachées au modèle de base, les voici :
https://opengameart.org/content/tux
https://opengameart.org/sites/default/files/license_images/gpl.png
http://www.gnu.org/licenses/gpl-3.0.html
https://opengameart.org/sites/default/files/license_images/cc-by.png
http://creativecommons.org/licenses/by/3.0/Les fichiers
Voila les fichiers sources blender et le inkscape (piece 33 corrigée)
fichier blender
fichier svgCommentaires : voir le flux atom ouvrir dans le navigateur
-
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
- https://linuxfr.org/news/alternc-camp-a-paris-du-21-au-23-juin-2018
- https://github.com/alternc/alternc
Commentaires : voir le flux atom ouvrir dans le navigateur
-
Migrer Windows 10 d'un disque BIOS/MBR, vers un SSD en mode UEFI/GPT avec des logiciels libres
Sommaire
- Introduction
- Prérequis
- Nomenclature
- Procédure de base
- Quelques pistes si ça ne fonctionne pas…
- Documentation, pour aller plus loin…
- Historique de révisions
Introduction
Ce tutoriel vous guide pas à pas pour migrer votre installation de
Windows qui est actuellement sur un disque dur de votre PC vers un
nouveau disque, en l'occurrence un SSD. A vrai dire, vous pouvez aussi
bien migrer vers un autre HDD.La spécificité de ce tutoriel est qu'elle utilise les outils fournis par
Microsoft avec Windows ainsi que des logiciels libres (Clonezilla
principalement, mais si quelque chose devait mal tourner vous pouvez avoir
besoin d'utiliser fdisk, gdisk ou testdisk pour ne citer qu'eux). Quand
j'ai voulu faire cette migration je n'ai pas trouvé de tutoriel
expliquant de bout en bout comment faire cette migration juste avec les
outils de Microsoft et des logiciels libres.Typiquement, vous pouvez avoir envie/besoin de faire cela car vous avez
acheté un nouveau disque pour remplacer l'ancien (par exemple car
l'ancien montre des signes de faiblesse, ou vous voulez améliorer la
réactivité de votre système).En plus de la migration du système d'exploitation, ce tutoriel vous
explique comment passer d'un démarrage en mode BIOS/MBR à un démarrage
en mode UEFI/GPT.Succinctement la démarche est la suivante, d'abord installer le nouveau
disque dans le PC, et initialiser la table de partition selon les normes
Microsoft. Puis cloner/dupliquer la partition contenant le système
d'exploitation à l'aide de Clonezilla. Ensuite et avant de redémarrer
dans le clone de Windows sur le SSD, faire quelques modifications dans
le registre pour que la lettre de lecteurC:
pointe vers la bonne
partition et éventuellement modifier le mode SATA en AHCI si vous le
modifiez aussi dans le UEFI/BIOS. Après cela, on va préparer la
partition système EFI/ESP pour que le PC puisse démarrer dessus et qu'il
démarre sur le Windows du SSD. Finalement, une fois dans le Windows du
SSD, on va réactiver l'"environnement de récupération de Windows".Mise en garde : Faites une sauvegarde de vos données avant toute
opération. Personne n'est à l'abri d'une mauvaise manipulation ou d'une
erreur.Prérequis
Compétences
Niveau de difficulté : Difficile.
Vous devez être à l'aise au niveau de l'utilisation de la ligne de
commande dans Windows, mais aussi assez à l'aise pour gérer les
partitions de votre disque. Savoir modifier le paramétrage de votre
Firmware UEFI/BIOS et aussi nécessaire. Ce tutoriel guide pas à pas pour
la majorité des opérations. Certaines n'ont pas été détaillées par souci
de simplicité et d'efficacité.Matériel
Le PC où vous voulez installer le SSD. Il faut qu'il soit en état de
marche. De plus il doit avoir un firmware UEFI. S'il n'a que un BIOS
standard, sans UEFI, ce tutoriel n'est pas adapté.Clé(s) USB ou plusieurs CD/DVD sur lequel vous aurez mis
Clonezilla, System rescue
CD et un environnement de démarrage
Windows PE, ou Windows RE, ou le DVD/Disque d'installation de Windows.Le disque SSD (testé avec Samsung SSD 860 EVO 250GB). Il doit avoir une
taille suffisante pour contenir votre partition de Windows. Dans tous
les cas, la taille de la partition qui contiendra Windows sur le SSD
doit être au moins égale à la taille de la partition Windows du HDD que
vous voulez cloner. Au besoin, pour remplir ce critère, réduisez la
taille de votre partition Windows avec le gestionnaire de disque de
Windows par exemple (ou un autre outil de gestion de partition, comme
gparted, sur le System Rescue CD). Cherchez sur internet si vous ne
savez pas comment faire.Logiciel
Windows 10 installé (en version 64 bits) (testé avec Win10 v1709)
Windows 10 PE ou support d'installation de Windows 10 (clé USB ou DVD) -
En Version 64 bits (testé avec un support d'installation de Win10 v1804)System rescue CD (version 5.2.2 par
exemple)Clonezilla installé sur une clé ou un CD.
Bien vérifier avant que votre système arrive à démarrer dessus. (Testé
avec Clonezilla 2.5.5-38)Nomenclature
SSD : désigne le nouveau SSD
HDD : désigne votre disque actuel, sur lequel est installé Windows
WinPE : un environnement de démarrage Windows PE, ou Windows RE, ou le
DVD/Disque d'installation de Windows. Il doit être sur un support
amovible (USB, CD ou DVD)S: La lettre de lecteur affectée à la partition Système EFI qui sera sur
le nouveau SSD (parfois appelée ESP, EFI_System_Partition ou encore
SYSTEM, ou EFI)N: Le clone de Windows, sur le SSD
O: Le Windows cloné, sur le HDD
C: La partition dans laquelle est installée Windows, lorsqu'on est dans
Windows (que ce soit le windows cloné, ou le clone)Les commandes doivent être lancées en tant qu'administrateur.
Procédure de base
Fixer et brancher le SSD dans l’ordinateur
Désactiver Windows FastStart (cf votre moteur de recherche préféré)
-
Initialiser et partitionner le disque à l'aide de Windows
- Démarrer sur le Windows installé ou WinPE
- Pour initialiser le disque, d'abord créer une table de partition,
puis partitionner le disque. Pour ce faire :
- Suivre les instructions de partitionnement UEFI/GPT selon Microsoft. Ci-dessous mon exemple, mais peut-être avez-vous besoin d'une partition "recovery" aussi, ou votre configuration nécessite quelques aménagements. Dans ce cas, voir les instructions de Microsoft et adapter pour vos besoins.
- Par exemple: une partition EFI de 260Mo, une partition
Microsoft Reserved (MSR) de 16Mo, une partition pour Windows
(taille au moins égale à la taille de la partition de Windows
à cloner). Pour informations, dans diskpart, les tailles que
vous donnez en MB/Mo sont en réalité des MiB/Mio (220 =
10242 octets).
- Ouvrir une invite de commande en mode administrateur et
lancer
diskpart
. Et une fois dans diskpart :
- list disk pour lister les disques et connaître le n° du SSD.
- select disk # avec le numéro du SSD à la place de #
- clean Supprime le contenu du disque / l'initialise
- convert gpt Définit que le disque aura une table de partition GPT
- create partition efi size=260 Crée une partition EFI de 260MiB
- format quick fs=fat32 label="System" Formater la partition EFI au format FAT32
- assign letter="S" Lui donner la lettre S
- create partition msr size=16 Créer une partition Microsoft Reserved de 16MiB
- create partition primary
Créer la partition pour Windows (l'équivalent du
C:
) - format quick fs=ntfs label="Windows" Formater la partition pour Windows au format NTFS
- assign letter="N" Lui donner la lettre N
- list volume Liste les volumes. Permet de voir la table de partition.
- exit Quitte diskpart
- Ouvrir une invite de commande en mode administrateur et
lancer
diskpart
. Et une fois dans diskpart :
-
Cloner le Windows installé sur le HDD. Ceci sera fait à l'aide de
Clonezilla- Redémarrer dans Clonezilla
- Une fois dans clonezilla, et si vous êtes confortable avec les
lignes de commande Linux, éventuellement supprimer de la partition
Windows du HDD les fichiers
pagefile.sys
,hyberfil.sys
(désactiver windows faststart avant),swapfile.sys
. - Cloner la partition Windows du HDD vers le SSD (de préférence,
partition de même taille, et de toutes façons, la partition de
destination doit être plus grande que la source. Si ce n'est pas
le cas, réduisez d'abord la taille de votre partition Windows
depuis Windows). Dans clonezilla, utiliser le mode Partition vers
Partition, et en mode Export. Utiliser les options
-e1 auto
(automatically adjust file system geometry for a ntfs boot partition if exists)-e2
(sfdisk uses CHS of hard drive from EDD (for non grub loader)-r
(resize filesystem to fit partition size of target)-m
(do NOT clone boot loader)-v
(verbose) - Optionnellement cacher la partition contenant le windows source de la table de partition du disque source (si vous ne savez pas à quoi ça sert, passez votre chemin). Pour cela modifier le type de partition de la partition NTFS de windows (en principe, NTFS a un id de « 7 ». On peut utiliser id 17 pour la partition cachée : 17 correspond à « IFS Hidden »). Utiliser cfdisk ou fdisk pour faire ce changement (ce sont des programmes linux).
Dans le Firmware UEFI (ou BIOS-UEFI), on peut en profiter pour passer
du mode SATA "IDE" vers "AHCI". Windows n'aime pas ce changement et
il faut donc faire une opération dans le registre qui est
détaillée ci-dessous. Tant que vous ne le faites pas, vous aurez un
écran de plantage bleu de windows au démarrage (BSOD).Si vous voulez être sûr de ne pas faire de bêtise dans le Windows que
vous venez de cloner, je vous conseille d'éteindre l’ordinateur & de
débrancher l’ancien disque. Ainsi vous ne risquez pas de modifier le
mauvais fichier de registre (en l'occurrence celui de votre Windows
sur le HDD)-
Effectuer quelques opérations sur le Windows de destination (celui
sur le SSD) avant qu'on ne démarre dessus. En particulier corriger le
registre pour affecter la lettre de lecteur C: à la bonne partition,
et si le paramétrage du Firmware UEFI (BIOS-UEFI) a été modifié pour
passer de SATA Mode PCI vers AHCI, on va aussi faire ce changement
pour que ca fonctionne.- Redémarrer dans WinPE (en Mode UEFI, pas MBR !)
- Tout d'abord déterminer la lettre de lecteur affectée au clone
de Windows, celui qui est sur le SSD. Ou, s'il n'y a pas de
lettre affectée, lui en donner une, par exemple
N:
(lettre utilisée dans les exemples qui suivent)- Pour cela, lancer dans
diskpart
- list volume
Ce qui retourne la liste des volumes avec la lettre de lecteur qui a été affectée à chacun.
- list volume
- Si aucune lettre de lecteur n'est affectée, il faut alors
lui en affecter une. Pour cela, lancer dans
diskpart
- select volume # (avec # étant le numéro du volume qui contient le nouveau windows)
- assign letter=N
S'il n'est pas possible d'utiliser select volume alors faire comme ceci - list disk
- select disk # (# étant le numéro affecté au SSD)
- list partition
- select partition # (# étant le numéro affecté à la partition de Windows sur le SSD, probablement 3)
- assign letter=N
- Pour cela, lancer dans
diskpart
- Faire un CHKDSK /F sur la lettre du nouveau Win
- Pour que la partition
C:
utilisée par Windows soit celle du SSD et pas celle de l’ancien disque, modifier une clé de registre du nouveau Windows :- Lancer
REGEDIT
et dans le registre HKEY_LOCAL_MACHINE monter la ruche
N:\Windows\System32\Config\SYSTEM
. Lui donner le nom "NewWin" On s’intéresse àHKEY_LOCAL_MACHINE\NewWin\MountedDevices
. Ce sont là les valeurs qui sont dans le registre "HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
" lorsqu'on est dans l'installation de Windows.- Dans
HKEY_LOCAL_MACHINE\NewWin\MountedDevices
modifier la lettre de lecteur C: en renommant \DosDevices\C: par \DosDevices\O: (car la valeur fait référence à la partition de l'ancien Windows sur le HDD et on ne veut pas, en démarrant, utiliser cette partition mais celle de son clone qui est sur le SSD). Ainsi, lorsqu'on démarrera dans le nouveau Windows, la partition contenant le Windows sur le HDD aura la lettre O:, et la partition contenant le Windows sur le SSD aura la lettre C: - Créer une nouvelle valeur binaire nommée \DosDevices\C:
et lui donner comme contenu celui de \DosDevices\N: qui
est renseignée dans le registre WinPE, c'est-à-dire là
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
(C:
étant la lettre qu'utilisait le Windows du HDD comme partition où il y a le dossier \Windows ) - ATTENTION: Bien vérifier que la copie a fonctionné et qu'il y a les bonnes valeurs, car dans mes essais, j'ai du m'y reprendre à 2 fois car le 1er "coller" ne collait pas ce que je voulais.
- En principe c'est tout. Mais d'après certaines sources,
il y aurait une clé \\?\Volume{GUID} ayant le même
contenu que le \DosDevices\O: qu’on vient de modifier.
Chez moi ce n'était pas le cas. Si vous avez une telle
valeur, alors il faut lui donner le contenu de
\DosDevices\N: depuis le registre WinPE
- Dans
- Lancer
REGEDIT
et dans le registre HKEY_LOCAL_MACHINE monter la ruche
- Si en même temps que la migration on veut aussi passer du mode
SATA IDE vers AHCI alors il faut encore faire ceci. Cela a été
repris du site
tomshardware.co.uk
- Toujours dans
REGEDIT
avec la ruche montée en
HKEY_LOCAL_MACHINE\NewWin
- Aller à
HKEY_LOCAL_MACHINE\NewWin\ControlSet000\Services\storahci\StartOverride
- Changer la valeur DWORD de 3 à 0.
- Au redémarrage, si ça n'a pas été fait, changer la paramétrage du contrôleur SATA de IDE à AHCI. Au redémarrage, Windows devrait directement démarrer correctement et sans plantage (BSOD).
- Toujours dans
REGEDIT
avec la ruche montée en
- Rendre le disque bootable en installant les outils EFI de
microsoft et configurant le Magasin BCD (BCD Store)
- D'abord assigner une lettre de lecteur à la partition ESP
- MOUNTVOL S: /S
Si ca n'a pas fonctionné, faire comme ceci dans diskpart - list disk
- select disk # (# est le numero du SSD retourné par list disk)
- list partition
- select partition # (# est probablement 1)
- assign letter=S
- MOUNTVOL S: /S
- Puis lancer
bcdboot
N:\windows /l fr-fr /s S: /f UEFI
- Où
N:\Windows
est le répertoire contenant le clone de Windows sur le SSD) - S: = partition EFI
- Où
- D'abord assigner une lettre de lecteur à la partition ESP
- Tout d'abord déterminer la lettre de lecteur affectée au clone
de Windows, celui qui est sur le SSD. Ou, s'il n'y a pas de
lettre affectée, lui en donner une, par exemple
- Redémarrer dans WinPE (en Mode UEFI, pas MBR !)
Redémarrer, et avant le lancement de Windows vérifier votre UEFI
(ou BIOS-UEFI). Il faut qu'il soit configuré pour démarrer par défaut
en mode UEFI et pas en mode BIOS. Penser aussi à corriger le
paramétrage SATA si cela a été modifié dans le registre de Windows.
Le paramétrage du démarrage avecbcdboot N:\windows /l fr-fr /s S: /f UEFI
a normalement créé le
magasin BCD, mis tous les fichiers EFI sur la partition SYSTEME (ESP,
partiton EFI, la 1ère du SSD) et dit au firmware UEFI qu'il doit
automatiquement démarrer avec le gestionnaire de démarrage
(boot manager) de Windows.-
Une fois qu’on a réussi à démarrer dans la copie de Windows
- Réactiver le "FastBoot"
- Réactiver l'environnement de récupération de Windows
en lançant, depuis une ligne de commande avec les droits
administrateur, la commande
reagentc.exe /enable
. Vérifier avecreagentc.exe /info
. Et s'il y a une erreur essayer avecreagentc.exe /enable /setreimage /path C:\Recovery\WindowsRE
oùC:\Recovery\WindowsRE
est le dossier où se trouve le fichierWinre.wim
- Vérifier que tout est en ordre. Eventuellement donner un nouveau
nom à votre partition
C:
(pour la différencier de celle sur le HDD) en lançant:LABEL [drive:][label]
- Redémarrer encore une fois en laissant le processus de démarrage se faire tout seul pour vérifier que tout est ok.
Réinsérer l'ancien disque dur.
Normalement, il devrait être possible de redémarrer dans l'ancien
Windows, du moment que vous savez comment booter en MBR, et sous
réserve de ne pas avoir modifié le mode SATA dans le UEFI/BIOS. SI
c'est le cas, vous pouvez envisager de modifier le registre du
Windows du HDD, ou de modifier le paramétrage du UEFI/BIOS.
Si vous avez aussi Linux d'installé sur le HDD, il devrait toujours
être possible de le démarrer en mode BIOSOn peut diminuer/augmenter la taille de la partition C: du SSD (Pour
un SSD TLC ou VNAND, on peut par exemple laisser de l’espace libre à
la fin ~10 % de la capacité du disque d'après le logiciel Samsung
Magician, pour un SSD 860 EVO)En principe, puisqu’on boot en EFI on peut enlever sur le clone
Windows sur le SSD les fichiers\bootmgr
et\Boot\BCD
puisque ce
sont ceux qui étaient utilisés pour un boot en mode BIOS/MBR et que
désormais on est en EFI. Vous pouvez d'abord les renommer et vérifier
que ca ne change rien au prochain boot, plutôt que de les supprimer
tout de suite.
Quelques pistes si ça ne fonctionne pas…
- Faire un chkdsk sur la nouvelle partition
- Recréer le bootsector du NTFS avec testdisk (dispo sur System Rescue CD, mais peut être aussi dans Clonezilla ? Je n'ai pas vérifié)
- Vérifier le BCD:
- On peut vérifier si le Magasin BCD est ok en lançant (en
tant qu'administrateur)
bcdedit /store s:\EFI\Boot\Microsoft\BCD /enum
(Si la partition système n'est pas montée sur S:, lancer
Mountvol s: /s
- Doc BCDEDIT (sur la page, il y a aussi les liens vers bcdboot (initialise BCD et copie fichiers de démarrage sur la partition systeme) et bootsect (pour basculer entre NTLDR et Bootmgr)
- https://msdn.microsoft.com/fr-fr/library/windows/hardware/mt450468(v=vs.85).aspx
- https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/bcd-system-store-settings-for-uefi
- On peut vérifier si le Magasin BCD est ok en lançant (en
tant qu'administrateur)
bcdedit /store s:\EFI\Boot\Microsoft\BCD /enum
(Si la partition système n'est pas montée sur S:, lancer
Mountvol s: /s
- Vérifier que la partition EFI est bien initialisée (présence des
fichiers
\EFI
,\EFI\Boot\
,\EFI\Microsoft\
…) Si ce n'est pas le cas, il y a eu un problème avec bcdbootN:\windows /l fr-fr /s S: /f UEFI
- Vérifier le boot manager du bios (démarrage en UEFI ou MBR ? Gestionnaire de démarrage par défaut ? Présence du gestionnaire de démarrage de Windows ?)
- A priori, pas utile : Commandes à lancer dans WinPE
- Pour recréer le boot sector de la partition systeme (EFI):
bootrec
/fixboot
- Pour chercher les OS sur le disque et les mettre dans le
bootloader
bootrec
/scanos
- Pour recréer le boot sector de la partition systeme (EFI):
bootrec
- Quelques commandes de bcdedit pour modiser la valeur de certains
éléments du magasin BCD. Inutile car le BCD Store qui est utilisé
lorsqu'on démarre en mode EFI n'est pas le même que celui utilisé
dans un démarrage en mode MBR. Donc, pas besoin de chercher à
modifier le BCD. Je garde pour info : les lettres sont celles telles
que définies dans le système où on est (WinPE par ex).
Doc BCDEDIT
- bcdedit /set {bootmgr} device \Device\HarddiskVolume1
- bcdedit /set {default} device \Device\HarddiskVolume3
- bcdedit /set {default} osdevice \Device\HarddiskVolume3
- Ou à la place de \Device\HarddiskVolume1 mettre les lettres de lecteur :
- bcdedit /set {bootmgr} device partition=S:
- bcdedit /set {default} device partition=C:
- bcdedit /set {default} osdevice partition=C:
Documentation, pour aller plus loin…
A propos du EFI/UEFI:
- La procédure de Boot en cas UEFI ou BIOS est bien décrite ici: https://www.boyans.net/RepairWindows/RepairWindowsBCD.html
- La partition Système EFI: https://wiki.archlinux.org/index.php/EFI\_System\_Partition
- Managing EFI Boot Loaders for Linux: http://www.rodsbooks.com/efi-bootloaders/principles.html
A propos de l'entrée MountedDevices du registre:
http://diddy.boot-land.net/firadisk/files/mounteddevices.htmSi on veut y accéder, par défaut les fichiers du BCD sont cachés. Pour
les rendre visibles:- attrib bcd -s -h -r
- mv bcd bcd.bak
- bootrec /rebuildbcd
Documentation bcdedit:
- http://diddy.boot-land.net/bcdedit/
- Concernant les valeurs possibles pour « device » ou « osdevice » dans bcdedit http://www.diddy.boot-land.net/bcdedit/files/device.htm
MBR Partition ID
- NB: Une partition Recovery Windows a un part_id de « 0x27 »: https://www.win.tue.nl/~aeb/partitions/partition\_types-1.html
A propos des disk ID (=Disk signatures):
- http://kb.macrium.com/KnowledgebaseArticle50152.aspx . En principe pas de pb, puisqu’on n’a pas cloné tout le disque mais juste une partition, et que le pb de signature du disque est lié à la copie du MBR (1er secteur du disque {et pas de la partition}). Cela concerne probabement aussi le clonage de la table de partition GPT puisqu'il y a aussi un id dedans…
- Fixing Disk Signature Collisions: https://blogs.technet.microsoft.com/markrussinovich/2011/11/06/fixing-disk-signature-collisions/
Si besoin de supprimer du registre les entrées de disques qui ne sont
pas connectés ou sans lettre assignée lancer:mountvol /R
. Ce
programme permet aussi de lister les lettres de volumes avec leur GUID
(GUID pour ce système uniquement, il n’est pas stocké dans la partition,
ni ailleurs sur le disque, il est assigné par windows pour un couple
(signature de disque/partition offset) dans une instance de windows
alors que dans une autre instance de windows la même partition sur le
même disque aura ce GUID différent)Changer le label du volume: commande
LABEL [drive:][label]
Historique de révisions
Vous trouverez la dernière version de ce tutoriel sur ma page perso
de tutoriels informatique.
Vous y trouverez aussi la version HTML, PDF et TXT.2018-06-17 : Ajout d'une note indiquant que ce tutoriel utilise des
logiciels libres2018-06-11 : Correction de la forme et de fautes d'orthographe
2018-05-28
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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
- Ali Gholami Rudi
- Ce que Neatmail ne fait pas
- Ce que Neatmail fait
- Le commande ex de neatmail
- Un script shell comme interface
- Conclusion
J’utilise depuis quelque temps un tout petit client mail, qui ne fait vraiment que le minimum, mais a une interface si particulière, qu’il me semble intéressant de vous le présenter. Il s’agit de Neatmail écrit par Ali Gholami Rudi.
Ali Gholami Rudi
Je connais Ali Gholami Rudi pour une implémentation de Troff à la fois pertinente en termes de fonctionnalités et dont le code source est très propre. Il a aussi écrit un compilateur (neatcc), une libc (neatlibc), et une implémentation de vi. C’est un développeur qui, plutôt qu’une éthique, semble défendre une certaine esthétique du logiciel, que je qualifierai de minimaliste: code source compréhensible par une personne seule, logiciel qui fait peu de choses, mais le fait bien, etc.
Neatmail le client mail qu'il s'est programmé, et celui‐ci met en scène toute l’esthétique de son auteur.
Ce que Neatmail ne fait pas
Neatmail ne fait que gérer un fichier mbox (une concaténation de mails). Ainsi, il ne sait ni rapatrier, ni envoyer les mails, il ne sait ni extraire, ni ajouter de pièce jointes, etc.
Mais en vérité, il n’a pas besoin de faire tout cela, car d’autres logiciels le font. Ali Gholami Rudi propose ainsi un pop3 pour rapatrier les mails depuis un serveur pop3, et smtp pour envoyer ses mails à un serveur smtp. Et il existe dans certaines distributions un ripmime pour extraire les pièces jointes d’un fichier mime.
Ce que Neatmail fait
Neatmail se contente donc d’effectuer des actions sur un fichier mbox. Les actions de bases sont:
‐ mk Génère une liste des mails contenus dans la mbox.
‐ ns Génère une liste des nouveaux mails présents dans la mbox.
‐ pg Affiche un des mails contenu dans la mbox.On peut donc l’utiliser ainsi:
# Obtient les mails pop3 # liste les mails, triés par fil de discussion neatmail mk ‐r ‐st ‐0 18from:48~subject: mbox # affiche le 3e mail neatmail pg mbox 3 # prépare une réponse neatmail pg ‐r mbox 3 > draft.eml vi draft.eml # envoie la réponse tail ‐n+2 draft.eml | smtp # garde une copie de la réponse cat draft.eml >> sent rm draft.eml
Mais en outre, neatmail peut interpréter les commandes ex contenues dans la liste des mails. Autrement dit, l’utilisateur est invité à ajouter des commandes à cette liste de mails, et donner le tout à neatmail qui se chargera de l’exécution:
neatmail mk ‐r ‐0 18from:48~subject > list.nm vi list.nm neatmail ex < list.nm
Le commande ex de neatmail
La commande ex de neatmail prend en entrée une liste de commandes, et les exécute sur un fichier mbox. Elle ignore toutes les lignes hormis celles commençant par deux points (commande ex) ou une lettre majuscule (un mail dans la liste). Les lignes commençant par une lettre majuscule de la forme "R100..", modifient le statut du message dont le nombre suit la lettre (ici, 100). Une telle ligne définit aussi le message actuel, celui sur lequel les commandes sont exécutées. Les commandes ex sont les suivantes:
‐ rm supprime le message courant.
‐ cp copie le message courant dans une mbox donnée.
‐ mv déplace le message courant dans une mbox donnée.
‐ hd modifie l’entête donnée du message courant.
‐ ft passe le message courant à une commande donnée.
‐ w écrit les modifications dans la mbox.
‐ tj joint les fils de discussion en modifiant l’entête "Reply‐To".
‐ ch coupe le message à l’offset indiqué.Par défaut, ces commandes agissent sur le message courant, mais il est aussi possible d’utiliser des adresses du type
2,5rm
pour effacer les messages 2 à 5. Il est aussi possible d’utiliser des expressions régulières du type/regex/rm
, oùregex
est recherché dans le sujet des messages. D’autres champs peuvent être spécifiés en utilisant l’expression^field:value
.Un script shell comme interface
Vous allez certainement penser que l’interface est un peu rude… À vrai dire, Ali Gholami Rudi n’utilise pas neatmail directement: un script shell (m) lui sert d’interface. Et c’est là que le logiciel brille: pour peu que l’on ait un peu l’habitude du shell, on peut se créer une interface sur mesure. On peut par exemple imiter l’interface de mh (un autre client mail non interactif un peu oublié). On pourrait créer une interface interactive. Bref, on peut faire ce qu’on veut.
J’utilise par exemple l’interface suivante:
m box inbox # liste les messages contenus dans la mbox inbox. m vi 3 # affiche le message 3 m next # affiche le message 4 m repl # ouvre mon éditeur sur une réponse préformatée au message 4 m add f.pdf # joint f.pdf à ma réponse m send # envoie ma réponse. m R # marque le message 4 comme lu. m com # enregistre les changements dans la mbox (ici, change l’entête du message 4)
Conclusion
Au jour le jour, je suis plutôt satisfait de l’ensemble. Le fait de travailler sur les mails en local est plutôt agréable: c’est fluide, offre une grande liberté d’organisation, s’associe bien à un système de sauvegarde ou de gestion de version, etc. Le fait que le client ne soit pas interactif apporte un certain confort d’usage: le shell est sous la main si besoin, je retrouve ma session de travail dans l’état où je l’ai laissée d’un jour à l’autre, il est facile d’implémenter des solutions pour revenir en arrière (cp…). Le fait de coupler le tout avec le shell offre une grande liberté dans la création de l’interface utilisateur.
Commentaires : voir le flux atom ouvrir dans le navigateur
-
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 :
- Créer un compte sur la forge : http://code.labo-linux.org/users/sign_up
- Se connecter : http://code.labo-linux.org/users/sign_in
- Ajouter votre clé SSH : http://code.labo-linux.org/profile/keys
- Créer un nouveau projet : http://code.labo-linux.org/projects/new
- 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.
- Se rendre sur l'interface Issues de votre projet (les liens sont à adapter) : http://code.labo-linux.org/root/demo/issues
- Cliquer sur New issue
- 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 » ...
- Optionnellement, vous pouvez rattacher ces issues à des milestones (c'est un jalon, une version)
Autres fonctionnalités utiles :- 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).
- 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.
- 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 globaleLa 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 :
- 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
- Une revue hebdomadaire obligatoire, qui permet de définir à l'avance un objectif court terme pour l'équipe
- 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.
- 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
Om 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.
Sophie, notre assistante de direction à Caen, semblait intriguée par le magazine !
-
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.
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 :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 contenant0xa1
, alors qu'un rapport sortant se fait dans le sens hôte -> périphérique et débutera lui par un octet contenant0xa2
.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 type0x12
dédié spécialement à ce choix.
Le type de rapport0x12
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 Wiimote0x31 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 :
- 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 de0x04
. :a2 13 04
- 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 de0x04
. :a2 1a 04
- La troisième action consiste à écrire
0x08
dans le registre0xb00030
.
Les registres sont des zones mémoire et écrire dedans se fait par l'envoi d'un rapport0x16
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écimaleff
.
a2 16 04 b0 00 30 01 08 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff
-
- 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
et0xb0001a
.
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
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
- 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 :ModeNuméro du modeBasique1Étendu3Complet5- 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 :BitOctet765432100X11Y12Y1X1Y2X23X24Y2 - 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 :BitOctet765432100X11Y12Y1X1S - 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
et0x3f
combinés.
Voici le schéma correspondant à la façon dont sont organisés les bits de chaque point dans ce mode :BitOctet765432100X11Y12Y1X1Y2X230X min40Y min50X max60Y max708Intensité
- 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.
- Enfin, pour valider tous nos choix, il faut répéter l'étape numéro 3 en envoyant la valeur
0x08
au registre0xb0003
.
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
et0x37
. J'ai personnellement opté pour le type0x36
.
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'octetValeur HexadécimaleValeur binaire00x57010101111A41010010023000110000Grâ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 :
BitOctet76543210001010111110100100200110000300000000400000000Sont 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éeRéorganisation en binaireValeur convertie en décimalX1101010111855Y0010100100164La 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 :
- La caméra de la manette n'a pas forcément la même définition que l'écran sur lequel on va afficher.
- 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 :
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 <X11/extensions/XTest.h> 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 :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 :
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 :
- Site de Johnny Chung Lee : http://johnnylee.net/projects/wii/
- Conférence TED de Johnny Chung Lee : http://www.ted.com/talks/johnny_lee_demos_wii_remote_hacks.html
- Site TNWii Français : http://www.prtice.info/?tnwii
Documentations sur la programmation C nécessaires au développement du logiciels :
- Caractéristiques techniques de la Wiimote : http://wiibrew.org/wiki/Wiimote
- Documentation sur la programmation Bluetooth : http://people.csail.mit.edu/albert/bluez-intro/index.html
- Mon Wiki personnel avec la traduction de la documentation Bluetooth : http://waraxe.homelinux.org/sphinx/pages/bluetooth/index.html
- Tutoriel sur les threads : http://franckh.developpez.com/tutoriels/posix/pthreads/
- Tutoriel sur GTK 2 : http://gtk.developpez.com/cours/gtk2/
- Exemples de calculs des coordonnées d'un point dans une projection : http://www.developpez.net/forums/d740403/autres-langages/algorithmes/contribuez/image-geometrie-projective-homography
- Documentation sur la Xlib : http://tronche.com/gui/x/xlib/
- Exemples de déplacement du curseur et de clic de la souris avec XTest :
- http://stackoverflow.com/questions/5802177/mouse-button-simulation-right-button-and-context-menu-problem
- http://forums.gentoo.org/viewtopic-t-402015-start-0.html
- http://bharathisubramanian.wordpress.com/2010/04/01/x11-fake-mouse-events-generation-using-xtest/
- http://stackoverflow.com/questions/7221600/capturing-display-monitor-images-sending-keyboard-input-on-linux
-
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 cousinsipcalc
.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 là.
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 :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 :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 estpam_ldap.so
oupam_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 :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 :
- Explication de la différence entre l'authentification via PAM et via NSS sur les forum d'HP, avec l'exemple de LDAP (en anglais) :
http://h30499.www3.hp.com/t5/System-Administration/which-ldap-authentification-pam-or-nss/m-p/3033691/highlight/true#M133089
- 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.
-
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 là.
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
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 fichierpam.conf
.
La façon la plus claire de faire et aussi la plus répandue est l'utilisation du dossierpam.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'outilsudo
.
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
ousession
).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êmecatégorie
.requisite Comme pour required
un statut d'erreur est retourné si un modulerequisite
é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 modulerequired
ourequisite
à é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 ...]
Où
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
SessionPermet 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
SessionAffiche 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
SessionDonne 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
AuthEmpê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
AuthL'authentification est permise seulement si l'utilisateur possède une entrée dans fichier /etc/security/sepermit.conf
.pam_shells.so Account
AuthAutorise 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
AuthMaintient 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
SessionPermet 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
AuthAuthentification 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
AuthAutorise l'accès seulement aux utilisateurs du groupe wheel
(ou du groupe au GID 0 si le groupewheel
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
- La documentation officiel de Linux-PAM :
http://www.linux-pam.org/Linux-PAM-html/Linux-PAM_SAG.html - La page française de Wikipédia sur PAM :
https://fr.wikipedia.org/wiki/Pluggable_Authentication_Modules - Page PAM de la documentation NetBSD. NetBSD n'utilisant pas la même implémentation de PAM, il y a quelques différences mais une grande partie est commune :
http://www.netbsd.org/docs/guide/en/chap-pam.html - « The Linux-PAM Application Developpers' Guide ». Utile pour connaître la signification des codes de retour des modules :
- Page de manuel PAM(3) :
http://linux.die.net/man/3/pam - Page de manuel pam.d(5) :
http://linux.die.net/man/5/pam.d - Le draft (brouillon) de l'implémentation Linux-PAM :
https://www.kernel.org/pub/linux/libs/pam/pre/doc/draft-morgan-pam-08.txt
-
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 là.
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ètrepasswd
. 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 commepasswd
,shadow
ougroup
.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
etnisplus
ainsi quecompat
pour les basespasswd
,group
etshadow
. De plus, la base donnéeshosts
dispose de la sourcedns
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 formelibnss_XXX.so.Y
. AvecXXX
pour le nom du service etY
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 fichierspasswd
,groups
etshadow
et non dans le fichiernsswitch.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
etshadow
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
etgroup
.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. Laclé
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
- La page de manuel nsswitch.conf :
http://manpagesfr.free.fr/man/man5/nsswitch.conf.5.html - La page française de Wikipédia sur NSS :
https://fr.wikipedia.org/wiki/Name_Service_Switch - La page de manuel de getent :
http://man.cx/getent%281%29/fr - Plus d'informations sur la source de données compat :
http://serverfault.com/questions/331440/what-do-compat-mean-in-name-service-switch
-
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.
-
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:
- aucun DRM
- les jeux fonctionnent sur Linux, Mac OS X et même Windows
- 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
-
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:
-
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.
L'actualité de cette partie est agrégé automatiquement à partir d'autres sites.
Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre