Welcome Sheevaplug (part 2):

Après les présentations (voir l'article précédent), il est temps de passer à la pratique: installer une distribution Debian dessus. Le processus n'est pas vraiment compliqué une fois qu'on a toutes les cartes en main. Globalement, c'est possible de le faire en 2H ou 3H à condition de savoir ce qu'on fait... Les instructions ci-dessous vous seront très utiles.

Etape 1: Bien comprendre la séquence de boot :

Hé oui, toutes ces petites machines exotiques avec des CPU autres qu'Intel n'ont généralement pas de BIOS. Du coup, la séquence de boot est toujours différente de ce à quoi les utilisateurs de PC classiques sont habitués. Et cette différence fait qu'il faut vraiment prendre la peine de comprendre tous les mécanismes qui sont sollicités. Voici donc le processus de boot tel que je l'ai compris:

  1. Au démarrage de la machine, la ROM du processeur Kirkwood initialise la RAM (DDR).
  2. Cette initialisation se fait en copiant une partie du contenu de la mémoire FLASH (NAND) dans la RAM.
  3. Les éléments copiés correspondent à l'image de U-Boot, le bootloader de cette machine.
  4. L'image de U-Boot est généralement située tout au début de la NAND (page 1 offset 0).
  5. Une fois l'image de U-Boot copiée en mémoire vive (la RAM), le processeur se branche à cet endroit et lance l'exécution du binaire.
  6. U-Boot se lance, récupère sa configuration (écrite sur la mémoire FLASH) et effectue une série de tests.
  7. Ensuite U-Boot tente de booter le système d'exploitation tel qu'indiqué dans sa configuration.
  8. En cas d'échec, il donne la main: un prompt qui permet pas mal de commandes.

Il ressort de cette séquence de boot que: - la mémoire Flash joue le rôle de mémoire CMOS pour le BIOS. - U-Boot est directement intégré dans la Flash. Mettre à jour U-Boot revient donc à écrire dans un endroit particulier de la mémoire FLASH. - U-Boot est un programme complet: il sait lire et écrire depuis de nombreux périphériques, aller sur un réseau IP, faire des tests, gérer la console, etc...

Pour plus d'informations, vous pouvez consulter le SheevaPlug DevKit Reference Design 1.1 (page 18).

Etape 2: un peu de méthode:

D'abord, avant d'installer une distribution GNU/Linux (Debian en l'occurence), il faut vérifier si la plateforme est supportée. Dans notre cas, le CPU est un Kirkwood de chez Marvell cadencé à 1,2 Ghz et qui est compatible ARM. Debian supporte énormément de plateformes. Ainsi, pour les ARM, il existe un port officiel. Toutefois, il y a ARM et ARM. En effet, il existe 2 'ABI sur cette plateforme, l'ancienne qui fonctionne pour les anciens CPU ARM et la nouvelle EABI (Embeded ABI). Sur la distribution Debian, arm est réservé pour l'ancienne ABI et armel désigne la nouvelle ABI de la plateforme ARM. Le CPU Marvell Kirkwood utilise la branche armel de la plateforme ARM sous Debian. Il est donc supporté et c'est une excellente nouvelle (en fait, je n'aurais pas acheté cette machine si ce n'était pas le cas ;-)).

Ensuite, quelle version de Debian installer ? Stable (Lenny), ou Squeeze (unstable) ? Ma préférence va vers Squeeze qui est sensiblement plus récente que Lenny mais qui n'est pas encore gelée (freeze). Ce sera donc Squeeze.

Sur quoi installer l'OS ? Globalement, pour installer un OS, il est nécéssaire de disposer d'un périphérique de masse: un truc qui permet de stocker des octets. GNU/Linux supporte pas mal de choses de ce côté là. Matériellement, le SheevaPlug dispose de 3 périphériques de masses:

  • La mémoire flash interne (NAND).
  • un port USB (donc toutes les clefs USB et disques dur USB qui vont bien).
  • un lecteur de cartes SD.

On peut donc utiliser ces trois supports d'OS. Toutefois, installer Squeeze en ce moment suppose de fréquentes mises à jour et un support plus faible de la sécurité. Qui dit mise à jour fréquentes implique de nombreuses opérations de lecture/écriture. Ce qui n'est pas très bon pour la mémoire Flash, surtout lorsque celle-ci est intégrée dans une carte-mère comme dans le cas de notre Sheevaplug ! Du coup, il faut installer l'OS sur autre chose que la mémoire flash NAND. Une simple clef USB fera bien l'affaire. Quand stable s'appellera Squeeze, il sera bon de procéder à l'installation sur la mémoire Flash. Pour terminer sur ce point, mieux vaut épargner la mémoire flash interne d'installations non maîtrisées qui écraseraient quelquechose de sensible (genre le bootloader !).

En plus de ces prévisions, il nous faut un moyen de lancer l'installeur Debian. Premier constat: utiliser un CD d'installation ne va pas fonctionner !!! On doit donc se rabattre vers d'autres solutions. Sur ce plugcomputer, on utilise le bootloader U-Boot qui est assez extraordinaire. En effet, il est capable de booter sur les éléments suivants:

  • une clef USB (mais il faut que ce soit un bon modèle)
  • le lecteur de cartes SD
  • Un serveur TFTP

On verra plus tard que la méthode par serveur TFTP se révèle la plus adaptée à ma configuration fortement marquée par l'absence d'un grand câble réseau !

Une fois ces éléments balayés, quel est l'objectif de cette installation ? l est très simple: monter un serveur maison qui prendra en charge les éléments suivants:

  • serveur Web pour héberger mon blog.
  • serveur DHCP pour gérer les demandes de connexion.
  • serveur de noms local
  • accès administratif à distance (avec openSSH).

Maintenant que toutes les questions ont une réponse (c'est la partie dites de spécification), il est temps de mettre les mains dans le cambouis (c'est ça le meilleur).

Etape 3: Merci Martin Michlmayr !

Ce développeur Debian, spécialiste de l'architecture armel a déjà fait l'essentiel du travail d'empaquetage pour générer un installeur Debian pour testing (Squeeze) à placer sur un périphérique de masse. Autant réutiliser ce travail non ? Voici la page d'information.

Vous aurez juste besoin de 2 fichiers: uInitrd et uImage. Pour l'instant, je ne désire pas upgrader u-boot car si la mise à jour plante: je peux dire adieu au serveur... Donc, tant que ça n'est pas indispensable, je ne le fais pas. Peut-être y en aura-t-il besoin pour gérer les problèmes de boot sur USB ? On verra à la fin !

Etape 4: connexion par la console JTAG

A peine on commence que c'est déjà du nouveau. Le sheevaplug possède une connexion mini-USB qui est en fait une sortie JTAG (JTAG est une norme pour les ports de sortie destinés aux tests et aux envois d'informations simples). Cette sortie permet de récupérer le signal d'une sortie série. Cette sortie série par défaut envoie des informations de la même manière qu'une console texte série (que les moins de 20 ans n'ont pas connue) ! Pour résumer, cette connexion JTAG permet de récupérer via USB la console série. Cette console permet de se connecter directement sur la machine. C'est par cette voie que nous allons voir ce que nous faisons.

Attention, veillez à utiliser le câble fourni avec le SheevaPlug: ce n'est pas un câble mini-USB comme les autres !

Une fois le câble branché, le kernel linux de votre machine qui va servir à installer le sheevaplug détecte la console série (chargement des modules adéquats) et ouvre un périphérique pseudo terminal: /dev/ttyUSB0. Pour s'y connecter, on peut utiliser screen:

screen /dev/ttyUSB0 115200

115200 précise la vitesse du transfert série et c'est généralement celle qui est utilisée par défaut sur le Sheevaplug.

Etape 5: Préparer le terrain

La première chose dont j'ai besoin, c'est de faire en sorte que la machine sur laquelle je peux connecter la console série/USB du plugcomputer fasse également passerelle NAT. Hé oui, je ne sais pas comment c'est foutu chez vous mais, de mon côté, je n'ai pas de câble assez long entre le plug computer et le routeur ethernet de la maison. Du coup, je profite d'avoir une interface Wifi sur l'EeeBox qui dispose également d'une connexion Ethernet pour en faire une passerelle.

5.1. Configuration réseau de l'EeeBox

C'est assez simple:

iface eth0 inet static
      address 192.168.1.1
      netmask 255.255.255.0
      network 192.168.1.0
      broadcast 192.168.1.255

5.2. Transformer l'EeeBox en passerelle NAT

Je me suis complètement inspiré de cet article de Debian-administration:

#!/bin/sh

PATH=/usr/sbin:/sbin:/bin:/usr/bin

#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT


# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! ra0 -j ACCEPT
iptables -A FORWARD -i ra0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth0 -o ra0 -j ACCEPT

# Masquerade.
iptables -t nat -A POSTROUTING -o ra0 -j MASQUERADE

# Don't forward from the outside to the inside.
iptables -A FORWARD -i ra0 -o ra0 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward

C'est peut être pas le summum en terme de règles iptables mais ça marche et c'est juste pour effectuer une installation...

5.3. Monter en quelques minutes un serveur TFTP

Sur le serveur (la EeeBox ou autre chose d'atteignable par Wifi), vous pouvez configurer un serveur TFTP pour balancer les fichiers au plugcomputer.

aptitude -R install tftpd-hpa permet d'installer le serveur (le -R permet d'éviter l'installation de inetd que je ne veux pas du tout sur cette machine !).

Ensuite, il faut mettre à "yes" la valeur de la variable RUN_DAEMON du fichier /etc/default/tftpd-hpa. Copier les fichiers dont vous avez besoin dans /var/lib/tftpboot (uImage et uInitrd ou l'image de U-Boot dont vous avez besoin).

C'est prêt...

Ah non, il faut lancer le serveur: /etc/init.d/tftpd-hpa start !

5.4. Configuration réseau de U-Boot sur le plugcomputer

Maintenant, occupons-nous du Sheevaplug. Démarrez la machine et connectez-y votre câble JTAG mini-USB. Ensuite, connectez-vous sur le sheevaplug. Si l'OS par défaut est déjà lancé, vous devrez rebooter et interrompre la séquence de boot lorsque U-Boot vous le proposera. Ensuite, vous pourrez rentrer les séquences de commandes suivantes:

setenv ipaddr 192.168.1.5
setenv netmask 255.255.255.0
setenv gatewayip 192.168.1.1
setenv serverip 192.168.1.1
saveenv

Ces commandes permettent de régler la pile IP de la machine et de définir l'adresse de votre serveur TFTP (192.168.1.1).

5.5. Chargement des fichiers et lancement de l'installeur Debian

Pour le coup, les instructions de Martin MichlMayr fonctionnent ;-):

tftpboot 0x0800000 uInitrd
tftpboot 0x400000 uImage

setenv bootargs console=ttyS0,115200n8 base-installer/initramfs-tools/driver-policy=most
bootm 0x400000 0x0800000

6. Faire joujou avec l'installeur

Globalement, c'est une installation classique et il n'y a pas de changement comparé à d'habitude. Vous aurez besoin de configurer le réseau manuellement (pas la peine d'installer un serveur DHCP à votre passerelle, ça prendrait plus de temps).

Parfois, l'installeur Debian plante sur l'étape de création des partitions. Il affiche un mesage d'erreur assez peu explicite qui indique que le kernel n'a pas pu avoir accès à une partition. Du coup, on ne peut pas continuer. Dans ce cas, le plus simple est de redémarrer la machine et de relancer le processus d'installation. Dans mon cas, ça a très bien marché. Si ça continue à planter, le plus simple reste de partitionner votre clef USB sur une autre machine et de formatter dans le bon système de fichier les partitions. Ensuite, dans l'installeur, lorsque vous aurez à utiliser le partitionnement, le bug n'aura aucun effet car il ne sera pas nécéssaire de faire quoi que ce soit sur le périphérique de masse.

7. Indiquer à U-Boot comment booter

Une fois que le système d'exploitation est installé sur le périphérique de masse de votre choix, il faut pouvoir le démarrer lors du boot. Ce n'est pas Grub ou Lilo qui sont utilisés mais U-Boot qui n'est pas géré par la distribution mais directement par vous même. Booter l'OS signifie donc que vous avez configuré U-Boot pour le faire. C'est généralement assez simple.

Dans le cas de notre clef USB, on commence par modifier quelques variables qui contiennent les commandes utiles pour booter. Ensuite, il est indispensable de les sauvegarder dans l'espace de la mémoire FLASH dédié par la commande saveenv sinon, vous seriez obligé de les retapper à chaque boot.

setenv bootargs_console console=ttyS0,115200
setenv bootcmd_usb 'usb start; ext2load usb 0:1 0x0800000 /boot/uInitrd; ext2load usb 0:1 0x400000 /boot/uImage'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_usb; bootm 0x400000 0x0800000'
saveenv

run bootcmd

A noter que les noms des fichiers à charger peuvent changer selon les partitions que vous avez installées: l'exemple ci dessus correspond au fait qu'il n'y a pas de partition réservée pour /boot. Ainsi, il est indispensable d'indiquer le chemin complet du fichier (/boot/uInitrd par exemple) dans la partition 1 (usb 0:1). Si vous avez utilisé une partition pour /boot, la partition numéro 1 du périphérique usb contient le contenu de /boot. Le nom du fichier sur la partition ne contient donc pas le répertoire boot.

En règle générale, ça boote sur la clef USB du premier coup, sans avoir besoin de mettre à jour U-Boot (v3.2.16).

8. Précisions pour une installation sur carte SD ou MMC

Il est légitime de vouloir installer le système sur une carte mémoire SD. En effet, il semble que les opérations de lecture/écriture soient plus rapide que sur le port USB. Ensuite, ça laisse le port USB du sheevaplug libre pour tout branchement d'un autre périphérique (genre un disque dur USB avec une grande capacité). Les opérations d'installation sont identiques à celles que j'ai présentées au dessus.

Pour le boot, les instructions sont proches:

setenv bootargs_console console=ttyS0,115200
setenv bootcmd_mmc 'mmcinit; ext2load mmc 0 0x0800000 /boot/uInitrd; ext2load mmc 0 0x400000 /boot/uImage'
setenv bootcmd 'setenv bootargs $(bootargs_console); run bootcmd_mmc; bootm 0x400000 0x0800000'
saveenv

run bootcmd

Conseil pour vous faire gagner un temps précieux ! Si vous voulez booter sur une carte SD, il vous faudra mettre à jour U-Boot mais pas avec n'importe quelle version. La 3.2.19 est déclarée comme pouvant le faire. Il y a également une version patchée de la version 3.2.27 (la dernière officielle) qui permet le boot sur carte SD/MMC. C'est celle que j'utilise !

Pour mettre à jour U-Boot, il suffit de copier le binaire que vous avez téléchargé au niveau de votre serveur TFTP et de lancer la commande suivante sur le Sheevaplug:

bubt u-boot.bin

Marvell>>
**Warning**
If U-Boot Endiannes is going to change (LE->BE or BE->LE),
Then Env parameters should be overridden..
Override Env parameters? (y/n) n

Assurez-vous de répondre n à la question posée: ça remet à zéro la configuration de boot !

9. Conclusion

Vous êtes maintenant en possession d'un bien bel engin: un vrai serveur pas comme les autres qui ne consomme rien ! A ce sujet, cette affirmation se vérifie très facilement: au bout de quelques heures de fonctionnement, si vous mettez la main sur le plugcomputer, vous verrez qu'il n'est pas très chaud.

A vous de faire ce que vous voulez avec sur Internet. La technologie ne prennant pas parti, fâites le bien avec s'il vous plaît (Tor, homeblog, toussa...).

Posted ven. 05 févr. 2010 04:47:22 Tags:

PostGIS: corriger les duplicate rings

PostGIS est plus à cheval sur la forme et la géométrie des objets géographiques comparé à d'autres SIG. Ainsi, il est possible de récupérer des couches "mal formées" issus de logiciels de SIG moins regardants sur la topologie. La conséquence immédiate est l'impossibilité d'effectuer certains traitements avec PostGIS. Sur ces objets, qu'on arrive parfaitement à afficher par ailleurs, on ne peut effectuer d'interrogations complexes et les opérations de calculs ne fonctionnent pas correctement (ST_Area retourne 0).

Pour vérifier qu'un objet est respectueux du modèle géométrique de PostGIS, on peut utiliser la fonction ST_IsValid(champ_géométrique) qui retourne false en cas de problème. Sous la version PostGIS de Debian Squeeze (1.3.6), lorsqu'un objet est mal formé, une erreur est générée indiquant le type d'erreur et son emplacement géographique.

Du fait de la diversité des problèmes de coordonnées géométriques, il est impossible de trouver un traitement global et automatisé de correction. Toutefois, il est bon de disposer d'un moyen de récupérer des objets corrects même légèrement modifiés.

Le code qui suit est ma tentative balbutiante de création d'une fonction de correction des duplicates rings. Le problème corrigé est très précis. Un "Duplicate Rings" est généré lorsqu'un objet de type multipolygone contient des doublons dans sa collection de doublons. Ca arrive par exemple si un multipolygone contient 2 polygones strictement identiques.

Voici le code:

CREATE OR REPLACE FUNCTION corrige_duplicate_rings(geometry)
RETURNS geometry AS $$
DECLARE
  inGeom ALIAS for $1;
  outGeom geometry;
  i integer := 0;
  j integer := 0;
  geom_buffer geometry[];
  doublon boolean := false;
BEGIN
  -- Par défaut, la géométrie en sortie sera équivalente à celle qui doit être traitée
  outGeom := inGeom;
  -- on ne corrige que les polygones multiples et non valides !:
  IF (ST_GeometryType(inGeom) = 'ST_MultiPolygon') THEN
    IF NOT ST_isValid(inGeom) THEN
      -- Extraction des polygones simples de la géométrie dans un tableau:
      FOR i IN 1..ST_NumGeometries(inGeom) LOOP
        geom_buffer[i] := ST_GeometryN(inGeom,i);
      END LOOP;
      -- Boucle de traitement:
      i:=1;
      WHILE i <= array_upper(geom_buffer,1) LOOP
        -- Recherche de doublons:
        j:=1;
        WHILE j <= array_upper(geom_buffer,1) LOOP
          -- Lorsqu'on a un doublon:
          IF NOT j = i THEN
            IF ST_Equals(geom_buffer[i],geom_buffer[j]) THEN
              doublon := true;
              geom_buffer := geom_buffer[1:j-1] || geom_buffer[j+1:array_upper(geom_buffer,1)];
            END IF;
          END IF;
        j:=j+1;    
        END LOOP;
        i:=i+1;
      END LOOP;

      -- A la seule condition d'une présence de doublon, on reconstruit:
      IF doublon THEN
        outGeom := st_collect_garray(geom_buffer);
      END IF;
    END IF;
   END IF;

  RETURN outGeom;

END;
$$ LANGUAGE plpgsql;

A noter que je débute en PL/PGSQL et qu'il est fort possible que la fonction soit perfectible. Mais ce code peut sans doute en inspirer d'autres plus complets et performants... J'ai testé la fonction sur une trentaine de couches mal formées et elle a bien répondu à chaque fois.

La fonction ne fait que corriger les doublons pour ce type d'objet et seulement si elle en recontre. Un exemple d'utilisation:

SELECT ST_IsValid(corrige_duplicate_rings(wkb_geometry)) FROM "parcelles";

Pour mettre à jour une table:

UPDATE "parcelles" SET wkb_geometry=corrige_duplicate_rings(wkb_geometry) WHERE ST_IsValid(wkb_geometry) = FALSE;
Posted ven. 12 févr. 2010 21:23:16 Tags:

PostGIS: corriger les problèmes de nested holes

Parfois, un polygone peut être mal défini: par exemple, au lieu d'avoir un polygone à trous, vous avez un polygone multiple avec deux polygones dont l'un devrait être le trou de l'autre. Ce problème géométrique est remonté dans PostGIS sous l'erreur "nested holes". Graphiquement, voici la représentation d'un nested hole dans QGis et son équivalent corrigé.

Images:

nested hole non nested hole

Comme pour le cas des duplicate rings , les nested holes entraînent l'impossibilité d'effectuer certaines opérations géométriques.

La fonction qui suit a été réalisée en PG/PLSQL dans l'objectif de corriger le cas particulier de nested holes dans des polygones multiples. Elle devrait bien se comporter dans la majorité des cas mail il est probable que certaines situations ne soient pas gérées.

La fonction retourne une géométrie corrigée. Voici un petit exemple d'utilisation sur une couche nommée "parcelles":

SELECT ST_IsValid(corrige_nested_holes(wkb_geometry)) FROM "parcelles";

Pour mettre à jour une table:

UPDATE "parcelles" SET wkb_geometry=corrige_nested_holes(wkb_geometry) WHERE ST_IsValid(wkb_geometry) = FALSE;
Posted jeu. 18 févr. 2010 01:16:51 Tags:

Et vous, vous votez comment ?

Au hasard des flux RSS de ma sphère d'intérêts, je viens de découvrir une excellente présentation intitulée "Méthodes de vote: Comment consulter un groupe de personnes sans fausser le résultat ?" réalisée par Lucas Nussbaum qui est un développeur Debian.

Si vous avez 40 minutes à consacrer, je vous recommande de visionner la vidéo (disponible au format OGV/Theora), je vous invite également à consulter le diaporama présent ici car le sujet est pour le coup très intéressant.

Sans (trop) paraphraser le contenu de la présentation, elle nous permet de faire le point sur les limites des systèmes de vote couramment utilisés et nous présente une méthode parmi plusieurs autres qui règle certains problèmes: la méthode de Condorcet. Cette méthode est employée dans le projet Debian. Si vous avez lu la Constitution du Projet Debian , il est possible que vous n'ayez pas compris de prime abord la méthode de comptabilisation des votes. La présentation vous permettra de mieux visualiser comment ça marche.

Voici les quelques idées qui m'ont marquées:

  • Il est difficile d'être démocratique dans un projet !
  • Même si la liste de diffusion est une solution plus pratique qur l'IRC ou la visio/audio-conférence car elle évite que tout le monde soit présent au même moment, envoyer un email n'est pas si trivial que ça !
  • La liste de diffusion est également sujette au bikeshedding qui est la résultante du fait que les sujets dont on discute longtemps sont ceux qui sont les plus triviaux: alors que peu de personnes peuvent par exemple discuter sur un choix technique complexe comme celui d'un réacteur nucléaire, tout le monde peut s'exprimer sur la couleur d'un abri à vélo et du coup, tout le monde fait entendre son avis.
  • Ceux qui hurlent (ou qui occupent l'espace de paroles) ne sont pas forcément plus représentatifs que d'autres même s'ils sont forcément bien entendu.
  • Le partage d'idée implique de bien maîtriser la langue dans laquelle on s'exprime: un contre-sens est si vite arrivé !
  • Les sondages peuvent ne pas être neutres en fonction de la question posée car ils posent le problème du choix orienté ainsi que du nombre de choix.
  • Le vote classique du type 1 votant vote pour un et un seul candidat pose de nombreux problèmes (consulter le diaporama page 9).
  • La technique du vainqueur de Condorcet règle quelques-uns de ces problèmes.
  • Même si les biais du vote sont bien gérés par la méthode de Condorcet, il ne faut pas oublier l'importance dans un vote des facteurs d'influence tels que le contenu de la campagne, le niveau d'information des votants, la nature du sujet, etc...
Posted ven. 19 févr. 2010 15:10:14 Tags:

Solution de serveur de courrier électronique auto-hébergé (partie 1)

L'email ! Un truc vieux comme Internet, plus ancien que le Web... Un truc moins facile à configurer et à faire tourner à la maison. Avant de se lancer dans la configuration d'un (en fait de plusieurs) serveurs, il est important de comprendre les principes du courrier électronique car ils sont moins (mais beaucoup moins) accessibles que ceux du Web.

Après avoir cherché pendant longtemps, j'ai enfin trouvé comment fonctionne le système du courrier électronique sur Internet (et sur un réseau IP d'une manière générale). Pour cela, j'ai du compulsé les éléments donnés par les sites suivants:

Qu'est-ce-que ça donne ?

Le courrier électronique est une chaîne d'acteurs situés entre une personne qui envoie le courrier et celle qui la reçoit. Les acteurs de la chaîne sont des programmes qui ont différents rôles. Voici la liste de ces programmes et un bref résumé de leur rôle:

  • Le MUA: Le Mail User Agent est le programme qui sert en gros à lire ou à rédiger le courrier électronique. A la base il ne sait faire que ça et rien d'autre ! Thunderbird pour ne citer que lui est donc plus qu'un MUA car il sait envoyer et recevoir des messages en plus de permettre de les écrire et de les lire.
  • Le MSA: Le Mail Sending Agent est le programme chargé d'envoyer le message électronique vers le MTA. Il ne fait que ça: communiquer les emails que le MUA veut envoyer à un MTA. En gros, un MSA est un programme qui sait parler le protocole de mail: SMTP. C'est tout ce qu'on lui demande. On peut donc dire que Thunderbird est un MUA+MSA. Le MSA effectue le travail de lien entre le MUA et le MTA mais il peut le faire de manière intelligente: il peut notamment vérifier que l'utilisateur a bien le droit d'utiliser le MTA...
  • Le MTA: Le Mail Transport Agent est un programme qui se charge, comme son nom l'indique, de transporter le courrier électronique vers un autre MTA ou vers un MDA. C'est un programme essentiel, c'est par lui que le message électronique sort du réseau local vers Internet: vers le MTA du destinataire pour faire simple. Le MTA ne sait faire que ça: transporter d'une machine à une autre. Il ne sait pas (forcément) faire des tris compliqués ou prendre des décisions complexes (ce mail est-il un spam). En revanche, il est incollable sur SMTP et sur la gestion de l'acheminement des messages (le serveur en face ne répond pas: je signale l'erreur et je réessaye plus tard...). Le standard sur Internet pour les MTA est le protocole SMTP: même le serveur exchange de chez Micro$oft l'utilise...
  • Le MDA: Le Mail Delivery Agent est le programme qui fait le lien entre le MTA qui transporte le message et un truc pour stocker physiquement ce message dans une boîte aux lettres. Rappelons que la boîte au lettres est souvent un fichier (ou un ensemble de fichier). Il faut donc un programme dédié à cette opération de stockage. C'est à ce moment, c'est à dire une fois que l'opération délicate de tansport est terminée et qu'on est sûr d'avoir le bon message dans sa totalité qu'on peut lui appliquer des filtres et déterminer si c'est du spam ou non. En conséquence, le MDA est souvent associé au filtrage.
  • enfin, Le MRA: Le Mail Retrieval Agent est le programme qui va récupérer les messages depuis la boîte aux lettres de l'utilisateur lorsque celle-ci n'est pas accessible directement par l'utilisateur. Pour faire simple, vous n'avez pas besoin de MRA si vous avez un accès aux fichiers de la boîte aux lettres. Si votre client (pardon: votre MUA) est capable de lire ces fichiers directement (c'est le cas de Mutt), pas besoin de MRA. Dans la majorité des cas, si vos emails sont hébergés sur une machine qui ne vous appartient pas, celle de votre FAI ou celle de google par exemple, vous avez besoin de les récupérer depuis le serveur distant. Le MRA parle en POP et/ou en IMAP.

Thundebird, qu'est-ce-que c'est finalement ?

Thunderbird = MUA+MSA+MRA le tout en un ! Thunderbird est un MUA car il permet de rédiger et de lire des emails. Thunderbird est un MRA car il cause en POP/IMAP à des machines distantes. Enfin, Thunderbird est un MSA car il sait parler en SMTP directement à un MTA.

Comment tout ça fonctionne ?

Après les présentations, un petit schéma vaut plus qu'un grand discours...

Principes du courrier électronique complet:

                   +---------+          +-------+          +-------+
+-------+  écrit   |         |  envoie  |       |  SMTP    |       |
| Alice |--------->|   MUA   |--------->|  MSA  |--------->|  MTA  |::::>::::
+-------+          |         |          |       |          | envoi |       ::
                   +---------+          +-------+          +-------+       ::   serveur
                                                                           ::   d'envoi
                                                SMTP                       ::   
 ::::::::::::::::::::::::::::<::::::::::::::::::::::::::::<::::::::::::::::::
 ::
 ::.....................................................................................
 ::
 ::   +---------+          +-----+             +-------------+
 ::   |         | appelle  |     | écrit dans  | Boîte       |
 ::::>|   MTA   |--------->| MDA |============>| aux lettres |::::>::::
      |         |          |     | le fichier  | de Bob      |       ::  Sur le
      +---------+          +-----+             +-------------+       ::  serveur
                                                                     ::  qui reçoit
                          POP ou IMAP                                ::
 ::::::::::::::::::::::::::::<:::::::::::::::::::::::::::::::::::::::::
 ::
 ::                           
 ::   +----------+              +-------+
 ::   |          |              |       |     +-------+
 :::::| POP/IMAP |------------->|  MUA  |---->|  Bob  |
      |   MRA    |              |       |     +-------+
      +----------+              +-------+

Quelques programmes connus...

Les néophytes (comme moi pour le moment) de ce sujet se doivent de connaître les programmes de référence dans le domaine. Aussi, voici quelques MxA célèbres:

  • MTA: sendmail (le plus vieux), postfix, qmail et exim4 (celui par défaut dans Debian).
  • MSA: ssmtp, msmtp, nbsmtp, esmtp, et les principaux MTA ont également des MSA intégrés.
  • MDA: procmail, maildrop
  • MRA: fetchmail, getmail
  • MUA: mutt bien sûr, Thunderbird (qui fait tout sauf MTA)

Pourquoi avoir tout cassé en plusieurs morceaux alors qu'aujourd'hui,

tout est intégré ?

Au début (enfin, c'est toujours vrai aujourd'hui), le principe retenu pour la conception de programmes sous Unix était le KISS. Du coup, à chaque rôle un programme... Et c'est ce qui a permis de mettre en place plus facilement des solutions au spam. En effet, plutôt que de devoir modifier toute la chaîne, du client (pardon, du MUA) jusqu'au MRA, il a suffit de travailler sur le MDA et tout était réglé. D'ailleurs, les programmes de MTA utilisés dans le monde entier sont les mêmes qu'il y a 20 ans: sendmail (1980s), postfix (1999), qmail, exim (1995) sont des programmes dont les origines remontent aux débuts d'Internet. Ils ont, certes, été modifiés depuis notamment sur ce qui concerne la sécurité (le protocole SMTP étant pas forcément terrible en terme de design de ce côté) mais les principes de fonctionnement n'ont pas changé.

Le fait de casser en plusieurs morceaux vous donne également plus de liberté: si vous préférrez utiliser procmail comme MDA au lieu d'un autre programme (le MDA par défaut de sendmail par exemple), rien ne vous l'interdit: vous choisissez ce qui est le plus adapté à vos besoins.

Pourquoi on a tout intégré alors qu'il semble que c'était mieux de

tout casser ?

S'il fallait demander à Madame Michu (ou à d'autres que je ne citerai pas) de mettre en place toute cette chaîne pas forcément triviale à configurer, je crains qu'elle se passe de messagerie électronique. On pourrait tout aussi bien dire que ce sont les programmes qui ne sont pas assez simples à configurer et on aura sans doute un peu raison également (n'oublions pas que l'objectif est d'installer son propre serveur de messagerie électronique).

Un MTA n'est pas simple à configurer car on peut faire des milliers de choses avec: router des emails ailleurs, faire des contrôles, ne pas accepter des fichiers plus gros que xMo, faire des notifications à certaines personnes, et j'en passe (surtout que je suis néophyte dans le sujet), etc... De plus, un MTA mal configuré peut relayer du SPAM (et vous pouvez être tenu pour responsable).

Pour l'instant, comme ça semble complexe, le modèle qui a émergé est l'hébergement des serveurs par des spécialistes. Tout ce qui ne nécéssite pas de serveur (MUA/MSA/MRA) est souvent intégré dans le client. Même Mutt qui respecte bien la chaîne et qui est un simple MUA (mais qui fait plein de trucs) sait faire du SMTP, du POP et du IMAP. Du coup, on en revient à un modèle plus simple mais qui s'éloigne un peu de l'origine. C'est ainsi que tous vos emails sont hébergés (et donc potentiellement lus) par d'autres personnes.

Et parfois, certaines madame Michu ne savent même pas qu'il existe des clients de messagerie électronique qu'on peut installer sur sa machine. Les webmails ont le vent en poupe... Est-ce-bien ? Je dirais que ça peut être utile quand on se déplace. Mais rien n'empêche d'installer son propre serveur de webmail sur sa propre machine... Ainsi, il n'y a que moi qui garde mes emails qui n'ont rien à faire chez les autres: je veux qu'on les transporte jusqu'à moi mais après, c'est à moi de gérer ce qui m'appartient.

Pourquoi ne pas utiliser tout simplement GMail ?

D'abord, c'est interessant de savoir comment ça fonctionne: même Gmail suit le modèle indiqué. Google a des MDA, il a des serveurs SMTP (donc des MTA), le MUA peut être celui de google (l'interface web) ainsi que des serveurs POP et IMAP qui permettent à votre MRA de récupérer les emails. Pour pouvoir lire vos emails et les analyser, il y a forcément quelquechose au niveau du MTA et du MDA qui sont tous les deux directement gérés par Google pour récupérer les informations via des filtres (ou comment passer d'un filtre anti-spam à filtre qui fait de la pub !), etc...

Ensuite, ces principes ont toujours cours actuellement; le fait de les comprendre vous permet de voir ce qu'est vraiment Internet à la base. Ne pas oublier que Google lit vos emails pour faire de la pub ciblée !

Quand c'est trop simple, c'est blasant ;-)

Et puis, si je trouvais le moyen pour madame Michu de devenir sa propre hébergeuse de services mails en deux clics au lieu de faire du Minitel 2.0 ?

Conclusion:

C'est sûr, la chaîne de courrier électronique est d'un concept moins simple que celle du mail avec son modèle client-serveur à deux acteurs. Il est indispensable de connaître ses principes avant d'envisager la configuration d'un "serveur de messagerie électronique" car les programmes eux, se qualifient en temps que MTA ou MDA ou MRA.

Le prochain article de cette série sera complètement technique... mais il me faut un peu de temps avant d'arriver à monter un truc adapté à mes besoins et sécurisé !

Posted sam. 20 févr. 2010 17:29:05 Tags:

Un peu de Lakȟota: leçon 1: l'alphabet et les sons

Le Lakȟota (on peut écrire Lakota également) est la langue des Lakȟota, un peuple amérindien des grandes plaines qu'on appelle vulgairement les Sioux. Avant de réussir à parler cette langue, il est indispensable de savoir comment on la prononce. Autant pour un français, apprendre l'anglais est facile car les sons sont proches (disons que nous avons beaucoup de sons en commun), autant le Lakota impose de placer sa langue différamment dans son palais lorsqu'on désire produire un son. Et puis, il est indispensable de savoir lire et prononcer un mot avant d'en comprendre le sens.

Pourquoi apprendre le Lakȟota ? Pour tout un tas de raisons qui sont propres à chacun. Voici les miennes:

  • c'est pas plus con que d'essayer d'apprendre l'Esperanto !
  • c'est la revanche du "sauvage" sur l'homme blanc.
  • J'aimerais bien savoir si les acteurs de Dances with wolves font des fautes ou non !
  • parce que ce peuple de chasseurs-cueilleurs est intéressant: il a été "emporté" par la conquête américaine un peu plus tard que les tribus situées à l'est du Missipi et il a donc pu vivre de manière un peu préservéee jusqu'à après la guerre de sécession. Il reste donc plus de traces qui se retrouvent forcément dans leur langue.
  • contrairement à ce qu'on pourrait croire, c'est loin d'être une langue morte: il existe encore plus de 6000 locuteurs de cette langue et il existe un grand nombre d'ouvrages d'apprentissage pas très compliqués à obtenir (voir tous les liens dans le cours de l'article).

Cette première leçon va servir à dégrossir l'aspect vocal de la langue. Car, d'une part, l'alphabet est un peu différent du nôtre et certains sons sont également nouveaux.

L'alphabet:

De nombreuses tribus amérindiennes ont mis en place des systèmes d'alphabet (les cherokees par exemple) à la suite de l'arrivée des premiers colons. Cet alphabet est, en règle générale, réalisé de manière à ce que chaque symbole reprennent un son de la langue.

En Lakȟota, il existe l'alphabet suivant qui ne comporte que 25 caractères, légèrement différents des notres (merci à l'Unicode de permettre de les représenter):

a b č e g ǧ h ȟ i k l m n ŋ o p s š t u w y z ž '

Ces lettres forment 14 digrammes différents que voici:

aŋ iŋ uŋ čh kh ph th kȟ pȟ tȟ k' č' p' t'

Avec les lettres et les digrammes, on arrive à reproduire l'ensemble des sons de la langue Lakota.

Comment on prononce ?

Voyelles:

Certaines voyelles sont dites nasales, ce sont les digrammes qui utilisent voyelles et ŋ. Les voyelles peuvent être accentuées (avec l'accent aigu comme dans é). Attention, il arrive très souvent qu'un mot change totalement de signification si une de ses voyelles est accentuée.

Symbôle Description du son en Français Mot Lakota d'exemple


a Comme le a de chat > aguyapi ( pain ) e Comme le é de pré > épazo ( pointer vers ) i Comme le i de pie > igmu ( chat ) o Comme le o de pot > oakaŋke ( chaise ) u Comme le ou de gnou > uta ( noisettes ) Comme le an de dans > aŋpétuwi ( soleil ) Comme le "in" en anglais > iŋyan ( rocher ) Comme le on de con ! > uŋči ( grand-mère )

Consonnes:


Symbôle Description du son en Français Mot Lakota d'exemple


b Comme le b de bas > bebela ( bébé )

č Comme "tch" dans tchat > čonala ( un peu )

*čh Comme un "tch" dans atchoum mais > čhapa ( castor ) * plus long

*č' Comme pour č mais avec un arrêt > č'o ( faire un bruit * brutal > d'éclaboussure )

g Comme le g de gorges > gnaška ( grenouille )

ǧ Comme le r de riz ( un peu roulé > ǧi ( être de couleur ) > marron )

h Comme le h de haricot > hokšila ( garçon )

ȟ Proche de "rh" comme dans rat > ȟé ( montagne )

k Comme le k de kangourou > kimimela ( papillon )

*kh Comme le k mais allongé d'un h > khéya ( tortue ) *

Comme le kr dans *croustille > kȟaŋta ( plume ) *

*k' Comme le k mais avec un arrêt > k'a ( creuser ) * brutal

l Comme le l de lit > lowaŋ ( chanter )

m Comme le m de main > matȟo ( ours )

n Comme le n de nez > napé ( sa main )

p Comme le p de patte > pispiza ( chien de prairie )

*ph Comme le p mais allongé d'un h > pheži ( herbe ) *

Comme pr de *prairie > pȟahiŋ ( porc-épic ) *

*p' Comme le p mais avec un arrêt > p'o ( brouillard ) * brutal

s Comme le s de salut > si ( pied )

š Comme le ch de chien > šungmanitu (coyote)

t Comme le t de toi > topa ( quatre )

*th Comme un t mais allongé d'un h > thipi ( bâtiment ) *

Comme le t avec un r comme dans > tȟatȟanka ( bison) * *trait

*t' Comme le t mais avec un arrêt > t'a ( mourir ) * brutal

w Comme le w de water en chtimi Ou > wičhiŋčala ( fille ) comme le w anglais (Waterloo)

y Comme dans yams (comme en > yamni ( trois ) anglais)

z Comme le z de zéro > ziča ( écureuil )

ž Comme le j de jouet > žo ( siffler )


Quelques constats:

Vous noterez que finalement, en Français, il n'y a pas trop de difficulté par rapport au niveau des sons. En effet, chez nous, les voyelles nasalisées (an, on, in) sont courantes. Imaginez la difficulté pour des English de pouvoir simplement prononcer ces sons ! Je me doute bien que l'apprentissage du Lakȟota de l'époque devait sans doute être moins facile pour les Américains que pour les Français si jamais l'un d'entre-eux a pu rencontrer des Lakotas.

Il manque la lettre q qui est remplacée au niveau des sons par k ou kh. La lettre d n'existe pas non plus et il n'y a pas de mots qui utilisent ce son.

La différence entre ȟ et ǧ est vraiment subtile: je pense qu'on peut les confondre naturellement en français car en règle générale, c'est la manière dont ils sont placés qui va naturellement nous faire prononcer le mot correctement.

La lettre h dans čh, th ,ph ,kh vient modifier en durée la manière dont vous prononcez la consonne. Par exemple, avec č, on dit "a*tch*oum" alors qu'avec čh on dirait "a*tchhhh*oum". C'est assez subtil mais le son est bien différent. Le plus simple pour arriver à prononcer correctement c'est de se dire: si j'ai un h derrière une consonne, je prends mon temps pour la dire.

Quelques exercices:

Vous pouvez vous entraîner sur le site du Lakota Language Forum (Lakȟól’iya Owáakhiye Othí en Lakota). Il y a des sections assez bien faîtes qui vous permettront d'entendre des mots complets en Lakota. D'une manière générale, vous pouvez consulter les pages suivantes:

Aller plus loin:

Quelques conseils pour en savoir plus:

  • Regardez Danse avec les Loups: les acteurs qui jouent le rôle des Sioux parlent le Lakota !
  • Il y a The Lodge of Šung'manitu-Išna...A Tribute to the Oglala Lakota People.
  • Vous pouvez également acquérir des livres papiers du Lakota Langage Consortium. Ils sont présents sur Amazon.fr (faire une recherche sur Lakota dans les livres Anglais).
  • Attendez mon prochain article: il s'interessera à un début de grammaire.

Pour méditer, une petite phrase simple ainsi que sa traduction:

  • Phrase Lakota: šungmanitu tȟaŋka ob wačhi emačiyapi.
  • Traduction litérale: Le loup avec il danse ils appellent moi.
  • Traduction française: Je m'appelle "Danse avec les Loups".
Posted sam. 27 févr. 2010 16:09:50 Tags: