====== Configuration d'un Raspberry Pi en read-only ======
Pour configurer un système en read-only, je vais suivre [[https://hallard.me/raspberry-pi-read-only/|ce tutoriel (hallard.me)]], basé sur cet [[http://k3a.me/how-to-make-raspberrypi-truly-read-only-reliable-and-trouble-free/|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 =====
* [[https://www.raspberrypi.org/downloads/raspbian/|La dernière Raspbian lite]]
===== 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 [[https://www.simonlefort.be/wiki/doku.php?id=raspbian#mettre_l_image_sur_une_carte_sd_usd|é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.
{{ https://www.simonlefort.be/images/photos/wiki/gparted/20160903-gparted-4-1.png | 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
unit chs
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
rm 2
mkpart primary 8,138,2 691,20,32
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 [[https://hallard.me/raspberry-pi-read-only/|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 =====
* [[http://petr.io/2015/11/09/read-only-raspberry-pi-with-jessie/|read only raspberry pi with jessie (petr.io)]]
* [[https://hallard.me/raspberry-pi-read-only/|raspberry pi read only (hallard.me)]]
* [[http://k3a.me/how-to-make-raspberrypi-truly-read-only-reliable-and-trouble-free/|how to make raspberry pi tryly read only, reliable and trouble free (k3a.me)]]
* [[http://elinux.org/RPi_Resize_Flash_Partitions|Resize Flash Partitions (elinux.org)]]