Table des matières

Configuration d'un Raspberry Pi en read-only

Pour configurer un système en read-only, je vais suivre ce tutoriel (hallard.me), basé sur cet autre tutoriel (k3a.me). Mon objectif est que le système soit en read-only mais d'avoir une partition “data” sur laquelle je peux écrire au besoin.

Une autre solution consiste à utiliser overlayfs !

Prérequis

Rajouter une partition "data"

Mettre l'image de base sur la (µ)SD

On commence par formater la carte (µ)SD, on crée une partition (ext4) et puis on écrit l'image dessus avec ddrescue.

$ sudo ddrescue -D --force 2016-05-27-raspbian-jessie-lite.img /dev/sdb

Création de la partition "data"

Ensuite, on ouvre gparted et on rajoute une partition en fat32, tout en laissant de la place pour étendre la partition racine.

 gparted

Redimensionnement de la partition racine

Après avoir créé la partition data en fat32, on met la carte (µ)SD et on démarre sur le Raspberry Pi. Il va afficher un message d'erreur au démarrage en disant que la partition racine doit être la dernière sur la carte (µ)SD pour qu'il puisse l'étendre automatiquement.

On fois que le système a bien démarré, on éteint le Raspberry Pi. On remet la carte (µ)SD sur un ordinateur et on ouvre un terminal. On vérifie avec lsblk quel est l'emplacement de la (µ)SD.

$ lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTP
(...)
sdb      8:16   1  29,8G  0 disk 
├─sdb1   8:17   1    63M  0 part 
├─sdb2   8:18   1  1,23G  0 part 
└─sdb3   8:19   1  24,5G  0 part 

On va ensuite utiliser parted pour recréer la partition racine (sdb2 dans ce cas-ci). On va supprimer la partition n°2 et la recréer pour que la fin de celle-ci arrive juste avant le début de la troisième partition. (168,167,62 devient 691,20,32)

$ sudo parted /dev/sdb
<parted> unit chs
<parted> print
(...)
 
Number  Start       End           Type       File System     Flags
1       0,130,2     8,138,1       primary    fat16           lba
2       8,138,2     168,167,62    primary    ext4            
3       691,20,33   3893,174,56   primary    fat32
 
<parted> rm 2
<parted> mkpart primary 8,138,2 691,20,32
<parted> quit

On nettoie la partition avec e2fsck puis on agrandit le système de fichier pour qu'il prenne toute la place dans la partition sdb2.

$ sudo e2fsck -f /dev/sdb2
$ sudo resize2fs /dev/sdb2

On peut vérifier avec lsblk, par exemple, la nouvelle taille de la partition racine.

$ lsblk 
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTP
(...)
sdb      8:30   1  29,8G  0 disk 
├─sdb1   8:30   1    63M  0 part 
├─sdb2   8:30   1   5,2G  0 part 
└─sdb3   8:30   1  24,5G  0 part 

Monter la partition data automatiquement

Pour monter la partition data automatiquement sur le Raspberry Pi, il faut modifier le fichier /etc/fstab/ pour monter automatiquement la troisième partition (sdb3) dans le dossier voulu (/media/data).

$ cat /etc/fstab 
proc		/proc		proc	defaults		0	0
/dev/mmcblk0p1	/boot		vfat	defaults		0	2
/dev/mmcblk0p2	/		ext4	defaults,noatime	0	1
/dev/mmcblk0p3	/media/data	vfat	rw,noatime,user		0	0

Configuration classique

On peut à présent remettre la (µ)SD et faire les configurations de base détaillées sur la page de raspbian (clavier en AZERTY, locales, fuseau horaire, configuration du wifi, …).

Configuration en read-only

J'ai principalement suivi ce tutoriel (hallard.me). À la fin, j'ai mon système qui fonctionne parfaitement en read-only, les alias sont configurés pour pouvoir passer de read-only à read-write très facilement.

pi@raspberrypi(ro):~$ rw
pi@raspberrypi(rw):~$ ro
pi@raspberrypi(ro):~$ 

Le fichier /etc/fstab où on voit que la partition data reste en rw :

$ cat /etc/fstab 
proc		/proc		proc	defaults			0	0
/dev/mmcblk0p1	/boot		vfat	defaults,ro			0	2
/dev/mmcblk0p2	/		ext4	defaults,noatime,ro		0	1
/dev/mmcblk0p3	/media/data	vfat	rw,noatime,users,umask=000	0	0 
 
#For Debian Jessie
tmpfs		/tmp		tmpfs	nosuid,nodev			0	0
tmpfs		/var/log	tmpfs   nosuid,nodev			0	0
tmpfs		/var/tmp	tmpfs	nosuid,nodev			0	0

Sources