Usando Quilt
Gerencie pacotes-fonte do Debian usando quilt em vez de um sistema de controle de versão. Para uma introdução ao programa, consulte /usr/share/doc/quilt/quilt.pdf.gz em quilt. Para uma discussão sobre o sistema de patches "quilt", veja Projects/DebSrc3.0. Para informações gerais sobre empacotamentos, consulte Packaging.
Contents
Informações gerais
Documentação
Há um extenso guia sobre quilt e empacotamento: Guia do(a) Novo(a) Mantenedor(a) Debian.
Um tutorial abrangente, mas sucinto sobre quilt, Como usar o quilt para gerenciar patches em pacotes Debian, publicado por Raphaël Hertzog (coautor do Guia do(a) Novo(a) Mantenedor(a) acima)
Um How-To da equipe Debian Perl: Quilt Mantenedores(as) Debian.
Há também umtutorial Quilt (PDF), embora datado (2006).
Se estiver usando um fluxo de trabalho de empacotamento git, considere usar ?gbp-pq(1) para o gerenciamento de patches quilt.
Conceitos básicos
O quilt funciona com alguns diretórios : cria um diretório .pc/ e um diretório patches/.
Esses diretórios podem ser criados quando você faz
- $ quilt import algum_pacote.diff.gz
Usando quilt com pacotes-fonte Debian
Situação: você baixou um pacote-fonte Debian que usa quilt e quer corrigir um bug e, em seguida, enviar um patch para os(as) mantenedores(as).
Usando o arquivo de configuração .quiltrc
Coloque o arquivo de configuração .quiltrc em seu diretório home com as seguintes linhas:
QUILT_PATCHES=debian/patches QUILT_NO_DIFF_INDEX=1 QUILT_NO_DIFF_TIMESTAMPS=1 QUILT_REFRESH_ARGS="-p ab" QUILT_DIFF_ARGS="--color=auto" # If you want some color when using `quilt diff`. QUILT_PATCH_OPTS="--reject-format=unified" QUILT_COLORS="diff_hdr=1;32:diff_add=1;34:diff_rem=1;31:diff_hunk=1;33:diff_ctx=35:diff_cctx=33"
Variáveis de ambiente
Alternativamente, você pode definir variáveis de ambiente sozinho(a).
Adicione estas linhas aos scripts de init do shell (~/.bashrc) e reinicie o shell para aplicar as alterações. Ou, execute-as em seu shell antes de usar o quilt.
export QUILT_PATCHES=debian/patches
export QUILT_REFRESH_ARGS="-p ab --no-timestamps --no-index"
Encapsulado
Para aplicar opções do quilt somente quando dentro de um pacote-fonte Debian, você pode configurar seu ~/.quiltrc como algo assim:
d=. ; while [ ! -d $d/debian -a `readlink -e $d` != / ]; do d=$d/..; done if [ -d $d/debian ] && [ -z $QUILT_PATCHES ]; then # if in Debian packaging tree with unset $QUILT_PATCHES QUILT_PATCHES="debian/patches" if ! [ -d $d/debian/patches ]; then mkdir $d/debian/patches; fi fi
Tarefas básicas do quilt
Criando um patch
apt-get source decide se aplica os patches com base no formato do pacote.
Para alguns pacotes, você terá que aplicar os patches como especificado aqui. Para outros, eles serão aplicados automaticamente.
Primeiro passo: aplicar patches existentes à fonte:
quilt push -a
para "empurrar" (push) todos os patches existentes para a árvore-fonte (quando você constrói um pacote, isso é feito pelos scripts de construção).
Criando um patch
quilt new meuPatch.diff # este é o nome do patch
adicionando um arquivo
quilt add README # Onde 'README' é o nome do arquivo que você quer modificar
Você tem que fazer isso para todos os arquivos que quiser modificar antes de alterá-los.
Um patch quilt pode alterar vários arquivos.
Agora faça alterações na fonte
Agora, faça suas alterações nos arquivos adicionados ao patch: edite-os ou substitua-os por arquivos já modificados e armazenados em um diretório diferente.
Atualizar um patch com alterações feitas em seus arquivos
quilt refresh # você pode fazer isso quantas vezes quiser
Adicione uma descrição ao cabeçalho
quilt header -e --dep3 # edita o cabeçalho em $EDITOR, iniciando com um modelo de cabeçalho DEP-3
Termine sua edição
quilt pop -a
Isso retira a aplicação de todos os patches para que a fonte retorne à condição quando baixada.
Editando um patch existente
quilt suporta patches múltiplos, mas você só muda um deles.
Este é o último patch empurrado (pushed).
Para editar um patch existente, comece "empurrando-o":
quilt push meuPatch.diff
Agora edite-o, e quando terminado, grave-o:
quilt refresh meuPatch.diff
Completação de linha de comando pode economizar algum tempo de digitação.
Atualize um patch que falhou ao ser aplicado
Se o patch não for aplicado (geralmente ao atualizar para uma nova versão upstream) quando você faz um quilt push, como o exemplo abaixo,
$ quilt push Applying patch CVE-2018-1000544_part1.patch patching file lib/zip/entry.rb Hunk #1 FAILED at 147. 1 out of 1 hunk FAILED -- rejects in file lib/zip/entry.rb patching file test/data/absolutepath.zip patching file test/entry_test.rb Patch CVE-2018-1000544_part1.patch does not apply (enforce with -f)
$ quilt push -f Applying patch CVE-2018-1000544_part1.patch patching file lib/zip/entry.rb Hunk #1 FAILED at 147. 1 out of 1 hunk FAILED -- saving rejects to file lib/zip/entry.rb.rej patching file test/data/absolutepath.zip patching file test/entry_test.rb Applied patch CVE-2018-1000544_part1.patch (forced; needs refresh)
Agora você deve inspecionar os arquivos *.rej (lib/zip/entry.rb.rej neste exemplo) e adaptar o lib/zip/entry.rb para incluir a alteração desejada.
Se a alteração foi incorporada pelo(a) upstream, você pode remover a alteração do seu patch. Por exemplo:
$ quilt refresh Diff failed on file 'test/data/absolutepath.zip', aborting # Neste caso, a alteração em absolutepath.zip já foi realizada pelo(a) upstream. # Então vamos remover o arquivo do patch: $ quilt remove test/data/absolutepath.zip File test/data/absolutepath.zip removed from patch CVE-2018-1000544_part1.patch $ quilt refresh
Atualize os comentários de cabeçalho do patch no topo da pilha
quilt header -e
Agora que salvamos nossas mudanças, removemos todos os patches e retornamos a fonte ao seu estado original:
quilt pop -a
Encaminhado patches para upstream
Os patches não específicos do Debian, como patches para correções de bugs e aprimoramentos de recursos, precisam ser encaminhados para o(a) upstream: Como encaminhar patches para upstream].
