Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

echoping

Ève

Le Raspberry Pi, un petit ordinateur pas cher

Première rédaction de cet article le 17 juillet 2012
Dernière mise à jour le 9 octobre 2012


Depuis les premières annonces, il a déjà généré beaucoup d'articles et de messages. Poussé par un marketing vigoureux, le Raspberry Pi commence à être livré, au compte-gouttes. Les premiers retours d'expérience apparaissent donc. Voici le mien.

Le Raspberry Pi est un ordinateur, de très petit format. Le modèle B que j'ai acheté a un processeur ARM v6 à l'intérieur d'un SoC Broadcom BCM2835, 256 Mo de RAM (attention, le processeur graphique en prend une bonne partie), et plusieurs connecteurs (HDMI, USB, Ethernet, etc). C'est donc un petit engin. Ne comptez pas compiler LibreOffice dessus.

Il est livré sans boîtier ce qui permet de tout voir mais empêche de l'utiliser en déplacement (si vous cherchez un boîtier, regardez cette discussion sur StackExchange) :

Commandé chez Farnell/Element14 (on peut aussi aller chez RS Online mais je n'ai pas testé), il m'a coûté 32 livres. C'est donc un des ordinateurs les moins chers du marché mais attention : pour atteindre ce prix, il est vraiment vendu « sec ». Il n'y a même pas d'alimentation (et, comme il n'a pas de batterie, il faut une en permanence). Il faut donc absolument prévoir un chargeur USB (pas un PC, un vrai chargeur, débitant suffisamment pour le Pi) et une carte SD (le seul espace de stockage du Pi). Il faut aussi, de préférence, un clavier USB et une télévision avec un câble HDMI. On peut se débrouiller sans, via le réseau mais si un problème se pose, déboguer en aveugle est pénible. Donc, profitez des délais de livraison très élevés pour rassembler des accessoires. Notez que le Pi est souvent utilisé par des passionnés d'électronique et que, lorsque vous signalerez un problème sur un forum, la première réponse sera souvent « tu as vérifié la tension à la sortie du chargeur ? » Donc, un voltmètre ne sera sans doute pas inutile non plus.

Tout est bien branché ? Il faut aussi choisir un système d'exploitation (aujourd'hui, seulement les systèmes basés sur Linux) et le mettre sur la carte SD. Parmi les images officielles, j'ai testé Raspbian (fondé sur Debian) et Arch Linux (toutes les deux téléchargées en BitTorrent). Ensuite, on copie les images sur la carte SD avec dd (très bonnes explications en ligne). Attention en branchant la carte SD, l'emplacement est fragile et la carte sort facilement, empêchant le Pi d'y accéder.

Alors, allons-y, branchons le chargeur, le Pi démarre (pas de bouton On/Off). On voit défiler les messages de démarrage traditionnels de Linux sur la télé. Vous pouvez trouver ici tous les messages de démarrage. Il acquiert une adresse IP par DHCP ou en RA. L'image Raspbian officielle actuelle n'a pas IPv6 par défaut, il faudra l'activer en éditant /etc/modules pour ajouter ipv6. Ensuite, on note que SSH est bien démarré :

% sudo nmap 192.168.2.38

Starting Nmap 5.00 ( http://nmap.org ) at 2012-07-06 22:26 CEST
Interesting ports on 192.168.2.38:
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind
MAC Address: B8:27:EB:BA:90:94 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.42 seconds

On peut alors se connecter (la documentation de l'image utilisée indique le mot de passe). Une fois connecté en SSH, on peut admirer le résultat :

% uname -a
Linux raspberrypi 3.1.9+ #90 Wed Apr 18 18:23:05 BST 2012 armv6l GNU/Linux

% df -h
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                  94M     0   94M   0% /lib/init/rw
udev                   10M  136K  9.9M   2% /dev
tmpfs                  94M     0   94M   0% /dev/shm
rootfs                1.6G  1.2G  298M  80% /
/dev/mmcblk0p1         75M   28M   47M  37% /boot

Et s'il ne démarre pas ? Il faut consulter l'excellent guide de dépannage et examiner les LED qui vous renseignent sur les causes du problème.

L'image Arch Linux officielle a IPv6 et SSH par défaut. Il me semble que l'image Arch Linux marche très bien mais Arch Linux n'est pas prévu pour les débutants Unix. À noter que, par défaut, elle n'utilise que 128 Mo de mémoire (192 pour la Debian, soit le maximum car le processeur graphique utilise le reste). Pour avoir plus, il faut copier le fichier /boot/arm224_start.elf en /boot/start.elf, et redémarrer, pour bénéficier de toute la mémoire (moins ce que garde le GPU.

À noter que le Raspberry Pi, toujours pour comprimer les coûts, n'a pas d'horloge stable. Au démarrage, il retourne au 1er janvier 1970. IL faut donc définir l'heure au démarrage, le plus simple étant de se synchroniser à un serveur NTP.

Bon, mais à part à taper uname et df, à quoi sert cet engin ? D'abord, un message important : si vous voulez une solution prête à l'emploi, allez voir ailleurs. Le Pi n'est pas un truc tout fait qu'on met en marche et qu'on utilise. C'est une plate-forme pour des expérimentations, du développement, de l'apprentissage (son faible coût permet de ne pas hésiter à bricoler). J'ai testé trois utilisations possibles :

  • Programmation,
  • Surveillance de réseau,
  • Centre multimédia.

Pour le premier usage, l'intérêt du Pi est son faible coût, qui le rend accessible aux jeunes avec peu d'argent de poche, par exemple. Toutefois, si on a déjà un PC, le Pi n'apporte pas grand'chose en plus (pour les programmeurs en C, il est toutefois utile d'avoir une autre plate-forme matérielle, pour s'habituer à écrire du code portable). Et, si le Pi est le premier ordinateur qu'on a, il faut prévoir la télé, les câbles et le clavier (ce qui renchérit sérieusement le prix) et programmer en bloquant la télé familiale, ce qui sera peut-être peu apprécié. (Il faut aussi commander des cartes SD pré-remplies, ou bien les faire faire par un copain ayant un ordinateur.)

Le Pi a tous les logiciels Unix souhaitables, par exemple le compilateur gcc. Pour travailler avec un langage plus moderne, j'ai fait des essais en Go. L'un des deux compilateurs Go existants, gc, peut produire du code pour les processeurs ARM. Attention, cela ne marche pas du premier coup (illegal instruction dans math/rand) pour des raisons expliquées dans la documentation de Go. Bref, il faut ajouter la variable d'environnement GOARM=5 avant de compiler et, cette fois, tout marche.

Mais rappelez-vous que le Pi est lent : alors que gc compile quasiment toujours instantanément sur un PC de bureau normal, ici, les temps de compilation sont sensibles. Cela laisse le temps de réfléchir.

Autre utilisation possible du Pi : la surveillance de réseau. Là, pas besoin de clavier et d'écran, et la faible consommation électrique du Pi permet de le laisser branché en permanence, sans remords écologiques. L'ARM est un vrai processeur moderne, on peut faire tourner des gros programmes comme Icinga. Ce dernier compile sans problème et tourne ensuite, testant les services qu'on veut tester et signalant les problèmes via son interface Web ou par courrier. Cela me semble, pour l'instant, l'utilisation la plus prometteuse du Pi, dans mon cas. J'y ai consacré un article. (Voir aussi une discussion sur le fonctionnement du Pi 24h/24.)

Troisième utilisation que j'ai testé, le multimédia. Le Pi est, malgré ses faibles capacités quantitatives, normalement capable de toutes les activités multimédia modernes, grâce à son accélérateur graphique. Oui, mais voilà, peu de logiciels savent l'utiliser. C'est en grande partie pour des raisons légales (il faut signer un NDA avec Broadcom pour avoir la documentation du GPU). Ainsi, si on lance X11 (startx), puis MPlayer sur une vidéo, on voit bien son film mais sans son et avec un débit irrégulier. (On peut apparemment lancer MPlayer sans X11 avec un truc comme mplayer -vo sdl -ao sdl -framedrop -lavdopts lowres=1 mais je n'ai pas testé.) Un témoignage typique trouvé sur le réseau donne une idée des difficultés pratiques : « I googled, followed advice and loaded the snd_bcm2835 kernel module. Sound now worked on the 3.5 mini jack output, but not on the TV yet. And mplayer had completely stopped playing video. It wasn't before I had added the line hdmi_drive=2 to my /boot/config.txt file (see the Troubleshooting page) that I could actually hear something on TV. But mplayer played the video even slower. ». (Pour le concurrent de MPlayer, vlc, voir cette question sur StackExchange.)

Le conseil donné en général est donc d'utiliser un ensemble logiciel complètement conçu pour le multimédia. Le plus souvent cité est OpenELEC, que j'ai donc testé après Debian et Arch Linux. OpenELEC est un système d'exploitation libre conçu pour faire tourner un media center, chargé de piloter son et image. Fondé sur Linux, équipé du logiciel XBMC, c'est encore assez expérimental, de mon expérience (j'ai testé la version devel-20120704203304-r11493, peut-être pas encore assez sèche, j'aurais peut-être dû rester à la version 1, stable). L'installation, bien documentée, se passe bien. Leur outil partitionne la carte SD automatiquement (contrairement à ce qui se passe pour Debian et Arch Linux, voir plus loin). Agacement : par défaut, lorsqu'on se connecte en SSH, on récupère une invite avec des couleurs inutilisables sur un fond blanc. Il faut se connecter depuis un terminal avec fond noir pour voir quelque chose et ajouter un ~/.profile (attention, pas un .bash_quelquechose, le shell n'est pas bash) contenant :

PS1='\h \w \$ '

On se reconnecte et on peut voir quelque chose.

Il y a deux interfaces (en plus du shell SSH), une interface Web (très boguée, j'ai vite renoncé) et l'interface sur la télé, qui propose les menus classiques des media centers, accès aux vidéos, à des widgets comme la météo, etc. Les fichiers AVI et MP3 sont joués sans problème et avec une bonne qualité (connexion HDMI avec mon téléviseur Samsung).

Par contre, il y a trop de problèmes agaçants pour songer à remplacer les menus de ma Freebox par ceux de XBMC :

  • Les transferts de fichier prennent un temps fou (carte Ethernet ou SD lente ? En tout cas, 3-4 Mb/s maximum, ce qui est peut-être dû au fait que la carte Ethernet se branche sur le bus USB ou tout simplement à la limite d'écriture des cartes SD), ce qui est gênant pour la vidéo. Avec ces performances, le Pi a du mal à prétendre être fait pour un media center. OpenELEC peut accéder à des fichiers sur le réseau local (partage Samba par exemple). Espérons que, la carte SD n'étant plus en jeu, ce soit plus rapide.
  • Les vidéos WMV ne sont pas visibles (on a seulement le son),
  • Je n'ai jamais trouvé le moyen de faire disparaître le menu quand je regarde un film,
  • La molette de la souris USB n'est pas reconnue (ce qui est embêtant quand on a une liste de 500 MP3 sur l'écran),
  • Afficher une image JPEG fige le logiciel (il faut faire un kill de XBMC).

Bref, comme je l'ai signalé, c'est une plate-forme de développement, pour l'instant, pas encore prête à l'emploi mais du travail intéressant en perspective pour les hackers.

À propos de hackers, ceux-ci sont en général très sensibles (et à juste titre) aux questions de liberté, notamment à celle de pouvoir faire tourner le logiciel de son choix et le modifier comme on veut. Le Raspeberry Pi est-il « libre » ? La question n'est pas simple mais on peut certainement dire qu'il est moins libre que son concurrent (concurrent dans l'esprit des gens : les deux plate-formes n'ont pas du tout les mêmes caractéristiques techniques) Arduino. Les plans de ce dernier sont tous publics alors que le Pi repose sur un circuit Broadcom dont l'interface externe n'est pas officiellement documentée. Je n'ai pas essayé l'Arduino (les modèles basés sur ce concept sont plus chers et plus difficiles à obtenir que le Pi).

Conscient de ce problème, les responsables de Raspberry Pi ont annoncé des ouvertures mais qui semblent très insuffisantes. Conséquences pratiques de ce problème d'un matériel non complètement ouvert : où est-on bloqué dans le bricolage sur le Pi ? On peut apparemment compiler son propre noyau (voir http://www.bootc.net/projects/raspberry-pi-kernel/ et http://elinux.org/RPi_Kernel_Compilation) mais je ne sais pas si on ne doit pas inclure des éléments non-libres (ils sont distribués en https://github.com/raspberrypi/firmware). Si c'est le cas, et cela semble vraisemblable, porter, par exemple, FreeBSD sur le Pi ne sera pas possible. (Il existe au moins un projet pour FreeBSD, avec des indications que ça avance, et un autre projet pour NetBSD.)

Enfin, un peu de technique avec un problème des images officielles Debian et Arch Linux. Elles supposent une carte SD de 2 Go et incluent donc une table de partition inadaptée. Le cas est connu et documenté. On peut réparer cela, soit après le démarrage du système (parted ou cfdisk pour adapter la table des partitions, puis redémarrer, puis formater la nouvelle partition avec mke2fs, puis la monter), soit au moment où on a écrit sur la carte SD (attention à ne pas lancer le mke2fs sur une partition de son ordinateur, dans ce cas...). On peut aussi, au lieu de créer une nouvelle partition sur l'espace libre, agrandir la partition racine avec un coup de resize2fs /dev/mmcblk0p2.

Un avertissement, maintenant. Pour des raisons de coût, le Pi a été très limité. Pas d'alimentation digne de ce nom, pas de mémoire avec correction d'erreurs, etc. Cela veut dire que tout problème matériel va se manifester par des bogues apparemment aléatoires. Ainsi, un problème de tension peut apparemment entraîner une corruption des données. Un problème de RAM peut faire planter le Pi aléatoirement. Enfin, les cartes SD ne sont pas réputées pour leur fiabilité. Bref, faites des sauvegardes. Un moyen simple de copier la carte SD sur un PC Unix est dd bs=1M if=/dev/sdb | gzip -9 > backup-pi-$(date +"%Y-%m-%d").img.gz avec sdb à remplacer par le nom du périphérique dans votre cas.

Voilà, une chose est sûre, le Pi vous permettra de passer des tas de soirées passionnantes, que ce soit pour un été pluvieux ou pour un hiver glacial, et de discuter avec plein d'autres bricoleurs. Quelques lectures :

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)