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
Patches erstellt man mit dem Befehl diff. Dafür gibt es viele Parameter, ich möchte Euch die wichtigsten in Kurzform näher bringen:
Parameter | Bedeutung |
---|---|
-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!
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.
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 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.
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