A la recherche de l`install minimale... pour faire - Mon Club-Elec
Transcription
A la recherche de l`install minimale... pour faire - Mon Club-Elec
A la recherche de l'install minimale... pour faire tourner Arduino. Par X. HINAULT – www.mon-club-elec.fr - Septembre 2012 « De quoi qu'i cause le gars ? » • Au fil de mes installations de distros Ubuntu, de systèmes pour la GLAP-Box (la Gnu/Linux Arduino Processing Box, un système « maison » mini PC embarqué pour robot ) ou tout simplement d'installations d'Arduino sur des vieux eeePC ou encore la perspective de miniPC embarqué tel que le Raspberry-pi aux ressources limitées, je me suis posé la question de quel était le « système minimum » faisable, et même plus exactement quel est « l'ubuntu minimum », pour avoir une interface graphique avec un IDE Arduino ou Processing qui tourne. • Mes tests, essais et pérégrinations m'ont permis de faire quelques trouvailles que je présente ici... Choix de la distro de base • le choix de la « distro » de base, indépendamment des caractéristiques d'un système complet final, est important, même dans le cas de la mise en place d'un système minimal, car il détermine et oriente plusieurs choses quelque soit la taille du système final : ◦ le nombre de paquets disponibles (prêts à l'emploi et déjà compilés) et la facilité de les utiliser, (20 000 paquets pour une Debian ou une Ubuntu contre 2000 pour certaines distro..) ◦ le support des matériels (notamment wifi, webcam, etc...) assuré par ladite distribution, point essentiel voire crucial en pratique, ◦ le type de noyau Linux prêt à l'emploi fourni par ladite distribution (plus il est récent mieux c'est..) ◦ les variantes de la distribution déjà disponibles « clés en main » et les outils d'installation (live CD, USB live, etc...) qui peuvent le cas échéant servir de base pour la mise en place d'un système minimal, ◦ le système de mise à jour, le rythme de développement, etc... ◦ la communauté, la documentation qui l'entoure... • Déjà premier point, çà sera une Gnu/Linux, car c'est ce qui est le plus souple pour créer, bidouiller un système à sa sauce. De plus, je recherche un système pour base x86, donc c'est le choix privilégié, car Gnu/Linux a le maximum de maturité pour cette plateforme... • Et au pays de Linux, j'aime bien et j'ai une bonne habitude d'Ubuntu. J'ai essayé pas mal de choses (différentes distrib'...) , y compris Debian (la grande sœur d'Ubuntu...). Mais Ubuntu a un avantage indéniable par rapport à toutes les autres : elle a le meilleur support matériel à mon avis. Le wifi marche de suite, le matériel audio, vidéo, etc... est reconnu dans la majorité des cas : ce point est essentiel. C'est même la pierre d'achoppement sur laquelle j'ai buté dans tous mes essais avec d'autres distros.... Du genre, on passe plus de temps à résoudre un problème de driver matériel qu'à installer la distribution elle-même. Avec Ubuntu, c'est assez rare de se retrouver dans cette situation avec les dernières versions. • En plus, si on arrive à faire un système Ubuntu minimal, on dispose du coup de tous les paquets dans les dépôts Ubuntu, soit entre 15 et 25 000 selon les versions. Et une fois le système de base installé, après c'est comme le lego, on ajoute les pièces voulues en fonction de ses besoin... Facile... et que du bonheur (enfin, si on a pas peur d'écrire quelques lignes de commande...) ! De plus, en utilisant une version LTS (dite Long Time Support), on s'assure d'avoir un système stable. • J'ai également regardé du côté des distribution « légères », Puppy Linux et autres Slitaz... et j'ai découvert, comme je vais le montrer, qu'on peut se faire une Ubuntu opérationnelle aussi légère que ces distros... ! • Dernier point qui me pousse à utiliser Ubuntu : j'ai déjà mis en place toutes les procédures d'installation de nombreuses fonctionnalités utiles pour un système embarqué (Arduino, Processing, accès VNC, SSH, partage fichier NFS, webcam, OpenCV, etc...) pour cette distro... donc autant potentialiser ce qui a déjà été fait et ce que je sais déjà faire... Les transpositions de l'existant seront donc plus faciles également. C'est fou le temps que l'on peut perdre bêtement lorsque l'on est en territoire nouveau ou inconnu... • Sans compter la doc Ubuntu qui est très fournie aussi bien en français qu'en version anglaise. C'est très rare de ne pas trouver solution à son problème : mieux que çà, en cherchant quelque chose, on apprend souvent au passage pleins de trucs qu'on ne savait pas tant les docs sont généralement bien fournies... • Donc, le choix de la distro de base est ici Ubuntu. La question devient donc, quel est le système Ubuntu minimal faisable ? Pourquoi vouloir un système « minimal » ? • Il y a pleins de distributions d'Ubuntu toutes prêtes, de taille variées... Quel est l'intérêt de chercher à faire un système « minimal » ? Hormis le simple « jeu » de la chose, mettre en place un système Ubuntu minimal a son intérêt dans plusieurs situations : • Tout d'abord dans le cadre d'ateliers Arduino où l'on utilise des netbook anciens pour faire tourner l'IDE Arduino, on a intérêt à installer sur ces machines le système minimum pour que les utilisateurs, souvent néophytes, disposent d'un système simple, rapide et fluide, prêt à l'emploi. Pour que la maintenance des postes soit aussi facilitée : quand on multiplie les manip' par 10 ou 20, çà a son importance ! • D'une manière générale, dans toutes les situations où l'on a une « salle d'ordis » sur lesquels on a besoin d'un minimum de logiciels pour réaliser une tâche précise : par exemple poste internet, ou autre... Pas la peine d'y mettre la suite LibreOffice : un simple navigateur suffira. • Dans le cas d'un mini-PC embarqué, sur un robot ou dans d'autres situations, il est intéressant, et ce même si le système embarqué est « large » en ressources matérielles, de pouvoir construire le système embarqué avec uniquement le nécessaire et l'utile : ◦ afin de réduire l'utilisation des ressources et les réserver pour les fonctions très consommatrices de temps processeur, ◦ de gagner en fluidité de fonctionnement ◦ de limiter la consommation du système, etc... • Même dans le cas d'un desktop ou d'un matériel capable de faire tourner une « grosse » distro, on a intérêt à utiliser un petit système pour avoir la fluidité d'usage maximale... • Tout simplement, pour utiliser un vieux PC et lui donner une nouvelle jeunesse (réellement, c'est très surprenant ce qu'on arrive à faire ! )... L'objectif recherché : quel est le système minimal voulu ? • Système minimal, système minimal... c'est bien joli, mais concrètement, on veut quoi ? • L'objectif ici, dans mon cas, est clair : je veux le système minimal Ubuntu sur base x86 pour obtenir un système graphique opérationnel et sur lequel je peux faire fonctionner Arduino et Processing, et donc avec un java opérationnel installé ! Les 2 voies possibles... • Pour la mise en place d'un système « minimal » ou allégé, il y a typiquement 2 voies possibles : • soit on part d'un système plus gros opérationnel qu'on allège progressivement : c'est la voie descendante... • soit on part du plus petit système possible et on grossit progressivement jusqu'à obtenir le système minimal répondant à nos objectifs. C'est la voie ascendante. Le critère de comparaison : la RAM utilisée au démarrage • Pour évaluer la pertinence d'un système minimal et comparer les systèmes entre-eux, il faut trouver un critère simple et objectif de comparaison. • Il me semble que le critère le plus simple et le plus parlant pour évaluer et comparer les systèmes entre eux est le suivant : la RAM de base utilisée au démarrage du système. • Pour la suite, je me baserai sur ce critère, mesuré dès l'obtention du système lancé opérationnel. J'utiliserai toujours le même logiciel pour la mesure : le logiciel htop disponible en ligne de commande. • On pourrait aussi ajouter la vitesse de démarrage, le nombre de tâches au démarrage, l'utilisation CPU... mais il me semble que tous ces critères vont d'une façon ou d'une autre dépendre du premier, à savoir la RAM de base du système lancé... • A noter que je ne fais pas de la taille du système sur le disque dur un élément de choix essentiel... l'important étant d'abord le fonctionnement opérationnel du système. De toute façon, là encore, il sera nécessairement plus bas si le système est plus léger. Grosso modo on va obtenir un système qui tiendra au mieux sur quelques centaines de Mo et au plus sur quelques Go. Le système Ubuntu minimal « brut de décoffrage » • Premier point de référence qui m'intéresse : quel est le système Ubuntu minimal possible pour obtenir une simple ligne de commande ? • Pour le savoir, il suffit de le créer : le plus simple est de partir du « Minimal CD » qui comme son nom ne l'indique pas, correspond à uniquement l'utilitaire d'installation de la distribution Ubuntu, en téléchargeant les paquets à partir du réseau. • Cette image *.iso ne fait que 27Mo (tout petit) et n'est utilisable qu'avec une connexion réseau disponible. Elle ne peut pas être utilisée en USB live et nécessite un lecteur CD sur le système d'installation. • J'ai préféré le minimal CD à la version alternate Desktop ou alternate Server pour être sûr d'avoir une installation du minimum de paquets et d'un noyau générique (alternate Server utilise un noyau non générique... ) • On a besoin pour ce faire : ◦ d'un lecteur CD sur le système ◦ d'un CD RW pour y graver l'image (à partir d'une Ubuntu déjà opérationnelle) ◦ d'une connexion réseau avec accès internet pour le poste où on installe la distro • La procédure est classique avec une série d'écrans qui permettent l'installation du système Ubuntu de base. • Conclusion : Ce système Ubuntu basique « brut de décoffrage » qui ne donne qu'une ligne de commande utilise 40 Mo de RAM. (20 tâches actives) Il s'agit là de la limite basse • Il sera impossible à priori de faire un système Ubuntu opérationnel en dessous de çà (40 Mo de RAM) ... Mais c'est tout de même un très bon résultat car on pourrait théoriquement ainsi faire tourner cette Ubuntu minimale sur des systèmes n'ayant que 96Mo de RAM voire moins... Encore une fois, à partir de cette Ubuntu, on dispose potentiellement de tous les 20 000 paquets de la distro Ubuntu à la demande ! • Ce système est aussi la base pour tout système Ubuntu que l'on voudrait construire « from scratch ». • C'est un peu comme le miniremix : http://www.ubuntu-mini-remix.org/ Etat des lieux des variantes Ubuntu existantes : comparatif chiffré... • Il existe plusieurs variantes de la distribution Ubuntu, de la plus « grosse » à la plus « légère ». Après quelques tests de toutes ces versions en 12.04 LTS, voici les résultats : ◦ Ubuntu (Unity) : 310 Mo de RAM au démarrage. La version par défaut ◦ Xubuntu (XFCE) : 240 Mo de RAM au démarrage. Une version un peu plus légère, totalement opérationnelle pour un PC de bureau ◦ Lubuntu (LXDE - openbox) : 110 Mo de RAM au démarrage. Un environnement de bureau léger basé sur OpenBox, un gestionnaire de fenêtre léger... Comparatif des distributions Ubuntu 12.04 • Plusieurs constats peuvent être faits à ce stade : ◦ Lubuntu utilise 3 fois moins de ressources au démarrage que Ubuntu unity ◦ Unity est relativement gourmand en ressources ce qui aura pour effet de ralentir le système sans pour autant améliorer le confort d'utilisation... ◦ Xfce apparaît clairement comme un bon compromis pour un poste de travail principal, ce qui fait que nombreux sont ceux qui le choisissent actuellement... au lieu des gourmands Unity ou Gnome 3... sans parler de l'interface... • Le point important : on remarque qu'il existe un « vide » notable entre une « Ubuntu Shell » qui correspond à une Ubuntu démarrée en ligne de commande (40Mo) et une Lubuntu (110Mo) qui est une Ubuntu légère sous Openbox (LXDE)... • La question : est-il possible de faire encore mieux que Lubuntu tout en disposant d'une interface graphique ??? Une trouvaille : la distribution Madbox ! • Je crois bien avoir trouvé le chaînon manquant : il existe une petite distro qui n'a pas encore beaucoup fait parler d'elle (moi je ne connaissais pas... ) mais qui occupe une place intermédiaire entre Ubuntu Shell et Lubuntu... J'ai parlé de la distro Madbox ! • Le site officiel est très sobre : 1 seule page avec le lien de téléchargement de l'iso de la 12.04 LTS. La classe quoi... ! C'est ici : http://madbox.tuxfamily.org/ • En fait, c'est une distribution minimaliste, basée quasiment sur un équivalent de l'Ubuntu Shell auquel a été ajouté uniquement : ◦ le gestionnaire de fenêtre OpenBox (le même que LXDE...) ◦ une barre des tâches (Lxpanel, la même que LXDE...) ◦ et quelques utilitaires de base.... • Résultat des courses : une vraie Ubuntu graphique qui démarre avec seulement... 60 Mo de RAM !! (et même un peu moins... le htop au démarrage affichant parfois 55Mo... ) Autrement dit juste un peu au dessus de l'Ubuntu Shell et moitié moins que Lubuntu. Ce qui nous donne : • Avec la distribution Madbox, véritable distribution Ubuntu allégée, on dispose donc d'un système minimum, en interface graphique, pour seulement 60Mo RAM utilisée au démarrage, ( soit seulement 20Mo de plus que le système en ligne de commande !) soit : ◦ 5 fois moins gourmande que le distribution Ubuntu Unity ◦ 4 fois moins gourmande que Xubuntu ◦ et même 2 fois moins gourmande que Lubuntu • Enfin, bref, cette distro Madbox, je suis fan... Certes, c'est un Ubuntu graphique presque « tout nu», mais c'est justement çà l'intérêt : là-dessus, on ajoute ce qu'on veut et seulement ce qu'on veut ! • C'est quasiment un petit miracle technique ! Le plus impressionnant est la légèreté de gestionnaire de fenêtre openbox qui n'ajoute que 20 Mo de RAM utilisée au système Ubuntu en ligne de commande. Et du coup, c'est une très réelle possibilité de redonner une nouvelle jeunesse à des netbooks qui sont dans le placard, eeePC notamment ! ou encore de rendre fluide un desktop qui se traîne (préférer Lubuntu cependant pour une station de travail..) • L'application « phare » de cette distro sera cependant de créer un système léger de toute pièce, sur base Ubuntu, par exemple pour un mini-PC embarqué sur un robot, type GLAPBox. • Envie de mettre les mains dans le camboui ? C'est par ici : http://davidmadbox.wordpress.com/2012/06/04/madbox-do-it-yourself/ Installation de Madbox • L'installation de Madbox se fait comme pour n'importe quel autre *.iso ◦ télécharger l'image *.iso ici : http://madbox.tuxfamily.org/ ◦ avec unetbootin, graver l'iso sur clé USB ◦ lancer le système comme avec n'importe quelle clé USB live ◦ aller dans le menu Préférence > installer... et c'est parti pour une installation classique • On peut alléger d'emblée la Madbox une fois installée en supprimant le paquet Conky qui n'est pas franchement utile à mon avis : ◦ sudo apt-get remove conky-all ◦ sudo apt-get autoremove • Lancer htop soit en ligne de commande, soit depuis le menu principal Système > htop et découvrez par vous-même que votre système n'utilise que 60Mo de RAM ! Installation d'Arduino sur le système minimum Madbox • Comme je le disais plus haut, l'objectif ici, dans mon cas, est clair : je veux le système minimal Ubuntu sur base x86 pour obtenir un système graphique opérationnel et sur lequel je peux faire fonctionner Arduino (et Processing), et donc avec un java opérationnel installé ! • Donc une fois Madbox installée (ce qui se fait simplement avec l'iso comme vu plus haut), on va pouvoir installer Arduino... • On commence par installer quelques programmes utiles qui ne sont pas inclus dans la distro Madbox : ◦ Synaptic, le gestionnaire de paquet : sudo apt-get install synaptic ◦ Firefox, le navigateur qu'on ne présente plus : sudo apt-get install firefox ◦ gedit, éditeur de texte facile : sudo apt-get install gedit : déjà Geany d'installé ◦ xarchiver : sudo apt-get install xarchiver • Ensuite, on installe les paquets nécessaires pour Arduino ◦ lancer synaptic : sudo synaptic ◦ installer l'openjdk7 (installer le paquet dans Synaptic) : openjdk-7 ◦ installer les paquets nécessaires pour Arduino : ▪ g++ (le compilateur GNU C++) ▪ gcc-avr (compilateur C pour les microcontrôleurs AVR) ▪ avr-libc ◦ une fois, fait, fermer Synaptic. • On Télécharge ensuite le logiciel Arduino ◦ Ouvrir Firefox ( au premier lancement : preferences > demander où enregistrer) ◦ Aller sur le site Arduino à l'adresse http://www.arduino.cc/ , aller dans la rubrique download et télécharger l'archive Linux 32 bits en l'enregistrant dans le répertoire utilisateur Telechargements (à créer au besoin ou tout autre répertoire de votre choix... ) ◦ Ensuite, ouvrir le dossier contenant l'archive et l'extraire sur place (clic droit > extraire ici ) ◦ Ensuite, aller dans le dossier Arduino-xx et faire un clic droit sur le fichier Arduino > Propriétés > Onglet Permission > vérifier que la case « autoriser l'exécution comme un programme » est cochée. • • Premier lancement Utilisation : ◦ Veiller à être au moins en 800x600 pour lancer le logiciel Arduino. ◦ lancer en ligne de commande : ▪ $ cd Telechargements/arduino-1.0 ▪ $ ./arduino Fignolage : ◦ Pour avoir la détection des ports USB, avec la carte UNO, il faut démarrer Arduino en sudo. Pour éviter d'avoir à faire çà (c'est pas l'idéal d'être en sudo pendant l'exécution d'un programme !) et pour régler le problème une fois pour toute , une fois la carte Arduino connectée : ◦ Ajouter l'utilisateur au groupe système dialup qui gère les interfaces matérielles, dont ttyACM0 (NE PAS OUBLIER -a ++++ et modifier nomutilisateur ) ▪ sudo usermod -a -G dialout $USER ◦ Pour info, le groupe dialout est un groupe système qui gère le matériel (voir ici : http://www.debian-administration.org/articles/109 ). Pour vérifier que l'utilisateur a bien été ajouté au groupe dialout, faire : ▪ $ cat /etc/group ◦ et trouver la ligne de la forme : ▪ dialout:x:20:glapbox ◦ ensuite modifier les droits de /ttyACM0 avec la commande (la carte doit être connectée!) : ▪ sudo chmod a+rw /dev/ttyACM0 ◦ Source : http://blog.markloiseau.com/2012/05/install-arduino-ubuntu/ • Installation d'un menu 'Madbox' (attention : c'est casse gueule si vous le sentez pas... ) : ◦ Il ne reste plus qu'à installer le lanceur dans un menu ce qui se fait par : ▪ ouvrir le fichier ~/.config/openbox/menu.xml (accessible par clic droit sur le bureau Settings/Openbox/Edit menu.xml ) <item label="Arduino"> <action name="Execute"> <execute> /home/user/Telechargements/arduino-1.x/arduino </execute> </action> </item> ◦ ce qui correspond à : ▪ <item label="Dossier Téléchargement"> : c'est le nom qui va s'afficher dans le menu • ▪ <action name="Execute"> : c'est ce qui doit se passer quand tu clique sur le nom, dans ce cas "Execute" ◦ Voir ici : http://crunchbanglinux-fr.org/forum/viewtopic.php?id=1456 A présent, il est possible de lancer depuis le menu par clic droit sur le bureau... • La manip' est semblable pour Processing... Résultat des courses : • Si on fait un htop une fois Arduino lancé, on a 85Mo d'utilisation de RAM seulement ! • Donc, si on se résume, on a : ◦ une vraie UBUNTU minimale (avec les paquets dispos, le support matériel, etc...) ◦ en interface graphique ◦ avec Arduino opérationnel (et donc java jdk installé..) ◦ pour seulement 85Mo de RAM au démarrage... ! • Ce résultat permet donc d'envisager d'utiliser Arduino sur de vieux PC ou netbook sans problème... (Prévoir quand même 256 Mo de RAM pour être bien...) Annexe 1 : Comparatif de la RAM utilisée au lancement avec Windows... : je ne résiste pas...et çà vaut le coup d'oeil ! Pour info : source : http://www.anandtech.com/show/5630/indepth-with-the-windows-8-consumer-preview/16 Donc, si j'insère ces données sur mon beau graphique, çà nous donne... (et c'est pas une blague...!) • Il faudrait presque faire un graphique logarithmique ! Donc, on comprend mieux pourquoi Windows.... çà rame (RAM...) ! On constate ici que : ◦ Ubuntu Unity, c'est 3 fois moins de ressources au démarrage que Windows 7/8 desktop ◦ Qu'un Lubuntu, c'est presque 10 fois moins... ◦ et notre Madbox, 15 fois moins de RAM utilisée que Windows !! Et pourtant, le PC il démarre, affiche des fenêtres et tout... • Bon, je sais que la comparaison a ses limites et se limiter à la seule RAM utilisée au démarrage pourra paraître léger (encore que tout le reste suit... ), mais le duel Ubuntu Unity / Windows Desktop est quand même très significatif. • Ce constat pourrait paraître sans conséquence en apparence... mais c'est un constat grave en ce sens que nombreux sont ceux qui vont changer leur matériel uniquement pour pallier à la lenteur du système Windows installé ou de l'incompatibilité de la nouvelle version de Windows avec leur système.... Alors que la machine est encore pleinement fonctionnelle, pour peu qu'on utilise un système de taille adaptée... Et c'est ainsi que des milliers, voire des millions de PC partent à la casse ! • Avec Ubuntu, à l'inverse, des postes qui ont plus de 10 ans (Pentium IV par exemple) tournent parfaitement bien et remplissent leur fonction sans problème (bureautique, navigation web, etc...) • Indépendamment de l'impact écologique clairement positif, avec une distribution libre telle qu'Ubuntu, l'économie financière se fait alors à plusieurs niveaux : ◦ pas d'achat de nouvelles licences Windows ◦ pas d'anti-virus ◦ pas de changement de matériel. • Tout çà pour dire, au final, qu'avec une Madbox, on va faire des miracles ! Annexe 2 : Au pays du « minimal », tous les choix sont importants... • Lorsque l'on va installer des logiciels sur son système minimal, il va falloir penser léger ce qui ne veut pas dire moins performant... Alors voici une liste de logiciels qui va dans ce sens : http://harbhag.wordpress.com/2010/07/02/best-lightweight-applications-for-linux/ Et aussi : créer sa propre iso de Madbox : Télécharger le Skeleton ici : http://davidmadbox.wordpress.com/2012/06/04/madbox-do-it-yourself/ Extraire et renommer le rép Installer les dépendances dans synaptic : squashfs-tools (mksquashfs), deboostrap, genisoimage (mkisofs) Se placer dans le rép de la madbox skeleton précédemment téléchargé Editer le madbox_install.cfg au besoin pour faire modif Puis afficher readme.txt et suivre la procédure...(toutes les étapes suivantes) : sudo su ./madbox.sh rootfs ./chroot.sh madbox_install.cfg ./madbox.sh sqfs ./madbox.sh iso Et c'est fini : l'iso est dans le rép /iso Problème : au démarrage, çà demande un mot de passe... ? Voir également : https://help.ubuntu.com/community/LiveCDCustomizationFromScratch Et aussi : les différentes façon de créer une iso / installer le système. > soit partir de l'iso fournie et faire un script de post install (probablement le plus simple...) > soit créer une iso from scratch à partir du skeleton... mais reste étapes post install quand même > soit créer un iso avec remastersys à partir d'un système installé > Sinon, on peut aussi simplement installer la base à partir de minimalCD puis ensuite installer 1 à 1 les éléments du système . Voir le madbox.cfg du skeleton pour avoir la liste des paquets à installer.