Raspberry Pi 3

Préparation du système

Apprenons à préparer un système d'exploitation pour le Raspberry Pi 3.

9 commentaires Donner une note à l'article (5)

Article lu   fois.

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Le Raspberry Pi charge son système d'exploitation à partir du lecteur de carte micro SD. Le Raspberry Pi 3 a aussi la possibilité de charger le système à partir d'une clé USB ou du réseau sans avoir recours à la carte SD. Il est donc nécessaire de préparer le système de manière appropriée pour que le nano ordinateur puisse démarrer.

I-A. Architecture

Le processeur intégré au Raspberry Pi supporte le jeu d'instructions ARM, contrairement au processeur d'un ordinateur classique (Intel, AMD) qui implémente le jeu d'instructions x86. Ainsi, le système d'exploitation et les programmes doivent être compilés pour utiliser le jeu d'instructions approprié, sans quoi, il sera impossible de les exécuter.

II. Installateurs

Les installateurs sont la manière la plus simple d'installer son système pour le Raspberry Pi. En effet, il suffit d'avoir une carte SD formatée en FAT32, de copier les fichiers et voilà, le nano ordinateur peut démarrer sur un programme d'installation permettant de télécharger et de préparer automatiquement la carte SD avec le système d'exploitation voulu.

II-A. NOOBS

Image non disponible

NOOBS (pour New Out Of Box Software) est un logiciel simplifiant le processus d'installation d'un système d'exploitation pour le Raspberry Pi.

Deux configurations existent :

  • NOOBS : un installateur qui intègre la distribution Linux Raspbian. Il n'y aura donc pas besoin de télécharger Raspbian pour l'installer. Les autres systèmes sont téléchargés par Internet ;
  • NOOBS Lite : uniquement l'installateur qui téléchargera et installera la distribution voulue.

Pour installer NOOBS, il suffit de copier les fichiers décompressés sur la carte SD formatée.

Une fois le Raspberry Pi démarré avec NOOBS, vous verrez une fenêtre vous proposer différents systèmes que vous pouvez installer. Vous avez le choix entre :

  • Raspbian ;
  • LibreElec ;
  • OSMC ;
  • Windows 10 IoT Core (versions RTM et Insider).

Il suffit d'en sélectionner un ou plusieurs et de cliquer sur installer.

NOOBS permet aussi d'ajouter une partition de 512 Mo formatée en ext4 sur la carte SD. Elle peut être utile pour séparer les données utilisateur du reste du système.

Vous pouvez choisir la langue du système dans le menu en bas de l'écran.

Une fois l'installation terminée, le système peut démarrer. Par contre, l'installation du système d'exploitation supprime NOOBS.

II-A-1. Ajouter un système dans NOOBS

Il est possible d'ajouter son propre système dans NOOBS. Pour ce faire, il faut créer deux archives au format XZ :

  • boot.tar.xz : une copie de la partition boot ;
  • root.tar.xz : les fichiers du système.

Ensuite, dans le dossier OS de NOOBS, vous pouvez ajouter votre système en vous inspirant de ce qui est fait avec Raspbian.

II-B. BerryBoot

Image non disponible

BerryBoot est un autre installateur ne se consacrant qu'à l'installation de distribution GNU/Linux. Tout comme NOOBS, il suffit de formater sa carte SD en FAT32 et de copier les fichiers sur le support.

L'installation d'un système se fait en trois écrans de configuration :

  • configuration généraliste : overscan, type de connexion, sortie vidéo et langue utilisée ;
  • support de destination (carte SD, USB ou réseau) ;
  • choix du système, parmi :

    • Rapsbian,
    • Fedora,
    • LibreELEC,
    • OpenELEC,
    • Android KitKat (sans accélération graphique),
    • Ubuntu Mate 15.04,
    • Ubuntu Core 15.04,
    • LTSP BerryTerminal,
    • RetroPie,
    • Arch Linux,
    • Kali 2.0.1,
    • Puppy alpha 4,
    • Sugar,
    • BerryWebserver.

II-B-1. Ajouter un système dans BerryBoot

Pour être compatibles avec BerryBoot, les images de système d'exploitation doivent être converties au format SquashFS. Pour ce faire, vous pouvez utiliser les commandes suivantes :

 
Sélectionnez
$ sudo kpartx -av image_du_system_a_convertir.img 
add map loop0p1 (252:5): 0 117187 linear /dev/loop0 1
add map loop0p2 (252:6): 0 3493888 linear /dev/loop0 118784
$ sudo mount /dev/mapper/loop0p2 /mnt
$ sudo sed -i 's/^\/dev\/mmcblk/#\0/g' /mnt/etc/fstab
$ sudo mksquashfs /mnt image_convertie_pour_berryboot.img -comp lzo -e lib/modules
$ sudo umount /mnt
$ sudo kpartx -d image_du_system_a_convertir.img

Ensuite, vous pouvez ajouter le système à BerryBoot en plaçant l'image sur une clé USB et en choisissant l'option « Operating system installer » puis « Add OS ».

II-C. Formater la carte

Le formatage détruit toutes les données actuellement présentes sur la carte. Pensez à sauvegarder vos données avant de procéder au formatage.

II-C-1. Windows

L'association SanDisk (SD) fournit un utilitaire pour le formatage de la carte SD, disponible sur le site officiel. Une fois installé, l'utilitaire permet de formater la carte. Lorsque cette dernière est insérée dans le lecteur, repérez sous quel nom/lettre de lecteur elle apparaît dans le système. Cette indication est nécessaire afin d'indiquer le périphérique approprié à l'utilitaire.

Par défaut, les options (« FULL(erase) FORMAT » et « FORMAT SIZE ADJUSTEMENT OFF ») sont correctes. Il ne reste plus qu'à formater (bouton « Format »).

II-C-2. Mac

L'outil officiel est aussi disponible pour Mac. Lancez-le et sélectionnez « Overwrite Format ». Vérifiez que vous avez sélectionné le bon périphérique et formatez (bouton « Format »).

II-C-3. Linux

Sous Linux, vous pouvez utiliser l'outil de partitionnement, GParted. Formatez la carte SD en FAT32.

III. Installation à partir d'une image

Vous avez la possibilité d'installer directement votre système d'exploitation (tel que Raspbian) sans passer par NOOBS. Pour ce faire, il suffit de télécharger l'image du système (portant généralement l'extension .img).

Une image est une copie carbone d'une carte SD.

III-A. Mise en place

Pour préparer la carte SD, il ne suffit pas de copier, à l'aide de l'explorateur de fichiers, l'image sur le média. En effet, pour être utile, le fichier image doit être inscrit sur la carte sans tenir compte des partitions ou d'un quelconque système de fichiers.

III-A-1. Linux

Il suffit de copier l'image sur le disque avec la commande dd. Dans l'exemple suivant, la carte SD est identifiée sous le nom de mmcblk0(1) :

 
Sélectionnez
dd if=2016-05-27-raspbian-jessie.img of=/dev/mmcblk0 bs=1M

Par mesure de sécurité, lancez la commande sync après la copie afin de vous assurer que l'opération est terminée.

III-A-2. Windows

Pour copier l'image, vous avez besoin de Win32 Disk Imager. Une fois le programme lancé, il suffit de charger l'image, de choisir le lecteur identifiant la carte SD et de cliquer sur le bouton « Write ».

III-A-3. Mac

Pour copier l'image, vous pouvez utiliser PiFiller ou encore PiWriter.

Si vous préférez la ligne de commande, vous pouvez utiliser la méthode pour Linux.

IV. Installation sur un périphérique de stockage USB

À partir du Raspberry Pi 3, il est possible de lire le système à partir d'un périphérique de stockage connecté en USB, sans carte SD.

Cette fonctionnalité est expérimentale. De plus, il est nécessaire d'avoir une carte SD pour activer et mettre en place le démarrage du Raspberry Pi sur le périphérique de stockage USB.

IV-A. Mise à jour du système

Assurez-vous d'avoir les dernières mises à jour du système :

 
Sélectionnez
sudo apt-get update
sudo apt-get upgrade

IV-B. Mise à jour du micro logiciel

Le micrologiciel doit aussi être mis à jour avec la version expérimentale :

 
Sélectionnez
sudo BRANCH=next rpi-update

IV-C. Activation du mode

Éditez le fichier /boot/config.txt pour ajouter la ligne :

 
Sélectionnez
program_usb_boot_mode=1

Après redémarrage du Raspberry Pi, vous pouvez vérifier que le mode a été activé grâce à la commande :

 
Sélectionnez
vcgencmd otp_dump | grep 17:

La commande doit retourner :

 
Sélectionnez
17:3020000a

IV-D. Préparation du périphérique de stockage USB

L'idée générale est que nous allons dupliquer sur le périphérique de stockage USB le système installé sur la carte SD. Pour des raisons de simplicité, on travaille à partir du Raspberry Pi démarré avec Raspbian.

IV-D-1. Partitionnement

Premièrement, il faut partitionner la clé pour qu'elle puisse accepter les fichiers.

La clé est par la suite identifiée /dev/sda. Cela peut en être autrement sur votre système, notamment si vous avez connecté plusieurs périphériques de stockage USB, ou un disque dur externe. Par sécurité, ne connectez uniquement que le périphérique de stockage avec lequel vous souhaitez travailler.

Avant de commencer, n'oubliez pas de démonter la clé :

 
Sélectionnez
sudo umount /dev/sda*

Il est nécessaire de faire deux partitions :

  • une partition FAT32 de 100 Mo ;
  • une partition ext4 occupant le reste de l'espace du support.

Pour créer la hiérarchie des partitions, vous pouvez utiliser parted(2) :

 
Sélectionnez
sudo parted /dev/sda

Dans parted :

 
Sélectionnez
mktable msdos

L'outil demande une confirmation de l'opération. Ensuite, vous pouvez créer les partitions :

 
Sélectionnez
mkpart primary fat32 0% 100M
mkpart primary ext4 100M 100%

Le premier paramètre indique le type de partition, le deuxième le format de la partition, le troisième le début de la partition et finalement arrive la taille de la partition.

Pour vérifier le partitionnement, vous pouvez utiliser la commande print.

Ensuite, on quitte parted :

 
Sélectionnez
quit

Il n'est pas encore possible d'utiliser la clé, car même si elle est organisée, les partitions ne sont pas formatées. Pour ce faire, on utilise les commandes suivantes :

 
Sélectionnez
sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2

IV-D-2. Copie du système

Le périphérique est prêt, rendez les systèmes de fichiers accessibles au système :

 
Sélectionnez
sudo mkdir /mnt/target
sudo mount /dev/sda2 /mnt/target/
sudo mkdir /mnt/target/boot
sudo mount /dev/sda1 /mnt/target/boot/

Ainsi, la clé sera accessible à travers le dossier /mnt/target.

Pour la copie des fichiers, nous utilisons rsync. Il n'est pas installé par défaut ; installez-le :

 
Sélectionnez
sudo apt-get update; sudo apt-get install rsync

Et lancez la copie :

 
Sélectionnez
sudo rsync -ax --progress / /boot /mnt/target

IV-D-3. Régénération des clés SSH

Comme nous voulons un système neuf et surtout qui n'utilise pas les clés du système précédent, nous devons réinitialiser la configuration du serveur SSH :

 
Sélectionnez
cd /mnt/target
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt/target
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo umount sys
sudo umount proc

IV-D-4. Configuration du démarrage par USB

Le Raspberry Pi est configuré pour démarrer sur le périphérique USB. Toutefois, comme nous avons copié un système prévu pour démarrer sur la carte SD, il est nécessaire de modifier deux fichiers référençant la carte SD et non le périphérique de stockage USB :

  • le fichier de démarrage /boot/cmdline.txt :

     
    Sélectionnez
    sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/target/boot/cmdline.txt
  • le fichier système énumérant les partitions à utiliser /etc/fstab :
 
Sélectionnez
sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/target/etc/fstab

IV-D-5. Finalisation

Le périphérique est prêt. Démontez-le et arrêtez le système :

 
Sélectionnez
cd ~
sudo umount /mnt/target/boot 
sudo umount /mnt/target
sudo poweroff

Débranchez votre Raspberry Pi, enlevez la carte SD et rebranchez l'alimentation. Le système démarrera sur le périphérique USB.

V. Démarrage par le réseau

À partir du Raspberry Pi 3, il est aussi possible de lire le système à partir du réseau, sans nécessiter de carte SD, ni de clé USB. L'avantage de ce démarrage par le réseau est que vous pouvez avoir plusieurs Raspberry Pi connectés à un serveur unique qui fournira le système configuré selon vos souhaits. Un exemple serait le cas d'une salle de classe.

V-A. Préparation du Raspberry Pi

V-A-1. Activation du mode

Éditez le fichier /boot/config.txt pour ajouter la ligne :

 
Sélectionnez
program_usb_boot_mode=1

Vous pouvez vérifier que le mode a été activé, après redémarrage du Raspberry Pi, grâce à la commande :

 
Sélectionnez
vcgencmd otp_dump | grep 17:

La commande doit retourner :

 
Sélectionnez
17:3020000a

V-A-2. Désactivation du swap

Lorsque la mémoire vive est pleine, le système utilise le disque dur pour continuer (opération appelée swap). Lors du démarrage par le réseau, le Raspberry Pi n'aura pas de support pour effectuer cette opération et vous devez donc la désactiver grâce aux commandes suivantes :

 
Sélectionnez
sudo apt-get purge dphys-swapfile dphys-config
sudo update-rc.d -f dphys-swapfile remove

Redémarrez le Raspberry Pi. Vous pouvez vérifier si le swap a été désactivé avec la commande :

 
Sélectionnez
swapon -s

Finalement, vous pouvez supprimer le fichier /var/swap.

V-B. Préparation du serveur

Ici, je vais faire abstraction de la configuration du réseau. Vous devez faire en sorte que le Raspberry Pi puisse joindre le serveur et vous connaissez l'adresse IP de ce dernier.

Dans la suite du guide, on utilise les paramètres suivants :

  • eth0 : l'interface réseau utilisée ;
  • 10.0.0.100 : l'adresse IP du serveur ;
  • 10.0.0.255 : l'adresse IP de broadcast.

L'architecture du processeur du serveur n'a pas d'incidence sur le procédé. Par contre, les fichiers que fournit le serveur au Raspberry Pi doivent être compatibles avec le processeur ARM. En l'occurrence, c'est la distribution GNU/Linux Raspbian qui est utilisée.

V-B-1. Logiciels

Vous devez installer :

  • dnsmasq ;
  • nfs-server ;
  • tcpdump (pour tester).

V-B-2. Fichiers

Créez deux répertoires :

  • /tftboot ;
  • /nfs/rpi.

Les répertoires sont placés à la racine, mais ce n'est pas une obligation.

Dans le répertoire /tftboot, vous allez mettre les fichiers de la partition /boot de votre carte SD. Dans le dossier /nfs/rpi, copiez les fichiers du système.

Les fichiers du système que nous utilisons proviennent d'un système initialement prévu pour une carte SD. Éditez le fichier /nfs/rpi/etc/fstab pour supprimer les lignes mentionnant mmcblk0p1 et mmcblk0p2.

V-B-3. Test de connexion entre le Raspberry Pi et le serveur

Si votre serveur est joignable à partir du Raspberry Pi, au démarrage de celui-ci (sans carte SD), le serveur et les autres machines du réseau recevront une requête. Vous pouvez vérifier ce comportement avec tcpdump :

 
Sélectionnez
sudo tcpdump -i eth0 port bootpc

Vous devrez voir une ligne similaire à :

 
Sélectionnez
IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from b8:27:eb...

V-B-4. Configuration de dnsmasq

dnsmasq intègre un serveur TFTP. Avec l'outil, vous allez pouvoir répondre à la requête de démarrage et renvoyer au Raspberry Pi les fichiers nécessaires à son démarrage : le bootloader.

Éditez le fichier de configuration /etc/dnsmasq.conf pour y ajouter les lignes suivantes :

 
Sélectionnez
port=0
dhcp-range=10.0.0.255,proxy
log-dhcp
enable-tftp
tftp-root=/tftpboot
pxe-service=0,"Raspberry Pi Boot"

Redémarrez dnsmasq afin de prendre en compte le changement de configuration :

 
Sélectionnez
sudo systemctl restart dnsmasq

Les logs sont activés grâce à log-dhcp. Vous pouvez les consulter avec :

 
Sélectionnez
tail -f /var/log/daemon.log

ou, si le fichier n'existe pas, à travers les journaux système :

 
Sélectionnez
journalctl -b --unit=dnsmasq

En démarrant le Raspberry Pi, vous allez voir les requêtes suivantes :

 
Sélectionnez
sept. 17 13:32:45 LW-PC dnsmasq-tftp[712]: file /tftpboot/bootsig.bin not found
sept. 17 13:32:45 LW-PC dnsmasq-tftp[712]: sent /tftpboot/bootcode.bin to 10.0.0.11
sept. 17 13:32:45 LW-PC dnsmasq-tftp[712]: file /tftpboot/9148b5b5/start.elf not found
sept. 17 13:32:45 LW-PC dnsmasq-tftp[712]: file /tftpboot/autoboot.txt not found
sept. 17 13:32:45 LW-PC dnsmasq-tftp[712]: sent /tftpboot/config.txt to 10.0.0.11
sept. 17 13:32:45 LW-PC dnsmasq-tftp[712]: file /tftpboot/recovery.elf not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: sent /tftpboot/start.elf to 10.0.0.11
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: sent /tftpboot/fixup.dat to 10.0.0.11
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/recovery.elf not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: sent /tftpboot/config.txt to 10.0.0.11
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/dt-blob.bin not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/recovery.elf not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: sent /tftpboot/config.txt to 10.0.0.11
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/bootcfg.txt not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: sent /tftpboot/cmdline.txt to 10.0.0.11
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/recovery8.img not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/recovery8-32.img not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/recovery7.img not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/recovery.img not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/kernel8.img not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/kernel8-32.img not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/armstub8.bin not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: error 0 Early terminate received from 10.0.0.11
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: failed sending /tftpboot/kernel7.img to 10.0.0.11
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/armstub8-32.bin not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/armstub7.bin not found
sept. 17 13:32:51 LW-PC dnsmasq-tftp[712]: file /tftpboot/armstub.bin not found
sept. 17 13:32:55 LW-PC dnsmasq-tftp[712]: sent /tftpboot/kernel7.img to 10.0.0.11
sept. 17 13:32:55 LW-PC dnsmasq-tftp[712]: sent /tftpboot/bcm2710-rpi-3-b.dtb to 10.0.0.11
sept. 17 13:32:55 LW-PC dnsmasq-tftp[712]: sent /tftpboot/config.txt to 10.0.0.11
sept. 17 13:32:55 LW-PC dnsmasq-tftp[712]: sent /tftpboot/overlays/vc4-kms-v3d.dtbo to 10.0.0.11

Indiquant que les fichiers demandés du bootloader sont bien envoyés.

Certains fichiers sont marqués comme introuvables (« not found »). Ne vous inquiétiez pas : le Raspberry Pi recherche une liste de fichiers, dont certains ne sont pas présents. Dès qu'il en trouve un convenable (par exemple kernel7.img) il pourra démarrer.

V-B-5. Configuration du serveur NFS

Afin de rendre public le dossier partagé par le serveur NFS, ajoutez la ligne suivante au fichier /etc/exports :

 
Sélectionnez
/nfs/rpi *(rw,sync,no_subtree_check,no_root_squash)

Pour prendre en compte le changement, utilisez la commande suivante :

 
Sélectionnez
exportfs -axv

V-B-6. Finalisation

Pour finir, vous devez modifier le fichier /tftpboot/cmdline.txt afin indiquer au bootloader que le système à charger est sur un serveur NFS. Remplacez à partir de root= avec ce qui suit :

 
Sélectionnez
root=/dev/nfs nfsroot=10.0.0.100:/nfs/rpi,tcp,vers=3 rw ip=dhcp rootwait elevator=deadline

Le système est prêt.

VI. Remerciements

Image non disponible

Cet article n'aurait pas pu voir le jour sans le support de la Raspberry Pi Foundation. En effet, la fondation m'a envoyé un exemplaire du Raspberry Pi 3 : modèle B afin de permettre l'écriture de ce document.
Developpez.com et moi-même tenons à remercier la Raspberry Pi Foundation.

Merci aussi aux relecteurs : Franck Talbart, zoom61, Philippe Dpt35, ainsi qu'au relecteur orthographique : Malick SECK.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   


Pour connaître le nom sous lequel apparaît votre périphérique, vous pouvez utiliser la commande « sudo fdisk -l » qui listera tous les médias de stockage connecté à votre machine. Vous pouvez aussi utiliser l'outil « Utilitaire de disque ».
Ou GParted ou n'importe quel autre logiciel de partitionnement de disque.

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2016 Alexandre Laurent. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.