petite question de curieux, est-ce que RAsPiCade survit bien quand on coupe violement et sans sommation l'alimention du raspberryPi? Je me penche sur cette question et ça a l'air d'être un problème assez répandu quelque soit les distrib utilisées sur le raspberryPi
héhé j'ai la solution...
une fois la config de rAsPiCade terminée.... je passe le système en read only. bon on perd la sauvegarde des scores (pour l'instant , mais dans un futur proche une solution consisterai a faire une partition pour stocker les high scores qu'on laisserai en read write, et tant pis si ça crash... c'est pas le système) :
en gros il faut faire cela : doc issue de mon wiki et encore dans les cartons, mais j'envisage de mettre sur rAsPiCade :
Un des avantages de passer le système de fichier en lecture seule et que cela empêche la corruption du système en cas d'arrêt brutal.
liens :
http://blog.pi3g.com/2014/04/make-raspbian-system-read-only/
http://www.a-netz.de/2013/02/read-only-root-filesystem/
http://ruiabreu.org/2013-06-02-booting-raspberry-pi-in-readonly.html
Dans toutes ces documentations on trouve la mise en oeuvre suivante :
modification du fichier /etc/fstab on passe de ça
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1
# a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that
#/dev/mmcblk0p3 none swap sw 0 0
à
proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat ro 0 2
/dev/mmcblk0p2 / ext4 ro 0 1
tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,noatime,mode=0755 0 0
tmpfs /var/lock tmpfs defaults,noatime,mode=0755 0 0
#tmpfs /home/pi tmpfs defaults,noatime,mode=0777 0 0
Tout le système est passé en lecture seule et seuls les répertoires dont on a besoin en écriture sont monté en mémoire par l'intermédiaire de tmpfs. On modifie et on reboot Cependant cela ne fonctionne pas sur rAsPiCade :
pi@rAsPiCade ~ $ mount
/dev/root on / type ext4 (rw,relatime)
devtmpfs on /dev type devtmpfs (rw,relatime,size=187236k,nr_inodes=46809,mode=755)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=38284k,mode=755)
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,noatime,size=5120k)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=76560k)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
/dev/mmcblk0p1 on /boot type vfat (ro,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)
tmpfs on /tmp type tmpfs (rw,noatime)
tmpfs on /var/log type tmpfs (rw,noatime,mode=755)
le plus gros soucis vient du fait que j'utilise le script asplashscreen qui lance une vidéo très tôt lors du boot pour masquer les retours consoles. La video est lue par le programme OmxPlayer qui utilise le système Dbus et écrit des fichiers dans /tmp. Comme ce script est exécuté avant les scripts de montage (mount*), le fait d'ecrire dans /tmp, empêche les autre script de passer le systeme de fichier en “ro”.
On peut alors décider de passer le système de fichier racine en lecture seule depuis le démarrage. Pour cela on modifie le fichier /boot/cmdline.txt et on ajoute ro derrière la directive root=:
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 ro rootfstype=ext4 elevator=deadline rootwait logo.nologo quiet nortc
Cela occasionne de nombreuse erreur au démarrage, et la vidéo splashscreen n'est pas lancée… cependant rAsPiCade démarre et et utilisable. C'est Omxplayer qui est bloquant ici, car il n'as pas pu écrire ses fichiers /tmp/omxplayerdbus et /tmp/omxplayerdbus.pid et donne l'erreur répétitive suivante :
waiting for dbus address to appear
Il faut donc retarder le lancement de la vidéo de splash, afin que les répertoires en lecture écriture soit lancé.
Pour cela il faut désactiver le chargement du script asplascreen présent dans /etc/init.d :
sudo insserv -r /etc/init.d/asplashscreen
ensuite on copie ce fichier vers un nouveau nom commençant par n comme cela il sera lancé après les commandes de montage (mount*).
sudo cp /etc/init.d/asplashscreen /etc/init.d/nasplashscreen
on l'édite pour changer la ligne provides
#!/bin/bash
### BEGIN INIT INFO
# Provides: nasplashscreen
# Required-Start:
# Required-Stop:
on peut aussi ajouter dbus sur l'option Required-Start:
#!/bin/bash
### BEGIN INIT INFO
# Provides: nasplashscreen
# Required-Start: dbus
# Required-Stop:
puis on configura pour la lancement au démarrage
sudo insserv /etc/init.d/nasplashscreen
Puis on reboote le système.
Le démarrage se déroule bien, et l'on s'aperçoit que la vidéo arrive plus tard lors du démarrage laissant apparaitre pas mal de lignes console.
On peut alors passer en mode quiet boot pour masquer le tout. on peut aussi enlever le ro présent dans le fichier /boot/cmdfile.txt
## Quiet Boot Without Prompt Cursor
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty2 loglevel=3 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline nortc waitusb=5 rootwait logo.nologo vt.global_cursor_default=0 quiet
Pour pouvoir modifier le système de fichier, il faut le repasser en lecture-écriture, pour cela on utilise les commandes suivantes :
mount / -o remount,rw
mount /boot -o remount,rw
et pour revenir en lecture seule
mount / -o remount,ro
mount /boot -o remount,ro
cela a été testé et tourne sur ma micro borne rAsPiCade...