tag:linuxfr.org,2005:/users/skcLinuxFr.org : les contenus de Sébastien Koechlin2012-04-03T12:40:28+02:00/favicon.pngtag:linuxfr.org,2005:Diary/323842012-03-29T10:21:29+02:002012-03-29T10:21:29+02:00Kernel en 32 bits ou en 64 bits (un journal bookmark)<p>Voici un journal bookmark avec une jolie nimage.</p>
<p>On pose souvent la question: faut-il installer son OS en 32 ou en 64 bits. Linus a répondu indirectement de façon plutôt tranché (le lien était dans la dépêche du noyau 3.3):</p>
<p>
<a href="http://www.realworldtech.com/forums/index.cfm?action=detail&id=78966&threadid=78766&roomid=2">http://www.realworldtech.com/forums/index.cfm?action=detail&id=78966&threadid=78766&roomid=2</a>
</p>
<blockquote>
<p>when you hit 1GB of RAM, 32-bit virtual memory is no longer acceptable</p>
</blockquote>
<p>Et comme vous raffolez des jolies nimages, en voici une: <a href="http://lwn.net/Articles/464319/">une</a>.</p><div><a href="https://linuxfr.org/users/skc/journaux/kernel-en-32-bits-ou-en-64-bits-un-journal-bookmark.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/90075/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/kernel-en-32-bits-ou-en-64-bits-un-journal-bookmark#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/90075/comments.atomtag:linuxfr.org,2005:News/284052011-08-02T17:14:08+02:002021-07-11T19:15:14+02:00Évolutions techniques de systemdLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<div><p><em>LinuxFr.org</em> a déjà publié quelques articles à propos de <strong>systemd</strong>, sans entrer trop dans les détails des améliorations techniques.</p>
<p>On trouve en particulier un <a href="//linuxfr.org/news/un-entretien-avec-lennart-poettering">entretien avec son auteur, Lennart Poettering</a>, et un <a href="//linuxfr.org/users/rewind/journaux/systemd-est-un-bloat">journal contestant la qualité et les dépendances du code</a>.</p>
<p>L’arrivée de <strong>systemd</strong> provoque pas mal de remous, justifiés ou non. On peut citer l’objectif <em>« Linux only »</em> affiché par l’auteur, les multiples dépendances et en particulier celle de <a href="https://fr.wikipedia.org/wiki/D-Bus" title="Définition Wikipédia">D-Bus</a>, la personnalité de l’auteur et la qualité de ses réalisations précédentes, le périmètre de responsabilité de <code>systemd</code> (gdm) et probablement de nombreux autres points.</p>
<p>Cet article a pour objectif de passer en revue les évolutions techniques et les objectifs de <code>systemd</code>. Les autres questions citées ci‐dessus ne sont pas injustifiées (en tout cas, pas toutes), mais sont en dehors du périmètre fixé.</p>
<p>L’article se base essentiellement sur les présentations de Lennart Poettering publiées sur <a href="http://0pointer.de/blog/projects/systemd-docs.html">son site</a> en particulier, certains paragraphes sont des traductions un peu condensées de sa <a href="http://0pointer.de/blog/projects/systemd.html">présentation initiale</a>.</p>
<p><em>Merci aux relecteurs : Davy, Spack, npa.</em></p>
</div><ul><li>lien nᵒ 1 : <a title="http://www.freedesktop.org/wiki/Software/systemd" hreflang="en" href="https://linuxfr.org/redirect/72749">Page du projet systemd</a></li><li>lien nᵒ 2 : <a title="http://0pointer.de/blog/projects/systemd-docs.html" hreflang="en" href="https://linuxfr.org/redirect/72750">En savoir plus sur systemd</a></li><li>lien nᵒ 3 : <a title="http://0pointer.de/blog/projects/why.html" hreflang="en" href="https://linuxfr.org/redirect/72756">Comparatif de SysVinit, Upstart et Systemd par Lennart Poettering</a></li></ul><div><h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li>
<a href="#toc-%C3%89tat-des-lieux">État des lieux</a><ul>
<li><a href="#toc-processus-de-pid1">Processus de PID 1</a></li>
<li><a href="#toc-sysvinit">SysVinit</a></li>
<li><a href="#toc-changement-dynamique-du-mat%C3%A9riel-et-du-logiciel">Changement dynamique du matériel et du logiciel</a></li>
</ul>
</li>
<li>
<a href="#toc-performances">Performances</a><ul>
<li><a href="#toc-parall%C3%A9liser-le-lancement-des-services-sur-sockets-af_unix">Paralléliser le lancement des services sur sockets (AF_UNIX)</a></li>
<li><a href="#toc-supprimer-les-d%C3%A9pendances-explicites-entre-les-services">Supprimer les dépendances explicites entre les services</a></li>
<li><a href="#toc-d%C3%A9marrer-moins-de-choses">Démarrer moins de choses</a></li>
<li><a href="#toc-un-syst%C3%A8me-plus-r%C3%A9sistant">Un système plus résistant</a></li>
<li><a href="#toc-services-r%C3%A9seau-af_inet-af_inet6-et-d-bus">Services réseau (AF_INET, AF_INET6 et D-Bus)</a></li>
<li><a href="#toc-r%C3%A9sum%C3%A9-et-interlude">Résumé et Interlude</a></li>
<li><a href="#toc-les-syst%C3%A8mes-de-fichiers">Les systèmes de fichiers</a></li>
</ul>
</li>
<li>
<a href="#toc-gains-fonctionnels">Gains fonctionnels</a><ul>
<li><a href="#toc-avoir-un-petit-pid-utilisable">Avoir un petit PID utilisable</a></li>
<li><a href="#toc-suivre-les-processus">Suivre les processus</a></li>
<li><a href="#toc-contr%C3%B4ler-le-contexte-du-service">Contrôler le contexte du service</a></li>
</ul>
</li>
<li><a href="#toc-second-interlude-upstart-et-les-autres-syst%C3%A8mes">Second interlude : Upstart et les autres systèmes</a></li>
<li>
<a href="#toc-systemd">Systemd</a><ul>
<li><a href="#toc-limpl%C3%A9mentation">L’implémentation</a></li>
<li><a href="#toc-les-bonus">Les bonus</a></li>
<li>
<a href="#toc-ladministration">L’administration</a><ul>
<li><a href="#toc-d%C3%A9finition-dun-service">Définition d’un service</a></li>
<li><a href="#toc-gestion-des-services">Gestion des services</a></li>
<li><a href="#toc-cgroups">cgroups</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#toc-%C3%89crire-un-service">Écrire un service</a></li>
<li><a href="#toc-conclusion">Conclusion</a></li>
</ul>
<h2 id="toc-État-des-lieux">État des lieux</h2>
<h3 id="toc-processus-de-pid1">Processus de PID 1</h3>
<p>Sur un système UNIX, le tout premier processus (<a href="http://fr.wikipedia.org/wiki/Identifiant_de_processus">PID</a> 1) a un rôle particulier :</p>
<ol>
<li>c’est le seul qui est lancé par le noyau ; il doit donc assurer toute l’initialisation du système, le lancement des différents services et des systèmes permettant la connexion des utilisateurs ;</li>
<li>dans la hiérarchie des processus tournant sur le système, lorsqu’un processus devient orphelin, la norme et l’usage veut qu’il soit attaché au processus de PID 1. Dans ce cas lorsque le processus se termine, c’est au PID 1 qu’il revient de lire le code de retour du <a href="http://fr.wikipedia.org/wiki/Processus_zombie"><em>processus zombie</em></a>, avant que le système puisse libérer certaines ressources associées.</li>
</ol>
<p>L’évolution de l’informatique fait que le système évolue au fil du temps (ajout ou suppression de périphériques, lancement ou arrêt de services). Nous avons aussi des plantages de services ou des mises à jour.</p>
<h3 id="toc-sysvinit">SysVinit</h3>
<p>Sous GNU/Linux, c’est généralement <a href="http://fr.wikipedia.org/wiki/Init#.22init.22_de_Unix_System_V_.28SysVinit.29">SysVinit</a>, le système d’initialisation hérité d’<a href="http://fr.wikipedia.org/wiki/UNIX_System_V">UNIX Système V</a> qui assure ce rôle, remplacé par <a href="https://fr.wikipedia.org/wiki/Upstart" title="Définition Wikipédia">Upstart</a> dans plusieurs distributions.</p>
<p>Hélas, SysVinit reste très basique, peu performant et sujet à de nombreux problèmes. Il n’est pas très adapté à toutes les évolutions modernes que connaît Linux.</p>
<h3 id="toc-changement-dynamique-du-matériel-et-du-logiciel">Changement dynamique du matériel et du logiciel</h3>
<p>Pour l’instant, ces modifications du système sont réalisées par des scripts lancés dynamiquement, généralement par <code>root</code> ou par un autre service (<code>udev</code>) ; mais si un système moderne était chargé de maintenir le système opérationnel, il devrait aussi s’occuper de ces modifications.</p>
<p>Le fichier <code>« /etc/inittab »</code> permet historiquement d’assurer une forme basique de suivi des services et de définir plusieurs modes de fonctionnement ; mais dans les distributions actuelles, il est terriblement en perte de vitesse, toute la charge fonctionnelle étant déplacée dans les scripts SysVinit.</p>
<h2 id="toc-performances">Performances</h2>
<p>Lennart Poettering constate que le système d’initialisation SysV est vieux et lent. Pour améliorer les choses, il faudrait :</p>
<ul>
<li>démarrer moins de choses ;</li>
<li>démarrer les choses en parallèle lorsque c’est possible.</li>
</ul>
<p>Pour démarrer moins de choses, une solution éprouvée est de retarder le démarrage de certains services jusqu’au moment où ils sont effectivement nécessaires (démarrage à la demande). Par exemple, <code>bluetoothd</code> est inutile tant qu’aucun périphérique <a href="https://fr.wikipedia.org/wiki/Bluetooth" title="Définition Wikipédia">Bluetooth</a> n’est présent et qu’aucune application ne s’adresse à lui via D-Bus. Pareillement, <a href="https://fr.wikipedia.org/wiki/CUPS" title="Définition Wikipédia">CUPS</a> ne sert que pour configurer une imprimante ou pour imprimer, actions qui surviennent rarement dans les premières minutes de démarrage d’un système. Même <a href="https://fr.wikipedia.org/wiki/SSH" title="Définition Wikipédia">SSH</a> pourrait n’être démarré qu’au moment où arrive la première connexion entrante.</p>
<p>Pour démarrer les services en parallèle, il est nécessaire de tout lancer en même temps, et non de démarrer les services un à un comme le fait SysVinit.</p>
<p>Quasiment tous les systèmes qui tentent de paralléliser le démarrage de plusieurs services se servent d’un arbre de dépendances permettant d’imposer le lancement des services indispensables au démarrage d’un service donné. <a href="https://fr.wikipedia.org/wiki/Avahi" title="Définition Wikipédia">Avahi</a> nécessite <a href="https://fr.wikipedia.org/wiki/D-Bus" title="Définition Wikipédia">D-Bus</a>, donc le système démarre D-Bus et attend qu’il soit prêt avant de lancer Avahi.</p>
<h3 id="toc-paralléliser-le-lancement-des-services-sur-sockets-af_unix">Paralléliser le lancement des services sur sockets (AF_UNIX)</h3>
<p><strong>A</strong> ← <strong>B</strong> (<strong>B</strong> est dépendant de <strong>A</strong>)</p>
<p>Cette approche des dépendances est coûteuse en temps, et contournable. Lorsqu’une dépendance existe, le second service (<strong>B</strong>) n’a pas réellement besoin que l’initialisation du premier service (<strong>A</strong>) soit terminée pour commencer à démarrer (charger son code en mémoire vive, lire son fichier de configuration…).</p>
<p>En poussant le raisonnement plus loin, la seule chose nécessaire pour ne pas provoquer d’erreurs lors du lancement du second service (<strong>B</strong>) est que l’interface du premier (<strong>A</strong>) soit en place et capable de temporiser les requêtes reçues. Le second service (<strong>B</strong>) pourra alors s’y connecter sans recevoir d’erreur. Le premier service (<strong>A</strong>) traitera les requêtes lorsqu’il sera prêt.</p>
<p>Dans le cas de services répondant sur des <a href="http://fr.wikipedia.org/wiki/Berkeley_sockets"><em>sockets</em> UNIX</a> (AF_UNIX, présents comme des fichiers de type « s » sur le disque), la simple existence du <em>socket</em> est suffisante. Le noyau s’assure que les données reçues sont mises en attente ou que l’émetteur est bloqué tant qu’elles ne sont pas lues. Les services utilisateurs du <a href="https://secure.wikimedia.org/wikipedia/fr/wiki/Daemon_%28informatique%29">démon</a> de journalisation d’événements <a href="https://fr.wikipedia.org/wiki/syslog" title="Définition Wikipédia">syslog</a> ont besoin de se connecter à un <em>socket</em> appelé <code>« /dev/log »</code>, ceux de CUPS utilisent <code>« /var/run/cups/cups.sock »</code>, etc. Si les <em>sockets</em> correspondants existent, alors il est possible de lancer toutes les dépendances, et la synchronisation se fera toute seule au fur et à mesure que les services seront prêts et répondront aux requêtes reçues.</p>
<p>Sur un système UNIX où les entrées‐sorties sont assimilées à des fichiers, il est très facile de créer ces <em>sockets</em> avant même de lancer le service associé.</p>
<h3 id="toc-supprimer-les-dépendances-explicites-entre-les-services">Supprimer les dépendances explicites entre les services</h3>
<p>Si la création des <em>sockets</em> est indépendante du lancement des services, le problème de dépendances disparaît. Dans une première phase, nous pourrions créer tous les <em>sockets</em> nécessaires au système, et dans un second temps, lancer tous les services en parallèle.</p>
<p>Prenons l’exemple de Syslog. Dès l’instant où <code>« /dev/log »</code> est créé, il est possible de lancer des services qui vont envoyer leurs événements dans <code>« /dev/log »</code>. Ces messages seront mis en attente tant que Syslog ne sera pas prêt. Dès qu’il aura démarré, Syslog lira tous les messages reçus et assurera leur traitement.</p>
<h3 id="toc-démarrer-moins-de-choses">Démarrer moins de choses</h3>
<p>Ce principe permet également de faire du démarrage à la demande. Si personne ne s’adresse à un service, il est inutile de le lancer. À l’instar d’<a href="et%20de%20son%20rempla%C3%A7ant%20%5B%5Bxinetd%5D%5D">[inetd]</a> ; nous pouvons attendre qu’un service ait reçu une demande de connexion pour le lancer. Pour les postes de travail qui impriment trois pages par semaine, <a href="https://fr.wikipedia.org/wiki/CUPS" title="Définition Wikipédia">CUPS</a> est un bon candidat. Tant qu’aucune impression n’est lancée, aucune donnée n’arrive et le service CUPS n’a pas de raison d’être démarré.</p>
<h3 id="toc-un-système-plus-résistant">Un système plus résistant</h3>
<p>Nous trouvons un nouvel avantage à ce système de démarrage : une certaine forme de résistance aux crashs d’un service. Si votre service <code>syslog</code> se plante lamentablement, les données qui arrivent dans <code>« /dev/log »</code> sont mises en attente par le noyau. Lorsque <code>syslog</code> est relancé, aucun message n’est perdu (si ce n’est ceux qu’il a déjà lus et perdus lors de son crash), même si le temps de démarrage est important.</p>
<p>De la même façon, en cas de redémarrage d’un service, par exemple suite à une mise à jour, aucun message n’est perdu.</p>
<h3 id="toc-services-réseau-af_inet-af_inet6-et-d-bus">Services réseau (AF_INET, AF_INET6 et D-Bus)</h3>
<p>Sur un système moderne, les services ne se limitent pas à un <em>socket</em>, ils reçoivent des connexions via le réseau IP ou via D-Bus. Est‐ce que ce mécanisme est aussi adaptable à ce type d’interface ? La réponse est oui.</p>
<p>D-Bus permet un mode « <a href="http://dbus.freedesktop.org/doc/dbus-specification.html#message-bus-starting-services"><em>bus-activation</em></a> » où un service est démarré par la réception d’un message lui étant destiné.</p>
<p>Concernant le réseau IP, c’est exactement ce que propose <code>inetd</code> et ses successeurs depuis des années (en mode <code>« wait »</code>). Le <em>socket</em> réseau est créé par <code>inetd</code>. À la réception de données, le service est lancé déjà connecté au <em>socket</em>. La contrainte est que le service doit être capable de fonctionner sur un <em>socket</em> réseau déjà créé.</p>
<blockquote>
<h3 id="toc-résumé-et-interlude">Résumé et Interlude</h3>
<p>Par ce mécanisme, il est possible de démarrer tous les services en parallèle, sans aucun mécanisme de synchronisation. Il permet également de démarrer les services à la demande et non plus systématiquement.</p>
<p>Ce système n’est pas nouveau, nous avons vu qu’<code>inetd</code> présentait déjà des aspects similaires. Apple a développé tous les points ci‐dessus dans son système Mac OS X, sous le nom de <a href="http://launchd.macosforge.org/">launchd</a>. C’est cela qui permet à Mac OS X de démarrer très rapidement.</p>
</blockquote>
<h3 id="toc-les-systèmes-de-fichiers">Les systèmes de fichiers</h3>
<p>Le démarrage du système ne se limite pas au démarrage des services. La préparation des systèmes de fichiers est également une opération qui peut prendre beaucoup de temps. Il faut attendre que tous les périphériques listés dans <code>« /etc/fstab »</code> soient créés, que chaque système de fichiers soit vérifié avec <a href="https://fr.wikipedia.org/wiki/fsck" title="Définition Wikipédia">fsck</a>, que le système soit monté et éventuellement que les quotas soient contrôlés.</p>
<p>Pour accélérer cela, <a href="http://www.harald-hoyer.de/">Harald Hoyer</a> a eu l’idée d’utiliser le système <a href="http://www.autofs.org/"><code>autofs</code></a> en mode direct. De la même façon que pour les <em>sockets</em>, <code>autofs</code> permet de monter un pseudo système de fichiers à la place du système réel, et de ne basculer sur le vrai système qu’au moment où un accès est fait. Comme pour la création de <em>sockets</em>, le montage du pseudo système de fichiers est quasiment instantané.</p>
<p>Si un accès est fait alors que le système de fichiers n’est pas prêt (<code>fsck</code> en cours, par exemple), alors le noyau bloque la requête (et celui qui l’a faite) jusqu’à ce que le système de fichiers soit disponible.</p>
<p>Pour la racine (<code>« / »</code>), cela ne présente pas d’intérêt ; mais pour les grosses volumétries qui peuvent être montées sur <code>« /home »</code>, ou pour des partitions de données qui ne sont pas nécessaires au démarrage du système, cela présente un gain important.</p>
<p>L’intégration de <code>autofs</code> dans un système de démarrage peut faire peur à plus d’une personne. L’expérience montre que les processus bloqués par des fichiers qui ne sont pas disponibles peuvent être tués proprement, et qu’en cas d’erreur lors de la vérification du système de fichiers, il est possible de retourner une erreur au processus réclamant le fichier, de la même façon que cela se produit lorsqu’une partition tombe en erreur.</p>
<h2 id="toc-gains-fonctionnels">Gains fonctionnels</h2>
<h3 id="toc-avoir-un-petit-pid-utilisable">Avoir un petit PID utilisable</h3>
<p>Les scripts sont rapides à coder, mais lents à exécuter. Tout le système de démarrage SysVinit est basé sur des scripts qui lancent des commandes externes. D’après Lennart cette approche est condamnée à être lente. Sur son système, les scripts dans <code>« /etc/init.d/ »</code> appellent <code>grep</code> au moins 77 fois, <code>awk</code> l’est 92 fois, <code>cut</code>, 23 fois, et <code>sed</code>, 74 fois. À chaque appel, un processus doit être démarré, les bibliothèques résolues, la localisation initialisée, etc.. Après une manipulation de quelques octets, les données doivent être retournées à l’appelant via un descripteur de fichier et le processus est détruit. En outre, les scripts sont très sensibles à l’environnement et peu adaptés à la gestion des erreurs et des exceptions.</p>
<p>Tous ces scripts, ne faisant pour beaucoup que des tâches triviales, et contenant beaucoup de code dupliqué, auraient plutôt leur place dans le processus d’initialisation ou dans l’un de ses sous‐programmes. Tout ré‐écrire en <em>C</em> n’est pas pertinent ; mais le système devrait être capable de gérer bien plus de choses par lui‐même, sans faire appel à des scripts.</p>
<p>Une métrique intéressante est le PID du premier processus utilisable une fois le système démarré. Avec les noyaux actuels, cela donne une bonne idée du nombre de processus lancés. Amorcer le système, lancer un terminal, faire <code>« echo $$ »</code> : sous Linux, le PID est <strong>1823</strong>, sous Mac OS X c’est <strong>154</strong>.</p>
<h3 id="toc-suivre-les-processus">Suivre les processus</h3>
<p>Une grosse part du mécanisme qui démarre les services devrait être la supervision : surveiller les services, pouvoir les identifier, redémarrer ceux qui plantent, collecter les traces.</p>
<p>Il devrait être capable de couper complètement un service. Cela semble facile mais est en réalité très difficile. Sous UNIX, un processus qui fait un double <em>fork</em> (le programme se relance lui‐même en tâche de fond) sort complètement de la supervision du processus qui l’a lancé. Prenons par exemple un script CGI lancé par un serveur Web. Lorsqu’il fait un double <em>fork</em>, il devient orphelin et est rattaché au processus de PID 1. L’arrêt du serveur Web ne le concerne pas, et aucun script système n’est en mesure de le retrouver automatiquement pour le couper.</p>
<p>Pour résoudre ce problème, le noyau Linux implémente un mécanisme appelé <a href="http://www.mjmwired.net/kernel/Documentation/cgroups.txt"><code>cgroups</code></a> (<em>control groups</em>) qui, comme son nom l’indique, permet de créer un groupe et d’y placer des processus. Tout processus créé au sein d’un <code>cgroup</code> y reste, résolvant ainsi notre problème de CGI fou. Les <code>cgroups</code> présentent un autre avantage (c’était leur objectif initial) : il est possible de placer certaines restrictions (processeur, mémoire, entrées‐sorties) afin de limiter la consommation d’un service dans sa globalité.</p>
<h3 id="toc-contrôler-le-contexte-du-service">Contrôler le contexte du service</h3>
<p>Un bon superviseur devrait également être capable de placer le service dans un environnement adapté et sécurisé. Jetez un coup d’œil aux scripts dans <code>« /etc/init.d/ »</code>, tout le code dupliqué concerne le traitement des options, le changement d’utilisateur et de groupe, le réglage des paramètres de sécurité, la création d’un environnement avec une racine isolée (à l’aide de <a href="http://fr.wikipedia.org/wiki/Chroot"><code>chroot</code></a>), la création d’un fichier contenant le PID, retrouver le processus pour lui envoyer un signal. Le même code, légèrement différent, se répète de script en script. Tout cela gagnerait à être normalisé et mutualisé.</p>
<p>Le système devrait permettre de régler les limites de ressources, la priorité, l’utilisateur et le groupe. Cela ne s’arrête pas là, le noyau Linux permet aussi de définir les capacités, les règles d’ordonnancement et d’entrées‐sorties, l’affinité avec les processeurs, supprimer l’accès en écriture à certaines partitions, et aussi tous les paramètres liés aux <code>cgroups</code>.</p>
<p>Enfin, sous UNIX, tout processus a une sortie standard et une sortie d’erreur, qui sont la première source d’information en cas d’anomalie. Aujourd’hui, sur la majorité des distributions, ces données sont difficiles à récupérer, le système de démarrage devrait au contraire les conserver précieusement ; au moins en les redirigeant vers le service de journalisation des événements.</p>
<blockquote>
<h2 id="toc-second-interlude-upstart-et-les-autres-systèmes">Second interlude : Upstart et les autres systèmes</h2>
<p><a href="https://fr.wikipedia.org/wiki/Upstart" title="Définition Wikipédia">Upstart</a> est une grosse avancée par rapport à SysVinit. Il s’occupe du démarrage et de l’arrêt des services en fonction d’événements. Il gère tout un arbre de dépendances pour déterminer quoi démarrer et dans quel ordre, afin d’arriver à une situation cible. Malheureusement, cette gestion de dépendances demande de coder manuellement toutes les contraintes d’un service.</p>
<p>Cela a plusieurs effets pervers :</p>
<ul>
<li>en cas d’anomalie, bien malin est celui qui retrouvera ce qui s’est produit et dans quel ordre ;</li>
<li>le travail du système de démarrage a considérablement augmenté, puisqu’avant de démarrer quelque chose, il doit avoir constitué au moins une partie du graphe de dépendances ;</li>
<li>il ne permet pas de réduire le démarrage aux services strictement nécessaires. Si un service (<strong>A</strong>) peut être utilisé par un autre (<strong>B</strong>), alors il doit être marqué comme dépendant et démarré avant le second (<strong>A</strong> ← <strong>B</strong>).</li>
</ul>
<p>Lennart admet que certains de ces points sont en cours de correction, mais il s’agit de contournements du principe de fonctionnement d’Upstart.</p>
<p>En dehors de SysVinit, Upstart et launchd (Mac OS X), un autre système mérite notre intérêt, c’est <a href="http://en.wikipedia.org/wiki/Service_Management_Facility">Solaris SMF</a>. Il gère les dépendances entre les services, mais est très lié à Solaris et très complexe dans son fonctionnement (par exemple par son utilisation excessive de XML).</p>
</blockquote>
<h2 id="toc-systemd">Systemd</h2>
<h3 id="toc-limplémentation">L’implémentation</h3>
<p>Ce qui a été décrit ci‐dessus est implémenté dans un système appelé <code>systemd</code> qui est en cours d’adoption par plusieurs distributions GNU/Linux.</p>
<p>Le fonctionnement de <code>systemd</code> est basé sur des unités (<em>units</em>) qui ont un nom et un type. Le nom correspond au nom du fichier décrivant l’unité.</p>
<p>Les types sont :</p>
<ul>
<li>
<strong>service</strong> : les plus simples correspondent à des services. Peuvent être démarrés, coupés, redémarrés, reconfigurés (start/stop/restart/reload), comme on le fait habituellement avec les scripts dans <code>/etc/init.d/</code> ;</li>
<li>
<strong>socket</strong> : correspond à une <em>socket</em>, que ce soit de type UNIX, de type Internet, de type fichier ; chaque <em>socket</em> a un service correspondant ;</li>
<li>
<strong>mount</strong> : un système de fichiers ; ces unités viennent en plus du fichier <code>/etc/fstab</code> qui est utilisé directement ;</li>
<li>
<strong>swap</strong> : pour les partitions d’échange ;</li>
<li>
<strong>automount</strong> : un système de fichiers monté à la demande ;</li>
<li>
<strong>target</strong> : une macro‐unité qui permet de grouper plusieurs unités, par exemple <code>multi-user.target</code> ou <code>bluetooth.target</code> ;</li>
<li>
<strong>snapshot</strong> : comme <em>target</em>, ce sont des unités qui peuvent être utilisées pour sauver l’état actuel des services et les restaurer par la suite, par exemple avant de passer en veille ;</li>
<li>
<strong>device</strong> : un périphérique dans le système Linux ; peut être une source de dépendance via <code>udev</code> ;</li>
<li>
<strong>timer</strong> : activations à la sauce <code>cron</code>, en fonction de la date ;</li>
<li>
<strong>path</strong> : sert pour l’activation basée sur la présence ou la création de fichiers ou répertoires.</li>
</ul>
<p>Toutes ces unités peuvent avoir des dépendances (<em>Requires</em>) et des conflits (<em>Conflicts</em>) déclarés de façon explicite.</p>
<h3 id="toc-les-bonus">Les bonus</h3>
<ul>
<li>Pour chaque service, il est possible de régler de nombreux paramètres : limites, répertoire racine (<a href="https://fr.wikipedia.org/wiki/chroot" title="Définition Wikipédia">chroot</a>), <a href="https://fr.wikipedia.org/wiki/umask" title="Définition Wikipédia">umask</a>, priorité, paramètre « <a href="http://linux-mm.org/OOM_Killer">OOM killer</a> » (<em>out of memory</em>), les classes et les priorités d’ordonnancement et d’entrées‐sorties, l’affinité processeur, l’utilisateur, les groupes, les répertoires accessibles et les modes d’accès, les capacités, le répertoire temporaire, le réglage des <code>cgroups</code>…</li>
<li>Les flux <code>stdout</code> et <code>stderr</code> peuvent être redirigés vers le service de journalisation, vers <code>« /dev/kmsg »</code>, vers un terminal ou vers un fichier.</li>
<li>Intégration de <a href="https://fr.wikipedia.org/wiki/SELinux" title="Définition Wikipédia">SELinux</a>, des « <a href="http://en.wikipedia.org/wiki/Tcp_wrappers">TCP wrappers</a> », des modules d’authentification <a href="http://fr.wikipedia.org/wiki/Pluggable_Authentication_Modules">PAM</a>.</li>
<li>Chaque service a son propre <code>cgroup</code>.</li>
<li>Chaque connexion via un terminal est aussi placée dans son propre <code>cgroup</code>, ce qui permet de fermer complètement une session et d’isoler un peu mieux les utilisateurs (processeur, mémoire).</li>
<li>La syntaxe des fichiers de configuration suit celle bien connue des fichiers « <a href="http://standards.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html">.desktop</a> ».</li>
<li>Le système est compatible avec les anciens scripts SysVinit. Les informations LSB et <code>chkconfig</code> (de Red Hat) ainsi que celles de Debian et d’OpenSUSE sont utilisées lorsqu’elles sont disponibles. Sinon, l’ordre de démarrage dans <code>« /etc/rc.d/ »</code> est utilisé. systemd est également capable de lire le fichier PID pour retrouver un service. Ces données permettent d’émuler une configuration classique SysVinit, facilitant la transition.</li>
<li>Le fichier <code>« /etc/fstab »</code> est également lu comme s’il s’agissait d’un fichier de configuration de <code>systemd</code>.</li>
<li>Les fichiers natifs <code>systemd</code> masquent ces émulations, permettant de faire des paquets compatibles avec les deux systèmes, le nouveau masquant l’ancien si nécessaire.</li>
<li>Il existe un système de modèles pour éviter de dupliquer une configuration (par exemple, pour les 6 <code>getty</code> des terminaux virtuels habituellement lancés).</li>
<li>
<code>systemd</code> fourni une couche de compatibilité avec <code>« /dev/initctl »</code> permettant d’utiliser les vieux binaires, tels que <code>shutdown</code> ou <code>reboot</code>. Les ordres sont transmis à <code>systemd</code> via D-Bus. Il prend en charge également <code>kexec</code> qui permet de relancer le noyau Linux.</li>
<li>Il gère <code>utmp</code> et <a href="http://fr.wikipedia.org/wiki/Wtmp"><code>wtmp</code></a>, les journaux système enregistrant les connexions.</li>
<li>Chaque processus lancé est tracé par son heure de démarrage, de fin, son PID et son code de retour ; permettant d’analyser les anomalies.</li>
<li>
<code>systemd</code> est capable de se ré‐exécuter lui‐même, afin de faire une mise à jour, ou de passer d’un processus provenant d’un « <a href="http://fr.wikipedia.org/wiki/Ramdisk">RAM‐disque</a> » d’amorçage (<code>initrd</code>) au système final. Tout l’état courant est migré d’un processus à l’autre.</li>
<li>La mise en place des systèmes de fichiers virtuels est directement prise en charge par <code>systemd</code> (<code>/proc</code>, <code>/sys</code>, <code>/dev</code>), <a href="http://en.wikipedia.org/wiki/Binfmt_misc"><code>binfmt_misc</code></a> et <code>HugeTBLfs</code> sont gérés via <code>autofs</code>, ce qui évite d’avoir à les configurer en <code>root</code> ou à charger le module correspondant.</li>
<li>De nombreuses petites fonctions sont prises en charge directement sans passer par le lancement d’un script : définir le nom de la machine, sauver / restaurer les données aléatoires, initialiser la localisation, nettoyer les répertoires temporaires, configurer la console, le clavier, charger des modules. Cela a pour conséquence d’unifier ces fichiers de configuration sur toutes les distributions utilisant systemd.</li>
<li>Il existe un mode de démarrage interactif qui permet de confirmer chaque lancement de service en passant au noyau le paramètre <code>« systemd.confirm_spawn=1 »</code>.</li>
<li>
<code>systemd</code> gère le <a href="http://en.wikipedia.org/wiki/Readahead"><code>readahead</code></a> qui permet d’optimiser les lectures disque au démarrage en pré‐chargeant les blocs qui vont être nécessaires par la suite (en se basant sur un enregistrement d’un démarrage précédent).</li>
</ul>
<h3 id="toc-ladministration">L’administration</h3>
<p>L’administration se fait par l’intermédiaire de quelques commandes dédiées et quelques fichiers de configuration qui sont documentés via <a href="http://0pointer.de/public/systemd-man/">une vingtaine de pages de manuel</a>. Un certain nombre de pages liées à l’utilisation de <code>systemd</code> sont également modifiées.</p>
<h4 id="toc-définition-dun-service">Définition d’un service</h4>
<p>Lorsque l’on regarde les scripts d’initialisation d’un service contenu dans le dossier <code>« /etc/init.d »</code>, on constate que la plupart des scripts se ressemblent. L’information utile (programme à lancer, description du service, dépendances, niveaux de lancement) est complètement perdue dans le bruit généré par le code de gestion (création d’un fichier PID, s’assurer que le programme ne tourne pas déjà, gestion des cas d’utilisation…).</p>
<p>Systemd intègre toutes ces notions redondantes et permet à l’administrateur de définir un service de façon simple.</p>
<pre><code class="ini"><span class="k">[Unit]</span>
<span class="na">Description</span><span class="o">=</span><span class="s">ABRT Automated Bug Reporting Tool</span>
<span class="na">After</span><span class="o">=</span><span class="s">syslog.target</span>
<span class="k">[Service]</span>
<span class="na">Type</span><span class="o">=</span><span class="s">dbus</span>
<span class="na">BusName</span><span class="o">=</span><span class="s">com.redhat.abrt</span>
<span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/sbin/abrtd -d -s</span>
<span class="k">[Install]</span>
<span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span></code></pre>
<p>Ici, est défini le service <a href="https://fedorahosted.org/abrt/">ABRT</a>. Comme on le voit, la définition est assez simple :</p>
<ul>
<li>le service doit être lancé après syslog ;</li>
<li>il s’agit d’un service D-Bus répondant au nom « com.redhat.abrt » ;</li>
<li>la commande à exécuter est : <code>« /usr/sbin/abrtd -d -s »</code> ;</li>
<li>le service doit être exécuté lorsqu’on choisi un environnement cible multi‐utilisateur (le mode de fonctionnement habituel).</li>
</ul>
<p>Regardons un autre exemple ressemblant un peu plus à ce que l’on a l’habitude de voir avec les scripts SysVinit :</p>
<pre><code class="ini"><span class="k">[Unit]</span>
<span class="na">Description</span><span class="o">=</span><span class="s">Command Scheduler</span>
<span class="na">After</span><span class="o">=</span><span class="s">syslog.target</span>
<span class="k">[Service]</span>
<span class="na">EnvironmentFile</span><span class="o">=</span><span class="s">/etc/sysconfig/crond</span>
<span class="na">ExecStart</span><span class="o">=</span><span class="s">/usr/sbin/crond -n $CRONDARGS</span>
<span class="k">[Install]</span>
<span class="na">WantedBy</span><span class="o">=</span><span class="s">multi-user.target</span></code></pre>
<p>Il est toujours possible de définir un fichier contenant les paramètres à passer au service :</p>
<pre><code class="console"><span class="gp">$</span> cat /etc/sysconfig/crond
<span class="gp">#</span><span class="c1"># Settings for the CRON daemon.</span>
<span class="gp">#</span><span class="c1"># CRONDARGS= : any extra command-line startup arguments for crond</span>
<span class="go">CRONDARGS=</span></code></pre>
<p>Les fichiers de définition peuvent être trouvés dans les dossiers <code>« /etc/systemd/ »</code> et <code>« /lib/systemd/ »</code>. Le premier correspond à la configuration faite par l’administrateur, et le second aux fichiers livrés par la distribution.</p>
<h4 id="toc-gestion-des-services">Gestion des services</h4>
<p>Avec <code>systemd</code>, la gestion des services se fait maintenant par l’utilitaire <a href="http://0pointer.de/public/systemd-man/systemctl.html"><code>systemctl</code></a>.</p>
<p>Grâce à ce dernier, il est possible de lister toutes les unités présentes sur le système. Les commandes suivantes sont exécutées sur une distribution Fedora 15 :</p>
<pre><code class="console"><span class="gp">$</span> systemctl list-units
<span class="go">NIT LOAD ACTIVE SUB JOB DESCRIPTION</span>
<span class="go">dev-hugepages.automount loaded active waiting Huge Pages File System Automount Point</span>
<span class="go">dev-mqueue.automount loaded active waiting POSIX Message Queue File System Automount Point</span>
<span class="go">proc-sys...misc.automount loaded active running Arbitrary Executable File Formats File System Automount Point</span>
<span class="go">sys-kern...ebug.automount loaded active waiting Debug File System Automount Point</span>
<span class="go">sys-kern...rity.automount loaded active waiting Security File System Automount Point</span>
<span class="go">sys-devi...d-card0.device loaded active plugged N10/ICH 7 Family High Definition Audio Controller</span>
<span class="go">sys-devi...et-eth0.device loaded active plugged BCM4313 802.11b/g LP-PHY</span>
<span class="go">sys-devi...net-em2.device loaded active plugged RTL8101E/RTL8102E PCI Express Fast Ethernet controller</span>
<span class="go">sys-devi...da-sda1.device loaded active plugged Hitachi_HTS725025A9A364</span>
<span class="go">-.mount loaded active mounted /</span>
<span class="go">boot.mount loaded active mounted /boot</span>
<span class="go">home-spack-.gvfs.mount loaded active mounted /home/spack/.gvfs</span>
<span class="go">home.mount loaded active mounted /home</span>
<span class="go">media.mount loaded active mounted Media Directory</span>
<span class="go">mcelog.service loaded active running Machine Check Exception Logging Daemon</span>
<span class="go">mdmonitor.service loaded active running LSB: Start and stop the MD software RAID monitor</span>
<span class="go">netfs.service loaded active exited LSB: Mount and unmount network filesystems.</span>
<span class="go">NetworkManager.service loaded active running Network Manager</span>
<span class="go">nfslock.service loaded active running LSB: Start up the NFS file locking sevice</span>
<span class="go">ntpd.service loaded active running Network Time Service</span>
<span class="go">ntpdate.service loaded failed failed Set time via NTP</span>
<span class="go">udev.service loaded active running udev Kernel Device Manager</span>
<span class="go">dbus.socket loaded active running D-Bus System Message Bus Socket</span>
<span class="go">syslog.socket loaded active running Syslog Socket</span>
<span class="go">systemd-initctl.socket loaded active listening /dev/initctl Compatibility Named Pipe</span>
<span class="go">systemd-logger.socket loaded active running Stdio Syslog Bridge Socket</span>
<span class="go">systemd-shutdownd.socket loaded active listening Delayed Shutdown Socket</span>
<span class="go">udev.socket loaded active running udev Kernel Device Manager Socket</span>
<span class="go">sockets.target loaded active active Sockets</span>
<span class="go">sound.target loaded active active Sound Card</span>
<span class="go">swap.target loaded active active Swap</span>
<span class="go">sysinit.target loaded active active System Initialization</span>
<span class="go">syslog.target loaded active active Syslog</span>
<span class="go">time-sync.target loaded active active System Time Synchronized</span>
<span class="go">systemd-...ead-done.timer loaded active elapsed Stop Read-Ahead Data Collection 10s After Completed Startup</span>
<span class="go">systemd-...es-clean.timer loaded active waiting Daily Cleanup of Temporary Directories</span></code></pre>
<p>L’affichage a été réduit mais présente les différents éléments pris en compte par <code>systemd</code>. On retrouve donc les différentes unités précédemment listées.</p>
<p>Vous constaterez que le service <code>« ntpdate.service »</code> a échoué. Pour en savoir plus, nous pouvons utiliser la commande <code>systemctl</code> suivie de l’argument <code>« status »</code> et du nom de notre service :</p>
<pre><code class="console"><span class="gp">$</span> systemctl status ntpdate.service
<span class="go">ntpdate.service - Set time via NTP</span>
<span class="go"> Loaded: loaded (/lib/systemd/system/ntpdate.service)</span>
<span class="go"> Active: failed since Mon, 01 Aug 2011 16:01:49 +0200; 1h 58min ago</span>
<span class="go"> Process: 741 ExecStart=/etc/init.d/ntpdate start (code=exited, status=1/FAILURE)</span>
<span class="go"> CGroup: name=systemd:/system/ntpdate.service</span></code></pre>
<p>On voit alors la commande exécutée et le code de retour renvoyé par le service : <strong>1</strong>. Un coup d’œil au fichier <code>« /var/log/messages »</code> nous en dira plus :</p>
<pre><code class="console"><span class="gp">#</span> grep ntpdate /var/log/messages
<span class="go">Aug 1 16:01:49 spiro ntpdate[1654]: Can't find host 0.fedora.pool.ntp.org: Name or service not known (-2)</span>
<span class="go">Aug 1 16:01:49 spiro ntpdate[1654]: Can't find host 1.fedora.pool.ntp.org: Name or service not known (-2)</span>
<span class="go">Aug 1 16:01:49 spiro ntpdate[1654]: Can't find host 2.fedora.pool.ntp.org: Name or service not known (-2)</span>
<span class="go">Aug 1 16:01:49 spiro ntpdate[1654]: Can't find host 3.fedora.pool.ntp.org: Name or service not known (-2)</span>
<span class="go">Aug 1 16:01:49 spiro ntpdate[1654]: no servers can be used, exiting</span>
<span class="go">Aug 1 16:01:49 spiro systemd[1]: ntpdate.service: main process exited, code=exited, status=1</span>
<span class="go">Aug 1 16:01:49 spiro systemd[1]: Unit ntpdate.service entered failed state.</span></code></pre>
<p>À l’aide de <code>systemctl</code>, il est bien sûr possible de démarrer, stopper et redémarrer les services. Voici, par exemple, comment l’on redémarre le service de prise en charge du Bluetooth :</p>
<pre><code class="console"><span class="gp">#</span> systemctl restart bluetooth.service</code></pre>
<h4 id="toc-cgroups">cgroups</h4>
<p>Nous avons vu que <code>systemd</code> place chaque service dans un groupe distinct. Il serait donc intéressant d’identifier les différents groupes et les processus qu’ils contiennent.<br>
Pour cela, deux possibilités. Utiliser l’utilitaire <a href="http://fr.wikipedia.org/wiki/Ps_%28Unix%29"><code>ps</code></a> ou l’outil maison de <code>systemd</code> : <code>« systemd-cgls »</code>.</p>
<pre><code class="console"><span class="gp">$</span> ps waxf -eo <span class="s1">'user,pid,cgroup,command'</span>
<span class="go">USER PID CGROUP COMMAND</span>
<span class="go">root 1 name=systemd:/system /sbin/init</span>
<span class="go">root 367 cpu:/system/systemd-logger. /lib/systemd/systemd-logger</span>
<span class="go">root 390 cpu:/system/udev.service;na /sbin/udevd</span>
<span class="go">root 544 cpu:/system/udev.service;na \_ /sbin/udevd</span>
<span class="go">root 1450 cpu:/system/udev.service;na \_ /sbin/udevd</span>
<span class="go">root 685 cpu:/system/abrtd.service;n /usr/sbin/abrtd -d -s</span>
<span class="go">root 694 cpu:/system/crond.service;n /usr/sbin/crond -n</span>
<span class="go">root 717 cpu:/system/rsyslog.service /sbin/rsyslogd -n -c 5</span>
<span class="go">root 1086 cpu:/system/autofs.service; automount --pid-file /var/run/autofs.pid</span>
<span class="go">root 1127 cpu:/system/prefdm.service; /usr/sbin/gdm-binary -nodaemon</span>
<span class="go">root 1135 cpu:/system/prefdm.service; \_ /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1</span>
<span class="go">root 1139 cpu:/system/prefdm.service; \_ /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-GWn7Er/database -n</span>
<span class="go">root 1352 name=systemd:/user/spack/1 \_ pam: gdm-password</span>
<span class="go">spack 1374 name=systemd:/user/spack/1 \_ gnome-session</span>
<span class="go">spack 1526 name=systemd:/user/spack/1 \_ /usr/libexec/gnome-settings-daemon</span>
<span class="go">spack 1562 name=systemd:/user/spack/1 \_ /usr/bin/gnome-shell</span>
<span class="go">spack 1786 name=systemd:/user/spack/1 | \_ gnome-terminal</span>
<span class="go">spack 1791 name=systemd:/user/spack/1 | \_ gnome-pty-helper</span>
<span class="go">spack 1792 name=systemd:/user/spack/1 | \_ bash</span>
<span class="go">spack 1810 name=systemd:/user/spack/1 | \_ bash</span>
<span class="go">spack 1823 name=systemd:/user/spack/1 | \_ ps waxf -eo user,pid,cgroup,command</span>
<span class="go">spack 1569 name=systemd:/user/spack/1 \_ gnome-power-manager</span>
<span class="go">spack 1574 name=systemd:/user/spack/1 \_ nm-applet</span>
<span class="go">spack 1575 name=systemd:/user/spack/1 \_ abrt-applet</span>
<span class="go">spack 1578 name=systemd:/user/spack/1 \_ gnome-screensaver</span>
<span class="go">root 1151 cpu:/system/getty@.service/ /sbin/agetty tty2 38400</span>
<span class="go">root 1152 cpu:/system/getty@.service/ /sbin/agetty tty6 38400</span>
<span class="go">root 1155 cpu:/system/getty@.service/ /sbin/agetty tty4 38400</span>
<span class="go">root 1159 cpu:/system/getty@.service/ /sbin/agetty tty3 38400</span>
<span class="go">root 1160 cpu:/system/getty@.service/ /sbin/agetty tty5 38400</span></code></pre>
<pre><code class="console"><span class="gp">$</span> systemd-cgls
<span class="go">├ user</span>
<span class="go">│ └ spack</span>
<span class="go">│ └ 1</span>
<span class="go">│ ├ 1352 pam: gdm-password</span>
<span class="go">│ ├ 1374 gnome-session</span>
<span class="go">│ ├ 1383 dbus-launch --sh-syntax --exit-with-session</span>
<span class="go">│ ├ 1384 /bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session</span>
<span class="go">│ ├ 1445 /usr/libexec/gvfsd</span>
<span class="go">│ ├ 1521 /usr/libexec/gconfd-2</span>
<span class="go">│ ├ 1526 /usr/libexec/gnome-settings-daemon</span>
<span class="go">│ ├ 1529 /usr/bin/pulseaudio --start</span>
<span class="go">│ ├ 1562 /usr/bin/gnome-shell</span>
<span class="go">│ ├ 1569 gnome-power-manager</span>
<span class="go">│ ├ 1574 nm-applet</span>
<span class="go">│ ├ 1575 abrt-applet</span>
<span class="go">│ ├ 1578 gnome-screensaver</span>
<span class="go">│ ├ 1583 /usr/libexec/dconf-service</span>
<span class="go">│ ├ 1786 gnome-terminal</span>
<span class="go">│ ├ 1791 gnome-pty-helper</span>
<span class="go">│ ├ 1792 bash</span>
<span class="go">│ └ 1809 systemd-cgls</span>
<span class="go">└ system</span>
<span class="go"> ├ 1 /sbin/init</span>
<span class="go"> ├ getty@.service</span>
<span class="go"> │ ├ tty5</span>
<span class="go"> │ │ └ 1160 /sbin/agetty tty5 38400</span>
<span class="go"> │ ├ tty3</span>
<span class="go"> │ │ └ 1159 /sbin/agetty tty3 38400</span>
<span class="go"> │ ├ tty4</span>
<span class="go"> │ │ └ 1155 /sbin/agetty tty4 38400</span>
<span class="go"> │ ├ tty6</span>
<span class="go"> │ │ └ 1152 /sbin/agetty tty6 38400</span>
<span class="go"> │ └ tty2</span>
<span class="go"> │ └ 1151 /sbin/agetty tty2 38400</span>
<span class="go"> ├ prefdm.service</span>
<span class="go"> │ ├ 1127 /usr/sbin/gdm-binary -nodaemon</span>
<span class="go"> │ ├ 1135 /usr/libexec/gdm-simple-slave --display-id /org/gnome/DisplayManager/Display1</span>
<span class="go"> │ ├ 1139 /usr/bin/Xorg :0 -background none -verbose -auth /var/run/gdm/auth-for-gdm-GWn7Er/database -nolisten tcp vt1</span>
<span class="go"> │ └ 1363 /usr/bin/gnome-keyring-daemon --daemonize --login</span>
<span class="go"> ├ autofs.service</span>
<span class="go"> │ └ 1086 automount --pid-file /var/run/autofs.pid</span>
<span class="go"> ├ dbus.service</span>
<span class="go"> │ ├ 707 /bin/dbus-daemon --system --address=systemd: --nofork --systemd-activation</span>
<span class="go"> │ ├ 720 /usr/libexec/polkit-1/polkitd</span>
<span class="go"> │ ├ 750 /usr/sbin/modem-manager</span>
<span class="go"> │ ├ 816 /usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -B -u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplic...</span>
<span class="go"> │ ├ 1037 /usr/libexec/colord</span>
<span class="go"> │ ├ 1282 /usr/libexec/udisks-daemon</span>
<span class="go"> │ ├ 1283 udisks-daemon: not polling any devices</span>
<span class="go"> │ ├ 1288 /usr/libexec/upowerd</span>
<span class="go"> │ └ 1559 /usr/libexec/packagekitd</span>
<span class="go"> ├ crond.service</span>
<span class="go"> │ └ 694 /usr/sbin/crond -n</span>
<span class="go"> ├ rsyslog.service</span>
<span class="go"> │ └ 717 /sbin/rsyslogd -n -c 5</span>
<span class="go"> ├ abrtd.service</span>
<span class="go"> │ └ 685 /usr/sbin/abrtd -d -s</span>
<span class="go"> ├ home.mount</span>
<span class="go"> ├ boot.mount</span>
<span class="go"> ├ fsck@.service</span>
<span class="go"> ├ udev.service</span>
<span class="go"> │ ├ 390 /sbin/udevd</span>
<span class="go"> │ ├ 544 /sbin/udevd</span>
<span class="go"> │ └ 1450 /sbin/udevd</span>
<span class="go"> ├ systemd-logger.service</span>
<span class="go"> │ └ 367 /lib/systemd/systemd-logger</span>
<span class="go"> └ media.mount</span></code></pre>
<p>Vous l’aurez constaté, <code>systemd</code> gère non seulement les ressources du système, mais aussi celles des utilisateurs.</p>
<h2 id="toc-Écrire-un-service">Écrire un service</h2>
<p>L’utilisation de <code>systemd</code> simplifie un certain nombre de choses dans l’écriture d’un service :</p>
<ul>
<li>il n’est plus nécessaire de se relancer pour passer en arrière‐plan (<em>fork</em>), et encore moins de le faire deux fois (<em>double‐fork</em>) ;</li>
<li>il n’est plus nécessaire d’implémenter de mécanisme pour changer d’utilisateur, pour modifier les privilèges, pour faire un <code>chroot</code> ; tout cela étant pris en charge par <code>systemd</code> ;</li>
<li>avec les <code>cgroups</code>, il n’est plus nécessaire d’écrire un fichier PID permettant de retrouver le service via son identifiant de processus ;</li>
<li>pour les cas simples, il n’est plus nécessaire de mettre en place une interface vers le service de journalisation des événements, les sorties classiques étant gérées comme des journaux (cela ne permet toutefois pas de spécifier la sévérité) ;</li>
<li>il n’est plus nécessaire de configurer et de créer les <em>sockets</em>.</li>
</ul>
<p>Ces recommandations sont très semblables à celles d’Apple pour utiliser <code>launchd</code>. Pour les services écrits de façon classique, <code>systemd</code> dispose de mécanismes de compatibilité afin de pouvoir les démarrer selon l’ancienne mode. Enfin, il est tout à fait possible — et recommandé — d’écrire des services qui fonctionnent dans tous les modes (autonomes ou <code>systemd</code>), évitant de produire une version spéciale ou de créer une branche.</p>
<p><code>systemd</code> vient avec un kit d’intégration en <em>C</em>, qui facilite l’intégration dans un service. Lennart a publié deux notes de documentation et une page de manuel très complète :</p>
<ul>
<li>une note pour expliquer pas à pas <a href="http://0pointer.de/blog/projects/socket-activation.html">les modifications nécessaires du code et de la configuration</a> ;</li>
<li>une note décrivant un <a href="http://0pointer.de/blog/projects/socket-activation2.html">cas pratique avec CUPS</a> ;</li>
<li>la page de manuel « <a href="http://0pointer.de/public/systemd-man/daemon.html">daemon (7)</a> ».</li>
</ul>
<h2 id="toc-conclusion">Conclusion</h2>
<p>Au travers de cet article vous a été présenté un sous‐ensemble des fonctionnalités offertes par <code>systemd</code>. Il repense totalement la gestion des processus des systèmes basés sur le noyau Linux, et utilise pleinement les technologies offertes par ce dernier.</p>
<p>Plusieurs distributions intègrent ou vont intégrer <code>systemd</code>. D’après l’article concernant <a href="http://en.wikipedia.org/wiki/Systemd">systemd</a> sur Wikipédia, il est utilisé depuis <a href="https://fr.wikipedia.org/wiki/Fedora" title="Définition Wikipédia">Fedora</a> 15, et est optionnel dans Fedora 14. <a href="https://fr.wikipedia.org/wiki/openSUSE" title="Définition Wikipédia">openSUSE</a> prévoyait de l’intégrer dans la version 11.4, mais cela semble être repoussé à la 12.1. <a href="https://fr.wikipedia.org/wiki/Mandriva" title="Définition Wikipédia">Mandriva</a> 2011 est prévue avec. <a href="http://fr.wikipedia.org/wiki/Arch_Linux" title="Définition Wikipédia">Arch Linux</a> a un paquet expérimental. <a href="https://fr.wikipedia.org/wiki/Debian" title="Définition Wikipédia">Debian</a> a un paquet dans <em>« unstable »</em> et devrait permettre de <a href="http://wiki.debian.org/systemd">choisir un système ou l’autre</a> dans une prochaine version. <a href="https://fr.wikipedia.org/wiki/Gentoo" title="Définition Wikipédia">Gentoo</a> rend <code>systemd</code> accessible dans <em>« testing »</em>. Le grand absent est <a href="https://fr.wikipedia.org/wiki/Ubuntu" title="Définition Wikipédia">Ubuntu</a>, qui a beaucoup investi dans <a href="https://fr.wikipedia.org/wiki/Upstart" title="Définition Wikipédia">Upstart</a> et n’a pas manifesté, pour l’instant, de volonté de passer à <code>systemd</code> (bien qu’un <a href="https://wiki.ubuntu.com/systemd">début d’intégration</a> existe).</p>
<p>Cet outil à tout faire, semble faire un pied de nez à la <a href="http://fr.wikipedia.org/wiki/Philosophie_d%27Unix">philosophie d’UNIX</a> en combinant plusieurs fonctions en un seul programme. D’un autre côté, le système de démarrage actuel montre ses limites.</p>
<p>La gestion de l’initialisation est très importante pour le système. On peut donc se demander s’il est judicieux d’inclure tant de fonctionnalités dans un programme critique ? Cependant, avec les contraintes de performances et la complexité des systèmes actuels, n’est‐ce pas un mal nécessaire pour gérer efficacement les processus exécutés sur nos systèmes ?</p>
</div><div><a href="https://linuxfr.org/news/evolutions-techniques-de-systemd.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/86941/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/evolutions-techniques-de-systemd#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/86941/comments.atomtag:linuxfr.org,2005:Diary/309792011-04-08T16:22:54+02:002011-04-08T16:22:54+02:00Centralisation des logs, interface de consultationLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<p><em>(C'est vendredi, mais ça n'en fait pas une obligation de troller.)</em></p>
<p>Si comme moi vous avez à gérer plusieurs serveurs Linux, si vous avez fait de la virtualisation ou si vous utilisez LTSP, vous vous retrouvez avec pleins de machines qui produisent chacune leurs logs. La gestion par fichiers dans /var/log arrive rapidement à ses limites.</p>
<p>Heureusement, les systèmes syslog modernes permettent facilement de centraliser les logs sur une machine et de les placer dans une base de données. La base permettant de rechercher, de filtrer, de purger et de brancher tout un tas de module (synthèse, alerte par email...) très facilement.</p>
<p>Sur une debian moderne, on trouve dsyslog, rsyslog et syslog-ng qui sont tous trois capables d'enregistrer les données dans une base PostgreSQL ou MySQL.</p>
<p>Par contre, pour ce qui est de l'exploitation, la seule application que j'ai trouvé est php-syslog-ng, (qui n'est pas packagé dans debian), et qui est devenu récemment logzilla, logiciel propriétaire incompatible avec mon association humanitaire. La branche opensource a été soigneusement masquée (documentation et sources masqués).<br />
La démo montre en prime une interface lourde, bien loin de ce que l'on peut faire à coup de grep dans des fichiers.</p>
<p>Connaissez-vous une application web, de préférence PHP, capable de consulter la base et d'y faire des tris et des recherches ?</p><div><a href="https://linuxfr.org/users/skc/journaux/centralisation-des-logs-interface-de-consultation.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/85578/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/centralisation-des-logs-interface-de-consultation#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/85578/comments.atomtag:linuxfr.org,2005:Diary/306282010-12-31T14:15:05+01:002010-12-31T14:15:05+01:00De la capacité d'un lien Ethernet
Bonjour chers amis.<br />
<br />
Comme c'est vendredi, j'en profite pour écrire un journal culturel.<br />
<br />
On lit un peu partout à gauche et à droite qu'une liaison 100Mbps que l'on a tous chez soi (sauf au WC où on utilise le Wifi) est capable de supporter un débit théorique de 12.5Mo/s. J'imagine que les auteurs de ces lignes ont naïvement calculé que l'octet étant traditionnellement valorisé à 8 bits, il suffisait de faire une petite division pour obtenir le débit en Mo/s.<br />
<br />
Seulement voila, en réalité, dans 100Mbps, vous vous doutez bien que selon une tradition marketing largement établie, on prends la valeur la plus élevée, soit la fréquence de transmission des informations. En réalité, d'après Wikipedia, une liaison 100Mbps est en réalité une liaison à 25 MHz qui transferts les bits 4 par 4 [1]. Il s'agit donc du débit le plus brut possible, et non pas le débit auquel on va pouvoir transférer ses petits (ou gros) fichiers (En réalité en 100BASE-TX on ajoute des bits pour avoir un signal plus facile à transmettre, la fréquence physique sur le cable est donc un peu plus élevée).<br />
<br />
Il est temps de lister les lignes que l'on a sur la facture:<br />
<br />
Premièrement, l'accès à la ligne ne doit pas se faire n'importe comment. La norme impose un délais de 12 octets entre deux trames [2].<br />
Rentrons dans la trame ethernet: [3] Elle est composée d'un préambule de 8 octets de valeurs constantes, de 14 octets d'entête (adresses et taille), des données pour un maximum de 1500 octets, et de 4 octets de CRC.<br />
<br />
Bilan: Ethernet 38 octets de taxe sur 1538<br />
<br />
On continue a remonter les couches OSI comme à l'école, et on tombe sur IP. Pour éviter de vous faire coucher tard, nous négligerons l'impact de la résolution ARP.<br />
<br />
Hopla, trame IPv4 de 1500 octets: <br />
20 octets d'entête (version cheap) [4].<br />
<br />
Continuons, en remontant on a UDP et TCP. Selon ce que vous utilisez, ce sera l'un ou l'autre. En dehors de NFSv3, je pense que tous les autres protocoles utiliseront TCP (FTP, HTTP, SSH, SMB/CIFS, NFSv4...).<br />
<br />
Chez UDP, la facture est de 8 octets [5], mais en TCP on a le droit à une taxe plus importante: 20 octets [6].<br />
<br />
On va abandonner là le calcul pour le cas UDP, parce que je ne sais pas calculer le coût des couches supérieures.<br />
<br />
Pour TCP, on va calculer le total en négligeant la facture des couches supérieures, une réponse HTTP contient souvent 300 à 400 octets d'entête, ce qui est négligeable à coté d'un fichier de 1Mo. Les entêtes ne sont pas répétés dans chaque paquet.<br />
<br />
Au final, pour une fenêtre temporelle de 1538 octets, nous avons 1480 octets d'octets utiles, ce qui donne un taux utile de 96.2%, soit un débit maximal d'environ 96.2Mbps ou encore 12Mo/s et non pas 12.5Mo/s.<br />
<br />
Voila, la vérité devait être rétablie.<br />
<br />
[1] <a href="http://en.wikipedia.org/wiki/Fast_Ethernet#General_Design">http://en.wikipedia.org/wiki/Fast_Ethernet#General_Design</a><br />
[2] <a href="http://en.wikipedia.org/wiki/Ethernet_frame#Interframe_gap">http://en.wikipedia.org/wiki/Ethernet_frame#Interframe_gap</a><br />
[3] <a href="http://en.wikipedia.org/wiki/Ethernet_frame#Structure">http://en.wikipedia.org/wiki/Ethernet_frame#Structure</a><br />
[4] <a href="http://en.wikipedia.org/wiki/IPv4#Packet_structure">http://en.wikipedia.org/wiki/IPv4#Packet_structure</a><br />
[5] <a href="http://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_structure">http://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_s(...)</a><br />
[6] <a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure">http://en.wikipedia.org/wiki/Transmission_Control_Protocol#T(...)</a><div><a href="https://linuxfr.org/users/skc/journaux/de-la-capacit%C3%A9-dun-lien-ethernet.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/56885/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/de-la-capacit%C3%A9-dun-lien-ethernet#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/56885/comments.atomtag:linuxfr.org,2005:News/240932008-05-16T18:32:53+02:002008-05-16T18:32:53+02:00Gestion de l'énergie : se dépêcher de ne rien faire<div>Je vous propose la traduction de deux courts articles de Matthew Garrett publié sur Livejournal sur l'historique et l'intérêt des états de sommeil des processeurs x86 modernes et de la réduction de fréquence.
<br />
<br />
« <i>Certaines personnes écrivent des logiciels qui vous permettent de choisir différents réglages selon que vous être branché sur le secteur ou sur batterie. Typiquement, l'un de ces choix vous permet de réduire la fréquence du processeur lorsque vous êtes sur batterie. Ceci est mauvais. Ceci est faux. Les personnes qui implémentent ces programmes sont dangereuses...</i> »</div><ul><li>lien nᵒ 1 : <a title="http://mjg59.livejournal.com/" hreflang="en" href="https://linuxfr.org/redirect/57232">Journal de Matthew Garret</a></li><li>lien nᵒ 2 : <a title="http://mjg59.livejournal.com/88608.html" hreflang="en" href="https://linuxfr.org/redirect/57233">Le premier article</a></li><li>lien nᵒ 3 : <a title="http://mjg59.livejournal.com/88951.html" hreflang="en" href="https://linuxfr.org/redirect/57234">Le complément</a></li></ul><div>Les processeurs modernes sont fantastiques. Ils ont toutes sortes de fonctionnalités d'économie d'énergie ; c'est l'un de ces cas où tout le monde peut économiser de l'argent, augmenter les performances et prétendre préserver l'environnement en même temps. Tout le monde y gagne.
<br />
<br />
Hmmm, tout le monde y gagne à condition que votre logiciel ne soit pas mal fichu.
<br />
<br />
J'ai déjà écrit à propos des bénéfices des noyaux sans horloge (tickless), de la réduction du nombre de réveil du processeur et du fait de passer plus de temps dans les états C[0a] par le passé ; si vous ne connaissez pas ces choses, je vous invite à aller les lire en premier[0b]. Cette fois ci, je vais me concentrer sur un autre niveau matériel, et sur un autre niveau de choses mal fichues.
<br />
<br />
Depuis longtemps, les ordinateurs portables supportent le changement de fréquence du processeur selon que le portable est branché ou sur batterie. La consommation du processeur est proportionnelle à la fréquence, donc abaisser la fréquence entraîne une augmentation de l'autonomie. Bien sur, cela signifie aussi qu'il faut plus de temps pour faire une tache donnée. La raison pour laquelle ceci était quand même un gain, est qu'à cette époque les processeurs consommaient exactement autant d'énergie, qu'ils fassent quelque chose ou non. La société <a href="http://fr.wikipedia.org/wiki/Transmeta">Transmeta</a> a introduit une technologie appelée Longrun dans leurs processeurs <a href="http://fr.wikipedia.org/wiki/Crusoe">Crusoe</a> ; permettant de faire baisser simultanément la fréquence et la tension du processeur. Comme la consommation électrique est proportionnelle au carré de la tension, même une petite réduction de la tension provoque une économie d'énergie valable. Comme c'était la seule innovation intéressante apportée par Transmeta dans le monde du x86[1], de manière toute logique, cette amélioration a été copiée par tout le monde : Intel a développé sa technologie Enhanced Speedstep, AMD a proposé PowerNow et VIA a Longhaul.
<br />
<br />
Naturellement, réduire la fréquence du processeur augmente l'autonomie. Tout le monde est content ?
<br />
<br />
Non[2].
<br />
<br />
Le problème est que de nos jours, les processeurs ne consomment pas autant d'énergie lorsqu'ils ne font rien que lorsqu'ils travaillent. Les niveaux C préalablement mentionnés signifient qu'un processeur en sommeil ne consomme qu'un faible pourcentage de l'énergie consommée par un processeur actif - un processeur Intel ultra-basse tension a une consommation de l'ordre du watt. Exécuter du code, même à la plus basse tension et fréquence, consomme bien plus d'énergie. Par conséquent, nous voulons conserver le processeur en sommeil aussi longtemps que possible. La façon la plus facile de faire cela est de ne jamais rien exécuter, mais cela n'est pas une option valable. La solution alternative est de fonctionner lorsque cela est nécessaire, mais de s'assurer que cela soit fait le plus rapidement possible afin de retourner en état de sommeil. De manière contre-intuitive, cela signifie basculer à la plus haute tension et à la plus haute fréquence, exécuter le code, puis retourner en état de sommeil. En allant plus vite, nous économisons de l'énergie[3].
<br />
<br />
En résumé, la seule façon logique d'utiliser un processeur est de le faire fonctionner aussi rapidement que possible afin de lui permettre de passer le plus de temps possible en état de sommeil, situation dans laquelle la fréquence et la tension sont au minimum. La seule façon *logique*.
<br />
<br />
Certaines personnes écrivent des logiciels qui vous permettent de choisir différents réglages selon que vous être branché sur le secteur ou sur batterie. Typiquement, l'un de ces choix vous permet de réduire la fréquence du processeur lorsque vous êtes sur batterie. Ceci est mauvais. Ceci est faux. Les personnes qui implémentent ces programmes sont dangereuses. Ne les écoutez pas. N'approuvez pas leurs produits et leurs communiqués. Ne laissez pas votre fils aîné avoir des relations conjugales avec eux. Cela réduira l'autonomie de votre batterie, augmentera la température de votre maison, tuera les bébés phoques, fera monter le niveau de l'océan et emportera votre voiture. Si vous l'utilisez déjà, assurez vous qu'il utilise systématiquement la politique "ondemand" de cpufreq et qu'il ne limite pas les fréquences utilisées. J'incendierai personnellement tout contrevenant[4].
<br />
<br />
La seule raison légitime pour réduire la fréquence du processeur est de limiter la surchauffe (ce qui doit être fait dans le noyau - avoir un programme utilisateur chargé d'assurer le bon fonctionnement de la machine est une ânerie) ou rendre la machine plus silencieuse. Et si vous voulez une machine plus silencieuse, il devrait y avoir une case à cocher : "<i>Réduire les performances afin de réduire le bruit</i>" qui prenne en compte toutes les sources de chaleur de votre machine et non juste le processeur. Encourager la gestion du niveau sonore en demandant aux utilisateurs de réduire la puissance de leurs processeurs est une façon de dire "<i>Regardez, nous avons mal conçu le système !</i>". Laisser l'utilisateur choisir une politique de gestion du processeur ou une fréquence particulière n'est pas une bonne chose. Ne le faites-pas, à moins de vouloir voir des chatons morts, livrés par UPS.
<br />
<br />
<b>[0a]</b> NdT : Les états C (C1, C2...) sont des états <a href="http://fr.wikipedia.org/wiki/ACPI" title="Définition Wikipédia">ACPI</a> normalisés dans lesquels il est possible de basculer le processeur afin lui faire économiser de l'énergie ; cela se traduit par un temps de réponse plus important, la purge des caches, l'arrêt de certaines horloges internes... Le processeur ne peut exécuter des instructions qu'au niveau C0, le retour à cet état est d'autant plus long que le processeur est à un niveau de sommeil profond.
<br />
<br />
<b>[0b]</b> NdT : Ces articles ne sont pas traduits ici, mais sur l'absence d'horloge, je vous invite à lire "Timers haute résolution et horloge dynamique" : <a href="http://linuxfr.org/2006/06/30/21038.html">http://linuxfr.org/2006/06/30/21038.html</a>
<br />
<br />
<b>[1]</b> Et, probablement, toutes les licences qu'Intel et les autres ont fini par acquérir, ce qui transforme Transmeta en entreprise de gestion de la propriété intellectuelle et non en fabricant de processeur, mais ce n'est pas notre sujet.
<br />
<br />
<b>[2]</b> Même en ignorant toutes les personnes qui sont mécontentes pour des raisons totalement étrangères au sujet comme ceux qui se sont cogné le petit orteil ce matin ou ceux dont la famille a été soudainement assassinée.
<br />
<br />
<b>[3]</b> Il y a un cas particulier ici : c'est celui d'un système qui est constamment occupé. Imaginons que nous divisons par deux la vitesse du processeur. Avec la réduction de tension, cela entraîne une consommation réduite à 20% de la consommation initiale. Bien évidement, toutes les taches prennent maintenant deux fois plus de temps ; et votre écran, votre mémoire, votre disque dur, chipset et tout le reste continuent à consommer de l'énergie ; au final vous consommez deux fois plus d'énergie qu'il en aurait fallu à pleine vitesse. En faisant le calcul, on détermine que l'on économise de l'énergie si la consommation du processeur à pleine vitesse est de plus de 1,7 fois le reste de la plate-forme. Dans le monde réel, les choses se compliquent car les autres composants consomment également plus d'énergie s'ils fonctionnent plus longtemps : le disque dur sera actif pendant plus longtemps, le bus mémoire sera occupé pendant plus longtemps... Vous n'êtes pas, en principe, dans ce cas de 1,7 fois plus.
<br />
<br />
<b>[4]</b> Bien que la combustion de votre corps provoque une émission de carbone, la réduction énergétique consécutive entraîne un bilan positif sur le long terme.
<br />
<br />
<br />
<span>Éclaircissements postés le lendemain:</span>
<br />
<br />
Mon précédent article a été un peu trompeur sur un point : le débat sur la consommation d'un processeur à fréquence réduite. Le problème est que de nos jours, diviser par deux la fréquence d'un processeur ne réduit pas par deux la consommation électrique (voir les graphiques des diapositives de Arjan à l'OSCON l'année dernière par exemple). Je suppose que cela est dû aux mémoires cache qui représentent une part importante de la consommation. Réduire la fréquence ne réduit pas l'énergie nécessaire pour maintenir le contenu de ce cache ; par conséquent, la réduction énergétique est plus faible que prévue. Les niveaux C de sommeil les plus profonds désactivent le cache et économisent plus d'énergie.
<br />
<br />
Par conséquent, si diviser par deux la fréquence signifie que tout prend deux fois plus de temps mais ne réduit pas par deux la consommation électrique, quel est l'intérêt d'avoir des fréquences réduites ? Il faut un certain délai et une certaine quantité d'énergie pour changer d'état C ; et si le choix est entre basculer continuellement de la pleine vitesse à l'état C4 ou simplement rester à vitesse réduite (en passant éventuellement à l'état C1 ou C2), alors exécuter le programme à la plus faible fréquence peut être bénéfique. La politique "<i>ondemand</i>" du noyau Linux prend en compte la charge du processeur à travers le temps ; si une certaine valeur de seuil n'est pas atteinte, il considérera qu'il vaut mieux rester à la plus basse fréquence.</div><div><a href="https://linuxfr.org/news/gestion-de-lenergie-se-depecher-de-ne-rien-faire.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/23198/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/gestion-de-lenergie-se-depecher-de-ne-rien-faire#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/23198/comments.atomtag:linuxfr.org,2005:News/239692008-04-15T21:39:57+02:002008-04-15T21:39:57+02:00Effets pervers du modèle de sécurité BitFrost de OLPC<div><a href="http://fr.wikipedia.org/wiki/One_Laptop_per_Child">OLPC</a> : One Laptop Per Child (un portable par enfant) est un projet lancé par des professeurs du <a href="http://fr.wikipedia.org/wiki/Massachusetts_Institute_of_Technology">MIT</a> aux États-Unis qui a pour but de promouvoir un ordinateur portable à 100 dollars US pour permettre à chaque enfant dans le monde l'accès à la connaissance et aux formes modernes d'éducation. Déjà commandé à plus de 600 000 exemplaires, il est principalement destiné aux pays où les moyens financiers, l'infrastructure électrique et l'accès à Internet ne permettent pas d'utiliser du matériel classique.
<br />
<br />
L'ordinateur en lui même s'appelle le XO, et il implémente un modèle de sécurité appelé <a href="http://fr.wikipedia.org/wiki/Bitfrost">BitFrost</a> qui impose un certain nombre de principes adaptés aux utilisateurs et aux infrastructures dans lesquelles le XO est censé être utilisé.
<br />
<br />
À l'occasion de la conférence UPSEC (USENIX Usability, Psychology and Security), trois personnes ont publié un document qui analyse de façon pertinente les effets pervers de certaines des mesures de sécurité de BitFrost. Le document ne propose pas de solution magique, mais invite à réfléchir sur les implications et sur les manques du modèle BitFrost afin de le compléter ou de le faire évoluer en prenant en compte les différents sujets évoqués.</div><ul><li>lien nᵒ 1 : <a title="http://fr.wikipedia.org/wiki/One_Laptop_per_Child" hreflang="fr" href="https://linuxfr.org/redirect/56835">OLPC sur Wikipedia</a></li><li>lien nᵒ 2 : <a title="http://www.cosic.esat.kuleuven.be/publications/article-1042.pdf" hreflang="en" href="https://linuxfr.org/redirect/56836">Chilling Effects of the OLPC XO Security Model (PDF)</a></li><li>lien nᵒ 3 : <a title="http://www.usenix.org/event/upsec08/tech/full_papers/patterson/patterson_html/" hreflang="en" href="https://linuxfr.org/redirect/56837">Chilling Effects of the OLPC XO Security Model (HTML)</a></li><li>lien nᵒ 4 : <a title="https://linuxfr.org//2007/02/15/22069.html" hreflang="fr" href="https://linuxfr.org/redirect/56840">DLFP : Bitfrost : Un nouveau modèle de sécurité</a></li></ul><div>Ce qui suit est un rapide survol des points abordés par le document référencé:
<br />
<br />
<b>1. Introduction</b>
<br />
Afin d'éviter le vol, la dégradation, le piratage, l'accès aux données personnelles des XO, un certain nombre de mesures ont été implémentées directement au niveau matériel et logiciel au cœur de l'ordinateur. Appelé BitFrost, ce modèle de sécurité part d'un bon sentiment mais a des conséquences qui risquent d'aller à l'inverse des buts fixés.
<br />
<br />
<b>2. Procédure d'attribution</b>
<br />
Afin de limiter l'utilisation du XO aux personnes légitimes, une procédure d'activation doit être jouée avant de pouvoir l'utiliser. Le processus d'activation permet d'associer chaque ordinateur à une personne, permet la création d'une identité numérique pour signer les échanges et l'identification du propriétaire légitime en cas de vol.
<br />
<br />
Le premier démarrage de la machine doit se faire à portée d'un serveur d'activation/sauvegarde (Ordinateur classique équipé du WiFi et d'Internet et qui a reçu les certificats correspondants aux XO reçus). A cette occasion, la WebCam du XO prend une photo de l'enfant propriétaire et lui demande de saisir son nom. Ces informations forment une clef d'attribution appelée Identité Numérique (Digital Identity) qui est conservée sur le XO, sur le serveur d'activation et envoyé également sur le serveur de sauvegarde national.
<br />
<br />
Le serveur local sert ensuite de serveur de sauvegarde en utilisant une identification réciproque. Les XO forment un réseau maillé dans lequel les machines servent de relais les unes aux autres pour partager et propager l'accès à Internet.
<br />
<br />
L'identité numérique est utilisée pour identifier l'utilisateur dans toutes ses communications (email, requêtes HTTP) afin d'éviter les messages anonymes et l'usurpation d'identité.
<br />
<br />
Tous les jours, le XO se connecte au serveur d'activation national pour vérifier la légitimité de l'utilisateur ; permettant de désactiver un ordinateur volé. Si le serveur n'a pas pu être contacté pendant plus de 21 jours, la machine se désactive également.
<br />
<br />
<b>3. Limites du système</b>
<br />
Voici les principaux points reprochés à ce modèle :
<br />
<ol><li>Les données (Documents utilisateurs et identité numérique) sont par principe sauvegardés sur le serveur national ; l'enfant n'a pas le choix de l'entité à qui il veut les confier. Toute compromission de ces serveurs entraîne la compromission de l'ensemble des XO du pays. C'est la même entité qui gère l'identité et les sauvegardes des données utilisateurs.
<br />
L'usurpation des clefs du serveur de sauvegarde donne également accès à toutes les informations des XO qui en dépendent.
<br />
</li><li>La compromission des serveurs entraîne la compromission des identités numériques, permettant l'usurpation de toutes les identités récupérées.
<br />
</li><li>La signature systématique fait qu'aucun mécanisme de communication confidentiel n'est possible. Les pays du tiers monde dans lesquels cette solution est prévue pour être déployée sont sujets de façon chronique à la corruption et à l'ingérence ; on peut imaginer qu'un gouvernement peu scrupuleux des libertés individuelles n'hésitera pas à filtrer et punir les personnes tenant des propos critiquant le gouvernement ; exprimant des propos politiques ou religieux non conformes. Ce genre de loi existe dans plusieurs pays.
<br />
</li><li> Cette signature, toujours, interdit l'utilisation des OLPC comme système de vote à bulletin secret.
<br />
</li><li>En cas de catastrophe naturelle ou de tout autre évènement entraînant la perte de la connexion internet pour une longue durée, la limitation à 21 jours va entraîner la désactivation de tous les XO, alors qu'ils pourraient justement permettre d'aider les gens.
<br />
</li><li>Les instances contrôlant les serveurs nationaux peuvent désactiver comme ils le souhaitent n'importe quel XO pour n'importe quelle raison ; opposition politique, représailles, etc. Ce moyen de pression peut être utilisé sans aucun rapport avec l'éducation ou l'utilisation prévue du XO et donne plus de pouvoir au gouvernement. Le document insiste sur le fait que les victimes de telles mesures touchent des enfants à un âge où l'on apprend à exprimer ses opinions et où l'on est très sensible à la critique, ce genre de mesure peut avoir des impacts importants sur le développement social des enfants.
<br />
</li></ol><b>4. Conclusion</b>
<br />
Le document ne propose pas de solution magique, mais invite à réfléchir sur ces implications et sur les manques du modèle BitFrost afin de le compléter ou de le faire évoluer en prenant en compte les différents sujets évoqués.</div><div><a href="https://linuxfr.org/news/effets-pervers-du-modele-de-securite-bitfrost-de-olpc.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/23076/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/effets-pervers-du-modele-de-securite-bitfrost-de-olpc#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/23076/comments.atomtag:linuxfr.org,2005:Diary/263362008-03-20T10:20:20+01:002008-03-20T10:20:20+01:00Gpascompris
Vous avez un ou deux vieux sharewares qui ne se vendent pas ?<br />
Emballez les avec quelques CD de logiciel libre repackagés avec votre marque; proposez le lot à un tarif cassé; vous n'avez plus qu'à inonder le marcher:<br />
<br />
<a href="http://www.cdearth.com/">http://www.cdearth.com/</a><br />
<br />
Le jeu de la journée: retrouver les logiciels libres dont le nom n'est pas donné.<div><a href="https://linuxfr.org/users/skc/journaux/gpascompris.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/52728/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/gpascompris#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/52728/comments.atomtag:linuxfr.org,2005:Diary/259092007-12-31T12:07:25+01:002007-12-31T12:07:25+01:00De la qualité des lecteurs de DVD Vidéo économiques
<b>Attention:</b> Ce journal n'a aucun rapport avec Linux, il est long et présente un intérêt discutable.<br />
<br />
<b>Introduction</b><br />
Partisan des choses qui fonctionnent simplement, j'ai décidé de me simplifier la lecture de DVD par l'achat d'un lecteur dédié à cela (à l'inverse de <a href="http://www.copinedegeek.com/article.php3?id_article=184">http://www.copinedegeek.com/article.php3?id_article=184</a> ).<br />
<br />
J'ai donc acheté pour moins de 30€ un lecteur de DVD de Salon de fabrication économique sur un grand site de commerce en ligne.<br />
<br />
Après quelques DVD, le constat est mitigé. Oui le lecteur est de fabrication économique, visiblement la conception aussi a été économique.<br />
<br />
<b>Ouverture</b><br />
Quelques coups de tournevis et de multimètre plus tard on peut constater que:<ul><br />
<br />
<li>L'alimentation est une belle alimentation dans la plus pure tradition chinoise. Chose courante: il manque sur la carte une vingtaine de composants (des options ?). Chose plus rare, trois ou quatre composants ont été découpés à la pince, il ne reste plus que les pattes (peut-être pour respecter la norme PFC ?). Aucun cable de retour ne permet de couper une partie de l'alimentation, donc elle fonctionne tout le temps.</li><br />
<br />
<li>Le processeur principal est chaud ; pas énormément, mais vu que le lecteur DVD était "éteint", il fonctionne en permanence, cela va dans le sens de mes constatations sur l'alimentation. Visiblement le bouton "power" sur la télécommande se contente de désactiver les sorties.</li><br />
<br />
<li>Aucun affichage, aucune DEL pour indiquer que la machine fonctionne, d'ailleurs il n'y a pas de bouton d'allumage ou d'extinction en facade, j'ai trouvé un emplacement sur la carte de la facade prévue pour implanter une DEL, mais c'est juste à l'endroit où la carte est retenue par un ergot en plastique, donc impossible d'installer la DEL, joli défaut de conception.</li><br />
<br />
<li>La télécommande ne fonctionnait que dans un cône très étroit bien en face de l'appareil. On doit cela à deux caractéristiques intéressantes; la facade n'est pas transparente aux infra-rouges (cela se controle facilement avec un APN ou un GSM qui prends des photos); donc une petite fenêtre transparente de 5x5mm a été ouverte en face du capteur; le capteur lui, est reculé à un bon centimètre derrière la facade à cause d'un condensateur proéminent, ce qui explique parfaitement le problème.</li><br />
</ul><br />
<br />
<b>Fer à souder et perceuse</b><br />
Première opération: corriger la position du récepteur IR:<br />
<br />
Avec mon fer à souder et 1cm de fil, je déplace le condensateur radial pour l'installer couché. Ensuite je scie avec un petit disque monté sur la perceuse les ergots de fixation. En moins de 30 minutes, mon capteur IR s'est retrouvé collé à sa fenêtre et ma télécommande fonctionne bien mieux.<br />
<br />
Seconde opération: Ajout d'une DEL de fonctionnement (kikou Ned<).<br />
<br />
Impossible de récupérer les pastilles prévues pour la DEL d'origine vu que ça m'empêcherait de refixer la carte de facade, je pique donc le 5v un peu plus haut dans la carte, je perce la facade pour faire passer ma DEL, je colle au pistolet à colle une DEL basse consommation (2mA) et sa résistance correspondante, trois points de soudure.<br />
<br />
Dernier contrôle que tout fonctionne avant de refermer la bête; et hop, je revisse tout.<br />
<br />
Contrairement à ce que la loi de Murphy pouvait laisser penser, il ne reste pas de vis sur mon bureau à la fin de l'opération (en fait maintenant je fais très attention).<br />
<br />
<b>Conclusion</b><br />
La télécommande fonctionne depuis un angle beaucoup plus large; et j'ai maintenant une belle petite lumière pour m'indiquer si j'ai oublié de débrancher le lecteur.<div><a href="https://linuxfr.org/users/skc/journaux/de-la-qualit%C3%A9-des-lecteurs-de-dvd-vid%C3%A9o-%C3%A9conomiques.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/52306/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/de-la-qualit%C3%A9-des-lecteurs-de-dvd-vid%C3%A9o-%C3%A9conomiques#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/52306/comments.atomtag:linuxfr.org,2005:Diary/252052007-09-03T12:12:57+02:002007-09-03T12:12:57+02:00SMART: Self-Monitoring, Analysis, and Reporting TechnologySMART est une norme maintenant implantée dans pratiquement tous les disques durs qui lui permet de faire une analyse de sa bonne santé. La page de Wikipedia en anglais: <a href="http://en.wikipedia.org/wiki/S.M.A.R.T.">http://en.wikipedia.org/wiki/S.M.A.R.T.</a> vous donnera pas mal d'informations, ce journal a pour simple but de présenter les bases de façon succincte.<br />
<br />
Sommaire:<br />
1. Lire les attributs SMART d'un disque<br />
2. Signification de différents champs remontés par attribut<br />
3. Interpréter la santé d'un disque avec les attributs<br />
<br />
<b>1. Lire les attributs SMART d'un disque</b><br />
La commande <tt>smartctl</tt> est classiquement utilisé sous <span>OPALPAG</span> GNU/Linux et sous d'autres OS (*BSD) pour lire les attributs SMART d'un disque dur. Il doit être lancé sous l'utilisateur root. Pour un disque PATA, on utilise <tt>smartctl -A /dev/hd[a-t]</tt>, pour un disque SATA il faut ajouter une option <tt>smartctl -A -d ata /dev/sd[a-z]</tt> pour ne pas confondre avec du SCSI.<br />
<br />
<pre>ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE<br />
1 Raw_Read_Error_Rate 0x000f 105 097 006 Pre-fail Always - 47916578<br />
3 Spin_Up_Time 0x0003 093 093 000 Pre-fail Always - 0<br />
4 Start_Stop_Count 0x0032 100 100 020 Old_age Always - 3<br />
5 Reallocated_Sector_Ct 0x0033 100 100 036 Pre-fail Always - 1<br />
9 Power_On_Hours 0x0032 062 062 000 Old_age Always - 33613<br />
190 Unknown_Attribute 0x0022 063 058 045 Old_age Always - 673447973<br />
198 Offline_Uncorrectable 0x0010 100 100 000 Old_age Offline - 0</pre><br />
<br />
<b>2. Signification de différents champs remontés par attribut</b><br />
Chaque attribut est identifié par un numéro, colonne ID#. Pour rendre les choses lisible, smartctl donne le nom correspondant dans la colonne ATTRIBUTE_NAME. Certains attributs sont propre au constructeur et n'ont pas de nom définis (#190 dans l'exemple).<br />
<br />
Le disque dispose de valeurs bruts qui enregistrent une situation ou une évolution; par exemple le nombre de démarrage du disque, le nombre d'erreur d'un certain type, la température, le temps de positionnement de la tête. C'est la colonne RAW_VALUE.<br />
<br />
Cette valeur brute n'est normalement pas utilisable directement parce que parfois c'est une valeur basse qui est inquiétante, parfois c'est une valeur haute, parfois c'est simplement une valeur qui va être combiner avec d'autres pour interpréter la situation. Le disque fait donc une normalisation appelée VALUE qui varie entre 0 et 255. Détail cocasse source de confusions inépuisables, ce sont les valeurs <span>basses</span> qui indiquent un problème. Plus la valeur est basse, plus il faut s'inquiéter.<br />
<br />
A partir de quand faut-il s'inquiéter ? Le fabriquant a choisi une limite à la construction du disque que l'on trouve dans la colonne THRESH. Ceci est une constante qui indique le seuil limite en <span>dessous</span> duquel le disque donne des signes de faiblesse et à partir de laquelle il faut remplacer le disque.<br />
<br />
Parce que vous ne surveillez pas toutes les 3 minutes les attributs du disque, et que certains indicateurs ne sont pas strictement décroissants (la température ou les taux d'erreur augmentent et diminuent régulièrement), le disque enregistre la pire valeur jamais atteinte, c'est à dire la valeur la plus <span>faible</span>. C'est la colonne WORST.<br />
<br />
<b>3. Interpréter la santé d'un disque avec les attributs</b><br />
Dans la pratique, j'ai toujours perdu mes disques avant que SMART ne s'inquiète. Les valeurs de THRESH sont parfois très largement optimistes. Les deux indicateurs que je surveille pour juger de la bonne santé d'un disque sont #5 (Reallocated_Sector_Ct) et #197 (Current_Pending_Sector).<br />
<br />
La valeur brute de <i>Current_Pending_Sector</i> indique le nombre de secteurs qui vont probablement être ré-alloués. Cela signifie que le disque n'a pas réussi à lire le secteur en question, et que si vous écrivez dessus, il utilisera très probablement un secteur de réserve à la place. Au passage, félicitation, vous avez perdu 512 octets de donnée, vous aviez du RAID j'espère ? Une fois le secteur remappé sur un secteur de réserve, cette valeur est décrémenté. Je ne l'ai jamais vu dépasser la valeur 2, c'est un état transitoire.<br />
<br />
La valeur brute de <i>Reallocated_Sector_Ct</i> indique le nombre de secteurs qui sont déclarés inutilisables sur le disque et qui ont été remappés sur un secteur de réserve. Cette valeur est strictement croissante, elle augmente au fur et à mesure que les secteurs sont perdus. Certains disques tournent sans problème avec quelques secteurs défectueux, le compteur reste à une valeur constante (valeur 1 depuis des années dans l'exemple ci-dessus pour un disque qui tourne depuis #9 (Power_On_Hours) 33613h soit 3.8 ans). La grosse inquiétude est à avoir lorsque cette valeur est croissante; tous les disques que j'ai perdu depuis que je contrôle les attributs SMART avaient un compteur brut qui augmentait de une ou plusieurs unités par jour. Même avec plus d'une centaine de secteurs remappés, la valeur normalisée VALUE restait largement au dessus du THRESH, le disque était donc considéré comme sain, malgré les dizaines de Ko de données perdues (merci le RAID).<div><a href="https://linuxfr.org/users/skc/journaux/smart-self-monitoring-analysis-and-reporting-technology.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/51614/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/smart-self-monitoring-analysis-and-reporting-technology#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/51614/comments.atomtag:linuxfr.org,2005:News/210382006-06-30T15:52:52+02:002006-06-30T15:52:52+02:00Timers haute résolution et horloge dynamique.<div>Thomas Gleixner et Ingo Molnar ont produit un patch pour le noyau Linux 2.6.17 qui apporte deux améliorations concernant l'horloge et les interruptions associés sur architecture x86 (y compris SMP) et prochainement sur x86_64, PPC et ARM.
<br />
<br />
La première amélioration concerne la précision de l'horloge, cette modification permet aux timers POSIX et à la fonction nanosleep() d'atteindre la précision offerte par le matériel, typiquement 1µs sur un PC classique, et ceci de manière totalement transparente. L'implémentation classique du noyau s'appuie sur la valeur de HZ, ce qui offre une précision médiocre de 1ms à 10 ms (1ms pour les noyaux compilés avec HZ=1000Hz)
<br />
<br />
La seconde amélioration appelée "tickless kernel" pourrait être traduite par "Noyau sans tic d'horloge" ou "sans métronome". Il est possible de choisir à la compilation un mode dans lequel il n'y a plus de signal d'horloge périodique, l'horloge est alors programmée à chaque fois en fonction de la prochaine interruption d'horloge nécessaire. S'il n'y a aucun besoin pendant 1,5 secondes, le processeur restera réellement en état IDLE pendant 1,5 secondes. D'après les développeurs, les interruptions d'horloge sont réduites à 1 ou 2 par seconde. L'implémentation actuelle du noyau fait qu'une interruption d'horloge arrive avec la périodicité définie à la compilation (100Hz, 250Hz ou 1000Hz) même lorsque cela n'est pas nécessaire.
<br />
<br />
Cette amélioration permet de réduire la consommation du processeur et de ce fait, réduire la chaleur dégagée et augmenter l'autonomie de la batterie dans le cas d'ordinateurs portables. En prime c'est une solution à un problème récent: certains utilisateurs des Core-Duo d'Intel, en particulier sur les MacBook d'Apple, se plaignent d'entendre les interruptions de l'horloge lorsque leur processeur est au repos (probablement à cause des pics de courant générés avec une fréquence audible et d'un couplage inductif), l'absence de ces interruptions devrait leur permettre de retrouver le silence.</div><ul><li>lien nᵒ 1 : <a title="http://marc.theaimsgroup.com/?l=linux-kernel&m=115064343409061&w=3" hreflang="en" href="https://linuxfr.org/redirect/47596">Annonce dans la LKML</a></li><li>lien nᵒ 2 : <a title="http://www.tglx.de/projects/hrtimers/" hreflang="en" href="https://linuxfr.org/redirect/47597">Patch</a></li><li>lien nᵒ 3 : <a title="http://kerneltrap.org/node/6750" hreflang="en" href="https://linuxfr.org/redirect/47598">Article KernelTrap</a></li><li>lien nᵒ 4 : <a title="http://www.red-sweater.com/blog/macbook-pro-noise-complaints/" hreflang="en" href="https://linuxfr.org/redirect/47599">MacBook Pro noise complaints</a></li></ul><div></div><div><a href="https://linuxfr.org/news/timers-haute-resolution-et-horloge-dynamique.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/20350/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/timers-haute-resolution-et-horloge-dynamique#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/20350/comments.atomtag:linuxfr.org,2005:Diary/216772006-05-19T20:35:53+02:002006-05-19T20:35:53+02:00Ioméga bascule son disque réseau de Windows à LinuxLes news du front:<br />
<br />
Iomega a basculé son disque réseau Wifi (NAS) de Windows Storage Server 2003 vers Linux.<br />
<br />
Les gains ne se sont pas fait attendre: le prix est passé de 1.300$ à 900$, la RAM a été réduite de 256 Mo à 64 Mo; le disque est maintenant capable de faire point d'accès et si on lui connecte une caméra USB compatible, il peut sauver automatiquement les images dans un répertoire.<br />
<br />
<a href="http://www.linuxdevices.com/news/NS2571986410.html">http://www.linuxdevices.com/news/NS2571986410.html</a><div><a href="https://linuxfr.org/users/skc/journaux/iom%C3%A9ga-bascule-son-disque-r%C3%A9seau-de-windows-%C3%A0-linux.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/48171/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/iom%C3%A9ga-bascule-son-disque-r%C3%A9seau-de-windows-%C3%A0-linux#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/48171/comments.atomtag:linuxfr.org,2005:News/207712006-05-03T21:06:48+02:002006-05-03T21:06:48+02:00Une pile Wi-Fi améliorée pour le noyau Linux ?<div>Le 1er mai, Devicescape Software a fourni à la communauté du logiciel libre sa pile protocolaire Wi-Fi commerciale pour le noyau Linux 2.6 sous licence GPL.
<br />
Appelée "Devicescape's Advanced Datapath Driver", elle est d'après le communiqué de presse, une des meilleures disponibles. Elle n'était précédemment disponible que pour les vendeurs de cartes, sous licence propriétaire.
<br />
<br />
Elle devrait permettre à de nombreuses cartes modernes de fonctionner directement sans gros développements et douloureuses étapes de configuration et recherche d'informations à travers le net. Elle permet un traitement adapté des flux voix et vidéo. Elle intègre une couche MAC (Media Access Control) logicielle, un gestionnaire d'authentification hostapd, le WEP, le WPA, des extensions de QoS, simplifiant énormément l'écriture d'un nouveau pilote.
<br />
Le but est bien évidement la fusion de ce driver dans le tronc principal du kernel Linux. Cela n'est pas encore fait mais les premières réactions semblent positives et la fusion est, d'après Devicescape, fort probable. Un noyau expérimental existe déjà, maintenu par John Linville qui a été récemment nommé mainteneur de la pile Wi-Fi de Linux.
<br />
Plusieurs pilotes ont été portés sur cette architecture en particulier des chipsets comme ceux de Broadcom qui bénéficient de tout le code de la MAC logique. D'après l'un des employés, la fusion permettrait le support complet et immédiat des chipset Atheros, attendu depuis longtemps.</div><ul><li>lien nᵒ 1 : <a title="http://www.devicescape.com/news/releases/release_05-01-06_opensource.php" hreflang="en" href="https://linuxfr.org/redirect/46777">Press Release</a></li><li>lien nᵒ 2 : <a title="http://www.linuxdevices.com/news/NS1977847793.html" hreflang="en" href="https://linuxfr.org/redirect/46778">Linux gains enhanced WiFi stack</a></li><li>lien nᵒ 3 : <a title="http://kernel.org/git/?p=linux/kernel/git/linville/wireless-dev.git;a=tree;h=142382660d28b73efc64bc7f53ba5d678b2f67b5;hb=6d61f4a40274b90f8e9a7ee537c013045828f7de;f=net/d80211" hreflang="en" href="https://linuxfr.org/redirect/46779">Kernel expérimental de John Linville</a></li></ul><div></div><div><a href="https://linuxfr.org/news/une-pile-wi-fi-amelioree-pour-le-noyau-linux.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/20084/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/une-pile-wi-fi-amelioree-pour-le-noyau-linux#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/20084/comments.atomtag:linuxfr.org,2005:Diary/211632006-03-17T13:25:52+01:002006-03-17T13:25:52+01:00PostgreSQL: mais que reste-t'il aux grandes ?Un petit article publié aujourd'hui sur PostgreSQL fait état de la migration de huit bases de données allant jusqu'à 180 Go, avec réplication.<br />
<br />
<a href="http://www.postgresqlfr.org/?q=node/625">http://www.postgresqlfr.org/?q=node/625</a><br />
<br />
Je suis étonné lorsque je discute avec mes collègues du peu de connaissances que les gens ont de cette fantastique base de donnée libre.<br />
<br />
Lorsque les gens cherchent une base de donnée libre, ils se tournent généralement vers MySQL, non pas pour des raisons techniques mais essentiellement pour des raisons marketing. La réputation de MySQL classe ce SGBD dans la tranche faible volumétrie et applications non critiques ou annexe. Oracle s'accapare une énorme partie du reste.<br />
<br />
Les gens ont rarement étudié une solution basée sur PostgreSQL, ce qui est à mon avis un tord. La base offre un support ACID (Atomicity, Consistency, Isolation, Durability) de première qualité qui permet d'implémenter ses transactions sans soucis. Elle supporte également toutes les fonctionalités que l'on peut attendre d'une base relationnelle complète: triggers, vues, héritage, séquences, procédures stockés, curseurs, type de données définis par l'utilisateur (adresse email...), requêtes sur des requêtes, authentification externe, journalisation des écritures, sauvegarde à chaud, interface avec de nombreux langages. On trouve plusieurs avantages par rapport à Oracle: possibilité d'écrire les procédures dans plusieurs langages: PL/pgSQL qui ressemble beaucoup au PL/SQL d'Oracle, Perl, Python, C, TCL ce qui permet aux personnes qui ont l'habitude d'Oracle de ne pas être trop perdus.<br />
<br />
Je l'utilise depuis plus de 8 ans et je suis toujours surpris par le support qu'elle offre. Certains projets qui utilisaient initialement une seule table simple ont pu évolué par l'ajout de triggers et de procédures stockés tout naturellement en fonction de l'évolution des besoins.<br />
<br />
Je pense que cette base gagnerait à être plus connue. Et si vous tentiez un essai ?<div><a href="https://linuxfr.org/users/skc/journaux/postgresql-mais-que-reste-til-aux-grandes.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/47666/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/postgresql-mais-que-reste-til-aux-grandes#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/47666/comments.atomtag:linuxfr.org,2005:Diary/207152006-01-26T17:43:17+01:002006-01-26T17:43:17+01:00CUPS et CopieurDepuis quelques années maintenant, des marques comme Canon ou Xerox (ou d'autres) produisent de gros copieurs perfectionnés. Ces machines autonomes se branchent sur un réseau et sont capable de faire: Photocopieur, Imprimante et Scanner (Fax en plus pour certains).<br />
<br />
Ils ont tout un tas de fonctions perfectionnés selon les modèles: recto-verso, agrafeuse, plieuse/brocheuse, perforeuse, couleur, multiples bacs de papiers, N pages par feuille...<br />
Comme imprimante, ils sont très pratiques... sous Windows.<br />
<br />
Je cherche des gens qui ont une expérience de ces machines sous Linux (J'ai installé les postes d'une association humanitaire sous Linux, et aujourd'hui ils impriment sur une LaserJet avec CUPS).<br />
<br />
Ces imprimantes ont généralement un module Postscript (en option pour les entrée de gamme) et PCL, donc j'imagine donc qu'il est possible de faire une impression simple sur du A4. <a href="http://www.linuxprinting.org/">http://www.linuxprinting.org/</a> ne connait pratiquement aucun modèle; je suis incapable de trouver des informations sur le support que l'on peut avoir sous Linux/CUPS de ces machines; recto-verso ? Agrafage ? Choix du bac ?<br />
<br />
Deux modèles sont étudiés pour l'instant:<br />
<br />
Xerox Workcentre C226 <br />
<a href="http://www.office.xerox.com/perl-bin/product.pl?product=WCC226">http://www.office.xerox.com/perl-bin/product.pl?product=WCC2(...)</a><br />
<br />
Canon IR2570C<br />
<a href="http://www.canon.fr/for_work/products/office_print_copy_solutions/digital_ir_series/iR2570C/">http://www.canon.fr/for_work/products/office_print_copy_solu(...)</a><br />
<br />
mais je suis bien incapable de savoir s'il est possible d'imprimer dessus et/ou d'utiliser certaines ou toutes les fonctions un peu évolués (agrafage, impression A3...) <br />
<br />
Avez vous des retours d'expérience sur ce genre d'appareil ou sur ces modèles ?<div><a href="https://linuxfr.org/users/skc/journaux/cups-et-copieur.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/47221/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/skc/journaux/cups-et-copieur#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/47221/comments.atomtag:linuxfr.org,2005:News/199962005-12-02T17:14:09+01:002005-12-02T17:14:09+01:00Sortie de Apache 2.2.0<div>« La fondation Apache Software et le projet Apache HTTP Server sont heureux d'annoncer la sortie de la version 2.2.0 de leur serveur HTTP.
<br />
<br />
Ils considèrent cette version comme la meilleure disponible et encouragent les utilisateurs de toutes les versions précédentes à effectuer la version à jour. »</div><ul><li>lien nᵒ 1 : <a title="http://httpd.apache.org/download.cgi" hreflang="en" href="https://linuxfr.org/redirect/44691">Téléchargement</a></li><li>lien nᵒ 2 : <a title="http://httpd.apache.org/docs/2.2/new_features_2_2.html" hreflang="en" href="https://linuxfr.org/redirect/44692">Nouvelles fonctionnalités</a></li><li>lien nᵒ 3 : <a title="http://mail-archives.apache.org/mod_mbox/www-announce/200512.mbox/%3c438F70A7.2080701@apache.org%3e" hreflang="en" href="https://linuxfr.org/redirect/44693">Mail d'annonce</a></li></ul><div>Les nouvelles fonctionnalités depuis la version 2.0 :
<br />
<br />
<u>Modules principaux:</u>
<br />
<br />
<b>Authn/Authz</b>
<br />
Les mécanismes d'authentification et d'autorisation ont été revus, un module d'alias permet de simplifier grandement certaines configurations.
<br />
<br />
<b>Caching</b>
<br />
Les modules de cache mémoire et disque ont été beaucoup modifiés et sont maintenant d'une qualité considérée comme apte à la production.
<br />
<br />
<b>Configuration</b>
<br />
La structure du fichier de configuration a été simplifiée et modularisée. De nombreuses configurations courantes sont proposées avec l'application et peuvent être facilement activées.
<br />
<br />
<b>Graceful stop</b>
<br />
Les différents mécanismes de répartition des requêtes au sein de l'application (prefork, worker, event MPMs) ont été modifiés afin de permettre un arrêt plus en douceur de l'application. Il est possible de spécifier un délai de grâce pour traiter les requêtes en cours avant l'arrêt.
<br />
<br />
<b>Proxying</b>
<br />
Le nouveau module de proxy permet de faire de la répartition de charge sur plusieurs serveurs (load balancing), le module mod_proxy_ajp permet de s'interfacer avec Tomcat en utilisant le protocole JServ 1.3
<br />
<br />
<b>Regular Expression Library Updated</b>
<br />
La version 5.0 de la librairie d'expressions rationnelles compatible Perl est maintenant inclue (PCRE)
<br />
<br />
<b>Filter</b>
<br />
Un module permet l'ajout dynamique de filtres dans le flux de sortie selon les paramètres de la requête ou de la réponse, ou les variables d'environnement. Ce mécanisme règle les problèmes de dépendances et d'ordonnancement qui existaient dans la version 2.0. (Ceci permet par exemple la compression à la volée des pages HTML dynamiques).
<br />
<br />
<b>Large File Support</b>
<br />
httpd est maintenant compilé avec le support des fichiers de plus de 2 Go sur les unix 32 bits modernes. Les requêtes de plus de 2 Go sont également traitées.
<br />
<br />
<b>Event MPM</b>
<br />
Ce mécanisme expérimental de traitement des requêtes conserve maintenant un thread séparé pour gérer les connexions persistantes (Keep Alive) et les nouvelles connexions. Dans les versions précédentes, il était nécessaire de dédier plus de ressources pour traiter les requêtes persistantes.
<br />
<br />
<b>SQL Database Support</b>
<br />
Un module dédié permet de fournir des connexions et des pools de connexions aux modules qui ont besoin d'accéder à une base de données, leur évitant d'implémenter chacun leur propre mécanisme. (Note: Ceci n'est pas disponible de base aux utilisateurs de Microsoft Windows)
<br />
<br />
<u>Amélioration de modules existants</u>
<br />
<br />
<b>Authn/Authz</b>
<br />
Les modules d'authentification ont été renommés et étendus. Certains ont été séparés en plusieurs modules afin de permettre une plus grande modularité. Un module gérant des alias a également été ajouté.
<br />
<br />
<b>mod_authnz_ldap</b>
<br />
Le module d'authentification LDAP a été porté et amélioré de la version 2.0 et adapté à la nouvelle organisation de la version 2.2
<br />
<br />
<b>mod_info</b>
<br />
Ajout d'un nouveau paramètre "?config" qui retourne la configuration telle qu'elle est lue par Apache (y compris les noms des fichiers et les numéros de ligne). Le module montre également l'ordre de tous les traitements et les informations de compilation.
<br />
<br />
<b>mod_ssl</b>
<br />
Ajout du support de la RFC 2817 qui permet de transformer une connexion en clair vers une connexion chiffré en TLS.
<br />
<br />
<b>mod_imagemap</b>
<br />
Le module mod_imap a été renommé mod_imagemap pour des raison de clarté. Il gère les zones d'images et non pas le protocole de courrier IMAP.
<br />
<br />
<u>Amélioration du programme</u>
<br />
<br />
<b>httpd</b>
<br />
L'option de ligne de commande -M permet maintenant de lister tous les modules chargés par la configuration courante. Contrairement à l'option -l, cette liste comprend les modules chargés par mod_so.
<br />
<br />
<b>httxt2dbm</b>
<br />
Un nouveau programme permet de transformer les fichiers texte décrivant des ré-écritures (RewriteMap) en fichier binaire au format dbm pour en améliorer les performances.
<br />
<br />
<u>Modification des modules de développement</u>
<br />
<br />
<b>APR 1.0 API</b>
<br />
Apache 2.2 utilise maintenant l'API de la Bibliothèque Portable Apache (Apache Portable Runtime APR) en version 1.0 minimum. Toutes les fonctions et symboles déclarés obsolètes dans les versions précédentes de APR et APR-Util ont été supprimés.
<br />
<br />
<b>Authn/Authz</b>
<br />
Organisation des modules d'authentification et d'autorisation:
<br />
mod_auth_* -> Modules permettant de traiter les informations d'identification avec le client (en HTTP)
<br />
mod_authn_* -> Modules fournissant un mécanisme d'authentification
<br />
mod_authz_* -> Modules fournissant un mécanisme d'autorisation
<br />
mod_authnz_* -> Modules fournissant à la fois un mécanisme d'autorisation et d'authentification
<br />
<br />
<b>Connection Error Logging</b>
<br />
Une nouvelle fonction, ap_log_error permet de tracer les erreurs relatives à la connexion du client. Ces traces incluent l'adresse IP du client.
<br />
<br />
<b>Test Configuration Hook Added</b>
<br />
Un nouveau mécanisme permet aux modules d'ajouter des tests lorsqu'Apache est lancé en mode de test de la configuration (-t)
<br />
<br />
<b>Set Threaded MPM's Stacksize</b>
<br />
Une directive de configuration ThreadStackSize permet de modifier la taille de la pile des threads de l'application. Ceci permet d'utiliser certains modules de tierce-parties sur des plates-formes ayant une faible taille de pile d'exécution.
<br />
<br />
<b>Protocol handling for output filters</b>
<br />
Par le passé, les filtres étaient responsables de modifier les entêtes de la réponse lorsqu'ils modifiaient le flux de la réponse. Un nouveau module mod_filter peut maintenant traiter cette tâche, simplifiant l'écriture des filtres.
<br />
<br />
<b>Monitor hook added</b>
<br />
Les modules peuvent maintenant demander l'exécution de traitements de maintenance périodiques ou ordonnancés dans le processus parent d'Apache.
<br />
<br />
<b>Connexion aux bases de données (DBD Framework)</b>
<br />
Avec Apache 1.x et 2.0, les modules nécessitant une connexion à une base de données devaient également gérer les connexions. En sus de ré-inventer la roue, ceci pouvait être particulièrement inefficace. Par exemple, lorsque plusieurs modules avaient besoin d'accéder à la même base de données, chacun ouvrait ses propres connexions.
<br />
<br />
Apache 2.1 et les versions suivantes fournissent une API pour gérer les connexions aux bases de données (y compris des stratégies optimisées pour le fonctionnement en threads et sans threads). La version 1.2 de la librairie APR fourni également des fonctions pour dialoguer avec la base de données.
<br />
<br />
Les nouveaux modules <u>doivent</u> maintenant utiliser ces interfaces pour toutes les opérations sur les bases de données. Les applications et les modules doivent également être mises à jour pour cela, de manière transparente si possible.</div><div><a href="https://linuxfr.org/news/sortie-de-apache-220.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/19309/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-apache-220#comments">ouvrir dans le navigateur</a>
</p>
Sébastien Koechlinhttps://linuxfr.org/nodes/19309/comments.atom