Wie wende ich Software-Patches an?

15

Ich habe eine Anwendung, foobarfür die jemand einen Patch geschrieben hat, um eine Funktion hinzuzufügen, die mir gefällt. Wie kann ich den Patch verwenden?

Goldlöckchen
quelle

Antworten:

21

Patches sind normalerweise in .diffDateien enthalten, da die Patches mit dem diffBefehl erstellt werden .

Ein Patch ist eine Reihe von Einfügungen und Löschungen in den Quellcode. Aus diesem Grund müssen Sie die Anwendung (z. B. "foobar") nach dem Anwenden des Patches aus dem Quellcode erstellen, um den Patch verwenden zu können. Also, in Schritten:

1. Holen Sie sich das Quellpaket für foobar .

Die meisten Linux-Distributionen (nb patching ist nicht Linux-spezifisch) haben "Quellpakete", die Sie für diesen Zweck verwenden können. Da diese jedoch heterogen sind, beziehe ich mich hier nur auf das Format der Originalquelle. Die Originalquelle ist nicht Teil der Distribution und möglicherweise schwer zu finden. Ein guter Ausgangspunkt ist Wikipedia, das Artikel für viele beliebte Anwendungen enthält. Der Artikel sollte einen Link zu einer Homepage mit einem Quelldownload enthalten. Sie können natürlich auch selbst googeln. Das Quellpaket wird ungefähr so ​​heißen foobar.0.1.tar.bz2. Entpacken Sie diese - Sie haben jetzt ein Verzeichnis namens foobar.0.1.

2. Fügen Sie den Patch hinzu.

Manchmal handelt es sich bei Patches um einzelne Dateien und manchmal um mehrere Dateien. Kopieren Sie diese in foobar.0.1und cd foobar.0.1. Als nächstes müssen Sie den patchBefehl ausführen . Dies wird von der Standardeingabe gelesen, sodass Sie die .diffDatei weiterleiten möchten . Der schwierige Teil besteht darin, zu bestimmen, was für die -pOption verwendet werden soll (wenn der Patch keine Anweisungen enthält). Dazu müssen Sie sich den Anfang der Patch-Datei ansehen. Beispielsweise:

--- old/comm.c  2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c  2006-07-07 02:39:24.000000000 +0000

In diesem Fall comm.cist dies der Name der Quelldatei, die geändert wird. Beachten Sie jedoch, dass ein Verzeichnis angehängt ist. Da dies nicht dasselbe Verzeichnis ist ("alt" vs. "neu"), ist dies ein großer Hinweis darauf, dass dieser Teil des Pfades (für unsere Zwecke) Junk ist. Der Zweck des -pSchalters (siehe man patch) besteht darin, dieses Präfix zu entfernen. Es wird eine Zahl benötigt, dh die Anzahl der Schrägstriche ( /), die entfernt werden müssen, wobei sich alles dazwischen befindet. In diesem Fall würden wir -p1den Pfad auf einfach reduzieren comm.c.

Das setzt voraus, dass comm.ces sich tatsächlich in demselben Verzeichnis befindet, was ein weiterer Hinweis darauf ist, ob Ihre Interpretation korrekt ist. Wenn beide diese Linien waren src/comm.c, und comm.cist tatsächlich im srcUnterverzeichnis des Build - Baum, dann müssen Sie verwenden -p0- aufpassen , dass nicht mit -püberhaupt werden alle Schrägstriche entfernen. Wenn der Pfad absolut ist (dh mit beginnt /), ist es wahrscheinlich das, was Sie wollen. Wenden Sie nun den Patch an:

patch -p1 < patch.diff

Die Quelle wurde jetzt geändert. Wenn mehr .diffDateien vorhanden sind , wenden Sie diese auf die gleiche Weise an.

3. Erstellen und installieren.

Dies ist der normale Prozess , den Sie durch zu bauen etwas von der Quelle gehen würden - zuerst ./configure, dann make, make check, make install. Wenn Sie bereits eine Installation von haben foobar, entscheiden Sie vor der letzten, ob Sie diese entfernen oder überschreiben möchten oder wie Sie mit dem Namenskonflikt umgehen möchten. Sie möchten wahrscheinlich foobarauf Ihre neue, gepatchte Version verweisen und nicht auf die alte.

Goldlöckchen
quelle