Partenaires

CNRS
RESIF
DT
UNAVCO Facility

Rechercher

sur ce site

sur web cnrs


Accueil > Documentation technique > télécommunications > Damn Small Linux sur Soekris 4801

Damn Small Linux sur Soekris 4801

par Olivier Charade - 5 novembre 2008 - modifié le 22 avril 2009

L’installation d’une distribution Linux sur un pc sans clavier, ni écran, ni lecteur de quoi que ce soit peut dérouter. Nous proposons ici une méthode accessible àla plupart des utilisateurs sans obligatoirement comprendre tout ce qu’il y a derrière.

net4801 face avant
Le pc Soekris de type net4801 n’est pas forcément la panacée, mais il m’a permis de comprendre ce que j’attendais d’un pc embarqué en le comparant àd’autres disponibles sur le marché. Il est fait pour être router ou passerelle dans un réseau. Sa première application est la communication et c’est bien ce que nous demandons aux pc que nous installons sur le terrain. Nous n’avons aucun problème de temps réel au sens embarqué du terme (àsavoir une tâche s’effectuant par exemple toutes les 20msec pour afficher des paramètres de navigation au pilote d’un avion de chasse). Il n’est pas question non plus de faire des calculs sur le terrain. Mais nous voulons pouvoir transférer les données depuis le récepteur GPS vers une destination qui peut nécessiter, selon les sites, des méthodes de transport bien différentes.

net4801 face arrièreLe net4801 dispose d’un port USB pour la récupération « Ã pied » ou la connexion vers un périphérique USB de communication, d’un port série DB9 standard pour aller vers un modem (RTC, GSM, GPRS ou satellite style Iridium) ou vers le récepteur (il y a un second port série en interne qu’on peut faire sortir de la boîte), et de 3 ports Ethernet pour aller sur un router àpartir du premier, éventuellement sur le récepteur àpartir du second, voire sur le pc portable du visiteur àpartir du troisième. Il y a encore moyen d’ajouter une carte d’extension sur le port mini-pci interne (carte wifi ?). Cette carte est maintenant annoncée en fin de vie par Soekris mais les nouveaux produits de la gamme présentent des caractéristiques similaires et le travail fait sur cette carte sera transposable immédiatement sur ces petites soeurs.
net4801 intérieur

Avant de découvrir Damn Small Linux (lire Linux embarqué pour les nuls), j’avais trouvé pas mal d’articles sur l’implémentation de différents Linux sur cette carte, que ce soit àpartir de rien (article Linux Magazine 74 sur la coupe de robotique EUROBOT) ou àpartir de distributions officielles comme Ubuntu ou Redhat. Dans le premier cas, je trouvais la solution « sur mesure » (dite « from scratch »)un peu limitative car je n’y trouverai jamais que ce que j’aurai pensé ou su y mettre. Dans le second cas je trouvais, d’une part, ces distributions un peu monstrueuses pour la net4801, et la méthode d’installation pas accessible àtout le monde d’autre part.

En effet, la méthode s’appuyait sur une possibilité par ailleurs très intéressante du BIOS des Soekris : le démarrage sur Ethernet (PXE boot). La carte va chercher sur le réseau local le système sur lequel elle va démarrer. Cela se fait également avec Damn Small Linux, mais commence ànécessiter des compétences réseau/Linux qui éliminent d’entrée beaucoup d’utilisateurs potentiels. Je donne rapidement quelques problèmes liés àce type de démarrage de façon àce que chacun puisse estimer s’il doit s’aventurer sur ce terrain.

La Soekris, en l’absence de système interne, va faire une requête DHCP pour obtenir une adresse IP. Il faut donc un serveur DHCP qui, en plus de l’adresse IP, sache fournir une redirection vers le « serveur de système de démarrage » (qui peut être lui-même). La Soekris va alors chercher àrécupérer son système de démarrage par un tftp (ftp simplifié) vers cette machine. Comme sur le « live CD » ou dans une installation de type « frugale », le futur système Linux se présente en deux images compressées. Si la première est récupérée par tftp, la seconde doit pouvoir être récupérée en montant par NFS l’endroit où elle se trouve. Si l’on n’est pas son propre administrateur réseau, il y a intérêt àbien s’entendre avec lui et qu’il n’ait pas trop d’autres choses àfaire...

Second aspect difficile de cette méthode : il faut modifier l’image du système Linux àtélécharger pour avoir une chance de dialoguer avec la Soekris. Par défaut, tous les systèmes Linux donnent la main àune console constituée d’un écran et d’un clavier. On peut espérer un accès réseau puisque cette méthode repose sur lui, mais le serveur telnet ou ssh est-il activé ? Dans l’affirmative d’où sortent les mots de passe ? Plein de questions auxquelles la seule réponse consiste en une modification de l’image du noyau.

Il ne reste qu’une solution « simple » que je vais maintenant décrire pas àpas : la création d’une Compact Flash « bootable » sur un ordinateur classique que l’on viendra insérer dans la Soekris.

Pour travailler j’ai pris un pc portable que j’ai d’abord démarré sur le « live CD » Damn Small Linux.
J’ai récupéré une CF de 128Mo et je l’ai partitionnée en 60Mo (marquée partition de démarrage) et 68Mo [1]. Comme précisé dans mon article sur l’installation « frugale », il faut créer un système de fichier sur la seconde partition. J’ai choisi un ext2.

Il est important de vérifier quels sont les noms de périphériques choisis par DSL afin de ne pas se tromper de cible. Il faut jouer avec la commande mount et regarder dans le répertoire /mnt quels périphériques DSL a vus au démarrage mais n’a pas montés. Dans mon cas le disque dur du pc était en /dev/hda tandis que la CF était en /dev/hde.

J’ai alors lancé une installation frugale de type Grub sur hde1 en précisant que je voulais mes extensions DSL sur hde2 et en indiquant en « cheat codes » complémentaires 3 ssh noeject acpi=off home=hde2 restore=hde2 opt=hde2. Ce qui se traduit par : « Je veux atteindre le run-level 3 (multi-utilisateur avec réseau mais sans serveur X) ; le serveur ssh est lancé au démarrage, il n’y a pas d’éjection de CD àl’arrêt de la machine [2], pas de gestion de l’alimentation, répertoire home créé sur /hde2 ainsi que le fichier de sauvegarde backup.tar.gz et le répertoire /opt. » [3]
installation frugale

Cette installation faite, il faut :
- monter /dev/hde1
- editer le fichier /mnt/hde1/boot/grub/device.map qui contient la cartographie des disques vus par le pc portable actuellement et n’y laisser que
(hd0)    /dev/hde.
- mettre àjour les informations Grub écrite dans le Master Boot Record de la Compact Flash (informations qui se résument, pour ce qui nous concerne, au contenu du fichier device.map) en faisant

cd /mnt/hde1
sudo grub-install --root-directory=. /dev/hde


- remplacer hde par hda dans boot/grub/menu.list (avec la commande vi « marteau-pilon » :%s/hde/hda/g) et dans /mnt/hde1/boot/grub/device.map,
- monter /dev/hde2 et ajouter àla fin du fichier /mnt/hde2/opt/bootlocal.sh la ligne :
/sbin/getty -L -l /bin/bash -n 19200 ttyS0 vt102
qui demande au système d’ouvrir une console sur le port série sans demande de login (en tant que root) avec les paramètres de « poignée de main » indiqués (attention, cette ligne doit vraiment être la dernière exécutée s’il vous prenait l’idée d’ajouter d’autres choses dans ce fichier).

Et c’est fini [4] !

Une fois la CF insérée dans la Soekris, on peut mettre son pc portable en hyperterminal sur le port série. A la mise sous tension on voit le BIOS détecter la CF et passer la main àDamn Small Linux. Après l’écran DSL ( avec la demande de « cheat codes »), plus rien ne se passe. Nous sommes en fait dans la procédure de démarrage Linux qui envoie ses messages àla console (laquelle n’existe pas). Pour changer cela il faudrait modifier l’image compressée du système. Le seul indice d’une activité est, au bout d’une trentaine de secondes, l’apparition de deux ou trois caractères cabalistiques [5]. Après facilement trois minutes, quand on a perdu tout espoir, un prompt apparaît sur l’hyperterminal et on peut enfin commencer àtravailler.

Quelques remarques sur ce qu’il convient de faire ensuite, même si nous avons tous des objectifs différents pour notre pc embarqué sous DSL.

La première chose àfaire est de donner un mot de passe àl’utilisateur DSL, de façon àpouvoir immédiatement communiquer par ssh avec la Soekris (sans oublier la question de la « persistance »). Si jamais on tape un CTRL-D sur l’hyperterminal, le prompt est définitivement perdu, le redémarrage est la seule façon de reprendre la main...

Il peut être utile de mettre en place un petit programme qui indique àune machine àIP fixe l’IP de la Soekris en fin de démarrage (àplacer dans le home « persistant »).

La sauvegarde de Damn Small Linux écrit àchaque fois un fichier compressé sur hda2. La CF n’aime pas subir trop de cycles d’écriture. Si l’on a prévu une deuxième mémoire de masse (dans notre cas un disque dur traditionnel de pc portable connecté au port IDE de la Soekris et qui apparaît en /dev/hdb), il est plus sain de rediriger cette sauvegarde vers lui (il suffit de modifier le fichier texte /opt/.backup_device).

Un petit mot de la consommation électrique, puisque c’est cet aspect qui nous a fait nous intéresser aux PC Soekris. Ci-après un enregistrement effectué par mon collègue David Stuart : un oscilloscope mesurait une tension aux bornes d’une résistance de 2,7Ω placée sur un des conducteurs de l’alimentation 12V. Les valeurs ont été converties en Ampère.

démarrage d’une Soekris
consommation sur les premières minutes avec zoom sur le courant d’appel au démarrage

Sur la courbe bleue on notera d’abord que ce démarrage dure plus de trois minutes. Les pics de consommations supérieurs à500mA qui suivent sont dus àune écriture toutes les 30 secondes sur le disque dur IDE, écriture que j’ai volontairement programmée par crontab pour en observer l’impact. Il semble qu’il y ait d’autres petits pics de consommation réguliers dont je n’ai pas identifié la source. On constate qu’en dépit de l’ajout de ce disque dur traditionnel, la consommation ne dépasse guère les 4W.

Ma configuration

Je vais décrire ici un certain nombre d’éléments que j’ai ajoutés àla configuration de base, au cas où cela pourrait servir àquelqu’un.

réseau :

La Soekris possède trois interfaces Ethernet. J’ai laissé la première en client dhcp pour pouvoir rejoindre n’importe quel réseau local ; j’ai forcé la seconde en 192.168.1.1 pour me connecter par un câble croisé àun récepteur GPS dont l’interface IP serait également en 192.168.1.0 ; et enfin j’ai forcé la troisième en 192.168.2.1 et j’y ai installé un serveur dhcp, ce qui permet de venir s’y connecter avec un pc portable « normal » (cas d’une visite sur site) et d’utiliser ses outils réseaux habituels pour travailler sur la Soekris (par exemple putty, voire Cygwin pour bénéficier du serveur X).

Pour faire cela, j’ai dà» modifier (en sudo) le fichier /etc/network/interface, sans oublier de le rajouter dans /opt/.filetool.lst :

# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8)

# The loopback interface
# automatically added when upgrading
auto lo eth0 eth1 eth2

iface lo inet loopback

iface eth0 inet dhcp
iface eth1 inet static
       address 192.168.1.1
       netmask 255.255.255.0
       broadcast 191.168.1.255
       gateway 192.168.1.1

iface eth2 inet static
       address 192.168.2.1
       netmask 255.255.255.0
       broadcast 191.168.2.255
       gateway 192.168.2.1

Le serveur DHCP provient de l’extension busyserver.tar.gz . Son installation crée un répertoire busyserver sous /opt. On y trouve un fichier udhcpd.conf àmodifier et àcopier dans /etc (en sudo, toujours). Sans connaître du tout cet outil, le fichier de configuration est assez explicite pour y arriver. J’ai modifié l’adresse et l’interface du réseau par défaut. Lors du lancement par sudo udhcpd j’ai d’abord reçu quelques insultes qui m’ont fait comprendre que :
- je devais limiter le nombre de sessions simultanées à20, ce qui correspondait aux nombre d’adresses IP àdistribuer.
- je devais créer un fichier udhcp.leases accessible en lecture/écriture, ce qui n’était pas le cas de la valeur par défaut en /var/lib/misc/udhcp.leases
- je devais créer un fichier udhcp.pid accessible en lecture/écriture, ce qui n’était pas le cas de la valeur par défaut en /var/run/udhcp.pid

Pour ne pas m’y perdre, j’ai créé /mnt/hdb1/admin/ et j’ai indiqué ce chemin dans /etc/udhcpd.conf pour les fichiers .leases et .pid (il aurait été plus clair de créer ces fichiers dans /opt/busyserver, mais cela aurait provoqué des cycles d’écriture sur la CF).

Bien sà»r il ne faut pas oublier d’ajouter etc/udhcpd.conf dans /opt/.filetool.lst.

Au final, la configuration réseau est mise en place par bootlocal.sh qui contient les lignes

pump -i eth0
ifup eth1
ifup eth2
sudo /opt/bin/udhcpd > /mnt/hdb1/admin/udhcpd.log 2>&1   # dhcp server on eth2

J’ai également voulu connecter un classique modem RTC sur le port série. J’ai eu pas mal de soucis avec le port série 1. J’ai fini par trouver des discussions sur ce problème apparemment lié àce port série sur cette carte qui se concluaient en suggérant de basculer sur le port série 2. Je n’ai trouvé nulle part que ce problème avait été réparé par une version de BIOS ultérieure et, plutôt que de risquer de perdre mon temps, j’ai travaillé sur le port série 2 câble en nappe série. Le travail avec le modem s’est alors passé sans encombre : J’ai pu appeler un numéro depuis la Soekris (avec l’utilitaire microcom, minicom n’est pas disponible sur DSL). L’appel de la Soekris depuis un pc de bureau s’est également passé sans problème. Je vais décrire l’étape suivante qui consiste àfaire attribuer une adresse IP par le pc Soekris àl’appelant, pour pouvoir revenir àune communication sur IP bien plus souple qu’une connexion série simple.

Pour ceux qui n’ont pas l’habitude des fournitures électroniques, il est très facile de « sortir » le port série 2 en utilisant un connecteur DB9 fait pour aller sur une nappe. De l’autre côté, il faut un connecteur HE-10 femelle. On prend une nappe dont on garde 10 conducteurs. On essaie de ne pas se tromper de côté quand on écarte le dixième conducteur afin de pouvoir sertir la DB9, et le tour est joué.

Pour activer mon « serveur » ppp [6], je vais rajouter, dans bootlocal.sh la ligne

pppd /dev/ttyS1 9600 file /opt/ppp/options &

et dans ce fichier /opt/ppp/options j’ai indiqué :

# ppp server options on /dev/ttyS1
noauth
login
lock
-detach
192.168.3.1:192.168.3.2
asyncmap 0
netmask 255.255.255.0
proxyarp
crtscts
modem
persist
logfile /home/dsl/tmp/ppp.log
debug

Je ne vais pas tout détailler. Les points intéressants sont :
- je ne veux pas d’authentification mais je veux un login conforme au fichier /etc/password
- le pc Soekris aura l’IP 192.168.3.1 et son client la suivante
- la liaison ppp se fait au travers d’un modem
- pppd se remet en attente d’une demande de connexion àla fin d’une connexion
- je veux un fichier log dans un répertoire persistant que j’ai créé sous mon home.

Bien que ne souhaitant pas d’authentification au niveau ppp, il faut créer les fichiers /opt/ppp/chap-secrets et /opt/ppp/pap-secrets qui contiennent simplement

#client server secret IP
""       *    ""  -

qui se traduit par « n’importe qui se connecte avec n’importe quel mot de passe ».

J’ai eu plus de mal côté client. Je n’ai réussi àme connecter (et àêtre sà»r de ma configuration ppp côté Soekris) qu’après avoir découvert, sur Ubuntu, l’utilitaire pon (et poff pour couper la communication). Je ne peux pas dire que j’ai beaucoup cherché àcomprendre cet habillage de pppd apparemment destiné àgérer des connexions vers des fournisseurs d’accès. Je me suis contenté de recopier le fichier /etc/ppp/peers/provider proposé par Ubuntu en /etc/ppp/peers/dsl, dans lequel j’ai modifié le numéro de téléphone et le débit (9600 pour reprendre ce que j’avais côté Soekris), et un

pon dsl

a suffit àfaire apparaître une connexion réseau supplémentaire en 192.168.3.2. Un ssh dsl@192.168.3.1 m’a alors permis de me connecter sur mon système d’exploitation Damn Small Linux !


[1J’aurais pu choisir une CF de plus grande capacité et créer une partition de swap (mkswap /dev/hde3; swapon /dev/hde3). Pour démontrer la robustesse du principe, je me suis volontairement limité.

[2sous-entend que le système va demander àl’utilisateur de taper sur une touche du clavier pour terminer l’arrêt et éventuellement redémarrer, ce qui n’est pas compatible avec nos applications.

[3Selon les versions DSL, le remplissage de hde2 est plus ou moins effectué. Il peut être prudent de n’indiquer que opt sur hde2 et de créer ce répertoire immédiatement après cette installation frugale si ce n’est pas fait automatiquement :

mount /dev/hde2
cd /mnt/hde2
sudo mkdir opt
sudo cp /opt/bootlocal.sh opt/
sudo chmod -R g+ws opt
sudo chown -R dsl.staff opt

[4J’ai eu beaucoup de problèmes avec la qualité des CF. J’ai travaillé sur des CF « recyclées » sur lesquelles, sans doute, des secteurs défectueux empêchaient cette procédure de se dérouler correctement. Un indice de l’existence de ce problème est qu’il n’y a pas moyen de monter la partition système pour accéder aux fichiers Grub.

[5En jouant beaucoup sur la vitesse du port série, j’ai obtenu une fois l’affichage de « AT » àcet instant. Lors de l’exploration des périphériques, Damn Small Linux vérifie s’il y a un modem au bout du port série !

[6le terme de serveur est impropre car chacun des deux acteurs de la communication série va devoir lancer pppd. Ils ont des rôles équivalents. Mais nous allons dire àl’un de prendre l’adresse IP qui lui sera proposée, àl’autre d’en proposer une.