Implementieren eines Aktualisierungs- / Upgrade-Systems für eingebettete Linux-Geräte
Ich habe eine Anwendung, die läuft auf einem embedded-Linux-Gerät und jedes jetzt und dann änderungen an der software und gelegentlich auch, um das root-Dateisystem oder sogar die installierten kernel.
In der aktuellen update-system den Inhalt der alten Anwendungs-Verzeichnis einfach gelöscht und die neuen Dateien werden kopiert. Wenn änderungen am root-Dateisystem vorgenommen wurden, werden die neuen Dateien geliefert, die als Teil des Updates und einfach nur kopiert über die alten.
Nun, es gibt mehrere Probleme bei den derzeitigen Ansatz und ich bin auf der Suche nach Möglichkeiten, um die situation zu verbessern:
- Das root-Dateisystem des Ziels, die verwendet wird, zu erstellen, Datei-system-images ist nicht versioniert werden (ich glaube nicht, wir haben sogar die original-rootfs).
- Die Dateien rootfs, gehen in das update manuell ausgewählt werden (statt einem diff)
- Das update kontinuierlich wächst und das wird ein pita. Es gibt nun eine Aufteilung zwischen update/upgrade in dem das upgrade enthält größere rootfs änderungen.
- Ich habe den Eindruck, dass die Konsistenz überprüft, in der ein update sehr empfindlich sind, wenn überhaupt, umgesetzt werden.
Anforderungen sind:
- Die Anwendung update-Paket sollte nicht zu groß sein und es muss auch in der Lage sein, ändern Sie das root-Datei-system im Fall änderungen vorgenommen wurden.
- Ein upgrade kann viel größer sein und enthält nur die Dinge, die in das root-Dateisystem (wie neue Bibliotheken, kernel, etc.). Kann ein update benötigen ein upgrade wurde installiert.
Könnte das upgrade enthalten das ganze root-Dateisystem und machen Sie einfach einedd
auf dem flash-Laufwerk des Ziels? - Erstellen des update - /upgrade-Pakete sollten so automatisch wie möglich.
Ich brauche unbedingt irgendeine Weise zu tun, die Versionierung der root-Datei-system. Dies muss in einer Weise geschehen, dass ich berechnen kann, irgendeine Art von diff
davon, die verwendet werden kann zum aktualisieren der rootfs für das target-Gerät.
Ich sah schon in Subversion, da verwenden wir, dass für unseren source-code, aber das ist unpassend für die Linux-root-Datei-system (file-permissions, special files, etc.).
Habe ich nun erstellt, einige shell-Skripte, die mir sowas ähnliches wie ein svn diff
aber ich würde wirklich gerne wissen, ob es existiert bereits eine funktionierende und geprüfte Lösung für dieses.
Verwendung solcher diff
's ich denke, ein Upgrade würde dann einfach ein Paket mit den inkrementellen updates basierend auf der bekannten root-Dateisystem-Zustand.
Was sind Ihre Gedanken und Ideen auf diesem? Wie würden Sie die Umsetzung eines solchen Systems? Ich bevorzuge eine einfache Lösung, die umgesetzt werden und nicht zu viel Zeit.
InformationsquelleAutor der Frage trenki | 2011-08-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie sind auf der Suche falsch an das problem - ein update ist nicht atomar (z.B. dd ein abbild des Dateisystems, ersetzen Sie die Dateien in einem Verzeichnis) ist broken-by-design - wenn der Strom Weg in der Mitte von einem update das system ist ein backstein-und-embedded-system, power können, gehen in der Mitte des Upgrades.
Ich geschrieben habe, ein white paper auf, wie man richtig machen ein upgrade/update auf embedded Linux-Systemen [1]. Es war auf OLS. Sie können den Beitrag finden Sie hier: https://www.kernel.org/doc/ols/2005/ols2005v1-pages-21-36.pdf
[1] Ben-Yossef, Gilad. "Die Bau-Murphy-kompatible embedded-Linux-Systeme." Linux Symposium. 2005.
InformationsquelleAutor der Antwort gby
Ich absolut einverstanden, dass ein update muss sein atomic - ich habe kürzlich damit begonnen, eine Open-Source-Projekt mit dem Ziel, eine sichere und flexible Möglichkeit für software-management, mit lokalen und remote-update. Ich weiß meine Antwort kommt sehr spät, aber könnte es vielleicht helfen, Sie auf der nächsten Projekte.
Finden Sie Quellen für "swupdate" (der name des Projekts) bei
github.com/sbabic/swupdate
.Stefano
InformationsquelleAutor der Antwort sbabic
Derzeit gibt es schon ein paar Open-Source-embedded-Linux-update-tools wächst, mit verschiedenen Fokus jedes.
Einen anderen, der ist Wert, erwähnt ist RAUCdie sich auf die Handhabung sicher und atomaren Anlagen von signierten update-bundles auf Ihr Ziel, während Sie sehr flexibel in der Art und Weise, die Sie an Ihre Anwendung und Umgebung. Die Quellen sind auf GitHub: https://github.com/rauc/rauc
Im Allgemeinen, eine gute übersicht und Vergleich der aktuellen update-Lösungen finden Sie vielleicht auf dem Yocto-Projekt-Wiki-Seite über system-updates:
https://wiki.yoctoproject.org/wiki/System_Update
InformationsquelleAutor der Antwort ejoerns
Atomarität ist entscheidend für embedded-Geräte, einer der Gründe hervorgehoben ist macht Verlust; aber es könnte andere, wie hardware - /Netzwerk-Themen.
Atomarität ist vielleicht ein bisschen falsch verstanden; dies ist eine definition, die ich benutze, die im Kontext von Update-Modulen:
Full image-update mit dual A/B-partition-layout ist die einfachste und bewährteste Weg, dies zu erreichen.
Für Embedded Linux es werden mehrere software-Komponenten, die Sie wollen zu aktualisieren und zu verschiedenen designs, zum von zu wählen; es ist eine neuere Papier auf diese hier: https://mender.io/resources/Software%20Updates.pdf
Datei verschoben: https://mender.io/resources/guides-and-whitepapers/_resources/Software%2520Updates.pdf
Wenn Sie die Arbeit mit dem Yocto-Projekt, die Sie interessieren könnten Heiler.io - die open-source-Projekt an dem ich arbeite. Es besteht aus einem client und einem server und das Ziel ist es viel schneller und einfacher zu integrieren, nur eine Aktualisierung in eine bestehende Umgebung; ohne redesign zu viel oder verbringen viel Zeit auf custom/homegrown-Codierung. Es auch erlaubt Ihnen die Verwaltung von updates zentral mit dem server.
InformationsquelleAutor der Antwort rduio
Können Sie journal ein update und teilen Sie Ihre flash-update in zwei slots. Stromausfall immer wieder auf die aktuell ausgeführte Steckplatz. Der Letzte Schritt ist das ändern der Zeitschrift Wert. Nicht atomic und keine Möglichkeit, es zu machen Ziegel. Auch wenn es nicht auf den Zeitpunkt der Erstellung der Zeitschrift flags. Es gibt keine solche Sache wie ein atomarer update. Je. Nie gesehen in meinem Leben. Iphone, adroid, meine Netzwerk-switch-keiner von Ihnen sind atomar. Wenn Sie nicht genügend Platz haben, zu tun, die Art von design, dann korrigieren Sie das design.
InformationsquelleAutor der Antwort MaxDeusPhallus