On Mon, 12 Jan 2009, Gavin Schenk wrote:
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?
Gibt es, schau Dir doch einmal star an. Von 1.0 ein Archiv erstellen und
dann mit star -diff die Unterschiede zu 1.1 anzeigen lassen.
Mir sind einige weitere Umstaende, die auch noch wichtig sind, aber nicht
klar:
Wie konnte das Problem ueberhaupt entstehen?
Das klingt ja erstmal wie eine typische Aufgabe eines beliebigen Paket-
managers. Gibt es keine normalen Pakete?
Bei meiner eigen Distribution
(hauptsaechlich Slackware basiert, wobei ich auch Debian/Xandros erstelle)
hab ich eigene Pakete in einem eigenen /opt/$MEINS Zweig integriert.
Dann kann ich ganz normal die Pakete fuer die Distribution upgraden.
Eigene Pakete getrennt in meinem /opt/$MEINS subdir, koennen auch mit dem
normalen Paketmanager upgrades erhalten.
Nur Aenderungen die spezifisch fuer eine Maschine sind kommen nach
"/usr/local", hier ist der einzige Bereich, wo es manchmal Software gibt,
die direkt ohne Paket installiert wurde.
Wo befinden sich bei Dir die Teile die ein Update brauchen? Ueberall im
System? "/etc"?
Kann der Rechner fuer ein Update runtergefahren und z.B. von einer anderen
CF Karte oder CD gestartet werden, um wichtige libs wie glibc zu erneuern?
Eigentlich ist rsync neben star auch eine gute Loesung, ich waere nur
vorsichtig mit den Optionen, um alle wichtigen Ordner und Files die
ausgenommen werden muessen, zu erhalten. Bei einem ungepflegten System, wo
die Aenderungen nirgendwo vollstaendig dokumentiert wurden, kann es sonst
boese Ueberraschungen geben. Und bei Kundensystemen ...
Waere es nicht leichter ein ganz neues Basissystem einzuspielen und nur die
Kundenerweiterungen einzupflegen?
cu Frank
--
QOTD:
"I'm on a seafood diet -- I see food and I eat it."--
----------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org