Patching packages (Português)

Esse artigo cobre como criar e como aplicar patches (correções, remendos) em pacotes no Arch Build System (ABS).

Status de tradução: Esse artigo é uma tradução de Patching packages. Data da última tradução: 2019-08-17. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Um patch descreve um conjunto de alterações a linha para um ou mais arquivos. Patches são geralmente usados para automatizar as alterações ao código-fonte.

Criando patches

Nota: Se você precisar alterar apenas uma ou duas linhas, convém usar o sed (Português).

A ferramenta diff compara arquivos linha por linha. Se você salvar sua saída, você terá um patch, por exemplo diff --unified --recursive --text foo bar > patch. Se você informar diretórios, diff vai comparar os arquivos que eles contêm.

  1. Exclua o diretório src se você já tiver construído o pacote.
  2. Execute makepkg --nobuild, o qual baixará e extrairá os arquivos fonte, especificados em PKGBUILD, mas não os compilará.
  3. Crie duas cópias do diretório extraído no diretório src, uma como uma cópia original e outra para sua versão alterada. Nós os chamaremos de pacote.orig e .
  4. Faça suas alterações no diretório .
  5. Execute e verifique se o patch está correto.
  6. Execute para criar o patch.
  7. Entre no diretório pacote.orig e aplique o patch usando . Verifique se o patch está funcionando na compilação e instalação do pacote modificado com .
Nota: Você também pode criar patches com Git usando git diff ou git format-patch .

Veja diff(1) e para mais informações.

Aplicando patches

Esta seção descreve como aplicar patches criados ou baixados da Internet a partir da função PKGBUILD . Siga esses passos:

  1. Adicione uma entrada ao array do PKGBUILD para o arquivo de patch, separado do URL fonte original por um espaço. Se o arquivo estiver disponível online, você pode fornecer a URL completa e ela será automaticamente baixada e colocada no diretório src. Se for um patch criado por você mesmo ou não estiver disponível, você deverá colocar o arquivo de patch no mesmo diretório que o arquivo PKGBUILD e apenas adicionar o nome do arquivo ao array de fontes para que ele é copiado para o diretório src. Se você redistribuir o PKGBUILD, você deve, claro, incluir o patch com o PKGBUILD.
  2. Então, use updpkgsums (do ) para atualizar o array md5sums. Ou adicione manualmente uma entrada à matriz md5sums; você pode gerar a soma do seu patch usando a ferramenta md5sum.
  3. Crie a função no PKGBUILD se ainda não houver uma.
  4. O primeiro passo é mudar para o diretório que precisa ser corrigido (na função , não no seu terminal! Você quer automatizar o processo de aplicação do patch). Você pode fazer isso com algo como ou algo semelhante. O é geralmente o nome de um diretório criado pela descompactação de um arquivo de origem baixado, mas não em todos os casos.
  5. Agora você só precisa aplicar o patch dentro desse diretório. Isto é feito simplesmente adicionando à sua função , alterando para o nome do arquivo que contém o diff (o arquivo que foi copiado automaticamente em seu diretório src porque estava no array do arquivo PKGBUILD).

Um exemplo de função "prepare":

prepare() {
    cd $pkgname-$pkgver
    patch --forward --strip=1 --input="${srcdir}/eject.patch"
}

Execute (a partir do terminal agora). Se tudo correr bem, o patch será aplicado automaticamente e o novo pacote conterá as alterações incluídas no patch. Se não, você pode ter que tentar com a opção do patch. Enquanto estiver tentado, você pode achar as opções , ou utilizáveis. Leia para mais informações.

Basicamente, funciona da seguinte forma. Se o arquivo diff foi criado para aplicar patches a arquivos em , os arquivos diff serão aplicados a minhaversão/arquivo. Você está executando-o de dentro do diretório (porque você mudar o diretório para dentro daquele diretório no PKGBUILD), então quando o patch é aplicado ao arquivo, você vai querer aplicá-lo ao arquivo arquivo, retirando a parte . faz isso, removendo um diretório do caminho. Porém, se o desenvolvedor aplicou patch em , você precisa remover dois diretórios, usando .

Se você não aplicar uma opção , ela tirará toda a estrutura do diretório. Tudo bem se todos os arquivos estiverem no diretório base, mas se o patch foi criado em e um dos arquivos editados for , e você executar o patch sem uma opção de , ele tentará corrigir um arquivo chamado .

A maioria dos desenvolvedores cria patches a partir do diretório pai do diretório que está sendo corrigido, então geralmente estará correto.

Usando quilt

Uma maneira mais simples de criar patches é usar o , que tem um trabalho melhor para gerenciar vários patches, como aplicar patches, atualizar patches e reverter arquivos com patches para o estado original. O é usado no Debian para gerenciar seus patches. Consulte Using Quilt para obter informações básicas sobre o uso de quilt básico para gerar, aplicar patches e reverter arquivos corrigidos.

Veja também

gollark: Besides, you STILL don't know which phone I have.
gollark: It might not be that bad. It's clearly worth it in this case.
gollark: It's just not optimized for GUI management, and haven't you yourself complained about Wine being bad?
gollark: Well, it's much more stable, you can manage it with a GUI, all your favourite Windows programs run on it, it has good things like IIS, etc.
gollark: Well, not not doing that.
This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.