#25 Read-only mode database

Fechado
aberto por maxime-alves 4 anos atrás · 11 comentários

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 comentou 3 anos atrás
Proprietário

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 comentou 3 anos atrás
Colaborador

@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 comentou 3 anos atrás
Proprietário

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 comentou 3 anos atrás
Colaborador
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 comentou 3 anos atrás
Colaborador

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 comentou 3 anos atrás
Colaborador

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 comentou 3 anos atrás
Colaborador

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 comentou 3 anos atrás
Colaborador

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 comentou 3 anos atrás
Colaborador

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 comentou 3 anos atrás
Colaborador

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 comentou 3 anos atrás
Colaborador

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
Acesse para participar desta conversação.
Sem marco
Sem responsável
2 participante(s)
Data limite

Data limite não informada.

Dependências

Esta issue atualmente não tem dependências.

Carregando…
Cancelar
Salvar
Ainda não há conteúdo.