Create and use a persistent bootable GNU/linux USB key to configure a Raspberry Pi

This procedure uses a debian live image (to be consistent with the Raspberry Pi) whose construction described in the second part is inspired by building a live image with persistence and building a multiboot image. This work was carried out to facilitate the operation of "Springboard of Science project" and the use of meteorological stations described in Gérard Vidal's blog. For those interested the method of creating a live key bootable with persistence is proposed in the second chapter.

Motivations

The project "Weather and Climate, springboard for the teaching of science" develops along three main axes to achieve the objectives set :

  • A component accompanying the use of meteorological microsensors to teach the coding and processing of meteorological/physical measurements
  • A component accompanying the implementation of a common meteorological station in a school and then the sharing of data on a local, regional, national or international territory within our OpenMetEdu network
  • A training / self-training component for trainers and teachers on meteorology and climate science.

These three axes contribute, on the one hand, to the stimulation of the appetite for the sciences of the young and on the other hand to the generalization of the use of meteorology and the sciences of the climate in the secondary education. This second objective is in line with Article 12 of theParis Agreement on Climate Change.

This document focuses on the use of a GNU / linux bootable key to easily access the Raspberry Pi file system and configuration files linking the weather station or sensors to the data display, or the coding / control universe of the station.

Summary

  1. Modifications of a Raspberry Pi micro-SD driving a weather station of the "Springboard project"

    a. Why a bootable key with persistence ?

    b. Precautions to be taken before starting

    c. Start GNU/linux system and configure the environment

    d. Modify the 5 configuration files

  2. Construction of a GNU/linux debian live bootable USB key with persistence


Downloads

  1. Compressed Debian 9 live image with persistence
  2. Configuration file for bmaptools users

1. Modifications of a Raspberry Pi micro-SD driving a weather station of the "Springboard project".

This section presents the manipulations to be carried out on the 5 configuration files of the raspi3Wife distribution of the "Tremplin" project in order to obtain an operational image in the context of the "participatory laboratory of meteorological observation at school" and for the OpenMetedu project with la métropole de Lyon

1.1 Why a bootable key with persistence ?

This is not a question of proselytism, but the result of the experience of years of training. The universe of Raspberries Pi regardless of the OS chosen is a GNU/linux environment, resources and literature are abundant. In an innovative project such as the one we lead it is often necessary to think beyond usual limits and in the case of Raspberry Pi use this leads to to modify various configuration files. Some of the changes affect network configuration files and the firewall, those changes are sometimes tricky and any error can block the access or even brick the raspberry pi (situation experimented!). By working directly on the SD of the raspberry from a computer one can reboot it as many times as necessary, stop it, check for bugs, correct the problem and restart again.

Windows and OSX Oprating Systems do not allow to see and modify the content of the Raspberry Pi SD (except the tiny part used for the startup and booting parameters); all software adaptators tested proved insufficient to do the job and the choice to work straight on a linux machine appeared to be the most effective. We use a GNU/linux distribution called live; it does not touch anything on the hard disk of the host computer and works solely on the USB key with the hardware resources of the machine. It does not to touch the Windows or OsX installation and does not impose the installation of a GNU/linux distribution on the host. Using persistence enables to preserve the configuration and working environment choices that are made within the linux universe between two starts (on an ordinary live key all changes are erased to return to an identical situation at each start).

1.2 Precautions to be taken before starting

Recent computers have no more BIOS and instead have a UEFI, this structure offers much more configuration possibilities and unfortunately when a computer comes with windows pre-installed some default options prevent the startup of any other operating system than the original one installed on the hard disk. To be able to start another OS (which is what we are going to do) it is necessary to modify the value of these options:

  • deactivate the autoboot (sometimes called autostart self-boot ...)
  • disable the secure boot

Since the UEFI is different on each brand, it is impossible to give a procedure to perform these manipulations. let's say that you must enter the setup of the computer (before Windows starts) by pressing the escape key or F2 or any other key indicated by the documentation of the computer and then navigate the menus with the most common sense possible to find these options and modify them. Some manufacturers may require you to enter a security password to access these options, this operation is safe, as long as you never forget this password.

1.3 Start GNU/linux system and configure the environment

  • 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 Modify the 5 configuration files

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. To check if the packages are available :

 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. Build a live image with persistence
  2. Build a multiboot image
  3. Debian live

Commentaires