Installer un Système d'exploitation linux Debian Jessie sur une Raspberry Pi 2

Motivations

Le projet Météo Climat tremplin pour l'enseignement des sciences s'intéresse aux instruments de mesure des paramètres météorologiques et à l'exploitation des données mesurées ainsi qu'au traitement des données météorologiques et climatologiques fournies par Météofrance. Cet intérêt a croisé la volonté institutionnelle d'enseigner le codage. Cette intersection s'est matérialisée autour du nano-ordinateur RaspBerry qui pour une somme abordable pour un établissement d'enseignement (moins de 90 € soit 50€ pour le nano-ordinateur et 40 € de périphériques tels que camera, clé wifi usb etc...) permet de disposer d'un vrai ordinateur multi-coeurs de la taille d'une grosse boite d'allumettes. Cette nano-machine permet autant de créer une interface de mesure avec des capteurs, que de traiter et afficher des donnéesou encore d'écrire des programmes qui s'exécutent sur un smartphone une tablette ou tout autre ordinateur. de simple consommateur de technologie l'élève et son enseignant deviennent acteurs et producteurs de ressources.Toutefois l'accès direct au bas niveau de la machine et le terrain vierge qui est fourni requièrent un travail préliminaire d'installation / configuration, avant que chacun puisse exprimer ses compétences techniques scientifiques ou de design. C'est cette première étape qui est exposée ici afin d'aider ceux qui attendent que ça marche et accompagner ceux qui aiment savoir "comment ça marche".


Sommaire

  1. Historique et présentation sommaire des Raspberry pi

    1. Du développement à l'évolution de la famille raspberry pi
    2. Premiers choix stratégiques
  2. Procédure d'installation du système d'exploitation

    1. Création de l'image Jessie pour la raspberry 2
    2. Téléchargement d'une image Jessie pour la raspberry 2
    3. Formattage et remplissage de la carte SD pour la Raspberry
    4. Premier démarrage de la Raspberry sur le système nouvellement installé
    5. Redémarrage et ajout des outils de gestion des périphériques
  3. Modifications avancées

    1. Mise à jour de la gestion du matériel (point délicat!)
    2. Modification de la configuration réseau et utilisation de la RaspPi à distancec

Téléchargements

  1. image debian jessie pour RaspberryPI2
  2. Fichier bmap pour la copie de l'image
  3. Outils pour le contrôle de la caméra

1. Historique et présentation sommaire des Raspberry pi

(en cours...) 2012 version A B B+

1.1 Du développement à l'évolution de la famille raspberry pi

1.2 Premiers choix stratégiques

Lorsqu'un client achète un ordinateur et encore plus un smartphone ou une tablette, le vendeur lui décrit en détail les nombreux "services clef en main" que propose l'objet, la facilité avec laquelle l'usager qu'il va devenir pourra les obtenir sans jamais bien sûr parler de ce que cet objet pourrait faire si d'autres choix logiciels avaient été faits et bien sûr sans l'informer de tout ce que l'appareil fait sans qu'il en soit informé.

Pour la raspberry vous disposez d'un côté d'un peu d'électronique inerte, d'un autre côté d'une carte mémoire SD vierge, vous devez donc choisir ce que sera le coeur de votre machine et ce qu'elle pourra faire parmi 9 (au 04/06/2015) systèmes d'exploitation possibles. Vous êtes libre de vous baser sur n'importe quel critère vous pouvez choisir l'OS qui correspond le mieux à vos besoins, à votre projet, à vos envies, à vos compétences, voir à vos inquiétudes sur la protection de votre vie privée ou même en fonction de vos positions militantes.

J'ai choisi la distribution linux Debian Jessie parce que c'est la distribution stable au moment ou j'installe ma Raspberry pi 3 et où je reinstalle ma raspberry 2 et parce que depuis la version 2 la raspberry est équipée d'un processeur arm en version 7 (armv7) qui fait partie du matériel pour lequel il existe un dépôt officiel maintenu de la distribution Debian compilée.

Le système d'exploitation Raspbian avait été initialement construit à partir du logiciel source de linux Debian pour fonctionner sur le processeur armv6 qui équipe les Raspberry pi A A+ B B+ et pour lequel il n'existe pas de distribution binaire officielle. La version actuelle (2016/07/06) de raspbian est Jessie. j'avais lors de ma première install utilisé la distrib Wheezy de l'époque puis essayé à plusieurs reprises de migrer vers la version Jessie mais je n'y étais pas parvenu, j'ai donc installé directement la version Jessie standard proposée ici, la présentation de ce site est assez "minimaliste" mais son contenu est très précis juste et efficace. Je reprends ci-dessous la procédure proposée que je commente.

Depuis cette installation j'ai trouvé un script fourni par drtyhlpr sur github qui présente l'avantage de pouvoir modifier les propriétés de l'image au moment de sa création. C'est un projet encore en cours de développement qui mérite à mon avis votre soutien si vous avez du temps à consacrer et qui a atteint un état de maturité suffisant pour être utilisé en production.

2. Procédures d'installation du système d'exploitation

Les deux procédures se recouvrent de façon importante, la nouvelle permettant en plus de faire soi même l'image alors que la procédure initiale utilisait l'image compilée par sjoerd. L'ancienne procédure est décrite au paragraphe 2.1 la nouvelle au 2.2.

2.1 Création de l'image Jessie pour la raspberry 2

Télécharger les scripts depuis github :

git clone https://github.com/drtyhlpr/rpi2-gen-image.git

Aller dans le nouveau répertoire puis créer un fichier exécutable permettant de choisir les options parmi toutes celles qui sont proposées dans le fichier README.md qui est aussi la page de garde github du projet (je donne ici les paramètres que j'ai utilisés qui complètent les exemples fournis sans obligation ni garantie cela va de soi):

cd rpi2-gen-image.git
cat > createMyImage.sh

 #! /bin/sh

HOSTNAME="gerzeh" DEFLOCAL="fr_FR.UTF-8" TIMEZONE="Europe/Paris" EXPANDROOT=false XKBMODEL="pc105" XKBLAYOUT="fr" XKBVARIANT="latin9" XKBOPTIONS="" ENABLE_DHCP=true ENABLE_CONSOLE=false ENABLE_IPV6=true ENABLE_SSHD=true ENABLE_SOUND=true ENABLE_HWRANDOM=true ENABLE_MINGPU=true ENABLE_DBUS=true ENABLE_XORG=true ENABLE_WM="xfce4" ENABLE_UBOOT=false ENABLE_FBTURBO=true ENABLE_USER=true USER_NAME=yourusername ENABLE_ROOT=true ENABLE_ROOT_SSH=false ENABLE_INITRAMFS=true BUILD_KERNEL=true KERNEL_REMOVESRC=true REDUCE_APT=false REDUCE_MAN=false REDUCE_HWDB=false REDUCE_SSHD=false REDUCE_LOCALE=false  ./rpi2-gen-image.sh

fermer le fichier le rendre exécutable et l'exécuter

ctrl-D
chmod a+x ./createMyImage.sh
sudo ./createMyImage.sh

La création de l'image prend un certain temps... soyez patients le script est suffisamment verbeux pour suivre l'évolution sans que ce soit trop fastidieux... à condition de faire autre chose !

L'image créée se trouve dans le répertoire images du dossier rpi2-gen-image :

ls images/jessie/
2016-07-06-debian-jessie.bmap  2016-07-06-debian-jessie.img   build/

Le répertoire build a été utilisé pour la construction et ne contient rien d'utile pour la suite. Lefichier .bmap est un fichier accessoire qui permet d'utiliser l'outil bmaptools pour recopier plus rapidement l'image.

2.2 Téléchargement d'une image Jessie pour la raspberry 2

Télécharger l'image Jessie pour Raspberry La documentation originale (en anglais) se trouve à l'adresse suivante http://sjoerd.luon.net/posts/2015/02/debian-jessie-on-rpi2/

wget https://images.collabora.co.uk/rpi2/jessie-rpi2-20150705.img.gz
wget https://images.collabora.co.uk/rpi2/jessie-rpi2-20150705.img.bmap
gunzip jessie-rpi2-20150705.img.gz

2.3 Formattage et remplissage de la carte SD pour la Raspberry

Formatter la SD

formatter la SD en fat 32 1 seule partition sur toute la surface avec gparted par exemple.

sudo gparted

Copier l'image téléchargée sur la microSD

Cette instruction repose sur le fait d'avoir inséré la microSD dans un adaptateur SD ce qui la fait apparaître à l'emplacement /dev/mmcblk0, cela peut différer selon les machines et les adaptateurs.

sudo bmaptool copy --bmap jessie-rpi2-20150705.img.bmap jessie-rpi2-20150705.img /dev/mmcblk0

ou

sudo bmaptool copy --bmap 2016-07-06-debian-jessie.bmap  2016-07-06-debian-jessie.img /dev/mmcblk0

On obtient une trace du type ::

bmaptool: info: block map format version 2.0
bmaptool: info: 768256 blocks of size 4096 (2.9 GiB), mapped 123252 blocks (481.5 MiB or 16.0%)
bmaptool: info: copying image 'jessie-rpi2-20150705.img' to block device '/dev/mmcblk0' using bmap file 'jessie-r pi2-20150705.img.bmap'
bmaptool: info: 100% copied
bmaptool: info: synchronizing '/dev/mmcblk0'
bmaptool: info: copying time: 1m 23.7s, copying speed 5.8 MiB/sec

Enlever et réinsérer la SD pour vérifier que les 2 partitions ont bien été créées. Augmenter la taille de la partition racine pour occuper tout l'espacedisque disponible. Le plus simple est d'avoir une seule partition pour tous les répertoires du système et les répertoires personnels. Par habitude (option personnelle non obligatoire) je crée 3 partitions, j'étends à 8 Go la racine (si la taille de la SD le permet) pour avoir la place d'installer d'autres logiciels. Avec une grosse SD j'ai aussi l'habitude de créer un /opt de 5 Go ou j'installe les logiciels tiers et un /home avec le reste.

sudo gparted

Fermer gparted et vérifier les partitions en éjectant réinsérant la SD. Si vous avez créé plusieurs partitions il faut pour terminer déplacer le contenu du répertoire /home de la partition racine à la racine de la partion nouvellement créée pour lui. Pour des raisons que je ne comprends pas bien le montage des disques ne se fait pas correctement sur ma machine et je dois utiliser les numéros de montage pour faire cette manip qui est une simple copie en mode archive pour conserver les droits et les propriétaires.

sudo cp -av 29973829-5fc7-432c-ae67-2008f8991eb5/home/vidal _home/
sudo rm -r 29973829-5fc7-432c-ae67-2008f8991eb5/home/vidal

Il est aussi nécessaire (dans le cas de plusieurs partitions) de modifier le fichier /etc/fstab pour qu'au premier boot la RasPi monte le /home et le /opt sur les bonnes partitions. Éditer le fichier /etc/fstab pour qu'il ressemble à ceci (l'ordre des numéros correspond à l'ordre dans lequel les partitions ont été créées l'exemple ci-dessous correspond à l'ordre décrit plus haut) en utilisant votre éditeur préféré. Les deux premières lignes doivent être déjà conformes à ce qui est proposé ci-dessous

sudo jed 29973829-5fc7-432c-ae67-2008f8991eb5/etc/fstab

Le fichier cdoit contenir 4 lignes correspondant aux 4 partitions, si vous n'avez pas fait de /opt ce sera 3 lignes.

/dev/mmcblk0p2  / ext4 relatime,errors=remount-ro,discard 0 1
/dev/mmcblk0p1 /boot/firmware vfat defaults 0 2
/dev/mmcblk0p3 /opt ext4 defaults 0 1
/dev/mmcblk0p4 /home ext4 defaults 0 1 

Éjecter la SD l'installer sur la RPi et la lancer.

2.4 Premier démarrage de la Raspberry sur le système nouvellement installé

Être connecté en filaire depuis une autre machine facilite beaucoup les choses même s'il est théoriquement possible de réaliser tout cela directement sur la machine avec clavier et écran ou en wifi.

  • Le login de départ est root (ou celui que vous avez choisi dans la méthode 2)
  • Le mot de passe de départ est debian (ou raspberry dans la méthode2)

Attention les configurations par défaut sont en anglais et donc le clavier en QWERTY !!!!! je n'ai peut-être pas choisi la bonne version de la distrib ou fait une fausse manip. Quoi qu'il en soit cela fait un petit exercice intellectuel ou un effort de ménage pour dépoussiérer le vieux QWERTY qui est au fond du placard ;-).

Comme signalé ci-dessus se connecter à distance facilite bien les choses car on sera évidemment en AZERTY dans la configuration locale de sa machine ;-). Pour cela il faut connaître l'adresse IP de la raspi ce qui est immédiat si on a accès à la table d'adresses de son routeur mais peut s'avérer plus difficile dans les autres cas cf plus bas)

Pour trouver l'adresse de la machine la façon la plus simple est de se connecter et d'utiliser la commande :

ip address show

Toutefois l'habituel et maintenant déprécié

/sbin/ifconfig

fonctionne parfaitement en jessie sur la RasPI.

Mettre à jour la distribution et installer les outils de bas niveau

La première manip est indispensable et doit être faite AVANT toute action de mise à jour car sinon à chaque mise à jour vous aurez une erreur lorsque le sytème tentera d'écrire les fichiers d'amorce qui se trouvent sur la partition fat32 et non à leur place habituelle sur le système de fichiers de la partition ext4 "/".

Si vous avez été aussi impatients que moi et que vous avez fait un update / upgrade sitôt votre RaspPI redémarrée il faut suivre la procédure suivante :

  1. fixer la version de flash-kernel avec la procédure indiquée cidessous
  2. purger le paquet flash-kernel (avec ses dépendances)
  3. refaire un apt-get update
  4. réinstaller flash-kernel apt-get install flash-kernel et les dépendance si elles ne sont pas proposées automatiquement. Cela semble avoir fonctionné pour moi.

Fixer la version des fichiers d'amorce du système (merci Laurent !)

Il faut créer le fichier /etc/apt/preferences.d/flash-kernel puis l'éditer et le remplir avec les lignes suivantes

Package: flash-kernel
Pin: origin repositories.collabora.co.uk
Pin-Priority: 1000

La priorité 1000 c'est ceinture et bretelles ! avec 100 cela fonctionne aussi à condition bien sûr qu'ailleurs dans la config des priorités supérieures à 100 ne soient pas utilisées.

Mise à jour du système

apt-get update
apt-get upgrade
apt-get dist-upgrade

Ajout des outils et utilitaires de base

apt-get install sudo jed keyboard-configuration console-setup usbutils git ntp htop curl cmake make g++

Suivant le mode d'installation choisi les configurations du clavier et du langage peuvent ne pas être correctes configurer la locale, la console et le clavier :

sudo dpkg-reconfigure locales
sudo dpkg-reconfigure console-setup
sudo dpkg-reconfigure keyboard-configuration

éditer le /etc/apt/sources.list

sudo jed /etc/apt/sources.list

Ajouter contrib et non-free sur la ligne jessie et les dépôts auxilliaires j'en suis arrivé à :

deb http://ftp.debian.org/debian jessie main contrib non-free
deb http://security.debian.org/ jessie/updates main contrib non-free
deb http://ftp.debian.org/debian/ jessie-updates main contrib non-free
deb [trusted=yes] https://repositories.collabora.co.uk/debian/ jessie rpi2
deb https://repositories.collabora.co.uk/obs/debian/ jessie tools

Traiter de même les fichiers de sources.list.d si besoin ajouter de même les dépôts non libres. Attention dans cette distrib les données supplémentaires sont dant /boot/firmware. Ajouter les firmwares dont le driver wifi

apt-get install  firmware-linux firmware-linux-nonfree firmware-linux-free firmware-realtek 

Configurer les accès à l'espace disque de la SD

Si plusieurs partitions ont été créées et si cela n'a pas été fait précédemment à partir de l'ordinateur d'installation, éditer /etc/fstab pour monter les bonnes partitionsqui ont été formatées précédemment avec gparted

sudo jed /etc/fstab

Corriger pour arriver à quelque chose qui ressemble à :

 /dev/mmcblk0p2  / ext4 relatime,errors=remount-ro,discard 0 1
 /dev/mmcblk0p1 /boot/firmware vfat defaults 0 2  
 /dev/mmcblk0p3 /opt ext4 defaults 0 1 
 /dev/mmcblk0p4 /home ext4 defaults 0 1  

Vérifier que les numéros de partition sont corrects avec ls /dev/mm* et correspondent bien à /opt et /home Monter les deux partitions

mount /opt
mount /home

Changer le nom de la machine :

apt-get update && apt-get install -y dbus
hostname=myname
echo "127.0.0.1      $hostname" >> /etc/hosts
hostnamectl set-hostname "$hostname"

Mise en place du confort de base

apt-get install lightdm lxde
service lightdm start

Attention cette commande entraîne l'installation automatique de nombreux paquets du fait des dépendances qui existent sur le serveur X (ce qui permet d'afficher) et cela prend un certain temps. Au prochain reboot la Raspberry-Pi lance automatiquement le lightdm ce qui donne un bel affichage sur l'écran. B-)

Créer un user sudo adduser et continuer dans l'espace du user

2.5 Redémarrage et ajout des outils de gestion des périphériques

Contrôle de la caméra

cd
mkdir Logiciels/
cd Logiciels
git clone https://github.com/raspberrypi/userland.git
cd userland
./buildme

Il peut manquer ici quelques paquets suivant les dépendances qui ont été activées

Ajouter les droits sur le device en root

echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0660"' > /etc/udev/rules.d/10-vchiq-permissions.rules
usermod -a -G video loginName

une fois que tout s'est bien passé le soft est installé dans /opt/vc Il reste à rendre les exécutables et les librairies accessibles créer un fichier nommé userland.conf contenant /opt/vc/lib

Ajouter dans le dossier /etc/ld.so.conf.d le fichier userland.conf

modifier le fichier /etc/profile en ajoutant :/opt/vc/bin à la fin des expression PATH="...." à l'intérieur des guillemets modifier aussi le .profile de son home de la même façon Ajouter ou modifier la variable PATH dans son .bashrc PATH="$PATH:/opt/vc/bin" puis rebooter après reboot la video doit fonctionner!

Contrôle du son

sudo apt-get install alsa-utils
sudo modprobe snd_bcm2835
sudo amixer cset numid=3 1 # for jack
sudo amixer cset numid=3 2 # for HDMI

Et voilou ça marche Attention ne cherchez pas le micro il n'y en a pas.... Il faut une carte son à la raspi
ou un micro USB

3. Modifications avancées

3.1 Mise à jour de la gestion du matériel (point délicat!)

Ajouter à la fin /boot/firmware/config.txt start_x=1 gpu_mem=128

sudo jed /boot/firmware/config.txt

Modification du firmware Manip délicate qui semble avoir marché pour ce que j'ai pu tester... faire un backup du contenu de /boot/firmware Faire la liste de fichiers de /boot

git clone https://github.com/Hexxeh/rpi-update.git
cd rpi-update
sudo ./rpi-update

déplacer tous les fichiers ajoutés par rpi-update depuis /boot dans /boot/firmware quelques améliorations comme le fonctionnement de la led verte témoin de fonctionnement.

S'il y a des problèmes de wifi avec wicd soit le réinstaller soit passer à network-manager :

sudo apt-get purge wicd*
sudo apt-get install network-manager network-manager-gnome

3.b Modification de la configuration réseau et utilisation de la RaspPi à distance

L'installation d'une "Jessie standard" nous prive de tous les goodies de la distrib Raspbian et en particulier de toutes les petites choses qui facilitent l'usage de la RaspPI à distance et en wifi, si votre raspberry acquiert son IP automatiquement via DHCP. Il va de soi que si votre raspi a une IP fixe pas besoin des astuces ci-dessous vous connaissez l'IP et vous pouvez vous connecter à distance. Même si les procédures conviviales de Raspbian ne sont plus accessibles, tout n'est pas perdu il reste pas mal de ressources moins fun mais tout aussi opérationnelles et efficaces que nous allons détailler ci-dessous. Pour mettre en place ces solutions totalement "en aveugle" (sans avoir d'écran, ni de souris, ni de clavier connecté à la RaspPI) il est toutefois nécessaire de configurer le logiciel wpa_supplicant (user et mot de passe) pour tous les réseaux auxquels la RaspPI est susceptible de se connecter et au boot elle prendra le premier réseau disponible. Pour effectuer cela il faut copier le contenu des fichiers de configuration depuis un ordinateur portable qui s'est déjà connecté aux réseaux où on emmène sa raspberry Attention en théorie c'est le premier réseau qui est pris mais suivant la dernière configuration utilisée la situation peut être différente. Attention ces fichiers contiennent en clair des informations personnelles confidentielles soyez prudents si vous utilisez la raspberry en serveur veillez bien à protéger ces données (accès root seulement ou en lecture pour l'usager seulement)

Mise en place d'un broadcast VNC sur le port 5901

Cette opération fait que la raspberry emet sur le tout réseau un signal signalant sa présence et l'existence d'un service de connection par émulation de terminal à distance. C'est à dire qu'elle permet à un utilisateur capable de s'authentifier d'afficher dans une fenêtre de son écran l'écran de la raspberry. Pour que cela se passe automatiquement il faut lancer au boot et par défaut un terminal serveur vnc4server via le rc.local. Pour cela ajouter dans le fichier /etc/rc.local la ligne suivante :

su - vidal -c /usr/bin/vnc4server

Une fois la RasPI démarrée il suffit de chercher une machine faisant du broadcast sur le port 5901, notons qu'on trouvera tous les serveurs faisant du broacast sur ce port... On se connecte en utilisant un client VNC par exemple xvnc4viewer ou remmina.

Dès que la connection est établie supprimer le broadcast pour éviter de diffuser inutilement sur le réseau.

Recherche de l'adresse MAC ou reconnaissance de l'interface WIFI

Pour mettre en oeuvre cette solution il faut connaître l'adresse MAC de son interface WIFI ou de l'interface filaire pour cela on utilise l'instruction ip :

ip addr show

qui fournit dans le cas ou la raspberry a pris l'IP 192.169.11.120 :

3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
    inet 192.169.11.120/24 brd 192.169.11.255 scope global dynamic wlan0
       valid_lft 9165sec preferred_lft 9165sec
    inet6 $$$$::$$$$:$$$$:$$$$:$$$$/64 scope link 
       valid_lft forever preferred_lft forever

où **:**:**:**:**:** est l'adresse MAC unique de l'interface. Il faut avoir la machine qui servira de client pour le terminal sur le même réseau et rechercher l'adresse de la carte de la raspberry (il faut les droits d'administration):

sudo nmap -sP -n 192.169.11.0/24 | grep -e **:**:**:**:**:** -B 2

Attention certains administrateurs réseau n'aiment pas (du tout) qu'un usager lambda utilise cette commande privilégiée et réputée agressive car elle permet d'obtenir des informations sur le réseau, dans ce cas vous n'obtiendrez pas de réponse ou vous verrez débarquer dans votre bureau la sécurité.... Une fois que vous avez récupéré votre IP vous êtes en situation connue :

ssh 92.169.11.120 
vnc4passwd (donner un mot de passe de session)
vnc4server

Puis un client VNC et l'écran de la raspberry apparait sur votre machine....


Webographie

  1. Site principal Raspberry
  2. site github de rpi2-gen-image

Commentaires