Capítulo 11. Atualizando um Port

Esta tradução pode estar desatualizada. Para ajudar com as traduções, acesse a ferramenta de traduções do FreeBSD.

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 (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).

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 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.

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 portmgr@FreeBSD.org 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.

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 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
1Isso pode ser em qualquer lugar, é claro. Compilações de ports não se limitam ao /usr/ports/.
2O 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 Testando o Port e Verificando o Port com portlint.

% svn status
% svn update (1)
1Isso 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 Prefixos de Atualização de Arquivos do Subversion para uma lista completa.
Tabela 1. Prefixos de Atualização de Arquivos do Subversion

U

O arquivo foi atualizado sem problemas.

G

O arquivo foi atualizado sem problemas (somente quando está trabalhando com um repositório remoto).

M

O arquivo foi modificado e foi mesclado sem conflitos.

C

O 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

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.

11.2. UPDATE e MOVED

11.2.1. /usr/ports/UPDATING

Se a atualização do port exigir etapas especiais, como alteração de arquivos de configuração ou execução de um programa específico, ela deverá ser documentada neste arquivo. O formato de uma entrada neste arquivo é:

YYYYMMDD:
  AFFECTS: users of portcategory/portname
  AUTHOR: Your name <Your email address>

  Special instructions

Quando incluir instruções exatas para o portmaster, portupgrade e/ou instruções ao pkg, por favor, certifique-se de escapar o shell escaping corretamente. Por exemplo, não use:

# pkg delete -g -f docbook-xml* docbook-sk* docbook[2345]??-* docbook-4*

Como mostrado, o comando só irá funcionar com bourne shells. Em vez disso, use o formato abaixo, que funcionará com ambos bourne shell e c-shell:

# pkg delete -g -f docbook-xml\* docbook-sk\* docbook\[2345\]\?\?-\* docbook-4\*

Recomenda-se que a linha AFFECTS contenha uma glob que corresponda a todos os ports afetados pela entrada, para que as ferramentas automatizadas possam analisá-la com a maior facilidade possível. Se uma atualização diz respeito a todas as versõs do BIND 9 o conteúdo de AFFECTS deve ser usuários do dns/bind9*, não deve ser usuários do BIND 9

11.2.2. /usr/ports/MOVED

Este arquivo é usado para listar os ports movidos ou removidos. Cada linha no arquivo é composta por nome do port, para onde o port foi movido, quando e por quê. Se o port foi removido, a seção detalhando onde ele estava pode ser deixado em branco. Cada seção deve ser separada pelo caractere | (pipe), assim:

old name|new name (blank for deleted)|date of move|reason

A data deve ser inserida no formato YYYY-MM-DD. Novas entradas são adicionadas ao final da lista para mantê-las em ordem cronológica, com a entrada mais antiga no topo da lista.

Se um port foi removido, e depois restaurado, exclua a linha neste arquivo que informa que ele foi removido.

Se um port foi renomeado e depois renomeado de volta para seu nome original, adicione uma nova entrada com o nome intermediário para o nome antigo e remova a entrada antiga para não criar um loop.

Quaisquer alterações devem ser validadas com Tools/scripts/MOVEDlint.awk.

Se estiver usando um diretório de ports diferente de /usr/ports, use:

% cd /home/user/ports
% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk

Última alteração em: 9 de março de 2024 por Danilo G. Baio