PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Nicolas Lœuillet : Une collaboration entre ownCloud et poche

mercredi 22 janvier 2014 à 13:37

Hier, une petite surprise est arrivée sur le projet poche hébergé sur GitHub : Jan-Christoph Borchardt, du projet ownCloud, créait un nouveau ticket, Possibility of collaboration between Poche and ownCloud (#408).

Il nous propose de travailler ensemble pour que ownCloud ait une application de read-it-later. Plutôt que de devoir la développer de zéro, autant ne pas réinventer la roue et utiliser ce qui se fait déjà en open source.

Avec Vincent Jousse, nous travaillons depuis la fin 2013 sur la v2. C'est donc le bon moment pour réfléchir à cette collaboration.

C'est bien entendu une proposition qui m'enchante. Travailler main dans la main avec ownCloud, ça serait cool !

Comment ça se concrétiserait ?

Nous créons poche v2 avec son API, etc. et ownCloud crée une application qui vient se connecter sur notre API. Nous ne mettons pas les mains dans le code d'ownCloud, et ça c'est pas mal. Nous ne sommes pas dépendants non plus d'ownCloud, car ils utiliseront notre API.
Tout est donc possible pour envisager d'autres collaborations (coucou MyCozyCloud :) ) par la suite.

Techniquement, après une discussion sur IRC avec Vincent (##poche sur freenode), on aurait donc :

Si le sujet vous intéresse, on peut en parler sur le Google Group (oui je sais, Google ...) ouvert pour les développeurs : https://groups.google.com/forum/#!forum/poche-dev.

La priorité aujourd'hui est donc de bien faire avancer la partie serveur. Une fois qu'on aura quelque chose de stable (authentification, récupération d'articles, etc.), on pourra commencer à avancer sur la partie client.

Niveau délai, j'aimerais bien que l'API soit opérationnelle pour le premier semestre 2014. Il ne reste déjà plus que 5 mois. Au boulot.
Pour voir où on en est, vous pouvez aller voir le dépôt GitHub : https://github.com/inthepoche/poche/tree/v2-silex. Pour rappel, on a mis en place un site de démo : http://v2.inthepoche.com/ (site qui peut à tout moment être complètement cassé, selon nos différents essais).

J'y retourne, on a du pain dans la poche !

Gravatar de Nicolas Lœuillet
Original post of Nicolas Lœuillet.Votez pour ce billet sur Planet Libre.

SckyzO : Installer le Kernel 3.13.0

mercredi 22 janvier 2014 à 12:24

scripting

La sortie de la version stable 3.13 du noyau Linux vient d’être annoncée par Linus Torvalds. Le nouveau noyau est, comme d’habitude, téléchargeable sur les serveurs du site kernel.org. Le détail des évolutions, nouveautés et prévisions est lisible sur le site de Linuxfr

Listes des nouveautés du Kernel 3.13.0

Les nouveautés

Arch

CPU

Ces dernières années les supercalculateurs ont dépassé le nombre de 4 000 cœurs de calcul, le nombre de processeurs maximum se voit donc augmenté de 4 096 à 8 192.

La présentation de la topologie matérielle au démarrage du noyau a également subi un petit lifting. Avant, le système nous présentait les informations sous cette forme :

smpboot: Booting Node   0, Processors  #1 #2 #3 OK
 smpboot: Booting Node   1, Processors  #4 #5 #6 #7 OK
 smpboot: Booting Node   2, Processors  #8 #9 #10 #11 OK
 smpboot: Booting Node   3, Processors  #12 #13 #14 #15 OK
 Brought up 16 CPUs

Dès cette version, ces mêmes informations seront affichées de cette manière :

x86: Booting SMP configuration:
 .... node  #0, CPUs:        #1  #2  #3
 .... node  #1, CPUs:    #4  #5  #6  #7
 .... node  #2, CPUs:    #8  #9 #10 #11
 .... node  #3, CPUs:   #12 #13 #14 #15
 x86: Booted up 4 nodes, 16 CPUs"

Logging / Debug

Perf

Dans cette version, le système de compilation de l’outil perf se voit amélioré. Désormais, la phase de compilation nécessite beaucoup moins d’étapes de la part de l’utilisateur.

cd tools/perf
make install

De plus, celle‐ci s’exécute beaucoup plus rapidement car le système de compilation détecte le nombre de cœurs à la volée et lance une compilation en parallèle en conséquence.

Pour mémoire, perf est un outil de profilage dans Linux qui permet de superviser facilement les compteurs de performance. Les compteurs de performance sont des registres spéciaux dans le processeur qui permettent de compter les événements matériels qui ont lieu lorsque vous exécutez du code : le nombre de défauts de cache, le nombre d’instructions exécutées, les prédictions de branchements correctes ou incorrectes, etc.

CPER

La prise en charge de CPER (UEFI Common Platform Error Record) ou également appelé enhanced MCA logging, disponible dans les derniers processeurs Xeon, a été ajoutée.

Ces dernières années, le nombre de transistors dans les micro‐processeurs et les chipsets mémoires a augmenté très rapidement. Le matériel est de plus en plus miniaturisé et contient de plus en plus de transistors. Ceci, avec la possibilité d’être touché par un rayon cosmique, augmente donc les risques de corruption de données. De plus, la défaillance matérielle reste toujours possible. Les chipsets modernes peuvent corriger certaines de ces erreurs par eux‐mêmes (sommes de contrôle ECC), mais il est parfois nécessaire que le système d’exploitation soit notifié de ce genre de problème car le matériel ne peut pas le corriger lui‐même.

C’est pour cette raison que les processeurs modernes mettent à disposition un mécanisme appelé MCA (Machine Check Architecture) qui permet, entre autres, au processeur de notifier le noyau des erreurs matérielles telles que les erreurs ECC, erreurs de parités, erreurs de caches, etc. Ce mécanisme est à base de registres spéciaux, dit MSR (Machine Specific Registers), afin de stocker les informations sur les erreurs rencontrées et de permettre au système de les traiter. Malheureusement les MSR sont extrêmement dépendants de l’architecture, sont limités en taille et sont parfois très difficiles à interpréter.

CPER est une technologie d’enregistrement d’erreurs MCA gérée par le micrologiciel UEFI. C’est maintenant le micrologiciel qui va directement collecter les messages d’erreurs, les interpréter et les projeter en mémoire physique afin que le système d’exploitation puisse les analyser. Ceci va permettre, entre autres, de disposer d’un système de vérification d’architecture beaucoup plus portable, plus facile à maintenir et beaucoup plus riche en termes de rapports d’erreurs.

Pour plus d’information je vous invite à lire l’article Machine check handling on Linux et le white paper d’Intel sur le MCA avancé dans les processeurs Xeon.

Ktap

L'outil ktap a presque été intégré dans cette version. Une première fusion avait été faite avant d'être retirée, jugeant que la procédure de revue n'avait pas été respectée et que certaines rectifications devraient être faites avant que cela ne se produise. Son auteur a d'ailleurs dit qu'il était prêt à les faire. Peut-être une fusion dans la 3.14 ?

ktap est un outil de débogage et de traçage dynamique. Il s'agit d'une machine virtuelle Lua embarquée dans le noyau linux qui vient s'interfacer avec les outils de traçage existant. L'un de ses avantages est sa capacité à pouvoir injecter un script Lua de débogage directement dans le noyau, sans avoir à compiler quoi que ce soit et de permettre de créer des routines de débogage sophistiquées simplement et rapidement.

Earlyprintk avec UEFI

La gestion du earlyprintk pour UEFI vient d'être ajoutée. Ceci permet de logger des messages par le biais de la fonction printk du noyau beaucoup plus tôt en déléguant l'affichage au framebuffer de UEFI durant le début de la phase de démarrage. Utiliser le framebuffer vesa n'étant pas possible sur les systèmes UEFI, il était donc nécessaire d'utiliser un lien série matériel pour pouvoir déboguer le noyau avant que le pilote graphique ne soit chargé. Les liens série matériels étant de plus en plus rares sur les ordinateurs récents, cette fonctionnalité est la bienvenue.

printk est une fonction dans le noyau, comme printf, mais qui permet de logger des messages avec différents niveaux de criticités dans la console du noyau. Console dont vous pouvez ensuite retrouver le contenu à l'aide de la commande "dmesg".

Lockdep

La prise en charge de seqcount/seqlocks a été ajoutée à lockdep.

Lockdep est le validateur de verrouillage du noyau, c'est un outil de débogage extrêmement utile. Il permet en ajoutant un petite surcouche de code autour de chaque structure de donnée bloquante (spinlock, sémaphore etc) de savoir lorsqu'un verrou est pris ou relâché ou collecte des informations critiques comme lorsqu'un processeur gère une interruption après avoir pris un verrou. Il permet également de détecter les cycles. Depuis son introduction en 2006 il a permis de supprimer énormément de bugs et de deadlock dans le système. La prise en charge dans cette version a d'ailleurs permis de corriger quelques bogues.

Ordonnanceurs / timers

Équilibrage NUMA automatique

Dans cette version, la gestion des politiques d'ordonnancement pour les architectures NUMA a été améliorée. Il est maintenant possible de placer un processus à côté de sa mémoire ou encore de demander au système de placer deux processus qui partagent une page mémoire dans un même nœud. Des appels systèmes sysctl ont été ajoutés afin de pouvoir activer/désactiver ces politiques d'ordonnancement, voir ce commit de documentation.

NUMA (Non Uniform Memory Access) est un système d'architecture sur les machines multi-cœurs contemporaines qui permet de regrouper les cœurs de calculs par nœud. Les différentes zones mémoires sont ensuite séparées et accédées par différents bus placés respectivement sur chacun des nœuds. Ainsi, dans les systèmes disposant de beaucoup de cœurs, cela évite d'avoir un goulet d'étranglement sur le bus mémoire et d'impacter les performances de temps d'accès mémoire. L'impact visible de cette technique est que chaque cœur a une zone mémoire qui lui est directement attachée et qui est la plus performante.
De ce fait en fonction de la zone mémoire à laquelle un processus accède, sa mémoire locale, ou la mémoire distante, ses performances en seront changées en conséquence. Il est donc important qu'un système d'exploitation tienne compte de cette topologie matérielle afin de placer un processus en cours d’exécution sur le bon nœud en fonction de la partie de la mémoire à laquelle il accède.

Pour plus de détails vous pouvez consulter cet article.

Power / ACPI

La nouveauté principale liée à la gestion d'énergie est l'ajout du framework de limitation de consommation. Celui-ci a pour objectif de limiter et de pouvoir répartir la consommation énergétique entre de multiples matériels.

Pour l'instant, cette gestion semble limitée à Intel et sa technologie RAPL (Running Average Power Limit). À la base de RAPL se trouve un système de calcul de consommation énergétique basé sur un modèle du processeur et une instrumentation matérielle pour connaître quels blocs sont actifs à quel moment. À partir de cette information, il est ensuite possible de réduire la fréquence moyenne reçue par le processeur en ne laissant passer, par exemple, que 80% des tics d'horloge. Cette réduction de fréquence permet de réduire la consommation moyenne du processeur et peut être modulée de sorte à ce que le processeur consomme exactement ce que l'OS lui a demandé de consommer. Cette technique est très efficace pour les petits ajustements et pour sa réactivité face aux pics de charge mais est sous-optimale car elle nécessite une tension d'alimentation supérieure à ce qui était vraiment nécessaire pour atteindre le même niveau de performance. La tension d'alimentation est le principal facteur derrière la fuite de courant des transistors (consommation statique). Cette consommation statique participe à hauteur d'environ 50% de la consommation globale d'un processeur moderne. Une fois RAPL combiné avec le changement de niveau de performance reprogrammant le contrôleur de tension et les générateurs d'horloges, RAPL permet de limiter très rapidement la consommation pour respecter une consigne tout en gardant une efficience proche de l'optimal.
Intel utilise RAPL pour contrôler chaque cœur du processeur ainsi que la mémoire.

NVIDIA dispose d'un système équivalent depuis les Geforce 8 mais ne s'en est jamais servi. Des indices laissent à penser qu'il pourrait cependant s'en servir pour les Tegra K1. Nouveau ne peut pas vraiment s'en servir car il faudrait calculer les paramètres du modèle matériel de la carte. C'est théoriquement possible mais ça nécessite beaucoup de travail et du matériel spécialisé que l'équipe de Nouveau n'a pas. Nouveau devrait cependant pouvoir utiliser un système plus lent à réagir sur les cartes équipée d'une sonde matérielle de consommation énergétique lorsque le changement de fréquence dynamique sera géré. La gestion sera cependant réservée aux cartes milieu et haut de gamme Kepler.

Pour plus d'informations concernant ce framework, vous pouvez consulter cette présentation hébergée par la Linux Foundation.

Le reste du pull request ACPI est majoritairement composé de correction de bogues et d'améliorations liées à cpufreq, l'implémentation du DVFS (Dynamic Voltage/Frequency Scaling, changement de niveau de performance en fonction de la charge) pour les CPU.

Pilotes graphiques libres

Direct Rendering Manager (DRM)

Peu de nouveautés dans DRM pour cette nouvelle version. La principale est l'extension de l'interface pour autoriser les clients à activer/désactiver des capacités. Cette extension a directement été utilisée pour exposer la 3D Stéréo, quand les écrans la gèrent. Pour le reste, on trouve une gestion des fichiers sysfs plus résistante au chargement/déchargement des pilotes à chaud, une amélioration de la précision des timestamps des événements lié au scanout et beaucoup de correction de bogues.

Cette nouvelle version a été l'occasion de rappeler les règles pour l'apport de nouvelles fonctionnalités lorsque des modifications dans Linux, libdrm et mesa (responsable de l'accélération 3D libre) sont nécessaires. Ce rappel à l'ordre a été lancé par Dave Airlie, mainteneur DRM, après qu'un développeur Intel ait commité dans libdrm avant que son patch pour Linux n'ait été accepté. Ce commit a directement été annulé avec un court avertissement qui a été suivi par un courriel envoyé sur la liste de diffusion du projet mesa pour donner plus de détails. Une courte discussion a suivi, certaines personnes critiquant l'idée que libdrm n'ait pas de mainteneur alors que d'autres trouvent que la situation actuelle est parfaite tant qu'une règle simple est respectée. Cette règle est que la prise en charge de cette fonctionnalité doit en premier lieu être ajoutée dans une branche officielle du noyau (au moins drm-next) avant de pouvoir ajouter la gestion pour cette fonctionnalité dans libdrm, puis dans mesa. C'est ce second choix qui a été retenu.

Adreno (pilote msm)

Msm, le pilote écrit par Rob Clark pour les GPU ARM Adreno que l'on trouve dans tous les processeurs Snapdragon de Qualcomm, se voit doté d'une prise en charge pour les render nodes, prime et des KMS planes.

Prime est l'implémentation libre de la technologie Optimus qui permet aux pilotes graphiques de pouvoir collaborer de façon à pouvoir effectuer le rendu d'une image sur un GPU et l'afficher sur un autre.

Les KMS planes sont à la base du compositing matériel. Chaque "plane" est une image RVBA (ou équivalent) qui sera fondue avec les autres "plane" matériellement au lieu d'utiliser les shaders OpenGL. Cela permet d'augmenter les performances et/ou de diminuer la consommation énergétique.

Pour plus d'informations, vous pouvez regarder le pull request de Rob Clark.

AMD/ATI (pilote radeon)

Cette nouvelle version du pilote radeon pour les GPU AMD/ATI active enfin par défaut le son pour les écrans HDMI. Il ajoute aussi la gestion complète (modesetting, décodage vidéo, gestion d'énergie) pour la famille de carte Hawaii dont les premières cartes sont sorties en octobre 2013.

Coté gestion d'énergie, cette nouvelle version apporte la gestion de la mise en veille complète des GPU discrets qui ne sont pas utilisées dans une machine gérant le PowerXpress (équivalent d'AMD à la technologie Optimus d'NVIDIA). Elle apporte aussi la gestion du DPM (Dynamic Power Management) à plus de cartes et notamment aux familles Southern Island et Hawaii.

Niveau performance, cette nouvelle version apporte un énorme gain de 500 à 750% suivant les tâches sur les GPU de la famille Southern Island et Hawaii. La raison pour cette subite amélioration tient au fait que seul le premier moteur de shader était activé. Ce problème a été diagnostiqué et corrigé par le développeur AMD Marek Olšák. Cette nouvelle version du pilote est donc plutôt bénéfique pour les utilisateurs de cartes graphiques récentes AMD.

Armada (pilote armada)

Un nouveau pilote a fait son apparition dans DRM afin de gérer les GPU des SoCs Marvell Armada 510.

Ce pilote est extrêmement complet pour une première version puisqu'il gère deux écrans LCD, les KMS planes, le pageflipping pour les tampons graphiques dédiés à l'affichage et prime pour le partage de tampons graphiques entre clients et pilotes. Cependant, la fonctionnalité la plus importante est la gestion des tampons graphiques partagés par SHM car ils permettent à Armada et au pilote Open Source etna_viv (Vivante) de fournir une accélération graphique 3D libre.

D'après son développeur, bien que ce pilote soit à destination des Armada 510, la gestion de la série 610 devrait être facile à ajouter.

Intel (pilote i915)

Beaucoup de nouveautés chez Intel avec notamment l'introduction officielle de la gestion des processeurs Broadwell qui devraient être disponibles à la vente au 3ème trimestre 2014. Cette prise en charge est pour l'instant cachée derrière une option de compilation mais à moins que vous ne travailliez pour Intel, vous ne devriez pas en avoir besoin. Une prise en charge suffisante pour être utilisable arrivera dans Linux 3.14.

Une autre nouveauté est le début de la gestion du Display Serial Interface (DSI) de l'alliance Mobile Industry Processor Interface (MIPI). Ce nouveau type de communication a pour but de réduire le coût des systèmes mobiles embarquant des écrans. DSI est disponible sur le Raspberry Pi. Toujours coté affichage, une prise en charge basique des écrans 3D a été ajoutée. La prise en charge grand public devrait être disponible assez rapidement dans Wayland (ce qui permettra de voir les engrenages de eglgears tourner en véritable 3D !) et la gestion de la mise à jour atomique des sprites (pour le tatouage numérique) et de la plane principale. Pour finir, le noyau exporte maintenant via debugfs le CRC des images après toutes les étapes de rendu (curseur, planes, sprites, correction de couleurs et changement d'échelle). Cela va permettre d'automatiser des tests de rendu graphique. Un premier test sur les curseurs a déjà était écrit et a permis d'identifier et de résoudre plusieurs bugs.

Du coté de la gestion énergétique, Intel n'a pas chômé en retravaillant son code de gestion du power gating et en ajoutant notamment la gestion du SWSCI, un framework de gestion d'énergie pour les processeurs graphiques intégrés Intel. Cette gestion est nécessaire majoritairement pour Haswell dont le code de référence ACPI est très dépendant de SWSCI. Intel a également apporté la gestion du boost/deboost logiciel qui devrait améliorer les performances et réduire la consommation dans les cas où la charge est relativement faible mais subit des forts pics d'activité comme lors de la navigation sur le web.

Une partie des patchs nécessaires pour l'ajout du Per-Process Graphic Translation Table (PPGTT) a aussi été intégrée dans cette version de Linux. Cela permet à différents processus graphiques de ne pas partager le même espace d'adressage graphique ce qui devrait augmenter l'isolation entres les différentes applications. PPGTT sera disponible à terme sur les GPU Ivy Bridge, Haswell, et Broadwell. Pour plus d'informations, vous pouvez consulter la série de patch associée.

NVIDIA (pilote nouveau)

Dans cette nouvelle version du noyau, le pilote communautaire pour cartes graphiques NVIDIA n'a pas reçu beaucoup d'améliorations visibles si ce n'est l'ajout de la gestion du modesetting pour le chipset NV108/GK208. La gestion complète de la carte sera introduite dans la version 3.14 du noyau.

La prise en charge des interruptions MSI (Message Signaled Interrupts) a été activée par défaut afin de corriger des problèmes sur certaines nouvelles cartes pour lesquelles la méthode traditionnelle de gestion des interruptions n'était pas fiable. À l'inverse, avant cette version, plusieurs cartes ne géraient pas les interruptions MSI très bien ce qui rendait le démarrage impossible. NVIDIA a été contacté afin d'avoir des informations sur un potentiel errata matériel. Entre temps, Ben Skeggs a investigué le problème et a trouvé par rétro-ingénierie, une solution pour les cartes problématiques connues. NVIDIA a confirmé la solution et a permis d'améliorer la gestion pour d'autres cartes qui n'étaient pas connues pour avoir de problèmes. L'équipe de Nouveau a ensuite découvert que les cartes nvaa et nvac ne géraient pas bien les interruptions MSI, elles ont donc été désactivées. Depuis, il n'y a plus eu de rapport de bug sur ce sujet.

Du coté vidéo, le page-flipping a été retravaillé pour corriger des bogues qui duraient depuis plusieurs versions. Nouveau devrait donc moins souffrir du problème de tearing. La gestion de PMPEG a aussi été améliorée pour prendre en charge les NV40-NV44. Les NV10 ont également reçu la gestion des planes KMS permettant de faire de la composition (compositing) matériel.

Le gros du travail dans cette nouvelle version est lié à la gestion d'énergie, effectué par Ben Skeggs. Toute l'infrastructure a été repensée pour pouvoir prendre en charge le changement de fréquence dynamique, le clock gating et le power gating. Nouveau remplace maintenant le microcode du processeur de gestion d'énergie PDAEMON/PPWR ce qui veut dire que le pilote est maintenant responsable de la gestion du ventilateur sur Fermi. Ce microcode, écrit en assembleur Falcon/FµC, est un petit RTOS qui permettra de décharger le processeur principal pour l'acquisition et le suivi de la charge de la carte, de la régulation du ventilateur et de la consommation.

Outre le refactoring du code, Ben Skeggs a aussi corrigé beaucoup de bogues dans le changement de fréquence des moteurs d'exécution et de la sélection de la tension d'alimentation. Le changement de fréquence de la mémoire a également reçu beaucoup de commits bien que le résultat ne soit toujours pas utilisable et ne le sera probablement pas avant plusieurs versions du noyau pour la plupart des cartes.

Pour en finir avec la gestion d'énergie, la gestion complète du changement de fréquence manuel pour les nvaa/ac (ION) a ensuite été apportée par Roy Spliet. Ces chipsets sont intégrés et n'ont donc pas de mémoire vidéo. Ce sont actuellement les seuls chipsets pour lesquels le reclocking est officiellement pris en charge. Une prochaine version apportera le changement de fréquence dynamique mais aucun développeur ne travaille actuellement dessus pour les cartes n'intégrant pas PDAEMON/PPWR.

Poulsbo (pilote gma500)

Le pilote gma500 pour les processeurs graphiques basés sur les PowerVR SGX 535 (aussi connus sous le nom de Intel Poulsbo) a reçu les modifications nécessaires pour fermer un bug relatif à l'hibernation datant d'il y a plus d'un an.

Cette version apporte également la gestion d'SVDO aux Minnowboard (équivalentes aux Raspberry Pi, mais basées sur des processeurs Intel Atom et avec un connecteur SATA). SVDO (Serial Digital Video Out) est une technologie propriétaire d'Intel permettant d'ajouter des connexions VGA, DVI, SDTV, HDTV ou des tuners de télévisions à travers un bus PCI express à 16 voies.

Tegra (pilotes host1x et tegra)

Le pilote pour la version embarquée des GPU NVIDIA (Tegra), a été ré-architecturé pour être découpé en deux sous-parties, host1x et tegra.

Host1x est un contrôleur DMA qui permet d'envoyer des commandes en asynchrone à différents composants graphiques et multimedia et de les faire se synchroniser grâce à l'utilisation de fences. Pour plus d'information, vous pouvez lire la documentation d'NVIDIA à son sujet.

Tegra est le GPU qui effectue les calculs graphiques. Jusqu'à présent, la partie Tegra se trouvait avec host1x dans /drivers/gpu/host1x/. Elle a été déplacée dans /drivers/gpu/drm/tegra ce qui a permis de simplifier la procédure de démarrage de DRM.

La gestion de Tegra114 a ensuite été ajoutée dans les deux sous parties. Host1x a reçu les modifications nécessaires pour tenir compte d'un léger changement et de l'ajout d'un autre point de synchronisation. Tegra a lui aussi dû être légèrement modifié pour ajouter la gestion du contrôleur d'affichage et la prise en charge de l'HDMI.

Pour finir avec les nouveautés, la gestion de gr3d a finalement été fusionnée ce qui veut dire que toutes les pièces côté noyau sont présentes pour permettre l'accélération 3D dans l'espace utilisateur.

VMware (pilote vmwgfx)

Pour le GPU virtuel des machines virtuelles VMware, la prise en charge de prime a été ajoutée. Cette prise en charge n'est pas complète car elle ne permet pas le partage de tampons graphiques entre différents pilotes. C'est cependant suffisant pour permettre de gérer DRI3.

Réseau

nftables

nftables est maintenant utilisable directement avec le dernier noyau. Vous pouvez consulter son pull request.

Nftables est le successeur de iptables. Il permet de configurer le pare-feu de linux (netfilter). Rappelons qu'iptables et netfilter ont été développés en 2001 pour le noyau 2.4 et qu'iptables a peu évolué depuis. Iptables a beaucoup de limitations au niveau fonctionnel et au niveau du code : problème de la mise à jour des règles, de duplications de code qui entraînent des problèmes pour sa maintenance et pour les utilisateurs. Ainsi, pas mal de changements ont été entrepris pour nftables afin de résoudre cela tout en fournissant une compatibilité pour les utilisateurs d'iptables.

Son développement s'est fait en deux temps : le développement a commencé en 2008 jusqu'en 2009 par Patrick McHardy, le chef de projet de netfilter. Une version alpha du code a été présentée. Malheureusement, peu de monde a rejoint ce projet pour en finaliser le code. Le projet est alors resté en sommeil jusqu'en 2012 où son développement a repris grâce notamment à Pablo Neira Ayuso.

Pour plus de renseignements :

En bref

  • TCP Fast Open qui avait été ajouté dans Linux 3.7 est maintenant compilé par défaut ;
  • IPv6 : amélioration de l'IPsec et ajout de GSO/TSO ;
  • Mobile : ajout de l'implémentation de la couche pour la communication en champ proche (Near Field Communication, NFC) utile par exemple pour les terminaux de paiement ;
  • Haute disponibilité :
    • amélioration de l'agrégation de liens (bonding) concernant le mode tourniquet (round-robin) et concernant la possibilité de mettre en place les options mode et active_slave via l'interface standard Netlink ;
    • ajout de l'implémentation du protocole de la redondance transparente haute-disponibilité (High-availability Seamless Redundancy, HSR). HSR fournit de la redondance de failover instantanée pour les réseaux ethernet. Cela demande une topologie en anneau (chaque nœud ayant deux interfaces réseaux). Ce protocole est adapté pour les applications qui requièrent de la haute-disponibilité avec un temps de réaction très court.

Pour plus d'information :

Systèmes de fichiers

Une couche Multi File d'attente (Multi-Queue Block Layer) fait son apparition au sein du noyau. Celle-ci est destinée à améliorer les opérations d'entrées-sorties par unité de temps (IOPS) tout en réduisant la latence dans un système composé de multiples disques SSD et de plusieurs cœurs processeurs.

Le noyau devrait maintenant essayer de mieux répartir la charge pour chaque cœur processeur tout en autorisant plusieurs files d'attentes matérielles. On attend une augmentation des opérations d'entrées-sorties d'un facteur allant de 3,5 à 10, et une réduction de la latence d'un facteur 10 à 38.

Dans le même temps, il semblerait que certains systèmes de fichiers soient plus lents que dans la version 3.12 du noyau. La cause de cette régression reste, pour l'instant, inexpliquée.

Btrfs

Miao Xie a permis de nettoyer le code de Btrfs, tout en améliorant les performances du mécanisme de write-back.
Enfin, alors que Chris Mason (à l'origine de Btrfs lorsqu'il travaillait pour Oracle) quitte son actuel employeur, la société Fusion-io, pour aller travailler au sein de Facebook, Josef Bacik entre officiellement dans la liste des mainteneurs de Btrfs ; le travail de Chris Mason pour Btrfs ne changera quasiment pas.

F2FS

À côté des habituelles corrections de bogues, F2FS améliore son ramasse-miette et les procédures de son verrou global.

XFS & Ext4

Le code d'Ext4 est légèrement amélioré par quelques corrections de bogues tout en étant allégé. Quant à XFS, une partie de son code a été réusiné, et ses performances se sont améliorées.

Sécurité

Audit

Les processus disposant de la capacité CAP_AUDIT_CONTROL pourront remettre à zéro (en fait -1, la valeur signifiant indéfini) le loginuid. Une fois que les outils de création de conteneurs (systemd-nspawn, lxc, libvirt-lxc) auront été modifiés, cela permettra aux conteneurs de fonctionner correctement avec le système d'audit, ne nécessitant donc plus de le désactiver au démarrage. Commits : 1, 2.

Pour mieux comprendre ce changement, il faut revoir l'historique de loginuid. L'infrastructure d'audit permet, entre autres, de suivre les utilisateurs et les processus qu'ils lancent une fois qu'ils sont logués sur un système. Pour cela, l'UID utilisé lors du login est stocké (loginuid dans la structure task_struct) de façon indépendante de l'UID courant. Cela permet de suivre les utilisateurs même s'ils changent d'utilisateur ou passent en root avec sudo par exemple. Cette opération de stockage du loginuid doit être effectuée par le programme responsable du login d'un utilisateur sur un système. On utilise pour cela un module pam spécifique : pam_loginuid.so.

Au démarrage, les processus n'ont pas de loginuid défini (-1). Avant le noyau 3.3, il fallait disposer de la capacité CAP_AUDIT_CONTROL pour pouvoir changer le loginuid. Il était nécessaire d'autoriser ces changements même si un loginuid valide était déjà défini car sinon un administrateur relançant le démon sshd propagerait son loguinuid à tous les utilisateurs se loguant en ssh.

Mais ce n'est pas vraiment le comportement idéal, puisque l'on voudrait pouvoir définir ce loginuid uniquement lors du login et ne plus autoriser aucune modification. Le noyau 3.3 introduit l'option AUDIT_LOGINUID_IMMUTABLE qui autorise n'importe quel processus à définir initialement son loginuid sans avoir besoin de droits particuliers et empêche ensuite tout changement. Ceci est possible uniquement sur les systèmes utilisant systemd, car l'utilisateur ne lance ou relance plus lui même les services mais demande à systemd de le faire. Le démon sshd aura donc un loginuid non défini (hérité de systemd) et pourra le définir pour un utilisateur à la connexion. Si un administrateur lance un démon ssh à la main, le loginuid ne sera pas changé et l'on pourra donc tracer l'origine de ce démon.

Mais cette situation pose de nouveaux problèmes avec les conteneurs. En effet, cette fois les conteneurs sont lancés par un utilisateur, donc le loginuid est déjà défini, et les processus à l'intérieur du conteneur ne prenaient pas en compte cette situation. Les deux commits mentionnés ajoutent donc une interface qui contourne ce problème.

L'option AUDIT_LOGINUID_IMMUTABLE a aussi été retirée (commit), car jugée pas assez flexible. Une nouvelle option la remplace pour bloquer le changement de loginuid à partir de l'espace utilisateur.

IMA

Il est maintenant possible de signer les fichiers avec des algorithmes de hachage différents suivant l'importance accordée à l'intégrité du contenu par exemple. Pour ajouter cette fonctionnalité, il a été nécessaire, de modifier la gestion des templates IMA qui décrivent l'organisation des données dans l'attribut de sécurité IMA.

KEYS

Modification des espaces de nom utilisateur (user namespace) pour pouvoir avoir un trousseau de clés, stocké dans le noyau, distinct pour chaque espace de nom. Le trousseau de clés noyau fonctionne comme un cache et permet entre autres de stocker des clés de façon sûre et persistante jusqu'à leur expiration, même si l'utilisateur se déconnecte. Ce cache est particulièrement utile pour les tâches cron et kerberos.

Ces clés peuvent maintenant être de taille plus importante (potentiellement illimitée) et être swappées sur le disque dur.

Random

Suite à une analyse de la fonction chargée du mixage des sources d'entropie, une modification a été effectuée pour l'améliorer légèrement. Pour rappel, le noyau n'utilise pas directement les sources d'entropie dont il dispose pour générer des nombres aléatoires. Il mélange diverses sources pour s'assurer qu'une mauvaise source ne vienne pas réduire l'entropie finale obtenue. Cet article sur le blog de Cloudflare détaille le processus dans le noyau.

Le fonctionnement de /dev/random a été en partie revu : l'entropie est moins gaspillée, mieux estimée et les performances sont améliorées. Les architectures non x86 bénéficient de l'utilisation d'un registre qui ne peut pas être utilisé pour la mesure précise du temps mais qui peut apporter un peu d'entropie.

Le noyau affiche maintenant l'état d'initialisation de /dev/urandom et prévient s'il est utilisé avant qu'il soit initialisé correctement. Ceci est fait en prévision d'un possible futur changement de comportement : le blocage de /dev/urandom si l'initialisation n'est pas terminée.

D'autre modifications ont été effectuées pour /dev/urandom, elles sont détaillées dans ce mail récapitulatif. Des améliorations diverses et l'ajout du support pour de nouveaux générateurs de nombres aléatoires ont également été inclus (commit).

SELinux

Pour les systèmes de fichiers ne gérant pas les attributs étendus, un contexte SELinux est généré en fonction de la politique ou des options passées lors du montage. Une petite modification autorise maintenant le changement du contexte de sécurité d'un fichier lorsque celui-ci est dans un rootfs (ramfs).

La fonction chargée de la vérification de la validité de la partie multi-niveau d'un label de sécurité (MLS) a été fortement optimisée.

Ajout d'une capacité pour la politique indiquant que les opérations réseaux devront toujours être vérifiées par SELinux, même si les règles adéquates de filtrage et marquage des paquets ne sont pas chargées dans netfilter. Cela permet de protéger le système si les règles de filtrage ne peuvent pas être chargées à cause d'une erreur ou si elles sont vidées par un programme malicieux. La partie correspondante en userspace a déjà été mergée l'année dernière.

SMACK

Un nouveau mode d'accès a été introduit pour différencier la pose d'un verrou sur un fichier d'une opération d'écriture. En effet, la pose d'un verrou en lecture sur un fichier ne nécessite pas d'avoir les droits d'écriture sur celui-ci, juste les droits de lecture. Ainsi, deux programmes pourraient potentiellement discuter par l'intermédiaire d'un fichier dont ils ont tous les deux seulement accès en lecture. C'est un canal d'information caché, et typiquement le genre de situation que l'on souhaite éliminer dans le cadre d'un contrôle d'accès obligatoire. SMACK nécessitait donc d'avoir les droits en écriture (avec les labels SMACK, pas juste le DAC) pour pouvoir poser des verrous en lecture, ce qui cassait le comportement de nombreux programmes puisque c'était une situation inattendue (et la solution n'était pas acceptable d'un point de vue sécurité). Pour résoudre ce problème, le mode d'accès lock permet de poser des verrous en lecture, et il faut avoir l'accès write pour les poser aussi en écriture. Cela évite donc de donner trop de droits à un processus sur certains fichiers.

Le crochet (hook LSM) lié à ptrace a été précédemment séparé pour permettre un contrôle plus fin des opérations effectuées. SMACK n'en profitait pas totalement, c'est maintenant corrigé.

x86

Le noyau et l'espace utilisateur échangent couramment des données. Pour des raisons d'intégrité du noyau, il est important de vérifier que seules les données voulues par le noyau soient copiées en espace noyau. Pour des raisons de confidentialité, il est aussi important de vérifier que seules les données dont l'espace utilisateur a besoin soient rendues accessible à celui-ci. Pour ces raisons, le noyau a des tests pour vérifier les bornes des opérations de copie depuis/vers l'espace utilisateur. Jusqu'à présent, ces opérations étaient vérifiées statiquement, à la compilation. Ces tests étaient cependant pleins de faux positifs dans le cas où la taille des données copiées était dynamique, surtout lorsque l'option DEBUG_STRICT_USER_COPY_CHECKS était activée. Pour résoudre ce problème, les tests pour les tailles dynamiques ont été déportés à l'exécution.

Virtualisation

Hyper-V

La partie du pilote Hyper-V (l'hyperviseur de Windows) voit l'ajout d'un pilote de clavier.

KVM

Pour KVM, il y a un peu plus de changements, il est désormais possible d'avoir la virtualisation qui utilise l'émulation et l'hyperviseur en même temps sur le même noyau. Pour les processeurs Intel, la virtualisation imbriquée s'améliore et ARM gère les transparent huge page, une amélioration de l'overcommit et la prise en charge des invités gros-boutistes.

Il y a aussi une nouvelle interface pour connecter KVM à l'aide des VFIO, ce qui permet aux utilisateurs des NoSnoop PCI transactions d'avoir un invité qui peut exécuter les instructions WBINVD, utiles notamment pour les pilotes nVidia sur Windows.

Xen

Dans cette version, Xen a reçu beaucoup de corrections de bogues et deux fonctionnalités majeures. La première est un système de traçabilité qui a été ajouté au pilote Xen SWIOTLB. La seconde est la prise en charge de la traduction d'adresse machine physique -> machine virtuelle et inversement sur les processeurs ARM 32 et 64 bits. Cela permet aux machines virtuelles de programmer des transferts DMA depuis des périphériques réels sur les systèmes sans IOMMU.

Pour plus d'informations, vous pouvez consulter le pull request de Xen.

 

Source : http://linuxfr.org/news/sortie-de-linux-3-13

Attention

Attention, cette manipulation comporte des risques. Si vous n'êtes pas un utilisateur un brin bidouilleur ou un utilisateur avancé ne le faites pas (ou faites une sauvegarde !). Sachez tout de même qu'il est facile de revenir en arrière en redémarrant votre ordinateur et dans Grub, choisissez de démarrer sur l'ancien Kernel

 

Pour installer le kernel, comme d'habitude je vous ai préparé un petit script qui vous fera tout ;-)

Installer le kernel 3.13.0

Taper dans un terminal :

cd /tmp
wget https://dl.dropboxusercontent.com/u/1179419/kernel-3.13.0.sh -O kernel-3.13.0.sh
sh kernel-3.13.0.sh
sudo reboot

Désinstaller le kernel 3.13.0

Taper la commande :

sudo apt-get purge linux-image-3.13.0*

Merci à Emmanuel Negro pour le partage

The post Installer le Kernel 3.13.0 appeared first on elementary OS Fr.

Gravatar de SckyzO
Original post of SckyzO.Votez pour ce billet sur Planet Libre.

Articles similaires

Xavier Chotard : Migration du serveur sous FreeBSD 9.2

mercredi 22 janvier 2014 à 08:00

EDIT : Oui je sais, FreeBSD 10 vient de sortir, je suis d'ailleurs l'un des auteurs de cette dépêche sur Linuxfr. Mais quand j'ai commencé à migrer mon serveur, c'était encore la 9.2 qui était stable. Et avec les jails et les ports je préfère éviter de tourner sur les versions non stables...

Puisque mon serveur perso n'est pas critique (je peux me permettre une coupure d'une journée) j'en profite changer l'OS assez souvent, en quête de la perle rare ou tout simplement pour apprendre de nouvelles choses. Actuellement mon serveur ne sert que pour Jabber et la messagerie, mais à terme j'aimerai récupérer l'hébergement de mon blog (web). Or je souhaite séparer la partie web et messagerie pour la sécurité. Pour cela plusieurs solutions :

Schéma cible

Compilation vs packages binaires

Bien que mon serveur soit de faible puissance, j'ai choisi de compiler moi-même les ports. Pourquoi ? Simplement parce que les packages binaires sont trop basiques et n'incluent pas les options sont j'ai besoin. Exemple : pour le serveur web, j'avais besoin du support fpm pour php. Or le seul moyen pour avoir cela c'est de compiler soi-même le paquet php55 et activer l'option fpm. Avec le package binaire officiel, pas de fpm.

Hôte : TARDIS

L'hôte est FreeBSD 9.2 i386 installé en UFS, avec les rôles d'hôte pour les jails et serveur DNS (named). Pour l'instant uniquement du cache, on verra ultérieurement s'il y a besoin de déclarer des zones. Named est installé dans le système de base, donc aucune manipulation particulière à faire à part l'activer dans le rc.conf et commenter la petite ligne dans /var/named/etc/namedb/named.conf qui spécifie qu'il ne faut écouter qu'en 127.0.0.1. Pour gérer mes jails, j'utilise ezjail, un outil de fainéant qui permet non seulement de tout gérer très facilement, mais en plus de générer un template avec des montages dynamiques.

root@TARDIS:~ # jls
   JID  IP Address      Hostname                      Path
     1  192.168.0.4     xmpp                          /usr/jails/xmpp
     2  192.168.0.3     www                           /usr/jails/www
     3  192.168.0.2     mail                          /usr/jails/mail

Pour que toutes mes nouvelles jail utilisent le bon serveur DNS, il faut éditer le fichier /usr/jails/newjail/etc/resolv.conf et ajouter l'IP qui va bien.

Jail : mail

La jail mail est destinée à recevoir, stocker, envoyer des mails. J'utilise un backend sqlite que j'ai mis en place en suivant ce tutoriel très complet (légère adaptation à faire pour utiliser sqlite à la place de mysql). Il faut commencer par installer dovecot2 en activant le support sqlite. Puis on installe Postfix en activant aussi le support sqlite mais également l'authentification SASL via dovecot. Je voulais que mon serveur de messagerie puisse gérer plusieurs domaines, d'où mon choix d'une structure plus complexe avec un backend sql.

Lorsqu'un mail est reçu, il est traité par Postfix qui vérifie dans la base sqlite si le domaine existe bien. Si oui il le transmet alors à Dovecot qui va se charger de le stocker à l'emplacement qui va bien. Lorsqu'un utilisateur veut envoyer un mail, il le soumet à Postfix (submission 587) qui demande à Dovecot si l'utilisateur est authentifié. Tous les échanges sont sécurisés en STARTTLS.

Jail : www

La jail www est destinée à faire office de serveur web. Pour l'installation de php, il faut compiler php55 avec le support de fpm, mais aussi php55-extensions qui permet de supporter session, gd (requis par pluxml), et d'autres si besoin.

C'est sur cette jail que mon blog (maniatux.fr) sera bientôt rapatrié. L'adresse e-mail de contact sera elle rapatriée sur la jail précédente (mail) car comme je l'ai indiqué, je peux gérer plusieurs domaines. Pluxml étant très léger et sans base de données, le serveur devrait tenir.

Jail : xmpp

La jail xmpp est destinée à faire office de serveur Jabber. J'utilise une fois de plus Prosody, que j'ai couplé avec sqlite pour le stockage des comptes (je n'aime pas le stockage en clair dans /var/lib/prosody qui est utilisé par défaut). La mise en place a été assez compliquée car en cas d'erreur, Prosody refuse de démarrer mais n'indique pas pourquoi. J'ai du spécifier un emplacement pour les logs et mettre les bons droits dessus (chown -R prosody:wheel) afin d'avoir un debug. En fait il n'arrivait pas à écrire le pid. Pour pouvoir utiliser sqlite il faut installer le port luadbi avec l'option sqlite. Après avoir un peu bataillé, ça marche.

Charge système

root@TARDIS:~ # df -h
Filesystem             Size    Used   Avail Capacity  Mounted on
/dev/ada0p2            140G    2.5G    126G     2%    /
devfs                  1.0k    1.0k      0B   100%    /dev
devfs                  1.0k    1.0k      0B   100%    /var/named/dev
/usr/jails/basejail    140G    2.5G    126G     2%    /usr/jails/xmpp/basejail
devfs                  1.0k    1.0k      0B   100%    /usr/jails/xmpp/dev
fdescfs                1.0k    1.0k      0B   100%    /usr/jails/xmpp/dev/fd
procfs                 4.0k    4.0k      0B   100%    /usr/jails/xmpp/proc
/usr/jails/basejail    140G    2.5G    126G     2%    /usr/jails/www/basejail
devfs                  1.0k    1.0k      0B   100%    /usr/jails/www/dev
fdescfs                1.0k    1.0k      0B   100%    /usr/jails/www/dev/fd
procfs                 4.0k    4.0k      0B   100%    /usr/jails/www/proc
/usr/jails/basejail    140G    2.5G    126G     2%    /usr/jails/mail/basejail
devfs                  1.0k    1.0k      0B   100%    /usr/jails/mail/dev
fdescfs                1.0k    1.0k      0B   100%    /usr/jails/mail/dev/fd
procfs                 4.0k    4.0k      0B   100%    /usr/jails/mail/proc

L'espace disque utilisé est de 2,5GB, sachant que l'on compte le système de base, le template, et l'arbre de ports. C'est assez intéressant. Voyons maintenant la charge CPU et mémoire :

last pid: 12938;  load averages:  0.00,  0.00,  0.00    up 0+22:54:08  13:14:23
48 processes:  1 running, 47 sleeping
CPU:  1.1% user,  0.0% nice,  1.5% system,  0.2% interrupt, 97.2% idle
Mem: 55M Active, 216M Inact, 113M Wired, 69M Buf, 589M Free
Swap: 4096M Total, 4096M Free

En gros même avec 3 VPS le système est très peu sollicité : 55Mo de mémoire utilisé, et CPU à 3% de charge.

Supervision

Pour assurer la supervision j'utilise tout simplement logwatch. C'est un script qui génère un rapport et envoie régulièrement un mail qui indique l'espace disque, les connexions ssh, les tentatives infructueuses d'accès à certain services. Logwatch peut être installé à partir de /usr/ports/sysutils/logwatch. Ensuite il faut spécifier Output = mail dans le logwatch.conf et ajouter un cron (@daily /usr/local/sbin/logwatch.pl).

On peut soit installer logwatch sur l'hôte uniquement, soit le mettre sur chaque jail. J'ai choisi la deuxième option pour avoir plus de détails.

Sur le serveur mail, c'est Postfix qui est utilisé pour l'envoi du rapport. Par contre sur les autres jail, j'ai laissé sendmail. Il faut éditer le fichier /etc/mail/freebsd.mc puis spécifier :

define(`SMART_HOST', `192.168.0.2')

Sauvegarder puis entrer :

m4 /etc/mail/freebsd.mc > /etc/mail/freebsd.cf

Sendmail va ensuite utiliser notre relay. Pas besoin de l'activer dans le rc.conf car il ne fonctionne pas comme un daemon dans ce cas là.

Sauvegarde

Pour les sauvegardes on parle beaucoup de bacula ou rsync. Dans mon cas j'ai choisi de faire plus simple car : 1) bacula est adapté pour les grosses infra avec plusieurs serveurs et du stockage dédié 2) rsync nécessite un support de stockage distant que je n'ai pas (mon NAS ne tourne pas 24/24). Donc je me contente d'un simple script sh :)

#!/bin/sh
tar -zcvf /root/"sauvegarde-`date -v-1d +%B-%Y`".tar.gz \\
/etc \\
/var/named/etc \\
/usr/jails/mail/etc \\
/usr/jails/mail/home \\
/usr/jails/mail/usr/local/etc \\
/usr/jails/www/etc \\
/usr/jails/www/home \\
/usr/jails/www/usr/local/etc \\
/usr/jails/xmpp/etc \\
/usr/jails/xmpp/home \\
/usr/jails/xmpp/usr/local/etc

Et dans crontab -e :

@monthly /root/sauvegarde.sh

Le 1er du mois à minuit le script sera exécuté, et dans son nom il sera indiqué le mois (précédent). Ainsi une sauvegarde exécutée le 1er Fevrier 2014 sera nommée January-2014.tar.gz si tout se passe bien.

Je n'ai pas de bases de données dont pas besoin d'arrêter les jail avant la sauvegarde. Je sauvegarde les /etc qui contiennent la configuration et les /home qui contiennent les données. Pas besoin du reste.

Note : ezjail-admin permet de sauvegarder les jails, mais je ne l'utilise pas en raison de deux inconvénients majeurs : 1) ça sauvegarde tout incluant l'arbre des ports, ce qui est long et inutile 2) ça nécessite d'arrêter la jail, et je n'ai pas envie d'avoir des interruptions de service à chaque sauvegarde, on est pas sur Windows Server.

Conclusion

FreeBSD ça envoie du rêve, c'est très puissant, ezjail-admin est un outil qui m'a fait franchir le pas. On gère ses jails avec une facilité déconcertante. Je suis volontairement resté vague sur cet article, car le but était de présenter un retour d'expérience, et non un tutoriel qui aurait été de toutes manières trop long. Si vous vous lancez dans l'aventure et souhaitez obtenir mes fichiers de configuration ou des explications, n'hésitez pas !

Gravatar de Xavier Chotard
Original post of Xavier Chotard.Votez pour ce billet sur Planet Libre.

Artisan Numérique : La magie du chroot...

mercredi 22 janvier 2014 à 00:29

Le changement de racine est un aspect des Unix offrant une alternative très intéressante à la virtualisation. Éminemment plus léger, mais surtout plus simple à mettre en oeuvre, qu'un VirtualBox ou un KVM, le petit utilitaire chroot peut vous rendre bien des services pour emprisonner un accès FTP, pour créer une machine de développement avec des versions de librairies différentes de celle de votre système principal ou encore simplement pour tester les derniers joujou dans une version instable de debian.

Qu'est-ce qu'un chroot?

Comme vous le savez sûrement déjà, le système fichier d'un *NIX est construit autour d'une racine (le /) sur laquelle les partitions sont ensuite "montées" formant ainsi l'espace de fichier accessible. Cette racine forme ainsi la référence pour tous les chemins absolus utilisés par un processus et lui permettant d'accéder aux fichiers (librairies, configurations, etc.) qui lui sont nécessaire.

Ce que l'on sait moins c'est que cette racine est un paramètre du processus qu'il est parfaitement possible de modifier grace à l'utilitaire chroot. Pour quoi faire me direz-vous ? Tout simplement pour faire croire à ce processus que le dossier que nous lui avons arbitrairement fixé comme racine, est l'origine de tous ses chemins absolus.

Le cadre d'usage du changement de racine est vaste. Il permet de lancer des processus critiques dans un dossier isolé du reste du système de sorte à rendre plus difficile (mais pas impossible !) la compromission du reste du système de fichier en cas d'exploitation d'une faille de sécurité.

Il permet aussi de créer des environnements qui fonctionnent sur des règles différentes du reste du système. Il est ainsi possible de faire tourner une debian au sein d'une mandriva, ou encore un linux en 32bits au sein d'un linux 64 bits.

Mais même si cela sonne terriblement comme de la virtualisation il est important de ne pas confondre les deux principes. Le changement de racine n'émule absolument rien, ce n'est que l'exploitation d'une propriété des processus unix. Chaque processus chrooté accède donc au même matériel que les processus "normaux". De même ils tournent au sein du même kernel et partagent le même espace mémoire. Plus flagrant, les processus lancés dans le cadre d'un changement de racine sont parfaitement visible si l'on exécute une commande ps à partir d'un shell "normal".

Et c'est là finalement la grande force du changement de racine. C'est un principe limité mais simple, et qui ne souffre d'aucun problème de performance accompagnant généralement la virtualisation.

Construction d'un dossier chrootable

Il y a d'innombrables manière de créer un dossier utilisable pour un changement de racine. Tout dépend au fond du besoin derrière la manipulation. Si l'on chroot un service FTP par exemple, on va s'attacher à ne mettre dans le dossier que les fichiers strictement nécessaires au processus : l'exécutable, ses librairies et ses fichiers de configurations, placé avec soin dans une arborescence qui mime parfaitement ce que l'on trouverait sur une racine réelle. Il existe des utilitaires qui aident à effectuer ce genre de tâche mais ce n'est pas forcement l'approche la plus didactique.

Pour notre exemple, voyons plutôt comment créer une debian complète dans notre racine de sorte à y placer une pile "app" (Apache/PostgreSql/PHP).

La première chose à faire est d'installer dans un dossier de votre choix une installation de la distribution Debian. Il est possible de faire bêtement une copie de la racine principale, cela marcherait très bien, mais ce serait sûrement très volumineux.

Heureusement, il existe un outil debian qui fait des miracles debootstrap. Notez que cet outil n'est pas spécifique à Debian et fonctionne aussi très bien sous Mandriva. Nous allons donc installer la commande et la lancer pour installer une wheezy tout neuve

gastonsudo aptitude install debootstrap
gastonsudo debootstrap --include=locales-all wheezy ma_racine http://ftp.fr.debian.org/debian
installation de la racine

Le paramètre --include indique à debootstrap des paquets supplémentaires à installer, ici les locales. Suit la version de debian à installer et le dossier dans lequel effectuer les opérations. Si ce dossier n'existait pas il sera créé. Enfin nous avons l'url des paquets debian en france.

La commande va jaquasser un petit moment pour installer tout cela. Lorsque c'est terminé, vous avez une mini debian d'environ 356Mo.

La debian est installée et déjà totalement fonctionnelle. Vous pouvez donc lancer votre premier changement de racine

# on met un petit fichier témoin dans la racine
gastonsudo echo "Je suis dans ma racine..." | sudo tee ma_racine/ça_marche.txt > /dev/null
 
# lancement d'un bash en chroot
gastonsudo chroot ma_racine /bin/bash
 
# On vérifie que ça a bien marche...
rootcat /ça_marche.txt
Je suis dans ma racine...
premier chroot

Et voilà, nous sommes dans notre bash chrooté. Mais que c'est il passé exactement ?

  1. La commande chroot engendre un processus qui a pour racine la même que celle de son processus parent, généralement le / (mais rien n'empêche de se la jouer matryoshka ;-).
  2. En interne, chroot appel de la fonction kernel chroot("/ma_racine"). Le kernel va donc modifier la valeur de la racine pour ce processus et lui associer la valeur /ma_racine.
  3. Le processus de chroot, exécute la commande passée en 2nd paramètre, /bin/bash. Comme la racine de chroot a été changée, c'est bien le /bin/bash de la nouvelle racine /ma_racine qui va être exécuté.
  4. Cette exécution débouche sur la création d'un processus fils de celui du chroot qui hérite logiquement de cette nouvelle racine.
  5. Tout ce que /bin/bash lancera par la suite héritera de cette nouvelle racine jusqu'à ce que l'on tape exit qui mettra fin au processus /bin/bash, et par domino à celui du chroot qui a permis son lancement.

Ok, c'est bien gentil le bash, mais voyons comment aller plus loin.

Dossiers spéciaux

Notre debian a besoin d'un plus que les fichiers installés pour fonctionner. En effet pour accéder au matériel il lui faudra les fameux dossier /proc et /sys. Dans un premier temps, nous allons faire cela à la main.

rootmount proc /proc -t proc
rootmount sysfs /sys -t sysfs
Montage des dossiers spéciaux

Bon, là on lance cela à la main. Mais rien n'empêche de créer dans la nouvelle racine un fichier /etc/fstab pour automatiser tout cela et de lancer carrément init q pour lancer un système complet. Personnellement, je préfère coller bien sagement les deux montages dans un script de ce genre

cd /chemin/vers/ma_racine
sudo mount --bind /proc proc
sudo mount --bind /sys sys
sudo chroot . /bin/bash
sudo umount sys
sudo umount proc

Techniquement cela revient au même, sauf qu'au lieu de monter les dossiers spéciaux au sein de la racine, on les monte de l'extérieur en les liant aux dossiers principaux. L'avantage c'est que lorsque vous sortirez de la racine, les deux dossiers seront automatiquement démontés. Il est aussi possible de lancer autre chose que bash, comme par exemple un script qui va lancer apache... Le truc s'est qu'il faudra tuer apache pour arrêter le chroot :-)

Installation d'apache

Maintenant le système est complet, nous pouvons commencer à installer des choses comme nous en avons l'habitude.

rootaptitude install libapache2-mod-php5
installation de l'apache et PHP

Si, lors de l'installation, dpkg a essayé de lancer apache et a échoué lamentablement, c'est sans doute parce que vous avez déjà un apache qui tourne sur votre machine. Et comme il squate l'interface réseau, notre apache parent pauvre se voit signifier une fin de non recevoir.

La solution la plus efficace est simplement d'ajouter une adresse IP à votre interface réseau physique. Imaginons que cette interface s'appelle eth0 et que votre IP est 10.0.0.1, nous allons lui ajouter 10.0.0.2 :

ifconfig eth0:0 192.168.154.110
Ajoutd d'une adresse IP

Ceci fait, il ne reste plus qu'à modifier, tant sur l'apache principal que celui de la racine, le fichier /etc/apache2/ports.conf de sorte à préciser l'adresse à utiliser pour la directive Listen. Ce sera Listen 10.0.0.1:80 pour le principal et 10.0.0.2 pour le secondaire. Il ne reste maintenant plus qu'à redémarrer d'abord le principal, puis le secondaire.

Maintenant il ne reste plus qu'à tester, en tapant dans votre navigateur http://10.0.0.2, et normalement, It Works!.

Conclusion

Alors là c'est la base du changement de racine et il est possible de faire plein de chose très intéressantes avec cet outil. Pour ceux qui cherchent par exemple à créer des conteneurs aux caractéristiques proche de la virtualisation, je conseillerais d'aller jeter un oeil de côté de LXC.

Gravatar de Artisan Numérique
Original post of Artisan Numérique.Votez pour ce billet sur Planet Libre.

Olivier Delort : Gitlab 6.4 de nouvelles options de visibilités pour les projets

mardi 21 janvier 2014 à 17:33

gitlab_logoUne grande majorité de développeurs utilisent un logiciel de gestion de version pour leurs projets. Surtout sur les gros projets afin de s’y retrouver parmi la multitude de fichiers sources créés, modifiés, détruits par l’ensemble de l’équipe de développement.

Parmi ses logiciels le plus répandut est Git. Pour faire simple Gitlab est en réalité une interface web s’appuyant sur les commandes de bases de Git, comme le fait le très populaire GitHub.

Certes je n’ai pas de gros projets de développements, je ne me considère pas comme un développeur, mais plutôt comme quelqu’un qui script. Je dois reconnaître qu’il est  très confortable de gérer  les différentes versions de mes scripts via une interface graphique.

Dès le  début j’avais pensé utiliser Github pour mes petits projets de script afin de pouvoir garder un historique de mes modifications et de mes “dotfiles”. Mais Github est une société privée qui ne permet pas de configurer la visibilité par défaut d’un projet à moins d’avoir un compte payant, en effet tout est public sur Github. Ce n’est pas le fait de payer qui me dérangeait dans l’offre de Github, mais qu’encore une fois il faillait confier ses données à un tier. J’ai  pris la décision de me configurer un serveur Gitlab le petit frère de Github.

Cette nouvelle version ajoute principalement des options dans la visibilité des projets développés. Avant la version 6.4 nous ne pouvions définir que deux modes de visibilité :

  1. Privé
  2. Public

Il était très gênant pour moi lorsque je voulais partager des scripts de configuration sensible de les mettre en mode public, car n’importe qui pouvait cloner mon dépôt. A chaque fois j’étais obligé de modifier mes scripts en effaçant les variables sensibles.

Avec 6.4 c’est fini le nouveau mode “internal Project”, permet uniquement aux personnes possédant un compte sur notre Gitlab de pourvoir cloner le dépôt. Depuis cette mise à jour cela me simplifie beaucoup les choses, car je peux travailler avec mes collègues de confiance et nous pouvons partager, modifier, comparer, nos scripts de configuration.

Je n’ai rencontré qu’une petite difficulté lors de la mise à jour de 6.3 vers la 6.4, pendant le changement de branche :

sudo -u git -H git checkout 6-4-stable
error: Your local changes to the following files would be overwritten by checkout:
        somefile.txt
Please, commit your changes or stash them before you can switch branches.
Aborting

 J’ai rectifié avec un :

git stash

Si vous voulez en savoir plus voici quelques liens utiles pour :

Bizarrement l’équipe de développement à choisi d’héberger le projet sur github et non sur leur propre plate-forme, peut-être pour éviter de s’attirer les foudres de son grand frère Github.

Gravatar de Olivier Delort
Original post of Olivier Delort.Votez pour ce billet sur Planet Libre.

Articles similaires