Como aplico patches de software?

15

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

Cachinhos Dourados
fonte

Respostas:

21

Os patches geralmente estão contidos nos .diffarquivos, porque os patches são criados usando o diffcomando

Um patch é uma série de inserções e exclusões no código-fonte. Por esse motivo, para usar o patch, você deve construir o aplicativo (por exemplo, "foobar") a partir da fonte após aplicar o patch. Então, nas etapas:

1. Obtenha o pacote de origem do foobar .

A maioria das distribuições linux (o patch nb não é exclusivo do linux) tem "pacotes fonte" que você pode usar para esse fim, mas como são heterogêneos, vou me referir apenas ao formato da fonte original aqui. A fonte original não faz parte da distribuição e pode ser difícil de encontrar. Um bom lugar para começar é a wikipedia, que possui artigos para muitos aplicativos populares, e o artigo deve conter um link para uma página inicial com um download da fonte. Você também pode pesquisar no Google, obviamente. O pacote fonte será chamado algo como foobar.0.1.tar.bz2. Descompacte - você agora 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.1e cd foobar.0.1. Em seguida, você precisa executar o patchcomando. Isso é lido da entrada padrão, então você deseja canalizar o .diffarquivo. A parte complicada é determinar o que usar para a -popção (se não houver instruções com o patch). Para fazer isso, você precisa observar o início do arquivo de correção. 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. Como esses não são o mesmo diretório ("antigo" vs. "novo"), é uma grande pista que essa parte do caminho é lixo (para nossos propósitos). O objetivo do -pswitch (consulte man patch) é eliminar esse prefixo. É preciso um número, que é o número de barras ( /) para eliminar, com tudo no meio; neste caso, usaríamos -p1para reduzir o caminho para simplesmente comm.c.

Isso pressupõe que comm.cesteja realmente no mesmo diretório, o que será outra pista para saber se sua interpretação está correta. Se ambas as linhas estavam src/comm.ce comm.cestão realmente no srcsubdiretório da sua árvore de construção, você precisa usar -p0- cuidado: o não uso de -ptodas removerá TODAS as barras. Se o caminho for absoluto (ou seja, começa com /), provavelmente é isso que você deseja. Agora aplique o patch:

patch -p1 < patch.diff

A fonte foi modificada agora. Se houver mais .diffarquivos, aplique-os da mesma maneira.

3. Crie e instale.

Este é o processo normal, você iria passar por construir algo a partir da fonte - primeiro ./configure, então make, make check, make install. Antes de fazer a última, se você já possui uma instalação foobar, decida se deseja remover ou substituir isso ou como vai lidar com o conflito de nomenclatura. Você provavelmente quer foobarse referir à sua nova versão corrigida, e não à antiga.

Cachinhos Dourados
fonte