Hallo, leider wird die Mail etwas länger da ich ein wenig aushole. Es geht im Prinzip darum den Unterschied zwischen zwei tgz-Files zu ermitteln und die daraus resultierenden diffs als Systemupdate zu verwenden.
Wen das nicht interessiert bitte hier aufhören weiter zu lesen!!! Ich hatte zu dem Thema letztes Jahr schon einmal gefragt, da gab es leider wenig Resonanz. Ich versuche es jetzt noch einmal bevor ich anfange selbst zu entwickeln. Also hier der Versuch Euer geballtes Wissen auszunutzen :-). Hintergrund: Ich bin Entwickler und programmiere den ganzen Tag in C, C++ (Qt). Da ich mich schon seit Jahren nebenbei mit Linux beschäftige und im Ansatz etwas darüber zu wissen scheine, habe ich die ehrenvolle Aufgabe einige embedded Linux Systeme (nebenbei) zu pflegen und manchmal auch zu erweitern. Das sind meist kundenspezifische Lösungen die als Basis auf Linux aufsetzen. Problem: Mein Problem ist, das ich Änderungen/Erweiterungen eines solchen Systems in Form eines Patches brauche, um Updates für ausgelieferte Systeme bereitstellen zu können. Bisher habe ich diese Patches selbst "aufwendig" generiert. Das möchte ich in Zukunft automatisieren. Dabei können z.B. 20 Systeme mit Version A ausgeliefert sein und 30 Systeme enthalten schon Version B des Softwarestands etc. Mein Wunsch ist ein kumulatives Patch, das sowohl Version A, als auch Version B auf den Stand C befördern kann. Ausgangspunkt (Was ich habe): Jedes System ist versioniert, die Version kann zur Laufzeit ausgelesen werden (Umgebungsvariable). Von jeder Version habe ich ein Image der Master-CF-Karte inkl. MD5 Prüfsummen (erzeugt mit dd). Von jeder Version habe ich ein tgz File, dass das komplette Root-Filesystem enthält. Das tgz enthält alles was auf einem Ext2-Filesystem enthalten sein kann (Verzeichnisse, knodes, files, symbolische links, etc). Meine Anforderung: Ich möchte einen kumulatives Patch erzeugen, das jede vorzufindende Version auf einen neueren Stand bringen kann. Ein Downgrade muss nicht möglich sein. Prinzipieller Lösungsansatz am Beispiel: Im Beispiel gibt es ein System in drei Versionen 1.0, 1.1, 1.2. Entsprechend gibt es drei tgz-Files 1.0.tgz, 1.1.tgz und 1.2.tgz. 1.) Erstelle diffs für die Übergänge 1.0->1.1 und 1.1->1.2. Packe diese Änderungen in ein kumulatives Patch zusammen. 2.) Beim Aufspielen des patches wird auf dem laufenden System die installierte Version ermittelt. Wird z.B. 1.1 vorgefunden, dann werden nur die Änderungen des Überganges 1.1->1.2 aufgespielt. Dabei gibt es noch einiges zu beachten (benutzerdefinierte Einstellungen nicht aus versehen platt machen z.B.), aber das wäre die prinzipielle Vorgehensweise. Ich habe schon überlegt, ob das mit diff und patch möglich wäre, aber das funktioniert nicht für binäre Dateien, symbolische Links und knodes. Ausserdem müssten auch Zugriffsrechte beibehalten und ggf. angepasst werden. Ich würde das mit Bash-Skripten + einiger Hilfstools angehen..... Gibts hierfür ( oder Teile davon) freie/kommerzielle Lösungen? Sorry für die lange Mail und danke an alle die bis zum bitteren Ende gelesen haben. Gruß, Gavin -- Sensationsangebot verlängert: GMX FreeDSL - Telefonanschluss + DSL für nur 16,37 Euro/mtl.!* http://dsl.gmx.de/?ac=OM.AD.PD003K1308T4569a -- ---------------------------------------------------------------------------- PUG - Penguin User Group Wiesbaden - http://www.pug.org

