Inhaltsverzeichnis

Beispiel für Erstellung eines Patchfiles

Autor: sledge0303

Erstellt am: 02.10.2007
Bearbeitet: 09.10.2007

In diesem Howto wird erläutert wie man ein Patch erstellen kann. Vieles hängt auch von den individuellen Fähigkeiten des Admins ab, ob man ein funktionierendes Patch zustande bringt.
Nicht vergessen, auch wenn vieles am Anfang nicht gelingt, es ist alles eine Sache der Übung und wenn man das System einmal verstanden hat will man zukünftig Patches einsetzen wenn

Welche Funktionen gibt es?

Patches erstellt man mit dem Befehl diff. Dafür gibt es viele Parameter, ich möchte Euch die wichtigsten in Kurzform näher bringen:

ParameterBedeutung
-r Vergleicht Dateien incl. Unterverzeichnisse
-N Hinzufügen / Löschen von Dateien (Text)
-a Hinzufügen / Löschen von Dateien (binär)
-u Zeistempel wird hinzugefügt


Es gibt noch einige Parameter mehr, für sehr komplexe Patches, eine Erwähnung dieser würde nur verwirren!

Wir erstellen ein kleines Testpatch

Zuerst erstellen wir ein Verzeichnis, vorgeschlagen wird das /home Verzeichnis eines Users

mkdir patch

Darin erstellen wir eine kleine Textdatei

nano patch/test
Papa hat Geburtstag

Nun kopieren wir dieses Verzeichnis samt 'test' nach patch1

cp -R patch patch1

Wir überprüfen ob alles geklappt hat

cat patch1/test
Papa hat Geburtstag

Jetzt editieren wir die Datei 'test' im patch1 Verzeichnis ein wenig. z.B. 'Papa hat Geburtstag am 03.03.'

nano patch1/test

kurze Überprüfung

cat patch1/test
Papa hat Geburtstag am 03.03.

Patchvorgang

Kurze Erläuterung wie der Patchvorgang abläuft. Im Syntax muss es folgendermaßen aussehen:

patch -$PARAMETER $ALTEDATEI $NEUEDATEI > patchfile.patch 

In unserem Fall ist patch die Altdatei und patch1 die neue. Da es sich um Text handelt, müssen wir die Parameter 'ru' benutzen.

diff -ru patch/ patch1/ > testpatch.patch

Anschließend schauen wir uns das Patchfile an

|cat testpatch.patch
cat testpatch.patch
diff -ru patch/test patch1/test
--- patch/test  2007-10-02 10:32:58.000000000 +0200
+++ patch1/test 2007-10-02 10:37:27.000000000 +0200
@@ -1 +1 @@
-Papa hat Geburtstag
+Papa hat Geburtstag am 03.03.

Die Datei sagt aus, wenn es in dem zu patchenden Verzeichnis eine Datei 'test' mit dem Inhalt 'Papa hat Geburtstag' gibt, soll dieser Inhalt durch 'Papa hat Geburtstag am 03.03.' ersetzt werden. Wir prüfen nach ob das stimmt…
Zur Verdeutlichung kopieren wir das 'patch' Verzeichnis erneut mit der alten 'test' Datei:

cp -R patch patch2
cd patch2

Nun patchen wir die alte Datei

patch < ../testpatch.patch

patching file test

Nun schauen wir uns das Ergebnis an:

cat test
Papa hat Geburtstag am 03.03.

wie man es nicht macht...

Die Pfade müssen 100%ig übereinstimmen, d.h. auch die Unterverzeichnisse (enthaltenen Slashed '/') müssen im alten sowie im neuen Verzeichnis identisch sein.
Hier ein Beispiel wie man es nicht machen darf:

diff -ur $verzeichnis/patch/ patch1/ > patchfile.patch

Beim Versuch dieses Patch einzuspielen würde sich 'patch' beklagen dass das so nicht geht wie du es dir vorstellst… :-|
zurück zum Seitenindex