Patchwork…

Situation

Man hat ein geniales OSS Produkt installiert und 3, 4, 123 kleinste Änderungen eingefügt um es an die Situation anzupassen oder Fehler zu korrigieren (die man natürlich zurückgemeldet hat). Nun werden ein paar kleine aber hässliche Sicherheitslücken gefunden und eine neue Version publiziert. Die Motivation geht natürlich in den Keller mit der Aussicht alles wieder und wieder reproduzieren zu müssen.

Eine mögliche Lösung: Patches. Patches sind kleinere Codeflicken die sich überraschend intelligent in neuen Code einzufügen wissen.

Erstellen eines Patches mit CVS/SVN

Wenn man alles im SVN/CVS hat ist man fein raus. Neue Version einer Datei nicht einchecken und folgendes tun:

cvs diff -up FILENAME > filename.patch

bzw.

svn diff -up FILENAME > filename.patch

Will man Änderungen in mehreren Dateien rekursiv verarbeiten, so geht das mit SVN/CVS so:

cvs diff -Rup DIRECTORY > filename.patch

bzw.

svn diff -Rup DIRECTORY > filename.patch

Erstellen eines Patches ohne CVS/SVN

Ohne SVN und CVS muss man die Originaldatei zuerst wegkopieren und folgendes tun:

diff -up ORIGINAL NEW > filename.patch

Bei ganzen Verzeichnissen muss man ebenfalls die unveränderte Version zuerst wegkopieren. Nach der Änderung in das Grundverzeichnis der Arbeitsversion wechseln und dann folgendes eingeben:

diff -urpN ORGINAL_DIRECTORY NEUES_DIRECTORY > filename.patch

-N fügt auch neu erstellte Dateien hinzu.

In Praktisch bedeutet dies zum Beispiel:

diff -urpN ../webapplication/. . > webapplicationbooster.patch

Patchen der Quellen

Das ist einfach. Im richtigen Verzeichnis:

patch -p0 < filename.patch

Hinweise

  • Die Option -B beim Erzeugen des Patches ignoriert leere Zeilen
  • -u8 fügt mehr Kontext hinzu: Für eher paranoid gestimmte Naturen…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.