{"id":738,"date":"2011-05-20T10:00:38","date_gmt":"2011-05-20T09:00:38","guid":{"rendered":"http:\/\/www.blaess.fr\/christophe\/?p=738"},"modified":"2011-05-20T10:00:38","modified_gmt":"2011-05-20T09:00:38","slug":"construire-son-systeme-personnel-sur-une-carte-pandaboard-3","status":"publish","type":"post","link":"https:\/\/www.blaess.fr\/christophe\/2011\/05\/20\/construire-son-systeme-personnel-sur-une-carte-pandaboard-3\/","title":{"rendered":"Construire son syst\u00e8me personnel sur une carte Pandaboard (3)"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-760 alignright\" style=\"margin: 10px;\" title=\"Pandaboard Ethernet et USB\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/05\/Pandaboard-04.jpg\" alt=\"Pandaboard Ethernet et USB\" width=\"150\" height=\"110\" \/><\/p>\n<p style=\"text-align: justify;\">Dans les articles pr\u00e9c\u00e9dents (<a title=\"Construire son syst\u00e8me personnel sur une carte Pandaboard (1)\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/05\/06\/construire-son-systeme-personnel-sur-une-carte-pandaboard\/\">1<\/a> et <a title=\"Construire son syst\u00e8me personnel sur une carte Pandaboard (2)\" href=\"http:\/\/www.blaess.fr\/christophe\/2011\/05\/13\/construire-son-systeme-personnel-sur-une-carte-pandaboard-2\/\">2<\/a>) nous avons r\u00e9ussi \u00e0 installer un syst\u00e8me minimal sur notre Pandaboard. Toutefois, nous n&rsquo;avons pour le moment pas abord\u00e9 le probl\u00e8me du r\u00e9seau. Je vous propose cette semaine d&rsquo;initialiser l&rsquo;interface Ethernet et d&rsquo;installer quelques services, par exemple pour se connecter \u00e0 distance ou transf\u00e9rer des fichiers sur la carte.<\/p>\n<p>\n<!--more-->\n<\/p>\n<h1>Initialisation de l&rsquo;interface Ethernet<\/h1>\n<p style=\"text-align: justify;\">L&rsquo;interface Ethernet de la carte Pandaboard est assur\u00e9e par un composant SMSC LAN 9514. Celui offre un <em>hub<\/em> USB 2.0 ainsi qu&rsquo;une interface RJ45 10\/100 MBits\/sec. Le driver de ce composant est bien pr\u00e9sent dans le <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-06\/config-linux-2.6.39-rc5-pandaboard-cpb\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-06\/config-linux-2.6.39-rc5-pandaboard-cpb\">fichier de configuration<\/a> du <em>kernel<\/em> que nous avons utilis\u00e9 dans le premier article.<\/p>\n<p style=\"text-align: justify;\">Toutefois, l&rsquo;inconv\u00e9nient de ce p\u00e9riph\u00e9rique est que l&rsquo;interface Ethernet utilise un support USB, et met ainsi plusieurs secondes apr\u00e8s le <em>boot<\/em> \u00e0 \u00eatre d\u00e9tect\u00e9e et initialis\u00e9e par le noyau avant d&rsquo;\u00eatre accessible par l&rsquo;espace utilisateur. Nous devrons donc utiliser une boucle d&rsquo;attente avant de configurer l&rsquo;interface.<\/p>\n<p style=\"text-align: justify;\">Je vous propose de modifier le script d&rsquo;initialisation pr\u00e9c\u00e9dent <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-12\/rcS\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-12\/rcS\">\/etc\/init.d\/rcS<\/a> pour ajouter les lignes suivantes \u00e0 la fin du fichier&nbsp;:<\/p>\n<pre style=\"padding-left: 30px;\">while true\ndo\n    if ifconfig -a | grep '^eth0' &gt; \/dev\/null\n    then\n        break;\n    fi\n    sleep 1\ndone\n\nifconfig eth0 <strong>192.168.3.152<\/strong>\nifconfig lo 127.0.0.1<\/pre>\n<p style=\"text-align: justify;\">Ce script boucle en attendant que la commande <code>ifconfig<\/code> lui fournisse une ligne commen\u00e7ant par <code>eth0<\/code>. Ensuite elle configure l&rsquo;adresse IP de cette interface avec l&rsquo;adresse IP <em>192.168.3.152<\/em>. Il s&rsquo;agit d&rsquo;une adresse que j&rsquo;ai choisie arbitrairement car elle convient au sous-r\u00e9seau de <strong>mon<\/strong> bureau. Vous devrez la modifier pour qu&rsquo;elle corresponde \u00e0 votre environnement.<\/p>\n<p style=\"text-align: justify;\">Pour faire bonne mesure, nous initialisons \u00e9galement l&rsquo;interface <em>loopback<\/em> avec l&rsquo;adresse standard <em>127.0.0.1<\/em>.<\/p>\n<p style=\"text-align: justify;\">Lorsque l&rsquo;on teste le script en red\u00e9marrant la carte, celle-ci se met \u00e0 r\u00e9pondre aux <em>pings<\/em> envoy\u00e9s depuis une autre machine.<\/p>\n<h1>Service de connexion <em>telnet<\/em><\/h1>\n<p style=\"text-align: justify;\">Le premier service que nous allons mettre en \u0153uvre est le d\u00e9mon <code>telnetd<\/code> int\u00e9gr\u00e9 dans Busybox. Celui-ci a \u00e9t\u00e9 compil\u00e9 pr\u00e9c\u00e9demment, et il nous suffit de rajouter son lancement dans le script de d\u00e9marrage.<\/p>\n<p style=\"text-align: justify;\">Le serveur <code>telnetd<\/code> permet \u00e0 un client d&rsquo;initier une connexion TCP\/IP, puis il lance l&rsquo;application <code>\/bin\/login<\/code> pour valider les permissions de l&rsquo;utilisateur. Toutefois, nous n&rsquo;avons cr\u00e9\u00e9 aucun compte pour le moment aussi allons nous demander explicitement \u00e0 <code>telnetd<\/code> de d\u00e9marrer directement un shell, sans authentification suppl\u00e9mentaire. Naturellement ceci ne doit \u00eatre utilis\u00e9 qu&rsquo;\u00e0 des fins de tests sur un r\u00e9seau priv\u00e9.\u00a0Ajoutons donc la ligne suivante \u00e0 la fin du script de d\u00e9marrage.<\/p>\n<pre style=\"padding-left: 30px;\">telnetd -l \/bin\/sh<\/pre>\n<p style=\"text-align: justify;\">Une derni\u00e8re \u00e9tape s&rsquo;impose&nbsp;: le d\u00e9mon <code>telnetd<\/code> utilise les pseudo-terminaux Unix pour g\u00e9rer la communication avec le client <code>telnet<\/code>. Pour cela, il doit ouvrir le fichier sp\u00e9cial <code>\/dev\/pts\/<em>n<\/em><\/code>, <em>n<\/em> \u00e9tant un num\u00e9ro fourni par le <em>kernel<\/em>. Pour que ce fichier soit disponible, nous pouvons demander au noyau de monter sur <code>\/dev\/pts<\/code> un pseudo-syst\u00e8me de fichiers sp\u00e9cial nomm\u00e9 <code>devpts<\/code>. Cela s&rsquo;obtient en ajoutant les lignes suivantes en d\u00e9but de script, juste apr\u00e8s avoir remont\u00e9 l&rsquo;arborescence de la racine.<\/p>\n<pre style=\"padding-left: 30px;\">mkdir \/dev\/pts\nmount none \/dev\/pts  -t devpts<\/pre>\n<p style=\"text-align: justify;\">Red\u00e9marrons notre Pandaboard, et v\u00e9rifions le fonctionnement depuis un autre poste.<\/p>\n<pre style=\"padding-left: 30px;\">[~]$ <strong>ping 192.168.3.152<\/strong>\nPING 192.168.3.152 (192.168.3.152) 56(84) bytes of data.\n64 bytes from 192.168.3.152: icmp_req=1 ttl=64 time=0.770 ms\n64 bytes from 192.168.3.152: icmp_req=2 ttl=64 time=109 ms\n64 bytes from 192.168.3.152: icmp_req=3 ttl=64 time=0.835 ms\n<strong><em>Ctrl-C<\/em><\/strong>\n[~]$ <strong>telnet 192.168.3.152<\/strong>\nTrying 192.168.3.152...\nConnected to 192.168.3.152.\nEscape character is '^]'.\n\n\/ # <strong>cat \/proc\/cpuinfo <\/strong>\nProcessor       : ARMv7 Processor rev 2 (v7l)\nprocessor       : 0\nBogoMIPS        : 2007.19\n[...]\nHardware        : OMAP4 Panda board\nRevision        : 0020\nSerial          : 0000000000000000\n\/ # <strong><em>Ctrl-D<\/em><\/strong>\nConnection closed by foreign host.\n[~]$<\/pre>\n<p style=\"text-align: justify;\">L&rsquo;utilisation du protocole Telnet est tr\u00e8s peu recommand\u00e9e, car il n&rsquo;y a aucune s\u00e9curit\u00e9 dans la transmission des donn\u00e9es &#8211; ni dans celle des mots de passe. Aussi, on pr\u00e9f\u00e8re g\u00e9n\u00e9ralement assurer la connexion sur un syst\u00e8me Linux en employant le protocole SSH (<em>Secure Shell<\/em>) avec lequel non seulement les mots de passe mais \u00e9galement tout le contenu de la session est chiffr\u00e9.<\/p>\n<h1>Connexion s\u00e9curis\u00e9e par <em>SSH<\/em><\/h1>\n<p style=\"text-align: justify;\">Il n&rsquo;y a pas (encore) d&rsquo;impl\u00e9mentation du serveur <code>sshd<\/code> dans <em>Busybox<\/em>, mais il en existe plusieurs libres (par exemple <em>Open SSH<\/em>). J&rsquo;ai choisi d&rsquo;utiliser plut\u00f4t <em>Dropbear<\/em>, dont l&#8217;empreinte m\u00e9moire est plus faible.<\/p>\n<p style=\"text-align: justify;\">T\u00e9l\u00e9chargeons la derni\u00e8re version de <em>Dropbear<\/em><\/p>\n<pre style=\"padding-left: 30px;\">[~]$ <strong>cd Projets\/Panda<\/strong>\n[Panda]$ <strong>wget http:\/\/matt.ucc.asn.au\/dropbear\/releases\/dropbear-0.53.1.tar.bz2<\/strong>\n[...]\n2011-05-19 00:04:37 (169 KB\/s) - \u00abdropbear-0.53.1.tar.bz2\u00bb sauvegard\u00e9 [1577227\/1577227]\n[Panda]$ <strong>tar -xjf dropbear-0.53.1.tar.bz2 <\/strong>\n[Panda]$ <strong>cd dropbear-0.53.1<\/strong>\n[dropbear-0.53.1]$<\/pre>\n<p style=\"text-align: justify;\">Ajoutons dans notre <code>PATH<\/code> le chemin permettant d&rsquo;atteindre le <em>cross-compiler<\/em> (<code>arm-linux-gcc<\/code>).<\/p>\n<pre style=\"padding-left: 30px;\">[dropbear-0.53.1]$ <strong>export PATH=$PATH:\/cross-arm-linux\/usr\/bin\/<\/strong>\n[dropbear-0.53.1]$<\/pre>\n<p style=\"text-align: justify;\">Puis pr\u00e9parons la compilation via le script <code>configure<\/code>. Nous lui indiquons dans la variable <code>host<\/code> le pr\u00e9fixe \u00e0 ajouter devant les noms des outils de la <em>toolchain<\/em> pour r\u00e9aliser la compilation crois\u00e9e. Sur ma machine, le <em>package<\/em> <code>zlib-devel<\/code> est absent, aussi je d\u00e9sactive cette option non indispensable.<\/p>\n<pre style=\"padding-left: 30px;\">[dropbear-0.53.1]$ <strong>.\/configure --host=arm-linux --disable-zlib<\/strong>\nconfigure: WARNING: If you wanted to set the --build type, don't use --host.\n    If a cross compiler is detected then cross compile mode will be used.\nchecking for arm-linux-gcc... arm-linux-gcc\n[...]\nconfigure:\nconfigure: Now edit options.h to choose features.\n[dropbear-0.53.1]$<\/pre>\n<p style=\"text-align: justify;\">Les options par d\u00e9faut de <code>options.h<\/code> me satisfaisant, je d\u00e9marre la compilation&nbsp;:<\/p>\n<pre style=\"padding-left: 30px;\">[dropbear-0.53.1]$ <strong>make<\/strong>\n[...]\narm-linux-gcc  -o dropbearconvert dbutil.o buffer.o dss.o bignum.o signkey.o rsa.o random.o queue.o atomicio.o compat.o  fake-rfc2553.o  dropbearconvert.o keyimport.o libtomcrypt\/libtomcrypt.a libtommath\/libtommath.a -lutil\n[dropbear-0.53.1]$<\/pre>\n<p style=\"text-align: justify;\">L&rsquo;utilitaire <code>scp<\/code> permet de copier des fichiers facilement d&rsquo;une machine \u00e0 l&rsquo;autre, nous devons le compiler s\u00e9par\u00e9ment.<\/p>\n<pre style=\"padding-left: 30px;\">[dropbear-0.53.1]$ <strong>make scp<\/strong>\n[...]\narm-linux-gcc  -o scp scp.o progressmeter.o atomicio.o scpmisc.o compat.o\n[dropbear-0.53.1]$<\/pre>\n<p style=\"text-align: justify;\">Nous allons devoir r\u00e9ins\u00e9rer la carte m\u00e9moire Micro-SD de la Pandaboard sur le syst\u00e8me cible. Par la suite, nous pourrons transf\u00e9rer directement les fichiers par le r\u00e9seau. Copions d\u00e9j\u00e0 les trois fichiers ex\u00e9cutables n\u00e9cessaires (<code>dropbearkey<\/code> sert \u00e0 pr\u00e9parer la cl\u00e9 secr\u00e8te du serveur SSH).<\/p>\n<pre style=\"padding-left: 30px;\">[dropbear-0.53.1]$ <strong>su<\/strong>\nMot de passe :\n[dropbear-0.53.1]# <strong>cp dropbear \/media\/root\/usr\/bin\/<\/strong>\n[dropbear-0.53.1]# <strong>cp dropbearkey \/media\/root\/usr\/bin\/<\/strong>\n[dropbear-0.53.1]# <strong>cp scp \/media\/root\/usr\/bin\/<\/strong>\n[dropbear-0.53.1]#<\/pre>\n<p style=\"text-align: justify;\">Une connexion par SSH n\u00e9cessite obligatoirement une identification avec un nom de compte et un mot de passe. Or nous n&rsquo;avons cr\u00e9\u00e9 aucun compte sur la Pandaboard. Corrigeons ceci en ajoutant un fichier <code>\/etc\/passwd<\/code> qui contient une unique ligne pour le compte <em>root<\/em>.<\/p>\n<pre style=\"padding-left: 30px;\">[dropbear-0.53.1]# <strong>echo \"root:hij0peA8cbCDM:0:0:root:\/root:\/bin\/sh\" &gt; \/media\/root\/etc\/passwd<\/strong>\n[dropbear-0.53.1]# <strong>umount \/media\/root\/<\/strong>\n[dropbear-0.53.1]# <strong>umount \/media\/boot\/<\/strong>\n[dropbear-0.53.1]# <strong>exit<\/strong>\n[dropbear-0.53.1]$<\/pre>\n<p style=\"text-align: justify;\">Cette ligne contient sept champs s\u00e9par\u00e9s par des deux-points. Le premier est le nom du compte, il est suivi du mot de passe crypt\u00e9, des <em>User IDentifier<\/em> et <em>Group IDentifier<\/em>, du nom complet de l&rsquo;utilisateur, de son r\u00e9pertoire personnel et enfin de son shell de connexion.<\/p>\n<p style=\"text-align: justify;\">Le mot de passe ici est <code>\"root\"<\/code>. Comment obtenir la cha\u00eene crypt\u00e9e&nbsp;? simplement en utilisant l&rsquo;utilitaire <code>cryptpw<\/code> contenu dans Busybox. Par exemple, j&rsquo;avais saisi lors de la premi\u00e8re session telnet la commande suivante pour obtenir le cryptage ci-dessus (la cha\u00eene fournie change \u00e0 chaque appel, elle contient une part al\u00e9atoire).<\/p>\n<pre style=\"padding-left: 30px;\">\/ # <strong>cryptpw root<\/strong>\nhij0peA8cbCDM\n\/ #<\/pre>\n<p style=\"text-align: justify;\">Dans le script d&rsquo;initialisation, il va falloir d&rsquo;abord g\u00e9n\u00e9rer la cl\u00e9 priv\u00e9e du serveur SSH (chose que l&rsquo;on ne fait en principe qu&rsquo;une seule fois), puis lancer le d\u00e9mon proprement dit. On ajoute donc les lignes suivantes.dans <code>\/etc\/initd.d\/rcS<\/code><\/p>\n<pre style=\"padding-left: 30px;\">if [ ! -f \/etc\/dbkey ]\nthen\n    dropbearkey -t rsa -f \/etc\/dbkey\nfi\ndropbear -r \/etc\/dbkey<\/pre>\n<p style=\"text-align: justify;\">Naturellement, je vous encourage \u00e0 regarder les options offertes par ces diff\u00e9rentes commandes et \u00e0 ajuster leur comportement en fonction de vos contraintes.\u00a0Connectons-nous apr\u00e8s avoir red\u00e9marr\u00e9 la cible&nbsp;:<\/p>\n<pre style=\"padding-left: 30px;\">[~]$ <strong>ssh root@192.168.3.152<\/strong>\nThe authenticity of host '192.168.3.152 (192.168.3.152)' can't be established.\nRSA key fingerprint is 82:49:a3:b7:6e:5e:b2:99:df:6e:a9:45:8c:34:d2:09.\nAre you sure you want to continue connecting (yes\/no)? <strong>yes<\/strong>\nWarning: Permanently added '192.168.3.152' (RSA) to the list of known hosts.\nroot@192.168.3.152's password:  <strong>(root)<\/strong>\n~ # <strong>uname -a<\/strong>\nLinux (none) 2.6.39-rc5-cpb #1 SMP Tue May 3 11:14:47 CEST 2011 armv7l GNU\/Linux\n~ #<\/pre>\n<p style=\"text-align: justify;\">Pas tr\u00e8s facile de distinguer les commandes saisies sur l&rsquo;h\u00f4te de d\u00e9veloppement de celles saisies sur la carte cible\u00a0? Pas de probl\u00e8me, nous allons rendre le <em>prompt<\/em> de la cible plus rep\u00e9rable en y ajoutant un fichier <code>\/etc\/profile<\/code> qui contient la ligne suivante&nbsp;:<\/p>\n<pre style=\"padding-left: 30px;\">export PS1=\"[PANDA W]# \"<\/pre>\n<p style=\"text-align: justify;\">Ce fichier est lu par le shell lors d&rsquo;une connexion sur le syst\u00e8me. La variable d&rsquo;environnement <code>PS1<\/code> correspond au <em>prompt<\/em> du shell, le <code>W<\/code> \u00e9tant remplac\u00e9 par le nom du r\u00e9pertoire courant. D\u00e9connectons-nous puis r\u00e9-\u00e9tablissons la connexion<\/p>\n<pre style=\"padding-left: 30px;\"> # <strong>exit<\/strong>\nConnection to 192.168.3.152 closed.\n[~]$ <strong>ssh root@192.168.3.152<\/strong>\nroot@192.168.3.152's password: (<strong>root<\/strong>)\n[PANDA \/root]#<\/pre>\n<p style=\"text-align: justify;\">Le mot \u00ab\u00a0PANDA\u00a0\u00bb nous permettra de distinguer le shell de la cible de celui de l&rsquo;h\u00f4te de d\u00e9veloppement.<\/p>\n<h1 style=\"text-align: justify;\">Transferts de fichiers par <em>SCP<\/em><\/h1>\n<p style=\"text-align: justify;\">Pour pouvoir transf\u00e9rer des fichiers directement en employant <em>SCP<\/em> (<em>Secure Copy<\/em>), un descendant am\u00e9lior\u00e9 et s\u00e9curis\u00e9 de <em>RCP<\/em> (<em>Remote Copy<\/em>), il faut que le d\u00e9mon <code>dropbear<\/code> puisse trouver l&rsquo;ex\u00e9cutable <code>scp<\/code>. Pour cela, nous allons initialiser la variable d&rsquo;environnement <code>PATH<\/code> correctement dans le script de d\u00e9marrage <code>\/etc\/init.d\/rcS<\/code>. Ins\u00e9rons la ligne suivante avant l&rsquo;invocation de <code>dropbear<\/code><\/p>\n<pre>export PATH=\/bin:\/usr\/bin:\/sbin:\/usr\/sbin:\/usr\/local\/bin:\/usr\/local\/sbin<\/pre>\n<p style=\"text-align: justify;\">Aucune importance si certains r\u00e9pertoires n&rsquo;existent pas, ils seront ignor\u00e9s lors des recherches d&rsquo;ex\u00e9cutables. Profitons-en \u00e9galement pour ajouter la m\u00eame ligne dans le fichier <code>\/etc\/profile<\/code> (disponible <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-20\/profile\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-20\/profile\" target=\"_blank\">ici<\/a>). Puis re-d\u00e9marrons la carte Pandaboard. Une fois le <em>boot<\/em> termin\u00e9, nous pouvons envoyer un fichier depuis l&rsquo;ordinateur h\u00f4te.<\/p>\n<pre style=\"padding-left: 30px;\">[~]$ <strong>echo \"ESSAI DE TRANSFERT\" &gt; mon-fichier<\/strong>\n[~]$ <strong>scp mon-fichier root@192.168.3.152:\/root\/ <\/strong>\nroot@192.168.3.152's password: <em>(<strong>root<\/strong>)<\/em>\nmon-fichier                                                                                                                        100%   19     0.0KB\/s   00:00\n[~]$ <strong>ssh root@192.168.3.152<\/strong>\nroot@192.168.3.152's password: <em>(<strong>root<\/strong>)<\/em>\n[PANDA \/root]# <strong>ls \/root<\/strong>\nmon-fichier\n[PANDA \/root]# <strong>cat \/root\/mon-fichier<\/strong>\nESSAI DE TRANSFERT\n[PANDA \/root]#<\/pre>\n<p>L&rsquo;utilitaire <code>scp<\/code> peut s&#8217;employer dans les deux sens, la syntaxe est la suivante&nbsp;:<\/p>\n<pre><strong>scp<\/strong> <em>fichiers-locaux<\/em>...  <em>utilisateur<\/em><strong>@<\/strong><em>adresse-distante<\/em><strong>:<\/strong><em>\/repertoire-distant\/<\/em><\/pre>\n<p>ou<\/p>\n<pre><strong>scp<\/strong> <em>utilisateur<\/em><strong>@<\/strong><em>adresse-distante<\/em><strong>:<\/strong><em>\/repertoire\/distant\/fichiers<\/em>...  <em>\/repertoire\/local<\/em><\/pre>\n<p style=\"text-align: justify;\">Naturellement, \u00e0 ce stade il vous est possible de cr\u00e9er des comptes utilisateurs avec des droits limit\u00e9s et des mots de passe solides, et de supprimer la connexion <em>root<\/em> (ainsi bien entendu que celle par <code>telnet<\/code>).\u00a0Nous pouvons \u00e0 loisir nous connecter sur notre Pandaboard, et y transf\u00e9rer des fichiers. Terminons cette premi\u00e8re partie sur le r\u00e9seau en installant un petit service simple mais efficace&nbsp;: le serveur HTTP.<\/p>\n<h1>Mise en \u0153uvre d&rsquo;un serveur Web<\/h1>\n<p style=\"text-align: justify;\">L&rsquo;utilisation d&rsquo;un petit serveur web sur un syst\u00e8me embarqu\u00e9 n&rsquo;est pas rare, bien au contraire. Il est fr\u00e9quent de disposer d&rsquo;une interface HTTP pour param\u00e9trer le syst\u00e8me, r\u00e9cup\u00e9rer des statistiques d&rsquo;ex\u00e9cution, visualiser des \u00e9tats, etc. \u00c0 tel point qu&rsquo;il existe de nombreux projets concurrents disponibles pour ce genre de serveur. J&rsquo;en retiendrai trois principaux.<\/p>\n<ul>\n<li style=\"text-align: justify;\">Apache&nbsp;: le serveur HTTP de r\u00e9f\u00e9rence, utilis\u00e9 par plus de la moiti\u00e9 des sites Web. Tr\u00e8s complet, tr\u00e8s modulaire, interfa\u00e7able avec de nombreux langages (Shell, PHP, Python, Perl, etc.). Sauf exception, je pr\u00e9f\u00e8re le r\u00e9server \u00e0 des serveurs d\u00e9di\u00e9s sur Internet.<\/li>\n<li style=\"text-align: justify;\">Lighttpd&nbsp;: serveur destin\u00e9 \u00e0 l&#8217;embarqu\u00e9, il n&rsquo;impl\u00e9mente pas toutes les fonctionnalit\u00e9s de s\u00e9curit\u00e9 d&rsquo;Apache. Il est facilement interfa\u00e7able avec des modules ext\u00e9rieurs (tout particuli\u00e8rement PHP) via une interface CGI.<\/li>\n<li style=\"text-align: justify;\">Busybox&nbsp;: la pr\u00e9sence d&rsquo;un petit d\u00e9mon <code>httpd<\/code> au sein des applets de Busybox simplifie \u00e9norm\u00e9ment la mise en \u0153uvre d&rsquo;un service HTTP simple. Nous allons l&rsquo;utiliser imm\u00e9diatement.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Il nous faut tout d&rsquo;abord transf\u00e9rer sur la cible un fichier HTML que nous copierons dans un r\u00e9pertoire d\u00e9di\u00e9 au service HTTP. Commen\u00e7ons par cr\u00e9er le r\u00e9pertoire.<\/p>\n<pre style=\"padding-left: 30px;\">[PANDA \/root]# <strong>mkdir \/home\/www<\/strong>\n[PANDA \/root]#<\/pre>\n<p style=\"text-align: justify;\">Puis transf\u00e9rons le petit fichier <code>index.html<\/code> que vous pouvez <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-20\/index.html\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-20\/index.html\" target=\"_blank\">trouver ici<\/a>.<\/p>\n<pre style=\"padding-left: 30px;\">[~]$ <strong>scp index.html root@192.168.3.152:\/home\/www\/<\/strong>\nroot@192.168.3.152's password:\nindex.html                                               100%  199     0.2KB\/s   00:00\n[~]$<\/pre>\n<p style=\"text-align: justify;\">Enfin ajoutons la ligne suivante \u00e0 la fin du script de d\u00e9marrage <code>\/etc\/init.d\/rcS<\/code><\/p>\n<pre style=\"padding-left: 30px;\">httpd -f \/home\/www\/<\/pre>\n<p style=\"text-align: justify;\">Apr\u00e8s reboot de notre carte, essayons de joindre son adresse IP depuis un navigateur web sur notre r\u00e9seau local en saisissant directement <code>http:\/\/192.168.3.152<\/code> dans la barre d&rsquo;URL.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-763\" title=\"Capture d'\u00e9cran du navigateur connect\u00e9 sur la carte Pandaboard\" src=\"http:\/\/www.blaess.fr\/christophe\/wp-content\/uploads\/2011\/05\/capture-web.gif\" alt=\"Capture d'\u00e9cran du navigateur connect\u00e9 sur la carte Pandaboard\" width=\"400\" height=\"222\" \/><\/p>\n<h1>Conclusion<\/h1>\n<p style=\"text-align: justify;\">Nous avons ajout\u00e9 plusieurs fonctionnalit\u00e9s facilement sur notre syst\u00e8me embarqu\u00e9, principalement en \u00e9ditant le fichier <code>\/etc\/init.d\/rcS<\/code> (dont voici la <a title=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-20\/rcS\" href=\"http:\/\/www.blaess.fr\/christophe\/files\/article-2011-05-20\/rcS\" target=\"_blank\">nouvelle version<\/a>) car la plupart des services sont d\u00e9j\u00e0 compil\u00e9s dans Busybox.\u00a0Il y a toutefois quelques limites \u00e0 ce syst\u00e8me, que nous essayerons de d\u00e9passer dans les prochains articles\u00a0:<\/p>\n<ul>\n<li style=\"text-align: justify;\">nous n&rsquo;avons initialis\u00e9 que l&rsquo;interface Ethernet, mais il existe une interface Wifi sur la Pandaboard&nbsp;;<\/li>\n<li style=\"text-align: justify;\">nous n&rsquo;avons pas essay\u00e9 de faire de routage ou de r\u00e9solution de nom (par exemple pour acc\u00e9der \u00e0 Internet depuis la Pandaboard)&nbsp;;<\/li>\n<li style=\"text-align: justify;\">l&rsquo;initialisation a \u00e9t\u00e9 faite de mani\u00e8re statique avec une adresse attribu\u00e9e manuellement. Bien que cette approche soit classique dans l&#8217;embarqu\u00e9, on peut pr\u00e9f\u00e9rer utiliser une affectation dynamique d&rsquo;adresse (en employant par exemple le protocole DHCP)&nbsp;;<\/li>\n<li style=\"text-align: justify;\">notre service Web, bien que fonctionnel est vraiment minimal. Il serait int\u00e9ressant de l&rsquo;\u00e9tendre \u00e0 l&rsquo;aide de scripts CGI, voire d&rsquo;utiliser un serveur un peu plus puissant (par exemple <em>Lighttpd<\/em>)&nbsp;;<\/li>\n<li style=\"text-align: justify;\">enfin, d&rsquo;autres services r\u00e9seau peuvent \u00eatre int\u00e9ressant \u00e0 impl\u00e9menter&nbsp;: citons par exemple FTP pour un transfert de fichiers plus connu que SCP, \u00a0NTP ou PTP pour configurer l&rsquo;heure syst\u00e8me de la carte, SNMP pour superviser des \u00e9tats \u00e0 distance, etc.<\/li>\n<\/ul>\n<p style=\"text-align: justify;\">Nous continuerons ces exp\u00e9riences dans de prochains articles&#8230;<\/p>","protected":false},"excerpt":{"rendered":"<p>Dans les articles pr&eacute;c&eacute;dents (1 et 2) nous avons r&eacute;ussi &agrave; installer un syst&egrave;me minimal sur notre Pandaboard. Toutefois, nous n&rsquo;avons pour le moment pas abord&eacute; le probl&egrave;me du r&eacute;seau. Je vous propose cette semaine d&rsquo;initialiser l&rsquo;interface Ethernet et d&rsquo;installer quelques services, par exemple pour se connecter &agrave; distance ou transf&eacute;rer des fichiers sur la [&hellip;]<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,8],"tags":[],"class_list":["post-738","post","type-post","status-publish","format-standard","hentry","category-embarque","category-linux-2"],"_links":{"self":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/738","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/comments?post=738"}],"version-history":[{"count":0,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/posts\/738\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/media?parent=738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/categories?post=738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blaess.fr\/christophe\/wp-json\/wp\/v2\/tags?post=738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}