Capítulo 11. Atualizando um Port

Índice
11.1. Usando o Subversion para Criar Patches
11.2. UPDATE e MOVED

Quando um port não estiver na versão mais recente disponibilizada pelos autores, atualize a sua cópia de trabalho local do /usr/ports. O port pode já ter sido atualizado para a nova versão.

Ao trabalhar com diversos ports, provavelmente será mais fácil usar o Subversion para manter toda a coleção de ports atualizada, conforme descrito no Handbook. Isso trará o benefício adicional de rastrear todas as dependências de ports.

O próximo passo é ver se há uma atualização já pendente. Para fazer isso, existem duas opções. Há uma interface de pesquisa no Relatório de Problemas do FreeBSD (PR) ou banco de dados de bugs. Selecione Ports & Packages no menu de seleção múltipla Product e digite o nome do port no campo Summary.

No entanto, às vezes as pessoas esquecem de colocar o nome do port no campo Resumo de maneira não ambígua. Nesse caso, tente pesquisar o campo Comment na seção Detailled Bug Information, ou tente o Sistema de Monitoramento de Ports do FreeBSD (também conhecido como portsmon). Este sistema tenta classificar os PRs do port por portname. Para procurar por PRs sobre um port específico, use a Visão geral de um port.

Se não houver nenhum PR pendente, o próximo passo é enviar um email para o mantenedor do port, como apresentado em make maintainer. Essa pessoa pode já estar trabalhando em uma atualização ou ter algum motivo para não atualizar o port neste momento (devido a, por exemplo, problemas de estabilidade da nova versão), e não há necessidade de duplicar seu trabalho. Note que os ports não mantidos são listadas com um mantenedor ports@FreeBSD.org, que é apenas a lista de discussão geral de ports, então enviar emails provavelmente não ajudará nesse caso.

Se o mantenedor lhe pedir para fazer a atualização ou não houver mantenedor, então ajude o FreeBSD preparando a atualização! Por favor, faça isso usando o comando diff(1) do sistema base.

Para criar um diff adequado para um único patch, copie o arquivo que precisa de patching para something.orig, salve as alterações em something e depois crie o patch:

% diff -u something.orig something > something.diff

Caso contrário, use o método svn diff (Seção 11.1, “Usando o Subversion para Criar Patches”) ou copie o conteúdo do port para um diretório completamente diferente e use o resultado do diff(1) recursivo para os diretórios novos e antigos do port (por exemplo, se o diretório de ports modificado for chamado superedit e o original está na nossa árvore como superedit.bak então salve o resultado do comando diff -ruN superedit.bak superedit). Tanto o diff unificado ou como o de contexto é aceito, mas os committers do port geralmente preferem diffs unificados. Observe o uso da opção -N -- essa é a maneira correta de forçar o diff a lidar adequadamente com o caso de novos arquivos sendo adicionados ou de arquivos antigos sendo excluídos. Antes de nos enviar o diff, por favor, examine a saída para se certificar de que todas as alterações fazem sentido. (Em particular, primeiro limpe os diretórios de trabalho com make clean).

Nota:

Se alguns arquivos foram adicionados, copiados, movidos ou removidos, adicione essas informações ao relatório de problemas, para que o committer que pegar o patch saiba quais comandos svn(1) executar.

Para simplificar operações comuns com arquivos de patch, use make makepatch como descrito em Seção 4.4, “Patching”. Existem outras ferramentas, como /usr/ports/Tools/scripts/patchtool.py. Antes de usá-lo, por favor leia /usr/ports/Tools/scripts/README.patchtool.

Se o port não é mantido e você o utiliza ativamente, por favor, considere se voluntariar como o seu mantenedor. O FreeBSD tem mais de 4000 ports sem mantenedores, e esta é uma área onde mais voluntários são sempre necessários. (Para uma descrição detalhada das responsabilidades dos mantenedores, consulte a seção no Developer's Handbook.)

Para enviar o diff, use o formulário de envio de bugs (no produto Ports & Packages, e no componente Individual Port(s)). Sempre inclua a categoria com o nome do port, seguido por dois pontos e uma breve descrição do problema. Exemplos: category/portname: add FOO option; category/portname: Update to XY. Por favor mencione quaisquer arquivos adicionados ou deletados na mensagem, pois eles devem ser explicitamente especificados no svn(1) ao fazer o commit. Não comprima ou codifique o diff.

Antes de enviar o bug, revise a seção Escrevendo um relatório de problema no artigo Relatórios de Problemas. Ele contém muito mais informações sobre como escrever relatórios úteis de problemas.

Importante:

Se a atualização for motivada por preocupações de segurança ou por uma falha grave em um port que já está disponível na arvore, notifique a Equipe de Gerenciamento de Ports para solicitar imediata recompilação e redistribuição do pacote do port. Caso contrário, usuários desavisados ​​do pkg continuarão a instalar a versão antiga via pkg install por várias semanas.

Nota:

Por favor, use o diff(1) ou svn diff para criar atualizações para ports existentes. Outros formatos incluem o arquivo inteiro e impossibilitam ver o que mudou. Quando os diffs não são incluídos, toda a atualização pode ser ignorada.

Agora que tudo isso foi feito, leia sobre como manter-se atualizado Capítulo 16, Mantendo-se Atualizado.

11.1. Usando o Subversion para Criar Patches

Quando possível, envie por favor um svn(1)diff. Eles são mais fáceis de manusear do que os diffs entre diretórios novos e antigos. Nele é mais fácil de ver o que mudou e também é mais fácil de atualizar o diff no caso de algo ter sido modificado na Coleção de Ports desde que o diff foi gerado, ou no caso do committer pedir que algo seja corrigido. Além disso, um patch gerado com svn diff pode ser facilmente aplicado com svn patch e irá economizar algum tempo para o committer.

% cd ~/my_wrkdir 1
% svn co https://svn.FreeBSD.org/ports/head/dns/pdnsd 2
% cd ~/my_wrkdir/pdnsd

1

Isso pode ser em qualquer lugar, é claro. Compilações de ports não se limitam ao /usr/ports/.

2

O svn.FreeBSD.org é o servidor Subversion público do FreeBSD. Veja Mirrors do Subversion para mais informações.

Enquanto estiver no diretório de ports, faça as alterações necessárias. Se você adicionar, copiar, mover ou remover um arquivo, use o svn para registrar essas alterações:

% svn add new_file
% svn copy some_file file_copy
% svn move old_name new_name
% svn remove deleted_file

Certifique-se de verificar o port usando a lista de verificação Seção 3.4, “Testando o Port” e Seção 3.5, “Verificando o Port com portlint.

% svn status
% svn update 1

1

Isso tentará mesclar as diferenças entre o patch e a versão do repositório atual. Veja a saída cuidadosamente. A letra na frente de cada nome de arquivo indica o que foi feito com ele. Consulte Tabela 11.1, “Prefixos de Atualização de Arquivos do Subversion para uma lista completa.

Tabela 11.1. Prefixos de Atualização de Arquivos do Subversion
UO arquivo foi atualizado sem problemas.
GO arquivo foi atualizado sem problemas (somente quando está trabalhando com um repositório remoto).
MO arquivo foi modificado e foi mesclado sem conflitos.
CO arquivo foi modificado e foi mesclado com conflitos.

E se o status C for exibido como resultado de um svn update, isso significa que algo mudou no repositório Subversion e o svn(1) não foi capaz de mesclar as alterações locais com as do repositório. É sempre uma boa ideia inspecionar as alterações de qualquer maneira, o svn(1) não sabe nada sobre a estrutura de um port, então pode (e provavelmente irá) mesclar coisas que não fazem sentido.

O último passo é fazer um diff(1) unificado das mudanças:

% svn diff > ../`make -VPKGNAME`.diff

Nota:

Se os arquivos foram adicionados, copiados, movidos ou removidos, inclua os comandos svn(1) add, copy, move e remove que foram usados. O svn move ou o svn copy deve ser executado antes de aplicar o patch. O svn add ou svn remove deve ser executado após o patch ser aplicado.

Envie o patch seguindo as diretrizes de envios de relatórios de problemas.

All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/

Questions that are not answered by the documentation may be sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.