aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/pt-br/books/porters-handbook/upgrading/chapter.adoc
blob: eed6848802dc310e53a65acce3f34f36ce989289 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
---
title: Capítulo 11. Atualizando um Port
prev: books/porters-handbook/testing
next: books/porters-handbook/security
---

[[port-upgrading]]
= Atualizando um Port
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:source-highlighter: rouge
:experimental:
:skip-front-matter:
:xrefstyle: basic
:relfileprefix: ../
:outfilesuffix:
:sectnumoffset: 11
:toc-title: Índice
:table-caption: Tabela
:figure-caption: Figura
:example-caption: Exemplo

include::shared/mirrors.adoc[]
include::shared/authors.adoc[]
include::shared/releases.adoc[]
include::shared/pt-br/mailing-lists.adoc[]
include::shared/pt-br/teams.adoc[]
include::shared/pt-br/urls.adoc[]

toc::[]

Quando um port não estiver na versão mais recente disponibilizada pelos autores, atualize a sua cópia de trabalho local do [.filename]#/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 link:{handbook}#ports-using[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 https://bugs.freebsd.org/search/[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 <<portsmon,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 http://portsmon.FreeBSD.org/portoverview.py[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 man:diff[1] do sistema base.

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

[source,bash]
....
% diff -u something.orig something > something.diff
....

Caso contrário, use o método `svn diff` (<<svn-diff>>) ou copie o conteúdo do port para um diretório completamente diferente e use o resultado do man:diff[1] recursivo para os diretórios novos e antigos do port (por exemplo, se o diretório de ports modificado for chamado [.filename]#superedit# e o original está na nossa árvore como [.filename]#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`).

[NOTE]
====
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 man:svn[1] executar.
====

Para simplificar operações comuns com arquivos de patch, use `make makepatch` como descrito em <<slow-patch>>. Existem outras ferramentas, como [.filename]#/usr/ports/Tools/scripts/patchtool.py#. Antes de usá-lo, por favor leia [.filename]#/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 link:{developers-handbook}#POLICIES-MAINTAINER[Developer's Handbook].)

Para enviar o diff, use o https://bugs.freebsd.org/submit/[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 man:svn[1] ao fazer o commit. Não comprima ou codifique o diff.

Antes de enviar o bug, revise a seção link:{problem-reports}#pr-writing[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.

[IMPORTANT]
====
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 mailto:portmgr@FreeBSD.org[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.
====

[NOTE]
====
Por favor, use o man: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 <<keeping-up>>.

[[svn-diff]]
== Usando o Subversion para Criar Patches

Quando possível, envie por favor um man: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.

[source,bash]
....
% cd ~/my_wrkdir <.>
% svn co https://svn.FreeBSD.org/ports/head/dns/pdnsd <.>
% cd ~/my_wrkdir/pdnsd
....

<.> Isso pode ser em qualquer lugar, é claro. Compilações de ports não se limitam ao [.filename]#/usr/ports/#.
<.> O https://svn.FreeBSD.org/[svn.FreeBSD.org] é o servidor Subversion público do FreeBSD. Veja link:{handbook}#svn-mirrors[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:

[source,bash]
....
% 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 <<porting-testing>> e <<porting-portlint>>.

[source,bash]
....
% svn status
% svn update <.>
....

<.> 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 <<table-svn-up>> para uma lista completa.

[[table-svn-up]]
.Prefixos de Atualização de Arquivos do Subversion
[cols="1,1", frame="none"]
|===
|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 man: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 man: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 man:diff[1] unificado das mudanças:

[source,bash]
....
% svn diff > ../`make -VPKGNAME`.diff
....

[NOTE]
====
Se os arquivos foram adicionados, copiados, movidos ou removidos, inclua os comandos man: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 link:{problem-reports}#pr-writing[diretrizes de envios de relatórios de problemas].

[[moved-and-updating-files]]
== [.filename]#UPDATE# e [.filename]#MOVED#

[[moved-and-updating-updating]]
=== [.filename]#/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 é:

[.programlisting]
....
YYYYMMDD:
  AFFECTS: users of portcategory/portname
  AUTHOR: Your name <Your email address>

  Special instructions
....

[TIP]
====

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:

[source,bash]
....
# 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:

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

====

[NOTE]
====
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`
====

[[moved-and-updating-moved]]
=== [.filename]#/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:

[.programlisting]
....
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.

[NOTE]
====
Quaisquer alterações devem ser validadas com `Tools/scripts/MOVEDlint.awk`.

Se estiver usando um diretório de ports diferente de [.filename]#/usr/ports#, use:

[source,bash]
....
% cd /home/user/ports
% env PORTSDIR=$PWD Tools/scripts/MOVEDlint.awk
....
====