RasPy-Preparing

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Voici les différentes étapes qui ont été nécessaire à la réalisation de RasPy.

Télécharger Raspbian

Nous allons commencer par:

  1. télécharger la dernière version de Raspbian sur la page de téléchargement de RaspberryPi.org
  2. L'installer sur une carte SD de 4 Go.
  3. Démarrer votre Pi avec la carte
  4. Ouvrir une session terminal (ou une sessions SSH).
    L'utilisateur par défaut est pi et le mot de passe par défaut raspberry.

Dans un premier temps, nous n'allons pas modifier la configuration du Pi, ni étendre le système de fichier.

Notre premier objectif est de faire un peu de place sur la partition existante.

Identification

Rien ne ressemble plus à un Raspbery-Pi qu'un autre Raspberry-Pi. Tous les Pi branché sur un réseau ont, par défaut, le nom d'hôte raspberrypi.

Même si l'utilitaire fing fait des miracles il faut encore savoir quel est quel Raspberry-Pi (nous en avons souvent plusieurs sur un même réseau.

Solution: changer le nom de l'hôte. Nous allons commencer par changer celui-ci de raspberrypi à raspy

utilité: Cela permet d'identifier plus facilement la machine sur le réseau mais aussi de faire des connexions SSH avec une commande telle que ssh pi@raspy. Plus besoin de connaître ou retrouver l'adresse IP ;-) .

Hostname

Entrez la commande suivante:

sudo nano /etc/hostname

Puis modifiez la ligne

raspberrypi

par

raspy

hosts

Nous allons ensuite modifier le fichier hosts afin que notre Pi sache aussi que raspy soit associer à son adresse locale (bref qu'il est lui même ;-) ). Entrez ensuite la commande suivante:

sudo /etc/hosts

Et modifiez l'entrée 127.0.0.1

127.0.0.1   raspberrypi

en

127.0.0.1   raspy

mise-à-jour

La première chose à faire est de réaliser une mise-à-jour des paquets

sudo apt-get update 

Nettoyage

Nous allons ensuite enlever les éléments superflu pour le projet RasPy.

Retirer X-Windows

Nous comptons réaliser une carte de programmation python rapide et légère, nous pouvons donc nous passer de l'environnement graphique.

sudo apt-get purge x11-common xserver-xorg

Cela va désinstaller une sérue de paquet dans le foulée et nous allons récupérer 870 Mb!!!

sudo apt-get autoremove

Ce qui va installer 171 paquet complémentaire, ce qui représente encore 259 Mb.

Notes:

  • Cela va néanmoins installer tcl8.4 tk8.4 et faire une mise-à-jour de libjavascriptcoregtk-3.0-0, je me demande quel est la pertinence de ces paquets.
  • Cela désinstalle python-tk (interface X-Windows pour applications) et python-idle (environnement de développement simplifié python sous X-windows).

Retirer le Swap

Si votre programme est gourmand en mémoire, il va utiliser le Swap (stocker des sections de mémoire sur la carte SD pour libérer de l'espace).

Cela vieillit prématurément la carte SD (vous pouvez la détruire en quelques heures seulement, voyez cet article).

Il est préférable de tomber à court de mémoire que de ne plus avoir de carte SD (et donc plus de projet!)

Enlevons donc l'utilisation du Swap.

sudo apt-get remove dphys-swapfile 

Première évaluation

Faisons un petit reboot et voyons où nous en sommes arrivé.

sudo shutdown -r now 

Après le redémarrage, nous faisons un df pour connaître l'espace encore occupé. Il est d'environ 1.3Go sur les 3 Go de la partition.

Raspy-df-00.jpg

Nous sommes descendu à 47% de l'espace disponible (pas si mal pour un premier jet).

Regardons un peut du côté de la mémoire...

free -m

Raspy-mem-00.jpg

Nous n'utilisons que 57Mb après démarrage de l'OS. Pas mal non plus pour un début...

La commande cat /proc/meminfo nous apprend qu'une partie de cette mémoire (8Mb) est allouée mais inactive... prête a bosser.

Le temps nécessaire au boot (et obtention de la connexion SSH est de 20 secondes.

Retirer le support NTFS / FUSE

Voici encore quelques optimisations issues du site drogon.net.

Il y a peut de chance que nous utilisions un jour NTFS (système de fichier de Windows), nous pouvons nous séparer de quelques modules en plus.

sudo apt-get purge libfuse2

Fuse permet de monter des systèmes de fichier dans l'espace utilisateur... ce n'est probablement pas/plus pertinent dans le cas de ce projet.

La recommandation original est reprise ci-dessous, il ne reste plus que libfuse2
sudo apt-get purge fuse-utils
sudo apt-get purge libfuse2
sudo apt-get purge libntfs10

Consoles Virtuelles

Savez-vous ce qu'est une console virtuelle? Les utilisez vous?

Sur un système de type Linux, vous avez généralement une console graphique et 6 consoles textes. Il est possible de passer d'une console texte à l'autre en pressant la combinaison de touche Alt+F1, Alt+F2, etc (ou Alt+DROITE, Alt+GAUCHE).

Le retour à la console graphique se fait à l'aide de CTRL+ALT+F1 (mais nous nous sommes déjà occupé de la console graphique).


Avoir une ou deux consoles texte à disposition peut être bien pratique, par contre, votre Pi en démarre 6! Evitons le gaspillage des ressources et faisons un peu de ménage.


Il faut éditer le fichier système inittab à l'aide de la commande

sudo nano /etc/inittab 

et naviguer presque jusqu'à la fin du fichier pour trouver une ligne qui ressemble à ceci:


4:23:respawn:/sbin/getty 115200 tty4


Et commenter ces lignes en plaçant le symbole # en tout début de ligne. Faites le pour les 3 lignes mentionnant tty4, tty5 et tty6.

Préserver la console série

Il est également possible de se connecter sur le Pi à l'aide d'une console série (nécessitant un convertisseur USB/Série que l'on branche sur le GPIO).

Rasp-Hack-USB-Serie-TTL-intro.jpg

Si vous ne comptez pas utiliser cette fonctionnalité avec votre Pi alors vous pouvez également commenter la ligne contenant ttyAMA0 dans le fichier /etc/inittab (comme décrit ci-dessus).

Voyez ce tutoriel pour plus d'informations.

Retirer Python Game

Représente 1.8Mo... que nous pouvons donc éliminer puisque pas vraiment utile dans notre contexte.

cd ~
rm -rf python_games

Retirer les relicats X11

La commande suivante m'apprend que j'ai encore quelques paquets X11 sur la carte.

sudo dpkg --get-selections | grep -v "deinstall" | grep x11

Il s'agit de...

  • dbus-x11
  • libx11-6:armhf
  • libx11-data
  • libx11-xcb1:armhf

Je m'empresse donc de les désinstaller avec:

sudo apt-get remove `sudo dpkg --get-selections | grep -v "deinstall" | grep x11 | sed s/install//`

Ce qui me désinstalle une série de dépendance dans le foulée... pour un total de 149Mb.

sudo apt-get autoremove

Fait encore un peu de ménage et nous enlève 129 Mb supplémentaires.

Préserver GCC

La commande suivante nous permet de lister les package GCC.

sudo dpkg --get-selections | grep -v "deinstall" | grep gcc\-

Nous n'allons pas éliminer GCC de la distribution pour le moment, l'installation de certains EGG Python font parfois appel à une phase de compilation.

Note:

Il est possible d'effacer les anciennes versions de GCC et de ne garder que la version 4.7.

sudo apt-get remove gcc-4.4-base:armhf gcc-4.5-base:armhf gcc-4.6-base:armhf

Préserver les paquets -dev

Pour le moment, nous n'allons pas éliminer les paquet -dev utilisés pour la compilation.

Il est possible de les lister à l'aide de la commande:

sudo dpkg --get-selections | grep "\-dev"

Note:

Il est possible d'effacer ces paquet à l'aide de la commande.

sudo apt-get remove `sudo dpkg --get-selections | grep "\-dev" | sed s/install//`

Doc et fonts

Nous n'avons pas l'intention d'utiliser cette installation pour découvrir l'utilisation des commandes systèmes.... nous n'avons donc pas besoin des manpages.

Par ailleurs, les fonts truetypes ne nous serons pas d'une grande utilité, ni a doc relative au lib raspberry pi.

Nous allons donc désinstaller tout cela:

sudo apt-get remove libraspberrypi-doc fonts-freefont-ttf manpages

Cela libère 58 Mb.

Puis faisons un peu de ménage

sudo apt-get autoremove

qui libère encore 6Mb

Deuxième évaluation

Passons la serpillière

sudo apt-get clean

et voyons ou nous en sommes arrivé.

Raspy-df-01.jpg

Je n'en reviens pas, nous sommes déja en dessous du Giga (environ 887Mo) pour RootFs :-)

Côté mémoire, nous sommes passé de 57Mb a 56Mb. Rien d'extraordinaire mais c'est normal, ce n'est pas sur ce point que les efforts étaient concentrés.

Les plus gros fichiers

Voici une commande qui va nous permettre de trouver les plus gros fichier dans notre système de fichier.

sudo find / -type f -size +10000k -exec ls -lh {} \; | awk '{ print $NF ": " $5 }'

Ce qui produit le résultat suivant:

find: `/proc/2215/task/2215/fd/5': No such file or directory
find: `/proc/2215/task/2215/fdinfo/5': No such file or directory
find: `/proc/2215/fd/5': No such file or directory
find: `/proc/2215/fdinfo/5': No such file or directory
/var/lib/apt/lists/mirrordirector.raspbian.org_raspbian_dists_wheezy_main_binary-armhf_Packages: 34M
/var/swap: 100M
/usr/lib/gcc/arm-linux-gnueabihf/4.6/cc1plus: 9.8M
/usr/share/icons/nuoveXT2/icon-theme.cache: 24M

Nous avons:

  • le swap qui fait 100Mb!!!
  • icon-theme.cache qui est un fichier de 24Mb a lui tout seul.

Si l'on va fureter dans /usr/share/icons/nuoveXT2/ l'on se rend vite compte qu'il y a plein d'autres ressources graphique.

pi@raspy ~ $ cd /usr/share/icons/nuoveXT2/
pi@raspy /usr/share/icons/nuoveXT2 $ ls
128x128  22x22  32x32  48x48  72x72  extra             index.theme
16x16    24x24  36x36  64x64  96x96  icon-theme.cache
pi@raspy /usr/share/icons/nuoveXT2 $ ls -l
total 23820
drwxr-xr-x 12 root root     4096 Feb 16 13:17 128x128
drwxr-xr-x 12 root root     4096 Feb 16 13:17 16x16
drwxr-xr-x 12 root root     4096 Feb 16 13:17 22x22
drwxr-xr-x 12 root root     4096 Feb 16 13:17 24x24
drwxr-xr-x 12 root root     4096 Feb 16 13:17 32x32
drwxr-xr-x 12 root root     4096 Feb 16 13:17 36x36
drwxr-xr-x 12 root root     4096 Feb 16 13:17 48x48
drwxr-xr-x 12 root root     4096 Feb 16 13:17 64x64
drwxr-xr-x 10 root root     4096 Feb 16 13:17 72x72
drwxr-xr-x 10 root root     4096 Feb 16 13:17 96x96
drwxr-xr-x  2 root root     4096 Feb 16 13:17 extra
-rw-r--r--  1 root root 24336748 Feb 16 13:33 icon-theme.cache
-rw-r--r--  1 root root     7512 Apr 16  2012 index.theme
pi@raspy /usr/share/icons/nuoveXT2 $ 

un petit du -h -d 0 nous apprends que cela représente quand même 32Mb.

Ces ressources doivent appartenir à LXDE, il parait que omxplayer nous gratifie d'un joli fichier test.h264 de 30M (une vidéo en haute définition).

Retirer LXDE et omxplayer

sudo apt-get remove lxde-common lxde-icon-theme omxplayer

Note:
lxde-common et omxplayer ne semble déjà plus installés à cet étape. lxde-icon-theme permet de récupérer 5Mb.

Pas de chance, cela laisse toujours en place mon beau fichier /usr/share/icons/nuoveXT2/icon-theme.cache de 24 Mb.

Cette fois, je l'efface manuellement

sudo rm /usr/share/icons/nuoveXT2/icon-theme.cache

Le fichier Swap

En cherchant les plus gros fichiers, nous avons identifié le fichier swap qui fait 100 Mb tout rond.

Nous avons déjà désinstallé dphys-swapfile... ce fichier ne sert donc normalement plus a rien.

Nous pouvons donc nous permettre d'en diminuer la taille à... 1K ;-)

sudo swapoff -a
cd /var
sudo dd if=/dev/zero of=swap bs=1K count=1

Note:
Si dphys-swapfile n'avait pas été désinstallé, une bonne opération serait de le remplir de zéro (pour améliorer la compression de l'image finale). Cela peut se faire à l'aide de la commande

sudo dd if=/dev/zero of=swap bs=1M count=100

Les Logs

Il y a encore moyen de gagner de la place en effaçant les fichiers logs. Cela peut représenter de un à quelques MB.

Cette opération sera à reconduire lorsque l'on voudra préparer l'image finale...

cd /var/log/
sudo rm `find . -type f`

Troisième évaluation

Un petit coup de serpillière (qui récupère quand même quelques méga sur le système de fichier).

sudo apt-get clean

Que nous annonce disk free? (avec la commande df -h)

Raspy-df-02.jpg

Image de sauvegarde

Nous allons réaliser une image de "sécurité" (faire une copie de la carte SD dans un fichier).

Nous allons utiliser l'utilitaire dd sur un système Unix/Linux.

Nous allons éteindre proprement notre pi avec un sudo shutdown -h now puis placer la carte SD dans un système Linux (nous utilisons Linux Mint... dérivé d'Ubuntu... lui même dérivé de Débian).

Identifier le périphérique

Pour commencer, nous allons utiliser l'utilitaire fdisk pour lister les disques et les partitions, y compris les partitions de la carte SD.

sudo fdisk -l 

Il y a beaucoup d'information mais cette qui nous intéresse se trouve précisément ici.

Disque /dev/mmcblk0 : 3965 Mo, 3965190144 octets
4 têtes, 16 secteurs/piste, 121008 cylindres, total 7744512 secteurs
Unités = secteurs de 1 * 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Identifiant de disque : 0x0009bf4f

Périphérique Amorçage  Début         Fin      Blocs    Id. Système
/dev/mmcblk0p1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          122880     6399999     3138560   83  Linux

Notre périphérique (disque) correspondant à la carte SD est /dev/mmcblk0. Vous pouvez d'ailleurs voir les deux partitions correspondantes un peu plus bas (une en W95 et l'autre Linux).

Faire la copie

Nous allons utiliser la commande dd également surnommée Disk Destroyer. Il faut faire bien attention à l'utilisation des paramètres if (entrée) et of (sortie).

La commande suivante copie le contenu de la carte SD (/dev/mmcblk0) dans un fichier (RasPy-Eval3.img) du répertoire courant.

La commande est:

sudo dd if=/dev/mmcblk0 of=RasPy-Eval3.img

Ce qui après la copie nous offre un beau petit fichier de 4 Go (3965190144 octets pour être précis).

Voici le résultat de la commande en sachant que le bloc-size (taille de bloc) est de 512 octets par défaut:

7744512+0 enregistrements lus
7744512+0 enregistrements écrits
3965190144 octets (4,0 GB) copiés, 207,469 s, 19,1 MB/s

Compresser l'image

Nous allons essayer de compresser l'image pour obtenir une archive aussi petite que possible. La compression zip produit une archive de 980Mb.

L'utilisation de la commande

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on RasPy-Eval3.img.7z RasPy-Eval3.img

produit une archive 7z de la taille de 701.6 Mo (c'est déjà mieux)

To Do

  • Raspi-Config: 16Mb pour le GPU. Charger I2C et SPI par défaut.
  • INstaller puDB (debogeur Python en ligne de commande)
  • sudo apt-get install python-pip
  • sudo pip install pyserial
  • Installer les sources Adafruit
  • Installer PySerial, PyUsb
  • S'assurer de la présence de easy_install, pip, sudo pip install RPi.GPIO

Ressource



Tutoriel réaliser par Meurisse D. pour MCHobby.be

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.