Créer et utiliser une clef USB GNU/linux bootable persistante pour configurer une raspberry Pi

Cette procédure utilise une image live debian (pour être cohérents avec la raspberry Pi) dont la construction décrite dans la seconde partie est inspirée de Construire une image live avec persistence et construire une image multiboot. Ce travail a été réalisé pour faciliter le fonctionnement du projet Tremplin des sciences et l'utilisation des stations météorologiques décrite le blog de Gérard Vidal. pour les personnes intéressées la méthode de création d'une clef live bootable avec rémanence (persistence) est proposée dans le second chapitre.

Motivations

Le projet "Météo et Climat, tremplin pour l'enseignement des sciences" se développe selon trois axes principaux pour atteindre les objectifs fixés :

  • Un volet d'accompagnement de l'utilisation de microcapteurs météorologiques pour enseigner le codage et le traitement de mesures météorologiques ou physiques
  • Un volet d'accompagnement de la mise en oeuvre d'une station météorologique du commerce dans un établissement scolaire puis du partage des données sur un territoire local, régional, national ou international dans le réseau OpenMetEdu
  • Un volet de formation / autoformation des formateurs et des enseignants sur la météorologie et les sciences du climat.

Ces trois axes concourrent d'une part à la stimulation de l'appétence pour les sciences des jeunes et d'autre part à la généralisation de l'utilisation de la météorologie et des sciences du climat dans l'enseignement secondaire. Ce second objectif étant en ligne avec l'article 12 de l'accord de Paris sur le changement climatique.

Ce document s'intéresse à l'utilisation d'une clef bootable GNU/linux pour facilement accéder au système de fichiers et aux fichiers de configuration de la Raspberry Pi assurant la liaison entre la station météo ou les capteurs et l'affichage des données ou l'univers de codage/pilotage de la station.


Sommaire

  1. Modifications d'uns micro-SD de Raspberry Pi pilotant une station météo du projet tremplin

    a. Pourquoi une clef bootable avec rémanence ?

    b. Précautions à prendre avant le démarrage

    c. Démarrer le système GNU/linux et configurer son environnement.

    d. Corriger les 5 fichiers de configuration

  2. Construction d'une clef USB GNU/linux debian live bootable avec rémanence


Téléchargements

  1. image debian 9 live persistante compressée
  2. fichier de configuration pour ls utilisaters de bmaptools

1. Modifications d'uns micro-SD de raspberry pilotant une station météo du projet tremplin.

Ce paragraphe présente les manipulations à effectuer sur les 5 fichiers de configuration de la distribution raspi3Wife du projet "Tremplin" pour obtenir une image opérationnelle dans le contexte du "laboratoire participatif d'observation météorologique à l'école" et pour le projet OpenMetedu avec la métropole de Lyon

1.1 Pourquoi une clef bootable avec rémanence ?

Il ne s'agit pas ici d'un quelconque prosélytisme mais du résulat d'expériences de formation. L'univers des raspberries Pi quel que soit l'OS choisi est un environnement GNU/linux, les ressources et la littérature sont abondantes. Dans un projet innovant tel que celui que nous menons il est souvent nécessaire de sortir des sentiers battus et dans le cas de l'utilisation d'une Raspberry cela se traduit par la nécesité de modifier un certain nombre de fichiers de configuration. Une partie des modifications touche des fichiers de configuration du réseau et du pare-feu, elles sont délicates et toute erreur peut entrainer un blocage total des accès ou une raspberry pi non fonctionnelle (vécu!). En travaillant directement sur la SD de la raspberry depuis un ordinateur on peut la rebooter autant de fois que nécessaire, observer les éventuelles anomalies, l'arrêter les corriger et la redémarrer.

Les OS windows et OsX ne permettent pas de voir et de modifier le contenu de la SD (hormis la partie servant au démarrage); toutes les solutions d'adaptation testées se sont avérées insuffisantes et le choix de travailler directement sur une machine linux est apparu le plus efficace. Pour ne pas toucher à l'installation windows ou OsX et ne pas imposer l'installation d'une distribution linux sur la machine hôte, on utilise une distribution dite live qui ne touche rien sur le disque dur de la machine hôte et fonctionne exclusivement avec la clef USB et les ressources physiques de la machine. Utiliser la rémanence (persistence en anglais) permet de préserver la configuration et les choix d'environnement de travail qui sont faits dans l'univers linux entre deux démarrages (sur une clef live ordinaire toutes les modifications sont effacées pour revenir à une situation identique à chaque démarrage).

1.2 Précautions à prendre avant le démarrage

Les ordinateurs récents n'ont plus de BIOS et ont à la place un UEFI cette structure offre beaucoup plus de possibilités de configuration et malheureusement lorsqu'un ordinateur est livré de base avec windows certaines options par défaut empêchent le démarrage de tout autre système d'exploitation que celui d'origine installé sur le disque dur. Pour pouvoir démarrer un autre OS (ce qui est ce que nous allons faire) il faut modifier la valeur de ces options :

  • désactiver l'autoboot (appelé parfois autostart self-boot...)
  • désactiver le secure boot

Les UEFI étant par essance différents il est impossible de donner une procédure pour effectuer ces manipulations. Il faut entrer dans le setup de l'ordinateur (avant que Windows ne démarre) en appuyant sur la touche escape ou F2 ou toute autre touche indiquée par la documentation de l'ordinateur puis naviguer dans les menus avec leplus de bon sens possible pour trouver ces options et les modifier. Certains constructeurs imposent parfois d'entrer un mot de passe de sécurité pour accéder à ces options, la manipulation ne présente aucun risque à condition de ne jamais oublier ce mot de passe.

1.3 démarrer le système GNU/linux et configurer son environnement.

  • Ordinateur arrêté insérez la clef USB,
  • Démarrer l'ordinateur et appuyer sur la touche permettant de choisir le boot,
  • choisir la clef USB, un menu apparait choisir la ligne proposant la régionalisation (choix de langage)
  • dans le menu choisir la langue que l'on souhaite utiliser
  • au clic l'ordinateur démarre en linux et propose un utilisateur par défaut user avec le mot de passe live
  • La clef propose un environnement gnome, cliquer sur la flèche dans le coin haut droit de l'écran puis cliquer dans le menu sur l'icône "clef-tournevis" puis sur l'cône du drapeau "pays langue" ajouter la langue désirée (éventuellement avec un clavier particulier utilisateurs de Mac notamment)
  • cliquer sur le menu en haut à gauche pour lancer le navigateur de fichiers
  • cliquer sur le menu puis sur le damier de boutons et taper term dans le moteur de recherches qui apparait puis cliquer sur l'icone du terminal
  • cliquer dans le terminal et taper

shell sudo gedit * un éditeur avec les privilèges d'administrateur apparait et on pourra dorénavant glisser déposer les fichiers que l'on souhaite modifier * insérer la carte micro-SD dans son adapteur, elle apparait dans le navigateur de fichiers * cliquer sur le nom de la SD (la plus grosse des deux) le ssytème de fichiers linux de la raspberry apparait avec les dossiers etc, lib, var, bin, sbin, usr, home, sys, etc....

1.4 Corriger les 5 fichiers de configuration

Pour le projet Tremplin 5 fichiers de configuration doivent être modifiés voir le blog sur la mise en oeuvre de la RaspberryPi pde pilotage de la station météorologique il s'agit de :

  • Le paramètrage du réseau /etc/systemd/network/50-wired.network
    • adresse IP fixe de la RaspBerry
    • adresse de la passerelle du réseau sur lequel elle sera installée
    • adresse du DNS du réseau sur lequel elle sera installée
    • adresse MAC de la Raspberry (optionnel seulement si elle est déjà connue)
  • Le paramètres du pare-feu /etc/firehol/firehol.conf
    • adresses des machines ou plages de machines qui seront autorisées à se connecter à la Raspberry station Météo
    • ports qui devront être ouverts pour laisser passer des informations
  • Le paramètres du serveur de connection sécurisée à distance (ssh) /etc/ssh/sshd_config
    • port utilisé pour les connections à distance
  • Le paramètres de la base de données /etc/mysql/mariadb.conf.d/50-server.cnf
    • port utilisé par la base locale mariadb
    • nom de l'utilisateur local de la base
    • mot de passe de l'utilisateur de la base
  • Le paramètres de la station /etc/weewx/weewx.conf
    • localisation de la station
    • choix de la base utilisée
    • port utilisé
    • utilisateur
    • mot de passe

2. Construction d'une clef bootable GNU/linux debian live avec rémanence.

Ce paragraphe est destiné aux usagers qui voudraient fabriquer une clef USB bootable qui permette de conserver les paramètres modifiés lors de chaque session, et avoir un système identique à celui de la Raspberry qui soit utilisable directement sur leur ordinateur sans installation ni modification. La procédure décrite ci-dessous est effectuée sur une distribution debian fonctionnant avec un boot UEFI et disposant entre autres des paquets grub-efi-amd64 grub-efi-amd64-bin grub-pc-bin et de leurs dépendances ainsi que des utilitaires fdisk, gdisk et gparted. Elle aboutit à une clef USB directement opérationnelle. Pour vérifier la présence des paquets nécessaires :

 dpkg -l grub-efi-amd64 grub-efi-amd64-bin grub-pc-bin fdisk gdisk gparted
Souhait=inconnU/Installé/suppRimé/Purgé/H=à garder
| État=Non/Installé/fichier-Config/dépaqUeté/échec-conFig/H=semi-installé/W=attend-traitement-déclenchements
|/ Err?=(aucune)/besoin Réinstallation (État,Err: majuscule=mauvais)
||/ Nom                                 Version                Architecture           Description
+++-===================================-======================-======================-============================================================================
ii  fdisk                               2.30.2-0.1             amd64                  collection of partitioning utilities
ii  gdisk                               1.0.1-1                amd64                  GPT fdisk text-mode partitioning tool
ii  gparted                             0.25.0-1+b1            amd64                  GNOME partition editor
ii  grub-efi-amd64                      2.02-2                 amd64                  GRand Unified Bootloader, version 2 (EFI-AMD64 version)
ii  grub-efi-amd64-bin                  2.02-2                 amd64                  GRand Unified Bootloader, version 2 (EFI-AMD64 binaries)
ii  grub-pc-bin                         2.02-2                 amd64                  GRand Unified Bootloader, version 2 (PC/BIOS binaries)

L'image de cette clef compressée est déposée enligne, un fichier utilitaire bmapest ajouté pour les utilisateurs de bmaptools : fichier bmap pour disposer d'une clef opérationnelle il faut faire une copie binaire de l'image en ligne sur une clef USB vierge ou formattée.

  • brancher une clef USB vierge ou formattée en fat32 et repérer le device sur lequel elle est connectée : avec la commande df -h je vois par exemple que le disque /dev/sdc est apparu et fait la taille attendue pour la clef. Soyez extrêmement prudent(e)s les manipulations ci-dessous détruisent définitivement le contenu de la clef USB mais détruisent tout aussi spontanément sans avertissement le contenu de votre disque dur si vous utilisez le mauvais device. Comme le contenu de votre clef USB sera effacé et perdu, prenez vos précautions et sauvegardez tout ce que vous voulez conserver avant d'entâmer la procédure.
  • avec gparted supprimer les partitions existantes, ne pas formatter, débrancher, rebrancher la clef. Nous allons d'abord écraser le début de la clef pour se débarasser des scories qui pourraient résulter des utilisations antérieures : sudo dd if=/dev/zero of=/dev/sdb count=4096 cela met des zéros sur les 2 premiers mégaoctets de la clef.
  • avec fdisk créer une table de partitions de type gpt puis ajouter les quatre partitions (pour les MacUsers qui souhaiteraient booter sur un vieux powerPC la table de partition ne doit pas être gpt mais mac)
  • avec gparted formatter une clef USB d'au moins 4Go en quatre partitions :
    • une partition BIOS_Boot de 1Mo au début de la clef
    • une partition EFI d'au moins 50Mo
    • une partition fat32 d'au moins 2.8Go (pour debian stretch gnome vérifier la taille pour les autres images disponibles sur le site live-debian)
    • une partition ext4 de l'espace restant à la fin de la clef portant impérativement l'étiquette persistence
sudo fdisk /dev/sdb

Bienvenue dans fdisk (util-linux 2.29.2).
Les modifications resteront en mémoire jusqu'à écriture.
Soyez prudent avant d'utiliser la commande d'écriture.

Le périphérique ne contient pas de table de partitions reconnue.
Création d'une nouvelle étiquette pour disque de type DOS avec identifiant de disque 0x8a9fed3c.

Création de la table de partitions.

Commande (m pour l'aide) :g
Une nouvelle étiquette de disque GPT a été créée (GUID : 0C95F238-68A0-4B29-9F2D-9227C9364238).

Création de la partition BIOS Boot

Commande (m pour l'aide) : n
Numéro de partition (1-128, 1 par défaut) : 
Premier secteur (2048-7913438, 2048 par défaut) : 
Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (2048-7913438, 7913438 par défaut) : +1M

Une nouvelle partition 1 de type « Linux filesystem » et de taille 1 MiB a été créée.

Commande (m pour l'aide) : t
Partition 1 sélectionnée
Code Hexa (taper L pour afficher tous les codes) :4
Type de partition « Linux filesystem » modifié en « BIOS boot ».

Création de la partition EFI

Commande (m pour l'aide) :n
Numéro de partition (2-128, 2 par défaut) : 
Premier secteur (4096-7913438, 4096 par défaut) : 
Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (4096-7913438, 7913438 par défaut) : +50M

Une nouvelle partition 2 de type « Linux filesystem » et de taille 50 MiB a été créée.

Commande (m pour l'aide) : t
Numéro de partition (1,2, 2 par défaut) : 
Code Hexa (taper L pour afficher tous les codes) :1

Type de partition « Linux filesystem » modifié en « EFI System ».

Création de la partition Fat32

Commande (m pour l'aide) : n
Numéro de partition (3-128, 3 par défaut) : 
Premier secteur (106496-7913438, 106496 par défaut) : 
Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (106496-7913438, 7913438 par défaut) : +2800M

Une nouvelle partition 3 de type « Linux filesystem » et de taille 2,8 GiB a été créée.

Commande (m pour l'aide) : t
Numéro de partition (1-3, 3 par défaut) : 
Code Hexa (taper L pour afficher tous les codes) :16

Type de partition « Linux filesystem » modifié en « Microsoft Storage Spaces ».

Création de la partition ext4

Commande (m pour l'aide) : n
Numéro de partition (4-128, 4 par défaut) : 
Premier secteur (5840896-7913438, 5840896 par défaut) : 
Dernier secteur, +secteurs ou +taille{K,M,G,T,P} (5840896-7913438, 7913438 par défaut) : 

Une nouvelle partition 4 de type « Linux filesystem » et de taille 1012 MiB a été créée.

Commande (m pour l'aide) : w
La table de partitions a été altérée.
Appel d'ioctl() pour relire la table de partitions.
Échec de relecture de la table de partitions.: Périphérique ou ressource occupé

Le noyau continue à utiliser l'ancienne table. La nouvelle sera utilisée lors du prochain démarrage ou après avoir exécuté partprobe(8) ou kpartx(8).
  • débrancher la clef USB puis la rebrancher et formatter avec gparted les systèmes de fichiers: aucun pour la première partition, fat32 pour la seconde et la troisième ext4 pour la dernière, attribuer le nom persistence (étiquette) à cette dernière partition.
  • Créer une table de partitions hybride qui pourra booter soit en mode UEFI soit en mode BIOS
sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): r

Recovery/transformation command (? for help): h

WARNING! Hybrid MBRs are flaky and dangerous! If you decide not to use one,
just hit the Enter key at the below prompt and your MBR partition table will
be untouched.

Type from one to three GPT partition numbers, separated by spaces, to be
added to the hybrid MBR, in sequence: 1 2 3 4
Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N

Creating entry for GPT partition #1 (MBR partition #1)
Enter an MBR hex code (default EF): 
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #2 (MBR partition #2)
Enter an MBR hex code (default EF): 
Set the bootable flag? (Y/N): N

Creating entry for GPT partition #3 (MBR partition #3)
Enter an MBR hex code (default 07): 
Set the bootable flag? (Y/N): Y

Recovery/transformation command (? for help): x

Expert command (? for help): h

Expert command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): Y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
  • Installer maintenant les Bootloader sur les partitions qui ont été crées:
sudo mount /dev/sdb2 /mnt/disk2
sudo mount /dev/sdb3 /mnt/disk3
sudo grub-install --target=x86_64-efi --efi-directory=/mnt/disk2 --boot-directory=/mnt/disk3/boot  --removable --recheck
Installation pour la plate-forme x86_64-efi.
Installation terminée, sans erreur.

sudo grub-install --target=i386-pc --boot-directory=/mnt/disk3/boot --recheck  /dev/sdb
Installation pour la plate-forme i386-pc.
Installation terminée, sans erreur.
  • Télécharger l'image iso qui vous convient depuis le site live-debian et la stocker sur le disque dur.
  • Brancher la clef USB et se positionner sur la partition fat32 de 2.8 Go nouvellement créée
  • copier le contenu de l'image iso par la commande suivante (dans le cas ci dessous l'image a été stockée dans le répertoire /Logiciels/LinuxISO)
cd /mnt/disk3/
sudo 7z x /Logiciels/LinuxISO/debian-live-9.1.0-amd64-gnome+nonfree.iso 
  • éditer grub.cfg et remplacer components par persistence components dans boot/grub et isolinux/menu.cfg
cd boot/grub
sudo nano grub.cfg

.../...
LABEL French (fr)
  SAY "Booting French (fr)..."
  linux /live/vmlinuz-4.9.0-3-amd64
  APPEND initrd=/live/initrd.img-4.9.0-3-amd64 boot=live persistence components locales=fr_FR.UTF-8
.../...
  • ajouter / union dans le fichier persistence.conf à la racine de la partition persistence
cd persistence
sudo su
echo / union > persistence.conf 

Vous disposez maintenant d'une clef USB qui peut démarrer votre ordinateur en la choisissant comme disque de "boot". Dans les modèles les plus récents d'ordinateurs il est nécessaire dans l'EFI de décocher le Secure Boot. Une fois cette formalité réalisée, si nécessaire, éteignez l'ordinateur, insérez la clef USB démarrez l'ordinateur et appuyez sur la touche permettant de choisir l'unité de démarrage (varie suivant les modèles escape puis F9 pour HP F12 pour Dell...) choisir la clef USB, appuyer sur entrée, dans le menu choisissez la ligne "avec localisation" choisissez le français puis entrée. Votre ordinateur démarre et vous propsoe un environnement graphique. ne pas oublier de cliquer su le bouton de langue en pour le passer en fr dans certains cas il peut être nécessaire de configurer le clavier et pour cela il faut cliquer sur le bouton des paramètres avancés (un petit engrenage).

Vous disposez maintenant d'un ordinateur GNU/linux totalement opérationnel qui va vous permettre d'explorer la carte SD qui servira de système à la Raspbery Pi et d'éditer tous les fichiers nécessaires soit en ligne de commande soit avec l'éditeur simple gedit :

sudo gedit nom du fichier

Une astuce simple pour trouver le nom d'un fichier (et son chemin absolu) est d'utiliser le navigateur de fichiers et d'afficher les propriétés du fichier choisi.

Webographie

  1. Construire une image live avec persistence
  2. construire une image multiboot
  3. Live debian

Commentaires