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

Antwort per Email an