Linux (fr)

  • Discourse, plate-forme de discussion atypique (Dépêches LinuxFR)

    Jeff Atwood, connu entre autres pour Stack Overflow, a annoncé la sortie de la plateforme de discussion Discourse en version 1.0 le 26 août 2014 et en version 1.4 le 22 septembre 2015. La devise du projet est « Civilized Discussion. On the Internet. », soit « Discussion civilisée. Sur Internet. ».

    discourse

    En résumé, Discourse fonctionne à la fois comme une liste de diffusion, un forum de discussion et un salon de discussion… Il est développé en Ruby on Rails, avec Ember.js, basé sur du PostgreSQL et du Redis. Il est distribué sous la licence GNU GPL v2.

    Sommaire

    discourse
    Interface principale de Discourse en version 1.3.

    Motivations autour du lancement du projet

    Extrait de l'annonce du lancement du projet en juillet 2013 :

    Un des trucs qu'on a appris avec Stack Exchange est que, si ton but est d'améliorer le rapport signal sur bruit, tu dois réfréner les discussions.

    Stack Exchange ne permet que le minimum absolu de discussion nécessaire à la production de bonnes questions et réponses. D'où la réorganisation constante des réponses par les votes, d'où les limites de formatage et de longueur des commentaires, le fait que peu s'affichent, et ainsi de suite. Presque toutes nos décisions de conception furent motivées par notre désir de réduire la discussion, de l'inhiber de toutes les façons possibles. Épargne-nous l'étalage kilométrique de ton avis, et réponds juste à la foutue question.

    Après quatre années pleines à considérer la discussion comme l'Empire établi et corrompu, et Stack Exchange comme l'Alliance Rebelle, j'ai commencé à me demander - qu'est-ce que ça ferait de changer de camp ? Et si je devenais le champion de la discussion spontanée et impulsive, du genre que j'ai passé quatre ans à combattre aux niveaux conceptuel et spirituel ?

    Fonctionnalités de Discourse

    Rédigé d'après la FAQ et la page « à propos » :

    • 100 % libre : intégration de Discourse dans votre site en totale confiance ; le code appartient à tous ;
    • Système de confiance : au fur et à mesure que les utilisateurs deviennent des membres de confiance, ils peuvent devenir des modérateurs de leur communauté ;
    • Responsive pour mobiles : conception pensée depuis le premier jour pour les écrans tactiles ; modes d'affichage automatiques qui s'adaptent à votre support mobile et/ou tactile ;
    • Modération par la communauté : un système de drapeau permet à la communauté de supprimer les spams et les contenus dangereux et de résoudre amicalement ses propres disputes ;
    • Optimisé pour la lecture : pour continuer à lire, faites simplement défiler la page ; quand vous atteignez le bas de page, des sujets suggérés vous amènent à rester dans votre lecture. La discussion n’est pas coupée en plusieurs pages ;
    • Likes : exprimez votre accord, votre soutien, et mettez en avant des commentaires intéressants avec le gros bouton ❤ présent sur chaque commentaire ;
    • Dégrossir les fil de commentaires : Bouton « Summarize » pour condenser les longs fils de discussions et n'afficher que les commentaires les plus intéressants et populaires ;
    • Contexte en ligne : affichage des citations, des réponses ou du fil de discussion qui précédait une réponse ;
    • Traductions : disponible dans 17 langues, et plus à venir ; les utilisateurs peuvent configurer la langue de leur choix ;
    • Notifications en temps réel : avertissement quand quelqu'un vous répond, vous cite, mentionne votre @nom, vous envoie un message privé, crée un lien vers votre commentaire, modifie votre commentaire, ou re-catégorise votre discussion ;
    • Référencement : URL lisible et compréhensible et HTML valide, optimisé pour l'indexation par le moteur de recherche de Google ;
    • Greffons : système de greffons en cas de besoin de fonctionnalité spécifique à votre site ;
    • Single Sign On : intégration fluide avec le système d'identification du site hôte ;
    • Éditeur en surimpression : rédaction des commentaires dans un éditeur qui n'interrompt jamais la lecture, même si vous visitez un autre fil de discussion ;
    • Identification via sites sociaux : ajout facile de Google, Facebook, Twitter, Yahoo!, GitHub, et d'autres systèmes d'identification courants ;
    • Communautés privées : catégories entièrement ou partiellement privées  ;
    • Limitations : toutes les actions utilisateurs peuvent être soumises à des contraintes, par exemple très strictes pour les nouveaux utilisateurs ;
    • Nettoyage facile du spam : suppression des spams en deux clics, bannissement d'adresse de courriel et d'IP et auto-suppression de tous les contenus associés ;
    • Blocage du spam : heuristique uniforme et exhaustive, incluant un sas pour les nouveaux utilisateurs, le blocage par les utilisateurs, et l'utilisation de l'attribut nofollow ;
    • Analyses : tableau de bord pour les administrateurs listant les statistiques clés des utilisateurs, les sujets de discussion et toutes les actions des utilisateurs, en incluant les domaines et sujets les plus en vogue ;
    • Intégration automatique d'URL : les URL de sites populaires comme Wikipédia et YouTube incluront un résumé. Prise en charge complète de OpenGraph et oEmbed ;
    • Gestion avancée des images : téléversement d'images via sélection de fichier, glisser/déposer ou copier/coller ; les grandes images sont automatiquement réduites en miniatures et affichées à l'aide de lightbox ;
    • Adjonction de fichiers : inclusion de fichiers de toutes sortes et de toutes tailles ;
    • Suivi de liens : les liens externes sont accompagnés d'un compteur de clics ; les liens entrants et sortants vers d'autres sujets sont affichés à coté de chaque commentaire ;
    • Sondages : création rapide de sujets sur lesquels la communauté peut voter ;
    • Spoilers : étiquettes qui floutent les spoilers (information cruciale qui déflore le sujet central) éventuels, ne se révélant que par un clic ou un appui ;
    • Formatage flexible : mélange possible de Markdown, de BBCode et de HTML ;
    • Emoji : commencer juste à taper pour avoir accès à une liste complète des emoji courants ;
    • API exhaustive : tout ce qui est visible à l'écran est accessible via l'API. Discourse lui-même est une application en JavaScript qui communique avec une API ;
    • Avatars locaux : génération d'avatar locaux sans dépendances externes. Possibilité de choisir un Gravatar existant ou de téléverser son avatar ;
    • Invitation par courriel : les utilisateurs de confiance peuvent inviter des amis par courriel à rejoindre et participer à une discussion par un simple clic ; les administrateurs peuvent inviter des utilisateurs par groupes en renseignant une liste d'adresses courriel ;
    • Brouillon automatique : les réponses et sujets sont automatiquement sauvés sur le serveur en arrière plan pendant leur rédaction ;
    • Historique des révisions : suivi des révisions à chaque modification, avec mise en évidence visuelle des différences pour faire apparaître les changements ;
    • Commentaires wiki : les commentaires peuvent être déclarés comme modifiables par des membres de confiance de la communauté ;
    • Badges : les comportements positifs sont encouragés par un ensemble de badges préexistants ou de votre cru ;
    • Notification par courriel : quand vous n'êtes pas activement sur le site web, vos notifications seront envoyées par courriel ;
    • Réponse par courriel : répondez aux notifications par courriel pour participer sans visiter le site web ;
    • Modération en ligne : outils de contrôle rapide en ligne pour séparer, joindre, fermer, archiver ou re-catégoriser des sujets ;
    • File d'attente de drapeaux de modération : très visible, avec notification optionnelle par courriel. Un clic pour exprimer un accord, un désaccord, ou déférer un drapeau (à un autre modérateur).
    • Notification sur tout le site : punaiser des sujets localement ou globalement. Affichage d'un sujet pour qu'il soit immanquable par tous les utilisateurs ; alerte permanente pour des situations urgentes ;
    • Prise en charge des listes de diffusion : mode spécial pour lequel tous les messages sont envoyés par courriel, comme une liste de diffusion. Démarrage de nouveaux sujets par courriel ;
    • Espace « communauté » : sous-domaine meta.siteweb pour discuter fonctions, bugs, et demandes d'aide.
    • Messages privés : envoi de messages privés à un ou plusieurs utilisateurs ;
    • Sauvegarde et restauration sur le web : toutes les données du site sont enregistrables et restaurables depuis le navigateur ; changez vos données de serveur en quelques clics ;
    • Sauvegardes automatiques : sauvegarde de vos données tous les jours, sur le système de fichiers local ou ailleurs ;
    • Prise en charge des CDN : intégration facile de tous les fournisseurs de CDN pour accélérer l'accès au site.

    Principes d’une discussion civilisée

    Installation

    Discourse s'installe à l'aide de Docker.

    Technologies

    D’après le README du dépôt GitHub de Discourse :

    • Ruby on Rails
    • Ember.js
    • PostgreSQL
    • Redis

    Modèle économique

    Le projet Discourse vend des services d'hébergement.

    Projet similaire

    [NdM] Le cycle de développement est rapide, environ une version tous les quatre mois. La version 1.5 devrait arriver d'ici quelques semaines.

    Lire les commentaires

  • HS - carte d'identité et empreinte de l'index gauche (Journaux LinuxFR)

    Bonjour tout le monde,

    Ma carte d'identité arrivant à expiration je suis allé la faire renouveler.
    Je remplis le formulaire, donne le justificatif de domicile et les photos (faut pas sourire , bien être au centre, etc.) je donne tout à la dame et là, elle me demande de faire une empreinte de mon index gauche !
    Je n'étais pas au courant qu'il fallait donner une empreinte, je ne vous cache pas mon étonnement.
    J'ai trouvé ça assez choquant d'avoir un petit bon de moi sur ce formulaire.
    bref je l'ai fait quand même. Bin ouai faut bien avoir des papiers !

    Au final maintenant je me sens moins libre qu'hier et j'ai plein de question en tête :

    • a-t-on le droit de refuser de donner ses empreintes ?
    • cette empreinte sera utilisée dans quel but ?
    • a-t-on un droit de regard sur ce qui est fait avec notre empreinte ?
    • jusqu'où ça va aller avec ce fichage (à quand le prélèvement d' ADN ?) ?
    • on fait comment quand on n'a plus d'index gauche ?

    bref je voulais savoir si je suis le seul à ne pas apprécier devoir filer une empreinte ou est-ce que je commence a être un vieux con qui fait chier son monde à pas vouloir être fiché comme tout le monde ?

  • Tutorial Code_Aster (Journaux LinuxFR)

    Sommaire

    Bonjour Nal', une fois n'est pas coutume, il pleut en Haute-Garonne ! Alors j'ai tué le temps jetant un œil à Code Aster. Je laisse ici mes notes.

    Code_Aster, qu'est-ce c'est ?

    Code_Aster est un code de calcul de structure thermo-mécanique par la méthode des éléments finis isoparamétriques.
    Il est développé par EDF sous licence GNU/GPLv3.
    Il permet de faire à peu près tout ce qui est imaginable en mécanique, voir à ce propos-là plaquette de présentation

    Ce code de calcul est intégré à la suite de logiciels libres Salomé-Méca, qui contient un préprocesseur, Code_Aster, et un post-processeur/vieweur pour voir les résultats.

    Aujourd'hui, nous allons utiliser le code en version stand_alone, et nous utiliserons notre éditeur de texte préferé, gmsh, astk, puis de nouveau gmsh pour voir les résultats de nos calculs.

    Installation

    Cela se passe ici.
    Deux options:
    1. Soit on compile code_aster
    1. Soit on n'aime pas compiler et on télécharge le binaire de Salome-Méca qui contient code_aster de façon préinstallé, et quelques Gio d'outils dont ne nous servirons pas.

    La compilation se passe assez bien, et les paquets prérequis (voir les instructions de compilation sur leur site) se trouvent assez facilement.

    Calcul de Poutre

    Nous allons étudier le comportement mécanique d'une poutre encastrée d'un côté et soumise à un effort ponctuel de l'autre côté:
    poutre_encastre

    Nous allons le faire de 3 façons:

    1. En modélisation poutre 1D
    2. En modélisation plaque 2D
    3. En modélisation complète 3D

    Création de la géométrie avec Gmsh

    Pour fonctionner, Code_Aster a besoin d'un fichier de commande, et d'un fichier décrivant un maillage: une liste de nœuds et une liste d'éléments reliant ces nœuds. On pourrait lui fournir un fichier texte contenant les coordonnées géométriques de chaque nœud du maillage, mais vu qu'on a la flemme et que cela peut être assez ennuyeux pour des problèmes complexes, on va demander à Gmsh de le faire pour nous.

    On crée tout d'abord la géométrie de notre problème à l'aides de points, de lignes, surfaces et volumes, on doit aussi définir des groupes d’intérêts (la poutre entière, la partie encastrée, et la partie sur laquelle on applique la force). On peut jouer 5 minutes avec la partie GUI de Gmsh pour lequel on trouvera de nombreux tutoriaux sur le web, mais on en revient vite à un fichier texte.

    Voici donc poutre1d.geo:

    //== parametres ==
    //taille maillage autour des noeuds. 2.5mm entre deux noeuds.
    cl__1 = 2.5;
    
    // == geometrie ==
    //points
    Point(1) = {0,0, 0, cl__1}; // extremite encastre de ma poutre
    Point(2) = {100,0, 0, cl__1}; // extremite libre de ma poutre, soumise à une force
    //lignes
    Line(1) = {1, 2}; // on cree la ligne entre Point1 et Point2
    
    //== groupe ==
    Physical Point("encastr") = {1};
    // on encastrera le noeud correspondant à ce point
    
    Physical Point("force") = {2};
    //on appliquera la force sur le noeud correspondant à ce point
    
    Physical Line ("poutre") = {1};
    // notre poutre sera constitue des tous les noeuds et elements correspondant à cette ligne

    Une fois ce fichier poutre1d.geo crée, on l'ouvre avec gmsh (Terminal: gmsh poutre1d.geo)
    On clique sur Mesh > 1D, le maillage est fait, mais on ne le voit pas car seul la géometrie est affichée ! Donc Tools > Options, Onglet Visibily de Géometrie, on décoche Points et Lines et dans Mesh, on coche Nodes and Lines. Cela donne ceci:

    maillage1d

    Notez qu'avec Tools > Options, dans l'onglet list bowser, on peut visualiser/désafficher (toucher enter du clavier une fois cliqué sur le nom du groupe dans la fenêtre) les groupes que nous avons crée et leurs affectations. C'est très pratique. On voit par exemple bien que notre groupe "poutre" est constitué de tous les éléments de la poutre.

    Pour sauvegarder notre maillage, on fait File > Export et on choisit le format de maillage appelé .MED, on obtient donc un beau mesh1d.med. Surtout, on veille à ce que tout soit décoché dans la fenêtre pop-up qui apparaît et on clique rapidement sur OK.

    De même, voici poutre2d.geo, qu'on maille en 2D avec gmsh:

    //== parametres: ==
    //taille maillage autour des noeuds. 2.5mm entre deux noeuds.
    cl__1 = 2.5;
    L=100; //longeur poutre de 100mm
    R=5; // ratio longueur/largeur
    l=L/R;
    
    //== geometrie ==
    //points
    Point(1) = {0, 0, 0, cl__1};
    Point(2) = {L, 0, 0, cl__1};
    Point(3) = {L, l, 0, cl__1};
    Point(4) = {0, l, 0, cl__1};
    Point(5) = {L, l/2, 0, cl__1};
    //lignes
    Line(1) = {1, 2};
    Line(2) = {2, 5};
    Line(3) = {5, 3};
    Line(4) = {3, 4};
    Line(5) = {4, 1};
    
    //surface
    Line Loop(1) = {1, 2, 3, 4, 5}; //on cree une boucle de lignes
    Plane Surface(1) = {1}; // on crée une surface à partir de la boucle
    
    //== groupe ==
    Physical Line("encastr") = {5}; // on encastrera cette ligne
    Physical Point("force") = {5}; // lieu application force
    Physical Surface("poutre") = {1}; // notre poutre 2d

    maillage2d

    Et poutre3d.geo qu'on mesh en 3D avec gmsh:

    //== paramètres: ==
    //taille maillage autour des noeuds.
    cl__1 = 5;
    L=100; //longeur poutre
    R=5; // ratio longueur/largeur
    l=L/5;
    
    //== geometrie ==
    //points
    Point(1) = {0,0, 0, cl__1};
    Point(2) = {L,0, 0, cl__1};
    Point(3) = {L,l, 0, cl__1};
    Point(4) = {0,l, 0, cl__1};
    Point(5) = {L, l/2, 0, cl__1};
    //lignes
    Line(1) = {1, 2};
    Line(2) = {2, 3};
    Line(3) = {3, 4};
    Line(4) = {4, 1};
    //surface
    Line Loop(1) = {1, 2, 3, 4};
    Plane Surface(1) = {1};
    Point{5} In Surface{1}; // pour que le point 5 soit contenu dans la surface
    
    //volume
    Extrude {0,0,-3}{Surface{1};Layers{3}; Recombine;}
    //on extdure la surface 1 de -3mm selon l''axe Z
    //en créant 3 éléments dans l''épaiseur avec l''aide de layers
    
    
    //== groupe ==
    //on sait que c''est la surface 25 parce qu''on le visualise sous gmsh en affichant "surface label".
    //il peut y avoir une erreur lors de l''import si le numéro de la surface crée par l''extrusion n''est pas 25.'
    //      C''est pas grave, on regarde à quoi correspond la surface à encastrer, on trouve son label, et mon modifie les lignes ci-dessous.
    Physical Surface("encastr") = {25}; // on encastrera cette surface
    Physical Point("force") = {5}; // lieu application force
    Physical Volume("poutre") = {1}; // notre poutre 3d
    
    //== mailage ==
    Transfinite Line{1,3}=8*R+1; // 8*R élem dans la longueur = 41 noeuds entre lignes 1 et 3
    Transfinite Line{4,2}=8+1; // 8 élem dans la largeur =  9 noeuds entre lignes 4 et 2
    Transfinite Surface "*"; // on veut un maillage propre
    Recombine Surface "*"; // on veut un maillage quadra

    maillage3d

    Nous voici maintenant avec 3 maillages au format.med Il nous faut maitenant créer notre fichier de commande !

    Fichier de commande

    #U1.03.02
    DEBUT();
    
    #on charge le fichier de maillage .MED, unité logique 20
    mesh=LIRE_MAILLAGE(
        INFO=2,
        INFO_MED=2,
        UNITE=20,
        FORMAT='MED',
    );
    
    #on a importé le maillage et ses groupes, on crée d'autres groupes:
    
    mesh=DEFI_GROUP(
        reuse =mesh,
        INFO=2,
        MAILLAGE=mesh,
        #on crée un groupe nommé TOUT qui contient toutes les mailles du maillage.
        #on ne va pas s'en servir, mais ça peut être utile
        CREA_GROUP_MA=_F(NOM='TOUT',TOUT='OUI',),
        #on grée un groupe de noeud qui contient tous les noeuds de toutes les mailles.
        # Il faut le faire quand le maillage provient de Gmsh, car Gmsh transforme les noeuds en maille, on les retransforme ici en noeud
        CREA_GROUP_NO=_F(TOUT_GROUP_MA='OUI',),
    );
    
    #on affecte au groupe de maille 'poutre' crée avec gmsh,
    #   des éléments finis de types Poutre, ici POU_D_T
    model=AFFE_MODELE(
        MAILLAGE=mesh,
        AFFE=(
            _F(
              GROUP_MA=('poutre',),
              PHENOMENE='MECANIQUE',
              MODELISATION='POU_D_T',
            ),
        ),
    );
    
    #on définit un matériaux, ici de l''acier:
    #  Module d'Young' E = 210000 N/mm2
    #  Coefficient de Poisson, nu = 0.3
    #  masse volumique = 8e-9 tonne/mm3
    steel=DEFI_MATERIAU(ELAS=_F(E=210000.,NU=0.3,RHO=8e-9),);
    
    #U4.43.03
    #on assigne notre matériaux à nos mailles du groupe 'poutre'
    material=AFFE_MATERIAU(
        MAILLAGE=mesh,
        AFFE=_F(GROUP_MA=('poutre',), MATER=steel,),
    );
    
    
    #U4.42.01
    #On assigne à nos éléments poutre POU_D_T une section rectangulaire de largeur 20mm et d'épaisseur 3mm
    
    elemcar=AFFE_CARA_ELEM(
        MODELE=model,
        INFO=2,
        POUTRE=(
            _F(
                GROUP_MA=('poutre',),
                SECTION='RECTANGLE',
                CARA=('HY','HZ',),
                VALE=(3,20),
            ),
        ),
    );
    #on interdit toutes rotations et translations aux noeuds du groupe 'encastr' (1 seul noeud ici).
    #   cela simule l'encastrement
    encast=AFFE_CHAR_MECA(
        MODELE=model,
        DDL_IMPO=(
            _F(
                GROUP_NO=('encastr',),
                DX=0,DY=0,DZ=0,DRX=0,DRY=0,DRZ=0,
            ),
        ),
        INFO=1,
    );
    
    # on applique 500N selon la direction -Z au noeud de notre groupe 'force'
    force_f=AFFE_CHAR_MECA(
        MODELE=model,
        FORCE_NODALE=_F(
            GROUP_NO=('force',),
            FZ=-500,
        ),
        INFO=2,
    );
    
    #U4.51.01
    #on compile les précédents concepts pour le calcul
    stat=MECA_STATIQUE(
        MODELE=model,
        CHAM_MATER=material,
        CARA_ELEM=elemcar,
        EXCIT=(
            _F(CHARGE=encast,),
            _F(CHARGE=force_f,),
    
        ),
    );
    
    # Par défaut, sont calculés uniquement les déplacements et les réactions nodales aux points de gauss des éléments, je crois.
    # du coup on enrichit le concept "stat" pour lui demander d'autres choses.
    # SIEF_ELNO: ici, efforts théorie des poutres au niveau des nœuds des éléments
    # SIPO_ELNO: ici, contraintes dans la poutre, au niveau des nœuds des éléments
    # SIPM_ELNO: ici, contrainte max dans la poutre
    # REAC_NODA: forces/moments aux nœuds limites
    stat=CALC_CHAMP(
        reuse =stat,
        RESULTAT=stat,  
        CONTRAINTE=(
            'SIEF_ELNO','SIPO_ELNO','SIPM_ELNO',
        ),
        FORCE=('REAC_NODA',),
    );
    
    #on imprime ça dans un fichier de sortie .med, unité logique 80.
    #on n'imprime que les déplacements et les contraintes
    # (on n'affiche pas tout ce qu'on a calculé, genre SIPM_ELNO ou REAC_NODA pourquoi pas !)
    IMPR_RESU(
        FORMAT='MED', 
        UNITE=80,
        RESU=_F(
            RESULTAT=stat,
            NOM_CHAM=(
                'DEPL',
                'SIPO_ELNO',
                'SIPM_ELNO',
            ),
        ),
    );
    
    FIN();

    (Notez que les #U4.51.01 ou autres renvoient à la documentation )
    On enregistre ce fichier texte en 1d.comm par exemple, et nous allons lancer le calcul à l'aider d'astk.

    Astk

    Astk est l'outil permettant de mener à bien un calcul, on le lance via /opt/code_aster/bin/astk (si vous avez installé code_aster dans /opt/).

    On cherche à obtenir une fenêtre qui a cette allure :

    astk

    Ensuite :
    - File -> New
    - on choisit notre path / dossier de travail
    - dans la colonne d'icônes au milieu à droite, on clique sur l’icône en forme de dossier bleu, pour aller chercher son mesh1d.med et son 1d.comm
    - on clique sur l’icône du dessus pour ajouter deux lignes, puis dans type pour la ligne, on choisit mess et rmed, dans name on les appels ./log1d.mess et ./resu1d.rmed
    - File -> Save_As -> 1d.astk

    La colonne LU correspond à Logique Unité, c'est l'endroit de la mémoire où je ne sais quoi où on s'attend à trouver le fichier, dans le fichier.comm on a précisé que l'unité logique était 20 pour le maillage .med et 80 pour le résultat .med
    Les colonnes DRC veulent dire Datas, Récrire, Compressé.

    Une fois que cela est fait on clique sur Run ! Le calcul est lancé, il se termine, on va voir le log1d.mess qui a était crée, il contient toutes les infos relatives au calcul.
    L'information la plus importante étant la dernière ligne.

    Chez moi j'ai: EXECUTION_CODE_ASTER_EXIT_13223-localhost=0
    Si le code renvoit 0, c'est que cela a fonctionné ! S'il renvoit 1, c'est que ça a planté et qu'il faut débuger…

    Résultat

    Normalement tout a fonctionné, nous avons un beau resu1d.rmed que nous ouvrons aves gmsh (Terminal gmsh resu1d.rmed)

    On peut donc voir les déplacements et la contrainte, tout ce dont a besoin un mécanicien pour dimenssionner des systèmes mécaniques !

    Voici les paramètres sur lequels agir pour afficher le déplacement multiplié par 10. Il faut afficher des Vectors et non pas l'Original Field. Comme ci-dessous:

    gmsh poutre 1d

    Pour les contraintes, SIPO_ELNO contient la contribution de chaque force/moment aux contraintes de la poutre.

    C'est grossomodo un vecteur de 6 composantes que voici:

    contraintes

    Pour les afficher une par une, on se place dans Options > Visibility > et, en bas, la première case à droite de la liste déroulante Original Field/Scalar Force/Vector/Tensor. 0 Correspond à SN et 5 correspond à SNT, par rapport au tableau ci-dessus. (Je ne sais pas trop ce que présente SIPO_ELNO par défaut)

    SIPM_ELNO quant à lui présente par défaut la contrainte maximum selon XX.

    Voici d'autre visu avec les modèles 2D et 3D:

    2d_vmises
    3d_déplacement
    3d_vmises

    Aller plus loin

    Code_Aster est très vaste, il contient près de 400 types d'éléments finis ! Pour aller plus loin, n'hésitez pas à lire la doc, qui contient aussi des exemples de calcul qui sont livrés avec le code.

    Je vous conseille aussi notamment l'excellent livre sous licence libre de Jean-Pierre Aubry, qui est un passage obligatoire pour prendre en main le code ! (Le code date par contre de la version 11 de Code_Aster, mais une nouvelle version est en cours d'écriture !)
    On y fait notamment des analyses non-linéaires avec du contact entre pièces et du frottement.
    Aster Study vient aussi de faire son apparition.

    Voilou cher journal, n'hésite pas à t'amuser !

    Je poste en commentaire à ce journal les fichiers .comm de calcul en 2D et 3D.

    Lire les commentaires

  • Pimp my FnacBook (Journaux LinuxFR)
    Cher Journal,

    Je t'écris pour la première fois en ce beau jour de Noël pour te parler du cadeau que j'ai trouvé ce matin dans mon petit soulier: un FnacBook, c'est à dire un livre numérique, aka: une liseuse. Ma première réaction fut de m'asseoir en face du père Noël, qui s'était arrêté pour prendre un café, et de lui dire que non, décidément, je n'ai pas l'usage d'un livre numérique. J'ai beau lire beaucoup, je ne vois pas comment un appareil électronique, donc fragile, et qui fonctionne sur batterie pourrait remplacer un livre en papier, que je considère comme un objet absolument parfait, du moins pour l'usage que j'en ai. Le père Noël me dit de réfléchir et repartit par la cheminée.

    A l'heure qu'il est, je n'ai donc pas encore déballé mon FnacBook et je me renseigne sur les détails techniques de la bête. Et LÀ, je dois dire que je suis épaté par ce que je vois sous le capot :

    1) GNU/Linux
    2) Papier électronique
    3) Carte micro SD
    4) Accéléromètre
    5) Wifi
    (et roulements de tambours)
    6) Carte SIM GPRS/EDGE/3G (réseau SFR)

    Je précise qu'il n'y a aucun abonnement lié à la carte SIM. Mon premier réflexe, c'est donc de me demander si je peux installer un navigateur sur la bête ? Car rends-toi bien compte, cher Journal, des capacités qu'offrirait un tel système : on parle là d'avoir un accès internet illimité pour zéro euro, sur un écran à encre électronique qui tient dans la paume de la main avec une autonomie de quinze heures (ok, je fantasme sur l'autonomie annoncée de l'appareil, qui ne prend probablement pas en compte la connexion 3G).

    Bon, en gros : soit je parviens à trouver une manière de modifier l'UI et l'OS pour utiliser un navigateur, soit je rends la bête au magasin. Journal, qu'en penses-tu ? Est-ce que ce projet te paraît réalisable ?
  • Site web : Wywiwig et drag & drop (Journaux LinuxFR)

    Bonjour nal

    Ne m'en veux pas : j'ai lâché des mots techniques et en anglais dans le titre … mais on est bien chez des techniciens ici, non ? ;-)

    La recherche

    Ca fait un moment, que je me dis qu'il est bizarre qu'il n'existe pas de gestionnaire de site web qui permette d'éditer et modifier facilement des pages (comme savent le faire les strikingly, weebly, wix et consorts) mais en logiciel libre et installable sur mon serveur.

    WordPress (et PluXml et Drupal et d'autres) sont des (CMS aka Content Management System aka Gestionnaire de Contenu). Du coup, ils sont très bien pour gérer des pages de contenu (du blog, un site institutionnel avec pas mal de pages et un formatage identique …) mais ils sont compliqués à utiliser dès qu'on veut faire du site one page ou une landing page avec une mise en page sympa.
    Alors bien sur, avec WordPress, il y a des thèmes avec un paquet de plugins qui permettent d'arriver à un résultat très sympa … mais quand on voit les manipulations à effectuer (et la lenteur) ce n'est pas très user friendly … même pour des informaticiens ! Tandis qu'avec les logiciels sus-nommés (strikingly, weebly, wix …) on attrape et dépose sur la page les éléments qu'on veut et on les modifie, comme dans un traitement de texte (ou un logiciel de PAO).

    Le résultat

    Après cette longue introduction, voici le résultat de mes recherches.
    Dans le monde libre, je ne connaissais que Oddo qui faisait de la création de site web en drag & drop … mais bon, installer Odoo juste pour faire un site de quelques pages, c'est un peu trop.

    Alors aujourd'hui, j'ai un peu cherché et j'ai trouvé (dans mon ordre de préférence) :

    • impresspages
      Ca fait exactement, ce que je voulais : du drag & drop wysiwig et libre (licence MIT). De plus, l'ecosystème a l'air assez vif : ils ont pas mal de thèmes et encore plus de plugins. Certains thèmes et plugins ne sont pas gratuits … mais il faut bien que tout le monde mange. Très facile à tester sur leur démo en ligne.

    • Respond
      Un CMS qui serait classique si l'édition des pages ne se faisais pas directement dans les pages et avec du drag & drop : une solution à explorer ! Par contre, l'écosystème a l'air faible (5 thèmes, pas de plugins).

    • Microweber CMS
      Fait ce que je recherche et bien plus : blog, et e-commerce. Peut-être un peu trop : à étudier.

    • BuilderEngine
      Il fait des choses mais a l'air un peu complexe et pas très user friendly (d'après les photos d'écrans, ça ressemble aux usines à gaz WordPress).

    Vos expériences

    Du coup, je suis à la recherche de retours d'expérience sur ces produits ou d'autres similaires (toujours en Open Source pour installer sur son serveur).

    … je posterai également mes propres tests : pour le moment, j'ai juste tester la démo de Impresspages, tous les autres nécessitant de donner son adresse e-mail.

    Lire les commentaires

  • Netlibre, un nom de domaine gratuit, facilement administrable (Dépêches LinuxFR)

    Ça y est, l'heure de l'auto-hébergement est arrivée ! La famille a un Raspberry Pi qui sert à partager les montages des plus belles parties de Call of Duty de grand-maman, grand-papa tient un blog de jardinage en milieu urbain, le plus jeune héberge des serveurs de jeu (minetest, xonotic, redeclipse, teeworlds)… le monde est beau !

    Ah mais zut, il faut payer chaque année une petite somme d'argent pour avoir un nom sur le grand 'ternet ! Ce n'est pas bien cher, mais si on veut simplement s'essayer à l'auto-hébergement cela peut être un frein. Il existe cependant une solution…

    Le service netlib.re

    Netlib.re est un service en ligne, basé sur du code libre, qui vous permettra de gérer une zone (un nom de sous-domaine) gratuitement. L'interface est simplifiée au possible pour ne pas décourager les moins aguerris d'entre-nous. Il est possible également d'utiliser ce service comme remplaçant direct de DynDNS, puisqu'avec un simple script on peut mettre à jour sa zone, ce qui est pratique pour les personnes qui ont une IP dynamique.

    Votre nom de sous-domaine ressemblera à "quelque-chose.netlib.re" ou "quelque-chose.codelib.re", en utilisant les deux seuls noms de domaine actuellement disponibles.

    Concrètement, une personne loue un nom de domaine auprès d'un bureau d'enregistrement (moi), et permet à tout le monde de créer des noms de sous-domaines à partir de celui-ci, sans limite de nombre. Le service est hébergé sur l'infrastructure d'Alsace Réseau Neutre, le serveur DNS est redondé (un à Strasbourg, l'autre chez Tetaneutral à Toulouse) n'ayez donc pas trop peur d'une coupure de courant malencontreuse.

    L'avenir sera automatique ou ne sera pas.

    Toujours dans l'idée de conquérir le monde il serait intéressant d'automatiser la création de comptes pour les nouvelles personnes. Dans le cadre de la brique par exemple, on pourrait penser fournir un nom de sous-domaine à chaque personne en même temps qu'on fournit l'appareil. Ainsi, chaque personne souhaitant devenir indépendante pourrait repartir avec un serveur lui permettant de s'héberger à la maison (site web, lecteur de flux rss, galerie d'images, mails, partage de fichiers, torrents…) mais aussi un nom et pourquoi pas bientôt un certificat pour qu'on soit sûr qu'on discute bien avec Gertrude Touchatonq et pas avec un vilain pirate informatique.

    Le choix entre deux noms de domaine, c'est peu !

    Pour l'instant n'importe qui peut choisir entre avoir un nom de domaine en « .netlib.re » ou en « .codelib.re ». C'est assez peu, mais n'hésitez pas à me contacter (via Alsace Réseau Neutre) pour aider financièrement à ajouter des noms de domaine disponibles.

    Le code de netlib.re (section pour dév. et sys/admin)

    Le code de netlib.re est hébergé actuellement sur Github, il est fait avec beaucoup d'amour en langage Perl, et utilise le framework Dancer.
    Le README évoluera dans les semaines à venir pour y inclure une procédure pour installer le programme, ainsi que tous les logiciels nécessaires au bon fonctionnement.

    Pour le moment, le service fonctionne avec un serveur maître Bind9 (avec contrôle rndc), un serveur esclave nsd4 (avec contrôle nsd-control en local), et un serveur web qui discute avec les deux précédents via ssh.
    Donc si vous avez déjà quelque-chose ressemblant, mettre en place votre propre instance du programme sera un jeu d'enfant, et à vous le partage de nom de domaine !

    Lire les commentaires

  • Neatmail: un client mail minimaliste (Journaux LinuxFR)

    Sommaire

    J’utilise depuis quelque temps un tout petit client mail, qui ne fait vraiment que le minimum, mais a une interface si particulière, qu’il me semble intéressant de vous le présenter. Il s’agit de Neatmail écrit par Ali Gholami Rudi.

    Ali Gholami Rudi

    Je connais Ali Gholami Rudi pour une implémentation de Troff à la fois pertinente en termes de fonctionnalités et dont le code source est très propre. Il a aussi écrit un compilateur (neatcc), une libc (neatlibc), et une implémentation de vi. C’est un développeur qui, plutôt qu’une éthique, semble défendre une certaine esthétique du logiciel, que je qualifierai de minimaliste: code source compréhensible par une personne seule, logiciel qui fait peu de choses, mais le fait bien, etc.

    Neatmail le client mail qu'il s'est programmé, et celui‐ci met en scène toute l’esthétique de son auteur.

    Ce que Neatmail ne fait pas

    Neatmail ne fait que gérer un fichier mbox (une concaténation de mails). Ainsi, il ne sait ni rapatrier, ni envoyer les mails, il ne sait ni extraire, ni ajouter de pièce jointes, etc.

    Mais en vérité, il n’a pas besoin de faire tout cela, car d’autres logiciels le font. Ali Gholami Rudi propose ainsi un pop3 pour rapatrier les mails depuis un serveur pop3, et smtp pour envoyer ses mails à un serveur smtp. Et il existe dans certaines distributions un ripmime pour extraire les pièces jointes d’un fichier mime.

    Ce que Neatmail fait

    Neatmail se contente donc d’effectuer des actions sur un fichier mbox. Les actions de bases sont:

    mk Génère une liste des mails contenus dans la mbox.
    ns Génère une liste des nouveaux mails présents dans la mbox.
    pg Affiche un des mails contenu dans la mbox.

    On peut donc l’utiliser ainsi:

    # Obtient les mails
    pop3
    # liste les mails, triés par fil de discussion
    neatmail mk ‐r ‐st ‐0 18from:48~subject: mbox
    # affiche le 3e mail
    neatmail pg mbox 3
    # prépare une réponse
    neatmail pg ‐r mbox 3 > draft.eml
    vi draft.eml
    # envoie la réponse
    tail ‐n+2 draft.eml | smtp
    # garde une copie de la réponse
    cat draft.eml >> sent
    rm draft.eml

    Mais en outre, neatmail peut interpréter les commandes ex contenues dans la liste des mails. Autrement dit, l’utilisateur est invité à ajouter des commandes à cette liste de mails, et donner le tout à neatmail qui se chargera de l’exécution:

    neatmail mk ‐r ‐0 18from:48~subject > list.nm
    vi list.nm
    neatmail ex < list.nm

    Le commande ex de neatmail

    La commande ex de neatmail prend en entrée une liste de commandes, et les exécute sur un fichier mbox. Elle ignore toutes les lignes hormis celles commençant par deux points (commande ex) ou une lettre majuscule (un mail dans la liste). Les lignes commençant par une lettre majuscule de la forme "R100..", modifient le statut du message dont le nombre suit la lettre (ici, 100). Une telle ligne définit aussi le message actuel, celui sur lequel les commandes sont exécutées. Les commandes ex sont les suivantes:

    rm supprime le message courant.
    cp copie le message courant dans une mbox donnée.
    mv déplace le message courant dans une mbox donnée.
    hd modifie l’entête donnée du message courant.
    ft passe le message courant à une commande donnée.
    w écrit les modifications dans la mbox.
    tj joint les fils de discussion en modifiant l’entête "Reply‐To".
    ch coupe le message à l’offset indiqué.

    Par défaut, ces commandes agissent sur le message courant, mais il est aussi possible d’utiliser des adresses du type 2,5rm pour effacer les messages 2 à 5. Il est aussi possible d’utiliser des expressions régulières du type /regex/rm, où regex est recherché dans le sujet des messages. D’autres champs peuvent être spécifiés en utilisant l’expression ^field:value.

    Un script shell comme interface

    Vous allez certainement penser que l’interface est un peu rude… À vrai dire, Ali Gholami Rudi n’utilise pas neatmail directement: un script shell (m) lui sert d’interface. Et c’est là que le logiciel brille: pour peu que l’on ait un peu l’habitude du shell, on peut se créer une interface sur mesure. On peut par exemple imiter l’interface de mh (un autre client mail non interactif un peu oublié). On pourrait créer une interface interactive. Bref, on peut faire ce qu’on veut.

    J’utilise par exemple l’interface suivante:

    m box inbox # liste les messages contenus dans la mbox inbox.
    m vi 3 # affiche le message 3
    m next # affiche le message 4
    m repl # ouvre mon éditeur sur une réponse préformatée au message 4
    m add f.pdf # joint f.pdf à ma réponse
    m send # envoie ma réponse.
    m R # marque le message 4 comme lu.
    m com # enregistre les changements dans la mbox (ici, change l’entête du message 4)

    Conclusion

    Au jour le jour, je suis plutôt satisfait de l’ensemble. Le fait de travailler sur les mails en local est plutôt agréable: c’est fluide, offre une grande liberté d’organisation, s’associe bien à un système de sauvegarde ou de gestion de version, etc. Le fait que le client ne soit pas interactif apporte un certain confort d’usage: le shell est sous la main si besoin, je retrouve ma session de travail dans l’état où je l’ai laissée d’un jour à l’autre, il est facile d’implémenter des solutions pour revenir en arrière (cp…). Le fait de coupler le tout avec le shell offre une grande liberté dans la création de l’interface utilisateur.

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • LinuxFr.org : première quinzaine de juin 2018 (Journaux LinuxFR)

    Nonante huitième épisode dans la communication entre les différents intervenants autour du site LinuxFr.org : l’idée est tenir tout le monde au courant de ce qui est fait par les rédacteurs, les admins, les modérateurs, les codeurs, les membres de l’association, etc.

    L’actu résumée ([*] signifie une modification du sujet du courriel) :

    Statistiques

    Du 1er au 15 juin 2018

    • 1528 commentaires publiés (dont 8 masqués depuis) ;
    • 248 tags posés ;
    • 80 comptes ouverts (dont 6 fermés depuis) ;
    • 35 entrées de forums publiées (dont 0 masquée depuis) ;
    • 20 liens publiés (dont 1 masqué depuis) ;
    • 21 dépêches publiées ;
    • 25 journaux publiés (dont 1 masqué depuis) ;
    • 3 entrées nouvelles, 1 corrigée dans le système de suivi ;
    • 1 sondage publié ;
    • 0 pages wiki publiées (dont 0 masquée depuis).

    Listes de diffusion (hors pourriel)

    Liste webmaster@ - [restreint]

    • R.A.S.

    Liste linuxfr-membres@ — [restreint]

    • [membres linuxfr] Bouffe des 20 ans le 28 juin à Paris

    Liste meta@ - [restreint]

    • [Meta] Incident du jour sur SSL/TLS
    • [Meta] Quel avenir pour la tribune ?

    Liste moderateurs@ - [restreint]

    • [Modérateurs] certificat linuxfr expiré
    • [Modérateurs] Incident du jour sur SSL/TLS
    • [Modérateurs] Certificat SSL
    • [Modérateurs] où se trouve les CSS de Linuxfr
    • [Modérateurs] forum - bug pour s'inscrire ?

    Liste prizes@ - [restreint]

    • [Prizes] LinuxFr prizes recap du samedi 9 juin 2018, 13:35:23 (UTC+0200)
    • [Prizes] J'ai gagné un livre!

    Liste redacteurs@ - [public]

    • [Rédacteurs] Incident du jour sur SSL/TLS

    Liste team@ - [restreint]

    • [team linuxfr] Certificat SSL du site linuxfr.org expiré
    • [team linuxfr] Tweet de Laurent Jouanneau (@ljouanneau)
    • [team linuxfr] Incident du jour sur SSL/TLS
    • [team linuxfr] Purge du compte X [*]
    • [team linuxfr] réouverture de compte
    • [team linuxfr] Organisez des événements dans le cadre de la Fête des Possibles, du 15 au 30 septembre 2018

    Liste webmaster@ — [restreint]

    • R.A.S.

    Canal IRC adminsys (résumé)

    • certificat X.509 périmé (encore merci à tous ceux qui l'ont signalé), passage à Let's Encrypt et communication post-incident
    • renouvellement du domaine (encore merci Yann)
    • dernière version de Jessie (8.11) prévu le 23 juin, et ensuite passage en fin de vie
    • question relative à la configuration DMARC de la liste Sympa des modérateurs qui change le From de l'émetteur dans certains cas
    • rachat de GitHub par Microsoft et dépôts LinuxFr.org. Faut-il bouger et pourquoi.
    • Let's Encrypt et HTTP en clair pour le renouvellement ? Voir par exemple la discussion
    • discussion sur les aspects sécurité de l'affichage distant d'images sur la tribune
    • « 20 ans le bel âge pour mourir », ah non ça parle de Yahoo Messenger, pas de nous
    • 20 ans du site et POSS en décembre ?
    • courriels envoyés pour préparer les entretiens des 20 ans
    • peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
    • migration de alpha et main en Jessie
    • travaux en cours pour nettoyer le dépôt git d'admin (avec des fichiers générés par ansible notamment). Sans oublier de finaliser la partie Let's Encrypt…
    • toujours un conteneur à migrer en Jessie, et ensuite trois en Stretch. Et aussi un hôte Trusty à mettre à jour.

    Tribune de rédaction (résumé)

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

    Tribune de modération (résumé)

    • peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
    • du spam
    • améliorations de CSS proposées par voxdemonix
    • les admins du site ont des facilités techniques pour traquer les spammeurs et les multis, par rapport aux modérateurs
    • retour des Geek Faeries

    Commits/pushs de code https://github.com/linuxfrorg/

    • (springcleaning) admin-linuxfr.org en cours de conversion vers Ansible
    • Allow users to choose the source for their tribune smileys in prefere…
    • Add a border for missing title on images
    • Fix max height for image on computer screen

    Divers

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • LinuxFr.org : seconde quinzaine de mai 2018 (Journaux LinuxFR)

    Nonante-septiè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) :

    Avertissement

    Ceci est un second message pour prévenir certains de nos visiteurs qui nous transmettent inutilement des infos sensibles via leur lecteur de flux RSS/Atom, infos qui se retrouvent stockées dans nos logs web.

    Format par défaut d'un log du serveur web Nginx (source) :

    log_format combined '$remote_addr - $remote_user [$time_local] '
                        '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent"';
    

    Certains utilisateurs nous transmettent leur nom d'utilisateur distant (pas forcément gênant, mais inutile).

    Par contre, certains nous transmettent leur nom d'utilisateur ET leur mot de passe. On a ainsi leur nom d'utilisateur dans le champ remote_user mais aussi leur nom d'utilisateur et leur mot de passe en clair dans le champ http_referer, sous la forme http://login:pass@linuxfr.org/journaux.atom ou https://login:pass@linuxfr.org/news.atom. Cela concerne 6 utilisateurs différents (tous utilisateurs de FreshRSS), dont 1 a été identifié et contacté en privé. Pour les cinq autres, à savoir Jeoffrey, jm, lionel, SVNET et titoko, je vous suggère d'arrêter de nous envoyer votre mot de passe, puis de changer de mot de passe étant donné qu'il a fuité, et aussi d'utiliser préférentiellement la version HTTPS du flux souhaité. N'hésitez pas à me contacter en privé si vous avez des questions (oumph CHEZ linuxfr.org).

    La version FreshRSS 1.11.0 du 2018-06-03 corrige ce problème Strip HTTP credentials from HTTP Referer in SimplePie #1891.

    Statistiques

    Du 16 au 31 mai 2018

    • 1371 commentaires publiés (dont 11 masqués depuis) ;
    • 344 tags posés ;
    • 99 comptes ouverts (dont 9 fermés depuis) ;
    • 33 entrées de forums publiées (dont 1 masquée depuis) ;
    • 32 liens publiés (dont 1 masqué depuis) ;
    • 26 dépêches publiées ;
    • 30 journaux publiés (dont 1 masqué depuis) ;
    • 3 entrées nouvelles, 1 corrigée dans le système de suivi ;
    • 0 sondage publié ;
    • 2 pages wiki publiées (dont 1 masquée depuis).

    Listes de diffusion (hors pourriel)

    Liste webmaster@ - [restreint]

    • R.A.S.

    Liste linuxfr-membres@ — [restreint]

    • R.A.S.

    Liste meta@ - [restreint]

    • R.A.S.

    Liste moderateurs@ - [restreint]

    • [Modérateurs] Dépêche Refaire linuxfr
    • [Modérateurs] contenu problématique
    • [Modérateurs] nfsw
    • [Modérateurs] URL d'une dépêche

    Liste prizes@ - [restreint]

    • R.A.S.

    Liste redacteurs@ - [public]

    • R.A.S.

    Liste team@ - [restreint]

    • [team linuxfr] Optimize MySQL
    • [team linuxfr] Login/mot de passe envoyé en clair dans une URL HTTP sur LinuxFr.org
    • [team linuxfr] Login/mot de passe envoyé en clair dans une URL HTTP sur LinuxFr.org
    • [team linuxfr] Login/mot de passe envoyé en clair dans une URL HTTP sur LinuxFr.org
    • [team linuxfr] Test passage en Jessie
    • [team linuxfr] Joker.com: Your domains are about to expire (expiration report)

    Liste webmaster@ — [restreint]

    • R.A.S.

    Canal IRC adminsys (résumé)

    • mises à jour de sécurité
    • le support sécurité normal pour Debian GNU/Linux 8 Jessie s'arrête au 17 juin
    • expiration du certificat au 3 juin et discussion sur le renouvellement
    • deux conteneurs mis à jour en Jessie, en attendant le passage en Stretch
    • le conteneur de développement redirige tout le trafic en HTTPS désormais
    • une boucle de courriels entre un système de ticket et notre gestionnaire de liste de diffusion
    • travaux en cours pour nettoyer le dépôt git d'administration système (avec des fichiers générés par l'outil d'automatisation Ansible notamment)

    Tribune de rédaction (résumé)

    • Migration de GIMP vers GitLab ajoutée dans la dépêche sur la 2.10.2
    • Demande de retours sur la dépêche GrafX2 par le développeur principal
    • Une correction post-publication

    Tribune de modération (résumé)

    • du spam (dont un robot réutilisant des extraits de phrases)
    • modération d'une image déplacée
    • expiration de notre certificat X509 Gandi Wildcard au 3 juin
    • évocation du renouvellement du CNNum (on aurait pu mentionner les entrées au comité de prospective de la CNIL)
    • migration de deux conteneurs en Debian Jessie

    Commits/pushs de code https://github.com/linuxfrorg/

    • Merge pull request #222 from fredplante/master
    • Fix typo
    • (svgtex) fixes duplicate xlink attribute on svg result
    • (epub) Use https for LinuxFr.org URLs

    Divers

    • Geek Faëries du 1 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. Plein de mercis à Bookynette pour le Village du libre, à l'équipe organisatrice des GF, et à Marco et Marius pour l'hébergement.
    • Proposition de conférence soumise + table ronde + demande de stand pour les RMLL 2018 Strasbourg

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • LinuxFr.org : première quinzaine de juin 2018 (Journaux LinuxFR)

    Nonante-huitième épisode dans la communication entre les différents intervenants autour du site LinuxFr.org : l’idée est tenir tout le monde au courant de ce qui est fait par les rédacteurs, les admins, les modérateurs, les codeurs, les membres de l’association, etc.

    L’actu résumée ([*] signifie une modification du sujet du courriel) :

    Statistiques

    Du 1er au 15 juin 2018

    • 1528 commentaires publiés (dont 8 masqués depuis) ;
    • 248 tags posés ;
    • 80 comptes ouverts (dont 6 fermés depuis) ;
    • 35 entrées de forums publiées (dont 0 masquée depuis) ;
    • 20 liens publiés (dont 1 masqué depuis) ;
    • 21 dépêches publiées ;
    • 25 journaux publiés (dont 1 masqué depuis) ;
    • 3 entrées nouvelles, 1 corrigée dans le système de suivi ;
    • 1 sondage publié ;
    • 0 pages wiki publiées (dont 0 masquée depuis).

    Listes de diffusion (hors pourriel)

    Liste webmaster@ - [restreint]

    • R.A.S.

    Liste linuxfr-membres@ — [restreint]

    • [membres linuxfr] Bouffe des 20 ans le 28 juin à Paris

    Liste meta@ - [restreint]

    • [Meta] Incident du jour sur SSL/TLS
    • [Meta] Quel avenir pour la tribune ?

    Liste moderateurs@ - [restreint]

    • [Modérateurs] certificat linuxfr expiré
    • [Modérateurs] Incident du jour sur SSL/TLS
    • [Modérateurs] Certificat SSL
    • [Modérateurs] où se trouvent les CSS de Linuxfr [*]
    • [Modérateurs] forum - bug pour s'inscrire ?

    Liste prizes@ - [restreint]

    • [Prizes] LinuxFr prizes recap du samedi 9 juin 2018, 13:35:23 (UTC+0200)
    • [Prizes] J'ai gagné un livre!

    Liste redacteurs@ - [public]

    • [Rédacteurs] Incident du jour sur SSL/TLS

    Liste team@ - [restreint]

    • [team linuxfr] Certificat SSL du site linuxfr.org expiré
    • [team linuxfr] Tweet de Laurent Jouanneau (@ljouanneau)
    • [team linuxfr] Incident du jour sur SSL/TLS
    • [team linuxfr] Purge du compte X [*]
    • [team linuxfr] réouverture de compte
    • [team linuxfr] Organisez des événements dans le cadre de la Fête des Possibles, du 15 au 30 septembre 2018

    Liste webmaster@ — [restreint]

    • R.A.S.

    Canal IRC adminsys (résumé)

    • certificat X.509 périmé (encore merci à tous ceux qui l'ont signalé), passage à Let's Encrypt et communication post-incident
    • renouvellement du domaine (encore merci Yann)
    • dernière version de Jessie (8.11) prévu le 23 juin, et ensuite passage en fin de vie
    • question relative à la configuration DMARC de la liste Sympa des modérateurs qui change le From de l'émetteur dans certains cas
    • rachat de GitHub par Microsoft et dépôts LinuxFr.org. Faut-il bouger et pourquoi.
    • Let's Encrypt et HTTP en clair pour le renouvellement ? Voir par exemple la discussion
    • discussion sur les aspects sécurité de l'affichage distant d'images sur la tribune
    • « 20 ans le bel âge pour mourir », ah non ça parle de Yahoo Messenger, pas de nous
    • 20 ans du site et POSS en décembre ?
    • courriels envoyés pour préparer les entretiens des 20 ans
    • peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
    • travaux en cours pour nettoyer le dépôt git d'admin (avec des fichiers générés par ansible notamment). Sans oublier de finaliser la partie Let's Encrypt…
    • toujours un conteneur à migrer en Jessie, et ensuite trois en Stretch. Et aussi un hôte Trusty à mettre à jour.

    Tribune de rédaction (résumé)

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

    Tribune de modération (résumé)

    • peu de présents aux RMLL dans l'équipe. Snif. Me laissez pas tout seul.
    • du spam
    • améliorations de CSS proposées par voxdemonix
    • les admins du site ont des facilités techniques pour traquer les spammeurs et les multis, par rapport aux modérateurs
    • retour des Geek Faeries

    Commits/pushs de code https://github.com/linuxfrorg/

    • (springcleaning) admin-linuxfr.org en cours de conversion vers Ansible
    • Allow users to choose the source for their tribune smileys in prefere…
    • Add a border for missing title on images
    • Fix max height for image on computer screen

    Divers

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • La gestion de l'authentification sous Linux avec PAM (Laboratoire Linux SUPINFO)

    La gestion de l'authentification sous Linux avec PAM

     

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

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

     

    Linux-PAM

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

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

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

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

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

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

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

     

    Les fichiers de configuration

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

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

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

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

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

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

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

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

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

     

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

    [valeur1=action1 valeur2=action2 ...]

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

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

     

    Quant à actionN il peut prendre une des formes suivantes :

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

     

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

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

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

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

     

    Les modules

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

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

     

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

     

    Conclusion

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

     

    Ressources supplémentaires

     

  • Que faire avec ses clefs steam inutilisées ? (Journaux LinuxFR)

    Cher lecteur,

    Depuis maintenant quelque temps, j'achète de nombreuses compilations de jeux dématérialisés, quand je trouve des jeux linux dedans qui m'intéressent. De plus, je suis abonné au Humble Monthly qui permet à partir d'un prépaiement de 12 dollars (ou moins, en cas d'abonnement sur plusieurs mois) de disposer de jeux sympas, mais que l'on ne connait pas à l'avance.

    Avec le temps, je me suis donc retrouvé à la tête de nombreuses clefs steam ou autre, jamais réclamées et qui ne m’intéressent pas car :

    • Le jeu n'est pas disponible sous linux,
    • Le jeu ne m'intéresse pas,
    • Je possède déjà le jeu,
    • La réponse D.

    Je possède plus de 100 clefs actuellement, mais plus le temps passe, plus ce nombre augmente. Et dans cette liste, il y a quelques jeux un peu anciens, mais plutôt connus et bons (Dark Souls II, Resident Evil 5, SUPERHOT, Total War: WARHAMMER…).

    Pour l'instant, j'ai essayé des petites choses avec ces clefs inutil(ilé)es :

    • Je les ai données à des amis, collègues, famille… mais nombreux ceux les gamers de mon entourage qui sont dans le même cas que moi et possèdent de quoi jouer pour les prochaines décennies.
    • J'en ai "revendu" sur des sites spécialisés. En gros, tu fixes un prix, quelqu'un te l'achète, et ton compte sera trouve crédité de XX % du prix. Par contre, impossible de récupérer des pièces sonnantes et trébuchantes, tu dois utiliser ce montant directement sur le site. Au final, c'est surtout pour faire de l'échange de jeux du point de vue du vendeur. J'ai néanmoins un gros doute sur la légalité de la chose (à la vue de la licence des bundles), et j'ai l'impression que ces sites sont dans le collimateur des éditeurs, vu que de plus en plus de jeux ne peuvent plus être revendus de cette façon.
    • Je sais que sur les forums de site spécialisé ou non, des bourses d'échanges s'organisent. Mais il est rare que je trouve des jeux qui m’intéressent, cela prend du temps, et la probabilité que le propriétaire du jeu soit intéressé par un de tes jeux est au final faible.
    • D'autres mettent la clé sur le forum Steam du jeu pour que les gens intéressés puisse y jouer.

    Je me demande donc, suis-je le seul ici avec ce problème ? Et vous que faites vous avec ces clefs inutilisées ?

    Lire les commentaires

  • Dilemme entre vie privée et contrôle de sa machine (Journaux LinuxFR)

    Vous avez sûrement entendu parler de la demande auprès d'Apple d'un juge fédéral américain qui enquête sur la tuerie de San Bernardino de décembre dernier aux États-Unis : ils veulent la possibilité d'utiliser un logiciel pour brute-forcer l'iPhone des « terroristes » afin de récolter plus de preuves pour leur enquête.

    En effet, le FBI s'est cassé les dents sur la récupération des données de cette machine : le directeur du FBI s'est même plaint auprès du congrès américain des difficultés causées par les technologies de chiffrement modernes pour les enquêtes qu'il mènent.

    Alors, derrière ces plaintes d'un État puissant qui s'énerve de ne pas pouvoir accéder à toute l'information produite dans le monde, d'un côté, on ne peut qu'approuver le combat pour la Liberté et la vie privée, et se dire que ce que fait Apple est bien. Apple a même publié il y a deux jours une réponse au gouvernement américain aux accents patriotiques appuyés : « Nous contestons la demande du FBI avec le plus profond respect pour la démocratie Américaine et avec amour pour notre pays ».

    Ils expliquent qu'ils ont tout fait pour répondre de leurs obligations légales, qu'ils ont collaboré avec les autorités pour tout ce qu'ils étaient en capacité de faire, mais qu'il ne peuvent pas fournir de logiciel pour aider à contourner les mécanismes de ralentissement des attaques par force brute (une attente d'un délai augmentant exponentiellement avec le nombre d'essais). Ils expliquent que cela créerait une porte dérobée (backdoor) qui pourrait tout d'un coup être utilisée à mauvais escient, par de mauvais acteurs, car ce logiciel finirait par se retrouver entre de mauvaises mains.

    Apple argumente très bien sur la nécessité aujourd'hui du chiffrement pour protéger tout type de données personnelles : conversations, photos, contacts, informations financières, données de santé… Ils expliquent qu'eux-même n'ont pas les clés qui permettent d'accéder aux données de chaque iPhone : preuve s'il en est de leur volonté de protéger leurs clients ! Ils taclent ainsi au passage tous les autres grandes entreprises technologiques qui se gavent sur les données personnelles des personnes du monde entier pour faire leur beurre.

    Sauf que…

    Sauf qu'il y a un problème : pourquoi le FBI « demande » à Apple de lui fournir un logiciel pour brute-forcer les iPhone ? Ne peut-il pas le faire lui-même ? Je ne vais pas rentrer dans tous les détails cryptographiques, mais vous pourrez trouver plein d'informations très intéressantes sur le fonctionnement des systèmes de sécurité des appareils utilisant iOS dans le guide fournit par Apple. Et donc pour commencer, la mémoire flash de stockage des iPhone est chiffrée en AES : c'est un standard entériné par le gouvernement américain qu'il est impossible de brute-forcer sans y passer très longtemps. À priori même pour le FBI…

    Mais la clé permettant de déchiffrer cette mémoire est bien stockée quelque-part, non ? Presque : elle est dérivée d'un UID (propre au téléphone) et d'un GID (commun à une même série de téléphones) qui sont stockés dans la puce, et de manière à ce qu'ils soient impossibles à récupérer : ils ne sortent jamais de cette puce et il n'existe pas de possibilité de les lires…

    Bon, alors on pourrait peut-être attaquer les bus niveau hardware pour voir ce qu'il s'y passe et essayer de trouver des indices pour en déduire ces clés, non ? Allez lire le document que j'ai cité sur les « Secure Enclave », et vous verrez qu'ils sont allé à un niveau de sécurisation et de chiffrement assez dingue pour qu'il n'existe quasiment aucun moyen de chopper ces clés, que ça soit en compromettant l'espace utilisateur, l'espace noyau, ou même le matériel ! Même si je trouve que la diversité des systèmes de chiffrement utilisés (plein de modes différents d'AES, de la cryptographie elliptique, …) fait moyennement confiance quand on sait que les failles viennent plus souvent de la complexité d'un système, c'est assez impressionnant à voir.

    Au passage, ça explique le pourquoi du récent problème sur « l'erreur 53 » que font les iPhone dont le bouton contenant un scanner digital a été changé : le trafic SPI entre le capteur et la « Secure Enclave » est chiffré de bout en bout, et le CPU ne voit même pas le trafic en clair dans son fonctionnement normal ! Même en mode noyau vous ne pourrez rien voir, ni en sniffant le bus…

    Bon, donc si on ne peut rien faire à tout ça, il faut passer par la voie « classique » : trouver le PIN qui décode la clé. En effet, la clé décrite plus haut est en plus chiffrée avec le PIN de l'utilisateur (qui peut être une passphrase). On va donc brute-forcer le PIN — et ce sur l'iPhone en question car il est impossible autrement d'avoir le bon UID pour déchiffrer la mémoire — et attendre que la moulinette nous sorte le bon résultat. Et donc, sur un PIN à 4 ou 6 chiffres (les « terroristes » ne sont pas forcément très malins…), ça va être rapide, non ? Pas tout à fait : le logiciel délaie les essais d'une durée qui augmente exponentiellement.

    Mais pourquoi passer par le logiciel classique ? On peut faire tourner un soft qui essaie tout en boucle, non ? Et c'est là qu'est le gros problème : on ne peut pas, car toute la chaîne de logiciels est certifiée depuis le bootloader de premier niveau jusqu'au noyau, aux applications et aux logiciels qui tourneront sur les CPU annexes comme à priori celui de la « Secure Enclave ». Seuls les logiciels signés par Apple peuvent tourner sur cet engin. Bref, de l'informatique déloyale utilisée dans toutes ces possibilités : pour la mesure cryptographique des logiciels utilisés et la limitation de ceux qu'il est possible d'exécuter. On voit même de l'attestation à distance : pour récupérer une mise à jour, il faut signer une preuve (la mesure cryptographique des logiciels tournant actuellement sur l'iPhone à mettre à jour) par une clé présente dans chaque iPhone que seul Apple peut vérifier (et qui est dans la Secure Enclave : même en dumpant la RAM par une méthode externe vous ne la récupérerez pas, sa RAM étant chiffrée avec une clé éphémère générée au boot…), afin que personne ne puisse récupérer un exemplaire du logiciel de l'iPhone !

    Bref, votre vie privée est préservée par Apple uniquement parce qu'ils ont complètement verrouillé le système d'une manière où vous n'avez plus du tout de contrôle sur la machine. Ni vous, ni les autorités, du coup. Cela va contre le principe d'être maître de sa machine, qui est pour moi un pré-requis essentiel au Logiciel Libre. Même si dans ce cas, cela peut permettre de protéger sa vie privée de manière exemplaire, nous ne devons pas en arriver là.

    Il existe d'autres systèmes pour se protéger d'une attaque par accès physique à la machine, comme stocker ses secrets sur un token externe, ou une smartcard, qui permettront que le système n'ait même pas à les manipuler. Ironiquement, la puce TPM propose aussi un système ayant des garanties similaires au système d'Apple vis-à-vis des attaques externes, mais en permettant d'y mettre sa propre clé, même si cette possibilité est souvent sabrée par les constructeurs sur ordre de Microsoft (c.f. les tablettes ARM, voire d'autres machines). Personnellement, je trouve que ce genre de protection est inutile comparé à un bon système de token/smartcard, qui sera certes attaquables si quelqu'un arrive à prendre possession de votre système, mais garantit déjà l'inviolabilité en cas d'accès physique (qui est la garantie qu'offre Apple dans le cas présent).

    Bref, même si les intentions d'Apple semblent louables dans le cas présent, et que se faire passer pour un martyr face à un cas de potentielle « collaboration avec les terroristes » (comme doivent déjà l'imaginer certains de ses adversaires) peut sembler très courageux, il ne faut pas céder à cet abandon d'une des libertés premières que devrait avoir tout être humain sur les machines : celle de les contrôler, et pas l'inverse.

    Lire les commentaires

  • Dans lequel on met en place un service caché Tor et l'on génère une adresse idoine pour icelui (Journaux LinuxFR)

    Sommaire

    Chers humains bonsoir,

    Totalement indépendamment des sinistres évènements que l'ont sait et néanmoins incontestablement congrûment à iceux, j'ai eu l'idée cette semaine de rendre accessible à travers Tor un site que je gère depuis quelque temps déjà, destiné à la moulosphère francophone : Sauf.ca [tor]. Le contenu n'étant pas modéré, je ne peux pas vous garantir que le contenu affiché au moment de votre clic sera safe for work (mais dans l'ensemble ça va, et puis ça reste des petites vignettes).

    Sauf.ca

    Le principe de Sauf.ca est simple, tous les liens postés sur les principales tribunes (en fait, surtout celle de LinuxFR qui est de loin la plus active) sont archivés, les images et vidéos au format webm (ou liens YouTube) sont visualisables directement sur Sauf.ca, les liens vers des pages HTML sont capturés (avec PhantomJS) et rendus en captures PNG et PDF elles aussi mises à disposition directement sur Sauf.ca.

    Par exemple, tout à l'heure j'ai posté un lien vers le module NPM Floréal et les captures de la page sont disponibles en PNG et PDF.

    Pour cet exemple avec le site de NPM ça peut sembler inutile, mais il y a d'autres cas dans lesquels ce service peut se révéler utile, voire salutaire :

    • Proxy au boulot qui filtre sur le contenu ;
    • Éviter de laisser des logs de connexion trop explicites (www.humanite.fr ou lecomitedesalutpublic.com/lesbrigandes) ;
    • Prévenir toute exploitation de faille de sécurité (à part éventuellement une faille de libpng qui serait exploitée par Sauf.ca lui-même) ;
    • Ne pas laisser de traces côté site visité ;
    • S'affranchir des divers trackers Facebook, Twitter ou Google sans avoir à utiliser une extension pour ça ;
    • Éviter la lourdeur des sites qui font ramer le navigateur ;
    • Obtenir une archive des sites qui peuvent changer dans le futur, par exemple les tweets gênants souvent supprimés par leur auteur par la suite ;

    Et bien sûr, retrouver un lien plusieurs jours ou plusieurs années après l'avoir lu.

      

    ~~~

    Tor

    Étant donné que parmi les usages de Sauf.ca se trouvent la protection de la vie privée et le contournement de la censure, Tor m'a semblé être un complément naturel à Sauf.ca, j'ai donc cherché à en faire un "service caché". Non pas dans le but de préserver ma propre sécurité, mais pour celle des visiteurs qui voudraient préserver la leur.

    ~~~

    Services cachés

    Sur Tor, les adresses en ".onion" sont résolues par un autre système que le DNS : les seize caractères précédant ".onion" sont une clé publique encodée en base32, la clé privée se trouvant sur le serveur correspondant. J'avoue que je ne connais pas assez bien le protocole pour vraiment saisir comment le réseau arrive à finalement router la requête jusqu'à la bonne machine, mais je vais faire confiance aux devs là-dessus.

    La plupart des services cachés (j'apprécie modérément cette appellation, mais c'est le nom officiel) sont des sites accessibles en HTTP, mais comme le DNS le protocole Tor ne s'occupe pas du port, on pourrait donc aussi bien héberger un serveur IRC ou Freeciv.

    ~~~

    Scallion

    Les adresses utilisées sont habituellement créées à partir d'une clé générée aléatoirement, mais il est possible, sans compromettre appréciablement la sécurité, d'utiliser des outils qui génèrent des millions de clés jusqu'à en trouver une qui correspond à un pattern intéressant et reconnaissable. C'est ainsi que Facebook est accessible à travers Tor à l'adresse facebookcorewwwi.onion. Plusieurs outils permettent de faire ça, j'ai testé Scallion qui utilise le GPU pour faire ces calculs, et cherché une clé commençant par "saufca".

    Avec ma carte Radeon 7950 j'ai eu quelques adresses relativement intéressantes, ou en tout cas mémorables, au bout d'une heure, et j'ai décidé d'utiliser saufca42reinzasa.onion. Ce n'est pas aussi satisfaisant que ce qu'a trouvé Facebook, mais ça reste relativement mémorable et je n'avais pas envie d'y passer des jours.

    ~~~

    Configuration de Tor

    Il est extrêmement simple de configurer Tor pour fournir un service caché, d'abord quelques lignes dans le fichier /etc/tor/torrc :

    HiddenServiceDir /var/lib/tor/saufca
    HiddenServicePort 80 127.0.0.1:80

    Cela suffit pour avoir un service avec une adresse générée aléatoirement, mais puisque j'ai utilisé Scallion il me restait à créer le dossier /var/lib/tor/saufca ainsi que deux fichiers à l'intérieur :
    * hostname contenant l'adresse du service, dans mon cas "saufca42reinzasa.onion"
    * private_key contenant la clé privée, générée par Scallion

    ~~~

    Configuration d'Apache

    Dans mon cas, le service caché Tor n'est que l'exact équivalent d'un site déjà accessible en HTTP et en HTTPS, et le contenu n'est pas particulièrement sensible, je n'ai donc pas de précautions particulières à prendre pour cacher son existence. Même si le serveur était compromis (en passant par Internet hors Tor, en exploitant une faille quelconque) aucune donnée secrète ou information compromettante ne serait divulguée.

    Dans le cas contraire, il faudrait s'assurer qu'Apache n'est pas accessible de l'extérieur, ou éventuellement servir le site sur Tor et en clair à partir de deux serveurs différents, liés seulement par Tor.

    Puisque ça me semble inutile dans ma situation, j'ai simplement pu ajouter le <VirtualHost> ad hoc, en prenant tout de même soin de désactiver les logs d'accès et d'erreur. Même si en tant que service caché je n'ai aucun moyen d'identifier les visiteurs venant de Tor, il me semble préférable de limiter les logs au maximum, dans leur intérêt.

    D'autre part, l'utilisation du HTTPS sur Tor semble être superflue, même si cela fait apparemment l'objet d'un débat.

    ~~~

    Configuration côté application

    Je me suis aussi assuré qu'en accédant à Sauf.ca par Tor, aucune requête n'était tentée en clair, etc, à cause de chemins en dur qui auraient pu traîner ici ou là, et surtout que le site était entièrement fonctionnel sans Javascript, puisque la plupart des utilisateurs de Tor désactivent les scripts, avec raison, à cause de la facilité avec laquelle un script pourrait faire fuiter l'identité réelle du visiteur.

    ~~~

    Mot de la fin

    Pour finir, eh bien, rien de particulier. Il est très simple de mettre en place un service caché accessible sur Tor, plus que je ne le pensais, c'est très bien. Le contenu accessible sur Tor reste très faible, mais je pense que le réseau ne peut que bénéficier de la présence de contenu non sensible comme Sauf.ca (même si je ne m'attends pas à recevoir un traffic énorme venant de Tor !).

    Encore une fois, voici donc l'adresse de Sauf.ca sur Tor : http://saufca42reinzasa.onion. Venez nombreux !

    La configuration, le navigateur le plus approprié pour utiliser Tor pourraient aussi faire l'objet d'un journal mais je pense que je laisserai à d'autres le soin de le rédiger, n'étant moi-même qu'un utilisateur assez basique de Tor.

      

    *

    Lire les commentaires

  • Raspberry Pi 3 bientôt disponible ? Est-il celui que vous attendiez ? (Journaux LinuxFR)

    Bonsoir,

    Une nouvelle version de cette carte de développement désormais très populaire serait en préparation selon des documents de la FCC (Federal Communications Commission) parlant de la conformité des composants sans fil rajoutés sur le Raspberry Pi.

    référence du raspberry pi 3 dans un magasin de vente

    Une connectivité Wifi et Bluetooth est ajoutée via un Broadcom BCM43143 dont les versions actuelles sont dénuées.

    Le processeur Broadcom BCM2836 à 900 MHz de la version 2 B+ laisse sa place au Broadcom BCM2837 à 1,2 GHz compatible 64 bits, avec toujours 4 cœurs ARMv7 et 1GB de ram.

    Et l'un des points noirs du Raspberry Pi semble être corrigé puisqu’il sera désormais possible de tirer jusqu'à 2,5 A (à condition d'avoir l'alimentation nécessaire, car cela représente 6 fois la consommation de la carte !). Ceux qui ont voulu (non sans problème) brancher trop de périphériques USB comprendront.

    Malheureusement il n'est pas fait mention ni de la séparation des bus USB / Ethernet, ni de Gigabit, ni de ports SATA.

    Cette nouvelle version semble simplifier les usages en intégrant les technologies sans-fil dont le support sous GNU/Linux est encore en fonction de matériel incomplet et d'enfin pouvoir brancher tous les HDD USB sur le Raspberry Pi, avec un CPU un peu plus véloce et compatible 64 bits (la version 2 B+ était déjà 6 fois plus puissante que la version antérieure).
    Cette carte de développement à bas prix est toujours dans une quête d'améliorations et de conquête de nouveaux besoins (la version Zero) en offrant un pc suffisant pour lancer un petit navigateur web, monter son petit serveur ou simplement découvrir Linux ;)

    Et vous, que pensez-vous de cette nouvelle version ?
    Que voudriez-vous voir de plus à ce Raspberry Pi ?
    Préférez-vous des alternatives ?
    Avez-vous des projets réalisés ou des idées avec cette carte ?
    Pensez-vous que les Raspberry Pi puissent être saisis ?

    Spécifications techniques

    – Processeur 4 cœurs Broadcom BCM2837 64bit ARMv7 à 1.2GHz
    – 1GB RAM
    – WiFi embarqué : BCM43143
    – Bluetooth Low Energy (BLE) embarqué
    – GPIO étendu 40 broches
    – 4 ports USB
    – Sortie vidéo composite + audio stéréo: jack 4 pôles 3.5 mm
    – Sortie HDMI
    – Port caméra CSI pour connecter la caméra Raspberry Pi
    – Port DSI pour connecter l’écran tactile Raspberry Pi
    – Connecteur de carte microSD pour le système d’exploitation et les données
    – Alimentation sur le port microUSB améliorée (supporte jusqu’à 2.4A)
    – Même forme que le Pi 2 Model B, mais les LED ne sont plus à la même position

    (merci à François du site http://www.framboise314.fr pour son travail et son article http://www.framboise314.fr/le-raspberry-pi-3-pour-bientot/ que je vous invite à lire)

    Lire les commentaires

  • Mes péripéties avec la répétition espacée (Journaux LinuxFR)

    Sommaire

    Bonjour Nal,

    Aujourd'hui, je viens pour te raconter mes péripéties avec la répétition espacée et la naissance de morji, un logiciel de répétition espacée, tout comme mnemosyne ou anki, mais comme alternative minimaliste en mode texte dans le terminal. Avant de te raconter le pourquoi du comment de morji, je vais te raconter un peu le concept de répétition espacée, ainsi que te montrer un peu le principe des algorithmes qui font marcher l'idée.

    La répétition espacée : qu'est-ce donc  ?

    L'idée de la répétition espacée part d'un constat expérimental : lorsqu'on apprend quelque chose, peu importe quoi, on a besoin de réviser pour ne pas l'oublier, et l'intervalle entre révision et révision peut s'allonger avec le temps — l'expérience suggère une progression exponentielle. Si je t'apprends le nom d'une plante aujourd'hui et que je te repose la question dans un mois, tu auras sans doute oublié d'ici là. Si je te repose la question demain, il y a des chances que tu t'en souviennes, et si je te repose la question une semaine après, il y a de bonnes chances aussi ; si après ceci j'attends un mois pour t'embêter de nouveau… et bien probablement aussi !

    Tu me diras, rien de bien extraordinaire là-dedans. Peut-être pas, et encore… Mais ce qui est sûr, c'est que, du coup, il faut une certaine organisation si l'on veut retenir un maximum de choses tout en faisant un minimum d'efforts. Le drame, c'est que choisir manuellement à l'intuition ce qu'il faut réviser et quand, c'est pas toujours évident.

    Un peu d'automatisation !

    C'est là qu'on se dit, et si on pouvait faire faire ce travail à une machine ? Il se trouve que ça s'applique pas facilement à tout type de connaissance, mais il y a des cas où on peut, en particulier lorsque les faits à se remémorer se structurent facilement en cartes-mémoires du type question/réponse. Par exemple :

    Question: nom de plante avec de gros piquants dangereux
    qui pousse dans le désert
    Réponse: cactus
    

    L'interaction (version naïve) se fait ainsi :

    • le programme nous pose la question ;
    • on réfléchit à la réponse ;
    • on affiche la réponse ;
    • on dit à la machine si on s'en souvenait.

    Si on s'en souvenait (on a pensé à « cactus »), la machine calcule alors la date de la révision suivante en tenant compte de l'intervalle entre les deux révisions précédentes. Sinon (on a pensé à « rose » ou « chardon » ou à rien du tout), les intervalles repartent de zéro pour ce fait, qu'il faut remémoriser.

    Ces idées ont donné naissance à des algorithmes. Le premier semble être le Système Leitner, qui date des années 70 et qui ne semble pas être vraiment utilisé aujourd'hui dans des logiciels, mais qui par contre avait l'avantage de pouvoir s'utiliser à la main avec des boîtes. Cet algorithme classait les faits par groupes (les boîtes) : le premier groupe contenait les faits non mémorisés ou oubliés, le second les faits mémorisés qui ont été révisés une fois, et ainsi de suite. Plus le numéro de groupe était élevé, moins la carte était révisée, suivant une méthode de calcul artisanale qui utilisait une taille maximale pour chaque groupe : le premier groupe était de taille 1, le deuxième de taille 2, puis 5, puis 8, etc. C'est seulement lorsqu'un groupe était « plein » qu'il fallait réviser des cartes de ce groupe pour les faire passer au groupe suivant.

    L'inconvénient du procédé, même implémenté dans un logiciel (parce que les boîtes ça prend de la place mine de rien), c'est qu'il est un peu binaire. Des fois on se souvient presque (on a pensé « kaktus »), ou alors on se souvient, mais on a eu beaucoup de mal, ou alors c'était trop facile. Du coup, l'idée est venu de demander à l'utilisateur d'évaluer lui-même sa performance, soit à l'aide d'un nombre entre 0 et 5 (mnemosyne ou SuperMemo), soit de façon plus qualitative (anki). En fonction du résultat, l'intervalle de révision suivant est ajusté par le logiciel qui maintenant a une idée de la difficulté que présente ce fait particulier pour l'utilisateur.

    Vers des algos plus évolués : exemple de SM2

    Un deuxième algo plus évolué est alors apparu, appelé SM2, du nom de SuperMemo2, logiciel pas libre qui a lancé l'idée. Depuis, son algo s'est compliqué sensiblement pour tenir compte finement du fait que certains faits sont liés entre eux et autres subtilités, et le logiciel est probablement devenu une usine à gaz, mais l'idée de fond reste la même. En fait, les logiciels mnemosyne et anki utilisent simplement une version modifiée de SM2 qui marche bien en pratique et leurs auteurs semblent sceptiques sur les versions suivantes de l'algo (ça va jusqu'à SM11 ou plus). Il y a aussi un mode Emacs qui fait de la répétition espacée et qui permet d'utiliser SM5, même si par défaut ça utilise encore le système Leitner si les infos sur le site ne sont pas obsolètes. Il y a aussi Org-Drill (Emacs encore) qui fait du SM5 par défaut.

    L'algorithme SM2 original est une simple traduction des idées ci-dessus : si I(n) représente l'intervalle entre la (n-1)-ième répétition et la n-ième, alors :

    • I(1) = 1
    • I(2) = 6
    • Pour n > 2 : I(n) = I(n-1) * facilité.

    facilité est un paramètre propre au fait qui évolue au fil des notes successives données à chaque révision. Initialement il vaut 2.5, puis il évolue autour en fonction des notes. Le paramètre a une valeur minimale de 1.3, pour éviter des révisions trop fréquentes d'un même fait : en pratique elles correspondent à des faits non-compris ou mal posés dont il faut revoir la présentation. Par exemple, anki propose 4 choix lors d'une révision :

    • On a oublié : l'intervalle est remis à zéro, la facilité laissée telle quelle ; si on a oublié ça veut pas forcément dire que c'était dur, des fois on oublie, c'est tout.
    • Ok, mais c'était dur : la facilité est diminuée (de 0.15 il me semble pour anki), et le nouvel intervalle tiendra compte de ceci.
    • Ok, juste comme il faut : la facilité ne change pas.
    • Ok, mais trop facile : la facilité augmente (0.10 pour mnemosyne, 0.15 pour anki de mémoire).

    Le détail de l'algorithme original et de la modification du paramètre de facilité peut être trouvé à la source (site qui, dit en passant, contient beaucoup d'articles intéressants sur la mémoire, bien que parfois un peu biaisés sans doute). Remarque annexe sur le document : Faut faire gaffe, car il y a une petite subtilité : le 5ème et 6ème points sont inversés dans mnemosyne et anki, c'est-à-dire qu'on ne modifie pas la facilité lorsqu'on a oublié. Ceci semble logique, car si on a oublié totalement un fait, ça veut pas forcément dire qu'en le réapprenant on va avoir des difficultés et, de plus, ajuster la facilité en variant les réponses affirmatives semble suffisant et plus raisonnable : l'algo original (si tant est que ce ne soit pas juste un bug du document) a tendance à faire plomber trop vite le taux de facilité suite à des échecs successifs lors de l'apprentissage d'une carte.

    Quelques améliorations

    Un souci avec le SM2 original, c'est qu'il suppose que l'utilisateur va apprendre tous les jours plus ou moins la même quantité de faits. En effet, si un jour on apprend 20 faits, et un autre on en apprend 50, ça veut dire que ces 20 faits seront révisés, à moins d'être oubliés, toujours aux mêmes dates avec les mêmes intervalles, et de même pour les autres 50 aussi : on se retrouve donc avec une charge de révision très inégale suivant les jours. Même en étant disciplinés, il arrive parfois de ne pas pouvoir faire ses révisions pendant plusieurs jours, par exemple, et créer ainsi sans faire exprès ce genre d'inégalités de charge.

    Les logiciels anki et mnemosyne introduisent un peu d'aléatoire dans l'algorithme pour résoudre ce problème. Plutôt que de faire réviser les 50 cartes le même jour, elles seront réparties sur les jours autour, avec une incertitude qui dépend de l'intervalle (5% pour mnemosyne, sauf pour les petits intervalles où des valeurs spéciales sont codées en dur).

    Il y a d'autres petites subtilités pour être un peu résistant aux vacances ou autres cas spéciaux : par exemple, si on se souvient d'un fait qu'on était censé réviser il y a une semaine, le nouvel intervalle doit tenir compte de la date de la vraie répétition, pas seulement de la date théorique mais, en même temps, si l'utilisateur a du mal, on peu préférer être plus conservateur sur le nouvel intervalle qu'en théorie : lors du calcul anki compte les jours de retard avec un poids plus faible qui dépend de la note ; mnemosyne se contente d'être conservateur si la note correspond à « c'était dur ». C'est des ajustements de bon sens, mais sans théorie vraiment derrière, pour autant que je sache.

    Une petite simulation !

    Pour se faire une idée de la charge de révision que l'on accumule, j'ai fait une petite simulation sur plus d'un an (500 jours). Tous les jours, 15 nouvelles cartes apprises, et quelques pourcentages pris un peu au flair (ça varie sans doute beaucoup suivant la façon de voter de la personne et le sujet) : chaque jour, 5% de cartes oubliées (mais réapprises le jour même de l'oubli), 2% classées difficiles, et 1% classées faciles. Au total, 7500 cartes sont mémorisées. On se retrouve avec un nombre de cartes à réviser par jour pour la semaine suivante qui ressemble à :

    88 88 76 85 86 79 56
    

    Un petit calcul permet de prévoir l'ordre de grandeur du résultat : en supposant de voter toujours « Ok, je m'en souviens bien », ça correspond à des intervalles (à randomisation et ajustements près) de 1, puis 6, puis à partir d'ici multiplier l'intervalle par 2.5, ce qui donne en moyenne entre 5 et 6 révisions par carte sur l'intervalle de 500 jours, donc en multipliant par le nombre de cartes nouvelles par jour, ça donne entre 5 * 15 = 75 et 90. Comme en pratique on oublie quand même des cartes, et la facilité c'est souvent un peu moins de 2.5, c'est en fait un peu plus, mais c'est le bon ordre de grandeur.

    Quelques types de cartes-mémoires

    Tout à l'heure, j'ai donné un exemple simple de question/réponse avec un cactus. Les logiciels gèrent en général plus de types de cartes-mémoire. En particulier, des faits que l'on veut être capable de retenir dans les deux sens. Par exemple, imaginons qu'on veut retenir le nom des capitales, on veut une question du genre :

    Question: France
    Réponse: Paris
    

    Mais peut-être qu'il peut être intéressant aussi d'avoir la question à l'envers aussi :

    Question: Paris
    Réponse: France
    

    En pratique on s'aperçoit souvent que ce n'est pas parce qu'on sait répondre à une question dans un sens qu'on sait le faire dans l'autre ! Les amateurs de langues le savent bien :) C'est pour cela que mnemosyne et anki sont capables de générer deux cartes-mémoires à partir d'un seul fait pour gérer ce genre de cas de façon commode.

    Une autre façon parfois pratique de représenter une question peut être le texte à trous :

    Question: [...] est la capitale de la France.
    Réponse: Paris
    

    Mais aussi :

    Question: Paris est la capitale de [...].
    Réponse: la France
    

    Pour ce genre de cartes, en pratique on écrit quelque
    chose comme :

    Question: [Paris] est la capitale de [la France].
    Réponse: la France
    

    …Et le logiciel génère à partir de ce seul fait les deux
    cartes-mémoires.

    D'un point de vue de l'algorithme, ça pose la question intéressante d'éviter de se voir demander les deux cartes le même jour, ce qui risquerait de fausser un peu la révision et la note attribuée à la deuxième carte. En pratique on utilise des solutions plus ou moins ad-hoc où on s'arrange pour ne pas mettre les deux le même jour.

    Morji

    morji c'est donc encore un autre logiciel de répétition espacée utilisant un SM2 modifié, comme anki et mnemosyne, mais dans le terminal et avec un minimum de dépendances. « Mnemosyne » est le nom d'une déesse grecque de la mémoire, « anki » signifie mémorisation en japonais ; pour rester dans le thème et faute de meilleures idées, « morji » signifie « se souvenir » en lojban.

    Une nimage d'abord

    https://bardinflor.perso.aquilenet.fr/morji/morji-screenshot.png

    Le début de l'histoire

    J'étais jusqu'à il y a peu un utilisateur relativement satisfait de mnemosyne. L'interface est plutôt simple, son concept de tags pour organiser les faits est flexible et, dans l'ensemble, le logiciel est assez orthogonal. Il a quelques défauts, parfois un peu lent pour certaines opérations, c'était quand même un peu trop clickodrome pour moi et, devoir écrire mes cartes sans vim, c'était un peu dur ; mais dans l'ensemble, c'est sympa.

    D'habitude j'utilise OpenBSD sur un fixe, mnemosyne est dans les paquets, donc tout va bien. Mais j'ai aussi une autre machine (un ordinateur portable) sur laquelle, pas de chance, OpenBSD détectait pas bien la carte réseau, du coup j'ai installé un Void Linux (il s'agissait de pas être trop dépaysé). Et là, c'est le drame. Mnemosyne n'était pas dans les dépôts. Paf.

    Je prends mon courage à deux mains, et j'essaie de compiler le truc. Je regarde les dépendances, certaines sont pas dans les dépôts. Qu'à cela ne tienne, c'est du python, j'installe ça avec pip… Après plusieurs itérations à installer de nouveaux paquets, c'est l'échec cuisant. Je commence à redouter des incompatibilités de versions, python 2 ou 3, je teste des trucs ; ça fait bien deux heures, j'abandonne et me dis que, quand même, les packageurs, c'est un peu des super héros, et que je serais mal barré sans eux.

    Ça m'a fait un peu peur, parce que, bon, l'idée de me retrouver un jour avec ma base de données mnemosyne et toutes ses données d'apprentissage sans pouvoir l'utiliser, ça fait un peu mal. Alors, comme je connaissais un peu les algorithmes, SM2 et tout ça, je savais que c'était quand même pas très compliqué et, comme j'avais pas besoin de tant de features que ça, je me suis lancé.

    Les features

    morji gère juste les trois types de cartes-mémoires que j'ai décrites avant : dans un sens, à double sens et textes à trous. Il ne gère pas l'html, ni le javascript, mais il permet de faire du balisage sémantique simple pour mettre des couleurs, du gras ou de l'italique. Par exemple, la ligne suivante dans le fichier de configuration :

    markup keyword colored red
    

    Définit le tag keyword qui permettra de rendre du texte en rouge. On l'utilise ainsi dans le contenu d'une question :

    Que veut dire [keyword mot-clé]?
    

    qui rend mot-clé en rouge.

    morji utilise un système de tags similaires à celui de mnemosyne. On peut donc associer à chaque fait un ou plusieurs tags. Ensuite, on active ou désactive des tags pour choisir quels thèmes réviser ou apprendre. Ça permet par exemple de mixer les thèmes pendant les révisions — chose que je trouve stimulante perso —, puis au moment d'apprendre de nouvelles cartes sélectionner un seul tag.

    Il est possible d'importer d'un coup une liste de faits depuis un fichier avec des champs séparés par des tabulations, un peu comme avec mnemosyne.

    Remarque technique :. morji n'est pas un projet de recherche, du coup il stocke moins de statistiques dans la base de données. Je ne sais pas si c'est surtout ça, ou le fait que mnemosyne stocke certaines informations plus ou moins en double pour des raisons qui restent un peu mystérieuses pour moi (éviter de recalculer des choses, peut-être), mais ma base de données mnemosyne est passée de presque 50M à 10M avec morji ; pratique pour faire des backups quand on a une connexion pas trop rapide :)

    Les trucs qu'il n'y a pas

    Actuellement, morji ne gère pas de fichiers externes (images, son). A priori, il serait cependant facile si besoin de l'étendre via le fichier de configuration (qui est un script Tcl même si ça se voit pas) pour lancer un visionneur d'images externe, par exemple, à défaut d'un truc parfaitement intégré.

    Il n'y a pas non plus de navigateur de cartes-mémoire. En pratique, ça correspond à cas d'utilisation très rare — en tous cas pour moi — puisque, a priori, le principe c'est qu'on va pas chercher des faits soi-même, c'est le logiciel qui le fait pour nous ; ceci dit, parfois ça pourrait être commode, mais je n'ai pas trouvé encore une solution simple qui me plaise. En attendant d'en trouver éventuellement une, pour faire des substitutions en masse ou ce genre de choses, il est possible d'utiliser un script (morji est scriptable en Tcl) ; l'interface pour faciliter cela proprement n'est pas encore vraiment fixée ni documentée (en dehors de commentaires dans le code et d'exemples), mais ne devrait pas trop changer, donc en pratique il y a moyen de se dépatouiller si besoin.

    Sous le tapis

    Là, c'est parti pour une petite section un peu technique, pour ceux qui ont eu la patience de me lire jusqu'ici :)

    Comme j'ai un peu raconté tout ce qu'il faut savoir sur SM2, les faits et les types de cartes-mémoires, etc. je me dis que tu veux peut-être savoir à quoi ressemble le schéma de la base de données utilisée par morji, qui est en fait une traduction idée pour idée des concepts.

    Il y a quatre tables : une pour les faits, une pour l'information spécifique à chaque carte-mémoire, une pour les tags, une qui fait la relation entre quels faits ont quels tags, et puis c'est tout. Je vais juste raconter un peu les deux premières, pour qu'on revoie les concepts de l'algo SM2.

    Celle des faits, facts, stocke donc, entre autres, une question et une réponse :

    CREATE TABLE IF NOT EXISTS facts(
        uid INTEGER PRIMARY KEY,
        question TEXT NOT NULL,
        answer TEXT NOT NULL,
        notes TEXT NOT NULL,
        -- oneside/twoside(recognition/production)/cloze...
        type TEXT NOT NULL
    );

    En fait, on retrouve bien le champ pour la question et la réponse. Il y a de plus un champ pour des notes additionnelles dont je n'ai pas parlé avant (mais c'est dans la nimage plus haut), et qui sert à afficher des trucs en plus dans la réponse pour les faits à deux sens, indépendamment du sens (par exemple un lien vers la source de l'information). Le champ type nous dit s'il s'agit d'un fait à un sens, à deux sens ou d'un texte à trous.

    La table contenant l'information d'apprentissage de chaque carte mémoire est un peu plus compliquée :

    CREATE TABLE IF NOT EXISTS cards(
        uid INTEGER PRIMARY KEY,
        -- last repetition time (null for new cards)
        last_rep INTEGER,
        -- next repetition time (null for new cards)
        next_rep INTEGER CHECK(next_rep ISNULL OR last_rep < next_rep),
        easiness REAL NOT NULL DEFAULT 2.5 CHECK(easiness > 1.29),
        -- number of repetitions (0 for new and forgotten cards)
        reps INTEGER NOT NULL,
        fact_uid INTEGER NOT NULL REFERENCES facts ON DELETE CASCADE,
        -- additional data whose meaning depends on facts.type
        fact_data TEXT NOT NULL
    );

    Les champs last_rep et next_rep contiennent les dates de la dernière répétition et la répétition suivante, respectivement (leur différence est donc l'intervalle théorique entre les deux répétitions). Le champ easiness contient la facteur de facilité de toute à l'heure, et reps, c'est le nombre de répétitions, donc le n des formules. Enfin, fact_uid signale le fait auquel fait référence la carte, et fact_data donne des informations supplémentaires : par exemple, est-ce le verso ou le recto qu'il faut montrer ? Un truc à remarquer aussi, c'est la valeur par défaut de 2.5 pour la facilité et la contrainte sur le minimum, qui font écho à l'algorithme.

    Petite anecdote pour la fin

    Je crois que j'ai déjà prononcé le mot Tcl un peu avant. Eh oui, morji est écrit en Tcl. En fait, quand j'ai commencé à écrire morji, j'ai vite compris que ça allait être essentiellement des requêtes SQLite et pas grand-chose de plus. Or, pendant que je me mettais à jour sur SQLite, mon attention a été attiré, un peu par hasard, par le fait que SQLite avait été initialement prévu comme une extension Tcl, avant de devenir ce qu'on connaît aujourd'hui ; du coup ça m'a intrigué, j'ai découvert que l'interface Tcl pour SQLite était vraiment sympa et leur système de tests unitaires aussi. Ajouté au fait que Tcl est un langage léger présent sur à peu près toutes les plateformes, eh bien, j'ai pas pu résister :)

    Anecdote : au début j'envisageais d'écrire morji en Go, du coup je voulais l'appeler « gogoratu » — « se souvenir » en basque —, parce que c'était rigolo, mais du coup, après, la blague tombait un peu à l'eau :)

    Voilà, c'est tout !

    Liens : site de morji, avec documentation en html ; page github du projet.

    Lire les commentaires

  • Retour sur la licence de NumWorks (Journaux LinuxFR)

    À la suite du journal précédent, je me demandais, quelle était la protection effective de la licence CC-BY-NC-SA. J'aimerais bien que l'on ne reprenne pas la guerre libre pas libre de l'autre dépêche, j'ai plutôt envie de voir ce qu'ils apportent, plutôt que de réfléchir à ce dont ils nous privent.

    Pour rappel, la licence CC-BY-NC-SA permet de :

    • Partager — copier, distribuer et communiquer le matériel par tous moyens et sous tous formats
    • Adapter — remixer, transformer et créer à partir du matériel

    L'Offrant ne peut retirer les autorisations concédées par la licence tant que vous appliquez les termes de cette licence.

    Attribution — Vous devez créditer l'Œuvre, intégrer un lien vers la licence et indiquer si des modifications ont été effectuées à l'Oeuvre. Vous devez indiquer ces informations par tous les moyens raisonnables, sans toutefois suggérer que l'Offrant vous soutient ou soutient la façon dont vous avez utilisé son Oeuvre.

    Pas d’Utilisation Commerciale — Vous n'êtes pas autorisé à faire un usage commercial de cette Oeuvre, tout ou partie du matériel la composant.

    Partage dans les Mêmes Conditions — Dans le cas où vous effectuez un remix, que vous transformez, ou créez à partir du matériel composant l'Oeuvre originale, vous devez diffuser l'Oeuvre modifiée dans les même conditions, c'est à dire avec la même licence avec laquelle l'Oeuvre originale a été diffusée.

    Pas de restrictions complémentaires — Vous n'êtes pas autorisé à appliquer des conditions légales ou des mesures techniques qui restreindraient légalement autrui à utiliser l'Oeuvre dans les conditions décrites par la licence.

    Les sources de ce système d'exploitation seront toujours disponibles, si l'entreprise décide de changer de licence, elle ne pourra pas revenir sur ce qui existe déjà.

    Cela fait donc a minima un excellent objet d'étude d'une solution employant beaucoup de logiciels libres dans sa construction.

    Leur parti pris est très intéressant. Ils ont décidé de na pas utiliser d'OS mais de directement coder sur le Cortex-M4, cela permet à leur système de tenir sur 256kB de ram.

    Ils ont du recréer tout un environnement, j'imagine que l'investissement en terme de R&D est très important.

    Je pense que c'est cet aspect qui rend l'OpenSource (ou libre) difficile. En effet, admettons qu'ils aient mis leur OS et toute la couche applicative en GPL, ils auraient très facilement pu avoir une boite qui récupère tout le code sans apporter aucune amélioration mais en profitant des faibles prélèvements sociaux d'autres pays (Chine par exemple), pour vendre moins cher. De plus il aurait aussi été possible qu'une entreprise ayant plus de capital fasse baisser les coûts par un effet d'échelle, et reprenne le développement en tant qu'acteur majeur. Cela aurait été super pour la diffusion du produit mais aurait mis un coup d'arrêt à leur entreprise.

    Le problème est que l'ingénierie logicielle a certes un coût mais les investissements sont majoritairement du salaire alors que le développement d'un matériel entraîne des investissements en prototypes et une industrialisation sur une chaîne de production, qui peut rendre la libre utilisation, des développements précédemment fait, périlleux pour l'entreprise.

    Donc oui, à titre personnel, je me questionne sur le fait qu'il existe systématiquement un modèle économique viable libre associable à n'importe quel projet. N'ayant pas la réponse, je serais ravi que l'on m'éclaire sur ce sujet qui dépasse vraiment mon niveau de compétence.

    Maintenant, cela montre qu'il est possible d'utiliser des briques libres pour faire une calculatrice, c'est vraiment intéressant.

    Quelqu'un a-t-il une idée sur la différence de consommation entre une carte cortex-M4 et une carte raspberry pi zeros ?

    Si je trouve leur idée intéressante, je trouve que d'avoir un terminal mobile basé sur une distribution linux minimale avec un environnement de type SageMath avec une version des notebooks Jupyter adaptés aux petits écrans pourrait vraiment être cool ! Quand on voit à quel point des outils tels que JupyterLab permettent de rendre l'accès à des environnements python avec toutes les libs installées, utiliser une raspbian minimale avec un une appli Qt pour le web et un serveur jupyter, permettrait de faire vraiment pas mal de choses ! Sachant qu'en plus Jupyter peut faire plein d'autres choses telles que du SageMath, Octave, maxima, Julia, …

    Le problème serait alors l'autonomie … mais bon avec l'arrivée en 2019 de l'advanced color paper display, on pourrait bien avoir accès à une technologie permettant de faire des petits écrans couleurs qui ne consomment pas du tout. Un trois couleurs serait déjà faisable par exemple.

    Donc je trouve que leur idée est vraiment top, mais personnellement je préférerais pouvoir conserver mon environnement Linux même sur une calculette. Bon, en même temps, je ne pense vraiment pas être la cible … Cependant je trouve l'analyse d'Aurélien Pierre assez intéressante. Il serait juste sympa d'avoir tout l'environnement dans une machine qui ressemblerait à une TI92 ou une voyage 200, même si ce format n'est plus vraiment d'usage … Avoir un clavier Alpha-numérique physique est tout de même un gros plus. Sachant qu'une calculatrice moderne de chez TI avec des capacités CAS coûte encore 130€, il reste de quoi s'amuser avec les raspberry pi et consort …

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Migrer Windows 10 d'un disque BIOS/MBR, vers un SSD en mode UEFI/GPT avec des logiciels libres (Journaux LinuxFR)

    Sommaire

    Introduction

    Ce tutoriel vous guide pas à pas pour migrer votre installation de
    Windows qui est actuellement sur un disque dur de votre PC vers un
    nouveau disque, en l'occurrence un SSD. A vrai dire, vous pouvez aussi
    bien migrer vers un autre HDD.

    La spécificité de ce tutoriel est qu'elle utilise les outils fournis par
    Microsoft avec Windows ainsi que des logiciels libres (Clonezilla
    principalement, mais si quelque chose devait mal tourner vous pouvez avoir
    besoin d'utiliser fdisk, gdisk ou testdisk pour ne citer qu'eux). Quand
    j'ai voulu faire cette migration je n'ai pas trouvé de tutoriel
    expliquant de bout en bout comment faire cette migration juste avec les
    outils de Microsoft et des logiciels libres.

    Typiquement, vous pouvez avoir envie/besoin de faire cela car vous avez
    acheté un nouveau disque pour remplacer l'ancien (par exemple car
    l'ancien montre des signes de faiblesse, ou vous voulez améliorer la
    réactivité de votre système).

    En plus de la migration du système d'exploitation, ce tutoriel vous
    explique comment passer d'un démarrage en mode BIOS/MBR à un démarrage
    en mode UEFI/GPT.

    Succinctement la démarche est la suivante, d'abord installer le nouveau
    disque dans le PC, et initialiser la table de partition selon les normes
    Microsoft. Puis cloner/dupliquer la partition contenant le système
    d'exploitation à l'aide de Clonezilla. Ensuite et avant de redémarrer
    dans le clone de Windows sur le SSD, faire quelques modifications dans
    le registre pour que la lettre de lecteur C: pointe vers la bonne
    partition et éventuellement modifier le mode SATA en AHCI si vous le
    modifiez aussi dans le UEFI/BIOS. Après cela, on va préparer la
    partition système EFI/ESP pour que le PC puisse démarrer dessus et qu'il
    démarre sur le Windows du SSD. Finalement, une fois dans le Windows du
    SSD, on va réactiver l'"environnement de récupération de Windows".

    Mise en garde : Faites une sauvegarde de vos données avant toute
    opération. Personne n'est à l'abri d'une mauvaise manipulation ou d'une
    erreur.

    Prérequis

    Compétences

    Niveau de difficulté : Difficile.

    Vous devez être à l'aise au niveau de l'utilisation de la ligne de
    commande dans Windows, mais aussi assez à l'aise pour gérer les
    partitions de votre disque. Savoir modifier le paramétrage de votre
    Firmware UEFI/BIOS et aussi nécessaire. Ce tutoriel guide pas à pas pour
    la majorité des opérations. Certaines n'ont pas été détaillées par souci
    de simplicité et d'efficacité.

    Matériel

    Le PC où vous voulez installer le SSD. Il faut qu'il soit en état de
    marche. De plus il doit avoir un firmware UEFI. S'il n'a que un BIOS
    standard, sans UEFI, ce tutoriel n'est pas adapté.

    Clé(s) USB ou plusieurs CD/DVD sur lequel vous aurez mis
    Clonezilla, System rescue
    CD
    et un environnement de démarrage
    Windows PE, ou Windows RE, ou le DVD/Disque d'installation de Windows.

    Le disque SSD (testé avec Samsung SSD 860 EVO 250GB). Il doit avoir une
    taille suffisante pour contenir votre partition de Windows. Dans tous
    les cas, la taille de la partition qui contiendra Windows sur le SSD
    doit être au moins égale à la taille de la partition Windows du HDD que
    vous voulez cloner. Au besoin, pour remplir ce critère, réduisez la
    taille de votre partition Windows avec le gestionnaire de disque de
    Windows par exemple (ou un autre outil de gestion de partition, comme
    gparted, sur le System Rescue CD). Cherchez sur internet si vous ne
    savez pas comment faire.

    Logiciel

    Windows 10 installé (en version 64 bits) (testé avec Win10 v1709)

    Windows 10 PE ou support d'installation de Windows 10 (clé USB ou DVD) -
    En Version 64 bits (testé avec un support d'installation de Win10 v1804)

    System rescue CD (version 5.2.2 par
    exemple)

    Clonezilla installé sur une clé ou un CD.
    Bien vérifier avant que votre système arrive à démarrer dessus. (Testé
    avec Clonezilla 2.5.5-38)

    Nomenclature

    SSD : désigne le nouveau SSD

    HDD : désigne votre disque actuel, sur lequel est installé Windows

    WinPE : un environnement de démarrage Windows PE, ou Windows RE, ou le
    DVD/Disque d'installation de Windows. Il doit être sur un support
    amovible (USB, CD ou DVD)

    S: La lettre de lecteur affectée à la partition Système EFI qui sera sur
    le nouveau SSD (parfois appelée ESP, EFI_System_Partition ou encore
    SYSTEM, ou EFI)

    N: Le clone de Windows, sur le SSD

    O: Le Windows cloné, sur le HDD

    C: La partition dans laquelle est installée Windows, lorsqu'on est dans
    Windows (que ce soit le windows cloné, ou le clone)

    Les commandes doivent être lancées en tant qu'administrateur.

    Procédure de base

    • Fixer et brancher le SSD dans l’ordinateur

    • Désactiver Windows FastStart (cf votre moteur de recherche préféré)

    • Initialiser et partitionner le disque à l'aide de Windows

      • Démarrer sur le Windows installé ou WinPE
      • Pour initialiser le disque, d'abord créer une table de partition, puis partitionner le disque. Pour ce faire :
        • Suivre les instructions de partitionnement UEFI/GPT selon Microsoft. Ci-dessous mon exemple, mais peut-être avez-vous besoin d'une partition "recovery" aussi, ou votre configuration nécessite quelques aménagements. Dans ce cas, voir les instructions de Microsoft et adapter pour vos besoins.
        • Par exemple: une partition EFI de 260Mo, une partition Microsoft Reserved (MSR) de 16Mo, une partition pour Windows (taille au moins égale à la taille de la partition de Windows à cloner). Pour informations, dans diskpart, les tailles que vous donnez en MB/Mo sont en réalité des MiB/Mio (220 = 10242 octets).
          • Ouvrir une invite de commande en mode administrateur et lancer diskpart . Et une fois dans diskpart :
            • list disk pour lister les disques et connaître le n° du SSD.
            • select disk # avec le numéro du SSD à la place de #
            • clean Supprime le contenu du disque / l'initialise
            • convert gpt Définit que le disque aura une table de partition GPT
            • create partition efi size=260 Crée une partition EFI de 260MiB
            • format quick fs=fat32 label="System" Formater la partition EFI au format FAT32
            • assign letter="S" Lui donner la lettre S
            • create partition msr size=16 Créer une partition Microsoft Reserved de 16MiB
            • create partition primary Créer la partition pour Windows (l'équivalent du C: )
            • format quick fs=ntfs label="Windows" Formater la partition pour Windows au format NTFS
            • assign letter="N" Lui donner la lettre N
            • list volume Liste les volumes. Permet de voir la table de partition.
            • exit Quitte diskpart
    • Cloner le Windows installé sur le HDD. Ceci sera fait à l'aide de
      Clonezilla

      • Redémarrer dans Clonezilla
      • Une fois dans clonezilla, et si vous êtes confortable avec les lignes de commande Linux, éventuellement supprimer de la partition Windows du HDD les fichiers pagefile.sys , hyberfil.sys (désactiver windows faststart avant), swapfile.sys .
      • Cloner la partition Windows du HDD vers le SSD (de préférence, partition de même taille, et de toutes façons, la partition de destination doit être plus grande que la source. Si ce n'est pas le cas, réduisez d'abord la taille de votre partition Windows depuis Windows). Dans clonezilla, utiliser le mode Partition vers Partition, et en mode Export. Utiliser les options -e1 auto (automatically adjust file system geometry for a ntfs boot partition if exists) -e2 (sfdisk uses CHS of hard drive from EDD (for non grub loader) -r (resize filesystem to fit partition size of target) -m (do NOT clone boot loader) -v (verbose)
      • Optionnellement cacher la partition contenant le windows source de la table de partition du disque source (si vous ne savez pas à quoi ça sert, passez votre chemin). Pour cela modifier le type de partition de la partition NTFS de windows (en principe, NTFS a un id de « 7 ». On peut utiliser id 17 pour la partition cachée : 17 correspond à « IFS Hidden »). Utiliser cfdisk ou fdisk pour faire ce changement (ce sont des programmes linux).
    • Dans le Firmware UEFI (ou BIOS-UEFI), on peut en profiter pour passer
      du mode SATA "IDE" vers "AHCI". Windows n'aime pas ce changement et
      il faut donc faire une opération dans le registre qui est
      détaillée ci-dessous. Tant que vous ne le faites pas, vous aurez un
      écran de plantage bleu de windows au démarrage (BSOD).

    • Si vous voulez être sûr de ne pas faire de bêtise dans le Windows que
      vous venez de cloner, je vous conseille d'éteindre l’ordinateur & de
      débrancher l’ancien disque. Ainsi vous ne risquez pas de modifier le
      mauvais fichier de registre (en l'occurrence celui de votre Windows
      sur le HDD)

    • Effectuer quelques opérations sur le Windows de destination (celui
      sur le SSD) avant qu'on ne démarre dessus. En particulier corriger le
      registre pour affecter la lettre de lecteur C: à la bonne partition,
      et si le paramétrage du Firmware UEFI (BIOS-UEFI) a été modifié pour
      passer de SATA Mode PCI vers AHCI, on va aussi faire ce changement
      pour que ca fonctionne.

      • Redémarrer dans WinPE (en Mode UEFI, pas MBR !)
        • Tout d'abord déterminer la lettre de lecteur affectée au clone de Windows, celui qui est sur le SSD. Ou, s'il n'y a pas de lettre affectée, lui en donner une, par exemple N: (lettre utilisée dans les exemples qui suivent)
          • Pour cela, lancer dans diskpart
            • list volume
              Ce qui retourne la liste des volumes avec la lettre de lecteur qui a été affectée à chacun.
          • Si aucune lettre de lecteur n'est affectée, il faut alors lui en affecter une. Pour cela, lancer dans diskpart
            • select volume # (avec # étant le numéro du volume qui contient le nouveau windows)
            • assign letter=N
              S'il n'est pas possible d'utiliser select volume alors faire comme ceci
            • list disk
            • select disk # (# étant le numéro affecté au SSD)
            • list partition
            • select partition # (# étant le numéro affecté à la partition de Windows sur le SSD, probablement 3)
            • assign letter=N
        • Faire un CHKDSK /F sur la lettre du nouveau Win
        • Pour que la partition C: utilisée par Windows soit celle du SSD et pas celle de l’ancien disque, modifier une clé de registre du nouveau Windows :
          • Lancer REGEDIT et dans le registre HKEY_LOCAL_MACHINE monter la ruche N:\Windows\System32\Config\SYSTEM . Lui donner le nom "NewWin" On s’intéresse à HKEY_LOCAL_MACHINE\NewWin\MountedDevices . Ce sont là les valeurs qui sont dans le registre " HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices " lorsqu'on est dans l'installation de Windows.
            • Dans HKEY_LOCAL_MACHINE\NewWin\MountedDevices modifier la lettre de lecteur C: en renommant \DosDevices\C: par \DosDevices\O: (car la valeur fait référence à la partition de l'ancien Windows sur le HDD et on ne veut pas, en démarrant, utiliser cette partition mais celle de son clone qui est sur le SSD). Ainsi, lorsqu'on démarrera dans le nouveau Windows, la partition contenant le Windows sur le HDD aura la lettre O:, et la partition contenant le Windows sur le SSD aura la lettre C:
            • Créer une nouvelle valeur binaire nommée \DosDevices\C: et lui donner comme contenu celui de \DosDevices\N: qui est renseignée dans le registre WinPE, c'est-à-dire là HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices ( C: étant la lettre qu'utilisait le Windows du HDD comme partition où il y a le dossier \Windows )
            • ATTENTION: Bien vérifier que la copie a fonctionné et qu'il y a les bonnes valeurs, car dans mes essais, j'ai du m'y reprendre à 2 fois car le 1er "coller" ne collait pas ce que je voulais.
            • En principe c'est tout. Mais d'après certaines sources, il y aurait une clé \\?\Volume{GUID} ayant le même contenu que le \DosDevices\O: qu’on vient de modifier. Chez moi ce n'était pas le cas. Si vous avez une telle valeur, alors il faut lui donner le contenu de \DosDevices\N: depuis le registre WinPE
        • Si en même temps que la migration on veut aussi passer du mode SATA IDE vers AHCI alors il faut encore faire ceci. Cela a été repris du site tomshardware.co.uk
          • Toujours dans REGEDIT avec la ruche montée en HKEY_LOCAL_MACHINE\NewWin
          • Aller à HKEY_LOCAL_MACHINE\NewWin\ControlSet000\Services\storahci\StartOverride
          • Changer la valeur DWORD de 3 à 0.
          • Au redémarrage, si ça n'a pas été fait, changer la paramétrage du contrôleur SATA de IDE à AHCI. Au redémarrage, Windows devrait directement démarrer correctement et sans plantage (BSOD).
        • Rendre le disque bootable en installant les outils EFI de microsoft et configurant le Magasin BCD (BCD Store)
          • D'abord assigner une lettre de lecteur à la partition ESP
            • MOUNTVOL S: /S
              Si ca n'a pas fonctionné, faire comme ceci dans diskpart
            • list disk
            • select disk # (# est le numero du SSD retourné par list disk)
            • list partition
            • select partition # (# est probablement 1)
            • assign letter=S
          • Puis lancer bcdboot N:\windows /l fr-fr /s S: /f UEFI
            • N:\Windows est le répertoire contenant le clone de Windows sur le SSD)
            • S: = partition EFI
    • Redémarrer, et avant le lancement de Windows vérifier votre UEFI
      (ou BIOS-UEFI). Il faut qu'il soit configuré pour démarrer par défaut
      en mode UEFI et pas en mode BIOS. Penser aussi à corriger le
      paramétrage SATA si cela a été modifié dans le registre de Windows.

      Le paramétrage du démarrage avec
      bcdboot N:\windows /l fr-fr /s S: /f UEFI a normalement créé le
      magasin BCD, mis tous les fichiers EFI sur la partition SYSTEME (ESP,
      partiton EFI, la 1ère du SSD) et dit au firmware UEFI qu'il doit
      automatiquement démarrer avec le gestionnaire de démarrage
      (boot manager) de Windows.

    • Une fois qu’on a réussi à démarrer dans la copie de Windows

      • Réactiver le "FastBoot"
      • Réactiver l'environnement de récupération de Windows en lançant, depuis une ligne de commande avec les droits administrateur, la commande reagentc.exe /enable . Vérifier avec reagentc.exe /info . Et s'il y a une erreur essayer avec reagentc.exe /enable /setreimage /path C:\Recovery\WindowsREC:\Recovery\WindowsRE est le dossier où se trouve le fichier Winre.wim
      • Vérifier que tout est en ordre. Eventuellement donner un nouveau nom à votre partition C: (pour la différencier de celle sur le HDD) en lançant: LABEL [drive:][label]
      • Redémarrer encore une fois en laissant le processus de démarrage se faire tout seul pour vérifier que tout est ok.
    • Réinsérer l'ancien disque dur.

    • Normalement, il devrait être possible de redémarrer dans l'ancien
      Windows, du moment que vous savez comment booter en MBR, et sous
      réserve de ne pas avoir modifié le mode SATA dans le UEFI/BIOS. SI
      c'est le cas, vous pouvez envisager de modifier le registre du
      Windows du HDD, ou de modifier le paramétrage du UEFI/BIOS.

      Si vous avez aussi Linux d'installé sur le HDD, il devrait toujours
      être possible de le démarrer en mode BIOS

    • On peut diminuer/augmenter la taille de la partition C: du SSD (Pour
      un SSD TLC ou VNAND, on peut par exemple laisser de l’espace libre à
      la fin ~10 % de la capacité du disque d'après le logiciel Samsung
      Magician, pour un SSD 860 EVO)

    • En principe, puisqu’on boot en EFI on peut enlever sur le clone
      Windows sur le SSD les fichiers \bootmgr et \Boot\BCD puisque ce
      sont ceux qui étaient utilisés pour un boot en mode BIOS/MBR et que
      désormais on est en EFI. Vous pouvez d'abord les renommer et vérifier
      que ca ne change rien au prochain boot, plutôt que de les supprimer
      tout de suite.

    Quelques pistes si ça ne fonctionne pas…

    • Faire un chkdsk sur la nouvelle partition
    • Recréer le bootsector du NTFS avec testdisk (dispo sur System Rescue CD, mais peut être aussi dans Clonezilla ? Je n'ai pas vérifié)
    • Vérifier le BCD:
    • Vérifier que la partition EFI est bien initialisée (présence des fichiers \EFI , \EFI\Boot\ , \EFI\Microsoft\ …) Si ce n'est pas le cas, il y a eu un problème avec bcdboot N:\windows /l fr-fr /s S: /f UEFI
    • Vérifier le boot manager du bios (démarrage en UEFI ou MBR ? Gestionnaire de démarrage par défaut ? Présence du gestionnaire de démarrage de Windows ?)
    • A priori, pas utile : Commandes à lancer dans WinPE
      • Pour recréer le boot sector de la partition systeme (EFI): bootrec /fixboot
      • Pour chercher les OS sur le disque et les mettre dans le bootloader bootrec /scanos
    • Quelques commandes de bcdedit pour modiser la valeur de certains éléments du magasin BCD. Inutile car le BCD Store qui est utilisé lorsqu'on démarre en mode EFI n'est pas le même que celui utilisé dans un démarrage en mode MBR. Donc, pas besoin de chercher à modifier le BCD. Je garde pour info : les lettres sont celles telles que définies dans le système où on est (WinPE par ex). Doc BCDEDIT
      • bcdedit /set {bootmgr} device \Device\HarddiskVolume1
      • bcdedit /set {default} device \Device\HarddiskVolume3
      • bcdedit /set {default} osdevice \Device\HarddiskVolume3
      • Ou à la place de \Device\HarddiskVolume1 mettre les lettres de lecteur :
      • bcdedit /set {bootmgr} device partition=S:
      • bcdedit /set {default} device partition=C:
      • bcdedit /set {default} osdevice partition=C:

    Documentation, pour aller plus loin…

    A propos du EFI/UEFI:

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

    Si on veut y accéder, par défaut les fichiers du BCD sont cachés. Pour
    les rendre visibles:

    • attrib bcd -s -h -r
    • mv bcd bcd.bak
    • bootrec /rebuildbcd

    Documentation bcdedit:

    MBR Partition ID

    A propos des disk ID (=Disk signatures):

    Si besoin de supprimer du registre les entrées de disques qui ne sont
    pas connectés ou sans lettre assignée lancer: mountvol /R. Ce
    programme permet aussi de lister les lettres de volumes avec leur GUID
    (GUID pour ce système uniquement, il n’est pas stocké dans la partition,
    ni ailleurs sur le disque, il est assigné par windows pour un couple
    (signature de disque/partition offset) dans une instance de windows
    alors que dans une autre instance de windows la même partition sur le
    même disque aura ce GUID différent)

    Changer le label du volume: commande LABEL [drive:][label]

    Historique de révisions

    • Vous trouverez la dernière version de ce tutoriel sur ma page perso
      de tutoriels informatique
      .
      Vous y trouverez aussi la version HTML, PDF et TXT.

    • 2018-06-17 : Ajout d'une note indiquant que ce tutoriel utilise des
      logiciels libres

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

    • 2018-05-28

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Rumeurs sur l'hyper-threading - TLBleed (Journaux LinuxFR)

    La peinture de la dépêche sur la faille Lazy FPU save restore n'étais pas encore sèche
    que je tombais sur de curieux messages conseillant de désactiver l'Hyper-threading.

    Suivis de conversations plus ou moins inquiétantes sur Twitter et dans les mailings list.

    Accroche toi au pinceau

    Un commit sur OpenBSD désactive l' Hyper-treading par défaut.
    Le message associé est explicite:

    « Since many modern machines no longer provide the ability to disable Hyper-threading in
    the BIOS setup, provide a way to disable the use of additional
    processor threads in our scheduler. And since we suspect there are
    serious risks, we disable them by default
     »
    Puisque les machines récentes ne donnent plus la possibilité de désactiver l' Hyper-threading depuis le BIOS, trouvez un moyen de désactiver l'utilisation des threads d'un processeur dans notre ordonnanceur.
    Et comme on suspecte que le risque est sérieux, désactivons le par défaut.

    Pour faire plus court, j'avais lu auparavant un laconique:

    ps deactivate Hyper-threading on your server
    Désactivez l'Hyper-threading sur vos serveurs !

    Venant des équipes OpenBSD, il y a de quoi s'interroger.

    J'enlève l'échelle

    La conférence Black Hat qui se déroulera en août prochain, propose au menu:

    « This therefore bypasses several proposed CPU cache side-channel protections. Our TLBleed exploit successfully leaks a 256-bit EdDSA key from libgcrypt (used in e.g. GPG) with a
    98% success rate after just a single observation of signing operation on a co-resident hyperthread and just 17 seconds of analysis time
     »
    En outre, ceci court-circuite plusieurs protections sur le cache. Notre exploit TLBeed a réussi à voler une clef 256-bit EdDSA depuis ligcrypt (utilisée par GPG ) dans 98% des tentatives, après une simple observation des opérations de signature depuis un thread tournant sur le même CPU en seulement 17 secondes d'analyse.

    Colin Percival, auteur en 2005 de:

    1. un papier sur les attaques via les caches, Cache Missing for Fun and Profit
    2. un article qui cible plus particulièrement les risques liés à l'Hyper-threading

    en remet une couche:

    « I think it's worth mentioning that one of the big lessons from 2005 is that side channel attacks become much easier if you're executing on the same core as your victim »
    Je pense qu'il est bon de rappeler cette grande leçon de 2005: une attaque en side channel est tellement plus facile si vous l'exécutez sur le même cœur que votre victime.

    Cuisine

    Intel n'est jamais clairement impliqué; mais je précise, comme ça, en passant, que l'Hyper-Threading est une implémentation Intel du Simultaneous Multi Threading.
    Il s'agit de faire exécuter en parallèle, sur un même cœur, plusieurs unités fonctionnelles ou de calcul.
    Et pour rendre cette technique efficace et moins gourmande en ressource, cette implémentation partage aussi les caches mémoires.

    Keep systems protected, efficient, and manageable while minimizing impact on productivity

    Conclusion

    Toutes les solutions de sécurité aujourd’hui ne sont que des châteaux forts construit sur du sable.

    Si encore une fois, la désactivation de l'Hyper-threading pourrait même avoir des effets positifs sur les performances, autant en finir une fois pour toute.

    Retour aux origines:

    • un partage complet sans protection des ressources
    • plus de mode protégé
    • pas même de segmentation mémoire

    Vos machines iront encore plus vite. Enfin, j'espère.

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • fdupes : un utilitaire pour gagner de la place sur son disque dur (Journaux LinuxFR)

    Un petit journal juste pour vous indiquer un petit utilitaire bien pratique nommé fdupes, qui permet de détecter les fichiers dupliqués sur votre machine.

    J'ai découvert ce soft dans le cadre du nettoyage de données que je suis en train de faire sur mes disques durs.

    En effet, il m'est souvent arrivé de copier des fichiers d'un répertoire à un autre pour réorganiser mes données sur mon (ou mes) disques, mais comme je n'aime pas jeter ni supprimer, j'ai accumulé certains fichiers en double ou en triple.

    fdupes permet de parcourir les répertoires qu'on lui passe en paramètre et de faire un rapport sur les fichiers en doublon que l'on peut y trouver.

    Pour identifier les doublons, fdupes effectue une comparaison de taille et de signature MD5 de chaque fichier, et ensuite une comparaison octet par octet est effectuée.

    Cet utilitaire m'a permis de gagner près d'une centaine de gigas en 30 mn. Ya encore d u potentiel de gain de place, mais je préfère ne pas me précipiter, pour ne pas perdre malencontreusement des données (les 100 Gb gagnés me permettront de remettre en marche le processus de sauvegarde de mon portable, en attendant de mettre en place une solution à base de nas).

    Note : pour supprimer mes fichiers dupliqués, je n'ai pas fait de rm sauvage: je les ai déplacés vers un dossier avant de les supprimer définitivement, pour éviter les grossières erreurs. Mon dernier rm -fr sur ~ m'a servi de leçon.

    Un lien vers le dépot github du projet et un autre vers quelques explications d'utilisation en français.

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Le logiciel libre dont on ne peut utiliser les libertés (Journaux LinuxFR)

    Sommaire

    Dans mon entreprise, on utilise des logiciels libres. Il arrive qu'on aie besoin de modifier ces logiciels tiers, pour gérer un cas spécifique ou pour une meilleure intégration dans l'application.

    Et parfois, en se lançant dans ce genre de travaux, on tombe sur une surprise :

    Il existe des logiciels libres dont il est presque impossible d'utiliser les libertés sans une quantité déraisonnable de travail.

    Je ne parle pas d'openwashing ici, cette technique qui consiste à faire croire qu'un logiciel est libre mais ne l'est pas et dont on a récemment parlé ici. Non, je parle de programmes véritablement libres (sous licence Apache ou MIT généralement, notre code n'étant pas libre ça ne peut être des licences contaminantes comme la GPL) mais dont les subtilités font que… visiblement quelqu’un ne veut pas que les libertés soient trop utilisées. On notera déjà que c'est souvent des logiciels dont il existe une version avancée commerciale.

    Les libertés d'exécution et de redistribution sont généralement faciles à appliquer ; le problème survient souvent quand on veut étudier le programme et l'améliorer. Voici quelques exemples de techniques utilisées ; certaines peuvent être expliquées par un simple manque de volonté d'adhérer à l'esprit du logiciel libre ou par une mauvaise organisation interne ; d'autres s'approchent du sabotage. Dans tous les cas, la licence est respectée à la lettre.

    Toutes les techniques ci-dessous ont été croisées dans des cas réels (heureusement pas toutes sur le même projet) :

    Aucune documentation technique

    Il n'existe aucune documentation technique d'aucune sorte. Selon la taille du logiciel, ça peut être plus ou moins gênant (je vous laisse imaginer quand le workspace du projet fait plusieurs centaines de Mo).

    Parfois, rien qu'obtenir une version exécutable du logiciel à partir des sources est un calvaire.

    Une version avancée consiste à utiliser des frameworks, compilateurs ou réglages exotiques, sans que ce soit documenté publiquement.

    Les dépendances cachées

    Les dépendances du projet vont par défaut se télécharger depuis un serveur qui appartient à la même organisation que le projet, et pas depuis les dépôts standards. Et surprise, ce serveur ne contient (en public) que les dernières versions des dépendances.

    Au pire, ces dépendances sont elles-mêmes libres, on peut toujours aller les chercher et les compiler à la main, mais la quantité de travail pour obtenir une version fonctionnelle explose dès qu'on veut autre chose que la toute dernière version. Et je ne parle pas de la galère quand on veut mettre à jour un fork depuis l'origine.

    Le faux dépôt de sources

    Celle-ci est subtile : le dépôt des sources public n'est d'évidence pas un dépôt de travail, puisqu'il ne contient qu'un seul commit par version, sans le moindre commentaire. Ça n'est pas gênant tant qu'on essaie pas de maintenir un fork.

    La version avancée, qui consiste à ne fournir les sources que sous la forme d'un dossier compressé sans le moindre historique, semble avoir à peu près disparue, du moins dans mon domaine.

    Le tapis et le labyrinthe mouvant

    Deux variantes d'une même technique :

    1. Les sources peuvent être planquées à un endroit inaccessible, voire carrément absentes du site éditorial – rien, pas même un lien, pas même une mention claire de la licence : si tu ne sais pas déjà que le logiciel est libre… tu le découvres en lisant la licence après avoir donné toutes tes informations pour la fameuse « version de démonstration 30 jours ».
    2. Le site change tout le temps, et la manière d'accéder aux sources n'est jamais la même d'un mois sur l'autre.

    À noter que quelques entreprises ne fournissent les sources qu'aux clients de l'entreprise, ce qui est généralement autorisé.

    Une variante intéressante du point 2, c'est quand le logiciel change régulièrement de grands pans de son architecture.

    Le code qui fait des suppositions sur l'environnement de développement

    Généralement à base de chemins en dur dans le code ou de réglages spécifiques à un IDE. C'est rare, mais on en croise…

    La ressource libre-mais-déposée

    Ici ça s'applique plus aux ressources qu'au code, principalement aux logos : votre ressource est libre, mais est une marque déposée. Il y a plein de cas où on ne peut pas l'utiliser. Par exemple, le logo GNU n'illustre pas la version d'origine de cet article, parce que, je cite (le gras est d'origine) :

    Ce dessin est utilisable conformément à la GNU FDL v1.3, à la licence Art libre ou à la Creative Commons CC-BY-SA 2.0 (résumé en français ici). Toutefois, c'est aussi un logo déposé du projet GNU. Si vous voulez vous servir de cette tête de GNU pour mettre en lien un site web de la Free Software Foundation ou du projet GNU, n'hésitez pas ; de même, vous n'avez pas besoin de permission supplémentaire pour l'utiliser dans des contextes qui parlent de GNU de manière positive et exacte. Pour tout autre usage, veuillez au préalable demander la permission à licensing@fsf.org.
    Source: La page du logo GNU sur le site de la FSF

    Et donc ce logo est disponible sous 3 licences libres différentes, mais a des restrictions très fortes sur l'usage qui peut en être fait. C'est en fait valable avec à peu près tous les logos et toutes les marques – et les règles d'utilisations de logos et marques d'entreprises peuvent être bien plus restrictives.


    La conclusion de tout ceci ?

    Qu'un logiciel soit libre n'impose pas que son développeur doive vous faciliter l'application des libertés.

    C'est quelque chose qu'on croit trop souvent, de même qu'on mélange souvent « libre » et « gratuit ».


    Ce texte, placé sous licence CC BY 4.0, est une légère adaptation pour LinuxFR.org de l'original disponible sur Zeste de Savoir.

    Commentaires : voir le flux atom ouvrir dans le navigateur

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

    Sommaire

    Tranche de pingouin

    Chose promise, cause perdue. Voici comment transformer un modèle 3D en tranches de bois pour découpe laser. Et en bonus, mon essai initial de découpe en création originale.

    Les outils que j’ai utilisé sont blender et inkscape, et ce juste parce que je les connaissais et donc plus facile pour expérimenter.

    Note aux amateurs de freecad, j’ai commencé à regarder comment ça marche, au cas où ce serait plus simple avec, si jamais je trouve une idée et le courage de refaire un tuto, ça me fera un zeugma.

    Au début était le cube

    Ouvrir un nouveau fichier dans blender et mettre la scène en métrique, car sinon les mesures ne sont pas fixées par taille réelle. Notez que à chaque étape du tuto on aura des soucis de conversion de dimensions, donc en fait… mais bon faut pas en profiter pour être négligent.

    où trouver le changement metrique

    Retirer le cube et ajouter le Tux à la scène. Vous pouvez le trouver ainsi que toutes les licences à Tuuuuuuux

    • Faire face au tux (1 au pavé num)
    • Mettre la vue iso (5 au pavé num)
    • sélectionner le tux
    • passer en editor mode (tab)
    • Sélectionner le dessous des pattes (B) qui est rond
    • Niveler (SZ0)
    • sélectionner les deux centres des pattes, (S) Snap cursor to selected
    • rebasculer en object mode (tab) , transform origine to 3d cursor (object/transform)

    Maintenant, le tux est calé pour avoir le plancher des pattes en comme origine, à la verticale du pseudo centre de gravité que nous venons de choisir.

    mettre la bête en Z 0.

    Il est gros vot manchot ?

    Il nous faut choisir une taille, suffisamment grosse pour que ce soit cool, et pas trop gros pour limiter le prix. Comme l’objet c’est aussi tester une bonne quantité d’épaisseurs pour voir comment ajuster la taille théorique d’une planche par rapport à sa taille réelle (il reste du vide, la colle ça épaissit, les planches sont pas forcément pile à la taille).

    Une planche 2mm chez sculpteo (chez qui je teste la découpe laser) fait 94cm*59cm, il faut aussi essayer de rester dans une seule planche avec tous les morceaux. Le tux est presque aussi large que haut, du coup on cherche une approximation de cube découpé en tranches et étalé fait la même surface en gardant un peu de marge. ça fait 55 tranches, donc une hauteur de 116.875mm

    Et si on l’écartelait ?

    Il nous faut séparer les pattes du corps du tux (ce sont des objets distincts dans le modèle de base en fait et elles s’interconnectent :

    Tux pattes interconnectées

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

    tux vue pattes melees

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

    Lui sculpter des yeux plus sympa, parce que même si tout le monde ne veut pas l’avouer, pour avoir l’air cool faut quand même avoir un peu l’air con.

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

    la même en couleur

    Mais quand est-ce qu’on coupe ?

    Patience, il faut regarder un peu avant de couper. Placer un plan plus grand que le tux au sol, genre 20cmx20cm et lui appliquer un booléen d’intersection avec le tux. Et regarder en bougeant le plan sur Z comment seront les tranches.

    On voit deux endroits à problème, les ailes et la queue qui auront des tranches avec plus que un morceau, ce qui est plus complexe à coller.

    par ex les ailes :

    ailes dissociées

    Ce sera lourd à coller ensuite, on peut mais pourquoi…

    autant relier les ailes au tronc le plus légèrement possible, avec un lien de 1mm de large.

    idem au niveau de la queue :

    queue perdue

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

    jointure queue

    Cela vous permettra de facilement coller, il sera toujours possible de le limer après collage.

    Il faut bien nettoyer le résultat de l’union à l’intérieur du tux, ne pas laisser de cloisons internes, c’est à dire éviter d’avoir des plan à l’intérieur des plans :

    retirer les morceaux à l’intérieur des autres

    Finir de nettoyer en retirant les doublons de vertices, boucher les trous, assurer les normales pour que ce soit clair ce qui est à l’intérieur et à l’extérieur.

    Et si on l’empalait ?

    Pensons au support central qui va nous permettre de facilement positionner et coller les tranches de tux, il va être en trapèze et ressembler à ça au niveau d’une tranche :

    plan des tranches

    Le choix de la découpe sera donc toujours du côté le plus grand, en bas. Donc notre référence pour le positionnement des plans de découpe doit être la face basse de chaque tranche.

    Replaçons le plan à 0.01mm en Z (pour éviter le chevauchement parfait des surface avec les pattes Z=0), pensez à remettre tous les éléments avec scale=1 (Ctrl+A scale and rotation) pour la suite.

    Faire une array de 50 plans en Z espacés de 2.125mm, faire le booléen intersection avec le tux. Lors de la réalisation de mon bureau réel avec des tux, j’ai constaté que l’empilage de x tranches de 2mm n’a pas un résultat de x*2mm, mais avec l’air restant et la colle environ 2.125. Je vais affiner avec ce tux cette estimation mais déjà on part de 2.125mm par tranche.

    On voit les tranches et on voit des petits problèmes

    problème de tranche

    Une tranche qui manque en haut et le cul qui a une mini tranche en bas.

    Diminuer le overlap thresold du booléen pour que le problème du haut disparaisse :

    option thresold

    Remonter le point du bas du tux pour supprimer le second problème et non, ce n'est pas lui mettre un doigt dans le cul car ça ne doit pas rentrer :

    trou du cul de tux

    Nickel !

    bonnes tranches

    Simulons une épaisseur des tranches pour avoir un aperçu du résultat réel, ajoutons au plan un modifier solidify 2mm avec l’offfet à +1 (vers le haut) pour suivre le plan d’avoir la face basse comme référence :

    simul résultat final

    Le résultat est conforme, retirez le solidify, il ne doit pas interférer avec l’étape de création du lien central.

    On l’empale plus ?

    Mais si, mais si. En fait ce n’est pas obligatoire, mais ça facilite le positionnement des étages, et on peut aussi le garde sans le coller. Le lien central doit avoir une forme de trapèze et être parfaitement vertical, car pour l’instant sculpteo ne fait pas de découpe oblique.

    Il doit faire une épaisseur égale à celle du bois. Pour mon exemple je suis resté sur mon approximation (2.125mm) mais normalement il faut prendre 2mm et ajuster avec l’épaisseur du kerf qui est la taille du laser laissant un vide de découpe autour du trait de coupe. En pratique lors de mon premier essai j’ai eu des soucis d’épaisseur et j’ai du poncer mon trapèze. Du coup comme ce n’est pas nécessaire d’ajuster. Je surestime cette fois-ci la taille du trapèze.

    trapeze

    Il faut ajuster sa position pour qu’il traverse tout le tux, coup de chance c’est possible sur ce modèle en plaçant la traverse au centre de la dernière tranche du tux. Mais sinon on l’aurait simplement fait avec deux trapèzes sur deux hauteurs.

    Ajustez la taille en X et la hauteur de la partie haute pour faire joli, elle va dépasser un peu et même arrondir sa tête (note postérieure en pratique le trapèze sera toujours trop court, il faut juger les tranches encore un peu plus grand que 2.125mm).

    tete de tux

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

    mise en trapeze

    On voit que c’est moche au niveau du pied

    tux chaplin

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

    remodelage du pied

    aspect final

    Parlons peu, parlons kerf

    Le kerf c’est la partie du bois éliminée par le laser, en pratique la découpe est plus petite que le plan car le laser à une taille non ponctuelle. la découpe de la traverse dans les tranches sera donc un peu plus grande que prévu, et la traverse découpée plus court aussi que prévu.

    Dans ce modèle, on peut ignorer le kerf et accepter les différences, elles seront minimes et les pièces collées seront bien ajustées.

    appliquons donc le booléen différence entre le plan des tranches et la traverse

    Le résultat est difficile à voir mais en vue fil de fer c’est visible

    vue fil de fer du tux trapeziste

    C’est la lutte finale

    On peut passer à la phase finale, on réalise les “modifier” sur les planches, puis on aplati le trapèze en retirant les vertices d’un côté.

    En mode éditeur, on sépare toutes les tranches (P+loose parts en mode édition) et on les étale dans le bon ordre en vue du dessus. Attention, les numéros générés lors de la réalisation de l’array ne sont pas forcément dans l’ordre de Z…

    Pour ne pas me planter, je me met dans une vue adaptée et je bouge une par une les tranches avec des gx0.1 … Je vérifie bien que tout est dans l’ordre puis je met tout le monde à plat (sélectionner tout A puis SZ0)

    Nous allons avoir des soucis de conversion de taille entre blender puis Inkscape puis sculpteo… on commence par poser un étalon dans blender, un plan au sol de 1cm sur 90cm

    90cm etalon

    Le petit oiseau va sortir

    Enfin presque, il faut encore à faire la photo !

    Il existe une option de rendering qui génère du svg.

    Mettons la caméra au dessus en mode orthographique, d’abord une résolution 100% sur un ratio approximatif de mon rectangle incluant tout.

    100 pourcent

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

    ortho

    L’échelle orthographique est ce qui correspond au zoom, ajustez la valeur pour que tout rentre au plus juste

    Tout doit rentrer dans la fenêtre de rendering :

    serrez les rangs

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

    options rendering

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

    option rendering activee

    Pressez F12, une image svg sera générée dans le répertoire indiqué dans output nommé 0001.svg,

    Ouvrez le dans Inkscape, dégroupez et sélectionnez l’étalon. mettez lui une épaisseur de contour à 0 pour ne pas fausser la taille et regardez sa taille. Dans mon cas je tombe sur 35.719cm.

    Je vais donc changer la résolution de l’image pour ajuster la taille d’un facteur de 90/35.719=2.52

    Je change dans blender le render pour :

    retailler

    Re F12 et vérification.

    Mon étalon fait maintenant 1cm sur 90.01cm.

    aller, on essaie avec un pixel de moins en Y :), on tombe sur 89.987. C’est moins bon, retour en arrière.

    Maintenant que l’on a les bonnes tailles dans Inkscape, il faut nettoyer. Parce que le freestyle a introduit des pixels de temps en temps.

    Je prends donc chaque découpe pour la repositionner au mieux et aussi supprimer les traces.

    points artefacts

    Pour m’aider et aussi servir d’étalon entre Inkscape et sculpteo je place un cadre dans une autre couleur qui délimite ma sélection, 53.5cm de large sur 75cm de haut.

    Et je fais tout rentrer dedans.

    Je vérifie chaque pièce pour assurer qu’il n’y a pas de défaut, et j’assure les contours à 1px et mon cadre avec une couleur différente

    C’est prêt.

    planche à découper

    Pour ceux qui sont plus observateurs que moi, vous verrez que j’ai oublié de grouper une fente dans une tranche. Moi je vais le voir au montage plus tard…

    TuxOlaser

    J’upload chez sculpteo.

    Deux couleurs sont détectées, l"une correspond au noir et l’autre au rouge du cadre. Les mesures n’ont pas été conservées, je ne sais pas pourquoi… mais mon cadre me permet de choisir un ajustement de taille à 26.5% qui me redonne les bonnes dimensions.

    Je peux alors désactiver le cadre rouge dans sculpteo (style 2 sur aucun et voila !

    prêt à couper.

    Livraison comprise il vous en coûtera 53.33€.

    Pour info, les tux du bureau ont coûté moins cher, ils étaient en une seule livraison et un peu plus petits, 72€ les 3.

    Déboitage du tux et montage

    Je hais les video de unboxing, et me voilà moi même à déboiter…

    Bon, puisqu’il faut :

    la boite est bien protégée

    boite

    et la planche dans la mousse

    planche entourée de mousse

    Les pièces sont tenues par du scotch, il faudra faire attention en retirant le scotch de ne pas casser les pièces fragiles.

    scotch sur les pieces

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

    sans scotch à numéroter

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

    debut d'empilage

    piece 33

    redecoupe de la 33

    piece 33 empilee

    Tadaaaa

    Entrer une description pour l'image ici

    A propos de licences

    J’ai fouillé pour trouver les licences attachées au modèle de base, les voici :

    https://opengameart.org/content/tux

    https://opengameart.org/sites/default/files/license_images/gpl.png

    http://www.gnu.org/licenses/gpl-3.0.html

    https://opengameart.org/sites/default/files/license_images/cc-by.png

    http://creativecommons.org/licenses/by/3.0/

    Les fichiers

    Voila les fichiers sources blender et le inkscape (piece 33 corrigée)

    fichier blender

    fichier svg

    Commentaires : voir le flux atom ouvrir dans le navigateur

  • Cartographie et images de rues : Mapillary et OpenStreetCam (Dépêches LinuxFR)

    Vous connaissez probablement déjà OpenStreetMap, la base de données cartographique libre. Mais vous connaissez sans doute aussi des concurrents qui proposent en plus des cartes d’autres services, comme les images aériennes, et depuis une dizaine d’années vous avez peut‐être pris l’habitude des images prises directement dans les rues : StreetView chez Google, StreetSide chez Microsoft…

    Des alternatives libres se mettent en place, et c’est ce dont nous allons parler : OpenStreetCam, né en 2013, et Mapillary. Les deux initiatives sont ouvertes, tout le monde peut participer facilement via une application pour mobile.

    Ces solutions permettent une alternative libre pour les utilisateurs et sont une aide très précieuse pour les contributeurs d’OpenStreetMap.

    Sommaire

    Réunir une telle collection d’images aurait pu paraître impossible il y a peu, mais l’avènement des smartphones change la donne : cartographier une rue peut être aussi simple que de fixer son téléphone sur son vélo, sa voiture, ou le tenir à la main en marchant. Une application s’occupe de prendre des photos (géolocalisées, bien sûr) périodiquement et de les envoyer vers les serveurs qui s’occupent du reste.

    Dur d’atteindre la qualité des images panoramiques à 360° des concurrents, mais, à l’inverse, permettre à tout le monde de contribuer permet aussi de couvrir les zones inaccessibles en voiture.

    En cinq ans, Mapillary a collecté 179 millions d’images (après avoir passé les 100 millions il y a moins d’un an), soit plus de trois millions de kilomètres couverts. La couverture OpenStreetCam n’est pas encore aussi bonne, mais c’est quand même plus de 50 millions d’images, et la croissance est très forte de ce côté aussi (multiplication par quatre depuis novembre 2016).

    À quoi tout ceci peut‐il servir ?

    • Pour tout le monde : comme la concurrence, à savoir à quoi ressemble un endroit sans y être allé, à planifier un itinéraire… On peut accéder aux images depuis un navigateur via le site des deux projets. Mapillary est intégré à l’application libre Android OsmAnd depuis la version 2.7 de juillet 2017 (disponible sur le dépôt F-Droid sous le nom OsmAnd~). On peut maintenant visualiser les séquences Mapillary directement sur la carte :

    Mapillary dans OsmAnd : séquences visibles sur la carte

    Ou plus simplement, une section « photos en ligne » est maintenant disponible quand on examine les détails d’un lieu :

    Mapillary dans OsmAnd : photos des lieux

    • Pour les contributeurs OpenStreetMap, c’est un outil précieux pour la cartographie de fauteuil, c’est‐à‐dire la possibilité d’éditer la carte OpenStreetMap sans être sur le lieu qu’on édite et éventuellement sans avoir fait de reconnaissance au préalable. L’éditeur ID en ligne sur https://openstreetmap.org permettait déjà d’éditer sur fond d’images aériennes ou de plan de cadastre par exemple. On peut maintenant visualiser les images de Mapillary directement depuis l’éditeur et, mieux encore, voir directement les panneaux de signalisation détectés par Mapillary en analysant les images.

    Mapillary

    Le principe de Mapillary est de récolter puis d’analyser un maximum d’images. L’analyse d’image permet de repérer les panneaux, feux tricolores, et aussi d’autres éléments comme les voitures, garages à vélo, verdure, poubelles… Ces données sont utilisables librement par OpenStreetMap, et l’entreprise derrière Mapillary monnaye ces données.

    Voici par exemple ce que Mapillary détecte place du Trocadéro :
    Données détectées place du Trocadéro

    Ces données sont utilisables directement depuis les éditeurs OpenStreetMap ID (éditeur par défaut depuis le site Web) et JOSM (client lourd). Lire l’article de blog et les vidéos associées pour les détails. Les éléments de carte peuvent être associés à une image Mapillary via l’étiquette mapillary=….

    Mapillary est également intégré dans l’application Android OsmAnd.

    OpenStreetCam

    OpenStreetCam est mené par Telenav, qui s’appuie sur OpenStreetMap pour les outils de navigation qu’elle commercialise.
    OpenStreetCam en ligne

    Une originalité d’OpenStreetCam est sa manière d’encourager les contributeurs par un système de points : on gagne des points en contribuant des images, et d’autant plus de points qu’on couvre des zones non couvertes.

    OpenStreetCam est intégré dans l’éditeur JOSM, mais pas (encore ?) dans ID ni OsmAnd.

    Historiquement, le projet s’est lancé sous le nom OpenStreetView pour reprendre le nom de domaine d’un projet lancé en 2009 qui n’avait pas réussi à devenir populaire. Il a été renommé plus tard en OpenStreetCam pour éviter la confusion possible avec la solution de Google.

    Est‐ce vraiment libre ?

    On lit çà et là sur le Web des controverses comme quoi l’une des solutions est commerciale et l’autre libre. En réalité, les deux solutions sont supportées par des entités commerciales (Mapillary AB est une entreprise basée en Suède centrée sur le service mapillary.com, et OpenStreetCam est mené par l’entreprise Telenav qui vend des systèmes de navigation pour voiture qui utilisent OpenStreetMap). Et les deux solutions sont « en grande partie libre ».

    Les deux services distribuent les images sous licence CC-BY-SA, et dans les deux cas les contributeurs donnent au service une licence qui lui permet d’utiliser les images sans restrictions.

    Chez OpenStreetCam, le code du site Web et des applications pour Android et pour iOS sont libres (mais au moins l’application Android a des dépendances non libres qui empêchent, entre autres, son inclusion dans F-Droid). Mapillary fournit plusieurs logiciels libres, par exemple mapillary-js, le code qui permet l’affichage des images sur leur site Web, mais l’application pour Android et iOS n’est pas libre (elle pourrait le devenir prochainement).

    Pour Mapillary, il faut distinguer les conditions d’utilisation du service et la licence des images. Les conditions pour le service ne permettent pas l’usage commercial hors contrat avec lui (d’après la partie 1.2 de ses conditions d’utilisations) et limitent par défaut les téléchargements à 50 000. La licence des images est la licence CC-by-SA et il est possible de re‐licencier les travaux dérivés dans le cadre d’OpenStreetMap selon les conditions de la fondation OpenStreetMap. En d’autres termes, il y a des restrictions sur le téléchargement d’images, mais une fois les images téléchargées, elles sont utilisables librement. Les images sont libres, mais le service n’est pas entièrement gratuit (250 €/mois pour le pack « professional », par exemple).

    Pour un comparatif des conditions des deux services (écrite par un employé Mapillary), voir par exemple ici.

    Et la pérennité ?

    L’ouverture est souvent citée comme gage de pérennité. Si l’auteur d’un logiciel libre décide de passer à autre chose, quelqu’un d’autre peut, au moins en théorie, prendre le relai.

    Pour OpenStreetCam et Mapillary, la situation est un peu plus compliquée. Le scénario catastrophe où l’un des deux arrête son activité ou se fait racheter par une entreprise qui décide d’arrêter de diffuser les images sous licence libre est tout à fait possible. Pour qu’une autre entité puisse reprendre la suite, il faut que deux conditions soient réunies : que les images soient réutilisables (c’est le cas avec la licence CC-BY-SA), et que quelqu’un ait gardé les images avant qu’elles ne disparaissent. C’est le deuxième point qui est problématique : les bases d’images sont colossales (plus de 500 téraoctets pour Mapillary, un peu moins pour OpenStreetCam, mais fort taux de croissance dans les deux cas) donc maintenir un stockage correctement fiabilisé pour un miroir aurait un coût de l’ordre de la centaine de milliers d’euros par an (en calcul de coin de table…). Ajouté à la limite de téléchargement pour Mapillary, maintenir un miroir n’est clairement pas à la porté du premier venu (même si en comparaison une fondation comme celle de Wikipédia gère un budget autrement plus élevé). Côté OpenStreetCam, certains en ont discuté, mais toujours pas de miroir non plus.

    On peut espérer que les deux services ne fermeront pas en même temps, donc une solution pour les contributeurs pour pérenniser leurs images est d’envoyer les images aux deux, mais ce n’est pas faisable directement depuis les applications pour mobile. Certains contributeurs conservent également une copie de leurs images localement, « au cas où ».

    Comment contribuer ?

    Contribuer est très facile si vous avez un smartphone. Un contributeur peut installer l’application et prendre des images de sa rue à pied et sans matériel supplémentaire en quelques minutes, ou se fixer des objectifs plus ambitieux comme certains contributeurs qui s’imposent de dépasser le million d’images contribuées en un mois. Pour contribuer en voiture ou à vélo, il est recommandé d’avoir un support, Mapillary en envoie gratuitement sur demande aux contributeurs si besoin. Toute la richesse de ces bases d’images vient de la diversité des contributeurs, donc de la diversité des images qu’elles contiennent.

    Alors, vous avez commencé ? Qu’attendez‐vous ? ;-)

    Lire les commentaires

  • NixOS, collection printemps‐été 17 (Dépêches LinuxFR)

    La distribution NixOS sort en version printemps‐été 17. Cette distribution GNU/Linux, fondée sur le gestionnaire de paquets Nix propose une gestion « purement fonctionnelle » des paquets et services GNU/Linux. Une dépêche un peu ancienne, mais toujours d’actualité, en décrit les principes de fonctionnement ; certains points ont été développés par la suite.

    NisOS

    Cette version comprend son lot de nouveautés :

    • il est désormais possible d’utiliser un système de surcouches (ou overlays) pour ajouter ses propres paquets (ou versions de paquets) à la distribution ;
    • de nouvelles versions pour de nombreux paquets, comme par un noyau Linux 4.9, Firefox 52 ou encore KDE / Plasma 5.8.6 ;
    • plein de nouveaux services et d’améliorations, notamment en termes de sécurité.

    Sommaire

    Présentation de l’écosystème Nix et NixOS

    Nix, le gestionnaire de paquets, permet d’utiliser des paquets binaires, ainsi que des paquets sources, comme sous Gentoo ou Arch. Comme presque tous les systèmes de gestion de paquets, il permet la gestion des dépendances entre paquets. Ses principes de fonctionnement originaux lui permettent d’implémenter de façon sûre des fonctionnalités souvent peu stables ou absentes des autres gestionnaires de paquets. Il s’agit de la poursuite par la communauté du travail commencé par Eelco Dolstra dans sa thèse à la Technische Universiteit de Delft.

    NixOS est une distribution GNU/Linux utilisant Nix comme système de gestion de paquets. Elle permet des mises à jour réversibles du système : si une nouvelle version d’un paquet, du système ou de sa configuration pose problème, on peut revenir à une version précédente en une commande. Elle utilise également le langage Nix pour la configuration du système, ce qui permet d’intégrer la configuration entre les différents services, mais aussi d’automatiser le redémarrage des services en fonction des changements de configuration.

    L’écosystème Nix va au‐delà d’une simple distribution :

    • NixOps permet d’orchestrer des réseaux de machines (physiques ou virtuelles), de façon plus simple et plus fiable que les systèmes classiques tel que Salt ou Puppet ;
    • Hydra est un système de construction continue : il s’agit d’un programme qui construit en permanence un ensemble de paquets auxquels on soumet de nouvelles versions. Les paquets à construire sont spécifiées dans le langage Nix.

    Parmi les avantages de cette approche, on distingue :

    • la possibilité de revenir sur une mise à jour ou une installation : toutes ces opérations sont réversibles ;
    • l’état du système est complètement défini à partir d’un fichier, de manière plus fiable qu’avec les systèmes comme Salt, Ansible ou Puppet ;
    • sur une machine partagée, la possibilité d’installer des paquets pour son usage privé sans avoir à les recompiler et sans avoir besoin des droits d’administration ;
    • la possibilité de mélanger paquets binaires et paquets recompilés et personnalisés ;
    • des environnements de développement (avec nix-shell) qui permettent d’avoir des versions différentes des paquets suivant la tâche qu’on accomplit, afin de s’affranchir des incompatibilités.

    Mode « compatibilité »

    Le modèle Nix implique que tout ce qu’on installe se retrouve dans le store, avec le chemin /nix/store, ce qui n’est pas standard. La plupart du temps, cela ne pose pas de problème, mais cela peut compromettre l’utilisation de binaires conçus pour les systèmes plus classiques. Les commandes steam-run, ainsi que buildFhsEnv permettent de créer des environnements dans lesquels les paquets installés apparaissent à l’endroit prévu par la FHS. C’est ainsi notamment — comme les plus perspicaces l’auront saisi — que l’on peut utiliser les jeux Steam sous NixOS.

    Il est désormais possible grâce à dockerTools d’utiliser Nix pour préparer des images Docker de façon déclarative. Plutôt que d’écrire une suite de commandes qui permettent de préparer l’image, on décrit directement son contenu dans un fichier Nix. De même, dockerTools.pullImage permet de récupérer une image Docker et de la manipuler avec le langage Nix.

    Les surcouches

    Les surcouches, ou overlays en anglais et dans la documentation, permettent d’ajouter ses propres paquets à nixpkgs, la collection de paquets sur laquelle est basée NixOS. Cela permet, comme avec d’autres gestionnaires de paquets, de bénéficier de logiciels qui n’ont pas encore été empaquetés. Il est également possible de remplacer des paquets existants par ses propres versions. Si l’on choisit de le faire, les paquets qui dépendent du paquet remplacé seront recompilés pour utiliser le paquet de la surcouche.

    Mises à jour d’importance

    Chaîne de compilation

    Le compilateur de référence de cette version est GCC 5.4.0, avec la Glibc 2.25. Les services sont orchestrés par systemd 232.

    KDE

    KDE 5, plus précisément Plasma 5.8.6 devient le bureau par défaut. KDE 4 n’est plus inclus.

    Quelques nouveaux services

    NixOS se distingue d’autres distributions par ses services, des programmes système dont l’installation et la configuration sont gérés globalement depuis le fichier configuration.nix.

    De nouveaux services ont été ajoutés, voici une sélection tout à fait subjective :

    • vim permet de faire de cet éditeur l’éditeur par défaut du système ;
    • le démon de musique ympd peut désormais ambiancer les systèmes NixOS ;
    • moins futile — encore que —, on peut également sauver le monde avec boinc, en ouvrant sa machine à des projets scientifiques en mal de temps de calcul distribué ;
    • pour voir l’effet de tout cela sur le fonctionnement du système, l’outil de supervision Prometheus fait son apparition.

    Sécurité

    Suivi des vulnérabilités

    Lorsqu’une vulnérabilité est découverte, elle est rapportée dans la collection de paquets nixpkgs. Il devient alors impossible d’installer le paquet incriminé jusqu’à ce qu’un correctif ait été appliqué. On peut toutefois utiliser une option ad hoc pour passer outre cette vérification, soit pour un paquet, soit globalement.

    Fin de MD5

    On peut avoir besoin d’installer des paquets depuis les sources, aussi bien avec le système de construction continue Hydra qui serait installé sur une machine centrale, que sur chaque machine suite à une demande d’utiliser des options particulières ou suite à l’utilisation d’une surcouche Nix.

    Dans tous ces cas, la compilation du paquet commence par le téléchargement des sources, dont il faut vérifier l’intégrité. La description de chaque paquet contient à cet effet une empreinte cryptographique des sources (généralement SHA-256). L’empreinte MD5, obsolète, n’est plus utilisable à partir de la version 17.03 — son utilisation était de toute façon assez rare.

    Réduction de l’empreinte

    La dernière amélioration date de la version 16.09, qui n’avait pas été annoncée sur LinuxFr.org, et elle est assez appréciable : l’espace disque nécessaire pour les plus petites installations a été bien réduit, grâce à une chasse aux dépendances infondées. En particulier, il est désormais possible pour un paquet source de définir plusieurs sorties (outputs), qui seront installables comme paquet ou utilisables comme dépendance par d’autres paquets. Cela permet de diminuer les dépendances dans le cas où A dépend de B, B dépend de C, mais seulement pour sa documentation. Il est alors possible, quand on installe A, d’utiliser B sans sa documentation, donc sans la dépendance à C.

    Lire les commentaires

  • Oui, Illico ! (Dépêches LinuxFR)

    Toute ressemblance avec des personnes existantes ou ayant existé est purement fortuite.
    > Dis Arnaud, tu n’aurais pas un outil magique pour m’aider à nettoyer mes données et m’éviter d’y passer ma journée ma soirée mon week‐end ? :(
    > Si, Illico !

    En très court, Illico propose un catalogue de fonctionnalités prêtes à l’emploi, génériques (paramétrables) pour améliorer la qualité des données.

    Et en une minute, Illico, c’est quoi ?

    Illico Editor est un couteau suisse de la qualification de données, en JS/HTML, publié sous licence GPL v3. L’outil s’adresse à tous et toutes (et pas uniquement à des expert·e·s informatiques) et permet de manipuler, corriger, re‐structurer des données en quelques clics. Par exemple, des données issues d’un tableur, d’une base de données, d’une application métier, etc., que l’on souhaite corriger ou pour lesquelles on souhaite établir des indicateurs statistiques simples ou complexes, lister et filtrer ces données, les enrichir avec d’autres sources, etc.

    Sommaire

    Qu’est‐ce que ça peut m’apporter ?

    À l’usage, les gains de temps observés se situent à plusieurs niveaux :

    durant la phase d'exploration de données (analyse)

    Les acteurs métiers (comptabilité, RH, administratif, etc.) sont autonomes durant cette phase ; sans Illico, les collègues de l'informatique devaient jusqu'à présent leur développer des routines (macro, scripts, programme dédié) de corrections de données ou de transformation de la structure des données comme des pivots de colonnes/lignes.
    Ces développements sont souvent trop en lien avec la structure des données ou avec le langage de programmation fétiche du développeur et à chaque nouveau chantier qualité de données il fallait re-développer (parfois dans une autre techno).

    Généralement juste ajouter une nouvelle colonne imposait de vérifier toutes les routines : c'était très sensible aux données et au final assez laborieux.

    S'il s'agit d'un projet de reprise de données (exemple : export d'une base de données, nettoyage puis ré-importation), des fonctionnalités très typées base de données (champs null, valeurs uniques, longueurs des champs, normalisation selon Merise, etc.) sont présentes dans Illico.

    durant la phase de correction

    Les acteurs métiers peuvent corriger en masse dans Illico et le résultat sera exporté dans un fichier CSV (ou par un copier-coller global vers un tableur). On évite ainsi de manipuler des données de production et aussi de devoir créer un environnement de test juste pour permettre aux utilisateurs de vérifier/corriger leurs données.

    Illico produit un journal de bord, une sorte de documentation auto-générée par l'outil.
    Une fois que les acteurs métiers ont réalisé un premier nettoyage et que des équipes informatiques doivent implémenter/automatiser les mêmes étapes (dans un ETL, un sas de nettoyage de données, etc.), Illico et le journal de bord deviennent une aide précieuse pour tester rapidement la qualité de l'implémentation.

    durant la phase de restitution

    Illico permet de produire des tableaux de synthèse (exemple tableaux croisés dynamiques à plusieurs niveaux de profondeur),

    en général (exemples)

    Vous connaissez sûrement ces situations :

    • pour un nouveau projet informatique, on a besoin de transformer des données d'un format à un autre dans la phase de chargement initial de données ;
    • pour tout projet de refonte d'application avec reprise des données, on cherche à passer d'un format source à un format cible (exemple : la structure de la base de données relationnelles est différente) ;
    • dans le cas de préparation d'un annuaire ou d'une liste d'individus à contacter (préparation d'un publipostage, ou mass-mailing), on veut harmoniser la présentation des informations (majuscules etc.) ;
    • dans les métiers supports (administratif, RH, compta, etc.), on souhaite créer une liste d'individus (liste des promouvables, liste des personnes à évaluer, liste des personnes éligibles, etc.) en appliquant successivement plusieurs règles métiers d'ajout/soustraction :
      • liste de départ : tout le monde ;
      • on filtre : on conserve ceux qui ont droit ;
      • on soustrait : ceux qui ont déjà eu ;
      • on ajoute : ceux qui n'ont pas pu avoir ;
      • on soustrait : ceux qui partiront avant la date d'effet ;
      • on rajoute : ceux qui arriveront d'ici la date d'effet.

    Sans outil, ce type de gymnastique peut devenir très chronophage.

    Pourquoi un outil de plus ?

    le constat

    Quel que soit votre métier et votre besoin, il vous faudra une excellente connaissance des données ET un outil particulièrement accessible et souple. Mais quel outil ? un tableur, une base de données, une base du type Access, Kexi ou FileMaker, un script, une nouvelle application dédiée ? …
    Existe-il un outil qui couvre tous les types d'actions ? ou un-e collègue qui connaisse tous les outils/techno qui pourrait servir ici ? et qui soit disponible pour vous aider ?

    Faut-il faire monter en compétence les acteurs métiers à des outils techniques (SQL ? macro VBA ?) ou former les programmeurs à des problématiques métiers ? À l'exception des administrateurs technico-fonctionnels, avoir une double expertise ne semble pas très pertinent (surtout si l'expert-comptable ne se sert du SQL que 2 fois dans l'année).

    Est-ce un problème insoluble ?

    la solution théorique

    La solution paraît simple sur le papier :

    • apporter un outil accessible aux utilisateurs métiers pour s'affranchir d'un coût d'apprentissage technique très conséquent ;
    • (pour faire simple) que cet outil soit aussi efficace qu'un développeur/adminDB.

    Illico : un outil ou une approche ?

    Il existe actuellement des outils très pertinents pour aider au nettoyage des données. Certains peuvent s'avérer assez lourds (licence, techno, machine puissante, dépendances) ou juste inconnus/hors de portée des acteurs métiers qui en ont besoin.

    Illico tente de pallier à cela dans une approche originale où toutes les fonctionnalités se présentent de la même manière et demandent (selon les paramètres, et en moyenne) entre 2 et 4 clics.

    Par exemple, les actions suivantes se réalisent de la même façon :

    • faire un pivot complexe ;
    • mixer des colonnes A et B avec une règle spécifique (exemple : prendre la valeur de B quand celle de A est vide sinon prendre celle de A) ;
    • visualiser un tableau croisé dynamique ;
    • traiter des données en liste (dans une même cellule/case) ;
    • faire un pivot ou mettre une colonne en majuscule ;
    • supprimer les lignes vides.

    Il n'y a en réalité pas de raison pour que mettre une colonne en minuscule soit plus simple à programmer que faire une différence symétrique entre deux sources de données. À l'oral, il faut 2-3 secondes de plus pour l'exprimer ? eh bien dans Illico, ce sera 2-3 clics supplémentaires, pas plus !

    En pratique, ça se passe comment ?

    livré clé en main

    Vous pouvez tester ou utiliser la version en ligne (les données ne quittent pas votre poste) ou la télécharger en local :

    1. téléchargez ;
    2. décompressez ;
    3. ouvrez la page index.html (c'est une copie conforme du site officiel qui inclut la documentation et le tutoriel de prise en main) ;
    4. cliquez sur « accès direct », vous y êtes.

    Vous pouvez consulter la documentation utilisateur complète avec des exemples ou tout simplement suivre le tutoriel de prise en main (qui comprend un fichier d'exemple).

    le moins d'étapes possibles

    Dans Illico, il n'y a pas d'étapes préliminaires de description du format de la source de données (nombre de colonnes, types de données, etc.).

    1. Vous copier-collez vos données depuis un tableur ou vous importez un fichier CSV et dans les deux cas le séparateur de colonne est automatiquement détecté (vous pouvez le forcer au besoin) ;
    2. vous appliquez une transformation ;
    3. vous analysez le nouvel état des données ;
    4. vous exportez, annulez ou poursuivez avec une autre transformation.

    un petit aperçu

    le domaine de valeur

    Équivalent à un tableau croisé dynamique sur 1 dimension avec total et ratio… en 1 clic.

    domaine de valeur sur une liste d'individus

    Le tableau de synthèse est exportable au format HTML ou CSV.

    l'analyse et traitement des doublons

    plusieurs traitements possibles : filtrer, exclure, marquer, analyser

    Il est possible d'identifier les doublons sur plusieurs colonnes (le même nom, les mêmes nom et prénom, les mêmes nom et prénom et email, etc.).

    Au choix, le traitement des doublons sera de les :

    • filtrer (conserver) ;
    • exclure (suppression) ;
    • marquer (ajoute une colonne en début de tableau avec un identifiant pour chaque groupe de doublons) ;
    • marquer et filtrer ;
    • analyser (tableau de synthèse).

    exploration de données

    Enchaînements de tableaux croisés dynamiques

    On compte le nombre de vacations :

    • par service (axe service) ;
    • puis lorsque l'on clique sur le service, un second tableau la répartition des vacations par individu (axe contact).

    À chaque tableau de synthèse, le jeu de données correspondant est exportable HTML ou CSV ainsi que le tableau de synthèse.

    liste de vacations indiquant le service et la personne

    Illico, en résumé

    fonctionnalités utilisateur

    • import CSV : UTF-8 ou ISO-8859-1 ;
    • export CSV : UTF-8 (+ BOM) ;
    • import/export par copier-coller ;
    • possibilité d'annuler la dernière transformation ;
    • journal de bord intégré (qui indique aussi les actions annulées) ;
    • plus de 100 transformations de données :
      • analyser : formats de données, tri à plat ;
      • croiser, enrichir ou exclure depuis deux sources ;
      • modifier en masse ou selon des conditions ;
      • opérations sur des listes (plusieurs valeurs dans une même cellule/case) ;
      • convertir des formats ;
      • rapprocher : accents, suppression des "blancs" (trim), distance d'édition ;
      • filtrer, dédoublonner, échantillonner ;
      • agréger, explorer : tableaux croisés dynamiques ;
      • pivoter, transposer ;
      • et bien d'autres !

    code source

    • environ 10 000 lignes de LOC strictes (HTML/JS) ;
    • code-source JS principal = 1/3 de commentaires, 2/3 d'instructions ;
    • environ 280 fonctions JS ;
    • 0 dépendance/bibliothèque/code-tiers ;
    • le code est vérifié sous JSHint.

    à propos du code-source JS

    • rares dépendances entre les fonctions (limite les effets de bord) ;
    • la quasi-totalité des algorithmes sont basés sur des parcours de tableaux ;
    • le code-source JS suit une convention de nommage des variables en fonction de leur usage (i j k pour un compteur, v pour une valeur du tableau de données (String), t pour un texte plutôt long, n pour un nombre, e pour un élément HTML, a pour un array, etc.).
    // quand on lit
    a[i] // a représente un array simple (i est un numérique)
    
    // quand on lit
    a[v] // a représente un array associatif (v est une chaîne).
    

    Ce qui permet à la lecture de toujours savoir sur quel type d'objet on est.

    Et les variables les moins utilisées ont des noms plus explicites.

    Les algorithmes assez courts + la convention de nommage + des fonctions cloisonnées permettent de visualiser les 3/4 des fonctions dans la hauteur de l'écran sans scroller (40 LOC pour un 15").

    Nota bene : les revues de code sont l'occasion soit de clarifier la convention soit de rectifier les noms des variables dans le code source respecter au mieux la convention.

    La convention est indiquée dans la rubrique architecture de la documentation.

    Cas concrets d'utilisation

    tableaux croisés dynamiques

    Un logiciel métier RH (ressources humaines) exporte un listing des situations des agents mais d'une façon qui ne permet pas d'utiliser des tableaux croisés dynamiques ;
    Illico permet de basculer des colonnes, des groupes de colonnes en autant de lignes (pivot) pour se retrouver sur un format plus facile à utiliser.

    données d'annuaire

    Un export d'un annuaire fournit des coordonnées sous la forme

    Mr X  | téléphone : 0123456789, fax : 032165478
    Mme Y | email : yy@abc.com, téléphone : 0546789123
    

    Illico permet, en une opération, de transformer les coordonnées en trois colonnes : téléphone, fax, email, quelque soit l'ordre des informations qui y figuraient.

     normalisation

    Pour préparer une base de données relationnelles, on a au départ un grand fichier de données et il faut créer les identifiants (clé primaire/étrangère) pour les relations entre les deux tables. Illico va normaliser (normalisation Merise) les données et préparer un identifiant).

    En une opération, Illico remplace les valeurs par les identifiants et affiche la table de correspondance.

    vérifier des données avant de les charger en base

    Avant de charger un csv dans une base de données, on cherche souvent à vérifier la longueur des champs, si les valeurs sont uniques, si le type alpha ou numérique est bien respecté, les valeurs minimum et maximum pour des numériques, etc. Illico permet de vérifier cela en un seul clic.

    Une autre fonctionnalité supprime les lignes qui ne contiennent aucune valeur pour certaines colonnes. Cela évite de charger des données en base de données et d'avoir des rejets lors de l'import ou plus exactement, cela permet de détecter en amont de l'import toutes les lignes qui vont être rejetées.

    préparer des jointures

    Lors d'une jointure (croisement) entre deux sources de données A et B par exemple deux tables d'une base de données relationnelle, il est difficile de connaître rapidement les données de A qui ne sont pas dans B et en même temps celles de B qui ne sont pas dans A.

    À partir de deux fichiers CSV (A et B), Illico produit un tableau de synthèse avec ces informations et permet de choisir la jointure que l'on souhaite réaliser.

    Cela permet aussi de détecter avant la jointure les cardinalités entre les deux sources. Par exemple on s'attend à trouver uniquement du 1-1 entre deux sources. Et quand on simule, on observe avec la simulation du 1-0 (des valeurs de A sont absentes de B), du 1-1 (des valeurs de A se retrouvent dans B) et du 1-n (des valeurs de A se retrouvent à plusieurs reprises dans B).

    préparer des données multi-lignes

    Pour constituer un annuaire agréable à consulter, on peut partir d'une liste d'individus avec en colonne : le nom, le prénom, la fonction, les coordonnées et l'email et d'autres données.

    Pour des raisons esthétiques, on souhaite présenter les données autrement avec, pour une même ligne du tableau, regrouper dans la même cellule/case du tableau les informations suivantes

    NOM Prénom
    fonction (en rouge)
    coordonnées
    email (lien cliquable)

    NOM Prénom
    fonction (en rouge)
    coordonnées
    email (lien cliquable)

    Comme Illico repose sur HTML/JS, il est facile d'intégrer des balises HTML de mise en forme (couleur, gras, a/href) et un saut de ligne BR et de les récupérer par copier-coller vers un tableur ou un traitement de texte.

    Ici, il y a trois étapes :

    1. la couleur ;
    2. la balise a/href pour l'email ;
    3. la concaténation de 5 colonnes.

    Nota bene : des transformations sont disponibles pour le gras, l'italique, le barré, augmenter/diminuer la taille, mettre en couleur, ou enlever la mise en forme. Des options permettent à tout moment d'interpréter ou au contraire de rendre apparente/visible ces balises/mises en forme HTML sans les interpréter.

    Lire les commentaires

  • Meilleures contributions : les primées de décembre2017 (Dépêches LinuxFR)

    Nous continuons sur notre lancée de récompenser ceux qui chaque mois contribuent au site LinuxFr.org (dépêches, commentaires, logo, journaux, correctifs, etc.). Vous n’êtes pas sans risquer de gagner un abonnement à GNU/Linux Magazine France ou encore un livre des éditions Eyrolles ou ENI. Voici les gagnants du mois de décembre 2017 :

    Abonnement d’un an à GNU/Linux Magazine France (éditions Diamond)

    Livres des éditions Eyrolles et ENI

    Certains gagnants n’ont pas pu être joints ou n’ont pas répondu. Les lots ont été réattribués automatiquement. N’oubliez pas de mettre une adresse de courriel valable dans votre compte ou lors de la proposition d’une dépêche. En effet, c’est notre seul moyen de vous contacter, que ce soit pour les lots ou des questions sur votre dépêche lors de sa modération. Tous nos remerciements aux contributeurs du site ainsi qu’à GNU/Linux Magazine France, aux éditions Eyrolles et ENI.

    Bandeau LinuxFr.org

    Les livres sélectionnés par les gagnants :

    Logo éditions Diamonds   Logo éditions ENI   Logo éditions Eyrolles
                       

    Lire les commentaires

  • Kickstart et Ansible pour automatiser des installations/configurations de systèmes Linux (Journaux LinuxFR)

    Sommaire

    J'ai appris récemment Kickstart et Ansible et je voulais écrire un petit retour d'expérience.

    Ces deux outils permettent d'automatiser des tâches d'administration système. Un gros avantage est d'avoir une description dans des fichiers texte (sous forme de fichier de config ou de code) de comment installer et configurer une machine ou un ensemble de machines.

    Il suffit alors d'utiliser un gestionnaire de versions comme git pour garder un historique de ces fichiers texte, pouvoir créer des branches etc. Bref, c'est le « infrastructure as code », les sysadmins sont de plus en plus apparentés à des programmeurs.

    Kickstart

    Kickstart est spécifique à la famille de distributions Red Hat : Fedora, RHEL, CentOS, … Ça permet d'automatiser une installation de l'OS. Au lieu de démarrer sur un live USB/DVD et de répondre manuellement aux questions, on écrit un fichier de config Kickstart qui peut automatiser toute l'installation.

    Je m'y connais moins en Debian, mais je suppose qu'il existe un équivalent pour la famille de distributions Debian (ou toute autre distro). Si vous pouvez éclairer ma lanterne dans les commentaires… ;-)

    Il m'a fallu plusieurs essais avant d'arriver à réussir ma première installation Kickstart. J'aurais eu le temps de faire l'équivalent de peut-être 15 installations manuelles en série… Mais bon l'essentiel c'est que maintenant ce soit automatisé, j'ai trouvé une méthode qui marche bien pour CentOS.

    Comme tout outil, l'effort initial d'apprentissage est plus important, mais c'est bénéfique à plus long terme.

    Les pros choisiront de créer une serveur PXE et de faire démarrer les machines à installer par le réseau. Pour ma part je suis un amateur (et je n'ai pas beaucoup de machines à installer), donc je mets le fichier kickstart sur une clé USB dans une partition nommée OEMDRV, je branche cette clé USB ainsi que le live USB/DVD de CentOS, je démarre la machine et c'est parti, je peux aller boire un café.

    Ansible

    Une fois que l'OS est installé, il peut y avoir plein de tâches d'administration système à faire en plus : configurer un serveur web, serveur git, base de données etc etc. Ça demande d'installer des paquets en plus, éditer certains fichiers de config, activer certains services, …

    Ce que je faisais avant d'apprendre Ansible était de décrire dans un fichier de log toutes les étapes que j'ai fait, en écrivant pour certaines tâches un script shell. Si je devais réinstaller mon serveur de cette façon-là, ça me prendrait certainement une journée complète…

    Avec Ansible – une fois qu'on a écrit le code nécessaire – tout est automatisé ! Ansible se connecte en ssh sur la ou les machines distantes (on peut exécuter Ansible en local aussi) et exécute les tâches demandées. Il n'y a même pas besoin d'installer Ansible sur les ordinateurs distants, c'est une architecture agentless, en mode push. C'est comme si on se connectait manuellement en ssh sur une machine et qu'on exécutait certaines commandes, sauf que c'est Ansible qui le fait à notre place.

    On écrit ce qu'on appelle un playbook, dans des fichiers YAML. Un playbook est composé de plays, qui est lui-même composé de tâches. Une tâche est un appel à un module Ansible. Il faut aussi un inventaire d'hôtes. Un play définit sur quel(s) hôtes exécuter les tâches.

    Il y a plein de modules. Il y a par exemple le module package pour s'assurer que certains paquets soient installés ou désinstallés. Le module service pour dire si un service doit être démarré et/ou activé au démarrage, ou pour redémarrer un service après avoir édité un fichier de config. Le module lineinfile pour s'assurer qu'une ligne est bien présente dans un certain fichier. Et bien sûr un module shell pour exécuter une commande shell s'il n'y a pas d'autre module plus approprié.

    Et ce qui est génial, c'est qu'on peut écrire du code réutilisable, sous forme de rôles. Si on doit faire une nouvelle installation similaire mais avec quelques différences, il suffit d'écrire un nouveau playbook; si on a bien fait son travail il y a des rôles existants qu'on peut réutiliser tels quels.

    Conclusion

    Je n'ai pas encore terminé de décrire mon serveur entièrement avec Ansible, mais une fois que ce sera fait, là où il fallait peut-être une journée complète pour tout réinstaller, avec Kickstart et Ansible ce sera fait en certainement moins d'une heure (incluant peut-être entre 5 et 10 min d'intervention humaine).

    Il y a plusieurs années je me demandais aussi comment gérer une salle informatique (par exemple une trentaine d'ordinateurs pour des étudiants). Maintenant je sais qu'avec un serveur PXE, Kickstart et Ansible, on sait gérer facilement un tel parc informatique. Faire les mises à jour sur toutes les machines, installer certains programmes, etc.

    Bref, je ne me vois plus administrer des ordinateurs sans ce genre d'outil.

    Petit bonus pour la fin : Vagrant est un outil pratique pour apprendre Ansible : au lieu de tester Ansible sur une machine distante on teste sur une machine virtuelle.

    Lire les commentaires

  • La délation: nouvelle méthode de la Business Software Alliance (Journaux LinuxFR)

    Bonjour nal,

    Aujourd'hui, la Business Software Alliance (BSA) remet le bon vieux principe de la délation au goût du jour en lançant une campagne d'affichage à Marseille, incitant à vilipender, sur simple intuition ou preuve réelle, toute entreprise qui ne se serait pas correctement acquittée du coût de licence des logiciels qu'elle utilise.

    http://www.01net.com/editorial/545056/a-marseille-des-affiches-incitent-a-denoncer-le-piratage-logiciel/

    Pour celà, il existe un joli site Web (ou Internet, comme vous voulez) http://www.soft-legal.com/ aisni qu'un numéro en 0825.

    Il semble que l'affichage ne soit fait qu'à Marseille pour l'instant (pourquoi cette ville plus qu'une autre d'ailleurs ?), mais d'autres grandes villes pourraient suivre si c'est un succès.

    Alors, certes, pirater c'est mal, car si on choisi un logiciel propriétaire pour travailler, c'est que l'on accepte ses conditions d'utilisation. Mais la méthode de la dénonciation me semble disproportionnée, car si la campagne prend bien, je vois d'ici peu de temps les uns et les autres accuser leurs concurrents juste pour les ennuyer, avec une chance pour la BSA de tomber en effet sur un Photoshop CS craqué ayant servi deux fois dans l'année à (mal) détourer une image pour le site de boîte, et autre dérives que je n'imagine pas encore.

    Quels habitants de Marseille se dévouent pour contre-afficher en faveur des Logiciel libres, bien moins dangereux ?

    http://www.framasoft.net/IMG/pdf/bsa-parodie.pdf
    http://media.april.org/docs/affiche_faites_passer/faites_passer_A3coul_600.jpg

  • Mes activités open-sources / libres récentes (Journaux LinuxFR)

    Sommaire

    Cher journal,

    Je vais essayer de faire un petit retour sur mes activités libres ces derniers mois, afin de faire parler un peu des projets qui m'intéressent et essayer de motiver d'autres personnes à faire de même.

    Actuellement, je travaille sur du code Transact SQL dans un environnement Windows. Cet environnement me motive à contribuer au projet ExchangeCalendar et l'expérience SQL me permet de proposer sereinement des correctifs sur des projets open-source.

    ExchangeCalendar

    ExchangeCalendar est une extension pour Thunderbird qui permet d'ajouter des interfaces avec les serveurs Exchange de Microsoft. Cette extension modifie beaucoup de composants de Thunderbird pour proposer la synchronisation des calendriers Exchange, la lecture des carnets d'adresse, la gestion des invitations de rendez-vous/réunions reçues par email et quelques spécificités à Exchange.

    C'est un projet qui contient énormément de code (en XUL, JavaScript, XML, CSS…) qui a failli partir dans les limbes des logiciels non-maintenus et qui ne fonctionnent plus suite aux mises à jour d'autres logiciels.

    En 2016, j'avais touché un peu au projet pour pouvoir bien recevoir tous mes contacts dans le carnet d'adresse (il y avait un petit bug sur la synchronisation des contacts). Début 2017, Thunderbird 52 est apparu et le logiciel est resté inutilisable pendant quelque temps, car le développeur d'alors ne répondait plus sur Github.

    Comme j'ai besoin de cette extension pour m'éviter d'utiliser Outlook et que, quelques personnes m'ont contactée, j'ai essayé de contribuer à mon tour au projet. Seulement, je savais très bien que je ne pourrai pas tenir le projet seul et que mon temps serai limité. Heureusement, au même moment, advancingu est apparu sur Github et a proposé de créer un fork communautaire de l'extension.

    Ce fût très intéressant de travailler sur le projet (même si Exchange ne m'intéresse pas plus que ça), car j'ai pu découvrir de manière concrète JavaScript et XUL (une technologie de Netscape/Mozilla qui permet de développer rapidement des applications). J'ai aussi pu découvrir comment utiliser javascript-beautifier et tidy pour donner un style cohérent à tout ce code (au début, je perdais beaucoup de temps à comprendre la structure, car le style était très mélangé et peu cohérent).

    Nous avons donc profité de nettoyer le code avec ces outils automatiques, nous avons restructuré l'arbre des sources et nous avons décidé d'utiliser des outils un peu plus commun pour créer les release et synchroniser les fichiers de traductions. Grâce à ces points j'ai appris un peu comment fonctionnent les Makefile et Transifex. Transifex n'est pas un logiciel libre (à l'inverse de son concurrent Weblate), mais il soutient les communautés libres en hébergeant les projets open-source gratuitement et ça été le choix retenu par la communauté. C'est le pendant de Github en somme, mais pour les communautés de traduction.

    Malheureusement, le code d'ExchangeCalendar fait trop de chose à mon goût (comme gérer son propre cache de mots de passe) et il y a trop de configurations à tester (beaucoup de versions d'Exchange existent et beaucoup de configurations peuvent être différent, entre autre pour l'authentification). Il n'y a donc aucune garantie que le logiciel fonctionne pour vous…

    Le challenge de 2018 pour ce projet, sera de mettre à jour tout le code pour pouvoir tourner sur Thunderbird 60: beaucoup de code sera déprécié depuis la version 52.0. J'espérais ne plus avoir besoin de faire de mises à jour massives, comme nous l'avions fait pour le style de code et la hiérarchie des sources, mais ce sera nécessaire, car des structures JavaScript comme for each in seront complètement retirées du moteur de Thunderbird.

    acme-dns-tiny

    Depuis 2016, j'utilise sur mon serveur mon script Python acme-dns-tiny pour recevoir mes certificats TLS de Let's Encrypt. Ce projet est un fork du célèbre client ACME acme-tiny, j'en avais parlé ici même lors de la sortie de la version 1.0. En résumé, le but est de répondre aux challenges d'un serveur ACME via des ressources enregistrées sur un serveur DNS au lieu de fichiers posés sur un serveur Web. L'intérêt des ressources DNS est qu'il n'y a pas d'impacts sur vos services: les modifications DNS sont faites de manière transparente et sans impacts, grâce à la mise à jour automatique des ressources via des clés TSIG.

    En 2017, j'ai suivi les nombreux brouillons de la RFC liée à la technologie ACME que Let's Encrypt développe de manière communautaire (ils en sont à la version 9 !). Je n'ai pas développé tout de suite de nouvelle version de mon client, car il n'y avait aucun serveur ACME avec lequel je pouvais tester mes développements.

    Début 2018, Let's Encrypt a annoncé la disponibilité d'un serveur de test pour leur API v2 (qui implémente donc la version 9 du brouillon) et j'ai donc pu préparer la version 2.0 de acme-dns-inty, qui n'attend plus que l'installation sur mon serveur et les nouveaux services de Let's Encrypt pour être officiellement publié.

    Pour ceux qui ont la chance de pouvoir gérer leurs ressources DNS via des clés TSIG, vous serez intéressés de savoir qu'avec cette nouvelle version et avec les challenges DNS, Let's Encrypt autorisera la création de certificat TLS wildcard.

    xmpp-pane

    xmpp-pane est un projet personnel en plein développement qui fait suite à mes intérêts à propos de XMPP (via Movim, salut-à-toi et ejabberd), de Firefox (via EcmaScript, les WebExtensions et leur panneau latéral, et les WebSocket). L'idée de ce projet, qui n'en est vraiment à ses débuts et qui n'est qu'une expérimentation, est de me fournir un client XMPP qui sera capable de lire les articles du réseau XMPP diffusés via PubSub. Je ne veux pas en faire un client de chat, je voudrais que ce soit juste un lecteur de flux qui serait à ma disposition dans mon navigateur via le panneau latéral.

    Le nom du projet n'est pas définitif, mais je manque d'inspiration. La peinture est très fraîche, mais je suis déjà fier de pouvoir me connecter à mon serveur et de lui demander des informations sur les services dont il dispose (via la XEP Discover).

    XMPP via WebSocket est vraiment très facile à manipuler, entre autre parce que XMPP via Websocket demande d'envoyer des messages XML complets et aussi grâce aux outils de Firefox qui permettent de manipuler très facilement les fichiers XML via l'API DOM.

    J'espère trouver un nom en 2018 et fournir une première version publique. Il me faudra trouver encore un moyen de traduire les pages HTML de l'extension Web et commencer à implémenter la partie client PubSub.

    LinuxFR

    L'année dernière, j'ai tenté un peu l'aventure Ruby on Rails, grâce au hack de LinuxFR pour pouvoir afficher des résumés des pages Wiki dans la page d'accueil, au lieu de l'article complet. J'ai aussi réussi à proposer un correctif pour rétablir le fonctionnement des norloges dans la tribune de rédaction (tribune qui utilise un nouveau design un peu plus chaleureux). Merci à l'équipe de LinuxFR qui est réactive et qui a intégré mes modifications. J'espère contribuer encore un peu cette année !

    Comme un journal récent le disait, on ne contribue pas qu'avec du code et j'ai pu donner un peu de mon temps pour collaborer aux dépêches à propos des différentes versions de Firefox (c'est très intéressant de traduire les release notes; ça permet de découvrir de nouveaux concepts) et les traductions des articles de Lin Clark.

    Autres projets

    En attendant que xmpp-pane progresse, j'utilise le lecteur de flux RSS FreshRSS sur mon serveur. L'année dernière j'ai pu leur proposer un correctif SQL pour un problème qui survenait régulièrement avec les bases de donnée Postgresql.

    Pour Debian, j'ai pu ouvrir un bug pour ejabberd dans Debian Stretch qui n'arrivait pas à utiliser correctement les clés ECDSA pour les certificats TLS. Le correctif que j'ai proposé est une compilation des différents correctifs du projet ejabberd lui-même qui n'avaient pas étés intégrés dans les paquets Debian.

    En 2017, j'avais également fait ma première WebExtension pour Firefox, avoid-google-search-redirects, mais le projet est quasiment mort-né: il ne fonctionne pas avec les APIs de Firefox Quantum. Le but était de désactiver le code de Google Search qui remplace les liens des résultats des recherches sur Google par des redirections par Google. Ce qui me gênait avec ce comportement, c'est que, non seulement, je vois en direct le pistage de Google, mais en plus l'historique de mon navigateur ne contient quasiment que ces liens de redirections plutôt que le lien final des sites.

    Voilà, c'est tout pour mon retour sur 2017, début 2018. Pour la suite, j'espère pouvoir continuer à partager un peu de mon temps avec la communauté, découvrir encore d'autres technologies et vous faire des retours sur des projets open-source/libre, si ça vous intéresse.

    Lire les commentaires

  • Logiciel de suivi des activités WID, What I did? (Dépêches LinuxFR)

    WID est un logiciel de suivi des activités. Il travaille d'une façon différente des outils traditionnels, en collectant des événements provenants de différents agents (android, extension chrome, GitLab, GitHub) auxquels vous allez associer des étiquettes. Ces événements/activités sont représentés sur une frise chronologique. Vous pouvez également créer des activités manuellement.

    Avec les données ainsi collectées vous allez pouvoir éditer vos propres rapports pour effectuer le suivi des activités sportives, professionnelles ou autre.

    L'idée part d'un constat simple : comment puis-je, en tant que développeur, suivre mes projets, et en tant que sportif, suivre mes activités,… ? Il existe déjà des services pour chaque domaine, mais ils sont généralement orientés sur un type activité et ne permettent pas de croiser les informations. WID permet de capter l'ensemble des activités de votre journée et de les synthétiser grâce au système d'étiquettes.

    Une version bêta est disponible en démonstration sur le site web, elle est régulièrement mise à jour. Sinon vous pouvez installer votre propre instance.

    Toutes aides ou commentaires sont les bienvenus. De notre coté nous avons prévu d'améliorer le design de l'application, d'améliorer la documentation, de créer un agent pour LiWux/Windows et de gérer l'ouverture multiple de WID sur différents appareils.

    Lire les commentaires