Skip to content

Linux Attitude

Le libre est un état d'esprit

Archive

Archives pour février, 2009

... enfin presque !

"S'il n'y avait que des gens comme vous, il y aurait encore les chambres à gaz !"

Ces petites phrases assassines se trouvent invariablement suivies d'un point godwin. Le point godwin c'est au départ le point à partir duquel la conversation (le troll) a dévié et les participants vont chercher des arguments percutants dans la seconde guerre mondiale sans grande relation avec la discussion. Le sens a légèrement changé et c'est devenu un point décerné aux gens qui abusent de références aux nazis pour tenter de discréditer son interlocuteur.

Toute personne décernant un point godwin croit donc avoir mis fin radicalement à une conversation qui dévie. Mais ce n'est pas le cas, invoquer un point godwin, c'est utiliser le même procédé que son interlocuteur. C'est chercher à faire taire quelqu'un par un argument d'autorité sans autre forme de discussion.

C'est maintenant devenu une plaie des discussions où le point godwin est invoqué à tout moment. Pourtant, il est totalement véridique que "Hitler a été élu". Et utiliser cette phrase pour démontrer que les élections ne sont pas une garantie en soi est parfaitement légitime. Plutôt que d'utiliser le point godwin, expliquez à votre interlocuteur que le contexte social n'a plus rien à voir et qu'en l'état actuel des choses, on peut fortement espérer que cela ne se reproduise pas.

Et si vous êtes tentés d'utiliser le nazisme pour une comparaison, pensez d'abord à 1984, ce roman a la même puissance évocatrice et est diaboliquement réaliste puisqu'il s'en inspire, c'est un point godwin géant à lui tout seul. Et on ne vous parlera même pas de godwin si vous l'évoquez alors que c'est bien de cela qu'il s'agit.

Quelques autres comparaisons pour la route :

  • Le fichage des personnes est-il un retour au temps de Vichy ?
  • Le filtrage d'internet est-il une volonté de contrôle faschiste des citoyens ?
  • L'utilisation d'un identifiant unique (sécu) pour toutes les bases de données ne servirait-il pas les nazis ?
  • Nicolas Sarkozy pourrait-il devenir dictateur ?
  • La FSF n'est-elle pas peuplée de fachos du libre ?
  • Les gentooistes n'étaient-ils pas sponsors des chambres à gaz avec leurs bécanes chauffantes ?
  • Peut-on rire de tout et même de RMS ?

Dissertation : essayez de répondre sans utiliser le point godwin !

Petite présentation des dernières améliorations sur ce site.

Lorsque vous postez des commentaires il n'est plus nécessaire de cliquer sur aperçu, il est possible d'envoyer le commentaire directement tel quel. Ainsi les quelques uns qui ont eu du mal à m'envoyer des commentaires ne devraient plus avoir de problème ;-)

Le static cache a été désactivé, ce qui fait que le sondage refonctionne et fait disparaitre quelques petits bugs. J'ai remplacé celui-ci par le traditionnel eaccelerator (je testerai peut-être un jour xcache).

J'ai ajouté le plugin typo qui permet de respecter quelques règles de typographie. Cela améliore très légèrement l'apparence du billet. Mais il est à l'essai, si vous trouvez qu'il se trompe dans les règles de césure, faites m'en part, il peut être désactivé.

Il est maintenant possible de s'abonner aux commentaires, soit lorsqu'on poste soi même en donnant une adresse email valide; soit en allant sur la page d'un billet et en cliquant sur le lien adapté en bas de page.

Le bugdu flux rss pour netvibes est corrigé. Cela veut dire que les lecteurs utilisant netvibes peuvent maintenant profiter du flux instantanément et non pas seulement lorsque j'en fais une mise à jour manuelle. De plus ils peuvent aussi profiter des flux filtrés par tag ou par catégorie.

Une blogroll fait son apparition. Elle recense des sites qui fournissent une information technique pertinente, de préférence en français (<--- ici sur le menu de gauche).

Et n'oubliez-pas, si quelque chose ne vous plait pas, il y a toujours moyen de me contacter par le formulaire de contact.

Niveau : Star Star Star Empty Empty
Résumé : perlre

Suite à l'article précédent, qui posait les bases des expressions régulières, vous êtes probablement resté sur votre faim. Voici quelques astuces permettant d'élever le niveau et de faire des expressions mieux construites, plus rapides, plus courtes ...

Traitement des lignes

Fonctionnalités que tous les outils ne proposent pas, mais qui sont inclues dans le langage PCRE, /m et /s sont des modificateurs comme dans 's/toto/tata/m'.

Il faut bien distinguer les 2 qui portent assez facilement à confusion. De plus les 2 peuvent être utilisées en même temps.

  • /m est utilisé pour changer la syntaxe de '^' et '$' qui habituellement matchent le début et la fin de la chaîne, avec /m ils matcheront le début et la fin de chaque ligne.
  • /s est utilisé pour changer la syntaxe de '.' qui habituellement matche n'importe quel caractère sauf le changement de ligne, avec /s il matchera n'importe quel caractère y compris le changement de ligne

Ces modificateurs ne font la différence que lorsqu'on veut toucher aux caractères de retour à la ligne et plus généralement, lorsqu'on manipule des chaînes de caractère multilignes.

Gloutonnerie

L'algorithme de matching est glouton par défaut, ce qui veut dire que l'expression suivante :

/(.*):/

Marchera tous les éléments qui se trouvent avant le dernier ':' dans

root:x:0:0:root:/root:/bin/bash

On peut désactiver la gloutonnerie (greediness) en utilisant ? :

/(.*?):/

Qui du coup ne matchera plus que le premier élément.

Backreference

Il est possible de référencer un élément capturé à l'intérieur d'une expression régulière, ce qui permet de détecter les répétitions.

Exemple pour matcher le début et la fin d'une balise html.

/<(\w+)>.*?</\1>/

Extensions

Un certain nombre d'extensions d'expressions régulières ont été définies et commencent par '(?' on les utilise peu, mais elles sont très pratiques pour optimiser (en complexité comme en vitesse) des expressions régulières.

Match sans capture

(?:regex)

Permet de matcher sans capturer le contenu dans une variable. Pratique pour éviter la complexité liée à la numérotation des parenthèses imbriquées

Lookahead et lookbehind

Il est possible de matcher des éléments "s'ils sont suivis de" (ou "précédés", ou "ne sont pas"). Ceci permet d'écrire des expressions correspondant beaucoup mieux à la description

qu'on en fait, et parfois même d'écrire ce qui était impossible.
# matche "very funny" et "not boring" mais pas "not funny"
/(\w+ )((?<!not )funny|boring)/

Modificateur inline

Il es possible de changer un modificateur temporairement, par exemple pour rendre le matching insensible à la casse sur un seul mot :

# seul toto peut être écrit indifféremment avec des majuscules et des minuscules
/Bonjour (?i)toto(?-i) la moule/

Encore plus

Vous voulez encore plus de fonctionnalités ? Perl 5.10 apporte son lot de nouveautés dans les expressions régulières. Celles sont-ci sont aussi disponibles dans PCRE pour la plupart puisqu'elles en sont inspirées.

Je ne vais pas vous réécrire cet article très bien fait sur le sujet. Ces nouveautés seront surtout utiles pour les utilisateurs avancés.

Niveau : Star Empty Empty Empty Empty
Résumé : perl -pe 's///'

Il arrive régulièrement d'avoir à développer des expressions régulières. Si on excepte grep et sed, la plupart des outils utilisant des expressions régulières sont compatibles perl (en utilisant PCRE). C'est donc un bon point. Apprendre les expression régulières (qu'on peut considérer comme un langage à part entière) ne sera pas perdu même si on change d'outil ou de langage.

Tests

Avant de développer une expression régulière, je vous propose de vous familiariser avec le test de ces expressions. Si vous avec une ligne de commande c'est tout simple, hop un test ligne par ligne :

$ perl -pe 's/expression/########/'
données
a matcher, 
autant que vous voulez
<ctrl-d>

Mais si vous préférez un interface plus évoluée : voici un des nombreux qui permettent de tester vos expressions en direct http://myregexp.com/ et avec coloration des éléments matchés.

Syntaxe de base

Une expression régulière, c'est une chaîne de caractère qui a pour but de repérer des informations dans un texte. Elles sont en général implémentées sous forme d'automates à état finis. Cette méthode est extrêmement efficace et dans la plupart des cas il est très difficile de faire plus rapide.

Cette chaîne peut être utilisée pour chercher des informations dans un texte, mais aussi pour faire des remplacements automatisés. Perl utilise une syntaxe autour des expressions régulières pour préciser comment les utiliser. Celle-ci est souvent reprise par les utilisateurs des PCRE mais ca n'a rien d'obligatoire :

  • /expression/ : pour faire des recherches
  • s/expression/remplacement/ pour faire du recherche/remplacer
  • y/expression/remplacement/ pour faire des substitutions de caractères

y/// est un cas particulier que nous ignorerons.

Chacune de ces chaînes peut être suivie par un modificateur. Le plus utile est /i qui permet de ne pas se soucier de la casse. Exemple : /toto/i matchera ToTo. Le deuxième plus important est /g qui permet de faire le remplacement autant de fois que c'est possible et non pas seulement la première fois que l'expression matche.

Attention, hors perl, il se peut que tout ceci ne soit pas valable, mais cela ne change rien quant à la syntaxe des expressions expliquée ci après.

Syntaxe des expressions

Le principe d'une expression régulière (abrégé en regex) est de matcher des milliers de possibilités sans devoir toutes les écrire. Il ne s'agit donc (quasiment) que de "raccourcis".

Donc commençons par les non-raccourcis :

  • () : les parenthèses ont deux fonctions, grouper des éléments entre eux et mémoriser le contenu matché pour le rendre réutilisable par la suite
  • | : opérateur OU comme dans "confiture ou nutella ?"

Exemples :

^vive (la confiture|le nutella)$

Maintenant les raccourcis :

  • . : n'importe quel caractère
  • ^ $ : début et fin de chaîne
  • [abf] : a ou b ou f
  • [a-m] : a ou b ou ... ou m
  • [^a b] : tout sauf a ou espace ou b
  • \d : un chiffre
  • \w : un caractère alphanumérique
  • \W : un caractère non alphanumérique
  • \s : un caractère d'espacement
  • \S : un caractère de non-espacement
  • a? : 0 ou 1 fois a
  • b+ : 1 ou plus fois b
  • c* : 0 ou plus fois c
  • d{3} : 3 fois d
  • ...

Il y en a plein d'autres, mais avec celles-ci vous saurez vous débrouiller dans la plupart des situations.

Exemples :

# récupérer le hostname d'un nom de domaine dans $1
(\w+)(\.\w+)*
# récupérer une heure/minute/seconde en début de ligne dans $1, $2 et $3
^(\d\d):(\d\d):(\d\d)\s
# matche une ligne variable="valeur" avec ou sans guillemets et des espaces autorisés
^\s*(\w+)\s*=\s*"?(.*)"?

Après cette petite initiation sans conséquences, vous pouvez aller lire la vraie documentation fournie en manpage avec la documentation perl man perlre.

Uptime

fév 20

Niveau : Star Empty Empty Empty Empty
Résumé : uptimed

Linux est un système très stable. Tellement stable que certaines personnes font une gloire personnelle de la durée d'allumage de leurs machines.

Pour pouvoir vous vanter vous aussi auprès de vos collègues et briller dans les soirées, voici le moyen de savoir quelles ont été les différentes durées d'uptime de votre machine.

Uptimed est un simple démon disponible dans le paquet éponyme. Il suffit de l'installer. Ce démon ne fait qu'une chose et il le fait bien, il enregistre la durée depuis laquelle le système est lancé dans un fichier de logs et rend ces informations disponibles aux utilisateurs. Il est même capable de vous envoyer un mail pour vous avertir de l'atteinte d'un record.

Les utilisateurs ont accès aux meilleurs temps avec la commande uprecords :

$ uprecords

Tout ceci est bien joli et il est vrai que c'est très gratifiant d'avoir réussi à maintenir un système en fonctionnement pendant plusieurs années, voir une dizaine d'années pour certains. Mais il ne faut pas oublier une chose, la sécurité. Un noyau qui n'est jamais rebooté, ce n'est pas seulement un noyau stable, mais c'est aussi un noyau vulnérable car non mis à jour.

Alors bien sur certains argueront qu'il existe maintenant ksplice. Mais je pense que son usage reste marginal. C'est pourquoi, n'oubliez pas de mettre une sonde sur vos serveur pour surveiller les machines qui n'ont pas été rebootées depuis longtemps, c'est en fait un signe de faiblesse.

Niveau : Star Star Empty Empty Empty
Résumé : Debian 5.0

Vous n'êtes pas sans savoir que la dernière debian est sortie ce week-end, en pleine St-Valentin. Celle-ci s'appelle Lenny comme les jumelles de Toy Story.

Plein de belles choses dans cette distributions, je ne vais pas vous refaire le topo.

Donc vous êtes actuellement en etch et vous voulez faire une mise à jour. Comment faire ? C'est assez simple, mais c'est l'occasion d'expliquer le mécanisme de mise à jour. Maintenant que vous savez à quoi ressemblent les miroirs et les paquets debian

Contenu du miroir

Pour mettre à jour, vous changez le nom de la distribution dans /etc/apt/sources.list. Remplacez etch par lenny, vous aurez quelque chose comme :

deb http://mir1.ovh.net/debian/ lenny main contrib non-free
deb-src http://mir1.ovh.net/debian/ unstable main

deb http://security.debian.org/ lenny/updates main contrib non-free

Ce qui veut dire que vous utilisez le miroir mir1.ovh.net, ayant pour racine debian /debian, avec la version lenny de debian, et les sections main contrib et non-free de cette version.

Remarquez qu'il n'y a aucun problème à utiliser les sources unstable avec les paquets stable. La ligne source n'est utilisée que pour la commande apt-get source.

  • Le choix du miroir vous permet d'être le plus rapide possible dans votre mise à jour
  • Le choix de la racine ne vous est pas donné, mais dépend du miroir
  • Le choix de la version vous permet d'être le plus à jour par rapport aux paquets disponibles
  • Le choix des sections vous permet d'être plus ou moins libre sur les logiciels installés

Upgrade et dist-upgrade

Ensuite, vous faites un update pour qu'apt soit au courant de la liste des paquets disponibles sur le miroir :

$ apt-get update

Et enfin vous mettez à jour. Et la se pose la question upgrade ou dist-upgrade (respectivement safe-upgrade ou full-upgrade pour les utilisateurs d'aptitude). Hé bien tout est histoire de principe de fonctionnement.

apt-get upgrade sert à faire une mise à jour de tous les paquets tant qu'il n'y a pas changement dans les dépendances, c'est à dire que seules les nouvelles-version de paquets existants seront prises en compte et aucun paquet ne sera jamais supprimé.

apt-get dist-upgrade comme son nom l'indique sert pour les nouvelles version de la distribution. Cette commande reparcourt la liste des dépendances et va vous proposer d'ajouter et supprimer un certain nombre de paquets pour satisfaire les dépendances.

Dans la plupart des cas, upgrade est une bonne habitude de sysadmin, surtout si on est un peu fatigué (ou pressé). Mais il faut tout de même faire un dist-upgrade régulièrement pour être sur qu'on n'a rien oublié dans les mises à jour. Il faut simplement être un peu plus attentif à ce qui est modifié. Dans le cas d'une nouvelle version, ya pas photo :

$ apt-get dist-upgrade

Notez que parfois, si vous avez énormément de paquets et que cela pose problème au système de gestion des dépendances, un upgrade préalable peu aider.

Particularités

Attention, une mise à jour n'est pas complètement anodine, elle peu éventuellement casser votre système, même si c'est assez rare. Essayez donc de faire attention aux points suivants.

Évitez les locales

Un certain nombre de programmes se comportent bizarrement (rares, mais on en trouve) ou provoquent des warning (plus fréquent) lorsque les locales ne sont pas supportées par le système ou ne sont pas celles d'init. Un bonne pratique est donc d'avoir l'utilisateur root qui tourne avec la locale POSIX (ou C). Si ce n'est pas le cas, faites bien attention à ce que la locale utilisée soit bien enregistrée. Sinon :

$ LANG=C apt-get dist-upgrade

Utilisez les bons noms

Debian utilise deux noms pour chacune de ses versions (trois si on compte le numéro de version), ces noms sont stable / testing / unstable et le noms de personnages de Toy Story.

  • stable est un lien symbolique vers la dernière version de debian sortie (lenny).
  • testing est un lien symbolique vers la prochaine version de la debian à sortir (squeeze).
  • unstable est un lien symbolique vers sid, il ne change jamais

Le développement de debian se déroule ainsi :

  1. Les paquets sont testés dans experimental ... ou pas
  2. Les paquets sont déposés par les développeurs dans unstable quand qu'il veulent (upgrade, patch ...)
  3. Les paquets sont saupoudrés régulièrement et automatiquement de unstable vers testing lorsqu'ils n'ont pas de nouveau bug depuis un certain temps
  4. Lorsqu'on considère que la testing est bien cuite, on la démoule et on l'appelle stable
  5. Testing recommence avec un nouveau nom à partir de cette même stable

Mais alors quel nom utiliser ?

Si vous faites référence au processus de développement debian, utilisez stable / testing / unstable.

Si vous faite référence à un problème sur une version, (il ya trop de rose ... ) utilisez les noms Toy Story.

Et le plus important, n'utilisez pas "stable" dans votre sources.list. En effet, le jour du changement de version, vous vous retrouveriez à installer une nouvelle version de debian sans vous en rendre compte. Utilisez donc le nom de la distribution pour ne pas être surpris, vous pourrez le changer lorsque vous mettrez volontairement à jour.

Vous pouvez éventuellement mettre "testing" si votre but est de suivre continuellement testing et non pas la prochaine distribution, mais je serais plutôt du genre à le déconseiller.

J'ai mis à jour ce site, donc voici une petite liste rapide des évolutions :

  • Passage à dotclear 2.1.5, nouvelle version
  • Vous pouvez maintenant répondre à un des commentaires en particulier (la CSS n'est pas encore tout à fait adaptée donc ça peut ne pas être très évident)
  • Ajout d'un petit sondage comme vous le voyez à droite. C'est juste pour la frime
  • Si vous avez de suggestions, des corrections, des problèmes, faites m'en part à travers le formulaire de contact qui se trouve ici à gauche
  • Vous pouvez aussi faire connaître un article en particulier s'il vous intéresse grâce aux petites icônes de partage qui se trouvent en bas à droite des tags dans chaque article
  • Les liens vers les tags supportent le microformat rel-tag cela vous permet si vous avez une extension adaptée d'avoir accès directement à la liste des tag dans un menu
  • Les flux rss et atom contiennent des liens wfw comments pour permettre de poster à travers le lecteur de feed, mais je ne sais pas s'il y en a qui utilisent cette possibilité :)
  • Et enfin je vous rappelle qu'il est optionnel de donner son adresse email dans les commentaire (si cela vous dérange)

Pour ce qui est de la vitesse d'affichage qui est un peu problématique je l'avoue, j'ai mis en place un système de cache qui permet un chargement plus rapide mais ne semple pas suffisant. L'utilisation de yslow m'a aussi permis quelques améliorations mineures.

Si vous voyez des problèmes, n'hésitez pas à m'en faire part.