Como aplico patches de software?

13

Eu tenho um aplicativo foobar para o qual alguém escreveu um patch para adicionar um recurso que eu gosto. Como posso usar o patch?

    
por goldilocks 15.10.2013 / 21:47

1 resposta

19

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.

    
por 15.10.2013 / 21:47