J'ai une application foobar
pour laquelle quelqu'un a écrit un patch pour ajouter une fonctionnalité que j'aime. Comment puis-je utiliser le patch?
J'ai une application foobar
pour laquelle quelqu'un a écrit un patch pour ajouter une fonctionnalité que j'aime. Comment puis-je utiliser le patch?
Réponses:
Les correctifs sont généralement contenus dans des .diff
fichiers, car les correctifs sont créés à l'aide de la diff
commande.
Un patch est une série d'insertions et de suppressions dans le code source. Pour cette raison, afin d'utiliser le correctif, vous devez créer l'application (par exemple, "foobar") à partir de la source après avoir appliqué le correctif. Donc, par étapes:
1. Obtenez le paquet source pour foobar .
La plupart des distributions linux (le patch nb n'est pas unique à linux) ont des "packages source" que vous pouvez utiliser à cet effet, mais comme ils sont hétérogènes, je ne ferai référence ici qu'au format de la source d'origine. La source d'origine ne fait pas partie de la distribution et peut être difficile à trouver. Un bon point de départ est wikipedia, qui contient des articles pour de nombreuses applications populaires, et l'article doit contenir un lien vers une page d'accueil avec un téléchargement source. Vous pouvez également google vous-même, évidemment. Le paquet source sera appelé quelque chose comme foobar.0.1.tar.bz2
. Déballez cela - vous avez maintenant un répertoire appelé foobar.0.1
.
2. Ajoutez le patch.
Parfois, les correctifs sont des fichiers uniques et parfois ils sont un ensemble de plusieurs fichiers. Copiez-les dans foobar.0.1
et cd foobar.0.1
. Ensuite, vous devez exécuter la patch
commande. Cela lit l'entrée standard, de sorte que vous voulez tuyau le .diff
fichier. La partie la plus délicate consiste à déterminer ce qu'il faut utiliser pour l' -p
option de (s'il n'y a pas des instructions avec le patch). Pour ce faire, vous devez regarder le début du fichier de patch. Par exemple:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
Dans ce cas, comm.c
c'est le nom du fichier source qui sera modifié. Cependant, notez qu'un répertoire y est ajouté. Étant donné qu'il ne s'agit pas du même répertoire ("ancien" vs "nouveau"), c'est un indice important que cette partie du chemin est indésirable (pour nos besoins). Le but du -p
commutateur (voir man patch
) est d'éliminer ce préfixe. Il faut un nombre, qui est le nombre de barres obliques ( /
) à éliminer, avec tout le reste ; dans ce cas, nous utiliserions -p1
pour réduire le chemin à tout simplement comm.c
.
Cela suppose qu'il comm.c
se trouve en fait dans le même répertoire, ce qui sera un autre indice pour savoir si votre interprétation est correcte. Si ces deux lignes ont été src/comm.c
, et comm.c
est en fait dans le src
sous - répertoire de votre arbre de construction, vous devez utiliser -p0
- méfiez - vous de ne pas utiliser -p
du tout supprimera toutes les barres obliques. Si le chemin est absolu (c'est-à-dire qu'il commence par /
), c'est probablement ce que vous voulez. Maintenant, appliquez le patch:
patch -p1 < patch.diff
La source a maintenant été modifiée. S'il y a plus de .diff
fichiers, appliquez-les de la même manière.
3. Construisez et installez.
Ceci est le processus normal vous passer par quelque chose de construction de la source - d' abord ./configure
, puis make
, make check
, make install
. Avant de faire la dernière, si vous avez déjà une installation existante de foobar
, décidez si vous souhaitez supprimer ou remplacer cela ou comment vous allez gérer le conflit de dénomination. Vous voulez probablement vous foobar
référer à votre nouvelle version corrigée, et non à l'ancienne.