Os patches geralmente estão contidos em .diff
files, porque os patches são criados usando o comando diff
.
Um patch é uma série de inserções e exclusões no código-fonte. Por esse motivo, para usar o patch, você deve criar o aplicativo (por exemplo, "foobar") da fonte depois de aplicar o patch. Então, nas etapas:
1. Obtenha o pacote de fontes para foobar .
A maioria das distribuições de linux (patch n.b. não é exclusiva do linux) tem "pacotes de código-fonte" que você pode usar para este propósito, mas como elas são heterogêneas, vou me referir apenas ao formato da fonte original aqui. A fonte original não faz parte da distro e pode ser difícil de encontrar. Um bom lugar para começar é o wikipedia, que contém artigos para muitos aplicativos populares, e o artigo deve conter um link para uma página inicial com um download de origem. Você também pode google, obviamente. O pacote de origem será chamado algo como foobar.0.1.tar.bz2
. Desembale isso - agora você tem um diretório chamado foobar.0.1
.
2. Adicione o patch.
Às vezes, os patches são arquivos únicos e, às vezes, são um conjunto de vários arquivos. Copie-os para foobar.0.1
e cd foobar.0.1
. Em seguida, você precisa executar o comando patch
. Isso é uma leitura da entrada padrão, portanto, você deve enviar o arquivo .diff
para dentro. A parte complicada é determinar o que usar para a opção -p
(se não houver instruções com o patch). Para fazer isso, você precisa examinar o início do arquivo de patch. Por exemplo:
--- old/comm.c 2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c 2006-07-07 02:39:24.000000000 +0000
Nesse caso, comm.c
é o nome do arquivo de origem que será alterado. No entanto, observe que há um diretório anexado a ele. Uma vez que estes não são o mesmo diretório ("antigo" versus "novo"), este é um grande indício de que esta parte do caminho é lixo (para os nossos propósitos). A finalidade da opção -p
(consulte man patch
) é eliminar esse prefixo. É preciso um número, que é o número de barras ( /
) para eliminar, com tudo no meio; Nesse caso, usaríamos -p1
para reduzir o caminho para apenas comm.c
.
Isso pressupõe que comm.c
está realmente no mesmo diretório, o que será outro indício de que sua interpretação está correta. Se ambas as linhas forem src/comm.c
e comm.c
estiver realmente no subdiretório src
da árvore de construção, você precisará usar -p0
- cuidado para não usar -p
para remover TODAS as barras. Se o caminho é absoluto (isto é, começa com /
), provavelmente é o que você quer. Agora aplique o patch:
patch -p1 < patch.diff
A origem foi modificada agora. Se houver mais arquivos .diff
, aplique-os da mesma maneira.
3. Construa e instale.
Este é o processo normal pelo qual você passaria para criar algo da origem - primeiro ./configure
, depois make
, make check
, make install
. Antes de fazer o último, se você já tiver uma instalação existente de foobar
, decida se deseja remover ou sobrescrever isso ou como você lidará com o conflito de nomes. Você provavelmente deseja que foobar
se refira à sua nova versão corrigida e não à antiga.