CFW: Ordnerstruktur Apps

Community-Firmware (cfw), Selbstbaucontroller (TX-Pi, ftduino, usw.), usw.
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

CFW: Ordnerstruktur Apps

Beitrag von ski7777 » 27 Mär 2017, 20:35

Derzeit haben wir:
  • /opt/ftc/apps/system/: Systemapps und ihre eventuellen Daten
  • ~/apps/: Nutzerapps und ihre Daten
Da birgt ein Problem: Wenn der App-Entwickler eine Datei löscht, dann wird diese nicht auf dem TXT gelöscht. Deshalb sollte man vor einem Update eigentlich den kompletten Ordner löschen. Problem: Dann werden auch die Daten des Nutzers gelöscht (Brickly-Projekte, Spielerfolge, ...)

Android löst das so:
  • /system/apps/: Read-Only: Hier werden die System-Apps gespeichert
  • /data/apps/: Hier werden die Nutzerapps und Updates für Systemapps gespeichert
  • /data/data/: Hier werden die Daten für alle Apps gespeichert
So wird wahrscheinlich (Ich kenne mich nicht 100%ig aus) bei einem Update der Ordner in /data/apps gelöscht, um Probleme zu vermeiden.

Mein Vorschlag:
  • Wir löschen auch immer den Ordner in ~/apps
  • Es gibt ab sofort einen Ordner ~/data/[UUID], in dem die App Daten gespeichert sind
  • Der Ordner ~/data/[UUID] wird für einfacheren Zugriff unter ~/apps/[UUID]/data gemounted
So kann man vor einem Update den Ordner ~/apps/[UUID]/data unmonten und danach wieder mounten.

Was haltet ihr davon?

Rapahel

nq30
Beiträge: 144
Registriert: 25 Feb 2017, 07:44

Re: CFW: Ordnerstruktur Apps

Beitrag von nq30 » 27 Mär 2017, 20:37

Also ich finds gut.
Aber da kann ich wegen mangels Wissen nicht so viel sagen ;)
Mit freundlichen Grüssen
nq30

ft:cool :)

Benutzeravatar
ski7777
Beiträge: 870
Registriert: 22 Feb 2014, 14:18
Wohnort: Saarwellingen

Re: CFW: Ordnerstruktur Apps

Beitrag von ski7777 » 27 Mär 2017, 21:09

Statt mount würde ich eher auf Symlink gehen

Benutzeravatar
MasterOfGizmo
Beiträge: 2720
Registriert: 30 Nov 2014, 07:44

Re: CFW: Ordnerstruktur Apps

Beitrag von MasterOfGizmo » 27 Mär 2017, 21:17

Ich halte das Problem für ignorierbar. Schlimmstenfalls liegt nach dem App-Update eine alte Datei rum. Die stört da m.E. nicht großartig.
Arduino für fischertechnik: ftDuino http://ftduino.de, ftDuino32 http://ftduino.de/32

richard.kunze
Administrator
Beiträge: 583
Registriert: 26 Dez 2015, 23:49
Wohnort: Rhein-Main-Gebiet

Re: CFW: Ordnerstruktur Apps

Beitrag von richard.kunze » 27 Mär 2017, 21:26

ski7777 hat geschrieben:Derzeit haben wir:
  • /opt/ftc/apps/system/: Systemapps und ihre eventuellen Daten
  • ~/apps/: Nutzerapps und ihre Daten
Da birgt ein Problem: Wenn der App-Entwickler eine Datei löscht, dann wird diese nicht auf dem TXT gelöscht.
Das ist zwar nicht besonders schön (bzw. es kann auf Dauer die App-Verzeichnisse mit alten Daten vollmüllen), aber so ein riesiges Problem ist das denke ich gar nicht: Wenn der App-Entwickler eine Datei löscht, dann greift die neue Version seiner App logischerweise auf diese Datei nicht mehr zu. Und dann passiert in der Regel auch nichts Schlimmes, wenn irgendwo in einem Verzeichnis auf der SD-Karte noch eine alte Version rumgammelt.

Und Systemapps können ihre Daten erst gar nicht in /opt/ftc/apps/system/ speichern - das ist nämlich per Default read-only.
ski7777 hat geschrieben: Deshalb sollte man vor einem Update eigentlich den kompletten Ordner löschen. Problem: Dann werden auch die Daten des Nutzers gelöscht (Brickly-Projekte, Spielerfolge, ...)
Das wäre die sichere Variante, ja.

Und wenn man das nicht macht, dann muss man als App-Entwickler auch (und viel wichtiger) darauf achten, dass die "alten" Benutzerdaten dann auch mit der neuen Version der App kompatibel sind (also z.B. nicht einfach mal eben das Format ändern, in dem die Spielstände gespeichert werden).
ski7777 hat geschrieben: Mein Vorschlag:
  • Wir löschen auch immer den Ordner in ~/apps
  • Es gibt ab sofort einen Ordner ~/data/[UUID], in dem die App Daten gespeichert sind
  • Der Ordner ~/data/[UUID] wird für einfacheren Zugriff unter ~/apps/[UUID]/data gemounted
Wenn überhaupt würde ich das eher per Overlay trennen (so wie das jetzt auch für /etc gemacht wird). Das sieht dann für die App so aus, als könnte sie nach belieben in ihr Verzeichnis schreiben, aber die Änderungen landen automatisch woanders.

Oder man macht das so wie jeder handelsübliche Package-Manager auch: Bei der Installation merkt man sich, was man genau installiert hat (in unserem Fall also die relativen Dateinamen aus dem Zipfile), und vor dem Update löscht man dann genau diese Dateien (Bonus: Man löscht sie nur, wenn sie in der Zwischenzeit nicht geändert wurden).

Aber ich weiß wie gesagt nicht, ob wir uns darum jetzt schon großartig Gedanken machen müssen.

Benutzeravatar
PHabermehl
Beiträge: 2429
Registriert: 20 Dez 2014, 22:59
Wohnort: Bad Hersfeld

Re: CFW: Ordnerstruktur Apps

Beitrag von PHabermehl » 27 Mär 2017, 22:12

Die vorgenannte Frage habe ich mir auch schon gestellt.
Mein Vorschlag:

- momentan gar nichts.

- für später: ins ZIP der App wird eine Datei, nennen wir sie für den Augenblick mal ".keepfiles", gepackt. Darin sind alle Dateien aufgelistet, die nach Installation erhalten bleiben sollen. Der Installer löscht vor Installation alle Dateien im App-Verzeichnis außer jenen, die in der ".keepfiles"-Datei gelistet sind. Existiert im Zip kein ".keepfiles", so wird NICHTS gelöscht.

Minimaler Aufwand, kein Änderungszwang, Abwärtskompatibilität...

Was denkt Ihr?

Gruß
Peter

----------------------
edit: Text war durch Ausrutscher auf dem Touchpad völlig durcheinandergewürfelt...
https://www.MINTronics.de -- der ftDuino & TX-Pi Shop!

viele Grüße
Peter

richard.kunze
Administrator
Beiträge: 583
Registriert: 26 Dez 2015, 23:49
Wohnort: Rhein-Main-Gebiet

Re: CFW: Ordnerstruktur Apps

Beitrag von richard.kunze » 28 Mär 2017, 00:03

PHabermehl hat geschrieben:für später: ins ZIP der App wird eine Datei, nennen wir sie für den Augenblick mal ".keepfiles", gepackt. Darin sind alle Dateien aufgelistet, die nach Installation erhalten bleiben sollen. Der Installer löscht vor Installation alle Dateien im App-Verzeichnis außer jenen, die in der ".keepfiles"-Datei gelistet sind.
Das bedeutet Handarbeit für den App-Ersteller. Und damit auch immer Fehler...

Gegenvorschlag (etwas weiter ausformuliert von oben): Bei der Installation merkt sich der Installer (= die Store-App) Dateinamen und Hash der installierten Dateien (Dateinamen kommen aus dem Zipfile selbst, Hashes werden nach der Installation berechnet). Beim Update wird zunächst geprüft ob sich bei irgendwelchen Dateien die Hashes geändert haben (z.B. weil der Benutzer die App verändert hat), und wenn die Dateien immer noch im Installationszustand sind, dann werden diese Dateien (und nur diese) gelöscht. Wenn Dateien geändert wurden, wird die Installation abgebrochen/nachgefragt/wasauchimmer. Und wenn bei einem Update existierende Dateien überschrieben würden, die nicht schon in der letzten Version installiert waren, wird ebenfalls abgebrochen/nachgefragt/wasauchimmer.

Das wäre ebenfalls rückwärtskompatibel (bzw kann rückwärtskompatibel gemacht werden indem man beim Shop-Update initial die Metadaten für schon installierte Apps nachzieht), macht wenig kaputt (sogar ein Verlust der App-Metadaten ist nicht schlimm: Dann wird halt die Installation abgebrochen weil "unbekannte" Dateien da sind - um wirklich was zu beschädigen muss man die App-Metadaten schon gezielt verändern, und wenn man das kann, dann kann man die App auch direkt kaputtmachen), und der App-Entwickler hat weniger Arbeit damit.

Benutzeravatar
PHabermehl
Beiträge: 2429
Registriert: 20 Dez 2014, 22:59
Wohnort: Bad Hersfeld

Re: CFW: Ordnerstruktur Apps

Beitrag von PHabermehl » 28 Mär 2017, 09:00

Hallo Richard, das ist ja toll, löst aber nicht das Problem verwaister Dateien und ganz besonders nicht das Problem von von der App angelegten Dateien, die bei der Installation nicht vorhanden waren... Oder ich hab's noch nicht verstanden...
Gruß Peter
https://www.MINTronics.de -- der ftDuino & TX-Pi Shop!

viele Grüße
Peter

richard.kunze
Administrator
Beiträge: 583
Registriert: 26 Dez 2015, 23:49
Wohnort: Rhein-Main-Gebiet

Re: CFW: Ordnerstruktur Apps

Beitrag von richard.kunze » 28 Mär 2017, 18:26

Hallo Peter,

doch, die "verwaisten Dateien" werden damit aufgeräumt. Das ist an einem Beispiel eventuell einfacher zu verstehen:
  • Bei der Erstinstallation packt der Store die Dateien "A", "B" und "C" aus dem Zipfile aus und merkt sich die Namen.
  • Während der Benutzung legt die App die Datei "Highscore" an. Davon bekommt der Store nichts mit, merkt sich also auch nichts.
  • Beim Update sind dann im Zipfile nur noch die Dateien "B" und "C": Der Update schaut in den gemerkten Metadaten nach, löscht "A", "B" und "C", und packt dann aus dem Zipfile "B" und "C" wieder aus.
Im Endeffekt ist die vewaiste Datei "A" also weg, und die (Benutzer-)Datei "Highscore" ist noch da - also genau das Ergebnis, das man haben will.

Die Erweiterung um den Hash der installeierten Dateien fängt dann noch zusätzlich den Fall ab, dass der Benutzer zwischen zwei Versionen von Hand z.B. "A" geändert hat.

Benutzeravatar
PHabermehl
Beiträge: 2429
Registriert: 20 Dez 2014, 22:59
Wohnort: Bad Hersfeld

Re: CFW: Ordnerstruktur Apps

Beitrag von PHabermehl » 28 Mär 2017, 19:01

Okay, super. Ich meinte aber den Fall, dass die App in Version n eine Datei anlegt, die die Version n+1 nicht mehr benötigt...
Aber je mehr ich drüber nachdenke, desto mehr wird das zu einem Kanone-Spatz-Paradoxon....
Vielleicht doch einfach gar nix ändern?

Gruß Peter
https://www.MINTronics.de -- der ftDuino & TX-Pi Shop!

viele Grüße
Peter

Antworten