Comment appliquer des correctifs logiciels?


Réponses:


21

Les correctifs sont généralement contenus dans des .difffichiers, car les correctifs sont créés à l'aide de la diffcommande.

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.1et cd foobar.0.1. Ensuite, vous devez exécuter la patchcommande. Cela lit l'entrée standard, de sorte que vous voulez tuyau le .difffichier. La partie la plus délicate consiste à déterminer ce qu'il faut utiliser pour l' -poption 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.cc'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 -pcommutateur (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 -p1pour réduire le chemin à tout simplement comm.c.

Cela suppose qu'il comm.cse 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.cest en fait dans le srcsous - répertoire de votre arbre de construction, vous devez utiliser -p0- méfiez - vous de ne pas utiliser -pdu 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 .difffichiers, 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 foobarréférer à votre nouvelle version corrigée, et non à l'ancienne.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.