#25 Read-only mode database

Closed
opened 4 years ago by maxime-alves · 11 comments

Faire une commande d’initialisation de la database en mode ram pour les cas où l’on est en read-only.

Tester aussi la gestion des processus pyheatpump en mode read-only.

Faire une commande d'initialisation de la database en mode ram pour les cas où l'on est en read-only. Tester aussi la gestion des processus pyheatpump en mode read-only.
nas commented 3 years ago
Owner

Le script est ajouté dans le commit e435d8f212

Il crée une partition de 50M en ram, y déplace la base de données de /var/run/pyheatpump/pyheatpump.sqlite3, et la remplace par un lien symbolique.

Pas encore testé, et il faut peut-être voir le contexte utilisation. Par exemple, le script doit-il éteindre le service ?

Le script est ajouté dans le commit e435d8f212475acaa801fa7039183bcf075e4b5c Il crée une partition de 50M en ram, y déplace la base de données de `/var/run/pyheatpump/pyheatpump.sqlite3`, et la remplace par un lien symbolique. Pas encore testé, et il faut peut-être voir le contexte utilisation. Par exemple, le script doit-il éteindre le service ?
maxime-alves commented 3 years ago
Collaborator

@nas peux-tu être plus précis. Que veut dire éteindre le service? On va faire un script qui se lance avant pyHeatpump, et qui créé la structure nécessaire dans le ramfs (BDD et fichier de conf sont les seuls fichiers qui bougent)

@nas peux-tu être plus précis. Que veut dire éteindre le service? On va faire un script qui se lance avant pyHeatpump, et qui créé la structure nécessaire dans le ramfs (BDD et fichier de conf sont les seuls fichiers qui bougent)
nas commented 3 years ago
Owner

Si la migratior peut avoir lieu dans une situation ou pyHeatpump est en fonction, il faut sans doutes recharger le service :

systemctl reload pyheatpump_supervise
Si la migratior peut avoir lieu dans une situation ou pyHeatpump est en fonction, il faut sans doutes recharger le service : ``` systemctl reload pyheatpump_supervise ```
maxime-alves commented 3 years ago
Collaborator
J'ai rajouté le script d'Adafruit disponible usr le tuto : https://learn.adafruit.com/read-only-raspberry-pi/ ( https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/read-only-fs.sh )
maxime-alves commented 3 years ago
Collaborator

Une question que je me pose en écrivant le script d’initialisation. Est-ce qu’on ne devrait pas inclure par défaut l’execution d’un “pip upgrade pyheatpump”, qui upgraderait l’installation si la pi est en read-write. Je suis un peu contre l’idée de mettre cette fonctionalité en mode “ro” (avec un mount -o remount,rw / suivi d’un upgrade de pyheatpump et un mount -ao remount), mais c’est vrai que dans le cas d’une sdcard en RO, c’est la seule manière de mettre à jour sans changer la SD.

Ça peut être à discuter avec les utilisateurs.

Une question que je me pose en écrivant le script d'initialisation. Est-ce qu'on ne devrait pas inclure par défaut l'execution d'un "pip upgrade pyheatpump", qui upgraderait l'installation si la pi est en read-write. Je suis un peu contre l'idée de mettre cette fonctionalité en mode "ro" (avec un mount -o remount,rw / suivi d'un upgrade de pyheatpump et un mount -ao remount), mais c'est vrai que dans le cas d'une sdcard en RO, c'est la seule manière de mettre à jour sans changer la SD. Ça peut être à discuter avec les utilisateurs.
maxime-alves commented 3 years ago
Collaborator

Je me suis finalement résolu à cloner le dépôt dans le répertoire /opt de l’image. C’est la manière la plus simple de récupérer des mises à jour des fichiers de conf (en particulier la DB et les fichiers systemd (timer et service).

Le script de pre-exec fonctionnera donc de la manière suivante :

  • Création du repertoire /var/run/pyheatpump
  • Initialisation de la base de donnée (lue depuis le dépôt)
  • Copie du pyheatpump.ini par défaut
Je me suis finalement résolu à cloner le dépôt dans le répertoire /opt de l'image. C'est la manière la plus simple de récupérer des mises à jour des fichiers de conf (en particulier la DB et les fichiers systemd (timer et service). Le script de pre-exec fonctionnera donc de la manière suivante : - Création du repertoire /var/run/pyheatpump - Initialisation de la base de donnée (lue depuis le dépôt) - Copie du pyheatpump.ini par défaut
maxime-alves referenced this issue from a commit 3 years ago
maxime-alves referenced this issue from a commit 3 years ago
maxime-alves commented 3 years ago
Collaborator

Documentation mode read-only pour buster : https://medium.com/@andreas.schallwig/how-to-make-your-raspberry-pi-file-system-read-only-raspbian-stretch-80c0f7be73

Documentation mode read-only pour buster : https://medium.com/@andreas.schallwig/how-to-make-your-raspberry-pi-file-system-read-only-raspbian-stretch-80c0f7be7353
maxime-alves commented 3 years ago
Collaborator

Image générée le 25 janvier 2021 : 2021-01-11_rpios-buster_pyheatpump-ro-995bf12.img.xz

Envoi a Christophe et Jules @nas pour les premiers tests.

Image générée le 25 janvier 2021 : [2021-01-11_rpios-buster_pyheatpump-ro-995bf12.img.xz](https://www.freepoteries.fr/~msleaveamix/2021-01-11_rpios-buster_pyheatpump-ro-995bf12.img.xz) Envoi a Christophe et Jules @nas pour les premiers tests.
maxime-alves commented 3 years ago
Collaborator

Il esmble que timesyncd fait péter l’horloge système de la PI en read-only. Le script read-only-mode.sh devra inclure l’activation de ntp.

Et HOP! On pourrait ajouter ça au script d’installation directement, c’est aussi utile pour le RW.

http://raspberrypi.stackexchange.com/questions/59860/ddg#59870

EDIT : Et vu que ça suffit pas, y’a aussi ça à faire

https://unix.stackexchange.com/questions/553930/ntp-wont-work-on-read-only-raspberry-pi

Il esmble que timesyncd fait péter l'horloge système de la PI en read-only. Le script read-only-mode.sh devra inclure l'activation de ntp. Et HOP! On pourrait ajouter ça au script d'installation directement, c'est aussi utile pour le RW. http://raspberrypi.stackexchange.com/questions/59860/ddg#59870 EDIT : Et vu que ça suffit pas, y'a aussi ça à faire https://unix.stackexchange.com/questions/553930/ntp-wont-work-on-read-only-raspberry-pi
maxime-alves commented 3 years ago
Collaborator

Problème de connection HTTP sorti de nulle part, fixé avec les étapes suivantes (sur la rpi direct) :

mount -o remount,rw /
mkdir /var/lib/pyheatpump
echo 'tmpfs /var/lib/pyheatpump tmpfs nodev,nosuid 0 0' >> /etc/fstab

Mise à jour du fichier service, ok au commit 8a4438b

Problème de connection HTTP sorti de nulle part, fixé avec les étapes suivantes (sur la rpi direct) : ``` mount -o remount,rw / mkdir /var/lib/pyheatpump echo 'tmpfs /var/lib/pyheatpump tmpfs nodev,nosuid 0 0' >> /etc/fstab ``` Mise à jour du fichier service, ok au commit 8a4438b
maxime-alves commented 3 years ago
Collaborator

Livraison faite le 27/01/2021 avec l’image suivante.

http://www.freepoteries.fr/~msleaveamix/2021-01-27_rpios-buster_pyheatpump-ro-3ab8af7.img.xz

Prévoir une re-livraison de la dernière version en mode “debug” (rw + rsyslog)

NB : J’ai laisse le SSH activé dans la dernière image

Livraison faite le 27/01/2021 avec l'image suivante. [http://www.freepoteries.fr/~msleaveamix/2021-01-27_rpios-buster_pyheatpump-ro-3ab8af7.img.xz](http://www.freepoteries.fr/~msleaveamix/2021-01-27_rpios-buster_pyheatpump-ro-3ab8af7.img.xz) Prévoir une re-livraison de la dernière version en mode "debug" (rw + rsyslog) NB : J'ai laisse le SSH activé dans la dernière image
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
Cancel
Save
There is no content yet.