aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/pt-br/articles
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/pt-br/articles')
-rw-r--r--documentation/content/pt-br/articles/_index.adoc3
-rw-r--r--documentation/content/pt-br/articles/bsdl-gpl/_index.adoc21
-rw-r--r--documentation/content/pt-br/articles/building-products/_index.adoc211
-rw-r--r--documentation/content/pt-br/articles/building-products/_index.po1504
-rw-r--r--documentation/content/pt-br/articles/committers-guide/_index.adoc45
-rw-r--r--documentation/content/pt-br/articles/contributing/_index.adoc415
-rw-r--r--documentation/content/pt-br/articles/contributing/_index.po2187
-rw-r--r--documentation/content/pt-br/articles/contributors/_index.adoc209
-rw-r--r--documentation/content/pt-br/articles/contributors/_index.po742
-rw-r--r--documentation/content/pt-br/articles/cups/_index.adoc88
-rw-r--r--documentation/content/pt-br/articles/cups/_index.po703
-rw-r--r--documentation/content/pt-br/articles/explaining-bsd/_index.adoc30
-rw-r--r--documentation/content/pt-br/articles/explaining-bsd/_index.po226
-rw-r--r--documentation/content/pt-br/articles/filtering-bridges/_index.adoc115
-rw-r--r--documentation/content/pt-br/articles/filtering-bridges/_index.po842
-rw-r--r--documentation/content/pt-br/articles/fonts/_index.adoc310
-rw-r--r--documentation/content/pt-br/articles/fonts/_index.po1615
-rw-r--r--documentation/content/pt-br/articles/freebsd-questions/_index.adoc228
-rw-r--r--documentation/content/pt-br/articles/freebsd-questions/_index.po965
-rw-r--r--documentation/content/pt-br/articles/freebsd-releng/_index.adoc28
-rw-r--r--documentation/content/pt-br/articles/freebsd-src-lsp/_index.adoc268
-rw-r--r--documentation/content/pt-br/articles/freebsd-src-lsp/_index.po702
-rw-r--r--documentation/content/pt-br/articles/freebsd-status-report-process/_index.adoc244
-rw-r--r--documentation/content/pt-br/articles/freebsd-status-report-process/_index.po1065
-rw-r--r--documentation/content/pt-br/articles/freebsd-update-server/_index.adoc204
-rw-r--r--documentation/content/pt-br/articles/freebsd-update-server/_index.po1562
-rw-r--r--documentation/content/pt-br/articles/geom-class/_index.adoc208
-rw-r--r--documentation/content/pt-br/articles/geom-class/_index.po1397
-rw-r--r--documentation/content/pt-br/articles/gjournal-desktop/_index.adoc208
-rw-r--r--documentation/content/pt-br/articles/gjournal-desktop/_index.po1348
-rw-r--r--documentation/content/pt-br/articles/hubs/_index.adoc202
-rw-r--r--documentation/content/pt-br/articles/hubs/_index.po1219
-rw-r--r--documentation/content/pt-br/articles/ipsec-must/_index.adoc75
-rw-r--r--documentation/content/pt-br/articles/ipsec-must/_index.po741
-rw-r--r--documentation/content/pt-br/articles/ldap-auth/_index.adoc95
-rw-r--r--documentation/content/pt-br/articles/ldap-auth/_index.po1906
-rw-r--r--documentation/content/pt-br/articles/leap-seconds/_index.adoc34
-rw-r--r--documentation/content/pt-br/articles/leap-seconds/_index.po2
-rw-r--r--documentation/content/pt-br/articles/license-guide/_index.adoc233
-rw-r--r--documentation/content/pt-br/articles/license-guide/_index.po1067
-rw-r--r--documentation/content/pt-br/articles/linux-emulation/_index.adoc433
-rw-r--r--documentation/content/pt-br/articles/linux-emulation/_index.po4509
-rw-r--r--documentation/content/pt-br/articles/linux-users/_index.adoc191
-rw-r--r--documentation/content/pt-br/articles/linux-users/_index.po1007
-rw-r--r--documentation/content/pt-br/articles/mailing-list-faq/_index.adoc90
-rw-r--r--documentation/content/pt-br/articles/mailing-list-faq/_index.po778
-rw-r--r--documentation/content/pt-br/articles/nanobsd/_index.adoc272
-rw-r--r--documentation/content/pt-br/articles/nanobsd/_index.po1567
-rw-r--r--documentation/content/pt-br/articles/new-users/_index.adoc244
-rw-r--r--documentation/content/pt-br/articles/new-users/_index.po1425
-rw-r--r--documentation/content/pt-br/articles/pam/_index.adoc32
-rw-r--r--documentation/content/pt-br/articles/pgpkeys/_index.adoc1396
-rw-r--r--documentation/content/pt-br/articles/pgpkeys/_index.po2824
-rw-r--r--documentation/content/pt-br/articles/port-mentor-guidelines/_index.adoc33
-rw-r--r--documentation/content/pt-br/articles/pr-guidelines/_index.adoc273
-rw-r--r--documentation/content/pt-br/articles/pr-guidelines/_index.po1616
-rw-r--r--documentation/content/pt-br/articles/problem-reports/_index.adoc103
-rw-r--r--documentation/content/pt-br/articles/problem-reports/_index.po1437
-rw-r--r--documentation/content/pt-br/articles/rc-scripting/_index.adoc269
-rw-r--r--documentation/content/pt-br/articles/rc-scripting/_index.po2337
-rw-r--r--documentation/content/pt-br/articles/releng/_index.adoc53
-rw-r--r--documentation/content/pt-br/articles/remote-install/_index.adoc178
-rw-r--r--documentation/content/pt-br/articles/remote-install/_index.po1027
-rw-r--r--documentation/content/pt-br/articles/serial-uart/_index.adoc33
-rw-r--r--documentation/content/pt-br/articles/solid-state/_index.adoc124
-rw-r--r--documentation/content/pt-br/articles/solid-state/_index.po907
-rw-r--r--documentation/content/pt-br/articles/vinum/_index.adoc40
-rw-r--r--documentation/content/pt-br/articles/vm-design/_index.adoc33
68 files changed, 42895 insertions, 3603 deletions
diff --git a/documentation/content/pt-br/articles/_index.adoc b/documentation/content/pt-br/articles/_index.adoc
index a245ae3d26..a5b24bfb4a 100644
--- a/documentation/content/pt-br/articles/_index.adoc
+++ b/documentation/content/pt-br/articles/_index.adoc
@@ -1,5 +1,6 @@
---
-title: Articles
+title: Artigos
+layout: total-list
---
= Articles
diff --git a/documentation/content/pt-br/articles/bsdl-gpl/_index.adoc b/documentation/content/pt-br/articles/bsdl-gpl/_index.adoc
index 36c1d436ab..2adc91c72d 100644
--- a/documentation/content/pt-br/articles/bsdl-gpl/_index.adoc
+++ b/documentation/content/pt-br/articles/bsdl-gpl/_index.adoc
@@ -18,6 +18,27 @@ trademarks: ["freebsd", "intel", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
+:images-path: articles/bsdl-gpl/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
'''
diff --git a/documentation/content/pt-br/articles/building-products/_index.adoc b/documentation/content/pt-br/articles/building-products/_index.adoc
index 41835e5254..6dc023b5e2 100644
--- a/documentation/content/pt-br/articles/building-products/_index.adoc
+++ b/documentation/content/pt-br/articles/building-products/_index.adoc
@@ -1,11 +1,14 @@
---
-title: Construindo Produtos com o FreeBSD
authors:
- - author: Joseph Koshy
+ -
+ author: 'Joseph Koshy'
email: jkoshy@FreeBSD.org
+description: 'Como o FreeBSD pode ajudá-lo a construir um produto melhor'
organizations:
- - organization: The FreeBSD Project
-releaseinfo: "$FreeBSD$"
+ -
+ organization: 'The FreeBSD Project'
+tags: ["FreeBSD", "FreeBSD as base for your product"]
+title: 'Construindo Produtos com o FreeBSD'
trademarks: ["freebsd", "general"]
---
@@ -18,30 +21,30 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/articles/building-products/
+:images-path: articles/building-products/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/articles/building-products/
endif::[]
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/articles/building-products/
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
-Sumário
+Resumo
O projeto FreeBSD é um projeto voluntário e colaborativo de âmbito mundial, o qual desenvolve um sistema operacional de alta qualidade, capaz de ser utilizado em diferentes arquiteturas computacionais. O projeto FreeBSD distribui o código fonte do seu produto sob uma licença liberal, com a intenção de incentivar o uso de seu código. Colaborar com o projeto FreeBSD pode ajudar sua empresa a reduzir o tempo necessário para colocar um produto no mercado, a reduzir seus custos de engenharia e a melhorar qualidade de seus produtos.
@@ -56,7 +59,7 @@ toc::[]
Atualmente o FreeBSD é bem conhecido como um sistema operacional de alto desempenho para servidores. Ele está instalado em milhões de servidores web e em outros hosts conectados diretamente a internet em todo o mundo. O código do FreeBSD também é parte integrante de muitos produtos, que vão desde aparelhos como roteadores de rede, firewalls e dispositivos de armazenamento, até computadores pessoais. Partes do FreeBSD também têm sido utilizadas em softwares comerciais (consulte <<freebsd-intro>>).
-Neste artigo, vamos olhar para o link:https://www.FreeBSD.org/[projeto FreeBSD] como um recurso de engenharia de software --como um conjunto de blocos de construção e de processos os quais você pode utilizar para construir produtos.
+Neste artigo, vamos olhar para o link:https://www.FreeBSD.org/[projeto FreeBSD] como um recurso de engenharia de software, como um conjunto de blocos de construção e de processos, os quais você pode utilizar para construir produtos.
Embora o código fonte do FreeBSD seja distribuído gratuitamente ao público, para desfrutar plenamente dos benefícios do trabalho do projeto, as organizações precisam _colaborar_ com o mesmo. Nas seções subsequentes do presente artigo discutiremos formas eficazes de colaborar com o projeto, bem como os perigos que precisam ser evitados ao fazê-lo.
@@ -67,7 +70,7 @@ Embora o código fonte do FreeBSD seja distribuído gratuitamente ao público, p
Este documento tem como público alvo os seguintes grupos de pessoas:
* Tomadores de decisão em empresas que estejam em busca de meios para melhorar a qualidade de seus produtos, de reduzir o tempo necessário para lançá-los no mercado e de reduzir seus custos de engenharia no longo prazo.
-* Consultores de tecnologia procurando as melhores práticas para alavancar projetos de "código aberto".
+* Consultores de tecnologia procurando melhores práticas em alavancar o código aberto.
* Observadores da indústria interessados em compreender a dinâmica dos projetos de código aberto.
* Desenvolvedores de software que utilizam o FreeBSD e que buscam formas de contribuir com o projeto.
@@ -79,15 +82,15 @@ Após a leitura deste artigo, você deve ter:
* Uma visão geral das tecnologias disponíveis no projeto.
* Uma melhor compreensão do modelo de desenvolvimento adotado pelo Projeto FreeBSD e dos processos de engenharia envolvidos no lançamento de uma nova versão do sistema.
* Consciência dos canais de comunicação utilizados pelo projeto e do nível de transparência que você pode esperar.
-* Consciência das melhores formas de se trabalhar com o projeto--a melhor forma de reduzir os custos de engenharia, de reduzir o tempo necessário para levar seu produto ao mercado, de gerir vulnerabilidades de segurança, e de preservar a compatibilidade futura com o seu produto a medida que o Projeto FreeBSD evolui.
+* Consciência das melhores formas de trabalhar com o projeto - a melhor forma de reduzir os custos de engenharia, de reduzir o tempo necessário para levar seu produto ao mercado, de gerir vulnerabilidades de segurança e preservar a compatibilidade futura com seu produto à medida que o projeto FreeBSD evolui.
=== Estrutura do Artigo
O restante deste artigo está estruturado da seguinte forma:
-* A <<freebsd-intro>> apresenta o projeto FreeBSD, explora sua estrutura organizacional, as principais tecnologias e processos de engenharia envolvidos no lançamento de uma nova versão do sistema.
-* A <<freebsd-collaboration>> descreve formas de colaborar com o Projeto FreeBSD. Esta seção também aborda as armadilhas que são geralmente encontradas por empresas que trabalham com projetos voluntários como o FreeBSD.
-* A <<conclusion>> conclui o artigo.
+* <<freebsd-intro>> introduz o projeto FreeBSD, explora a estrutura organizacional, tecnologias principais e processos de engenharia de releases.
+* <<freebsd-collaboration>> descreve meios de colaboração para com o projeto FreeBSD. Examina armadilhas comuns encontrado por empresas trabalhando com projetos voluntários como o FreeBSD.
+* <<conclusion>> conclui.
[[freebsd-intro]]
== O FreeBSD como um conjunto de blocos de construção
@@ -106,68 +109,68 @@ O <<GoldGab2005>> analisa em maior profundidade os motivos comerciais para se ut
Aqui estão alguns exemplos de como as empresas estão utilizando o FreeBSD:
* Como um provedor (upstream source) de códigos testados para bibliotecas e utilitários.
-+
-Sendo o "downstream" do projeto, as organizações se aproveitam das novas funcionalidades, das correções de bugs e dos testes que o código fonte do projeto FreeBSD recebe.
++
+Por estar "downstream" do projeto, as organizações aproveitam os novos recursos, correções de bugs e testes que o código upstream recebe.
* Como sistema operacional integrado (por exemplo, em um roteador OEM e ou em um dispositivo de firewall). Neste modelo, as empresas utilizam uma versão customizada do kernel e do conjunto de aplicativos do FreeBSD, juntamente com uma camada proprietária de gestão para os seus dispositivos. Os fabricantes de equipamentos originais (OEMs) se beneficiam da adição por parte do FreeBSD de suporte a novos componentes de hardware, bem como se beneficia dos testes que o sistema base recebe.
-+
++
O FreeBSD é distribuído com um ambiente de desenvolvimento auto-hospedado o qual permite a fácil criação de tais configurações.
* Como um ambiente Unix compatível para as funções de gerenciamento em dispositivos de armazenamento high-end e em dispositivos de rede, executando em uma lâmina separada "blade".
-+
++
O FreeBSD fornece ferramentas para a criação de imagens do sistema operacional dedicadas a executar uma função específica. Sua implementação da API unix BSD é madura e testada. O FreeBSD também pode proporcionar um ambiente de desenvolvimento cruzado estável para os outros componentes de dispositivos topo de linha.
-* Como um veículo para obter suporte e testes amplos de uma equipe mundial de desenvolvedores para a sua "propriedade intelectual" não-crítica.
-+
-Neste modelo, as organizações contribuem com frameworks de infra-estrutura úteis ao projeto FreeBSD (por exemplo, veja o man:netgraph[3]). A ampla exposição que o código obtém ajuda na rápida identificação de bugs e de problemas de desempenho. O envolvimento de desenvolvedores de alta qualidade também resulta no desenvolvimento de extensões úteis para a infra-estrutura do sistema, e das quais a empresa que está contribuindo com o projeto também se beneficia.
-* Como um ambiente de desenvolvimento apoiando desenvolvimento cruzado para sistemas operacionais embarcados como http://www.rtems.com/[RTEMS] e o http://ecos.sourceware.org/[eCOS].
-+
-Existem muitos ambientes de desenvolvimento completos na forte coleção de mais de 24,000 aplicativos portados e empacotados para o FreeBSD.
+* Como um meio de obter testes abrangentes e suporte de uma equipe mundial de desenvolvedores para "propriedade intelectual" não crítica.
++
+Neste modelo, as organizações contribuem com estruturas infraestruturais úteis para o projeto FreeBSD (por exemplo, veja man:netgraph[3]). A ampla exposição que o código recebe ajuda a identificar rapidamente problemas de desempenho e bugs. O envolvimento de desenvolvedores de primeira linha também leva a extensões úteis à infraestrutura das quais a organização contribuinte também se beneficia.
+* Como um ambiente de desenvolvimento que suporta desenvolvimento cruzado para sistemas operacionais embarcados, como http://www.rtems.com/[RTEMS] e http://ecos.sourceware.org/[eCOS].
++
+Há muitos ambientes de desenvolvimento completos na coleção de {numports} aplicativos portados e empacotados com o FreeBSD.
* Como forma de suportar uma API estilo Unix em um sistema operacional que de outro modo seria proprietário, aumentando a sua palatabilidade para os desenvolvedores de aplicativos.
-+
-Aqui as partes do kernel do FreeBSD e as aplicações são "portadas" para serem executadas juntamente com outras tarefas no sistema operacional proprietário. A disponibilidade de uma implementação estável e bem testada da API Unix(TM) pode reduzir o esforço necessário para portar aplicações populares para um sistema operacional proprietário. Como o FreeBSD é distribuído acompanhado de uma documentação de alta qualidade sobre a sua estrutura interna, e possui processos eficazes de engenharia para gerenciamento de vulnerabilidades e para lançamento de novas versões, os custos para mantê-lo atualizado são baixos.
++
+Aqui, partes do kernel do FreeBSD e dos programas de aplicação são "portadas" para serem executadas junto com outras tarefas no sistema operacional proprietário. A disponibilidade de uma implementação estável e bem testada da API Unix(TM) pode reduzir o esforço necessário para portar aplicativos populares para o sistema operacional proprietário. Como o FreeBSD é fornecido com documentação de alta qualidade para seus componentes internos e possui processos eficazes de gerenciamento de vulnerabilidades e engenharia de release, os custos para se manter atualizado são mantidos baixos.
[[freebsd-technologies]]
=== Tecnologias
Existe um grande número de tecnologias suportadas pelo projeto FreeBSD. Abaixo você encontra uma lista com alguma delas:
-* Um sistema completo que pode compilar a si mesmo para link:https://www.FreeBSD.org/platforms/[muitas arquiteturas:]
+* Um sistema completo que pode hospedar-se cruzadamente para link:https://www.FreeBSD.org/platforms/[muitas arquiteturas:]
* Um kernel modular capaz de multiprocessamento simétrico, com módulos de kernel carregáveis e um sistema de configuração flexível e fácil de usar.
-* Suporta a emulação de binários do Linux(TM) e do SVR4 com velocidades próximas as que você obtém executando os aplicativos de forma nativa. Suporte para os binários dos drivers de rede do Windows(TM) (DIS).
-* Bibliotecas para muitas tarefas de programação: arquivos, suporte a FTP e HTTP, suporte a threads, além de um ambiente completo de programação POSIX(TM).
-* Funcionalidades avançadas de segurança: Controle de Acesso Obrigatório (man:mac[9]), jails (man:jail[2]), ACLs, e suporte no kernel a dispositivos de criptografia.
+* Suporte para emulação de binários Linux(TM) e SVR4 em velocidades próximas às da máquina. Suporte para drivers de rede binários do Windows(TM) (NDIS).
+* Bibliotecas para muitas tarefas de programação: arquivamento, suporte a FTP e HTTP, suporte a threads, além de um ambiente de programação completo semelhante ao POSIX(TM).
+* Recursos de segurança: Controle de Acesso Obrigatório (man:mac[9]), jails (man:jail[2]), ACLs e suporte a dispositivos criptográficos no kernel.
* Funcionalidades avançadas de rede: firewalls, gerenciamento de QoS, rede TCP/IP de alta performance com suporte a muitos recursos avançados.
-+
-O framework Netgraph (man:netgraph[4]) presente no kernel do FreeBSD, permite que os módulos de rede possam ser conectados entre si de formas flexíveis.
-* Suporte para tecnologias avançadas de armazenamento Fibre Channel, SCSI, RAID por software e hardware, ATA e SATA.
-+
-O FreeBSD suporta um grande numero de sistemas de arquivos, e o seu sistema de arquivos nativo UFS2 suporta soft updates, snapshots e sistemas de arquivos de tamanho muito grandes (até 16 TB por sistema de arquivos) <<McKu1999>>.
-+
-O framework GEOM GEOM (man:geom[4]) presente no kernel do FreeBSD permite que módulos de armazenamento sejam compostos de forma flexível.
-* Mais de 24,000 aplicativos portados, tanto comerciais quanto de código aberto, gerenciados através da coleção de ports do FreeBSD.
++
+O framework Netgraph (man:netgraph[4]) no kernel do FreeBSD permite que módulos de rede do kernel sejam conectados de maneiras flexíveis.
+* Suporte para tecnologias de armazenamento: Fibre Channel, SCSI, RAID de software e hardware, ATA e SATA.
++
+O FreeBSD suporta vários sistemas de arquivos, e seu sistema de arquivos nativo UFS2 suporta "soft updates", snapshots e tamanhos de sistema de arquivos muito grandes (16 TB por sistema de arquivos) <<McKu1999>>.
++
+O framework GEOM (man:geom[4]) no kernel do FreeBSD permite que módulos de armazenamento do kernel sejam compostos de maneiras flexíveis.
+* Mais de {numports} aplicativos portados, tanto comerciais quanto de código aberto, gerenciados por meio da coleção de ports do FreeBSD.
=== Estrutura Organizacional
A estrutura organizacional do FreeBSD não é hierárquica.
-Existem basicamente dois tipos de colaboradores no projeto FreeBSD, os usuários em geral e os desenvolvedores com acesso de escrita (conhecidos como _committers_ no jargão) ao repositório de código fonte.
+Existem basicamente dois tipos de contribuidores para o FreeBSD: usuários gerais do FreeBSD e desenvolvedores com acesso de escrita (conhecidos como _committers_ na gíria) à base de código-fonte.
Existem muitos milhares de colaboradores no primeiro grupo, a grande maioria das contribuições para o FreeBSD vêm de indivíduos desse grupo; A permissão de commit (acesso de escrita) no repositório é concedida a pessoas que contribuem de forma consistente para o projeto. O direito de commit vem acompanhado de responsabilidades adicionais, e para facilitar o aprendizado das mesmas, um mentor é atribuído a todos os novos committers.
.Organização do FreeBSD
image::freebsd-organization.png[]
-A resolução de conflitos é realizada por um "Core Team" de 9 pessoas, o qual é eleito a partir do grupo de committers.
+A resolução de conflitos é realizada por uma equipe central ("Core Team") de nove membros que é eleita a partir do grupo de committers.
-O FreeBSD não tem committers "corporativo". Os committers são obrigados a assumir de forma individual a responsabilidade pelas mudanças que introduzem no código. O link:{committers-guide}[FreeBSD Committer's guide]<<ComGuide>> documenta as regras e responsabilidades que se aplicam aos committers.
+O FreeBSD não tem committers "corporativos". Cada committer individual é responsável pelas alterações que introduz no código. O guia do committer do FreeBSD (extref:{committers-guide}[FreeBSD Committer's guide]) <<ComGuide>> documenta as regras e responsabilidades dos committers.
-O modelo do projeto FreeBSD é examinado em detalhes no <<Nik2005>>.
+O modelo de projeto do FreeBSD é examinado em detalhes em <<Nik2005>>.
=== Processos de Engenharia para liberação de novas versões do FreeBSD
-O processo de engenharia para a liberação de uma nova versão do FreeBSD desempenha um papel importante para assegurar que as suas novas versões sejam de alta qualidade. Em qualquer ponto do tempo, os voluntários do FreeBSD suportam múltiplas versões do código sistema (<<fig-freebsd-branches, Release Branches do FreeBSD>>):
+Os processos de engenharia de release do FreeBSD desempenham um papel importante na garantia de que as versões lançadas sejam de alta qualidade. Em qualquer momento, os voluntários do FreeBSD suportam várias linhas de código (<<fig-freebsd-branches, FreeBSD Release Branches>>):
-* As novas funcionalidades e os códigos disruptivos entram na branch de desenvolvimento, também conhecido como branch _-CURRENT_.
-* A branch _-STABLE_ contém linhas de código que são ramificadas a partir do HEAD em intervalos regulares. Apenas código devidamente testado é permitido na branch -STABLE. Novas funcionalidades são permitidas após terem sido testadas e estabilizadas na branch -CURRENT.
-* A branch _-RELEASE_ é mantido pela equipe de segurança do FreeBSD. Somente correções de bugs críticos são permitidos na branch -RELEASE.
+* Novos recursos e código disruptivo entram na branch de desenvolvimento, também conhecida como branch _-CURRENT_.
+* As branch _-STABLE_ são linhas de código que são ramificadas do HEAD em intervalos regulares. Somente o código testado é permitido em uma branch _-STABLE_. Novos recursos são permitidos apenas depois de terem sido testados e estabilizados na branch _-CURRENT_.
+* As branchs _-RELEASE_ são mantidas pela equipe de segurança do FreeBSD. Somente correções de bugs para problemas críticos são permitidas nas branchs _-RELEASE_.
[[fig-freebsd-branches]]
.Release Branches do FreeBSD
@@ -175,16 +178,16 @@ image::freebsd-branches.png[]
As linhas de código são mantidas vivas enquanto houver interesse dos usuários e dos desenvolvedores nelas.
-As arquiteturas de máquina estão agrupadas em "tiers"; As arquiteturas _Tier 1_ são totalmente suportadas pelas equipes de engenharia de lançamento e de segurança, as arquiteturas _Tier 2_ são suportadas em regime de melhores esforços, e as arquiteturas experimentais compreendem o _Tier 3_. A lista das link:{committers-guide}#archs/[arquiteturas suportadas] é parte da coleção de documentos do FreeBSD.
+As arquiteturas de máquinas são agrupadas em "níveis"; as arquiteturas _Tier 1_ são totalmente suportadas pelas equipes de engenharia de release e segurança do projeto, as arquiteturas _Tier 2_ são suportadas com base no melhor esforço, e as arquiteturas experimentais compõem o _Tier 3_. A lista de extref:{committers-guide}[arquiteturas suportadas, archs] faz parte da coleção de documentação do FreeBSD.
-A equipe de engenharia de lançamentos publica um link:https://www.FreeBSD.org/releng/[road map] para as versões futuras do FreeBSD no web site do projeto. As datas indicadas no road map não são prazos; As novas versões do FreeBSD são liberadas apenas quando o seu código e documentação estão prontos.
+A equipe de engenharia de release publica um link:https://www.FreeBSD.org/releng/[road map] para futuros lançamentos do FreeBSD no site do projeto. As datas estabelecidas no roteiro não são prazos finais; o FreeBSD é lançado quando seu código e documentação estão prontos.
-O processo de engenharia para a liberação de novas versões do FreeBSD é descrito em detalhes no <<RelEngDoc>>.
+Os processos de engenharia de release do FreeBSD são descritos em <<RelEngDoc>>.
[[freebsd-collaboration]]
== Colaborando com o FreeBSD
-Projetos open-source como o FreeBSD oferecem códigos finalizados de altíssima qualidade <<Cov2005>>. Estudos anteriores examinaram o efeito da disponibilidade do código fonte no desenvolvimento de software <<Com2004>>.
+Projetos open-source como o FreeBSD oferecem código final de alta qualidade.
Embora o acesso a um código fonte de qualidade possa reduzir o custo inicial de desenvolvimento, a longo prazo, os custos com o gerenciamento de mudanças começam a dominar. A medida que os ambientes computacionais mudam ao longo dos anos e novas vulnerabilidades de segurança são descobertas, o seu produto também precisará mudar e se adaptar. O uso de código open-source não deve ser encarado como uma atividade pontual, mas sim como um __processo contínuo__. Os melhores projetos para se colaborar são os que estão __vivos__, ou seja, aqueles com uma comunidade ativa, que tenha objetivos claros e que possua um estilo de trabalho transparente.
@@ -194,28 +197,28 @@ Embora o acesso a um código fonte de qualidade possa reduzir o custo inicial de
** Desenvolver um sistema operacional de alta qualidade para o hardware de computadores populares, e,
** Tornar o nosso trabalho disponível para todos sob uma licença liberal.
-* O FreeBSD desfruta de uma cultura aberta e transparente de trabalho. Quase todas as discussões no projeto ocorrem por e-mail, em http://lists.FreeBSD.org/mailman/listinfo[listas publicas de discussão] que também são arquivadas para a posteridade. As políticas do projeto são link:https://www.FreeBSD.org/internal/policies/[documentadas] e mantidas sob controle de revisão. A participação no projeto é aberta a todos.
+* O FreeBSD possui uma cultura de trabalho aberta e transparente. Quase todas as discussões no projeto ocorrem por e-mail, em link:https://lists.freebsd.org/[listas de discussão públicas] que também são arquivadas para a posteridade. As políticas do projeto são link:https://www.FreeBSD.org/internal/policies/[documentadas] e mantidas sob controle de revisão. A participação no projeto está aberta a todos.
[[freebsd-org]]
=== Compreendendo a cultura do FreeBSD
Para ser capaz de trabalhar de forma eficaz com o projeto FreeBSD, você precisa entender a cultura do projeto.
-As regras que regem a operação de um projeto voluntário são diferentes das que regem a operação de uma empresa com fins lucrativos. Um erro comum que as empresas cometem ao se aventurar no mundo open-source é o de desvalorizar essas diferenças.
+As regras que regem a operação de um projeto voluntário são diferentes das que regem a operação de uma empresa com fins lucrativos. Um erro comum que as empresas cometem ao se aventurar no mundo open-source é o de subestimar essas diferenças.
-*Motivação.* A maioria das contribuições feitas para o FreeBSD são feitas voluntariamente, sem que nenhuma recompensa financeira esteja envolvida. Os fatores que motivam as pessoas são complexos, e vão desde o puro altruísmo até o interesse comum em resolver algum tipo de problema que o FreeBSD esteja tentando resolver. Neste tipo de ambiente, a "elegância jamais é opcional"<<Nor1993>>.
+*Motivação.* A maioria das contribuições para o FreeBSD é feita voluntariamente, sem a entrada de recompensas monetárias. Os fatores que motivam os indivíduos são complexos, variando desde o altruísmo até o interesse em resolver os tipos de problemas que o FreeBSD tenta resolver. Nesse ambiente, "a elegância nunca é opcional" <<Nor1993>>.
-*Visão de Longo Prazo.* O FreeBSD tem raízes de quase 20 anos para com o trabalho do Grupo de Pesquisa de Ciências da Computação da Universidade da Califórnia, Berkeley.footnote:[O repositório de códigos do FreeBSD contem a história do projeto desde a sua concepção, e existem CDROMs disponíveis que contém código fonte anterior ao CSRG.] Alguns dos desenvolvedores originais do CSRG permanecem associados com o projeto.
+*A Visão de Longo Prazo.* O FreeBSD remonta quase vinte anos ao trabalho do Computer Science Research Group da Universidade da Califórnia em Berkeley. footnote:[O repositório de código-fonte do FreeBSD contém um histórico do projeto desde o seu início, e há CDs disponíveis que contêm código anterior do CSRG.] Vários dos desenvolvedores originais do CSRG ainda estão associados ao projeto.
-O projeto valoriza perspectivas de longo prazo <<Nor2001>>. Uma sigla encontrada com frequência no projeto DTRT, a qual significa "Faça a Coisa Certa".
+O projeto valoriza perspectivas de longo prazo <<Nor2001>>. Um acrônimo frequente encontrado no projeto é DTRT, que significa "Faça a Coisa Certa".
-*Processo de Desenvolvimento.* Programas de computador são ferramentas de comunicacão: em um nível os programadores comunicam as suas intenções usando uma notação precisa para uma ferramenta (um compilador) que traduz as suas instruções para um código executável. Em outro nível, a mesma notação é usada para a comunicação das intenções entre dois programadores.
+Os programas de computador são ferramentas de comunicação: em um nível, os programadores comunicam suas intenções usando uma notação precisa para uma ferramenta (um compilador) que traduz suas instruções para código executável.
+Em outro nível, a mesma notação é usada para comunicação de intenção entre dois programadores.
-Especificações formais e documentos de design raramente são utilizados no projeto. Código claro e bem escrito, acompanhado de logs bem escritos para as alterações das (<<fig-change-log, Um exemplo de entrada no log de alteração>>) são usados em seu lugar. O desenvolvimento do FreeBSD acontece por "consenso áspero e por código sendo executado"<<Carp1996>>.
+Especificações formais e documentos de design raramente são utilizados no projeto. Em seu lugar, é usado um código claro e bem escrito e registros de alterações bem escritos (<<fig-change-log, Um exemplo de entrada de registro de alterações>>). O desenvolvimento do FreeBSD acontece por meio de "consenso geral e código em execução" (tradução livre de "rough consensus and running code"<<Carp1996>>).
[.programlisting]
....
-
r151864 | bde | 2005-10-29 09:34:50 -0700 (Sat, 29 Oct 2005) | 13 lines
Changed paths:
M /head/lib/msun/src/e_rem_pio2f.c
@@ -233,30 +236,30 @@ double version.
This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and
2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.
....
-.Um exemplo de entrada no log de alteração [[fig-change-log]]
+.Um exemplo de entrada de log de mudanças [[fig-change-log]]
-A comunicação entre os programadores é reforçada pelo uso de um man:style[9] padrão de codificação, comum entre eles.
+Comunicação entre programadores é melhorada pelo uso de um padrão de codificação comum (man:style[9]).
-*Canais de Comunicação.* Os colaboradores do FreeBSD estão espalhados por todo o mundo. O email (e em menor extensão, o IRC) é o meio de comunicação preferido no projeto.
+*Canais de Comunicação.* Os colaboradores do FreeBSD estão espalhados pelo mundo.
+O e-mail (e, em menor medida, o IRC) é o meio de comunicação preferido no projeto.
=== Melhores práticas para colaborar com o projeto FreeBSD
Agora iremos examinar algumas das melhores práticas para se fazer um melhor uso do FreeBSD no desenvolvimento de produtos.
Se planeje para o longo prazo::
-Implante processos que o ajudem a monitorar o desenvolvimento do FreeBSD. Por exemplo:
+Criar processos que auxiliem no acompanhamento do desenvolvimento do FreeBSD. Por exemplo:
+
-*Acompanhe o código fonte do FreeBSD.* O projeto facilita o espelhamento do seu repositório SVN usando link:{committers-guide}#svn-advanced-use-setting-up-svnsync[svnsync]. Ter o histórico completo do código fonte é útil quando se está debugando problemas complexos e oferece informações valiosas sobre as intenções dos desenvolvedores originais. Utilize um sistema de controle de código que lhe permita mesclar facilmente as alterações entre o código original do FreeBSD e o seu próprio código.
+*Acompanhar o código-fonte do FreeBSD.* O projeto facilita a criação de um espelho do seu repositório SVN usando o extref:{committers-guide}[svnsync, svn-advanced-use-setting-up-svnsync]. Ter todo o histórico do código-fonte é útil para depurar problemas complexos e oferece informações valiosas sobre as intenções dos desenvolvedores originais. Use um sistema de controle de código capaz que permita mesclar facilmente as alterações entre o código-base upstream do FreeBSD e o seu próprio código interno.
+
-A <<fig-svn-blame, Código fonte exibindo a listagem de anotações gerada utilizando o `svn blame`>> mostra as anotações em uma parte do arquivo referenciado pelo log de alterações da <<fig-change-log, Um exemplo de entrada no log de alteração>>. A ascendência de cada linha de código é claramente visível. Listagens com as anotações mostrando a história de cada arquivo que faz parte do FreeBSD estão https://svnweb.freebsd.org/[disponíveis na web].
+<<fig-svn-blame, Um arquivo de origem anotado gerado usando `svn blame`>> mostra uma parte de um arquivo de listagem anotado do arquivo referenciado pelo registro de alterações em <<fig-change-log, Um exemplo de registro de alterações>>. A ancestralidade de cada linha do código-fonte é claramente visível. Listagens anotadas mostrando a história de cada arquivo que faz parte do FreeBSD estão disponíveis https://svnweb.freebsd.org/[no website].
+
[.programlisting]
....
-
#REV #WHO #DATE #TEXT
176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) #include <sys/cdefs.h>
-176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID("$FreeBSD: head/pt_BR.ISO8859-1/articles/building-products/article.xml 52185 2018-08-28 03:24:45Z dbaio $");
+176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID("$FreeBSD$");
2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994)
2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) /* __ieee754_rem_pio2f(x,y)
8870 rgrimes 1995-05-29 22:51:47 -0700 (Mon, 29 May 1995) *
@@ -269,66 +272,62 @@ A <<fig-svn-blame, Código fonte exibindo a listagem de anotações gerada utili
176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008)
2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) #include "math.h"
....
-.Código fonte exibindo a listagem de anotações gerada utilizando o `svn blame` [[fig-svn-blame]]
+.Uma listagem de origem anotada gerada usando `svn blame` [[fig-svn-blame]]
+
-*Nomeie um guardião.* Nomeie um _guardião_ para monitorar o desenvolvimento do FreeBSD, para manter-se atento a mudanças que poderiam potencialmente afetar os seus produtos.
+*Use um gatekeeper.* Nomeie um _gatekeeper_ para monitorar o desenvolvimento do FreeBSD, para ficar de olho em mudanças que possam potencialmente impactar seus produtos.
+
-*Comunique os erros que encontrar de volta para o projeto.* Se você encontrar um bug no código do FreeBSD que você está utilizando, envie um https://www.FreeBSD.org/support/bugreports/[bug report]. Este procedimento simples irá ajudar a garantir que você não precisará corrigir o erro novamente da próxima vez que precisar importar novamente do código base do FreeBSD.
+*Relate bugs upstream.* Se você notar algum bug no código do FreeBSD que está usando, envie um https://www.FreeBSD.org/support/bugreports/[relatório de bug]. Esse passo ajuda a garantir que você não precise corrigir o bug na próxima vez que fizer uma atualização de código do upstream.
Se alavanque nos esforços de engenharia do FreeBSD para lançamento de novas versões::
-Utilize código da branch de desenvolvimento -STABLE do FreeBSD. Este branch de desenvolvimento é formalmente suportado pelas equipes de engenharia de lançamento e de segurança, e é formada apenas por código testado.
+Utilize código da branch de desenvolvimento -STABLE do FreeBSD. Este branch de desenvolvimento é formalmente suportado pelas equipes de engenharia de release e de segurança, e é formada apenas por código testado.
Doe código para reduzir seus custos::
Uma parte significativa dos custos relacionados ao desenvolvimento de um produto é o de realizar a sua manutenção. Ao doar partes não criticas do seu código para o projeto, você se beneficia por ter o seu código exposto de uma forma ampla, exposição que ele não teria de outra forma. Esta exposição por sua vez leva eliminação de um maior numero de bugs e de vulnerabilidades de segurança, e permite que anomalias de desempenho sejam identificadas e corrigidas.
Obtenha suporte efetivo::
-Para produtos com prazos apertados, é recomendado que você contrate o suporte ou consultoria de um desenvolvedor ou empresa com experiência em FreeBSD. A http://lists.FreeBSD.org/mailman/listinfo/freebsd-jobs[lista de discussão sobre empregos relacionados ao FreeBSD] é um canal de comunicação muito útil para se encontrar talentos. O projeto FreeBSD mantém uma link:https://www.FreeBSD.org/commercial/consult_bycat/[galeria de consultores e empresas de consultoria] que trabalham com FreeBSD. O http://www.bsdcertification.org/[Grupo de Certificação BSD] oferece certificação para todos os principais sistemas operacionais derivados do BSD.
+Para produtos com prazos apertados, é recomendado contratar ou entrar em um acordo de consultoria com um desenvolvedor ou empresa com experiência em FreeBSD. O {freebsd-jobs} é um canal de comunicação útil para encontrar talentos. O projeto FreeBSD mantém uma link:https://www.FreeBSD.org/commercial/consult_bycat/[galeria de consultores e empresas de consultoria] que realizam trabalhos em FreeBSD. O http://www.bsdcertification.org/[Grupo de Certificação BSD] oferece certificação para todos os principais sistemas operacionais derivados do BSD.
+
-Para as necessidades menos importantes, você pode pedir ajuda nas http://lists.FreeBSD.org/mailman/listinfo[listas de discussão do projeto]. Um guia útil para seguir quando precisar pedir está listado em <<Ray2004>>.
+Para necessidades menos críticas, você pode pedir ajuda nas link:https://lists.freebsd.org/[listas de discussão do projeto]. Um guia útil a seguir ao pedir ajuda é dado em <<Ray2004>>.
Divulgue o seu envolvimento::
Você não é obrigado a divulgar que faz uso do FreeBSD, mas ao fazê-lo você estará ajudando ambos os esforços, o seu e o do projeto.
+
Dar visibilidade para a comunidade FreeBSD de que a sua empresa utiliza o sistema ajuda a melhorar as suas chances de atrair talentos de alta qualidade. Quanto maior for a lista de organizações que apoiam o FreeBSD maior será a presença do sistema na cabeça (mind share) dos desenvolvedores. Ao contribuir para aumentar o numero de desenvolvedores interessados no FreeBSD, você estará gerando uma base saudável para o seu futuro.
Suporte os desenvolvedores do FreeBSD::
-Às vezes, o caminho mais direto para ver uma funcionalidade que você deseja implementada no FreeBSD é suportar um desenvolvedor que já esteja olhando um problema relacionado. A ajuda pode variar de uma doação de hardware até uma assistência financeira direta. Em alguns países, as doações para o projeto FreeBSD usufruem de benefícios fiscais. O projeto possui umlink:https://www.FreeBSD.org/donations/[canal de comunicação dedicado] para assuntos relacionados a doações e para ajudar os doadores. O projeto também mantém uma página web na qual os desenvolvedores podem link:https://www.FreeBSD.org/donations/wantlist/[listar suas necessidades].
+Às vezes, a maneira mais direta de obter um recurso desejado no FreeBSD é apoiar um desenvolvedor que já está trabalhando em um problema relacionado. A ajuda pode variar desde doações de hardware até assistência financeira direta. Em alguns países, as doações ao projeto FreeBSD são isentas de impostos. O projeto possui uma link:https://www.FreeBSD.org/donations/[área de doações] dedicada para ajudar doadores. O projeto também mantém uma página da web onde os desenvolvedores link:https://www.FreeBSD.org/donations/wantlist/[listam suas necessidades].
+
-Por uma política do projeto, o FreeBSD link:{contributors}[reconhece] todas as contribuições recebidas em seu site web.
+Como política, o projeto FreeBSD extref:{contributors}[reconhece] todas as contribuições recebidas em seu site.
[[conclusion]]
== Conclusão
O Objetivo do projeto FreeBSD é criar e distribuir o código fonte de um sistema operacional de alta qualidade. Ao trabalhar com o projeto FreeBSD você pode reduzir os seus custos de desenvolvimento e melhorar o tempo necessário para lançar seus novos produtos no mercado em vários cenários de desenvolvimento de produtos.
-Foram examinadas as características do FreeBSD que o tornam uma excelente opção na estratégia de produto de uma organização. Em seguida, abordamos os aspectos predominantes da cultura do projeto e examinamos formas eficazes de interagir com os seus desenvolvedores. O artigo finaliza com uma lista das melhores práticas que podem ajudar na colaboração da iniciativa privada com o projeto FreeBSD.
+Nós examinamos as características do projeto FreeBSD que o tornam uma excelente escolha para fazer parte da estratégia de produtos de uma organização. Em seguida, examinamos a cultura predominante do projeto e examinamos maneiras eficazes de interagir com seus desenvolvedores. O artigo concluiu com uma lista de melhores práticas que podem ajudar as organizações a colaborar com o projeto.
:sectnums!:
[bibliography]
-== Bibliography
-
-[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[The Architectural Principles of the Internet] B. Carpenter. The Internet Architecture Board.The Internet Architecture Board. Copyright(R)1996.
-
-[[Com2004]] [Com2004] http://csdl.computer.org/comp/mags/so/2004/01/s1028.pdf[How is Open-Source Affecting Software Development?] Diomidis Spinellis. Clemens Szyperski.IEEE Computer Copyright(R)Jan/Feb 2004. IEEE Computer Society.
+== Bibliografia
-[[ComGuide]] [ComGuide] link:{committers-guide}[Committer's Guide]The FreeBSD Project. Copyright(R)2005.
+[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[Os Princípios Arquitetônicos da Internet]. The Internet Architecture Board. Copyright(R) 1996.
-[[Cov2005]] [Cov2005] http://www.coverity.com/news/nf_news_06_27_05_story_9.html[Coverity study on kernel security holes in Linux and FreeBSD]Coverity Inc.. Copyright(R)2005.
+[[ComGuide]] [ComGuide] extref:{committers-guide}[Guia do Comitter] O Projeto FreeBSD. Direitos Autorais(R) 2005.
-[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Innovation Happens Elsewhere: Open Source as Business Strategy] Ron Goldman. Richard Gabriel. Copyright(R)2005. Morgan-Kaufmann.
+[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Inovação Acontece em Outros Lugares: Código Aberto como Estratégia de Negócios] Ron Goldman. Richard Gabriel. Copyright(R) 2005. Morgan-Kaufmann.
-[[Hub1994]] [Hub1994] link:{contributing}[Contributing to the FreeBSD Project] Jordan Hubbard. Copyright(R)1994—2005. The FreeBSD Project.
+[[Hub1994]] [Hub1994] extref:{contributing}[Contribuindo para o Projeto FreeBSD] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project.
-[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/proceedings/usenix99/mckusick.html[Soft Updates: A Technique for Eliminating Most Synchronous Writes in the Fast Filesystem] Kirk McKusick. Gregory Ganger. Copyright(R)1999.
+[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/proceedings/usenix99/mckusick.html[Soft Updates: Uma técnica para eliminar a maioria das gravações síncronas no sistema de arquivos rápido] Kirk McKusick. Gregory Ganger. Copyright(R) 1999.
-[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/kirkmck.html[Twenty Years of Berkeley Unix: From AT&T-Owned to Freely Redistributable] Marshall Kirk McKusick. http://www.oreilly.com/catalog/opensources/book/toc.html[Open Sources: Voices from the Open Source Revolution] O'Reilly Inc.. Copyright(R)1993.
+[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/kirkmck.html[Vinte anos de Unix Berkeley: de propriedade da AT&T à redistribuição livre] Marshall Kirk McKusick. http://www.oreilly.com/catalog/opensources/book/toc.html[Open Sources: Vozes da Revolução Open Source] O'Reilly Inc.. Copyright(R) 1993.
-[[Mon2005]] [Mon2005] link:{bsdl-gpl}[Why you should use a BSD style license for your Open Source Project] Bruce Montague. The FreeBSD Project. Copyright(R)2005.
+[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Por que você deveria usar uma licença de estilo BSD para o seu projeto de código aberto.] Bruce Montague. The FreeBSD Project. Copyright(R) 2005.
-[[Nik2005]] [Nik2005] link:{dev-model}[A project model for the FreeBSD Project] Niklas Saers. Copyright(R)2005. The FreeBSD Project.
+[[Nik2005]] [Nik2005] extref:{dev-model}[Um modelo de projeto para o Projeto FreeBSD] Niklas Saers. Copyright(R) 2005. The FreeBSD Project.
-[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial on Good Lisp Programming Style] Peter Norvig. Kent Pitman. Copyright(R)1993.
+[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial sobre Bom Estilo de Programação em Lisp.] Peter Norvig. Kent Pitman. Copyright(R) 1993.
-[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Teach Yourself Programming in Ten Years] Peter Norvig. Copyright(R)2001.
+[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Ensine a si mesmo a programar em dez anos.] Peter Norvig. Copyright(R) 2001.
-[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html[How to ask questions the smart way] Eric Steven Raymond. Copyright(R)2004.
+[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html[Como fazer perguntas de forma inteligente] Eric Steven Raymond. Copyright(R) 2004.
-[[RelEngDoc]] [RelEngDoc] link:{releng}[FreeBSD Release Engineering] Murray Stokely. Copyright(R)2001. The FreeBSD Project.
+[[RelEngDoc]] [RelEngDoc] extref:{releng}[Engenharia de Releases do FreeBSD] Murray Stokely. Copyright(R) 2001. The FreeBSD Project.
diff --git a/documentation/content/pt-br/articles/building-products/_index.po b/documentation/content/pt-br/articles/building-products/_index.po
new file mode 100644
index 0000000000..848e99d34f
--- /dev/null
+++ b/documentation/content/pt-br/articles/building-products/_index.po
@@ -0,0 +1,1504 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2023.
+# Mateus Souza da Silva <mma.teuzzz@gmail.com>, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-29 16:40+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesbuilding-products_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/building-products/_index.adoc:1
+#, no-wrap
+msgid "How FreeBSD can help you build a better product"
+msgstr "Como o FreeBSD pode ajudá-lo a construir um produto melhor"
+
+#. type: Title =
+#: documentation/content/en/articles/building-products/_index.adoc:1
+#: documentation/content/en/articles/building-products/_index.adoc:13
+#, no-wrap
+msgid "Building Products with FreeBSD"
+msgstr "Construindo Produtos com o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:46
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:50
+msgid ""
+"The FreeBSD project is a worldwide, volunteer based, and collaborative "
+"project, which develops a portable and high-quality operating system. The "
+"FreeBSD project distributes the source code for its product under a liberal "
+"license, with the intention of encouraging the use of its code. "
+"Collaborating with the FreeBSD project can help organizations reduce their "
+"time to market, reduce engineering costs and improve their product quality."
+msgstr ""
+"O projeto FreeBSD é um projeto voluntário e colaborativo de âmbito mundial, "
+"o qual desenvolve um sistema operacional de alta qualidade, capaz de ser "
+"utilizado em diferentes arquiteturas computacionais. O projeto FreeBSD "
+"distribui o código fonte do seu produto sob uma licença liberal, com a "
+"intenção de incentivar o uso de seu código. Colaborar com o projeto FreeBSD "
+"pode ajudar sua empresa a reduzir o tempo necessário para colocar um produto "
+"no mercado, a reduzir seus custos de engenharia e a melhorar qualidade de "
+"seus produtos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:54
+msgid ""
+"This article examines the issues in using FreeBSD code in appliances and "
+"software products. It highlights the characteristics of FreeBSD that make "
+"it an excellent substrate for product development. The article concludes by "
+"suggesting a few \"best practices\" for organizations collaborating with the "
+"FreeBSD project."
+msgstr ""
+"Este artigo analisa as questões envolvidas no uso do código do FreeBSD em "
+"appliances e softwares. Ele também destaca as características do FreeBSD, "
+"que o tornam uma excelente base para o desenvolvimento de produtos. O artigo "
+"conclui sugerindo um conjunto das \"melhores práticas\" de organizações que "
+"colaboram com o projeto FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:56
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:60
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:66
+msgid ""
+"FreeBSD today is well-known as a high-performance server operating system. "
+"It is deployed on millions of web servers and internet-facing hosts "
+"worldwide. FreeBSD code also forms an integral part of many products, "
+"ranging from appliances such as network routers, firewalls, and storage "
+"devices, to personal computers. Portions of FreeBSD have also been used in "
+"commercial shrink-wrapped software (see <<freebsd-intro>>)."
+msgstr ""
+"Atualmente o FreeBSD é bem conhecido como um sistema operacional de alto "
+"desempenho para servidores. Ele está instalado em milhões de servidores web "
+"e em outros hosts conectados diretamente a internet em todo o mundo. O "
+"código do FreeBSD também é parte integrante de muitos produtos, que vão "
+"desde aparelhos como roteadores de rede, firewalls e dispositivos de "
+"armazenamento, até computadores pessoais. Partes do FreeBSD também têm sido "
+"utilizadas em softwares comerciais (consulte <<freebsd-intro>>)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:68
+msgid ""
+"In this article we look at the link:https://www.FreeBSD.org/[FreeBSD "
+"project] as a software engineering resource-as a collection of building "
+"blocks and processes which you can use to build products."
+msgstr ""
+"Neste artigo, vamos olhar para o link:https://www.FreeBSD.org/[projeto "
+"FreeBSD] como um recurso de engenharia de software, como um conjunto de "
+"blocos de construção e de processos, os quais você pode utilizar para "
+"construir produtos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:71
+msgid ""
+"While FreeBSD's source is distributed freely to the public, to fully enjoy "
+"the benefits of the project's work, organizations need to _collaborate_ with "
+"the project. In subsequent sections of this article we discuss effective "
+"means of collaboration with the project and the pitfalls that need to be "
+"avoided while doing so."
+msgstr ""
+"Embora o código fonte do FreeBSD seja distribuído gratuitamente ao público, "
+"para desfrutar plenamente dos benefícios do trabalho do projeto, as "
+"organizações precisam _colaborar_ com o mesmo. Nas seções subsequentes do "
+"presente artigo discutiremos formas eficazes de colaborar com o projeto, bem "
+"como os perigos que precisam ser evitados ao fazê-lo."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:74
+#, no-wrap
+msgid ""
+"*Caveat Reader.* The author believes that the characteristics of the FreeBSD Project listed in this article were substantially true at the time the article was conceived and written (2005).\n"
+"However, the reader should keep in mind that the practices and processes used by open-source communities can change over time, and that the information in this article should therefore be taken as indicative rather than normative.\n"
+msgstr "*Aviso ao Leitor.* O autor considera que as características do projeto FreeBSD mencionadas neste artigo eram substancialmente verdadeiras no momento em que o artigo foi concebido e escrito (2005). No entanto, o leitor deve ter em mente que as práticas e processos utilizados por comunidades de código aberto podem mudar ao longo do tempo, e que portanto as informações deste artigo devem ser consideradas apenas como indicativas e não como verdades absolutas.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:75
+#, no-wrap
+msgid "Target Audience"
+msgstr "Público Alvo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:78
+msgid ""
+"This document would be of interest to the following broad groups of people:"
+msgstr "Este documento tem como público alvo os seguintes grupos de pessoas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:80
+msgid ""
+"Decision makers in product companies looking at ways to improve their "
+"product quality, reduce their time to market and lower engineering costs in "
+"the long term."
+msgstr ""
+"Tomadores de decisão em empresas que estejam em busca de meios para melhorar "
+"a qualidade de seus produtos, de reduzir o tempo necessário para lançá-los "
+"no mercado e de reduzir seus custos de engenharia no longo prazo."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:81
+msgid ""
+"Technology consultants looking for best-practices in leveraging \"open-source"
+"\"."
+msgstr ""
+"Consultores de tecnologia procurando melhores práticas em alavancar o código "
+"aberto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:82
+msgid ""
+"Industry observers interested in understanding the dynamics of open-source "
+"projects."
+msgstr ""
+"Observadores da indústria interessados em compreender a dinâmica dos "
+"projetos de código aberto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:83
+msgid ""
+"Software developers seeking to use FreeBSD and looking for ways to "
+"contribute back."
+msgstr ""
+"Desenvolvedores de software que utilizam o FreeBSD e que buscam formas de "
+"contribuir com o projeto."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:84
+#, no-wrap
+msgid "Article Goals"
+msgstr "Objetivos do artigo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:87
+msgid "After reading this article you should have:"
+msgstr "Após a leitura deste artigo, você deve ter:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:89
+msgid ""
+"An understanding of the goals of the FreeBSD Project and its organizational "
+"structure."
+msgstr ""
+"Uma melhor compreensão dos objetivos do Projeto FreeBSD e de sua estrutura "
+"organizacional."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:90
+msgid ""
+"An understanding of its development model and release engineering processes."
+msgstr "Uma visão geral das tecnologias disponíveis no projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:91
+msgid ""
+"An understanding of how conventional corporate software development "
+"processes differ from that used in the FreeBSD project."
+msgstr ""
+"Uma melhor compreensão do modelo de desenvolvimento adotado pelo Projeto "
+"FreeBSD e dos processos de engenharia envolvidos no lançamento de uma nova "
+"versão do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:92
+msgid ""
+"Awareness of the communication channels used by the project and the level of "
+"transparency you can expect."
+msgstr ""
+"Consciência dos canais de comunicação utilizados pelo projeto e do nível de "
+"transparência que você pode esperar."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:93
+msgid ""
+"Awareness of optimal ways of working with the project-how best to reduce "
+"engineering costs, improve time to market, manage security vulnerabilities, "
+"and preserve future compatibility with your product as the FreeBSD project "
+"evolves."
+msgstr ""
+"Consciência das melhores formas de trabalhar com o projeto - a melhor forma "
+"de reduzir os custos de engenharia, de reduzir o tempo necessário para levar "
+"seu produto ao mercado, de gerir vulnerabilidades de segurança e preservar a "
+"compatibilidade futura com seu produto à medida que o projeto FreeBSD evolui."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:94
+#, no-wrap
+msgid "Article Structure"
+msgstr "Estrutura do Artigo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:97
+msgid "The rest of the article is structured as follows:"
+msgstr "O restante deste artigo está estruturado da seguinte forma:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:99
+msgid ""
+"<<freebsd-intro>> introduces the FreeBSD project, explores its "
+"organizational structure, key technologies and release engineering processes."
+msgstr ""
+"<<freebsd-intro>> introduz o projeto FreeBSD, explora a estrutura "
+"organizacional, tecnologias principais e processos de engenharia de releases."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:100
+msgid ""
+"<<freebsd-collaboration>> describes ways to collaborate with the FreeBSD "
+"project. It examines common pitfalls encountered by corporates working with "
+"voluntary projects like FreeBSD."
+msgstr ""
+"<<freebsd-collaboration>> descreve meios de colaboração para com o projeto "
+"FreeBSD. Examina armadilhas comuns encontrado por empresas trabalhando com "
+"projetos voluntários como o FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:101
+msgid "<<conclusion>> concludes."
+msgstr "<<conclusion>> conclui."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:103
+#, no-wrap
+msgid "FreeBSD as a set of building blocks"
+msgstr "O FreeBSD como um conjunto de blocos de construção"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:106
+msgid "FreeBSD makes an excellent foundation on which to build products:"
+msgstr ""
+"O FreeBSD fornece uma excelente base sobre a qual podemos construir produtos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:108
+msgid ""
+"FreeBSD source code is distributed under a liberal BSD license facilitating "
+"its adoption in commercial products <<Mon2005>> with minimum hassle."
+msgstr ""
+"O código fonte do FreeBSD é distribuído sob uma licença BSD liberal, o que "
+"facilita sua adoção em produtos comerciais <<Mon2005>> com um mínimo de "
+"preocupações."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:109
+msgid ""
+"The FreeBSD project has excellent engineering practices that can be "
+"leveraged."
+msgstr ""
+"O Projeto FreeBSD possui excelentes práticas de engenharia as quais podem "
+"ser aproveitadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:110
+msgid ""
+"The project offers exceptional transparency into its workings, allowing "
+"organizations using its code to plan effectively for the future."
+msgstr ""
+"O projeto oferece uma transparência excepcional em seu funcionamento, "
+"permitindo que as empresas que utilizam o seu código se planejem de forma "
+"eficaz para o futuro."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:111
+msgid ""
+"The culture of the FreeBSD project, carried over from the Computer Science "
+"Research Group at The University of California, Berkeley <<McKu1999-1>>, "
+"fosters high-quality work. Some features in FreeBSD define the state of the "
+"art."
+msgstr ""
+"A cultura do projeto FreeBSD, herdada do Grupo de Pesquisa de Ciências da "
+"Computação da Universidade da Califórnia em Berkeley <<McKu1999-1>>, fomenta "
+"trabalhos de alta qualidade. Algumas funcionalidades do FreeBSD definem o "
+"estado da arte."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:114
+msgid ""
+"<<GoldGab2005>> examines the business reasons for using open-source in "
+"greater detail. For organizations, the benefits of using FreeBSD components "
+"in their products include a shorter time to market, lower development costs "
+"and lower development risks."
+msgstr ""
+"O <<GoldGab2005>> analisa em maior profundidade os motivos comerciais para "
+"se utilizar código fonte aberto. Para as organizações, os benefícios do uso "
+"de componentes do FreeBSD em seus produtos incluem a redução do tempo "
+"necessário para lançar novos produtos no mercado, menores custos e menores "
+"riscos de desenvolvimento."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:115
+#, no-wrap
+msgid "Building with FreeBSD"
+msgstr "Construindo com o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:118
+msgid "Here are a few ways organizations have used FreeBSD:"
+msgstr ""
+"Aqui estão alguns exemplos de como as empresas estão utilizando o FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:120
+msgid "As an upstream source for tested code for libraries and utilities."
+msgstr ""
+"Como um provedor (upstream source) de códigos testados para bibliotecas e "
+"utilitários."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:122
+msgid ""
+"By being \"downstream\" of the project, organizations leverage the new "
+"features, bug fixes and testing that the upstream code receives."
+msgstr ""
+"Por estar \"downstream\" do projeto, as organizações aproveitam os novos "
+"recursos, correções de bugs e testes que o código upstream recebe."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:123
+msgid ""
+"As an embedded OS (for example, for an OEM router and firewall device). In "
+"this model, organizations use a customized FreeBSD kernel and application "
+"program set along with a proprietary management layer for their device. OEMs "
+"benefit from new hardware support being added by the FreeBSD project "
+"upstream, and from the testing that the base system receives."
+msgstr ""
+"Como sistema operacional integrado (por exemplo, em um roteador OEM e ou em "
+"um dispositivo de firewall). Neste modelo, as empresas utilizam uma versão "
+"customizada do kernel e do conjunto de aplicativos do FreeBSD, juntamente "
+"com uma camada proprietária de gestão para os seus dispositivos. Os "
+"fabricantes de equipamentos originais (OEMs) se beneficiam da adição por "
+"parte do FreeBSD de suporte a novos componentes de hardware, bem como se "
+"beneficia dos testes que o sistema base recebe."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:125
+msgid ""
+"FreeBSD ships with a self-hosting development environment that allows easy "
+"creation of such configurations."
+msgstr ""
+"O FreeBSD é distribuído com um ambiente de desenvolvimento auto-hospedado o "
+"qual permite a fácil criação de tais configurações."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:126
+msgid ""
+"As a Unix compatible environment for the management functions of high-end "
+"storage and networking devices, running on a separate processor \"blade\"."
+msgstr ""
+"Como um ambiente Unix compatível para as funções de gerenciamento em "
+"dispositivos de armazenamento high-end e em dispositivos de rede, executando "
+"em uma lâmina separada \"blade\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:130
+msgid ""
+"FreeBSD provides the tools for creating dedicated OS and application program "
+"images. Its implementation of a BSD unix API is mature and tested. FreeBSD "
+"can also provide a stable cross-development environment for the other "
+"components of the high-end device."
+msgstr ""
+"O FreeBSD fornece ferramentas para a criação de imagens do sistema "
+"operacional dedicadas a executar uma função específica. Sua implementação da "
+"API unix BSD é madura e testada. O FreeBSD também pode proporcionar um "
+"ambiente de desenvolvimento cruzado estável para os outros componentes de "
+"dispositivos topo de linha."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:131
+msgid ""
+"As a vehicle to get widespread testing and support from a worldwide team of "
+"developers for non-critical \"intellectual property\"."
+msgstr ""
+"Como um meio de obter testes abrangentes e suporte de uma equipe mundial de "
+"desenvolvedores para \"propriedade intelectual\" não crítica."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:135
+msgid ""
+"In this model, organizations contribute useful infrastructural frameworks to "
+"the FreeBSD project (for example, see man:netgraph[3]). The widespread "
+"exposure that the code gets helps to quickly identify performance issues and "
+"bugs. The involvement of top-notch developers also leads to useful "
+"extensions to the infrastructure that the contributing organization also "
+"benefits from."
+msgstr ""
+"Neste modelo, as organizações contribuem com estruturas infraestruturais "
+"úteis para o projeto FreeBSD (por exemplo, veja man:netgraph[3]). A ampla "
+"exposição que o código recebe ajuda a identificar rapidamente problemas de "
+"desempenho e bugs. O envolvimento de desenvolvedores de primeira linha "
+"também leva a extensões úteis à infraestrutura das quais a organização "
+"contribuinte também se beneficia."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:136
+msgid ""
+"As a development environment supporting cross-development for embedded OSes "
+"like http://www.rtems.com/[RTEMS] and http://ecos.sourceware.org/[eCOS]."
+msgstr ""
+"Como um ambiente de desenvolvimento que suporta desenvolvimento cruzado para "
+"sistemas operacionais embarcados, como http://www.rtems.com/[RTEMS] e "
+"http://ecos.sourceware.org/[eCOS]."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:138
+msgid ""
+"There are many full-fledged development environments in the {numports}-"
+"strong collection of applications ported and packaged with FreeBSD."
+msgstr ""
+"Há muitos ambientes de desenvolvimento completos na coleção de {numports} "
+"aplicativos portados e empacotados com o FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:139
+msgid ""
+"As a way to support a Unix-like API in an otherwise proprietary OS, "
+"increasing its palatability for application developers."
+msgstr ""
+"Como forma de suportar uma API estilo Unix em um sistema operacional que de "
+"outro modo seria proprietário, aumentando a sua palatabilidade para os "
+"desenvolvedores de aplicativos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:143
+msgid ""
+"Here parts of FreeBSD's kernel and application programs are \"ported\" to "
+"run alongside other tasks in the proprietary OS. The availability of a "
+"stable and well tested Unix(TM) API implementation can reduce the effort "
+"needed to port popular applications to the proprietary OS. As FreeBSD ships "
+"with high-quality documentation for its internals and has effective "
+"vulnerability management and release engineering processes, the costs of "
+"keeping up-to-date are kept low."
+msgstr ""
+"Aqui, partes do kernel do FreeBSD e dos programas de aplicação são \"portadas"
+"\" para serem executadas junto com outras tarefas no sistema operacional "
+"proprietário. A disponibilidade de uma implementação estável e bem testada "
+"da API Unix(TM) pode reduzir o esforço necessário para portar aplicativos "
+"populares para o sistema operacional proprietário. Como o FreeBSD é "
+"fornecido com documentação de alta qualidade para seus componentes internos "
+"e possui processos eficazes de gerenciamento de vulnerabilidades e "
+"engenharia de release, os custos para se manter atualizado são mantidos "
+"baixos."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:145
+#, no-wrap
+msgid "Technologies"
+msgstr "Tecnologias"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:149
+msgid ""
+"There are a large number of technologies supported by the FreeBSD project. "
+"A selection of these are listed below:"
+msgstr ""
+"Existe um grande número de tecnologias suportadas pelo projeto FreeBSD. "
+"Abaixo você encontra uma lista com alguma delas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:151
+msgid ""
+"A complete system that can cross-host itself for link:https://www.FreeBSD."
+"org/platforms/[many architectures:]"
+msgstr ""
+"Um sistema completo que pode hospedar-se cruzadamente para link:https://www."
+"FreeBSD.org/platforms/[muitas arquiteturas:]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:152
+msgid ""
+"A modular symmetric multiprocessing capable kernel, with loadable kernel "
+"modules and a flexible and easy to use configuration system."
+msgstr ""
+"Um kernel modular capaz de multiprocessamento simétrico, com módulos de "
+"kernel carregáveis e um sistema de configuração flexível e fácil de usar."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:153
+msgid ""
+"Support for emulation of Linux(TM) and SVR4 binaries at near machine speeds. "
+"Support for binary Windows(TM) (NDIS) network drivers."
+msgstr ""
+"Suporte para emulação de binários Linux(TM) e SVR4 em velocidades próximas "
+"às da máquina. Suporte para drivers de rede binários do Windows(TM) (NDIS)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:154
+msgid ""
+"Libraries for many programming tasks: archivers, FTP and HTTP support, "
+"thread support, in addition to a full POSIX(TM) like programming environment."
+msgstr ""
+"Bibliotecas para muitas tarefas de programação: arquivamento, suporte a FTP "
+"e HTTP, suporte a threads, além de um ambiente de programação completo "
+"semelhante ao POSIX(TM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:155
+msgid ""
+"Security features: Mandatory Access Control (man:mac[9]), jails (man:"
+"jail[2]), ACLs, and in-kernel cryptographic device support."
+msgstr ""
+"Recursos de segurança: Controle de Acesso Obrigatório (man:mac[9]), jails "
+"(man:jail[2]), ACLs e suporte a dispositivos criptográficos no kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:156
+msgid ""
+"Networking features: firewall-ing, QoS management, high-performance TCP/IP "
+"networking with support for many extensions."
+msgstr ""
+"Funcionalidades avançadas de rede: firewalls, gerenciamento de QoS, rede TCP/"
+"IP de alta performance com suporte a muitos recursos avançados."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:158
+msgid ""
+"FreeBSD's in-kernel Netgraph (man:netgraph[4]) framework allows kernel "
+"networking modules to be connected together in flexible ways."
+msgstr ""
+"O framework Netgraph (man:netgraph[4]) no kernel do FreeBSD permite que "
+"módulos de rede do kernel sejam conectados de maneiras flexíveis."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:159
+msgid ""
+"Support for storage technologies: Fibre Channel, SCSI, software and hardware "
+"RAID, ATA and SATA."
+msgstr ""
+"Suporte para tecnologias de armazenamento: Fibre Channel, SCSI, RAID de "
+"software e hardware, ATA e SATA."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:161
+msgid ""
+"FreeBSD supports a number of filesystems, and its native UFS2 filesystem "
+"supports soft updates, snapshots and very large filesystem sizes (16TB per "
+"filesystem) <<McKu1999>>."
+msgstr ""
+"O FreeBSD suporta vários sistemas de arquivos, e seu sistema de arquivos "
+"nativo UFS2 suporta \"soft updates\", snapshots e tamanhos de sistema de "
+"arquivos muito grandes (16 TB por sistema de arquivos) <<McKu1999>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:163
+msgid ""
+"FreeBSD's in-kernel GEOM (man:geom[4]) framework allows kernel storage "
+"modules to be composed in flexible ways."
+msgstr ""
+"O framework GEOM (man:geom[4]) no kernel do FreeBSD permite que módulos de "
+"armazenamento do kernel sejam compostos de maneiras flexíveis."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:164
+msgid ""
+"Over {numports} ported applications, both commercial and open-source, "
+"managed via the FreeBSD ports collection."
+msgstr ""
+"Mais de {numports} aplicativos portados, tanto comerciais quanto de código "
+"aberto, gerenciados por meio da coleção de ports do FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:165
+#, no-wrap
+msgid "Organizational Structure"
+msgstr "Estrutura Organizacional"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:168
+msgid "FreeBSD's organizational structure is non-hierarchical."
+msgstr "A estrutura organizacional do FreeBSD não é hierárquica."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:170
+msgid ""
+"There are essentially two kinds of contributors to FreeBSD, general users of "
+"FreeBSD, and developers with write access (known as _committers_ in the "
+"jargon) to the source base."
+msgstr ""
+"Existem basicamente dois tipos de contribuidores para o FreeBSD: usuários "
+"gerais do FreeBSD e desenvolvedores com acesso de escrita (conhecidos como "
+"_committers_ na gíria) à base de código-fonte."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:174
+msgid ""
+"There are many thousands of contributors in the first group; the vast "
+"majority of contributions to FreeBSD come from individuals in this group. "
+"Commit rights (write access) to the repository are granted to individuals "
+"who contribute consistently to the project. Commit rights come with "
+"additional responsibilities, and new committers are assigned mentors to help "
+"them learn the ropes."
+msgstr ""
+"Existem muitos milhares de colaboradores no primeiro grupo, a grande maioria "
+"das contribuições para o FreeBSD vêm de indivíduos desse grupo; A permissão "
+"de commit (acesso de escrita) no repositório é concedida a pessoas que "
+"contribuem de forma consistente para o projeto. O direito de commit vem "
+"acompanhado de responsabilidades adicionais, e para facilitar o aprendizado "
+"das mesmas, um mentor é atribuído a todos os novos committers."
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:175
+#, no-wrap
+msgid "FreeBSD Organization"
+msgstr "Organização do FreeBSD"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/building-products/_index.adoc:176
+#, no-wrap
+msgid "freebsd-organization.png"
+msgstr "freebsd-organization.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:179
+msgid ""
+"Conflict resolution is performed by a nine member \"Core Team\" that is "
+"elected from the group of committers."
+msgstr ""
+"A resolução de conflitos é realizada por uma equipe central (\"Core Team\") "
+"de nove membros que é eleita a partir do grupo de committers."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:183
+msgid ""
+"FreeBSD does not have \"corporate\" committers. Individual committers are "
+"required to take responsibility for the changes they introduce to the code. "
+"The extref:{committers-guide}[FreeBSD Committer's guide] <<ComGuide>> "
+"documents the rules and responsibilities for committers."
+msgstr ""
+"O FreeBSD não tem committers \"corporativos\". Cada committer individual é "
+"responsável pelas alterações que introduz no código. O guia do committer do "
+"FreeBSD (extref:{committers-guide}[FreeBSD Committer's guide]) <<ComGuide>> "
+"documenta as regras e responsabilidades dos committers."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:185
+msgid "FreeBSD's project model is examined in detail in <<Nik2005>>."
+msgstr "O modelo de projeto do FreeBSD é examinado em detalhes em <<Nik2005>>."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:186
+#, no-wrap
+msgid "FreeBSD Release Engineering Processes"
+msgstr "Processos de Engenharia para liberação de novas versões do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:190
+msgid ""
+"FreeBSD's release engineering processes play a major role in ensuring that "
+"its released versions are of a high quality. At any point of time, "
+"FreeBSD's volunteers support multiple code lines (<<fig-freebsd-branches, "
+"FreeBSD Release Branches>>):"
+msgstr ""
+"Os processos de engenharia de release do FreeBSD desempenham um papel "
+"importante na garantia de que as versões lançadas sejam de alta qualidade. "
+"Em qualquer momento, os voluntários do FreeBSD suportam várias linhas de "
+"código (<<fig-freebsd-branches, FreeBSD Release Branches>>):"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:192
+msgid ""
+"New features and disruptive code enters on the development branch, also "
+"known as the _-CURRENT_ branch."
+msgstr ""
+"Novos recursos e código disruptivo entram na branch de desenvolvimento, "
+"também conhecida como branch _-CURRENT_."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:193
+msgid ""
+"_-STABLE_ branches are code lines that are branched from HEAD at regular "
+"intervals. Only tested code is allowed onto a -STABLE branch. New features "
+"are allowed once they have been tested and stabilized in the -CURRENT branch."
+msgstr ""
+"As branch _-STABLE_ são linhas de código que são ramificadas do HEAD em "
+"intervalos regulares. Somente o código testado é permitido em uma branch _-"
+"STABLE_. Novos recursos são permitidos apenas depois de terem sido testados "
+"e estabilizados na branch _-CURRENT_."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:194
+msgid ""
+"_-RELEASE_ branches are maintained by the FreeBSD security team. Only bug "
+"fixes for critical issues are permitted onto -RELEASE branches."
+msgstr ""
+"As branchs _-RELEASE_ são mantidas pela equipe de segurança do FreeBSD. "
+"Somente correções de bugs para problemas críticos são permitidas nas branchs "
+"_-RELEASE_."
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:196
+#, no-wrap
+msgid "FreeBSD Release Branches"
+msgstr "Release Branches do FreeBSD"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/building-products/_index.adoc:197
+#, no-wrap
+msgid "freebsd-branches.png"
+msgstr "freebsd-branches.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:200
+msgid ""
+"Code lines are kept alive for as long as there is user and developer "
+"interest in them."
+msgstr ""
+"As linhas de código são mantidas vivas enquanto houver interesse dos "
+"usuários e dos desenvolvedores nelas."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:203
+msgid ""
+"Machine architectures are grouped into \"tiers\"; _Tier 1_ architectures are "
+"fully supported by the project's release engineering and security teams, "
+"_Tier 2_ architectures are supported on a best effort basis, and "
+"experimental architectures comprise _Tier 3_. The list of extref:"
+"{committers-guide}[supported architectures, archs] is part of the FreeBSD "
+"documentation collection."
+msgstr ""
+"As arquiteturas de máquinas são agrupadas em \"níveis\"; as arquiteturas "
+"_Tier 1_ são totalmente suportadas pelas equipes de engenharia de release e "
+"segurança do projeto, as arquiteturas _Tier 2_ são suportadas com base no "
+"melhor esforço, e as arquiteturas experimentais compõem o _Tier 3_. A lista "
+"de extref:{committers-guide}[arquiteturas suportadas, archs] faz parte da "
+"coleção de documentação do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:206
+msgid ""
+"The release engineering team publishes a link:https://www.FreeBSD.org/releng/"
+"[road map] for future releases of FreeBSD on the project's web site. The "
+"dates laid down in the road map are not deadlines; FreeBSD is released when "
+"its code and documentation are ready."
+msgstr ""
+"A equipe de engenharia de release publica um link:https://www.FreeBSD.org/"
+"releng/[road map] para futuros lançamentos do FreeBSD no site do projeto. As "
+"datas estabelecidas no roteiro não são prazos finais; o FreeBSD é lançado "
+"quando seu código e documentação estão prontos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:208
+msgid "FreeBSD's release engineering processes are described in <<RelEngDoc>>."
+msgstr ""
+"Os processos de engenharia de release do FreeBSD são descritos em "
+"<<RelEngDoc>>."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:210
+#, no-wrap
+msgid "Collaborating with FreeBSD"
+msgstr "Colaborando com o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:213
+msgid ""
+"Open-source projects like FreeBSD offer finished code of a very high quality."
+msgstr ""
+"Projetos open-source como o FreeBSD oferecem código final de alta qualidade."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:218
+msgid ""
+"While access to quality source code can reduce the cost of initial "
+"development, in the long-term the costs of managing change begin to "
+"dominate. As computing environments change over the years and new security "
+"vulnerabilities are discovered, your product too needs to change and adapt. "
+"Using open-source code is best viewed not as a one-off activity, but as an "
+"__ongoing process__. The best projects to collaborate with are the ones "
+"that are __live__; i.e., with an active community, clear goals and a "
+"transparent working style."
+msgstr ""
+"Embora o acesso a um código fonte de qualidade possa reduzir o custo inicial "
+"de desenvolvimento, a longo prazo, os custos com o gerenciamento de mudanças "
+"começam a dominar. A medida que os ambientes computacionais mudam ao longo "
+"dos anos e novas vulnerabilidades de segurança são descobertas, o seu "
+"produto também precisará mudar e se adaptar. O uso de código open-source não "
+"deve ser encarado como uma atividade pontual, mas sim como um __processo "
+"contínuo__. Os melhores projetos para se colaborar são os que estão "
+"__vivos__, ou seja, aqueles com uma comunidade ativa, que tenha objetivos "
+"claros e que possua um estilo de trabalho transparente."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:220
+msgid ""
+"FreeBSD has an active developer community around it. At the time of writing "
+"there are many thousands of contributors from every populated continent in "
+"the world and over 300 individuals with write access to the project's source "
+"repositories."
+msgstr ""
+"O FreeBSD tem uma comunidade de desenvolvimento ativa em torno dele. No "
+"momento em que este artigo foi escrito, existiam milhares de colaboradores "
+"com representantes de praticamente todos os continentes povoados do mundo, e "
+"mais de 300 indivíduos com acesso de escrita aos repositórios do projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:221
+msgid "The goals of the FreeBSD project are <<Hub1994>>:"
+msgstr "Os objetivos do projeto FreeBSD são <<Hub1994>>:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:223
+msgid ""
+"To develop a high-quality operating system for popular computer hardware, "
+"and,"
+msgstr ""
+"Desenvolver um sistema operacional de alta qualidade para o hardware de "
+"computadores populares, e,"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:224
+msgid "To make our work available to all under a liberal license."
+msgstr "Tornar o nosso trabalho disponível para todos sob uma licença liberal."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:226
+msgid ""
+"FreeBSD enjoys an open and transparent working culture. Nearly all "
+"discussion in the project happens by email, on link:https://lists.freebsd."
+"org/[public mailing lists] that are also archived for posterity. The "
+"project's policies are link:https://www.FreeBSD.org/internal/policies/"
+"[documented] and maintained under revision control. Participation in the "
+"project is open to all."
+msgstr ""
+"O FreeBSD possui uma cultura de trabalho aberta e transparente. Quase todas "
+"as discussões no projeto ocorrem por e-mail, em link:https://lists.freebsd."
+"org/[listas de discussão públicas] que também são arquivadas para a "
+"posteridade. As políticas do projeto são link:https://www.FreeBSD.org/"
+"internal/policies/[documentadas] e mantidas sob controle de revisão. A "
+"participação no projeto está aberta a todos."
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:228
+#, no-wrap
+msgid "Understanding FreeBSD culture"
+msgstr "Compreendendo a cultura do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:231
+msgid ""
+"To be able to work effectively with the FreeBSD project, you need to "
+"understand the project's culture."
+msgstr ""
+"Para ser capaz de trabalhar de forma eficaz com o projeto FreeBSD, você "
+"precisa entender a cultura do projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:234
+msgid ""
+"Volunteer driven projects operate under different rules than for-profit "
+"corporates. A common mistake that companies make when venturing into the "
+"open-source world is that of underplaying these differences."
+msgstr ""
+"As regras que regem a operação de um projeto voluntário são diferentes das "
+"que regem a operação de uma empresa com fins lucrativos. Um erro comum que "
+"as empresas cometem ao se aventurar no mundo open-source é o de subestimar "
+"essas diferenças."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:236
+#, no-wrap
+msgid "*Motivation.* Most contributions to FreeBSD are done voluntarily without monetary rewards entering the picture. The factors that motivate individuals are complex, ranging from altruism, to an interest in solving the kinds of problems that FreeBSD attempts to solve. In this environment, \"elegance is never optional\"<<Nor1993>>.\n"
+msgstr ""
+"*Motivação.* A maioria das contribuições para o FreeBSD é feita "
+"voluntariamente, sem a entrada de recompensas monetárias. Os fatores que "
+"motivam os indivíduos são complexos, variando desde o altruísmo até o "
+"interesse em resolver os tipos de problemas que o FreeBSD tenta resolver. "
+"Nesse ambiente, \"a elegância nunca é opcional\" <<Nor1993>>.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:238
+#, no-wrap
+msgid "*The Long Term View.* FreeBSD traces its roots back nearly twenty years to the work of the Computer Science Research Group at the University of California Berkeley.footnote:[FreeBSD's source repository contains a history of the project since its inception, and there are CDROMs available that contain earlier code from the CSRG.] A number of the original CSRG developers remain associated with the project.\n"
+msgstr ""
+"*A Visão de Longo Prazo.* O FreeBSD remonta quase vinte anos ao trabalho do "
+"Computer Science Research Group da Universidade da Califórnia em Berkeley. "
+"footnote:[O repositório de código-fonte do FreeBSD contém um histórico do "
+"projeto desde o seu início, e há CDs disponíveis que contêm código anterior "
+"do CSRG.] Vários dos desenvolvedores originais do CSRG ainda estão "
+"associados ao projeto.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:240
+msgid ""
+"The project values long-term perspectives <<Nor2001>>. A frequent acronym "
+"encountered in the project is DTRT, which stands for \"Do The Right Thing\"."
+msgstr ""
+"O projeto valoriza perspectivas de longo prazo <<Nor2001>>. Um acrônimo "
+"frequente encontrado no projeto é DTRT, que significa \"Faça a Coisa Certa\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:243
+#, no-wrap
+msgid ""
+"*Development Processes.* Computer programs are tools for communication: at one level programmers communicate their intentions using a precise notation to a tool (a compiler) that translates their instructions to executable code.\n"
+"At another level, the same notation is used for communication of intent between two programmers.\n"
+msgstr ""
+"Os programas de computador são ferramentas de comunicação: em um nível, os "
+"programadores comunicam suas intenções usando uma notação precisa para uma "
+"ferramenta (um compilador) que traduz suas instruções para código "
+"executável. \n"
+"Em outro nível, a mesma notação é usada para comunicação de intenção entre "
+"dois programadores.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:247
+msgid ""
+"Formal specifications and design documents are seldom used in the project. "
+"Clear and well-written code and well-written change logs (<<fig-change-log, "
+"A sample change log entry>>) are used in their place. FreeBSD development "
+"happens by \"rough consensus and running code\"<<Carp1996>>."
+msgstr ""
+"Especificações formais e documentos de design raramente são utilizados no "
+"projeto. Em seu lugar, é usado um código claro e bem escrito e registros de "
+"alterações bem escritos (<<fig-change-log, Um exemplo de entrada de registro "
+"de alterações>>). O desenvolvimento do FreeBSD acontece por meio de "
+"\"consenso geral e código em execução\" (tradução livre de \"rough consensus "
+"and running code\"<<Carp1996>>)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:253
+#, no-wrap
+msgid ""
+"r151864 | bde | 2005-10-29 09:34:50 -0700 (Sat, 29 Oct 2005) | 13 lines\n"
+"Changed paths:\n"
+" M /head/lib/msun/src/e_rem_pio2f.c\n"
+msgstr ""
+"r151864 | bde | 2005-10-29 09:34:50 -0700 (Sat, 29 Oct 2005) | 13 lines\n"
+"Changed paths:\n"
+" M /head/lib/msun/src/e_rem_pio2f.c\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:263
+#, no-wrap
+msgid ""
+"Use double precision to simplify and optimize arg reduction for small\n"
+"and medium size args too: instead of conditionally subtracting a float\n"
+"17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always\n"
+"subtract a double 33+53 bit one. The float version is now closer to\n"
+"the double version than to old versions of itself -- it uses the same\n"
+"33+53 bit approximation as the simplest cases in the double version,\n"
+"and where the float version had to switch to the slow general case at\n"
+"|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the\n"
+"double version.\n"
+msgstr ""
+"Use double precision to simplify and optimize arg reduction for small\n"
+"and medium size args too: instead of conditionally subtracting a float\n"
+"17+24, 17+17+24 or 17+17+17+24 bit approximation to pi/2, always\n"
+"subtract a double 33+53 bit one. The float version is now closer to\n"
+"the double version than to old versions of itself -- it uses the same\n"
+"33+53 bit approximation as the simplest cases in the double version,\n"
+"and where the float version had to switch to the slow general case at\n"
+"|x| == 2^7*pi/2, it now switches at |x| == 2^19*pi/2 the same as the\n"
+"double version.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:266
+#, no-wrap
+msgid ""
+"This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and\n"
+"2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.\n"
+msgstr ""
+"This speeds up arg reduction by a factor of 2 for |x| between 3*pi/4 and\n"
+"2^7*pi/4, and by a factor of 7 for |x| between 2^7*pi/4 and 2^19*pi/4.\n"
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:267
+#, no-wrap
+msgid "A sample change log entry [[fig-change-log]]"
+msgstr "Um exemplo de entrada de log de mudanças [[fig-change-log]]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:270
+msgid ""
+"Communication between programmers is enhanced by the use of a common coding "
+"standard man:style[9]."
+msgstr ""
+"Comunicação entre programadores é melhorada pelo uso de um padrão de "
+"codificação comum (man:style[9])."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:273
+#, no-wrap
+msgid ""
+"*Communication Channels.* FreeBSD's contributors are spread across the world.\n"
+"Email (and to a lesser extent, IRC) is the preferred means of communication in the project.\n"
+msgstr ""
+"*Canais de Comunicação.* Os colaboradores do FreeBSD estão espalhados pelo "
+"mundo. \n"
+"O e-mail (e, em menor medida, o IRC) é o meio de comunicação preferido no "
+"projeto.\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/building-products/_index.adoc:274
+#, no-wrap
+msgid "Best Practices for collaborating with the FreeBSD project"
+msgstr "Melhores práticas para colaborar com o projeto FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:277
+msgid ""
+"We now look at a few best practices for making the best use of FreeBSD in "
+"product development."
+msgstr ""
+"Agora iremos examinar algumas das melhores práticas para se fazer um melhor "
+"uso do FreeBSD no desenvolvimento de produtos."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:278
+#, no-wrap
+msgid "Plan for the long term"
+msgstr "Se planeje para o longo prazo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:281
+msgid ""
+"Setup processes that help in tracking the development of FreeBSD. For "
+"example:"
+msgstr ""
+"Criar processos que auxiliem no acompanhamento do desenvolvimento do "
+"FreeBSD. Por exemplo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:283
+#, no-wrap
+msgid "*Track FreeBSD source code.* The project makes it easy to mirror its SVN repository using extref:{committers-guide}[svnsync, svn-advanced-use-setting-up-svnsync]. Having the complete history of the source is useful when debugging complex problems and offers valuable insight into the intentions of the original developers. Use a capable source control system that allows you to easily merge changes between the upstream FreeBSD code base and your own in-house code.\n"
+msgstr ""
+"*Acompanhar o código-fonte do FreeBSD.* O projeto facilita a criação de um "
+"espelho do seu repositório SVN usando o extref:{committers-guide}[svnsync, "
+"svn-advanced-use-setting-up-svnsync]. Ter todo o histórico do código-fonte é "
+"útil para depurar problemas complexos e oferece informações valiosas sobre "
+"as intenções dos desenvolvedores originais. Use um sistema de controle de "
+"código capaz que permita mesclar facilmente as alterações entre o código-"
+"base upstream do FreeBSD e o seu próprio código interno.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:287
+msgid ""
+"<<fig-svn-blame, An annotated source listing generated using `svn blame`>> "
+"shows a portion of an annotated listing of the file referenced by the change "
+"log in <<fig-change-log, A sample change log entry>>. The ancestry of each "
+"line of the source is clearly visible. Annotated listings showing the "
+"history of every file that is part of FreeBSD are https://svnweb.freebsd.org/"
+"[available on the web]."
+msgstr ""
+"<<fig-svn-blame, Um arquivo de origem anotado gerado usando `svn blame`>> "
+"mostra uma parte de um arquivo de listagem anotado do arquivo referenciado "
+"pelo registro de alterações em <<fig-change-log, Um exemplo de registro de "
+"alterações>>. A ancestralidade de cada linha do código-fonte é claramente "
+"visível. Listagens anotadas mostrando a história de cada arquivo que faz "
+"parte do FreeBSD estão disponíveis https://svnweb.freebsd.org/[no website]."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:291
+#, no-wrap
+msgid "#REV #WHO #DATE #TEXT\n"
+msgstr "#REV #WHO #DATE #TEXT\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/building-products/_index.adoc:305
+#, no-wrap
+msgid ""
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) #include <sys/cdefs.h>\n"
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID(\"$FreeBSD$\");\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) /* __ieee754_rem_pio2f(x,y)\n"
+" 8870 rgrimes 1995-05-29 22:51:47 -0700 (Mon, 29 May 1995) *\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * return the remainder of x rem pi/2 in *y\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * use double precision for everything except passing x\n"
+"152535 bde 2005-11-16 18:20:04 -0800 (Wed, 16 Nov 2005) * use __kernel_rem_pio2() for large x\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) */\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) #include <float.h>\n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) #include \"math.h\"\n"
+msgstr ""
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) #include <sys/"
+"cdefs.h>\n"
+"176410 bde 2008-02-19 07:42:46 -0800 (Tue, 19 Feb 2008) __FBSDID(\""
+"$FreeBSD$\");\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) /* "
+"__ieee754_rem_pio2f(x,y)\n"
+" 8870 rgrimes 1995-05-29 22:51:47 -0700 (Mon, 29 May 1995) *\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * return the "
+"remainder of x rem pi/2 in *y\n"
+"176552 bde 2008-02-25 05:33:20 -0800 (Mon, 25 Feb 2008) * use double "
+"precision for everything except passing x\n"
+"152535 bde 2005-11-16 18:20:04 -0800 (Wed, 16 Nov 2005) * use "
+"__kernel_rem_pio2() for large x\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) */\n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) \n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) #include "
+"<float.h>\n"
+"176465 bde 2008-02-22 07:55:14 -0800 (Fri, 22 Feb 2008) \n"
+" 2116 jkh 1994-08-19 02:40:01 -0700 (Fri, 19 Aug 1994) #include "
+"\"math.h\"\n"
+
+#. type: Block title
+#: documentation/content/en/articles/building-products/_index.adoc:306
+#, no-wrap
+msgid "An annotated source listing generated using `svn blame` [[fig-svn-blame]]"
+msgstr ""
+"Uma listagem de origem anotada gerada usando `svn blame` [[fig-svn-blame]]"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:309
+#, no-wrap
+msgid "*Use a gatekeeper.* Appoint a _gatekeeper_ to monitor FreeBSD development, to keep an eye out for changes that could potentially impact your products.\n"
+msgstr ""
+"*Use um gatekeeper.* Nomeie um _gatekeeper_ para monitorar o desenvolvimento "
+"do FreeBSD, para ficar de olho em mudanças que possam potencialmente "
+"impactar seus produtos.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:312
+#, no-wrap
+msgid ""
+"*Report bugs upstream.* If you notice bug in the FreeBSD code that you are using, file a https://www.FreeBSD.org/support/bugreports/[bug report].\n"
+"This step helps ensure that you do not have to fix the bug the next time you take a code drop from upstream.\n"
+msgstr ""
+"*Relate bugs upstream.* Se você notar algum bug no código do FreeBSD que "
+"está usando, envie um https://www.FreeBSD.org/support/bugreports/[relatório "
+"de bug]. Esse passo ajuda a garantir que você não precise corrigir o bug na "
+"próxima vez que fizer uma atualização de código do upstream.\n"
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:312
+#, no-wrap
+msgid "Leverage FreeBSD's release engineering efforts"
+msgstr "Se alavanque nos esforços de engenharia do FreeBSD para lançamento de novas versões"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:315
+msgid ""
+"Use code from a -STABLE development branch of FreeBSD. These development "
+"branches are formally supported by FreeBSD's release engineering and "
+"security teams and comprise of tested code."
+msgstr ""
+"Utilize código da branch de desenvolvimento -STABLE do FreeBSD. Este branch "
+"de desenvolvimento é formalmente suportado pelas equipes de engenharia de "
+"release e de segurança, e é formada apenas por código testado."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:316
+#, no-wrap
+msgid "Donate code to reduce costs"
+msgstr "Doe código para reduzir seus custos"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:320
+msgid ""
+"A major proportion of the costs associated with developing products is that "
+"of doing maintenance. By donating non-critical code to the project, you "
+"benefit by having your code see much wider exposure than it would otherwise "
+"get. This in turn leads to more bugs and security vulnerabilities being "
+"flushed out and performance anomalies being identified and fixed."
+msgstr ""
+"Uma parte significativa dos custos relacionados ao desenvolvimento de um "
+"produto é o de realizar a sua manutenção. Ao doar partes não criticas do seu "
+"código para o projeto, você se beneficia por ter o seu código exposto de uma "
+"forma ampla, exposição que ele não teria de outra forma. Esta exposição por "
+"sua vez leva eliminação de um maior numero de bugs e de vulnerabilidades de "
+"segurança, e permite que anomalias de desempenho sejam identificadas e "
+"corrigidas."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:321
+#, no-wrap
+msgid "Get support effectively"
+msgstr "Obtenha suporte efetivo"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:326
+msgid ""
+"For products with tight deadlines, it is recommended that you hire or enter "
+"into a consulting agreement with a developer or firm with FreeBSD "
+"experience. The {freebsd-jobs} is a useful communication channel to find "
+"talent. The FreeBSD project maintains a link:https://www.FreeBSD.org/"
+"commercial/consult_bycat/[gallery of consultants and consulting firms] "
+"undertaking FreeBSD work. The http://www.bsdcertification.org/[BSD "
+"Certification Group] offers certification for all the major BSD derived OSes."
+msgstr ""
+"Para produtos com prazos apertados, é recomendado contratar ou entrar em um "
+"acordo de consultoria com um desenvolvedor ou empresa com experiência em "
+"FreeBSD. O {freebsd-jobs} é um canal de comunicação útil para encontrar "
+"talentos. O projeto FreeBSD mantém uma link:https://www.FreeBSD.org/"
+"commercial/consult_bycat/[galeria de consultores e empresas de consultoria] "
+"que realizam trabalhos em FreeBSD. O http://www.bsdcertification.org/[Grupo "
+"de Certificação BSD] oferece certificação para todos os principais sistemas "
+"operacionais derivados do BSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:329
+msgid ""
+"For less critical needs, you can ask for help on the link:https://lists."
+"freebsd.org/[project mailing lists]. A useful guide to follow when asking "
+"for help is given in <<Ray2004>>."
+msgstr ""
+"Para necessidades menos críticas, você pode pedir ajuda nas "
+"link:https://lists.freebsd.org/[listas de discussão do projeto]. Um guia "
+"útil a seguir ao pedir ajuda é dado em <<Ray2004>>."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:329
+#, no-wrap
+msgid "Publicize your involvement"
+msgstr "Divulgue o seu envolvimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:331
+msgid ""
+"You are not required to publicize your use of FreeBSD, but doing so helps "
+"both your effort as well as that of the project."
+msgstr ""
+"Você não é obrigado a divulgar que faz uso do FreeBSD, mas ao fazê-lo você "
+"estará ajudando ambos os esforços, o seu e o do projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:335
+msgid ""
+"Letting the FreeBSD community know that your company uses FreeBSD helps "
+"improve your chances of attracting high quality talent. A large roster of "
+"support for FreeBSD also means more mind share for it among developers. "
+"This in turn yields a healthier foundation for your future."
+msgstr ""
+"Dar visibilidade para a comunidade FreeBSD de que a sua empresa utiliza o "
+"sistema ajuda a melhorar as suas chances de atrair talentos de alta "
+"qualidade. Quanto maior for a lista de organizações que apoiam o FreeBSD "
+"maior será a presença do sistema na cabeça (mind share) dos desenvolvedores. "
+"Ao contribuir para aumentar o numero de desenvolvedores interessados no "
+"FreeBSD, você estará gerando uma base saudável para o seu futuro."
+
+#. type: Labeled list
+#: documentation/content/en/articles/building-products/_index.adoc:335
+#, no-wrap
+msgid "Support FreeBSD developers"
+msgstr "Suporte os desenvolvedores do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:341
+msgid ""
+"Sometimes the most direct way to get a desired feature into FreeBSD is to "
+"support a developer who is already looking at a related problem. Help can "
+"range from hardware donations to direct financial assistance. In some "
+"countries, donations to the FreeBSD project enjoy tax benefits. The project "
+"has a dedicated link:https://www.FreeBSD.org/donations/[donations liaison] "
+"to assist donors. The project also maintains a web page where developers "
+"link:https://www.FreeBSD.org/donations/wantlist/[list their needs]."
+msgstr ""
+"Às vezes, a maneira mais direta de obter um recurso desejado no FreeBSD é "
+"apoiar um desenvolvedor que já está trabalhando em um problema relacionado. "
+"A ajuda pode variar desde doações de hardware até assistência financeira "
+"direta. Em alguns países, as doações ao projeto FreeBSD são isentas de "
+"impostos. O projeto possui uma link:https://www.FreeBSD.org/donations/[área "
+"de doações] dedicada para ajudar doadores. O projeto também mantém uma "
+"página da web onde os desenvolvedores link:https://www.FreeBSD.org/donations/"
+"wantlist/[listam suas necessidades]."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:343
+msgid ""
+"As a policy the FreeBSD project extref:{contributors}[acknowledges] all "
+"contributions received on its web site."
+msgstr ""
+"Como política, o projeto FreeBSD extref:{contributors}[reconhece] todas as "
+"contribuições recebidas em seu site."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:345
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusão"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:349
+msgid ""
+"The FreeBSD project's goals are to create and give away the source code for "
+"a high-quality operating system. By working with the FreeBSD project you "
+"can reduce development costs and improve your time to market in a number of "
+"product development scenarios."
+msgstr ""
+"O Objetivo do projeto FreeBSD é criar e distribuir o código fonte de um "
+"sistema operacional de alta qualidade. Ao trabalhar com o projeto FreeBSD "
+"você pode reduzir os seus custos de desenvolvimento e melhorar o tempo "
+"necessário para lançar seus novos produtos no mercado em vários cenários de "
+"desenvolvimento de produtos."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:353
+msgid ""
+"We examined the characteristics of the FreeBSD project that make it an "
+"excellent choice for being part of an organization's product strategy. We "
+"then looked at the prevailing culture of the project and examined effective "
+"ways of interacting with its developers. The article concluded with a list "
+"of best-practices that could help organizations collaborating with the "
+"project."
+msgstr ""
+"Nós examinamos as características do projeto FreeBSD que o tornam uma "
+"excelente escolha para fazer parte da estratégia de produtos de uma "
+"organização. Em seguida, examinamos a cultura predominante do projeto e "
+"examinamos maneiras eficazes de interagir com seus desenvolvedores. O artigo "
+"concluiu com uma lista de melhores práticas que podem ajudar as organizações "
+"a colaborar com o projeto."
+
+#. type: Title ==
+#: documentation/content/en/articles/building-products/_index.adoc:357
+#, no-wrap
+msgid "Bibliography"
+msgstr "Bibliografia"
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:360
+msgid ""
+"[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[The "
+"Architectural Principles of the Internet] B. Carpenter. The Internet "
+"Architecture Board.The Internet Architecture Board. Copyright(R) 1996."
+msgstr ""
+"[[Carp1996]] [Carp1996] http://www.ietf.org/rfc/rfc1958.txt[Os Princípios "
+"Arquitetônicos da Internet]. The Internet Architecture Board. Copyright(R) "
+"1996."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:362
+msgid ""
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Committer's Guide] The "
+"FreeBSD Project. Copyright(R) 2005."
+msgstr ""
+"[[ComGuide]] [ComGuide] extref:{committers-guide}[Guia do Comitter] O "
+"Projeto FreeBSD. Direitos Autorais(R) 2005."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:364
+msgid ""
+"[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Innovation "
+"Happens Elsewhere: Open Source as Business Strategy] Ron Goldman. Richard "
+"Gabriel. Copyright(R) 2005. Morgan-Kaufmann."
+msgstr ""
+"[[GoldGab2005]] [GoldGab2005] http://dreamsongs.com/IHE/IHE.html[Inovação "
+"Acontece em Outros Lugares: Código Aberto como Estratégia de Negócios] Ron "
+"Goldman. Richard Gabriel. Copyright(R) 2005. Morgan-Kaufmann."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:366
+msgid ""
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contributing to the FreeBSD "
+"Project] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project."
+msgstr ""
+"[[Hub1994]] [Hub1994] extref:{contributing}[Contribuindo para o Projeto "
+"FreeBSD] Jordan Hubbard. Copyright(R) 1994-2005. The FreeBSD Project."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:368
+msgid ""
+"[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/"
+"proceedings/usenix99/mckusick.html[Soft Updates: A Technique for Eliminating "
+"Most Synchronous Writes in the Fast Filesystem] Kirk McKusick. Gregory "
+"Ganger. Copyright(R) 1999."
+msgstr ""
+"[[McKu1999]] [McKu1999] http://www.usenix.org/publications/library/"
+"proceedings/usenix99/mckusick.html[Soft Updates: Uma técnica para eliminar a "
+"maioria das gravações síncronas no sistema de arquivos rápido] Kirk "
+"McKusick. Gregory Ganger. Copyright(R) 1999."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:370
+msgid ""
+"[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/"
+"kirkmck.html[Twenty Years of Berkeley Unix: From AT&T-Owned to Freely "
+"Redistributable] Marshall Kirk McKusick. http://www.oreilly.com/catalog/"
+"opensources/book/toc.html[Open Sources: Voices from the Open Source "
+"Revolution] O'Reilly Inc.. Copyright(R) 1993."
+msgstr ""
+"[[McKu1999-1]] [McKu1999-1] http://www.oreilly.com/catalog/opensources/book/"
+"kirkmck.html[Vinte anos de Unix Berkeley: de propriedade da AT&T à "
+"redistribuição livre] Marshall Kirk McKusick. http://www.oreilly.com/catalog/"
+"opensources/book/toc.html[Open Sources: Vozes da Revolução Open Source] "
+"O'Reilly Inc.. Copyright(R) 1993."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:372
+msgid ""
+"[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Why you should use a BSD style "
+"license for your Open Source Project] Bruce Montague. The FreeBSD Project. "
+"Copyright(R) 2005."
+msgstr ""
+"[[Mon2005]] [Mon2005] extref:{bsdl-gpl}[Por que você deveria usar uma "
+"licença de estilo BSD para o seu projeto de código aberto.] Bruce Montague. "
+"The FreeBSD Project. Copyright(R) 2005."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:374
+msgid ""
+"[[Nik2005]] [Nik2005] extref:{dev-model}[A project model for the FreeBSD "
+"Project] Niklas Saers. Copyright(R) 2005. The FreeBSD Project."
+msgstr ""
+"[[Nik2005]] [Nik2005] extref:{dev-model}[Um modelo de projeto para o Projeto "
+"FreeBSD] Niklas Saers. Copyright(R) 2005. The FreeBSD Project."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:376
+msgid ""
+"[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial on Good "
+"Lisp Programming Style] Peter Norvig. Kent Pitman. Copyright(R) 1993."
+msgstr ""
+"[[Nor1993]] [Nor1993] http://www.norvig.com/luv-slides.ps[Tutorial sobre Bom "
+"Estilo de Programação em Lisp.] Peter Norvig. Kent Pitman. Copyright(R) 1993."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:378
+msgid ""
+"[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Teach Yourself "
+"Programming in Ten Years] Peter Norvig. Copyright(R) 2001."
+msgstr ""
+"[[Nor2001]] [Nor2001] http://www.norvig.com/21-days.html[Ensine a si mesmo a "
+"programar em dez anos.] Peter Norvig. Copyright(R) 2001."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:380
+msgid ""
+"[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html[How "
+"to ask questions the smart way] Eric Steven Raymond. Copyright(R) 2004."
+msgstr ""
+"[[Ray2004]] [Ray2004] http://www.catb.org/~esr/faqs/smart-questions.html["
+"Como fazer perguntas de forma inteligente] Eric Steven Raymond. Copyright(R) "
+"2004."
+
+#. type: Plain text
+#: documentation/content/en/articles/building-products/_index.adoc:381
+msgid ""
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[FreeBSD Release Engineering] "
+"Murray Stokely. Copyright(R) 2001. The FreeBSD Project."
+msgstr ""
+"[[RelEngDoc]] [RelEngDoc] extref:{releng}[Engenharia de Releases do FreeBSD] "
+"Murray Stokely. Copyright(R) 2001. The FreeBSD Project."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/committers-guide/_index.adoc b/documentation/content/pt-br/articles/committers-guide/_index.adoc
index 9ca1865fa4..2ca12d7089 100644
--- a/documentation/content/pt-br/articles/committers-guide/_index.adoc
+++ b/documentation/content/pt-br/articles/committers-guide/_index.adoc
@@ -3,7 +3,6 @@ title: Guia dos Committers
authors:
- author: Projeto de Documentação do FreeBSD
copyright: 1999-2020 Projeto de Documentação do FreeBSD
-releaseinfo: "$FreeBSD$"
trademarks: ["freebsd", "coverity", "ibm", "intel", "sparc", "general"]
---
@@ -16,15 +15,27 @@ trademarks: ["freebsd", "coverity", "ibm", "intel", "sparc", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/committers-guide/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -423,7 +434,7 @@ Atualizar a árvore com `svn update` irá apenas atualizar o que foi pedido ante
% svn co https://svn.FreeBSD.org/base/head /usr/src
....
-Mais detalhes sobre o uso do Subversion podem ser encontrados em link:{handbook}#svn[Usando o Subversion].
+Mais detalhes sobre o uso do Subversion podem ser encontrados em extref:{handbook}mirrors[Usando o Subversion, svn].
[[svn-daily-use-updating-the-tree]]
==== Atualizando a Árvore
@@ -1116,7 +1127,7 @@ Faça o checkout de uma cópia de trabalho a partir de um mirror substituindo a
Evite configurar um mirror svnsync a menos que haja uma boa razão para isso. Na maioria das vezes, um mirror `git` é uma alternativa melhor. Começar um novo mirror do zero leva muito tempo. Espere um mínimo de 10 horas para conectividade de alta velocidade. Se o trafego for passar por links internacionais, espere que isso leve de quatro a dez vezes mais.
-Uma maneira de limitar o tempo necessário é pegar um arquivo de https://download.freebsd.org/ftp/development/subversion/[seed]. Ele é grande (~1GB), mas consome menos tráfego de rede e leva menos tempo para baixar do que o svnsync.
+Uma maneira de limitar o tempo necessário é pegar um arquivo de https://download.freebsd.org/development/subversion/[seed]. Ele é grande (~1GB), mas consome menos tráfego de rede e leva menos tempo para baixar do que o svnsync.
Extraia o arquivo e o atualize:
@@ -1234,7 +1245,7 @@ Aqueles que receberam direitos de commit para os repositórios do FreeBSD devem
[.filename]#doc/head/shared/xml/authors.ent# - Adicione uma entidade de autor. Etapas posteriores dependem dessa entidade, e a falta dessa etapa fará com que a compilação do [.filename]#doc/# falhe. Essa é uma tarefa relativamente fácil, mas continua sendo um bom primeiro teste de habilidades no controle de versão.
. Atualize a lista de desenvolvedores e colaboradores
+
-[.filename]#doc/head/en_US.ISO8859-1/articles/contributors/contrib.committers.xml# - Adicione uma entrada à seção "Desenvolvedores" da link:{contributors}#staff-committers[Lista de Contribuidores]. As entradas são classificadas pelo sobrenome.
+[.filename]#doc/head/en_US.ISO8859-1/articles/contributors/contrib.committers.xml# - Adicione uma entrada à seção "Desenvolvedores" da extref:{contributors}[Lista de Contribuidores, staff-committers]. As entradas são classificadas pelo sobrenome.
+
[.filename]#doc/head/en_US.ISO8859-1/articles/contributors/contrib.additional.xml# - _Remova_ a entrada da seção "Contribuidores Adicionais". As entradas são classificadas pelo primeiro nome.
. Adicione um item de notícias
@@ -1740,7 +1751,7 @@ As contas do Phabricator não podem ser mescladas, por favor, não abra uma nova
Além dos repositórios meisters, existem outros membros e equipes do projeto FreeBSD que você provavelmente conhecerá no exercício da sua função como committer. Resumidamente, e de forma alguma inclusivamente, estes são:
Equipe de Engenharia de Documentação mailto:doceng@FreeBSD.org[doceng@FreeBSD.org]::
-O doceng é o grupo responsável pela infraestrutura de criação de documentação, aprovando de novos committers de documentação e garantindo que o website do FreeBSD e a documentação no site FTP estão atualizados em relação à árvore subversion. Não é um corpo de resolução de conflitos. A grande maioria das discussões relacionadas à documentação ocorre na http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[lista de discussão do projeto de documentação do FreeBSD]. Mais detalhes sobre a equipe doceng podem ser encontrados em seu https://www.FreeBSD.org/internal/doceng/[charter]. Os committers interessados em contribuir com a documentação devem se familiarizar com o link:{fdp-primer}[Primer do Projeto de Documentação].
+O doceng é o grupo responsável pela infraestrutura de criação de documentação, aprovando de novos committers de documentação e garantindo que o website do FreeBSD e a documentação no site FTP estão atualizados em relação à árvore subversion. Não é um corpo de resolução de conflitos. A grande maioria das discussões relacionadas à documentação ocorre na http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[lista de discussão do projeto de documentação do FreeBSD]. Mais detalhes sobre a equipe doceng podem ser encontrados em seu https://www.FreeBSD.org/internal/doceng/[charter]. Os committers interessados em contribuir com a documentação devem se familiarizar com o extref:{fdp-primer}[Primer do Projeto de Documentação].
Glen Barber mailto:gjb@FreeBSD.org[gjb@FreeBSD.org], Konstantin Belousov mailto:kib@FreeBSD.org[kib@FreeBSD.org], Bryan Drewery mailto:[bdrewery@FreeBSD.org], Marc Fonvieille mailto:blackend@FreeBSD.org[blackend@FreeBSD.org], Xin Li mailto:delphij@FreeBSD.org[delphij@FreeBSD.org], Colin Percival mailto:cperciva@FreeBSD.org[cperciva@FreeBSD.org] Hiroki Sato mailto:hrs@FreeBSD.org[hrs@FreeBSD.org], Gleb Smirnoff mailto:glebius@FreeBSD.org[glebius@FreeBSD.org]::
Estes são os membros da Equipe de Engenharia de Release mailto:re@FreeBSD.org[re@FreeBSD.org]. Essa equipe é responsável por definir os prazos de lançamento e por controlar o processo de release. Durante o congelamento de código, os engenheiros de release têm autoridade final sobre todas as alterações no sistema para qualquer branch que esteja com status de release pendente. Se há algo que você deseja mesclar do FreeBSD-CURRENT para o FreeBSD-STABLE (quaisquer valores que eles possam ter em um dado momento), estas são as pessoas com quem conversar sobre isso.
@@ -1835,7 +1846,7 @@ O repositório não é onde as alterações são inicialmente submetidas para co
Em caso de dúvida, peça por uma revisão!
. Respeite os mantenedores existentes, se listados.
+
-Muitas partes do FreeBSD não são "possuídas" no sentido de que qualquer indivíduo específico irá pular e gritar se você enviar uma alteração para a "sua" área, mas ainda vale a pena verificar primeiro. Uma convenção que usamos é colocar uma linha de mantenedor no [.filename]#Makefile# para qualquer pacote ou subárvore que esteja sendo mantido ativamente por uma ou mais pessoas; veja link:{developers-handbook}#policies[Source Tree Guidelines and Policies] para documentação sobre isso. Nas seções de código para quais existirem vários mantenedores, os commits nas áreas afetadas por um mantenedor precisarão ser revisados por pelo menos um outro mantenedor. Nos casos em que o "maintainer-ship" de algo não está claro, consulte os logs do repositório para os arquivos em questão e veja se alguém está trabalhando recentemente ou predominantemente naquela área.
+Muitas partes do FreeBSD não são "possuídas" no sentido de que qualquer indivíduo específico irá pular e gritar se você enviar uma alteração para a "sua" área, mas ainda vale a pena verificar primeiro. Uma convenção que usamos é colocar uma linha de mantenedor no [.filename]#Makefile# para qualquer pacote ou subárvore que esteja sendo mantido ativamente por uma ou mais pessoas; veja extref:{developers-handbook}[Source Tree Guidelines and Policies, policies] para documentação sobre isso. Nas seções de código para quais existirem vários mantenedores, os commits nas áreas afetadas por um mantenedor precisarão ser revisados por pelo menos um outro mantenedor. Nos casos em que o "maintainer-ship" de algo não está claro, consulte os logs do repositório para os arquivos em questão e veja se alguém está trabalhando recentemente ou predominantemente naquela área.
. Deve ser feito o rollback de qualquer alteração contestada enquanto estiver pendente a resolução da disputa, se solicitado por um mantenedor. Alterações relacionadas à segurança podem anular os desejos de um mantenedor, a critério do Oficial de Segurança.
+
Isso pode ser difícil de engolir em momentos de conflito (quando cada lado está convencido de que eles estão certos, é claro), mas um sistema de controle de versão torna desnecessário ter uma disputa em andamento quando é muito mais fácil simplesmente reverter a mudança que gerou a disputa, faça com que todos se acalmem novamente e tente descobrir qual é a melhor maneira de proceder. Se a mudança acaba por ser a melhor coisa depois de tudo, ela pode ser facilmente trazida de volta. Se ela não for, os usuários não terão que viver com a mudança falsa na árvore enquanto todos estavam ocupados debatendo seus méritos. Pessoas _muito_ raramente pedem rollbacks no repositório, uma vez que a discussão geralmente expõe mudanças ruins ou controversas antes que o commit aconteça, mas em raras ocasiões o rollback deve ser feito sem discussão para que possamos entrar imediatamente da discussão do tópico para descobrirmos se ele era adequado ou não.
@@ -2048,11 +2059,11 @@ Verifique o port, de preferência para garantir que ele seja compilado e empacot
# make package
....
-O link:{porters-handbook}[Manual de Porters] contém instruções mais detalhadas.
+O extref:{porters-handbook}[Manual de Porters] contém instruções mais detalhadas.
Use o man:portlint[1] para verificar a sintaxe do port. Você não precisa necessariamente eliminar todos os avisos, mas certifique-se de ter corrigido os mais simples.
-Se o port veio de um remetente que não contribuiu para o projeto antes, adicione o nome dessa pessoa a seção link:{contributors}#contrib-additional[Colaboradores Adicionais] da Lista de Colaboradores do FreeBSD.
+Se o port veio de um remetente que não contribuiu para o projeto antes, adicione o nome dessa pessoa a seção extref:{contributors}[Colaboradores Adicionais, contrib-additional] da Lista de Colaboradores do FreeBSD.
Feche o PR se o port entrou como um PR. Para fechar um PR, mude o estado para `Issue Resolved` e a resolução como `Fixed`.
diff --git a/documentation/content/pt-br/articles/contributing/_index.adoc b/documentation/content/pt-br/articles/contributing/_index.adoc
index d4650dd374..e0be1ae8ad 100644
--- a/documentation/content/pt-br/articles/contributing/_index.adoc
+++ b/documentation/content/pt-br/articles/contributing/_index.adoc
@@ -1,11 +1,16 @@
---
-title: Contribuindo com o FreeBSD
authors:
- - author: Jordan Hubbard
- - author: Sam Lawrance
- - author: Mark Linimon
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'Jordan Hubbard'
+ -
+ author: 'Sam Lawrance'
+ -
+ author: 'Mark Linimon'
+description: 'Como contribuir para o Projeto FreeBSD'
+tags: ["Contributing", "FreeBSD", "Non-Programmer Tasks", "Programmer Tasks"]
+title: 'Contribuindo com o FreeBSD'
trademarks: ["freebsd", "ieee", "general"]
+weight: 15
---
= Contribuindo com o FreeBSD
@@ -17,15 +22,27 @@ trademarks: ["freebsd", "ieee", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/contributing/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -36,156 +53,170 @@ Este artigo descreve maneiras diferentes sobre como um indivíduo ou organizaç
toc::[]
-Então você quer contribuir com o FreeBSD? Isso é ótimo! O FreeBSD _depende_ das contribuições da sua base de usuários para sobreviver. Suas contribuições não são apenas apreciadas, elas são vitais para que o FreeBSD continue crescendo.
+Então você quer contribuir para o FreeBSD? Isso é ótimo! O FreeBSD _depende_ das contribuições de sua base de usuários para sobreviver. Suas contribuições não são apenas apreciadas, elas são vitais para o crescimento contínuo do FreeBSD.
-Um grande e crescente número de contribuidores internacionais, de uma grande variedade de idade e áreas de conhecimento técnico, desenvolvem o FreeBSD. Sempre existe mais trabalho a ser feito do que pessoas disponíveis para realizá-lo, e mais ajuda é sempre bem vinda.
+Um grande e crescente número de colaboradores internacionais, de idades e áreas de experiência técnica muito diversas, desenvolvem o FreeBSD. Sempre há mais trabalho a ser feito do que pessoas disponíveis para fazê-lo, e mais ajuda sempre é apreciada.
-Como um voluntário, o que você pode fazer só é limitado pelo que você quer fazer. Entretanto, o que lhe pedimos é que esteja ciente a respeito do que outros membros da comunidade FreeBSD esperará de você. Você pode querer levar isso em consideração antes de decidir se voluntariar.
+Como voluntário, o que você faz é limitado apenas pelo que você quer fazer. No entanto, pedimos que você esteja ciente do que outros membros da comunidade FreeBSD esperarão de você. Você pode querer levar isso em consideração antes de decidir ser um voluntário.
-O Projeto FreeBSD é responsável por um ambiente completo de sistema operacional, em vez de apenas um kernel ou alguns utilitários dispersos. Assim sendo, nossa lista [.filename]#TODO# passa por uma grande variedade de tarefas: da documentação do sistema, testes de versão beta e apresentação, ao instalador do sistema e outros tipos altamente especializados de desenvolvimento do kernel. Pessoas de qualquer nível de conhecimento, em quase qualquer área, quase que certamente poderá ajudar no projeto.
+O projeto FreeBSD é responsável por um ambiente completo de sistema operacional, em vez de apenas um kernel ou alguns utilitários espalhados. Como tal, nossas listas de [.filename]#TODO# abrangem uma ampla gama de tarefas: desde documentação, teste beta e apresentação, até o instalador do sistema e tipos altamente especializados de desenvolvimento de kernel. Pessoas de qualquer nível de habilidade, em quase qualquer área, certamente podem ajudar o projeto.
-Entidades comerciais engajadas em iniciativas relacionadas ao FreeBSD também são encorajadas a entrar em contato conosco. Você precisa de uma extensão especial para fazer seu produto funcionar? Você vai nos encontrar receptivos às suas solicitações, considerando que não sejam muito estranhas. Está trabalhando em um produto de valor adicionado? Por favor nos informe! Podemos ser capazes de trabalhar cooperativamente em algum aspecto dele. O mundo do software livre está desafiando muitas premissas sobre como um software é desenvolvido, vendido e mantido, e nós pedimos que você pelo de uma segunda olhada.
+Empresas comerciais envolvidas em empreendimentos relacionados ao FreeBSD também são incentivadas a entrar em contato conosco. Precisa de uma extensão especial para fazer seu produto funcionar? Você nos encontrará receptivos às suas solicitações, desde que não sejam muito absurdas. Você está trabalhando em um produto de valor agregado? Por favor, nos informe! Podemos trabalhar cooperativamente em algum aspecto disso. O mundo do software livre está desafiando muitas suposições existentes sobre como o software é desenvolvido, vendido e mantido, e instamos você a pelo menos dar uma segunda olhada.
[[contrib-what]]
== O que é necessário
-A lista de tarefas e sub-projetos a seguir representa algo como uma amálgama de várias listas de [.filename]#TODO# e outras solicitações.
+A lista a seguir de tarefas e subprojetos representa algo como uma amálgama de várias listas de [.filename]#TODO# e de solicitações de usuários.
[[non-programmer-tasks]]
-=== Tarefas em execução por não-programadores.
+=== Tarefas contínuas não relacionadas à programação
-Muitas pessoas que estão envolvidas com o FreeBSD não são programadores. O Projeto inclui escritores de documentação, Web designers, e pessoas de suporte. Todas estas pessoas contribuem investindo tempo e sua vontade de aprender.
+Muitas pessoas envolvidas no FreeBSD não são programadoras. O Projeto inclui escritores de documentação, web designers e pessoas de suporte. Tudo o que essas pessoas precisam para contribuir é investir tempo e estar dispostas a aprender.
-. Leia o FAQ e Handbook periodicamente. Se algo estiver explicado de forma pobre, ambígua, desatualizada ou incorreta, nos comunique. Melhor ainda, envie-nos uma versão ajustada (O formato Docbook não é difícil de aprender, mas não existem objeções em relação ao envio de material no formato ASCII).
-. Ajude a traduzir a documentação do FreeBSD para a sua linguagem nativa. Se a documentação já existe na sua língua, você pode ajudar a traduzir documentos adicionais ou verificar se as traduções estão atualizadas e corretas. Primeiro dê uma olhada no link:{fdp-primer}#translations/[FAQ de Traduções] contido no Manual de Documentação do Projeto FreeBSD. Você não estará se comprometendo a traduzir toda a documentação do FreeBSD fazendo isto - como um voluntário, você pode fazer tantas quantas traduções desejar. Uma vez que alguém começa a traduzir, outros se unem ao esforço. Se você tem tempo ou energia para traduzir apenas uma parte da documentação, por favor traduza as instruções de instalação.
-. Leia a http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[lista de discussão para perguntas gerais sobre o FreeBSD] ocasionalmente (ou regularmente se possível). Pode ser muito recompensador compartilhar a sua experiência e ajudar outras pessoas a resolverem seus problemas; Às vezes você poderá até aprender algo novo! Estes fóruns também podem ser uma fonte de ideias de coisas a serem melhoradas.
+. Leia periodicamente o FAQ e o Handbook. Se algo estiver mal explicado, ambíguo, desatualizado ou incorreto, avise-nos. Ainda melhor, envie-nos uma correção (AsciiDoc não é difícil de aprender, mas não há objeção a submissões em texto simples).
+. Ajude a traduzir a documentação do FreeBSD para seu idioma nativo. Se já existir documentação em seu idioma, você pode ajudar a traduzir documentos adicionais ou verificar se as traduções estão atualizadas e corretas. Primeiro, dê uma olhada no extref:{fdp-primer}[FAQ de traduções, translations] no FreeBSD Documentation Project Primer. Ao fazer isso, você não está se comprometendo a traduzir todos os documentos do FreeBSD - como voluntário, você pode traduzir tanto quanto desejar. Uma vez que alguém começa a traduzir, outros quase sempre se juntam ao esforço. Se você só tem tempo ou energia para traduzir uma parte da documentação, por favor, traduza as instruções de instalação.
+. Leia ocasionalmente (ou mesmo regularmente) a {freebsd-questions}. Pode ser muito satisfatório compartilhar sua expertise e ajudar as pessoas a resolverem seus problemas; às vezes, você pode até aprender algo novo! Esses fóruns também podem ser uma fonte de ideias para melhorias.
[[ongoing-programmer-tasks]]
-=== Tarefas em execução por programadores
-
-A maioria das tarefas listadas aqui requerem um investimento considerável de tempo ou conhecimento profundo do kernel do FreeBSD; ou, ambos. Entretanto, também existem muitas tarefas úteis que são apropriadas para os "hackers de final de semana".
-
-. Se você executa o FreeBSD-CURRENT e possui uma boa conexão com a Internet, existe uma máquina `current.FreeBSD.org` a qual compila uma release completa uma vez por dia - de vez em quando, tente instalar uma destas versões e informe quaisquer problemas no processo.
-. Leia a http://lists.FreeBSD.org/mailman/listinfo/freebsd-bugs[Lista de discussão de relatórios de problemas do FreeBSD]. Talvez exista um problema que você possa comentar construtivamente ou existam correções que você possa testar. Ou você pode até consertar um dos problemas por conta própria.
-. Se você souber de qualquer problema que tenha sido corrigido com sucesso no -CURRENT e cuja correção não tenha sido aplicada ao -STABLE após um intervalo razoável de tempo (normalmente algumas semanas), envie ao committer um lembrete educado.
-. Mova as contribuições de software para [.filename]#src/contrib# na árvore do código fonte.
-. Tenha certeza que o código disponível em [.filename]#src/contrib# está atualizado.
-. Compile o sistema (ou apenas uma parte dele) com um nível de debug extra habilitado e corrija a causa dos alertas encontrados.
-. Corrija os alertas existentes para os ports que ainda fazem coisas ultrapassadas tais como utilizar `gets()` ou incluir [.filename]#malloc.h#.
-. Se você contribuiu com algum dos ports, e teve que fazer alguma mudança específica para o FreeBSD, envie suas correções de volta aos autores originais (isto tornará sua vida mais fácil quando eles lançarem a próxima versão).
-. Consiga cópias de padrões formais tais como o POSIX(R). Compare o comportamento do FreeBSD àquele requerido pelo padrão. Se o comportamento diferir, particularmente em pontos sutis ou obscuros da especificação, envie-nos um PR sobre ele. Se você for capaz, descubra como corrigi-lo e inclua um patch em seu PR. Se você acredita que o padrão está errado, peça ao comitê de padrões que considere a pergunta.
+=== Tarefas contínuas para programadores
+
+A maioria das tarefas listadas aqui pode exigir um investimento considerável de tempo, um conhecimento aprofundado do kernel do FreeBSD, ou ambos. No entanto, também existem muitas tarefas úteis que são adequadas para "hackers de fim de semana".
+
+. Se você está executando o FreeBSD-CURRENT e tem uma boa conexão com a Internet, há uma máquina chamada `current.FreeBSD.org` que cria uma versão completa uma vez por dia - de tempos em tempos, tente instalar a versão mais recente dela e relate quaisquer falhas no processo.
+. Leia a {freebsd-bugs}. Pode haver um problema no qual você possa comentar de forma construtiva ou com patches que possa testar. Ou você poderia até mesmo tentar corrigir um dos problemas sozinho.
+. Se você souber de correções de bugs que foram aplicadas com sucesso ao -CURRENT, mas ainda não foram mescladas ao -STABLE após um intervalo razoável (normalmente algumas semanas), envie um lembrete educado ao committer responsável.
+. Mova o software contribuído para [.filename]#src/contrib# no diretório de código-fonte.
+. Certifique-se de que o código em [.filename]#src/contrib# esteja atualizado.
+. Compile o de código-fonte do sistema (ou apenas parte dele) com avisos extras ativados e limpe os avisos. Uma lista de avisos de compilação também pode ser encontrada em nosso https://ci.freebsd.org[CI] selecionando uma compilação e verificando "LLVM/Clang Warnings".
+. Corrija os avisos para ports que fazem coisas depreciadas, como usar `gets()` ou incluir [.filename]#malloc.h#.
+. Se você contribuiu com quaisquer ports e teve que fazer mudanças específicas para o FreeBSD, envie seus patches de volta para os autores originais (isso facilitará sua vida quando eles lançarem a próxima versão).
+. Obtenha cópias dos padrões formais, como o POSIX(R). Compare o comportamento do FreeBSD com o exigido pelo padrão. Se o comportamento for diferente, especialmente em cantos sutis ou obscuros da especificação, envie um PR sobre isso. Se puder, descubra como corrigi-lo e inclua um patch no PR. Se achar que o padrão está errado, peça ao organismo responsável pelos padrões para considerar a questão.
. Sugira novas tarefas para esta lista!
-=== Trabalhe no banco de dados de PR (relatório de problemas)
+=== Trabalhe no Banco de Dados de PR (Relatório de Problema) do FreeBSD
-A https://bugs.FreeBSD.org/search/[Lista de PRs do FreeBSD] mostra todos os relatórios de problemas ativos no momento e os pedidos de melhoria que foram submetidos pelos usuários do FreeBSD. O banco de dados inclui tarefas para programadores e para não-programadores. Consulte os PRs abertos, e veja se algum deles é de seu interesse. Alguns deles podem ser tarefas muito simples que necessitam apenas que um par extra de olhos olhe para eles e confirme que a correção proposta funciona. Outros podem ser muito mais complexos, ou podem nem ter vindo com uma correção.
+A https://bugs.FreeBSD.org/search/[lista de PRs do FreeBSD] mostra todos os relatórios de problemas ativos e solicitações de aprimoramento que foram enviados pelos usuários do FreeBSD. O banco de dados de PRs inclui tarefas tanto para programadores quanto para não-programadores. Olhe através dos PRs abertos e veja se algo lhe interessa. Alguns desses podem ser tarefas muito simples que só precisam de um par extra de olhos para examiná-los e confirmar que a correção no PR é boa. Outros podem ser muito mais complexos, ou podem nem mesmo ter uma correção incluída.
-Comece com os PRs que ainda não foram atribuídos a ninguém. Se um PR estiver atribuído a outra pessoa, mas se parecer com algo que você possa cuidar, envie um e-mail para a pessoa encarregada do mesmo e pergunte se você pode trabalhar nele -- ele pode já ter um patch pronto para ser testado, ou você pode discutir novas idéias com ele.
+Comece com os PRs que não foram atribuídos a mais ninguém. Se um PR foi atribuído a outra pessoa, mas parece algo que você pode lidar, envie um e-mail para a pessoa a quem foi atribuído e pergunte se você pode trabalhar nele - eles podem já ter um patch pronto para ser testado ou outras ideias que você possa discutir com eles.
-=== Tarefas em andamento relacionadas a coleção de Ports
+=== Tarefas contínuas relacionadas a coleção de ports
-A coleção de Ports é um trabalho permanente em andamento. Queremos fornecer aos nossos usuários um repositório de software de terceiros fácil de usar, atualizado e de alta qualidade. Precisamos que as pessoas doem parte de seu tempo e esforço para nos ajudar a alcançar esse objetivo.
+A coleção de ports é um trabalho contínuo em andamento. Queremos fornecer aos nossos usuários um repositório de software de terceiros fácil de usar, atualizado e de alta qualidade. Precisamos que as pessoas doem parte de seu tempo e esforço para nos ajudar a alcançar esse objetivo.
-Qualquer um pode se envolver e existem muitas maneiras diferentes de fazer isso. Contribuir para a coleção de ports é uma excelente maneira de ajudar "a devolver algo" ao projeto. Se você está procurando um papel contínuo ou um desafio divertido para um dia chuvoso, nós adoraríamos ter a sua ajuda!
+Qualquer um pode se envolver e há muitas maneiras diferentes de fazer isso. Contribuir para os ports é uma excelente maneira de ajudar a "retribuir" algo ao projeto. Se você está procurando um papel contínuo ou um desafio divertido para um dia chuvoso, adoraríamos ter a sua ajuda!
-Existem várias maneiras fáceis de contribuir para manter a árvore de ports atualizada e em boas condições de funcionamento:
+Há várias maneiras fáceis de contribuir para manter a árvore de ports atualizada e em bom funcionamento:
-* Encontre algum software legal ou útil e link:{porters-handbook}[crie um port] para ele.
-* Existe um grande número de ports que não possuem nenhum mantenedor. Torne-se um mantenedor e <<adopt-port>>.
-* Se você criou ou adotou um port, esteja ciente <<maintain-port>>.
-* Quando estiver procurando um desafio você poderá <<fix-broken>>.
+* Encontre algum software legal ou útil e extref:{porters-handbook}[crie um port] para ele.
+* Há muitos ports que não têm mantenedor. Torne-se um mantenedor e adote-o (<<adopt-port>>).
+* Se você criou ou adotou um port, esteja ciente sobre <<maintain-port>>.
+* Quando você estiver procurando um desafio rápido, <<fix-broken>>.
-=== Escolha um dos itens da "`página de idéias`"
+=== Escolha um dos itens da “página de idéias”
-A https://wiki.freebsd.org/IdeasPage[lista de projetos do FreeBSD e de idéias para voluntários] também está disponível para as pessoas dispostas a contribuir com o projeto FreeBSD. Esta lista é atualizada regularmente e contém itens tanto para programadores e como para não programadores e traz ainda informações sobre cada projeto .
+A https://wiki.freebsd.org/IdeasPage[lista de projetos e ideias para voluntários] do FreeBSD também está disponível para pessoas dispostas a contribuir para o projeto FreeBSD. A lista é atualizada regularmente e contém itens para programadores e não-programadores, com informações sobre cada projeto.
[[contrib-how]]
== Como Contribuir
-Contribuições para o sistema geralmente se enquadram em uma das 5 categorias seguintes:
+As contribuições para o sistema geralmente se enquadram em uma ou mais das seguintes 5 categorias:
[[contrib-general]]
=== Relatórios de Bugs e Comentários Gerais
-Uma ideia ou sugestão técnica de interesse _geral_ deverá ser enviada para a http://lists.FreeBSD.org/mailman/listinfo/freebsd-hackers[Lista de discussão de assuntos técnicos do FreeBSD]. Da mesma forma, pessoas com este tipo de interesse (e tolerância para um _alto_ volume de mensagens!) poderão assinar a http://lists.FreeBSD.org/mailman/listinfo/freebsd-hackers[Lista de discussão de assuntos técnicos do FreeBSD]. Veja o link:{handbook}#eresources-mail[Handbook do FreeBSD] para mais informações sobre esta e outras listas.
+Uma ideia ou sugestão de interesse técnico _geral_ deve ser enviada para a {freebsd-hackers}. Da mesma forma, pessoas com interesse nesses assuntos (e tolerância para um volume _alto_ de mensagens!) podem se inscrever na {freebsd-hackers}. Consulte o extref:{handbook}[Handbook do FreeBSD, eresources-mail] para obter mais informações sobre esta e outras listas de e-mail.
+
+Se você está enviando um patch simples para o repositório src, considere enviar um https://github.com/freebsd/freebsd-src/pulls[pull request] para o espelho do projeto no GitHub. Envios adequados devem:
+
+* Estar pronto ou quase pronto para ser Commitado. Um committer deve ser capaz de aplicar este patch com menos de 10 minutos de trabalho adicional.
+* Ele passa em todos os trabalhos de CI do GitHub.
+* Você pode responder rapidamente a feedbacks.
+* Ele afeta menos de 10 arquivos e as mudanças têm menos de 200 linhas. Mudanças maiores do que isso podem ser OK, ou você pode ser solicitado a enviar vários pull requests de um tamanho mais gerenciável.
+* Cada mudança lógica é um commit separado dentro do pull request. As mensagens de commit para cada mudança devem seguir o extref:{committers-guide}#commit-log-message[guia de log de commit].
+* Todos os commits têm o seu nome e um endereço de e-mail válido como você gostaria de vê-los no repositório do FreeBSD como autor. Endereços falsos do github.com não podem ser usados.
+* O escopo do pull request não deve ser alterado durante a revisão. Se a revisão sugerir mudanças que expandam o escopo, crie um pull request independente.
+* Commits de correção devem ser combinados com o commit que estão corrigindo. Cada commit em seu branch deve ser adequado para o repositório do FreeBSD.
+* Os commits devem incluir uma ou mais linhas `Signed-off-by:` com nome completo e endereço de e-mail certificando o https://developercertificate.org/[Certificado de Origem do Desenvolvedor].
+
+Ao atualizar um pull request, por favor faça o rebase com um push forçado em vez de um commit de merge. Mudanças mais complexas podem ser submetidas como pull requests, mas podem ser fechadas se forem muito grandes, difíceis de manusear, tornarem-se inativas, precisarem de mais discussão na comunidade ou precisarem de uma revisão extensa. Por favor, evite criar grandes patches de limpeza abrangentes: eles são muito grandes e não têm o foco necessário para uma boa revisão. Patches mal direcionados podem ser redirecionados para um fórum mais apropriado para a resolução do patch.
+
+Os pull requests submetidos ao repositório de ports podem ou não receber atenção, dependendo do interesse dos desenvolvedores. Por enquanto, para ter uma melhor experiência é melhor seguir o processo de submissão de ports descrito na seção <<ports-contributing>> .
-Se você encontrar um bug ou estiver enviando uma mudança específica, por favor relate-o usando o https://bugs.FreeBSD.org/submit/[relatório de envio de bug]. Tente preencher cada campo com do relato de bug. A não ser que exceda 65KB, inclua qualquer correção diretamente no relatório. Se o patch é apropriado para ser aplicado na árvore do código fonte coloque `[PATCH]` no resumo do relatório. Ao incluir patches, _não_ use copiar-e-colar, pois o copiar-e-colar transforma tabs em espaços e os torna inúteis. Quando os patches são muito maiores que 20KB, considere comprimi-los (por exemplo, com man:gzip[1] ou man:bzip2[1]) antes de fazer o envio.
+A equipe de documentação também aceita pull requests via GitHub, mas ainda não estabeleceu nenhuma política para eles.
-Após preencher o relatório, você receberá a confirmação com o número de rastreamento. Guarde este número para que você possa nos atualizar com detalhes sobre do problema.
+Se você encontrar um bug ou estiver enviando uma mudança específica, por favor relate-o usando o https://bugs.FreeBSD.org/submit/[formulário de submissão de bug]. Tente preencher cada campo do relatório de bug. A menos que excedam 65KB, inclua quaisquer patches diretamente no relatório. Se o patch for adequado para ser aplicado à árvore de código fonte, coloque `[PATCH]` na sinopse do relatório. Ao incluir patches, _não_ use o copiar e colar, pois o copiar e colar transforma os tabs em espaços e os torna inutilizáveis. Quando os patches são muito maiores do que 20KB, considere comprimi-los (por exemplo, com man:gzip[1] ou man:bzip2[1]) antes de enviá-los.
-Veja também link:{problem-reports}[este artigo] sobre como escrever bons relatórios de problemas.
+Depois de enviar um relatório, você deve receber uma confirmação juntamente com um número de rastreamento. Guarde este número de rastreamento para que você possa nos atualizar com detalhes sobre o problema.
+
+Veja também extref:{problem-reports}[este artigo] sobre como escrever bons relatórios de problemas.
=== Mudanças na Documentação
-Mudanças na documentação são supervisionadas pela http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[lista de documentação do projeto FreeBSD]. Por favor veja o link:{fdp-primer}[Manual do Projeto de Documentação do FreeBSD] para instruções completas. Envie contribuições e mudanças (mesmo as pequenas são bem vindas!) utilizando o mesmo método de qualquer outro relatório de bug.
+As mudanças na documentação são supervisionadas pelo {freebsd-doc}. Por favor, consulte o extref:{fdp-primer}[FreeBSD Documentation Project Primer] para obter instruções completas. Envie submissões e alterações (mesmo as pequenas são bem-vindas!) usando o mesmo método que qualquer outro relatório de bug.
=== Mudanças no Código Fonte Existente
-Um acréscimo ou mudança em um código fonte existe é um tema um pouco complicado e depende muito de como você está desatualizado com o estado atual do desenvolvimento do FreeBSD. Existe uma release especial do FreeBSD em andamento conhecida como "FreeBSD-CURRENT" que é disponibilizada de várias maneiras para conveniência dos desenvolvedores que trabalham ativamente no sistema. Veja o link:{handbook}#current-stable[Handbook do FreeBSD] para mais informação sobre como obter e usar o FreeBSD-CURRENT.
+Uma adição ou mudança no código-fonte existente é um assunto um pouco mais complicado e depende muito de quão desatualizado você está em relação ao estado atual do desenvolvimento do FreeBSD. Há uma versão especial em andamento do FreeBSD conhecida como "FreeBSD-CURRENT" que está disponível de várias maneiras para a conveniência de desenvolvedores que trabalham ativamente no sistema. Veja o extref:{handbook}[Handbook do FreeBSD, current-stable] para mais informações sobre como obter e usar o FreeBSD-CURRENT.
-Trabalhar com versões antigas do código, infelizmente, muitas vezes significa que as suas alterações serão demasiadamente obsoletas ou muito divergentes para possibilitar uma fácil re-integração ao FreeBSD. As possibilidades de que isso ocorra podem ser minimizadas um pouco através da sua inscrição na http://lists.FreeBSD.org/mailman/listinfo/freebsd-announce[lista de distribuição de comunicados oficiais do projeto FreeBSD] e na http://lists.FreeBSD.org/mailman/listinfo/freebsd-current[lista de discussão do FreeBSD-CURRENT], nas quais as discussões sobre o estado atual do sistema ocorrem.
+Trabalhar a partir de fontes mais antigos infelizmente significa que suas alterações às vezes podem ser muito obsoletas ou divergentes demais para uma reintegração fácil no FreeBSD. As chances disso podem ser minimizadas um pouco ao se inscrever nas listas {freebsd-announce} e {freebsd-current}, onde ocorrem discussões sobre o estado atual do sistema.
-Supondo que você consiga obter acesso à uma versão razoavelmente atualizada do código fonte do sistema para basear as suas alterações, o próximo passo é produzir um conjunto de diffs para enviar aos mantenedores do FreeBSD. Isto é feito com o comando man:diff[1].
+Assumindo que você consegue obter fontes razoavelmente atualizadas para basear suas alterações, o próximo passo é produzir um conjunto de diffs para enviar aos mantenedores do FreeBSD. Isso é feito com o comando man:diff[1].
-O formato preferido do man:diff[1] para o envio de um patch, é o formato de saída unificada gerado pelo comando `diff -u`.
+A preferência do formato man:diff[1] para envio de correções é o formato de saída unificada gerado pelo `diff -u`.
-[source,shell]
+[source, shell]
....
% diff -u oldfile newfile
....
ou
-[source,shell]
+[source, shell]
....
% diff -u -r -N olddir newdir
....
-deverá gerar um conjunto de diffs unificados para o arquivo de origem informado ou para a hierarquia de diretórios.
+Iria gerar um conjunto de diffs unificados para o arquivo ou hierarquia de diretórios de origem fornecidos.
-Consulte o manual do man:diff[1] para maiores informações.
+Consulte man:diff[1] para obter mais informações.
-Uma vez que você tenha o conjunto de diffs (os quais você pode testar com o comando man:patch[1]), você deve submetê-lo para inclusão no FreeBSD por meio de um relatório de bug. Você _não_ deve enviar os diffs para a http://lists.FreeBSD.org/mailman/listinfo/freebsd-hackers[lista de discussão de assuntos técnicos do FreeBSD] ou eles irão se perder! Agradecemos imensamente a sua submissão (este é um projeto voluntário!); Devido ao alto volume de trabalho, nós podemos não ser capazes de resolvê-lo imediatamente, mas ele permanecerá em nosso banco de dados até que o façamos. Marque a sua submissão incluindo a palavra `[PATCH]` na sinopse do relatório.
+Uma vez que você tem um conjunto de diffs (que você pode testar com o comando man:patch[1]), você deve enviá-los para inclusão no FreeBSD como um relatório de problema. _Não_ envie apenas os diffs para a {freebsd-hackers}, pois eles serão perdidos! Agradecemos muito sua contribuição (este é um projeto voluntário!); como estamos ocupados, pode ser que não consigamos lidar com isso imediatamente, mas ele permanecerá no banco de dados de PRs até que o façamos. Indique sua submissão incluindo `[PATCH]` no resumo do relatório.
-Se você achar adequado (por ex. você adicionou, deletou ou renomeou arquivos), agrupe as suas mudanças em um arquivo `tar`. Arquivos criados com o man:shar[1] também são bem vindos.
+Se você achar apropriado (por exemplo, você adicionou, removeu ou renomeou arquivos), agrupe suas alterações em um arquivo `tar`. Arquivos criados com o comando man:shar[1] também são bem-vindos.
-Se as suas mudanças são de uma natureza potencialmente sensível, por exemplo, se você não tiver certeza sobre os problemas de direitos autorais que regerão sua distribuição no futuro, envie-as para o Core Team mailto:core@FreeBSD.org[core@FreeBSD.org] ao invés de submetê-las por meio de um relatório de bug. O FreeBSD Core Team mailto:core@FreeBSD.org[core@FreeBSD.org] é formado por um grupo muito pequeno de pessoas as quais cuidam de muitas das tarefas diárias de administração do projeto FreeBSD. Observe que este grupo também é _muito ocupado_ e portanto você só deve enviar um e-mail para eles se for realmente necessário.
+Se a sua alteração for potencialmente sensível, como se você não tem certeza sobre questões de direitos autorais que regem a distribuição posterior, você deve enviá-la diretamente para {core-email} em vez de enviar como um relatório de bug. O {core-email} atinge um grupo muito menor de pessoas que fazem muito do trabalho diário no FreeBSD. Observe que esse grupo também é _muito ocupado_ e, portanto, você só deve enviar e-mails a eles quando for realmente necessário.
-Por favor, consulte os manuais man:intro[9] e man:style[9] para algumas informações sobre estilo de codificação. Nós apreciaríamos se você estivesse ao menos ciente destas informações antes de submeter o seu código.
+Por favor, consulte man:intro[9] e man:style[9] para obter informações sobre o estilo de codificação. Agradecemos se você pelo menos estiver ciente dessas informações antes de enviar código.
-=== Código novo ou pacotes de maior valor agregado
+=== Código Novo ou Pacotes de Grande Valor Adicionado
-No caso de uma contribuição significativa de um trabalho de grande porte, ou a adição de uma nova característica importante ao FreeBSD, torna-se quase sempre necessário que se envie as alterações em um arquivo tar ou então que se faça o upload das mesmas para um servidor WWW ou FTP para que as outras pessoas possam acessá-las. Se você não possui acesso a um servidor WWW ou FTP, pergunte em uma lista de discussão apropriada do FreeBSD se alguém pode hospedar essas alterações para você.
+No caso de uma contribuição significativa de um grande volume de trabalho, ou a adição de um novo recurso importante ao FreeBSD, torna-se quase sempre necessário enviar as alterações como arquivos tar ou carregá-los em um website ou FTP para que outras pessoas possam acessá-los. Se você não tem acesso a um website ou FTP, peça em uma lista de discussão apropriada do FreeBSD para alguém hospedar as alterações para você.
-Quando se trabalha com grandes quantidades de código, o sensível assunto de direitos autorais invariavelmente vem a tona. O Projeto FreeBSD prefere licenças de software livre tais como BSD ou ISC. Licenças copyleft, como a GPLv2, às vezes são permitidas. A lista completa pode ser encontrada na página sobre a link:https://www.FreeBSD.org/internal/software-license/[política de licenciamento do core team].
+Quando se trabalha com grandes quantidades de código, a questão delicada de direitos autorais inevitavelmente surge. O FreeBSD prefere licenças de software livre tais como BSD ou ISC. Licenças copyleft como GPLv2 às vezes são permitidas. A lista completa pode ser encontrada na página da link:https://www.FreeBSD.org/internal/software-license/[política de licenciamento do core team].
=== Dinheiro ou Hardware
-Nós ficamos sempre muito felizes em aceitar doações para agregar a causa do Projeto FreeBSD, em um esforço voluntário como o nosso, um pouco pode significar muito! Doações de hardware também são muito importantes para expandir a nossa lista de periféricos suportados, uma vez que normalmente não temos recursos para comprar estes itens nós mesmos.
+Estamos sempre muito felizes em receber doações para promover a causa do Projeto FreeBSD e, em um esforço voluntário como o nosso, um pouco pode fazer muita diferença! As doações de hardware também são muito importantes para expandir nossa lista de periféricos suportados, já que geralmente não temos fundos para comprar tais itens nós mesmos.
[[donations]]
==== Doando Dinheiro
-A Fundação FreeBSD é uma entidade sem fins lucrativos e isenta de impostos, estabelecida com o objetivo de promover os objetivos do Projeto FreeBSD. Como uma entidade 501(c)3, a fundação é isenta de recolher as taxas do governo federal, bem como as do Estado do Colorado. As doações para uma entidade isenta de impostos são frequentemente dedutíveis dos impostos federais.
+A FreeBSD Foundation é uma fundação sem fins lucrativos e isenta de impostos, estabelecida para promover os objetivos do projeto FreeBSD. Como uma entidade 501(c)3, a fundação é geralmente isenta de imposto de renda federal dos EUA, bem como do imposto de renda estadual do Colorado. As doações para uma entidade isenta de impostos muitas vezes são dedutíveis do imposto de renda federal tributável.
-As doações podem ser enviadas através de cheques para:
+Doações podem ser enviadas em forma de cheque para:
[.address]
****
-The FreeBSD Foundation +
-P.O. Box 20247, +
-Boulder, +
-CO 80308 +
-USA
+The FreeBSD Foundation + 3980 Broadway Street + STE #103-107 + Boulder CO 80304 + USA
****
-A Fundação FreeBSD é agora capaz de receber doações através da web com o PayPal. Para fazer uma doação, por favor visite o https://www.freebsdfoundation.org[website a Fundação].
+A FreeBSD Foundation também é capaz de receber https://www.freebsdfoundation.org/donate/[doações online] através de várias opções de pagamento.
-Maiores informações sobre a Fundação FreeBSD podem ser obtidas no documento https://people.FreeBSD.org/~jdp/foundation/announcement.html[A Fundação FreeBSD - Uma introdução]. Para contatar a Fundação por e-mail, escreva para mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org].
+Mais informações sobre a FreeBSD Foundation podem ser encontradas em https://people.FreeBSD.org/~jdp/foundation/announcement.html[The FreeBSD Foundation - uma introdução]. Para entrar em contato com a Fundação por e-mail, escreva para mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org].
==== Doando Hardware
-O projeto FreeBSD aceita alegremente doações de hardware para os quais pode encontrar bom uso. Se você estiver interessado em doar componentes de hardware, por favor contate o link:https://www.FreeBSD.org/donations/[Escritório de Relacionamento com Doadores].
+O Projeto FreeBSD alegremente aceita doações de hardware que possa ser utilizado de forma benéfica. Se você estiver interessado em doar hardware, por favor, entre em contato com o link:https://www.FreeBSD.org/donations/[Departamento de Coordenação de Doações].
[[ports-contributing]]
== Contribuindo com a coleção de ports
@@ -195,178 +226,186 @@ O projeto FreeBSD aceita alegremente doações de hardware para os quais pode en
==== Escolhendo um port não mantido
-Assumir a manutenção de um port sem mantenedor é uma ótima maneira de se envolver. Os ports sem mantenedor só são atualizados e corrigidos quando alguém se oferece para trabalhar neles. Há um grande número de ports não mantidos. É uma boa ideia começar com a adoção de uma port que você usa regularmente.
+Assumir a manutenção de ports que não são mantidos é uma ótima maneira de se envolver. Os ports não mantidos são atualizados e corrigidos somente quando alguém se voluntaria para trabalhar neles. Há um grande número de ports não mantidos. É uma boa ideia começar adotando um port que você usa regularmente.
+
+Os ports não mantidos têm seu campo `MAINTAINER` definido como `ports@FreeBSD.org`. Muitos ports não mantidos podem ter atualizações pendentes, que podem ser vistas no https://portscout.freebsd.org/ports@freebsd.org.html[scanner de arquivos de distribuição dos Ports do FreeBSD].
-Os ports sem um responsável tem o seu `MAINTAINER` configurado como `ports@FreeBSD.org`. Uma lista com todos os ports nesta situação, bem como os seus erros atuais e os seus relatórios de problemas pode ser visualizada no http://portsmon.FreeBSD.org/portsconcordanceformaintainer.py?maintainer=ports%40FreeBSD.org[Sistema de Monitoração da coleção de ports do FreeBSD].
+Em https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD.org[PortsFallout], pode ser vista uma lista de ports sem manutenção com erros.
Alguns ports afetam um grande número de outros devido a dependências e relacionamentos de ports escravos. Geralmente, esperamos que as pessoas tenham alguma experiência antes de se voluntariarem para manter tais ports.
-Você pode verificar se um port tem ou não dependências ou se outros ports dependem dele consultando o índice mestre de ports chamado [.filename]#INDEX#. (O nome do arquivo varia de acordo com a versão do FreeBSD; por exemplo, [.filename]#INDEX-8#.) Alguns ports têm dependências condicionais que não estão incluídas na construção do [.filename]#INDEX# padrão. Esperamos que você seja capaz de reconhecer estes ports através da analise do arquivo [.filename]#Makefile# de outros ports.
+Você pode descobrir se um port possui dependências ou ports dependentes olhando para o índice mestre de ports chamado [.filename]#INDEX#. (O nome do arquivo varia de acordo com a versão do FreeBSD; por exemplo, [.filename]#INDEX-8#). Alguns ports têm dependências condicionais que não são incluídas em uma compilação padrão do [.filename]#INDEX#. Esperamos que você seja capaz de reconhecer esses ports através da análise dos [.filename]#Makefile# de outros ports.
-==== Como adotar o port
+==== Como adotar um port
-Primeiro, certifique-se de entender quais serão as suas <<maintain-port>>. Leia também o link:{porters-handbook}[Porter's Handbook]. _Por favor, não se comprometa com mais do que você acha que pode lidar sem se sobrecarregar._
+Primeiro, certifique-se de entender <<maintain-port>>. Também leia o <<porters-handbook>>. _Por favor, não se comprometa com mais do que você sente que pode lidar confortavelmente._
-Você pode solicitar para se tornar o responsável pela manutenção de qualquer port que não esteja sendo mantido por outra pessoa assim que desejar. Basta definir o parâmetro `MAINTAINER` para o seu próprio endereço de e-mail e enviar um PR (Relatório de Problemas) com a alteração. Se o port tiver erros de compilação ou precisar de atualização, você pode aproveitar para incluir quaisquer outras alterações que sejam necessárias neste mesmo PR. Isso irá acelerar o processo pois muitos committers não estão dispostos a atribuir a responsabilidade de manutenção de um port para alguém que não tenha um histórico conhecido com o FreeBSD. O envio de PRs (relatórios de problema) para corrigir erros de compilação ou para atualizar um port é a melhor maneira de estabelecer este histórico.
+Você pode solicitar a manutenção de qualquer port não mantido assim que desejar. Basta definir `MAINTAINER` para o seu próprio endereço de e-mail e enviar um PR (Relatório de Problema) com a alteração. Se o port tiver erros de compilação ou precisar ser atualizado, talvez você queira incluir outras alterações no mesmo PR. Isso ajudará porque muitos committers estão menos dispostos a atribuir a manutenção a alguém que não tem um histórico conhecido com o FreeBSD. Enviar PRs que corrijam erros de compilação ou atualizem os ports são as melhores maneiras de estabelecer um histórico.
-Submeta o seu relatório de problema na categoria `ports` e utilize a classe `change-request`. Um committer irá examinar o seu relatório, confirmará as alterações e, por fim, fechará o relatório. Às vezes, esse processo pode demorar um pouco (os committers também são voluntários).
+Envie seu PR com a categoria `ports` e a classe `change-request`. Um committer examinará seu PR, confirmará as alterações e, por fim, fechará o PR. Às vezes, esse processo pode levar um pouco de tempo (os committers também são voluntários :).
[[maintain-port]]
-=== O desafio para os mantenedores de um port
+=== O desafio para os mantenedores de ports
-Esta seção lhe dará uma ideia do motivo pelo qual os ports precisam ser mantidos e descreve as responsabilidades de um mantenedor de ports.
+Esta seção lhe dará uma ideia do motivo pelo qual os ports precisam ser mantidos e esboçará as responsabilidades de um mantenedor de port.
[[why-maintenance]]
-==== Por que os ports requerem manutenção
+==== Por que um port requer manutenção
-Criar um port é uma tarefa eventual. Mas garantir que um port esteja sempre atualizado e que continue a ser compilado e executado corretamente requer um esforço de manutenção contínuo. Os mantenedores são as pessoas que dedicam parte do seu tempo para atingir esses objetivos.
+Criar um port é uma tarefa única. Garantir que um port esteja atualizado e continue a ser compilado e executado requer um esforço contínuo de manutenção. Os mantenedores são as pessoas que dedicam parte do seu tempo para atender a esses objetivos.
-O principal motivo pelo qual a coleção de ports precisa de manutenção é o de trazer os mais recentes e o melhores softwares de terceiros para a comunidade FreeBSD. Um desafio adicional é manter os ports individuais funcionando dentro do framework da coleção de ports à medida que ela evolui.
+A razão mais importante pela qual os ports precisam de manutenção é para trazer o que há de mais recente e melhor em software de terceiros para a comunidade FreeBSD. Um desafio adicional é manter os ports individuais funcionando dentro do framework da Coleção de Ports à medida que ele evolui.
Como mantenedor, você precisará gerenciar os seguintes desafios:
-* *Novas versões e atualizações de software.* Novas versões e atualizações de software são disponibilizadas o tempo todo para os aplicativos já convertidos, e elas precisam ser incorporadas à Coleção de Ports a fim de prover software atualizado.
+* *Novas versões de software e atualizações.* Novas versões e atualizações dos softwares portados se tornam disponíveis o tempo todo e precisam ser incorporadas na Coleção de Ports para fornecer software atualizado.
-* *Mudanças nas dependências.* Se forem feitas alterações significativas nas dependências do seu port, talvez seja necessário atualizá-las para que ele continue funcionando corretamente.
+* *Mudanças nas dependências.* Se houverem mudanças significativas nas dependências do seu port, pode ser necessário atualizá-lo para que continue a funcionar corretamente.
-* *Mudanças que afetem os ports que dependem do seu.* Se outros ports dependerem de um port que você mantém, as mudanças no seu port podem requerer um alinhamento prévio com outros mantenedores.
+* *Mudanças que afetam ports dependentes.* Se outros ports dependem de um port que você mantém, as alterações no seu port podem exigir coordenação com outros mantenedores.
-* *Interação com outros usuários, mantenedores e desenvolvedores.* Parte de ser um mantenedor é assumir uma função de suporte. Não existe a expectativa de que você ofereça suporte de uma maneira geral (mas você é bem vindo se quiser fazer isso). O que você deve prover é um ponto de coordenação para as questões específicas do FreeBSD relacionadas aos seus ports.
+* *Interatividade com outros usuários, mantenedores e desenvolvedores.* Parte de ser um mantenedor é assumir um papel de suporte. Não se espera que você forneça suporte geral (mas você é bem vindo se você optar por fazê-lo). O que você deve fornecer é um ponto de coordenação para problemas específicos do FreeBSD relacionados aos seus ports.
-* *Caça aos bugs* Um port pode ser afetado por bugs específicos do FreeBSD. Você precisará investigar, encontrar e consertar estes bugs quando forem reportados. Testar meticulosamente um port para identificar todos os seus possíveis problemas antes que ele seja adicionado à Coleção de Ports é ainda melhor.
+* *Procura de bugs.* Um port pode ser afetado por bugs específicos do FreeBSD. Você precisará investigar, encontrar e corrigir esses bugs quando forem relatados. Testar minuciosamente um port para identificar problemas antes que eles sejam incluídos na Coleção de Ports é ainda melhor.
-* *Alterações na infraestrutura e política de ports.* Ocasionalmente os sistemas utilizados para construir os ports e pacotes são atualizados ou uma nova recomendação que afeta a infraestrutura é realizada. Você deverá estar atento a estas mudanças caso seus ports sejam afetados e necessitem de atualização.
+* *Mudanças na infraestrutura e políticas dos ports.* Às vezes, os sistemas usados para compilar ports e pacotes são atualizados ou uma nova recomendação que afeta a infraestrutura é feita. Você deve estar ciente dessas mudanças no caso de seus ports serem afetados e precisarem de atualização.
-* *Mudanças no sistema base.* O FreeBSD está em constante desenvolvimento. Mudanças no software, bibliotecas, kernel ou até mesmo mudanças de políticas podem resultar em necessidade de mudança nos ports.
+* *Mudanças no sistema base.* O FreeBSD está em constante desenvolvimento. Mudanças no software, bibliotecas, kernel ou até mesmo mudanças de política podem causar a necessidade de alterações em cascata nos ports.
==== Responsabilidades do mantenedor
-===== Manter seus ports atualizados
+===== Mantenha seus ports atualizados
Esta seção descreve o processo a ser seguido para manter seus ports atualizados.
-Esta é uma visão geral. Mais informações sobre a atualização de um port está disponível no link:{porters-handbook}[Porter's Handbook].
+Este é um resumo. Mais informações sobre atualização de um port estão disponíveis no extref:{porters-handbook}[Handbook do mantenedor de ports].
[.procedure]
+====
. Preste atenção às atualizações
-+
-Monitorar os fabricantes upstream em relação a liberação de novas versões, patches e correções de segurança para o software. Listas de discussão de anúncios ou páginas web de noticias sobre o software são úteis para este propósito. Algumas vezes os usuários entrarão em contato com você perguntando quando seu port será atualizado. Se você estiver ocupado com outras atividades ou devido a qualquer outra razão não puder realizar a atualização naquele momento, pergunte se o usuário pode te ajudar enviando uma atualização.
-+
-Você também pode receber emails automáticos do `Verificador de Versões de Ports do FreeBSD` informando a você que uma nova versão do disftile do seu port está disponível. Mais informações sobre este sistema (incluindo como deixar de receber seus emails no futuro) serão enviadas na mensagem.
++
+Monitorar os fabricantes upstream em relação a liberação de novas versões, patches e correções de segurança para o software. Listas de discussão e de anúncios ou páginas web de noticias sobre o software são úteis para este propósito. Algumas vezes os usuários entrarão em contato com você perguntando quando seu port será atualizado. Se você estiver ocupado com outras atividades ou devido a qualquer outra razão não puder realizar a atualização naquele momento, pergunte se o usuário pode te ajudar enviando uma atualização.
++
+Você também pode receber e-mails automáticos do `FreeBSD Ports Version Check` informando que uma versão mais recente do arquivo de distribuição do seu port está disponível. Mais informações sobre esse sistema (incluindo como interromper futuros e-mails) serão fornecidas na mensagem.
. Incorporar mudanças
-+
-Quando estiverem disponíves, incorpore as mudanças em seu port. Você precisa ser capaz de gerar um patch entre o port original e o port atualizado.
-. Revisão e teste
-+
-Examine cuidadosamente e teste as suas mudanças
-
-** Compile, instale e teste o seu port em todas plataformas e arquiteturas que você puder. É comum um port funcionar em uma branch ou plataforma e falhar em outra.
-** Certifique-se de que as dependências do seu port estão completas. A maneira recomendada de fazer isso é instalando seu próprio ports tinderbox. Consulte a seção sobre <<resources>> para mais informações.
-** Verifique se a lista de componentes do pacote está atualizada. Isto envolve adicionar novos arquivos e diretórios , bem como remover as entradas sem uso.
-** Verifique seu port usando o man:portlint[1] como um guia. Consulte a seção sobre <<resources>> para informações importantes sobre o uso do portlint.
-** Considere se as mudanças no seu port podem fazer com que outros ports tenham problemas. Se este for o caso, coordene as mudanças com os mantenedores destes ports. Isto é especialmente importante se a sua atualização modifica a versão de uma biblioteca compartilhada; neste caso, os ports afetados precisarão obter no mínimo um incremento no seu `PORTREVISION` para que eles possam ser atualizados automaticamente por ferramentas automatizadas como o portmaster ou o man:portupgrade[1].
++
+Quando estiverem disponíveis, incorpore as alterações no port. Você precisa ser capaz de gerar um patch entre o port original e o seu port atualizado.
+. Revisão e testes
++
+Examine cuidadosamente e teste as suas mudanças:
+
+** Compile, instale e teste seu port em quantas plataformas e arquiteturas puder. É comum um port funcionar em um branch ou plataforma e falhar em outro.
+** Certifique-se de que as dependências do seu port estejam completas. A maneira recomendada de fazer isso é instalando o seu próprio tinderbox. Consulte <<resources>> para obter mais informações.
+** Verifique se a lista de pacotes está atualizada. Isso envolve adicionar quaisquer novos arquivos e diretórios e remover entradas não utilizadas.
+** Verifique seu port usando o comando man:portlint[1] como guia. Consulte <<resources>> para obter informações importantes sobre o uso do portlint.
+** Considere se as alterações em seu port podem fazer com que outros ports se quebrem. Se for o caso, coordene as alterações com os mantenedores desses ports. Isso é especialmente importante se sua atualização alterar a versão da biblioteca compartilhada; nesse caso, pelo menos os ports dependentes precisarão receber um incremento no `PORTREVISION` para que sejam atualizados automaticamente por ferramentas automatizadas, como portmaster ou man:portupgrade[1].
. Envie as alterações
-+
-Submeta sua atualização enviando um relatório de problema (PR) com uma explicação das alterações e um patch contendo as diferenças entre o port original e a versão atualizada. Por favor, consulte o artigo link:{problem-reports}[Escrevendo um Relatório de Problema para o FreeBSD] para mais informações sobre como escrever um PR realmente bom.
++
+Envie sua atualização submetendo um PR com uma explicação das alterações e um patch contendo as diferenças entre o port original e o atualizado. Consulte o extref:{problem-reports}[Redação de Relatórios de Problemas do FreeBSD] para obter informações sobre como escrever um PR realmente bom.
+
[NOTE]
-====
-Por favor não submeta um arquivo man:shar[1] do port inteiro, ao invés disso, utilize o comando man:diff[1] `-ruN`. Desta forma, os committers podem ver com mais facilidade exatamente quais alterações estão sendo feitas. Consulte a seção link:{porters-handbook}#port-upgrading[Upgrading] do Porter's Handbook para maiores informações.
-====
+======
+Por favor, não envie um arquivo man:shar[1] do port inteiro; em vez disso, use man:git-format-patch[1] ou man:diff[1] `-ruN`. Dessa forma, os committers podem ver com muito mais facilidade exatamente quais mudanças estão sendo feitas. A seção extref:{porters-handbook}[Atualização, port-upgrading] do Handbook do Mantenedor de Ports contém mais informações.
+======
. Aguarde
-+
-Em algum momento, um commiter lidará com o seu PR. Isto pode levar alguns minutos ou pode levar semanas - portanto, seja paciente.
++
+Em algum momento, um committer lidará com o seu PR. Isso pode levar minutos ou pode levar uma ou duas semanas - portanto, tenha paciência. Se levar mais tempo, procure ajuda em listas de discussão ({freebsd-ports}), no IRC: #bsdports na EFNet ou #freebsd-ports na Libera, por exemplo.
. Dê feedback
-+
-Se um committer encontrar um problema nas suas alterações, ele provavelmente o encaminhará de volta para você. Uma resposta rápida a este contato irá ajudá-lo a ter o seu PR resolvido mais rapidamente. É muito importante manter o canal de comunicação aberto para agilizar a resolução de qualquer eventual problema.
++
+Se um committer encontrar um problema com as suas alterações, eles provavelmente o encaminharão de volta para você. Uma resposta rápida ajudará a obter a aprovação do seu PR mais rapidamente e é melhor para manter uma conversa ao tentar resolver qualquer problema.
. E finalmente
-+
-As suas alterações serão incorporadas na arvore de código fonte e o seu port será atualizado. O PR então será fechado pelo committer. É isso!
++
+Suas alterações serão incorporadas e o seu port será atualizada. O PR será então fechado pelo committer. É isso aí!
+====
-===== Certifique-se de que seus ports continuem a ser compilados corretamente
+===== Garanta que seus ports continuem a ser compilados corretamente
Esta seção é sobre a descoberta e a solução de problemas que fazem seus ports deixarem de ser compilados corretamente.
-O projeto FreeBSD garante o funcionamento da coleção de Ports apenas na branch `-STABLE`. Teoricamente, você deve será capaz de garantir o funcionamento do port ao executá-lo na ultima release de cada branch(já que não se espera que as ABIs mudem), mas se você puder executar a branch, será ainda melhor.
+O FreeBSD garante o funcionamento da Coleção de Ports apenas nos branches `-STABLE`. Em teoria, você deveria ser capaz de rodar a versão mais recente de cada branch estável (já que as ABIs não devem mudar), mas se puder rodar o branch, isso é ainda melhor.
-Como a maioria das instalações do FreeBSD rodam em máquinas compatíveis com o PC (o que é chamado de arquitetura `i386`), esperamos que você mantenha o port funcionando nesta arquitetura. Nós preferimos que os ports também funcionem de forma nativa na arquitetura `amd64`. É completamente justo pedir ajuda caso você não tenha uma dessas máquinas para fazer seus testes.
+Como a maioria das instalações do FreeBSD é executada em máquinas compatíveis com PC (o que é chamado de arquitetura `i386`), esperamos que você mantenha o port funcionando nessa arquitetura. Preferimos que os ports também funcionem na arquitetura `amd64` executando nativamente. É completamente justo pedir ajuda se você não tiver uma dessas máquinas.
[NOTE]
====
-Os padrões usuais nas falhas para máquinas não-`x86` são que os programadores originais assumiram que, por exemplo, os ponteiros são `int`-s, ou que um compilador gcc mais antigo seria utilizado. Cada vez mais, os autores de aplicativos estão retrabalhando o código das suas aplicações para remover essas suposições - mas se o autor não estiver mantendo ativamente o código, talvez seja necessário que você mesmo faça isso.
+Os modos comuns de falha para máquinas não-`x86` são que os programadores originais assumiram, por exemplo, que os ponteiros são `int`, ou que um compilador gcc mais antigo e relativamente relaxado estava sendo usado. Cada vez mais, os autores de aplicativos estão retrabalhando seu código para remover essas suposições - mas se o autor não estiver mantendo ativamente seu código, você pode precisar fazer isso sozinho.
====
-Estas são as tarefas que você precisa executar para garantir que o seu port pode ser compilado:
+Estas são as tarefas que você precisa realizar para garantir que o seu port possa ser compilado:
[.procedure]
-. Preste atenção para falhas de compilação
-+
-Confira o seu e-mail e busque por mensagens do `pkg-fallout@FreeBSD.org` e consulte o http://portscout.FreeBSD.org[scanner de arquivos distfiles] para verificar se algum dos ports que estão falhando na compilação estão desatualizados.
+====
+. Fique atento a falhas na compilação
++
+Verifique seu e-mail para ver se há mensagens de `pkg-fallout@FreeBSD.org` e do http://portscout.FreeBSD.org[scanner de distfiles] para ver se algum dos ports que estão falhando na compilação está desatualizado.
. Colete informação
-+
-Quando você estiver ciente de um problema, colete informações para ajudá-lo a solucioná-lo. Os erros de compilação relatados pelo `pkg-fallout` são acompanhados por logs que mostram onde a compilação falhou. Se a falha foi reportada para você por um usuário, peça para que ele lhe envie informações que possam ajudar no diagnóstico do problema, tais como:
++
+Assim que você estiver ciente de um problema, colete informações para ajudá-lo a corrigi-lo. Os erros de compilação relatados pelo `pkg-fallout` são acompanhados por logs que mostrarão onde a compilação falhou. Se a falha foi relatada por um usuário, peça a eles que enviem informações que possam ajudar a diagnosticar o problema, tais como:
** Logs de compilação
** Os comandos e opções usados para compilar o port (incluindo opções definidas no [.filename]#/etc/make.conf#)
-** Uma lista dos pacotes instalados no sistema como mostrado pelo comando man:pkg-info[8]
-** A versão do FreeBSD que ele está executando como mostrado pelo comando man:uname[1] `-a`
-** Quando a coleção de ports dele foi atualizada pela última vez
-** Quando a árvore de ports e o arquivo [.filename]#INDEX# dele foram atualizados pela última vez
+** Uma lista de pacotes instalados no seu sistema, conforme mostrado por man:pkg-info[8]
+** A versão do FreeBSD que estão executando, conforme mostrado por man:uname[1] `-a`
+** Quando a coleção de ports foi atualizada pela última vez
+** Quando a sua coleção de ports e o arquivo [.filename]#INDEX# foram atualizados pela última vez
. Investigue e encontre uma solução
-+
-Infelizmente não existe nenhum processo direto a ser seguido para fazer isso. Porém, lembre-se: se você está emperrado, peça ajuda! A http://lists.FreeBSD.org/mailman/listinfo/freebsd-ports[lista de discussão de ports do FreeBSD] é um bom lugar para começar, e os desenvolvedores de upstream são frequentemente muito prestativos.
++
+Infelizmente, não há um processo direto a seguir para fazer isso. Lembre-se, no entanto: se estiver travado, peça ajuda! O {freebsd-ports} é um bom lugar para começar, e os desenvolvedores upstream geralmente são muito prestativos.
. Envie as alterações
-+
++
Assim como na atualização de um port, agora você deve incorporar as alterações, revisar, testar e enviar suas alterações em um relatório de problemas (PR) e fornecer feedback, se solicitado.
. Envie os patches para os autores upstream
-+
-Em alguns casos, você terá que fazer um patch para que um port execute no FreeBSD. Alguns (mas não todos) autores upstream aceitarão incorporar tais patches em seu código na próxima versão. Se eles aceitarem, isto poderá até ajudar os usuários de outros sistemas BSD e talvez evitar um esforço duplicado. Por favor, considere o envio aos autores de quaisquer patches aplicáveis como uma cortesia.
++
+Em alguns casos, você terá que fazer patches no port para fazê-lo funcionar no FreeBSD. Alguns (mas não todos) os autores upstream aceitarão tais patches em seu código para a próxima versão. Se for o caso, isso pode até ajudar seus usuários em outros sistemas baseados em BSD e talvez economizar esforço duplicado. Considere enviar quaisquer patches aplicáveis aos autores como uma cortesia.
+====
===== Investigue relatórios de bugs e PRs relacionados ao seu port
Esta seção é sobre como descobrir e corrigir bugs.
-Bugs específicos do FreeBSD são causados geralmente por suposições sobre os ambientes de compilação e execução que não se aplicam ao FreeBSD. É pouco provável que você encontre um problema desse tipo, mas se encontrar ele poderá ser mais sutil e difícil de diagnosticar.
+Os bugs específicos do FreeBSD são geralmente causados por suposições sobre os ambientes de compilação e de tempo de execução que não se aplicam ao FreeBSD. É menos provável que você encontre um problema desse tipo, mas ele pode ser mais sutil e difícil de diagnosticar.
-Estas são as tarefas que você precisa executar para garantir que o seu port continuará funcionando como pretendido:
+Essas são as tarefas que você precisa realizar para garantir que seu port continue funcionando conforme o esperado:
[.procedure]
+====
. Responda os relatórios de bugs
-+
-Bugs podem ser reportados para você por e-mail através do https://bugs.FreeBSD.org/search/[Sistema de Relatório de Problemas]. Os bugs também podem ser reportados diretamente a você pelos usuários.
-+
-Você deve responder os PRs (Relatório de Problemas) e outros relatórios dentro de 14 dias, mas por favor, tente não levar tanto tempo. Tente responder o mais rápido possível, mesmo que seja apenas para dizer que você precisa de mais algum tempo antes de poder trabalhar no PR.
-+
-Se você não tiver respondido após 14 dias, qualquer committer poderá efetuar o commit de um PR que você não tenha respondido por meio da regra de `maintainer-timeout`.
++
+Os bugs podem ser relatados a você por e-mail através do https://bugs.FreeBSD.org/search/[banco de dados de relatórios de problemas]. Os bugs também podem ser relatados diretamente a você pelos usuários.
++
+Você deve responder a PRs e outros relatórios dentro de 14 dias, mas tente não levar tanto tempo. Tente responder o mais rápido possível, mesmo que seja apenas para dizer que você precisa de mais tempo antes de poder trabalhar no PR.
++
+Se você não respondeu após 14 dias, qualquer committer pode fazer o commit de um PR que você não respondeu através de um `maintainer-timeout`.
. Colete informação
-+
-Se a pessoa que reportou o bug não tiver fornecido uma correção, você precisará coletar as informações que permitirão gerar uma.
-+
-Se o bug for reproduzível, você poderá coletar a maior parte das informações necessárias você mesmo. Caso contrário, peça à pessoa que relatou o bug para coletar as informações para você, tais como:
++
+Se a pessoa que reportou o bug também não forneceu uma correção, você precisa coletar as informações que permitirão gerar uma correção.
++
+Se o erro puder ser reproduzido, você pode coletar a maioria das informações necessárias por conta própria. Caso contrário, peça para a pessoa que relatou o erro coletar as informações para você, como:
-** Uma descrição detalhada das suas ações, comportamento esperado e comportamento real do aplicativo
+** Uma descrição detalhada das ações realizadas, comportamento esperado do programa e comportamento atual
** Cópias dos dados de entrada usados para acionar o bug
-** Informações sobre seu ambiente de compilação e execução - por exemplo, uma lista de pacotes instalados e a saída de man:env[1]
+** Informações sobre o ambiente de compilação e execução - por exemplo, uma lista de pacotes instalados e a saída de man:env[1]
** Core dumps
** Stack traces
. Elimine os relatórios incorretos
-+
-Alguns relatórios de erros podem estar incorretos. Por exemplo, o usuário pode ter simplesmente usado de forma errada o programa; ou seus pacotes instalados podem estar desatualizados e precisam ser atualizados. Às vezes, um bug relatado não é específico do FreeBSD. Neste caso relate o bug para os desenvolvedores upstream. Se você for capaz de corrigir o bug, você também poderá criar um patch do port para que a correção seja aplicada antes da próxima versão do upstream.
++
+Algumas notificações de bugs podem estar incorretas. Por exemplo, o usuário pode ter simplesmente utilizado o programa de forma inadequada ou seus pacotes instalados podem estar desatualizados e precisarem ser atualizados. Às vezes, um bug reportado não é específico do FreeBSD. Nesse caso, reporte o bug para os desenvolvedores upstream. Se o bug estiver dentro de suas capacidades de corrigir, você também pode corrigir o port para que a correção seja aplicada antes do próximo release upstream.
. Encontre uma solução
-+
++
Tal como acontece com erros de compilação, você precisará encontrar uma correção para o problema. Mais uma vez, lembre-se de perguntar se você estiver emperrado!
. Envie ou aprove alterações
-+
-Assim como na atualização de um port, agora você deve incorporar alterações, revisar, testar e enviar suas alterações em um PR (ou enviar um follow-up se já existir um PR para o problema). Se outro usuário tiver enviado alterações no PR, você também poderá enviar um follow-up dizendo se aprova ou não as alterações.
++
+Assim como na atualização de um port, você deve incorporar as mudanças, revisar e testar e enviar suas mudanças em um PR (ou enviar um acompanhamento se já existir um PR para o problema). Se outro usuário tiver enviado mudanças no PR, você também pode enviar um acompanhamento dizendo se aprova ou não as mudanças.
+====
===== Forneça Suporte
-Parte de ser um mantenedor é prover suporte - não para o software em geral - mas para o port e quaisquer peculiaridades e problemas específicos dele no FreeBSD. Os usuários podem entrar em contato com dúvidas, sugestões, problemas e patches. Na maioria das vezes, sua correspondência será específica para o FreeBSD.
+Parte de ser um mantenedor é fornecer suporte - não para o software em geral - mas para o port e quaisquer peculiaridades e problemas específicos do FreeBSD. Os usuários podem entrar em contato com você com perguntas, sugestões, problemas e patches. Na maioria das vezes, a correspondência deles será específica para o FreeBSD.
-Ocasionalmente, você pode ter que invocar suas habilidades diplomáticas, e gentilmente, direcionar os usuários que buscam suporte genérico para os recursos apropriados. Com menos frequência você encontrará uma pessoa perguntando por que os `RPMS` não estão atualizados ou como eles podem fazer o software rodar sob o Foo Linux. Aproveite a oportunidade para dizer a eles que o seu port está atualizado (se estiver, é claro!) e sugira que eles experimentem o FreeBSD.
+Ocasionalmente, você pode ter que invocar suas habilidades em diplomacia e gentilmente direcionar usuários que buscam suporte geral para os recursos apropriados. Com menos frequência, você encontrará alguém perguntando por que os `RPMS` não estão atualizados ou como eles podem fazer o software rodar no Foo Linux. Aproveite a oportunidade para dizer que seu port está atualizado (se estiver, é claro!) e sugira que eles experimentem o FreeBSD.
Às vezes, os usuários e os desenvolvedores podem decidir que você é uma pessoa ocupada cujo tempo é valioso e farão parte do trabalho para você. Por exemplo, eles podem:
@@ -374,52 +413,54 @@ Ocasionalmente, você pode ter que invocar suas habilidades diplomáticas, e gen
* investigar e talvez fornecer uma correção para um PR, ou
* caso contrário, enviar alterações para o seu port.
-Nestes casos, a sua principal obrigação é responder rapidamente. Mais uma vez, o tempo limite para mantenedores não responsivos é de 14 dias. Após esse período, as alterações podem ser aceitas mesmo sem terem sido aprovadas. Eles se deram ao trabalho de fazer isso por você; por favor, tente pelo menos responder prontamente. Em seguida, revise, aprove, modifique ou discuta as alterações com eles o mais rápido possível.
+Nesses casos, sua principal obrigação é responder de forma rápida. Novamente, o prazo para mantenedores não responsivos é de 14 dias. Após esse período, as alterações podem ser realizadas sem aprovação. Eles fizeram o esforço para ajudá-lo, então tente pelo menos responder prontamente. Em seguida, revise, aprove, modifique ou discuta as alterações com eles o mais rápido possível.
Se você puder fazê-los sentir que a contribuição deles é apreciada (e deveria ser), você terá uma chance maior de persuadi-los a fazer mais coisas para você no futuro :-).
[[fix-broken]]
=== Encontre e conserte um port quebrado
-Existem dois lugares realmente bons para se encontrar um port que precisa de alguma atenção.
+Existem alguns bons lugares para encontrar um port que precisa de atenção.
+
+Você pode usar a https://bugs.freebsd.org/search[interface web] do banco de dados de Relatórios de Problemas para pesquisar e visualizar relatórios de problemas não resolvidos. A maioria dos relatórios de problemas para os ports são atualizações, mas com uma pequena busca e leitura das sinopses você deverá ser capaz de encontrar algo interessante para trabalhar (a classe `sw-bug` é um bom lugar para começar).
-Você pode usar a https://bugs.freebsd.org/search[interface web] do banco de dados dos Relatório de Problemas para pesquisar e visualizar os PRs não resolvidos. A maioria dos PRs relacionados aos ports são atualizações, mas com um pouco de pesquisa e análise das sinopses você deve encontrar algo interessante para trabalhar (a classe `bug-bug` é um bom lugar para começar).
+O https://portsfallout.com/[PortsFallout] mostra problemas de ports coletados durante a compilação de pacotes no FreeBSD.
-O outro lugar é o http://portsmon.FreeBSD.org/[Sistema de Monitoramento de Ports do FreeBSD]. Em particular, procure por ports sem mantenedores com erros de compilação e por ports marcados com `BROKEN`. Não existe nenhum problema em também enviar alterações para um port com um mantenedor ativo, mas antes lembre-se de consultar o mantenedor para o caso dele já estar trabalhando no problema.
+Também é OK enviar alterações para um port que possui um mantenedor, mas lembre-se de perguntar ao mantenedor no caso de já estarem trabalhando no problema.
-Depois de encontrar um bug ou problema, colete informações, investigue e corrija! Se houver um PR existente, de seguimento a ele. Caso contrário, crie um novo PR. Suas alterações serão analisadas e, se tudo estiver OK, elas serão aceitas e incorporadas.
+Depois de encontrar um bug ou problema, colete informações, investigue e corrija! Se houver um PR existente, faça um follow-up nela. Caso contrário, crie um novo PR. Suas alterações serão revisadas e, se tudo estiver correto, serão comitadas.
[[mortal-coil]]
-=== Quando parar
+=== Quando desistir
À medida que seus interesses e compromissos mudam, você pode descobrir que não tem mais tempo para continuar com algumas (ou todas) as suas contribuições para a coleção de ports. Tudo bem! Por favor, nos avise se você não estiver mais usando um port ou se não tiver mais tempo ou interesse em ser um mantenedor. Desta forma, podemos seguir em frente e permitir que outras pessoas tentem trabalhar nos problemas existentes com o port sem termos que esperar por sua resposta. Lembre-se, o FreeBSD é um projeto voluntário, então se a manutenção de um port não for mais divertida, provavelmente é hora de deixar alguém fazer isso!
-De qualquer forma, a Equipe de Gerenciamento da Coleção de Ports (`portmgr`) reserva-se o direito de redefinir o seu status de mantenedor se você não tiver mantido ativamente o seu port durante um determinado período de tempo. (Atualmente, este período é definido como 3 meses.) Com isso, queremos dizer que existem problemas não resolvidos ou atualizações pendentes que não foram tratadas por você durante esse período.
+Em qualquer caso, a equipe de gerenciamento de ports (`portmgr`) se reserva o direito de redefinir sua posição de mantenedor se você não mantiver ativamente seu port por algum tempo. (Atualmente, este tempo é de 3 meses.) Com isso, queremos dizer que existem problemas não resolvidos ou atualizações pendentes que não foram trabalhadas durante esse tempo.
[[resources]]
=== Recursos para mantenedores de ports e contribuidores
-O link:{porters-handbook}[Porter's Handbook] é o seu Guia de Mochileiro para o sistema de ports. Mantenha-o à mão!
+O extref:{porters-handbook}[Handbook do Mantenedor de Ports] é o seu guia do sistema de ports. Mantenha-o sempre à mão!
-O artigo link:{problem-reports}[Escrevendo um relatório de problemas para o FreeBSD] descreve como melhor formular e enviar um PR. Em 2005, foram submetidos mais de onze mil relatórios de problemas relacionados aos ports! Ao seguir as boas práticas descritas neste artigo você nos ajudará a reduzir em muito o tempo necessário para lidar com seus PRs.
+o artigo extref:{problem-reports}[Escrevendo Relatórios de Problemas do FreeBSD] descreve como formular e submeter um PR da melhor maneira possível. Em 2005, mais de onze mil PRs de ports foram submetidos! Seguir este artigo ajudará muito a reduzir o tempo necessário para lidar com seus PRs.
-O https://bugs.freebsd.org/bugzilla/query.cgi[Banco de dados de problemas reportados].
+O https://bugs.freebsd.org/bugzilla/query.cgi[banco de dados de Relatórios de Problemas].
-O http://portsmon.FreeBSD.org/[Sistema de Monitoramento de Ports do FreeBSD] pode mostrar informações cruzadas sobre os ports, tais como erros de compilação e relatórios de problemas. Se você é um mantenedor, você pode usá-lo para verificar o status de compilação dos seus ports. Como colaborador, você pode usá-lo para encontrar ports quebrados e ports sem um mantenedor ativo que precisam ser consertados.
+O http://portscout.FreeBSD.org[scanner de arquivos de distribuição de ports do FreeBSD (portscout)] pode mostrar os ports para os quais os arquivos de distribuição não podem ser baixados. Você pode verificar os seus próprios ports ou usá-lo para encontrar ports que precisam atualizar seus `MASTER_SITES`.
-O http://portscout.FreeBSD.org[scanner de arquivos distfile] da coleção de ports do FreeBSD pode lhe mostrar os ports para os quais os arquivos distfiles não estão disponíveis. Você pode utilizá-lo para verificar seus próprios ports ou para encontrar ports que precisam ter seu `MASTER_SITES` atualizado.
+O package:ports-mgmt/poudriere[] é a maneira mais completa de testar um port por todo o ciclo de instalação, empacotamento e desinstalação. A documentação está localizada no https://github.com/freebsd/poudriere[repositório do GitHub do poudriere]
-O uso do package:ports-mgmt/poudriere[] é a maneira mais completa de testar um port durante todo o ciclo de instalação, empacotamento e desinstalação. A documentação está localizada no https://github.com/freebsd/poudriere[Repositório do poudriere no github]
+O man:portlint[1] é um aplicativo que pode ser usado para verificar se o seu port está em conformidade com muitas diretrizes estilísticas e funcionais importantes. O portlint é uma aplicação heurística simples, portanto, você deve usá-lo __apenas como guia__. Se o portlint sugerir mudanças que parecem inaceitáveis, consulte o extref:{porters-handbook}[Porter's Handbook] ou peça conselhos.
-O man:portlint[1] é uma aplicação que pode ser utilizada para verificar se o seu port está em conformidade com muitas diretrizes importantes de estilo e função. O portlint é um aplicativo heurístico simples, portanto você deve usá-lo __apenas como um guia__. Se o portlint sugerir alterações que não sejam razoáveis, consulte o link:{porters-handbook}[Porter's Handbook] ou peça conselhos.
+A {freebsd-ports} é o local para discussões gerais relacionadas a ports. É um bom lugar para pedir ajuda. Você pode se link:https://lists.freebsd.org/[inscrever], ou ler e pesquisar os arquivos da lista. Ler os arquivos das listas {freebsd-ports-bugs} e {svn-ports-head} também pode ser interessante.
-A http://lists.FreeBSD.org/mailman/listinfo/freebsd-ports[Lista de discussão de ports do FreeBSD ] é destinada para discussões gerais relacionadas aos ports. É um bom lugar para pedir ajuda. Você pode se https://lists.freebsd.org/mailman/listinfo[inscrever, ler e pesquisar os arquivos da lista]. Ler os arquivos da http://lists.FreeBSD.org/mailman/listinfo/freebsd-ports-bugs[Lista de discussão sobre bugs dos ports do FreeBSD] e as http://lists.FreeBSD.org/mailman/listinfo/svn-ports-head[mensagens de commit no SVN da árvore de ports para head/] também pode ser interessante.
+O https://portsfallout.com/[PortsFallout] é um site útil para buscar informações no https://lists.freebsd.org/archives/freebsd-pkg-fallout/[arquivo de erros de pacotes do FreeBSD].
[[ideas-contributing]]
== Começando em outras áreas
Procurando por algo interessante para começar, e que não foi mencionado em outras partes deste artigo? O Projeto FreeBSD tem várias páginas Wiki contendo áreas nas quais novos colaboradores podem ter ideias sobre como começar.
-A página https://wiki.freebsd.org/JuniorJobs[Júnior Jobs] tem uma lista de projetos que podem ser de interesse para pessoas que estão apenas começando no FreeBSD, e querem trabalhar em coisas interessantes para molhar os pés.
+A página https://wiki.freebsd.org/JuniorJobs[Junior Jobs] contém uma lista de projetos que podem interessar pessoas que estão começando no FreeBSD e querem trabalhar em coisas interessantes para se familiarizar com o sistema.
-A https://wiki.freebsd.org/IdeasPage[Página de Idéias] contém várias coisas "legais" ou "interessantes" para se trabalhar no Projeto.
+A https://wiki.freebsd.org/IdeasPage[página de idéias] contém várias sugestões de projetos "interessantes" ou "nice to have" para trabalhar no projeto.
diff --git a/documentation/content/pt-br/articles/contributing/_index.po b/documentation/content/pt-br/articles/contributing/_index.po
new file mode 100644
index 0000000000..509f2305dc
--- /dev/null
+++ b/documentation/content/pt-br/articles/contributing/_index.po
@@ -0,0 +1,2187 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-27 23:36+0000\n"
+"PO-Revision-Date: 2023-04-27 23:35+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlescontributing_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/contributing/_index.adoc:1
+#, no-wrap
+msgid "How to contribute to the FreeBSD Project"
+msgstr "Como contribuir para o Projeto FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/contributing/_index.adoc:1
+#: documentation/content/en/articles/contributing/_index.adoc:13
+#, no-wrap
+msgid "Contributing to FreeBSD"
+msgstr "Contribuindo com o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:46
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:48
+msgid ""
+"This article describes the different ways in which an individual or "
+"organization may contribute to the FreeBSD Project."
+msgstr ""
+"Este artigo descreve maneiras diferentes sobre como um indivíduo ou "
+"organização pode contribuir com o Projeto FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:50
+msgid "'''"
+msgstr "'''"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:55
+msgid ""
+"So you want to contribute to FreeBSD? That is great! FreeBSD _relies_ on the "
+"contributions of its user base to survive. Your contributions are not only "
+"appreciated, they are vital to FreeBSD's continued growth."
+msgstr ""
+"Então você quer contribuir para o FreeBSD? Isso é ótimo! O FreeBSD _depende_ "
+"das contribuições de sua base de usuários para sobreviver. Suas "
+"contribuições não são apenas apreciadas, elas são vitais para o crescimento "
+"contínuo do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:58
+msgid ""
+"A large and growing number of international contributors, of greatly varying "
+"ages and areas of technical expertise, develop FreeBSD. There is always "
+"more work to be done than there are people available to do it, and more help "
+"is always appreciated."
+msgstr ""
+"Um grande e crescente número de colaboradores internacionais, de idades e "
+"áreas de experiência técnica muito diversas, desenvolvem o FreeBSD. Sempre "
+"há mais trabalho a ser feito do que pessoas disponíveis para fazê-lo, e mais "
+"ajuda sempre é apreciada."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:62
+msgid ""
+"As a volunteer, what you do is limited only by what you want to do. "
+"However, we do ask that you are aware of what other members of the FreeBSD "
+"community will expect of you. You may want to take this into account before "
+"deciding to volunteer."
+msgstr ""
+"Como voluntário, o que você faz é limitado apenas pelo que você quer fazer. "
+"No entanto, pedimos que você esteja ciente do que outros membros da "
+"comunidade FreeBSD esperarão de você. Você pode querer levar isso em "
+"consideração antes de decidir ser um voluntário."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:66
+msgid ""
+"The FreeBSD project is responsible for an entire operating system "
+"environment, rather than just a kernel or a few scattered utilities. As "
+"such, our [.filename]#TODO# lists span a very wide range of tasks: from "
+"documentation, beta testing and presentation, to the system installer and "
+"highly specialized types of kernel development. People of any skill level, "
+"in almost any area, can almost certainly help the project."
+msgstr ""
+"O projeto FreeBSD é responsável por um ambiente completo de sistema "
+"operacional, em vez de apenas um kernel ou alguns utilitários espalhados. "
+"Como tal, nossas listas de [.filename]#TODO# abrangem uma ampla gama de "
+"tarefas: desde documentação, teste beta e apresentação, até o instalador do "
+"sistema e tipos altamente especializados de desenvolvimento de kernel. "
+"Pessoas de qualquer nível de habilidade, em quase qualquer área, certamente "
+"podem ajudar o projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:71
+msgid ""
+"Commercial entities engaged in FreeBSD-related enterprises are also "
+"encouraged to contact us. Do you need a special extension to make your "
+"product work? You will find us receptive to your requests, given that they "
+"are not too outlandish. Are you working on a value-added product? Please "
+"let us know! We may be able to work cooperatively on some aspect of it. The "
+"free software world is challenging many existing assumptions about how "
+"software is developed, sold, and maintained, and we urge you to at least "
+"give it a second look."
+msgstr ""
+"Empresas comerciais envolvidas em empreendimentos relacionados ao FreeBSD "
+"também são incentivadas a entrar em contato conosco. Precisa de uma extensão "
+"especial para fazer seu produto funcionar? Você nos encontrará receptivos às "
+"suas solicitações, desde que não sejam muito absurdas. Você está trabalhando "
+"em um produto de valor agregado? Por favor, nos informe! Podemos trabalhar "
+"cooperativamente em algum aspecto disso. O mundo do software livre está "
+"desafiando muitas suposições existentes sobre como o software é "
+"desenvolvido, vendido e mantido, e instamos você a pelo menos dar uma "
+"segunda olhada."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:73
+#, no-wrap
+msgid "What Is Needed"
+msgstr "O que é necessário"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:76
+msgid ""
+"The following list of tasks and sub-projects represents something of an "
+"amalgam of various [.filename]#TODO# lists and user requests."
+msgstr ""
+"A lista a seguir de tarefas e subprojetos representa algo como uma amálgama "
+"de várias listas de [.filename]#TODO# e de solicitações de usuários."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:78
+#, no-wrap
+msgid "Ongoing Non-Programmer Tasks"
+msgstr "Tarefas contínuas não relacionadas à programação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:83
+msgid ""
+"Many people who are involved in FreeBSD are not programmers. The Project "
+"includes documentation writers, Web designers, and support people. All that "
+"these people need to contribute is an investment of time and a willingness "
+"to learn."
+msgstr ""
+"Muitas pessoas envolvidas no FreeBSD não são programadoras. O Projeto inclui "
+"escritores de documentação, web designers e pessoas de suporte. Tudo o que "
+"essas pessoas precisam para contribuir é investir tempo e estar dispostas a "
+"aprender."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:85
+msgid ""
+"Read through the FAQ and Handbook periodically. If anything is poorly "
+"explained, ambiguous, out of date or incorrect, let us know. Even better, "
+"send us a fix (AsciiDoc is not difficult to learn, but there is no objection "
+"to plain text submissions)."
+msgstr ""
+"Leia periodicamente o FAQ e o Handbook. Se algo estiver mal explicado, "
+"ambíguo, desatualizado ou incorreto, avise-nos. Ainda melhor, envie-nos uma "
+"correção (AsciiDoc não é difícil de aprender, mas não há objeção a "
+"submissões em texto simples)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:86
+msgid ""
+"Help translate FreeBSD documentation into your native language. If "
+"documentation already exists for your language, you can help translate "
+"additional documents or verify that the translations are up-to-date and "
+"correct. First take a look at the extref:{fdp-primer}[Translations FAQ, "
+"translations] in the FreeBSD Documentation Project Primer. You are not "
+"committing yourself to translating every single FreeBSD document by doing "
+"this - as a volunteer, you can do as much or as little translation as you "
+"desire. Once someone begins translating, others almost always join the "
+"effort. If you only have the time or energy to translate one part of the "
+"documentation, please translate the installation instructions."
+msgstr ""
+"Ajude a traduzir a documentação do FreeBSD para seu idioma nativo. Se já "
+"existir documentação em seu idioma, você pode ajudar a traduzir documentos "
+"adicionais ou verificar se as traduções estão atualizadas e corretas. "
+"Primeiro, dê uma olhada no extref:{fdp-primer}[FAQ de traduções, "
+"translations] no FreeBSD Documentation Project Primer. Ao fazer isso, você "
+"não está se comprometendo a traduzir todos os documentos do FreeBSD - como "
+"voluntário, você pode traduzir tanto quanto desejar. Uma vez que alguém "
+"começa a traduzir, outros quase sempre se juntam ao esforço. Se você só tem "
+"tempo ou energia para traduzir uma parte da documentação, por favor, traduza "
+"as instruções de instalação."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:87
+msgid ""
+"Read the {freebsd-questions} occasionally (or even regularly). It can be "
+"very satisfying to share your expertise and help people solve their "
+"problems; sometimes you may even learn something new yourself! These forums "
+"can also be a source of ideas for things to improve upon."
+msgstr ""
+"Leia ocasionalmente (ou mesmo regularmente) a {freebsd-questions}. Pode ser "
+"muito satisfatório compartilhar sua expertise e ajudar as pessoas a "
+"resolverem seus problemas; às vezes, você pode até aprender algo novo! Esses "
+"fóruns também podem ser uma fonte de ideias para melhorias."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:89
+#, no-wrap
+msgid "Ongoing Programmer Tasks"
+msgstr "Tarefas contínuas para programadores"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:93
+msgid ""
+"Most of the tasks listed here may require a considerable investment of time, "
+"an in-depth knowledge of the FreeBSD kernel, or both. However, there are "
+"also many useful tasks which are suitable for \"weekend hackers\"."
+msgstr ""
+"A maioria das tarefas listadas aqui pode exigir um investimento considerável "
+"de tempo, um conhecimento aprofundado do kernel do FreeBSD, ou ambos. No "
+"entanto, também existem muitas tarefas úteis que são adequadas para "
+"\"hackers de fim de semana\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:95
+msgid ""
+"If you run FreeBSD-CURRENT and have a good Internet connection, there is a "
+"machine `current.FreeBSD.org` which builds a full release once a day-every "
+"now and again, try to install the latest release from it and report any "
+"failures in the process."
+msgstr ""
+"Se você está executando o FreeBSD-CURRENT e tem uma boa conexão com a "
+"Internet, há uma máquina chamada `current.FreeBSD.org` que cria uma versão "
+"completa uma vez por dia - de tempos em tempos, tente instalar a versão mais "
+"recente dela e relate quaisquer falhas no processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:96
+msgid ""
+"Read the {freebsd-bugs}. There may be a problem you can comment "
+"constructively on or with patches you can test. Or you could even try to fix "
+"one of the problems yourself."
+msgstr ""
+"Leia a {freebsd-bugs}. Pode haver um problema no qual você possa comentar de "
+"forma construtiva ou com patches que possa testar. Ou você poderia até mesmo "
+"tentar corrigir um dos problemas sozinho."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:97
+msgid ""
+"If you know of any bug fixes which have been successfully applied to -"
+"CURRENT but have not been merged into -STABLE after a decent interval "
+"(normally a couple of weeks), send the committer a polite reminder."
+msgstr ""
+"Se você souber de correções de bugs que foram aplicadas com sucesso ao -"
+"CURRENT, mas ainda não foram mescladas ao -STABLE após um intervalo razoável "
+"(normalmente algumas semanas), envie um lembrete educado ao committer "
+"responsável."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:98
+msgid ""
+"Move contributed software to [.filename]#src/contrib# in the source tree."
+msgstr ""
+"Mova o software contribuído para [.filename]#src/contrib# no diretório de "
+"código-fonte."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:99
+msgid "Make sure code in [.filename]#src/contrib# is up to date."
+msgstr ""
+"Certifique-se de que o código em [.filename]#src/contrib# esteja atualizado."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:100
+msgid ""
+"Build the source tree (or just part of it) with extra warnings enabled and "
+"clean up the warnings. A list of build warnings can also be found from our "
+"https://ci.freebsd.org[CI] by selecting a build and checking \"LLVM/Clang "
+"Warnings\"."
+msgstr ""
+"Compile o de código-fonte do sistema (ou apenas parte dele) com avisos "
+"extras ativados e limpe os avisos. Uma lista de avisos de compilação também "
+"pode ser encontrada em nosso https://ci.freebsd.org[CI] selecionando uma "
+"compilação e verificando \"LLVM/Clang Warnings\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:101
+msgid ""
+"Fix warnings for ports which do deprecated things like using `gets()` or "
+"including [.filename]#malloc.h#."
+msgstr ""
+"Corrija os avisos para ports que fazem coisas depreciadas, como usar "
+"`gets()` ou incluir [.filename]#malloc.h#."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:102
+msgid ""
+"If you have contributed any ports and you had to make FreeBSD-specific "
+"changes, send your patches back to the original authors (this will make your "
+"life easier when they bring out the next version)."
+msgstr ""
+"Se você contribuiu com quaisquer ports e teve que fazer mudanças específicas "
+"para o FreeBSD, envie seus patches de volta para os autores originais (isso "
+"facilitará sua vida quando eles lançarem a próxima versão)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:103
+msgid ""
+"Get copies of formal standards like POSIX(R). Compare FreeBSD's behavior to "
+"that required by the standard. If the behavior differs, particularly in "
+"subtle or obscure corners of the specification, send in a PR about it. If "
+"you are able, figure out how to fix it and include a patch in the PR. If you "
+"think the standard is wrong, ask the standards body to consider the question."
+msgstr ""
+"Obtenha cópias dos padrões formais, como o POSIX(R). Compare o comportamento "
+"do FreeBSD com o exigido pelo padrão. Se o comportamento for diferente, "
+"especialmente em cantos sutis ou obscuros da especificação, envie um PR "
+"sobre isso. Se puder, descubra como corrigi-lo e inclua um patch no PR. Se "
+"achar que o padrão está errado, peça ao organismo responsável pelos padrões "
+"para considerar a questão."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:104
+msgid "Suggest further tasks for this list!"
+msgstr "Sugira novas tarefas para esta lista!"
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:105
+#, no-wrap
+msgid "Work through the PR Database"
+msgstr "Trabalhe no Banco de Dados de PR (Relatório de Problema) do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:112
+msgid ""
+"The https://bugs.FreeBSD.org/search/[FreeBSD PR list] shows all the current "
+"active problem reports and requests for enhancement that have been submitted "
+"by FreeBSD users. The PR database includes both programmer and non-"
+"programmer tasks. Look through the open PRs, and see if anything there "
+"takes your interest. Some of these might be very simple tasks that just "
+"need an extra pair of eyes to look over them and confirm that the fix in the "
+"PR is a good one. Others might be much more complex, or might not even have "
+"a fix included at all."
+msgstr ""
+"A https://bugs.FreeBSD.org/search/[lista de PRs do FreeBSD] mostra todos os "
+"relatórios de problemas ativos e solicitações de aprimoramento que foram "
+"enviados pelos usuários do FreeBSD. O banco de dados de PRs inclui tarefas "
+"tanto para programadores quanto para não-programadores. Olhe através dos PRs "
+"abertos e veja se algo lhe interessa. Alguns desses podem ser tarefas muito "
+"simples que só precisam de um par extra de olhos para examiná-los e "
+"confirmar que a correção no PR é boa. Outros podem ser muito mais complexos, "
+"ou podem nem mesmo ter uma correção incluída."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:115
+msgid ""
+"Start with the PRs that have not been assigned to anyone else. If a PR is "
+"assigned to someone else, but it looks like something you can handle, email "
+"the person it is assigned to and ask if you can work on it-they might "
+"already have a patch ready to be tested, or further ideas that you can "
+"discuss with them."
+msgstr ""
+"Comece com os PRs que não foram atribuídos a mais ninguém. Se um PR foi "
+"atribuído a outra pessoa, mas parece algo que você pode lidar, envie um e-"
+"mail para a pessoa a quem foi atribuído e pergunte se você pode trabalhar "
+"nele - eles podem já ter um patch pronto para ser testado ou outras ideias "
+"que você possa discutir com eles."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:116
+#, no-wrap
+msgid "Ongoing Ports Tasks"
+msgstr "Tarefas contínuas relacionadas a coleção de ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:121
+msgid ""
+"The Ports Collection is a perpetual work in progress. We want to provide "
+"our users with an easy to use, up to date, high quality repository of third "
+"party software. We need people to donate some of their time and effort to "
+"help us achieve this goal."
+msgstr ""
+"A coleção de ports é um trabalho contínuo em andamento. Queremos fornecer "
+"aos nossos usuários um repositório de software de terceiros fácil de usar, "
+"atualizado e de alta qualidade. Precisamos que as pessoas doem parte de seu "
+"tempo e esforço para nos ajudar a alcançar esse objetivo."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:125
+msgid ""
+"Anyone can get involved, and there are lots of different ways to do so. "
+"Contributing to ports is an excellent way to help \"give back\" something to "
+"the project. Whether you are looking for an ongoing role, or a fun "
+"challenge for a rainy day, we would love to have your help!"
+msgstr ""
+"Qualquer um pode se envolver e há muitas maneiras diferentes de fazer isso. "
+"Contribuir para os ports é uma excelente maneira de ajudar a \"retribuir\" "
+"algo ao projeto. Se você está procurando um papel contínuo ou um desafio "
+"divertido para um dia chuvoso, adoraríamos ter a sua ajuda!"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:127
+msgid ""
+"There are a number of easy ways you can contribute to keeping the ports tree "
+"up to date and in good working order:"
+msgstr ""
+"Há várias maneiras fáceis de contribuir para manter a árvore de ports "
+"atualizada e em bom funcionamento:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:129
+msgid ""
+"Find some cool or useful software and extref:{porters-handbook}[create a "
+"port] for it."
+msgstr ""
+"Encontre algum software legal ou útil e extref:{porters-handbook}[crie um "
+"port] para ele."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:130
+msgid ""
+"There are a large number of ports that have no maintainer. Become a "
+"maintainer and <<adopt-port>>."
+msgstr ""
+"Há muitos ports que não têm mantenedor. Torne-se um mantenedor e adote-o "
+"(<<adopt-port>>)."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:131
+msgid "If you have created or adopted a port, be aware of <<maintain-port>>."
+msgstr ""
+"Se você criou ou adotou um port, esteja ciente sobre <<maintain-port>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:132
+msgid "When you are looking for a quick challenge you could <<fix-broken>>."
+msgstr "Quando você estiver procurando um desafio rápido, <<fix-broken>>."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:133
+#, no-wrap
+msgid "Pick one of the items from the Ideas page"
+msgstr "Escolha um dos itens da “página de idéias”"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:137
+msgid ""
+"The https://wiki.freebsd.org/IdeasPage[FreeBSD list of projects and ideas "
+"for volunteers] is also available for people willing to contribute to the "
+"FreeBSD project. The list is being regularly updated and contains items for "
+"both programmers and non-programmers with information about each project."
+msgstr ""
+"A https://wiki.freebsd.org/IdeasPage[lista de projetos e ideias para "
+"voluntários] do FreeBSD também está disponível para pessoas dispostas a "
+"contribuir para o projeto FreeBSD. A lista é atualizada regularmente e "
+"contém itens para programadores e não-programadores, com informações sobre "
+"cada projeto."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:139
+#, no-wrap
+msgid "How to Contribute"
+msgstr "Como Contribuir"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:142
+msgid ""
+"Contributions to the system generally fall into one or more of the following "
+"5 categories:"
+msgstr ""
+"As contribuições para o sistema geralmente se enquadram em uma ou mais das "
+"seguintes 5 categorias:"
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:144
+#, no-wrap
+msgid "Bug Reports and General Commentary"
+msgstr "Relatórios de Bugs e Comentários Gerais"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:149
+msgid ""
+"An idea or suggestion of _general_ technical interest should be mailed to "
+"the {freebsd-hackers}. Likewise, people with an interest in such things "
+"(and a tolerance for a _high_ volume of mail!) may subscribe to the {freebsd-"
+"hackers}. See extref:{handbook}[The FreeBSD Handbook, eresources-mail] for "
+"more information about this and other mailing lists."
+msgstr ""
+"Uma ideia ou sugestão de interesse técnico _geral_ deve ser enviada para a "
+"{freebsd-hackers}. Da mesma forma, pessoas com interesse nesses assuntos (e "
+"tolerância para um volume _alto_ de mensagens!) podem se inscrever na "
+"{freebsd-hackers}. Consulte o extref:{handbook}[Handbook do FreeBSD, "
+"eresources-mail] para obter mais informações sobre esta e outras listas de e-"
+"mail."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:152
+msgid ""
+"If you are submitting a simple patch to the src repo, please consider "
+"submitting it to the project's GitHub mirror as https://github.com/freebsd/"
+"freebsd-src/pulls[a pull request]. Suitable submissions should:"
+msgstr ""
+"Se você está enviando um patch simples para o repositório src, considere "
+"enviar um https://github.com/freebsd/freebsd-src/pulls[pull request] para o "
+"espelho do projeto no GitHub. Envios adequados devem:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:154
+msgid ""
+"It is ready or nearly ready to be committed. A committer should be able to "
+"land this patch with less than 10 minutes of additional work."
+msgstr ""
+"Estar pronto ou quase pronto para ser Commitado. Um committer deve ser capaz "
+"de aplicar este patch com menos de 10 minutos de trabalho adicional."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:155
+msgid "It passes all the GitHub CI jobs."
+msgstr "Ele passa em todos os trabalhos de CI do GitHub."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:156
+msgid "You can respond to feedback quickly."
+msgstr "Você pode responder rapidamente a feedbacks."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:157
+msgid ""
+"It touches fewer than about 10 files and the changes are less than about 200 "
+"lines. Changes larger than this may be OK, or you may be asked to submit "
+"multiple pull requests of a more manageable size."
+msgstr ""
+"Ele afeta menos de 10 arquivos e as mudanças têm menos de 200 linhas. "
+"Mudanças maiores do que isso podem ser OK, ou você pode ser solicitado a "
+"enviar vários pull requests de um tamanho mais gerenciável."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:158
+msgid ""
+"Each logical change is a separate commit within the pull request. Commit "
+"messages for each change should follow extref:{committers-guide}#commit-log-"
+"message[commit log guide]."
+msgstr ""
+"Cada mudança lógica é um commit separado dentro do pull request. As "
+"mensagens de commit para cada mudança devem seguir o extref:{committers-"
+"guide}#commit-log-message[guia de log de commit]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:159
+msgid ""
+"All commits have your name and valid email address as you'd like to see them "
+"in the FreeBSD repository as the author. Fake github.com addresses cannot be "
+"used."
+msgstr ""
+"Todos os commits têm o seu nome e um endereço de e-mail válido como você "
+"gostaria de vê-los no repositório do FreeBSD como autor. Endereços falsos do "
+"github.com não podem ser usados."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:160
+msgid ""
+"The scope of the pull request should not change during review. If the review "
+"suggests changes that expand the scope, please create an independent pull "
+"request."
+msgstr ""
+"O escopo do pull request não deve ser alterado durante a revisão. Se a "
+"revisão sugerir mudanças que expandam o escopo, crie um pull request "
+"independente."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:161
+msgid ""
+"Fixup commits should be squashed with the commit they are fixing. Each "
+"commit in your branch should be suitable for FreeBSD's repository."
+msgstr ""
+"Commits de correção devem ser combinados com o commit que estão corrigindo. "
+"Cada commit em seu branch deve ser adequado para o repositório do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:162
+msgid ""
+"Commits should include one or more `Signed-off-by:` lines with full name and "
+"email address certifying https://developercertificate.org/[Developer "
+"Certificate of Origin]."
+msgstr ""
+"Os commits devem incluir uma ou mais linhas `Signed-off-by:` com nome "
+"completo e endereço de e-mail certificando o https://developercertificate."
+"org/[Certificado de Origem do Desenvolvedor]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:167
+msgid ""
+"When updating pull request, please rebase with a forced push rather than a "
+"merge commit. More complex changes may be submitted as pull requests, but "
+"they may be closed if they are too large, too unwieldy, become inactive, "
+"need further discussion in the community, or need extensive revision. "
+"Please avoid creating large, wide-ranging cleanup patches: they are too "
+"large and lack the focus needed for a good review. Misdirected patches may "
+"be redirected to a more appropriate forum for the patch to be resolved."
+msgstr ""
+"Ao atualizar um pull request, por favor faça o rebase com um push forçado em "
+"vez de um commit de merge. Mudanças mais complexas podem ser submetidas como "
+"pull requests, mas podem ser fechadas se forem muito grandes, difíceis de "
+"manusear, tornarem-se inativas, precisarem de mais discussão na comunidade "
+"ou precisarem de uma revisão extensa. Por favor, evite criar grandes patches "
+"de limpeza abrangentes: eles são muito grandes e não têm o foco necessário "
+"para uma boa revisão. Patches mal direcionados podem ser redirecionados para "
+"um fórum mais apropriado para a resolução do patch."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:170
+msgid ""
+"Pull requests submitted to the ports repository may or may not see action, "
+"based on the whims of developers. For now, you will have a better "
+"experience if you follow the ports submission process <<ports-contributing>>."
+msgstr ""
+"Os pull requests submetidos ao repositório de ports podem ou não receber "
+"atenção, dependendo do interesse dos desenvolvedores. Por enquanto, para ter "
+"uma melhor experiência é melhor seguir o processo de submissão de ports "
+"descrito na seção <<ports-contributing>> ."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:172
+msgid ""
+"The docs team also accepts pull requests via GitHub, but has not established "
+"any policy for them yet."
+msgstr ""
+"A equipe de documentação também aceita pull requests via GitHub, mas ainda "
+"não estabeleceu nenhuma política para eles."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:179
+msgid ""
+"If you find a bug or are submitting a specific change, please report it "
+"using the https://bugs.FreeBSD.org/submit/[bug submission form]. Try to "
+"fill-in each field of the bug report. Unless they exceed 65KB, include any "
+"patches directly in the report. If the patch is suitable to be applied to "
+"the source tree put `[PATCH]` in the synopsis of the report. When including "
+"patches, _do not_ use cut-and-paste because cut-and-paste turns tabs into "
+"spaces and makes them unusable. When patches are a lot larger than 20KB, "
+"consider compressing them (eg. with man:gzip[1] or man:bzip2[1]) prior to "
+"uploading them."
+msgstr ""
+"Se você encontrar um bug ou estiver enviando uma mudança específica, por "
+"favor relate-o usando o https://bugs.FreeBSD.org/submit/[formulário de "
+"submissão de bug]. Tente preencher cada campo do relatório de bug. A menos "
+"que excedam 65KB, inclua quaisquer patches diretamente no relatório. Se o "
+"patch for adequado para ser aplicado à árvore de código fonte, coloque "
+"`[PATCH]` na sinopse do relatório. Ao incluir patches, _não_ use o copiar e "
+"colar, pois o copiar e colar transforma os tabs em espaços e os torna "
+"inutilizáveis. Quando os patches são muito maiores do que 20KB, considere "
+"comprimi-los (por exemplo, com man:gzip[1] ou man:bzip2[1]) antes de enviá-"
+"los."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:182
+msgid ""
+"After filing a report, you should receive confirmation along with a tracking "
+"number. Keep this tracking number so that you can update us with details "
+"about the problem."
+msgstr ""
+"Depois de enviar um relatório, você deve receber uma confirmação juntamente "
+"com um número de rastreamento. Guarde este número de rastreamento para que "
+"você possa nos atualizar com detalhes sobre o problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:184
+msgid ""
+"See also extref:{problem-reports}[this article] on how to write good problem "
+"reports."
+msgstr ""
+"Veja também extref:{problem-reports}[este artigo] sobre como escrever bons "
+"relatórios de problemas."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:185
+#, no-wrap
+msgid "Changes to the Documentation"
+msgstr "Mudanças na Documentação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:190
+msgid ""
+"Changes to the documentation are overseen by the {freebsd-doc}. Please look "
+"at the extref:{fdp-primer}[FreeBSD Documentation Project Primer] for "
+"complete instructions. Send submissions and changes (even small ones are "
+"welcome!) using the same method as any other bug report."
+msgstr ""
+"As mudanças na documentação são supervisionadas pelo {freebsd-doc}. Por "
+"favor, consulte o extref:{fdp-primer}[FreeBSD Documentation Project Primer] "
+"para obter instruções completas. Envie submissões e alterações (mesmo as "
+"pequenas são bem-vindas!) usando o mesmo método que qualquer outro relatório "
+"de bug."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:191
+#, no-wrap
+msgid "Changes to Existing Source Code"
+msgstr "Mudanças no Código Fonte Existente"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:196
+msgid ""
+"An addition or change to the existing source code is a somewhat trickier "
+"affair and depends a lot on how far out of date you are with the current "
+"state of FreeBSD development. There is a special on-going release of "
+"FreeBSD known as \"FreeBSD-CURRENT\" which is made available in a variety of "
+"ways for the convenience of developers working actively on the system. See "
+"extref:{handbook}[The FreeBSD Handbook, current-stable] for more information "
+"about getting and using FreeBSD-CURRENT."
+msgstr ""
+"Uma adição ou mudança no código-fonte existente é um assunto um pouco mais "
+"complicado e depende muito de quão desatualizado você está em relação ao "
+"estado atual do desenvolvimento do FreeBSD. Há uma versão especial em "
+"andamento do FreeBSD conhecida como \"FreeBSD-CURRENT\" que está disponível "
+"de várias maneiras para a conveniência de desenvolvedores que trabalham "
+"ativamente no sistema. Veja o extref:{handbook}[Handbook do FreeBSD, current-"
+"stable] para mais informações sobre como obter e usar o FreeBSD-CURRENT."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:199
+msgid ""
+"Working from older sources unfortunately means that your changes may "
+"sometimes be too obsolete or too divergent for easy re-integration into "
+"FreeBSD. Chances of this can be minimized somewhat by subscribing to the "
+"{freebsd-announce} and the {freebsd-current} lists, where discussions on the "
+"current state of the system take place."
+msgstr ""
+"Trabalhar a partir de fontes mais antigos infelizmente significa que suas "
+"alterações às vezes podem ser muito obsoletas ou divergentes demais para uma "
+"reintegração fácil no FreeBSD. As chances disso podem ser minimizadas um "
+"pouco ao se inscrever nas listas {freebsd-announce} e {freebsd-current}, "
+"onde ocorrem discussões sobre o estado atual do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:202
+msgid ""
+"Assuming that you can manage to secure fairly up-to-date sources to base "
+"your changes on, the next step is to produce a set of diffs to send to the "
+"FreeBSD maintainers. This is done with the man:diff[1] command."
+msgstr ""
+"Assumindo que você consegue obter fontes razoavelmente atualizadas para "
+"basear suas alterações, o próximo passo é produzir um conjunto de diffs para "
+"enviar aos mantenedores do FreeBSD. Isso é feito com o comando man:diff[1]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:204
+msgid ""
+"The preferred man:diff[1] format for submitting patches is the unified "
+"output format generated by `diff -u`."
+msgstr ""
+"A preferência do formato man:diff[1] para envio de correções é o formato de "
+"saída unificada gerado pelo `diff -u`."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/contributing/_index.adoc:208
+#, no-wrap
+msgid "% diff -u oldfile newfile\n"
+msgstr "% diff -u oldfile newfile\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:211
+msgid "or"
+msgstr "ou"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/contributing/_index.adoc:215
+#, no-wrap
+msgid "% diff -u -r -N olddir newdir\n"
+msgstr "% diff -u -r -N olddir newdir\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:218
+msgid ""
+"would generate a set of unified diffs for the given source file or directory "
+"hierarchy."
+msgstr ""
+"Iria gerar um conjunto de diffs unificados para o arquivo ou hierarquia de "
+"diretórios de origem fornecidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:220
+msgid "See man:diff[1] for more information."
+msgstr "Consulte man:diff[1] para obter mais informações."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:224
+msgid ""
+"Once you have a set of diffs (which you may test with the man:patch[1] "
+"command), you should submit them for inclusion with FreeBSD as a bug "
+"report. _Do not_ just send the diffs to the {freebsd-hackers} or they will "
+"get lost! We greatly appreciate your submission (this is a volunteer "
+"project!); because we are busy, we may not be able to address it "
+"immediately, but it will remain in the PR database until we do. Indicate "
+"your submission by including `[PATCH]` in the synopsis of the report."
+msgstr ""
+"Uma vez que você tem um conjunto de diffs (que você pode testar com o "
+"comando man:patch[1]), você deve enviá-los para inclusão no FreeBSD como um "
+"relatório de problema. _Não_ envie apenas os diffs para a {freebsd-hackers}, "
+"pois eles serão perdidos! Agradecemos muito sua contribuição (este é um "
+"projeto voluntário!); como estamos ocupados, pode ser que não consigamos "
+"lidar com isso imediatamente, mas ele permanecerá no banco de dados de PRs "
+"até que o façamos. Indique sua submissão incluindo `[PATCH]` no resumo do "
+"relatório."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:227
+msgid ""
+"If you feel it appropriate (e.g. you have added, deleted, or renamed files), "
+"bundle your changes into a `tar` file. Archives created with man:shar[1] "
+"are also welcome."
+msgstr ""
+"Se você achar apropriado (por exemplo, você adicionou, removeu ou renomeou "
+"arquivos), agrupe suas alterações em um arquivo `tar`. Arquivos criados com "
+"o comando man:shar[1] também são bem-vindos."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:231
+msgid ""
+"If your change is of a potentially sensitive nature, such as if you are "
+"unsure of copyright issues governing its further distribution then you "
+"should send it to {core-email} directly rather than submitting as a bug "
+"report. The {core-email} reaches a much smaller group of people who do much "
+"of the day-to-day work on FreeBSD. Note that this group is also _very busy_ "
+"and so you should only send mail to them where it is truly necessary."
+msgstr ""
+"Se a sua alteração for potencialmente sensível, como se você não tem certeza "
+"sobre questões de direitos autorais que regem a distribuição posterior, você "
+"deve enviá-la diretamente para {core-email} em vez de enviar como um "
+"relatório de bug. O {core-email} atinge um grupo muito menor de pessoas que "
+"fazem muito do trabalho diário no FreeBSD. Observe que esse grupo também é "
+"_muito ocupado_ e, portanto, você só deve enviar e-mails a eles quando for "
+"realmente necessário."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:234
+msgid ""
+"Please refer to man:intro[9] and man:style[9] for some information on coding "
+"style. We would appreciate it if you were at least aware of this "
+"information before submitting code."
+msgstr ""
+"Por favor, consulte man:intro[9] e man:style[9] para obter informações sobre "
+"o estilo de codificação. Agradecemos se você pelo menos estiver ciente "
+"dessas informações antes de enviar código."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:235
+#, no-wrap
+msgid "New Code or Major Value-Added Packages"
+msgstr "Código Novo ou Pacotes de Grande Valor Adicionado"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:239
+msgid ""
+"In the case of a significant contribution of a large body work, or the "
+"addition of an important new feature to FreeBSD, it becomes almost always "
+"necessary to either send changes as tar files or upload them to a web or FTP "
+"site for other people to access. If you do not have access to a web or FTP "
+"site, ask on an appropriate FreeBSD mailing list for someone to host the "
+"changes for you."
+msgstr ""
+"No caso de uma contribuição significativa de um grande volume de trabalho, "
+"ou a adição de um novo recurso importante ao FreeBSD, torna-se quase sempre "
+"necessário enviar as alterações como arquivos tar ou carregá-los em um "
+"website ou FTP para que outras pessoas possam acessá-los. Se você não tem "
+"acesso a um website ou FTP, peça em uma lista de discussão apropriada do "
+"FreeBSD para alguém hospedar as alterações para você."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:244
+msgid ""
+"When working with large amounts of code, the touchy subject of copyrights "
+"also invariably comes up. FreeBSD prefers free software licenses such as "
+"BSD or ISC. Copyleft licenses such as GPLv2 are sometimes permitted. The "
+"complete listing can be found on the link:https://www.FreeBSD.org/internal/"
+"software-license/[core team licensing policy] page."
+msgstr ""
+"Quando se trabalha com grandes quantidades de código, a questão delicada de "
+"direitos autorais inevitavelmente surge. O FreeBSD prefere licenças de "
+"software livre tais como BSD ou ISC. Licenças copyleft como GPLv2 às vezes "
+"são permitidas. A lista completa pode ser encontrada na página da link:"
+"https://www.FreeBSD.org/internal/software-license/[política de licenciamento "
+"do core team]."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:245
+#, no-wrap
+msgid "Money or Hardware"
+msgstr "Dinheiro ou Hardware"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:248
+msgid ""
+"We are always very happy to accept donations to further the cause of the "
+"FreeBSD Project and, in a volunteer effort like ours, a little can go a long "
+"way! Donations of hardware are also very important to expanding our list of "
+"supported peripherals since we generally lack the funds to buy such items "
+"ourselves."
+msgstr ""
+"Estamos sempre muito felizes em receber doações para promover a causa do "
+"Projeto FreeBSD e, em um esforço voluntário como o nosso, um pouco pode "
+"fazer muita diferença! As doações de hardware também são muito importantes "
+"para expandir nossa lista de periféricos suportados, já que geralmente não "
+"temos fundos para comprar tais itens nós mesmos."
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:250
+#, no-wrap
+msgid "Donating Funds"
+msgstr "Doando Dinheiro"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:255
+msgid ""
+"The https://www.freebsdfoundation.org[FreeBSD Foundation] is a non-profit, "
+"tax-exempt foundation established to further the goals of the FreeBSD "
+"Project. As a 501(c)3 entity, the Foundation is generally exempt from US "
+"federal income tax as well as Colorado State income tax. Donations to a tax-"
+"exempt entity are often deductible from taxable federal income."
+msgstr ""
+"A FreeBSD Foundation é uma fundação sem fins lucrativos e isenta de "
+"impostos, estabelecida para promover os objetivos do projeto FreeBSD. Como "
+"uma entidade 501(c)3, a fundação é geralmente isenta de imposto de renda "
+"federal dos EUA, bem como do imposto de renda estadual do Colorado. As "
+"doações para uma entidade isenta de impostos muitas vezes são dedutíveis do "
+"imposto de renda federal tributável."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:257
+msgid "Donations may be sent in check form to:"
+msgstr "Doações podem ser enviadas em forma de cheque para:"
+
+#. type: delimited block * 4
+#: documentation/content/en/articles/contributing/_index.adoc:265
+#, fuzzy
+#| msgid ""
+#| "The FreeBSD Foundation\n"
+#| "3980 Broadway Street\n"
+#| "STE #103-107\n"
+#| "Boulder CO 80304\n"
+#| "USA"
+msgid ""
+"The FreeBSD Foundation + 3980 Broadway Street + STE #103-107 + Boulder CO "
+"80304 + USA"
+msgstr ""
+"The FreeBSD Foundation\n"
+"3980 Broadway Street\n"
+"STE #103-107\n"
+"Boulder CO 80304\n"
+"USA"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:268
+msgid ""
+"The FreeBSD Foundation is also able to accept https://www.freebsdfoundation."
+"org/donate/[online donations] through various payment options."
+msgstr ""
+"A FreeBSD Foundation também é capaz de receber https://www.freebsdfoundation."
+"org/donate/[doações online] através de várias opções de pagamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:271
+msgid ""
+"More information about the FreeBSD Foundation can be found in https://people."
+"FreeBSD.org/~jdp/foundation/announcement.html[The FreeBSD Foundation -- an "
+"Introduction]. To contact the Foundation by email, write to mailto:"
+"info@FreeBSDFoundation.org[info@FreeBSDFoundation.org]."
+msgstr ""
+"Mais informações sobre a FreeBSD Foundation podem ser encontradas em https://"
+"people.FreeBSD.org/~jdp/foundation/announcement.html[The FreeBSD Foundation "
+"- uma introdução]. Para entrar em contato com a Fundação por e-mail, escreva "
+"para mailto:info@FreeBSDFoundation.org[info@FreeBSDFoundation.org]."
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:272
+#, no-wrap
+msgid "Donating Hardware"
+msgstr "Doando Hardware"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:276
+msgid ""
+"The FreeBSD Project happily accepts donations of hardware that it can find "
+"good use for. If you are interested in donating hardware, please contact "
+"the link:https://www.FreeBSD.org/donations/[Donations Liaison Office]."
+msgstr ""
+"O Projeto FreeBSD alegremente aceita doações de hardware que possa ser "
+"utilizado de forma benéfica. Se você estiver interessado em doar hardware, "
+"por favor, entre em contato com o link:https://www.FreeBSD.org/donations/"
+"[Departamento de Coordenação de Doações]."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:278
+#, no-wrap
+msgid "Contributing to ports"
+msgstr "Contribuindo com a coleção de ports"
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:281
+#, no-wrap
+msgid "Adopting an unmaintained port"
+msgstr "Adotando um port não mantido"
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:283
+#, no-wrap
+msgid "Choosing an unmaintained port"
+msgstr "Escolhendo um port não mantido"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:289
+msgid ""
+"Taking over maintainership of ports that are unmaintained is a great way to "
+"get involved. Unmaintained ports are only updated and fixed when somebody "
+"volunteers to work on them. There are a large number of unmaintained "
+"ports. It is a good idea to start with adopting a port that you use "
+"regularly."
+msgstr ""
+"Assumir a manutenção de ports que não são mantidos é uma ótima maneira de se "
+"envolver. Os ports não mantidos são atualizados e corrigidos somente quando "
+"alguém se voluntaria para trabalhar neles. Há um grande número de ports não "
+"mantidos. É uma boa ideia começar adotando um port que você usa regularmente."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:292
+msgid ""
+"Unmaintained ports have their `MAINTAINER` set to `ports@FreeBSD.org`. Many "
+"unmaintained ports can have pending updates, this can be seen at the https://"
+"portscout.freebsd.org/ports@freebsd.org.html[FreeBSD Ports distfile scanner]."
+msgstr ""
+"Os ports não mantidos têm seu campo `MAINTAINER` definido como "
+"`ports@FreeBSD.org`. Muitos ports não mantidos podem ter atualizações "
+"pendentes, que podem ser vistas no https://portscout.freebsd.org/"
+"ports@freebsd.org.html[scanner de arquivos de distribuição dos Ports do "
+"FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:294
+msgid ""
+"On https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD."
+"org[PortsFallout] can be seen a list of unmaintained ports with errors."
+msgstr ""
+"Em https://portsfallout.com/fallout?port=&maintainer=ports%40FreeBSD."
+"org[PortsFallout], pode ser vista uma lista de ports sem manutenção com "
+"erros."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:297
+msgid ""
+"Some ports affect a large number of others due to dependencies and slave "
+"port relationships. Generally, we want people to have some experience "
+"before they maintain such ports."
+msgstr ""
+"Alguns ports afetam um grande número de outros devido a dependências e "
+"relacionamentos de ports escravos. Geralmente, esperamos que as pessoas "
+"tenham alguma experiência antes de se voluntariarem para manter tais ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:301
+msgid ""
+"You can find out whether or not a port has dependencies or slave ports by "
+"looking at a master index of ports called [.filename]#INDEX#. (The name of "
+"the file varies by release of FreeBSD; for instance, [.filename]#INDEX-8#.) "
+"Some ports have conditional dependencies that are not included in a default "
+"[.filename]#INDEX# build. We expect you to be able to recognize such ports "
+"by looking through other ports' [.filename]#Makefile#'s."
+msgstr ""
+"Você pode descobrir se um port possui dependências ou ports dependentes "
+"olhando para o índice mestre de ports chamado [.filename]#INDEX#. (O nome do "
+"arquivo varia de acordo com a versão do FreeBSD; por exemplo, [."
+"filename]#INDEX-8#). Alguns ports têm dependências condicionais que não são "
+"incluídas em uma compilação padrão do [.filename]#INDEX#. Esperamos que você "
+"seja capaz de reconhecer esses ports através da análise dos [."
+"filename]#Makefile# de outros ports."
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:302
+#, no-wrap
+msgid "How to adopt the port"
+msgstr "Como adotar um port"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:307
+msgid ""
+"First make sure you understand your <<maintain-port>>. Also read the extref:"
+"{porters-handbook}[Porter's Handbook]. _Please do not commit yourself to "
+"more than you feel you can comfortably handle._"
+msgstr ""
+"Primeiro, certifique-se de entender <<maintain-port>>. Também leia o "
+"<<porters-handbook>>. _Por favor, não se comprometa com mais do que você "
+"sente que pode lidar confortavelmente._"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:313
+msgid ""
+"You may request maintainership of any unmaintained port as soon as you "
+"wish. Simply set `MAINTAINER` to your own email address and send a PR "
+"(Problem Report) with the change. If the port has build errors or needs "
+"updating, you may wish to include any other changes in the same PR. This "
+"will help because many committers are less willing to assign maintainership "
+"to someone who does not have a known track record with FreeBSD. Submitting "
+"PRs that fix build errors or update ports are the best ways to establish one."
+msgstr ""
+"Você pode solicitar a manutenção de qualquer port não mantido assim que "
+"desejar. Basta definir `MAINTAINER` para o seu próprio endereço de e-mail e "
+"enviar um PR (Relatório de Problema) com a alteração. Se o port tiver erros "
+"de compilação ou precisar ser atualizado, talvez você queira incluir outras "
+"alterações no mesmo PR. Isso ajudará porque muitos committers estão menos "
+"dispostos a atribuir a manutenção a alguém que não tem um histórico "
+"conhecido com o FreeBSD. Enviar PRs que corrijam erros de compilação ou "
+"atualizem os ports são as melhores maneiras de estabelecer um histórico."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:317
+msgid ""
+"File your PR with category `ports` and class `change-request`. A committer "
+"will examine your PR, commit the changes, and finally close the PR. "
+"Sometimes this process can take a little while (committers are volunteers, "
+"too :)."
+msgstr ""
+"Envie seu PR com a categoria `ports` e a classe `change-request`. Um "
+"committer examinará seu PR, confirmará as alterações e, por fim, fechará o "
+"PR. Às vezes, esse processo pode levar um pouco de tempo (os committers "
+"também são voluntários :)."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:319
+#, no-wrap
+msgid "The challenge for port maintainers"
+msgstr "O desafio para os mantenedores de ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:322
+msgid ""
+"This section will give you an idea of why ports need to be maintained and "
+"outline the responsibilities of a port maintainer."
+msgstr ""
+"Esta seção lhe dará uma ideia do motivo pelo qual os ports precisam ser "
+"mantidos e esboçará as responsabilidades de um mantenedor de port."
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:324
+#, no-wrap
+msgid "Why ports require maintenance"
+msgstr "Por que um port requer manutenção"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:329
+msgid ""
+"Creating a port is a once-off task. Ensuring that a port is up to date and "
+"continues to build and run requires an ongoing maintenance effort. "
+"Maintainers are the people who dedicate some of their time to meeting these "
+"goals."
+msgstr ""
+"Criar um port é uma tarefa única. Garantir que um port esteja atualizado e "
+"continue a ser compilado e executado requer um esforço contínuo de "
+"manutenção. Os mantenedores são as pessoas que dedicam parte do seu tempo "
+"para atender a esses objetivos."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:332
+msgid ""
+"The foremost reason ports need maintenance is to bring the latest and "
+"greatest in third party software to the FreeBSD community. An additional "
+"challenge is to keep individual ports working within the Ports Collection "
+"framework as it evolves."
+msgstr ""
+"A razão mais importante pela qual os ports precisam de manutenção é para "
+"trazer o que há de mais recente e melhor em software de terceiros para a "
+"comunidade FreeBSD. Um desafio adicional é manter os ports individuais "
+"funcionando dentro do framework da Coleção de Ports à medida que ele evolui."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:334
+msgid "As a maintainer, you will need to manage the following challenges:"
+msgstr "Como mantenedor, você precisará gerenciar os seguintes desafios:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:336
+#, no-wrap
+msgid "*New software versions and updates.* New versions and updates of existing ported software become available all the time, and these need to be incorporated into the Ports Collection in order to provide up-to-date software.\n"
+msgstr "*Novas versões de software e atualizações.* Novas versões e atualizações dos softwares portados se tornam disponíveis o tempo todo e precisam ser incorporadas na Coleção de Ports para fornecer software atualizado.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:338
+#, no-wrap
+msgid "*Changes to dependencies.* If significant changes are made to the dependencies of your port, it may need to be updated so that it will continue to work correctly.\n"
+msgstr "*Mudanças nas dependências.* Se houverem mudanças significativas nas dependências do seu port, pode ser necessário atualizá-lo para que continue a funcionar corretamente.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:340
+#, no-wrap
+msgid "*Changes affecting dependent ports.* If other ports depend on a port that you maintain, changes to your port may require coordination with other maintainers.\n"
+msgstr "*Mudanças que afetam ports dependentes.* Se outros ports dependem de um port que você mantém, as alterações no seu port podem exigir coordenação com outros mantenedores.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:342
+#, no-wrap
+msgid "*Interaction with other users, maintainers and developers.* Part of being a maintainer is taking on a support role. You are not expected to provide general support (but we welcome it if you choose to do so). What you should provide is a point of coordination for FreeBSD-specific issues regarding your ports.\n"
+msgstr "*Interatividade com outros usuários, mantenedores e desenvolvedores.* Parte de ser um mantenedor é assumir um papel de suporte. Não se espera que você forneça suporte geral (mas você é bem vindo se você optar por fazê-lo). O que você deve fornecer é um ponto de coordenação para problemas específicos do FreeBSD relacionados aos seus ports.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:344
+#, no-wrap
+msgid "*Bug hunting.* A port may be affected by bugs which are specific to FreeBSD. You will need to investigate, find, and fix these bugs when they are reported. Thoroughly testing a port to identify problems before they make their way into the Ports Collection is even better.\n"
+msgstr "*Procura de bugs.* Um port pode ser afetado por bugs específicos do FreeBSD. Você precisará investigar, encontrar e corrigir esses bugs quando forem relatados. Testar minuciosamente um port para identificar problemas antes que eles sejam incluídos na Coleção de Ports é ainda melhor.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:346
+#, no-wrap
+msgid "*Changes to ports infrastructure and policy.* Occasionally the systems that are used to build ports and packages are updated or a new recommendation affecting the infrastructure is made. You should be aware of these changes in case your ports are affected and require updating.\n"
+msgstr "*Mudanças na infraestrutura e políticas dos ports.* Às vezes, os sistemas usados para compilar ports e pacotes são atualizados ou uma nova recomendação que afeta a infraestrutura é feita. Você deve estar ciente dessas mudanças no caso de seus ports serem afetados e precisarem de atualização.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:348
+#, no-wrap
+msgid "*Changes to the base system.* FreeBSD is under constant development. Changes to software, libraries, the kernel or even policy changes can cause flow-on change requirements to ports.\n"
+msgstr "*Mudanças no sistema base.* O FreeBSD está em constante desenvolvimento. Mudanças no software, bibliotecas, kernel ou até mesmo mudanças de política podem causar a necessidade de alterações em cascata nos ports.\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/contributing/_index.adoc:349
+#, no-wrap
+msgid "Maintainer responsibilities"
+msgstr "Responsabilidades do mantenedor"
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:351
+#, no-wrap
+msgid "Keep your ports up to date"
+msgstr "Mantenha seus ports atualizados"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:354
+msgid ""
+"This section outlines the process to follow to keep your ports up to date."
+msgstr ""
+"Esta seção descreve o processo a ser seguido para manter seus ports "
+"atualizados."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:357
+msgid ""
+"This is an overview. More information about upgrading a port is available "
+"in the extref:{porters-handbook}[Porter's Handbook]."
+msgstr ""
+"Este é um resumo. Mais informações sobre atualização de um port estão "
+"disponíveis no extref:{porters-handbook}[Handbook do mantenedor de ports]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:361
+msgid "Watch for updates"
+msgstr "Preste atenção às atualizações"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:366
+msgid ""
+"Monitor the upstream vendor for new versions, updates and security fixes for "
+"the software. Announcement mailing lists or news web pages are useful for "
+"doing this. Sometimes users will contact you and ask when your port will be "
+"updated. If you are busy with other things or for any reason just cannot "
+"update it at the moment, ask if they will help you by submitting an update."
+msgstr ""
+"Monitorar os fabricantes upstream em relação a liberação de novas versões, "
+"patches e correções de segurança para o software. Listas de discussão e de "
+"anúncios ou páginas web de noticias sobre o software são úteis para este "
+"propósito. Algumas vezes os usuários entrarão em contato com você "
+"perguntando quando seu port será atualizado. Se você estiver ocupado com "
+"outras atividades ou devido a qualquer outra razão não puder realizar a "
+"atualização naquele momento, pergunte se o usuário pode te ajudar enviando "
+"uma atualização."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:369
+msgid ""
+"You may also receive automated email from the `FreeBSD Ports Version Check` "
+"informing you that a newer version of your port's distfile is available. "
+"More information about that system (including how to stop future emails) "
+"will be provided in the message."
+msgstr ""
+"Você também pode receber e-mails automáticos do `FreeBSD Ports Version "
+"Check` informando que uma versão mais recente do arquivo de distribuição do "
+"seu port está disponível. Mais informações sobre esse sistema (incluindo "
+"como interromper futuros e-mails) serão fornecidas na mensagem."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:370
+msgid "Incorporate changes"
+msgstr "Incorporar mudanças"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:373
+msgid ""
+"When they become available, incorporate the changes into the port. You need "
+"to be able to generate a patch between the original port and your updated "
+"port."
+msgstr ""
+"Quando estiverem disponíveis, incorpore as alterações no port. Você precisa "
+"ser capaz de gerar um patch entre o port original e o seu port atualizado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:374
+msgid "Review and test"
+msgstr "Revisão e testes"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:376
+msgid "Thoroughly review and test your changes:"
+msgstr "Examine cuidadosamente e teste as suas mudanças:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:378
+msgid ""
+"Build, install and test your port on as many platforms and architectures as "
+"you can. It is common for a port to work on one branch or platform and fail "
+"on another."
+msgstr ""
+"Compile, instale e teste seu port em quantas plataformas e arquiteturas "
+"puder. É comum um port funcionar em um branch ou plataforma e falhar em "
+"outro."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:379
+msgid ""
+"Make sure your port's dependencies are complete. The recommended way of "
+"doing this is by installing your own ports tinderbox. See <<resources>> for "
+"more information."
+msgstr ""
+"Certifique-se de que as dependências do seu port estejam completas. A "
+"maneira recomendada de fazer isso é instalando o seu próprio tinderbox. "
+"Consulte <<resources>> para obter mais informações."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:380
+msgid ""
+"Check that the packing list is up to date. This involves adding in any new "
+"files and directories and removing unused entries."
+msgstr ""
+"Verifique se a lista de pacotes está atualizada. Isso envolve adicionar "
+"quaisquer novos arquivos e diretórios e remover entradas não utilizadas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:381
+msgid ""
+"Verify your port using man:portlint[1] as a guide. See <<resources>> for "
+"important information about using portlint."
+msgstr ""
+"Verifique seu port usando o comando man:portlint[1] como guia. Consulte "
+"<<resources>> para obter informações importantes sobre o uso do portlint."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:382
+msgid ""
+"Consider whether changes to your port might cause any other ports to break. "
+"If this is the case, coordinate the changes with the maintainers of those "
+"ports. This is especially important if your update changes the shared "
+"library version; in this case, at the very least, the dependent ports will "
+"need to get a `PORTREVISION` bump so that they will automatically be "
+"upgraded by automated tools such as portmaster or man:portupgrade[1]."
+msgstr ""
+"Considere se as alterações em seu port podem fazer com que outros ports se "
+"quebrem. Se for o caso, coordene as alterações com os mantenedores desses "
+"ports. Isso é especialmente importante se sua atualização alterar a versão "
+"da biblioteca compartilhada; nesse caso, pelo menos os ports dependentes "
+"precisarão receber um incremento no `PORTREVISION` para que sejam "
+"atualizados automaticamente por ferramentas automatizadas, como portmaster "
+"ou man:portupgrade[1]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:384
+#: documentation/content/en/articles/contributing/_index.adoc:451
+msgid "Submit changes"
+msgstr "Envie as alterações"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:387
+msgid ""
+"Send your update by submitting a PR with an explanation of the changes and a "
+"patch containing the differences between the original port and the updated "
+"one. Please refer to extref:{problem-reports}[Writing FreeBSD Problem "
+"Reports] for information on how to write a really good PR."
+msgstr ""
+"Envie sua atualização submetendo um PR com uma explicação das alterações e "
+"um patch contendo as diferenças entre o port original e o atualizado. "
+"Consulte o extref:{problem-reports}[Redação de Relatórios de Problemas do "
+"FreeBSD] para obter informações sobre como escrever um PR realmente bom."
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/contributing/_index.adoc:393
+msgid ""
+"Please do not submit a man:shar[1] archive of the entire port; instead, use "
+"man:git-format-patch[1] or man:diff[1] `-ruN`. In this way, committers can "
+"much more easily see exactly what changes are being made. The Porter's "
+"Handbook section on extref:{porters-handbook}[Upgrading, port-upgrading] has "
+"more information."
+msgstr ""
+"Por favor, não envie um arquivo man:shar[1] do port inteiro; em vez disso, "
+"use man:git-format-patch[1] ou man:diff[1] `-ruN`. Dessa forma, os "
+"committers podem ver com muito mais facilidade exatamente quais mudanças "
+"estão sendo feitas. A seção extref:{porters-handbook}[Atualização, port-"
+"upgrading] do Handbook do Mantenedor de Ports contém mais informações."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:395
+msgid "Wait"
+msgstr "Aguarde"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:399
+msgid ""
+"At some stage a committer will deal with your PR. It may take minutes, or "
+"it may take one or two weeks - so please be patient. If it takes any "
+"longer, please seek for help on mailing lists ({freebsd-ports}), IRC: "
+"#bsdports on EFNet or #freebsd-ports on Libera for example."
+msgstr ""
+"Em algum momento, um committer lidará com o seu PR. Isso pode levar minutos "
+"ou pode levar uma ou duas semanas - portanto, tenha paciência. Se levar mais "
+"tempo, procure ajuda em listas de discussão ({freebsd-ports}), no IRC: "
+"#bsdports na EFNet ou #freebsd-ports na Libera, por exemplo."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:400
+msgid "Give feedback"
+msgstr "Dê feedback"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:403
+msgid ""
+"If a committer finds a problem with your changes, they will most likely "
+"refer it back to you. A prompt response will help get your PR committed "
+"faster, and is better for maintaining a thread of conversation when trying "
+"to resolve any problems."
+msgstr ""
+"Se um committer encontrar um problema com as suas alterações, eles "
+"provavelmente o encaminharão de volta para você. Uma resposta rápida ajudará "
+"a obter a aprovação do seu PR mais rapidamente e é melhor para manter uma "
+"conversa ao tentar resolver qualquer problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:404
+msgid "And Finally"
+msgstr "E finalmente"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:407
+msgid ""
+"Your changes will be committed and your port will have been updated. The PR "
+"will then be closed by the committer. That's it!"
+msgstr ""
+"Suas alterações serão incorporadas e o seu port será atualizada. O PR será "
+"então fechado pelo committer. É isso aí!"
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:409
+#, no-wrap
+msgid "Ensure your ports continue to build correctly"
+msgstr "Garanta que seus ports continuem a ser compilados corretamente"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:412
+msgid ""
+"This section is about discovering and fixing problems that stop your ports "
+"from building correctly."
+msgstr ""
+"Esta seção é sobre a descoberta e a solução de problemas que fazem seus "
+"ports deixarem de ser compilados corretamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:415
+msgid ""
+"FreeBSD only guarantees that the Ports Collection works on the `-STABLE` "
+"branches. In theory, you should be able to get by with running the latest "
+"release of each stable branch (since the ABIs are not supposed to change) "
+"but if you can run the branch, that is even better."
+msgstr ""
+"O FreeBSD garante o funcionamento da Coleção de Ports apenas nos branches `-"
+"STABLE`. Em teoria, você deveria ser capaz de rodar a versão mais recente de "
+"cada branch estável (já que as ABIs não devem mudar), mas se puder rodar o "
+"branch, isso é ainda melhor."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:419
+msgid ""
+"Since the majority of FreeBSD installations run on PC-compatible machines "
+"(what is termed the `i386` architecture), we expect you to keep the port "
+"working on that architecture. We prefer that ports also work on the `amd64` "
+"architecture running native. It is completely fair to ask for help if you "
+"do not have one of these machines."
+msgstr ""
+"Como a maioria das instalações do FreeBSD é executada em máquinas "
+"compatíveis com PC (o que é chamado de arquitetura `i386`), esperamos que "
+"você mantenha o port funcionando nessa arquitetura. Preferimos que os ports "
+"também funcionem na arquitetura `amd64` executando nativamente. É "
+"completamente justo pedir ajuda se você não tiver uma dessas máquinas."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:424
+msgid ""
+"The usual failure modes for non-`x86` machines are that the original "
+"programmers assumed that, for instance, pointers are `int`-s, or that a "
+"relatively lax older gcc compiler was being used. More and more, "
+"application authors are reworking their code to remove these assumptions - "
+"but if the author is not actively maintaining their code, you may need to do "
+"this yourself."
+msgstr ""
+"Os modos comuns de falha para máquinas não-`x86` são que os programadores "
+"originais assumiram, por exemplo, que os ponteiros são `int`, ou que um "
+"compilador gcc mais antigo e relativamente relaxado estava sendo usado. Cada "
+"vez mais, os autores de aplicativos estão retrabalhando seu código para "
+"remover essas suposições - mas se o autor não estiver mantendo ativamente "
+"seu código, você pode precisar fazer isso sozinho."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:427
+msgid ""
+"These are the tasks you need to perform to ensure your port is able to be "
+"built:"
+msgstr ""
+"Estas são as tarefas que você precisa realizar para garantir que o seu port "
+"possa ser compilado:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:431
+msgid "Watch for build failures"
+msgstr "Fique atento a falhas na compilação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:433
+msgid ""
+"Check your mail for mail from `pkg-fallout@FreeBSD.org` and the http://"
+"portscout.FreeBSD.org[distfiles scanner] to see if any of the port which are "
+"failing to build are out of date."
+msgstr ""
+"Verifique seu e-mail para ver se há mensagens de `pkg-fallout@FreeBSD.org` e "
+"do http://portscout.FreeBSD.org[scanner de distfiles] para ver se algum dos "
+"ports que estão falhando na compilação está desatualizado."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:434
+#: documentation/content/en/articles/contributing/_index.adoc:482
+msgid "Collect information"
+msgstr "Colete informação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:438
+msgid ""
+"Once you are aware of a problem, collect information to help you fix it. "
+"Build errors reported by `pkg-fallout` are accompanied by logs which will "
+"show you where the build failed. If the failure was reported to you by a "
+"user, ask them to send you information which may help in diagnosing the "
+"problem, such as:"
+msgstr ""
+"Assim que você estiver ciente de um problema, colete informações para ajudá-"
+"lo a corrigi-lo. Os erros de compilação relatados pelo `pkg-fallout` são "
+"acompanhados por logs que mostrarão onde a compilação falhou. Se a falha foi "
+"relatada por um usuário, peça a eles que enviem informações que possam "
+"ajudar a diagnosticar o problema, tais como:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:440
+msgid "Build logs"
+msgstr "Logs de compilação"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:441
+msgid ""
+"The commands and options used to build the port (including options set in [."
+"filename]#/etc/make.conf#)"
+msgstr ""
+"Os comandos e opções usados para compilar o port (incluindo opções definidas "
+"no [.filename]#/etc/make.conf#)"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:442
+msgid ""
+"A list of packages installed on their system as shown by man:pkg-info[8]"
+msgstr ""
+"Uma lista de pacotes instalados no seu sistema, conforme mostrado por man:"
+"pkg-info[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:443
+msgid "The version of FreeBSD they are running as shown by man:uname[1] `-a`"
+msgstr ""
+"A versão do FreeBSD que estão executando, conforme mostrado por man:uname[1] "
+"`-a`"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:444
+msgid "When their ports collection was last updated"
+msgstr "Quando a coleção de ports foi atualizada pela última vez"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:445
+msgid "When their ports tree and [.filename]#INDEX# was last updated"
+msgstr ""
+"Quando a sua coleção de ports e o arquivo [.filename]#INDEX# foram "
+"atualizados pela última vez"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:447
+msgid "Investigate and find a solution"
+msgstr "Investigue e encontre uma solução"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:450
+msgid ""
+"Unfortunately there is no straightforward process to follow to do this. "
+"Remember, though: if you are stuck, ask for help! The {freebsd-ports} is a "
+"good place to start, and the upstream developers are often very helpful."
+msgstr ""
+"Infelizmente, não há um processo direto a seguir para fazer isso. Lembre-se, "
+"no entanto: se estiver travado, peça ajuda! O {freebsd-ports} é um bom lugar "
+"para começar, e os desenvolvedores upstream geralmente são muito prestativos."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:453
+msgid ""
+"Just as with updating a port, you should now incorporate changes, review and "
+"test, submit your changes in a PR, and provide feedback if required."
+msgstr ""
+"Assim como na atualização de um port, agora você deve incorporar as "
+"alterações, revisar, testar e enviar suas alterações em um relatório de "
+"problemas (PR) e fornecer feedback, se solicitado."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:454
+msgid "Send patches to upstream authors"
+msgstr "Envie os patches para os autores upstream"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:459
+msgid ""
+"In some cases, you will have to make patches to the port to make it run on "
+"FreeBSD. Some (but not all) upstream authors will accept such patches back "
+"into their code for the next release. If so, this may even help their users "
+"on other BSD-based systems as well and perhaps save duplicated effort. "
+"Please consider sending any applicable patches to the authors as a courtesy."
+msgstr ""
+"Em alguns casos, você terá que fazer patches no port para fazê-lo funcionar "
+"no FreeBSD. Alguns (mas não todos) os autores upstream aceitarão tais "
+"patches em seu código para a próxima versão. Se for o caso, isso pode até "
+"ajudar seus usuários em outros sistemas baseados em BSD e talvez economizar "
+"esforço duplicado. Considere enviar quaisquer patches aplicáveis aos autores "
+"como uma cortesia."
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:461
+#, no-wrap
+msgid "Investigate bug reports and PRs related to your port"
+msgstr "Investigue relatórios de bugs e PRs relacionados ao seu port"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:464
+msgid "This section is about discovering and fixing bugs."
+msgstr "Esta seção é sobre como descobrir e corrigir bugs."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:467
+msgid ""
+"FreeBSD-specific bugs are generally caused by assumptions about the build "
+"and runtime environments that do not apply to FreeBSD. You are less likely "
+"to encounter a problem of this type, but it can be more subtle and difficult "
+"to diagnose."
+msgstr ""
+"Os bugs específicos do FreeBSD são geralmente causados por suposições sobre "
+"os ambientes de compilação e de tempo de execução que não se aplicam ao "
+"FreeBSD. É menos provável que você encontre um problema desse tipo, mas ele "
+"pode ser mais sutil e difícil de diagnosticar."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:469
+msgid ""
+"These are the tasks you need to perform to ensure your port continues to "
+"work as intended:"
+msgstr ""
+"Essas são as tarefas que você precisa realizar para garantir que seu port "
+"continue funcionando conforme o esperado:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:473
+msgid "Respond to bug reports"
+msgstr "Responda os relatórios de bugs"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:476
+msgid ""
+"Bugs may be reported to you through email via the https://bugs.FreeBSD.org/"
+"search/[Problem Report database]. Bugs may also be reported directly to you "
+"by users."
+msgstr ""
+"Os bugs podem ser relatados a você por e-mail através do https://bugs."
+"FreeBSD.org/search/[banco de dados de relatórios de problemas]. Os bugs "
+"também podem ser relatados diretamente a você pelos usuários."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:479
+msgid ""
+"You should respond to PRs and other reports within 14 days, but please try "
+"not to take that long. Try to respond as soon as possible, even if it is "
+"just to say you need some more time before you can work on the PR."
+msgstr ""
+"Você deve responder a PRs e outros relatórios dentro de 14 dias, mas tente "
+"não levar tanto tempo. Tente responder o mais rápido possível, mesmo que "
+"seja apenas para dizer que você precisa de mais tempo antes de poder "
+"trabalhar no PR."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:481
+msgid ""
+"If you have not responded after 14 days, any committer may commit from a PR "
+"that you have not responded to via a `maintainer-timeout`."
+msgstr ""
+"Se você não respondeu após 14 dias, qualquer committer pode fazer o commit "
+"de um PR que você não respondeu através de um `maintainer-timeout`."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:484
+msgid ""
+"If the person reporting the bug has not also provided a fix, you need to "
+"collect the information that will allow you to generate one."
+msgstr ""
+"Se a pessoa que reportou o bug também não forneceu uma correção, você "
+"precisa coletar as informações que permitirão gerar uma correção."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:487
+msgid ""
+"If the bug is reproducible, you can collect most of the required information "
+"yourself. If not, ask the person who reported the bug to collect the "
+"information for you, such as:"
+msgstr ""
+"Se o erro puder ser reproduzido, você pode coletar a maioria das informações "
+"necessárias por conta própria. Caso contrário, peça para a pessoa que "
+"relatou o erro coletar as informações para você, como:"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:489
+msgid ""
+"A detailed description of their actions, expected program behavior and "
+"actual behavior"
+msgstr ""
+"Uma descrição detalhada das ações realizadas, comportamento esperado do "
+"programa e comportamento atual"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:490
+msgid "Copies of input data used to trigger the bug"
+msgstr "Cópias dos dados de entrada usados para acionar o bug"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:491
+msgid ""
+"Information about their build and execution environment - for example, a "
+"list of installed packages and the output of man:env[1]"
+msgstr ""
+"Informações sobre o ambiente de compilação e execução - por exemplo, uma "
+"lista de pacotes instalados e a saída de man:env[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:492
+msgid "Core dumps"
+msgstr "Core dumps"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:493
+msgid "Stack traces"
+msgstr "Stack traces"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:495
+msgid "Eliminate incorrect reports"
+msgstr "Elimine os relatórios incorretos"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:501
+msgid ""
+"Some bug reports may be incorrect. For example, the user may have simply "
+"misused the program; or their installed packages may be out of date and "
+"require updating. Sometimes a reported bug is not specific to FreeBSD. In "
+"this case report the bug to the upstream developers. If the bug is within "
+"your capabilities to fix, you can also patch the port so that the fix is "
+"applied before the next upstream release."
+msgstr ""
+"Algumas notificações de bugs podem estar incorretas. Por exemplo, o usuário "
+"pode ter simplesmente utilizado o programa de forma inadequada ou seus "
+"pacotes instalados podem estar desatualizados e precisarem ser atualizados. "
+"Às vezes, um bug reportado não é específico do FreeBSD. Nesse caso, reporte "
+"o bug para os desenvolvedores upstream. Se o bug estiver dentro de suas "
+"capacidades de corrigir, você também pode corrigir o port para que a "
+"correção seja aplicada antes do próximo release upstream."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:502
+msgid "Find a solution"
+msgstr "Encontre uma solução"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:505
+msgid ""
+"As with build errors, you will need to sort out a fix to the problem. "
+"Again, remember to ask if you are stuck!"
+msgstr ""
+"Tal como acontece com erros de compilação, você precisará encontrar uma "
+"correção para o problema. Mais uma vez, lembre-se de perguntar se você "
+"estiver emperrado!"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:506
+msgid "Submit or approve changes"
+msgstr "Envie ou aprove alterações"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributing/_index.adoc:509
+msgid ""
+"Just as with updating a port, you should now incorporate changes, review and "
+"test, and submit your changes in a PR (or send a follow-up if a PR already "
+"exists for the problem). If another user has submitted changes in the PR, "
+"you can also send a follow-up saying whether or not you approve the changes."
+msgstr ""
+"Assim como na atualização de um port, você deve incorporar as mudanças, "
+"revisar e testar e enviar suas mudanças em um PR (ou enviar um "
+"acompanhamento se já existir um PR para o problema). Se outro usuário tiver "
+"enviado mudanças no PR, você também pode enviar um acompanhamento dizendo se "
+"aprova ou não as mudanças."
+
+#. type: Title =====
+#: documentation/content/en/articles/contributing/_index.adoc:511
+#, no-wrap
+msgid "Providing support"
+msgstr "Forneça Suporte"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:516
+msgid ""
+"Part of being a maintainer is providing support - not for the software in "
+"general - but for the port and any FreeBSD-specific quirks and problems. "
+"Users may contact you with questions, suggestions, problems and patches. "
+"Most of the time their correspondence will be specific to FreeBSD."
+msgstr ""
+"Parte de ser um mantenedor é fornecer suporte - não para o software em geral "
+"- mas para o port e quaisquer peculiaridades e problemas específicos do "
+"FreeBSD. Os usuários podem entrar em contato com você com perguntas, "
+"sugestões, problemas e patches. Na maioria das vezes, a correspondência "
+"deles será específica para o FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:520
+msgid ""
+"Occasionally you may have to invoke your skills in diplomacy, and kindly "
+"point users seeking general support to the appropriate resources. Less "
+"frequently you will encounter a person asking why the `RPMS` are not up to "
+"date or how can they get the software to run under Foo Linux. Take the "
+"opportunity to tell them that your port is up to date (if it is, of "
+"course!), and suggest that they try FreeBSD."
+msgstr ""
+"Ocasionalmente, você pode ter que invocar suas habilidades em diplomacia e "
+"gentilmente direcionar usuários que buscam suporte geral para os recursos "
+"apropriados. Com menos frequência, você encontrará alguém perguntando por "
+"que os `RPMS` não estão atualizados ou como eles podem fazer o software "
+"rodar no Foo Linux. Aproveite a oportunidade para dizer que seu port está "
+"atualizado (se estiver, é claro!) e sugira que eles experimentem o FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:523
+msgid ""
+"Sometimes users and developers will decide that you are a busy person whose "
+"time is valuable and do some of the work for you. For example, they might:"
+msgstr ""
+"Às vezes, os usuários e os desenvolvedores podem decidir que você é uma "
+"pessoa ocupada cujo tempo é valioso e farão parte do trabalho para você. Por "
+"exemplo, eles podem:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:525
+msgid "submit a PR or send you patches to update your port,"
+msgstr "enviar um PR ou lhe enviar patches para atualizar o seu port,"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:526
+msgid "investigate and perhaps provide a fix to a PR, or"
+msgstr "investigar e talvez fornecer uma correção para um PR, ou"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:527
+msgid "otherwise submit changes to your port."
+msgstr "caso contrário, enviar alterações para o seu port."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:533
+msgid ""
+"In these cases your main obligation is to respond in a timely manner. "
+"Again, the timeout for non-responsive maintainers is 14 days. After this "
+"period changes may be committed unapproved. They have taken the trouble to "
+"do this for you; so please try to at least respond promptly. Then review, "
+"approve, modify or discuss their changes with them as soon as possible."
+msgstr ""
+"Nesses casos, sua principal obrigação é responder de forma rápida. "
+"Novamente, o prazo para mantenedores não responsivos é de 14 dias. Após esse "
+"período, as alterações podem ser realizadas sem aprovação. Eles fizeram o "
+"esforço para ajudá-lo, então tente pelo menos responder prontamente. Em "
+"seguida, revise, aprove, modifique ou discuta as alterações com eles o mais "
+"rápido possível."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:535
+msgid ""
+"If you can make them feel that their contribution is appreciated (and it "
+"should be) you will have a better chance persuading them to do more things "
+"for you in the future :-)."
+msgstr ""
+"Se você puder fazê-los sentir que a contribuição deles é apreciada (e "
+"deveria ser), você terá uma chance maior de persuadi-los a fazer mais coisas "
+"para você no futuro :-)."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:537
+#, no-wrap
+msgid "Finding and fixing a broken port"
+msgstr "Encontre e conserte um port quebrado"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:540
+msgid ""
+"There are some really good places to find a port that needs some attention."
+msgstr ""
+"Existem alguns bons lugares para encontrar um port que precisa de atenção."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:543
+msgid ""
+"You can use the https://bugs.freebsd.org/search[web interface] to the "
+"Problem Report database to search through and view unresolved PRs. The "
+"majority of ports PRs are updates, but with a little searching and skimming "
+"over synopses you should be able to find something interesting to work on "
+"(the `sw-bug` class is a good place to start)."
+msgstr ""
+"Você pode usar a https://bugs.freebsd.org/search[interface web] do banco de "
+"dados de Relatórios de Problemas para pesquisar e visualizar relatórios de "
+"problemas não resolvidos. A maioria dos relatórios de problemas para os "
+"ports são atualizações, mas com uma pequena busca e leitura das sinopses "
+"você deverá ser capaz de encontrar algo interessante para trabalhar (a "
+"classe `sw-bug` é um bom lugar para começar)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:545
+msgid ""
+"https://portsfallout.com/[PortsFallout] shows port issues gathered from the "
+"FreeBSD package building."
+msgstr ""
+"O https://portsfallout.com/[PortsFallout] mostra problemas de ports "
+"coletados durante a compilação de pacotes no FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:547
+msgid ""
+"It is OK to send changes for a maintained port as well, but remember to ask "
+"the maintainer in case they are already working on the problem."
+msgstr ""
+"Também é OK enviar alterações para um port que possui um mantenedor, mas "
+"lembre-se de perguntar ao mantenedor no caso de já estarem trabalhando no "
+"problema."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:551
+msgid ""
+"Once you have found a bug or problem, collect information, investigate and "
+"fix! If there is an existing PR, follow up to that. Otherwise create a new "
+"PR. Your changes will be reviewed and, if everything checks out, committed."
+msgstr ""
+"Depois de encontrar um bug ou problema, colete informações, investigue e "
+"corrija! Se houver um PR existente, faça um follow-up nela. Caso contrário, "
+"crie um novo PR. Suas alterações serão revisadas e, se tudo estiver correto, "
+"serão comitadas."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:553
+#, no-wrap
+msgid "When to call it quits"
+msgstr "Quando desistir"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:559
+msgid ""
+"As your interests and commitments change, you may find that you no longer "
+"have time to continue some (or all) of your ports contributions. That is "
+"fine! Please let us know if you are no longer using a port or have otherwise "
+"lost time or interest in being a maintainer. In this way we can go ahead "
+"and allow other people to try to work on existing problems with the port "
+"without waiting for your response. Remember, FreeBSD is a volunteer "
+"project, so if maintaining a port is no fun any more, it is probably time to "
+"let someone else do it!"
+msgstr ""
+"À medida que seus interesses e compromissos mudam, você pode descobrir que "
+"não tem mais tempo para continuar com algumas (ou todas) as suas "
+"contribuições para a coleção de ports. Tudo bem! Por favor, nos avise se "
+"você não estiver mais usando um port ou se não tiver mais tempo ou interesse "
+"em ser um mantenedor. Desta forma, podemos seguir em frente e permitir que "
+"outras pessoas tentem trabalhar nos problemas existentes com o port sem "
+"termos que esperar por sua resposta. Lembre-se, o FreeBSD é um projeto "
+"voluntário, então se a manutenção de um port não for mais divertida, "
+"provavelmente é hora de deixar alguém fazer isso!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:563
+msgid ""
+"In any case, the Ports Management Team (`portmgr`) reserves the right to "
+"reset your maintainership if you have not actively maintained your port in "
+"some time. (Currently, this is set to 3 months.) By this, we mean that "
+"there are unresolved problems or pending updates that have not been worked "
+"on during that time."
+msgstr ""
+"Em qualquer caso, a equipe de gerenciamento de ports (`portmgr`) se reserva "
+"o direito de redefinir sua posição de mantenedor se você não mantiver "
+"ativamente seu port por algum tempo. (Atualmente, este tempo é de 3 meses.) "
+"Com isso, queremos dizer que existem problemas não resolvidos ou "
+"atualizações pendentes que não foram trabalhadas durante esse tempo."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributing/_index.adoc:565
+#, no-wrap
+msgid "Resources for ports maintainers and contributors"
+msgstr "Recursos para mantenedores de ports e contribuidores"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:568
+msgid ""
+"The extref:{porters-handbook}[Porter's Handbook] is your hitchhiker's guide "
+"to the ports system. Keep it handy!"
+msgstr ""
+"O extref:{porters-handbook}[Handbook do Mantenedor de Ports] é o seu guia do "
+"sistema de ports. Mantenha-o sempre à mão!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:571
+msgid ""
+"extref:{problem-reports}[Writing FreeBSD Problem Reports] describes how to "
+"best formulate and submit a PR. In 2005 more than eleven thousand ports PRs "
+"were submitted! Following this article will greatly assist us in reducing "
+"the time needed to handle your PRs."
+msgstr ""
+"o artigo extref:{problem-reports}[Escrevendo Relatórios de Problemas do "
+"FreeBSD] descreve como formular e submeter um PR da melhor maneira possível. "
+"Em 2005, mais de onze mil PRs de ports foram submetidos! Seguir este artigo "
+"ajudará muito a reduzir o tempo necessário para lidar com seus PRs."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:573
+msgid ""
+"The https://bugs.freebsd.org/bugzilla/query.cgi[Problem Report database]."
+msgstr ""
+"O https://bugs.freebsd.org/bugzilla/query.cgi[banco de dados de Relatórios "
+"de Problemas]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:576
+msgid ""
+"The http://portscout.FreeBSD.org[FreeBSD Ports distfile scanner (portscout)] "
+"can show you ports for which the distfiles are not fetchable. You can check "
+"on your own ports or use it to find ports that need their `MASTER_SITES` "
+"updated."
+msgstr ""
+"O http://portscout.FreeBSD.org[scanner de arquivos de distribuição de ports "
+"do FreeBSD (portscout)] pode mostrar os ports para os quais os arquivos de "
+"distribuição não podem ser baixados. Você pode verificar os seus próprios "
+"ports ou usá-lo para encontrar ports que precisam atualizar seus "
+"`MASTER_SITES`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:579
+msgid ""
+"package:ports-mgmt/poudriere[] is the most thorough way to test a port "
+"through the entire cycle of installation, packaging, and deinstallation. "
+"Documentation is located at the https://github.com/freebsd/"
+"poudriere[poudriere github repository]"
+msgstr ""
+"O package:ports-mgmt/poudriere[] é a maneira mais completa de testar um port "
+"por todo o ciclo de instalação, empacotamento e desinstalação. A "
+"documentação está localizada no https://github.com/freebsd/"
+"poudriere[repositório do GitHub do poudriere]"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:583
+msgid ""
+"man:portlint[1] is an application which can be used to verify that your port "
+"conforms to many important stylistic and functional guidelines. portlint is "
+"a simple heuristic application, so you should use it __only as a guide__. "
+"If portlint suggests changes which seem unreasonable, consult the extref:"
+"{porters-handbook}[Porter's Handbook] or ask for advice."
+msgstr ""
+"O man:portlint[1] é um aplicativo que pode ser usado para verificar se o seu "
+"port está em conformidade com muitas diretrizes estilísticas e funcionais "
+"importantes. O portlint é uma aplicação heurística simples, portanto, você "
+"deve usá-lo __apenas como guia__. Se o portlint sugerir mudanças que parecem "
+"inaceitáveis, consulte o extref:{porters-handbook}[Porter's Handbook] ou "
+"peça conselhos."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:588
+msgid ""
+"The {freebsd-ports} is for general ports-related discussion. It is a good "
+"place to ask for help. You can link:https://lists.freebsd.org/[subscribe, "
+"or read and search the list archives]. Reading the archives of the {freebsd-"
+"ports-bugs} and the {svn-ports-head} may also be of interest."
+msgstr ""
+"A {freebsd-ports} é o local para discussões gerais relacionadas a ports. É "
+"um bom lugar para pedir ajuda. Você pode se link:https://lists.freebsd.org/"
+"[inscrever], ou ler e pesquisar os arquivos da lista. Ler os arquivos das "
+"listas {freebsd-ports-bugs} e {svn-ports-head} também pode ser interessante."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:590
+msgid ""
+"https://portsfallout.com/[PortsFallout] is a place to help in searching for "
+"the https://lists.freebsd.org/archives/freebsd-pkg-fallout/[FreeBSD package-"
+"fallout archive]."
+msgstr ""
+"O https://portsfallout.com/[PortsFallout] é um site útil para buscar "
+"informações no https://lists.freebsd.org/archives/freebsd-pkg-fallout/"
+"[arquivo de erros de pacotes do FreeBSD]."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributing/_index.adoc:592
+#, no-wrap
+msgid "Getting Started in Other Areas"
+msgstr "Começando em outras áreas"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:595
+msgid ""
+"Looking for something interesting to get started that is not mentioned "
+"elsewhere in this article? The FreeBSD Project has several Wiki pages "
+"containing areas within which new contributors can get ideas on how to get "
+"started."
+msgstr ""
+"Procurando por algo interessante para começar, e que não foi mencionado em "
+"outras partes deste artigo? O Projeto FreeBSD tem várias páginas Wiki "
+"contendo áreas nas quais novos colaboradores podem ter ideias sobre como "
+"começar."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:597
+msgid ""
+"The https://wiki.freebsd.org/JuniorJobs[Junior Jobs] page has a list of "
+"projects that might be of interest to people just getting started in "
+"FreeBSD, and want to work on interesting things to get their feet wet."
+msgstr ""
+"A página https://wiki.freebsd.org/JuniorJobs[Junior Jobs] contém uma lista "
+"de projetos que podem interessar pessoas que estão começando no FreeBSD e "
+"querem trabalhar em coisas interessantes para se familiarizar com o sistema."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributing/_index.adoc:598
+msgid ""
+"The https://wiki.freebsd.org/IdeasPage[Ideas Page] contains various \"nice "
+"to have\" or \"interesting\" things to work on in the Project."
+msgstr ""
+"A https://wiki.freebsd.org/IdeasPage[página de idéias] contém várias "
+"sugestões de projetos \"interessantes\" ou \"nice to have\" para trabalhar "
+"no projeto."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+
+#, fuzzy
+#~ msgid ""
+#~ "At some stage a committer will deal with your PR. It may take minutes, "
+#~ "or it may take weeks - so please be patient."
+#~ msgstr ""
+#~ "Em algum momento, um commiter lidará com o seu PR. Isto pode levar alguns "
+#~ "minutos ou pode levar semanas - portanto, seja paciente."
diff --git a/documentation/content/pt-br/articles/contributors/_index.adoc b/documentation/content/pt-br/articles/contributors/_index.adoc
index 40236277af..fc4b4abf66 100644
--- a/documentation/content/pt-br/articles/contributors/_index.adoc
+++ b/documentation/content/pt-br/articles/contributors/_index.adoc
@@ -11,120 +11,69 @@ trademarks: ["freebsd", "sun", "general"]
:toclevels: 1
:icons: font
:sectnums:
+:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-:sectnumlevels: 6
+:images-path: articles/contributors/
-ifeval::["{backend}" == "html5"]
+ifdef::env-beastie[]
+ifdef::backend-html5[]
include::shared/authors.adoc[]
-include::shared/pt-br/urls.adoc[]
-:include-path: content/pt-br/articles/contributors/
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+:include-path: content/{{% lang %}}/articles/contributors/
+:include-contrib-386bsd: shared/contrib-386bsd.adoc
+:include-contrib-additional: shared/contrib-additional.adoc
+:include-contrib-committers: shared/contrib-committers.adoc
+:include-contrib-corealumni: shared/contrib-corealumni.adoc
+:include-contrib-develalumni: shared/contrib-develalumni.adoc
+:include-contrib-portmgralumni: shared/contrib-portmgralumni.adoc
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-include::../../../../shared/authors.adoc[]
-include::../../../../shared/pt-br/urls.adoc[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
:include-path:
+:include-contrib-386bsd: ../../../../shared/contrib-386bsd.adoc
+:include-contrib-additional: ../../../../shared/contrib-additional.adoc
+:include-contrib-committers: ../../../../shared/contrib-committers.adoc
+:include-contrib-corealumni: ../../../../shared/contrib-corealumni.adoc
+:include-contrib-develalumni: ../../../../shared/contrib-develalumni.adoc
+:include-contrib-portmgralumni: ../../../../shared/contrib-portmgralumni.adoc
+endif::[]
endif::[]
-ifeval::["{backend}" == "epub3"]
-include::../../../../shared/authors.adoc[]
-include::../../../../shared/pt-br/urls.adoc[]
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
:include-path:
+:include-contrib-386bsd: ../../../../../shared/contrib-386bsd.adoc
+:include-contrib-additional: ../../../../../shared/contrib-additional.adoc
+:include-contrib-committers: ../../../../../shared/contrib-committers.adoc
+:include-contrib-corealumni: ../../../../../shared/contrib-corealumni.adoc
+:include-contrib-develalumni: ../../../../../shared/contrib-develalumni.adoc
+:include-contrib-portmgralumni: ../../../../../shared/contrib-portmgralumni.adoc
endif::[]
[.abstract-title]
Resumo
-Este artigo lista pessoas e organizações que fizeram alguma contribuição para o FreeBSD.
+Este artigo lista pessoas e organizações que fizeram alguma contribuição para o FreeBSD. Para ver a lista atual de Committers do FreeBSD você pode dar uma olhada na seguinte <<staff-committers, lista>>.
'''
toc::[]
-[[donors]]
-== Galeria de Doadores
-
-[NOTE]
-====
-Como em 2010, a seção a seguir está desatualiza. Doadores de vários anos anteriores aparecerão https://www.FreeBSD.org/donations/donors/[aqui].
-====
-
-O Projeto FreeBSD é suportado financeiramente pelos seguintes doadores, e gostaríamos de agradecer a todos publicamente aqui!
-
-* _Contribuidores para o servidor central do projeto:_
-+
-As pessoas e as organizações a seguir possibilitaram ao Projeto FreeBSD construir um novo servidor central, que substituiu a `freefal.FreeBSD.org` em algum momento, doando os seguintes itens:
-
-** {mbarkah} e seu empregador, http://www.hemi.com/[ Hemisphere Online], doaram um _processador Pentium Pro (P6) 200MHz_
-** http://www.asacomputers.com/[ASA Computers] doou uma _placa mãe Tyan 1662_.
-** Joe McGuckin mailto:joe@via.net[joe@via.net] da http://www.via.net/[ViaNet Communications] doou um _controlador ethernet Kingston._
-** Jack O'Neill mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net] doou uma _controladora SCSI NCR 53C875_.
-** Ulf Zimmermann mailto:ulf@Alameda.net[ulf@Alameda.net] da http://www.Alameda.net/[Alameda Networks] doou _128MB de memória_, e uma _unidade de disco de 4 GB e o seu case._
-
-* _Financiamento direto:_
-+
-As seguintes pessoas e organizações generosamente contribuíram com financiamento direto ao projeto:
-
-** Annelise Anderson mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER.STANFORD.EDU]
-** {dillon}
-** http://www.bluemountain.com/[Blue Mountain Arts]
-** http://www.epilogue.com/[Epilogue Technology Corporation]
-** {sef}
-** http://www.gta.com/[Global Technology Associates, Inc]
-** Don Scott Wilde
-** Gianmarco Giovannelli mailto:gmarco@masternet.it[gmarco@masternet.it]
-** Josef C. Grosch mailto:joeg@truenorth.org[joeg@truenorth.org]
-** Robert T. Morris
-** {chuckr}
-** Kenneth P. Stox mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com] da http://www.imagescape.com/[Imaginary Landscape, LLC.]
-** Dmitry S. Kohmanyuk mailto:dk@dog.farm.org[dk@dog.farm.org]
-** http://www.cdrom.co.jp/[Laser5] do Japão (uma parte dos lucros das vendas de vários CD-ROMs com FreeBSD).
-** http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] doou uma parte dos seus lucros de _Hajimete no FreeBSD_ (FreeBSD, Getting started) para os projetos FreeBSD e XFree86.
-** http://www.ascii.co.jp/[ASCII Corp.] doou uma parte dos seus lucros com a venda de vários livros relacionados ao FreeBSD para o projeto FreeBSD.
-** http://www.yokogawa.co.jp/[Yokogawa Electric Corp] generosamente doou recursos significativos ao projeto FreeBSD.
-** http://www.buffnet.net/[BuffNET]
-** http://www.pacificsolutions.com/[Pacific Solutions]
-** http://www.siemens.de/[Siemens AG] via Andre Albsmeier mailto:andre.albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]
-** Chris Silva mailto:ras@interaccess.com[ras@interaccess.com]
-
-* _Doadores de Hardware:_
-+
-As seguintes pessoas e empresas generosamente contribuíram com hardware para testes e desenvolvimento/suporte de drivers de dispositivos:
-
-** BSDi por fornecer os computadores Pentium P5-90 e 486/DX2-66 EISA/VL que são utilizados para o nosso trabalho de desenvolvimento, para não falar do acesso a rede e outras doações de recursos de hardware.
-** http://www.compaq.com[Compaq] doou uma variedade de computadores Alpha systems para o projeto FreeBSD. Dentre várias generosas doações estão 4 AlphaStation DS10s, um AlphaServer DS20, AlphaServer 2100s, um AlphaServer 4100, 8 500Mhz Personal Workstations, 4 433Mhz Personal Workstations, e mais! Estas máquinas são usadas para engenharia de versões, empacotamento, desenvolvimento SMP, e desenvolvimento em geral para a arquitetura Alpha.
-** TRW Financial Systems, Inc. doou 130 PCs, três servidores de arquivos com 68 GB, doze Ethernets, dois roteadores e um switch ATM para debug de códigos diskless.
-** Dermot McDonnell doou o drive de CDROM Toshiba XM3401B atualmente usado na freefall.
-** Chuck Robey mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu] doou seu drive de fita para trabalho experimental.
-** Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], e {wilko}, doaram drives de fita Wangtek e Archive QIC-02 para melhorar o driver [.filename]#wt#.
-** Ernst Winter (http://berklix.org/ewinter/[Falecido]) contribuiu com um drive de disquete 2.88 MB para o projeto. Esperamos que isto aumente a pressão para reescrever o driver para disquetes.
-** http://www.tekram.com/[Tekram Technologies] enviou um de cada dos adaptadores FAST e ULTRA SCSI DC-390, DC-390U e DC-390F para testes de regressão dos drivers NCR e AMD com suas placas. Eles também devem ser aplaudidos por criarem o código fonte dos drivers para sistemas operacionais abertos disponíveis em seu servidor FTP em link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/].
-** Larry M. Augustin contribuiu não apenas com uma placa SCSI Symbios Sym8751S, mas também com um conjunto de manuais, incluindo um para o próximo chip Sym53c895 com suporte Ultra-2 e LVD, e o último manual de programação com informações sobre como utilizar com segurança as funcionalidades avançadas dos últimos chips SCSI Symbios. Muito obrigado!
-** {kuku} doou um drive de CD-ROM Mitsumi com 12x de velocidade FX120 para o desenvolvimento do driver IDE CDROM.
-** Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] doou quatro diversas placas ATM PCI cards com o objetivo de aumentar o suporte a estas placas bem como suportar o desenvolvimento da stack ATM netatm.
-
-* _Contribuidores Especiais:_
-
-** http://www.osd.bsdi.com/[BSDi] (antigo Walnut Creek CDROM) doou mais do que podemos dizer (veja a seção 'Sobre o Projeto FreeBSD' no link:{handbook}[FreeBSD Handbook] para mais detalhes). Em particular, nós gostaríamos de agradecê-los pelo hardware original utilizado na `freefall.FreeBSD.org`, nossa máquina de desenvolvimento primária, e pela `thud.FreeBSD.org`, uma máquina para compilações e testes. Nós também estamos em débito com eles pelo financiamento de vários contribuidores ao longo dos anos e por prover acesso irrestrito a nós em sua conexão com a Internet T1.
-** A http://www.interface-business.de/[interface business GmbH, Dresden] tem apoiado pacientemente {joerg} que muitas vezes preferiu o trabalho no FreeBSD ao invés de um trabalho remunerado, e costuma usar sua conexão de Internet da EUnet (bem caro) sempre que sua conexão privada se torna lenta demais para trabalhar com ela…
-** http://www.bsdi.com/[Berkeley Software Design, Inc.] contribuiu com seu código de emulação do DOS para o mundo BSD, o qual é utilizado no comando _doscmd_.
-
[[staff-committers]]
== Os Desenvolvedores do FreeBSD
-Estas são as pessoas que possuem privilégios de commit e fazem o trabalho de engenharia na árvore de código fonte do FreeBSD. Todos os membros do Core Team também são desenvolvedores.
+Esta lista, que inclui todos os membros do Core Team, nomeia todos que têm privilégios de commit para uma ou mais das três árvores de código (doc, ports e src). Para ver os membros atuais do Core Team, você pode dar uma olhada na link:https://www.freebsd.org/administration/#t-core[página de administração].
(em ordem alfabética pelo sobrenome):
-include::content/en/articles/contributors/contrib-committers.adoc[]
+include::{include-contrib-committers}[]
[[contrib-corealumni]]
== Ex Membros do Core Team
@@ -133,7 +82,7 @@ As seguintes pessoas eram membros do Core Team do FreeBSD durante os períodos i
_Em ordem cronológica reversa:_
-include::content/en/articles/contributors/contrib-corealumni.adoc[]
+include::{include-contrib-corealumni}[]
[[contrib-develalumni]]
== Ex Membros do Time de Desenvolvimento
@@ -142,7 +91,7 @@ As seguintes pessoas eram membros do time de desenvolvimento do FreeBSD durante
_Em ordem cronológica reversa:_
-include::content/en/articles/contributors/contrib-develalumni.adoc[]
+include::{include-contrib-develalumni}[]
[[contrib-portmgralumni]]
== Ex Membros do Ports Management
@@ -151,7 +100,7 @@ As seguintes pessoas eram membros do time portmgr do FreeBSD durante os período
_Em ordem cronológica reversa:_
-include::content/en/articles/contributors/contrib-portmgralumni.adoc[]
+include::{include-contrib-portmgralumni}[]
[[contrib-develinmemoriam]]
== Time de Desenvolvimento: Em memória
@@ -174,11 +123,83 @@ Há partes do NetBSD e do OpenBSD que foram integradas no FreeBSD também, e gos
(em ordem alfabética pelo primeiro nome):
-include::content/en/articles/contributors/contrib-additional.adoc[]
+include::{include-contrib-additional}[]
[[contrib-386bsd]]
== Contribuidores do Kit Patch 386BSD
(em ordem alfabética pelo primeiro nome):
-include::content/en/articles/contributors/contrib-386bsd.adoc[]
+include::{include-contrib-386bsd}[]
+
+[[donors]]
+== Galeria de Doadores
+
+A FreeBSD Foundation agradece aos https://freebsdfoundation.org/our-donors/donors/[doadores financeiros e em espécie].
+
+A área https://www.freebsd.org/donations/[de contato para doações ao FreeBSD] inclui uma https://www.freebsd.org/donations/donors/[lista de hardwares doados].
+
+O Projeto FreeBSD agradece a todos os doadores!
+
+[NOTE]
+====
+Desde de 2010, a seção abaixo estava desatualizada há vários anos.
+====
+
+=== Contribuidores para o projeto do servidor central
+
+As pessoas e as organizações a seguir possibilitaram ao Projeto FreeBSD construir um novo servidor central, que substituiu a `freefal.FreeBSD.org` em algum momento, doando os seguintes itens:
+
+* {mbarkah} e seu empregador, http://www.hemi.com/[Hemisphere Online], doaram uma _CPU Pentium Pro (P6) de 200MHz_.
+* http://www.asacomputers.com/[ASA Computers] doou uma _placa mãe Tyan 1662_.
+* Joe McGuckin <mailto:joe@via.net[joe@via.net]> da http://www.via.net/[ViaNet Communications] doou um _controlador de ethernet Kingston_.
+* Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> doou uma _controladora SCSI NCR 53C875_.
+* Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> da http://www.Alameda.net/[Alameda Networks] doou _128 MB de memória_, um _disco rígido de 4 GB e o case_.
+
+=== Financiamento direto
+
+As seguintes pessoas e organizações generosamente contribuíram com financiamento direto ao projeto:
+
+* Annelise Anderson <mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford.edu]>.
+* {dillon}.
+* http://www.bluemountain.com/[Blue Mountain Arts].
+* http://www.epilogue.com/[Epilogue Technology Corporation].
+* {sef}.
+* http://www.gta.com/[Global Technology Associates, Inc].
+* Don Scott Wilde.
+* Gianmarco Giovannelli <mailto:gmarco@masternet.it[gmarco@masternet.it]>.
+* Josef C. Grosch <mailto:joeg@truenorth.org[joeg@truenorth.org]>.
+* Robert T. Morris.
+* {chuckr}.
+* Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> da http://www.imagescape.com/[Imaginary Landscape, LLC.].
+* Dmitry S. Kohmanyuk <mailto:dk@dog.farm.org[dk@dog.farm.org]>.
+* http://www.cdrom.co.jp/[Laser5] do Japão (uma parte dos lucros das vendas de vários CD-ROMs com FreeBSD).
+* http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] doou uma parte dos seus lucros de _Hajimete no FreeBSD_ (FreeBSD, Getting started) para os projetos FreeBSD e XFree86.
+* http://www.ascii.co.jp/[ASCII Corp.] doou uma parte dos seus lucros com a venda de vários livros relacionados ao FreeBSD para o projeto FreeBSD.
+* http://www.yokogawa.co.jp/[Yokogawa Electric Corp] generosamente doou recursos significativos ao projeto FreeBSD.
+* http://www.buffnet.net/[BuffNET].
+* http://www.pacificsolutions.com/[Pacific Solutions].
+* http://www.siemens.de/[Siemens AG] via Andre Albsmeier <mailto:andre.albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>.
+* Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>.
+
+=== Doadores de Hardware
+
+As seguintes pessoas e empresas generosamente contribuíram com hardware para testes e desenvolvimento/suporte de drivers de dispositivos:
+
+* BSDi por fornecer os computadores Pentium P5-90 e 486/DX2-66 EISA/VL que são utilizados para o nosso trabalho de desenvolvimento, para não falar do acesso a rede e outras doações de recursos de hardware.
+* A http://www.compaq.com[Compaq] doou uma variedade de sistemas Alpha para o Projeto FreeBSD. Entre as muitas doações generosas estão 4 AlphaStation DS10s, um AlphaServer DS20, AlphaServer 2100s, um AlphaServer 4100, 8 estações de trabalho pessoais de 500 MHz, 4 estações de trabalho pessoais de 433 MHz e mais! Essas máquinas são usadas para engenharia de releases, compilação de pacotes, desenvolvimento SMP e desenvolvimento geral na arquitetura Alpha.
+* A TRW Financial Systems, Inc. forneceu 130 PCs, três servidores de arquivos de 68 GB, doze Ethernets, dois roteadores e um switch ATM para depuração do código "diskless"
+* Dermot McDonnell doou o drive de CDROM Toshiba XM3401B atualmente usado na _freefall_.
+* Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> doou seu drive de fita para trabalho experimental.
+* Larry Altneu <mailto:larry@alr.com[larry@alr.com],> e {wilko} forneceram drives de fita Wangtek e Archive QIC-02 para melhorar o driver [.filename]#wt#.
+* Ernst Winter (http://berklix.org/ewinter/[Falecido]) contribuiu com um drive de disquete 2.88 MB para o projeto. Esperamos que isto aumente a pressão para reescrever o driver para disquetes.
+* A http://www.tekram.com/[Tekram Technologies] enviou um de seus cartões adaptadores de host FAST e ULTRA SCSI DC-390, DC-390U e DC-390F para testes de regressão dos drivers NCR e AMD com seus cartões. Eles também devem ser aplaudidos por disponibilizar fontes de driver para sistemas operacionais gratuitos em seu servidor FTP link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/].
+* Larry M. Augustin contribuiu não apenas com uma placa SCSI Symbios Sym8751S, mas também com um conjunto de manuais, incluindo um para o próximo chip Sym53c895 com suporte Ultra-2 e LVD, e o último manual de programação com informações sobre como utilizar com segurança as funcionalidades avançadas dos últimos chips SCSI Symbios. Muito obrigado!
+* {kuku} doou um drive de CD-ROM Mitsumi com 12x de velocidade FX120 para o desenvolvimento do driver IDE CDROM.
+* Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> doou quatro diferentes placas PCI ATM para ajudar a aumentar o suporte dessas placas, bem como apoiar o esforço de desenvolvimento da pilha ATM netatm.
+
+=== Contribuidores Especiais
+
+* http://www.osd.bsdi.com/[BSDi] (antigo Walnut Creek CDROM) doou mais do que podemos dizer (veja a seção 'Sobre o Projeto FreeBSD' no extref:{handbook}[FreeBSD Handbook] para mais detalhes). Em particular, nós gostaríamos de agradecê-los pelo hardware original utilizado na `freefall.FreeBSD.org`, nossa máquina de desenvolvimento primária, e pela `thud.FreeBSD.org`, uma máquina para compilações e testes. Nós também estamos em débito com eles pelo financiamento de vários contribuidores ao longo dos anos e por prover acesso irrestrito a nós em sua conexão com a Internet T1.
+* A http://www.interface-business.de/[interface business GmbH, Dresden] tem apoiado pacientemente {joerg} que muitas vezes preferiu trabalhar no FreeBSD em vez de trabalhos remunerados, e costumava recorrer à conexão com a Internet da EUnet (bastante cara) sempre que sua conexão privada ficava muito lenta ou instável para trabalhar com ela.
+* http://www.bsdi.com/[Berkeley Software Design, Inc.] contribuiu com seu código de emulador do DOS para o restante do mundo BSD, o qual é usado no comando `doscmd`.
diff --git a/documentation/content/pt-br/articles/contributors/_index.po b/documentation/content/pt-br/articles/contributors/_index.po
index 7836b6fda2..7554b2dd81 100644
--- a/documentation/content/pt-br/articles/contributors/_index.po
+++ b/documentation/content/pt-br/articles/contributors/_index.po
@@ -1,13 +1,15 @@
# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
-# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-06-08 07:32-0300\n"
-"PO-Revision-Date: 2021-07-25 13:04+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-26 19:22+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/articlescontributors_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,15 +17,13 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.7.2\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/contributors/_index.adoc:1
#, no-wrap
msgid "A list of organizations and individuals who have contributed to FreeBSD"
-msgstr ""
-"Este artigo lista pessoas e organizações que fizeram alguma contribuição "
-"para o FreeBSD"
+msgstr "Este artigo lista pessoas e organizações que fizeram alguma contribuição para o FreeBSD"
#. type: Title =
#: documentation/content/en/articles/contributors/_index.adoc:1
@@ -33,73 +33,244 @@ msgid "Contributors to FreeBSD"
msgstr "Contribuidores do FreeBSD"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:38
+#: documentation/content/en/articles/contributors/_index.adoc:62
msgid "Abstract"
msgstr "Resumo"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:40
+#: documentation/content/en/articles/contributors/_index.adoc:65
msgid ""
"This article lists individuals and organizations who have made a "
-"contribution to FreeBSD."
+"contribution to FreeBSD. To see the current list of FreeBSD Committers you "
+"can take a look at the following <<staff-committers, list>>."
msgstr ""
"Este artigo lista pessoas e organizações que fizeram alguma contribuição "
-"para o FreeBSD."
+"para o FreeBSD. Para ver a lista atual de Committers do FreeBSD você pode "
+"dar uma olhada na seguinte <<staff-committers, lista>>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:42
+#: documentation/content/en/articles/contributors/_index.adoc:67
msgid "'''"
msgstr "'''"
#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:46
+#: documentation/content/en/articles/contributors/_index.adoc:71
+#, no-wrap
+msgid "The FreeBSD Developers"
+msgstr "Os Desenvolvedores do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:75
+msgid ""
+"This list, which includes all members of the Core Team, names everyone who "
+"has commit privileges for one or more of the three source trees (doc, ports "
+"and src). To see the current Core Team members you can take a look at the "
+"link:https://www.freebsd.org/administration/#t-core[administration page]."
+msgstr ""
+"Esta lista, que inclui todos os membros do Core Team, nomeia todos que têm "
+"privilégios de commit para uma ou mais das três árvores de código (doc, "
+"ports e src). Para ver os membros atuais do Core Team, você pode dar uma "
+"olhada na link:https://www.freebsd.org/administration/#t-core[página de "
+"administração]."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:77
+msgid "(in alphabetical order by last name):"
+msgstr "(em ordem alfabética pelo sobrenome):"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:81
+#, no-wrap
+msgid "Core Team Alumni"
+msgstr "Ex Membros do Core Team"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:85
+msgid ""
+"The following people were members of the FreeBSD core team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+"As seguintes pessoas eram membros do Core Team do FreeBSD durante os "
+"períodos indicados. Agradecemos por seus esforços anteriores a serviço do "
+"projeto FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:87
+#: documentation/content/en/articles/contributors/_index.adoc:97
+#: documentation/content/en/articles/contributors/_index.adoc:107
+msgid "_In rough reverse chronological order:_"
+msgstr "_Em ordem cronológica reversa:_"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:91
+#, no-wrap
+msgid "Development Team Alumni"
+msgstr "Ex Membros do Time de Desenvolvimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:95
+msgid ""
+"The following people were members of the FreeBSD development team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+"As seguintes pessoas eram membros do time de desenvolvimento do FreeBSD "
+"durante os períodos indicados. Agradecemos por seus esforços anteriores a "
+"serviço do projeto FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:101
+#, no-wrap
+msgid "Ports Management Team Alumni"
+msgstr "Ex Membros do Ports Management"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:105
+msgid ""
+"The following people were members of the FreeBSD portmgr team during the "
+"periods indicated. We thank them for their past efforts in the service of "
+"the FreeBSD project."
+msgstr ""
+"As seguintes pessoas eram membros do time portmgr do FreeBSD durante os "
+"períodos indicados. Agradecemos por seus esforços anteriores a serviço do "
+"projeto FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:111
+#, no-wrap
+msgid "Development Team: In Memoriam"
+msgstr "Time de Desenvolvimento: Em memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:115
+msgid ""
+"During the many years that the FreeBSD Project has been in existence, sadly, "
+"some of our developers have passed away. Here are some remembrances."
+msgstr ""
+"Durante os muitos anos de existência do Projeto FreeBSD, infelizmente, "
+"alguns de nossos desenvolvedores faleceram. Aqui estão algumas lembranças."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:117
+msgid "_In rough reverse chronological order of their passing:_"
+msgstr ""
+"_Em ordem cronológica reversa da data aproximada de seus falecimentos:_"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:121
+#, no-wrap
+msgid "Derived Software Contributors"
+msgstr "Contribuidores de Software Derivados"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:125
+msgid ""
+"This software was originally derived from William F. Jolitz's 386BSD release "
+"0.1, though almost none of the original 386BSD specific code remains. This "
+"software has been essentially re-implemented from the 4.4BSD-Lite release "
+"provided by the Computer Science Research Group (CSRG) at the University of "
+"California, Berkeley and associated academic contributors."
+msgstr ""
+"Este software foi originalmente derivado do release 0.1 de William F. "
+"Jolitz, embora quase nenhum código específico original do 386BSD permaneça. "
+"Este software foi essencialmente reimplementado a partir da versão 4.4BSD-"
+"Lite fornecida pelo Computer Science Research Group (CSRG) na Universidade "
+"da Califórnia, Berkeley e colaboradores acadêmicos associados."
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:127
+msgid ""
+"There are also portions of NetBSD and OpenBSD that have been integrated into "
+"FreeBSD as well, and we would therefore like to thank all the contributors "
+"to NetBSD and OpenBSD for their work."
+msgstr ""
+"Há partes do NetBSD e do OpenBSD que foram integradas no FreeBSD também, e "
+"gostaríamos de agradecer a todos os contribuidores do NetBSD e do OpenBSD "
+"pelo seus trabalhos."
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:129
+#, no-wrap
+msgid "Additional FreeBSD Contributors"
+msgstr "Contribuidores Adicionais do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:132
+#: documentation/content/en/articles/contributors/_index.adoc:139
+msgid "(in alphabetical order by first name):"
+msgstr "(em ordem alfabética pelo primeiro nome):"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:136
+#, no-wrap
+msgid "386BSD Patch Kit Patch Contributors"
+msgstr "Contribuidores do Kit Patch 386BSD"
+
+#. type: Title ==
+#: documentation/content/en/articles/contributors/_index.adoc:143
#, no-wrap
msgid "Donors Gallery"
msgstr "Galeria de Doadores"
-#. type: delimited block = 4
-#: documentation/content/en/articles/contributors/_index.adoc:51
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:146
msgid ""
-"As of 2010, the following section is several years out-of-date. Donations "
-"from the past several years appear https://www.FreeBSD.org/donations/donors/"
-"[here]."
+"The FreeBSD Foundation thanks https://freebsdfoundation.org/our-donors/"
+"donors/[financial and in-kind donors]."
msgstr ""
-"Como em 2010, a seção a seguir está desatualiza. Doadores de vários anos "
-"anteriores aparecerão https://www.FreeBSD.org/donations/donors/[aqui]."
+"A FreeBSD Foundation agradece aos https://freebsdfoundation.org/our-donors/"
+"donors/[doadores financeiros e em espécie]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:54
+#: documentation/content/en/articles/contributors/_index.adoc:148
msgid ""
-"The FreeBSD Project is indebted to the following donors and would like to "
-"publicly thank them here!"
+"The https://www.freebsd.org/donations/[FreeBSD Donations Liaison] area "
+"includes a https://www.freebsd.org/donations/donors/[list of donated "
+"hardware]."
msgstr ""
-"O Projeto FreeBSD é suportado financeiramente pelos seguintes doadores, e "
-"gostaríamos de agradecer a todos publicamente aqui!"
+"A área https://www.freebsd.org/donations/[de contato para doações ao "
+"FreeBSD] inclui uma https://www.freebsd.org/donations/donors/[lista de "
+"hardwares doados]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:57
+#: documentation/content/en/articles/contributors/_index.adoc:150
+msgid "The FreeBSD Project thanks all donors!"
+msgstr "O Projeto FreeBSD agradece a todos os doadores!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/contributors/_index.adoc:154
+msgid "As of 2010, the section below was several years out-of-date."
+msgstr "Desde de 2010, a seção abaixo estava desatualizada há vários anos."
+
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:156
+#, no-wrap
+msgid "Contributors to the central server project"
+msgstr "Contribuidores para o projeto do servidor central"
+
+#. type: Plain text
+#: documentation/content/en/articles/contributors/_index.adoc:159
msgid ""
-"_Contributors to the central server project:_ The following individuals and "
-"businesses made it possible for the FreeBSD Project to build a new central "
-"server machine, which has replaced `freefall.FreeBSD.org` at one point, by "
-"donating the following items:"
+"The following individuals and businesses made it possible for the FreeBSD "
+"Project to build a new central server machine, which has replaced `freefall."
+"FreeBSD.org` at one point, by donating the following items:"
msgstr ""
-"_Contribuidores para o servidor central do projeto:_ As pessoas e as "
-"organizações a seguir possibilitaram ao Projeto FreeBSD construir um novo "
-"servidor central, que substituiu a `freefal.FreeBSD.org` em algum momento, "
-"doando os seguintes itens:"
+"As pessoas e as organizações a seguir possibilitaram ao Projeto FreeBSD "
+"construir um novo servidor central, que substituiu a `freefal.FreeBSD.org` "
+"em algum momento, doando os seguintes itens:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:59
+#: documentation/content/en/articles/contributors/_index.adoc:161
msgid ""
-"{mbarkah} and his employer, http://www.hemi.com/[ Hemisphere Online], "
-"donated a _Pentium Pro (P6) 200MHz CPU_"
+"{mbarkah} and his employer, http://www.hemi.com/[Hemisphere Online], donated "
+"a _Pentium Pro (P6) 200MHz CPU_."
msgstr ""
-"{mbarkah} e seu empregador, http://www.hemi.com/[ Hemisphere Online], doaram "
-"um _processador Pentium Pro (P6) 200MHz_"
+"{mbarkah} e seu empregador, http://www.hemi.com/[Hemisphere Online], doaram "
+"uma _CPU Pentium Pro (P6) de 200MHz_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:60
+#: documentation/content/en/articles/contributors/_index.adoc:162
msgid ""
"http://www.asacomputers.com/[ASA Computers] donated a _Tyan 1662 "
"motherboard_."
@@ -107,41 +278,42 @@ msgstr ""
"http://www.asacomputers.com/[ASA Computers] doou uma _placa mãe Tyan 1662_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:61
+#: documentation/content/en/articles/contributors/_index.adoc:163
msgid ""
-"Joe McGuckin mailto:joe@via.net[joe@via.net] of http://www.via.net/[ViaNet "
-"Communications] donated a _Kingston ethernet controller._"
+"Joe McGuckin <mailto:joe@via.net[joe@via.net]> of http://www.via.net/[ViaNet "
+"Communications] donated a _Kingston ethernet controller_."
msgstr ""
-"Joe McGuckin mailto:joe@via.net[joe@via.net] da http://www.via.net/[ViaNet "
-"Communications] doou um _controlador ethernet Kingston._"
+"Joe McGuckin <mailto:joe@via.net[joe@via.net]> da http://www.via.net/[ViaNet "
+"Communications] doou um _controlador de ethernet Kingston_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:62
+#: documentation/content/en/articles/contributors/_index.adoc:164
msgid ""
-"Jack O'Neill mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net] "
+"Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> "
"donated an _NCR 53C875 SCSI controller card_."
msgstr ""
-"Jack O'Neill mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net] "
+"Jack O'Neill <mailto:jack@diamond.xtalwind.net[jack@diamond.xtalwind.net]> "
"doou uma _controladora SCSI NCR 53C875_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:63
+#: documentation/content/en/articles/contributors/_index.adoc:165
msgid ""
-"Ulf Zimmermann mailto:ulf@Alameda.net[ulf@Alameda.net] of http://www.Alameda."
-"net/[Alameda Networks] donated _128MB of memory_, a _4 Gb disk drive and the "
-"case._"
+"Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> of http://www."
+"Alameda.net/[Alameda Networks] donated _128MB of memory_, a _4 Gb disk drive "
+"and the case_."
msgstr ""
-"Ulf Zimmermann mailto:ulf@Alameda.net[ulf@Alameda.net] da http://www.Alameda."
-"net/[Alameda Networks] doou _128MB de memória_, e uma _unidade de disco de 4 "
-"GB e o seu case._"
+"Ulf Zimmermann <mailto:ulf@Alameda.net[ulf@Alameda.net]> da http://www."
+"Alameda.net/[Alameda Networks] doou _128 MB de memória_, um _disco rígido de "
+"4 GB e o case_."
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:65
-msgid "_Direct funding:_"
-msgstr "_Financiamento direto:_"
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:166
+#, no-wrap
+msgid "Direct funding"
+msgstr "Financiamento direto"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:67
+#: documentation/content/en/articles/contributors/_index.adoc:169
msgid ""
"The following individuals and businesses have generously contributed direct "
"funding to the project:"
@@ -150,80 +322,82 @@ msgstr ""
"financiamento direto ao projeto:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:69
+#: documentation/content/en/articles/contributors/_index.adoc:171
msgid ""
-"Annelise Anderson mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER.STANFORD."
-"EDU]"
+"Annelise Anderson <mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford."
+"edu]>."
msgstr ""
-"Annelise Anderson mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER.STANFORD."
-"EDU]"
+"Annelise Anderson <mailto:andrsn@hoover.stanford.edu[andrsn@hoover.stanford."
+"edu]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:70
-msgid "{dillon}"
-msgstr "{dillon}"
+#: documentation/content/en/articles/contributors/_index.adoc:172
+msgid "{dillon}."
+msgstr "{dillon}."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:71
-msgid "http://www.bluemountain.com/[Blue Mountain Arts]"
-msgstr "http://www.bluemountain.com/[Blue Mountain Arts]"
+#: documentation/content/en/articles/contributors/_index.adoc:173
+msgid "http://www.bluemountain.com/[Blue Mountain Arts]."
+msgstr "http://www.bluemountain.com/[Blue Mountain Arts]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:72
-msgid "http://www.epilogue.com/[Epilogue Technology Corporation]"
-msgstr "http://www.epilogue.com/[Epilogue Technology Corporation]"
+#: documentation/content/en/articles/contributors/_index.adoc:174
+msgid "http://www.epilogue.com/[Epilogue Technology Corporation]."
+msgstr "http://www.epilogue.com/[Epilogue Technology Corporation]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:73
-msgid "{sef}"
-msgstr "{sef}"
+#: documentation/content/en/articles/contributors/_index.adoc:175
+msgid "{sef}."
+msgstr "{sef}."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:74
-msgid "http://www.gta.com/[Global Technology Associates, Inc]"
-msgstr "http://www.gta.com/[Global Technology Associates, Inc]"
+#: documentation/content/en/articles/contributors/_index.adoc:176
+msgid "http://www.gta.com/[Global Technology Associates, Inc]."
+msgstr "http://www.gta.com/[Global Technology Associates, Inc]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:75
-msgid "Don Scott Wilde"
-msgstr "Don Scott Wilde"
+#: documentation/content/en/articles/contributors/_index.adoc:177
+msgid "Don Scott Wilde."
+msgstr "Don Scott Wilde."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:76
-msgid "Gianmarco Giovannelli mailto:gmarco@masternet.it[gmarco@masternet.it]"
-msgstr "Gianmarco Giovannelli mailto:gmarco@masternet.it[gmarco@masternet.it]"
+#: documentation/content/en/articles/contributors/_index.adoc:178
+msgid ""
+"Gianmarco Giovannelli <mailto:gmarco@masternet.it[gmarco@masternet.it]>."
+msgstr ""
+"Gianmarco Giovannelli <mailto:gmarco@masternet.it[gmarco@masternet.it]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:77
-msgid "Josef C. Grosch mailto:joeg@truenorth.org[joeg@truenorth.org]"
-msgstr "Josef C. Grosch mailto:joeg@truenorth.org[joeg@truenorth.org]"
+#: documentation/content/en/articles/contributors/_index.adoc:179
+msgid "Josef C. Grosch <mailto:joeg@truenorth.org[joeg@truenorth.org]>."
+msgstr "Josef C. Grosch <mailto:joeg@truenorth.org[joeg@truenorth.org]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:78
-msgid "Robert T. Morris"
-msgstr "Robert T. Morris"
+#: documentation/content/en/articles/contributors/_index.adoc:180
+msgid "Robert T. Morris."
+msgstr "Robert T. Morris."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:79
-msgid "{chuckr}"
-msgstr "{chuckr}"
+#: documentation/content/en/articles/contributors/_index.adoc:181
+msgid "{chuckr}."
+msgstr "{chuckr}."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:80
+#: documentation/content/en/articles/contributors/_index.adoc:182
msgid ""
-"Kenneth P. Stox mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com] of "
-"http://www.imagescape.com/[Imaginary Landscape, LLC.]"
+"Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> "
+"of http://www.imagescape.com/[Imaginary Landscape, LLC.]."
msgstr ""
-"Kenneth P. Stox mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com] da "
-"http://www.imagescape.com/[Imaginary Landscape, LLC.]"
+"Kenneth P. Stox <mailto:ken@stox.sa.enteract.com[ken@stox.sa.enteract.com]> "
+"da http://www.imagescape.com/[Imaginary Landscape, LLC.]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:81
-msgid "Dmitry S. Kohmanyuk mailto:dk@dog.farm.org[dk@dog.farm.org]"
-msgstr "Dmitry S. Kohmanyuk mailto:dk@dog.farm.org[dk@dog.farm.org]"
+#: documentation/content/en/articles/contributors/_index.adoc:183
+msgid "Dmitry S. Kohmanyuk <mailto:dk@dog.farm.org[dk@dog.farm.org]>."
+msgstr "Dmitry S. Kohmanyuk <mailto:dk@dog.farm.org[dk@dog.farm.org]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:82
+#: documentation/content/en/articles/contributors/_index.adoc:184
msgid ""
"http://www.cdrom.co.jp/[Laser5] of Japan (a portion of the profits from "
"sales of their various FreeBSD CDROMs)."
@@ -232,7 +406,7 @@ msgstr ""
"vários CD-ROMs com FreeBSD)."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:83
+#: documentation/content/en/articles/contributors/_index.adoc:185
msgid ""
"http://www.mmjp.or.jp/fuki/[Fuki Shuppan Publishing Co.] donated a portion "
"of their profits from _Hajimete no FreeBSD_ (FreeBSD, Getting started) to "
@@ -243,7 +417,7 @@ msgstr ""
"projetos FreeBSD e XFree86."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:84
+#: documentation/content/en/articles/contributors/_index.adoc:186
msgid ""
"http://www.ascii.co.jp/[ASCII Corp.] donated a portion of their profits from "
"several FreeBSD-related books to the FreeBSD project."
@@ -252,7 +426,7 @@ msgstr ""
"venda de vários livros relacionados ao FreeBSD para o projeto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:85
+#: documentation/content/en/articles/contributors/_index.adoc:187
msgid ""
"http://www.yokogawa.co.jp/[Yokogawa Electric Corp] has generously donated "
"significant funding to the FreeBSD project."
@@ -261,36 +435,37 @@ msgstr ""
"recursos significativos ao projeto FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:86
-msgid "http://www.buffnet.net/[BuffNET]"
-msgstr "http://www.buffnet.net/[BuffNET]"
+#: documentation/content/en/articles/contributors/_index.adoc:188
+msgid "http://www.buffnet.net/[BuffNET]."
+msgstr "http://www.buffnet.net/[BuffNET]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:87
-msgid "http://www.pacificsolutions.com/[Pacific Solutions]"
-msgstr "http://www.pacificsolutions.com/[Pacific Solutions]"
+#: documentation/content/en/articles/contributors/_index.adoc:189
+msgid "http://www.pacificsolutions.com/[Pacific Solutions]."
+msgstr "http://www.pacificsolutions.com/[Pacific Solutions]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:88
+#: documentation/content/en/articles/contributors/_index.adoc:190
msgid ""
-"http://www.siemens.de/[Siemens AG] via Andre Albsmeier mailto:andre."
-"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]"
+"http://www.siemens.de/[Siemens AG] via Andre Albsmeier <mailto:andre."
+"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>."
msgstr ""
-"http://www.siemens.de/[Siemens AG] via Andre Albsmeier mailto:andre."
-"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]"
+"http://www.siemens.de/[Siemens AG] via Andre Albsmeier <mailto:andre."
+"albsmeier@mchp.siemens.de[andre.albsmeier@mchp.siemens.de]>."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:89
-msgid "Chris Silva mailto:ras@interaccess.com[ras@interaccess.com]"
-msgstr "Chris Silva mailto:ras@interaccess.com[ras@interaccess.com]"
+#: documentation/content/en/articles/contributors/_index.adoc:191
+msgid "Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>."
+msgstr "Chris Silva <mailto:ras@interaccess.com[ras@interaccess.com]>."
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:91
-msgid "_Hardware contributors:_"
-msgstr "_Doadores de Hardware:_"
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:192
+#, no-wrap
+msgid "Hardware contributors"
+msgstr "Doadores de Hardware"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:93
+#: documentation/content/en/articles/contributors/_index.adoc:195
msgid ""
"The following individuals and businesses have generously contributed "
"hardware for testing and device driver development/support:"
@@ -299,7 +474,7 @@ msgstr ""
"testes e desenvolvimento/suporte de drivers de dispositivos:"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:95
+#: documentation/content/en/articles/contributors/_index.adoc:197
msgid ""
"BSDi for providing the Pentium P5-90 and 486/DX2-66 EISA/VL systems that are "
"being used for our development work, to say nothing of the network access "
@@ -310,7 +485,7 @@ msgstr ""
"acesso a rede e outras doações de recursos de hardware."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:96
+#: documentation/content/en/articles/contributors/_index.adoc:198
msgid ""
"http://www.compaq.com[Compaq] has donated a variety of Alpha systems to the "
"FreeBSD Project. Among the many generous donations are 4 AlphaStation DS10s, "
@@ -319,54 +494,55 @@ msgid ""
"machines are used for release engineering, package building, SMP "
"development, and general development on the Alpha architecture."
msgstr ""
-"http://www.compaq.com[Compaq] doou uma variedade de computadores Alpha "
-"systems para o projeto FreeBSD. Dentre várias generosas doações estão 4 "
-"AlphaStation DS10s, um AlphaServer DS20, AlphaServer 2100s, um AlphaServer "
-"4100, 8 500Mhz Personal Workstations, 4 433Mhz Personal Workstations, e "
-"mais! Estas máquinas são usadas para engenharia de versões, empacotamento, "
-"desenvolvimento SMP, e desenvolvimento em geral para a arquitetura Alpha."
+"A http://www.compaq.com[Compaq] doou uma variedade de sistemas Alpha para o "
+"Projeto FreeBSD. Entre as muitas doações generosas estão 4 AlphaStation "
+"DS10s, um AlphaServer DS20, AlphaServer 2100s, um AlphaServer 4100, 8 "
+"estações de trabalho pessoais de 500 MHz, 4 estações de trabalho pessoais de "
+"433 MHz e mais! Essas máquinas são usadas para engenharia de releases, "
+"compilação de pacotes, desenvolvimento SMP e desenvolvimento geral na "
+"arquitetura Alpha."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:97
+#: documentation/content/en/articles/contributors/_index.adoc:199
msgid ""
"TRW Financial Systems, Inc. provided 130 PCs, three 68 GB file servers, "
"twelve Ethernets, two routers and an ATM switch for debugging the diskless "
-"code."
+"code"
msgstr ""
-"TRW Financial Systems, Inc. doou 130 PCs, três servidores de arquivos com 68 "
-"GB, doze Ethernets, dois roteadores e um switch ATM para debug de códigos "
-"diskless."
+"A TRW Financial Systems, Inc. forneceu 130 PCs, três servidores de arquivos "
+"de 68 GB, doze Ethernets, dois roteadores e um switch ATM para depuração do "
+"código \"diskless\""
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:98
+#: documentation/content/en/articles/contributors/_index.adoc:200
msgid ""
"Dermot McDonnell donated the Toshiba XM3401B CDROM drive currently used in "
-"freefall."
+"_freefall_."
msgstr ""
"Dermot McDonnell doou o drive de CDROM Toshiba XM3401B atualmente usado na "
-"freefall."
+"_freefall_."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:99
+#: documentation/content/en/articles/contributors/_index.adoc:201
msgid ""
-"Chuck Robey mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu] contributed his "
-"floppy tape streamer for experimental work."
+"Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> contributed "
+"his floppy tape streamer for experimental work."
msgstr ""
-"Chuck Robey mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu] doou seu drive "
+"Chuck Robey <mailto:chuckr@glue.umd.edu[chuckr@glue.umd.edu]> doou seu drive "
"de fita para trabalho experimental."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:100
+#: documentation/content/en/articles/contributors/_index.adoc:202
msgid ""
-"Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], and {wilko}, provided "
-"Wangtek and Archive QIC-02 tape drives in order to improve the [."
-"filename]#wt# driver."
+"Larry Altneu <mailto:larry@alr.com[larry@alr.com],> and {wilko}, provided "
+"Wangtek and Archive QIC-02 tape drives to improve the [.filename]#wt# driver."
msgstr ""
-"Larry Altneu mailto:larry@ALR.COM[larry@ALR.COM], e {wilko}, doaram drives "
-"de fita Wangtek e Archive QIC-02 para melhorar o driver [.filename]#wt#."
+"Larry Altneu <mailto:larry@alr.com[larry@alr.com],> e {wilko} forneceram "
+"drives de fita Wangtek e Archive QIC-02 para melhorar o driver [."
+"filename]#wt#."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:101
+#: documentation/content/en/articles/contributors/_index.adoc:203
msgid ""
"Ernst Winter (http://berklix.org/ewinter/[Deceased]) contributed a 2.88 MB "
"floppy drive to the project. This will hopefully increase the pressure for "
@@ -377,7 +553,7 @@ msgstr ""
"para reescrever o driver para disquetes."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:102
+#: documentation/content/en/articles/contributors/_index.adoc:204
msgid ""
"http://www.tekram.com/[Tekram Technologies] sent one each of their DC-390, "
"DC-390U and DC-390F FAST and ULTRA SCSI host adapter cards for regression "
@@ -386,15 +562,15 @@ msgid ""
"from their FTP server link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://ftp."
"tekram.com/scsi/FreeBSD/]."
msgstr ""
-"http://www.tekram.com/[Tekram Technologies] enviou um de cada dos "
-"adaptadores FAST e ULTRA SCSI DC-390, DC-390U e DC-390F para testes de "
-"regressão dos drivers NCR e AMD com suas placas. Eles também devem ser "
-"aplaudidos por criarem o código fonte dos drivers para sistemas operacionais "
-"abertos disponíveis em seu servidor FTP em link:ftp://ftp.tekram.com/scsi/"
-"FreeBSD/[ftp://ftp.tekram.com/scsi/FreeBSD/]."
+"A http://www.tekram.com/[Tekram Technologies] enviou um de seus cartões "
+"adaptadores de host FAST e ULTRA SCSI DC-390, DC-390U e DC-390F para testes "
+"de regressão dos drivers NCR e AMD com seus cartões. Eles também devem ser "
+"aplaudidos por disponibilizar fontes de driver para sistemas operacionais "
+"gratuitos em seu servidor FTP link:ftp://ftp.tekram.com/scsi/FreeBSD/[ftp://"
+"ftp.tekram.com/scsi/FreeBSD/]."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:103
+#: documentation/content/en/articles/contributors/_index.adoc:205
msgid ""
"Larry M. Augustin contributed not only a Symbios Sym8751S SCSI card, but "
"also a set of data books, including one about the forthcoming Sym53c895 chip "
@@ -409,7 +585,7 @@ msgstr ""
"dos últimos chips SCSI Symbios. Muito obrigado!"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:104
+#: documentation/content/en/articles/contributors/_index.adoc:206
msgid ""
"{kuku} donated an FX120 12 speed Mitsumi CDROM drive for IDE CDROM driver "
"development."
@@ -418,27 +594,28 @@ msgstr ""
"desenvolvimento do driver IDE CDROM."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:105
+#: documentation/content/en/articles/contributors/_index.adoc:207
msgid ""
-"Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] donated four various ATM "
-"PCI cards in order to help increase support of these cards as well as help "
-"support the development effort of the netatm ATM stack."
+"Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> donated four various ATM "
+"PCI cards to help increase support of these cards as well as help support "
+"the development effort of the netatm ATM stack."
msgstr ""
-"Mike Tancsa mailto:mike@sentex.ca[mike@sentex.ca] doou quatro diversas "
-"placas ATM PCI cards com o objetivo de aumentar o suporte a estas placas bem "
-"como suportar o desenvolvimento da stack ATM netatm."
+"Mike Tancsa <mailto:mike@sentex.ca[mike@sentex.ca]> doou quatro diferentes "
+"placas PCI ATM para ajudar a aumentar o suporte dessas placas, bem como "
+"apoiar o esforço de desenvolvimento da pilha ATM netatm."
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:107
-msgid "_Special contributors:_"
-msgstr "_Contribuidores Especiais:_"
+#. type: Title ===
+#: documentation/content/en/articles/contributors/_index.adoc:208
+#, no-wrap
+msgid "Special contributors"
+msgstr "Contribuidores Especiais"
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:109
+#: documentation/content/en/articles/contributors/_index.adoc:211
msgid ""
"http://www.osd.bsdi.com/[BSDi] (formerly Walnut Creek CDROM) has donated "
"almost more than we can say (see the 'About the FreeBSD Project' section of "
-"the link:{handbook}[FreeBSD Handbook] for more details). In particular, we "
+"the extref:{handbook}[FreeBSD Handbook] for more details). In particular, we "
"would like to thank them for the original hardware used for `freefall."
"FreeBSD.org`, our primary development machine, and for `thud.FreeBSD.org`, a "
"testing and build box. We are also indebted to them for funding various "
@@ -446,8 +623,8 @@ msgid ""
"T1 connection to the Internet."
msgstr ""
"http://www.osd.bsdi.com/[BSDi] (antigo Walnut Creek CDROM) doou mais do que "
-"podemos dizer (veja a seção 'Sobre o Projeto FreeBSD' no link:{handbook}["
-"FreeBSD Handbook] para mais detalhes). Em particular, nós gostaríamos de "
+"podemos dizer (veja a seção 'Sobre o Projeto FreeBSD' no extref:{handbook}"
+"[FreeBSD Handbook] para mais detalhes). Em particular, nós gostaríamos de "
"agradecê-los pelo hardware original utilizado na `freefall.FreeBSD.org`, "
"nossa máquina de desenvolvimento primária, e pela `thud.FreeBSD.org`, uma "
"máquina para compilações e testes. Nós também estamos em débito com eles "
@@ -455,176 +632,67 @@ msgstr ""
"acesso irrestrito a nós em sua conexão com a Internet T1."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:110
+#: documentation/content/en/articles/contributors/_index.adoc:212
msgid ""
"The http://www.interface-business.de/[interface business GmbH, Dresden] has "
"been patiently supporting {joerg} who has often preferred FreeBSD work over "
"paid work, and used to fall back to their (quite expensive) EUnet Internet "
"connection whenever his private connection became too slow or flaky to work "
-"with it..."
+"with it."
msgstr ""
"A http://www.interface-business.de/[interface business GmbH, Dresden] tem "
-"apoiado pacientemente {joerg} que muitas vezes preferiu o trabalho no "
-"FreeBSD ao invés de um trabalho remunerado, e costuma usar sua conexão de "
-"Internet da EUnet (bem caro) sempre que sua conexão privada se torna lenta "
-"demais para trabalhar com ela…"
+"apoiado pacientemente {joerg} que muitas vezes preferiu trabalhar no FreeBSD "
+"em vez de trabalhos remunerados, e costumava recorrer à conexão com a "
+"Internet da EUnet (bastante cara) sempre que sua conexão privada ficava "
+"muito lenta ou instável para trabalhar com ela."
#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:111
+#: documentation/content/en/articles/contributors/_index.adoc:212
msgid ""
"http://www.bsdi.com/[Berkeley Software Design, Inc.] has contributed their "
-"DOS emulator code to the remaining BSD world, which is used in the _doscmd_ "
+"DOS emulator code to the remaining BSD world, which is used in the `doscmd` "
"command."
msgstr ""
"http://www.bsdi.com/[Berkeley Software Design, Inc.] contribuiu com seu "
-"código de emulação do DOS para o mundo BSD, o qual é utilizado no comando "
-"_doscmd_."
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:113
-#, no-wrap
-msgid "The FreeBSD Developers"
-msgstr "Os Desenvolvedores do FreeBSD"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:117
-msgid ""
-"These are the people who have commit privileges and do the engineering work "
-"on the FreeBSD source tree. All core team members are also developers."
-msgstr ""
-"Estas são as pessoas que possuem privilégios de commit e fazem o trabalho de "
-"engenharia na árvore de código fonte do FreeBSD. Todos os membros do Core "
-"Team também são desenvolvedores."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:119
-msgid "(in alphabetical order by last name):"
-msgstr "(em ordem alfabética pelo sobrenome):"
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:123
-#, no-wrap
-msgid "Core Team Alumni"
-msgstr "Ex Membros do Core Team"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:127
-msgid ""
-"The following people were members of the FreeBSD core team during the "
-"periods indicated. We thank them for their past efforts in the service of "
-"the FreeBSD project."
-msgstr ""
-"As seguintes pessoas eram membros do Core Team do FreeBSD durante os "
-"períodos indicados. Agradecemos por seus esforços anteriores a serviço do "
-"projeto FreeBSD."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:129
-#: documentation/content/en/articles/contributors/_index.adoc:139
-#: documentation/content/en/articles/contributors/_index.adoc:149
-msgid "_In rough reverse chronological order:_"
-msgstr "_Em ordem cronológica reversa:_"
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:133
-#, no-wrap
-msgid "Development Team Alumni"
-msgstr "Ex Membros do Time de Desenvolvimento"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:137
-msgid ""
-"The following people were members of the FreeBSD development team during the "
-"periods indicated. We thank them for their past efforts in the service of "
-"the FreeBSD project."
-msgstr ""
-"As seguintes pessoas eram membros do time de desenvolvimento do FreeBSD "
-"durante os períodos indicados. Agradecemos por seus esforços anteriores a "
-"serviço do projeto FreeBSD."
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:143
-#, no-wrap
-msgid "Ports Management Team Alumni"
-msgstr "Ex Membros do Ports Management"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:147
-msgid ""
-"The following people were members of the FreeBSD portmgr team during the "
-"periods indicated. We thank them for their past efforts in the service of "
-"the FreeBSD project."
-msgstr ""
-"As seguintes pessoas eram membros do time portmgr do FreeBSD durante os "
-"períodos indicados. Agradecemos por seus esforços anteriores a serviço do "
-"projeto FreeBSD."
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:153
-#, no-wrap
-msgid "Development Team: In Memoriam"
-msgstr "Time de Desenvolvimento: Em memória"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:157
-msgid ""
-"During the many years that the FreeBSD Project has been in existence, sadly, "
-"some of our developers have passed away. Here are some remembrances."
-msgstr ""
-"Durante os muitos anos de existência do Projeto FreeBSD, infelizmente, "
-"alguns de nossos desenvolvedores faleceram. Aqui estão algumas lembranças."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:159
-msgid "_In rough reverse chronological order of their passing:_"
-msgstr "_Em ordem cronológica reversa da data aproximada de seus falecimentos:_"
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:163
-#, no-wrap
-msgid "Derived Software Contributors"
-msgstr "Contribuidores de Software Derivados"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:167
-msgid ""
-"This software was originally derived from William F. Jolitz's 386BSD release "
-"0.1, though almost none of the original 386BSD specific code remains. This "
-"software has been essentially re-implemented from the 4.4BSD-Lite release "
-"provided by the Computer Science Research Group (CSRG) at the University of "
-"California, Berkeley and associated academic contributors."
-msgstr ""
-"Este software foi originalmente derivado do release 0.1 de William F. "
-"Jolitz, embora quase nenhum código específico original do 386BSD permaneça. "
-"Este software foi essencialmente reimplementado a partir da versão 4.4BSD-"
-"Lite fornecida pelo Computer Science Research Group (CSRG) na Universidade "
-"da Califórnia, Berkeley e colaboradores acadêmicos associados."
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:169
-msgid ""
-"There are also portions of NetBSD and OpenBSD that have been integrated into "
-"FreeBSD as well, and we would therefore like to thank all the contributors "
-"to NetBSD and OpenBSD for their work."
-msgstr ""
-"Há partes do NetBSD e do OpenBSD que foram integradas no FreeBSD também, e "
-"gostaríamos de agradecer a todos os contribuidores do NetBSD e do OpenBSD "
-"pelo seus trabalhos."
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:171
-#, no-wrap
-msgid "Additional FreeBSD Contributors"
-msgstr "Contribuidores Adicionais do FreeBSD"
-
-#. type: Plain text
-#: documentation/content/en/articles/contributors/_index.adoc:174
-#: documentation/content/en/articles/contributors/_index.adoc:181
-msgid "(in alphabetical order by first name):"
-msgstr "(em ordem alfabética pelo primeiro nome):"
-
-#. type: Title ==
-#: documentation/content/en/articles/contributors/_index.adoc:178
-#, no-wrap
-msgid "386BSD Patch Kit Patch Contributors"
-msgstr "Contribuidores do Kit Patch 386BSD"
+"código de emulador do DOS para o restante do mundo BSD, o qual é usado no "
+"comando `doscmd`."
+
+#~ msgid ""
+#~ "As of 2010, the following section is several years out-of-date. Donations "
+#~ "from the past several years appear https://www.FreeBSD.org/donations/"
+#~ "donors/[here]."
+#~ msgstr ""
+#~ "Como em 2010, a seção a seguir está desatualiza. Doadores de vários anos "
+#~ "anteriores aparecerão https://www.FreeBSD.org/donations/donors/[aqui]."
+
+#~ msgid ""
+#~ "The FreeBSD Project is indebted to the following donors and would like to "
+#~ "publicly thank them here!"
+#~ msgstr ""
+#~ "O Projeto FreeBSD é suportado financeiramente pelos seguintes doadores, e "
+#~ "gostaríamos de agradecer a todos publicamente aqui!"
+
+#~ msgid ""
+#~ "Annelise Anderson <mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER."
+#~ "STANFORD.EDU]>"
+#~ msgstr ""
+#~ "Annelise Anderson <mailto:ANDRSN@HOOVER.STANFORD.EDU[ANDRSN@HOOVER."
+#~ "STANFORD.EDU]>"
+
+#~ msgid ""
+#~ "These are the people who have commit privileges and do the engineering "
+#~ "work on the FreeBSD source tree. All core team members are also "
+#~ "developers."
+#~ msgstr ""
+#~ "Estas são as pessoas que possuem privilégios de commit e fazem o trabalho "
+#~ "de engenharia na árvore de código fonte do FreeBSD. Todos os membros do "
+#~ "Core Team também são desenvolvedores."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/cups/_index.adoc b/documentation/content/pt-br/articles/cups/_index.adoc
index 29accc4936..8a3fd9f5ca 100644
--- a/documentation/content/pt-br/articles/cups/_index.adoc
+++ b/documentation/content/pt-br/articles/cups/_index.adoc
@@ -1,9 +1,11 @@
---
-title: CUPS no FreeBSD
authors:
- - author: Chess Griffin
+ -
+ author: 'Chess Griffin'
email: chess@chessgriffin.com
-releaseinfo: "$FreeBSD$"
+description: 'Como instalar e usar o CUPS no FreeBSD'
+tags: ["CUPS", "FreeBSD", "Guide", "configuration", "introduction"]
+title: 'CUPS no FreeBSD'
trademarks: ["freebsd", "general"]
---
@@ -16,13 +18,27 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/cups/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -36,28 +52,28 @@ toc::[]
[[printing-cups]]
== Uma introdução ao Common Unix Printing System (CUPS)
-O CUPS, o Common UNIX Printing System, fornece uma camada de impressão portátil para sistemas operacionais baseados no UNIX(R). Ele foi desenvolvido pela Easy Software Products para prover uma solução de impressão padrão para todos os fornecedores e usuários do UNIX(R).
+O CUPS, o Common UNIX Printing System, fornece uma camada de impressão portátil para sistemas operacionais baseados em UNIX(R). Ele foi desenvolvido pela Easy Software Products para promover uma solução padrão de impressão para todos os fornecedores e usuários de UNIX(R).
-O CUPS usa o Internet Printing Protocol (IPP) como base para gerenciar trabalhos de impressão e filas. O Line Printer Daemon (LPD), os protocolos Server Message Block (SMB) e AppSocket (também conhecido como JetDirect) também são suportados com funcionalidade reduzida. O CUPS adiciona opções de impressão com base em impressoras de rede e de impressão PostScript (PPD) para oferecer suporte à impressão no mundo UNIX(R). Como resultado, o CUPS é ideal para compartilhar e acessar impressoras em ambientes heterogêneos nos quais coexistem equipamentos rodando FreeBSD, Linux(R), Mac OS(R) X, e Windows(R).
+O CUPS utiliza o Protocolo de Impressão pela Internet (IPP) como base para gerenciar trabalhos e filas de impressão. Os protocolos Line Printer Daemon (LPD), Server Message Block (SMB) e AppSocket (também conhecido como JetDirect) também são suportados, porém com funcionalidade reduzida. O CUPS adiciona opções de visualização de impressoras em rede e impressão baseada em PostScript Printer Description (PPD) para suportar as necessidades de impressão do mundo real no ambiente UNIX(R). Como resultado, o CUPS é ideal para compartilhar e acessar impressoras em ambientes mistos de FreeBSD, Linux(R), Mac OS(R) X ou Windows(R).
-O site do CUPS é http://www.cups.org/[http://www.cups.org/].
+O site principal do CUPS é http://www.cups.org/[http://www.cups.org/].
[[printing-cups-install]]
== Instalando o CUPS Print Server
-Para instalar o CUPS utilizando binários pré compilados, execute o seguinte comando como root a partir de um terminal:
+Para instalar o CUPS usando um binário pré-compilado, execute o seguinte comando em um terminal como root:
-[source,shell]
+[source, shell]
....
# pkg install cups
....
-Outros pacotes opcionais, mas recomendados, são o package:print/gutenprint[] e o package:print/hplip[], ambos adicionam drivers e utilitários para uma variedade de impressoras. Uma vez instalados, os arquivos de configuração do CUPS podem ser encontrados no diretório [.filename]#/usr/local/etc/cups#.
+Outros pacotes opcionais, mas recomendados, são o package:print/gutenprint[] e o package:print/hplip[], ambos adicionando drivers e utilitários para uma variedade de impressoras. Após a instalação, os arquivos de configuração do CUPS podem ser encontrados no diretório [.filename]#/usr/local/etc/cups#.
[[printing-cups-configuring-server]]
== Configurando o CUPS Print Server
-Após a instalação, alguns arquivos devem ser editados para configurar o servidor CUPS. Primeiro, crie ou modifique, conforme o caso, o arquivo [.filename]#/etc/devfs.rules# e adicione as seguintes informações para definir as permissões adequadas em todos os dispositivos de impressora e para associar impressoras ao grupo de usuários do `cups`:
+Depois da instalação, alguns arquivos devem ser editados para configurar o servidor CUPS. Primeiramente, crie ou edite, caso necessário, o arquivo [.filename]#/etc/devfs.rules# e adicione a seguinte informação para definir as permissões apropriadas em todos os dispositivos de impressora potenciais e associar as impressoras ao grupo de usuários `cups`:
[.programlisting]
....
@@ -70,10 +86,10 @@ add path 'usb/X.Y.Z' mode 0660 group cups
[NOTE]
====
-Observe que _X_, _Y_ e _Z_ devem ser substituídos pelo dispositivo USB de destino listado no diretório [.filename]#/dev/usb# que corresponde à sua impressora. Para encontrar o dispositivo correto, examine a saída do comando man:dmesg[8], onde [.filename]#ugenX.Y# lista o dispositivo de impressora, que é um link simbólico para um dispositivo USB em [.filename]#/dev/usb#.
+Observe que _X_, _Y_ e _Z_ devem ser substituídos pelo dispositivo USB de destino listado no diretório [.filename]#/dev/usb# que corresponde à impressora. Para encontrar o dispositivo correto, examine a saída do man:dmesg[8], onde [.filename]#ugenX.Y# lista o dispositivo da impressora, que é um link simbólico para um dispositivo USB em [.filename]#/dev/usb#.
====
-Em seguida, adicione as linhas abaixo no [.filename]#/etc/rc.conf# conforme abaixo:
+Em seguida, adicione duas linhas no arquivo [.filename]#/etc/rc.conf# da seguinte maneira:
[.programlisting]
....
@@ -81,18 +97,18 @@ cupsd_enable="YES"
devfs_system_ruleset="system"
....
-Essas duas entradas iniciarão o servidor de impressão do CUPS após o boot do sistema e carregará a regra do devfs local acima, respectivamente.
+Essas duas entradas irão iniciar o servidor de impressão CUPS na inicialização e invocar a regra local do devfs criada acima, respectivamente.
-Para habilitar a impressão via CUPS em alguns clientes Microsoft(R) Windows(R) você deverá remover o comentário da linha abaixo nos arquivos [.filename]#/usr/local/etc/cups/mime.types# e [.filename]#/usr/local/etc/cups/mime.convs#:
+Para habilitar a impressão CUPS em determinados clientes Microsoft(R) Windows(R), a linha abaixo deve ser descomentada nos arquivos [.filename]#/usr/local/etc/cups/mime.types# e [.filename]#/usr/local/etc/cups/mime.convs#:
[.programlisting]
....
application/octet-stream
....
-Uma vez que estas alterações tenham sido feitas, os sistemas man:devfs[8] e CUPS deverão ser reiniciados, seja reiniciando o computador ou executando os dois comandos a seguir como root em um terminal:
+Uma vez que as alterações tenham sido feitas, os sistemas man:devfs[8] e CUPS devem ser reiniciados, seja reiniciando o computador ou executando os seguintes dois comandos em um terminal root:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/devfs restart
# /usr/local/etc/rc.d/cupsd restart
@@ -101,21 +117,21 @@ Uma vez que estas alterações tenham sido feitas, os sistemas man:devfs[8] e CU
[[printing-cups-configuring-printers]]
== Configurando Impressoras no CUPS Print Server
-Depois que o sistema CUPS tiver sido instalado e configurado, o administrador poderá começar a configurar as impressoras locais conectadas ao servidor de impressão CUPS. Essa parte do processo é muito semelhante, se não idêntica, à configuração de impressoras CUPS em outros sistemas operacionais baseados em UNIX(R), como o Linux(R).
+Depois que o sistema CUPS foi instalado e configurado, o administrador pode começar a configurar as impressoras locais conectadas ao servidor de impressão CUPS. Esta parte do processo é muito semelhante, senão idêntica, à configuração de impressoras CUPS em outros sistemas operacionais baseados em UNIX(R), como uma distribuição Linux(R).
-O principal meio para gerenciar e administrar o servidor CUPS é através da sua interface web, que pode ser acessada por meio de um navegador web, para isto execute o navegador e digite a URL http://localhost:631[http://localhost:631] na barra de endereços do navegador. Se o servidor CUPS estiver em outra máquina na rede, substitua o endereço IP local do servidor por `localhost`. A interface Web do CUPS é bastante autoexplicativa, pois há seções para gerenciar impressoras e trabalhos de impressão, autorizar usuários e muito mais. Além disso, no lado direito da tela de administração, existem várias caixas de seleção que permitem acesso fácil a configurações comumente alteradas, como compartilhar impressoras conectadas ao sistema, permitir a administração remota do servidor CUPS, e se deseja permitir aos usuários acesso adicional e privilégios para as impressoras e trabalhos de impressão.
+O principal meio para gerenciar e administrar o servidor CUPS é através da interface baseada na web, que pode ser encontrada ao iniciar um navegador e inserir o endereço http://localhost:631[http://localhost:631] na barra de endereço do navegador. Se o servidor CUPS estiver em outra máquina na rede, substitua o endereço IP local do servidor por `localhost`. A interface web do CUPS é bastante autoexplicativa, pois há seções para gerenciar impressoras e trabalhos de impressão, autorizar usuários e muito mais. Além disso, no lado direito da tela de administração há várias caixas de seleção que permitem fácil acesso às configurações comumente alteradas, como compartilhar impressoras conectadas ao sistema, permitir a administração remota do servidor CUPS e permitir que os usuários tenham acesso e privilégios adicionais às impressoras e trabalhos de impressão.
-Adicionar uma impressora geralmente é tão fácil quanto clicar em "Adicionar impressora" na tela Administração da interface Web do CUPS ou clicar em um dos botões "Novas impressoras encontradas" também na tela Administração. Quando for apresentada a caixa suspensa "Device", basta selecionar a impressora conectada localmente a qual você deseja utilizar e continuar o processo. Se você adicionou os aplicativos package:print/gutenprint-cups[] e/ou package:print/hplip[] via ports ou pacotes conforme mencionado acima, os drivers de impressão adicionais estarão disponíveis nas telas subsequentes, eles lhe fornecer mais estabilidade ou mais recursos.
+Adicionar uma impressora geralmente é tão fácil quanto clicar em "Adicionar Impressora" na tela de Administração da interface web do CUPS, ou clicar em um dos botões "Novas Impressoras Encontradas" também na tela de Administração. Quando for exibida a caixa de seleção "Dispositivo", simplesmente selecione a impressora local desejada e continue o processo. Se você tiver adicionado os pacotes package:print/gutenprint-cups[] ou package:print/hplip[], conforme referido acima, drivers de impressão adicionais estarão disponíveis nas telas subsequentes que podem fornecer mais estabilidade ou recursos.
[[printing-cups-clients]]
== Configurando clientes CUPS
-Depois que o servidor CUPS tiver sido configurado e as impressoras tiverem sido adicionadas e publicadas na rede, a próxima etapa será configurar os clientes ou as máquinas que acessarão o servidor CUPS. Se alguém tiver uma única máquina desktop atuando como servidor e cliente, muitas dessas informações podem não ser necessárias.
+Depois de configurar o servidor CUPS e adicionar as impressoras e publicá-las na rede, o próximo passo é configurar os clientes, ou seja, as máquinas que vão acessar o servidor CUPS. Se você tem um único desktop que atua como servidor e cliente, muitas dessas informações podem não ser necessárias.
[[printing-cups-clients-unix]]
-=== Clientes UNIX(R)
+=== UNIX(R) Clients
-O CUPS também precisará ser instalado em seus clientes UNIX(R). Depois que o CUPS é instalado nos clientes, as impressoras CUPS compartilhadas na rede geralmente são descobertas automaticamente pelos gerenciadores de impressoras de vários ambientes de desktop, como GNOME ou KDE. Como alternativa, pode-se acessar a interface local do CUPS na máquina cliente em http://localhost:631[http://localhost:631] e clicar em em "Adicionar impressora" na seção Administração. Quando visualizar a caixa suspensa "Device", simplesmente selecione a impressora CUPS em rede, se ela foi descoberta automaticamente, ou selecione `ipp` ou `http` e digite o IPP ou HTTP URI da impressora CUPS em rede, geralmente em um das duas seguintes sintaxes:
+O CUPS também precisará ser instalado em seus clientes UNIX(R). Uma vez que o CUPS está instalado nos clientes, as impressoras CUPS compartilhadas na rede muitas vezes são automaticamente descobertas pelos gerenciadores de impressoras de vários ambientes de desktops, como o GNOME ou o KDE. Alternativamente, é possível acessar a interface CUPS local na máquina cliente em http://localhost:631[http://localhost:631] e clicar em "Adicionar Impressora" na seção de Administração. Ao ser apresentado com a caixa de seleção "Dispositivo", basta selecionar a impressora CUPS em rede, se ela foi descoberta automaticamente, ou selecionar `ipp` ou `http` e inserir o URI IPP ou HTTP da impressora CUPS em rede, geralmente em uma das duas seguintes sintaxes:
[.programlisting]
....
@@ -127,31 +143,31 @@ ipp://server-name-or-ip/printers/printername
http://server-name-or-ip:631/printers/printername
....
-Se os clientes CUPS tiverem dificuldade para localizar outras impressoras CUPS compartilhadas na rede, às vezes é útil adicionar ou criar um arquivo [.filename]#/usr/local/etc/cups/client.conf# com uma única entrada da seguinte forma:
+Se os clientes CUPS tiverem dificuldade para encontrar outras impressoras CUPS compartilhadas na rede, às vezes é útil adicionar ou criar um arquivo [.filename]#/usr/local/etc/cups/client.conf# com uma única entrada da seguinte maneira:
[.programlisting]
....
ServerName server-ip
....
-Nesse caso, _server-ip_ seria substituído pelo endereço IP local do servidor CUPS na rede.
+Nesse caso, o _server-ip_ deve ser substituído pelo endereço IP local do servidor CUPS na rede.
[[printing-cups-clients-windows]]
-=== Clientes Windows(R)
+=== Windows(R) Clients
-As versões do Windows(R) anteriores ao XP não tinham a capacidade utilizar impressoras em rede baseadas no protocolo IPP. No entanto, o Windows(R) XP e as versões posteriores têm essa capacidade. Portanto, adicionar uma impressora no CUPS nessas versões do Windows(R) é muito fácil. Geralmente, o administrador Windows(R) deverá executar o assistente do Windows(R) `Adicionar impressora`, e selecionar `Impressora de rede` e, em seguida, inserir o URI na seguinte sintaxe:
+Versões do Windows(R) anteriores ao XP não tinham a capacidade de se conectar em rede com impressoras baseadas em IPP. No entanto, as versões do Windows(R) XP e posteriores têm essa capacidade. Portanto, adicionar uma impressora CUPS nessas versões do Windows(R) é bastante fácil. Geralmente, o administrador do Windows(R) executa o `assistente de adição de impressora` do Windows(R), seleciona `Impressora de rede` e, em seguida, insere a URI no seguinte formato:
[.programlisting]
....
http://server-name-or-ip:631/printers/printername
....
-Se alguém tiver uma versão mais antiga do Windows(R) sem suporte a impressão nativa IPP, o meio geral de se conectar a uma impressora no CUPS é usar o software package:net/samba410[] e o CUPS juntos, o que é um tópico fora do escopo deste artigo.
+Se você tiver uma versão mais antiga do Windows(R) sem suporte nativo de impressão IPP, o meio geral de conexão com uma impressora CUPS é usar o package:net/samba413[] e CUPS juntos, o que é um tópico fora do escopo deste capítulo.
[[printing-cups-troubleshooting]]
-== Solução de problemas do CUPS
+== Resolução de Problemas do CUPS
-A maior parte dos problemas que ocorrem com o CUPS estão geralmente associados a problemas de permissão. Primeiro, verifique novamente as permissões do man:devfs[8] conforme descrito acima. Em seguida, verifique as permissões reais dos dispositivos criados no sistema de arquivos. Também é útil certificar-se de que seu usuário é membro do grupo `cups`. Se as caixas de seleção de permissões na seção Administração da interface Web do CUPS não estiverem funcionando, outra correção poderá ser o backup manual do arquivo de configuração principal do CUPS localizado em [.filename]#/usr/local/etc/cups/cupsd.conf# e edite as várias opções de configuração e experimente diferentes combinações de opções de configuração. Um exemplo do [.filename]#/usr/local/etc/cups/cupsd.conf# para testar está listado abaixo. Por favor note que este exemplo de arquivo [.filename]#cupsd.conf# sacrifica a segurança para facilitar a configuração; Depois que o administrador se conectar com êxito ao servidor do CUPS e configurar os clientes, é aconselhável revisitar esse arquivo de configuração para começar a fechar o acesso.
+As dificuldades com o CUPS geralmente estão relacionadas a permissões. Primeiro, verifique novamente as permissões do man:devfs[8] conforme descrito acima. Em seguida, verifique as permissões reais dos dispositivos criados no sistema de arquivos. Também é útil garantir que seu usuário seja um membro do grupo `cups`. Se as caixas de seleção de permissões na seção de Administração da interface web do CUPS não parecerem estar funcionando, outra solução pode ser fazer backup manualmente do arquivo de configuração principal do CUPS localizado em [.filename]#/usr/local/etc/cups/cupsd.conf# e editar as várias opções de configuração e experimentar diferentes combinações de opções de configuração. Um exemplo de arquivo [.filename]#/usr/local/etc/cups/cupsd.conf# para teste é listado abaixo. Observe que este arquivo de exemplo [.filename]#cupsd.conf# sacrifica a segurança para facilitar a configuração; assim que o administrador se conectar com sucesso ao servidor CUPS e configurar os clientes, é aconselhável revisar este arquivo de configuração e começar a restringir o acesso.
[.programlisting]
....
diff --git a/documentation/content/pt-br/articles/cups/_index.po b/documentation/content/pt-br/articles/cups/_index.po
new file mode 100644
index 0000000000..c1438023c0
--- /dev/null
+++ b/documentation/content/pt-br/articles/cups/_index.po
@@ -0,0 +1,703 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-24 17:47+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlescups_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/cups/_index.adoc:1
+#, no-wrap
+msgid "How to install and use CUPS on FreeBSD"
+msgstr "Como instalar e usar o CUPS no FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/cups/_index.adoc:1
+#: documentation/content/en/articles/cups/_index.adoc:11
+#, no-wrap
+msgid "CUPS on FreeBSD"
+msgstr "CUPS no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:46
+msgid "An article about configuring CUPS on FreeBSD."
+msgstr "Um artigo sobre como configurar o CUPS no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:52
+#, no-wrap
+msgid "An Introduction to the Common Unix Printing System (CUPS)"
+msgstr "Uma introdução ao Common Unix Printing System (CUPS)"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:56
+msgid ""
+"CUPS, the Common UNIX Printing System, provides a portable printing layer "
+"for UNIX(R)-based operating systems. It has been developed by Easy Software "
+"Products to promote a standard printing solution for all UNIX(R) vendors and "
+"users."
+msgstr ""
+"O CUPS, o Common UNIX Printing System, fornece uma camada de impressão "
+"portátil para sistemas operacionais baseados em UNIX(R). Ele foi "
+"desenvolvido pela Easy Software Products para promover uma solução padrão de "
+"impressão para todos os fornecedores e usuários de UNIX(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:61
+msgid ""
+"CUPS uses the Internet Printing Protocol (IPP) as the basis for managing "
+"print jobs and queues. The Line Printer Daemon (LPD), Server Message Block "
+"(SMB), and AppSocket (aka JetDirect) protocols are also supported with "
+"reduced functionality. CUPS adds network printer browsing and PostScript "
+"Printer Description (PPD) based printing options to support real-world "
+"printing under UNIX(R). As a result, CUPS is ideally-suited for sharing and "
+"accessing printers in mixed environments of FreeBSD, Linux(R), Mac OS(R) X, "
+"or Windows(R)."
+msgstr ""
+"O CUPS utiliza o Protocolo de Impressão pela Internet (IPP) como base para "
+"gerenciar trabalhos e filas de impressão. Os protocolos Line Printer Daemon "
+"(LPD), Server Message Block (SMB) e AppSocket (também conhecido como "
+"JetDirect) também são suportados, porém com funcionalidade reduzida. O CUPS "
+"adiciona opções de visualização de impressoras em rede e impressão baseada "
+"em PostScript Printer Description (PPD) para suportar as necessidades de "
+"impressão do mundo real no ambiente UNIX(R). Como resultado, o CUPS é ideal "
+"para compartilhar e acessar impressoras em ambientes mistos de FreeBSD, "
+"Linux(R), Mac OS(R) X ou Windows(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:63
+msgid "The main site for CUPS is http://www.cups.org/[http://www.cups.org/]."
+msgstr "O site principal do CUPS é http://www.cups.org/[http://www.cups.org/]."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:65
+#, no-wrap
+msgid "Installing the CUPS Print Server"
+msgstr "Instalando o CUPS Print Server"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:68
+msgid ""
+"To install CUPS using a precompiled binary, issue the following command from "
+"a root terminal:"
+msgstr ""
+"Para instalar o CUPS usando um binário pré-compilado, execute o seguinte "
+"comando em um terminal como root:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:72
+#, no-wrap
+msgid "# pkg install cups\n"
+msgstr "# pkg install cups\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:76
+msgid ""
+"Other optional, but recommended, packages are package:print/gutenprint[] and "
+"package:print/hplip[], both of which add drivers and utilities for a variety "
+"of printers. Once installed, the CUPS configuration files can be found in "
+"the directory [.filename]#/usr/local/etc/cups#."
+msgstr ""
+"Outros pacotes opcionais, mas recomendados, são o package:print/gutenprint[] "
+"e o package:print/hplip[], ambos adicionando drivers e utilitários para uma "
+"variedade de impressoras. Após a instalação, os arquivos de configuração do "
+"CUPS podem ser encontrados no diretório [.filename]#/usr/local/etc/cups#."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:78
+#, no-wrap
+msgid "Configuring the CUPS Print Server"
+msgstr "Configurando o CUPS Print Server"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:82
+msgid ""
+"After installation, a few files must be edited to configure the CUPS "
+"server. First, create or modify, as the case may be, the file [.filename]#/"
+"etc/devfs.rules# and add the following information to set the proper "
+"permissions on all potential printer devices and to associate printers with "
+"the `cups` user group:"
+msgstr ""
+"Depois da instalação, alguns arquivos devem ser editados para configurar o "
+"servidor CUPS. Primeiramente, crie ou edite, caso necessário, o arquivo [."
+"filename]#/etc/devfs.rules# e adicione a seguinte informação para definir as "
+"permissões apropriadas em todos os dispositivos de impressora potenciais e "
+"associar as impressoras ao grupo de usuários `cups`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:90
+#, no-wrap
+msgid ""
+"[system=10]\n"
+"add path 'unlpt*' mode 0660 group cups\n"
+"add path 'ulpt*' mode 0660 group cups\n"
+"add path 'lpt*' mode 0660 group cups\n"
+"add path 'usb/X.Y.Z' mode 0660 group cups\n"
+msgstr ""
+"[system=10]\n"
+"add path 'unlpt*' mode 0660 group cups\n"
+"add path 'ulpt*' mode 0660 group cups\n"
+"add path 'lpt*' mode 0660 group cups\n"
+"add path 'usb/X.Y.Z' mode 0660 group cups\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/cups/_index.adoc:96
+msgid ""
+"Note that _X_, _Y_, and _Z_ should be replaced with the target USB device "
+"listed in the [.filename]#/dev/usb# directory that corresponds to the "
+"printer. To find the correct device, examine the output of man:dmesg[8], "
+"where [.filename]#ugenX.Y# lists the printer device, which is a symbolic "
+"link to a USB device in [.filename]#/dev/usb#."
+msgstr ""
+"Observe que _X_, _Y_ e _Z_ devem ser substituídos pelo dispositivo USB de "
+"destino listado no diretório [.filename]#/dev/usb# que corresponde à "
+"impressora. Para encontrar o dispositivo correto, examine a saída do man:"
+"dmesg[8], onde [.filename]#ugenX.Y# lista o dispositivo da impressora, que é "
+"um link simbólico para um dispositivo USB em [.filename]#/dev/usb#."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:99
+msgid "Next, add two lines to [.filename]#/etc/rc.conf# as follows:"
+msgstr ""
+"Em seguida, adicione duas linhas no arquivo [.filename]#/etc/rc.conf# da "
+"seguinte maneira:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:104
+#, no-wrap
+msgid ""
+"cupsd_enable=\"YES\"\n"
+"devfs_system_ruleset=\"system\"\n"
+msgstr ""
+"cupsd_enable=\"YES\"\n"
+"devfs_system_ruleset=\"system\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:107
+msgid ""
+"These two entries will start the CUPS print server on boot and invoke the "
+"local devfs rule created above, respectively."
+msgstr ""
+"Essas duas entradas irão iniciar o servidor de impressão CUPS na "
+"inicialização e invocar a regra local do devfs criada acima, respectivamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:109
+msgid ""
+"To enable CUPS printing under certain Microsoft(R) Windows(R) clients, the "
+"line below should be uncommented in [.filename]#/usr/local/etc/cups/mime."
+"types# and [.filename]#/usr/local/etc/cups/mime.convs#:"
+msgstr ""
+"Para habilitar a impressão CUPS em determinados clientes Microsoft(R) "
+"Windows(R), a linha abaixo deve ser descomentada nos arquivos [.filename]#/"
+"usr/local/etc/cups/mime.types# e [.filename]#/usr/local/etc/cups/mime.convs#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:113
+#, no-wrap
+msgid "application/octet-stream\n"
+msgstr "application/octet-stream\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:116
+msgid ""
+"Once these changes have been made, the man:devfs[8] and CUPS systems must "
+"both be restarted, either by rebooting the computer or issuing the following "
+"two commands in a root terminal:"
+msgstr ""
+"Uma vez que as alterações tenham sido feitas, os sistemas man:devfs[8] e "
+"CUPS devem ser reiniciados, seja reiniciando o computador ou executando os "
+"seguintes dois comandos em um terminal root:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:121
+#, no-wrap
+msgid ""
+"# /etc/rc.d/devfs restart\n"
+"# /usr/local/etc/rc.d/cupsd restart\n"
+msgstr ""
+"# /etc/rc.d/devfs restart\n"
+"# /usr/local/etc/rc.d/cupsd restart\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:124
+#, no-wrap
+msgid "Configuring Printers on the CUPS Print Server"
+msgstr "Configurando Impressoras no CUPS Print Server"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:128
+msgid ""
+"After the CUPS system has been installed and configured, the administrator "
+"can begin configuring the local printers attached to the CUPS print server. "
+"This part of the process is very similar, if not identical, to configuring "
+"CUPS printers on other UNIX(R)-based operating systems, such as a Linux(R) "
+"distribution."
+msgstr ""
+"Depois que o sistema CUPS foi instalado e configurado, o administrador pode "
+"começar a configurar as impressoras locais conectadas ao servidor de "
+"impressão CUPS. Esta parte do processo é muito semelhante, senão idêntica, à "
+"configuração de impressoras CUPS em outros sistemas operacionais baseados em "
+"UNIX(R), como uma distribuição Linux(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:133
+msgid ""
+"The primary means for managing and administering the CUPS server is through "
+"the web-based interface, which can be found by launching a web browser and "
+"entering http://localhost:631[http://localhost:631] in the browser's URL "
+"bar. If the CUPS server is on another machine on the network, substitute "
+"the server's local IP address for `localhost`. The CUPS web interface is "
+"fairly self-explanatory, as there are sections for managing printers and "
+"print jobs, authorizing users, and more. Additionally, on the right-hand "
+"side of the Administration screen are several check-boxes allowing easy "
+"access to commonly-changed settings, such as whether to share published "
+"printers connected to the system, whether to allow remote administration of "
+"the CUPS server, and whether to allow users additional access and privileges "
+"to the printers and print jobs."
+msgstr ""
+"O principal meio para gerenciar e administrar o servidor CUPS é através da "
+"interface baseada na web, que pode ser encontrada ao iniciar um navegador e "
+"inserir o endereço http://localhost:631[http://localhost:631] na barra de "
+"endereço do navegador. Se o servidor CUPS estiver em outra máquina na rede, "
+"substitua o endereço IP local do servidor por `localhost`. A interface web "
+"do CUPS é bastante autoexplicativa, pois há seções para gerenciar "
+"impressoras e trabalhos de impressão, autorizar usuários e muito mais. Além "
+"disso, no lado direito da tela de administração há várias caixas de seleção "
+"que permitem fácil acesso às configurações comumente alteradas, como "
+"compartilhar impressoras conectadas ao sistema, permitir a administração "
+"remota do servidor CUPS e permitir que os usuários tenham acesso e "
+"privilégios adicionais às impressoras e trabalhos de impressão."
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:137
+msgid ""
+"Adding a printer is generally as easy as clicking \"Add Printer\" at the "
+"Administration screen of the CUPS web interface, or clicking one of the "
+"\"New Printers Found\" buttons also at the Administration screen. When "
+"presented with the \"Device\" drop-down box, simply select the desired "
+"locally-attached printer, and then continue through the process. If one has "
+"added the package:print/gutenprint-cups[] or package:print/hplip[] ports or "
+"packages as referenced above, then additional print drivers will be "
+"available in the subsequent screens that might provide more stability or "
+"features."
+msgstr ""
+"Adicionar uma impressora geralmente é tão fácil quanto clicar em \"Adicionar "
+"Impressora\" na tela de Administração da interface web do CUPS, ou clicar em "
+"um dos botões \"Novas Impressoras Encontradas\" também na tela de "
+"Administração. Quando for exibida a caixa de seleção \"Dispositivo\", "
+"simplesmente selecione a impressora local desejada e continue o processo. Se "
+"você tiver adicionado os pacotes package:print/gutenprint-cups[] ou package:"
+"print/hplip[], conforme referido acima, drivers de impressão adicionais "
+"estarão disponíveis nas telas subsequentes que podem fornecer mais "
+"estabilidade ou recursos."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:139
+#, no-wrap
+msgid "Configuring CUPS Clients"
+msgstr "Configurando clientes CUPS"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:143
+msgid ""
+"Once the CUPS server has been configured and printers have been added and "
+"published to the network, the next step is to configure the clients, or the "
+"machines that are going to access the CUPS server. If one has a single "
+"desktop machine that is acting as both server and client, then much of this "
+"information may not be needed."
+msgstr ""
+"Depois de configurar o servidor CUPS e adicionar as impressoras e publicá-"
+"las na rede, o próximo passo é configurar os clientes, ou seja, as máquinas "
+"que vão acessar o servidor CUPS. Se você tem um único desktop que atua como "
+"servidor e cliente, muitas dessas informações podem não ser necessárias."
+
+#. type: Title ===
+#: documentation/content/en/articles/cups/_index.adoc:145
+#, no-wrap
+msgid "UNIX(R) Clients"
+msgstr "UNIX(R) Clients"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:151
+msgid ""
+"CUPS will also need to be installed on your UNIX(R) clients. Once CUPS is "
+"installed on the clients, then CUPS printers that are shared across the "
+"network are often automatically discovered by the printer managers for "
+"various desktop environments such as GNOME or KDE. Alternatively, one can "
+"access the local CUPS interface on the client machine at http://"
+"localhost:631[http://localhost:631] and click on \"Add Printer\" in the "
+"Administration section. When presented with the \"Device\" drop-down box, "
+"simply select the networked CUPS printer, if it was automatically "
+"discovered, or select `ipp` or `http` and enter the IPP or HTTP URI of the "
+"networked CUPS printer, usually in one of the two following syntaxes:"
+msgstr ""
+"O CUPS também precisará ser instalado em seus clientes UNIX(R). Uma vez que "
+"o CUPS está instalado nos clientes, as impressoras CUPS compartilhadas na "
+"rede muitas vezes são automaticamente descobertas pelos gerenciadores de "
+"impressoras de vários ambientes de desktops, como o GNOME ou o KDE. "
+"Alternativamente, é possível acessar a interface CUPS local na máquina "
+"cliente em http://localhost:631[http://localhost:631] e clicar em "
+"\"Adicionar Impressora\" na seção de Administração. Ao ser apresentado com a "
+"caixa de seleção \"Dispositivo\", basta selecionar a impressora CUPS em "
+"rede, se ela foi descoberta automaticamente, ou selecionar `ipp` ou `http` e "
+"inserir o URI IPP ou HTTP da impressora CUPS em rede, geralmente em uma das "
+"duas seguintes sintaxes:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:155
+#, no-wrap
+msgid "ipp://server-name-or-ip/printers/printername\n"
+msgstr "ipp://server-name-or-ip/printers/printername\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:160
+#: documentation/content/en/articles/cups/_index.adoc:182
+#, no-wrap
+msgid "http://server-name-or-ip:631/printers/printername\n"
+msgstr "http://server-name-or-ip:631/printers/printername\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:163
+msgid ""
+"If the CUPS clients have difficulty finding other CUPS printers shared "
+"across the network, sometimes it is helpful to add or create a file [."
+"filename]#/usr/local/etc/cups/client.conf# with a single entry as follows:"
+msgstr ""
+"Se os clientes CUPS tiverem dificuldade para encontrar outras impressoras "
+"CUPS compartilhadas na rede, às vezes é útil adicionar ou criar um arquivo [."
+"filename]#/usr/local/etc/cups/client.conf# com uma única entrada da seguinte "
+"maneira:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:167
+#, no-wrap
+msgid "ServerName server-ip\n"
+msgstr "ServerName server-ip\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:170
+msgid ""
+"In this case, _server-ip_ would be replaced by the local IP address of the "
+"CUPS server on the network."
+msgstr ""
+"Nesse caso, o _server-ip_ deve ser substituído pelo endereço IP local do "
+"servidor CUPS na rede."
+
+#. type: Title ===
+#: documentation/content/en/articles/cups/_index.adoc:172
+#, no-wrap
+msgid "Windows(R) Clients"
+msgstr "Windows(R) Clients"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:178
+msgid ""
+"Versions of Windows(R) prior to XP did not have the capability to natively "
+"network with IPP-based printers. However, Windows(R) XP and later versions "
+"do have this capability. Therefore, to add a CUPS printer in these versions "
+"of Windows(R) is quite easy. Generally, the Windows(R) administrator will "
+"run the Windows(R) `Add Printer` wizard, select `Network Printer` and then "
+"enter the URI in the following syntax:"
+msgstr ""
+"Versões do Windows(R) anteriores ao XP não tinham a capacidade de se "
+"conectar em rede com impressoras baseadas em IPP. No entanto, as versões do "
+"Windows(R) XP e posteriores têm essa capacidade. Portanto, adicionar uma "
+"impressora CUPS nessas versões do Windows(R) é bastante fácil. Geralmente, o "
+"administrador do Windows(R) executa o `assistente de adição de impressora` "
+"do Windows(R), seleciona `Impressora de rede` e, em seguida, insere a URI no "
+"seguinte formato:"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:185
+msgid ""
+"If one has an older version of Windows(R) without native IPP printing "
+"support, then the general means of connecting to a CUPS printer is to use "
+"package:net/samba413[] and CUPS together, which is a topic outside the scope "
+"of this chapter."
+msgstr ""
+"Se você tiver uma versão mais antiga do Windows(R) sem suporte nativo de "
+"impressão IPP, o meio geral de conexão com uma impressora CUPS é usar o "
+"package:net/samba413[] e CUPS juntos, o que é um tópico fora do escopo deste "
+"capítulo."
+
+#. type: Title ==
+#: documentation/content/en/articles/cups/_index.adoc:187
+#, no-wrap
+msgid "CUPS Troubleshooting"
+msgstr "Resolução de Problemas do CUPS"
+
+#. type: Plain text
+#: documentation/content/en/articles/cups/_index.adoc:196
+msgid ""
+"Difficulties with CUPS often lies in permissions. First, double check the "
+"man:devfs[8] permissions as outlined above. Next, check the actual "
+"permissions of the devices created in the file system. It is also helpful "
+"to make sure your user is a member of the `cups` group. If the permissions "
+"check boxes in the Administration section of the CUPS web interface do not "
+"seem to be working, another fix might be to manually backup the main CUPS "
+"configuration file located at [.filename]#/usr/local/etc/cups/cupsd.conf# "
+"and edit the various configuration options and try different combinations of "
+"configuration options. One sample [.filename]#/usr/local/etc/cups/cupsd."
+"conf# to test is listed below. Please note that this sample [."
+"filename]#cupsd.conf# sacrifices security for easier configuration; once the "
+"administrator successfully connects to the CUPS server and configures the "
+"clients, it is advisable to revisit this configuration file and begin "
+"locking down access."
+msgstr ""
+"As dificuldades com o CUPS geralmente estão relacionadas a permissões. "
+"Primeiro, verifique novamente as permissões do man:devfs[8] conforme "
+"descrito acima. Em seguida, verifique as permissões reais dos dispositivos "
+"criados no sistema de arquivos. Também é útil garantir que seu usuário seja "
+"um membro do grupo `cups`. Se as caixas de seleção de permissões na seção de "
+"Administração da interface web do CUPS não parecerem estar funcionando, "
+"outra solução pode ser fazer backup manualmente do arquivo de configuração "
+"principal do CUPS localizado em [.filename]#/usr/local/etc/cups/cupsd.conf# "
+"e editar as várias opções de configuração e experimentar diferentes "
+"combinações de opções de configuração. Um exemplo de arquivo [.filename]#/"
+"usr/local/etc/cups/cupsd.conf# para teste é listado abaixo. Observe que este "
+"arquivo de exemplo [.filename]#cupsd.conf# sacrifica a segurança para "
+"facilitar a configuração; assim que o administrador se conectar com sucesso "
+"ao servidor CUPS e configurar os clientes, é aconselhável revisar este "
+"arquivo de configuração e começar a restringir o acesso."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:202
+#, no-wrap
+msgid ""
+"# Log general information in error_log - change \"info\" to \"debug\" for\n"
+"# troubleshooting...\n"
+"LogLevel info\n"
+msgstr ""
+"# Log general information in error_log - change \"info\" to \"debug\" for\n"
+"# troubleshooting...\n"
+"LogLevel info\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:205
+#, no-wrap
+msgid ""
+"# Administrator user group...\n"
+"SystemGroup wheel\n"
+msgstr ""
+"# Administrator user group...\n"
+"SystemGroup wheel\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:210
+#, no-wrap
+msgid ""
+"# Listen for connections on Port 631.\n"
+"Port 631\n"
+"#Listen localhost:631\n"
+"Listen /var/run/cups.sock\n"
+msgstr ""
+"# Listen for connections on Port 631.\n"
+"Port 631\n"
+"#Listen localhost:631\n"
+"Listen /var/run/cups.sock\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:217
+#, no-wrap
+msgid ""
+"# Show shared printers on the local network.\n"
+"Browsing On\n"
+"BrowseOrder allow,deny\n"
+"#BrowseAllow @LOCAL\n"
+"BrowseAllow 192.168.1.* # change to local LAN settings\n"
+"BrowseAddress 192.168.1.* # change to local LAN settings\n"
+msgstr ""
+"# Show shared printers on the local network.\n"
+"Browsing On\n"
+"BrowseOrder allow,deny\n"
+"#BrowseAllow @LOCAL\n"
+"BrowseAllow 192.168.1.* # change to local LAN settings\n"
+"BrowseAddress 192.168.1.* # change to local LAN settings\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:221
+#, no-wrap
+msgid ""
+"# Default authentication type, when authentication is required...\n"
+"DefaultAuthType Basic\n"
+"DefaultEncryption Never # comment this line to allow encryption\n"
+msgstr ""
+"# Default authentication type, when authentication is required...\n"
+"DefaultAuthType Basic\n"
+"DefaultEncryption Never # comment this line to allow encryption\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:228
+#, no-wrap
+msgid ""
+"# Allow access to the server from any machine on the LAN\n"
+"<Location />\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+"# Allow access to the server from any machine on the LAN\n"
+"<Location />\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:236
+#, no-wrap
+msgid ""
+"# Allow access to the admin pages from any machine on the LAN\n"
+"<Location /admin>\n"
+" #Encryption Required\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+"# Allow access to the admin pages from any machine on the LAN\n"
+"<Location /admin>\n"
+" #Encryption Required\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:245
+#, no-wrap
+msgid ""
+"# Allow access to configuration files from any machine on the LAN\n"
+"<Location /admin/conf>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+msgstr ""
+"# Allow access to configuration files from any machine on the LAN\n"
+"<Location /admin/conf>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order allow,deny\n"
+" #Allow localhost\n"
+" Allow 192.168.1.* # change to local LAN settings\n"
+"</Location>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:256
+#, no-wrap
+msgid ""
+"# Set the default printer/job policies...\n"
+"<Policy default>\n"
+" # Job-related operations must be done by the owner or an administrator...\n"
+" <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \\\n"
+"Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \\\n"
+"Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \\\n"
+"CUPS-Move-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+"# Set the default printer/job policies...\n"
+"<Policy default>\n"
+" # Job-related operations must be done by the owner or an administrator...\n"
+" <Limit Send-Document Send-URI Hold-Job Release-Job Restart-Job Purge-Jobs \\\n"
+"Set-Job-Attributes Create-Job-Subscription Renew-Subscription Cancel-Subscription \\\n"
+"Get-Notifications Reprocess-Job Cancel-Current-Job Suspend-Current-Job Resume-Job \\\n"
+"CUPS-Move-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:267
+#, no-wrap
+msgid ""
+" # All administration operations require an administrator to authenticate...\n"
+" <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \\\n"
+"Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \\\n"
+"Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \\\n"
+"Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \\\n"
+"CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+" # All administration operations require an administrator to authenticate...\n"
+" <Limit Pause-Printer Resume-Printer Set-Printer-Attributes Enable-Printer \\\n"
+"Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs \\\n"
+"Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer \\\n"
+"Promote-Job Schedule-Job-After CUPS-Add-Printer CUPS-Delete-Printer CUPS-Add-Class \\\n"
+"CUPS-Delete-Class CUPS-Accept-Jobs CUPS-Reject-Jobs CUPS-Set-Default>\n"
+" AuthType Basic\n"
+" Require user @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:273
+#, no-wrap
+msgid ""
+" # Only the owner or an administrator can cancel or authenticate a job...\n"
+" <Limit Cancel-Job CUPS-Authenticate-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+msgstr ""
+" # Only the owner or an administrator can cancel or authenticate a job...\n"
+" <Limit Cancel-Job CUPS-Authenticate-Job>\n"
+" Require user @OWNER @SYSTEM\n"
+" Order deny,allow\n"
+" </Limit>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/cups/_index.adoc:278
+#, no-wrap
+msgid ""
+" <Limit All>\n"
+" Order deny,allow\n"
+" </Limit>\n"
+"</Policy>\n"
+msgstr ""
+" <Limit All>\n"
+" Order deny,allow\n"
+" </Limit>\n"
+"</Policy>\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/explaining-bsd/_index.adoc b/documentation/content/pt-br/articles/explaining-bsd/_index.adoc
index f8fbebfb0e..8ce9d50751 100644
--- a/documentation/content/pt-br/articles/explaining-bsd/_index.adoc
+++ b/documentation/content/pt-br/articles/explaining-bsd/_index.adoc
@@ -18,13 +18,27 @@ trademarks: ["freebsd", "amd", "apple", "intel", "linux", "opengroup", "sun", "u
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/explaining-bsd/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -142,7 +156,7 @@ O Linux está disponível sob a http://www.fsf.org/copyleft/gpl.html[Licença P
=== O que mais eu deveria saber?
-Como menos aplicativos estão disponíveis para o BSD do que para o Linux, os desenvolvedores do BSD criaram um pacote de compatibilidade com o Linux, o qual permite que os programas Linux sejam executados sob o BSD. O pacote inclui tanto as modificações do kernel, necessárias para executar corretamente as chamadas do sistema Linux e quanto os arquivos de compatibilidade do Linux, como a biblioteca C. Não há diferença perceptível na velocidade de execução entre um aplicativo Linux em execução em uma máquina Linux nativa e um aplicativo Linux em execução em uma máquina BSD, contanto que ambas tenham o mesmo hardware.
+Uma vez que há menos aplicativos disponíveis para o BSD em comparação ao Linux, os desenvolvedores do BSD criaram um pacote de compatibilidade com o Linux, que permite que programas do Linux sejam executados no BSD. Esse pacote inclui modificações no kernel para realizar corretamente chamadas de sistema do Linux, além de arquivos de compatibilidade do Linux, como a biblioteca C. Não há diferença perceptível na velocidade de execução entre um aplicativo do Linux rodando em uma máquina Linux e um aplicativo do Linux rodando em uma máquina BSD de mesma velocidade.
A natureza do BSD de ser um sistema em que tudo é provido por "um único fornecedor" significa que as atualizações são muito mais fáceis de se lidar do que frequentemente ocorre no caso no Linux. O BSD lida com as atualizações das versões das bibliotecas fornecendo módulos de compatibilidade para as versões anteriores, portanto, é possível executar binários bastante antigos sem problemas.
diff --git a/documentation/content/pt-br/articles/explaining-bsd/_index.po b/documentation/content/pt-br/articles/explaining-bsd/_index.po
index c090545b64..5811261d69 100644
--- a/documentation/content/pt-br/articles/explaining-bsd/_index.po
+++ b/documentation/content/pt-br/articles/explaining-bsd/_index.po
@@ -2,12 +2,14 @@
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2021-06-08 07:32-0300\n"
-"PO-Revision-Date: 2021-06-10 23:03+0000\n"
-"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-25 18:55+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
"projects/documentation/articlesexplaining-bsd_index/pt_BR/>\n"
"Language: pt_BR\n"
@@ -15,7 +17,7 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-"X-Generator: Weblate 4.6.2\n"
+"X-Generator: Weblate 4.17\n"
#. type: YAML Front Matter: description
#: documentation/content/en/articles/explaining-bsd/_index.adoc:1
@@ -31,12 +33,12 @@ msgid "Explaining BSD"
msgstr "Explicando o BSD"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:23
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:44
msgid "Abstract"
msgstr "Resumo"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:25
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:46
msgid ""
"In the open source world, the word \"Linux\" is almost synonymous with "
"\"Operating System\", but it is not the only open source UNIX(R) operating "
@@ -47,7 +49,7 @@ msgstr ""
"de código aberto."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:27
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:48
msgid ""
"So what is the secret? Why is BSD not better known? This white paper "
"addresses these and other questions."
@@ -56,7 +58,7 @@ msgstr ""
"aborda esta e outras questões."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:29
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:50
msgid ""
"Throughout this paper, differences between BSD and Linux will be noted "
"__like this__."
@@ -65,18 +67,18 @@ msgstr ""
"__desta forma__."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:31
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:52
msgid "'''"
msgstr "'''"
#. type: Title ==
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:35
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:56
#, no-wrap
msgid "What is BSD?"
msgstr "O que é o BSD?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:42
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:63
msgid ""
"BSD stands for \"Berkeley Software Distribution\". It is the name of "
"distributions of source code from the University of California, Berkeley, "
@@ -95,7 +97,7 @@ msgstr ""
"destaque para os do projeto GNU. O sistema operacional geralmente abrange:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:44
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:65
msgid ""
"The BSD kernel, which handles process scheduling, memory management, "
"symmetric multi-processing (SMP), device drivers, etc."
@@ -105,12 +107,12 @@ msgstr ""
"drivers de dispositivos, etc."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:45
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:66
msgid "The C library, the base API for the system."
msgstr "A biblioteca C, a API base do sistema."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:47
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:68
msgid ""
"__The BSD C library is based on code from Berkeley, not the GNU project.__"
msgstr ""
@@ -118,50 +120,50 @@ msgstr ""
"__"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:48
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:69
msgid "Utilities such as shells, file utilities, compilers and linkers."
msgstr ""
"Utilitários como shells, gerenciadores de arquivos, compiladores e linkers "
"(conversores de arquivos compilados em executáveis)."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:50
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:71
msgid ""
"__Some of the utilities are derived from the GNU project, others are not.__"
msgstr "__Alguns utilitários são derivados do projeto GNU, outros não são.__"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:51
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:72
msgid "The X Window system, which handles graphical display."
msgstr "O sistema X Window, que gerencia a interface gráfica."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:54
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:75
msgid ""
"The X Window system used in most versions of BSD is maintained by the http://"
"www.X.org/[X.Org project]. FreeBSD allows the user to choose from a variety "
"of desktop environments, such as Gnome, KDE, or Xfce; and lightweight window "
"managers like Openbox, Fluxbox, or Awesome."
msgstr ""
-"O sistema X Window usado na maioria das versões do BSD é mantido pelo "
-"http://www.X.org/[Projeto X.Org]. O FreeBSD permite ao usuário escolher a "
-"partir de uma variedade de ambientes de desktop, tais como o Gnome, KDE ou "
-"Xfce; e gerenciadores gráficos (gerenciadores de janelas) mais leves, como "
-"Openbox, Fluxbox ou Awesome."
+"O sistema X Window usado na maioria das versões do BSD é mantido pelo http://"
+"www.X.org/[Projeto X.Org]. O FreeBSD permite ao usuário escolher a partir de "
+"uma variedade de ambientes de desktop, tais como o Gnome, KDE ou Xfce; e "
+"gerenciadores gráficos (gerenciadores de janelas) mais leves, como Openbox, "
+"Fluxbox ou Awesome."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:55
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:76
msgid "Many other programs and utilities."
msgstr "Diversos outros programas e utilitários."
#. type: Title ==
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:57
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:78
#, no-wrap
msgid "What, a real UNIX(R)?"
msgstr "O que, um verdadeiro UNIX(R)?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:62
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:83
msgid ""
"The BSD operating systems are not clones, but open source derivatives of "
"AT&T's Research UNIX(R) operating system, which is also the ancestor of the "
@@ -174,7 +176,7 @@ msgstr ""
"possível, uma vez que a AT&T nunca liberou seu código como código aberto?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:64
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:85
msgid ""
"It is true that AT&T UNIX(R) is not open source, and in a copyright sense "
"BSD is very definitely _not_ UNIX(R), but on the other hand, AT&T has "
@@ -192,7 +194,7 @@ msgstr ""
"_Berkeley Software Distribution_ ou __BSD__."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:68
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:89
msgid ""
"Initial BSD releases consisted mainly of user programs, but that changed "
"dramatically when the CSRG landed a contract with the Defense Advanced "
@@ -211,7 +213,7 @@ msgstr ""
"foi parte do 4.2BSD, em 1982."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:75
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:96
msgid ""
"In the course of the 1980s, a number of new workstation companies sprang "
"up. Many preferred to license UNIX(R) rather than developing operating "
@@ -238,7 +240,7 @@ msgstr ""
"conhecidos como __Berkeley Extensions__."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:84
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:105
msgid ""
"The BSD tapes contained AT&T source code and thus required a UNIX(R) source "
"license. By 1990, the CSRG's funding was running out, and it faced "
@@ -269,7 +271,7 @@ msgstr ""
"alterado para BSD/OS."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:90
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:111
msgid ""
"386BSD never became a stable operating system. Instead, two other projects "
"split off from it in 1993: http://www.NetBSD.org/[NetBSD] and link:https://"
@@ -295,18 +297,18 @@ msgstr ""
"FreeBSD."
#. type: Title ==
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:92
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:113
#, no-wrap
msgid "Why is BSD not better known?"
msgstr "Por que o BSD não é mais conhecido?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:95
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:116
msgid "For a number of reasons, BSD is relatively unknown:"
msgstr "Por uma série de razões, o BSD é relativamente desconhecido:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:97
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:118
msgid ""
"The BSD developers are often more interested in polishing their code than "
"marketing it."
@@ -315,7 +317,7 @@ msgstr ""
"do que em divulgá-lo."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:98
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:119
msgid ""
"Much of Linux's popularity is due to factors external to the Linux projects, "
"such as the press, and to companies formed to provide Linux services. Until "
@@ -327,7 +329,7 @@ msgstr ""
"proposta."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:99
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:120
msgid ""
"In 1992, AT&T sued http://www.bsdi.com/[BSDI], the vendor of BSD/386, "
"alleging that the product contained AT&T-copyrighted code. The case was "
@@ -342,7 +344,7 @@ msgstr ""
"publicado na web afirma que o caso foi \"recentemente encerrado\"."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:103
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:124
msgid ""
"One detail that the lawsuit did clarify is the naming: in the 1980s, BSD was "
"known as \"BSD UNIX(R)\". With the elimination of the last vestige of AT&T "
@@ -357,13 +359,13 @@ msgstr ""
"operacional 4.3BSD UNIX(R)\" e o \"sistema operacional 4.4BSD\"."
#. type: Title ==
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:105
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:126
#, no-wrap
msgid "Comparing BSD and Linux"
msgstr "Comparando BSD e Linux"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:111
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:132
msgid ""
"So what is really the difference between, say, Debian Linux and FreeBSD? For "
"the average user, the difference is surprisingly small: Both are UNIX(R) "
@@ -384,13 +386,13 @@ msgstr ""
"diferenças do NetBSD, OpenBSD e Dragon FlyBSD são pequenas."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:112
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:133
#, no-wrap
msgid "Who owns BSD?"
msgstr "Quem é o dono do BSD?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:117
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:138
msgid ""
"No one person or corporation owns BSD. It is created and distributed by a "
"community of highly technical and committed contributors all over the "
@@ -404,13 +406,13 @@ msgstr ""
"mantenedores."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:118
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:139
#, no-wrap
msgid "How is BSD developed and updated?"
msgstr "Como o BSD é desenvolvido e atualizado?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:123
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:144
msgid ""
"The BSD kernels are developed and updated following the Open Source "
"development model. Each project maintains a publicly accessible _source "
@@ -425,7 +427,7 @@ msgstr ""
"obter uma cópia completa de qualquer versão."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:126
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:147
msgid ""
"A large number of developers worldwide contribute to improvements to BSD. "
"They are divided into three kinds:"
@@ -434,12 +436,12 @@ msgstr ""
"melhorias ao BSD. Eles estão divididos em três categorias:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:128
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:149
msgid ""
"_Contributors_ write code or documentation. They are not permitted to commit "
-"(add code) directly to the source tree. In order for their code to be "
-"included in the system, it must be reviewed and checked in by a registered "
-"developer, known as a __committer__."
+"(add code) directly to the source tree. For their code to be included in the "
+"system, it must be reviewed and checked in by a registered developer, known "
+"as a __committer__."
msgstr ""
"_Contributors_ escrevem código ou documentação. Eles não têm permissão para "
"adicionar código diretamente ao repositório principal de código fonte. Para "
@@ -447,18 +449,18 @@ msgstr ""
"por um desenvolvedor registrado, conhecido como __committer__."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:129
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:150
msgid ""
-"_Committers_ are developers with write access to the source tree. In order "
-"to become a committer, an individual must show ability in the area in which "
-"they are active."
+"_Committers_ are developers with write access to the source tree. To become "
+"a committer, an individual must show ability in the area in which they are "
+"active."
msgstr ""
"_Committers_ são desenvolvedores com acesso de gravação no repositório "
"principal de código fonte. Para se tornar um committer, um indivíduo deve "
"mostrar habilidade na área em que está ativo."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:136
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:157
msgid ""
"It is at the individual committer's discretion whether they should obtain "
"authority before committing changes to the source tree. In general, an "
@@ -487,14 +489,14 @@ msgstr ""
"alterações para o repositório de código fonte em segredo."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:137
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:158
msgid ""
"The _Core team_. FreeBSD and NetBSD each have a core team which manages the "
"project. The core teams developed in the course of the projects, and their "
-"role is not always well-defined. It is not necessary to be a developer in "
-"order to be a core team member, though it is normal. The rules for the core "
-"team vary from one project to the other, but in general they have more say "
-"in the direction of the project than non-core team members have."
+"role is not always well-defined. It is not necessary to be a developer to be "
+"a core team member, though it is normal. The rules for the core team vary "
+"from one project to the other, but in general they have more say in the "
+"direction of the project than non-core team members have."
msgstr ""
"O _Core Team_. O FreeBSD e o NetBSD possuem uma equipe principal (Core team) "
"que gerenciam o projeto. As equipes principais evoluíram ao longo dos "
@@ -505,12 +507,12 @@ msgstr ""
"demais membros tem."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:139
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:160
msgid "This arrangement differs from Linux in a number of ways:"
msgstr "Esse arranjo difere do Linux de várias maneiras:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:141
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:162
msgid ""
"No one person controls the content of the system. In practice, this "
"difference is overrated, since the Principal Architect can require that code "
@@ -523,7 +525,7 @@ msgstr ""
"fazer alterações."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:142
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:163
msgid ""
"On the other hand, there _is_ a central repository, a single place where you "
"can find the entire operating system sources, including all older versions."
@@ -533,7 +535,7 @@ msgstr ""
"as versões mais antigas."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:143
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:164
msgid ""
"BSD projects maintain the entire \"Operating System\", not only the kernel. "
"This distinction is only marginally useful: neither BSD nor Linux is useful "
@@ -546,7 +548,7 @@ msgstr ""
"os mesmos aplicativos usados no Linux."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:144
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:165
msgid ""
"As a result of the formalized maintenance of a single SVN source tree, BSD "
"development is clear, and it is possible to access any version of the system "
@@ -561,13 +563,13 @@ msgstr ""
"é atualizado cerca de 100 vezes por dia. A maioria dessas mudanças é pequena."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:145
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:166
#, no-wrap
msgid "BSD releases"
msgstr "Releases do BSD"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:150
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:171
msgid ""
"FreeBSD, NetBSD and OpenBSD provide the system in three different \"releases"
"\". As with Linux, releases are assigned a number such as 1.4.1 or 3.5. In "
@@ -578,7 +580,7 @@ msgstr ""
"3.5. Além disso, o número da versão tem um sufixo indicando sua finalidade:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:152
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:173
msgid ""
"The development version of the system is called _CURRENT_. FreeBSD assigns a "
"number to CURRENT, for example FreeBSD 5.0-CURRENT. NetBSD uses a slightly "
@@ -595,7 +597,7 @@ msgstr ""
"novo desenvolvimento no sistema entra neste branch."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:153
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:174
msgid ""
"At regular intervals, between two and four times a year, the projects bring "
"out a _RELEASE_ version of the system, which is available on CD-ROM and for "
@@ -613,7 +615,7 @@ msgstr ""
"1.4.2."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:154
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:175
msgid ""
"As bugs are found in a RELEASE version, they are fixed, and the fixes are "
"added to the SVN tree. In FreeBSD, the resultant version is called the "
@@ -631,7 +633,7 @@ msgstr ""
"são aplicadas a todas as versões RELEASE suportadas."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:161
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:182
msgid ""
"_By contrast, Linux maintains two separate code trees: the stable version "
"and the development version. Stable versions have an even minor version "
@@ -655,13 +657,13 @@ msgstr ""
"\"TurboLinux 6.0 com kernel 2.2.14 \"._"
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:162
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:183
#, no-wrap
msgid "What versions of BSD are available?"
msgstr "Quais versões do BSD estão disponíveis?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:165
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:186
msgid ""
"In contrast to the numerous Linux distributions, there are only four major "
"open source BSDs. Each BSD project maintains its own source tree and its own "
@@ -675,7 +677,7 @@ msgstr ""
"que no Linux."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:167
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:188
msgid ""
"It is difficult to categorize the goals of each project: the differences are "
"very subjective. Basically,"
@@ -684,7 +686,7 @@ msgstr ""
"subjetivas. Basicamente,"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:169
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:190
msgid ""
"FreeBSD aims for high performance and ease of use by end users, and is a "
"favourite of web content providers. It runs on a link:https://www.FreeBSD."
@@ -697,7 +699,7 @@ msgstr ""
"significativamente mais usuários do que os outros projetos."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:170
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:191
msgid ""
"NetBSD aims for maximum portability: \"of course it runs NetBSD\". It runs "
"on machines from palmtops to large servers, and has even been used on NASA "
@@ -711,7 +713,7 @@ msgstr ""
"Intel(R)."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:171
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:192
msgid ""
"OpenBSD aims for security and code purity: it uses a combination of the open "
"source concept and rigorous code reviews to create a system which is "
@@ -727,7 +729,7 @@ msgstr ""
"executado em várias plataformas."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:172
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:193
msgid ""
"DragonFlyBSD aims for high performance and scalability under everything from "
"a single-node UP system to a massively clustered system. DragonFlyBSD has "
@@ -741,7 +743,7 @@ msgstr ""
"de entender, manter e desenvolver."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:174
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:195
msgid ""
"There are also two additional BSD UNIX(R) operating systems which are not "
"open source, BSD/OS and Apple's Mac OS(R) X:"
@@ -750,7 +752,7 @@ msgstr ""
"aberto, o BSD/OS e Mac OS(R) X da Apple:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:176
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:197
msgid ""
"BSD/OS was the oldest of the 4.4BSD derivatives. It was not open source, "
"though source code licenses were available at relatively low cost. It "
@@ -769,7 +771,7 @@ msgstr ""
"VxWorks."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:177
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:198
msgid ""
"http://www.apple.com/macosx/server/[Mac OS(R) X] is the latest version of "
"the operating system for Apple(R)'s Mac(R) line. The BSD core of this "
@@ -789,13 +791,13 @@ msgstr ""
"versa."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:178
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:199
#, no-wrap
msgid "How does the BSD license differ from the GNU Public license?"
msgstr "Como a licença BSD difere da licença GNU Publica?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:184
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:205
msgid ""
"Linux is available under the http://www.fsf.org/copyleft/gpl.html[GNU "
"General Public License] (GPL), which is designed to eliminate closed source "
@@ -814,34 +816,33 @@ msgstr ""
"particularmente atraente para aplicativos embarcados."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:185
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:206
#, no-wrap
msgid "What else should I know?"
msgstr "O que mais eu deveria saber?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:190
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:211
msgid ""
"Since fewer applications are available for BSD than Linux, the BSD "
"developers created a Linux compatibility package, which allows Linux "
"programs to run under BSD. The package includes both kernel modifications, "
-"in order to correctly perform Linux system calls, and Linux compatibility "
-"files such as the C library. There is no noticeable difference in execution "
-"speed between a Linux application running on a Linux machine and a Linux "
+"to correctly perform Linux system calls, and Linux compatibility files such "
+"as the C library. There is no noticeable difference in execution speed "
+"between a Linux application running on a Linux machine and a Linux "
"application running on a BSD machine of the same speed."
msgstr ""
-"Como menos aplicativos estão disponíveis para o BSD do que para o Linux, os "
-"desenvolvedores do BSD criaram um pacote de compatibilidade com o Linux, o "
-"qual permite que os programas Linux sejam executados sob o BSD. O pacote "
-"inclui tanto as modificações do kernel, necessárias para executar "
-"corretamente as chamadas do sistema Linux e quanto os arquivos de "
-"compatibilidade do Linux, como a biblioteca C. Não há diferença perceptível "
-"na velocidade de execução entre um aplicativo Linux em execução em uma "
-"máquina Linux nativa e um aplicativo Linux em execução em uma máquina BSD, "
-"contanto que ambas tenham o mesmo hardware."
+"Uma vez que há menos aplicativos disponíveis para o BSD em comparação ao "
+"Linux, os desenvolvedores do BSD criaram um pacote de compatibilidade com o "
+"Linux, que permite que programas do Linux sejam executados no BSD. Esse "
+"pacote inclui modificações no kernel para realizar corretamente chamadas de "
+"sistema do Linux, além de arquivos de compatibilidade do Linux, como a "
+"biblioteca C. Não há diferença perceptível na velocidade de execução entre "
+"um aplicativo do Linux rodando em uma máquina Linux e um aplicativo do Linux "
+"rodando em uma máquina BSD de mesma velocidade."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:193
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:214
msgid ""
"The \"all from one supplier\" nature of BSD means that upgrades are much "
"easier to handle than is frequently the case with Linux. BSD handles "
@@ -857,13 +858,13 @@ msgstr ""
"binários bastante antigos sem problemas."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:194
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:215
#, no-wrap
msgid "Which should I use, BSD or Linux?"
msgstr "Qual devo usar, BSD ou Linux?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:197
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:218
msgid ""
"What does this all mean in practice? Who should use BSD, who should use "
"Linux?"
@@ -872,14 +873,14 @@ msgstr ""
"Linux?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:200
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:221
msgid "This is a very difficult question to answer. Here are some guidelines:"
msgstr ""
"Esta é uma pergunta muito difícil de responder. Aqui estão algumas "
"diretrizes:"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:202
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:223
msgid ""
"\"If it ain't broke, don't fix it\": If you already use an open source "
"operating system, and you are happy with it, there is probably no good "
@@ -890,7 +891,7 @@ msgstr ""
"nenhuma razão para mudar."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:203
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:224
msgid ""
"BSD systems, in particular FreeBSD, can have notably higher performance than "
"Linux. But this is not across the board. In many cases, there is little or "
@@ -903,7 +904,7 @@ msgstr ""
"casos, o Linux pode ter um desempenho melhor que o FreeBSD."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:204
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:225
msgid ""
"In general, BSD systems have a better reputation for reliability, mainly as "
"a result of the more mature code base."
@@ -913,7 +914,7 @@ msgstr ""
"madura."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:205
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:226
msgid ""
"BSD projects have a better reputation for the quality and completeness of "
"their documentation. The various documentation projects aim to provide "
@@ -926,12 +927,12 @@ msgstr ""
"idiomas, e que cobre todos os aspectos do sistema."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:206
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:227
msgid "The BSD license may be more attractive than the GPL."
msgstr "A licença BSD pode ser mais atraente que a GPL."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:207
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:228
msgid ""
"BSD can execute most Linux binaries, while Linux can not execute BSD "
"binaries. Many BSD implementations can also execute binaries from other "
@@ -945,13 +946,13 @@ msgstr ""
"para o Linux."
#. type: Title ===
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:208
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:229
#, no-wrap
msgid "Who provides support, service, and training for BSD?"
msgstr "Quem fornece suporte, serviços e treinamento para o BSD?"
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:211
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:232
msgid ""
"BSDi / http://www.freebsdmall.com[FreeBSD Mall, Inc.] have been providing "
"support contracts for FreeBSD for nearly a decade."
@@ -960,7 +961,7 @@ msgstr ""
"suporte para o FreeBSD já há quase uma década."
#. type: Plain text
-#: documentation/content/en/articles/explaining-bsd/_index.adoc:212
+#: documentation/content/en/articles/explaining-bsd/_index.adoc:233
msgid ""
"In addition, each of the projects has a list of consultants for hire: link:"
"https://www.FreeBSD.org/commercial/consult_bycat/[FreeBSD], http://www."
@@ -971,3 +972,12 @@ msgstr ""
"consultores disponíveis para contratação: link:www.FreeBSD.org/commercial/"
"consult_bycat/[FreeBSD], http://www.netbsd.org/gallery/consultants."
"html[NetBSD], e http://www.openbsd.org/support.html[OpenBSD]."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/filtering-bridges/_index.adoc b/documentation/content/pt-br/articles/filtering-bridges/_index.adoc
index 565e708eaa..672aa8049c 100644
--- a/documentation/content/pt-br/articles/filtering-bridges/_index.adoc
+++ b/documentation/content/pt-br/articles/filtering-bridges/_index.adoc
@@ -1,9 +1,11 @@
---
-title: Pontes de Filtragem (Filtering Bridges)
authors:
- - author: Alex Dupre
+ -
+ author: 'Alex Dupre'
email: ale@FreeBSD.org
-releaseinfo: "$FreeBSD$"
+description: 'Configurando firewalls e filtros em hosts FreeBSD que atuam como bridges em vez de roteadores'
+tags: ["network", "filtering", "bridges", "FreeBSD"]
+title: 'Pontes de Filtragem (Filtering Bridges)'
trademarks: ["freebsd", "3com", "intel", "general"]
---
@@ -16,22 +18,34 @@ trademarks: ["freebsd", "3com", "intel", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/filtering-bridges/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Geralmente, é útil dividir uma rede física (como uma Ethernet) em dois segmentos separados, sem precisar criar sub-redes, e usar um roteador para vinculá-los. O dispositivo que conecta as duas redes dessa maneira é chamado de ponte (bridge). Um sistema FreeBSD com duas interfaces de rede é suficiente para atuar como uma ponte.
+Muitas vezes é útil dividir uma rede física (como uma Ethernet) em dois segmentos separados sem precisar criar sub-redes e usar um roteador para conectá-los. O dispositivo que conecta as duas redes dessa forma é chamado de bridge. Um sistema FreeBSD com duas interfaces de rede é suficiente para atuar como uma ponte.
-Uma ponte funciona examinando os endereços do nível MAC (endereços Ethernet) dos dispositivos conectados a cada uma de suas interfaces de rede e encaminhando o tráfego entre as duas redes apenas se a origem e o destino estiverem em diferentes segmentos. Sob muitos pontos de vista, uma ponte é semelhante a um switch Ethernet com apenas duas portas.
+Uma bridge funciona analisando os endereços de nível MAC (endereços Ethernet) dos dispositivos conectados a cada uma de suas interfaces de rede e, em seguida, encaminhando o tráfego entre as duas redes apenas se a origem e o destino estiverem em segmentos diferentes. Em muitos aspectos, um bridge é semelhante a um switch Ethernet com apenas duas portas.
'''
@@ -40,26 +54,26 @@ toc::[]
[[filtering-bridges-why]]
== Por que usar uma ponte de filtragem?
-Cada vez mais frequentemente, graças aos custos reduzidos de conexões de banda larga à Internet (xDSL) e também devido à redução de endereços IPv4 disponíveis, muitas empresas estão conectadas à Internet 24 horas por dia e com poucos (às vezes nem mesmo 2) endereços IP. Nestas situações, geralmente é desejável ter um firewall que filtre o tráfego de entrada e de saída de e para a Internet, mas uma solução de filtragem de pacotes baseada em roteador pode não ser aplicável, quer seja devido a problemas de sub-redes, quer seja porque o roteador é de propriedade do provedor de conectividade (ISP), ou porque ele não suporta tais funcionalidades. Nestes cenários, o uso de uma ponte de filtragem é altamente recomendado.
+Cada vez mais frequentemente, graças à redução nos custos das conexões de banda larga à Internet (xDSL) e também devido à redução dos endereços IPv4 disponíveis, muitas empresas estão conectadas à Internet 24 horas por dia e com poucos (às vezes nem mesmo 2) endereços IP. Nestas situações, muitas vezes é desejável ter um firewall que filtre o tráfego de entrada e saída da Internet, mas uma solução de filtragem de pacotes baseada em roteador pode não ser aplicável, seja devido a problemas de sub-rede, o roteador pertence ao provedor de conectividade (ISP), ou porque não suporta tais funcionalidades. Nestes cenários, é altamente recomendável o uso de uma ponte de filtragem (filtering bridge).
-Um firewall baseado em uma ponte de filtragem pode ser configurado e inserido entre o roteador xDSL e seu hub/switch Ethernet sem causar nenhum problema de numeração IP.
+Um firewall baseado em bridge pode ser configurado e inserido entre o roteador xDSL e seu hub/switch Ethernet sem problemas de numeração IP.
[[filtering-bridges-how]]
-== Como instalar
+== Como Instalar
Adicionar funcionalidades de bridge a um sistema FreeBSD não é difícil. Desde a versão 4.5 é possível carregar tais funcionalidades como módulos ao invés de ter que reconstruir o kernel, simplificando bastante o procedimento. Nas subseções seguintes, explicarei as duas formas de instalação.
[IMPORTANT]
====
-_Não_ siga as duas instruções: um procedimento _exclui_ o outro. Selecione a melhor opção de acordo com suas necessidades e habilidades.
+_Não siga_ ambas as instruções: um procedimento _exclui_ o outro. Selecione a melhor opção de acordo com suas necessidades e habilidades.
====
-Antes de continuar, certifique-se de ter pelo menos duas placas Ethernet compatíveis com o modo promíscuo para recepção e transmissão, pois elas devem ser capazes de enviar pacotes Ethernet com qualquer endereço, não apenas o deles. Além disso, para ter uma boa taxa de transferência, as placas devem ser placas do barramento PCI. As melhores opções ainda são as Intel EtherExpress(TM) Pro, seguido pela série 3Com(R) 3c9xx. Para simplificar a configuração do firewall, pode ser útil ter duas placas de diferentes fabricantes (usando drivers diferentes) para distinguir claramente qual interface está conectada ao roteador e qual está conectada à rede interna.
+Antes de continuar, certifique-se de ter pelo menos duas placas Ethernet que suportem o modo promíscuo tanto para recepção quanto para transmissão, uma vez que elas devem ser capazes de enviar pacotes Ethernet com qualquer endereço, não apenas o próprio. Além disso, para obter um bom desempenho, as placas devem ser placas de barramento PCI master. As melhores opções ainda são as placas Intel EtherExpress(TM) Pro, seguidas pela série 3Com(R) 3c9xx. Para simplificar a configuração do firewall, pode ser útil ter duas placas de fabricantes diferentes (usando drivers diferentes) para distinguir claramente qual interface está conectada ao roteador e qual está na rede interna.
[[filtering-bridges-kernel]]
=== Configuração do Kernel
-Então você decidiu usar o método de instalação mais antigo, e também o mais bem testado. Para começar, você precisa adicionar as seguintes linhas ao seu arquivo de configuração do kernel:
+Então você decidiu usar o método de instalação mais antigo, mas bem testado. Para começar, você precisa adicionar as seguintes linhas ao seu arquivo de configuração do kernel:
[.programlisting]
....
@@ -68,26 +82,26 @@ options IPFIREWALL
options IPFIREWALL_VERBOSE
....
-A primeira linha adiciona o suporte para o serviço de ponte (bridge), a segunda adiciona o suporte ao firewall e a terceira é referente as funções de registro do firewall.
+A primeira linha é para compilar o suporte à bridge, a segunda é para o firewall e a terceira é para as funções de registro do firewall.
-Agora é necessário compilar e instalar o novo kernel. Você pode encontrar instruções detalhadas na seção link:{handbook}#kernelconfig-building[Compilando e Instalando um Kernel Personalizado] do Handbook do FreeBSD.
+Agora é necessário compilar e instalar o novo kernel. Instruções detalhadas podem ser encontradas na seção extref:{handbook}[Compilação e Instalação de um Kernel Personalizado, kernelconfig-building] do FreeBSD Handbook.
[[filtering-bridges-modules]]
-=== Carregamento de módulos
+=== Carregamento de Módulos
-Se você escolheu usar o método de instalação mais novo e mais simples, a única coisa a fazer agora é adicionar a seguinte linha ao [.filename]#/boot/loader.conf#:
+Se você escolheu usar o novo e mais simples método de instalação, a única coisa a fazer agora é adicionar a seguinte linha ao [.filename]#/boot/loader.conf#:
[.programlisting]
....
bridge_load="YES"
....
-Desta forma, durante a inicialização do sistema, o módulo [.filename]#bridge.ko# será carregado junto com o kernel. Não é necessário adicionar uma linha semelhante para o módulo [.filename]#ipfw.ko#, pois ele será carregado automaticamente após a execução das etapas na seção a seguir.
+Dessa forma, durante a inicialização do sistema, o módulo [.filename]#bridge.ko# será carregado juntamente com o kernel. Não é necessário adicionar uma linha semelhante para o módulo [.filename]#ipfw.ko#, pois ele será carregado automaticamente após a execução das etapas na seção seguinte.
[[filtering-bridges-finalprep]]
-== Preparação final
+== Preparação Final
-Antes de reinicializar para carregar o novo kernel ou os módulos requeridos (de acordo com o método de instalação escolhido anteriormente), você deve fazer algumas alterações no arquivo de configuração [.filename]#/etc/rc.conf#. A regra padrão do firewall é rejeitar todos os pacotes IP. Inicialmente vamos configurar um firewall `open` (aberto), a fim de verificar sua operação sem qualquer problema relacionado à filtragem de pacotes (no caso de você executar este procedimento remotamente, tal configuração evitará que você permaneça isolado da rede). Coloque estas linhas no [.filename]#/etc/rc.conf#:
+Antes de reiniciar para carregar o novo kernel ou os módulos necessários (de acordo com o método de instalação escolhido anteriormente), você deve fazer algumas alterações no arquivo de configuração [.filename]#/etc/rc.conf#. A regra padrão do firewall é rejeitar todos os pacotes IP. Inicialmente, configuraremos um firewall `open`, para verificar sua operação sem problemas relacionados à filtragem de pacotes (caso você esteja executando este procedimento remotamente, essa configuração evitará que você fique isolado da rede). Adicione estas linhas em [.filename]#/etc/rc.conf#:
[.programlisting]
....
@@ -97,45 +111,40 @@ firewall_quiet="YES"
firewall_logging="YES"
....
-A primeira linha ativará o firewall (e carregará o módulo [.filename]#ipfw.ko# se ele não estiver compilado no kernel), a segunda irá configurá-lo no modo `open` (como explicado em [.filename]#/etc/rc.firewall#), a terceira para não mostrar o carregamento de regras e a quarta para ativar o suporte aos logs.
+A primeira linha ativará o firewall (e carregará o módulo [.filename]#ipfw.ko# caso não esteja compilado no kernel), a segunda configurará o firewall no modo `open` (conforme explicado em [.filename]#/etc/rc.firewall#), a terceira linha não exibirá o carregamento de regras e a quarta linha ativará o suporte a registro de logs.
-Sobre a configuração das interfaces de rede, a maneira mais usada é atribuir um IP a apenas uma das placas de rede, mas a ponte funcionará igualmente, mesmo que ambas as interfaces ou nenhuma tenha um IP configurado. No último caso (IP-less) a máquina bridge ficará ainda mais oculta, e também inacessível pela rede: para configurá-la será necessário efetuar o login a partir do console ou através de uma terceira interface de rede separada da ponte. Às vezes, durante a inicialização do sistema, alguns programas exigem acesso à rede, digamos, para resolução de nomes de domínio: neste caso, é necessário atribuir um IP à interface externa (aquela conectada à Internet, onde o servidor DNS se encontra), uma vez que a ponte será ativada no final do procedimento de inicialização. Isso significa que a interface [.filename]#fxp0# (no nosso caso) deve ser mencionada na seção ifconfig do arquivo [.filename]#/etc/rc.conf#, enquanto o [.filename]#xl0# não é. Atribuir um IP a ambas as placas de rede não faz muito sentido, a menos que, durante o procedimento de inicialização, os aplicativos acessem os serviços em ambos os segmentos de Ethernet.
+Sobre a configuração das interfaces de rede, o modo mais comum é atribuir um endereço IP a apenas uma das placas de rede, mas a ponte funcionará igualmente mesmo que ambas as interfaces ou nenhuma tenha um endereço IP configurado. No último caso (sem IP), a máquina da ponte ainda será mais oculta e inacessível pela rede: para configurá-la, é necessário fazer login pelo console ou por meio de uma terceira interface de rede separada da bridge. Às vezes, durante a inicialização do sistema, alguns programas exigem acesso à rede, por exemplo, para resolução de domínio: nesse caso, é necessário atribuir um endereço IP à interface externa (a que está conectada à Internet, onde o servidor DNS reside), pois a bridge será ativada no final do procedimento de inicialização. Isso significa que a interface [.filename]#fxp0# (no nosso caso) deve ser mencionada na seção ifconfig do arquivo [.filename]#/etc/rc.conf#, enquanto a [.filename]#xl0# não. Atribuir um endereço IP a ambas as placas de rede não faz muito sentido, a menos que, durante o procedimento de inicialização, aplicativos precisem acessar serviços em ambos os segmentos Ethernet.
-Há outra coisa importante a saber. Ao executar o IP sobre Ethernet, existem dois protocolos Ethernet em uso: um é o IP, o outro é o ARP. O ARP faz a conversão do endereço IP de um host em seu endereço Ethernet (camada MAC). Para permitir a comunicação entre dois hosts separados pela ponte, é necessário que a ponte envie pacotes ARP. Esse protocolo não está incluído na camada IP, uma vez que ele existe apenas com IP sobre Ethernet. O firewall do FreeBSD filtra exclusivamente na camada IP e, portanto, todos os pacotes não-IP (ARP incluso) serão encaminhados sem serem filtrados, mesmo que o firewall esteja configurado para não permitir nada.
+Uma outra coisa importante a se saber é que, ao executar IP sobre Ethernet, existem na verdade dois protocolos Ethernet em uso: um é o IP e o outro é o ARP. ARP faz a conversão do endereço IP de um host em seu endereço Ethernet (camada MAC). Para permitir a comunicação entre dois hosts separados pela bridge, é necessário que a bridge encaminhe pacotes ARP. Esse protocolo não está incluído na camada IP, uma vez que ele existe apenas com IP sobre Ethernet. O firewall do FreeBSD filtra exclusivamente na camada IP e, portanto, todos os pacotes não-IP (incluindo ARP) serão encaminhados sem serem filtrados, mesmo se o firewall estiver configurado para não permitir nada.
-Agora é hora de reiniciar o sistema e usá-lo como antes: haverá algumas novas mensagens sobre a ponte e o firewall, mas a ponte não será ativada e o firewall, estando no modo `open`, não evitará operações.
+Agora é hora de reiniciar o sistema e usá-lo como antes: haverá algumas novas mensagens sobre a bridge e o firewall, mas a bridge não será ativada e o firewall, estando no modo `aberto` , não evitará nenhuma operação.
Se houver algum problema, você deve resolvê-los agora antes de prosseguir.
[[filtering-bridges-enabling]]
-== Habilitando a ponte
+== Habilitando a Bridge
-Neste ponto, para habilitar a ponte, você tem que executar os seguintes comandos (tendo a perspicácia para substituir os nomes das duas interfaces de rede [.filename]#fxp0# e [.filename]#xl0# com as suas próprias):
+Neste ponto, para habilitar a ponte, você tem que executar os seguintes comandos (tendo a perspicácia para substituir os nomes das duas interfaces de rede [.filename]#fxp0# e [.filename]#xl0# with your own ones) com as suas próprias):
-[source,shell]
+[source, shell]
....
# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0
# sysctl net.link.ether.bridge.ipfw=1
# sysctl net.link.ether.bridge.enable=1
....
-A primeira linha especifica quais interfaces devem ser ativadas pela ponte, a segunda habilitará o firewall na ponte e, finalmente, a terceira habilitará a ponte.
-
-[NOTE]
-====
-Se você tem o FreeBSD 5.1-RELEASE ou anterior, as variáveis do sysctl são escritas de forma diferente. Veja man:bridge[4] para detalhes.
-====
+A primeira linha especifica quais interfaces devem ser ativadas pela bridge, a segunda irá habilitar o firewall na bridge e, finalmente, a terceira irá habilitar a bridge.
-Neste ponto você deve ser capaz de inserir a máquina entre dois conjuntos de hosts sem comprometer quaisquer habilidades de comunicação entre eles. Em caso afirmativo, o próximo passo é adicionar as partes `net.link.ether.bridge._[blah]_=_[blah]_` dessas linhas ao arquivo [.filename]#/etc/sysctl.conf#, para que eles sejam executados na inicialização.
+Neste ponto, você deverá ser capaz de inserir a máquina entre dois conjuntos de hosts sem comprometer as habilidades de comunicação entre eles. Se sim, o próximo passo é adicionar as partes `net.link.ether.bridge._[blah]_=_[blah]_` dessas linhas ao arquivo [.filename]#/etc/sysctl.conf#, para que elas sejam executadas na inicialização.
[[filtering-bridges-ipfirewall]]
== Configurando o Firewall
-Agora é hora de criar seu próprio arquivo com regras de firewall personalizadas, a fim de proteger a rede interna. Haverá alguma complicação em fazer isso porque nem todas as funcionalidades do firewall estão disponíveis em pacotes em ponte. Além disso, há uma diferença entre os pacotes que estão sendo encaminhados e os pacotes que estão sendo recebidos pela máquina local. Em geral, os pacotes de entrada passam pelo firewall apenas uma vez, não duas vezes, como é normalmente o caso; na verdade eles são filtrados somente após o recebimento, portanto, as regras que usam `out` ou `xmit` nunca darão match. Pessoalmente, eu uso `in via` que é uma sintaxe antiga, mas uma que tem sentido quando você a lê. Outra limitação é que você está restrito a usar somente comandos `pass` ou `drop` para os pacotes filtrados por uma ponte. Coisas sofisticadas como `divert`, `forwar` ou `reject` não estão disponíveis. Essas opções ainda podem ser usadas, mas apenas no tráfego para ou a partir da própria máquina ponte (se ela tiver um endereço IP).
+Agora é hora de criar seu próprio arquivo com regras personalizadas de firewall, para proteger a rede interna. Haverá alguma complicação em fazer isso porque nem todas as funcionalidades do firewall estão disponíveis em pacotes encaminhados através de uma bridge. Além disso, há uma diferença entre os pacotes que estão em processo de encaminhamento e os pacotes que estão sendo recebidos pela máquina local. Em geral, os pacotes de entrada são filtrados apenas uma vez, não duas vezes como normalmente ocorre; de fato, eles são filtrados apenas no momento do recebimento, portanto, as regras que usam `out` ou `xmit` nunca darão match. Pessoalmente, eu uso `in via`, que é uma sintaxe mais antiga, mas que faz sentido quando você lê. Outra limitação é que você está restrito a usar apenas comandos `pass` ou `drop` para pacotes filtrados por uma ponte. Coisas sofisticadas como `divert`, `forward` ou `reject` não estão disponíveis. Tais opções ainda podem ser usadas, mas apenas no tráfego destinado ou originado na máquina que atua como bridge em si (se ela tiver um endereço IP).
-O conceito de filtragem stateful é novo no FreeBSD 4.0. Esta é uma grande melhoria para o tráfego UDP, que normalmente é um pedido que sai, seguido pouco depois por uma resposta com exatamente o mesmo conjunto de endereços IP e números de porta (mas com origem e destino invertidos, é claro). Para firewalls que não possuem manutenção de estado, quase não há como lidar com esse tipo de tráfego como uma sessão única. Mas com um firewall que pode "lembrar" de um pacote UDP de saída e, nos próximos minutos, permitir uma resposta, o manuseio de serviços UDP é trivial. O exemplo a seguir mostra como fazer isso. É possível fazer a mesma coisa com pacotes TCP. Isso permite que você evite alguns ataques de negação de serviço e outros truques desagradáveis, mas também faz com que sua tabela de estado cresça rapidamente em tamanho.
+O conceito de filtragem stateful é novo no FreeBSD 4.0. Esta é uma grande melhoria para o tráfego UDP, que geralmente é uma solicitação que sai, seguida logo depois por uma resposta com o mesmo conjunto de endereços IP e portas (mas com origem e destino invertidos, é claro). Para firewalls que não têm o controle de estado, quase não há como lidar com esse tipo de tráfego como uma sessão única. Mas com um firewall que pode "lembrar" de um pacote UDP de saída e, nos próximos minutos, permitir uma resposta, lidar com serviços UDP é trivial. O exemplo a seguir mostra como fazer isso. É possível fazer a mesma coisa com pacotes TCP. Isso permite evitar alguns ataques de negação de serviço e outros truques desagradáveis, mas também faz com que a tabela de estado cresça rapidamente em tamanho.
-Vamos ver um exemplo de configuração. Note primeiro que no topo do [.filename]#/etc/rc.firewall# já existem regras padrão para a interface de loopback [.filename]#lo0#, então não devemos mais precisar delas. Regras customizadas devem ser colocadas em um arquivo separado (digamos, [.filename]#/etc/rc.firewall.local#) e carregadas na inicialização do sistema, modificando a linha de [.filename]#/etc/rc.conf# onde definimos o firewall `open`:
+Vamos dar uma olhada em um exemplo de configuração. Note primeiro que no início de [.filename]#/etc/rc.firewall#, já existem regras padrão para a interface de loopback [.filename]#lo0#, então não precisamos mais nos preocupar com elas. As regras personalizadas devem ser colocadas em um arquivo separado (digamos [.filename]#/etc/rc.firewall.local#) e carregadas na inicialização do sistema, modificando a linha de [.filename]#/etc/rc.conf# onde definimos o firewall `open`:
[.programlisting]
....
@@ -144,10 +153,10 @@ firewall_type="/etc/rc.firewall.local"
[IMPORTANT]
====
-Você tem que especificar o caminho __completo__, caso contrário ele não será carregado com o risco de permanecer isolado da rede.
+Você tem que especificar o _caminho completo_, caso contrário ele não será carregado com o risco de permanecer isolado da rede.
====
-Para nosso exemplo, imagine ter a interface [.filename]#fxp0# conectada para o exterior (Internet) e a [.filename]#xl0# para o interior (LAN). A máquina ponte tem o IP `1.2.3.4` (não é possível que o seu ISP possa lhe dar um endereço assim, mas para nosso exemplo ele é bom).
+Para o nosso exemplo, imagine ter a interface [.filename]#fxp0# conectada ao exterior (Internet) e a [.filename]#xl0# ao interior (LAN). A máquina bridge tem o IP `1.2.3.4` (não é possível que o seu provedor de serviços de Internet possa lhe fornecer um endereço exatamente como este, mas para o nosso exemplo é suficiente).
[.programlisting]
....
@@ -175,7 +184,7 @@ add pass ip from any to any in via xl0
add pass tcp from any to any 22 in via fxp0 setup keep-state
# Allow SMTP only towards the mail server
add pass tcp from any to relay 25 in via fxp0 setup keep-state
-# Allow zone transfers only by the slave name server [dns2.nic.it]
+# Allow zone transfers only by the secondary name server [dns2.nic.it]
add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state
# Pass ident probes. It is better than waiting for them to timeout
add pass tcp from any to any 113 in via fxp0 setup keep-state
@@ -199,27 +208,27 @@ add pass icmp from any to any icmptypes 11
add drop log all from any to any
....
-Aqueles de vocês que já configuraram firewalls antes podem notar algumas coisas que estão faltando. Em particular, não há regras anti-spoofing, na verdade nós _não_ adicionamos:
+Aqueles que já configuraram firewalls antes podem notar que algumas coisas estão faltando. Em particular, não há regras anti-spoofing, na verdade, _não_ adicionamos:
[.programlisting]
....
add deny all from 1.2.3.4/8 to any in via fxp0
....
-Ou seja, dropar os pacotes que estão vindo do lado de fora dizendo ser da nossa rede. Isso é algo que você normalmente faria para ter certeza de que alguém não tentaria escapar do filtro de pacotes, gerando pacotes nefastos que parecem ser de dentro. O problema é que existe _pelo menos_ um host na interface externa que você não deseja ignorar: o roteador. Mas geralmente ISP tem anti-spoofs em seu roteador, então não precisamos nos incomodar muito.
+Isso significa descartar pacotes que estão chegando de fora e alegam ser da nossa rede. Isso é algo que normalmente se faz para garantir que alguém não tente evadir o filtro de pacotes, gerando pacotes maliciosos que parecem ser provenientes de dentro da rede. O problema é que há _pelo menos_ um host na interface externa que você não deseja ignorar: o roteador. Mas geralmente, o ISP faz o anti-spoofing em seu roteador, então não precisamos nos preocupar tanto com isso.
A última regra parece ser uma duplicata exata da regra padrão, ou seja, não deixa passar nada que não seja especificamente permitido. Mas há uma diferença: todo tráfego suspeito será registrado.
-Existem duas regras para passar o tráfego SMTP e o do DNS para o servidor de e-mail e o servidor de nomes, se você os tiver. Obviamente, todo o conjunto de regras deve ser definido de acordo com as suas preferências pessoais, isso é apenas um exemplo específico (o formato da regra é descrito com precisão na página de manual do man:ipfw[8]). Note que, para que o "relay" e o "ns" funcionem, as pesquisas de serviço de nomes devem funcionar _antes_ da ponte ser ativada. Este é um exemplo de quando você precisa ter certeza de que definiu o IP na placa de rede correta. Como alternativa, é possível especificar o endereço IP em vez do nome do host (necessário se a máquina não tiver IP).
+Existem duas regras para permitir o tráfego SMTP e DNS direcionado ao servidor de e-mail e servidor de nomes, se você tiver esses servidores. Obviamente, todo o conjunto de regras deve ser personalizado de acordo com as preferências pessoais, este é apenas um exemplo específico (o formato da regra é descrito com precisão na página do manual man:ipfw[8]). Observe que, para o "relay" e o "ns" funcionarem, as consultas ao serviço de nomes devem funcionar _antes_ de habilitar a ponte. Isto é um exemplo para garantir que você configure o IP no cartão de rede correto. Alternativamente, é possível especificar o endereço IP em vez do nome do host (obrigatório se a máquina não possuir um IP).
-As pessoas que estão acostumadas a configurar firewalls provavelmente também estão acostumadas a ter uma regra `reset` ou `forward` para pacotes ident (TCP porta 113). Infelizmente, esta não é uma opção aplicável com a ponte, então o melhor é simplesmente passá-las ao seu destino. Enquanto essa máquina de destino não estiver executando um daemon ident, isso é relativamente inofensivo. A alternativa é descartar as conexões na porta 113, o que criará alguns problemas com serviços como por exemplo o IRC (o probe do ident irá dar timeout).
+Pessoas acostumadas a configurar firewalls provavelmente também estão acostumadas a ter uma regra de `reset` ou `forward` para pacotes ident (porta TCP 113). Infelizmente, essa não é uma opção aplicável com a bridge, então a melhor coisa a fazer é simplesmente passá-los para o destino. Contanto que a máquina de destino não esteja executando um ident daemon, isso é relativamente inofensivo. A alternativa é descartar conexões na porta 113, o que cria alguns problemas com serviços como IRC (a sondagem ident deve expirar).
-A única outra coisa que é um pouco estranha e que você pode ter notado é que existe uma regra para deixar a máquina ponte falar, e outra para os hosts internos. Lembre-se que isso ocorre porque os dois conjuntos de tráfego terão caminhos diferentes através do kernel e do filtro de pacotes. A rede interna passará pela ponte, enquanto a máquina local usará a pilha IP normal para falar. Assim, as duas regras lidam com casos diferentes. As regras `in via fxp0` funcionam nos dois caminhos. Em geral, se você usar as regras `in via` em todo o filtro, precisará abrir uma exceção para pacotes gerados localmente, porque eles não vieram em nenhuma de nossas interfaces.
+A única outra coisa um pouco estranha que você pode ter notado é que há uma regra para permitir que a máquina da bridge fale, e outra para os hosts internos. Lembre-se de que isso ocorre porque os dois conjuntos de tráfego seguirão caminhos diferentes através do kernel e do filtro de pacotes. A rede interna passará pela ponte, enquanto a máquina local usará o stack de IP normal para falar. Portando, existem duas regras para lidar com os casos diferentes. As regras `in via fxp0` funcionam para ambos os caminhos. Em geral, se você usar regras `in via` em todo o filtro, precisará fazer uma exceção para pacotes gerados localmente, porque eles não entraram por nenhuma de nossas interfaces.
[[filtering-bridges-contributors]]
== Colaboradores
-Muitas partes deste artigo foram tiradas, atualizadas e adaptadas de um texto antigo sobre pontes, editado por Nick Sayer. Um par de inspirações deve-se a uma introdução sobre pontes de Steve Peterson.
+Muitas partes deste artigo foram retiradas, atualizadas e adaptadas de um antigo texto sobre bridges, editado por Nick Sayer. E um par de inspirações vieram de uma introdução sobre bridges de autoria de Steve Peterson.
Um grande obrigado ao Luigi Rizzo pela implementação do código de ponte (bridge) no FreeBSD e pelo tempo que ele dedicou a mim respondendo a todas as minhas perguntas relacionadas.
diff --git a/documentation/content/pt-br/articles/filtering-bridges/_index.po b/documentation/content/pt-br/articles/filtering-bridges/_index.po
new file mode 100644
index 0000000000..81c9a26f22
--- /dev/null
+++ b/documentation/content/pt-br/articles/filtering-bridges/_index.po
@@ -0,0 +1,842 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-27 21:40+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfiltering-bridges_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:1
+#, no-wrap
+msgid "Configuring firewalls and filtering on FreeBSD hosts acting as bridges rather than routers"
+msgstr "Configurando firewalls e filtros em hosts FreeBSD que atuam como bridges em vez de roteadores"
+
+#. type: Title =
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:1
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:11
+#, no-wrap
+msgid "Filtering Bridges"
+msgstr "Pontes de Filtragem (Filtering Bridges)"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:48
+msgid ""
+"Often it is useful to divide one physical network (like an Ethernet) into "
+"two separate segments without having to create subnets, and use a router to "
+"link them together. The device that connects the two networks in this way "
+"is called a bridge. A FreeBSD system with two network interfaces is enough "
+"to act as a bridge."
+msgstr ""
+"Muitas vezes é útil dividir uma rede física (como uma Ethernet) em dois "
+"segmentos separados sem precisar criar sub-redes e usar um roteador para "
+"conectá-los. O dispositivo que conecta as duas redes dessa forma é chamado "
+"de bridge. Um sistema FreeBSD com duas interfaces de rede é suficiente para "
+"atuar como uma ponte."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:51
+msgid ""
+"A bridge works by scanning the addresses of MAC level (Ethernet addresses) "
+"of the devices connected to each of its network interfaces and then "
+"forwarding the traffic between the two networks only if the source and the "
+"destination are on different segments. Under many points of view a bridge "
+"is similar to an Ethernet switch with only two ports."
+msgstr ""
+"Uma bridge funciona analisando os endereços de nível MAC (endereços "
+"Ethernet) dos dispositivos conectados a cada uma de suas interfaces de rede "
+"e, em seguida, encaminhando o tráfego entre as duas redes apenas se a origem "
+"e o destino estiverem em segmentos diferentes. Em muitos aspectos, um bridge "
+"é semelhante a um switch Ethernet com apenas duas portas."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:53
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:57
+#, no-wrap
+msgid "Why use a filtering bridge?"
+msgstr "Por que usar uma ponte de filtragem?"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:62
+msgid ""
+"More and more frequently, thanks to the lowering costs of broad band "
+"Internet connections (xDSL) and also because of the reduction of available "
+"IPv4 addresses, many companies are connected to the Internet 24 hours on 24 "
+"and with few (sometimes not even a power of 2) IP addresses. In these "
+"situations it is often desirable to have a firewall that filters incoming "
+"and outgoing traffic from and towards Internet, but a packet filtering "
+"solution based on router may not be applicable, either due to subnetting "
+"issues, the router is owned by the connectivity supplier (ISP), or because "
+"it does not support such functionalities. In these scenarios the use of a "
+"filtering bridge is highly advised."
+msgstr ""
+"Cada vez mais frequentemente, graças à redução nos custos das conexões de "
+"banda larga à Internet (xDSL) e também devido à redução dos endereços IPv4 "
+"disponíveis, muitas empresas estão conectadas à Internet 24 horas por dia e "
+"com poucos (às vezes nem mesmo 2) endereços IP. Nestas situações, muitas "
+"vezes é desejável ter um firewall que filtre o tráfego de entrada e saída da "
+"Internet, mas uma solução de filtragem de pacotes baseada em roteador pode "
+"não ser aplicável, seja devido a problemas de sub-rede, o roteador pertence "
+"ao provedor de conectividade (ISP), ou porque não suporta tais "
+"funcionalidades. Nestes cenários, é altamente recomendável o uso de uma "
+"ponte de filtragem (filtering bridge)."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:64
+msgid ""
+"A bridge-based firewall can be configured and inserted between the xDSL "
+"router and your Ethernet hub/switch without any IP numbering issues."
+msgstr ""
+"Um firewall baseado em bridge pode ser configurado e inserido entre o "
+"roteador xDSL e seu hub/switch Ethernet sem problemas de numeração IP."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:66
+#, no-wrap
+msgid "How to Install"
+msgstr "Como Instalar"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:71
+msgid ""
+"Adding bridge functionalities to a FreeBSD system is not difficult. Since "
+"4.5 release it is possible to load such functionalities as modules instead "
+"of having to rebuild the kernel, simplifying the procedure a great deal. In "
+"the following subsections I will explain both installation ways."
+msgstr ""
+"Adicionar funcionalidades de bridge a um sistema FreeBSD não é difícil. "
+"Desde a versão 4.5 é possível carregar tais funcionalidades como módulos ao "
+"invés de ter que reconstruir o kernel, simplificando bastante o "
+"procedimento. Nas subseções seguintes, explicarei as duas formas de "
+"instalação."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:76
+msgid ""
+"_Do not_ follow both instructions: a procedure _excludes_ the other one. "
+"Select the best choice according to your needs and abilities."
+msgstr ""
+"_Não siga_ ambas as instruções: um procedimento _exclui_ o outro. Selecione "
+"a melhor opção de acordo com suas necessidades e habilidades."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:82
+msgid ""
+"Before going on, be sure to have at least two Ethernet cards that support "
+"the promiscuous mode for both reception and transmission, since they must be "
+"able to send Ethernet packets with any address, not just their own. "
+"Moreover, to have a good throughput, the cards should be PCI bus mastering "
+"cards. The best choices are still the Intel EtherExpress(TM) Pro, followed "
+"by the 3Com(R) 3c9xx series. To simplify the firewall configuration it may "
+"be useful to have two cards of different manufacturers (using different "
+"drivers) to distinguish clearly which interface is connected to the router "
+"and which to the inner network."
+msgstr ""
+"Antes de continuar, certifique-se de ter pelo menos duas placas Ethernet que "
+"suportem o modo promíscuo tanto para recepção quanto para transmissão, uma "
+"vez que elas devem ser capazes de enviar pacotes Ethernet com qualquer "
+"endereço, não apenas o próprio. Além disso, para obter um bom desempenho, as "
+"placas devem ser placas de barramento PCI master. As melhores opções ainda "
+"são as placas Intel EtherExpress(TM) Pro, seguidas pela série 3Com(R) 3c9xx. "
+"Para simplificar a configuração do firewall, pode ser útil ter duas placas "
+"de fabricantes diferentes (usando drivers diferentes) para distinguir "
+"claramente qual interface está conectada ao roteador e qual está na rede "
+"interna."
+
+#. type: Title ===
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:84
+#, no-wrap
+msgid "Kernel Configuration"
+msgstr "Configuração do Kernel"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:88
+msgid ""
+"So you have decided to use the older but well tested installation method. "
+"To begin, you have to add the following rows to your kernel configuration "
+"file:"
+msgstr ""
+"Então você decidiu usar o método de instalação mais antigo, mas bem testado. "
+"Para começar, você precisa adicionar as seguintes linhas ao seu arquivo de "
+"configuração do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:94
+#, no-wrap
+msgid ""
+"options BRIDGE\n"
+"options IPFIREWALL\n"
+"options IPFIREWALL_VERBOSE\n"
+msgstr ""
+"options BRIDGE\n"
+"options IPFIREWALL\n"
+"options IPFIREWALL_VERBOSE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:97
+msgid ""
+"The first line is to compile the bridge support, the second one is the "
+"firewall and the third one is the logging functions of the firewall."
+msgstr ""
+"A primeira linha é para compilar o suporte à bridge, a segunda é para o "
+"firewall e a terceira é para as funções de registro do firewall."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:100
+msgid ""
+"Now it is necessary to build and install the new kernel. You may find "
+"detailed instructions in the extref:{handbook}[Building and Installing a "
+"Custom Kernel, kernelconfig-building] section of the FreeBSD Handbook."
+msgstr ""
+"Agora é necessário compilar e instalar o novo kernel. Instruções detalhadas "
+"podem ser encontradas na seção extref:{handbook}[Compilação e Instalação de "
+"um Kernel Personalizado, kernelconfig-building] do FreeBSD Handbook."
+
+#. type: Title ===
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:102
+#, no-wrap
+msgid "Modules Loading"
+msgstr "Carregamento de Módulos"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:105
+msgid ""
+"If you have chosen to use the new and simpler installation method, the only "
+"thing to do now is add the following row to [.filename]#/boot/loader.conf#:"
+msgstr ""
+"Se você escolheu usar o novo e mais simples método de instalação, a única "
+"coisa a fazer agora é adicionar a seguinte linha ao [.filename]#/boot/loader."
+"conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:109
+#, no-wrap
+msgid "bridge_load=\"YES\"\n"
+msgstr "bridge_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:113
+msgid ""
+"In this way, during the system startup, the [.filename]#bridge.ko# module "
+"will be loaded together with the kernel. It is not required to add a "
+"similar row for the [.filename]#ipfw.ko# module, since it will be loaded "
+"automatically after the execution of the steps in the following section."
+msgstr ""
+"Dessa forma, durante a inicialização do sistema, o módulo [.filename]#bridge."
+"ko# será carregado juntamente com o kernel. Não é necessário adicionar uma "
+"linha semelhante para o módulo [.filename]#ipfw.ko#, pois ele será carregado "
+"automaticamente após a execução das etapas na seção seguinte."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:115
+#, no-wrap
+msgid "Final Preparation"
+msgstr "Preparação Final"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:121
+msgid ""
+"Before rebooting to load the new kernel or the required modules (according "
+"to the previously chosen installation method), you have to make some changes "
+"to the [.filename]#/etc/rc.conf# configuration file. The default rule of "
+"the firewall is to reject all IP packets. Initially we will set up an "
+"`open` firewall, to verify its operation without any issue related to packet "
+"filtering (in case you are going to execute this procedure remotely, such "
+"configuration will avoid you to remain isolated from the network). Put "
+"these lines in [.filename]#/etc/rc.conf#:"
+msgstr ""
+"Antes de reiniciar para carregar o novo kernel ou os módulos necessários (de "
+"acordo com o método de instalação escolhido anteriormente), você deve fazer "
+"algumas alterações no arquivo de configuração [.filename]#/etc/rc.conf#. A "
+"regra padrão do firewall é rejeitar todos os pacotes IP. Inicialmente, "
+"configuraremos um firewall `open`, para verificar sua operação sem problemas "
+"relacionados à filtragem de pacotes (caso você esteja executando este "
+"procedimento remotamente, essa configuração evitará que você fique isolado "
+"da rede). Adicione estas linhas em [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:128
+#, no-wrap
+msgid ""
+"firewall_enable=\"YES\"\n"
+"firewall_type=\"open\"\n"
+"firewall_quiet=\"YES\"\n"
+"firewall_logging=\"YES\"\n"
+msgstr ""
+"firewall_enable=\"YES\"\n"
+"firewall_type=\"open\"\n"
+"firewall_quiet=\"YES\"\n"
+"firewall_logging=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:131
+msgid ""
+"The first row will enable the firewall (and will load the module [."
+"filename]#ipfw.ko# if it is not compiled in the kernel), the second one to "
+"set up it in `open` mode (as explained in [.filename]#/etc/rc.firewall#), "
+"the third one to not show rules loading and the fourth one to enable logging "
+"support."
+msgstr ""
+"A primeira linha ativará o firewall (e carregará o módulo [.filename]#ipfw."
+"ko# caso não esteja compilado no kernel), a segunda configurará o firewall "
+"no modo `open` (conforme explicado em [.filename]#/etc/rc.firewall#), a "
+"terceira linha não exibirá o carregamento de regras e a quarta linha ativará "
+"o suporte a registro de logs."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:137
+msgid ""
+"About the configuration of the network interfaces, the most used way is to "
+"assign an IP to only one of the network cards, but the bridge will work "
+"equally even if both interfaces or none has a configured IP. In the last "
+"case (IP-less) the bridge machine will be still more hidden, as inaccessible "
+"from the network: to configure it, you have to login from console or through "
+"a third network interface separated from the bridge. Sometimes, during the "
+"system startup, some programs require network access, say for domain "
+"resolution: in this case it is necessary to assign an IP to the external "
+"interface (the one connected to Internet, where DNS server resides), since "
+"the bridge will be activated at the end of the startup procedure. It means "
+"that the [.filename]#fxp0# interface (in our case) must be mentioned in the "
+"ifconfig section of the [.filename]#/etc/rc.conf# file, while the [."
+"filename]#xl0# is not. Assigning an IP to both the network cards does not "
+"make much sense, unless, during the start procedure, applications should "
+"access to services on both Ethernet segments."
+msgstr ""
+"Sobre a configuração das interfaces de rede, o modo mais comum é atribuir um "
+"endereço IP a apenas uma das placas de rede, mas a ponte funcionará "
+"igualmente mesmo que ambas as interfaces ou nenhuma tenha um endereço IP "
+"configurado. No último caso (sem IP), a máquina da ponte ainda será mais "
+"oculta e inacessível pela rede: para configurá-la, é necessário fazer login "
+"pelo console ou por meio de uma terceira interface de rede separada da "
+"bridge. Às vezes, durante a inicialização do sistema, alguns programas "
+"exigem acesso à rede, por exemplo, para resolução de domínio: nesse caso, é "
+"necessário atribuir um endereço IP à interface externa (a que está conectada "
+"à Internet, onde o servidor DNS reside), pois a bridge será ativada no final "
+"do procedimento de inicialização. Isso significa que a interface [."
+"filename]#fxp0# (no nosso caso) deve ser mencionada na seção ifconfig do "
+"arquivo [.filename]#/etc/rc.conf#, enquanto a [.filename]#xl0# não. Atribuir "
+"um endereço IP a ambas as placas de rede não faz muito sentido, a menos que, "
+"durante o procedimento de inicialização, aplicativos precisem acessar "
+"serviços em ambos os segmentos Ethernet."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:144
+msgid ""
+"There is another important thing to know. When running IP over Ethernet, "
+"there are actually two Ethernet protocols in use: one is IP, the other is "
+"ARP. ARP does the conversion of the IP address of a host into its Ethernet "
+"address (MAC layer). To allow the communication between two hosts separated "
+"by the bridge, it is necessary that the bridge will forward ARP packets. "
+"Such protocol is not included in the IP layer, since it exists only with IP "
+"over Ethernet. The FreeBSD firewall filters exclusively on the IP layer and "
+"therefore all non-IP packets (ARP included) will be forwarded without being "
+"filtered, even if the firewall is configured to not permit anything."
+msgstr ""
+"Uma outra coisa importante a se saber é que, ao executar IP sobre Ethernet, "
+"existem na verdade dois protocolos Ethernet em uso: um é o IP e o outro é o "
+"ARP. ARP faz a conversão do endereço IP de um host em seu endereço Ethernet ("
+"camada MAC). Para permitir a comunicação entre dois hosts separados pela "
+"bridge, é necessário que a bridge encaminhe pacotes ARP. Esse protocolo não "
+"está incluído na camada IP, uma vez que ele existe apenas com IP sobre "
+"Ethernet. O firewall do FreeBSD filtra exclusivamente na camada IP e, "
+"portanto, todos os pacotes não-IP (incluindo ARP) serão encaminhados sem "
+"serem filtrados, mesmo se o firewall estiver configurado para não permitir "
+"nada."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:146
+msgid ""
+"Now it is time to reboot the system and use it as before: there will be some "
+"new messages about the bridge and the firewall, but the bridge will not be "
+"activated and the firewall, being in `open` mode, will not avoid any "
+"operations."
+msgstr ""
+"Agora é hora de reiniciar o sistema e usá-lo como antes: haverá algumas "
+"novas mensagens sobre a bridge e o firewall, mas a bridge não será ativada e "
+"o firewall, estando no modo `aberto` , não evitará nenhuma operação."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:148
+msgid ""
+"If there are any problems, you should sort them out now before proceeding."
+msgstr ""
+"Se houver algum problema, você deve resolvê-los agora antes de prosseguir."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:150
+#, no-wrap
+msgid "Enabling the Bridge"
+msgstr "Habilitando a Bridge"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:153
+msgid ""
+"At this point, to enable the bridge, you have to execute the following "
+"commands (having the shrewdness to replace the names of the two network "
+"interfaces [.filename]#fxp0# and [.filename]#xl0# with your own ones):"
+msgstr ""
+"Neste ponto, para habilitar a ponte, você tem que executar os seguintes "
+"comandos (tendo a perspicácia para substituir os nomes das duas interfaces "
+"de rede [.filename]#fxp0# e [.filename]#xl0# with your own ones) com as suas "
+"próprias):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:159
+#, no-wrap
+msgid ""
+"# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0\n"
+"# sysctl net.link.ether.bridge.ipfw=1\n"
+"# sysctl net.link.ether.bridge.enable=1\n"
+msgstr ""
+"# sysctl net.link.ether.bridge.config=fxp0:0,xl0:0\n"
+"# sysctl net.link.ether.bridge.ipfw=1\n"
+"# sysctl net.link.ether.bridge.enable=1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:162
+msgid ""
+"The first row specifies which interfaces should be activated by the bridge, "
+"the second one will enable the firewall on the bridge and finally the third "
+"one will enable the bridge."
+msgstr ""
+"A primeira linha especifica quais interfaces devem ser ativadas pela bridge, "
+"a segunda irá habilitar o firewall na bridge e, finalmente, a terceira irá "
+"habilitar a bridge."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:165
+msgid ""
+"At this point you should be able to insert the machine between two sets of "
+"hosts without compromising any communication abilities between them. If so, "
+"the next step is to add the `net.link.ether.bridge._[blah]_=_[blah]_` "
+"portions of these rows to the [.filename]#/etc/sysctl.conf# file, to have "
+"them execute at startup."
+msgstr ""
+"Neste ponto, você deverá ser capaz de inserir a máquina entre dois conjuntos "
+"de hosts sem comprometer as habilidades de comunicação entre eles. Se sim, o "
+"próximo passo é adicionar as partes `net.link.ether.bridge._[blah]_=_[blah]_`"
+" dessas linhas ao arquivo [.filename]#/etc/sysctl.conf#, para que elas sejam "
+"executadas na inicialização."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:167
+#, no-wrap
+msgid "Configuring The Firewall"
+msgstr "Configurando o Firewall"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:177
+msgid ""
+"Now it is time to create your own file with custom firewall rules, to secure "
+"the inside network. There will be some complication in doing this because "
+"not all of the firewall functionalities are available on bridged packets. "
+"Furthermore, there is a difference between the packets that are in the "
+"process of being forwarded and packets that are being received by the local "
+"machine. In general, incoming packets are run through the firewall only "
+"once, not twice as is normally the case; in fact they are filtered only upon "
+"receipt, so rules that use `out` or `xmit` will never match. Personally, I "
+"use `in via` which is an older syntax, but one that has a sense when you "
+"read it. Another limitation is that you are restricted to use only `pass` "
+"or `drop` commands for packets filtered by a bridge. Sophisticated things "
+"like `divert`, `forward` or `reject` are not available. Such options can "
+"still be used, but only on traffic to or from the bridge machine itself (if "
+"it has an IP address)."
+msgstr ""
+"Agora é hora de criar seu próprio arquivo com regras personalizadas de "
+"firewall, para proteger a rede interna. Haverá alguma complicação em fazer "
+"isso porque nem todas as funcionalidades do firewall estão disponíveis em "
+"pacotes encaminhados através de uma bridge. Além disso, há uma diferença "
+"entre os pacotes que estão em processo de encaminhamento e os pacotes que "
+"estão sendo recebidos pela máquina local. Em geral, os pacotes de entrada "
+"são filtrados apenas uma vez, não duas vezes como normalmente ocorre; de "
+"fato, eles são filtrados apenas no momento do recebimento, portanto, as "
+"regras que usam `out` ou `xmit` nunca darão match. Pessoalmente, eu uso `in "
+"via`, que é uma sintaxe mais antiga, mas que faz sentido quando você lê. "
+"Outra limitação é que você está restrito a usar apenas comandos `pass` ou "
+"`drop` para pacotes filtrados por uma ponte. Coisas sofisticadas como "
+"`divert`, `forward` ou `reject` não estão disponíveis. Tais opções ainda "
+"podem ser usadas, mas apenas no tráfego destinado ou originado na máquina "
+"que atua como bridge em si (se ela tiver um endereço IP)."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:185
+msgid ""
+"New in FreeBSD 4.0, is the concept of stateful filtering. This is a big "
+"improvement for UDP traffic, which typically is a request going out, "
+"followed shortly thereafter by a response with the exact same set of IP "
+"addresses and port numbers (but with source and destination reversed, of "
+"course). For firewalls that have no statekeeping, there is almost no way to "
+"deal with this sort of traffic as a single session. But with a firewall "
+"that can \"remember\" an outgoing UDP packet and, for the next few minutes, "
+"allow a response, handling UDP services is trivial. The following example "
+"shows how to do it. It is possible to do the same thing with TCP packets. "
+"This allows you to avoid some denial of service attacks and other nasty "
+"tricks, but it also typically makes your state table grow quickly in size."
+msgstr ""
+"O conceito de filtragem stateful é novo no FreeBSD 4.0. Esta é uma grande "
+"melhoria para o tráfego UDP, que geralmente é uma solicitação que sai, "
+"seguida logo depois por uma resposta com o mesmo conjunto de endereços IP e "
+"portas (mas com origem e destino invertidos, é claro). Para firewalls que "
+"não têm o controle de estado, quase não há como lidar com esse tipo de "
+"tráfego como uma sessão única. Mas com um firewall que pode \"lembrar\" de "
+"um pacote UDP de saída e, nos próximos minutos, permitir uma resposta, lidar "
+"com serviços UDP é trivial. O exemplo a seguir mostra como fazer isso. É "
+"possível fazer a mesma coisa com pacotes TCP. Isso permite evitar alguns "
+"ataques de negação de serviço e outros truques desagradáveis, mas também faz "
+"com que a tabela de estado cresça rapidamente em tamanho."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:189
+msgid ""
+"Let's look at an example setup. Note first that at the top of [.filename]#/"
+"etc/rc.firewall# there are already standard rules for the loopback interface "
+"[.filename]#lo0#, so we should not have to care for them anymore. Custom "
+"rules should be put in a separate file (say [.filename]#/etc/rc.firewall."
+"local#) and loaded at system startup, by modifying the row of [.filename]#/"
+"etc/rc.conf# where we defined the `open` firewall:"
+msgstr ""
+"Vamos dar uma olhada em um exemplo de configuração. Note primeiro que no "
+"início de [.filename]#/etc/rc.firewall#, já existem regras padrão para a "
+"interface de loopback [.filename]#lo0#, então não precisamos mais nos "
+"preocupar com elas. As regras personalizadas devem ser colocadas em um "
+"arquivo separado (digamos [.filename]#/etc/rc.firewall.local#) e carregadas "
+"na inicialização do sistema, modificando a linha de [.filename]#/etc/rc."
+"conf# onde definimos o firewall `open`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:193
+#, no-wrap
+msgid "firewall_type=\"/etc/rc.firewall.local\"\n"
+msgstr "firewall_type=\"/etc/rc.firewall.local\"\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:198
+msgid ""
+"You have to specify the _full_ path, otherwise it will not be loaded with "
+"the risk to remain isolated from the network."
+msgstr ""
+"Você tem que especificar o _caminho completo_, caso contrário ele não será "
+"carregado com o risco de permanecer isolado da rede."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:201
+msgid ""
+"For our example imagine to have the [.filename]#fxp0# interface connected "
+"towards the outside (Internet) and the [.filename]#xl0# towards the inside "
+"(LAN). The bridge machine has the IP `1.2.3.4` (it is not possible that your "
+"ISP can give you an address quite like this, but for our example it is good)."
+msgstr ""
+"Para o nosso exemplo, imagine ter a interface [.filename]#fxp0# conectada ao "
+"exterior (Internet) e a [.filename]#xl0# ao interior (LAN). A máquina bridge "
+"tem o IP `1.2.3.4` (não é possível que o seu provedor de serviços de "
+"Internet possa lhe fornecer um endereço exatamente como este, mas para o "
+"nosso exemplo é suficiente)."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:206
+#, no-wrap
+msgid ""
+"# Things that we have kept state on before get to go through in a hurry\n"
+"add check-state\n"
+msgstr ""
+"# Things that we have kept state on before get to go through in a hurry\n"
+"add check-state\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:211
+#, no-wrap
+msgid ""
+"# Throw away RFC 1918 networks\n"
+"add drop all from 10.0.0.0/8 to any in via fxp0\n"
+"add drop all from 172.16.0.0/12 to any in via fxp0\n"
+"add drop all from 192.168.0.0/16 to any in via fxp0\n"
+msgstr ""
+"# Throw away RFC 1918 networks\n"
+"add drop all from 10.0.0.0/8 to any in via fxp0\n"
+"add drop all from 172.16.0.0/12 to any in via fxp0\n"
+"add drop all from 192.168.0.0/16 to any in via fxp0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:217
+#, no-wrap
+msgid ""
+"# Allow the bridge machine to say anything it wants\n"
+"# (if the machine is IP-less do not include these rows)\n"
+"add pass tcp from 1.2.3.4 to any setup keep-state\n"
+"add pass udp from 1.2.3.4 to any keep-state\n"
+"add pass ip from 1.2.3.4 to any\n"
+msgstr ""
+"# Allow the bridge machine to say anything it wants\n"
+"# (if the machine is IP-less do not include these rows)\n"
+"add pass tcp from 1.2.3.4 to any setup keep-state\n"
+"add pass udp from 1.2.3.4 to any keep-state\n"
+"add pass ip from 1.2.3.4 to any\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:222
+#, no-wrap
+msgid ""
+"# Allow the inside hosts to say anything they want\n"
+"add pass tcp from any to any in via xl0 setup keep-state\n"
+"add pass udp from any to any in via xl0 keep-state\n"
+"add pass ip from any to any in via xl0\n"
+msgstr ""
+"# Allow the inside hosts to say anything they want\n"
+"add pass tcp from any to any in via xl0 setup keep-state\n"
+"add pass udp from any to any in via xl0 keep-state\n"
+"add pass ip from any to any in via xl0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:234
+#, no-wrap
+msgid ""
+"# TCP section\n"
+"# Allow SSH\n"
+"add pass tcp from any to any 22 in via fxp0 setup keep-state\n"
+"# Allow SMTP only towards the mail server\n"
+"add pass tcp from any to relay 25 in via fxp0 setup keep-state\n"
+"# Allow zone transfers only by the secondary name server [dns2.nic.it]\n"
+"add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state\n"
+"# Pass ident probes. It is better than waiting for them to timeout\n"
+"add pass tcp from any to any 113 in via fxp0 setup keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass tcp from any to any 49152-65535 in via fxp0 setup keep-state\n"
+msgstr ""
+"# TCP section\n"
+"# Allow SSH\n"
+"add pass tcp from any to any 22 in via fxp0 setup keep-state\n"
+"# Allow SMTP only towards the mail server\n"
+"add pass tcp from any to relay 25 in via fxp0 setup keep-state\n"
+"# Allow zone transfers only by the secondary name server [dns2.nic.it]\n"
+"add pass tcp from 193.205.245.8 to ns 53 in via fxp0 setup keep-state\n"
+"# Pass ident probes. It is better than waiting for them to timeout\n"
+"add pass tcp from any to any 113 in via fxp0 setup keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass tcp from any to any 49152-65535 in via fxp0 setup keep-state\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:240
+#, no-wrap
+msgid ""
+"# UDP section\n"
+"# Allow DNS only towards the name server\n"
+"add pass udp from any to ns 53 in via fxp0 keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass udp from any to any 49152-65535 in via fxp0 keep-state\n"
+msgstr ""
+"# UDP section\n"
+"# Allow DNS only towards the name server\n"
+"add pass udp from any to ns 53 in via fxp0 keep-state\n"
+"# Pass the \"quarantine\" range\n"
+"add pass udp from any to any 49152-65535 in via fxp0 keep-state\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:247
+#, no-wrap
+msgid ""
+"# ICMP section\n"
+"# Pass 'ping'\n"
+"add pass icmp from any to any icmptypes 8 keep-state\n"
+"# Pass error messages generated by 'traceroute'\n"
+"add pass icmp from any to any icmptypes 3\n"
+"add pass icmp from any to any icmptypes 11\n"
+msgstr ""
+"# ICMP section\n"
+"# Pass 'ping'\n"
+"add pass icmp from any to any icmptypes 8 keep-state\n"
+"# Pass error messages generated by 'traceroute'\n"
+"add pass icmp from any to any icmptypes 3\n"
+"add pass icmp from any to any icmptypes 11\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:250
+#, no-wrap
+msgid ""
+"# Everything else is suspect\n"
+"add drop log all from any to any\n"
+msgstr ""
+"# Everything else is suspect\n"
+"add drop log all from any to any\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:254
+msgid ""
+"Those of you who have set up firewalls before may notice some things "
+"missing. In particular, there are no anti-spoofing rules, in fact we did "
+"_not_ add:"
+msgstr ""
+"Aqueles que já configuraram firewalls antes podem notar que algumas coisas "
+"estão faltando. Em particular, não há regras anti-spoofing, na verdade, "
+"_não_ adicionamos:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:258
+#, no-wrap
+msgid "add deny all from 1.2.3.4/8 to any in via fxp0\n"
+msgstr "add deny all from 1.2.3.4/8 to any in via fxp0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:264
+msgid ""
+"That is, drop packets that are coming in from the outside claiming to be "
+"from our network. This is something that you would commonly do to be sure "
+"that someone does not try to evade the packet filter, by generating "
+"nefarious packets that look like they are from the inside. The problem with "
+"that is that there is _at least_ one host on the outside interface that you "
+"do not want to ignore: the router. But usually, the ISP anti-spoofs at "
+"their router, so we do not need to bother that much."
+msgstr ""
+"Isso significa descartar pacotes que estão chegando de fora e alegam ser da "
+"nossa rede. Isso é algo que normalmente se faz para garantir que alguém não "
+"tente evadir o filtro de pacotes, gerando pacotes maliciosos que parecem ser "
+"provenientes de dentro da rede. O problema é que há _pelo menos_ um host na "
+"interface externa que você não deseja ignorar: o roteador. Mas geralmente, o "
+"ISP faz o anti-spoofing em seu roteador, então não precisamos nos preocupar "
+"tanto com isso."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:267
+msgid ""
+"The last rule seems to be an exact duplicate of the default rule, that is, "
+"do not let anything pass that is not specifically allowed. But there is a "
+"difference: all suspected traffic will be logged."
+msgstr ""
+"A última regra parece ser uma duplicata exata da regra padrão, ou seja, não "
+"deixa passar nada que não seja especificamente permitido. Mas há uma "
+"diferença: todo tráfego suspeito será registrado."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:273
+msgid ""
+"There are two rules for passing SMTP and DNS traffic towards the mail server "
+"and the name server, if you have them. Obviously the whole rule set should "
+"be flavored to personal taste, this is only a specific example (rule format "
+"is described accurately in the man:ipfw[8] man page). Note that for \"relay"
+"\" and \"ns\" to work, name service lookups must work _before_ the bridge is "
+"enabled. This is an example of making sure that you set the IP on the "
+"correct network card. Alternatively it is possible to specify the IP "
+"address instead of the host name (required if the machine is IP-less)."
+msgstr ""
+"Existem duas regras para permitir o tráfego SMTP e DNS direcionado ao "
+"servidor de e-mail e servidor de nomes, se você tiver esses servidores. "
+"Obviamente, todo o conjunto de regras deve ser personalizado de acordo com "
+"as preferências pessoais, este é apenas um exemplo específico (o formato da "
+"regra é descrito com precisão na página do manual man:ipfw[8]). Observe que, "
+"para o \"relay\" e o \"ns\" funcionarem, as consultas ao serviço de nomes "
+"devem funcionar _antes_ de habilitar a ponte. Isto é um exemplo para "
+"garantir que você configure o IP no cartão de rede correto. "
+"Alternativamente, é possível especificar o endereço IP em vez do nome do "
+"host (obrigatório se a máquina não possuir um IP)."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:278
+msgid ""
+"People that are used to setting up firewalls are probably also used to "
+"either having a `reset` or a `forward` rule for ident packets (TCP port "
+"113). Unfortunately, this is not an applicable option with the bridge, so "
+"the best thing is to simply pass them to their destination. As long as that "
+"destination machine is not running an ident daemon, this is relatively "
+"harmless. The alternative is dropping connections on port 113, which "
+"creates some problems with services like IRC (the ident probe must timeout)."
+msgstr ""
+"Pessoas acostumadas a configurar firewalls provavelmente também estão "
+"acostumadas a ter uma regra de `reset` ou `forward` para pacotes ident "
+"(porta TCP 113). Infelizmente, essa não é uma opção aplicável com a bridge, "
+"então a melhor coisa a fazer é simplesmente passá-los para o destino. "
+"Contanto que a máquina de destino não esteja executando um ident daemon, "
+"isso é relativamente inofensivo. A alternativa é descartar conexões na porta "
+"113, o que cria alguns problemas com serviços como IRC (a sondagem ident "
+"deve expirar)."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:285
+msgid ""
+"The only other thing that is a little weird that you may have noticed is "
+"that there is a rule to let the bridge machine speak, and another for "
+"internal hosts. Remember that this is because the two sets of traffic will "
+"take different paths through the kernel and into the packet filter. The "
+"inside net will go through the bridge, while the local machine will use the "
+"normal IP stack to speak. Thus the two rules to handle the different "
+"cases. The `in via fxp0` rules work for both paths. In general, if you use "
+"`in via` rules throughout the filter, you will need to make an exception for "
+"locally generated packets, because they did not come in via any of our "
+"interfaces."
+msgstr ""
+"A única outra coisa um pouco estranha que você pode ter notado é que há uma "
+"regra para permitir que a máquina da bridge fale, e outra para os hosts "
+"internos. Lembre-se de que isso ocorre porque os dois conjuntos de tráfego "
+"seguirão caminhos diferentes através do kernel e do filtro de pacotes. A "
+"rede interna passará pela ponte, enquanto a máquina local usará o stack de "
+"IP normal para falar. Portando, existem duas regras para lidar com os casos "
+"diferentes. As regras `in via fxp0` funcionam para ambos os caminhos. Em "
+"geral, se você usar regras `in via` em todo o filtro, precisará fazer uma "
+"exceção para pacotes gerados localmente, porque eles não entraram por "
+"nenhuma de nossas interfaces."
+
+#. type: Title ==
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:287
+#, no-wrap
+msgid "Contributors"
+msgstr "Colaboradores"
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:291
+msgid ""
+"Many parts of this article have been taken, updated and adapted from an old "
+"text about bridging, edited by Nick Sayer. A pair of inspirations are due "
+"to an introduction on bridging by Steve Peterson."
+msgstr ""
+"Muitas partes deste artigo foram retiradas, atualizadas e adaptadas de um "
+"antigo texto sobre bridges, editado por Nick Sayer. E um par de inspirações "
+"vieram de uma introdução sobre bridges de autoria de Steve Peterson."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:293
+msgid ""
+"A big thanks to Luigi Rizzo for the implementation of the bridge code in "
+"FreeBSD and for the time he has dedicated to me answering all of my related "
+"questions."
+msgstr ""
+"Um grande obrigado ao Luigi Rizzo pela implementação do código de ponte "
+"(bridge) no FreeBSD e pelo tempo que ele dedicou a mim respondendo a todas "
+"as minhas perguntas relacionadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/filtering-bridges/_index.adoc:294
+msgid ""
+"A thanks goes out also to Tom Rhodes who looked over my job of translation "
+"from Italian (the original language of this article) into English."
+msgstr ""
+"Agradeço também a Tom Rhodes, que olhou para o meu trabalho de tradução do "
+"italiano (a língua original deste artigo) para o inglês."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/fonts/_index.adoc b/documentation/content/pt-br/articles/fonts/_index.adoc
index 64095c3bbe..d15ac65a85 100644
--- a/documentation/content/pt-br/articles/fonts/_index.adoc
+++ b/documentation/content/pt-br/articles/fonts/_index.adoc
@@ -1,10 +1,12 @@
---
-title: Fontes e FreeBSD
-subtitle: Um Tutorial
authors:
- - author: Dave Bodenstab
+ -
+ author: 'Dave Bodenstab'
email: imdave@synet.net
-releaseinfo: "$FreeBSD$"
+description: 'Uma descrição das diversas tecnologias de fontes no FreeBSD e como usá-las com diferentes programas'
+subtitle: 'A Tutorial'
+tags: ["Fonts", "syscons", "X11", "Ghostscript", "Groff", "guide", "tutorial", "FreeBSD"]
+title: 'Fontes e FreeBSD'
trademarks: ["freebsd", "adobe", "apple", "linux", "microsoft", "opengroup", "general"]
---
@@ -17,18 +19,32 @@ trademarks: ["freebsd", "adobe", "apple", "linux", "microsoft", "opengroup", "ge
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/fonts/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Este documento contém a descrição de vários arquivos de fontes que podem ser usados no FreeBSD e no driver do console do sistema, X11, Ghostscript e Groff. Manuais passo-a-passo são fornecidos para alterar a exibição do console do sistema para o modo 80x60, e para usar fontes tipo 1 com os aplicativos acima.
+Este documento contém uma descrição dos vários arquivos de fontes que podem ser usados com o FreeBSD e o driver syscons, X11, Ghostscript e Groff. Exemplos de receitas são fornecidos para alternar o display syscons para o modo 80x60 e para usar fontes type 1 com os programas de aplicativos mencionados acima.
'''
@@ -37,21 +53,21 @@ toc::[]
[[intro]]
== Introdução
-Existem muitas origens de fontes disponíveis, e alguém pode questionar como elas podem ser utilizadas no FreeBSD. A resposta pode ser encontrada numa busca cuidadosa na documentação do componente onde você gostaria de utilizar a mesma. Isto pode consumir um bom tempo, portanto esse tutorial é uma tentativa de fornecer um atalho para outros que possam estar interessados.
+Existem muitas fontes disponíveis e alguém pode perguntar como usá-las com o FreeBSD. A resposta pode ser encontrada pesquisando cuidadosamente a documentação do componente que deseja utilizar. Isso pode ser muito demorado, portanto, este tutorial é uma tentativa de fornecer um atalho para outras pessoas interessadas.
[[terminology]]
== Terminologia Básica
-Existem muitos formatos diferentes de fontes e sufixos de arquivos de fontes associados. Alguns deles serão abordados aqui:
+Existem muitos formatos diferentes de fontes e sufixos de arquivos de fontes associados. Alguns que serão abordados aqui são:
[.filename]#.pfa#, [.filename]#.pfb#::
-PostScript(R) fonte tipo 1. O [.filename]#.pfa# é o formato __A__scii e o [.filename]#.pfb# é o formato __B__inário .
+Fontes PostScript(R) type 1. O arquivo [.filename]#.pfa# é a forma __A__scii e o arquivo [.filename]#.pfb# é a forma __B__inária.
[.filename]#.afm#::
-As métricas da fonte associado com a fonte tipo 1.
+As métricas da fonte associado com a fonte type 1.
[.filename]#.pfm#::
-As métricas da fonte para impressora associadas com a fonte tipo 1.
+As métricas da fonte para impressora associadas com a fonte type 1.
[.filename]#.ttf#::
Uma fonte TrueType(R)
@@ -60,14 +76,14 @@ Uma fonte TrueType(R)
Uma referência indireta para uma fonte TrueType (não é realmente uma fonte)
[.filename]#.fon#, [.filename]#.fnt#::
-Fontes de tela bitmap
+Fontes de tela bitmapped
-O arquivo [.filename]#.fot# é usado pelo Windows(R) como um tipo de link simbólico para o arquivo de fonte TrueType(R) ([.filename]#.ttf#). Os arquivos de fonte [.filename]#.fon# também são utilizados no Windows. Eu desconheço uma maneira de utilizar essa fonte no FreeBSD.
+O arquivo [.filename]#.fot# é usado pelo Windows(R) como um tipo de link simbólico para o arquivo de fonte TrueType(R) real ([.filename]#.ttf#). Os arquivos de fonte [.filename]#.fon# também são usados pelo Windows. Não conheço uma maneira de usar esse formato de fonte no FreeBSD.
[[font-formats]]
== Quais Formatos de Fonte eu Posso Utilizar?
-Qual formato de arquivo de fonte é útil depende do aplicativo que está sendo usado. O FreeBSD por si só, não usa fontes. Aplicativos e/ou drivers podem fazer uso de arquivos de fontes. Aqui tem uma pequena referência cruzada de aplicação/driver para os sufixos de tipo de fonte:
+O formato de arquivo de fonte mais adequado depende do aplicativo utilizado. O FreeBSD por si só não utiliza fontes. Programas de aplicativos e/ou drivers podem fazer uso dos arquivos de fonte. Aqui está uma pequena referência cruzada de aplicativos/drivers para os sufixos de tipo de fonte:
Driver::
@@ -77,7 +93,7 @@ vt:::
syscons:::
[.filename]#.fnt#
-Aplicativo::
+Aplicação::
Ghostscript:::
[.filename]#.pfa#, [.filename]#.pfb#, [.filename]#.ttf#
@@ -91,28 +107,28 @@ Groff:::
Povray:::
[.filename]#.ttf#
-O sufixo [.filename]#.fnt# é frequentemente utilizado. Suspeito que, sempre que alguém quisesse criar um arquivo de fonte especializado para seu aplicativo, na maioria das vezes eles escolhiam esse sufixo. Então, é provável que os arquivos com esse sufixo não tenham o mesmo formato; Especificamente, os arquivos [.filename]#.fnt# usados pelo console do sistema do FreeBSD pode não ser do mesmo formato que o arquivo [.filename]#.fnt# encontrado no ambiente MS-DOS(R)/Windows(R). Não fiz nenhuma tentativa de utilizar outro arquivo [.filename]#.fnt# senão aquele fornecido com o FreeBSD.
+O sufixo [.filename]#.fnt# é bastante utilizado. Eu suspeito que sempre que alguém quisesse criar um arquivo de fonte especializado para seu aplicativo, na maioria das vezes escolhia esse sufixo. Portanto, é provável que os arquivos com esse sufixo não sejam todos do mesmo formato; especificamente, os arquivos [.filename]#.fnt# usados pelo syscons no FreeBSD podem não ser do mesmo formato que um [.filename]#.fnt# encontrado no ambiente MS-DOS(R)/Windows(R). Não fiz nenhuma tentativa de usar outros arquivos [.filename]#.fnt# além daqueles fornecidos com o FreeBSD.
[[virtual-console]]
== Configurando um Console Virtual para o Modo de Linhas 80x60
-Primeiro, uma fonte 8x8 deve ser carregada. Para fazer isso, [.filename]#/etc/rc.conf# deve conter a linha (altere o nome da fonte para uma apropriada para a sua região):
+Primeiramente, uma fonte 8x8 deve ser carregada. Para isso, o arquivo [.filename]#/etc/rc.conf# deve conter a linha (mude o nome da fonte para um apropriado para sua localização):
[.programlisting]
....
-font8x8="iso-8x8" # font 8x8 from /usr/shared/syscons/fonts/* (or NO).
+font8x8="iso-8x8" # font 8x8 from /usr/share/syscons/fonts/* (or NO).
....
-O comando para alterar o modo é man:vidcontrol[1]:
+O comando para realmente mudar o modo é man:vidcontrol[1]:
-[source,shell]
+[source, shell]
....
% vidcontrol VGA_80x60
....
-Vários programas orientados à tela, como o man:vi[1], devem ser capazes de determinar a dimensão corrente da tela. Como isto é conseguido através de uma chamada do `ioctl` para o driver do console (tal como o man:syscons[4]) ele irá determinar corretamente as dimensões da nova tela.
+Vários programas orientados a tela, como man:vi[1], devem ser capazes de determinar as dimensões atuais da tela. Como isso é alcançado por meio de chamadas `ioctl` para o driver do console (como man:syscons[4]), eles determinarão corretamente as novas dimensões da tela.
-Para fazer isso de uma maneira mais integrada, é possível incluir esses comandos nos scripts de inicialização de modo que ocorra quando o sistema for iniciado. Para fazer isso basta adicionar essa linha no [.filename]#/etc/rc.conf#
+Para tornar isso mais contínuo, é possível incorporar esses comandos nos scripts de inicialização para que ocorram durante a inicialização do sistema. Para fazer isso, adicione esta linha ao arquivo [.filename]#/etc/rc.conf#.
[.programlisting]
....
@@ -122,29 +138,31 @@ allscreens_flags="VGA_80x60" # Set this vidcontrol mode for all virtual screens
Referências: man:rc.conf[5], man:vidcontrol[1].
[[type1-fonts-x11]]
-== Usando Fontes Type 1 com X11
+== Usando fontes Type 1 com o X11
-O X11 pode tanto usar o formato [.filename]#.pfa# quanto o formato [.filename]#.pfb# de fonte. As fontes do X11 estão localizadas em vários subdiretórios abaixo do [.filename]#/usr/X11R6/lib/X11/fonts#. Cada arquivo de fonte é uma referência cruzada do seu nome X11 com o conteúdo dos arquivos [.filename]#fonts.dir# em cada diretório.
+O X11 pode usar fontes em formato [.filename]#.pfa# ou [.filename]#.pfb#. As fontes X11 estão localizadas em vários subdiretórios em [.filename]#/usr/X11R6/lib/X11/fonts#. Cada arquivo de fonte é cruzado com seu nome X11 pelos conteúdos de [.filename]#fonts.dir# em cada diretório.
-Já existe um diretório chamado [.filename]#Type1#. A forma mais direta de adicionar uma nova fonte é colocá-la nesse diretório. Uma forma melhor seria colocar todas as novas fontes num diretório separado e usar um link simbólico para as fontes adicionais. Isso permite identificar as fontes sem confundir com aquelas que são originalmente fornecidas. Por exemplo:
+Já existe um diretório chamado [.filename]#Type1#. A maneira mais direta de adicionar uma nova fonte é colocá-la neste diretório. Uma maneira melhor é manter todas as novas fontes em um diretório separado e usar um link simbólico para a fonte adicional. Isso permite que você mantenha um controle mais fácil das suas fontes sem confundir com as fontes fornecidas originalmente. Por exemplo:
-[source,shell]
+[source, shell]
....
-Cria um diretório para armazenar os arquivos de fonte
-% mkdir -p /usr/local/shared/fonts/type1
-% cd /usr/local/shared/fonts/type1
+Crie um diretório para conter os arquivos de fonte
+% mkdir -p /usr/local/share/fonts/type1
+% cd /usr/local/share/fonts/type1
-Coloque os arquivos .pfa, .pfb and .afm aqui
-Pode-se querer manter os arquivos readme, e outras documentações
-para as fontes aqui
+Coloque aqui os arquivos .pfa, .pfb e .afm
+
+Pode ser desejável manter arquivos readme e outras documentações
+
+para as fontes aqui também
% cp /cdrom/fonts/atm/showboat/showboat.pfb .
% cp /cdrom/fonts/atm/showboat/showboat.afm .
-Mantenha um índice para a referência cruzada das fontes
+Mantenha um índice para cruzar as fontes de referência.
% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX
....
-Agora, para usar a nova fonte com o X11, deve-se tornar os arquivos de fonte disponíveis e atualizados. Os nomes de fontes do X11 se parecem com:
+Agora, para usar uma nova fonte com o X11, é necessário tornar o arquivo de fonte disponível e atualizar os arquivos de nome de fonte. Os nomes das fontes X11 se parecem com:
[.programlisting]
....
@@ -161,9 +179,9 @@ Agora, para usar a nova fonte com o X11, deve-se tornar os arquivos de fonte dis
foundry family weight slant width additional style
....
-Um novo nome precisa ser criado para cada nova fonte. Se você possui alguma informação na documentação que acompanha a fonte, então isso pode servir de base para a criação do nome. Se não há informação, então você pode ter alguma idéia usando man:strings[1] no arquivo da fonte. Por exemplo:
+Um novo nome precisa ser criado para cada nova fonte. Se você tiver alguma informação da documentação que acompanha a fonte, ela pode servir como base para criar o nome. Se não houver informações disponíveis, você pode ter uma ideia usando o comando man:strings[1] no arquivo de fonte. Por exemplo:
-[source,shell]
+[source, shell]
....
% strings showboat.pfb | more
%!FontType1-1.0: Showboat 001.001
@@ -194,7 +212,7 @@ end readonly def
Usando essas informações, um possível nome poderia ser:
-[source,shell]
+[source, shell]
....
-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
....
@@ -202,44 +220,45 @@ Usando essas informações, um possível nome poderia ser:
Os componentes do nosso nome são:
Companhia::
-Vamos nomear todas as novas fontes como `type1`.
+Vamos apenas nomear todas as novas fontes como `type1`.
Família::
-O nome da fonte
+O nome da fonte.
Densidade::
-Normal, negrito, média, semi-negrito, etc. Pelas informações acima do man:strings[1], essa fonte aparenta ter uma densidade __média__.
+Normal, negrito (bold), médio (medium), seminegrito (semibold), etc. Pelos resultados do comando man:strings[1] mostrados acima, parece que esta fonte tem um peso __médio__ (medium).
Inclinação::
-__r__oman, __i__tálico, __o__blíquo, etc. Como o _Ângulo Itálico_ é zero, o _roman_ será utilizado.
+__r__omano (roman), __i__talico (italic), __o__blíquo (oblique), etc. Já que o ângulo de itálico (_ItalicAngle_) é zero, será usada a versão romana (_roman_).
Largura::
-Normal, ampla, condensada, estendida, etc. Até que possa ser examinada, supomos que será __normal__.
+Normal, ampla (wide), condensada (condensed), estendida (extended), etc. Até que possa ser examinada, a suposição será de que a fonte é __normal__.
Estilo Adicional::
Frequentemente omitido, mas isso indicará que a fonte possui letras maiúsculas decorativas.
Espaçamento::
-proporcional ou monoespaçada. A opção _Poporcional_ é usada quando o _isFixedPitch_ é falso.
+Proporcional (proportional) ou espaçamento fixo (monospaced). Será usada a versão _proporcional_, já que o valor de _isFixedPitch_ é falso.
-Todos esses nomes são arbitrários, mas deve-se tentar ser compatível com as convenções existentes. A fonte é referenciada pelo nome com possíveis curingas pelo programa X11, então o nome escolhido tem que fazer algum sentido. Pode-se começar simplesmente usando
+Todos esses nomes são arbitrários, mas deve-se procurar ser compatível com as convenções existentes. Uma fonte é referenciada pelo nome, com possíveis curingas (wildcards) por um programa X11, então o nome escolhido deve fazer algum sentido. Pode-se começar simplesmente usando
-[source,shell]
+[source, shell]
....
-…-normal-r-normal-…-p-…
+...-normal-r-normal-...-p-...
....
-como o nome, e então usar man:xfontsel[1] para examiná-lo e ajustar o nome com base na aparência da fonte.
+esse nome, e depois usar o comando man:xfontsel[1] para examiná-lo e ajustar o nome com base na aparência da fonte.
Então, para completar nosso exemplo:
-[source,shell]
+[source, shell]
....
-Torne a fonte acessível para o X11
+Torne a fonte acessível ao X11.
% cd /usr/X11R6/lib/X11/fonts/Type1
-% ln -s /usr/local/shared/fonts/type1/showboat.pfb .
+% ln -s /usr/local/share/fonts/type1/showboat.pfb .
-Edite os arquivos fonts.dir e fonts.scale, adicionando a linha que descreve a fonte e incremente o número de fontes que são encontradas na primeira linha.
+Edite o arquivo fonts.dir e fonts.scale, adicionando a linha que descreve a fonte
+e incrementando o número de fontes que é encontrado na primeira linha.
% ex fonts.dir
:1p
25
@@ -251,10 +270,10 @@ showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1
.
:wq
-fonts.scale aparenta ser idêntico ao fonts.dir…
+O arquivo fonts.scale parece ser idêntico ao fonts.dir...
% cp fonts.dir fonts.scale
-Informe ao X11 que arquivos foram alterados
+Informe ao X11 que as coisas mudaram.
% xset fp rehash
Examine a nova fonte
@@ -266,32 +285,32 @@ Referências: man:xfontsel[1], man:xset[1], The X Windows System in a Nutshell,
[[type1-fonts-ghostscript]]
== Usando Fontes Type 1 com Ghostscript
-O Ghostscript referencia uma fonte via seu arquivo de [.filename]#Fontmap#. Este deve ser modificado de uma maneira similar a feita para o arquivo [.filename]#fonts.dir# do X11. O Ghostscript pode usar tanto o formato [.filename]#.pfa# quanto o [.filename]#.pfb#. Usando a fonte do exemplo anterior, segue um passo a passo de como utilizá-la com o Ghostscript:
+O Ghostscript referencia uma fonte por meio de seu arquivo [.filename]#Fontmap#. Este arquivo deve ser modificado de maneira semelhante ao arquivo [.filename]#fonts.dir# do X11. O Ghostscript pode usar fontes em formato [.filename]#.pfa# ou [.filename]#.pfb#. Usando a fonte do exemplo anterior, aqui está como usá-la com o Ghostscript:
-[source,shell]
+[source, shell]
....
-Coloque a fonte no diretório do Ghostscript
-% cd /usr/local/shared/ghostscript/fonts
-% ln -s /usr/local/shared/fonts/type1/showboat.pfb .
+Coloque a fonte no diretório de fontes do Ghostscript.
+% cd /usr/local/share/ghostscript/fonts
+% ln -s /usr/local/share/fonts/type1/showboat.pfb .
-Edite o mapeamento de fontes, assim o Ghostscript saberá sobre a fonte
-% cd /usr/local/shared/ghostscript/4.01
+Edite o arquivo Fontmap para que o Ghostscript saiba sobre a fonte
+% cd /usr/local/share/ghostscript/4.01
% ex Fontmap
:$a
/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat
.
:wq
-Use o Ghostscript para checar a fonte
+Use o Ghostscript para examinar a fonte.
% gs prfont.ps
Aladdin Ghostscript 4.01 (1996-7-10)
Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights
reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
-Loading Times-Roman font from /usr/local/shared/ghostscript/fonts/tir_____.pfb...
+Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb...
/1899520 581354 1300084 13826 0 done.
GS>Showboat DoFont
-Loading Showboat font from /usr/local/shared/ghostscript/fonts/showboat.pfb...
+Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb...
1939688 565415 1300084 16901 0 done.
>>showpage, press <return> to continue<<
>>showpage, press <return> to continue<<
@@ -299,16 +318,16 @@ Loading Showboat font from /usr/local/shared/ghostscript/fonts/showboat.pfb...
GS>quit
....
-Referências: Veja o arquivo [.filename]#fonts.txt# na distribuição do Ghostscript 4.01
+Referências: arquivo [.filename]#fonts.txt# na distribuição do Ghostscript 4.01
[[type1-fonts-groff]]
-== Usando Fontes Type 1 com Groff
+== Usando Fontes Type 1 com o Groff
-Agora que a nova fonte pode ser utilizada tanto pelo X11 quanto pelo Ghostscript, como podemos utilizar a nova fonte com o Groff? Primeiro de tudo, como estamos usando fontes Type 1 PostScript(R), o dispositivo Groff que é aplicável é o device __ps__. Um arquivo de fonte deve ser criado para cada fonte que o Groff possa usar. Um nome de fonte Groff é apenas um arquivo no [.filename]#/usr/shared/groff_font/devps#. Com o nosso exemplo, o arquivo da fonte poderia ser [.filename]#/usr/shared/groff_font/devps/SHOWBOAT#. O arquivo deve ser criado usando ferramentas providas pelo Groff.
+Agora que a nova fonte pode ser usada tanto pelo X11 quanto pelo Ghostscript, como se pode usá-la com o groff? Em primeiro lugar, uma vez que estamos lidando com fontes PostScript(R) type 1, o dispositivo groff que é aplicável é o dispositivo _ps_. Um arquivo de fonte deve ser criado para cada fonte que o groff possa usar. Um nome de fonte groff é apenas um arquivo em [.filename]#/usr/share/groff_font/devps#. Em nosso exemplo, o arquivo de fonte poderia ser [.filename]#/usr/share/groff_font/devps/SHOWBOAT#. O arquivo deve ser criado usando ferramentas fornecidas pelo groff.
-A primeira ferramenta é o `afmtodit`. Ela normalmente não está instalada, então deve ser baixada de uma fonte de distribuição. Eu percebi que teria que mudar a primeira linha do arquivo, então eu fiz:
+A primeira ferramenta é `afmtodit`. Ela não costuma ser instalada por padrão, então é necessário obtê-la da distribuição de origem. Descobri que precisei alterar a primeira linha do arquivo, então fiz o seguinte:
-[source,shell]
+[source, shell]
....
% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp
% ex /tmp/afmtodit.pl
@@ -318,42 +337,39 @@ A primeira ferramenta é o `afmtodit`. Ela normalmente não está instalada, ent
:wq
....
-Essa ferramenta irá criar o arquivo de fontes do Groff a partir dos arquivos de métrica ([.filename]#.afm# suffix.) Continuando com nosso exemplo:
+Essa ferramenta criará o arquivo de fonte do groff a partir do arquivo de métricas (sufixo [.filename]#.afm#). Continuando com nosso exemplo:
-[source,shell]
+[source, shell]
....
-Muitos arquivos .afm estão no formato do Mac, com ^M delimitando as linhas
-Nós temos que convertê-los para o estilo UNIX que delimita as linhas com ^J
+Muitos arquivos .afm estão no formato Mac, com linhas delimitadas por ^M.
+É necessário convertê-los para o estilo UNIX(R), com linhas delimitadas por ^J.
% cd /tmp
-% cat /usr/local/shared/fonts/type1/showboat.afm |
+% cat /usr/local/share/fonts/type1/showboat.afm |
tr '\015' '\012' >showboat.afm
-Agora crie um arquivo de fonte groff
-% cd /usr/shared/groff_font/devps
+Agora crie o arquivo de fonte do groff.
+% cd /usr/share/groff_font/devps
% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT
....
A fonte agora pode ser referenciada pelo nome SHOWBOAT.
-Se o Ghostscript é utilizado para impressão com driver simulado no sistema, então não precisa fazer mais nada. Entretanto, se as impressoras usam PostScript(R) real, então a fonte deve ser baixada pela impressora de maneira que a fonte a ser utilizada (a menos que a impressora tenha a fonte showboat embutida ou acessível a partir de um disco de fontes.) O passo final é criar uma fonte descarregável. A ferramenta `pfbtops` é usada para criar o formato [.filename]#.pfa# da fonte, e o arquivo para [.filename]#download# é modificado para referenciar a nova fonte. O arquivo para [.filename]#download# deve referenciar o nome interno da fonte. Isso pode ser facilmente determinado de um arquivo de fonte groff conforme demonstrado:
+Se o Ghostscript for usado para controlar as impressoras no sistema, então nada mais precisa ser feito. No entanto, se forem usadas impressoras PostScript(R) reais, a fonte deve ser baixada para a impressora para que a fonte seja usada (a menos que a impressora tenha a fonte showboat incorporada ou em um disco de fonte acessível). O último passo é criar uma fonte transferível. A ferramenta `pfbtops` é usada para criar o formato [.filename]#.pfa# da fonte, e o arquivo [.filename]#download# é modificado para referenciar a nova fonte. O arquivo [.filename]#download# deve fazer referência ao nome interno da fonte. Isso pode ser facilmente determinado a partir do arquivo de fonte do groff, como ilustrado:
-[source,shell]
+[source, shell]
....
-Criando o arquivo de fonte .pfa
-
-% pfbtops /usr/local/shared/fonts/type1/showboat.pfb >showboat.pfa
+Crie o arquivo de fonte .pfa.
+% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa
....
-Claro que, se o arquivo [.filename]#.pfa# já existe, apenas crie um link simbólico para referenciá-lo.
+Claro, se o arquivo [.filename]#.pfa# já estiver disponível, basta usar um link simbólico para fazer referência a ele.
-[source,shell]
+[source, shell]
....
-Obtendo o nome interno da fonte
-
+Obtenha o nome interno da fonte
% fgrep internalname SHOWBOAT
internalname Showboat
-Dizendo ao groff que tem que fazer o download da fonte
-
+Informe ao groff que a fonte deve ser baixada.
% ex download
:$a
Showboat showboat.pfa
@@ -363,14 +379,13 @@ Showboat showboat.pfa
Para testar a fonte:
-[source,shell]
+[source, shell]
....
% cd /tmp
-
-% cat >example.t <<EOF
+% cat >exemplo.t <<EOF
.sp 5
.ps 16
-This is an example of the Showboat font:
+Este é um exemplo da fonte Showboat:
.br
.ps 48
.vs (\n(.s+2)p
@@ -386,33 +401,32 @@ STUVWXYZ
.vs (\n(.s+2)p
.fp 5 SHOWBOAT
.ft R
-To use it for the first letter of a paragraph, it will look like:
+Para usá-lo como a primeira letra de um parágrafo, ficará assim:
.sp 50p
-\s(48\f5H\s0\fRere is the first sentence of a paragraph that uses the
-showboat font as its first letter.
-Additional vertical space must be used to allow room for the larger
-letter.
+\s(48\f5H\s0\fRqui está a primeira frase de um parágrafo que usa a
+fonte showboat como a primeira letra.
+Deve-se usar espaço vertical adicional para permitir espaço para a letra maior.
EOF
-% groff -Tps example.t >example.ps
+% groff -Tps example.t > exemplo.ps
-Para usar ghostscript/ghostview
+Para usar o ghostscript/ghostview
% ghostview example.ps
-Para imprimí-la
+Para imprimir:
% lpr -Ppostscript example.ps
....
Referências: [.filename]#/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man#, man:groff_font[5], man:groff_char[7], man:pfbtops[1].
[[convert-truetype]]
-== Convertendo Fontes TrueType para um Formato groff/PostScript Para o Groff
+== Convertendo Fontes TrueType para um Formato groff/PostScript para o Groff
-Isso potencialmente requer um pouco de trabalho, simplesmente porque depende de alguns utilitários que não são instalados como parte do sistema base. Eles são:
+Isso pode requerer um pouco de trabalho, simplesmente porque depende de algumas ferramentas que não são instaladas como parte do sistema base. Elas são:
`ttf2pf`::
-Utilitário de conversão TrueType para PostScript. Ee permite a conversão de uma fonte TrueType em um arquivo de métrica de fonte ascii ([.filename]#.afm#).
+Utilitários de conversão de TrueType para PostScript. Isso permite a conversão de uma fonte TrueType para um arquivo de métricas de fonte ascii ([.filename]#.afm#).
+
-Atualmente disponível em http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. Nota: Esses arquivos são programas PostScript e devem ser baixados para o disco mantendo pressionada a tecla kbd:[ Shift ] ao clicar no link. Caso contrário, seu navegador pode tentar iniciar o ghostview para visualizá-los.
+Disponível atualmente em http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. Observe: esses arquivos são programas PostScript e devem ser baixados para o disco mantendo pressionada a tecla kbd:[Shift] ao clicar no link. Caso contrário, o seu navegador pode tentar abrir o ghostview para visualizá-los.
+
Os arquivos de interesse são:
@@ -420,41 +434,41 @@ Os arquivos de interesse são:
** [.filename]#PF2AFM.PS#
** [.filename]#ttf2pf.ps#
+
-O caso engraçado sobre maiúsculas/minúsculas é devido ao fato de serem destinados também para os terminais DOS. O [.filename]#ttf2pf.ps# faz uso dos outros como maiúsculos, portanto, qualquer renomeação deve ser consistente com isso. (Na verdade, [.filename]#GS_TTF.PS# e [.filename]#PFS2AFM.PS# são supostamente parte da distribuição Ghostscript, mas é muito fácil usá-los como utilitários isolados. O FreeBSD parece não incluir o último.) Você também pode querer instalá-los em [.filename]#/usr/local/shared/groff_font/devps# (?).
+A utilização de letras maiúsculas e minúsculas engraçadas deve-se ao fato de serem destinadas também para shells do DOS. O arquivo [.filename]#ttf2pf.ps# faz uso dos outros em letras maiúsculas, então qualquer renomeação deve ser consistente com isso. (Na verdade, os arquivos [.filename]#GS_TTF.PS# e [.filename]#PFS2AFM.PS# supostamente fazem parte da distribuição do Ghostscript, mas é fácil usá-los como uma fonte isolada. O FreeBSD não parece incluir o último.) Você também pode querer tê-los instalados em [.filename]#/usr/local/share/groff_font/devps#(?).
`afmtodit`::
-Cria arquivos de fontes para uso com o Groff a partir do arquivo de métricas de fonte ascii. Isso geralmente fica no diretório [.filename]#/usr/src/contrib/groff/afmtodit# e requer algum trabalho para prosseguir.
+A ferramenta `afmtodit` é utilizada para criar arquivos de fonte para o groff a partir de um arquivo métrico de fonte em formato ASCII ([.filename]#.afm#). Normalmente, essa ferramenta está localizada no diretório [.filename]#/usr/src/contrib/groff/afmtodit#, mas normalmente exige alguma configuração para funcionar corretamente.
+
[NOTE]
====
-Se você é paranóico sobre o trabalhar no diretório [.filename]#/usr/src#, simplesmente copie o conteúdo do diretório acima para um local de trabalho.
+Se você está preocupado com a segurança de trabalhar no diretório [.filename]#/usr/src#, basta copiar o conteúdo do diretório acima para uma localização de trabalho.
====
+
Na área de trabalho, você precisará compilar o utilitário. Apenas digite:
+
-[source,shell]
+[source, shell]
....
# make -f Makefile.sub afmtodit
....
+
-Você também pode precisar copiar o [.filename]#/usr/contrib/groff/devps/generate/textmap# para [.filename]#/usr/shared/groff_font/devps/generate# se ele ainda não existir.
+Você também pode precisar copiar o arquivo [.filename]#/usr/contrib/groff/devps/generate/textmap# para [.filename]#/usr/share/groff_font/devps/generate# se ele ainda não existir.
Depois que todos esses utilitários estiverem no lugar, você está pronto para começar:
. Crie o arquivo [.filename]#.afm# digitando:
+
-[source,shell]
+[source, shell]
....
% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name
....
-+
-Onde, _TTF_name_ é o seu arquivo de fonte TrueType, _PS_font_name_ é o nome do arquivo [.filename]#.pfa#, _AFM_name_ é o nome que você deseja para o arquivo [.filename]#.afm#. Se você não especificar nomes de arquivos de saída para os arquivos [.filename]#.pfa# ou [.filename]#.afm#, os nomes padrão serão gerados a partir do nome do arquivo de fonte TrueType.
-+
-Isso também produz um arquivo [.filename]#.pfa#, o arquivo ascii de métricas de fonte PostScript ([.filename]#.pfb# é para o formato binário). Isso não será necessário, mas poderia (eu acho) ser útil para um fontserver.
-+
++
+Onde _TTF_nome_ é o nome do arquivo da sua fonte TrueType, _nome_fonte_PS_ é o nome do arquivo para [.filename]#.pfa#, _nome_AFM_ é o nome desejado para [.filename]#.afm#. Se você não especificar os nomes de arquivo de saída para os arquivos [.filename]#.pfa# ou [.filename]#.afm#, então nomes padrão serão gerados a partir do nome do arquivo da fonte TrueType.
++
+Isso também produz um arquivo [.filename]#.pfa#, o arquivo de métricas de fonte PostScript em formato ASCII ([.filename]#.pfb# é para a forma binária). Isso não será necessário, mas poderia (eu acredito) ser útil para um servidor de fontes.
++
Por exemplo, para converter a fonte de código de barras 30f9 usando o nome de arquivo padrão, use o seguinte comando:
+
-[source,shell]
+[source, shell]
....
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf
Aladdin Ghostscript 5.10 (1997-11-23)
@@ -462,10 +476,10 @@ Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
This software comes with NO WARRANTY: see the file PUBLIC for details.
Converting 3of9.ttf to 3of9.pfa and 3of9.afm.
....
-+
-Se você quiser que as fontes convertidas sejam armazenadas em [.filename]#A.pfa# e [.filename]#B.afm#, use este comando:
+
-[source,shell]
+Se você quer que as fontes convertidas sejam armazenadas em [.filename]#A.pfa# e [.filename]#B.afm#, use o seguinte comando:
++
+[source, shell]
....
% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B
Aladdin Ghostscript 5.10 (1997-11-23)
@@ -474,50 +488,50 @@ This software comes with NO WARRANTY: see the file PUBLIC for details.
Converting 3of9.ttf to A.pfa and B.afm.
....
-. Crie o arquivo PostScript Groff:
-+
-Vá para o diretório [.filename]#/usr/shared/groff_font/devps# para facilitar a execução do comando abaixo. Você provavelmente precisará de privilégios de root para isso. (Ou, se você é paranoico sobre trabalhar lá, certifique-se de referenciar os arquivos [.filename]#DESC#, [.filename]#text.enc# e [.filename]#generate/textmap# como estando neste diretório.)
+. Crie o arquivo groff PostScript:
++
+Acesse o diretório `/usr/share/groff_font/devps` para facilitar a execução do seguinte comando. É provável que você precise de privilégios de root para executá-lo. (Ou, se você é paranoico em relação a trabalhar lá, certifique-se de que os arquivos `DESC`, `text.enc` e `generate/textmap` estejam localizados neste diretório.)
+
-[source,shell]
+[source, shell]
....
% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name
....
-+
-Onde, [.filename]#file.afm# é o _AFM_name_ criado pelo `ttf2pf.ps` acima e _PS_font_name_ é o nome da fonte usada a partir desse comando, bem como o nome que man:groff[1] usará para referências a essa fonte. Por exemplo, supondo que você usou o primeiro comando `tiff2pf.ps` acima, a fonte 3of9 Barcode pode ser criada usando o comando:
+
-[source,shell]
+Onde, [.filename]#file.afm# é o _AFM_name_ criado pelo `ttf2pf.ps` acima, e _PS_font_name_ é o nome da fonte usado no comando anterior, bem como o nome que man:groff[1] usará para referenciar essa fonte. Por exemplo, assumindo que você usou o primeiro `tiff2pf.ps` acima, a fonte Barcode 3of9 pode ser criada usando o comando:
++
+[source, shell]
....
% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9
....
-+
-Assegure-se de que o arquivo _PS_font_name_ resultante (por exemplo, [.filename]#3of9# no exemplo acima) esteja localizado no diretório [.filename]#/usr/shared/groff_font/devps# copiando-o ou movendo-o para lá.
-+
-Note que se o [.filename]#ttf2pf.ps# atribuir um nome de fonte usando o nome que ele encontrou no arquivo de fonte TrueType e você quiser usar um nome diferente, você deverá editar o arquivo [.filename]#.afm# antes de executar o `afmtodit`. Esse nome também deve coincidir com o usado no arquivo Fontmap se você deseja redirecionar o man:groff[1] para o man:gs[1].
++
+Certifique-se de que o arquivo _PS_font_name_ resultante (por exemplo, [.filename]#3of9# no exemplo acima) esteja localizado no diretório [.filename]#/usr/share/groff_font/devps# movendo ou copiando-o para lá.
++
+Observe que, se o [.filename]#ttf2pf.ps# atribuir um nome de fonte usando o que ele encontra no arquivo de fonte TrueType e você desejar usar um nome diferente, será necessário editar o arquivo [.filename]#.afm# antes de executar o `afmtodit`. Este nome também deve corresponder ao usado no arquivo Fontmap se você quiser redirecionar o man:groff[1] para o man:gs[1].
[[truetype-for-other-programs]]
== As Fontes TrueType Podem ser Usadas com Outros Programas?
-O formato de fonte TrueType é usado pelo Windows, Windows 95 e Mac. É bastante popular e há um grande número de fontes disponíveis neste formato.
+O formato de fonte TrueType é utilizado pelo Windows, Windows 95 e Mac's. É bastante popular e há uma grande quantidade de fontes disponíveis neste formato.
-Infelizmente, há poucos aplicativos que conheço que podem usar este formato: O Ghostscript e o Povray são os que vem a mente. O suporte do Ghostscript, de acordo com a documentação, é rudimentar e os resultados provavelmente serão inferiores as fontes Type 1. O Povray versão 3 também tem a capacidade de usar fontes TrueType, mas eu duvido que muitas pessoas criem documentos como uma série de páginas tridmensionais traçadas com luz :-).
+Infelizmente, há poucos aplicativos que eu conheço que podem usar este formato: o Ghostscript e o Povray vêm à mente. O suporte do Ghostscript, de acordo com a documentação, é rudimentar e os resultados provavelmente serão inferiores aos das fontes type 1. A versão 3 do Povray também tem a capacidade de usar fontes TrueType, mas eu duvido que muitas pessoas estejam criando documentos como uma série de páginas renderizadas em raytracing :-).
-Esta situação bastante triste pode mudar em breve. O http://www.freetype.org/[Projeto FreeType] está atualmente desenvolvendo um conjunto útil de ferramentas FreeType:
+Essa situação um tanto quanto desanimadora pode mudar em breve. O http://www.freetype.org/[Projeto FreeType] está atualmente desenvolvendo um conjunto de ferramentas FreeType úteis:
-* O servidor de fontes `xfsft` para X11 pode fornecer fontes TrueType além de fontes regulares. Embora esteja atualmente em beta, dizem que está bastante utilizável. Veja http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[a página de Juliusz Chroboczek] para maiores informações. Instruções de portabilidade para o FreeBSD podem ser encontradas na http://math.missouri.edu/~stephen/software/[página do software de Stephen Montgomery].
-* O xfstt é outro servidor de fontes para o X11, disponível em link:ftp://sunsite.unc.edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/].
-* Um programa chamado `ttf2bdf` pode produzir arquivos BDF adequados para uso em um ambiente X a partir de arquivos TrueType. Os binários para o Linux estão disponíveis em link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu.edu/CLR/multiling/Geral/].
-* e outros ...
+* O servidor de fontes `xfsft` para X11 pode servir fontes TrueType além de fontes regulares. Embora esteja atualmente em beta, é dito que ele é bastante utilizável. Veja a página de http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[Juliusz Chroboczek] para obter mais informações. As instruções de portabilidade para FreeBSD podem ser encontradas em http://math.missouri.edu/~stephen/software/[página de software de Stephen Montgomery].
+* xfstt é outro servidor de fontes para X11, disponível em link:ftp://sunsite.unc.edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/].
+* Um programa chamado `ttf2bdf` pode produzir arquivos BDF adequados para uso em um ambiente X a partir de arquivos TrueType. Binários para Linux estão disponíveis em link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu.edu/CLR/multiling/General/].
+* e outros...
[[obtaining-additional-fonts]]
-== Onde Fontes Adicionais Podem ser Obtidas?
+== Onde é possível obter fontes adicionais?
-Muitas fontes estão disponíveis na Internet. Elas são totalmente gratuitas ou sharewares. Além disso, muitas fontes estão disponíveis na categoria [.filename]#x11-fonts/# na coleção do ports
+Muitas fontes estão disponíveis na Internet. Elas são completamente gratuitas ou são sharewares. Além disso, muitas fontes estão disponíveis na categoria [.filename]#x11-fonts/# na coleção de ports
[[additional-questions]]
== Questões Adicionais
-* Quais são os usos dos arquivos [.filename]#.pfm#?
-* Posso gerar o arquivo [.filename]#.afm# a partir de um arquivo [.filename]#.pfa# ou [.filename]#.pfb#?
-* Como gerar os arquivos de mapeamento de caracteres groff para fontes PostScript com nomes de caracteres não padrão?
-* Podem os dispositivos xditview e devX serem configurados para acessar todas as novas fontes?
-* Seria bom ter exemplos de uso de fontes TrueType com Povray e Ghostscript.
+* Para que servem os arquivos [.filename]#.pfm#?
+* É possível gerar o arquivo [.filename]#.afm# a partir de um arquivo [.filename]#.pfa# ou [.filename]#.pfb#?
+* Como gerar os arquivos de mapeamento de caracteres do groff para fontes PostScript com nomes de caracteres não-padrão?
+* É possível configurar o xditview e os dispositivos devX para acessar todas as novas fontes?
+* Seria bom ter exemplos de como usar fontes TrueType com o Povray e o Ghostscript.
diff --git a/documentation/content/pt-br/articles/fonts/_index.po b/documentation/content/pt-br/articles/fonts/_index.po
new file mode 100644
index 0000000000..e64d95cdce
--- /dev/null
+++ b/documentation/content/pt-br/articles/fonts/_index.po
@@ -0,0 +1,1615 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-05-02 20:44+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfonts_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/fonts/_index.adoc:1
+#, no-wrap
+msgid "A description of the various font technologies in FreeBSD, and how to use them with different programs"
+msgstr ""
+"Uma descrição das diversas tecnologias de fontes no FreeBSD e como usá-las "
+"com diferentes programas"
+
+#. type: Title =
+#: documentation/content/en/articles/fonts/_index.adoc:1
+#: documentation/content/en/articles/fonts/_index.adoc:12
+#, no-wrap
+msgid "Fonts and FreeBSD"
+msgstr "Fontes e FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:48
+msgid ""
+"This document contains a description of the various font files that may be "
+"used with FreeBSD and the syscons driver, X11, Ghostscript and Groff. "
+"Cookbook examples are provided for switching the syscons display to 80x60 "
+"mode, and for using type 1 fonts with the above application programs."
+msgstr ""
+"Este documento contém uma descrição dos vários arquivos de fontes que podem "
+"ser usados com o FreeBSD e o driver syscons, X11, Ghostscript e Groff. "
+"Exemplos de receitas são fornecidos para alternar o display syscons para o "
+"modo 80x60 e para usar fontes type 1 com os programas de aplicativos "
+"mencionados acima."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:50
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:54
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:59
+msgid ""
+"There are many sources of fonts available, and one might ask how they might "
+"be used with FreeBSD. The answer can be found by carefully searching the "
+"documentation for the component that one would like to use. This is very "
+"time consuming, so this tutorial is an attempt to provide a shortcut for "
+"others who might be interested."
+msgstr ""
+"Existem muitas fontes disponíveis e alguém pode perguntar como usá-las com o "
+"FreeBSD. A resposta pode ser encontrada pesquisando cuidadosamente a "
+"documentação do componente que deseja utilizar. Isso pode ser muito "
+"demorado, portanto, este tutorial é uma tentativa de fornecer um atalho para "
+"outras pessoas interessadas."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:61
+#, no-wrap
+msgid "Basic Terminology"
+msgstr "Terminologia Básica"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:65
+msgid ""
+"There are many different font formats and associated font file suffixes. A "
+"few that will be addressed here are:"
+msgstr ""
+"Existem muitos formatos diferentes de fontes e sufixos de arquivos de fontes "
+"associados. Alguns que serão abordados aqui são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:66
+#: documentation/content/en/articles/fonts/_index.adoc:110
+#, no-wrap
+msgid "[.filename]#.pfa#, [.filename]#.pfb#"
+msgstr "[.filename]#.pfa#, [.filename]#.pfb#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:68
+msgid ""
+"PostScript(R) type 1 fonts. The [.filename]#.pfa# is the __A__scii form and "
+"[.filename]#.pfb# the __B__inary form."
+msgstr ""
+"Fontes PostScript(R) type 1. O arquivo [.filename]#.pfa# é a forma __A__scii "
+"e o arquivo [.filename]#.pfb# é a forma __B__inária."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:69
+#, no-wrap
+msgid "[.filename]#.afm#"
+msgstr "[.filename]#.afm#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:71
+msgid "The font metrics associated with a type 1 font."
+msgstr "As métricas da fonte associado com a fonte type 1."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:72
+#, no-wrap
+msgid "[.filename]#.pfm#"
+msgstr "[.filename]#.pfm#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:74
+msgid "The printer font metrics associated with a type 1 font."
+msgstr "As métricas da fonte para impressora associadas com a fonte type 1."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:75
+#: documentation/content/en/articles/fonts/_index.adoc:116
+#, no-wrap
+msgid "[.filename]#.ttf#"
+msgstr "[.filename]#.ttf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:77
+msgid "A TrueType(R) font"
+msgstr "Uma fonte TrueType(R)"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:78
+#, no-wrap
+msgid "[.filename]#.fot#"
+msgstr "[.filename]#.fot#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:80
+msgid "An indirect reference to a TrueType font (not an actual font)"
+msgstr ""
+"Uma referência indireta para uma fonte TrueType (não é realmente uma fonte)"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:81
+#, no-wrap
+msgid "[.filename]#.fon#, [.filename]#.fnt#"
+msgstr "[.filename]#.fon#, [.filename]#.fnt#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:83
+msgid "Bitmapped screen fonts"
+msgstr "Fontes de tela bitmapped"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:86
+msgid ""
+"The [.filename]#.fot# is used by Windows(R) as sort of a symbolic link to "
+"the actual TrueType(R) font ([.filename]#.ttf#) file. The [.filename]#.fon# "
+"font files are also used by Windows. I know of no way to use this font "
+"format with FreeBSD."
+msgstr ""
+"O arquivo [.filename]#.fot# é usado pelo Windows(R) como um tipo de link "
+"simbólico para o arquivo de fonte TrueType(R) real ([.filename]#.ttf#). Os "
+"arquivos de fonte [.filename]#.fon# também são usados pelo Windows. Não "
+"conheço uma maneira de usar esse formato de fonte no FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:88
+#, no-wrap
+msgid "What Font Formats Can I Use?"
+msgstr "Quais Formatos de Fonte eu Posso Utilizar?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:94
+msgid ""
+"Which font file format is useful depends on the application being used. "
+"FreeBSD by itself uses no fonts. Application programs and/or drivers may "
+"make use of the font files. Here is a small cross reference of application/"
+"driver to the font type suffixes:"
+msgstr ""
+"O formato de arquivo de fonte mais adequado depende do aplicativo utilizado. "
+"O FreeBSD por si só não utiliza fontes. Programas de aplicativos e/ou "
+"drivers podem fazer uso dos arquivos de fonte. Aqui está uma pequena "
+"referência cruzada de aplicativos/drivers para os sufixos de tipo de fonte:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:95
+#, no-wrap
+msgid "Driver"
+msgstr "Driver"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:97
+#, no-wrap
+msgid "vt"
+msgstr "vt"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:99
+msgid "[.filename]#.hex#"
+msgstr "[.filename]#.hex#"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:100
+#, no-wrap
+msgid "syscons"
+msgstr "syscons"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:102
+msgid "[.filename]#.fnt#"
+msgstr "[.filename]#.fnt#"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:103
+#, no-wrap
+msgid "Application"
+msgstr "Aplicação"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:105
+#, no-wrap
+msgid "Ghostscript"
+msgstr "Ghostscript"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:107
+msgid "[.filename]#.pfa#, [.filename]#.pfb#, [.filename]#.ttf#"
+msgstr "[.filename]#.pfa#, [.filename]#.pfb#, [.filename]#.ttf#"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:108
+#, no-wrap
+msgid "X11"
+msgstr "X11"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:111
+#, no-wrap
+msgid "Groff"
+msgstr "Groff"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:113
+msgid "[.filename]#.pfa#, [.filename]#.afm#"
+msgstr "[.filename]#.pfa#, [.filename]#.afm#"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:114
+#, no-wrap
+msgid "Povray"
+msgstr "Povray"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:121
+msgid ""
+"The [.filename]#.fnt# suffix is used quite frequently. I suspect that "
+"whenever someone wanted to create a specialized font file for their "
+"application, more often than not they chose this suffix. Therefore, it is "
+"likely that files with this suffix are not all the same format; "
+"specifically, the [.filename]#.fnt# files used by syscons under FreeBSD may "
+"not be the same format as a [.filename]#.fnt# one encounters in the MS-"
+"DOS(R)/Windows(R) environment. I have not made any attempt at using other [."
+"filename]#.fnt# files other than those provided with FreeBSD."
+msgstr ""
+"O sufixo [.filename]#.fnt# é bastante utilizado. Eu suspeito que sempre que "
+"alguém quisesse criar um arquivo de fonte especializado para seu aplicativo, "
+"na maioria das vezes escolhia esse sufixo. Portanto, é provável que os "
+"arquivos com esse sufixo não sejam todos do mesmo formato; especificamente, "
+"os arquivos [.filename]#.fnt# usados pelo syscons no FreeBSD podem não ser "
+"do mesmo formato que um [.filename]#.fnt# encontrado no ambiente MS-"
+"DOS(R)/Windows(R). Não fiz nenhuma tentativa de usar outros arquivos [."
+"filename]#.fnt# além daqueles fornecidos com o FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:123
+#, no-wrap
+msgid "Setting a Virtual Console to 80x60 Line Mode"
+msgstr "Configurando um Console Virtual para o Modo de Linhas 80x60"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:127
+msgid ""
+"First, an 8x8 font must be loaded. To do this, [.filename]#/etc/rc.conf# "
+"should contain the line (change the font name to an appropriate one for your "
+"locale):"
+msgstr ""
+"Primeiramente, uma fonte 8x8 deve ser carregada. Para isso, o arquivo [."
+"filename]#/etc/rc.conf# deve conter a linha (mude o nome da fonte para um "
+"apropriado para sua localização):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:131
+#, no-wrap
+msgid "font8x8=\"iso-8x8\"\t\t# font 8x8 from /usr/share/syscons/fonts/* (or NO).\n"
+msgstr ""
+"font8x8=\"iso-8x8\"\t\t# font 8x8 from /usr/share/syscons/fonts/* (or NO).\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:134
+msgid "The command to actually switch the mode is man:vidcontrol[1]:"
+msgstr "O comando para realmente mudar o modo é man:vidcontrol[1]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:138
+#, no-wrap
+msgid "% vidcontrol VGA_80x60\n"
+msgstr "% vidcontrol VGA_80x60\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:142
+msgid ""
+"Various screen-oriented programs, such as man:vi[1], must be able to "
+"determine the current screen dimensions. As this is achieved this through "
+"`ioctl` calls to the console driver (such as man:syscons[4]) they will "
+"correctly determine the new screen dimensions."
+msgstr ""
+"Vários programas orientados a tela, como man:vi[1], devem ser capazes de "
+"determinar as dimensões atuais da tela. Como isso é alcançado por meio de "
+"chamadas `ioctl` para o driver do console (como man:syscons[4]), eles "
+"determinarão corretamente as novas dimensões da tela."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:145
+msgid ""
+"To make this more seamless, one can embed these commands in the startup "
+"scripts so it takes place when the system boots. To do this is add this "
+"line to [.filename]#/etc/rc.conf#."
+msgstr ""
+"Para tornar isso mais contínuo, é possível incorporar esses comandos nos "
+"scripts de inicialização para que ocorram durante a inicialização do "
+"sistema. Para fazer isso, adicione esta linha ao arquivo [.filename]#/etc/rc."
+"conf#."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:149
+#, no-wrap
+msgid "allscreens_flags=\"VGA_80x60\"\t# Set this vidcontrol mode for all virtual screens\n"
+msgstr ""
+"allscreens_flags=\"VGA_80x60\"\t# Set this vidcontrol mode for all virtual "
+"screens\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:152
+msgid "References: man:rc.conf[5], man:vidcontrol[1]."
+msgstr "Referências: man:rc.conf[5], man:vidcontrol[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:154
+#, no-wrap
+msgid "Using Type 1 Fonts with X11"
+msgstr "Usando fontes Type 1 com o X11"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:159
+msgid ""
+"X11 can use either the [.filename]#.pfa# or the [.filename]#.pfb# format "
+"fonts. The X11 fonts are located in various subdirectories under [."
+"filename]#/usr/X11R6/lib/X11/fonts#. Each font file is cross referenced to "
+"its X11 name by the contents of [.filename]#fonts.dir# in each directory."
+msgstr ""
+"O X11 pode usar fontes em formato [.filename]#.pfa# ou [.filename]#.pfb#. As "
+"fontes X11 estão localizadas em vários subdiretórios em [.filename]#/usr/"
+"X11R6/lib/X11/fonts#. Cada arquivo de fonte é cruzado com seu nome X11 pelos "
+"conteúdos de [.filename]#fonts.dir# em cada diretório."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:165
+msgid ""
+"There is already a directory named [.filename]#Type1#. The most straight "
+"forward way to add a new font is to put it into this directory. A better "
+"way is to keep all new fonts in a separate directory and use a symbolic link "
+"to the additional font. This allows one to more easily keep track of ones "
+"fonts without confusing them with the fonts that were originally provided. "
+"For example:"
+msgstr ""
+"Já existe um diretório chamado [.filename]#Type1#. A maneira mais direta de "
+"adicionar uma nova fonte é colocá-la neste diretório. Uma maneira melhor é "
+"manter todas as novas fontes em um diretório separado e usar um link "
+"simbólico para a fonte adicional. Isso permite que você mantenha um controle "
+"mais fácil das suas fontes sem confundir com as fontes fornecidas "
+"originalmente. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:171
+#, no-wrap
+msgid ""
+"Create a directory to contain the font files\n"
+"% mkdir -p /usr/local/share/fonts/type1\n"
+"% cd /usr/local/share/fonts/type1\n"
+msgstr ""
+"Crie um diretório para conter os arquivos de fonte\n"
+"% mkdir -p /usr/local/share/fonts/type1\n"
+"% cd /usr/local/share/fonts/type1\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:173
+#, no-wrap
+msgid "Place the .pfa, .pfb and .afm files here\n"
+msgstr "Coloque aqui os arquivos .pfa, .pfb e .afm\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:175
+#, no-wrap
+msgid "One might want to keep readme files, and other documentation\n"
+msgstr "Pode ser desejável manter arquivos readme e outras documentações\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:179
+#, no-wrap
+msgid ""
+"for the fonts here also\n"
+"% cp /cdrom/fonts/atm/showboat/showboat.pfb .\n"
+"% cp /cdrom/fonts/atm/showboat/showboat.afm .\n"
+msgstr ""
+"para as fontes aqui também\n"
+"% cp /cdrom/fonts/atm/showboat/showboat.pfb .\n"
+"% cp /cdrom/fonts/atm/showboat/showboat.afm .\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:182
+#, no-wrap
+msgid ""
+"Maintain an index to cross reference the fonts\n"
+"% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX\n"
+msgstr ""
+"Mantenha um índice para cruzar as fontes de referência.\n"
+"% echo showboat - InfoMagic CICA, Dec 1994, /fonts/atm/showboat >>INDEX\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:186
+msgid ""
+"Now, to use a new font with X11, one must make the font file available and "
+"update the font name files. The X11 font names look like:"
+msgstr ""
+"Agora, para usar uma nova fonte com o X11, é necessário tornar o arquivo de "
+"fonte disponível e atualizar os arquivos de nome de fonte. Os nomes das "
+"fontes X11 se parecem com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:200
+#, no-wrap
+msgid ""
+"-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1\n"
+" | | | | | | | | | | | | \\ \\\n"
+" | | | | | \\ \\ \\ \\ \\ \\ \\ +----+- character set\n"
+" | | | | \\ \\ \\ \\ \\ \\ \\ +- average width\n"
+" | | | | \\ \\ \\ \\ \\ \\ +- spacing\n"
+" | | | \\\t\\ \\ \\ \\ \\ +- vertical res.\n"
+" | | | \\\t \\\t\\ \\ \\ +- horizontal res.\n"
+" | | | \\\t \\\t \\ \\ +- points\n"
+" | | | \\ \\\t \\ +- pixels\n"
+" | | | \\ \\\t \\\n"
+" foundry family weight slant width additional style\n"
+msgstr ""
+"-bitstream-charter-medium-r-normal-xxx-0-0-0-0-p-0-iso8859-1\n"
+" | | | | | | | | | | | | \\ \\\n"
+" | | | | | \\ \\ \\ \\ \\ \\ \\ +----+- "
+"character set\n"
+" | | | | \\ \\ \\ \\ \\ \\ \\ +- average width\n"
+" | | | | \\ \\ \\ \\ \\ \\ +- spacing\n"
+" | | | \\\t\\ \\ \\ \\ \\ +- vertical res.\n"
+" | | | \\\t \\\t\\ \\ \\ +- horizontal res.\n"
+" | | | \\\t \\\t \\ \\ +- points\n"
+" | | | \\ \\\t \\ +- pixels\n"
+" | | | \\ \\\t \\\n"
+" foundry family weight slant width additional style\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:206
+msgid ""
+"A new name needs to be created for each new font. If you have some "
+"information from the documentation that accompanied the font, then it could "
+"serve as the basis for creating the name. If there is no information, then "
+"you can get some idea by using man:strings[1] on the font file. For example:"
+msgstr ""
+"Um novo nome precisa ser criado para cada nova fonte. Se você tiver alguma "
+"informação da documentação que acompanha a fonte, ela pode servir como base "
+"para criar o nome. Se não houver informações disponíveis, você pode ter uma "
+"ideia usando o comando man:strings[1] no arquivo de fonte. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:234
+#, no-wrap
+msgid ""
+"% strings showboat.pfb | more\n"
+"%!FontType1-1.0: Showboat 001.001\n"
+"%%CreationDate: 1/15/91 5:16:03 PM\n"
+"%%VMusage: 1024 45747\n"
+"% Generated by Fontographer 3.1\n"
+"% Showboat\n"
+" 1991 by David Rakowski. Alle Rechte Vorbehalten.\n"
+"FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup\n"
+"/UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse\n"
+"{save true}{false}ifelse}{false}ifelse\n"
+"12 dict begin\n"
+"/FontInfo 9 dict dup begin\n"
+" /version (001.001) readonly def\n"
+" /FullName (Showboat) readonly def\n"
+" /FamilyName (Showboat) readonly def\n"
+" /Weight (Medium) readonly def\n"
+" /ItalicAngle 0 def\n"
+" /isFixedPitch false def\n"
+" /UnderlinePosition -106 def\n"
+" /UnderlineThickness 16 def\n"
+" /Notice (Showboat\n"
+" 1991 by David Rakowski. Alle Rechte Vorbehalten.) readonly def\n"
+"end readonly def\n"
+"/FontName /Showboat def\n"
+"--stdin--\n"
+msgstr ""
+"% strings showboat.pfb | more\n"
+"%!FontType1-1.0: Showboat 001.001\n"
+"%%CreationDate: 1/15/91 5:16:03 PM\n"
+"%%VMusage: 1024 45747\n"
+"% Generated by Fontographer 3.1\n"
+"% Showboat\n"
+" 1991 by David Rakowski. Alle Rechte Vorbehalten.\n"
+"FontDirectory/Showboat known{/Showboat findfont dup/UniqueID known{dup\n"
+"/UniqueID get 4962377 eq exch/FontType get 1 eq and}{pop false}ifelse\n"
+"{save true}{false}ifelse}{false}ifelse\n"
+"12 dict begin\n"
+"/FontInfo 9 dict dup begin\n"
+" /version (001.001) readonly def\n"
+" /FullName (Showboat) readonly def\n"
+" /FamilyName (Showboat) readonly def\n"
+" /Weight (Medium) readonly def\n"
+" /ItalicAngle 0 def\n"
+" /isFixedPitch false def\n"
+" /UnderlinePosition -106 def\n"
+" /UnderlineThickness 16 def\n"
+" /Notice (Showboat\n"
+" 1991 by David Rakowski. Alle Rechte Vorbehalten.) readonly def\n"
+"end readonly def\n"
+"/FontName /Showboat def\n"
+"--stdin--\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:237
+msgid "Using this information, a possible name might be:"
+msgstr "Usando essas informações, um possível nome poderia ser:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:241
+#, no-wrap
+msgid "-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1\n"
+msgstr "-type1-Showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:244
+msgid "The components of our name are:"
+msgstr "Os componentes do nosso nome são:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:245
+#, no-wrap
+msgid "Foundry"
+msgstr "Companhia"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:247
+msgid "Lets just name all the new fonts `type1`."
+msgstr "Vamos apenas nomear todas as novas fontes como `type1`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:248
+#, no-wrap
+msgid "Family"
+msgstr "Família"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:250
+msgid "The name of the font."
+msgstr "O nome da fonte."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:251
+#, no-wrap
+msgid "Weight"
+msgstr "Densidade"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:254
+msgid ""
+"Normal, bold, medium, semibold, etc. From the man:strings[1] output above, "
+"it appears that this font has a weight of __medium__."
+msgstr ""
+"Normal, negrito (bold), médio (medium), seminegrito (semibold), etc. Pelos "
+"resultados do comando man:strings[1] mostrados acima, parece que esta fonte "
+"tem um peso __médio__ (medium)."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:255
+#, no-wrap
+msgid "Slant"
+msgstr "Inclinação"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:258
+msgid ""
+"__r__oman, __i__talic, __o__blique, etc. Since the _ItalicAngle_ is zero, "
+"_roman_ will be used."
+msgstr ""
+"__r__omano (roman), __i__talico (italic), __o__blíquo (oblique), etc. Já que "
+"o ângulo de itálico (_ItalicAngle_) é zero, será usada a versão romana "
+"(_roman_)."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:259
+#, no-wrap
+msgid "Width"
+msgstr "Largura"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:262
+msgid ""
+"Normal, wide, condensed, extended, etc. Until it can be examined, the "
+"assumption will be __normal__."
+msgstr ""
+"Normal, ampla (wide), condensada (condensed), estendida (extended), etc. Até "
+"que possa ser examinada, a suposição será de que a fonte é __normal__."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:263
+#, no-wrap
+msgid "Additional style"
+msgstr "Estilo Adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:265
+msgid ""
+"Usually omitted, but this will indicate that the font contains decorative "
+"capital letters."
+msgstr ""
+"Frequentemente omitido, mas isso indicará que a fonte possui letras "
+"maiúsculas decorativas."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:266
+#, no-wrap
+msgid "Spacing"
+msgstr "Espaçamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:269
+msgid ""
+"proportional or monospaced. _Proportional_ is used since _isFixedPitch_ is "
+"false."
+msgstr ""
+"Proporcional (proportional) ou espaçamento fixo (monospaced). Será usada a "
+"versão _proporcional_, já que o valor de _isFixedPitch_ é falso."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:273
+msgid ""
+"All of these names are arbitrary, but one should strive to be compatible "
+"with the existing conventions. A font is referenced by name with possible "
+"wild cards by an X11 program, so the name chosen should make some sense. "
+"One might begin by simply using"
+msgstr ""
+"Todos esses nomes são arbitrários, mas deve-se procurar ser compatível com "
+"as convenções existentes. Uma fonte é referenciada pelo nome, com possíveis "
+"curingas (wildcards) por um programa X11, então o nome escolhido deve fazer "
+"algum sentido. Pode-se começar simplesmente usando"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:277
+#, no-wrap
+msgid "...-normal-r-normal-...-p-...\n"
+msgstr "...-normal-r-normal-...-p-...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:280
+msgid ""
+"as the name, and then use man:xfontsel[1] to examine it and adjust the name "
+"based on the appearance of the font."
+msgstr ""
+"esse nome, e depois usar o comando man:xfontsel[1] para examiná-lo e ajustar "
+"o nome com base na aparência da fonte."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:282
+msgid "So, to complete our example:"
+msgstr "Então, para completar nosso exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:288
+#, no-wrap
+msgid ""
+"Make the font accessible to X11\n"
+"% cd /usr/X11R6/lib/X11/fonts/Type1\n"
+"% ln -s /usr/local/share/fonts/type1/showboat.pfb .\n"
+msgstr ""
+"Torne a fonte acessível ao X11.\n"
+"% cd /usr/X11R6/lib/X11/fonts/Type1\n"
+"% ln -s /usr/local/share/fonts/type1/showboat.pfb .\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:301
+#, no-wrap
+msgid ""
+"Edit fonts.dir and fonts.scale, adding the line describing the font\n"
+"and incrementing the number of fonts which is found on the first line.\n"
+"% ex fonts.dir\n"
+":1p\n"
+"25\n"
+":1c\n"
+"26\n"
+".\n"
+":$a\n"
+"showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-1\n"
+".\n"
+":wq\n"
+msgstr ""
+"Edite o arquivo fonts.dir e fonts.scale, adicionando a linha que descreve a "
+"fonte \n"
+"e incrementando o número de fontes que é encontrado na primeira linha.\n"
+"% ex fonts.dir\n"
+":1p\n"
+"25\n"
+":1c\n"
+"26\n"
+".\n"
+":$a\n"
+"showboat.pfb -type1-showboat-medium-r-normal-decorative-0-0-0-0-p-0-iso8859-"
+"1\n"
+".\n"
+":wq\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:304
+#, no-wrap
+msgid ""
+"fonts.scale seems to be identical to fonts.dir...\n"
+"% cp fonts.dir fonts.scale\n"
+msgstr ""
+"O arquivo fonts.scale parece ser idêntico ao fonts.dir...\n"
+"% cp fonts.dir fonts.scale\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:307
+#, no-wrap
+msgid ""
+"Tell X11 that things have changed\n"
+"% xset fp rehash\n"
+msgstr ""
+"Informe ao X11 que as coisas mudaram.\n"
+"% xset fp rehash\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:310
+#, no-wrap
+msgid ""
+"Examine the new font\n"
+"% xfontsel -pattern -type1-*\n"
+msgstr ""
+"Examine a nova fonte\n"
+"% xfontsel -pattern -type1-*\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:313
+msgid ""
+"References: man:xfontsel[1], man:xset[1], The X Windows System in a "
+"Nutshell, http://www.ora.com/[O'Reilly & Associates]."
+msgstr ""
+"Referências: man:xfontsel[1], man:xset[1], The X Windows System in a "
+"Nutshell, http://www.ora.com/[O'Reilly & Associates]."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:315
+#, no-wrap
+msgid "Using Type 1 Fonts with Ghostscript"
+msgstr "Usando Fontes Type 1 com Ghostscript"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:321
+msgid ""
+"Ghostscript references a font via its [.filename]#Fontmap#. This must be "
+"modified in a similar way to the X11 [.filename]#fonts.dir#. Ghostscript "
+"can use either the [.filename]#.pfa# or the [.filename]#.pfb# format fonts. "
+"Using the font from the previous example, here is how to use it with "
+"Ghostscript:"
+msgstr ""
+"O Ghostscript referencia uma fonte por meio de seu arquivo [."
+"filename]#Fontmap#. Este arquivo deve ser modificado de maneira semelhante "
+"ao arquivo [.filename]#fonts.dir# do X11. O Ghostscript pode usar fontes em "
+"formato [.filename]#.pfa# ou [.filename]#.pfb#. Usando a fonte do exemplo "
+"anterior, aqui está como usá-la com o Ghostscript:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:327
+#, no-wrap
+msgid ""
+"Put the font in Ghostscript's font directory\n"
+"% cd /usr/local/share/ghostscript/fonts\n"
+"% ln -s /usr/local/share/fonts/type1/showboat.pfb .\n"
+msgstr ""
+"Coloque a fonte no diretório de fontes do Ghostscript.\n"
+"% cd /usr/local/share/ghostscript/fonts\n"
+"% ln -s /usr/local/share/fonts/type1/showboat.pfb .\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:335
+#, no-wrap
+msgid ""
+"Edit Fontmap so Ghostscript knows about the font\n"
+"% cd /usr/local/share/ghostscript/4.01\n"
+"% ex Fontmap\n"
+":$a\n"
+"/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat\n"
+".\n"
+":wq\n"
+msgstr ""
+"Edite o arquivo Fontmap para que o Ghostscript saiba sobre a fonte\n"
+"% cd /usr/local/share/ghostscript/4.01\n"
+"% ex Fontmap\n"
+":$a\n"
+"/Showboat (showboat.pfb) ; % From CICA /fonts/atm/showboat\n"
+".\n"
+":wq\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:351
+#, no-wrap
+msgid ""
+"Use Ghostscript to examine the font\n"
+"% gs prfont.ps\n"
+"Aladdin Ghostscript 4.01 (1996-7-10)\n"
+"Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights\n"
+"reserved.\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____.pfb...\n"
+" /1899520 581354 1300084 13826 0 done.\n"
+"GS>Showboat DoFont\n"
+"Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb...\n"
+" 1939688 565415 1300084 16901 0 done.\n"
+">>showpage, press <return> to continue<<\n"
+">>showpage, press <return> to continue<<\n"
+">>showpage, press <return> to continue<<\n"
+"GS>quit\n"
+msgstr ""
+"Use o Ghostscript para examinar a fonte.\n"
+"% gs prfont.ps\n"
+"Aladdin Ghostscript 4.01 (1996-7-10)\n"
+"Copyright (C) 1996 Aladdin Enterprises, Menlo Park, CA. All rights\n"
+"reserved.\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Loading Times-Roman font from /usr/local/share/ghostscript/fonts/tir_____."
+"pfb...\n"
+" /1899520 581354 1300084 13826 0 done.\n"
+"GS>Showboat DoFont\n"
+"Loading Showboat font from /usr/local/share/ghostscript/fonts/showboat.pfb..."
+"\n"
+" 1939688 565415 1300084 16901 0 done.\n"
+">>showpage, press <return> to continue<<\n"
+">>showpage, press <return> to continue<<\n"
+">>showpage, press <return> to continue<<\n"
+"GS>quit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:354
+msgid "References: [.filename]#fonts.txt# in the Ghostscript 4.01 distribution"
+msgstr ""
+"Referências: arquivo [.filename]#fonts.txt# na distribuição do Ghostscript 4."
+"01"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:356
+#, no-wrap
+msgid "Using Type 1 Fonts with Groff"
+msgstr "Usando Fontes Type 1 com o Groff"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:363
+msgid ""
+"Now that the new font can be used by both X11 and Ghostscript, how can one "
+"use the new font with groff? First of all, since we are dealing with type 1 "
+"PostScript(R) fonts, the groff device that is applicable is the _ps_ "
+"device. A font file must be created for each font that groff can use. A "
+"groff font name is just a file in [.filename]#/usr/share/groff_font/devps#. "
+"With our example, the font file could be [.filename]#/usr/share/groff_font/"
+"devps/SHOWBOAT#. The file must be created using tools provided by groff."
+msgstr ""
+"Agora que a nova fonte pode ser usada tanto pelo X11 quanto pelo "
+"Ghostscript, como se pode usá-la com o groff? Em primeiro lugar, uma vez que "
+"estamos lidando com fontes PostScript(R) type 1, o dispositivo groff que é "
+"aplicável é o dispositivo _ps_. Um arquivo de fonte deve ser criado para "
+"cada fonte que o groff possa usar. Um nome de fonte groff é apenas um "
+"arquivo em [.filename]#/usr/share/groff_font/devps#. Em nosso exemplo, o "
+"arquivo de fonte poderia ser [.filename]#/usr/share/groff_font/devps/"
+"SHOWBOAT#. O arquivo deve ser criado usando ferramentas fornecidas pelo "
+"groff."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:367
+msgid ""
+"The first tool is `afmtodit`. This is not normally installed, so it must be "
+"retrieved from the source distribution. I found I had to change the first "
+"line of the file, so I did:"
+msgstr ""
+"A primeira ferramenta é `afmtodit`. Ela não costuma ser instalada por "
+"padrão, então é necessário obtê-la da distribuição de origem. Descobri que "
+"precisei alterar a primeira linha do arquivo, então fiz o seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:376
+#, no-wrap
+msgid ""
+"% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp\n"
+"% ex /tmp/afmtodit.pl\n"
+":1c\n"
+"#!/usr/bin/perl -P-\n"
+".\n"
+":wq\n"
+msgstr ""
+"% cp /usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.pl /tmp\n"
+"% ex /tmp/afmtodit.pl\n"
+":1c\n"
+"#!/usr/bin/perl -P-\n"
+".\n"
+":wq\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:380
+msgid ""
+"This tool will create the groff font file from the metrics file ([."
+"filename]#.afm# suffix.) Continuing with our example:"
+msgstr ""
+"Essa ferramenta criará o arquivo de fonte do groff a partir do arquivo de "
+"métricas (sufixo [.filename]#.afm#). Continuando com nosso exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:388
+#, no-wrap
+msgid ""
+"Many .afm files are in Mac format... ^M delimited lines\n"
+"We need to convert them to UNIX(R) style ^J delimited lines\n"
+"% cd /tmp\n"
+"% cat /usr/local/share/fonts/type1/showboat.afm |\n"
+"\ttr '\\015' '\\012' >showboat.afm\n"
+msgstr ""
+"Muitos arquivos .afm estão no formato Mac, com linhas delimitadas por ^M. \n"
+"É necessário convertê-los para o estilo UNIX(R), com linhas delimitadas por "
+"^J.\n"
+"% cd /tmp\n"
+"% cat /usr/local/share/fonts/type1/showboat.afm |\n"
+"\ttr '\\015' '\\012' >showboat.afm\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:392
+#, no-wrap
+msgid ""
+"Now create the groff font file\n"
+"% cd /usr/share/groff_font/devps\n"
+"% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap SHOWBOAT\n"
+msgstr ""
+"Agora crie o arquivo de fonte do groff.\n"
+"% cd /usr/share/groff_font/devps\n"
+"% /tmp/afmtodit.pl -d DESC -e text.enc /tmp/showboat.afm generate/textmap "
+"SHOWBOAT\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:395
+msgid "The font can now be referenced with the name SHOWBOAT."
+msgstr "A fonte agora pode ser referenciada pelo nome SHOWBOAT."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:402
+msgid ""
+"If Ghostscript is used to drive the printers on the system, then nothing "
+"more needs to be done. However, if true PostScript(R) printers are used, "
+"then the font must be downloaded to the printer in order for the font to be "
+"used (unless the printer happens to have the showboat font built in or on an "
+"accessible font disk.) The final step is to create a downloadable font. "
+"The `pfbtops` tool is used to create the [.filename]#.pfa# format of the "
+"font, and [.filename]#download# is modified to reference the new font. The "
+"[.filename]#download# must reference the internal name of the font. This "
+"can easily be determined from the groff font file as illustrated:"
+msgstr ""
+"Se o Ghostscript for usado para controlar as impressoras no sistema, então "
+"nada mais precisa ser feito. No entanto, se forem usadas impressoras "
+"PostScript(R) reais, a fonte deve ser baixada para a impressora para que a "
+"fonte seja usada (a menos que a impressora tenha a fonte showboat "
+"incorporada ou em um disco de fonte acessível). O último passo é criar uma "
+"fonte transferível. A ferramenta `pfbtops` é usada para criar o formato [."
+"filename]#.pfa# da fonte, e o arquivo [.filename]#download# é modificado "
+"para referenciar a nova fonte. O arquivo [.filename]#download# deve fazer "
+"referência ao nome interno da fonte. Isso pode ser facilmente determinado a "
+"partir do arquivo de fonte do groff, como ilustrado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:407
+#, no-wrap
+msgid ""
+"Create the .pfa font file\n"
+"% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa\n"
+msgstr ""
+"Crie o arquivo de fonte .pfa.\n"
+"% pfbtops /usr/local/share/fonts/type1/showboat.pfb >showboat.pfa\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:410
+msgid ""
+"Of course, if [.filename]#.pfa# is already available, just use a symbolic "
+"link to reference it."
+msgstr ""
+"Claro, se o arquivo [.filename]#.pfa# já estiver disponível, basta usar um "
+"link simbólico para fazer referência a ele."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:422
+#, no-wrap
+msgid ""
+"Get the internal font name\n"
+"% fgrep internalname SHOWBOAT\n"
+"internalname Showboat\n"
+"Tell groff that the font must be downloaded\n"
+"% ex download\n"
+":$a\n"
+"Showboat showboat.pfa\n"
+".\n"
+":wq\n"
+msgstr ""
+"Obtenha o nome interno da fonte\n"
+"% fgrep internalname SHOWBOAT\n"
+"internalname Showboat\n"
+"Informe ao groff que a fonte deve ser baixada.\n"
+"% ex download\n"
+":$a\n"
+"Showboat showboat.pfa\n"
+".\n"
+":wq\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:425
+msgid "To test the font:"
+msgstr "Para testar a fonte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:456
+#, no-wrap
+msgid ""
+"% cd /tmp\n"
+"% cat >example.t <<EOF\n"
+".sp 5\n"
+".ps 16\n"
+"This is an example of the Showboat font:\n"
+".br\n"
+".ps 48\n"
+".vs (\\n(.s+2)p\n"
+".sp\n"
+".ft SHOWBOAT\n"
+"ABCDEFGHI\n"
+".br\n"
+"JKLMNOPQR\n"
+".br\n"
+"STUVWXYZ\n"
+".sp\n"
+".ps 16\n"
+".vs (\\n(.s+2)p\n"
+".fp 5 SHOWBOAT\n"
+".ft R\n"
+"To use it for the first letter of a paragraph, it will look like:\n"
+".sp 50p\n"
+"\\s(48\\f5H\\s0\\fRere is the first sentence of a paragraph that uses the\n"
+"showboat font as its first letter.\n"
+"Additional vertical space must be used to allow room for the larger\n"
+"letter.\n"
+"EOF\n"
+"% groff -Tps example.t >example.ps\n"
+msgstr ""
+"% cd /tmp\n"
+"% cat >exemplo.t <<EOF\n"
+".sp 5\n"
+".ps 16\n"
+"Este é um exemplo da fonte Showboat:\n"
+".br\n"
+".ps 48\n"
+".vs (\\n"
+"(.s+2)p\n"
+".sp\n"
+".ft SHOWBOAT\n"
+"ABCDEFGHI\n"
+".br\n"
+"JKLMNOPQR\n"
+".br\n"
+"STUVWXYZ\n"
+".sp\n"
+".ps 16\n"
+".vs (\\n"
+"(.s+2)p\n"
+".fp 5 SHOWBOAT\n"
+".ft R\n"
+"Para usá-lo como a primeira letra de um parágrafo, ficará assim:\n"
+".sp 50p\n"
+"\\s(48\\f5H\\s0\\fRqui está a primeira frase de um parágrafo que usa a\n"
+"fonte showboat como a primeira letra.\n"
+"Deve-se usar espaço vertical adicional para permitir espaço para a letra "
+"maior.\n"
+"EOF\n"
+"% groff -Tps example.t > exemplo.ps\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:459
+#, no-wrap
+msgid ""
+"To use ghostscript/ghostview\n"
+"% ghostview example.ps\n"
+msgstr ""
+"Para usar o ghostscript/ghostview\n"
+"% ghostview example.ps\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:462
+#, no-wrap
+msgid ""
+"To print it\n"
+"% lpr -Ppostscript example.ps\n"
+msgstr ""
+"Para imprimir:\n"
+"% lpr -Ppostscript example.ps\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:465
+msgid ""
+"References: [.filename]#/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man#, "
+"man:groff_font[5], man:groff_char[7], man:pfbtops[1]."
+msgstr ""
+"Referências: [.filename]#/usr/src/gnu/usr.bin/groff/afmtodit/afmtodit.man#, "
+"man:groff_font[5], man:groff_char[7], man:pfbtops[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:467
+#, no-wrap
+msgid "Converting TrueType Fonts to a groff/PostScript Format For groff"
+msgstr ""
+"Convertendo Fontes TrueType para um Formato groff/PostScript para o Groff"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:471
+msgid ""
+"This potentially requires a bit of work, simply because it depends on some "
+"utilities that are not installed as part of the base system. They are:"
+msgstr ""
+"Isso pode requerer um pouco de trabalho, simplesmente porque depende de "
+"algumas ferramentas que não são instaladas como parte do sistema base. Elas "
+"são:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:472
+#, no-wrap
+msgid "`ttf2pf`"
+msgstr "`ttf2pf`"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:475
+msgid ""
+"TrueType to PostScript conversion utilities. This allows conversion of a "
+"TrueType font to an ascii font metric ([.filename]#.afm#) file."
+msgstr ""
+"Utilitários de conversão de TrueType para PostScript. Isso permite a "
+"conversão de uma fonte TrueType para um arquivo de métricas de fonte ascii (["
+".filename]#.afm#)."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:479
+msgid ""
+"Currently available at http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/"
+"ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/ttf2pf/]. "
+"Note: These files are PostScript programs and must be downloaded to disk by "
+"holding down kbd:[Shift] when clicking on the link. Otherwise, your browser "
+"may try to launch ghostview to view them."
+msgstr ""
+"Disponível atualmente em http://sunsite.icm.edu.pl/pub/GUST/contrib/"
+"BachoTeX98/ttf2pf/[http://sunsite.icm.edu.pl/pub/GUST/contrib/BachoTeX98/"
+"ttf2pf/]. Observe: esses arquivos são programas PostScript e devem ser "
+"baixados para o disco mantendo pressionada a tecla kbd:[Shift] ao clicar no "
+"link. Caso contrário, o seu navegador pode tentar abrir o ghostview para "
+"visualizá-los."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:481
+msgid "The files of interest are:"
+msgstr "Os arquivos de interesse são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:483
+msgid "[.filename]#GS_TTF.PS#"
+msgstr "[.filename]#GS_TTF.PS#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:484
+msgid "[.filename]#PF2AFM.PS#"
+msgstr "[.filename]#PF2AFM.PS#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:485
+msgid "[.filename]#ttf2pf.ps#"
+msgstr "[.filename]#ttf2pf.ps#"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:491
+msgid ""
+"The funny upper/lower case is due to their being intended also for DOS "
+"shells. [.filename]#ttf2pf.ps# makes use of the others as upper case, so "
+"any renaming must be consistent with this. (Actually, [.filename]#GS_TTF."
+"PS# and [.filename]#PFS2AFM.PS# are supposedly part of the Ghostscript "
+"distribution, but it is just as easy to use these as an isolated utility. "
+"FreeBSD does not seem to include the latter.) You also may want to have "
+"these installed to [.filename]#/usr/local/share/groff_font/devps#(?)."
+msgstr ""
+"A utilização de letras maiúsculas e minúsculas engraçadas deve-se ao fato de "
+"serem destinadas também para shells do DOS. O arquivo [.filename]#ttf2pf.ps# "
+"faz uso dos outros em letras maiúsculas, então qualquer renomeação deve ser "
+"consistente com isso. (Na verdade, os arquivos [.filename]#GS_TTF.PS# e [."
+"filename]#PFS2AFM.PS# supostamente fazem parte da distribuição do "
+"Ghostscript, mas é fácil usá-los como uma fonte isolada. O FreeBSD não "
+"parece incluir o último.) Você também pode querer tê-los instalados em [."
+"filename]#/usr/local/share/groff_font/devps#(?)."
+
+#. type: Labeled list
+#: documentation/content/en/articles/fonts/_index.adoc:492
+#, no-wrap
+msgid "`afmtodit`"
+msgstr "`afmtodit`"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:495
+msgid ""
+"Creates font files for use with groff from ascii font metrics file. This "
+"usually resides in the directory, [.filename]#/usr/src/contrib/groff/"
+"afmtodit#, and requires some work to get going."
+msgstr ""
+"A ferramenta `afmtodit` é utilizada para criar arquivos de fonte para o "
+"groff a partir de um arquivo métrico de fonte em formato ASCII ([.filename]#."
+"afm#). Normalmente, essa ferramenta está localizada no diretório [."
+"filename]#/usr/src/contrib/groff/afmtodit#, mas normalmente exige alguma "
+"configuração para funcionar corretamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/fonts/_index.adoc:499
+msgid ""
+"If you are paranoid about working in the [.filename]#/usr/src# tree, simply "
+"copy the contents of the above directory to a work location."
+msgstr ""
+"Se você está preocupado com a segurança de trabalhar no diretório [."
+"filename]#/usr/src#, basta copiar o conteúdo do diretório acima para uma "
+"localização de trabalho."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:503
+msgid "In the work area, you will need to make the utility. Just type:"
+msgstr ""
+"Na área de trabalho, você precisará compilar o utilitário. Apenas digite:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:507
+#, no-wrap
+msgid "# make -f Makefile.sub afmtodit\n"
+msgstr "# make -f Makefile.sub afmtodit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:510
+msgid ""
+"You may also need to copy [.filename]#/usr/contrib/groff/devps/generate/"
+"textmap# to [.filename]#/usr/share/groff_font/devps/generate# if it does not "
+"already exist."
+msgstr ""
+"Você também pode precisar copiar o arquivo [.filename]#/usr/contrib/groff/"
+"devps/generate/textmap# para [.filename]#/usr/share/groff_font/devps/"
+"generate# se ele ainda não existir."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:512
+msgid "Once all these utilities are in place, you are ready to commence:"
+msgstr ""
+"Depois que todos esses utilitários estiverem no lugar, você está pronto para "
+"começar:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:514
+msgid "Create [.filename]#.afm# by typing:"
+msgstr "Crie o arquivo [.filename]#.afm# digitando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:518
+#, no-wrap
+msgid "% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name\n"
+msgstr "% gs -dNODISPLAY -q -- ttf2pf.ps TTF_name PS_font_name AFM_name\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:521
+msgid ""
+"Where, _TTF_name_ is your TrueType font file, _PS_font_name_ is the file "
+"name for [.filename]#.pfa#, _AFM_name_ is the name you wish for [.filename]#."
+"afm#. If you do not specify output file names for the [.filename]#.pfa# or [."
+"filename]#.afm# files, then default names will be generated from the "
+"TrueType font file name."
+msgstr ""
+"Onde _TTF_nome_ é o nome do arquivo da sua fonte TrueType, _nome_fonte_PS_ é "
+"o nome do arquivo para [.filename]#.pfa#, _nome_AFM_ é o nome desejado para ["
+".filename]#.afm#. Se você não especificar os nomes de arquivo de saída para "
+"os arquivos [.filename]#.pfa# ou [.filename]#.afm#, então nomes padrão serão "
+"gerados a partir do nome do arquivo da fonte TrueType."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:524
+msgid ""
+"This also produces a [.filename]#.pfa#, the ascii PostScript font metrics "
+"file ([.filename]#.pfb# is for the binary form). This will not be needed, "
+"but could (I think) be useful for a fontserver."
+msgstr ""
+"Isso também produz um arquivo [.filename]#.pfa#, o arquivo de métricas de "
+"fonte PostScript em formato ASCII ([.filename]#.pfb# é para a forma binária)"
+". Isso não será necessário, mas poderia (eu acredito) ser útil para um "
+"servidor de fontes."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:526
+msgid ""
+"For example, to convert the 30f9 Barcode font using the default file names, "
+"use the following command:"
+msgstr ""
+"Por exemplo, para converter a fonte de código de barras 30f9 usando o nome "
+"de arquivo padrão, use o seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:534
+#, no-wrap
+msgid ""
+"% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf\n"
+"Aladdin Ghostscript 5.10 (1997-11-23)\n"
+"Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Converting 3of9.ttf to 3of9.pfa and 3of9.afm.\n"
+msgstr ""
+"% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf\n"
+"Aladdin Ghostscript 5.10 (1997-11-23)\n"
+"Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved."
+"\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Converting 3of9.ttf to 3of9.pfa and 3of9.afm.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:537
+msgid ""
+"If you want the converted fonts to be stored in [.filename]#A.pfa# and [."
+"filename]#B.afm#, then use this command:"
+msgstr ""
+"Se você quer que as fontes convertidas sejam armazenadas em [.filename]#A."
+"pfa# e [.filename]#B.afm#, use o seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:545
+#, no-wrap
+msgid ""
+"% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B\n"
+"Aladdin Ghostscript 5.10 (1997-11-23)\n"
+"Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved.\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Converting 3of9.ttf to A.pfa and B.afm.\n"
+msgstr ""
+"% gs -dNODISPLAY -- ttf2pf.ps 3of9.ttf A B\n"
+"Aladdin Ghostscript 5.10 (1997-11-23)\n"
+"Copyright (C) 1997 Aladdin Enterprises, Menlo Park, CA. All rights reserved."
+"\n"
+"This software comes with NO WARRANTY: see the file PUBLIC for details.\n"
+"Converting 3of9.ttf to A.pfa and B.afm.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:548
+msgid "Create the groff PostScript file:"
+msgstr "Crie o arquivo groff PostScript:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:552
+msgid ""
+"Change directories to [.filename]#/usr/share/groff_font/devps# so as to make "
+"the following command easier to execute. You will probably need root "
+"privileges for this. (Or, if you are paranoid about working there, make "
+"sure you reference the files [.filename]#DESC#, [.filename]#text.enc# and [."
+"filename]#generate/textmap# as being in this directory.)"
+msgstr ""
+"Acesse o diretório `/usr/share/groff_font/devps` para facilitar a execução "
+"do seguinte comando. É provável que você precise de privilégios de root para "
+"executá-lo. (Ou, se você é paranoico em relação a trabalhar lá, certifique-"
+"se de que os arquivos `DESC`, `text.enc` e `generate/textmap` estejam "
+"localizados neste diretório.)"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:556
+#, no-wrap
+msgid "% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name\n"
+msgstr "% afmtodit -d DESC -e text.enc file.afm generate/textmap PS_font_name\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:560
+msgid ""
+"Where, [.filename]#file.afm# is the _AFM_name_ created by `ttf2pf.ps` above, "
+"and _PS_font_name_ is the font name used from that command, as well as the "
+"name that man:groff[1] will use for references to this font. For example, "
+"assuming you used the first `tiff2pf.ps` above, then the 3of9 Barcode font "
+"can be created using the command:"
+msgstr ""
+"Onde, [.filename]#file.afm# é o _AFM_name_ criado pelo `ttf2pf.ps` acima, e "
+"_PS_font_name_ é o nome da fonte usado no comando anterior, bem como o nome "
+"que man:groff[1] usará para referenciar essa fonte. Por exemplo, assumindo "
+"que você usou o primeiro `tiff2pf.ps` acima, a fonte Barcode 3of9 pode ser "
+"criada usando o comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/fonts/_index.adoc:564
+#, no-wrap
+msgid "% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9\n"
+msgstr "% afmtodit -d DESC -e text.enc 3of9.afm generate/textmap 3of9\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:567
+msgid ""
+"Ensure that the resulting _PS_font_name_ file (e.g., [.filename]#3of9# in "
+"the example above) is located in the directory [.filename]#/usr/share/"
+"groff_font/devps# by copying or moving it there."
+msgstr ""
+"Certifique-se de que o arquivo _PS_font_name_ resultante (por exemplo, [."
+"filename]#3of9# no exemplo acima) esteja localizado no diretório [."
+"filename]#/usr/share/groff_font/devps# movendo ou copiando-o para lá."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:570
+msgid ""
+"Note that if [.filename]#ttf2pf.ps# assigns a font name using the one it "
+"finds in the TrueType font file and you want to use a different name, you "
+"must edit the [.filename]#.afm# prior to running `afmtodit`. This name must "
+"also match the one used in the Fontmap file if you wish to pipe man:groff[1] "
+"into man:gs[1]."
+msgstr ""
+"Observe que, se o [.filename]#ttf2pf.ps# atribuir um nome de fonte usando o "
+"que ele encontra no arquivo de fonte TrueType e você desejar usar um nome "
+"diferente, será necessário editar o arquivo [.filename]#.afm# antes de "
+"executar o `afmtodit`. Este nome também deve corresponder ao usado no "
+"arquivo Fontmap se você quiser redirecionar o man:groff[1] para o man:gs[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:572
+#, no-wrap
+msgid "Can TrueType Fonts be Used with Other Programs?"
+msgstr "As Fontes TrueType Podem ser Usadas com Outros Programas?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:576
+msgid ""
+"The TrueType font format is used by Windows, Windows 95, and Mac's. It is "
+"quite popular and there are a great number of fonts available in this format."
+msgstr ""
+"O formato de fonte TrueType é utilizado pelo Windows, Windows 95 e Mac's. É "
+"bastante popular e há uma grande quantidade de fontes disponíveis neste "
+"formato."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:580
+msgid ""
+"Unfortunately, there are few applications that I am aware of that can use "
+"this format: Ghostscript and Povray come to mind. Ghostscript's support, "
+"according to the documentation, is rudimentary and the results are likely to "
+"be inferior to type 1 fonts. Povray version 3 also has the ability to use "
+"TrueType fonts, but I rather doubt many people will be creating documents as "
+"a series of raytraced pages :-)."
+msgstr ""
+"Infelizmente, há poucos aplicativos que eu conheço que podem usar este "
+"formato: o Ghostscript e o Povray vêm à mente. O suporte do Ghostscript, de "
+"acordo com a documentação, é rudimentar e os resultados provavelmente serão "
+"inferiores aos das fontes type 1. A versão 3 do Povray também tem a "
+"capacidade de usar fontes TrueType, mas eu duvido que muitas pessoas estejam "
+"criando documentos como uma série de páginas renderizadas em raytracing :-)."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:583
+msgid ""
+"This rather dismal situation may soon change. The http://www.freetype.org/"
+"[FreeType Project] is currently developing a useful set of FreeType tools:"
+msgstr ""
+"Essa situação um tanto quanto desanimadora pode mudar em breve. O http://www."
+"freetype.org/[Projeto FreeType] está atualmente desenvolvendo um conjunto de "
+"ferramentas FreeType úteis:"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:585
+msgid ""
+"The `xfsft` font server for X11 can serve TrueType fonts in addition to "
+"regular fonts. Though currently in beta, it is said to be quite usable. See "
+"http://www.dcs.ed.ac.uk/home/jec/programs/xfsft/[Juliusz Chroboczek's page] "
+"for further information. Porting instructions for FreeBSD can be found at "
+"http://math.missouri.edu/~stephen/software/[Stephen Montgomery's software "
+"page]."
+msgstr ""
+"O servidor de fontes `xfsft` para X11 pode servir fontes TrueType além de "
+"fontes regulares. Embora esteja atualmente em beta, é dito que ele é "
+"bastante utilizável. Veja a página de http://www.dcs.ed.ac.uk/home/jec/"
+"programs/xfsft/[Juliusz Chroboczek] para obter mais informações. As "
+"instruções de portabilidade para FreeBSD podem ser encontradas em http://math"
+".missouri.edu/~stephen/software/[página de software de Stephen Montgomery]."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:586
+msgid ""
+"xfstt is another font server for X11, available under link:ftp://sunsite.unc."
+"edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/]."
+msgstr ""
+"xfstt é outro servidor de fontes para X11, disponível em link:ftp://sunsite."
+"unc.edu/pub/Linux/X11/fonts/[ftp://sunsite.unc.edu/pub/Linux/X11/fonts/]."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:587
+msgid ""
+"A program called `ttf2bdf` can produce BDF files suitable for use in an X "
+"environment from TrueType files. Linux binaries are said to be available "
+"from link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu.edu/CLR/"
+"multiling/General/]."
+msgstr ""
+"Um programa chamado `ttf2bdf` pode produzir arquivos BDF adequados para uso "
+"em um ambiente X a partir de arquivos TrueType. Binários para Linux estão "
+"disponíveis em link:ftp://crl.nmsu.edu/CLR/multiling/General/[ftp://crl.nmsu."
+"edu/CLR/multiling/General/]."
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:588
+msgid "and others ..."
+msgstr "e outros..."
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:590
+#, no-wrap
+msgid "Where Can Additional Fonts be Obtained?"
+msgstr "Onde é possível obter fontes adicionais?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:595
+msgid ""
+"Many fonts are available on the Internet. They are either entirely free, or "
+"are share-ware. In addition many fonts are available in the [.filename]#x11-"
+"fonts/# category in the ports collection"
+msgstr ""
+"Muitas fontes estão disponíveis na Internet. Elas são completamente "
+"gratuitas ou são sharewares. Além disso, muitas fontes estão disponíveis na "
+"categoria [.filename]#x11-fonts/# na coleção de ports"
+
+#. type: Title ==
+#: documentation/content/en/articles/fonts/_index.adoc:597
+#, no-wrap
+msgid "Additional Questions"
+msgstr "Questões Adicionais"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:600
+msgid "What use are the [.filename]#.pfm# files?"
+msgstr "Para que servem os arquivos [.filename]#.pfm#?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:601
+msgid ""
+"Can one generate the [.filename]#.afm# from a [.filename]#.pfa# or [."
+"filename]#.pfb#?"
+msgstr ""
+"É possível gerar o arquivo [.filename]#.afm# a partir de um arquivo [."
+"filename]#.pfa# ou [.filename]#.pfb#?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:602
+msgid ""
+"How to generate the groff character mapping files for PostScript fonts with "
+"non-standard character names?"
+msgstr ""
+"Como gerar os arquivos de mapeamento de caracteres do groff para fontes "
+"PostScript com nomes de caracteres não-padrão?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:603
+msgid "Can xditview and devX?? devices be set up to access all the new fonts?"
+msgstr ""
+"É possível configurar o xditview e os dispositivos devX para acessar todas "
+"as novas fontes?"
+
+#. type: Plain text
+#: documentation/content/en/articles/fonts/_index.adoc:603
+msgid ""
+"It would be good to have examples of using TrueType fonts with Povray and "
+"Ghostscript."
+msgstr ""
+"Seria bom ter exemplos de como usar fontes TrueType com o Povray e o "
+"Ghostscript."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/freebsd-questions/_index.adoc b/documentation/content/pt-br/articles/freebsd-questions/_index.adoc
index c20ca695dc..d6e3a22427 100644
--- a/documentation/content/pt-br/articles/freebsd-questions/_index.adoc
+++ b/documentation/content/pt-br/articles/freebsd-questions/_index.adoc
@@ -1,13 +1,15 @@
---
-title: Como obter os melhores resultados da lista de email FreeBSD-questions
authors:
- - author: Greg Lehey
+ -
+ author: 'Greg Lehey'
email: grog@FreeBSD.org
-releaseinfo: "$FreeBSD$"
+description: 'Como obter os melhores resultados da lista de discussão FreeBSD-questions'
+tags: ["questions", "mailing", "FreeBSD"]
+title: 'Como obter os melhores resultados da lista de discussão FreeBSD-questions'
trademarks: ["freebsd", "microsoft", "opengroup", "qualcomm", "general"]
---
-= Como obter os melhores resultados da lista de email FreeBSD-questions
+= Como obter os melhores resultados da lista de discussão FreeBSD-questions
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,22 +18,34 @@ trademarks: ["freebsd", "microsoft", "opengroup", "qualcomm", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/freebsd-questions/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Este documento provê informação para pessoas que desejam mandar um email para a lista de discussão FreeBSD-questions. Avisos e dicas são disponibilizados para maximizar a chance do leitor de receber respostas úteis.
+Este documento fornece informações úteis para pessoas que procuram preparar um e-mail para a lista de discussão FreeBSD-questions. São fornecidos conselhos e dicas que maximizarão a chance de o leitor receber respostas úteis.
-Esse documento é regularmente postado na lista de email FreeBSD-questions.
+Este documento é regularmente postado na lista de discussão FreeBSD-questions.
'''
@@ -39,14 +53,14 @@ toc::[]
== Introdução
-A `FreeBSD-questions` é uma lista de emails mantida pelo Projeto FreeBSD para ajudar pessoas que tenham questões sobre o uso normal do FreeBSD. Outra lista, a `FreeBSD-hackers`, aborda questões mais avançadas tais como desenvolvimentos futuros.
+A `FreeBSD-questions` é uma lista de discussão mantida pelo projeto FreeBSD para ajudar pessoas que têm dúvidas sobre o uso normal do FreeBSD. Outro grupo, `FreeBSD-hackers`, discute questões mais avançadas, como trabalho futuro de desenvolvimento.
[NOTE]
====
-O termo "hacker" não tem nada a ver com invasão de computadores alheios.O termo correto para este tipo de atividade é "cracker", mas a mídia popular e a imprensa não tomou conhecimento deste fato ainda. Os hackers do FreeBSD fortemente desaprovam a atividade de cracking e não se envolvem neste tipo de atividades. Para uma descrição mais abrangente sobre hackers, veja o link de Eric Raymond's http://www.catb.org/~esr/faqs/hacker-howto.html[How To Become A Hacker]
+O termo "hacker" não tem nada a ver com invadir computadores de outras pessoas. O termo correto para essa atividade é "cracker", mas a imprensa popular ainda não descobriu isso. Os hackers do FreeBSD desaprovam fortemente a quebra de segurança e não têm nada a ver com isso. Para uma descrição mais longa de hackers, consulte o http://www.catb.org/~esr/faqs/hacker-howto.html[How To Become A Hacker] de Eric Raymond
====
-Esta é uma mensagem padrão com vistas a ajudar tanto quem busca ajuda na lista FreeBSD-questions (os "novatos"), quanto quem responde às questões (os "hackers").
+Este é uma mensagem regular destinada a ajudar tanto aqueles que buscam conselhos da FreeBSD-questions (os "novatos"), quanto aqueles que respondem às perguntas (os "hackers").
Inevitavelmente sempre existe algum atrito, o qual deriva dos diferentes pontos de vista dos dois grupos. Os novatos acusam os hackers de serem arrogantes, orgulhosos e não ajudarem, enquanto os hackers acusam os novatos de serem burros, incapazes de lerem textos em simples Português, e esperarem que tudo seja dado a eles em uma bandeja de prata. Claro que há algum elemento de verdade em cada um dos discursos, mas normalmente estes pontos de vista são frutos de algum tipo de frustração.
@@ -54,137 +68,88 @@ Nesse documento, eu desejo fazer algo para aliviar essa frustração e ajudar to
== Como se Inscrever na FreeBSD-questions
-A FreeBSD-questions é uma lista de email, então você precisa de uma conta de email. Aponte o seu navegador Web para a http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[página de informações da lista FreeBSD-questions]. Na seção entitulada "Inscrevendo-se na freebsd-questions" preencha o campo "Seu endereço de email"; os demais campos são opcionais.
-
-[NOTE]
-====
-O campo para senha no formulário de inscrição proporciona somente uma segurança moderada, mas deve evitar que outros enviem mensagens usando sua conta. _Não use uma senha importante para você_ pois ela eventualmente poderá ser enviada para você por email em texto plano.
-====
+A FreeBSD-questions é uma lista de discussão, portanto, você precisa de acesso a uma conta de e-mail. Aponte seu navegador WWW para {freebsd-questions}. Na seção intitulada "Inscreva-se ou cancele a inscrição on-line", preencha o campo "Seu endereço de e-mail" e clique em "Inscrever-se". Ou envie um e-mail para freebsd-questions+subscribe@freebsd.org.
-Você receberá uma mensagem de confirmação do mailman; siga as instruções incluídas na mensagem para completar sua inscrição.
-
-Finalmente, quando você receber a mensagem de "Boas-vindas" do mailman informando os detalhes da lista e a senha para acesso à área restrita, __por favor salve-a__. Se você algum dia desejar sair da lista, você necessitará das informações contidas nesta mensagem. Veja a próxima seção para mais detalhes.
+Você receberá uma mensagem de confirmação do mlmmj; siga as instruções incluídas para concluir sua inscrição.
== Como sair da lista FreeBSD-questions
-Quando você se inscreve na lista FreeBSD-questions, você recebe uma mensagem de boas-vindas do mailman. Nessa mensagem, dentre outras coisas, é informado como sair da lista. Segue um exemplo desta mensagem:
-
-....
-Bem-vindo à lista de discussão freebsd-questions@freebsd.org!
-
-Para enviar uma mensagem para esta lista, mande seu email para:
-
- freebsd-questions@freebsd.org
-
-Informações gerais sobre a lista estão em:
-
- https://lists.freebsd.org/mailman/listinfo/freebsd-questions
-
-Se você eventualmente desejar sair da lista ou alterar suas opções (ex. mudar
-para o modo resumo diário ou para sair dele, mudar senha, etc.) visite sua página de
-inscrição em:
-
-https://lists.freebsd.org/mailman/options/freebsd-questions/grog%40lemsi.de
-
-Você pode também fazer estes ajustes por email, enviando uma mensagem para:
-
- freebsd-questions-request@freebsd.org
-
-com a palavra 'help' no campo assunto ou no corpo da mensagem (não inclua
-as aspas), e você receberá uma mensagem com instruções.
+Aponte seu navegador WWW para {freebsd-questions}. Na seção intitulada "Inscreva-se ou cancele a inscrição on-line", preencha o campo "Seu endereço de e-mail" e clique em "Cancelar inscrição". Ou envie um e-mail para freebsd-questions+unsubscribe@freebsd.org.
-Você precisa saber sua senha para alterar as opções (incluindo alterar a
-própria senha) ou para sair da lista. Ela é:
+Uma mensagem de confirmação será enviada a você pelo mlmmj; siga as instruções incluídas para concluir o cancelamento da inscrição.
- 12345
-
-Normalmente, Mailman lembrará você de sua senha na lista do freebsd.org
-uma vez por mês, mas você pode desabilitar isto se assim desejar. Este
-lembrete também incluirá instruções de como sair da lista ou alterar
-suas preferências de conta. Há também um botão na sua página de opções
-que enviará sua senha atual para você.
-....
-
-A partir da URL informada na sua mensagem de "Boas-vindas" você pode visitar a "Página de gerenciamento da sua conta" e fazer uma requisição para "Sair" da lista FreeBSD-questions.
-
-Uma mensagem de confirmação será enviada para você pelo mailman; siga as instruções contidas na mensagem para finalizar o desligamento da lista.
-
-Se você já fez isso, e ainda não conseguiu entender o que está havendo, mande uma mensagem para mailto:freebsd-questions-request@FreeBSD.org[freebsd-questions-request@FreeBSD.org], e eles irão resolver as coisas para você. _Não envie_ uma mensagem para a FreeBSD-questions: eles não podem ajudá-lo.
-
-== Devo perguntar na lista `-questions` ou na `-hackers`?
+== Devo enviar minha pergunta para a lista `-questions` ou `-hackers`?
Duas listas de discussão abordam questões gerais sobre o FreeBSD, `FreeBSD-questions` e `FreeBSD-hackers`. Em alguns casos, não é realmente claro para qual lista você deve enviar sua pergunta. Entretanto, os seguintes critérios devem ajudar em 99% de todas as perguntas:
-. Se a questão é genérica, pergunte na `FreeBSD-questions`. Como exemplo temos questões sobre a instalação do FreeBSD ou o uso de uma ferramenta doUNIX(R).
-. Se você acredita que a pergunta está relacionada a um bug, mas não tem certeza disso, ou você não sabe como pesquisar sobre isso, mande a mensagem para a lista `FreeBSD-questions`.
-. Se você acredita que a pergunta está relacionada com um bug, e você tem _certeza_ que é um bug (por exemplo, você pode apontar o lugar do código onde isso acontece, e você poder ter uma correção para o problema), então envie a mensagem para a lista `FreeBSD-hackers`.
-. Se a questão envolve melhoramentos no FreeBSD, e você pode sugerir em como isto pode ser implementado, então mande a menssagem para a lista `FreeBSD-hackers`.
+. Se a pergunta for de natureza geral, pergunte na lista de discussão `FreeBSD-questions`. Exemplos podem ser perguntas sobre a instalação do FreeBSD ou o uso de uma determinada ferramenta UNIX(R).
+. Se você acha que a pergunta se relaciona a um bug, mas não tem certeza ou não sabe como procurá-lo, envie a mensagem para `FreeBSD-questions`.
+. Se a pergunta se relacionar a um bug, e você _tiver certeza_ de que é um bug (por exemplo, você pode apontar o local no código onde ocorre e talvez tenha uma solução), envie a mensagem para `FreeBSD-hackers`.
+. Se a pergunta se relaciona a melhorias no FreeBSD, e você pode fazer sugestões sobre como implementá-las, envie a mensagem para `FreeBSD-hackers`.
-Há também uma boa quantidade de link:{handbook}#eresources-mail[listas de email especializadas], que atendem interesses mais específicos. O critério acima ainda se aplica, e é interessante que você o siga, pois há mais chance de você obter melhores resultados desta forma.
+Existem também várias outras listas de discussão extref:{handbook}[especializadas, eresources-mail], que atendem a interesses mais específicos. Os critérios acima ainda se aplicam, e é do seu interesse segui-los, já que é mais provável que você obtenha bons resultados dessa maneira.
== Antes de Enviar uma Pergunta
-Você pode (e deve) fazer algumas coisas você mesmo antes de fazer uma pergunta em uma das listas de discussão:
+Antes de fazer uma pergunta em uma das listas de discussão, você pode (e deve) fazer algumas coisas por conta própria:
-* Tente resolver o problema sozinho. Se você enviar uma pergunta que demonstre que você tentou resolver o problema, sua mensagem vai normalmente atrair mais atenção de uma forma positiva das pessoas que a leram. Tentar resolver o problema sozinho também vai aumentar seu entendimento do FreeBSD, e eventualmente vai proporcionar conhecimento para você poder responder perguntas de outros usuários das listas e também ajudar.
-* Leia as páginas dos manuais, e a documentação do FreeBSD (tanto a instalada em [.filename]#/usr/doc# ou a versão acessível via Web em http://www.FreeBSD.org[http://www.FreeBSD.org]), especialmente o link:{handbook}[handbook] e o link:{faq}[FAQ].
-* Procure e/ou pesquise nos arquivos da lista de discussão, para verificar se a sua pergunta ou uma pergunta semelhante já foi feita (e possivelmente respondida) antes na lista. Você pode navegar e/ou pesquisar os arquivos da lista de discussão em https://www.FreeBSD.org/mail[https://www.FreeBSD.org/mail] e https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists], respectivamente. Isso pode ser feito em outros sites da Web, como por exemplo, em http://marc.theaimsgroup.com[http://marc.theaimsgroup.com].
-* Use um mecanismo de pesquisa como o http://www.google.com[Google] ou http://www.yahoo.com[Yahoo] para encontrar respostas para a sua pergunta.
+* Tente resolver o problema por conta própria. Se você postar uma pergunta que mostre que você tentou resolver o problema, sua pergunta geralmente atrairá mais atenção positiva das pessoas que a lerem. Tentar resolver o problema por si só também aumentará sua compreensão do FreeBSD e eventualmente permitirá que você use seu conhecimento para ajudar os outros, respondendo perguntas postadas nas listas de discussão.
+* Leia as páginas do manual e a documentação do FreeBSD (instaladas em [.filename]#/usr/doc# ou acessíveis via WWW em http://www.FreeBSD.org[http://www.FreeBSD.org]), especialmente o extref:{handbook}[Handbook] e o extref:{faq}[FAQ].
+* Pesquise nos arquivos da lista de discussão para ver se sua pergunta ou uma semelhante já foi feita (e possivelmente respondida) na lista. Você pode navegar e/ou pesquisar os arquivos da lista de discussão em https://www.FreeBSD.org/mail[https://www.FreeBSD.org/mail] e https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists], respectivamente. Isso também pode ser feito em outros sites da WWW, por exemplo, em http://marc.theaimsgroup.com[http://marc.theaimsgroup.com].
+* Use um mecanismo de pesquisa, como o http://www.google.com[Google] ou http://www.yahoo.com[Yahoo], para encontrar respostas para sua pergunta.
== Como Enviar uma Pergunta
Quando for enviar uma pergunta para a lista FreeBSD-questions, considere as seguintes diretivas:
-* Lembre-se que ninguém é pago por responder uma pergunta sobre o FreeBSD. Eles fazem isso por vontade própria. Você pode influenciar positivamente esse livre arbítrio enviando uma pergunta bem formulada, fornecendo o máximo possível de informações relevantes. Você pode influenciar esse livre arbítrio negativamente enviando uma pergunta incompleta, ilegível ou grosseira. É perfeitamente possível enviar uma mensagem para a lista FreeBSD-questions e não obter uma resposta, mesmo que você siga estas regras. É muito mais fácil não obter uma resposta se você não o fizer. No restante deste documento, veremos como tirar o máximo proveito de uma pergunta para a FreeBSD-questions.
+* Lembre-se de que ninguém recebe remuneração para responder a uma pergunta sobre o FreeBSD. Eles fazem isso por vontade própria. Você pode influenciar positivamente essa vontade enviando uma pergunta bem formulada, fornecendo o máximo de informações relevantes possível. Você pode influenciar negativamente essa vontade enviando uma pergunta incompleta, ilegível ou rude. É perfeitamente possível enviar uma mensagem para a FreeBSD-questions e não obter uma resposta, mesmo se você seguir essas regras. É muito mais possível não obter uma resposta se você não seguir. No restante deste documento, veremos como obter o máximo da sua pergunta para o FreeBSD-questions.
* Nem todo mundo que responde as perguntas sobre o FreeBSD lê todas as mensagens: eles olham para o assunto e decidem se isso lhes interessa. Claramente, é do seu interesse especificar um assunto. Assuntos como "Problema do FreeBSD" ou "Ajuda" não são suficientes. Se você não fornecer nenhum assunto, muitas pessoas não se incomodarão em lê-lo. Se o seu assunto não for específico o suficiente, as pessoas que podem responder sua pergunta podem não ler sua mensagem.
* Formate a sua mensagem para que ela fique legível e, POR FAVOR, NÃO GRITE !!!!! Nós apreciamos que muitas pessoas não falam inglês como sua primeira língua, e tentamos fazer concessões para isso, mas é realmente doloroso tentar ler uma mensagem escrita com erros de digitação ou sem quebras de linha.
-+
-Não subestime o efeito que uma mensagem de correio mal formatada tem, não apenas na lista de discussão FreeBSD-questions. Sua mensagem de e-mail é o que todas as pessoas vêem de você, e se estiver mal formatada, uma linha por parágrafo, mal grafada ou cheia de erros, isso dará às pessoas uma má impressão sobre você.
-+
-Muitas mensagens mal formatadas vêm de http://www.lemis.com/email.html[clientes de email ruins ou mal-configurados]. Os seguintes clientes de email são conhecidos por enviar mensagens mal formatadas sem que você saiba sobre elas:
++
+Não subestime o efeito que uma mensagem de correio mal formatada tem, não apenas na lista de discussão FreeBSD-questions. Sua mensagem de e-mail é tudo o que todas as pessoas vêem de você, e se estiver mal formatada, uma linha por parágrafo, mal grafada ou cheia de erros, isso dará às pessoas uma má impressão sobre você.
++
+Muitas mensagens mal formatadas são provenientes de http://www.lemis.com/email.html[programas de e-mail mal configurados ou com configurações ruins]. Os seguintes programas de e-mail são conhecidos por enviar mensagens mal formatadas sem que você saiba:
-** Eudora(R)
** exmh
** Microsoft(R) Exchange
** Microsoft(R) Outlook(R)
-
-+
-Tente não usar MIME: muitas pessoas usam clientes de email que não se dão muito bem com MIME.
-* Verifique se seu horário e fuso horário estão definidos corretamente. Isso pode parecer um pouco bobo, já que sua mensagem ainda será distribuída, mas muitas das pessoas que você está tentando alcançar recebem várias centenas de mensagens por dia. Eles frequentemente classificam as mensagens recebidas por assunto e por data, e se a sua mensagem não vem antes da primeira resposta, eles podem assumir que eles perderam e não se darão ao trabalho de procurar.
++
+Tente não usar MIME: muitas pessoas usam clientes de e-mail que não lidam bem com MIME.
+* Verifique se seu horário e fuso horário estão definidos corretamente. Isso pode parecer um pouco bobo, já que sua mensagem ainda será distribuída, mas muitas das pessoas que você está tentando alcançar recebem várias centenas de mensagens por dia. Eles frequentemente classificam as mensagens recebidas por assunto e por data, e se a sua mensagem não vem antes da primeira resposta, eles podem assumir que eles a perderam e não se darão ao trabalho de procurar.
* Não inclua perguntas não relacionadas na mesma mensagem. Em primeiro lugar, uma mensagem longa tende a assustar as pessoas e, em segundo lugar, é mais difícil conseguir que todas as pessoas que podem responder a todas as perguntas leiam a mensagem.
* Especifique o máximo de informação possível. Essa é uma área difícil, precisamos expandir e detalhar melhor quais informações você precisa enviar, mas aqui está um começo:
-** Em quase todos os casos, é importante conhecer a versão do FreeBSD que você está executando. Este é particularmente o caso do FreeBSD-CURRENT, onde você também deve especificar a data do código fonte, embora, obviamente, você não deva enviar perguntas sobre -CURRENT para a FreeBSD-questions.
-** Com qualquer problema que _possa_ ser relacionado a hardware, informe-nos sobre o seu hardware. Em caso de dúvida, suponha que seja possível que seja hardware. Que tipo de CPU você está usando? Quão rápido? Qual placa-mãe? Quanta memória? Quais periféricos?
-+
-Há uma chamada de julgamento aqui, é claro, mas a saída do comando man:dmesg[8] frequentemente pode ser muito útil, já que não apenas informa qual hardware você está executando, mas qual a versão do FreeBSD também.
-** Se você receber mensagens de erro, não diga "eu recebo mensagens de erro", diga (por exemplo) " eu recebo a mensagem de erro 'No route to host'".
-** Se o seu sistema entrar em panic, não diga "Meu sistema entrou em panic", diga (por exemplo) "meu sistema entrou em panic com a mensagem 'free vnode isn't'".
-** Se você tiver dificuldades em instalar o FreeBSD, por favor, nos diga qual hardware você possui. Em particular, é importante conhecer os IRQs e os endereços de I/O das placas instaladas em sua máquina.
-** Se você tiver dificuldade em executar o PPP, descreva a configuração. Qual versão do PPP você usa? Que tipo de autenticação você tem? Você tem um endereço IP estático ou dinâmico? Que tipo de mensagens você recebe no arquivo de log?
+** Em quase todos os casos, é importante saber a versão do FreeBSD que você está executando. Isso é particularmente importante para o FreeBSD-CURRENT, onde você também deve especificar a data das fontes, embora, é claro, você não deva enviar perguntas sobre o -CURRENT para o FreeBSD-questions.
+** Com qualquer problema que _pode_ estar relacionado ao hardware, informe-nos sobre seu hardware. Em caso de dúvida, assuma que é possível que seja um problema de hardware. Que tipo de CPU você está usando? Quão rápida? Qual placa-mãe? Quanta memória? Quais periféricos?
++
+Há um julgamento envolvido aqui, é claro, mas a saída do comando man:dmesg[8] frequentemente pode ser muito útil, pois não apenas informa qual hardware você está usando, mas também qual versão do FreeBSD.
+** Se você receber mensagens de erro, não diga "Eu recebo mensagens de erro", diga (por exemplo) "Eu recebo a mensagem de erro 'No route to host'".
+** Se o seu sistema "panica", não diga "Meu sistema "panica", diga (por exemplo) "Meu sistema "panica" com a mensagem 'free vnode isn't'".
+** Se você tiver dificuldade para instalar o FreeBSD, informe-nos sobre o seu hardware. É especialmente importante saber os IRQs e os endereços I/O das placas instaladas em sua máquina.
+** Caso você esteja com dificuldades para executar o PPP, descreva a configuração utilizada. Qual versão do PPP está sendo utilizada? Que tipo de autenticação está sendo utilizada? O endereço IP é estático ou dinâmico? Que tipo de mensagens aparecem no arquivo de log?
-* Muitas das informações que você precisa fornecer são a saída de programas, como man:dmesg[8], ou mensagens do console, que geralmente aparecem em [.filename]#/var/log/messages#. Não tente copiar essa informação digitando-a novamente; é um sofrimento real e você está fadado a cometer um erro. Para enviar o conteúdo do arquivo de log, faça uma cópia do arquivo e use um editor para reduzir as informações apenas ao que for relevantes ou copie e cole na sua mensagem. Para a saída de programas como man:dmesg[8], redirecione a saída para um arquivo e inclua-o. Por exemplo,
+* Muitas das informações que você precisa fornecer são a saída de programas, como o man:dmesg[8], ou mensagens de console, que geralmente aparecem no arquivo [.filename]#/var/log/messages#. Não tente copiar essa informação digitando-a novamente; isso é realmente difícil e você provavelmente cometerá um erro. Para enviar o conteúdo do arquivo de log, faça uma cópia do arquivo e use um editor para selecionar apenas as informações relevantes, ou copie e cole na sua mensagem. Para a saída de programas como o man:dmesg[8], redirecione a saída para um arquivo e inclua esse arquivo. Por exemplo,
+
-[source,shell]
+[source, shell]
....
% dmesg > /tmp/dmesg.out
....
-+
++
Isto redireciona a informação para o arquivo [.filename]#/tmp/dmesg.out#.
-* Se você fizer tudo isso e ainda não obtiver uma resposta, pode haver outras razões. Por exemplo, o problema é tão complicado que ninguém sabe a resposta, ou a pessoa que sabe a resposta estava offline. Se você não obtiver uma resposta depois de, digamos, uma semana, pode ajudar se você reenviar a mensagem. Se você não obtiver uma resposta para sua segunda mensagem, provavelmente não obterá uma deste fórum. Reenviar a mesma mensagem de novo e de novo só o tornará impopular.
+* Se você fizer tudo isso e ainda assim não receber uma resposta, pode haver outras razões. Por exemplo, o problema pode ser tão complicado que ninguém sabe a resposta, ou a pessoa que sabe a resposta estava offline. Se você não receber uma resposta após, digamos, uma semana, pode ser útil reenviar a mensagem. No entanto, se você não receber uma resposta para sua segunda mensagem, provavelmente não receberá uma resposta neste fórum. Reenviar a mesma mensagem várias vezes só fará com que você fique impopular.
-Para resumir, vamos supor que você saiba a resposta para a seguinte pergunta (sim, é a mesma em cada caso). Você escolhe qual destas duas perguntas você estaria mais preparado para responder:
+Para resumir, vamos supor que você saiba a resposta para a seguinte pergunta (sim, é a mesma em cada caso). Você escolhe qual dessas duas perguntas você estaria mais preparado para responder:
.Mensagem 1
[example]
====
....
-Subject: HELP!!?!??
-I just can't get hits damn silly FereBSD system to
-workd, and Im really good at this tsuff, but I have never seen
-anythign sho difficult to install, it jst wont work whatever I try
-so why don't you guys tell me what I doing wrong.
+Assunto: AJUDA!!?!??
+Eu simplesmente não consigo fazer esse maldito sistema FreeBSD
+funcionar, e eu sou realmente bom nisso, mas nunca vi nada tão
+difícil de instalar, não importa o que eu tente, simplesmente não
+funciona. Por que vocês não me dizem o que estou fazendo de errado?
....
====
@@ -193,24 +158,23 @@ so why don't you guys tell me what I doing wrong.
====
....
-Subject: Problems installing FreeBSD
-
-I've just got the FreeBSD 2.1.5 CDROM from Walnut Creek, and I'm having a lot
-of difficulty installing it. I have a 66 MHz 486 with 16 MB of
-memory and an Adaptec 1540A SCSI board, a 1.2GB Quantum Fireball
-disk and a Toshiba 3501XA CDROM drive. The installation works just
-fine, but when I try to reboot the system, I get the message
-Missing Operating System.
+Assunto: Problemas na instalação do FreeBSD
+
+Acabei de receber o CD-ROM do FreeBSD 2.1.5 da Walnut Creek e estou tendo
+muita dificuldade para instalá-lo. Tenho um 486 de 66 MHz com 16 MB de memória
+e uma placa SCSI Adaptec 1540A, um disco Quantum Fireball de 1,2 GB e uma unidade
+de CD-ROM Toshiba 3501XA. A instalação funciona muito bem, mas quando tento reiniciar
+o sistema, recebo a mensagem "Sistema Operacional Ausente".
....
====
-== Como Acompanhar uma Pergunta
+== Como fazer o acompanhamento de uma pergunta
-Algumas vezes você vai querer mandar informação adicional para uma questão que você já enviou. A melhor maneira de fazer isso é responder a sua própria mensagem original. Isto tem três vantagens:
+Muitas vezes, você desejará enviar informações adicionais para uma pergunta que já enviou. A melhor maneira de fazer isso é responder à sua mensagem original. Isso tem três vantagens:
. Você inclui o texto da mensagem original, assim as pessoas saberão do que você está falando. Não esqueça de retirar texto desnecessário.
. O texto no campo do assunto permanece o mesmo (você lembrou de colocar o assunto, não foi?). Muitos aplicativos ordenarão as mensagens pelo assunto. Isto ajuda o agrupamento de mensagens.
-. Os números de referência da mensagem no cabeçalho se referem à mensagem anterior. Alguns mailers, como o http://www.mutt.org/[mutt], podem agrupar as mensagens em __thread__, mostrando as relações exatas entre as mensagens.
+. Os números de referência da mensagem no cabeçalho se referirão à mensagem anterior. Alguns programas de e-mail, como o http://www.mutt.org/[mutt], podem _agrupar_ as mensagens, mostrando as relações exatas entre as mensagens.
== Como Responder uma Pergunta
@@ -218,18 +182,18 @@ Antes de responder uma pergunta na FreeBSD-questions, considere:
. Muitas das diretivas usadas quando se está para escrever uma questão também são válidas para respondê-las. Leia-as.
. Alguém já respondeu à pergunta? A maneira mais fácil de conferir isto é ordenando as mensagens recebidas pelo assunto: então (esperançosamente) você verá a pergunta seguida pelas respectivas respostas, todas juntas.
-+
++
Se alguém já respondeu, isso não significa automaticamente que você não deve enviar outra resposta. Mas faz sentido ler todas as outras respostas primeiro.
-. Você tem algo para contribuir além do que já foi dito? Em geral, as respostas do tipo "Sim, eu também" não ajudam muito, embora haja exceções, como quando alguém está descrevendo um problema que está tendo, e não sabe se é culpa dela ou se existe algo de errado com o hardware ou software. Se você for enviar uma resposta do tipo "eu também", você também deverá incluir outras informações relevantes.
-. Tem certeza de que entendeu a pergunta? Muito freqüentemente, a pessoa que faz a pergunta é confusa ou não se expressa muito bem. Mesmo com o melhor entendimento do sistema, é fácil enviar uma resposta que não responde à pergunta. Isso não ajuda: você deixará a pessoa que enviou a pergunta ainda mais frustrada ou confusa do que nunca. Se ninguém mais responder e você também não tiver certeza, você sempre poderá pedir mais informações.
-. Tem certeza de que sua resposta está correta? Se não, espere um dia ou mais. Se ninguém mais aparecer com uma resposta melhor, você ainda pode responder e dizer, por exemplo, "Eu não sei se isso está correto, mas como ninguém mais respondeu, por que você não tenta substituir seu CDROM ATAPI com por sapo?".
-. A menos que haja uma boa razão para fazer o contrário, responda ao remetente e para a FreeBSD-questions. Muitas pessoas na FreeBSD-questions são "lurkers": elas aprendem lendo mensagens enviadas e respondidas por outras pessoas. Se você tirar uma mensagem que é de interesse geral da lista, você está privando essas pessoas de suas informações. Tenha cuidado com as respostas para grupo; Muitas pessoas enviam mensagens com centenas de CCs. Se este for o caso, certifique-se de reduzir as linhas Cc: apropriadamente.
-. Incluir texto relevante da mensagem original. Reduza ao mínimo, mas não exagere. O conteúdo original remanescente ainda deve possibilitar à alguém que não leu a mensagem original entender do que você está falando.
-. Use alguma técnica para identificar qual texto veio da mensagem original e qual texto você adicionou. Eu pessoalmente acho que a adição do "`>`" no inicio da mensagem original funciona bem. Deixando espaço em branco após o "`>`" e deixar linhas vazias entre o seu texto e o texto original, ambos tornam o resultado mais legível.
+. Você tem algo a acrescentar além do que já foi dito? Em geral, respostas como "Sim, eu também" não ajudam muito, embora existam exceções, como quando alguém está descrevendo um problema que está tendo e não sabe se é culpa dele ou se há algo de errado com o hardware ou software. Se você enviar uma resposta do tipo "eu também", lembre-se de incluir qualquer informação adicional relevante.
+. Você tem certeza de que entendeu a pergunta? Com muita frequência, a pessoa que faz a pergunta está confusa ou não se expressa muito bem. Mesmo com o melhor entendimento do sistema, é fácil enviar uma resposta que não responda à pergunta. Isso não ajuda: você deixará a pessoa que fez a pergunta mais frustrada ou confusa do que nunca. Se ninguém mais responder e você também não tiver certeza, sempre pode pedir mais informações.
+. Você tem certeza de que sua resposta está correta? Se não tiver certeza, espere um dia ou mais. Se ninguém mais apresentar uma resposta melhor, você ainda pode responder e dizer, por exemplo, "Não tenho certeza se isso está correto, mas como ninguém mais respondeu, por que você não tenta substituir seu CD-ROM ATAPI por um sapo?".
+. A menos que haja uma boa razão para fazer o contrário, responda ao remetente e à FreeBSD-questions. Muitas pessoas em FreeBSD-questions são "espectadores": elas aprendem lendo as mensagens enviadas e respondidas por outros. Se você tirar uma mensagem de interesse geral da lista, estará privando essas pessoas de suas informações. Tenha cuidado com as respostas em grupo; muitas pessoas enviam mensagens com centenas de CCs. Se esse for o caso, certifique-se de cortar as linhas de Cc: apropriadamente.
+. Inclua o texto relevante da mensagem original. Corte-o ao mínimo, mas não exagere. Deve ainda ser possível para alguém que não leu a mensagem original entender sobre o que você está falando.
+. Use alguma técnica para identificar qual texto veio da mensagem original e qual texto você adicionou. Pessoalmente, acho que adicionar um "`>`" na frente da mensagem original funciona melhor. Deixar um espaço em branco depois do "`> ;`" e deixar linhas vazias entre seu texto e o texto original torna o resultado mais legível.
. Coloque sua resposta no lugar correto (após o texto ao qual ela se refere). É muito difícil ler um encadeamento de respostas em que cada resposta vem antes do texto ao qual ela se refere.
-. A maioria dos programas de email mudam a linha do assunto em um resposta , adicionando no início desta um texto do tipo "Re:". Se seu programa não faz isso automaticamente, você deve fazer manualmente.
-. Se o remetente não respeitar as convenções de formato (linhas muito longas, linha de assunto imprópria), _por favor_ conserte-o. No caso de uma linha de assunto incorreta (como " HELP !! ?? "), mude a linha de assunto para (digamos) "Re: Dificuldades com a sincronização PPP (era: HELP !! ??)". Dessa forma, outras pessoas que tentam seguir o tópico terão menos dificuldade em segui-lo.
-+
-Nesses casos, é apropriado falar o que você fez e porque o fez, mas tente fazê-lo de forma a não ser rude. Se você notar que não consegue responder de uma forma que não seja rude, não responda.
-+
-Se você quer responder a uma mensagem somente pelo seu formato inadequado, responda-a somente para quem a enviou, não à lista. Você pode simplesmente enviar esta mensagem em resposta, se quiser.
+. A maioria dos programas de email altera a linha de assunto em uma resposta adicionando um texto como "Re: ". Se o seu programa de email não fizer isso automaticamente, você deve fazê-lo manualmente.
+. Se o autor da pergunta não seguir as convenções de formato (linhas muito longas, assunto inapropriado), _por favor_ corrija-o. No caso de uma linha de assunto incorreta (como "AJUDA!!??"), altere a linha de assunto para (por exemplo) "Re: Dificuldades com PPP de sincronização (era: AJUDA!!??)". Dessa forma, outras pessoas que tentam seguir a discussão terão menos dificuldade em acompanhá-la.
++
+Nesses casos, é apropriado dizer o que você fez e por que fez, mas tente não ser rude. Se você descobrir que não consegue responder sem ser rude, não responda.
++
+Se você quiser apenas responder a uma mensagem por causa do seu formato ruim, apenas responda ao autor da mensagem, não para a lista. Você pode simplesmente enviar esta mensagem para ele em resposta, se desejar.
diff --git a/documentation/content/pt-br/articles/freebsd-questions/_index.po b/documentation/content/pt-br/articles/freebsd-questions/_index.po
new file mode 100644
index 0000000000..c7b52115e0
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-questions/_index.po
@@ -0,0 +1,965 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-24 18:31+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfreebsd-questions_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:1
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:11
+#, no-wrap
+msgid "How to get Best Results from the FreeBSD-questions Mailing List"
+msgstr ""
+"Como obter os melhores resultados da lista de discussão FreeBSD-questions"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:47
+msgid ""
+"This document provides useful information for people looking to prepare an e-"
+"mail to the FreeBSD-questions mailing list. Advice and hints are given that "
+"will maximize the chance that the reader will receive useful replies."
+msgstr ""
+"Este documento fornece informações úteis para pessoas que procuram preparar "
+"um e-mail para a lista de discussão FreeBSD-questions. São fornecidos "
+"conselhos e dicas que maximizarão a chance de o leitor receber respostas "
+"úteis."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:49
+msgid ""
+"This document is regularly posted to the FreeBSD-questions mailing list."
+msgstr ""
+"Este documento é regularmente postado na lista de discussão FreeBSD-"
+"questions."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:51
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:54
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:58
+msgid ""
+"`FreeBSD-questions` is a mailing list maintained by the FreeBSD project to "
+"help people who have questions about the normal use of FreeBSD. Another "
+"group, `FreeBSD-hackers`, discusses more advanced questions such as future "
+"development work."
+msgstr ""
+"A `FreeBSD-questions` é uma lista de discussão mantida pelo projeto FreeBSD "
+"para ajudar pessoas que têm dúvidas sobre o uso normal do FreeBSD. Outro "
+"grupo, `FreeBSD-hackers`, discute questões mais avançadas, como trabalho "
+"futuro de desenvolvimento."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:65
+msgid ""
+"The term \"hacker\" has nothing to do with breaking into other people's "
+"computers. The correct term for the latter activity is \"cracker\", but the "
+"popular press has not found out yet. The FreeBSD hackers disapprove "
+"strongly of cracking security, and have nothing to do with it. For a longer "
+"description of hackers, see Eric Raymond's http://www.catb.org/~esr/faqs/"
+"hacker-howto.html[How To Become A Hacker]"
+msgstr ""
+"O termo \"hacker\" não tem nada a ver com invadir computadores de outras "
+"pessoas. O termo correto para essa atividade é \"cracker\", mas a imprensa "
+"popular ainda não descobriu isso. Os hackers do FreeBSD desaprovam "
+"fortemente a quebra de segurança e não têm nada a ver com isso. Para uma "
+"descrição mais longa de hackers, consulte o http://www.catb.org/~esr/faqs/"
+"hacker-howto.html[How To Become A Hacker] de Eric Raymond"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:68
+msgid ""
+"This is a regular posting aimed to help both those seeking advice from "
+"FreeBSD-questions (the \"newcomers\"), and also those who answer the "
+"questions (the \"hackers\")."
+msgstr ""
+"Este é uma mensagem regular destinada a ajudar tanto aqueles que buscam "
+"conselhos da FreeBSD-questions (os \"novatos\"), quanto aqueles que "
+"respondem às perguntas (os \"hackers\")."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:72
+msgid ""
+"Inevitably there is some friction, which stems from the different viewpoints "
+"of the two groups. The newcomers accuse the hackers of being arrogant, "
+"stuck-up, and unhelpful, while the hackers accuse the newcomers of being "
+"stupid, unable to read plain English, and expecting everything to be handed "
+"to them on a silver platter. Of course, there is an element of truth in "
+"both these claims, but for the most part these viewpoints come from a sense "
+"of frustration."
+msgstr ""
+"Inevitavelmente sempre existe algum atrito, o qual deriva dos diferentes "
+"pontos de vista dos dois grupos. Os novatos acusam os hackers de serem "
+"arrogantes, orgulhosos e não ajudarem, enquanto os hackers acusam os novatos "
+"de serem burros, incapazes de lerem textos em simples Português, e esperarem "
+"que tudo seja dado a eles em uma bandeja de prata. Claro que há algum "
+"elemento de verdade em cada um dos discursos, mas normalmente estes pontos "
+"de vista são frutos de algum tipo de frustração."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:75
+msgid ""
+"In this document, I would like to do something to relieve this frustration "
+"and help everybody get better results from FreeBSD-questions. In the "
+"following section, I recommend how to submit a question; after that, we will "
+"look at how to answer one."
+msgstr ""
+"Nesse documento, eu desejo fazer algo para aliviar essa frustração e ajudar "
+"todos a obterem melhores resultados da FreeBSD-questions. Na próxima seção, "
+"eu recomendo como enviar uma pergunta; depois disso, veremos como responder "
+"a uma."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:76
+#, no-wrap
+msgid "How to Subscribe to FreeBSD-questions"
+msgstr "Como se Inscrever na FreeBSD-questions"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:82
+msgid ""
+"FreeBSD-questions is a mailing list, so you need mail access. Point your "
+"WWW browser to the {freebsd-questions}. In the section titled \"Subscribe "
+"or unsubscribe online\" fill in the \"Your email address\" field and hit "
+"\"Subscribe\". Or send an email to freebsd-questions+subscribe@freebsd.org."
+msgstr ""
+"A FreeBSD-questions é uma lista de discussão, portanto, você precisa de "
+"acesso a uma conta de e-mail. Aponte seu navegador WWW para {freebsd-"
+"questions}. Na seção intitulada \"Inscreva-se ou cancele a inscrição on-"
+"line\", preencha o campo \"Seu endereço de e-mail\" e clique em \"Inscrever-"
+"se\". Ou envie um e-mail para freebsd-questions+subscribe@freebsd.org."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:84
+msgid ""
+"You will receive a confirmation message from mlmmj; follow the included "
+"instructions to complete your subscription."
+msgstr ""
+"Você receberá uma mensagem de confirmação do mlmmj; siga as instruções "
+"incluídas para concluir sua inscrição."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:85
+#, no-wrap
+msgid "How to Unsubscribe from FreeBSD-questions"
+msgstr "Como sair da lista FreeBSD-questions"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:90
+msgid ""
+"Point your WWW browser to the {freebsd-questions}. In the section titled "
+"\"Subscribe or unsubscribe online\" fill in the \"Your email address\" field "
+"and hit \"Unsubscribe\". Or send an email to freebsd-questions"
+"+unsubscribe@freebsd.org."
+msgstr ""
+"Aponte seu navegador WWW para {freebsd-questions}. Na seção intitulada "
+"\"Inscreva-se ou cancele a inscrição on-line\", preencha o campo \"Seu "
+"endereço de e-mail\" e clique em \"Cancelar inscrição\". Ou envie um e-mail "
+"para freebsd-questions+unsubscribe@freebsd.org."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:92
+msgid ""
+"A confirmation message will be sent to you from mlmmj; follow the included "
+"instructions to finish unsubscribing."
+msgstr ""
+"Uma mensagem de confirmação será enviada a você pelo mlmmj; siga as "
+"instruções incluídas para concluir o cancelamento da inscrição."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:93
+#, no-wrap
+msgid "Should I ask `-questions` or `-hackers`?"
+msgstr "Devo enviar minha pergunta para a lista `-questions` ou `-hackers`?"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:98
+msgid ""
+"Two mailing lists handle general questions about FreeBSD, `FreeBSD-"
+"questions` and `FreeBSD-hackers`. In some cases, it is not really clear "
+"which group you should ask. The following criteria should help for 99% of "
+"all questions, however:"
+msgstr ""
+"Duas listas de discussão abordam questões gerais sobre o FreeBSD, `FreeBSD-"
+"questions` e `FreeBSD-hackers`. Em alguns casos, não é realmente claro para "
+"qual lista você deve enviar sua pergunta. Entretanto, os seguintes "
+"critérios devem ajudar em 99% de todas as perguntas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:100
+msgid ""
+"If the question is of a general nature, ask `FreeBSD-questions`. Examples "
+"might be questions about installing FreeBSD or the use of a particular "
+"UNIX(R) utility."
+msgstr ""
+"Se a pergunta for de natureza geral, pergunte na lista de discussão `FreeBSD-"
+"questions`. Exemplos podem ser perguntas sobre a instalação do FreeBSD ou o "
+"uso de uma determinada ferramenta UNIX(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:101
+msgid ""
+"If you think the question relates to a bug, but you are not sure, or you do "
+"not know how to look for it, send the message to `FreeBSD-questions`."
+msgstr ""
+"Se você acha que a pergunta se relaciona a um bug, mas não tem certeza ou "
+"não sabe como procurá-lo, envie a mensagem para `FreeBSD-questions`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:102
+msgid ""
+"If the question relates to a bug, and you are _sure_ that it is a bug (for "
+"example, you can pinpoint the place in the code where it happens, and you "
+"maybe have a fix), then send the message to `FreeBSD-hackers`."
+msgstr ""
+"Se a pergunta se relacionar a um bug, e você _tiver certeza_ de que é um bug "
+"(por exemplo, você pode apontar o local no código onde ocorre e talvez tenha "
+"uma solução), envie a mensagem para `FreeBSD-hackers`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:103
+msgid ""
+"If the question relates to enhancements to FreeBSD, and you can make "
+"suggestions about how to implement them, then send the message to `FreeBSD-"
+"hackers`."
+msgstr ""
+"Se a pergunta se relaciona a melhorias no FreeBSD, e você pode fazer "
+"sugestões sobre como implementá-las, envie a mensagem para `FreeBSD-hackers`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:106
+msgid ""
+"There are also a number of other extref:{handbook}[specialized mailing "
+"lists, eresources-mail], which caters to more specific interests. The "
+"criteria above still apply, and it is in your interest to stick to them, "
+"since you are more likely to get good results that way."
+msgstr ""
+"Existem também várias outras listas de discussão extref:{handbook}["
+"especializadas, eresources-mail], que atendem a interesses mais específicos. "
+"Os critérios acima ainda se aplicam, e é do seu interesse segui-los, já que "
+"é mais provável que você obtenha bons resultados dessa maneira."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:107
+#, no-wrap
+msgid "Before Submitting a Question"
+msgstr "Antes de Enviar uma Pergunta"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:110
+msgid ""
+"You can (and should) do some things yourself before asking a question on one "
+"of the mailing lists:"
+msgstr ""
+"Antes de fazer uma pergunta em uma das listas de discussão, você pode (e "
+"deve) fazer algumas coisas por conta própria:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:112
+msgid ""
+"Try solving the problem on your own. If you post a question which shows that "
+"you have tried to solve the problem, your question will generally attract "
+"more positive attention from people reading it. Trying to solve the problem "
+"yourself will also enhance your understanding of FreeBSD, and will "
+"eventually let you use your knowledge to help others by answering questions "
+"posted to the mailing lists."
+msgstr ""
+"Tente resolver o problema por conta própria. Se você postar uma pergunta que "
+"mostre que você tentou resolver o problema, sua pergunta geralmente atrairá "
+"mais atenção positiva das pessoas que a lerem. Tentar resolver o problema "
+"por si só também aumentará sua compreensão do FreeBSD e eventualmente "
+"permitirá que você use seu conhecimento para ajudar os outros, respondendo "
+"perguntas postadas nas listas de discussão."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:113
+msgid ""
+"Read the manual pages, and the FreeBSD documentation (either installed in [."
+"filename]#/usr/doc# or accessible via WWW at http://www.FreeBSD.org[http://"
+"www.FreeBSD.org]), especially the extref:{handbook}[handbook] and the extref:"
+"{faq}[FAQ]."
+msgstr ""
+"Leia as páginas do manual e a documentação do FreeBSD (instaladas em [."
+"filename]#/usr/doc# ou acessíveis via WWW em http://www.FreeBSD."
+"org[http://www.FreeBSD.org]), especialmente o extref:{handbook}[Handbook] e "
+"o extref:{faq}[FAQ]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:114
+msgid ""
+"Browse and/or search the archives for the mailing list, to see if your "
+"question or a similar one has been asked (and possibly answered) on the "
+"list. You can browse and/or search the mailing list archives at https://www."
+"FreeBSD.org/mail[https://www.FreeBSD.org/mail] and https://www.FreeBSD.org/"
+"search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] "
+"respectively. This can be done at other WWW sites as well, for example at "
+"http://marc.theaimsgroup.com[http://marc.theaimsgroup.com]."
+msgstr ""
+"Pesquise nos arquivos da lista de discussão para ver se sua pergunta ou uma "
+"semelhante já foi feita (e possivelmente respondida) na lista. Você pode "
+"navegar e/ou pesquisar os arquivos da lista de discussão em https://www."
+"FreeBSD.org/mail[https://www.FreeBSD.org/mail] e https://www.FreeBSD.org/"
+"search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists], "
+"respectivamente. Isso também pode ser feito em outros sites da WWW, por "
+"exemplo, em http://marc.theaimsgroup.com[http://marc.theaimsgroup.com]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:115
+msgid ""
+"Use a search engine such as http://www.google.com[Google] or http://www."
+"yahoo.com[Yahoo] to find answers to your question."
+msgstr ""
+"Use um mecanismo de pesquisa, como o http://www.google.com[Google] ou "
+"http://www.yahoo.com[Yahoo], para encontrar respostas para sua pergunta."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:116
+#, no-wrap
+msgid "How to Submit a Question"
+msgstr "Como Enviar uma Pergunta"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:119
+msgid ""
+"When submitting a question to FreeBSD-questions, consider the following "
+"points:"
+msgstr ""
+"Quando for enviar uma pergunta para a lista FreeBSD-questions, considere as "
+"seguintes diretivas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:121
+msgid ""
+"Remember that nobody gets paid for answering a FreeBSD question. They do it "
+"of their own free will. You can influence this free will positively by "
+"submitting a well-formulated question supplying as much relevant information "
+"as possible. You can influence this free will negatively by submitting an "
+"incomplete, illegible, or rude question. It is perfectly possible to send a "
+"message to FreeBSD-questions and not get an answer even if you follow these "
+"rules. It is much more possible to not get an answer if you do not. In the "
+"rest of this document, we will look at how to get the most out of your "
+"question to FreeBSD-questions."
+msgstr ""
+"Lembre-se de que ninguém recebe remuneração para responder a uma pergunta "
+"sobre o FreeBSD. Eles fazem isso por vontade própria. Você pode influenciar "
+"positivamente essa vontade enviando uma pergunta bem formulada, fornecendo o "
+"máximo de informações relevantes possível. Você pode influenciar "
+"negativamente essa vontade enviando uma pergunta incompleta, ilegível ou "
+"rude. É perfeitamente possível enviar uma mensagem para a FreeBSD-questions "
+"e não obter uma resposta, mesmo se você seguir essas regras. É muito mais "
+"possível não obter uma resposta se você não seguir. No restante deste "
+"documento, veremos como obter o máximo da sua pergunta para o FreeBSD-"
+"questions."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:122
+msgid ""
+"Not everybody who answers FreeBSD questions reads every message: they look "
+"at the subject line and decide whether it interests them. Clearly, it is in "
+"your interest to specify a subject. \"FreeBSD problem\" or \"Help\" are not "
+"enough. If you provide no subject at all, many people will not bother "
+"reading it. If your subject is not specific enough, the people who can "
+"answer it may not read it."
+msgstr ""
+"Nem todo mundo que responde as perguntas sobre o FreeBSD lê todas as "
+"mensagens: eles olham para o assunto e decidem se isso lhes interessa. "
+"Claramente, é do seu interesse especificar um assunto. Assuntos como "
+"\"Problema do FreeBSD\" ou \"Ajuda\" não são suficientes. Se você não "
+"fornecer nenhum assunto, muitas pessoas não se incomodarão em lê-lo. Se o "
+"seu assunto não for específico o suficiente, as pessoas que podem responder "
+"sua pergunta podem não ler sua mensagem."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:123
+msgid ""
+"Format your message so that it is legible, and PLEASE DO NOT SHOUT!!!!!. We "
+"appreciate that a lot of people do not speak English as their first "
+"language, and we try to make allowances for that, but it is really painful "
+"to try to read a message written full of typos or without any line breaks."
+msgstr ""
+"Formate a sua mensagem para que ela fique legível e, POR FAVOR, NÃO "
+"GRITE !!!!! Nós apreciamos que muitas pessoas não falam inglês como sua "
+"primeira língua, e tentamos fazer concessões para isso, mas é realmente "
+"doloroso tentar ler uma mensagem escrita com erros de digitação ou sem "
+"quebras de linha."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:126
+msgid ""
+"Do not underestimate the effect that a poorly formatted mail message has, "
+"not just on the FreeBSD-questions mailing list. Your mail message is all "
+"people see of you, and if it is poorly formatted, one line per paragraph, "
+"badly spelt, or full of errors, it will give people a poor impression of you."
+msgstr ""
+"Não subestime o efeito que uma mensagem de correio mal formatada tem, não "
+"apenas na lista de discussão FreeBSD-questions. Sua mensagem de e-mail é "
+"tudo o que todas as pessoas vêem de você, e se estiver mal formatada, uma "
+"linha por parágrafo, mal grafada ou cheia de erros, isso dará às pessoas uma "
+"má impressão sobre você."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:129
+msgid ""
+"A lot of badly formatted messages come from http://www.lemis.com/email."
+"html[bad mailers or badly configured mailers]. The following mailers are "
+"known to send out badly formatted messages without you finding out about "
+"them:"
+msgstr ""
+"Muitas mensagens mal formatadas são provenientes de http://www.lemis.com/"
+"email.html[programas de e-mail mal configurados ou com configurações ruins]. "
+"Os seguintes programas de e-mail são conhecidos por enviar mensagens mal "
+"formatadas sem que você saiba:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:131
+msgid "exmh"
+msgstr "exmh"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:132
+msgid "Microsoft(R) Exchange"
+msgstr "Microsoft(R) Exchange"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:133
+msgid "Microsoft(R) Outlook(R)"
+msgstr "Microsoft(R) Outlook(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:135
+msgid ""
+"Try not to use MIME: a lot of people use mailers which do not get on very "
+"well with MIME."
+msgstr ""
+"Tente não usar MIME: muitas pessoas usam clientes de e-mail que não lidam "
+"bem com MIME."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:136
+msgid ""
+"Make sure your time and time zone are set correctly. This may seem a little "
+"silly, since your message still gets there, but many of the people you are "
+"trying to reach get several hundred messages a day. They frequently sort the "
+"incoming messages by subject and by date, and if your message does not come "
+"before the first answer, they may assume they missed it and not bother to "
+"look."
+msgstr ""
+"Verifique se seu horário e fuso horário estão definidos corretamente. Isso "
+"pode parecer um pouco bobo, já que sua mensagem ainda será distribuída, mas "
+"muitas das pessoas que você está tentando alcançar recebem várias centenas "
+"de mensagens por dia. Eles frequentemente classificam as mensagens recebidas "
+"por assunto e por data, e se a sua mensagem não vem antes da primeira "
+"resposta, eles podem assumir que eles a perderam e não se darão ao trabalho "
+"de procurar."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:137
+msgid ""
+"Do not include unrelated questions in the same message. Firstly, a long "
+"message tends to scare people off, and secondly, it is more difficult to get "
+"all the people who can answer all the questions to read the message."
+msgstr ""
+"Não inclua perguntas não relacionadas na mesma mensagem. Em primeiro lugar, "
+"uma mensagem longa tende a assustar as pessoas e, em segundo lugar, é mais "
+"difícil conseguir que todas as pessoas que podem responder a todas as "
+"perguntas leiam a mensagem."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:138
+msgid ""
+"Specify as much information as possible. This is a difficult area, and we "
+"need to expand on what information you need to submit, but here is a start:"
+msgstr ""
+"Especifique o máximo de informação possível. Essa é uma área difícil, "
+"precisamos expandir e detalhar melhor quais informações você precisa enviar, "
+"mas aqui está um começo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:140
+msgid ""
+"In nearly every case, it is important to know the version of FreeBSD you are "
+"running. This is particularly the case for FreeBSD-CURRENT, where you should "
+"also specify the date of the sources, though of course you should not be "
+"sending questions about -CURRENT to FreeBSD-questions."
+msgstr ""
+"Em quase todos os casos, é importante saber a versão do FreeBSD que você "
+"está executando. Isso é particularmente importante para o FreeBSD-CURRENT, "
+"onde você também deve especificar a data das fontes, embora, é claro, você "
+"não deva enviar perguntas sobre o -CURRENT para o FreeBSD-questions."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:141
+msgid ""
+"With any problem which _could_ be hardware related, tell us about your "
+"hardware. In case of doubt, assume it is possible that it is hardware. What "
+"kind of CPU are you using? How fast? What motherboard? How much memory? What "
+"peripherals?"
+msgstr ""
+"Com qualquer problema que _pode_ estar relacionado ao hardware, informe-nos "
+"sobre seu hardware. Em caso de dúvida, assuma que é possível que seja um "
+"problema de hardware. Que tipo de CPU você está usando? Quão rápida? Qual "
+"placa-mãe? Quanta memória? Quais periféricos?"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:143
+msgid ""
+"There is a judgement call here, of course, but the output of the man:"
+"dmesg[8] command can frequently be very useful, since it tells not just what "
+"hardware you are running, but what version of FreeBSD as well."
+msgstr ""
+"Há um julgamento envolvido aqui, é claro, mas a saída do comando man:dmesg[8]"
+" frequentemente pode ser muito útil, pois não apenas informa qual hardware "
+"você está usando, mas também qual versão do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:144
+msgid ""
+"If you get error messages, do not say \"I get error messages\", say (for "
+"example) \"I get the error message 'No route to host'\"."
+msgstr ""
+"Se você receber mensagens de erro, não diga \"Eu recebo mensagens de erro\", "
+"diga (por exemplo) \"Eu recebo a mensagem de erro 'No route to host'\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:145
+msgid ""
+"If your system panics, do not say \"My system panicked\", say (for example) "
+"\"my system panicked with the message 'free vnode isn't'\"."
+msgstr ""
+"Se o seu sistema \"panica\", não diga \"Meu sistema \"panica\", diga (por "
+"exemplo) \"Meu sistema \"panica\" com a mensagem 'free vnode isn't'\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:146
+msgid ""
+"If you have difficulty installing FreeBSD, please tell us what hardware you "
+"have. In particular, it is important to know the IRQs and I/O addresses of "
+"the boards installed in your machine."
+msgstr ""
+"Se você tiver dificuldade para instalar o FreeBSD, informe-nos sobre o seu "
+"hardware. É especialmente importante saber os IRQs e os endereços I/O das "
+"placas instaladas em sua máquina."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:147
+msgid ""
+"If you have difficulty getting PPP to run, describe the configuration. Which "
+"version of PPP do you use? What kind of authentication do you have? Do you "
+"have a static or dynamic IP address? What kind of messages do you get in the "
+"log file?"
+msgstr ""
+"Caso você esteja com dificuldades para executar o PPP, descreva a "
+"configuração utilizada. Qual versão do PPP está sendo utilizada? Que tipo de "
+"autenticação está sendo utilizada? O endereço IP é estático ou dinâmico? Que "
+"tipo de mensagens aparecem no arquivo de log?"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:149
+msgid ""
+"A lot of the information you need to supply is the output of programs, such "
+"as man:dmesg[8], or console messages, which usually appear in [.filename]#/"
+"var/log/messages#. Do not try to copy this information by typing it in "
+"again; it is a real pain, and you are bound to make a mistake. To send log "
+"file contents, either make a copy of the file and use an editor to trim the "
+"information to what is relevant, or cut and paste into your message. For the "
+"output of programs like man:dmesg[8], redirect the output to a file and "
+"include that. For example,"
+msgstr ""
+"Muitas das informações que você precisa fornecer são a saída de programas, "
+"como o man:dmesg[8], ou mensagens de console, que geralmente aparecem no "
+"arquivo [.filename]#/var/log/messages#. Não tente copiar essa informação "
+"digitando-a novamente; isso é realmente difícil e você provavelmente "
+"cometerá um erro. Para enviar o conteúdo do arquivo de log, faça uma cópia "
+"do arquivo e use um editor para selecionar apenas as informações relevantes, "
+"ou copie e cole na sua mensagem. Para a saída de programas como o "
+"man:dmesg[8], redirecione a saída para um arquivo e inclua esse arquivo. Por "
+"exemplo,"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:153
+#, no-wrap
+msgid "% dmesg > /tmp/dmesg.out\n"
+msgstr "% dmesg > /tmp/dmesg.out\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:156
+msgid "This redirects the information to the file [.filename]#/tmp/dmesg.out#."
+msgstr ""
+"Isto redireciona a informação para o arquivo [.filename]#/tmp/dmesg.out#."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:157
+msgid ""
+"If you do all this, and you still do not get an answer, there could be other "
+"reasons. For example, the problem is so complicated that nobody knows the "
+"answer, or the person who does know the answer was offline. If you do not "
+"get an answer after, say, a week, it might help to re-send the message. If "
+"you do not get an answer to your second message, though, you are probably "
+"not going to get one from this forum. Resending the same message again and "
+"again will only make you unpopular."
+msgstr ""
+"Se você fizer tudo isso e ainda assim não receber uma resposta, pode haver "
+"outras razões. Por exemplo, o problema pode ser tão complicado que ninguém "
+"sabe a resposta, ou a pessoa que sabe a resposta estava offline. Se você não "
+"receber uma resposta após, digamos, uma semana, pode ser útil reenviar a "
+"mensagem. No entanto, se você não receber uma resposta para sua segunda "
+"mensagem, provavelmente não receberá uma resposta neste fórum. Reenviar a "
+"mesma mensagem várias vezes só fará com que você fique impopular."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:160
+msgid ""
+"To summarize, let's assume you know the answer to the following question "
+"(yes, it is the same one in each case). You choose which of these two "
+"questions you would be more prepared to answer:"
+msgstr ""
+"Para resumir, vamos supor que você saiba a resposta para a seguinte pergunta "
+"(sim, é a mesma em cada caso). Você escolhe qual dessas duas perguntas você "
+"estaria mais preparado para responder:"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:161
+#, no-wrap
+msgid "Message 1"
+msgstr "Mensagem 1"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:171
+#, no-wrap
+msgid ""
+"Subject: HELP!!?!??\n"
+"I just can't get hits damn silly FereBSD system to\n"
+"workd, and Im really good at this tsuff, but I have never seen\n"
+"anythign sho difficult to install, it jst wont work whatever I try\n"
+"so why don't you guys tell me what I doing wrong.\n"
+msgstr ""
+"Assunto: AJUDA!!?!??\n"
+"Eu simplesmente não consigo fazer esse maldito sistema FreeBSD \n"
+"funcionar, e eu sou realmente bom nisso, mas nunca vi nada tão \n"
+"difícil de instalar, não importa o que eu tente, simplesmente não \n"
+"funciona. Por que vocês não me dizem o que estou fazendo de errado?\n"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:174
+#, no-wrap
+msgid "Message 2"
+msgstr "Mensagem 2"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:180
+#, no-wrap
+msgid "Subject: Problems installing FreeBSD\n"
+msgstr "Assunto: Problemas na instalação do FreeBSD\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:187
+#, no-wrap
+msgid ""
+"I've just got the FreeBSD 2.1.5 CDROM from Walnut Creek, and I'm having a lot\n"
+"of difficulty installing it. I have a 66 MHz 486 with 16 MB of\n"
+"memory and an Adaptec 1540A SCSI board, a 1.2GB Quantum Fireball\n"
+"disk and a Toshiba 3501XA CDROM drive. The installation works just\n"
+"fine, but when I try to reboot the system, I get the message\n"
+"Missing Operating System.\n"
+msgstr ""
+"Acabei de receber o CD-ROM do FreeBSD 2.1.5 da Walnut Creek e estou tendo \n"
+"muita dificuldade para instalá-lo. Tenho um 486 de 66 MHz com 16 MB de "
+"memória \n"
+"e uma placa SCSI Adaptec 1540A, um disco Quantum Fireball de 1,2 GB e uma "
+"unidade \n"
+"de CD-ROM Toshiba 3501XA. A instalação funciona muito bem, mas quando tento "
+"reiniciar \n"
+"o sistema, recebo a mensagem \"Sistema Operacional Ausente\".\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:190
+#, no-wrap
+msgid "How to Follow up to a Question"
+msgstr "Como fazer o acompanhamento de uma pergunta"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:195
+msgid ""
+"Often you will want to send in additional information to a question you have "
+"already sent. The best way to do this is to reply to your original "
+"message. This has three advantages:"
+msgstr ""
+"Muitas vezes, você desejará enviar informações adicionais para uma pergunta "
+"que já enviou. A melhor maneira de fazer isso é responder à sua mensagem "
+"original. Isso tem três vantagens:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:197
+msgid ""
+"You include the original message text, so people will know what you are "
+"talking about. Do not forget to trim unnecessary text out, though."
+msgstr ""
+"Você inclui o texto da mensagem original, assim as pessoas saberão do que "
+"você está falando. Não esqueça de retirar texto desnecessário."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:198
+msgid ""
+"The text in the subject line stays the same (you did remember to put one in, "
+"did you not?). Many mailers will sort messages by subject. This helps group "
+"messages together."
+msgstr ""
+"O texto no campo do assunto permanece o mesmo (você lembrou de colocar o "
+"assunto, não foi?). Muitos aplicativos ordenarão as mensagens pelo assunto. "
+"Isto ajuda o agrupamento de mensagens."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:199
+msgid ""
+"The message reference numbers in the header will refer to the previous "
+"message. Some mailers, such as http://www.mutt.org/[mutt], can _thread_ "
+"messages, showing the exact relationships between the messages."
+msgstr ""
+"Os números de referência da mensagem no cabeçalho se referirão à mensagem "
+"anterior. Alguns programas de e-mail, como o http://www.mutt.org/[mutt], "
+"podem _agrupar_ as mensagens, mostrando as relações exatas entre as "
+"mensagens."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:200
+#, no-wrap
+msgid "How to Answer a Question"
+msgstr "Como Responder uma Pergunta"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:203
+msgid "Before you answer a question to FreeBSD-questions, consider:"
+msgstr "Antes de responder uma pergunta na FreeBSD-questions, considere:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:205
+msgid ""
+"A lot of the points on submitting questions also apply to answering "
+"questions. Read them."
+msgstr ""
+"Muitas das diretivas usadas quando se está para escrever uma questão também "
+"são válidas para respondê-las. Leia-as."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:206
+msgid ""
+"Has somebody already answered the question? The easiest way to check this is "
+"to sort your incoming mail by subject: then (hopefully) you will see the "
+"question followed by any answers, all together."
+msgstr ""
+"Alguém já respondeu à pergunta? A maneira mais fácil de conferir isto é "
+"ordenando as mensagens recebidas pelo assunto: então (esperançosamente) você "
+"verá a pergunta seguida pelas respectivas respostas, todas juntas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:209
+msgid ""
+"If somebody has already answered it, it does not automatically mean that you "
+"should not send another answer. But it makes sense to read all the other "
+"answers first."
+msgstr ""
+"Se alguém já respondeu, isso não significa automaticamente que você não deve "
+"enviar outra resposta. Mas faz sentido ler todas as outras respostas "
+"primeiro."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:210
+msgid ""
+"Do you have something to contribute beyond what has already been said? In "
+"general, \"Yeah, me too\" answers do not help much, although there are "
+"exceptions, like when somebody is describing a problem they are having, and "
+"they do not know whether it is their fault or whether there is something "
+"wrong with the hardware or software. If you do send a \"me too\" answer, you "
+"should also include any further relevant information."
+msgstr ""
+"Você tem algo a acrescentar além do que já foi dito? Em geral, respostas "
+"como \"Sim, eu também\" não ajudam muito, embora existam exceções, como "
+"quando alguém está descrevendo um problema que está tendo e não sabe se é "
+"culpa dele ou se há algo de errado com o hardware ou software. Se você "
+"enviar uma resposta do tipo \"eu também\", lembre-se de incluir qualquer "
+"informação adicional relevante."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:211
+msgid ""
+"Are you sure you understand the question? Very frequently, the person who "
+"asks the question is confused or does not express themselves very well. Even "
+"with the best understanding of the system, it is easy to send a reply which "
+"does not answer the question. This does not help: you will leave the person "
+"who submitted the question more frustrated or confused than ever. If nobody "
+"else answers, and you are not too sure either, you can always ask for more "
+"information."
+msgstr ""
+"Você tem certeza de que entendeu a pergunta? Com muita frequência, a pessoa "
+"que faz a pergunta está confusa ou não se expressa muito bem. Mesmo com o "
+"melhor entendimento do sistema, é fácil enviar uma resposta que não responda "
+"à pergunta. Isso não ajuda: você deixará a pessoa que fez a pergunta mais "
+"frustrada ou confusa do que nunca. Se ninguém mais responder e você também "
+"não tiver certeza, sempre pode pedir mais informações."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:212
+msgid ""
+"Are you sure your answer is correct? If not, wait a day or so. If nobody "
+"else comes up with a better answer, you can still reply and say, for "
+"example, \"I do not know if this is correct, but since nobody else has "
+"replied, why don't you try replacing your ATAPI CDROM with a frog?\"."
+msgstr ""
+"Você tem certeza de que sua resposta está correta? Se não tiver certeza, "
+"espere um dia ou mais. Se ninguém mais apresentar uma resposta melhor, você "
+"ainda pode responder e dizer, por exemplo, \"Não tenho certeza se isso está "
+"correto, mas como ninguém mais respondeu, por que você não tenta substituir "
+"seu CD-ROM ATAPI por um sapo?\"."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:213
+msgid ""
+"Unless there is a good reason to do otherwise, reply to the sender and to "
+"FreeBSD-questions. Many people on the FreeBSD-questions are \"lurkers\": "
+"they learn by reading messages sent and replied to by others. If you take a "
+"message which is of general interest off the list, you are depriving these "
+"people of their information. Be careful with group replies; lots of people "
+"send messages with hundreds of CCs. If this is the case, be sure to trim the "
+"Cc: lines appropriately."
+msgstr ""
+"A menos que haja uma boa razão para fazer o contrário, responda ao remetente "
+"e à FreeBSD-questions. Muitas pessoas em FreeBSD-questions são \"espectadores"
+"\": elas aprendem lendo as mensagens enviadas e respondidas por outros. Se "
+"você tirar uma mensagem de interesse geral da lista, estará privando essas "
+"pessoas de suas informações. Tenha cuidado com as respostas em grupo; muitas "
+"pessoas enviam mensagens com centenas de CCs. Se esse for o caso, certifique-"
+"se de cortar as linhas de Cc: apropriadamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:214
+msgid ""
+"Include relevant text from the original message. Trim it to the minimum, but "
+"do not overdo it. It should still be possible for somebody who did not read "
+"the original message to understand what you are talking about."
+msgstr ""
+"Inclua o texto relevante da mensagem original. Corte-o ao mínimo, mas não "
+"exagere. Deve ainda ser possível para alguém que não leu a mensagem original "
+"entender sobre o que você está falando."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:215
+msgid ""
+"Use some technique to identify which text came from the original message, "
+"and which text you add. I personally find that prepending \"`>`\" to the "
+"original message works best. Leaving white space after the \"`> ;`\" and "
+"leave empty lines between your text and the original text both make the "
+"result more readable."
+msgstr ""
+"Use alguma técnica para identificar qual texto veio da mensagem original e "
+"qual texto você adicionou. Pessoalmente, acho que adicionar um \"`>`\" na "
+"frente da mensagem original funciona melhor. Deixar um espaço em branco "
+"depois do \"`> ;`\" e deixar linhas vazias entre seu texto e o texto "
+"original torna o resultado mais legível."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:216
+msgid ""
+"Put your response in the correct place (after the text to which it replies). "
+"It is very difficult to read a thread of responses where each reply comes "
+"before the text to which it replies."
+msgstr ""
+"Coloque sua resposta no lugar correto (após o texto ao qual ela se refere). "
+"É muito difícil ler um encadeamento de respostas em que cada resposta vem "
+"antes do texto ao qual ela se refere."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:217
+msgid ""
+"Most mailers change the subject line on a reply by prepending a text such as "
+"\"Re: \". If your mailer does not do it automatically, you should do it "
+"manually."
+msgstr ""
+"A maioria dos programas de email altera a linha de assunto em uma resposta "
+"adicionando um texto como \"Re: \". Se o seu programa de email não fizer "
+"isso automaticamente, você deve fazê-lo manualmente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:218
+msgid ""
+"If the submitter did not abide by format conventions (lines too long, "
+"inappropriate subject line) _please_ fix it. In the case of an incorrect "
+"subject line (such as \"HELP!!??\"), change the subject line to (say) \"Re: "
+"Difficulties with sync PPP (was: HELP!!??)\". That way other people trying "
+"to follow the thread will have less difficulty following it."
+msgstr ""
+"Se o autor da pergunta não seguir as convenções de formato (linhas muito "
+"longas, assunto inapropriado), _por favor_ corrija-o. No caso de uma linha "
+"de assunto incorreta (como \"AJUDA!!??\"), altere a linha de assunto para ("
+"por exemplo) \"Re: Dificuldades com PPP de sincronização (era: AJUDA!!??)\". "
+"Dessa forma, outras pessoas que tentam seguir a discussão terão menos "
+"dificuldade em acompanhá-la."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:221
+msgid ""
+"In such cases, it is appropriate to say what you did and why you did it, but "
+"try not to be rude. If you find you can not answer without being rude, do "
+"not answer."
+msgstr ""
+"Nesses casos, é apropriado dizer o que você fez e por que fez, mas tente não "
+"ser rude. Se você descobrir que não consegue responder sem ser rude, não "
+"responda."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-questions/_index.adoc:223
+msgid ""
+"If you just want to reply to a message because of its bad format, just reply "
+"to the submitter, not to the list. You can just send him this message in "
+"reply, if you like."
+msgstr ""
+"Se você quiser apenas responder a uma mensagem por causa do seu formato "
+"ruim, apenas responda ao autor da mensagem, não para a lista. Você pode "
+"simplesmente enviar esta mensagem para ele em resposta, se desejar."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+
+#, fuzzy
+#~ msgid ""
+#~ "The password fields in the subscription form provide only mild security, "
+#~ "but should prevent others from messing with your subscription. _Do not "
+#~ "use a valuable password_ as it will occasionally be emailed back to you "
+#~ "in cleartext."
+#~ msgstr ""
+#~ "O campo para senha no formulário de inscrição proporciona somente uma "
+#~ "segurança moderada, mas deve evitar que outros enviem mensagens usando "
+#~ "sua conta. <emphasis>Não use uma senha importante para você</emphasis> "
+#~ "pois ela eventualmente poderá ser enviada para você por email em texto "
+#~ "plano."
diff --git a/documentation/content/pt-br/articles/freebsd-releng/_index.adoc b/documentation/content/pt-br/articles/freebsd-releng/_index.adoc
index 93337b1677..fd921f44ff 100644
--- a/documentation/content/pt-br/articles/freebsd-releng/_index.adoc
+++ b/documentation/content/pt-br/articles/freebsd-releng/_index.adoc
@@ -20,13 +20,27 @@ trademarks: ["freebsd", "intel", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/freebsd-releng/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
diff --git a/documentation/content/pt-br/articles/freebsd-src-lsp/_index.adoc b/documentation/content/pt-br/articles/freebsd-src-lsp/_index.adoc
new file mode 100644
index 0000000000..98dd54ff75
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-src-lsp/_index.adoc
@@ -0,0 +1,268 @@
+---
+authors:
+ -
+ author: 'Ka Ho Ng'
+ email: khng@FreeBSD.org
+copyright: '2021 The FreeBSD Foundation'
+description: 'Utilize servidores de linguagem para o desenvolvimento na árvore src do FreeBSD para obter resultados precisos e completos ao buscar a definição de um termo no código fonte.'
+tags: ["FreeBSD", "Language Server", "LSP"]
+title: 'Utilize Servidores de Linguagem para o Desenvolvimento na Árvore Src do FreeBSD'
+trademarks: ["freebsd"]
+---
+
+= Utilize Servidores de Linguagem para o Desenvolvimento na Árvore Src do FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+:images-path: articles/freebsd-src-lsp/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+toc::[]
+
+[[intro]]
+== Introdução
+
+Este guia é sobre como configurar uma árvore src do FreeBSD com servidores de linguagem realizando a indexação de código fonte. O guia descreve os passos para o Vim/NeoVim e o VSCode. Se você usar um editor de texto diferente, pode usar este guia como referência e procurar os comandos equivalentes para o seu editor preferido.
+
+[[requirements]]
+== Requisitos
+
+Para seguir este guia, precisamos instalar certos requisitos. Precisamos de um servidor de linguagem, `ccls` ou `clangd`, e opcionalmente um banco de dados de compilação.
+
+A instalação do servidor de linguagem pode ser realizada via `pkg` ou via ports. Se escolhermos `clangd`, precisaremos instalar o `llvm`.
+
+Usando o `pkg` para instalar o `ccls`:
+
+[source, shell]
+....
+# pkg install ccls
+....
+
+Se quisermos usar o `clangd`, precisaremos instalar o `llvm` (O comando de exemplo usa o `llvm15`, mas escolha a versão que desejar):
+
+[source, shell]
+....
+# pkg install llvm15
+....
+
+Para instalar via ports, escolha a sua combinação favorita de ferramentas de cada categoria abaixo:
+
+* Implementações de servidores de linguagem
+** package:devel/ccls[]
+** package:devel/llvm12[] (Outras versões também são aceitáveis, mas as mais novas são melhores. Substitua `clangd12` por `clangdN` no caso de outras versões serem usadas.)
+* Editores
+** package:editors/vim[]
+** package:editors/neovim[]
+** package:editors/vscode[]
+* Gerador de banco de dados de compilação
+** package:devel/python[] (Para a implementação do scan-build-py do llvm)
+** package:devel/py-pip[] (Para a implementação do scan-build do rizsotto)
+** package:devel/bear[]
+
+[[editor-settings]]
+== Configurações do editor
+
+[[settings-vim]]
+=== Vim/Neovim
+
+==== Plugins de cliente LSP
+
+O gerenciador de plugin integrado é usado para ambos os editores neste exemplo. O plugin do cliente LSP usado é o link:https://github.com/prabirshrestha/vim-lsp[prabirshrestha/vim-lsp].
+
+Para configurar o plugin do cliente LSP para o Neovim:
+
+[source, shell]
+....
+# mkdir -p ~/.config/nvim/pack/lsp/start
+# git clone https://github.com/prabirshrestha/vim-lsp ~/.config/nvim/pack/lsp/start/vim-lsp
+....
+
+e para o Vim:
+
+[source, shell]
+....
+# mkdir -p ~/.vim/pack/lsp/start
+# git clone https://github.com/prabirshrestha/vim-lsp ~/.vim/pack/lsp/start/vim-lsp
+....
+
+Para habilitar o plugin do cliente LSP no editor, adicione o seguinte trecho em [.filepath]#~/.config/nvim/init.vim# ao usar o Neovim, ou [.filepath]#~/.vim/vimrc# ao usar o Vim:
+
+.Para o ccls
+[source, vim]
+....
+au User lsp_setup call lsp#register_server({
+ \ 'name': 'ccls',
+ \ 'cmd': {server_info->['ccls']},
+ \ 'allowlist': ['c', 'cpp', 'objc'],
+ \ 'initialization_options': {
+ \ 'cache': {
+ \ 'hierarchicalPath': v:true
+ \ }
+ \ }})
+....
+
+.Para o clangd
+[source, vim]
+....
+au User lsp_setup call lsp#register_server({
+ \ 'name': 'clangd',
+ \ 'cmd': {server_info->['clangd15', '--background-index', '--header-insertion=never']},
+ \ 'allowlist': ['c', 'cpp', 'objc'],
+ \ 'initialization_options': {},
+ \ })
+....
+
+Dependendo da versão que você instalou para o `clangd`, pode ser necessário atualizar o `server-info` para apontar para o binário correto.
+
+Por favor, consulte link:https://github.com/prabirshrestha/vim-lsp/blob/master/README.md#registering-servers[] para aprender sobre como configurar atalhos e as funções para autocompletar o código. O site oficial do clangd é link:https://clangd.llvm.org[], e o repositório do ccls é link:https://github.com/MaskRay/ccls/[].
+
+Abaixo estão as configurações de referência para atalhos de teclado e o autocomplemento de código. Insira o seguinte trecho em [.filepath]#~/.config/nvim/init.vim# ou [.filepath]#~/.vim/vimrc# para que usuários do Vim possam utilizá-las:
+
+[source, vim]
+....
+function! s:on_lsp_buffer_enabled() abort
+ setlocal omnifunc=lsp#complete
+ setlocal completeopt-=preview
+ setlocal keywordprg=:LspHover
+
+ nmap <buffer> <C-]> <plug>(lsp-definition)
+ nmap <buffer> <C-W>] <plug>(lsp-peek-definition)
+ nmap <buffer> <C-W><C-]> <plug>(lsp-peek-definition)
+ nmap <buffer> gr <plug>(lsp-references)
+ nmap <buffer> <C-n> <plug>(lsp-next-reference)
+ nmap <buffer> <C-p> <plug>(lsp-previous-reference)
+ nmap <buffer> gI <plug>(lsp-implementation)
+ nmap <buffer> go <plug>(lsp-document-symbol)
+ nmap <buffer> gS <plug>(lsp-workspace-symbol)
+ nmap <buffer> ga <plug>(lsp-code-action)
+ nmap <buffer> gR <plug>(lsp-rename)
+ nmap <buffer> gm <plug>(lsp-signature-help)
+endfunction
+
+augroup lsp_install
+ au!
+ autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
+augroup END
+....
+
+[[settings-vscode]]
+=== VSCode
+
+==== Plugins de cliente LSP
+
+Plugins de cliente LSP são necessários para iniciar o daemon do servidor de linguagem. Pressione `Ctrl+Shift+X` para exibir o painel de pesquisa de extensões online. Digite `llvm-vs-code-extensions.vscode-clangd` quando estiver usando o clangd, ou `ccls-project.ccls` quando estiver usando o ccls.
+
+Em seguida, pressione `Ctrl+Shift+P` para exibir a paleta de comandos do editor. Digite `Preferences: Open Settings (JSON)` na paleta e pressione `Enter` para abrir o [.filepath]#settings.json#. Dependendo das implementações do servidor de linguagem, adicione um dos seguintes pares chave/valor JSON em [.filepath]#settings.json#:
+
+.Para o clangd
+[source, json]
+....
+[
+ /* Begin of your existing configurations */
+ ...
+ /* End of your existing configurations */
+ "clangd.arguments": [
+ "--background-index",
+ "--header-insertion=never"
+ ],
+ "clangd.path": "clangd12"
+]
+....
+
+.Para o ccls
+[source, json]
+....
+[
+ /* Begin of your existing configurations */
+ ...
+ /* End of your existing configurations */
+ "ccls.cache.hierarchicalPath": true
+]
+....
+
+[[cdb]]
+== Banco de dados de compilação
+
+Um banco de dados de compilação contém um array de objetos de comando de compilação. Cada objeto especifica uma maneira de compilar um arquivo de origem. O arquivo de banco de dados de compilação geralmente é chamado de [.filename]#compile_commands.json#. O banco de dados é usado por implementações de servidores de linguagem para fins de indexação.
+
+Por favor, consulte link:https://clang.llvm.org/docs/JSONCompilationDatabase.html#format[] para obter detalhes sobre o formato do arquivo do banco de dados de compilação.
+
+[[cdb-generators]]
+=== Geradores
+
+[[generators-scan-build-py]]
+==== Usando scan-build-py
+
+===== Instalação
+
+A ferramenta `intercept-build` do scan-build-py é usada para gerar o banco de dados de compilação.
+
+Primeiro instale o package:devel/python[] para obter o interpretador Python. Para obter o `intercept-build` do LLVM:
+
+[source, shell]
+....
+# git clone https://github.com/llvm/llvm-project /path/to/llvm-project
+....
+
+onde [.filename]#/path/to/llvm-project/# é o caminho desejado para o repositório. Crie um alias no arquivo de configuração do shell para conveniência:
+
+[source, shell]
+....
+alias intercept-build='/path/to/llvm-project/clang/tools/scan-build-py/bin/intercept-build'
+....
+
+Você também pode usar o link:https://github.com/rizsotto/scan-build[rizsotto/scan-build] em vez do scan-build-py do LLVM. O scan-build-py do LLVM foi incorporado ao repositório do LLVM. Essa implementação pode ser instalada com o comando `pip install --user scan-build`. O script `intercept-build` é instalado por padrão em [.filename]#~/.local/bin#.
+
+===== Uso
+
+No diretório raiz da árvore src do FreeBSD, gere o banco de dados de compilação com o `intercept-build`:
+
+[source, shell]
+....
+# intercept-build --append make buildworld buildkernel -j`sysctl -n hw.ncpu`
+....
+
+A opção `--append` instrui o `intercept-build` a ler um banco de dados de compilação existente (se existir) e adicionar os resultados ao banco de dados. As entradas com chaves de comando duplicadas são mescladas. O banco de dados de compilação gerado por padrão é salvo no diretório de trabalho atual como [.filename]#compile_commands.json#.
+
+[[generators-bear]]
+==== Usando o devel/bear
+
+===== Uso
+
+No diretório raiz da árvore src do FreeBSD, para gerar o banco de dados de compilação com o `bear`:
+
+[source, shell]
+....
+# bear --append -- make buildworld buildkernel -j`sysctl -n hw.ncpu`
+....
+
+A opção `--append` instrui o `bear` a ler um banco de dados de compilação existente, se estiver presente, e adicionar os resultados ao banco de dados. As entradas com chave de comando duplicada são mescladas. O banco de dados de compilação gerado por padrão é salvo no diretório de trabalho atual como [.filename]#compile_commands.json#.
+
+[[final]]
+== Finalizando
+
+Depois que o banco de dados de compilação for gerado, abra qualquer arquivo de código fonte na árvore src do FreeBSD e o daemon do servidor LSP será lançado em segundo plano. Abrir arquivos de código fonte na árvore src pela primeira vez leva significativamente mais tempo antes que o servidor LSP seja capaz de fornecer um resultado completo, devido à indexação de segundo plano inicial pelo servidor LSP compilando todas as entradas listadas no banco de dados de compilação. No entanto, o daemon do servidor de linguagem não indexa os arquivos de origem que não aparecem no banco de dados de compilação, portanto, nenhum resultado completo é mostrado em arquivos de origem que não estão sendo compilados durante o `make`.
diff --git a/documentation/content/pt-br/articles/freebsd-src-lsp/_index.po b/documentation/content/pt-br/articles/freebsd-src-lsp/_index.po
new file mode 100644
index 0000000000..18684ac133
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-src-lsp/_index.po
@@ -0,0 +1,702 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 20:56-0300\n"
+"PO-Revision-Date: 2023-05-08 19:31+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfreebsd-src-lsp_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:1
+#, no-wrap
+msgid "Use Language Servers for development in the FreeBSD src tree to get precise go-to-definition and completion results."
+msgstr ""
+"Utilize servidores de linguagem para o desenvolvimento na árvore src do "
+"FreeBSD para obter resultados precisos e completos ao buscar a definição de "
+"um termo no código fonte."
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:1
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:13
+#, no-wrap
+msgid "Use Language Servers for Development in the FreeBSD Src Tree"
+msgstr ""
+"Utilize Servidores de Linguagem para o Desenvolvimento na Árvore Src do "
+"FreeBSD"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:47
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:50
+msgid ""
+"This guide is about setting up a FreeBSD src tree with language servers "
+"performing source code indexing. The guide describes the steps for Vim/"
+"NeoVim and VSCode. If you use a different text editor you can use this guide "
+"as a reference and search the equivalent commands for your preferred editor."
+msgstr ""
+"Este guia é sobre como configurar uma árvore src do FreeBSD com servidores "
+"de linguagem realizando a indexação de código fonte. O guia descreve os "
+"passos para o Vim/NeoVim e o VSCode. Se você usar um editor de texto "
+"diferente, pode usar este guia como referência e procurar os comandos "
+"equivalentes para o seu editor preferido."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:52
+#, no-wrap
+msgid "Requirements"
+msgstr "Requisitos"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:55
+msgid ""
+"In order to follow this guide we need to install certain requirements. We "
+"need a Language server, `ccls` or `clangd`, and optionally a compilation "
+"database."
+msgstr ""
+"Para seguir este guia, precisamos instalar certos requisitos. Precisamos de "
+"um servidor de linguagem, `ccls` ou `clangd`, e opcionalmente um banco de "
+"dados de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:57
+msgid ""
+"The installation of the Language server can be performed via `pkg` or via "
+"ports. If we chose `clangd` we need to install `llvm`."
+msgstr ""
+"A instalação do servidor de linguagem pode ser realizada via `pkg` ou via "
+"ports. Se escolhermos `clangd`, precisaremos instalar o `llvm`."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:59
+msgid "Using `pkg` to install `ccls`:"
+msgstr "Usando o `pkg` para instalar o `ccls`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:63
+#, no-wrap
+msgid "# pkg install ccls\n"
+msgstr "# pkg install ccls\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:66
+msgid ""
+"If we want to use `clangd` we need to install `llvm` (The example command "
+"uses `llvm15` but choose the version you desire):"
+msgstr ""
+"Se quisermos usar o `clangd`, precisaremos instalar o `llvm` (O comando de "
+"exemplo usa o `llvm15`, mas escolha a versão que desejar):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:70
+#, no-wrap
+msgid "# pkg install llvm15\n"
+msgstr "# pkg install llvm15\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:73
+msgid ""
+"To install via ports choose a favorite combination of tools from each "
+"category below:"
+msgstr ""
+"Para instalar via ports, escolha a sua combinação favorita de ferramentas de "
+"cada categoria abaixo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:75
+msgid "Language server implementations"
+msgstr "Implementações de servidores de linguagem"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:76
+msgid "package:devel/ccls[]"
+msgstr "package:devel/ccls[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:77
+msgid ""
+"package:devel/llvm12[] (Other versions are okay, but newer is better. "
+"Replace `clangd12` with clangdN in case other versions are used.)"
+msgstr ""
+"package:devel/llvm12[] (Outras versões também são aceitáveis, mas as mais "
+"novas são melhores. Substitua `clangd12` por `clangdN` no caso de outras "
+"versões serem usadas.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:78
+msgid "Editors"
+msgstr "Editores"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:79
+msgid "package:editors/vim[]"
+msgstr "package:editors/vim[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:80
+msgid "package:editors/neovim[]"
+msgstr "package:editors/neovim[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:81
+msgid "package:editors/vscode[]"
+msgstr "package:editors/vscode[]"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:82
+msgid "Compilation database generator"
+msgstr "Gerador de banco de dados de compilação"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:83
+msgid "package:devel/python[] (For llvm's scan-build-py implementation)"
+msgstr "package:devel/python[] (Para a implementação do scan-build-py do llvm)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:84
+msgid "package:devel/py-pip[] (For rizsotto's scan-build implementation)"
+msgstr "package:devel/py-pip[] (Para a implementação do scan-build do rizsotto)"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:85
+msgid "package:devel/bear[]"
+msgstr "package:devel/bear[]"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:87
+#, no-wrap
+msgid "Editor settings"
+msgstr "Configurações do editor"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:90
+#, no-wrap
+msgid "Vim/Neovim"
+msgstr "Vim/Neovim"
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:92
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:178
+#, no-wrap
+msgid "LSP client plugins"
+msgstr "Plugins de cliente LSP"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:96
+msgid ""
+"The built-in plugin manager is used for both editors in this example. The "
+"LSP client plugin used is link:https://github.com/prabirshrestha/vim-"
+"lsp[prabirshrestha/vim-lsp]."
+msgstr ""
+"O gerenciador de plugin integrado é usado para ambos os editores neste "
+"exemplo. O plugin do cliente LSP usado é o link:https://github.com/"
+"prabirshrestha/vim-lsp[prabirshrestha/vim-lsp]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:98
+msgid "To set up the LSP client plugin for Neovim:"
+msgstr "Para configurar o plugin do cliente LSP para o Neovim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:103
+#, no-wrap
+msgid ""
+"# mkdir -p ~/.config/nvim/pack/lsp/start\n"
+"# git clone https://github.com/prabirshrestha/vim-lsp ~/.config/nvim/pack/lsp/start/vim-lsp\n"
+msgstr ""
+"# mkdir -p ~/.config/nvim/pack/lsp/start\n"
+"# git clone https://github.com/prabirshrestha/vim-lsp ~/.config/nvim/pack/"
+"lsp/start/vim-lsp\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:106
+msgid "and for Vim:"
+msgstr "e para o Vim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:111
+#, no-wrap
+msgid ""
+"# mkdir -p ~/.vim/pack/lsp/start\n"
+"# git clone https://github.com/prabirshrestha/vim-lsp ~/.vim/pack/lsp/start/vim-lsp\n"
+msgstr ""
+"# mkdir -p ~/.vim/pack/lsp/start\n"
+"# git clone https://github.com/prabirshrestha/vim-lsp ~/.vim/pack/lsp/start/"
+"vim-lsp\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:114
+msgid ""
+"To enable the LSP client plugin in the editor, add the following snippet "
+"into [.filepath]#~/.config/nvim/init.vim# when using Neovim, or [."
+"filepath]#~/.vim/vimrc# when using Vim:"
+msgstr ""
+"Para habilitar o plugin do cliente LSP no editor, adicione o seguinte trecho "
+"em [.filepath]#~/.config/nvim/init.vim# ao usar o Neovim, ou [.filepath]#~/."
+"vim/vimrc# ao usar o Vim:"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:115
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:203
+#, no-wrap
+msgid "For ccls"
+msgstr "Para o ccls"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:127
+#, no-wrap
+msgid ""
+"au User lsp_setup call lsp#register_server({\n"
+" \\ 'name': 'ccls',\n"
+" \\ 'cmd': {server_info->['ccls']},\n"
+" \\ 'allowlist': ['c', 'cpp', 'objc'],\n"
+" \\ 'initialization_options': {\n"
+" \\ 'cache': {\n"
+" \\ 'hierarchicalPath': v:true\n"
+" \\ }\n"
+" \\ }})\n"
+msgstr ""
+"au User lsp_setup call lsp#register_server({\n"
+" \\ 'name': 'ccls',\n"
+" \\ 'cmd': {server_info->['ccls']},\n"
+" \\ 'allowlist': ['c', 'cpp', 'objc'],\n"
+" \\ 'initialization_options': {\n"
+" \\ 'cache': {\n"
+" \\ 'hierarchicalPath': v:true\n"
+" \\ }\n"
+" \\ }})\n"
+
+#. type: Block title
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:129
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:188
+#, no-wrap
+msgid "For clangd"
+msgstr "Para o clangd"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:138
+#, no-wrap
+msgid ""
+"au User lsp_setup call lsp#register_server({\n"
+" \\ 'name': 'clangd',\n"
+" \\ 'cmd': {server_info->['clangd15', '--background-index', '--header-insertion=never']},\n"
+" \\ 'allowlist': ['c', 'cpp', 'objc'],\n"
+" \\ 'initialization_options': {},\n"
+" \\ })\n"
+msgstr ""
+"au User lsp_setup call lsp#register_server({\n"
+" \\ 'name': 'clangd',\n"
+" \\ 'cmd': {server_info->['clangd15', '--background-index', '--header-"
+"insertion=never']},\n"
+" \\ 'allowlist': ['c', 'cpp', 'objc'],\n"
+" \\ 'initialization_options': {},\n"
+" \\ })\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:141
+msgid ""
+"Depending on the version that you installed for `clangd` you might need to "
+"update the `server-info` to point to the correct binary."
+msgstr ""
+"Dependendo da versão que você instalou para o `clangd`, pode ser necessário "
+"atualizar o `server-info` para apontar para o binário correto."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:144
+msgid ""
+"Please refer to link:https://github.com/prabirshrestha/vim-lsp/blob/master/"
+"README.md#registering-servers[] to learn about setting up key bindings and "
+"code completion. The official site of clangd is link:https://clangd.llvm."
+"org[], and the repository link of ccls is link:https://github.com/MaskRay/"
+"ccls/[]."
+msgstr ""
+"Por favor, consulte link:https://github.com/prabirshrestha/vim-lsp/blob/"
+"master/README.md#registering-servers[] para aprender sobre como configurar "
+"atalhos e as funções para autocompletar o código. O site oficial do clangd é "
+"link:https://clangd.llvm.org[], e o repositório do ccls é link:https://github"
+".com/MaskRay/ccls/[]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:147
+msgid ""
+"Below are the reference settings of keybindings and code completions. Put "
+"the following snippet into [.filepath]#~/.config/nvim/init.vim#, or [."
+"filepath]#~/.vim/vimrc# for Vim users to use it:"
+msgstr ""
+"Abaixo estão as configurações de referência para atalhos de teclado e o "
+"autocomplemento de código. Insira o seguinte trecho em [.filepath]#~/.config/"
+"nvim/init.vim# ou [.filepath]#~/.vim/vimrc# para que usuários do Vim possam "
+"utilizá-las:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:154
+#, no-wrap
+msgid ""
+"function! s:on_lsp_buffer_enabled() abort\n"
+" setlocal omnifunc=lsp#complete\n"
+" setlocal completeopt-=preview\n"
+" setlocal keywordprg=:LspHover\n"
+msgstr ""
+"function! s:on_lsp_buffer_enabled() abort\n"
+" setlocal omnifunc=lsp#complete\n"
+" setlocal completeopt-=preview\n"
+" setlocal keywordprg=:LspHover\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:168
+#, no-wrap
+msgid ""
+" nmap <buffer> <C-]> <plug>(lsp-definition)\n"
+" nmap <buffer> <C-W>] <plug>(lsp-peek-definition)\n"
+" nmap <buffer> <C-W><C-]> <plug>(lsp-peek-definition)\n"
+" nmap <buffer> gr <plug>(lsp-references)\n"
+" nmap <buffer> <C-n> <plug>(lsp-next-reference)\n"
+" nmap <buffer> <C-p> <plug>(lsp-previous-reference)\n"
+" nmap <buffer> gI <plug>(lsp-implementation)\n"
+" nmap <buffer> go <plug>(lsp-document-symbol)\n"
+" nmap <buffer> gS <plug>(lsp-workspace-symbol)\n"
+" nmap <buffer> ga <plug>(lsp-code-action)\n"
+" nmap <buffer> gR <plug>(lsp-rename)\n"
+" nmap <buffer> gm <plug>(lsp-signature-help)\n"
+"endfunction\n"
+msgstr ""
+" nmap <buffer> <C-]> <plug>(lsp-definition)\n"
+" nmap <buffer> <C-W>] <plug>(lsp-peek-definition)\n"
+" nmap <buffer> <C-W><C-]> <plug>(lsp-peek-definition)\n"
+" nmap <buffer> gr <plug>(lsp-references)\n"
+" nmap <buffer> <C-n> <plug>(lsp-next-reference)\n"
+" nmap <buffer> <C-p> <plug>(lsp-previous-reference)\n"
+" nmap <buffer> gI <plug>(lsp-implementation)\n"
+" nmap <buffer> go <plug>(lsp-document-symbol)\n"
+" nmap <buffer> gS <plug>(lsp-workspace-symbol)\n"
+" nmap <buffer> ga <plug>(lsp-code-action)\n"
+" nmap <buffer> gR <plug>(lsp-rename)\n"
+" nmap <buffer> gm <plug>(lsp-signature-help)\n"
+"endfunction\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:173
+#, no-wrap
+msgid ""
+"augroup lsp_install\n"
+" au!\n"
+" autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()\n"
+"augroup END\n"
+msgstr ""
+"augroup lsp_install\n"
+" au!\n"
+" autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()\n"
+"augroup END\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:176
+#, no-wrap
+msgid "VSCode"
+msgstr "VSCode"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:183
+msgid ""
+"LSP client plugins are required to launch the language server daemon. Press "
+"`Ctrl+Shift+X` to show the extension online search panel. Enter `llvm-vs-"
+"code-extensions.vscode-clangd` when running clangd, or `ccls-project.ccls` "
+"when running ccls."
+msgstr ""
+"Plugins de cliente LSP são necessários para iniciar o daemon do servidor de "
+"linguagem. Pressione `Ctrl+Shift+X` para exibir o painel de pesquisa de "
+"extensões online. Digite `llvm-vs-code-extensions.vscode-clangd` quando "
+"estiver usando o clangd, ou `ccls-project.ccls` quando estiver usando o ccls."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:187
+msgid ""
+"Then, press `Ctrl+Shift+P` to show the editor commands palette. Enter "
+"`Preferences: Open Settings (JSON)` into the palette and hit `Enter` to open "
+"[.filepath]#settings.json#. Depending on the language server "
+"implementations, put one of the following JSON key/value pairs in [."
+"filepath]#settings.json#:"
+msgstr ""
+"Em seguida, pressione `Ctrl+Shift+P` para exibir a paleta de comandos do "
+"editor. Digite `Preferences: Open Settings (JSON)` na paleta e pressione "
+"`Enter` para abrir o [.filepath]#settings.json#. Dependendo das "
+"implementações do servidor de linguagem, adicione um dos seguintes pares "
+"chave/valor JSON em [.filepath]#settings.json#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:201
+#, no-wrap
+msgid ""
+"[\n"
+" /* Begin of your existing configurations */\n"
+" ...\n"
+" /* End of your existing configurations */\n"
+" \"clangd.arguments\": [\n"
+" \"--background-index\",\n"
+" \"--header-insertion=never\"\n"
+" ],\n"
+" \"clangd.path\": \"clangd12\"\n"
+"]\n"
+msgstr ""
+"[\n"
+" /* Begin of your existing configurations */\n"
+" ...\n"
+" /* End of your existing configurations */\n"
+" \"clangd.arguments\": [\n"
+" \"--background-index\",\n"
+" \"--header-insertion=never\"\n"
+" ],\n"
+" \"clangd.path\": \"clangd12\"\n"
+"]\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:212
+#, no-wrap
+msgid ""
+"[\n"
+" /* Begin of your existing configurations */\n"
+" ...\n"
+" /* End of your existing configurations */\n"
+" \"ccls.cache.hierarchicalPath\": true\n"
+"]\n"
+msgstr ""
+"[\n"
+" /* Begin of your existing configurations */\n"
+" ...\n"
+" /* End of your existing configurations */\n"
+" \"ccls.cache.hierarchicalPath\": true\n"
+"]\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:215
+#, no-wrap
+msgid "Compilation database"
+msgstr "Banco de dados de compilação"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:221
+msgid ""
+"A Compilation database contains an array of compile command objects. Each "
+"object specifies a way of compiling a source file. The compilation database "
+"file is usually [.filename]#compile_commands.json#. The database is used by "
+"language server implementations for indexing purpose."
+msgstr ""
+"Um banco de dados de compilação contém um array de objetos de comando de "
+"compilação. Cada objeto especifica uma maneira de compilar um arquivo de "
+"origem. O arquivo de banco de dados de compilação geralmente é chamado de [."
+"filename]#compile_commands.json#. O banco de dados é usado por "
+"implementações de servidores de linguagem para fins de indexação."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:223
+msgid ""
+"Please refer to link:https://clang.llvm.org/docs/JSONCompilationDatabase."
+"html#format[] for details on the format of the compilation database file."
+msgstr ""
+"Por favor, consulte link:https://clang.llvm.org/docs/JSONCompilationDatabase."
+"html#format[] para obter detalhes sobre o formato do arquivo do banco de "
+"dados de compilação."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:225
+#, no-wrap
+msgid "Generators"
+msgstr "Geradores"
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:228
+#, no-wrap
+msgid "Using scan-build-py"
+msgstr "Usando scan-build-py"
+
+#. type: Title =====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:230
+#, no-wrap
+msgid "Installation"
+msgstr "Instalação"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:234
+msgid ""
+"`intercept-build` tool from scan-build-py is used to generate compilation "
+"database."
+msgstr ""
+"A ferramenta `intercept-build` do scan-build-py é usada para gerar o banco "
+"de dados de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:237
+msgid ""
+"Install package:devel/python[] to get python interpreter first. To get "
+"`intercept-build` from LLVM:"
+msgstr ""
+"Primeiro instale o package:devel/python[] para obter o interpretador Python. "
+"Para obter o `intercept-build` do LLVM:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:241
+#, no-wrap
+msgid "# git clone https://github.com/llvm/llvm-project /path/to/llvm-project\n"
+msgstr ""
+"# git clone https://github.com/llvm/llvm-project /path/to/llvm-project\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:244
+msgid ""
+"where [.filename]#/path/to/llvm-project/# is your desired path for the "
+"repository. Make an alias in the shell configuration file for convenience:"
+msgstr ""
+"onde [.filename]#/path/to/llvm-project/# é o caminho desejado para o "
+"repositório. Crie um alias no arquivo de configuração do shell para "
+"conveniência:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:248
+#, no-wrap
+msgid "alias intercept-build='/path/to/llvm-project/clang/tools/scan-build-py/bin/intercept-build'\n"
+msgstr ""
+"alias intercept-build='/path/to/llvm-project/clang/tools/scan-build-py/bin/"
+"intercept-build'\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:254
+msgid ""
+"link:https://github.com/rizsotto/scan-build[rizsotto/scan-build] can be used "
+"instead of LLVM's scan-build-py. The LLVM's scan-build-py was rizsotto/scan-"
+"build merged into the LLVM tree. This implementation can be installed by "
+"`pip install --user scan-build`. The `intercept-build` script is in [."
+"filename]#~/.local/bin# by default."
+msgstr ""
+"Você também pode usar o link:https://github.com/rizsotto/scan-build[rizsotto/"
+"scan-build] em vez do scan-build-py do LLVM. O scan-build-py do LLVM foi "
+"incorporado ao repositório do LLVM. Essa implementação pode ser instalada "
+"com o comando `pip install --user scan-build`. O script `intercept-build` é "
+"instalado por padrão em [.filename]#~/.local/bin#."
+
+#. type: Title =====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:255
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:271
+#, no-wrap
+msgid "Usage"
+msgstr "Uso"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:258
+msgid ""
+"In the top-level directory of the FreeBSD src tree, generate the compilation "
+"database with `intercept-build`:"
+msgstr ""
+"No diretório raiz da árvore src do FreeBSD, gere o banco de dados de "
+"compilação com o `intercept-build`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:262
+#, no-wrap
+msgid "# intercept-build --append make buildworld buildkernel -j`sysctl -n hw.ncpu`\n"
+msgstr ""
+"# intercept-build --append make buildworld buildkernel -j`sysctl -n hw.ncpu`"
+"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:267
+msgid ""
+"The `--append` flag tells the `intercept-build` to read an existing "
+"compilation database (if a compilation database exists) and append the "
+"results to the database. Entries with duplicated command keys are merged. "
+"The generated compilation database by default is saved in the current "
+"working directory as [.filename]#compile_commands.json#."
+msgstr ""
+"A opção `--append` instrui o `intercept-build` a ler um banco de dados de "
+"compilação existente (se existir) e adicionar os resultados ao banco de "
+"dados. As entradas com chaves de comando duplicadas são mescladas. O banco "
+"de dados de compilação gerado por padrão é salvo no diretório de trabalho "
+"atual como [.filename]#compile_commands.json#."
+
+#. type: Title ====
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:269
+#, no-wrap
+msgid "Using devel/bear"
+msgstr "Usando o devel/bear"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:274
+msgid ""
+"In the top-level directory of the FreeBSD src tree, to generate compilation "
+"database with `bear`:"
+msgstr ""
+"No diretório raiz da árvore src do FreeBSD, para gerar o banco de dados de "
+"compilação com o `bear`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:278
+#, no-wrap
+msgid "# bear --append -- make buildworld buildkernel -j`sysctl -n hw.ncpu`\n"
+msgstr "# bear --append -- make buildworld buildkernel -j`sysctl -n hw.ncpu`\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:283
+msgid ""
+"The `--append` flag tells `bear` to read an existing compilation database if "
+"it is present, and append the results to the database. Entries with "
+"duplicated command key are merged. The generated compilation database by "
+"default is saved in the current working directory as [."
+"filename]#compile_commands.json#."
+msgstr ""
+"A opção `--append` instrui o `bear` a ler um banco de dados de compilação "
+"existente, se estiver presente, e adicionar os resultados ao banco de dados. "
+"As entradas com chave de comando duplicada são mescladas. O banco de dados "
+"de compilação gerado por padrão é salvo no diretório de trabalho atual como ["
+".filename]#compile_commands.json#."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:285
+#, no-wrap
+msgid "Final"
+msgstr "Finalizando"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-src-lsp/_index.adoc:289
+msgid ""
+"Once the compilation database is generated, open any source files in the "
+"FreeBSD src tree and LSP server daemon will be launched as well in "
+"background. Opening source files in the src tree for the first time takes "
+"significantly longer time before the LSP server is able to give a complete "
+"result, due to initial background indexing by the LSP server compiling all "
+"the listed entries in the compilation database. The language server daemon "
+"however does not index the source files not appearing in the compilation "
+"database, thus no complete results are shown on source files not being "
+"compiled during the `make`."
+msgstr ""
+"Depois que o banco de dados de compilação for gerado, abra qualquer arquivo "
+"de código fonte na árvore src do FreeBSD e o daemon do servidor LSP será "
+"lançado em segundo plano. Abrir arquivos de código fonte na árvore src pela "
+"primeira vez leva significativamente mais tempo antes que o servidor LSP "
+"seja capaz de fornecer um resultado completo, devido à indexação de segundo "
+"plano inicial pelo servidor LSP compilando todas as entradas listadas no "
+"banco de dados de compilação. No entanto, o daemon do servidor de linguagem "
+"não indexa os arquivos de origem que não aparecem no banco de dados de "
+"compilação, portanto, nenhum resultado completo é mostrado em arquivos de "
+"origem que não estão sendo compilados durante o `make`."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/freebsd-status-report-process/_index.adoc b/documentation/content/pt-br/articles/freebsd-status-report-process/_index.adoc
new file mode 100644
index 0000000000..2fa78261e6
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-status-report-process/_index.adoc
@@ -0,0 +1,244 @@
+---
+authors:
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2023 The FreeBSD Documentation Project'
+description: 'Instruções para escritores e editores dos relatórios de status'
+title: 'Processo de Relatório de Status do FreeBSD'
+trademarks: ["freebsd", "git", "github", "general"]
+---
+
+= Processo de Relatório de Status do FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+Os relatórios de status do FreeBSD são publicados trimestralmente e fornecem ao público em geral uma visão do que está acontecendo no projeto, muitas vezes complementados por relatórios especiais de reuniões de desenvolvedores. Como eles são uma das nossas formas mais visíveis de comunicação, são muito importantes.
+
+Em todo este documento e em outros lugares relacionados aos relatórios de status do FreeBSD, a expressão "relatório de status" é usada tanto para indicar o documento publicado trimestralmente quanto as entradas individuais que estão nele.
+
+== Instruções para escritores
+
+Esta seção fornece alguns conselhos sobre como escrever entradas para os relatórios de status do FreeBSD, do mailto:theraven@FreeBSD.org[David Chisnall], experiente em redação técnica. Instruções sobre como enviar suas entradas também são fornecidas.
+
+_Não se preocupe se você não é um falante nativo de inglês. A equipe de status (mailto:status@FreeBSD.org) verificará suas entradas quanto à ortografia e gramática e as corrigirá para você._
+
+=== Introduza o seu trabalho
+
+_Não assuma que a pessoa que lerá o relatório conhece o seu projeto._
+
+Os relatórios de status possuem uma ampla distribuição. Eles são frequentemente um dos principais itens de notícias no site do FreeBSD e são uma das primeiras coisas que as pessoas vão ler se quiserem saber um pouco sobre o que é o FreeBSD. Considere este exemplo:
+
+....
+O suporte ao abc(4) foi adicionado, incluindo a compatibilidade com o frobnicator.
+....
+
+Alguém que esteja lendo isso, se estiver familiarizado com as páginas do manual UNIX, saberá que `abc(4)` é algum tipo de dispositivo. Mas por que o leitor deveria se importar? Que tipo de dispositivo é esse? Compare com esta versão:
+
+....
+Foi adicionado um novo driver, abc(4), na árvore, oferecendo suporte às interfaces de rede Frobnicator da linha Yoyodyne.
+....
+
+Agora o leitor sabe que abc é um driver de interface de rede. Mesmo que eles não usem nenhum produto Yoyodyne, você comunicou que o suporte do FreeBSD para dispositivos de rede está melhorando.
+
+=== Mostre a importância do seu trabalho
+
+_Os relatórios de status não são apenas para informar a todos que coisas foram feitas, eles também precisam explicar por que elas foram feitas._
+
+Continuando com o exemplo anterior. Por que é interessante que agora suportemos os cartões Yoyodyne Frobnicator? Eles são amplamente utilizados? São usados em um dispositivo popular específico? Eles são usados em uma área específica em que o FreeBSD tem (ou gostaria de ter) presença? Eles são os cartões de rede mais rápidos do planeta? Os relatórios de status frequentemente dizem coisas como essas:
+
+....
+Nós importamos o Cyberdyne Systems T800 para a árvore.
+....
+
+E então eles param. Talvez o leitor seja um ávido fã da Cyberdyne e saiba quais novos recursos emocionantes o T800 traz. Isso é improvável. É muito mais provável que eles tenham ouvido vagamente sobre o que você importou (especialmente na árvore de ports: lembre-se de que existem mais de 30.000 outras coisas lá também...). Liste alguns dos novos recursos ou correções de bugs. Diga-lhes por que é uma boa coisa que tenhamos a nova versão.
+
+=== Conte-nos Algo Novo
+
+_Não recicle os mesmos itens do relatório de status._
+
+Tenha em mente que os relatórios de status não são apenas relatórios sobre o status do projeto, são relatórios sobre a mudança de status do projeto. Se houver um projeto em andamento, gaste algumas frases apresentando-o, mas depois gaste o restante do relatório falando sobre o novo trabalho. Qual progresso foi feito desde o último relatório? O que ainda falta ser feito? Quando é provável que esteja concluído (ou, se "concluído" não se aplica realmente, quando é provável que esteja pronto para uso mais amplo, para testes, para implementação em produção e assim por diante)?
+
+=== Patrocínio
+
+_Não se esqueça dos seus patrocinadores._
+
+Se você ou seu projeto receberam patrocínio ou bolsa de estudo de alguém ou você já estava trabalhando como contratado ou funcionário de uma empresa, por favor inclua essa informação. Patrocinadores sempre apreciam quando são agradecidos pelo seu financiamento, mas também é benéfico para eles mostrarem que estão apoiando ativamente o Projeto dessa maneira. Por último, mas não menos importante, isso ajuda o FreeBSD a aprender mais sobre seus importantes consumidores.
+
+=== Tarefas Pendentes
+
+_Se você precisa de ajuda, deixe isso explícito!_
+
+Precisa de ajuda com algo? Existem tarefas que outras pessoas podem fazer? Existem duas maneiras de usar a parte de tarefas pendentes do relatório de status: para solicitar ajuda ou para dar uma visão geral rápida da quantidade de trabalho restante. Se já houver pessoas suficientes trabalhando no projeto, ou se ele estiver em um estado em que adicionar mais pessoas não aceleraria o processo, então é melhor usar a segunda opção. Fale sobre algumas das grandes tarefas em andamento e talvez indique quem está focado em cada uma delas.
+
+Enumere as tarefas, com detalhes suficientes para que as pessoas saibam se são capazes de realizá-las, e convide-as a entrar em contato.
+
+=== Envie seu relatório
+
+Os seguintes métodos estão disponíveis para você enviar os seus relatórios:
+
+* enviar um link:https://reviews.freebsd.org/[review no Phabricator] e adicionar o grupo _status_ à lista de revisores. Você deve colocar seus relatórios no subdiretório apropriado do `doc/website/content/en/status/` (crie-o se ele não existir);
+
+* enviar uma solicitação de pull request para o repositório doc através do link:https://github.com/freebsd/freebsd-doc [seu espelho GitHub]. Você deve colocar seus relatórios no subdiretório apropriado de `doc/website/content/en/status` (crie-o se ele não existir);
+
+* enviar um e-mail para status-submissions@FreeBSD.org incluindo o seu relatório.
+
+Um modelo de relatório em AsciiDoc link:https://www.FreeBSD.org/status/report-sample.adoc[está disponível aqui].
+
+== Instruções para editores
+
+Esta seção descreve como funciona o processo de revisão e publicação.
+
+[.informaltable]
+[cols="1,1", frame="none"]
+|===
+
+|Página principal dos relatórios de status
+|link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]
+
+|Repositório arquivado do GitHub de relatórios de status (foi usado para os relatórios do 4º trimestre de 2017 até o 4º trimestre de 2022):
+|link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/freebsd/freebsd-quarterly]
+
+|Endereço de email principal da equipe de status
+|link:mailto:status@FreeBSD.org[status@FreeBSD.org]
+
+|Endereço de e-mail para envio de relatórios
+|link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]
+
+|Lista de discussão para receber chamados para os relatórios de status
+|link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org]
+
+|Página principal da equipe de status no Phabricator
+|link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd.org/project/88/]
+|===
+
+=== Linha do tempo
+
+Os relatórios são sempre aceitos pela equipe de status, mas o principal processo de coleta ocorre no último mês de cada trimestre, ou seja, em março, junho, setembro e dezembro. Chamadas explícitas para relatórios de status serão enviadas nesses meses. Os meses de janeiro, abril, julho e outubro são dedicados a reunir os relatórios enviados durante o trimestre anterior; isso pode incluir aguardar por envios tardios. A publicação dos relatórios de status é feita durante os mesmos meses assim que os relatórios estiverem prontos.
+
+Todas as submissões de relatórios podem ter o prazo estendido link:mailto:status-submissions@FreeBSD.org[enviando um email para a equipe de status] até o prazo estendido, que é de 8 dias após o final do trimestre. As entradas da link:https://www.freebsd.org/administration/#t-portmgr[equipe de gerenciamento do ports] por padrão utilizam o prazo estendido, devido à sobreposição entre os relatórios de status e os branchs trimestrais do ports.
+
+A revisão dos relatórios enviados por pessoas que não fazem parte da equipe de status deve estar essencialmente concluída até meados de janeiro/abril/julho/outubro (deadline para a revisão de terceiros). Ou seja, exceto por erros de digitação ou outra revisão leve, a equipe de status deve ser capaz de começar a montar os envios logo após o dia 15. Observe que isso não é uma restrição completa e a equipe de status ainda pode aceitar revisões após essa data.
+
+[cols="1,2,2,2,2"]
+|===
+||Primeiro trimestre|Segundo trimestre|Terceiro trimestre|Quarto trimestre
+
+|Primeira chamada para relatórios
+|1º de março
+|1º de junho
+|1º de setembro
+|1º de dezembro
+
+|Lembrete de 2 semanas restantes
+|15 de março
+|15 de junho
+|15 de setembro
+|15 de dezembro
+
+|Último lembrete
+|24 de março
+|24 de junho
+|24 de setembro
+|24 de dezembro
+
+|Prazo padrão
+|31 de março
+|30 de junho
+|30 de setembro
+|31 de dezembro
+
+|Prazo estendido
+|8 de abril
+|8 de julho
+|8 de outubro
+|8 de janeiro
+
+|Revisão por terceiros
+|15 de abril
+|15 de julho
+|15 de outubro
+|15 de janeiro
+|===
+
+=== Chamada para relatórios
+
+As chamadas para relatórios de status são enviadas para os seguintes destinatários:
+
+* a lista de discussão link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org];
+* a todos os remetentes dos últimos relatórios de status (eles podem ter atualizações ou melhorias adicionais);
+* e, dependendo da época do ano:
+ ** Diversos organizadores de conferências:
+ *** link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] em março (primeiro trimestre);
+ *** link:mailto:info@bsdcan.org[BSDCan] em maio (Segundo Trimestre);
+ *** EuroBSDcon entre setembro e outubro (Terceiro-Quarto Trimestre).
+ A EuroBSDcon como organização não está interessada em escrever relatórios para o FreeBSD (pelo menos não estava em outubro de 2019: sua razão é que a conferência não é específica do FreeBSD), portanto, relatórios sobre este evento devem ser solicitados aos membros da comunidade FreeBSD que participaram dele;
+ ** Para os link:mailto:soc-students@FreeBSD.org[estudantes] do programa Google Summer of Code e seus link:mailto:soc-mentors@FreeBSD.org[mentores].
+
+A maneira mais fácil de enviar chamadas para relatórios de status é usar o script Perl link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/sendcalls[[.filename]#sendcalls#] existente no diretório [.filename]#tools/sendcalls# do repositório doc no git. O script envia automaticamente chamadas para todos os destinatários pretendidos. Ele também pode ser usado por meio de uma tarefa agendada no cron, por exemplo:
+
+....
+0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && git pull && ./sendcalls -s 'Lorenzo Salvadore'
+....
+
+[IMPORTANT]
+====
+Se você está encarregado de enviar chamadas para relatórios de status e está usando um cronjob, execute-o na freefall e assine-o com seu nome para que seja possível inferir quem configurou a tarefa, caso algo dê errado. Além disso, atualize o exemplo acima com seu nome, como uma medida de segurança adicional.
+====
+
+Pode ser que valha a pena fazer uma chamada para relatórios nos fóruns, link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-december-status-reports.49812/[como foi feito no passado].
+
+=== Construindo o relatório
+
+Os relatórios enviados são revisados e mesclados na subpasta apropriada de [.filename]#doc/website/content/en/status/# assim que são recebidos. Enquanto os relatórios estão sendo atualizados, pessoas fora da equipe de status também podem revisar as entradas individuais e propor correções.
+
+Geralmente, o último passo no processo de revisão de conteúdo é escrever a introdução em um arquivo chamado [.filename]#intro.adoc#: uma boa introdução só pode ser escrita depois que todos os relatórios foram coletados. Se possível, é uma boa ideia pedir a diferentes pessoas para escrever a introdução para adicionar variedade: pessoas diferentes trarão diferentes pontos de vista e ajudarão a manter o texto interessante.
+
+Assim que todos os relatórios e a introdução estiverem prontos, o arquivo [.filename]#_index.adoc# precisa ser criado: este é o arquivo no qual os relatórios são distribuídos nas várias categorias e classificados.
+
+=== Publicação do relatório
+
+Quando todos os arquivos do relatório de status estiverem prontos, é hora de publicá-lo.
+
+Primeiramente, o arquivo [.filename]#doc/website/content/en/status/_index.adoc# é editado: a próxima data de entrega é atualizada e um link para o novo relatório é adicionado. A alteração é, então, enviada para o repositório e a equipe de status verifica se tudo está funcionando conforme o esperado.
+
+Em seguida, é adicionada uma entrada de notícias na página principal do site em [.filename]#doc/website/data/en/news/news.toml#.
+
+Aqui está um exemplo para uma entrada de notícias:
+....
+[[news]]
+date = "2021-01-16"
+title = "Relatório de Status de Outubro a Dezembro de 2020"
+description = "O <a href=\"https://www.FreeBSD.org/status/report-2020-10-2020-12.html\">Relatório de Status de Outubro a Dezembro de 2020</a> está agora disponível com 42 entradas."
+....
+
+Assim que a versão HTML do relatório estiver compilada e online, o man:w3m[1] é usado fazer o dump do website em formato de texto simples, por exemplo:
+....
+% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ > /tmp/report-2021-01-2021-03.txt
+....
+
+O `man:w3m[1]` possui suporte completo para unicode. O `-dump` simplesmente produz uma saída de texto da renderização do código HTML, que pode então ter alguns elementos recortados, enquanto o `-cols` garante que tudo seja enquadrado em 80 colunas.
+
+Um link para o relatório gerado é adicionado entre a introdução e a primeira entrada.
+
+O relatório está finalmente pronto para ser enviado, alterando o posicionamento (o relatório deve ser inserido) e garantindo que ele esteja codificado em UTF-8.
+
+Duas mensagens de e-mail são enviadas, ambas com o assunto no formato `Relatório de Status do FreeBSD - <Primeiro/Segundo/Terceiro/Quarto> Trimestre de <ano>`:
+
+* um para o link:https://lists.freebsd.org/subscription/freebsd-announce[freebsd-announce@FreeBSD.org];
+
+[IMPORTANT]
+====
+Este deverá ser aprovado, portanto, se você for responsável por enviar este e-mail, certifique-se de que alguém o faça (envie um e-mail para o link:mailto:postmaster@FreeBSD.org[postmaster] se estiver demorando muito).
+====
+
+* um para link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-hackers@FreeBSD.org], que também inclua link:https://lists.freebsd.org/subscription/freebsd-current[freebsd-current@FreeBSD.org] e link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-stable@FreeBSD.org] em cópia (CC), e o `developers@FreeBSD.org` em cópia oculta (BCC).
diff --git a/documentation/content/pt-br/articles/freebsd-status-report-process/_index.po b/documentation/content/pt-br/articles/freebsd-status-report-process/_index.po
new file mode 100644
index 0000000000..7ab6a03eac
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-status-report-process/_index.po
@@ -0,0 +1,1065 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-04-20 21:10-0300\n"
+"PO-Revision-Date: 2023-04-22 09:09+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfreebsd-status-report-process_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:1
+#, no-wrap
+msgid "Instructions for both writers and editors of status reports"
+msgstr "Instruções para escritores e editores dos relatórios de status"
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:1
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:10
+#, no-wrap
+msgid "FreeBSD Status Report Process"
+msgstr "Processo de Relatório de Status do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:21
+msgid "'''"
+msgstr "'''"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:26
+msgid ""
+"FreeBSD status reports are published quarterly and provide the general "
+"public with a view of what is going on in the Project, and they are often "
+"augmented by special reports from Developer Summits. As they are one of our "
+"most visible forms of communication, they are very important."
+msgstr ""
+"Os relatórios de status do FreeBSD são publicados trimestralmente e fornecem "
+"ao público em geral uma visão do que está acontecendo no projeto, muitas "
+"vezes complementados por relatórios especiais de reuniões de "
+"desenvolvedores. Como eles são uma das nossas formas mais visíveis de "
+"comunicação, são muito importantes."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:28
+msgid ""
+"Throughout this document and in other places related to FreeBSD status "
+"reports as well, the expression _status report_ is used both to indicate the "
+"document published on a quarterly basis and the single entries that are in "
+"it."
+msgstr ""
+"Em todo este documento e em outros lugares relacionados aos relatórios de "
+"status do FreeBSD, a expressão \"relatório de status\" é usada tanto para "
+"indicar o documento publicado trimestralmente quanto as entradas individuais "
+"que estão nele."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:29
+#, no-wrap
+msgid "Instructions for writers"
+msgstr "Instruções para escritores"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:33
+msgid ""
+"This section provides some advice on writing status report entries from "
+"mailto:theraven@FreeBSD.org[David Chisnall], experienced in technical "
+"writing. Instructions on how to submit your entries are also given."
+msgstr ""
+"Esta seção fornece alguns conselhos sobre como escrever entradas para os "
+"relatórios de status do FreeBSD, do mailto:theraven@FreeBSD.org[David "
+"Chisnall], experiente em redação técnica. Instruções sobre como enviar suas "
+"entradas também são fornecidas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:36
+msgid ""
+"_Do not worry if you are not a native English speaker. The "
+"mailto:status@FreeBSD.org[status team] will check your entries for spelling "
+"and grammar, and fix it for you._"
+msgstr ""
+"_Não se preocupe se você não é um falante nativo de inglês. A equipe de "
+"status (mailto:status@FreeBSD.org) verificará suas entradas quanto à "
+"ortografia e gramática e as corrigirá para você._"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:37
+#, no-wrap
+msgid "Introduce Your Work"
+msgstr "Introduza o seu trabalho"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:40
+msgid "_Do not assume that the person reading the report knows about your project._"
+msgstr "_Não assuma que a pessoa que lerá o relatório conhece o seu projeto._"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:44
+msgid ""
+"The status reports have a wide distribution. They are often one of the top "
+"news items on the FreeBSD web site and are one of the first things that "
+"people will read if they want to know a bit about what FreeBSD is. Consider "
+"this example:"
+msgstr ""
+"Os relatórios de status possuem uma ampla distribuição. Eles são "
+"frequentemente um dos principais itens de notícias no site do FreeBSD e são "
+"uma das primeiras coisas que as pessoas vão ler se quiserem saber um pouco "
+"sobre o que é o FreeBSD. Considere este exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:47
+#, no-wrap
+msgid "abc(4) support was added, including frobnicator compatibility.\n"
+msgstr ""
+"O suporte ao abc(4) foi adicionado, incluindo a compatibilidade com o "
+"frobnicator.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:53
+msgid ""
+"Someone reading this, if they are familiar with UNIX man pages, will know "
+"that `abc(4)` is some kind of device. But why should the reader care? What "
+"kind of device is it? Compare with this version:"
+msgstr ""
+"Alguém que esteja lendo isso, se estiver familiarizado com as páginas do "
+"manual UNIX, saberá que `abc(4)` é algum tipo de dispositivo. Mas por que o "
+"leitor deveria se importar? Que tipo de dispositivo é esse? Compare com esta "
+"versão:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:57
+#, no-wrap
+msgid ""
+"A new driver, abc(4), was added to the tree, bringing support for\n"
+"Yoyodyne's range of Frobnicator network interfaces.\n"
+msgstr ""
+"Foi adicionado um novo driver, abc(4), na árvore, oferecendo suporte às "
+"interfaces de rede Frobnicator da linha Yoyodyne.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:61
+msgid ""
+"Now the reader knows that abc is a network interface driver. Even if they "
+"do not use any Yoyodyne products, you have communicated that FreeBSD's "
+"support for network devices is improving."
+msgstr ""
+"Agora o leitor sabe que abc é um driver de interface de rede. Mesmo que eles "
+"não usem nenhum produto Yoyodyne, você comunicou que o suporte do FreeBSD "
+"para dispositivos de rede está melhorando."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:62
+#, no-wrap
+msgid "Show the Importance of Your Work"
+msgstr "Mostre a importância do seu trabalho"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:65
+msgid ""
+"_Status reports are not just about telling everyone that things were done, "
+"they also need to explain why they were done._"
+msgstr ""
+"_Os relatórios de status não são apenas para informar a todos que coisas "
+"foram feitas, eles também precisam explicar por que elas foram feitas._"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:73
+msgid ""
+"Carry on with the previous example. Why is it interesting that we now "
+"support Yoyodyne Frobnicator cards? Are they widespread? Are they used in a "
+"specific popular device? Are they used in a particular niche where FreeBSD "
+"has (or would like to have) a presence? Are they the fastest network cards "
+"on the planet? Status reports often say things like this:"
+msgstr ""
+"Continuando com o exemplo anterior. Por que é interessante que agora "
+"suportemos os cartões Yoyodyne Frobnicator? Eles são amplamente utilizados? "
+"São usados em um dispositivo popular específico? Eles são usados em uma área "
+"específica em que o FreeBSD tem (ou gostaria de ter) presença? Eles são os "
+"cartões de rede mais rápidos do planeta? Os relatórios de status "
+"frequentemente dizem coisas como essas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:76
+#, no-wrap
+msgid "We imported Cyberdyne Systems T800 into the tree.\n"
+msgstr "Nós importamos o Cyberdyne Systems T800 para a árvore.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:84
+msgid ""
+"And then they stop. Maybe the reader is an avid Cyberdyne fan and knows "
+"what exciting new features the T800 brings. This is unlikely. It is far "
+"more likely that they have vaguely heard of whatever you have imported "
+"(especially into the ports tree: remember that there are over 30,000 other "
+"things there too...). List some of the new features, or bug fixes. Tell "
+"them why it is a good thing that we have the new version."
+msgstr ""
+"E então eles param. Talvez o leitor seja um ávido fã da Cyberdyne e saiba "
+"quais novos recursos emocionantes o T800 traz. Isso é improvável. É muito "
+"mais provável que eles tenham ouvido vagamente sobre o que você importou ("
+"especialmente na árvore de ports: lembre-se de que existem mais de 30.000 "
+"outras coisas lá também...). Liste alguns dos novos recursos ou correções de "
+"bugs. Diga-lhes por que é uma boa coisa que tenhamos a nova versão."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:85
+#, no-wrap
+msgid "Tell Us Something New"
+msgstr "Conte-nos Algo Novo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:88
+msgid "_Do not recycle the same status report items._"
+msgstr "_Não recicle os mesmos itens do relatório de status._"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:94
+msgid ""
+"Bear in mind that status reports are not just reports on the status of the "
+"project, they are reports on the change of status of the project. If there "
+"is an ongoing project, spend a couple of sentences introducing it, but then "
+"spend the rest of the report talking about the new work. What progress has "
+"been made since the last report? What is left to do? When is it likely to be "
+"finished (or, if \"finished\" does not really apply, when is it likely to be "
+"ready for wider use, for testing, for deployment in production, and so on)?"
+msgstr ""
+"Tenha em mente que os relatórios de status não são apenas relatórios sobre o "
+"status do projeto, são relatórios sobre a mudança de status do projeto. Se "
+"houver um projeto em andamento, gaste algumas frases apresentando-o, mas "
+"depois gaste o restante do relatório falando sobre o novo trabalho. Qual "
+"progresso foi feito desde o último relatório? O que ainda falta ser feito? "
+"Quando é provável que esteja concluído (ou, se \"concluído\" não se aplica "
+"realmente, quando é provável que esteja pronto para uso mais amplo, para "
+"testes, para implementação em produção e assim por diante)?"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:95
+#, no-wrap
+msgid "Sponsorship"
+msgstr "Patrocínio"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:98
+msgid "_Do not forget about your sponsors._"
+msgstr "_Não se esqueça dos seus patrocinadores._"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:102
+msgid ""
+"If you or your project has received sponsorship, a scholarship from somebody "
+"or you have been already working as a contractor or an employee for a "
+"company, please include it. Sponsors always certainly appreciate if you "
+"thank them for their funding, but it is also beneficial for them to show "
+"that they are actively supporting the Project this way. Last, but not "
+"least, this helps FreeBSD to learn more about its important consumers."
+msgstr ""
+"Se você ou seu projeto receberam patrocínio ou bolsa de estudo de alguém ou "
+"você já estava trabalhando como contratado ou funcionário de uma empresa, "
+"por favor inclua essa informação. Patrocinadores sempre apreciam quando são "
+"agradecidos pelo seu financiamento, mas também é benéfico para eles "
+"mostrarem que estão apoiando ativamente o Projeto dessa maneira. Por último, "
+"mas não menos importante, isso ajuda o FreeBSD a aprender mais sobre seus "
+"importantes consumidores."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:103
+#, no-wrap
+msgid "Open Items"
+msgstr "Tarefas Pendentes"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:106
+msgid "_If help is needed, make this explicit!_"
+msgstr "_Se você precisa de ajuda, deixe isso explícito!_"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:112
+msgid ""
+"Is there any help needed with something? Are there tasks other people can "
+"do? There are two ways in which you can use the open items part of the "
+"status report: to solicit help, or to give a quick overview of the amount of "
+"work left. If there are already enough people working on the project, or it "
+"is in a state where adding more people would not speed it up, then the "
+"latter is better. Give some big work items that are in progress, and maybe "
+"indicate who is focussing on each one."
+msgstr ""
+"Precisa de ajuda com algo? Existem tarefas que outras pessoas podem fazer? "
+"Existem duas maneiras de usar a parte de tarefas pendentes do relatório de "
+"status: para solicitar ajuda ou para dar uma visão geral rápida da "
+"quantidade de trabalho restante. Se já houver pessoas suficientes "
+"trabalhando no projeto, ou se ele estiver em um estado em que adicionar mais "
+"pessoas não aceleraria o processo, então é melhor usar a segunda opção. Fale "
+"sobre algumas das grandes tarefas em andamento e talvez indique quem está "
+"focado em cada uma delas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:114
+msgid ""
+"List tasks, with enough detail that people know if they are likely to be "
+"able to do them, and invite people to get in contact."
+msgstr ""
+"Enumere as tarefas, com detalhes suficientes para que as pessoas saibam se "
+"são capazes de realizá-las, e convide-as a entrar em contato."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:115
+#, no-wrap
+msgid "Submit your report"
+msgstr "Envie seu relatório"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:118
+msgid "The following methods are available to submit your reports:"
+msgstr ""
+"Os seguintes métodos estão disponíveis para você enviar os seus relatórios:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:121
+msgid ""
+"submit a link:https://reviews.freebsd.org/[Phabricator review] and add the "
+"group _status_ to the reviewers list. You should put your reports in the "
+"appropriate subdirectory of `doc/website/content/en/status/` (create it if "
+"it is missing);"
+msgstr ""
+"enviar um link:https://reviews.freebsd.org/[review no Phabricator] e "
+"adicionar o grupo _status_ à lista de revisores. Você deve colocar seus "
+"relatórios no subdiretório apropriado do `doc/website/content/en/status/` "
+"(crie-o se ele não existir);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:124
+msgid ""
+"submit a pull request to the doc repository through "
+"link:https://github.com/freebsd/freebsd-doc[its GitHub mirror] . You should "
+"put your reports in the appropriate subdirectory of "
+"`doc/website/content/en/status` (create it if it is missing);"
+msgstr ""
+"enviar uma solicitação de pull request para o repositório doc através do "
+"link:https://github.com/freebsd/freebsd-doc [seu espelho GitHub]. Você deve "
+"colocar seus relatórios no subdiretório apropriado de `doc/website/content/"
+"en/status` (crie-o se ele não existir);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:126
+msgid "send an email to status-submissions@FreeBSD.org including your report."
+msgstr ""
+"enviar um e-mail para status-submissions@FreeBSD.org incluindo o seu "
+"relatório."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:128
+msgid ""
+"An link:https://www.FreeBSD.org/status/report-sample.adoc[AsciiDoc sample "
+"report template] is available."
+msgstr ""
+"Um modelo de relatório em AsciiDoc link:https://www.FreeBSD.org/status/"
+"report-sample.adoc[está disponível aqui]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:129
+#, no-wrap
+msgid "Instructions for editors"
+msgstr "Instruções para editores"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:132
+msgid "This section describes how the reviewing and publication process works."
+msgstr "Esta seção descreve como funciona o processo de revisão e publicação."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:138
+#, no-wrap
+msgid "Status reports main webpage"
+msgstr "Página principal dos relatórios de status"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:140
+#, no-wrap
+msgid "link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]"
+msgstr "link:https://www.FreeBSD.org/status/[https://www.FreeBSD.org/status/]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:141
+#, no-wrap
+msgid ""
+"Status reports archived GitHub repository (was used for reports from 2017Q4 "
+"to 2022Q4):"
+msgstr ""
+"Repositório arquivado do GitHub de relatórios de status (foi usado para os "
+"relatórios do 4º trimestre de 2017 até o 4º trimestre de 2022):"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:143
+#, no-wrap
+msgid "link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/freebsd/freebsd-quarterly]"
+msgstr ""
+"link:https://www.github.com/freebsd/freebsd-quarterly[https://github.com/"
+"freebsd/freebsd-quarterly]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:144
+#, no-wrap
+msgid "Main status team email address"
+msgstr "Endereço de email principal da equipe de status"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:146
+#, no-wrap
+msgid "link:mailto:status@FreeBSD.org[status@FreeBSD.org]"
+msgstr "link:mailto:status@FreeBSD.org[status@FreeBSD.org]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:147
+#, no-wrap
+msgid "Email address for reports submission"
+msgstr "Endereço de e-mail para envio de relatórios"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:149
+#, no-wrap
+msgid "link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]"
+msgstr ""
+"link:mailto:status-submissions@FreeBSD.org[status-submissions@FreeBSD.org]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:150
+#, no-wrap
+msgid "Mailing list for receiving calls for status reports"
+msgstr "Lista de discussão para receber chamados para os relatórios de status"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:152
+#, no-wrap
+msgid "link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org]"
+msgstr ""
+"link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-"
+"status-calls@FreeBSD.org]"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:153
+#, no-wrap
+msgid "Phabricator status team main page"
+msgstr "Página principal da equipe de status no Phabricator"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:154
+#, no-wrap
+msgid "link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd.org/project/88/]"
+msgstr ""
+"link:https://reviews.freebsd.org/project/profile/88/[https://reviews.freebsd."
+"org/project/88/]"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:156
+#, no-wrap
+msgid "Timeline"
+msgstr "Linha do tempo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:162
+msgid ""
+"Reports are always accepted by the status team, but the main collection "
+"process happens the last month of each quarter, hence in March, June, "
+"September and December. Explicit calls for status reports will be sent in "
+"those months. The months of January, April, July and October are dedicated "
+"to putting together the reports submitted during the precedent quarter; this "
+"can include waiting for late submissions. Status reports publication is "
+"done during the same months as soon as the report are ready."
+msgstr ""
+"Os relatórios são sempre aceitos pela equipe de status, mas o principal "
+"processo de coleta ocorre no último mês de cada trimestre, ou seja, em "
+"março, junho, setembro e dezembro. Chamadas explícitas para relatórios de "
+"status serão enviadas nesses meses. Os meses de janeiro, abril, julho e "
+"outubro são dedicados a reunir os relatórios enviados durante o trimestre "
+"anterior; isso pode incluir aguardar por envios tardios. A publicação dos "
+"relatórios de status é feita durante os mesmos meses assim que os relatórios "
+"estiverem prontos."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:165
+msgid ""
+"All report submissions can have the deadline extended by "
+"link:mailto:status-submissions@FreeBSD.org[emailing the status team] up "
+"until the extended deadline, which is 8 days after the end of the quarter. "
+"Entries from the "
+"link:https://www.freebsd.org/administration/#t-portmgr[ports management "
+"team] default to the extended headline, because of the overlap between "
+"status reports and quarterly ports branches."
+msgstr ""
+"Todas as submissões de relatórios podem ter o prazo estendido link:mailto"
+":status-submissions@FreeBSD.org[enviando um email para a equipe de status] "
+"até o prazo estendido, que é de 8 dias após o final do trimestre. As "
+"entradas da link:https://www.freebsd.org/administration/#t-portmgr[equipe de "
+"gerenciamento do ports] por padrão utilizam o prazo estendido, devido à "
+"sobreposição entre os relatórios de status e os branchs trimestrais do ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:169
+msgid ""
+"Reviewing of submitted reports by people not part of the status team should "
+"be essentially complete by mid-January/April/July/October (third-party "
+"review slush). That is, barring typos or other light copyediting, the "
+"status team should be able to start assembling the submissions soon after "
+"the 15th. Note that this is not a complete freeze, and the status team may "
+"still be able to accept reviews then."
+msgstr ""
+"A revisão dos relatórios enviados por pessoas que não fazem parte da equipe "
+"de status deve estar essencialmente concluída até meados de janeiro/abril/"
+"julho/outubro (deadline para a revisão de terceiros). Ou seja, exceto por "
+"erros de digitação ou outra revisão leve, a equipe de status deve ser capaz "
+"de começar a montar os envios logo após o dia 15. Observe que isso não é uma "
+"restrição completa e a equipe de status ainda pode aceitar revisões após "
+"essa data."
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "First quarter"
+msgstr "Primeiro trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "Second quarter"
+msgstr "Segundo trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:172
+#, no-wrap
+msgid "Third quarter"
+msgstr "Terceiro trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:174
+#, no-wrap
+msgid "Fourth quarter"
+msgstr "Quarto trimestre"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:175
+#, no-wrap
+msgid "First call for reports"
+msgstr "Primeira chamada para relatórios"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:176
+#, no-wrap
+msgid "March 1st"
+msgstr "1º de março"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:177
+#, no-wrap
+msgid "June 1st"
+msgstr "1º de junho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:178
+#, no-wrap
+msgid "September 1st"
+msgstr "1º de setembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:180
+#, no-wrap
+msgid "December 1st"
+msgstr "1º de dezembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:181
+#, no-wrap
+msgid "2 weeks left reminder"
+msgstr "Lembrete de 2 semanas restantes"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:182
+#, no-wrap
+msgid "March 15th"
+msgstr "15 de março"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:183
+#, no-wrap
+msgid "June 15th"
+msgstr "15 de junho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:184
+#, no-wrap
+msgid "September 15th"
+msgstr "15 de setembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:186
+#, no-wrap
+msgid "December 15th"
+msgstr "15 de dezembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:187
+#, no-wrap
+msgid "Last reminder"
+msgstr "Último lembrete"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:188
+#, no-wrap
+msgid "March 24th"
+msgstr "24 de março"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:189
+#, no-wrap
+msgid "June 24th"
+msgstr "24 de junho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:190
+#, no-wrap
+msgid "September 24th"
+msgstr "24 de setembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:192
+#, no-wrap
+msgid "December 24th"
+msgstr "24 de dezembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:193
+#, no-wrap
+msgid "Standard deadline"
+msgstr "Prazo padrão"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:194
+#, no-wrap
+msgid "March 31st"
+msgstr "31 de março"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:195
+#, no-wrap
+msgid "June 30th"
+msgstr "30 de junho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:196
+#, no-wrap
+msgid "September 30th"
+msgstr "30 de setembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:198
+#, no-wrap
+msgid "December 31st"
+msgstr "31 de dezembro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:199
+#, no-wrap
+msgid "Extended deadline"
+msgstr "Prazo estendido"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:200
+#, no-wrap
+msgid "April 8th"
+msgstr "8 de abril"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:201
+#, no-wrap
+msgid "July 8th"
+msgstr "8 de julho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:202
+#, no-wrap
+msgid "October 8th"
+msgstr "8 de outubro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:204
+#, no-wrap
+msgid "January 8th"
+msgstr "8 de janeiro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:205
+#, no-wrap
+msgid "Third-party review slush"
+msgstr "Revisão por terceiros"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:206
+#, no-wrap
+msgid "April 15th"
+msgstr "15 de abril"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:207
+#, no-wrap
+msgid "July 15th"
+msgstr "15 de julho"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:208
+#, no-wrap
+msgid "October 15th"
+msgstr "15 de outubro"
+
+#. type: Table
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:209
+#, no-wrap
+msgid "January 15th"
+msgstr "15 de janeiro"
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:211
+#, no-wrap
+msgid "Call for reports"
+msgstr "Chamada para relatórios"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:214
+msgid "Calls for status reports are sent to the following recipients:"
+msgstr ""
+"As chamadas para relatórios de status são enviadas para os seguintes "
+"destinatários:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:216
+msgid ""
+"the "
+"link:https://lists.freebsd.org/subscription/freebsd-status-calls[freebsd-status-calls@FreeBSD.org "
+"mailing list];"
+msgstr ""
+"a lista de discussão link:https://lists.freebsd.org/subscription/freebsd-"
+"status-calls[freebsd-status-calls@FreeBSD.org];"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:217
+msgid ""
+"to all submitters of last status reports (they may have updates or further "
+"improvements);"
+msgstr ""
+"a todos os remetentes dos últimos relatórios de status (eles podem ter "
+"atualizações ou melhorias adicionais);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:218
+msgid "and, depending on the season:"
+msgstr "e, dependendo da época do ano:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:219
+msgid "Various conference organizers:"
+msgstr "Diversos organizadores de conferências:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:220
+msgid "link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] in March (First Quarter);"
+msgstr ""
+"link:mailto:secretary@asiabsdcon.org[AsiaBSDCon] em março (primeiro "
+"trimestre);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:221
+msgid "link:mailto:info@bsdcan.org[BSDCan] in May (Second Quarter);"
+msgstr "link:mailto:info@bsdcan.org[BSDCan] em maio (Segundo Trimestre);"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:222
+msgid "EuroBSDcon September - October (Third-Fourth Quarter)."
+msgstr "EuroBSDcon entre setembro e outubro (Terceiro-Quarto Trimestre)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:223
+msgid ""
+"EuroBSDcon as an organization is not interested in writing reports for "
+"FreeBSD (at least it was not in October 2019: its reason is that the "
+"conference is not FreeBSD specific), so reports about this event should be "
+"asked of members of the FreeBSD community that attended it;"
+msgstr ""
+"A EuroBSDcon como organização não está interessada em escrever relatórios "
+"para o FreeBSD (pelo menos não estava em outubro de 2019: sua razão é que a "
+"conferência não é específica do FreeBSD), portanto, relatórios sobre este "
+"evento devem ser solicitados aos membros da comunidade FreeBSD que "
+"participaram dele;"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:224
+msgid ""
+"Google Summer of Code link:mailto:soc-students@FreeBSD.org[students] and "
+"their link:mailto:soc-mentors@FreeBSD.org[mentors]."
+msgstr ""
+"Para os link:mailto:soc-students@FreeBSD.org[estudantes] do programa Google "
+"Summer of Code e seus link:mailto:soc-mentors@FreeBSD.org[mentores]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:228
+msgid ""
+"The easiest way to send calls for status reports is to use the "
+"link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/sendcalls[[.filename]#sendcalls# "
+"perl script] in the [.filename]#tools/sendcalls# directory of the doc git "
+"repository. The script automatically sends calls to all intended "
+"recipients. It can also be used through a cron job, for example:"
+msgstr ""
+"A maneira mais fácil de enviar chamadas para relatórios de status é usar o "
+"script Perl link:https://cgit.freebsd.org/doc/tree/tools/sendcalls/"
+"sendcalls[[.filename]#sendcalls#] existente no diretório [.filename]#tools/"
+"sendcalls# do repositório doc no git. O script envia automaticamente "
+"chamadas para todos os destinatários pretendidos. Ele também pode ser usado "
+"por meio de uma tarefa agendada no cron, por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:231
+#, no-wrap
+msgid ""
+"0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && "
+"git pull && ./sendcalls -s 'Lorenzo Salvadore'\n"
+msgstr ""
+"0 0 1,15,24 3,6,9,12 * cd ~/doc/tools/sendcalls && "
+"git pull && ./sendcalls -s 'Lorenzo Salvadore'\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:237
+msgid ""
+"If you are in charge of sending calls for status reports and you are indeed "
+"using a cron job, please run it on freefall and sign it with your name so "
+"that it is possible to infer who has configured the cronjob, in case "
+"something goes wrong. Also please update the example above with your name, "
+"as an additional safety measure."
+msgstr ""
+"Se você está encarregado de enviar chamadas para relatórios de status e está "
+"usando um cronjob, execute-o na freefall e assine-o com seu nome para que "
+"seja possível inferir quem configurou a tarefa, caso algo dê errado. Além "
+"disso, atualize o exemplo acima com seu nome, como uma medida de segurança "
+"adicional."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:240
+msgid ""
+"It may also be worth making a call for reports on the forums as "
+"link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-december-status-reports.49812/[was "
+"done in the past]."
+msgstr ""
+"Pode ser que valha a pena fazer uma chamada para relatórios nos fóruns, "
+"link:https://forums.freebsd.org/threads/call-for-freebsd-2014q4-october-"
+"december-status-reports.49812/[como foi feito no passado]."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:241
+#, no-wrap
+msgid "Building the report"
+msgstr "Construindo o relatório"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:245
+msgid ""
+"Submitted reports are reviewed and merged in the proper subdirectory of "
+"[.filename]#doc/website/content/en/status/# as they come in. While the "
+"reports are being updated, people outside the status team may also review "
+"the individual entries and propose fixes."
+msgstr ""
+"Os relatórios enviados são revisados e mesclados na subpasta apropriada de [."
+"filename]#doc/website/content/en/status/# assim que são recebidos. Enquanto "
+"os relatórios estão sendo atualizados, pessoas fora da equipe de status "
+"também podem revisar as entradas individuais e propor correções."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:248
+msgid ""
+"Usually the last step in the content review process is writing the "
+"introduction in a file named [.filename]#intro.adoc#: a good introduction "
+"can only be written once all the reports have been collected. If possible, "
+"it is a good idea to ask different people to write the introduction to add "
+"variety: different people will bring different viewpoints and help keep it "
+"fresh."
+msgstr ""
+"Geralmente, o último passo no processo de revisão de conteúdo é escrever a "
+"introdução em um arquivo chamado [.filename]#intro.adoc#: uma boa introdução "
+"só pode ser escrita depois que todos os relatórios foram coletados. Se "
+"possível, é uma boa ideia pedir a diferentes pessoas para escrever a "
+"introdução para adicionar variedade: pessoas diferentes trarão diferentes "
+"pontos de vista e ajudarão a manter o texto interessante."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:250
+msgid ""
+"Once all the reports and the introduction are ready, the "
+"[.filename]#_index.adoc# file needs to be created: this is the file in which "
+"the reports are distributed into the various categories and sorted."
+msgstr ""
+"Assim que todos os relatórios e a introdução estiverem prontos, o arquivo [."
+"filename]#_index.adoc# precisa ser criado: este é o arquivo no qual os "
+"relatórios são distribuídos nas várias categorias e classificados."
+
+#. type: Title ===
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:251
+#, no-wrap
+msgid "Publishing the report"
+msgstr "Publicação do relatório"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:254
+msgid "When all the files of the status report are ready, it is time to publish it."
+msgstr ""
+"Quando todos os arquivos do relatório de status estiverem prontos, é hora de "
+"publicá-lo."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:257
+msgid ""
+"First [.filename]#doc/website/content/en/status/_index.adoc# is edited: the "
+"next due date is updated and a link to the new report is added. The change "
+"is then pushed on the repository and the status team checks that everythings "
+"works as expected."
+msgstr ""
+"Primeiramente, o arquivo [.filename]#doc/website/content/en/status/_index."
+"adoc# é editado: a próxima data de entrega é atualizada e um link para o "
+"novo relatório é adicionado. A alteração é, então, enviada para o "
+"repositório e a equipe de status verifica se tudo está funcionando conforme "
+"o esperado."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:259
+msgid ""
+"Then the news entry for the main website page is added to "
+"[.filename]#doc/website/data/en/news/news.toml#."
+msgstr ""
+"Em seguida, é adicionada uma entrada de notícias na página principal do site "
+"em [.filename]#doc/website/data/en/news/news.toml#."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:261
+msgid "Here is a sample for the news entry:"
+msgstr "Aqui está um exemplo para uma entrada de notícias:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:266
+#, no-wrap
+msgid ""
+"[[news]]\n"
+"date = \"2021-01-16\"\n"
+"title = \"October-December 2020 Status Report\"\n"
+"description = \"The <a "
+"href=\\\"https://www.FreeBSD.org/status/report-2020-10-2020-12.html\\\">October "
+"to December 2020 Status Report</a> is now available with 42 entries.\"\n"
+msgstr ""
+"[[news]]\n"
+"date = \"2021-01-16\"\n"
+"title = \"Relatório de Status de Outubro a Dezembro de 2020\"\n"
+"description = \"O <a href=\\\"https://www.FreeBSD.org/status/"
+"report-2020-10-2020-12.html\\\">Relatório de Status de Outubro a Dezembro de "
+"2020</a> está agora disponível com 42 entradas.\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:269
+msgid ""
+"Once the HTML version of the report has been built and is online, man:w3m[1] "
+"is used to dump the website as plain-text, e.g:"
+msgstr ""
+"Assim que a versão HTML do relatório estiver compilada e online, o man:w3m[1]"
+" é usado fazer o dump do website em formato de texto simples, por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:271
+#, no-wrap
+msgid ""
+"% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ "
+"> /tmp/report-2021-01-2021-03.txt\n"
+msgstr ""
+"% w3m -cols 80 -dump https://www.FreeBSD.org/status/report-2021-01-2021-03/ "
+"> /tmp/report-2021-01-2021-03.txt\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:274
+msgid ""
+"man:w3m[1] has full proper unicode support. `-dump` simply outputs text "
+"rendering of the HTML code that can then have a few elements snipped, while "
+"`-cols` ensures that everything is wrapped to 80 columns."
+msgstr ""
+"O `man:w3m[1]` possui suporte completo para unicode. O `-dump` simplesmente "
+"produz uma saída de texto da renderização do código HTML, que pode então ter "
+"alguns elementos recortados, enquanto o `-cols` garante que tudo seja "
+"enquadrado em 80 colunas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:276
+msgid ""
+"A link to the rendered report is added between the introduction and the "
+"first entry."
+msgstr ""
+"Um link para o relatório gerado é adicionado entre a introdução e a primeira "
+"entrada."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:278
+msgid ""
+"The report is finally ready to be sent, toggling disposition (the report "
+"should be inlined), and ensuring it is encoded as UTF-8."
+msgstr ""
+"O relatório está finalmente pronto para ser enviado, alterando o "
+"posicionamento (o relatório deve ser inserido) e garantindo que ele esteja "
+"codificado em UTF-8."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:280
+msgid ""
+"Two emails are sent, both with subject in the format `FreeBSD Status Report "
+"- <First/Second/Third/Fourth> Quarter <year>`:"
+msgstr ""
+"Duas mensagens de e-mail são enviadas, ambas com o assunto no formato \n"
+"`Relatório de Status do FreeBSD - <Primeiro/Segundo/Terceiro/Quarto> "
+"Trimestre de <ano>`:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:282
+msgid ""
+"one to "
+"link:https://lists.freebsd.org/subscription/freebsd-announce[freebsd-announce@FreeBSD.org];"
+msgstr ""
+"um para o link:https://lists.freebsd.org/subscription/freebsd-announce"
+"[freebsd-announce@FreeBSD.org];"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:286
+msgid ""
+"This one must be approved, so if you are in charge of sending this email, "
+"ensure that someone does it (mail "
+"link:mailto:postmaster@FreeBSD.org[postmaster] if it is taking long)."
+msgstr ""
+"Este deverá ser aprovado, portanto, se você for responsável por enviar este "
+"e-mail, certifique-se de que alguém o faça (envie um e-mail para o "
+"link:mailto:postmaster@FreeBSD.org[postmaster] se estiver demorando muito)."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-status-report-process/_index.adoc:288
+msgid ""
+"one to "
+"link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-hackers@FreeBSD.org], "
+"which also has "
+"link:https://lists.freebsd.org/subscription/freebsd-current[freebsd-current@FreeBSD.org] "
+"and "
+"link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-stable@FreeBSD.org] "
+"in CC and `developers@FreeBSD.org` in BCC."
+msgstr ""
+"um para link:https://lists.freebsd.org/subscription/freebsd-hackers[freebsd-"
+"hackers@FreeBSD.org], que também inclua link:https://lists.freebsd.org/"
+"subscription/freebsd-current[freebsd-current@FreeBSD.org] e "
+"link:https://lists.freebsd.org/subscription/freebsd-stable[freebsd-"
+"stable@FreeBSD.org] em cópia (CC), e o `developers@FreeBSD.org` em cópia "
+"oculta (BCC)."
diff --git a/documentation/content/pt-br/articles/freebsd-update-server/_index.adoc b/documentation/content/pt-br/articles/freebsd-update-server/_index.adoc
index c55d28bbcf..b6e8a19bd1 100644
--- a/documentation/content/pt-br/articles/freebsd-update-server/_index.adoc
+++ b/documentation/content/pt-br/articles/freebsd-update-server/_index.adoc
@@ -1,10 +1,12 @@
---
-title: Construa seu próprio servidor de atualização do FreeBSD
authors:
- - author: Jason Helfman
+ -
+ author: 'Jason Helfman'
email: jgh@FreeBSD.org
-copyright: 2009-2011, 2013 Jason Helfman
-releaseinfo: "$FreeBSD$"
+copyright: '2009-2011, 2013 Jason Helfman'
+description: 'Construir seu próprio servidor freebsd-update permite que um administrador de sistema realize atualizações rápidas para vários computadores a partir de um espelho local'
+tags: ["FreeBSD", "Update", "Server", "internal"]
+title: 'Construa seu próprio servidor de atualização do FreeBSD'
trademarks: ["freebsd", "amd", "intel", "general"]
---
@@ -17,20 +19,32 @@ trademarks: ["freebsd", "amd", "intel", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/freebsd-update-server/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Este artigo descreve a construção de um servidor de atualizações do FreeBSD interno. O https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] foi escrito por Colin Percival mailto:cperciva@FreeBSD.org[cperciva@FreeBSD.org], Oficial de Segurança Emérito do FreeBSD. Para usuários que acham conveniente atualizar seus sistemas em um servidor de atualização oficial, construir seu próprio FreeBSD Update Server pode ajudar a estender sua funcionalidade suportando versões do FreeBSD ajustadas manualmente ou fornecendo um espelho local que permitirá atualizações mais rápidas para várias máquinas.
+Este artigo descreve a construção de um Servidor Interno de Atualização do FreeBSD. O https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] é escrito por `{cperciva}`, Oficial de Segurança Emérito do FreeBSD. Para usuários que acham conveniente atualizar seus sistemas em relação a um servidor de atualização oficial, a construção de seu próprio Servidor de Atualização do FreeBSD pode ajudar a estender sua funcionalidade ao suportar versões do FreeBSD ajustadas manualmente ou fornecer um espelho local que permitirá atualizações mais rápidas para vários computadores.
'''
@@ -39,17 +53,17 @@ toc::[]
[[acknowledgments]]
== Agradecimentos
-Este artigo foi publicado posteriormente no http://bsdmag.org/magazine/1021-bsd-as-a-desktop[BSD Magazine].
+Este artigo foi posteriormente impresso na revista https://people.freebsd.org/~jgh/files/fus/BSD_03_2010_EN.pdf[BSD Magazine].
[[introduction]]
== Introdução
-Usuários experientes ou administradores são muitas vezes responsáveis por várias máquinas ou ambientes. Eles entendem as difíceis demandas e desafios da manutenção de tal infraestrutura. A execução de um Servidor de Atualização do FreeBSD facilita a implantação de patches de segurança e software em máquinas de teste selecionadas antes de implementá-las nas maquinas em produção. Isso também significa que vários sistemas podem ser atualizados a partir da rede local, em vez de uma conexão de Internet potencialmente mais lenta. Este artigo descreve os passos envolvidos na criação de um Servidor de Atualização do FreeBSD interno.
+Usuários ou administradores experientes frequentemente são responsáveis por várias máquinas ou ambientes. Eles entendem as exigências e desafios difíceis de manter essa infraestrutura. Executar um Servidor de Atualização do FreeBSD torna mais fácil implantar patches de segurança e atualizações de software para máquinas de teste selecionadas antes de implementá-los nos servidores de produção. Também significa que vários sistemas podem ser atualizados a partir da rede local em vez de uma conexão com a Internet potencialmente mais lenta. Este artigo descreve os passos envolvidos na criação de um Servidor Interno de Atualização do FreeBSD.
[[prerequisites]]
== Pré-requisitos
-Para construir um Servidor de Atualização do FreeBSD interno, alguns requisitos devem ser atendidos.
+Para construir um Servidor Interno de Atualização do FreeBSD, alguns requisitos devem ser atendidos.
* Um sistema FreeBSD em execução.
+
@@ -58,79 +72,78 @@ Para construir um Servidor de Atualização do FreeBSD interno, alguns requisito
No mínimo, as atualizações requerem a criação de uma versão do FreeBSD maior ou igual a versão do release alvo para a distribuição.
====
* Uma conta de usuário com pelo menos 4 GB de espaço disponível. Isso permitirá a criação de atualizações para 7.1 e 7.2, mas os requisitos de espaço exatos podem mudar de versão para versão.
-* Uma conta com acesso ao man:ssh[1] em uma máquina remota para carregar atualizações distribuídas.
-* Um servidor web, como o link:{handbook}#network-apache[Apache], com mais da metade do espaço necessário para a construção. Por exemplo, as compilações de teste para 7.1 e 7.2 consomem uma quantidade total de 4 GB e o espaço do servidor da web necessário para distribuir essas atualizações é de 2.6 GB.
-* Conhecimento básico de shell script com o Bourne shell, man:sh[1].
+* Uma conta man:ssh[1] em uma máquina remota para fazer o upload das atualizações que serão distribuídas.
+* Um servidor web, como o extref:{handbook}[Apache, network-apache], com mais da metade do espaço necessário para a compilação. Por exemplo, as compilações de teste para 7.1 e 7.2 consomem uma quantidade total de 4 GB, e o espaço necessário no servidor web para distribuir essas atualizações é de 2,6 GB.
+* Conhecimento básico de script shell com o shell Bourne, man:sh[1].
[[Configuration]]
-== Configuração: Instalação & Configuração
+== Configuração: Instalação e Setup
-Faça o download do software https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] instalando package:devel/subversion[] e package:security/ca_root_nss[], e execute:
+Faça o download do software https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] instalando os pacotes package:devel/git[] e package:security/ca_root_nss[], e execute:
-[source,shell]
+[source, shell]
....
-% svn co https://svn.freebsd.org/base/user/cperciva/freebsd-update-build freebsd-update-server
+% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server
....
-Atualize o [.filename]#scripts/build.conf# apropriadamente. Ele é criado durante todas as operações de construção.
+Atualize o arquivo [.filename]#scripts/build.conf# adequadamente. Ele será usado durante todas as operações de compilação.
-Aqui está o [.filename]#build.conf# padrão, que deve ser modificado para se adequar ao seu ambiente.
+Aqui está o [.filename]#build.conf# padrão, que deve ser modificado para atender ao seu ambiente.
[.programlisting]
....
-# Main configuration file for FreeBSD Update builds. The
-# release-specific configuration data is lower down in
-# the scripts tree.
+# Arquivo de configuração principal para compilações do FreeBSD Update.
+# Os dados de configuração específicos do lançamento estão mais abaixo
+# na árvore de scripts.
-# Location from which to fetch releases
+# Local de onde buscar os releases
export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>
-# Host platform
+# Plataforma do host
export HOSTPLATFORM=`uname -m`
-# Host name to use inside jails
+# Nome do host a ser usado dentro das jails
export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>
-# Location of SSH key
+# Localização da chave privada SSH
export SSHKEY=/root/.ssh/id_dsa <.>
-# SSH account into which files are uploaded
+# Conta SSH para a qual os arquivos são enviados
MASTERACCT=builder@wadham.daemonology.net <.>
-# Directory into which files are uploaded
+# Diretório para o qual os arquivos são enviados
MASTERDIR=update-master.freebsd.org <.>
....
-Parâmetros para consideração seriam:
+Os parâmetros a serem considerados seriam:
-<.> Este é o local onde as imagens ISO são baixadas (pela sub-rotina `fetchiso()` do [.filename]#scripts/build.subr#). A localização configurada não está limitada a URIs de FTP. Qualquer esquema de URI suportado pelo utilitário padrão man:fetch[] deve funcionar bem.
-Personalizações para o código de `fetchiso()` podem ser instaladas copiando o script padrão [.filename]#build.subr# para a área específica do release e da arquitetura em [.filename]#scripts/RELEASE/ARCHITECTURE/build.subr# e aplicando alterações locais.
+<.> Este é o local de onde as imagens ISO são baixadas (pela sub-rotina `fetchiso()` do arquivo [.filename]#scripts/build.subr#). A localização configurada não se limita a URIs FTP. Qualquer esquema de URI suportado pelo utilitário padrão man:fetch[1] deve funcionar bem. Personalizações para o código `fetchiso()` podem ser instaladas copiando o arquivo padrão [.filename]#build.subr# para a área específica de release e arquitetura em [.filename]#scripts/RELEASE/ARCHITECTURE/build.subr# e aplicando alterações locais.
-<.> O nome do host em construção. Esta informação será exibida em sistemas atualizados ao executar:
+<.> O nome do host de compilação. Essa informação será exibida em sistemas atualizados ao emitir o comando:
+
-[source,shell]
+[source, shell]
....
% uname -v
....
+
-<.> A chave SSH para fazer upload de arquivos para o servidor de atualizações. Um par de chaves pode ser criado digitando `ssh-keygen -t dsa`. Este parâmetro é opcional; a autenticação de senha padrão será usada como um método de autenticação secundário quando a `SSHKEY` não estiver definida.
-A página de manual do man:ssh-keygen[1] contém informações mais detalhadas sobre o SSH e as etapas apropriadas para criar e usar um.
+<.> A chave SSH para enviar arquivos para o servidor de atualização. Um par de chaves pode ser criado digitando `ssh-keygen -t dsa`. Este parâmetro é opcional; a autenticação padrão por senha será usada como método de autenticação de fallback quando o `SSHKEY` não estiver definido. A página do manual man:ssh-keygen[1] contém informações mais detalhadas sobre o SSH e os passos apropriados para criar e usar uma chave.
-<.> Conta para fazer upload de arquivos para o servidor de atualização.
+<.> Conta para enviar os arquivos para o servidor de atualização.
-<.> Diretório no servidor de atualização para o qual os arquivos são enviados.
+<.> Diretório no servidor de atualização onde os arquivos são enviados.
-O arquivo padrão [.filename]#build.conf# fornecido com o código-fonte do freebsd-update-server é adequado para a criação de versões i386 do FreeBSD. Como um exemplo de criação de um servidor de atualização para outras arquiteturas, as etapas a seguir descrevem as alterações necessárias na configuração para o amd64:
+O [.filename]#build.conf# padrão fornecido com o código fonte do freebsd-update-server é adequado para compilar releases do FreeBSD para a arquitetura i386. Como exemplo de compilação de um servidor de atualização para outras arquiteturas, os seguintes passos resumem as alterações de configuração necessárias para a arquitetura amd64:
[.procedure]
+====
. Crie um ambiente de compilação para o amd64:
+
-[source,shell]
+[source, shell]
....
% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64
....
-. Instale um [.filename]#build.conf# no diretório de criação recém-criado. As opções de configuração de compilação para o FreeBSD 7.2-RELEASE com arquitetura amd64 devem ser semelhantes a:
+. Instale um arquivo [.filename]#build.conf# no diretório de compilação recém-criado. As opções de configuração de compilação para o FreeBSD 7.2-RELEASE em amd64 devem ser semelhantes a:
+
[.programlisting]
....
@@ -147,20 +160,21 @@ export KERNELPARTS="generic"
export EOL=1275289200 <.>
....
+
-<.> A chave man:sha256[1] usada para fazer o hash para a release desejada é publicada no respectivo https://www.FreeBSD.org/releases/[anúncio de release].
-<.> Para gerar o número "End of Life" para o [.filename]#build.conf#, consulte o "EOL estimado" publicado no https://www.FreeBSD.org/security/[Site de Segurança do FreeBSD]. O valor de `EOL` pode ser derivado da data listada no site, usando o utilitário man:date[1], por exemplo:
+<.> A chave hash man:sha256[1] para o release desejado está publicada dentro do respectivo link:https://www.FreeBSD.org/releases/[anúncio de release].
+<.> Para gerar o número "End of Life" para o arquivo [.filename]#build.conf#, consulte o "Estimated EOL" publicado no link:https://www.FreeBSD.org/security/security/[Site de Segurança do FreeBSD]. O valor de `EOL` pode ser derivado da data listada no site da web, usando o utilitário man:date[1], por exemplo:
+
-[source,shell]
+[source, shell]
....
% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'
....
+====
[[build]]
== Compilando o Código de Atualização
-O primeiro passo é executar o [.filename]#scripts/make.sh#. Isso criará alguns binários, criará diretórios e irá gerar uma chave de assinatura RSA usada para aprovar as compilações. Nesta etapa, uma senha terá que ser fornecida para a criação final da chave de assinatura.
+O primeiro passo é executar o [.filename]#scripts/make.sh#. Isso irá compilar alguns binários, criar diretórios e gerar uma chave de assinatura RSA usada para aprovar as compilações. Nesta etapa, uma frase secreta terá que ser fornecida para a criação final da chave de assinatura.
-[source,shell]
+[source, shell]
....
# sh scripts/make.sh
cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps
@@ -185,20 +199,20 @@ Verifying - enter aes-256-cbc encryption password:
[NOTE]
====
-Mantenha um backup do fingerprint gerado. Este valor é necessário para o arquivo [.filename]#/etc/freebsd-update.conf# para as atualizações binárias.
+Anote a impressão digital da chave gerada. Este valor será necessário no [.filename]#/etc/freebsd-update.conf# para as atualizações binárias.
====
-Neste ponto, estamos prontos para montar uma construção.
+Neste ponto, estamos prontos para preparar uma compilação.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/init.sh amd64 7.2-RELEASE
....
-O que se segue é uma amostra de uma execução da compilação __inicial__.
+A seguir, segue um exemplo da execução de uma compilação _inicial_.
-[source,shell]
+[source, shell]
....
# sh scripts/init.sh amd64 7.2-RELEASE
Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE
@@ -240,14 +254,14 @@ world|base|/usr/lib/libalias_ftp.a
...
....
-Então a compilação do world é executada novamente, com patches para world. Uma explicação mais detalhada pode ser encontrada em [.filename]#scripts/build.subr#.
+Em seguida, a compilação do target "world" é realizada novamente, com patches de "world". Uma explicação mais detalhada pode ser encontrada em [.filename]#scripts/build.subr#.
[WARNING]
====
-Durante este segundo ciclo de compilação, o daemon do protocolo de tempo de rede, man:ntpd[8], é desativado. Segundo o Colin Percival mailto:cperciva@FreeBSD.org[cperciva@FreeBSD.org], Oficial de segurança emérito do FreeBSD, "a compilação do código do https://svnweb.freebsd.org/base/user/cperciva/freebsd-update-build/[freebsd-update-server] precisa identificar os timestamps que são armazenados nos arquivos para que possam ser ignorados ao comparar builds para determinar quais arquivos precisam ser atualizados. Essa busca de timestamp trabalha com duas construções com 400 dias de diferença e compara os resultados."
+Durante esse segundo ciclo de compilação, o daemon do protocolo de tempo de rede, man:ntpd[8], é desativado. Conforme o `{cperciva}`, Oficial de Segurança Emérito do FreeBSD, "o código de compilação do https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] precisa identificar carimbos de data/hora que são armazenados em arquivos para que eles possam ser ignorados ao comparar compilações e determinar quais arquivos precisam ser atualizados. Esse processo de localização de carimbos de data/hora funciona fazendo duas compilações com 400 dias de intervalo e comparando os resultados."
====
-[source,shell]
+[source, shell]
....
Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE
Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE
@@ -284,9 +298,9 @@ world|base|/usr/lib/libalias_ftp.a
...
....
-Finalmente, a construção é concluída.
+Por fim, a compilação é concluída.
-[source,shell]
+[source, shell]
....
Values of build stamps, excluding library archive headers:
v1.2 (Aug 25 2009 00:40:36)
@@ -322,15 +336,15 @@ they look sensible, then run
to sign the release.
....
-Aprove a compilação se tudo estiver correto. Mais informações sobre como determinar isso podem ser encontradas no arquivo fonte distribuído chamado [.filename]#USAGE#. Execute [.filename]#scripts/approve.sh#, conforme indicado. Isso assinará a release e moverá os componentes para uma área de preparação adequada para o upload.
+Aprove a compilação se tudo estiver correto. Mais informações sobre como determinar isso podem ser encontradas no arquivo de origem da distribuição chamado [.filename]#USAGE#. Execute [.filename]#scripts/approve.sh#, conforme indicado. Isso irá assinar a versão e mover os componentes para uma área de preparação adequada para o upload.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/mountkey.sh
....
-[source,shell]
+[source, shell]
....
# sh -e scripts/approve.sh amd64 7.2-RELEASE
Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE
@@ -340,9 +354,9 @@ Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-RELEASE
Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE
....
-Após o processo de aprovação ser concluído, o procedimento de upload pode ser iniciado.
+Após a conclusão do processo de aprovação, o procedimento de upload pode ser iniciado.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/upload.sh amd64 7.2-RELEASE
@@ -350,9 +364,9 @@ Após o processo de aprovação ser concluído, o procedimento de upload pode se
[NOTE]
====
-No caso de o código de atualização precisar ser reenviado, isso pode ser feito mudando para o diretório de distribuições públicas para o release alvo e atualizando os atributos do arquivo __carregado__.
+Caso o código de atualização precise ser reenviado, isso pode ser feito alterando para o diretório de distribuições públicas do release de destino e atualizando os atributos do arquivo já _enviado_.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64
# touch -t 200801010101.01 uploaded
@@ -360,70 +374,70 @@ No caso de o código de atualização precisar ser reenviado, isso pode ser feit
====
-Os arquivos enviados precisarão estar no diretório de documentos raiz do servidor web para que as atualizações sejam distribuídas. A configuração exata irá variar dependendo do servidor web usado. Para o servidor web Apache, consulte a sessão link:{handbook}#network-apache[Configuração de servidores Apache] no Handbook.
+Os arquivos enviados precisarão estar no diretório raiz de documentos do servidor web para que as atualizações possam ser distribuídas. A configuração exata variará dependendo do servidor web utilizado. Para o servidor web Apache, consulte a seção extref:{handbook}[Configuração de servidores Apache, network-apache] no Handbook.
-Atualize o `KeyPrint` e `ServerName` do cliente no arquivo [.filename]#/etc/freebsd-update.conf#, e execute as atualizações conforme instruído na link:{handbook}#updating-upgrading-freebsdupdate[Seção de Atualização do FreeBSD] no Handbook.
+Atualize o `KeyPrint` e o `ServerName` do cliente em [.filename]#/etc/freebsd-update.conf#, e execute as atualizações conforme instruído na seção extref:{handbook}[Atualização do FreeBSD, updating-upgrading-freebsdupdate] do Handbook.
[IMPORTANT]
====
-Para que o Servidor de Atualização do FreeBSD funcione corretamente, atualizações para ambas releases _atual_ e a release _que se deseja atualizar_ precisam ser compilados. Isso é necessário para determinar as diferenças de arquivos entre as releases. Por exemplo, ao atualizar um sistema FreeBSD de 7.1-RELEASE para 7.2-RELEASE, as atualizações precisarão ser construídas e carregadas em seu servidor de distribuição para ambas as versões.
+Para que o Servidor de Atualização do FreeBSD funcione corretamente, as atualizações tanto para o release _atual_ quanto para o release _para o qual se deseja atualizar_ precisam ser compiladas. Isso é necessário para determinar as diferenças nos arquivos entre os releases. Por exemplo, ao atualizar um sistema FreeBSD da versão 7.1-RELEASE para a versão 7.2-RELEASE, as atualizações precisarão ser compiladas e enviadas para o seu servidor de distribuição para ambas as versões.
====
-Para referência, toda a execução do link:../../../source/articles/freebsd-update-server/init.txt[init.sh] é anexada.
+Para referência, toda a execução do link:../../source/articles/freebsd-update-server/init.txt[init.sh] está anexada.
[[patch]]
== Compilando um Patch
-Toda vez que é anunciado um https://www.FreeBSD.org/security/advisories/[aviso de segurança] ou uma https://www.FreeBSD.org/security/notices/[notificação de segurança], um patch de atualização pode ser construído.
+Toda vez que uma link:https://www.FreeBSD.org/security/advisories/[recomendação de segurança] ou um link:https://www.FreeBSD.org/security/notices/[aviso de segurança] é anunciado, uma atualização de patch pode ser compilada.
Para este exemplo, o 7.1-RELEASE será usado.
-Algumas suposições são feitas para uma versão diferente:
+Algumas suposições são feitas para compilar uma release diferente:
* Configure a estrutura de diretórios correta para a compilação inicial.
* Execute uma compilação inicial para o 7.1-RELEASE.
-Crie o diretório de correção do respectivo release no diretório [.filename]#/usr/local/freebsd-update-server/patches/#.
+Crie o diretório de patches do respectivo release em [.filename]#/usr/local/freebsd-update-server/patches/#.
-[source,shell]
+[source, shell]
....
% mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/
% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE
....
-Como exemplo, pegue o patch para man:named[8]. Leia o comunicado, e pegue o arquivo necessário de https://www.FreeBSD.org/security/advisories/[Avisos de Segurança do FreeBSD]. Mais informações sobre a interpretação do comunicado podem ser encontradas no link:{handbook}#security-advisories[Handbook do FreeBSD].
+Como exemplo, considere o patch para o man:named[8]. Leia o aviso e pegue o arquivo necessário em link:https://www.FreeBSD.org/security/advisories/[Avisos de Segurança do FreeBSD]. Mais informações sobre a interpretação do aviso podem ser encontradas no extref:{handbook}[Handbook do FreeBSD, security-advisories].
-No https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[resumo de segurança], este comunicado é chamado `SA-09:12.bind`. Depois de baixar o arquivo, é necessário renomear o arquivo para um nível de correção apropriado. Sugere-se manter isso consistente com os níveis oficiais de correção do FreeBSD, mas seu nome pode ser escolhido livremente. Para esta compilação, vamos seguir a prática atualmente estabelecida do FreeBSD e chamar isso de `p7`. Renomeie o arquivo:
+No https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[informe de segurança], este aviso é chamado de `SA-09:12.bind`. Após o download do arquivo, é necessário renomeá-lo para um nível de patch apropriado. É sugerido manter isso consistente com os níveis de patch oficiais do FreeBSD, mas seu nome pode ser escolhido livremente . Para esta compilação, vamos seguir a prática atualmente estabelecida do FreeBSD e chamá-la de `p7`. Renomeie o arquivo:
-[source,shell]
+[source, shell]
....
-
% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind
....
[NOTE]
====
-Ao executar uma compilação em nível de patch, supõe-se que os patches anteriores estejam no lugar. Quando uma compilação de patch é executada, ela executará todas os patches contidos no diretório de patch.
+Ao executar uma compilação de nível de patch, presume-se que os patches anteriores estão em vigor. Quando uma compilação de patch é executada, ela executará todos os patches contidos no diretório de patch.
-Pode haver patches personalizados adicionados a qualquer compilação. Use o número zero ou qualquer outro número.
+Podem ser adicionados patches personalizados a qualquer compilação. Use o número zero ou qualquer outro número.
====
[WARNING]
====
+
Cabe ao administrador do Servidor de Atualização do FreeBSD tomar as medidas apropriadas para verificar a autenticidade de cada patch.
====
-Neste ponto, um _diff_ está pronto para ser construído. O software verifica primeiro para ver se um [.filename]#scripts/init.sh# foi executado na respectiva versão antes de executar a construção do diff.
+Neste ponto, um _diff_ está pronto para ser compilado. O software verifica primeiro se um [.filename]#scripts/init.sh# foi executado no respectivo release antes de executar a compilação do _diff_.
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/diff.sh amd64 7.1-RELEASE 7
....
-O que se segue é um exemplo de uma execução de uma compilação __diferencial__.
+A seguir, segue um exemplo de execução de compilação _diferencial_.
-[source,shell]
+[source, shell]
....
# sh -e scripts/diff.sh amd64 7.1-RELEASE 7
Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7
@@ -500,7 +514,7 @@ Wed Aug 26 17:20:39 UTC 2009
As atualizações são impressas e a aprovação é solicitada.
-[source,shell]
+[source, shell]
....
New updates:
kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10|
@@ -520,9 +534,9 @@ files to confirm that they look sensible, then run
to sign the build.
....
-Siga o mesmo processo descrito anteriormente para aprovar uma compilação:
+Siga o mesmo processo mencionado anteriormente para aprovar uma compilação:
-[source,shell]
+[source, shell]
....
# sh -e scripts/approve.sh amd64 7.1-RELEASE
Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE
@@ -540,18 +554,18 @@ the new builds.
Depois de aprovar a compilação, faça o upload do software:
-[source,shell]
+[source, shell]
....
# cd /usr/local/freebsd-update-server
# sh scripts/upload.sh amd64 7.1-RELEASE
....
-Para referência, toda a execução do link:../../../source/articles/freebsd-update-server/diff.txt[diff.sh] é anexada.
+Para referência, toda a execução do link:../../source/articles/freebsd-update-server/diff.txt[diff.sh] está anexada.
[[tips]]
== Dicas
-* Se uma versão personalizada for criada usando o procedimento `make release` link:{releng}#release-build[nativo], o `freebsd-update-server` funcionará a partir do seu release. Como exemplo, uma versão sem ports ou documentação pode ser construída limpando funcionalidades de limpeza pertinentes às sub-rotinas de documentação `findextradocs()`, `addextradocs()` e alterando o local de download em `fetchiso()`, respectivamente, em [.filename]#scripts/build.subr#. Como último passo, altere o hash man:sha256[1] no arquivo [.filename]#build.conf# sob sua respectiva versão e arquitetura e você estará pronto para criar sua versão personalizada.
+* Se um release personalizado for compilado usando o extref:{releng}[procedimento, release-build] nativo `make release`, o código do freebsd-update-server funcionará a partir do seu release. Como exemplo, um release sem ports ou documentação pode ser criado limpando a funcionalidade referente às sub-rotinas de documentação `findextradocs ()`, `addextradocs ()` e alterando o local de download em `fetchiso ()`, respectivamente, em [.filename]#scripts/build.subr#. Como último passo, altere a chave man:sha256[1] em [.filename]#build.conf# no seu respectivo release e arquitetura e você estará pronto para compilar o seu release personalizado.
+
[.programlisting]
....
@@ -565,7 +579,7 @@ addextradocs () {
}
....
-* Adicionando flags `-j _NUMERO_` para os alvos `buildworld` e `obj` no script [.filename]#scripts/build.subr# pode acelerar o processamento, dependendo do hardware usado, no entanto, não é necessário. O uso dessas flags em outros alvos não é recomendado, pois pode tornar a construção não confiável.
+* Adicionar flags `-j _NUMERO_` para os alvos `buildworld` e `obj` no script [.filename]#scripts/build.subr# pode acelerar o processamento, dependendo do hardware utilizado, no entanto, não é necessário. Usar esses flags em outros alvos não é recomendado, pois pode fazer com que a compilação se torne pouco confiável.
+
[.programlisting]
....
@@ -580,7 +594,7 @@ addextradocs () {
make ${COMPATFLAGS} release.1 release.2 2>&1
....
-* Crie um registro link:{handbook}#network-dns[DNS] apropriado para o servidor de atualizações e coloque outros por trás dele com variáveis de pesos diferentes. O uso desse recurso fornecerá espelhos de atualização, no entanto, essa dica não é necessária, a menos que você deseje fornecer um serviço redundante.
+* Crie um registro extref:{handbook}[DNS, network-dns] SRV apropriado para o servidor de atualização e coloque outros atrás dele com pesos variáveis. O uso dessa facilidade fornecerá espelhos de atualização, no entanto, essa dica não é necessária, a menos que você deseje fornecer um serviço redundante.
+
[.programlisting]
....
diff --git a/documentation/content/pt-br/articles/freebsd-update-server/_index.po b/documentation/content/pt-br/articles/freebsd-update-server/_index.po
new file mode 100644
index 0000000000..2159de25d0
--- /dev/null
+++ b/documentation/content/pt-br/articles/freebsd-update-server/_index.po
@@ -0,0 +1,1562 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: 2023-04-22 20:29+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesfreebsd-update-server_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:1
+#, no-wrap
+msgid "Building your own freebsd-update server allows a system administrator to perform fast updates for a number of machines from a local mirror"
+msgstr ""
+"Construir seu próprio servidor freebsd-update permite que um administrador "
+"de sistema realize atualizações rápidas para vários computadores a partir de "
+"um espelho local"
+
+#. type: Title =
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:1
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:12
+#, no-wrap
+msgid "Build Your Own FreeBSD Update Server"
+msgstr "Construa seu próprio servidor de atualização do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:49
+msgid ""
+"This article describes building an internal FreeBSD Update Server. The "
+"https://github.com/freebsd/freebsd-update-build/[freebsd-update-server] is "
+"written by `{cperciva}`, Security Officer Emeritus of FreeBSD. For users "
+"that think it is convenient to update their systems against an official "
+"update server, building their own FreeBSD Update Server may help to extend "
+"its functionality by supporting manually-tweaked FreeBSD releases or by "
+"providing a local mirror that will allow faster updates for a number of "
+"machines."
+msgstr ""
+"Este artigo descreve a construção de um Servidor Interno de Atualização do "
+"FreeBSD. O https://github.com/freebsd/freebsd-update-build/[freebsd-update-"
+"server] é escrito por `{cperciva}`, Oficial de Segurança Emérito do FreeBSD. "
+"Para usuários que acham conveniente atualizar seus sistemas em relação a um "
+"servidor de atualização oficial, a construção de seu próprio Servidor de "
+"Atualização do FreeBSD pode ajudar a estender sua funcionalidade ao suportar "
+"versões do FreeBSD ajustadas manualmente ou fornecer um espelho local que "
+"permitirá atualizações mais rápidas para vários computadores."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:51
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:55
+#, no-wrap
+msgid "Acknowledgments"
+msgstr "Agradecimentos"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:58
+msgid ""
+"This article was subsequently printed at https://people.freebsd.org/~jgh/"
+"files/fus/BSD_03_2010_EN.pdf[BSD Magazine]."
+msgstr ""
+"Este artigo foi posteriormente impresso na revista https://people.freebsd."
+"org/~jgh/files/fus/BSD_03_2010_EN.pdf[BSD Magazine]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:60
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:67
+msgid ""
+"Experienced users or administrators are often responsible for several "
+"machines or environments. They understand the difficult demands and "
+"challenges of maintaining such an infrastructure. Running a FreeBSD Update "
+"Server makes it easier to deploy security and software patches to selected "
+"test machines before rolling them out to production. It also means a number "
+"of systems can be updated from the local network rather than a potentially "
+"slower Internet connection. This article outlines the steps involved in "
+"creating an internal FreeBSD Update Server."
+msgstr ""
+"Usuários ou administradores experientes frequentemente são responsáveis por "
+"várias máquinas ou ambientes. Eles entendem as exigências e desafios "
+"difíceis de manter essa infraestrutura. Executar um Servidor de Atualização "
+"do FreeBSD torna mais fácil implantar patches de segurança e atualizações "
+"de software para máquinas de teste selecionadas antes de implementá-los nos "
+"servidores de produção. Também significa que vários sistemas podem ser "
+"atualizados a partir da rede local em vez de uma conexão com a Internet "
+"potencialmente mais lenta. Este artigo descreve os passos envolvidos na "
+"criação de um Servidor Interno de Atualização do FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:69
+#, no-wrap
+msgid "Prerequisites"
+msgstr "Pré-requisitos"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:72
+msgid ""
+"To build an internal FreeBSD Update Server some requirements should be met."
+msgstr ""
+"Para construir um Servidor Interno de Atualização do FreeBSD, alguns "
+"requisitos devem ser atendidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:74
+msgid "A running FreeBSD system."
+msgstr "Um sistema FreeBSD em execução."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:78
+msgid ""
+"At a minimum, updates require building on a FreeBSD release greater than or "
+"equal to the target release version for distribution."
+msgstr ""
+"No mínimo, as atualizações requerem a criação de uma versão do FreeBSD maior "
+"ou igual a versão do release alvo para a distribuição."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:80
+msgid ""
+"A user account with at least 4 GB of available space. This will allow the "
+"creation of updates for 7.1 and 7.2, but the exact space requirements may "
+"change from version to version."
+msgstr ""
+"Uma conta de usuário com pelo menos 4 GB de espaço disponível. Isso "
+"permitirá a criação de atualizações para 7.1 e 7.2, mas os requisitos de "
+"espaço exatos podem mudar de versão para versão."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:81
+msgid ""
+"An man:ssh[1] account on a remote machine to upload distributed updates."
+msgstr ""
+"Uma conta man:ssh[1] em uma máquina remota para fazer o upload das "
+"atualizações que serão distribuídas."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:82
+msgid ""
+"A web server, like extref:{handbook}[Apache, network-apache], with over half "
+"of the space required for the build. For instance, test builds for 7.1 and "
+"7.2 consume a total amount of 4 GB, and the webserver space needed to "
+"distribute these updates is 2.6 GB."
+msgstr ""
+"Um servidor web, como o extref:{handbook}[Apache, network-apache], com mais "
+"da metade do espaço necessário para a compilação. Por exemplo, as "
+"compilações de teste para 7.1 e 7.2 consomem uma quantidade total de 4 GB, e "
+"o espaço necessário no servidor web para distribuir essas atualizações é de "
+"2,6 GB."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:83
+msgid "Basic knowledge of shell scripting with Bourne shell, man:sh[1]."
+msgstr "Conhecimento básico de script shell com o shell Bourne, man:sh[1]."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:85
+#, no-wrap
+msgid "Configuration: Installation & Setup"
+msgstr "Configuração: Instalação e Setup"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:88
+msgid ""
+"Download the https://github.com/freebsd/freebsd-update-build/[freebsd-update-"
+"server] software by installing package:devel/git[] and package:security/"
+"ca_root_nss[], and execute:"
+msgstr ""
+"Faça o download do software https://github.com/freebsd/freebsd-update-build/"
+"[freebsd-update-server] instalando os pacotes package:devel/git[] e package:"
+"security/ca_root_nss[], e execute:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:92
+#, no-wrap
+msgid "% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-update-server\n"
+msgstr ""
+"% git clone https://github.com/freebsd/freebsd-update-build.git freebsd-"
+"update-server\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:96
+msgid ""
+"Update [.filename]#scripts/build.conf# appropriately. It is sourced during "
+"all build operations."
+msgstr ""
+"Atualize o arquivo [.filename]#scripts/build.conf# adequadamente. Ele será "
+"usado durante todas as operações de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:98
+msgid ""
+"Here is the default [.filename]#build.conf#, which should be modified to "
+"suit your environment."
+msgstr ""
+"Aqui está o [.filename]#build.conf# padrão, que deve ser modificado para "
+"atender ao seu ambiente."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:104
+#, no-wrap
+msgid ""
+"# Main configuration file for FreeBSD Update builds. The\n"
+"# release-specific configuration data is lower down in\n"
+"# the scripts tree.\n"
+msgstr ""
+"# Arquivo de configuração principal para compilações do FreeBSD Update. \n"
+"# Os dados de configuração específicos do lançamento estão mais abaixo \n"
+"# na árvore de scripts.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:107
+#, no-wrap
+msgid ""
+"# Location from which to fetch releases\n"
+"export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>\n"
+msgstr ""
+"# Local de onde buscar os releases\n"
+"export FTP=ftp://ftp2.freebsd.org/pub/FreeBSD/releases <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:110
+#, no-wrap
+msgid ""
+"# Host platform\n"
+"export HOSTPLATFORM=`uname -m`\n"
+msgstr ""
+"# Plataforma do host\n"
+"export HOSTPLATFORM=`uname -m`\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:113
+#, no-wrap
+msgid ""
+"# Host name to use inside jails\n"
+"export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>\n"
+msgstr ""
+"# Nome do host a ser usado dentro das jails\n"
+"export BUILDHOSTNAME=${HOSTPLATFORM}-builder.daemonology.net <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:116
+#, no-wrap
+msgid ""
+"# Location of SSH key\n"
+"export SSHKEY=/root/.ssh/id_dsa <.>\n"
+msgstr ""
+"# Localização da chave privada SSH \n"
+"export SSHKEY=/root/.ssh/id_dsa <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:119
+#, no-wrap
+msgid ""
+"# SSH account into which files are uploaded\n"
+"MASTERACCT=builder@wadham.daemonology.net <.>\n"
+msgstr ""
+"# Conta SSH para a qual os arquivos são enviados\n"
+"MASTERACCT=builder@wadham.daemonology.net <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:122
+#, no-wrap
+msgid ""
+"# Directory into which files are uploaded\n"
+"MASTERDIR=update-master.freebsd.org <.>\n"
+msgstr ""
+"# Diretório para o qual os arquivos são enviados\n"
+"MASTERDIR=update-master.freebsd.org <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:125
+msgid "Parameters for consideration would be:"
+msgstr "Os parâmetros a serem considerados seriam:"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:128
+msgid ""
+"This is the location where ISO images are downloaded from (by the "
+"`fetchiso()` subroutine of [.filename]#scripts/build.subr#). The location "
+"configured is not limited to FTP URIs. Any URI scheme supported by standard "
+"man:fetch[1] utility should work fine. Customizations to the `fetchiso()` "
+"code can be installed by copying the default [.filename]#build.subr# script "
+"to the release and architecture-specific area at [.filename]#scripts/RELEASE/"
+"ARCHITECTURE/build.subr# and applying local changes."
+msgstr ""
+"Este é o local de onde as imagens ISO são baixadas (pela sub-rotina "
+"`fetchiso()` do arquivo [.filename]#scripts/build.subr#). A localização "
+"configurada não se limita a URIs FTP. Qualquer esquema de URI suportado pelo "
+"utilitário padrão man:fetch[1] deve funcionar bem. Personalizações para o "
+"código `fetchiso()` podem ser instaladas copiando o arquivo padrão [."
+"filename]#build.subr# para a área específica de release e arquitetura em [."
+"filename]#scripts/RELEASE/ARCHITECTURE/build.subr# e aplicando alterações "
+"locais."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:130
+msgid ""
+"The name of the build host. This information will be displayed on updated "
+"systems when issuing:"
+msgstr ""
+"O nome do host de compilação. Essa informação será exibida em sistemas "
+"atualizados ao emitir o comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:134
+#, no-wrap
+msgid "% uname -v\n"
+msgstr "% uname -v\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:138
+msgid ""
+"The SSH key for uploading files to the update server. A key pair can be "
+"created by typing `ssh-keygen -t dsa`. This parameter is optional; standard "
+"password authentication will be used as a fallback authentication method "
+"when `SSHKEY` is not defined. The man:ssh-keygen[1] manual page has more "
+"detailed information about SSH and the appropriate steps for creating and "
+"using one."
+msgstr ""
+"A chave SSH para enviar arquivos para o servidor de atualização. Um par de "
+"chaves pode ser criado digitando `ssh-keygen -t dsa`. Este parâmetro é "
+"opcional; a autenticação padrão por senha será usada como método de "
+"autenticação de fallback quando o `SSHKEY` não estiver definido. A página do "
+"manual man:ssh-keygen[1] contém informações mais detalhadas sobre o SSH e os "
+"passos apropriados para criar e usar uma chave."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:140
+msgid "Account for uploading files to the update server."
+msgstr "Conta para enviar os arquivos para o servidor de atualização."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:142
+msgid "Directory on the update server where files are uploaded to."
+msgstr "Diretório no servidor de atualização onde os arquivos são enviados."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:144
+msgid ""
+"The default [.filename]#build.conf# shipped with the freebsd-update-server "
+"sources is suitable for building i386 releases of FreeBSD. As an example of "
+"building an update server for other architectures, the following steps "
+"outline the configuration changes needed for amd64:"
+msgstr ""
+"O [.filename]#build.conf# padrão fornecido com o código fonte do freebsd-"
+"update-server é adequado para compilar releases do FreeBSD para a "
+"arquitetura i386. Como exemplo de compilação de um servidor de atualização "
+"para outras arquiteturas, os seguintes passos resumem as alterações de "
+"configuração necessárias para a arquitetura amd64:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:148
+msgid "Create a build environment for amd64:"
+msgstr "Crie um ambiente de compilação para o amd64:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:152
+#, no-wrap
+msgid "% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64\n"
+msgstr "% mkdir -p /usr/local/freebsd-update-server/scripts/7.2-RELEASE/amd64\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:155
+msgid ""
+"Install a [.filename]#build.conf# in the newly created build directory. The "
+"build configuration options for FreeBSD 7.2-RELEASE on amd64 should be "
+"similar to:"
+msgstr ""
+"Instale um arquivo [.filename]#build.conf# no diretório de compilação recém-"
+"criado. As opções de configuração de compilação para o FreeBSD 7.2-RELEASE "
+"em amd64 devem ser semelhantes a:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:166
+#, no-wrap
+msgid ""
+"# SHA256 hash of RELEASE disc1.iso image.\n"
+"export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5 <.>\n"
+"# Components of the world, source, and kernels\n"
+"export WORLDPARTS=\"base catpages dict doc games info manpages proflibs lib32\"\n"
+"export SOURCEPARTS=\"base bin contrib crypto etc games gnu include krb5 \\\n"
+" lib libexec release rescue sbin secure share sys tools \\\n"
+" ubin usbin cddl\"\n"
+"export KERNELPARTS=\"generic\"\n"
+msgstr ""
+"# SHA256 hash of RELEASE disc1.iso image.\n"
+"export RELH=1ea1f6f652d7c5f5eab7ef9f8edbed50cb664b08ed761850f95f48e86cc71ef5 "
+"<.>\n"
+"# Components of the world, source, and kernels\n"
+"export WORLDPARTS=\"base catpages dict doc games info manpages proflibs "
+"lib32\"\n"
+"export SOURCEPARTS=\"base bin contrib crypto etc games gnu include krb5 \\\n"
+" lib libexec release rescue sbin secure share sys tools \\\n"
+" ubin usbin cddl\"\n"
+"export KERNELPARTS=\"generic\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:169
+#, no-wrap
+msgid ""
+"# EOL date\n"
+"export EOL=1275289200 <.>\n"
+msgstr ""
+"# EOL date\n"
+"export EOL=1275289200 <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:172
+msgid ""
+"The man:sha256[1] hash key for the desired release, is published within the "
+"respective link:https://www.FreeBSD.org/releases/[release announcement]."
+msgstr ""
+"A chave hash man:sha256[1] para o release desejado está publicada dentro do "
+"respectivo link:https://www.FreeBSD.org/releases/[anúncio de release]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:173
+msgid ""
+"To generate the \"End of Life\" number for [.filename]#build.conf#, refer to "
+"the \"Estimated EOL\" posted on the link:https://www.FreeBSD.org/security/"
+"security/[FreeBSD Security Website]. The value of `EOL` can be derived from "
+"the date listed on the web site, using the man:date[1] utility, for example:"
+msgstr ""
+"Para gerar o número \"End of Life\" para o arquivo [.filename]#build.conf#, "
+"consulte o \"Estimated EOL\" publicado no link:https://www.FreeBSD.org/"
+"security/security/[Site de Segurança do FreeBSD]. O valor de `EOL` pode ser "
+"derivado da data listada no site da web, usando o utilitário man:date[1], "
+"por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:177
+#, no-wrap
+msgid "% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'\n"
+msgstr "% date -j -f '%Y%m%d-%H%M%S' '20090401-000000' '+%s'\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:181
+#, no-wrap
+msgid "Building Update Code"
+msgstr "Compilando o Código de Atualização"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:186
+msgid ""
+"The first step is to run [.filename]#scripts/make.sh#. This will build some "
+"binaries, create directories, and generate an RSA signing key used for "
+"approving builds. In this step, a passphrase will have to be supplied for "
+"the final creation of the signing key."
+msgstr ""
+"O primeiro passo é executar o [.filename]#scripts/make.sh#. Isso irá "
+"compilar alguns binários, criar diretórios e gerar uma chave de assinatura "
+"RSA usada para aprovar as compilações. Nesta etapa, uma frase secreta terá "
+"que ser fornecida para a criação final da chave de assinatura."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:201
+#, no-wrap
+msgid ""
+"# sh scripts/make.sh\n"
+"cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps\n"
+"findstamps.c: In function 'usage':\n"
+"findstamps.c:45: warning: incompatible implicit declaration of built-in function 'exit'\n"
+"cc -O2 -fno-strict-aliasing -pipe unstamp.c -o unstamp\n"
+"install findstamps ../bin\n"
+"install unstamp ../bin\n"
+"rm -f findstamps unstamp\n"
+"Generating RSA private key, 4096 bit long modulus\n"
+"................................................................................++\n"
+"...................++\n"
+"e is 65537 (0x10001)\n"
+msgstr ""
+"# sh scripts/make.sh\n"
+"cc -O2 -fno-strict-aliasing -pipe findstamps.c -o findstamps\n"
+"findstamps.c: In function 'usage':\n"
+"findstamps.c:45: warning: incompatible implicit declaration of built-in "
+"function 'exit'\n"
+"cc -O2 -fno-strict-aliasing -pipe unstamp.c -o unstamp\n"
+"install findstamps ../bin\n"
+"install unstamp ../bin\n"
+"rm -f findstamps unstamp\n"
+"Generating RSA private key, 4096 bit long modulus\n"
+"............................................................................."
+"...++\n"
+"...................++\n"
+"e is 65537 (0x10001)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:204
+#, no-wrap
+msgid ""
+"Public key fingerprint:\n"
+"27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e\n"
+msgstr ""
+"Public key fingerprint:\n"
+"27ef53e48dc869eea6c3136091cc6ab8589f967559824779e855d58a2294de9e\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:208
+#, no-wrap
+msgid ""
+"Encrypting signing key for root\n"
+"enter aes-256-cbc encryption password:\n"
+"Verifying - enter aes-256-cbc encryption password:\n"
+msgstr ""
+"Encrypting signing key for root\n"
+"enter aes-256-cbc encryption password:\n"
+"Verifying - enter aes-256-cbc encryption password:\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:214
+msgid ""
+"Keep a note of the generated key fingerprint. This value is required in [."
+"filename]#/etc/freebsd-update.conf# for binary updates."
+msgstr ""
+"Anote a impressão digital da chave gerada. Este valor será necessário no [."
+"filename]#/etc/freebsd-update.conf# para as atualizações binárias."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:217
+msgid "At this point, we are ready to stage a build."
+msgstr "Neste ponto, estamos prontos para preparar uma compilação."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:222
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:225
+msgid "What follows is a sample of an _initial_ build run."
+msgstr "A seguir, segue um exemplo da execução de uma compilação _inicial_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:245
+#, no-wrap
+msgid ""
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE\n"
+"/usr/local/freebsd-update-server/work/7.2-RELE100 of 588 MB 359 kBps 00m00s\n"
+"Mon Aug 24 16:32:38 PDT 2009 Verifying disc1 hash for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:32:44 PDT 2009 Extracting components for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:34:05 PDT 2009 Constructing world+src image for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:35:57 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 23:36:24 UTC 2009 Building world for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:31:29 UTC 2009 Distributing world for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:32:36 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:44:44 UTC 2009 Constructing world components for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:44:56 UTC 2009 Distributing source for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:46:18 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:46:33 PDT 2009 Identifying extra documentation for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:47:13 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:47:18 PDT 2009 Indexing release for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:50:44 PDT 2009 Indexing world0 for FreeBSD/amd64 7.2-RELEASE\n"
+msgstr ""
+"# sh scripts/init.sh amd64 7.2-RELEASE\n"
+"Mon Aug 24 16:04:36 PDT 2009 Starting fetch for FreeBSD/amd64 7.2-RELEASE\n"
+"/usr/local/freebsd-update-server/work/7.2-RELE100 of 588 MB 359 kBps "
+"00m00s\n"
+"Mon Aug 24 16:32:38 PDT 2009 Verifying disc1 hash for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 16:32:44 PDT 2009 Extracting components for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 16:34:05 PDT 2009 Constructing world+src image for FreeBSD/amd64 7"
+".2-RELEASE\n"
+"Mon Aug 24 16:35:57 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 23:36:24 UTC 2009 Building world for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:31:29 UTC 2009 Distributing world for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Tue Aug 25 00:32:36 UTC 2009 Building and distributing kernels for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Tue Aug 25 00:44:44 UTC 2009 Constructing world components for FreeBSD/amd64 "
+"7.2-RELEASE\n"
+"Tue Aug 25 00:44:56 UTC 2009 Distributing source for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 17:46:18 PDT 2009 Moving components into staging area for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:46:33 PDT 2009 Identifying extra documentation for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:47:13 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 17:47:18 PDT 2009 Indexing release for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 17:50:44 PDT 2009 Indexing world0 for FreeBSD/amd64 7.2-RELEASE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:266
+#, no-wrap
+msgid ""
+"Files built but not released:\n"
+"Files released but not built:\n"
+"Files which differ by more than contents:\n"
+"Files which differ between release and build:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"src|sys|/sys/conf/newvers.sh\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+msgstr ""
+"Files built but not released:\n"
+"Files released but not built:\n"
+"Files which differ by more than contents:\n"
+"Files which differ between release and build:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"src|sys|/sys/conf/newvers.sh\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:270
+msgid ""
+"Then the build of the world is performed again, with world patches. A more "
+"detailed explanation may be found in [.filename]#scripts/build.subr#."
+msgstr ""
+"Em seguida, a compilação do target \"world\" é realizada novamente, com "
+"patches de \"world\". Uma explicação mais detalhada pode ser encontrada em [."
+"filename]#scripts/build.subr#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:276
+msgid ""
+"During this second build cycle, the network time protocol daemon, man:"
+"ntpd[8], is turned off. Per `{cperciva}`, Security Officer Emeritus of "
+"FreeBSD, \"the https://github.com/freebsd/freebsd-update-build/[freebsd-"
+"update-server] build code needs to identify timestamps which are stored in "
+"files so that they can be ignored when comparing builds to determine which "
+"files need to be updated. This timestamp-finding works by doing two builds "
+"400 days apart and comparing the results.\""
+msgstr ""
+"Durante esse segundo ciclo de compilação, o daemon do protocolo de tempo de "
+"rede, man:ntpd[8], é desativado. Conforme o `{cperciva}`, Oficial de "
+"Segurança Emérito do FreeBSD, \"o código de compilação do https://github.com/"
+"freebsd/freebsd-update-build/[freebsd-update-server] precisa identificar "
+"carimbos de data/hora que são armazenados em arquivos para que eles possam "
+"ser ignorados ao comparar compilações e determinar quais arquivos precisam "
+"ser atualizados. Esse processo de localização de carimbos de data/hora "
+"funciona fazendo duas compilações com 400 dias de intervalo e comparando os "
+"resultados.\""
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:295
+#, no-wrap
+msgid ""
+"Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 01:49:42 UTC 2010 Distributing world for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 01:50:50 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 02:02:56 UTC 2010 Constructing world components for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 02:03:08 UTC 2010 Distributing source for FreeBSD/amd64 7.2-RELEASE\n"
+"Tue Sep 28 19:04:31 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:04:46 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:04:51 PDT 2009 Indexing world1 for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:08:04 PDT 2009 Locating build stamps for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:10:19 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:10:19 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:10:20 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 12:16:57 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 12:16:59 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.2-RELEASE\n"
+msgstr ""
+"Mon Aug 24 17:54:07 PDT 2009 Extracting world+src for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Wed Sep 29 00:54:34 UTC 2010 Building world for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Sep 29 01:49:42 UTC 2010 Distributing world for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Wed Sep 29 01:50:50 UTC 2010 Building and distributing kernels for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Wed Sep 29 02:02:56 UTC 2010 Constructing world components for FreeBSD/amd64 "
+"7.2-RELEASE\n"
+"Wed Sep 29 02:03:08 UTC 2010 Distributing source for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Tue Sep 28 19:04:31 PDT 2010 Moving components into staging area for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:04:46 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 19:04:51 PDT 2009 Indexing world1 for FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:08:04 PDT 2009 Locating build stamps for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 19:10:19 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Mon Aug 24 19:10:19 PDT 2009 Preparing to copy files into staging area for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 19:10:20 PDT 2009 Copying data files into staging area for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 12:16:57 PDT 2009 Copying metadata files into staging area for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Mon Aug 24 12:16:59 PDT 2009 Constructing metadata index and tag for FreeBSD/"
+"amd64 7.2-RELEASE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:313
+#, no-wrap
+msgid ""
+"Files found which include build stamps:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/include/osreldate.h\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+msgstr ""
+"Files found which include build stamps:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/include/osreldate.h\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:316
+msgid "Finally, the build completes."
+msgstr "Por fim, a compilação é concluída."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:345
+#, no-wrap
+msgid ""
+"Values of build stamps, excluding library archive headers:\n"
+"v1.2 (Aug 25 2009 00:40:36)\n"
+"v1.2 (Aug 25 2009 00:38:22)\n"
+"@()FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009\n"
+"FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009\n"
+" root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC\n"
+"7.2-RELEASE\n"
+"Mon Aug 24 23:55:25 UTC 2009\n"
+"Mon Aug 24 23:55:25 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+"ntpq 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+" * Copyright (c) 1992-2009 The FreeBSD Project.\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+"Mon Aug 24 23:55:40 UTC 2009\n"
+"Aug 25 2009\n"
+"ntpd 4.2.4p5-a Mon Aug 24 23:55:52 UTC 2009 (1)\n"
+"ntpdate 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+"ntpdc 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+msgstr ""
+"Values of build stamps, excluding library archive headers:\n"
+"v1.2 (Aug 25 2009 00:40:36)\n"
+"v1.2 (Aug 25 2009 00:38:22)\n"
+"@()FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009\n"
+"FreeBSD 7.2-RELEASE 0: Tue Aug 25 00:38:29 UTC 2009\n"
+" root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC\n"
+"7.2-RELEASE\n"
+"Mon Aug 24 23:55:25 UTC 2009\n"
+"Mon Aug 24 23:55:25 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+" built by root@server.myhost.com on Tue Aug 25 00:16:15 UTC 2009\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+"ntpq 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+" * Copyright (c) 1992-2009 The FreeBSD Project.\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+"Mon Aug 24 23:55:40 UTC 2009\n"
+"Aug 25 2009\n"
+"ntpd 4.2.4p5-a Mon Aug 24 23:55:52 UTC 2009 (1)\n"
+"ntpdate 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+"ntpdc 4.2.4p5-a Mon Aug 24 23:55:53 UTC 2009 (1)\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Tue Aug 25 00:21:21 UTC 2009\n"
+"Mon Aug 24 23:46:47 UTC 2009\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:351
+#, no-wrap
+msgid ""
+"FreeBSD/amd64 7.2-RELEASE initialization build complete. Please\n"
+"review the list of build stamps printed above to confirm that\n"
+"they look sensible, then run\n"
+" sh -e approve.sh amd64 7.2-RELEASE\n"
+"to sign the release.\n"
+msgstr ""
+"FreeBSD/amd64 7.2-RELEASE initialization build complete. Please\n"
+"review the list of build stamps printed above to confirm that\n"
+"they look sensible, then run\n"
+" sh -e approve.sh amd64 7.2-RELEASE\n"
+"to sign the release.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:356
+msgid ""
+"Approve the build if everything is correct. More information on determining "
+"this can be found in the distributed source file named [.filename]#USAGE#. "
+"Execute [.filename]#scripts/approve.sh#, as directed. This will sign the "
+"release, and move components into a staging area suitable for uploading."
+msgstr ""
+"Aprove a compilação se tudo estiver correto. Mais informações sobre como "
+"determinar isso podem ser encontradas no arquivo de origem da distribuição "
+"chamado [.filename]#USAGE#. Execute [.filename]#scripts/approve.sh#, "
+"conforme indicado. Isso irá assinar a versão e mover os componentes para uma "
+"área de preparação adequada para o upload."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:361
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/mountkey.sh\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/mountkey.sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:371
+#, no-wrap
+msgid ""
+"# sh -e scripts/approve.sh amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-RELEASE\n"
+msgstr ""
+"# sh -e scripts/approve.sh amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for "
+"FreeBSD/amd64 7.2-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.2-"
+"RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:374
+msgid ""
+"After the approval process is complete, the upload procedure may be started."
+msgstr ""
+"Após a conclusão do processo de aprovação, o procedimento de upload pode ser "
+"iniciado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:379
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.2-RELEASE\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.2-RELEASE\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:384
+msgid ""
+"In the event update code needs to be re-uploaded, this may be done by "
+"changing to the public distributions directory for the target release and "
+"updating attributes of the _uploaded_ file."
+msgstr ""
+"Caso o código de atualização precise ser reenviado, isso pode ser feito "
+"alterando para o diretório de distribuições públicas do release de destino e "
+"atualizando os atributos do arquivo já _enviado_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:389
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64\n"
+"# touch -t 200801010101.01 uploaded\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server/pub/7.2-RELEASE/amd64\n"
+"# touch -t 200801010101.01 uploaded\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:396
+msgid ""
+"The uploaded files will need to be in the document root of the webserver in "
+"order for updates to be distributed. The exact configuration will vary "
+"depending on the web server used. For the Apache web server, please refer "
+"to the extref:{handbook}[Configuration of Apache servers, network-apache] "
+"section in the Handbook."
+msgstr ""
+"Os arquivos enviados precisarão estar no diretório raiz de documentos do "
+"servidor web para que as atualizações possam ser distribuídas. A "
+"configuração exata variará dependendo do servidor web utilizado. Para o "
+"servidor web Apache, consulte a seção extref:{handbook}[Configuração de "
+"servidores Apache, network-apache] no Handbook."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:398
+msgid ""
+"Update client's `KeyPrint` and `ServerName` in [.filename]#/etc/freebsd-"
+"update.conf#, and perform updates as instructed in the extref:{handbook}"
+"[FreeBSD Update, updating-upgrading-freebsdupdate] section of the Handbook."
+msgstr ""
+"Atualize o `KeyPrint` e o `ServerName` do cliente em [.filename]#/etc/"
+"freebsd-update.conf#, e execute as atualizações conforme instruído na seção "
+"extref:{handbook}[Atualização do FreeBSD, updating-upgrading-freebsdupdate] "
+"do Handbook."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:404
+msgid ""
+"In order for FreeBSD Update Server to work properly, updates for both the "
+"_current_ release and the release _one wants to upgrade to_ need to be "
+"built. This is necessary for determining the differences of files between "
+"releases. For example, when upgrading a FreeBSD system from 7.1-RELEASE to "
+"7.2-RELEASE, updates will need to be built and uploaded to your distribution "
+"server for both versions."
+msgstr ""
+"Para que o Servidor de Atualização do FreeBSD funcione corretamente, as "
+"atualizações tanto para o release _atual_ quanto para o release _para o qual "
+"se deseja atualizar_ precisam ser compiladas. Isso é necessário para "
+"determinar as diferenças nos arquivos entre os releases. Por exemplo, ao "
+"atualizar um sistema FreeBSD da versão 7.1-RELEASE para a versão 7.2-"
+"RELEASE, as atualizações precisarão ser compiladas e enviadas para o seu "
+"servidor de distribuição para ambas as versões."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:407
+msgid ""
+"For reference, the entire run of link:../../source/articles/freebsd-update-"
+"server/init.txt[init.sh] is attached."
+msgstr ""
+"Para referência, toda a execução do link:../../source/articles/"
+"freebsd-update-server/init.txt[init.sh] está anexada."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:409
+#, no-wrap
+msgid "Building a Patch"
+msgstr "Compilando um Patch"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:412
+msgid ""
+"Every time a link:https://www.FreeBSD.org/security/advisories/[security "
+"advisory] or link:https://www.FreeBSD.org/security/notices/[security notice] "
+"is announced, a patch update can be built."
+msgstr ""
+"Toda vez que uma link:https://www.FreeBSD.org/security/advisories/["
+"recomendação de segurança] ou um link:https://www.FreeBSD.org/security/"
+"notices/[aviso de segurança] é anunciado, uma atualização de patch pode ser "
+"compilada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:414
+msgid "For this example, 7.1-RELEASE will be used."
+msgstr "Para este exemplo, o 7.1-RELEASE será usado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:416
+msgid "A couple of assumptions are made for a different release build:"
+msgstr "Algumas suposições são feitas para compilar uma release diferente:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:418
+msgid "Setup the correct directory structure for the initial build."
+msgstr "Configure a estrutura de diretórios correta para a compilação inicial."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:419
+msgid "Perform an initial build for 7.1-RELEASE."
+msgstr "Execute uma compilação inicial para o 7.1-RELEASE."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:421
+msgid ""
+"Create the patch directory of the respective release under [.filename]#/usr/"
+"local/freebsd-update-server/patches/#."
+msgstr ""
+"Crie o diretório de patches do respectivo release em [.filename]#/usr/local/"
+"freebsd-update-server/patches/#."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:426
+#, no-wrap
+msgid ""
+"% mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/\n"
+"% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE\n"
+msgstr ""
+"% mkdir -p /usr/local/freebsd-update-server/patches/7.1-RELEASE/\n"
+"% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:431
+msgid ""
+"As an example, take the patch for man:named[8]. Read the advisory, and grab "
+"the necessary file from link:https://www.FreeBSD.org/security/advisories/"
+"[FreeBSD Security Advisories]. More information on interpreting the "
+"advisory, can be found in the extref:{handbook}[FreeBSD Handbook, security-"
+"advisories]."
+msgstr ""
+"Como exemplo, considere o patch para o man:named[8]. Leia o aviso e pegue o "
+"arquivo necessário em link:https://www.FreeBSD.org/security/advisories/["
+"Avisos de Segurança do FreeBSD]. Mais informações sobre a interpretação do "
+"aviso podem ser encontradas no extref:{handbook}[Handbook do FreeBSD, "
+"security-advisories]."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:436
+msgid ""
+"In the https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind."
+"asc[security brief], this advisory is called `SA-09:12.bind`. After "
+"downloading the file, it is required to rename the file to an appropriate "
+"patch level. It is suggested to keep this consistent with official FreeBSD "
+"patch levels, but its name may be freely chosen. For this build, let us "
+"follow the currently established practice of FreeBSD and call this `p7`. "
+"Rename the file:"
+msgstr ""
+"No https://security.freebsd.org/advisories/FreeBSD-SA-09:12.bind.asc[informe "
+"de segurança], este aviso é chamado de `SA-09:12.bind`. Após o download do "
+"arquivo, é necessário renomeá-lo para um nível de patch apropriado. É "
+"sugerido manter isso consistente com os níveis de patch oficiais do FreeBSD, "
+"mas seu nome pode ser escolhido livremente . Para esta compilação, vamos "
+"seguir a prática atualmente estabelecida do FreeBSD e chamá-la de `p7`. "
+"Renomeie o arquivo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:440
+#, no-wrap
+msgid "% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch 7-SA-09:12.bind\n"
+msgstr ""
+"% cd /usr/local/freebsd-update-server/patches/7.1-RELEASE/; mv bind.patch "
+"7-SA-09:12.bind\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:446
+msgid ""
+"When running a patch level build, it is assumed that previous patches are in "
+"place. When a patch build is run, it will run all patches contained in the "
+"patch directory."
+msgstr ""
+"Ao executar uma compilação de nível de patch, presume-se que os patches "
+"anteriores estão em vigor. Quando uma compilação de patch é executada, ela "
+"executará todos os patches contidos no diretório de patch."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:448
+msgid ""
+"There can be custom patches added to any build. Use the number zero, or any "
+"other number."
+msgstr ""
+"Podem ser adicionados patches personalizados a qualquer compilação. Use o "
+"número zero ou qualquer outro número."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:454
+msgid ""
+"It is up to the administrator of the FreeBSD Update Server to take "
+"appropriate measures to verify the authenticity of every patch."
+msgstr ""
+"Cabe ao administrador do Servidor de Atualização do FreeBSD tomar as medidas "
+"apropriadas para verificar a autenticidade de cada patch."
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:458
+msgid ""
+"At this point, a _diff_ is ready to be built. The software checks first to "
+"see if a [.filename]#scripts/init.sh# has been run on the respective release "
+"prior to running the diff build."
+msgstr ""
+"Neste ponto, um _diff_ está pronto para ser compilado. O software verifica "
+"primeiro se um [.filename]#scripts/init.sh# foi executado no respectivo "
+"release antes de executar a compilação do _diff_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:463
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/diff.sh amd64 7.1-RELEASE 7\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/diff.sh amd64 7.1-RELEASE 7\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:466
+msgid "What follows is a sample of a _differential_ build run."
+msgstr "A seguir, segue um exemplo de execução de compilação _diferencial_."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:540
+#, no-wrap
+msgid ""
+"# sh -e scripts/diff.sh amd64 7.1-RELEASE 7\n"
+"Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 17:10:25 UTC 2009 Building world for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:05:11 UTC 2009 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:06:16 UTC 2009 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:17:50 UTC 2009 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:18:02 UTC 2009 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:19:23 PDT 2009 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:19:37 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:19:42 PDT 2009 Indexing world0 for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:23:02 PDT 2009 Extracting world+src for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 18:23:29 UTC 2010 Building world for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:18:15 UTC 2010 Distributing world for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:19:18 UTC 2010 Building and distributing kernels for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:30:52 UTC 2010 Constructing world components for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:31:03 UTC 2010 Distributing source for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 12:32:25 PDT 2010 Moving components into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:32:39 PDT 2009 Extracting extra docs for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:32:43 PDT 2009 Indexing world1 for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:35:54 PDT 2009 Locating build stamps for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:36:58 PDT 2009 Reverting changes due to build stamps for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:14 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:14 PDT 2009 Preparing to copy files into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:15 PDT 2009 Copying data files into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:43:23 PDT 2009 Copying metadata files into staging area for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:43:25 PDT 2009 Constructing metadata index and tag for FreeBSD/amd64 7.1-RELEASE-p7\n"
+"...\n"
+"Files found which include build stamps:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/include/osreldate.h\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+"Values of build stamps, excluding library archive headers:\n"
+"v1.2 (Aug 26 2009 18:13:46)\n"
+"v1.2 (Aug 26 2009 18:11:44)\n"
+"@()FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009\n"
+"FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009\n"
+" root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC\n"
+"7.1-RELEASE-p7\n"
+"Wed Aug 26 17:29:15 UTC 2009\n"
+"Wed Aug 26 17:29:15 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"ntpq 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+" * Copyright (c) 1992-2009 The FreeBSD Project.\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"Wed Aug 26 17:29:30 UTC 2009\n"
+"Aug 26 2009\n"
+"ntpd 4.2.4p5-a Wed Aug 26 17:29:41 UTC 2009 (1)\n"
+"ntpdate 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+"ntpdc 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"...\n"
+msgstr ""
+"# sh -e scripts/diff.sh amd64 7.1-RELEASE 7\n"
+"Wed Aug 26 10:09:59 PDT 2009 Extracting world+src for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 17:10:25 UTC 2009 Building world for FreeBSD/amd64 7.1-RELEASE-"
+"p7\n"
+"Wed Aug 26 18:05:11 UTC 2009 Distributing world for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 18:06:16 UTC 2009 Building and distributing kernels for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 18:17:50 UTC 2009 Constructing world components for FreeBSD/amd64 "
+"7.1-RELEASE-p7\n"
+"Wed Aug 26 18:18:02 UTC 2009 Distributing source for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 11:19:23 PDT 2009 Moving components into staging area for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 11:19:37 PDT 2009 Extracting extra docs for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 11:19:42 PDT 2009 Indexing world0 for FreeBSD/amd64 7.1-RELEASE-"
+"p7\n"
+"Wed Aug 26 11:23:02 PDT 2009 Extracting world+src for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Thu Sep 30 18:23:29 UTC 2010 Building world for FreeBSD/amd64 7.1-RELEASE-"
+"p7\n"
+"Thu Sep 30 19:18:15 UTC 2010 Distributing world for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Thu Sep 30 19:19:18 UTC 2010 Building and distributing kernels for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"Thu Sep 30 19:30:52 UTC 2010 Constructing world components for FreeBSD/amd64 "
+"7.1-RELEASE-p7\n"
+"Thu Sep 30 19:31:03 UTC 2010 Distributing source for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Thu Sep 30 12:32:25 PDT 2010 Moving components into staging area for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:32:39 PDT 2009 Extracting extra docs for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 12:32:43 PDT 2009 Indexing world1 for FreeBSD/amd64 7.1-RELEASE-"
+"p7\n"
+"Wed Aug 26 12:35:54 PDT 2009 Locating build stamps for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 12:36:58 PDT 2009 Reverting changes due to build stamps for "
+"FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:14 PDT 2009 Cleaning staging area for FreeBSD/amd64 7."
+"1-RELEASE-p7\n"
+"Wed Aug 26 12:37:14 PDT 2009 Preparing to copy files into staging area for "
+"FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:37:15 PDT 2009 Copying data files into staging area for "
+"FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:43:23 PDT 2009 Copying metadata files into staging area for "
+"FreeBSD/amd64 7.1-RELEASE-p7\n"
+"Wed Aug 26 12:43:25 PDT 2009 Constructing metadata index and tag for FreeBSD/"
+"amd64 7.1-RELEASE-p7\n"
+"...\n"
+"Files found which include build stamps:\n"
+"kernel|generic|/GENERIC/hptrr.ko\n"
+"kernel|generic|/GENERIC/kernel\n"
+"world|base|/boot/loader\n"
+"world|base|/boot/pxeboot\n"
+"world|base|/etc/mail/freebsd.cf\n"
+"world|base|/etc/mail/freebsd.submit.cf\n"
+"world|base|/etc/mail/sendmail.cf\n"
+"world|base|/etc/mail/submit.cf\n"
+"world|base|/lib/libcrypto.so.5\n"
+"world|base|/usr/bin/ntpq\n"
+"world|base|/usr/include/osreldate.h\n"
+"world|base|/usr/lib/libalias.a\n"
+"world|base|/usr/lib/libalias_cuseeme.a\n"
+"world|base|/usr/lib/libalias_dummy.a\n"
+"world|base|/usr/lib/libalias_ftp.a\n"
+"...\n"
+"Values of build stamps, excluding library archive headers:\n"
+"v1.2 (Aug 26 2009 18:13:46)\n"
+"v1.2 (Aug 26 2009 18:11:44)\n"
+"@()FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009\n"
+"FreeBSD 7.1-RELEASE-p7 0: Wed Aug 26 18:11:50 UTC 2009\n"
+" root@server.myhost.com:/usr/obj/usr/src/sys/GENERIC\n"
+"7.1-RELEASE-p7\n"
+"Wed Aug 26 17:29:15 UTC 2009\n"
+"Wed Aug 26 17:29:15 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+" built by root@server.myhost.com on Wed Aug 26 17:49:58 UTC 2009\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"ntpq 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+" * Copyright (c) 1992-2009 The FreeBSD Project.\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"Wed Aug 26 17:29:30 UTC 2009\n"
+"Aug 26 2009\n"
+"ntpd 4.2.4p5-a Wed Aug 26 17:29:41 UTC 2009 (1)\n"
+"ntpdate 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+"ntpdc 4.2.4p5-a Wed Aug 26 17:29:42 UTC 2009 (1)\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:55:02 UTC 2009\n"
+"Wed Aug 26 17:20:39 UTC 2009\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:543
+msgid "Updates are printed, and approval is requested."
+msgstr "As atualizações são impressas e a aprovação é solicitada."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:562
+#, no-wrap
+msgid ""
+"New updates:\n"
+"kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04e7c1b8d793f27e006dd13e0b499e1474ac47e10|\n"
+"kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d489348c2c534f7ca1120a1183dec67b1|\n"
+"kernel|generic|/|d|0|0|0755|0||\n"
+"src|base|/|d|0|0|0755|0||\n"
+"src|bin|/|d|0|0|0755|0||\n"
+"src|cddl|/|d|0|0|0755|0||\n"
+"src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|\n"
+"src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c39f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|\n"
+"src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f7417ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|\n"
+"...\n"
+"FreeBSD/amd64 7.1-RELEASE update build complete. Please review\n"
+"the list of build stamps printed above and the list of updated\n"
+"files to confirm that they look sensible, then run\n"
+" sh -e approve.sh amd64 7.1-RELEASE\n"
+"to sign the build.\n"
+msgstr ""
+"New updates:\n"
+"kernel|generic|/GENERIC/kernel.symbols|f|0|0|0555|0|7c8dc176763f96ced0a57fc04"
+"e7c1b8d793f27e006dd13e0b499e1474ac47e10|\n"
+"kernel|generic|/GENERIC/kernel|f|0|0|0555|0|33197e8cf15bbbac263d17f39c153c9d4"
+"89348c2c534f7ca1120a1183dec67b1|\n"
+"kernel|generic|/|d|0|0|0755|0||\n"
+"src|base|/|d|0|0|0755|0||\n"
+"src|bin|/|d|0|0|0755|0||\n"
+"src|cddl|/|d|0|0|0755|0||\n"
+"src|contrib|/contrib/bind9/bin/named/update.c|f|0|10000|0644|0|4d434abf0983df"
+"9bc47435670d307fa882ef4b348ed8ca90928d250f42ea0757|\n"
+"src|contrib|/contrib/bind9/lib/dns/openssldsa_link.c|f|0|10000|0644|0|c6805c3"
+"9f3da2a06dd3f163f26c314a4692d4cd9a2d929c0acc88d736324f550|\n"
+"src|contrib|/contrib/bind9/lib/dns/opensslrsa_link.c|f|0|10000|0644|0|fa0f741"
+"7ee9da42cc8d0fd96ad24e7a34125e05b5ae075bd6e3238f1c022a712|\n"
+"...\n"
+"FreeBSD/amd64 7.1-RELEASE update build complete. Please review\n"
+"the list of build stamps printed above and the list of updated\n"
+"files to confirm that they look sensible, then run\n"
+" sh -e approve.sh amd64 7.1-RELEASE\n"
+"to sign the build.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:565
+msgid "Follow the same process as noted before for approving a build:"
+msgstr ""
+"Siga o mesmo processo mencionado anteriormente para aprovar uma compilação:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:574
+#, no-wrap
+msgid ""
+"# sh -e scripts/approve.sh amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-RELEASE\n"
+msgstr ""
+"# sh -e scripts/approve.sh amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Signing build for FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to patch source directories for "
+"FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:06 PDT 2009 Copying files to upload staging area for "
+"FreeBSD/amd64 7.1-RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Updating databases for FreeBSD/amd64 7.1-"
+"RELEASE\n"
+"Wed Aug 26 12:50:07 PDT 2009 Cleaning staging area for FreeBSD/amd64 7.1-"
+"RELEASE\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:580
+#, no-wrap
+msgid ""
+"The FreeBSD/amd64 7.1-RELEASE update build has been signed and is\n"
+"ready to be uploaded. Remember to run\n"
+" sh -e umountkey.sh\n"
+"to unmount the decrypted key once you have finished signing all\n"
+"the new builds.\n"
+msgstr ""
+"The FreeBSD/amd64 7.1-RELEASE update build has been signed and is\n"
+"ready to be uploaded. Remember to run\n"
+" sh -e umountkey.sh\n"
+"to unmount the decrypted key once you have finished signing all\n"
+"the new builds.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:583
+msgid "After approving the build, upload the software:"
+msgstr "Depois de aprovar a compilação, faça o upload do software:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:588
+#, no-wrap
+msgid ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.1-RELEASE\n"
+msgstr ""
+"# cd /usr/local/freebsd-update-server\n"
+"# sh scripts/upload.sh amd64 7.1-RELEASE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:591
+msgid ""
+"For reference, the entire run of link:../../source/articles/freebsd-update-"
+"server/diff.txt[diff.sh] is attached."
+msgstr ""
+"Para referência, toda a execução do link:../../source/articles/"
+"freebsd-update-server/diff.txt[diff.sh] está anexada."
+
+#. type: Title ==
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:593
+#, no-wrap
+msgid "Tips"
+msgstr "Dicas"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:596
+msgid ""
+"If a custom release is built using the native `make release` extref:{releng}"
+"[procedure, release-build], freebsd-update-server code will work from your "
+"release. As an example, a release without ports or documentation can be "
+"built by clearing functionality pertaining to documentation subroutines "
+"`findextradocs ()`, `addextradocs ()` and altering the download location in "
+"`fetchiso ()`, respectively, in [.filename]#scripts/build.subr#. As a last "
+"step, change the man:sha256[1] hash in [.filename]#build.conf# under your "
+"respective release and architecture and you are ready to build off your "
+"custom release."
+msgstr ""
+"Se um release personalizado for compilado usando o extref:{releng}["
+"procedimento, release-build] nativo `make release`, o código do freebsd-"
+"update-server funcionará a partir do seu release. Como exemplo, um release "
+"sem ports ou documentação pode ser criado limpando a funcionalidade "
+"referente às sub-rotinas de documentação `findextradocs ()`, `addextradocs "
+"()` e alterando o local de download em `fetchiso ()`, respectivamente, em [."
+"filename]#scripts/build.subr#. Como último passo, altere a chave "
+"man:sha256[1] em [.filename]#build.conf# no seu respectivo release e "
+"arquitetura e você estará pronto para compilar o seu release personalizado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:607
+#, no-wrap
+msgid ""
+"# Compare ${WORKDIR}/release and ${WORKDIR}/$1, identify which parts\n"
+"# of the world|doc subcomponent are missing from the latter, and\n"
+"# build a tarball out of them.\n"
+"findextradocs () {\n"
+"}\n"
+"# Add extra docs to ${WORKDIR}/$1\n"
+"addextradocs () { \n"
+"}\n"
+msgstr ""
+"# Compare ${WORKDIR}/release and ${WORKDIR}/$1, identify which parts\n"
+"# of the world|doc subcomponent are missing from the latter, and\n"
+"# build a tarball out of them.\n"
+"findextradocs () {\n"
+"}\n"
+"# Add extra docs to ${WORKDIR}/$1\n"
+"addextradocs () { \n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:610
+msgid ""
+"Adding `-j _NUMBER_` flags to `buildworld` and `obj` targets in the [."
+"filename]#scripts/build.subr# script may speed up processing depending on "
+"the hardware used, however it is not necessary. Using these flags in other "
+"targets is not recommended, as it may cause the build to become unreliable."
+msgstr ""
+"Adicionar flags `-j _NUMERO_` para os alvos `buildworld` e `obj` no script [."
+"filename]#scripts/build.subr# pode acelerar o processamento, dependendo do "
+"hardware utilizado, no entanto, não é necessário. Usar esses flags em outros "
+"alvos não é recomendado, pois pode fazer com que a compilação se torne pouco "
+"confiável."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:622
+#, no-wrap
+msgid ""
+" # Build the world\n"
+"\t\t log \"Building world\"\n"
+"\t\t cd /usr/src &&\n"
+"\t\t make -j 2 ${COMPATFLAGS} buildworld 2>&1\n"
+"\t\t# Distribute the world\n"
+"\t\t log \"Distributing world\"\n"
+"\t\t cd /usr/src/release &&\n"
+"\t\t make -j 2 obj &&\n"
+"\t\t make ${COMPATFLAGS} release.1 release.2 2>&1\n"
+msgstr ""
+" # Build the world\n"
+"\t\t log \"Building world\"\n"
+"\t\t cd /usr/src &&\n"
+"\t\t make -j 2 ${COMPATFLAGS} buildworld 2>&1\n"
+"\t\t# Distribute the world\n"
+"\t\t log \"Distributing world\"\n"
+"\t\t cd /usr/src/release &&\n"
+"\t\t make -j 2 obj &&\n"
+"\t\t make ${COMPATFLAGS} release.1 release.2 2>&1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:625
+msgid ""
+"Create an appropriate extref:{handbook}[DNS, network-dns] SRV record for the "
+"update server, and put others behind it with variable weights. Using this "
+"facility will provide update mirrors, however this tip is not necessary "
+"unless you wish to provide a redundant service."
+msgstr ""
+"Crie um registro extref:{handbook}[DNS, network-dns] SRV apropriado para o "
+"servidor de atualização e coloque outros atrás dele com pesos variáveis. O "
+"uso dessa facilidade fornecerá espelhos de atualização, no entanto, essa "
+"dica não é necessária, a menos que você deseje fornecer um serviço "
+"redundante."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/freebsd-update-server/_index.adoc:631
+#, no-wrap
+msgid ""
+"_http._tcp.update.myserver.com.\t\tIN SRV 0 2 80 host1.myserver.com.\n"
+"\t\t\t\t\tIN SRV 0 1 80 host2.myserver.com.\n"
+"\t\t\t\t\tIN SRV 0 0 80 host3.myserver.com.\n"
+msgstr ""
+"_http._tcp.update.myserver.com.\t\tIN SRV 0 2 80 host1.myserver.com.\n"
+"\t\t\t\t\tIN SRV 0 1 80 host2.myserver.com.\n"
+"\t\t\t\t\tIN SRV 0 0 80 host3.myserver.com.\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/geom-class/_index.adoc b/documentation/content/pt-br/articles/geom-class/_index.adoc
index 9fa8df9926..f05d77126f 100644
--- a/documentation/content/pt-br/articles/geom-class/_index.adoc
+++ b/documentation/content/pt-br/articles/geom-class/_index.adoc
@@ -1,9 +1,11 @@
---
-title: Escrevendo uma classe GEOM
authors:
- - author: Ivan Voras
+ -
+ author: 'Ivan Voras'
email: ivoras@FreeBSD.org
-releaseinfo: "$FreeBSD$"
+description: 'Um guia sobre os internals do GEOM e sobre como escrever sua própria classe GEOM'
+tags: ["GEOM", "kernel", "modules", "FreeBSD"]
+title: 'Escrevendo uma classe GEOM'
trademarks: ["freebsd", "intel", "general"]
---
@@ -16,20 +18,32 @@ trademarks: ["freebsd", "intel", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/geom-class/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Este texto documenta alguns pontos de partida no desenvolvimento de classes GEOM e módulos do kernel em geral. Supõe-se que o leitor esteja familiarizado com a programação C do userland.
+Este texto documenta alguns pontos de partida no desenvolvimento de classes GEOM e módulos de kernel em geral. Pressupõe-se que o leitor esteja familiarizado com a programação de espaço de usuário em C.
'''
@@ -41,27 +55,27 @@ toc::[]
[[intro-docs]]
=== Documentação
-A documentação sobre programação do kernel é escassa - é uma das poucas áreas na qual não há quase nada de tutoriais amigáveis, e a frase "usa a fonte!" realmente é verdadeira. No entanto, existem alguns pedaços (alguns deles seriamente desatualizados) flutuando por ai e que devem ser estudados antes de começar a codificar:
+A documentação sobre programação de kernel é escassa - é uma das poucas áreas em que quase não há tutoriais amigáveis, e a frase "use o código fonte!" realmente é verdadeira. No entanto, existem alguns fragmentos (alguns deles seriamente desatualizados) circulando que devem ser estudados antes de começar a codificar:
-* O link:{developers-handbook}[Manual do Desenvolvedor do FreeBSD] - parte do projeto de documentação, ele não contém nenhum informação específica para a programação do kernel, mas possui algumas informações gerais úteis.
-* O link:{arch-handbook}[Manual de Arquitetura do FreeBSD] - também do projeto de documentação, contém descrições de várias instalações e procedimentos de baixo nível. O capítulo mais importante é o 13, link:{arch-handbook}#driverbasics[Escrevendo drivers de dispositivo FreeBSD].
-* A seção Blueprints do site do http://www.freebsddiary.org[FreeBSD Diary] contém vários artigos interessantes sobre os recursos do kernel.
-* As páginas de manual na seção 9 - para documentação importante sobre as funções do kernel.
-* A página man man:geom[4] e os http://phk.freebsd.dk/pubs/[Slides sobre o GEOM de PHK] - para uma introdução geral do subsistema GEOM.
-* Páginas de manual man:g_bio[9], man:g_event[9], man:g_data[9], man:g_geom[9], man:g_provider[9] man:g_consumer[9], man:g_access[9] & outros ligados a partir deles, para documentação sobre funcionalidades específicas.
-* A página do manual man:style[9] - para documentação sobre as convenções de estilo de codificação que devem ser seguidas para qualquer código que se destine a ser incorporado à Árvore do Subversion do FreeBSD.
+* O extref:{developers-handbook}[Handbook do Desenvolvedor do FreeBSD] - parte do projeto de documentação, não contém nada específico sobre programação do kernel, mas sim algumas informações úteis em geral.
+* O extref:{arch-handbook}[Handbook de Arquitetura do FreeBSD] - também do projeto de documentação, contém descrições de várias instalações e procedimentos de baixo nível. O capítulo mais importante é o 13, extref:{arch-handbook}[Escrevendo drivers de dispositivos FreeBSD, driverbasics].
+* A seção Blueprints do site http://www.freebsddiary.org contém vários artigos interessantes sobre as facilidades do kernel.
+* As páginas de manual da seção 9 - para documentação importante sobre as funções do kernel.
+* A página de manual man:geom[4] e os slides sobre o GEOM do PHK em http://phk.freebsd.dk/pubs/ - para uma introdução geral ao subsistema GEOM.
+* As páginas de manual man:g_bio[9], man:g_event[9], man:g_data[9], man:g_geom[9], man:g_provider[9], man:g_consumer[9], man:g_access[9] e outras vinculadas a elas, para documentação sobre funcionalidades específicas.
+* A página de manual man:style[9] - para documentação sobre as convenções de estilo de codificação que devem ser seguidas para qualquer código que seja commitado para a árvore do FreeBSD.
[[prelim]]
== Preliminares
-A melhor maneira de fazer o desenvolvimento do kernel é ter (pelo menos) dois computadores separados. Um deles conteria o ambiente de desenvolvimento e o código fonte, e o outro seria usado para testar o código recém escrito, inicializando por meio da rede e montando seu sistema de arquivo a partir do primeiro computador. Desta forma, se o novo código contiver erros e travar a máquina, isso não irá atrapalhar o código fonte (e nem nenhum outros dado "vivo"). O segundo sistema nem sequer requer um monitor adequado. Em vez disso, ele pode ser conectado por meio de um cabo serial ou KVM ao primeiro computador.
+A melhor maneira de desenvolver para o kernel é ter (pelo menos) dois computadores separados. Um deles conteria o ambiente de desenvolvimento e as fontes, e o outro seria usado para testar o código recém-escrito por meio do boot e montagem de sistemas de arquivos por rede do primeiro. Dessa forma, se o novo código contiver erros e travar a máquina, ele não afetará as fontes (e outros dados "ao vivo"). O segundo sistema nem mesmo precisa de uma tela adequada. Em vez disso, ele pode ser conectado com um cabo serial ou KVM para o primeiro.
-Mas, como nem todo mundo tem dois ou mais computadores à mão, há algumas coisas que podem ser feitas para preparar um sistema "vivo " para desenvolver código para o kernel. Esta configuração também é aplicável para desenvolvimento em uma máquina virtual criada com o http://www.vmware.com/[VMWare] ou com o http://www.qemu.org/[QEmu] (a próxima melhor coisa depois de uma máquina de desenvolvimento dedicada).
+No entanto, como nem todo mundo tem dois ou mais computadores disponíveis, existem algumas coisas que podem ser feitas para preparar um sistema "ao vivo" para o desenvolvimento de código do kernel. Essa configuração também é aplicável para desenvolvimento em uma máquina virtual http://www.vmware.com/[VMWare] ou http://www.qemu.org/[QEmu] (a próxima melhor opção depois de uma máquina de desenvolvimento dedicada).
[[prelim-system]]
=== Modificando um sistema para desenvolvimento
-Para qualquer programação do kernel, um kernel com a opção `INVARIANTS` ativada é obrigatório. Então, digite estas linhas no seu arquivo de configuração do kernel:
+Para qualquer programação de kernel, é essencial ter um kernel com `INVARIANTS` ativado. Portanto, adicione as seguintes opções no arquivo de configuração do kernel:
[.programlisting]
....
@@ -69,7 +83,7 @@ options INVARIANT_SUPPORT
options INVARIANTS
....
-Para ter um maior nível de depuração, você também devrá incluir o suporte ao WITNESS, o qual irá alertá-lo sobre erros relacionados a bloqueios (locking):
+Para obter mais depuração, você também deve incluir o suporte a WITNESS, que alertará sobre erros de bloqueio:
[.programlisting]
....
@@ -77,16 +91,16 @@ options WITNESS_SUPPORT
options WITNESS
....
-Para depurar despejos de memória, é necessário um kernel com símbolos de depuração:
+Para depurar despejos de falhas (crash dumps), é necessário um kernel com símbolos de depuração:
[.programlisting]
....
makeoptions DEBUG=-g
....
-Com a maneira usual de instalar o kernel (`make installkernel`) o kernel de depuração não será instalado automaticamente. Ele é chamado de [.filename]#kernel.debug# e fica localizado em [.filename]#/usr/obj/usr/src/sys/KERNELNAME/#. Por conveniência, deve ser copiado para [.filename]#/boot/kernel/#.
+Com a maneira usual de instalar o kernel (`make installkernel`), o kernel de depuração não será instalado automaticamente. Ele é chamado de [.filename]#kernel.debug# e fica localizado em [.filename]#/usr/obj/usr/src/sys/NOME_DO_KERNEL/#. Por conveniência, ele deve ser copiado para [.filename]#/boot/kernel/#.
-Outra conveniência é habilitar o depurador do kernel para que você possa examinar o panic do kernel quando isso acontece. Para isso, insira as seguintes linhas no seu arquivo de configuração do kernel:
+Outra conveniência é habilitar o depurador do kernel para que você possa examinar um kernel panic quando ele ocorrer. Para isso, adicione as seguintes linhas no arquivo de configuração do kernel:
[.programlisting]
....
@@ -102,7 +116,7 @@ Para que isso funcione, você pode precisar definir um sysctl (se ele não estiv
debug.debugger_on_panic=1
....
-Kernel panics acontecerão, portanto, deve-se ter cuidado com o cache do sistema de arquivos. Em particular, ter o softupdates habilitado pode significar que a versão mais recente do arquivo pode ser perdida se um panic ocorrer antes de ser committed para armazenamento. Desativar o softupdates produz um grande impacto na performance e ainda não garante a consistência dos dados. A montagem do sistema de arquivos com a opção "sync" é necessária para isso. Para um compromisso, os atrasos do cache de softupdates podem ser encurtados. Existem três sysctl's que são úteis para isso (melhor ser configurado em [.filename]#/etc/sysctl.conf#):
+Panics do kernel podem acontecer, portanto, é preciso ter cuidado com o cache do sistema de arquivos. Em particular, ter softupdates pode significar que a versão mais recente de um arquivo pode ser perdida se ocorrer um panic antes que seja gravada no armazenamento. Desabilitar o softupdates implica em uma grande perda de desempenho e ainda não garante a consistência dos dados. É necessário montar o sistema de arquivos com a opção "sync" para garantir isso. Como um compromisso, os atrasos do cache do softupdates podem ser encurtados. Existem três sysctl que são úteis para isso (melhor configurados em [.filename]#/etc/sysctl.conf#):
[.programlisting]
....
@@ -113,7 +127,7 @@ kern.metadelay=3
Os números representam segundos.
-Para depurar os panics do kernel, os dumps do núcleo do kernel são necessários. Como um kernel panic pode tornar os sistemas de arquivos inutilizáveis, esse despejo de memória é primeiramente gravado em uma partição bruta. Normalmente, esta é a partição de swap. Essa partição deve ser pelo menos tão grande quanto a RAM física na máquina. Na próxima inicialização, o despejo é copiado para um arquivo normal. Isso acontece depois que os sistemas de arquivos são verificados e montados e antes que o swap seja ativado. Isto é controlado com duas variáveis [.filename]#/etc/rc.conf#:
+Para depurar panics do kernel, são necessários os despejos de núcleo do kernel. Como um kernel panic pode tornar os sistemas de arquivos inutilizáveis, este despejo de falhas é primeiro gravado em uma partição raw. Geralmente, isso é feito na partição de swap. Esta partição deve ter pelo menos o tamanho da RAM física da máquina. No próximo boot, o despejo é copiado para um arquivo regular. Isso acontece após a verificação e montagem dos sistemas de arquivos e antes que o swap seja ativado. Isso é controlado com duas variáveis do arquivo [.filename]#/etc/rc.conf#:
[.programlisting]
....
@@ -121,35 +135,35 @@ dumpdev="/dev/ad0s4b"
dumpdir="/usr/core
....
-A variável `dumpdev` especifica a partição de swap e `dumpdir` informa ao sistema onde no sistema de arquivos ele deverá realocar o dump principal na reinicialização.
+A variável `dumpdev` especifica a partição de swap e `dumpdir` informa ao sistema onde no sistema de arquivos realocar o core dump no reboot.
-A gravação de core dumps é lenta e leva muito tempo, então se você tiver muita memória (>256M) e muitos panics, pode ser frustrante sentar e esperar enquanto isso é feito (duas vezes - primeiro para gravar para o swap, depois para realocá-lo para o sistema de arquivos). É conveniente limitar a quantidade de RAM que o sistema usará através de uma variável do [.filename]#/boot/loader.conf#:
+Gravar o core dump do kernel é lento e leva muito tempo, portanto, se você tiver muita memória (>256 MB) e muitos panics, pode ser frustrante esperar enquanto isso é feito (duas vezes - primeiro para gravá-lo na troca, depois para realocá-lo no sistema de arquivos). É conveniente, portanto, limitar a quantidade de RAM que o sistema usará por meio de um ajuste no [.filename]#/boot/loader.conf#:
[.programlisting]
....
hw.physmem="256M"
....
-Se os panics são frequentes e os sistemas de arquivos são grandes (ou você simplesmente não confia em softupdates + background fsck), é aconselhável desligar o fsck em background através da variável [.filename]#/etc/rc.conf#:
+Se os panics forem frequentes e os sistemas de arquivos forem grandes (ou se você simplesmente não confiar no softupdates + fsck em segundo plano), é aconselhável desativar o fsck em segundo plano por meio da seguinte variável no arquivo [.filename]#/etc/rc.conf#:
[.programlisting]
....
background_fsck="NO"
....
-Dessa forma, os sistemas de arquivos sempre serão verificados quando necessário. Observe que, com o fsck em segundo plano, um novo panic pode acontecer enquanto ele está verificando os discos. Novamente, a maneira mais segura é não ter muitos sistemas de arquivos locais, usando o outro computador como um servidor NFS.
+Dessa forma, os sistemas de arquivos serão sempre verificados quando necessário. Observe que, com o fsck em segundo plano, um novo panic pode ocorrer enquanto os discos estão sendo verificados. Novamente, a maneira mais segura é não ter muitos sistemas de arquivos locais, usando outro computador como um servidor NFS.
[[prelim-starting]]
=== Começando o projeto
-Para o propósito de criar uma nova classe GEOM, um subdiretório vazio deve ser criado sob um diretório arbitrário acessível pelo usuário. Você não precisa criar o diretório do módulo em [.filename]#/usr/src#.
+Para criar uma nova classe GEOM, um subdiretório vazio deve ser criado em um diretório arbitrário acessível pelo usuário. Você não precisa criar o diretório do módulo em [.filename]#/usr/src#.
[[prelim-makefile]]
=== O Makefile
-É uma boa prática criar [.filename]#Makefiles# para cada projeto de codificação não trivial, o que obviamente inclui módulos do kernel.
+É uma boa prática criar arquivos [.filename]#Makefile# para todos os projetos de codificação não triviais, o que inclui, é claro, módulos do kernel.
-Criar o [.filename]#Makefile# é simples graças a um extenso conjunto de rotinas auxiliares fornecidas pelo sistema. Em suma, aqui está um exemplo de como um Makefile [.filename]#mínimo# para um módulo do kernel se parece:
+Criar o arquivo [.filename]#Makefile# é simples graças a um extenso conjunto de rotinas auxiliares fornecidas pelo sistema. Em resumo, aqui está como um [.filename]#Makefile# mínimo se parece para um módulo do kernel:
[.programlisting]
....
@@ -159,7 +173,7 @@ KMOD=geom_journal
.include <bsd.kmod.mk>
....
-Este [.filename]#Makefile# (com nomes de arquivos alterados) serve para qualquer módulo do kernel, e uma classe GEOM pode residir em apenas um módulo do kernel. Se mais de um arquivo for necessário, liste-o na variável `SRCS`, separado com espaço em branco de outros nomes de arquivos.
+Este [.filename]#Makefile# (com nomes de arquivo alterados) serve para qualquer módulo do kernel e uma classe GEOM pode residir em apenas um módulo do kernel. Se mais de um arquivo for necessário, liste-os na variável `SRCS`, separados por espaço de outros nomes de arquivo.
[[kernelprog]]
== Programação do kernel do FreeBSD
@@ -167,34 +181,34 @@ Este [.filename]#Makefile# (com nomes de arquivos alterados) serve para qualquer
[[kernelprog-memalloc]]
=== Alocação de memória
-Veja o man:malloc[9]. A alocação básica de memória é apenas ligeiramente diferente do seu userland equivalente. Mais notavelmente, `malloc`() e `free`() aceitam parâmetros adicionais conforme descrito na página do manual.
+Consulte man:malloc[9]. A alocação básica de memória é apenas ligeiramente diferente da sua equivalente no espaço do usuário. Mais notavelmente, `malloc()` e `free()` aceitam parâmetros adicionais conforme descrito na página do manual.
-Um "malloc type" deve ser declarado na seção de declaração de um arquivo fonte, assim:
+Um "malloc type" deve ser declarado na seção de declaração de um arquivo de código fonte, por exemplo desta forma:
[.programlisting]
....
static MALLOC_DEFINE(M_GJOURNAL, "gjournal data", "GEOM_JOURNAL Data");
....
-Para usar esta macro, os cabeçalhos [.filename]#sys/param.h#, [.filename]#sys/kernel.h# e [.filename]#sys/malloc.h# devem ser incluídos.
+Para usar essa macro, os cabeçalhos [.filename]#sys/param.h#, [.filename]#sys/kernel.h# e [.filename]#sys/malloc.h# devem ser incluídos.
-Existe outro mecanismo para alocar memória, o UMA (Universal Memory Allocator). Veja man:uma[9] para detalhes, mas ele é um tipo especial de alocador usado principalmente para alocação rápida de listas compostas de itens do mesmo tamanho (por exemplo, matrizes dinâmicas de estruturas).
+Existe outro mecanismo para alocar memória, o UMA (Universal Memory Allocator). Consulte man:uma[9] para obter detalhes, mas é um tipo especial de alocador usado principalmente para alocação rápida de listas compostas por itens do mesmo tamanho (por exemplo, matrizes dinâmicas de estruturas).
[[kernelprog-lists]]
=== Listas e filas
-Veja man:queue[3]. Há MUITOS casos quando uma lista de coisas precisa ser mantida. Felizmente, essa estrutura de dados é implementada (de várias maneiras) por macros C incluídas no sistema. O tipo de lista mais usado é o TAILQ, porque é o mais flexível. É também aquele com os maiores requisitos de memória (seus elementos são duplamente vinculados) e também o mais lento (embora a variação de velocidade seja mais da ordem de várias instruções da CPU, portanto, ela não deve ser levada a sério).
+Consulte man:queue[3]. Existem MUITOS casos em que uma lista de coisas precisa ser mantida. Felizmente, essa estrutura de dados é implementada (de várias maneiras) por macros em C incluídas no sistema. O tipo de lista mais usado é TAILQ porque é o mais flexível. Também é o que tem os maiores requisitos de memória (seus elementos são duplamente vinculados) e também o mais lento (embora a variação de velocidade seja da ordem de algumas instruções de CPU a mais, então não deve ser levado a sério).
-Se a velocidade de recuperação de dados for muito importante, veja man:tree[3] e man:hashinit[9].
+Se a velocidade de recuperação de dados é muito importante, consulte man:tree[3] e man:hashinit[9].
[[kernelprog-bios]]
=== BIOS
-A estrutura `bio` é usada para todas e quaisquer operações de Input/Output relativas ao GEOM. Ele basicamente contém informações sobre qual dispositivo ('provedor') deve satisfazer a solicitação, tipo de pedido, offset, comprimento, ponteiro para um buffer e um monte de sinalizadores "específicos do usuário" e campos que podem ajudar a implementar vários hacks.
+A estrutura `bio` é usada para todas e quaisquer operações de entrada/saída relacionadas ao GEOM. Basicamente, ela contém informações sobre qual dispositivo ('provider') deve satisfazer a solicitação, tipo de solicitação, deslocamento, comprimento, ponteiro para um buffer e um conjunto de flags e campos "específicos do usuário" que podem ajudar a implementar vários ajustes.
-O importante aqui é que os `bio`-s são tratados de forma assíncrona. Isso significa que, na maior parte do código, não há nenhum análogo as chamadas man:read[2] e man:write[2] que não retornam até que uma solicitação seja feita. Em vez disso, uma função fornecida pelo desenvolvedor é chamada como uma notificação quando a solicitação é concluída (ou resulta em erro).
+O importante aqui é que os ``bio``s são manipulados de forma assíncrona. Isso significa que, na maioria das partes do código, não há um análogo das chamadas man:read[2] e man:write[2] do espaço do usuário que não retornam até que uma solicitação seja concluída. Em vez disso, uma função fornecida pelo desenvolvedor é chamada como uma notificação quando a solicitação é concluída (ou resulta em erro).
-O modelo de programação assíncrona (também chamado de "orientado a eventos") é um pouco mais difícil do que o imperativo muito mais usado no userland (pelo menos leva um tempo para se acostumar com isso). Em alguns casos, as rotinas auxiliares `g_write_data`() e `g_read_data`() podem ser usadas, mas __nem sempre__. Em particular, elas não podem ser usadas quando um mutex é mantido; por exemplo, o mutex de topologia GEOM ou o mutex interno mantido durante as funções `.start`() e `.stop`().
+O modelo de programação assíncrono (também chamado de "event-driven") é um pouco mais difícil do que o muito usado modelo imperativo usado no espaço do usuário (pelo menos leva um tempo para se acostumar). Em alguns casos, as rotinas auxiliares `g_write_data()` e `g_read_data()` podem ser usadas, mas __nem sempre__. Em particular, elas não podem ser usadas quando um mutex é mantido; por exemplo, o mutex de topologia GEOM ou o mutex interno mantido durante as funções `.start()` e `.stop()`.
[[geom]]
== Programação GEOM
@@ -207,15 +221,15 @@ Se o desempenho máximo não for necessário, uma maneira muito mais simples de
[[geom-class]]
=== Classe GEOM
-Classes GEOM são transformações nos dados. Essas transformações podem ser combinadas em uma forma de árvore. Instâncias de classes GEOM são chamadas de __geoms__.
+As classes GEOM são transformações nos dados. Essas transformações podem ser combinadas de maneira semelhante a uma árvore. As instâncias de classes GEOM são chamadas de __geoms__.
-Cada classe GEOM possui vários "métodos de classe" que são chamados quando não há nenhuma instância geom disponível (ou simplesmente não estão vinculados a uma única instância):
+Cada classe GEOM tem vários "métodos de classe" que são chamados quando não há uma instância geom disponível (ou simplesmente não estão vinculados a uma única instância):
-* `.init` é chamada quando o GEOM toma conhecimento de uma classe GEOM (quando o módulo do kernel é carregado).
-* `.fini` é chamada quando o GEOM abandona a classe (quando o módulo é descarregado)
-* `.taste` é chamada next, uma vez para cada provedor que o sistema tiver disponível. Se aplicável, essa função geralmente criará e iniciará uma instância geom.
-* `.destroy_geom` é chamada quando o geom deve ser desfeito
-* `.ctlconf` é chamado quando o usuário solicita a reconfiguração do geom existente
+* O `.init` é chamado quando o GEOM toma conhecimento de uma classe GEOM (quando o módulo do kernel é carregado.)
+* O `.fini` é chamado quando o GEOM abandona a classe (quando o módulo é descarregado)
+* O `.taste` é chamado em seguida, uma vez para cada provider que o sistema tem disponível. Se aplicável, esta função geralmente criará e iniciará uma instância geom.
+* O `.destroy_geom` é chamado quando o geom deve ser desmontado
+* O `.ctlconf` é chamado quando o usuário solicita a reconfiguração do geom existente
Também são definidas as funções de evento GEOM, que serão copiadas para a instância geom.
@@ -226,13 +240,13 @@ Estas funções são chamadas a partir da thread g_event do kernel.
[[geom-softc]]
=== Softc
-O nome "softc" é um termo legado para "dados privados do driver". O nome provavelmente vem do termo arcaico "bloco de controle de software". No GEOM, ele é uma estrutura (mais precisamente: ponteiro para uma estrutura) que pode ser anexada a uma instância geom para armazenar quaisquer dados que sejam privados para a instância geom. A maioria das classes GEOM possui os seguintes membros:
+O nome "softc" é um termo legado para "dados privados do driver". O nome provavelmente vem do termo arcaico "bloco de controle de software". No GEOM, é uma estrutura (mais precisamente, um ponteiro para uma estrutura) que pode ser anexada a uma instância geom para manter quaisquer dados que sejam privados à instância geom. A maioria das classes GEOM tem os seguintes membros:
-* `struct g_provider *provider` : O "provedor" que este geom instância
-* `uint16_t n_disks` : Número de consumidores que este geom consome
-* `struct g_consumer \**disks`: Array de `struct g_consumer*`. (Não é possível usar apenas uma única via indireta porque o struct g_consumer* é criado em nosso nome pela GEOM).
+* `struct g_provider *provider`: Instância geom criada a partir do provider correspondente
+* `uint16_t n_disks`: Número de consumidores que esta instância geom consome
+* `struct g_consumer \**disks`: Array de `struct g_consumer*`. (Não é possível usar apenas uma única indireção porque os `struct g_consumer*` são criados em nosso nome pelo GEOM).
-A estrutura `softc` contém todo o estado da instância geom. Cada instância geom possui seu próprio softc.
+A estrutura `softc` contém todo o estado da instância geom. Cada instância geom tem sua própria estrutura `softc`.
[[geom-metadata]]
=== Metadados
@@ -253,22 +267,22 @@ Os metadados estão localizados no último setor do provedor (e, portanto, devem
A sequência de eventos é:
-* o usuário chama o utilitário man:geom[8] (ou um de seus equivalentes hardlinked)
-* o utilitário descobre qual classe geom ele é suposto manipular e procura pela biblioteca [.filename]#geom_CLASSNAME.so# (geralmente em [.filename]#/lib/geom#).
-* ele man:dlopen[3]-s a biblioteca, extrai as definições dos parâmetros da linha de comandos e funções auxiliares.
+* O usuário chama o utilitário man:geom[8] (ou um comandos alternativos para o mesmo utilitário)
+* O utilitário determina qual classe geom ele deve manipular e procura pela biblioteca [.filename]#geom_CLASSNAME.so# (geralmente em [.filename]#/lib/geom#).
+* O utilitário utiliza a função man:dlopen[3] para carregar dinamicamente a biblioteca, extrair as definições dos parâmetros de linha de comando e funções auxiliares.
No caso da criação/rotulação de um novo geom, isso é o que acontece:
-* O man:geom[8] procura no argumento da linha de comando pelo comando (geralmente `label`) e chama uma função auxiliar .
+* O comando man:geom[8] procura na linha de comando pelo comando (geralmente `label`) e chama uma função auxiliar correspondente.
* A função auxiliar verifica parâmetros e reúne metadados, que são gravados em todos os provedores envolvidos.
-* Este "estraga" geoms existentes (se existirem) e inicializa uma nova rodada de "degustação" dos provedores. A classe geom pretendida reconhece os metadados e carrega o geom.
+* Isso "anula" os geoms existentes (se houver) e inicializa uma nova rodada de "degustação" dos providers. A classe geom pretendida reconhece os metadados e coloca o geom em funcionamento.
(A sequência de eventos acima é dependente da implementação, mas todo o código existente funciona assim, e é suportado pelas bibliotecas.)
[[geom-command]]
=== Estrutura do Comando GEOM
-A biblioteca helper [.filename]#geom_CLASSNAME.so# exporta a estrutura `class_commands`, que é uma matriz dos elementos `struct g_command`. Os comandos são uniformes no formato e se parecem com:
+A biblioteca auxiliar [.filename]#geom_CLASSNAME.so# exporta a estrutura `class_commands`, que é um array de elementos `struct g_command`. Os comandos têm um formato uniforme e se parecem com:
[.programlisting]
....
@@ -277,72 +291,72 @@ A biblioteca helper [.filename]#geom_CLASSNAME.so# exporta a estrutura `class_co
Verbos comuns são:
-* label - para gravar metadados em dispositivos para que eles possam ser reconhecidos em degustações e criados em geoms
-* destroy - para destruir metadados, para que as geoms sejam destruídas
+* label - para escrever metadados nos dispositivos para que possam ser reconhecidos durante o processo de "tasting" e trazidos à tona em geoms
+* destroy - para destruir metadados, fazendo com que os geoms sejam destruídos
Opções comuns são:
-* `-v` : be verbose
-* `-f` : force
+* `-v` : ser verboso (mostrar mais informações)
+* `-f` : forçar
-Muitas ações, como rotular e destruir metadados, podem ser executadas no userland. Para isso, `struct g_command` fornece o campo `gc_func` que pode ser definido para uma função (no mesmo [.filename]#.so#) que será chamada para processar um verbo. Se `gc_func` for NULL, o comando será passado para o módulo do kernel, para a função `.ctlreq` da classe geom.
+Muitas ações, como rotular e destruir metadados, podem ser executadas no espaço de usuário. Para isso, `struct g_command` fornece o campo `gc_func`, que pode ser definido como uma função (no mesmo arquivo [.filename]#.so#) que será chamada para processar um verbo. Se `gc_func` for NULL, o comando será passado para o módulo do kernel, para a função `.ctlreq` da classe geom.
[[geom-geoms]]
=== Geoms
-Geoms são instâncias de classes GEOM. Eles possuem dados internos (uma estrutura softc) e algumas funções com as quais eles respondem a eventos externos.
+Os Geoms são instâncias das classes GEOM. Eles têm dados internos (uma estrutura softc) e algumas funções com as quais eles respondem a eventos externos.
As funções de evento são:
-* `.acess`: calcula permissões (leitura / escrita / exclusiva)
-* `.dumpconf`: retorna informações formatadas em XML sobre o geom
-* `.orphan`: chamado quando algum provedor subjacente é desconectado
-* `.spoiled`: chamado quando algum provedor subjacente é gravado
-* `.start`: lida com I/O
+* `.access` : calcula as permissões (leitura/escrita/exclusiva)
+* `.dumpconf` : uma função que retorna informações formatadas em XML sobre o geom
+* `.orphan` : chamado quando algum provedor subjacente é desconectado
+* `.spoiled` : chamado quando algum provedor subjacente é escrito
+* `.start` : lida com operações de entrada/saída (I/O)
-Estas funções são chamadas a partir da thread `g_down` do kernel e não pode haver sleeping neste contexto, (veja a definição de sleeping em outro lugar) o que limita um pouco o que pode ser feito, mas força o manuseio a ser rápido .
+Essas funções são chamadas a partir da thread do kernel `g_down` e não é permitido dormir nesse contexto (consulte a definição de dormir em outro lugar), o que limita bastante o que pode ser feito, mas força o tratamento a ser rápido.
-Destes, a função mais importante para fazer o trabalho útil real é a função `.start`(), que é chamada quando uma requisição BIO chega para um provedor gerenciado por uma instância da classe geom.
+A função mais importante para realizar trabalho útil é a função `.start()`, que é chamada quando uma solicitação BIO chega para um provider gerenciado por uma instância de classe geom.
[[geom-threads]]
=== Threads GEOM
Existem três threads de kernel criados e executados pelo framework GEOM:
-* `g_down` : trata de solicitações provenientes de entidades de alto nível (como uma solicitação do userland) no caminho para dispositivos físicos
-* `g_up` : lida com respostas de drivers de dispositivos para solicitações feitas por entidades de nível superior
-* `g_event` : lida com todos os outros casos: criação de instâncias geom, contagem de acessos, eventos "spoil", etc.
+* `g_down` : responsável por lidar com solicitações vindas de entidades de alto nível (como uma solicitação do espaço do usuário) a caminho de dispositivos físicos
+* `g_up` : Lida com as respostas dos drivers de dispositivo às solicitações feitas por entidades de nível superior
+* `g_event` : lida com todos os outros casos: criação de instâncias de geom, contagem de acesso, eventos de "spoil", etc.
-Quando um processo do usuário emite um pedido de "leitura de dados X no deslocamento Y de um arquivo", isto é o que acontece:
+Quando um processo do usuário emite uma solicitação para "ler dados X no deslocamento Y de um arquivo", o seguinte acontece:
* O sistema de arquivos converte o pedido em uma instância struct bio e o transmite para o subsistema GEOM. Ele sabe o que a instância geom deve manipular porque os sistemas de arquivos são hospedados diretamente em uma instância geom.
* A requisição termina como uma chamada para a função `.start`() feita para a thread g_down e atinge a instância geom de nível superior.
-* Essa instância geom de nível superior (por exemplo, o segmentador de partições) determina que a solicitação deve ser roteada para uma instância de nível inferior (por exemplo, o driver de disco). Ele faz uma cópia da solicitação bio (solicitações bio _SEMPRE_ precisam ser copiadas entre instâncias, com `g_clone_bio`()!), modifica os campos de dados offset e de provedor de destino e executa a cópia com `g_io_request`()
-* O driver de disco obtém a solicitação bio também como uma chamada para `.start`() na thread `g_down`. Ela fala com o hardware, recupera os dados e chama `g_io_deliver`() na bio.
-* Agora, a notificação de bio conclusão "borbulha" na thread `g_up`. Primeiro, o slicer de partição obtém `.done`() chamado na thread `g_up`, ele usa as informações armazenadas na bio para liberar a estrutura `bio` clonada (com `g_destroy_bio`()) e chama `g_io_deliver`() no pedido original.
+* Esta instância geom de nível superior (por exemplo, o "partition slicer") determina que a solicitação deve ser encaminhada para uma instância de nível inferior (por exemplo, o driver de disco). Ela faz uma cópia da solicitação bio (solicitações bio PRECISAM SEMPRE ser copiadas entre instâncias, com `g_clone_bio`()!), modifica o deslocamento dos dados e os campos do provider de destino e executa a cópia com `g_io_request`()
+* O driver de disco também recebe a requisição bio como uma chamada para `.start`() na thread `g_down`. Ele conversa com o hardware, recebe os dados de volta e chama `g_io_deliver`() na bio.
+* Agora, a notificação da conclusão do bio "sobe" na thread `g_up`. Primeiro, o particionador recebe `.done`() chamado na thread `g_up`, usa as informações armazenadas no bio para liberar a estrutura de `bio` clonada (com `g_destroy_bio`()) e chama `g_io_deliver`() no pedido original.
* O sistema de arquivos obtém os dados e os transfere para o usuário.
-Veja a página de manual para o man:g_bio[9] para obter informações sobre como os dados são passados para frente e para trás na estrutura `bio` (observe em particular os campos `bio_parent` e `bio_children` e como eles são manipulados).
+Consulte a página do manual man:g_bio[9] para obter informações sobre como os dados são passados de um lado para o outro na estrutura `bio` (observe em particular os campos `bio_parent` e `bio_children` e como eles são manipulados).
-Uma característica importante: __NAS THREADS G_UP E G_DOWN NÃO SE PODE DORMIR (SELEEPING)__. Isso significa que nenhuma das seguintes coisas pode ser feita nessas threads (a lista não é completa, mas apenas informativa):
+Uma característica importante é que __ NÃO PODEM HAVER CHAMADAS DE FUNÇÃO QUE BLOQUEIEM O PROCESSO (DURMAM) NAS THREADS G_UP E G_DOWN__. Isso significa que nenhuma das seguintes coisas pode ser feita nesses threads (a lista é apenas informativa e não completa):
* Chamadas para `msleep`() e `tsleep`(), obviamente.
-* Chamadas para `g_write_data`() e `g_read_data`(), porque estes dormem entre passar os dados para os consumidores e retornar.
-* Esperando I/O.
-* Chamadas para man:malloc[9] e `uma_zalloc`() com o conjunto de flags `M_WAITOK`
-* sx e outros sleepable locks
+* Chamadas para `g_write_data`() e `g_read_data()`, pois elas dormem entre a passagem dos dados para os consumidores e o retorno.
+* Aguardando I/O.
+* Chamadas a man:malloc[9] e `uma_zalloc`() com a flag `M_WAITOK` definida
+* sx e outros tipos de bloqueios sleepable
-Esta restrição está aqui para impedir que o código GEOM obstrua o caminho da solicitação de I/O, já que sleeping normalmente não é limitado pelo tempo e não pode haver garantias sobre quanto tempo levará (também existem algumas outras razões mais técnicas). Isso também significa que não existe muito o que possa ser feito nessas threads; por exemplo, quase qualquer coisa complexa requer alocação de memória. Felizmente, existe uma saída: criar threads adicionais no kernel.
+Essa restrição foi imposta para evitar que o código GEOM obstrua o caminho de solicitação de E/S, já que a espera geralmente não está relacionada ao tempo e não há garantias sobre quanto tempo levará (há outras razões técnicas também). Isso também significa que não há muito o que se possa fazer nessas threads; por exemplo, quase qualquer coisa complexa requer alocação de memória. Felizmente, há uma saída: criar threads adicionais do kernel.
[[geom-kernelthreads]]
=== Threads de kernel para uso no código GEOM
-As threads do kernel são criadas com a função man:kthread_create[9], e elas são semelhantes aos threads do userland no comportamento, eles somente não podem retornar ao chamador para exprimir a conclusão, mas deve chamar man:kthread_exit[9].
+Threads do Kernel são criados com a função man:kthread_create[9], e eles são parecidos com threads de espaço de usuário em termos de comportamento, apenas que não podem retornar ao chamador para indicar término, mas devem chamar man:kthread_exit[9].
-No código GEOM, o uso usual de threads é para descarregar o processamento de requisições da thread `g_down` (a função `.start`). Estas threads se parecem com um "event handlers": elas têm uma lista encadeada de eventos associados a elas (nos quais eventos podem ser postados por várias funções em várias threads, portanto, devem ser protegidos por um mutex), pegam os eventos da lista, um por um, e processa-os em uma grande instrução `switch`().
+No código do GEOM, o uso usual de threads é para descarregar o processamento de solicitações da thread `g_down` (a função `.start()`). Essas threads se parecem com "manipuladores de eventos": elas têm uma lista vinculada de eventos associados a elas (na qual eventos podem ser postados por várias funções em várias threads, então ela deve ser protegida por um mutex), pegam os eventos da lista um por um e os processam em uma grande declaração `switch()`.
-A principal vantagem de usar uma thread para lidar com solicitações de I/O é que ela pode dormir quando necessário. Agora, isso parece bom, mas deve ser cuidadosamente pensado. Dormir é bom e muito conveniente, mas pode ser muito efetivo em destruir o desempenho da transformação geom. As classes extremamente sensíveis ao desempenho provavelmente devem fazer todo o trabalho na chamada de função `.start`(), tomando muito cuidado para lidar com erros de falta de memória e similares.
+O principal benefício de usar uma thread para lidar com as solicitações de E/S é que ela pode dormir quando necessário. Agora, isso parece bom, mas deve ser cuidadosamente pensado. Dormir é bem conveniente, mas pode destruir efetivamente o desempenho da transformação geom. As classes extremamente sensíveis ao desempenho provavelmente devem fazer todo o trabalho na chamada de função `.start()`, tendo muito cuidado para lidar com erros de falta de memória e similares.
-O outro benefício de ter uma thread de manipulação de eventos como essa é serializar todas as solicitações e respostas provenientes de diferentes threads geom em uma thread. Isso também é muito conveniente, mas pode ser lento. Na maioria dos casos, o tratamento de pedidos `.done`() pode ser deixado para a thread `g_up`.
+O outro benefício de ter uma thread de tratamento de eventos é a serialização de todas as solicitações e respostas vindas de diferentes threads do geom em uma única thread. Isso também é muito conveniente, mas pode ser lento. Na maioria dos casos, o tratamento de solicitações `.done`() pode ser deixado para a thread `g_up`.
-Mutexes no kernel do FreeBSD (veja man:mutex[9]) têm uma distinção de seus primos mais comuns do userland - o código não pode dormir enquanto estiver segurando um mutex). Se o código precisar dormir muito, os bloqueios man:sx[9] podem ser mais apropriados. Por outro lado, se você faz quase tudo em um único thread, você pode se safar sem utilizar mutexes.
+Mutexes no kernel do FreeBSD (veja man:mutex[9]) possuem uma distinção em relação às suas contrapartes mais comuns no userland - o código não pode dormir enquanto segura um mutex. Se o código precisa dormir muito, as travas man:sx[9] podem ser mais apropriadas. Por outro lado, se você fizer quase tudo em um único thread, pode se livrar completamente do uso de mutexes.
diff --git a/documentation/content/pt-br/articles/geom-class/_index.po b/documentation/content/pt-br/articles/geom-class/_index.po
new file mode 100644
index 0000000000..b1a4793bf7
--- /dev/null
+++ b/documentation/content/pt-br/articles/geom-class/_index.po
@@ -0,0 +1,1397 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-05-04 20:00+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesgeom-class_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/geom-class/_index.adoc:1
+#, no-wrap
+msgid "A guide to GEOM internals, and writing your own GEOM class"
+msgstr ""
+"Um guia sobre os internals do GEOM e sobre como escrever sua própria classe "
+"GEOM"
+
+#. type: Title =
+#: documentation/content/en/articles/geom-class/_index.adoc:1
+#: documentation/content/en/articles/geom-class/_index.adoc:11
+#, no-wrap
+msgid "Writing a GEOM Class"
+msgstr "Escrevendo uma classe GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:47
+msgid ""
+"This text documents some starting points in developing GEOM classes, and "
+"kernel modules in general. It is assumed that the reader is familiar with C "
+"userland programming."
+msgstr ""
+"Este texto documenta alguns pontos de partida no desenvolvimento de classes "
+"GEOM e módulos de kernel em geral. Pressupõe-se que o leitor esteja "
+"familiarizado com a programação de espaço de usuário em C."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:49
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:53
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:56
+#, no-wrap
+msgid "Documentation"
+msgstr "Documentação"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:60
+msgid ""
+"Documentation on kernel programming is scarce - it is one of few areas where "
+"there is nearly nothing in the way of friendly tutorials, and the phrase "
+"\"use the source!\" really holds true. However, there are some bits and "
+"pieces (some of them seriously outdated) floating around that should be "
+"studied before beginning to code:"
+msgstr ""
+"A documentação sobre programação de kernel é escassa - é uma das poucas "
+"áreas em que quase não há tutoriais amigáveis, e a frase \"use o código "
+"fonte!\" realmente é verdadeira. No entanto, existem alguns fragmentos ("
+"alguns deles seriamente desatualizados) circulando que devem ser estudados "
+"antes de começar a codificar:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:62
+msgid ""
+"The extref:{developers-handbook}[FreeBSD Developer's Handbook] - part of the "
+"documentation project, it does not contain anything specific to kernel "
+"programming, but rather some general useful information."
+msgstr ""
+"O extref:{developers-handbook}[Handbook do Desenvolvedor do FreeBSD] - parte "
+"do projeto de documentação, não contém nada específico sobre programação do "
+"kernel, mas sim algumas informações úteis em geral."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:63
+msgid ""
+"The extref:{arch-handbook}[FreeBSD Architecture Handbook] - also from the "
+"documentation project, contains descriptions of several low-level facilities "
+"and procedures. The most important chapter is 13, extref:{arch-handbook}"
+"[Writing FreeBSD device drivers, driverbasics]."
+msgstr ""
+"O extref:{arch-handbook}[Handbook de Arquitetura do FreeBSD] - também do "
+"projeto de documentação, contém descrições de várias instalações e "
+"procedimentos de baixo nível. O capítulo mais importante é o 13, extref"
+":{arch-handbook}[Escrevendo drivers de dispositivos FreeBSD, driverbasics]."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:64
+msgid ""
+"The Blueprints section of http://www.freebsddiary.org[FreeBSD Diary] web "
+"site - contains several interesting articles on kernel facilities."
+msgstr ""
+"A seção Blueprints do site http://www.freebsddiary.org contém vários artigos "
+"interessantes sobre as facilidades do kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:65
+msgid ""
+"The man pages in section 9 - for important documentation on kernel functions."
+msgstr ""
+"As páginas de manual da seção 9 - para documentação importante sobre as "
+"funções do kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:66
+msgid ""
+"The man:geom[4] man page and http://phk.freebsd.dk/pubs/[PHK's GEOM slides] "
+"- for general introduction of the GEOM subsystem."
+msgstr ""
+"A página de manual man:geom[4] e os slides sobre o GEOM do PHK em http://phk."
+"freebsd.dk/pubs/ - para uma introdução geral ao subsistema GEOM."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:67
+msgid ""
+"Man pages man:g_bio[9], man:g_event[9], man:g_data[9], man:g_geom[9], man:"
+"g_provider[9], man:g_consumer[9], man:g_access[9] & others linked from "
+"those, for documentation on specific functionalities."
+msgstr ""
+"As páginas de manual man:g_bio[9], man:g_event[9], man:g_data[9], "
+"man:g_geom[9], man:g_provider[9], man:g_consumer[9], man:g_access[9] e "
+"outras vinculadas a elas, para documentação sobre funcionalidades "
+"específicas."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:68
+msgid ""
+"The man:style[9] man page - for documentation on the coding-style "
+"conventions which must be followed for any code which is to be committed to "
+"the FreeBSD tree."
+msgstr ""
+"A página de manual man:style[9] - para documentação sobre as convenções de "
+"estilo de codificação que devem ser seguidas para qualquer código que seja "
+"commitado para a árvore do FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:70
+#, no-wrap
+msgid "Preliminaries"
+msgstr "Preliminares"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:77
+msgid ""
+"The best way to do kernel development is to have (at least) two separate "
+"computers. One of these would contain the development environment and "
+"sources, and the other would be used to test the newly written code by "
+"network-booting and network-mounting filesystems from the first one. This "
+"way if the new code contains bugs and crashes the machine, it will not mess "
+"up the sources (and other \"live\" data). The second system does not even "
+"require a proper display. Instead, it could be connected with a serial "
+"cable or KVM to the first one."
+msgstr ""
+"A melhor maneira de desenvolver para o kernel é ter (pelo menos) dois "
+"computadores separados. Um deles conteria o ambiente de desenvolvimento e as "
+"fontes, e o outro seria usado para testar o código recém-escrito por meio do "
+"boot e montagem de sistemas de arquivos por rede do primeiro. Dessa forma, "
+"se o novo código contiver erros e travar a máquina, ele não afetará as "
+"fontes (e outros dados \"ao vivo\"). O segundo sistema nem mesmo precisa de "
+"uma tela adequada. Em vez disso, ele pode ser conectado com um cabo serial "
+"ou KVM para o primeiro."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:80
+msgid ""
+"But, since not everybody has two or more computers handy, there are a few "
+"things that can be done to prepare an otherwise \"live\" system for "
+"developing kernel code. This setup is also applicable for developing in a "
+"http://www.vmware.com/[VMWare] or http://www.qemu.org/[QEmu] virtual machine "
+"(the next best thing after a dedicated development machine)."
+msgstr ""
+"No entanto, como nem todo mundo tem dois ou mais computadores disponíveis, "
+"existem algumas coisas que podem ser feitas para preparar um sistema \"ao "
+"vivo\" para o desenvolvimento de código do kernel. Essa configuração também "
+"é aplicável para desenvolvimento em uma máquina virtual http://www.vmware."
+"com/[VMWare] ou http://www.qemu.org/[QEmu] (a próxima melhor opção depois de "
+"uma máquina de desenvolvimento dedicada)."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:82
+#, no-wrap
+msgid "Modifying a System for Development"
+msgstr "Modificando um sistema para desenvolvimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:85
+msgid ""
+"For any kernel programming a kernel with `INVARIANTS` enabled is a must-"
+"have. So enter these in your kernel configuration file:"
+msgstr ""
+"Para qualquer programação de kernel, é essencial ter um kernel com "
+"`INVARIANTS` ativado. Portanto, adicione as seguintes opções no arquivo de "
+"configuração do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:90
+#, no-wrap
+msgid ""
+"options INVARIANT_SUPPORT\n"
+"options INVARIANTS\n"
+msgstr ""
+"options INVARIANT_SUPPORT\n"
+"options INVARIANTS\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:93
+msgid ""
+"For more debugging you should also include WITNESS support, which will alert "
+"you of mistakes in locking:"
+msgstr ""
+"Para obter mais depuração, você também deve incluir o suporte a WITNESS, que "
+"alertará sobre erros de bloqueio:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:98
+#, no-wrap
+msgid ""
+"options WITNESS_SUPPORT\n"
+"options WITNESS\n"
+msgstr ""
+"options WITNESS_SUPPORT\n"
+"options WITNESS\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:101
+msgid "For debugging crash dumps, a kernel with debug symbols is needed:"
+msgstr ""
+"Para depurar despejos de falhas (crash dumps), é necessário um kernel com "
+"símbolos de depuração:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:105
+#, no-wrap
+msgid " makeoptions DEBUG=-g\n"
+msgstr " makeoptions DEBUG=-g\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:110
+msgid ""
+"With the usual way of installing the kernel (`make installkernel`) the debug "
+"kernel will not be automatically installed. It is called [.filename]#kernel."
+"debug# and located in [.filename]#/usr/obj/usr/src/sys/KERNELNAME/#. For "
+"convenience it should be copied to [.filename]#/boot/kernel/#."
+msgstr ""
+"Com a maneira usual de instalar o kernel (`make installkernel`), o kernel de "
+"depuração não será instalado automaticamente. Ele é chamado de [."
+"filename]#kernel.debug# e fica localizado em [.filename]#/usr/obj/usr/src/"
+"sys/NOME_DO_KERNEL/#. Por conveniência, ele deve ser copiado para [."
+"filename]#/boot/kernel/#."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:113
+msgid ""
+"Another convenience is enabling the kernel debugger so you can examine a "
+"kernel panic when it happens. For this, enter the following lines in your "
+"kernel configuration file:"
+msgstr ""
+"Outra conveniência é habilitar o depurador do kernel para que você possa "
+"examinar um kernel panic quando ele ocorrer. Para isso, adicione as "
+"seguintes linhas no arquivo de configuração do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:119
+#, no-wrap
+msgid ""
+"options KDB\n"
+"options DDB\n"
+"options KDB_TRACE\n"
+msgstr ""
+"options KDB\n"
+"options DDB\n"
+"options KDB_TRACE\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:122
+msgid ""
+"For this to work you might need to set a sysctl (if it is not on by default):"
+msgstr ""
+"Para que isso funcione, você pode precisar definir um sysctl (se ele não "
+"estiver ativado por padrão):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:126
+#, no-wrap
+msgid " debug.debugger_on_panic=1\n"
+msgstr " debug.debugger_on_panic=1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:134
+msgid ""
+"Kernel panics will happen, so care should be taken with the filesystem "
+"cache. In particular, having softupdates might mean the latest file version "
+"could be lost if a panic occurs before it is committed to storage. "
+"Disabling softupdates yields a great performance hit, and still does not "
+"guarantee data consistency. Mounting filesystem with the \"sync\" option is "
+"needed for that. For a compromise, the softupdates cache delays can be "
+"shortened. There are three sysctl's that are useful for this (best to be "
+"set in [.filename]#/etc/sysctl.conf#):"
+msgstr ""
+"Panics do kernel podem acontecer, portanto, é preciso ter cuidado com o "
+"cache do sistema de arquivos. Em particular, ter softupdates pode significar "
+"que a versão mais recente de um arquivo pode ser perdida se ocorrer um panic "
+"antes que seja gravada no armazenamento. Desabilitar o softupdates implica "
+"em uma grande perda de desempenho e ainda não garante a consistência dos "
+"dados. É necessário montar o sistema de arquivos com a opção \"sync\" para "
+"garantir isso. Como um compromisso, os atrasos do cache do softupdates podem "
+"ser encurtados. Existem três sysctl que são úteis para isso (melhor "
+"configurados em [.filename]#/etc/sysctl.conf#):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:140
+#, no-wrap
+msgid ""
+"kern.filedelay=5\n"
+"kern.dirdelay=4\n"
+"kern.metadelay=3\n"
+msgstr ""
+"kern.filedelay=5\n"
+"kern.dirdelay=4\n"
+"kern.metadelay=3\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:143
+msgid "The numbers represent seconds."
+msgstr "Os números representam segundos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:151
+msgid ""
+"For debugging kernel panics, kernel core dumps are required. Since a kernel "
+"panic might make filesystems unusable, this crash dump is first written to a "
+"raw partition. Usually, this is the swap partition. This partition must be "
+"at least as large as the physical RAM in the machine. On the next boot, the "
+"dump is copied to a regular file. This happens after filesystems are "
+"checked and mounted, and before swap is enabled. This is controlled with "
+"two [.filename]#/etc/rc.conf# variables:"
+msgstr ""
+"Para depurar panics do kernel, são necessários os despejos de núcleo do "
+"kernel. Como um kernel panic pode tornar os sistemas de arquivos "
+"inutilizáveis, este despejo de falhas é primeiro gravado em uma partição "
+"raw. Geralmente, isso é feito na partição de swap. Esta partição deve ter "
+"pelo menos o tamanho da RAM física da máquina. No próximo boot, o despejo é "
+"copiado para um arquivo regular. Isso acontece após a verificação e montagem "
+"dos sistemas de arquivos e antes que o swap seja ativado. Isso é controlado "
+"com duas variáveis do arquivo [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:156
+#, no-wrap
+msgid ""
+"dumpdev=\"/dev/ad0s4b\"\n"
+"dumpdir=\"/usr/core\n"
+msgstr ""
+"dumpdev=\"/dev/ad0s4b\"\n"
+"dumpdir=\"/usr/core\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:159
+msgid ""
+"The `dumpdev` variable specifies the swap partition and `dumpdir` tells the "
+"system where in the filesystem to relocate the core dump on reboot."
+msgstr ""
+"A variável `dumpdev` especifica a partição de swap e `dumpdir` informa ao "
+"sistema onde no sistema de arquivos realocar o core dump no reboot."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:162
+msgid ""
+"Writing kernel core dumps is slow and takes a long time so if you have lots "
+"of memory (>256M) and lots of panics it could be frustrating to sit and wait "
+"while it is done (twice - first to write it to swap, then to relocate it to "
+"filesystem). It is convenient then to limit the amount of RAM the system "
+"will use via a [.filename]#/boot/loader.conf# tunable:"
+msgstr ""
+"Gravar o core dump do kernel é lento e leva muito tempo, portanto, se você "
+"tiver muita memória (>256 MB) e muitos panics, pode ser frustrante esperar "
+"enquanto isso é feito (duas vezes - primeiro para gravá-lo na troca, depois "
+"para realocá-lo no sistema de arquivos). É conveniente, portanto, limitar a "
+"quantidade de RAM que o sistema usará por meio de um ajuste no [.filename]#/"
+"boot/loader.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:166
+#, no-wrap
+msgid " hw.physmem=\"256M\"\n"
+msgstr " hw.physmem=\"256M\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:169
+msgid ""
+"If the panics are frequent and filesystems large (or you simply do not trust "
+"softupdates+background fsck) it is advisable to turn background fsck off via "
+"[.filename]#/etc/rc.conf# variable:"
+msgstr ""
+"Se os panics forem frequentes e os sistemas de arquivos forem grandes (ou se "
+"você simplesmente não confiar no softupdates + fsck em segundo plano), é "
+"aconselhável desativar o fsck em segundo plano por meio da seguinte variável "
+"no arquivo [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:173
+#, no-wrap
+msgid " background_fsck=\"NO\"\n"
+msgstr " background_fsck=\"NO\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:178
+msgid ""
+"This way, the filesystems will always get checked when needed. Note that "
+"with background fsck, a new panic could happen while it is checking the "
+"disks. Again, the safest way is not to have many local filesystems by using "
+"another computer as an NFS server."
+msgstr ""
+"Dessa forma, os sistemas de arquivos serão sempre verificados quando "
+"necessário. Observe que, com o fsck em segundo plano, um novo panic pode "
+"ocorrer enquanto os discos estão sendo verificados. Novamente, a maneira "
+"mais segura é não ter muitos sistemas de arquivos locais, usando outro "
+"computador como um servidor NFS."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:180
+#, no-wrap
+msgid "Starting the Project"
+msgstr "Começando o projeto"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:184
+msgid ""
+"For the purpose of creating a new GEOM class, an empty subdirectory has to "
+"be created under an arbitrary user-accessible directory. You do not have to "
+"create the module directory under [.filename]#/usr/src#."
+msgstr ""
+"Para criar uma nova classe GEOM, um subdiretório vazio deve ser criado em um "
+"diretório arbitrário acessível pelo usuário. Você não precisa criar o "
+"diretório do módulo em [.filename]#/usr/src#."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:186
+#, no-wrap
+msgid "The Makefile"
+msgstr "O Makefile"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:189
+msgid ""
+"It is good practice to create [.filename]#Makefiles# for every nontrivial "
+"coding project, which of course includes kernel modules."
+msgstr ""
+"É uma boa prática criar arquivos [.filename]#Makefile# para todos os "
+"projetos de codificação não triviais, o que inclui, é claro, módulos do "
+"kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:192
+msgid ""
+"Creating the [.filename]#Makefile# is simple thanks to an extensive set of "
+"helper routines provided by the system. In short, here is how a minimal [."
+"filename]#Makefile# looks for a kernel module:"
+msgstr ""
+"Criar o arquivo [.filename]#Makefile# é simples graças a um extenso conjunto "
+"de rotinas auxiliares fornecidas pelo sistema. Em resumo, aqui está como um ["
+".filename]#Makefile# mínimo se parece para um módulo do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:197
+#, no-wrap
+msgid ""
+"SRCS=g_journal.c\n"
+"KMOD=geom_journal\n"
+msgstr ""
+"SRCS=g_journal.c\n"
+"KMOD=geom_journal\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:199
+#, no-wrap
+msgid ".include <bsd.kmod.mk>\n"
+msgstr ".include <bsd.kmod.mk>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:203
+msgid ""
+"This [.filename]#Makefile# (with changed filenames) will do for any kernel "
+"module, and a GEOM class can reside in just one kernel module. If more than "
+"one file is required, list it in the `SRCS` variable, separated with "
+"whitespace from other filenames."
+msgstr ""
+"Este [.filename]#Makefile# (com nomes de arquivo alterados) serve para "
+"qualquer módulo do kernel e uma classe GEOM pode residir em apenas um módulo "
+"do kernel. Se mais de um arquivo for necessário, liste-os na variável `SRCS`"
+", separados por espaço de outros nomes de arquivo."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:205
+#, no-wrap
+msgid "On FreeBSD Kernel Programming"
+msgstr "Programação do kernel do FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:208
+#, no-wrap
+msgid "Memory Allocation"
+msgstr "Alocação de memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:213
+msgid ""
+"See man:malloc[9]. Basic memory allocation is only slightly different than "
+"its userland equivalent. Most notably, `malloc`() and `free`() accept "
+"additional parameters as is described in the man page."
+msgstr ""
+"Consulte man:malloc[9]. A alocação básica de memória é apenas ligeiramente "
+"diferente da sua equivalente no espaço do usuário. Mais notavelmente, "
+"`malloc()` e `free()` aceitam parâmetros adicionais conforme descrito na "
+"página do manual."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:215
+msgid ""
+"A \"malloc type\" must be declared in the declaration section of a source "
+"file, like this:"
+msgstr ""
+"Um \"malloc type\" deve ser declarado na seção de declaração de um arquivo "
+"de código fonte, por exemplo desta forma:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:219
+#, no-wrap
+msgid " static MALLOC_DEFINE(M_GJOURNAL, \"gjournal data\", \"GEOM_JOURNAL Data\");\n"
+msgstr ""
+" static MALLOC_DEFINE(M_GJOURNAL, \"gjournal data\", \"GEOM_JOURNAL Data\");"
+"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:222
+msgid ""
+"To use this macro, [.filename]#sys/param.h#, [.filename]#sys/kernel.h# and [."
+"filename]#sys/malloc.h# headers must be included."
+msgstr ""
+"Para usar essa macro, os cabeçalhos [.filename]#sys/param.h#, [.filename]#"
+"sys/kernel.h# e [.filename]#sys/malloc.h# devem ser incluídos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:225
+msgid ""
+"There is another mechanism for allocating memory, the UMA (Universal Memory "
+"Allocator). See man:uma[9] for details, but it is a special type of "
+"allocator mainly used for speedy allocation of lists comprised of same-sized "
+"items (for example, dynamic arrays of structs)."
+msgstr ""
+"Existe outro mecanismo para alocar memória, o UMA (Universal Memory "
+"Allocator). Consulte man:uma[9] para obter detalhes, mas é um tipo especial "
+"de alocador usado principalmente para alocação rápida de listas compostas "
+"por itens do mesmo tamanho (por exemplo, matrizes dinâmicas de estruturas)."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:227
+#, no-wrap
+msgid "Lists and Queues"
+msgstr "Listas e filas"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:234
+msgid ""
+"See man:queue[3]. There are a LOT of cases when a list of things needs to "
+"be maintained. Fortunately, this data structure is implemented (in several "
+"ways) by C macros included in the system. The most used list type is TAILQ "
+"because it is the most flexible. It is also the one with largest memory "
+"requirements (its elements are doubly-linked) and also the slowest (although "
+"the speed variation is on the order of several CPU instructions more, so it "
+"should not be taken seriously)."
+msgstr ""
+"Consulte man:queue[3]. Existem MUITOS casos em que uma lista de coisas "
+"precisa ser mantida. Felizmente, essa estrutura de dados é implementada (de "
+"várias maneiras) por macros em C incluídas no sistema. O tipo de lista mais "
+"usado é TAILQ porque é o mais flexível. Também é o que tem os maiores "
+"requisitos de memória (seus elementos são duplamente vinculados) e também o "
+"mais lento (embora a variação de velocidade seja da ordem de algumas "
+"instruções de CPU a mais, então não deve ser levado a sério)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:236
+msgid ""
+"If data retrieval speed is very important, see man:tree[3] and man:"
+"hashinit[9]."
+msgstr ""
+"Se a velocidade de recuperação de dados é muito importante, consulte "
+"man:tree[3] e man:hashinit[9]."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:238
+#, no-wrap
+msgid "BIOs"
+msgstr "BIOS"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:242
+msgid ""
+"Structure `bio` is used for any and all Input/Output operations concerning "
+"GEOM. It basically contains information about what device ('provider') "
+"should satisfy the request, request type, offset, length, pointer to a "
+"buffer, and a bunch of \"user-specific\" flags and fields that can help "
+"implement various hacks."
+msgstr ""
+"A estrutura `bio` é usada para todas e quaisquer operações de entrada/saída "
+"relacionadas ao GEOM. Basicamente, ela contém informações sobre qual "
+"dispositivo ('provider') deve satisfazer a solicitação, tipo de solicitação, "
+"deslocamento, comprimento, ponteiro para um buffer e um conjunto de flags e "
+"campos \"específicos do usuário\" que podem ajudar a implementar vários "
+"ajustes."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:246
+msgid ""
+"The important thing here is that ``bio``s are handled asynchronously. That "
+"means that, in most parts of the code, there is no analogue to userland's "
+"man:read[2] and man:write[2] calls that do not return until a request is "
+"done. Rather, a developer-supplied function is called as a notification "
+"when the request gets completed (or results in error)."
+msgstr ""
+"O importante aqui é que os ``bio``s são manipulados de forma assíncrona. "
+"Isso significa que, na maioria das partes do código, não há um análogo das "
+"chamadas man:read[2] e man:write[2] do espaço do usuário que não retornam "
+"até que uma solicitação seja concluída. Em vez disso, uma função fornecida "
+"pelo desenvolvedor é chamada como uma notificação quando a solicitação é "
+"concluída (ou resulta em erro)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:250
+msgid ""
+"The asynchronous programming model (also called \"event-driven\") is "
+"somewhat harder than the much more used imperative one used in userland (at "
+"least it takes a while to get used to it). In some cases the helper "
+"routines `g_write_data`() and `g_read_data`() can be used, but __not "
+"always__. In particular, they cannot be used when a mutex is held; for "
+"example, the GEOM topology mutex or the internal mutex held during the `."
+"start`() and `.stop`() functions."
+msgstr ""
+"O modelo de programação assíncrono (também chamado de \"event-driven\") é um "
+"pouco mais difícil do que o muito usado modelo imperativo usado no espaço do "
+"usuário (pelo menos leva um tempo para se acostumar). Em alguns casos, as "
+"rotinas auxiliares `g_write_data()` e `g_read_data()` podem ser usadas, mas "
+"__nem sempre__. Em particular, elas não podem ser usadas quando um mutex é "
+"mantido; por exemplo, o mutex de topologia GEOM ou o mutex interno mantido "
+"durante as funções `.start()` e `.stop()`."
+
+#. type: Title ==
+#: documentation/content/en/articles/geom-class/_index.adoc:252
+#, no-wrap
+msgid "On GEOM Programming"
+msgstr "Programação GEOM"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:255
+#, no-wrap
+msgid "Ggate"
+msgstr "Ggate"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:259
+msgid ""
+"If maximum performance is not needed, a much simpler way of making a data "
+"transformation is to implement it in userland via the ggate (GEOM gate) "
+"facility. Unfortunately, there is no easy way to convert between, or even "
+"share code between the two approaches."
+msgstr ""
+"Se o desempenho máximo não for necessário, uma maneira muito mais simples de "
+"fazer uma transformação de dados é implementá-lo na área do usuário por meio "
+"do recurso ggate (GEOM gate). Infelizmente, não existe uma maneira fácil de "
+"converter ou até mesmo compartilhar código entre as duas abordagens."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:261
+#, no-wrap
+msgid "GEOM Class"
+msgstr "Classe GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:266
+msgid ""
+"GEOM classes are transformations on the data. These transformations can be "
+"combined in a tree-like fashion. Instances of GEOM classes are called "
+"__geoms__."
+msgstr ""
+"As classes GEOM são transformações nos dados. Essas transformações podem ser "
+"combinadas de maneira semelhante a uma árvore. As instâncias de classes GEOM "
+"são chamadas de __geoms__."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:268
+msgid ""
+"Each GEOM class has several \"class methods\" that get called when there is "
+"no geom instance available (or they are simply not bound to a single "
+"instance):"
+msgstr ""
+"Cada classe GEOM tem vários \"métodos de classe\" que são chamados quando "
+"não há uma instância geom disponível (ou simplesmente não estão vinculados a "
+"uma única instância):"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:270
+msgid ""
+"`.init` is called when GEOM becomes aware of a GEOM class (when the kernel "
+"module gets loaded.)"
+msgstr ""
+"O `.init` é chamado quando o GEOM toma conhecimento de uma classe GEOM ("
+"quando o módulo do kernel é carregado.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:271
+msgid ""
+"`.fini` gets called when GEOM abandons the class (when the module gets "
+"unloaded)"
+msgstr ""
+"O `.fini` é chamado quando o GEOM abandona a classe (quando o módulo é "
+"descarregado)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:272
+msgid ""
+"`.taste` is called next, once for each provider the system has available. If "
+"applicable, this function will usually create and start a geom instance."
+msgstr ""
+"O `.taste` é chamado em seguida, uma vez para cada provider que o sistema "
+"tem disponível. Se aplicável, esta função geralmente criará e iniciará uma "
+"instância geom."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:273
+msgid "`.destroy_geom` is called when the geom should be disbanded"
+msgstr "O `.destroy_geom` é chamado quando o geom deve ser desmontado"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:274
+msgid ""
+"`.ctlconf` is called when user requests reconfiguration of existing geom"
+msgstr ""
+"O `.ctlconf` é chamado quando o usuário solicita a reconfiguração do geom "
+"existente"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:276
+msgid ""
+"Also defined are the GEOM event functions, which will get copied to the geom "
+"instance."
+msgstr ""
+"Também são definidas as funções de evento GEOM, que serão copiadas para a "
+"instância geom."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:278
+msgid ""
+"Field `.geom` in the `g_class` structure is a LIST of geoms instantiated "
+"from the class."
+msgstr ""
+"O campo `.geom` na estrutura `g_class` é uma LISTA de geoms instanciados a "
+"partir da classe."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:280
+msgid "These functions are called from the g_event kernel thread."
+msgstr "Estas funções são chamadas a partir da thread g_event do kernel."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:282
+#, no-wrap
+msgid "Softc"
+msgstr "Softc"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:288
+msgid ""
+"The name \"softc\" is a legacy term for \"driver private data\". The name "
+"most probably comes from the archaic term \"software control block\". In "
+"GEOM, it is a structure (more precise: pointer to a structure) that can be "
+"attached to a geom instance to hold whatever data is private to the geom "
+"instance. Most GEOM classes have the following members:"
+msgstr ""
+"O nome \"softc\" é um termo legado para \"dados privados do driver\". O nome "
+"provavelmente vem do termo arcaico \"bloco de controle de software\". No "
+"GEOM, é uma estrutura (mais precisamente, um ponteiro para uma estrutura) "
+"que pode ser anexada a uma instância geom para manter quaisquer dados que "
+"sejam privados à instância geom. A maioria das classes GEOM tem os seguintes "
+"membros:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:290
+msgid "`struct g_provider *provider` : The \"provider\" this geom instantiates"
+msgstr ""
+"`struct g_provider *provider`: Instância geom criada a partir do provider "
+"correspondente"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:291
+msgid "`uint16_t n_disks` : Number of consumer this geom consumes"
+msgstr ""
+"`uint16_t n_disks`: Número de consumidores que esta instância geom consome"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:292
+msgid ""
+"`struct g_consumer \\**disks` : Array of `struct g_consumer*`. (It is not "
+"possible to use just single indirection because struct g_consumer* are "
+"created on our behalf by GEOM)."
+msgstr ""
+"`struct g_consumer \\**disks`: Array de `struct g_consumer*`. (Não é "
+"possível usar apenas uma única indireção porque os `struct g_consumer*` são "
+"criados em nosso nome pelo GEOM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:295
+msgid ""
+"The `softc` structure contains all the state of geom instance. Every geom "
+"instance has its own softc."
+msgstr ""
+"A estrutura `softc` contém todo o estado da instância geom. Cada instância "
+"geom tem sua própria estrutura `softc`."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:297
+#, no-wrap
+msgid "Metadata"
+msgstr "Metadados"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:300
+msgid ""
+"Format of metadata is more-or-less class-dependent, but MUST start with:"
+msgstr ""
+"O formato dos metadados é mais ou menos dependente da classe, mas DEVE "
+"começar com:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:302
+msgid "16 byte buffer for null-terminated signature (usually the class name)"
+msgstr ""
+"Buffer de 16 bytes para uma assinatura de terminação nula (geralmente o nome "
+"da classe)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:303
+msgid "uint32 version ID"
+msgstr "ID da versão uint32"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:305
+msgid ""
+"It is assumed that geom classes know how to handle metadata with version "
+"ID's lower than theirs."
+msgstr ""
+"Assume-se que as classes geom sabem como lidar com metadados com ID de "
+"versão menores que os deles."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:307
+msgid ""
+"Metadata is located in the last sector of the provider (and thus must fit in "
+"it)."
+msgstr ""
+"Os metadados estão localizados no último setor do provedor (e, portanto, "
+"devem caber nele)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:309
+msgid ""
+"(All this is implementation-dependent but all existing code works like that, "
+"and it is supported by libraries.)"
+msgstr ""
+"(Tudo isso depende da implementação, mas todo o código existente funciona "
+"assim, e é suportado por bibliotecas.)"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:311
+#, no-wrap
+msgid "Labeling/creating a GEOM"
+msgstr "Rotulando/criando um GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:314
+msgid "The sequence of events is:"
+msgstr "A sequência de eventos é:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:316
+msgid "user calls man:geom[8] utility (or one of its hardlinked friends)"
+msgstr ""
+"O usuário chama o utilitário man:geom[8] (ou um comandos alternativos para o "
+"mesmo utilitário)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:317
+msgid ""
+"the utility figures out which geom class it is supposed to handle and "
+"searches for [.filename]#geom_CLASSNAME.so# library (usually in [.filename]#/"
+"lib/geom#)."
+msgstr ""
+"O utilitário determina qual classe geom ele deve manipular e procura pela "
+"biblioteca [.filename]#geom_CLASSNAME.so# (geralmente em [.filename]#/lib/"
+"geom#)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:318
+msgid ""
+"it man:dlopen[3]-s the library, extracts the definitions of command-line "
+"parameters and helper functions."
+msgstr ""
+"O utilitário utiliza a função man:dlopen[3] para carregar dinamicamente a "
+"biblioteca, extrair as definições dos parâmetros de linha de comando e "
+"funções auxiliares."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:320
+msgid "In the case of creating/labeling a new geom, this is what happens:"
+msgstr "No caso da criação/rotulação de um novo geom, isso é o que acontece:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:322
+msgid ""
+"man:geom[8] looks in the command-line argument for the command (usually "
+"`label`), and calls a helper function."
+msgstr ""
+"O comando man:geom[8] procura na linha de comando pelo comando (geralmente "
+"`label`) e chama uma função auxiliar correspondente."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:323
+msgid ""
+"The helper function checks parameters and gathers metadata, which it "
+"proceeds to write to all concerned providers."
+msgstr ""
+"A função auxiliar verifica parâmetros e reúne metadados, que são gravados em "
+"todos os provedores envolvidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:324
+msgid ""
+"This \"spoils\" existing geoms (if any) and initializes a new round of "
+"\"tasting\" of the providers. The intended geom class recognizes the "
+"metadata and brings the geom up."
+msgstr ""
+"Isso \"anula\" os geoms existentes (se houver) e inicializa uma nova rodada "
+"de \"degustação\" dos providers. A classe geom pretendida reconhece os "
+"metadados e coloca o geom em funcionamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:326
+msgid ""
+"(The above sequence of events is implementation-dependent but all existing "
+"code works like that, and it is supported by libraries.)"
+msgstr ""
+"(A sequência de eventos acima é dependente da implementação, mas todo o "
+"código existente funciona assim, e é suportado pelas bibliotecas.)"
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:328
+#, no-wrap
+msgid "GEOM Command Structure"
+msgstr "Estrutura do Comando GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:332
+msgid ""
+"The helper [.filename]#geom_CLASSNAME.so# library exports `class_commands` "
+"structure, which is an array of `struct g_command` elements. Commands are "
+"of uniform format and look like:"
+msgstr ""
+"A biblioteca auxiliar [.filename]#geom_CLASSNAME.so# exporta a estrutura "
+"`class_commands`, que é um array de elementos `struct g_command`. Os "
+"comandos têm um formato uniforme e se parecem com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/geom-class/_index.adoc:336
+#, no-wrap
+msgid " verb [-options] geomname [other]\n"
+msgstr " verb [-options] geomname [other]\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:339
+msgid "Common verbs are:"
+msgstr "Verbos comuns são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:341
+msgid ""
+"label - to write metadata to devices so they can be recognized at tasting "
+"and brought up in geoms"
+msgstr ""
+"label - para escrever metadados nos dispositivos para que possam ser "
+"reconhecidos durante o processo de \"tasting\" e trazidos à tona em geoms"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:342
+msgid "destroy - to destroy metadata, so the geoms get destroyed"
+msgstr ""
+"destroy - para destruir metadados, fazendo com que os geoms sejam destruídos"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:344
+msgid "Common options are:"
+msgstr "Opções comuns são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:346
+msgid "`-v` : be verbose"
+msgstr "`-v` : ser verboso (mostrar mais informações)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:347
+msgid "`-f` : force"
+msgstr "`-f` : forçar"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:351
+msgid ""
+"Many actions, such as labeling and destroying metadata can be performed in "
+"userland. For this, `struct g_command` provides field `gc_func` that can be "
+"set to a function (in the same [.filename]#.so#) that will be called to "
+"process a verb. If `gc_func` is NULL, the command will be passed to kernel "
+"module, to `.ctlreq` function of the geom class."
+msgstr ""
+"Muitas ações, como rotular e destruir metadados, podem ser executadas no "
+"espaço de usuário. Para isso, `struct g_command` fornece o campo `gc_func`, "
+"que pode ser definido como uma função (no mesmo arquivo [.filename]#.so#) "
+"que será chamada para processar um verbo. Se `gc_func` for NULL, o comando "
+"será passado para o módulo do kernel, para a função `.ctlreq` da classe geom."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:353
+#, no-wrap
+msgid "Geoms"
+msgstr "Geoms"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:357
+msgid ""
+"Geoms are instances of GEOM classes. They have internal data (a softc "
+"structure) and some functions with which they respond to external events."
+msgstr ""
+"Os Geoms são instâncias das classes GEOM. Eles têm dados internos (uma "
+"estrutura softc) e algumas funções com as quais eles respondem a eventos "
+"externos."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:359
+msgid "The event functions are:"
+msgstr "As funções de evento são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:361
+msgid "`.access` : calculates permissions (read/write/exclusive)"
+msgstr "`.access` : calcula as permissões (leitura/escrita/exclusiva)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:362
+msgid "`.dumpconf` : returns XML-formatted information about the geom"
+msgstr ""
+"`.dumpconf` : uma função que retorna informações formatadas em XML sobre o "
+"geom"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:363
+msgid "`.orphan` : called when some underlying provider gets disconnected"
+msgstr "`.orphan` : chamado quando algum provedor subjacente é desconectado"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:364
+msgid "`.spoiled` : called when some underlying provider gets written to"
+msgstr "`.spoiled` : chamado quando algum provedor subjacente é escrito"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:365
+msgid "`.start` : handles I/O"
+msgstr "`.start` : lida com operações de entrada/saída (I/O)"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:367
+msgid ""
+"These functions are called from the `g_down` kernel thread and there can be "
+"no sleeping in this context, (see definition of sleeping elsewhere) which "
+"limits what can be done quite a bit, but forces the handling to be fast."
+msgstr ""
+"Essas funções são chamadas a partir da thread do kernel `g_down` e não é "
+"permitido dormir nesse contexto (consulte a definição de dormir em outro "
+"lugar), o que limita bastante o que pode ser feito, mas força o tratamento a "
+"ser rápido."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:369
+msgid ""
+"Of these, the most important function for doing actual useful work is the `."
+"start`() function, which is called when a BIO request arrives for a provider "
+"managed by a instance of geom class."
+msgstr ""
+"A função mais importante para realizar trabalho útil é a função `.start()`, "
+"que é chamada quando uma solicitação BIO chega para um provider gerenciado "
+"por uma instância de classe geom."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:371
+#, no-wrap
+msgid "GEOM Threads"
+msgstr "Threads GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:374
+msgid "There are three kernel threads created and run by the GEOM framework:"
+msgstr ""
+"Existem três threads de kernel criados e executados pelo framework GEOM:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:376
+msgid ""
+"`g_down` : Handles requests coming from high-level entities (such as a "
+"userland request) on the way to physical devices"
+msgstr ""
+"`g_down` : responsável por lidar com solicitações vindas de entidades de "
+"alto nível (como uma solicitação do espaço do usuário) a caminho de "
+"dispositivos físicos"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:377
+msgid ""
+"`g_up` : Handles responses from device drivers to requests made by higher-"
+"level entities"
+msgstr ""
+"`g_up` : Lida com as respostas dos drivers de dispositivo às solicitações "
+"feitas por entidades de nível superior"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:378
+msgid ""
+"`g_event` : Handles all other cases: creation of geom instances, access "
+"counting, \"spoil\" events, etc."
+msgstr ""
+"`g_event` : lida com todos os outros casos: criação de instâncias de geom, "
+"contagem de acesso, eventos de \"spoil\", etc."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:380
+msgid ""
+"When a user process issues \"read data X at offset Y of a file\" request, "
+"this is what happens:"
+msgstr ""
+"Quando um processo do usuário emite uma solicitação para \"ler dados X no "
+"deslocamento Y de um arquivo\", o seguinte acontece:"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:382
+msgid ""
+"The filesystem converts the request into a struct bio instance and passes it "
+"to the GEOM subsystem. It knows what geom instance should handle it because "
+"filesystems are hosted directly on a geom instance."
+msgstr ""
+"O sistema de arquivos converte o pedido em uma instância struct bio e o "
+"transmite para o subsistema GEOM. Ele sabe o que a instância geom deve "
+"manipular porque os sistemas de arquivos são hospedados diretamente em uma "
+"instância geom."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:383
+msgid ""
+"The request ends up as a call to the `.start`() function made on the g_down "
+"thread and reaches the top-level geom instance."
+msgstr ""
+"A requisição termina como uma chamada para a função `.start`() feita para a "
+"thread g_down e atinge a instância geom de nível superior."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:384
+msgid ""
+"This top-level geom instance (for example the partition slicer) determines "
+"that the request should be routed to a lower-level instance (for example the "
+"disk driver). It makes a copy of the bio request (bio requests _ALWAYS_ need "
+"to be copied between instances, with `g_clone_bio`()!), modifies the data "
+"offset and target provider fields and executes the copy with `g_io_request`()"
+msgstr ""
+"Esta instância geom de nível superior (por exemplo, o \"partition slicer\") "
+"determina que a solicitação deve ser encaminhada para uma instância de nível "
+"inferior (por exemplo, o driver de disco). Ela faz uma cópia da solicitação "
+"bio (solicitações bio PRECISAM SEMPRE ser copiadas entre instâncias, com "
+"`g_clone_bio`()!), modifica o deslocamento dos dados e os campos do provider "
+"de destino e executa a cópia com `g_io_request`()"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:385
+msgid ""
+"The disk driver gets the bio request also as a call to `.start`() on the "
+"`g_down` thread. It talks to hardware, gets the data back, and calls "
+"`g_io_deliver`() on the bio."
+msgstr ""
+"O driver de disco também recebe a requisição bio como uma chamada para `."
+"start`() na thread `g_down`. Ele conversa com o hardware, recebe os dados de "
+"volta e chama `g_io_deliver`() na bio."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:386
+msgid ""
+"Now, the notification of bio completion \"bubbles up\" in the `g_up` thread. "
+"First the partition slicer gets `.done`() called in the `g_up` thread, it "
+"uses information stored in the bio to free the cloned `bio` structure (with "
+"`g_destroy_bio`()) and calls `g_io_deliver`() on the original request."
+msgstr ""
+"Agora, a notificação da conclusão do bio \"sobe\" na thread `g_up`. "
+"Primeiro, o particionador recebe `.done`() chamado na thread `g_up`, usa as "
+"informações armazenadas no bio para liberar a estrutura de `bio` clonada ("
+"com `g_destroy_bio`()) e chama `g_io_deliver`() no pedido original."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:387
+msgid "The filesystem gets the data and transfers it to userland."
+msgstr "O sistema de arquivos obtém os dados e os transfere para o usuário."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:389
+msgid ""
+"See man:g_bio[9] man page for information how the data is passed back and "
+"forth in the `bio` structure (note in particular the `bio_parent` and "
+"`bio_children` fields and how they are handled)."
+msgstr ""
+"Consulte a página do manual man:g_bio[9] para obter informações sobre como "
+"os dados são passados de um lado para o outro na estrutura `bio` (observe em "
+"particular os campos `bio_parent` e `bio_children` e como eles são "
+"manipulados)."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:392
+msgid ""
+"One important feature is: __THERE CAN BE NO SLEEPING IN G_UP AND G_DOWN "
+"THREADS__. This means that none of the following things can be done in "
+"those threads (the list is of course not complete, but only informative):"
+msgstr ""
+"Uma característica importante é que __ NÃO PODEM HAVER CHAMADAS DE FUNÇÃO "
+"QUE BLOQUEIEM O PROCESSO (DURMAM) NAS THREADS G_UP E G_DOWN__. Isso "
+"significa que nenhuma das seguintes coisas pode ser feita nesses threads (a "
+"lista é apenas informativa e não completa):"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:394
+msgid "Calls to `msleep`() and `tsleep`(), obviously."
+msgstr "Chamadas para `msleep`() e `tsleep`(), obviamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:395
+msgid ""
+"Calls to `g_write_data`() and `g_read_data`(), because these sleep between "
+"passing the data to consumers and returning."
+msgstr ""
+"Chamadas para `g_write_data`() e `g_read_data()`, pois elas dormem entre a "
+"passagem dos dados para os consumidores e o retorno."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:396
+msgid "Waiting for I/O."
+msgstr "Aguardando I/O."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:397
+msgid "Calls to man:malloc[9] and `uma_zalloc`() with `M_WAITOK` flag set"
+msgstr ""
+"Chamadas a man:malloc[9] e `uma_zalloc`() com a flag `M_WAITOK` definida"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:398
+msgid "sx and other sleepable locks"
+msgstr "sx e outros tipos de bloqueios sleepable"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:402
+msgid ""
+"This restriction is here to stop GEOM code clogging the I/O request path, "
+"since sleeping is usually not time-bound and there can be no guarantees on "
+"how long will it take (there are some other, more technical reasons also). "
+"It also means that there is not much that can be done in those threads; for "
+"example, almost any complex thing requires memory allocation. Fortunately, "
+"there is a way out: creating additional kernel threads."
+msgstr ""
+"Essa restrição foi imposta para evitar que o código GEOM obstrua o caminho "
+"de solicitação de E/S, já que a espera geralmente não está relacionada ao "
+"tempo e não há garantias sobre quanto tempo levará (há outras razões "
+"técnicas também). Isso também significa que não há muito o que se possa "
+"fazer nessas threads; por exemplo, quase qualquer coisa complexa requer "
+"alocação de memória. Felizmente, há uma saída: criar threads adicionais do "
+"kernel."
+
+#. type: Title ===
+#: documentation/content/en/articles/geom-class/_index.adoc:404
+#, no-wrap
+msgid "Kernel Threads for Use in GEOM Code"
+msgstr "Threads de kernel para uso no código GEOM"
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:407
+msgid ""
+"Kernel threads are created with man:kthread_create[9] function, and they are "
+"sort of similar to userland threads in behavior, only they cannot return to "
+"caller to signify termination, but must call man:kthread_exit[9]."
+msgstr ""
+"Threads do Kernel são criados com a função man:kthread_create[9], e eles são "
+"parecidos com threads de espaço de usuário em termos de comportamento, "
+"apenas que não podem retornar ao chamador para indicar término, mas devem "
+"chamar man:kthread_exit[9]."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:410
+msgid ""
+"In GEOM code, the usual use of threads is to offload processing of requests "
+"from `g_down` thread (the `.start`() function). These threads look like "
+"\"event handlers\": they have a linked list of event associated with them "
+"(on which events can be posted by various functions in various threads so it "
+"must be protected by a mutex), take the events from the list one by one and "
+"process them in a big `switch`() statement."
+msgstr ""
+"No código do GEOM, o uso usual de threads é para descarregar o processamento "
+"de solicitações da thread `g_down` (a função `.start()`). Essas threads se "
+"parecem com \"manipuladores de eventos\": elas têm uma lista vinculada de "
+"eventos associados a elas (na qual eventos podem ser postados por várias "
+"funções em várias threads, então ela deve ser protegida por um mutex), pegam "
+"os eventos da lista um por um e os processam em uma grande declaração "
+"`switch()`."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:415
+msgid ""
+"The main benefit of using a thread to handle I/O requests is that it can "
+"sleep when needed. Now, this sounds good, but should be carefully thought "
+"out. Sleeping is well and very convenient but can very effectively destroy "
+"performance of the geom transformation. Extremely performance-sensitive "
+"classes probably should do all the work in `.start`() function call, taking "
+"great care to handle out-of-memory and similar errors."
+msgstr ""
+"O principal benefício de usar uma thread para lidar com as solicitações de E/"
+"S é que ela pode dormir quando necessário. Agora, isso parece bom, mas deve "
+"ser cuidadosamente pensado. Dormir é bem conveniente, mas pode destruir "
+"efetivamente o desempenho da transformação geom. As classes extremamente "
+"sensíveis ao desempenho provavelmente devem fazer todo o trabalho na chamada "
+"de função `.start()`, tendo muito cuidado para lidar com erros de falta de "
+"memória e similares."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:419
+msgid ""
+"The other benefit of having a event-handler thread like that is to serialize "
+"all the requests and responses coming from different geom threads into one "
+"thread. This is also very convenient but can be slow. In most cases, "
+"handling of `.done`() requests can be left to the `g_up` thread."
+msgstr ""
+"O outro benefício de ter uma thread de tratamento de eventos é a "
+"serialização de todas as solicitações e respostas vindas de diferentes "
+"threads do geom em uma única thread. Isso também é muito conveniente, mas "
+"pode ser lento. Na maioria dos casos, o tratamento de solicitações `.done`() "
+"pode ser deixado para a thread `g_up`."
+
+#. type: Plain text
+#: documentation/content/en/articles/geom-class/_index.adoc:422
+msgid ""
+"Mutexes in FreeBSD kernel (see man:mutex[9]) have one distinction from their "
+"more common userland cousins - the code cannot sleep while holding a "
+"mutex). If the code needs to sleep a lot, man:sx[9] locks may be more "
+"appropriate. On the other hand, if you do almost everything in a single "
+"thread, you may get away with no mutexes at all."
+msgstr ""
+"Mutexes no kernel do FreeBSD (veja man:mutex[9]) possuem uma distinção em "
+"relação às suas contrapartes mais comuns no userland - o código não pode "
+"dormir enquanto segura um mutex. Se o código precisa dormir muito, as travas "
+"man:sx[9] podem ser mais apropriadas. Por outro lado, se você fizer quase "
+"tudo em um único thread, pode se livrar completamente do uso de mutexes."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/gjournal-desktop/_index.adoc b/documentation/content/pt-br/articles/gjournal-desktop/_index.adoc
index 3e5fcec4b3..0b1b33e660 100644
--- a/documentation/content/pt-br/articles/gjournal-desktop/_index.adoc
+++ b/documentation/content/pt-br/articles/gjournal-desktop/_index.adoc
@@ -1,9 +1,11 @@
---
-title: Implementando o UFS Journaling em um Desktop PC
authors:
- - author: Manolis Kiagias
+ -
+ author: 'Manolis Kiagias'
email: manolis@FreeBSD.org
-releaseinfo: "$FreeBSD$"
+description: 'Implementando o UFS Journaling em um Desktop PC'
+tags: ["UFS", "Journaling" , "Desktop", "FreeBSD"]
+title: 'Implementando o UFS Journaling em um Desktop PC'
trademarks: ["freebsd", "general"]
---
@@ -16,32 +18,32 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/articles/gjournal-desktop/
+:images-path: articles/gjournal-desktop/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/articles/gjournal-desktop/
endif::[]
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/articles/gjournal-desktop/
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
Resumo
-Um sistema de arquivos com journaling usa um log para registrar todas as transações que ocorrem no sistema de arquivos e preserva sua integridade em caso de falha do sistema ou falta de energia. Embora ainda seja possível perder as alterações não salvas nos arquivos, o journaling elimina quase completamente a possibilidade de corrupção do sistema de arquivos causada por um desligamento abrupto. Ele também reduz ao mínimo o tempo necessário para a verificação do sistema de arquivos após a falha. Embora o sistema de arquivos UFS empregado pelo FreeBSD não implemente o journaling em si, a nova classe de journal do framework GEOM no FreeBSD 7._X_ pode ser usada para fornecer journaling independente do sistema de arquivos. Este artigo explica como implementar o UFS journaling em um cenário típico de PC de mesa.
+Um sistema de arquivos com journaling utiliza um log para registrar todas as transações que ocorrem no sistema de arquivos e preserva sua integridade em caso de falha do sistema ou queda de energia. Embora ainda seja possível perder alterações não salvas em arquivos, o journaling quase elimina completamente a possibilidade de corrupção do sistema de arquivos causada por uma desligamento incorreto. Ele também reduz ao mínimo o tempo necessário para a verificação do sistema de arquivos após uma falha. Embora o sistema de arquivos UFS utilizado pelo FreeBSD não implemente o journaling por si só, a nova classe de journaling do framework GEOM no FreeBSD 7._X_ pode ser usada para fornecer o journaling independente do sistema de arquivos. Este artigo explica como implementar o journaling do UFS em um cenário típico de um PC desktop.
'''
@@ -50,91 +52,91 @@ toc::[]
[[introduction]]
== Introdução
-Embora os servidores profissionais estejam geralmente bem protegidos contra desligamentos imprevistos, um desktop típico fica à mercê de falhas de energia, reinicializações acidentais e outros incidentes relacionados ao usuário que podem levar a paradas abruptas. Os soft updates costumam proteger o sistema de arquivos de maneira eficiente nestes casos, embora na maioria das vezes seja necessária uma longa verificação em background. Em raras ocasiões, a corrupção do sistema de arquivos atinge um ponto em que a intervenção do usuário é necessária e os dados podem ser perdidos.
+Enquanto servidores profissionais geralmente estão bem protegidos contra desligamentos imprevistos, os desktops típicos estão sujeitos a quedas de energia, reinicializações acidentais e outros incidentes relacionados ao usuário que podem levar a desligamentos incorretos. As Soft Updates geralmente protegem o sistema de arquivos de forma eficiente nesses casos, embora na maioria das vezes seja necessária uma verificação em segundo plano demorada. Em raras ocasiões, a corrupção do sistema de arquivos atinge um ponto em que é necessária a intervenção do usuário e dados podem ser perdidos.
O novo recurso de journaling fornecido pela GEOM pode ajudar bastante nesses cenários, praticamente eliminando o tempo necessário para a verificação do sistema de arquivos e garantindo que o sistema de arquivos seja rapidamente restaurado para um estado consistente.
-Este artigo descreve um procedimento para implementar o journaling do UFS em um cenário típico de PC de mesa (um único disco rígido usado para o sistema operacional e para os dados). Deve ser seguido durante uma nova instalação do FreeBSD. As etapas são simples o suficiente e não requerem interação excessivamente complexa com a linha de comando.
+Este artigo descreve um procedimento para implementar o journaling do UFS em um cenário típico de um PC desktop (um disco rígido usado tanto para o sistema operacional quanto para os dados). Ele deve ser seguido durante uma nova instalação do FreeBSD. Os passos são simples o suficiente e não exigem interações excessivamente complexas com a linha de comando.
Depois de ler este artigo, você saberá:
* Como reservar espaço para o journaling durante uma nova instalação do FreeBSD.
-* Como carregar e ativar o módulo `geom_journal` (ou como compilar o suporte para ele em seu kernel customizado).
-* Como converter seus sistemas de arquivos existentes para utilizar o journaling e quais opções usar em [.filename]#/etc/fstab# para montá-los.
+* Como carregar e ativar o módulo `geom_journal` (ou compilar o suporte para ele em seu kernel personalizado).
+* Como converter seus sistemas de arquivos existentes para utilizar journaling e quais opções usar no arquivo [.filename]#/etc/fstab# para montá-los.
* Como implementar o journaling em novas partições (vazias).
* Como solucionar problemas comuns associados ao journaling.
Antes de ler este artigo, você deve ser capaz de:
* Entender os conceitos básicos do UNIX(R) e do FreeBSD.
-* Estar familiarizado com o procedimento de instalação do FreeBSD e com o utilitário sysinstall.
+* Estar familiarizado com o procedimento de instalação do FreeBSD e com a ferramenta sysinstall.
[WARNING]
====
-O procedimento descrito aqui é destinado a preparar uma nova instalação na qual ainda não temos nenhum dado real do usuário é armazenado no disco. Embora seja possível modificar e estender este procedimento para sistemas já em produção, você deve efetuar o _backup_ de todos os dados importantes antes de fazer isso. Mexer com discos e partições em um baixo nível pode levar a erros fatais e a perda de dados.
+A procedimento descrito aqui destina-se a preparar uma nova instalação na qual ainda não existe nenhum dado do usuário armazenado no disco. Embora seja possível modificar e estender este procedimento para sistemas já em produção, você deve fazer um _backup_ de todos os dados importantes antes de fazê-lo. Mexer com discos e partições em um nível baixo pode levar a erros fatais e a perda de dados.
====
[[understanding-journaling]]
== Compreendendo o journaling no FreeBSD
-O journaling fornecido pelo GEOM no FreeBSD 7._X_ não é específico do sistema de arquivos (diferentemente do sistema de arquivos ext3 no Linux(R)), funcionando a nível de bloco. Embora isso signifique que ele possa ser aplicado a sistemas de arquivos diferentes, no FreeBSD 7.0-RELEASE, ele só pode ser usado com o UFS2.
+O journaling fornecido pelo GEOM no FreeBSD 7._X_ não é específico do sistema de arquivos (ao contrário do sistema de arquivos ext3 no Linux(R)), mas funciona no nível de bloco. Embora isso signifique que ele possa ser aplicado a diferentes sistemas de arquivos, no FreeBSD 7.0-RELEASE, ele só pode ser usado no UFS2.
-Esta funcionalidade é fornecida pelo carregamento do módulo [.filename]#geom_journal.ko# no kernel (ou através da compilação de um kernel personalizado) e pelo uso do comando `gjournal` para configurar os sistemas de arquivos. Em geral, você gostaria de utilizar o journal em grandes sistemas de arquivos, como o [.filename]#/usr#. Você precisará no entanto (veja a seção seguinte) reservar algum espaço livre em disco para isso.
+Essa funcionalidade é fornecida carregando o módulo [.filename]#geom_journal.ko# no kernel (ou compilando-o em um kernel personalizado) e usando o comando `gjournal` para configurar os sistemas de arquivos. Em geral, você gostaria de registrar grandes sistemas de arquivos, como o [.filename]#/usr#. No entanto, você precisará reservar algum espaço livre em disco (consulte a próxima seção).
-Quando um sistema de arquivos é "journaled", é necessário algum espaço em disco para manter o próprio journal. O espaço em disco que contém os dados reais é chamado de __data provider__, enquanto o que contém o journal é chamado de __journal provider__. Os provedores de dados e de journal precisam estar em partições diferentes ao fazer o journaling de uma partição existente (não vazia). Ao fazer o journaling de uma nova partição, você tem a opção de usar um único provedor para os dados e o journal. Em todo caso, o comando `gjournal` combina os dois provedores para criar o sistema de arquivos journaled final. Por exemplo:
+Quando um sistema de arquivos é jornalizado, é necessário um espaço em disco para armazenar o próprio journal. O espaço em disco que contém os dados reais é chamado de __provedor de dados__ (data provider), enquanto o que contém o journal é chamado de __provedor de journal__ (journal provider). Os provedores de dados e de journal precisam estar em partições diferentes ao jornalizar uma partição existente (não vazia). Ao jornalizar uma nova partição, você tem a opção de usar um único provedor para ambos os dados e o journal. Em qualquer caso, o comando `gjournal` combina ambos os provedores para criar o sistema de arquivos final com journaling. Por exemplo:
-* Você deseja fazer o journaling do seu sistema de arquivos [.filename]#/usr#, armazenado em [.filename]#/dev/ad0s1f# (que já contém dados).
-* Você reservou algum espaço livre no disco, na partição [.filename]#/dev/ad0s1g#.
-* Usando o comando `gjournal`, um novo dispositivo [.filename]#/dev/ad0s1f.journal# é criado no qual o [.filename]#/dev/ad0s1f# é o data provider, e o [.filename]#/dev/ad0s1g# é o journal provider. Este novo dispositivo é então usado para todas as operações de arquivo posteriores.
+* Você deseja fazer o journaling do sistema de arquivos [.filename]#/usr#, armazenado em [.filename]#/dev/ad0s1f# (que já contém dados).
+* Você reservou um espaço livre em disco em uma partição em [/dev/ad0s1g].
+* Usando `gjournal`, um novo dispositivo [.filename]#/dev/ad0s1f.journal# é criado, onde [.filename]#/dev/ad0s1f# é o provedor de dados e [.filename]#/dev/ad0s1g# é o provedor de journal. Esse novo dispositivo é então usado para todas as operações de arquivo subsequentes.
-A quantidade de espaço em disco que você precisa reservar para o journal provider depende da carga de uso do sistema de arquivos e não do tamanho do data provider. Por exemplo, em um desktop típico de escritório, um journal provider de 1 GB para o sistema de arquivos [.filename]#/usr# será suficiente, enquanto uma máquina que lida com I/O de disco pesado (por exemplo, edição de vídeo) pode precisar de mais. Um kernel panic ocorrerá se o espaço do journal estiver esgotado antes de ter a chance de ser committed.
+A quantidade de espaço em disco que você precisa reservar para o provedor de journal depende da carga de uso do sistema de arquivos e não do tamanho do provedor de dados. Por exemplo, em um desktop de escritório típico, um provedor de journal de 1 GB para o sistema de arquivos [.filename]#/usr# será suficiente, enquanto uma máquina que lida com intensas operações E/S de disco (por exemplo, edição de vídeo) pode precisar de mais espaço. Ocorrerá um kernel panic se o espaço do journal for esgotado antes que ele tenha a chance de ser confirmado (committed).
[NOTE]
====
-É improvável que os tamanhos de journal sugeridos aqui causem problemas no uso típico de um desktop (como navegação na Web, processamento de texto e reprodução de arquivos de mídia). Se sua carga de trabalho incluir intensa atividade de disco, use a regra a seguir para obter a confiabilidade máxima: o tamanho da RAM deve caber em 30% do espaço do journal provider. Por exemplo, se o seu sistema tiver 1 GB de RAM, crie um journal provider de aproximadamente 3,3 GB. (Multiplique o tamanho total da sua RAM por 3.3 para obter o tamanho do journal).
+Os tamanhos de journal sugeridos aqui são altamente improváveis de causar problemas em uso típico de desktop, como navegação na web, processamento de texto e reprodução de arquivos de mídia. Se a sua carga de trabalho inclui atividade intensa de disco, utilize a seguinte regra para obter máxima confiabilidade: o tamanho da sua memória RAM deve caber em 30% do espaço do provedor de journal. Por exemplo, se o seu sistema possui 1 GB de RAM, crie um provedor de journal de aproximadamente 3,3 GB (multiplique o tamanho da sua RAM por 3,3 para obter o tamanho do journal).
====
-Para mais informações sobre journaling, leia a página de manual do man:gjournal[8].
+Para obter mais informações sobre o journaling, por favor, leia a página do manual man:gjournal[8].
[[reserve-space]]
== Etapas durante a instalação do FreeBSD
=== Reservando espaço para o journaling
-Normalmente, um desktop típico tem um disco rígido que armazena o sistema operacional e os dados do usuário. Indiscutivelmente, o esquema de particionamento padrão selecionado pelo sysinstall é mais ou menos adequado: Um desktop não precisa de uma grande partição [.filename]#/var#, enquanto o [.filename]#/usr# é alocado com a maior parte do espaço em disco, já que os dados do usuário e muitos pacotes são instalados em seus subdiretórios.
+Uma máquina desktop típica geralmente possui um único disco rígido que armazena tanto o sistema operacional quanto os dados do usuário. Argumentavelmente, o esquema de particionamento padrão selecionado pelo sysinstall é mais ou menos adequado: uma máquina desktop não precisa de uma partição [.filename]#/var# grande, enquanto a partição [.filename]#/usr# é alocada para a maior parte do espaço em disco, uma vez que os dados do usuário e muitos pacotes são instalados em seus subdiretórios.
-O particionamento padrão (aquele obtido pressionando kbd:[A] no editor de partições do FreeBSD, chamado Disklabel) não deixa nenhum espaço não alocado. Cada partição que será journaled, requer outra partição para journal. Como a partição [.filename]#/usr# é a maior, faz sentido reduzir ligeiramente essa partição, para obter o espaço necessário para o journaling.
+A partição padrão (aquela obtida ao pressionar kbd:[A] no editor de partição do FreeBSD, chamado Disklabel) não deixa nenhum espaço não alocado. Cada partição que será jornalizada requer outra partição para o journal. Como a partição [.filename]#/usr# é a maior, faz sentido reduzir levemente essa partição para obter o espaço necessário para o journaling.
-No nosso exemplo, um disco de 80 GB é usado. A captura de tela a seguir mostra as partições padrões criadas por Disklabel durante a instalação:
+No nosso exemplo, um disco de 80 GB está sendo utilizado. A captura de tela a seguir mostra as partições padrões criadas pelo Disklabel durante a instalação:
image::disklabel1.png[]
-Se isso é mais ou menos o que você precisa, é muito fácil se ajustar ao journaling. Simplesmente use as teclas de seta para mover o realce para a partição [.filename]#/usr# e pressione kbd:[D] para excluí-la.
+Se isso é mais ou menos o que você precisa, é muito fácil ajustar para o journaling. Basta usar as teclas de seta para mover o destaque para a partição [.filename]#/usr# e pressionar kbd:[D] para excluí-la.
-Agora, mova o realce para o nome do disco na parte superior da tela e pressione kbd:[C] para criar uma nova partição para [.filename]#/usr#. Esta nova partição deve ser menor em 1 GB (se você pretende registrar apenas [.filename]#/usr#), ou 2 GB (se você pretende registrar ambos [.filename]#/usr# e [.filename]#/var#). No pop-up exibido, opte por criar um sistema de arquivos e digite [.filename]#/usr# como o ponto de montagem.
+Agora, mova o destaque para o nome do disco no topo da tela e pressione kbd:[C] para criar uma nova partição para [.filename]#/usr#. Essa nova partição deve ser menor em 1 GB (se você pretende jornalizar apenas [.filename]#/usr#) ou 2 GB (se você pretende jornalizar tanto [.filename]#/usr# quanto [.filename]#/var#). No pop-up que aparece, opte por criar um sistema de arquivos e digite [.filename]#/usr# como ponto de montagem.
[NOTE]
====
-Você deve fazer o journal da partição [.filename]#/var#? Normalmente, o journaling faz sentido em partições grandes. Você pode decidir não fazer o journal do [.filename]#/var#, embora fazê-lo em um desktop típico não cause nenhum dano. Se o sistema de arquivos é usado levemente (bastante provável para um desktop) você pode querer alocar menos espaço em disco para o seu journal.
+Você deve jornalizar a partição [.filename]#/var#? Normalmente, o journaling faz sentido em partições bastante grandes. Você pode optar por não jornalizar [.filename]#/var#, embora fazê-lo em um desktop típico não cause problemas. Se o sistema de arquivos tiver um uso leve (o que é bastante provável para um desktop), você pode desejar alocar menos espaço em disco para o seu journal.
-Em nosso exemplo, nós fizemos o journal em ambos [.filename]#/usr# e [.filename]#/var#. Você pode, naturalmente, ajustar o procedimento às suas próprias necessidades.
+No nosso exemplo, nós aplicamos o journaling nas partições [.filename]#/usr# e [.filename]#/var#. Você pode, é claro, ajustar o procedimento de acordo com suas próprias necessidades.
====
-Para manter as coisas o mais fáceis o possível, vamos usar o sysinstall para criar as partições necessárias para o journaling. No entanto, durante a instalação, o sysinstall insiste em pedir um ponto de montagem para cada partição criada. Neste ponto, você não tem nenhum ponto de montagem para as partições que irão manter os journals, e na realidade você __nem precisa deles__. Estas não são partições que iremos montar em algum lugar.
+Para facilitar o processo o máximo possível, vamos usar o sysinstall para criar as partições necessárias para o journaling. No entanto, durante a instalação, o sysinstall insiste em solicitar um ponto de montagem para cada partição que você cria. Neste momento, você não possui nenhum ponto de montagem para as partições que irão armazenar os journals e, na realidade, você nem mesmo precisa deles. Essas não são partições que serão montadas em algum lugar.
-Para evitar esses problemas com o sysinstall, vamos criar as partições de journal como espaço de troca. O swap nunca é montado, e o sysinstall não tem problemas para criar tantas partições de troca quantas forem necessárias. Após a primeira reinicialização, o [.filename]#/etc/fstab# terá que ser editado, e as entradas extras do espaço de troca serão removidas.
+Para evitar esses problemas com o sysinstall, vamos criar as partições de journal como espaço de swap. O swap nunca é montado, e o sysinstall não tem problemas em criar quantas partições de swap forem necessárias. Após o primeiro reinício, será necessário editar o arquivo [.filename]#/etc/fstab# e remover as entradas de espaço de swap adicionais.
-Para criar o swap, use novamente as teclas de seta para mover o realce para a parte superior da tela do Disklabel, para que o nome do disco seja realçado. Em seguida, pressione kbd:[N], insira o tamanho desejado (_1024M_) e selecione "swap space" no menu pop-up exibido. Repita para cada journal que você deseja criar. Em nosso exemplo, criamos duas partições para fornecer os diários de [.filename]#/usr# e [.filename]#/var#. O resultado final é mostrado na seguinte captura de tela:
+Para criar a partição de swap, novamente use as teclas de seta para mover o destaque para o topo da tela do Disklabel, de modo que o próprio nome do disco seja destacado. Em seguida, pressione kbd:[N], insira o tamanho desejado (_1024M_) e selecione "swap space" no menu pop-up que aparece. Repita esse processo para cada journal que você deseja criar. No nosso exemplo, criaremos duas partições para fornecer os journals de [.filename]#/usr# e [.filename]#/var#. O resultado final é mostrado na captura de tela a seguir:
image::disklabel2.png[]
-Quando tiver concluído a criação das partições, sugerimos que você anote os nomes das partições e os pontos de montagem, para que possa consultar facilmente essas informações durante a fase de configuração. Isso ajudará a reduzir os erros que podem danificar sua instalação. A tabela a seguir mostra nossas anotações para a configuração de exemplo:
+Quando você tiver concluído a criação das partições, sugerimos que anote os nomes das partições e os pontos de montagem para que você possa se referir facilmente a essas informações durante a fase de configuração. Isso ajudará a evitar erros que possam danificar sua instalação. A tabela a seguir mostra nossas anotações para a configuração de exemplo:
.Partições e Journals
[cols="1,1,1", options="header"]
|===
-| Partições
-| Ponto de montagem
+| Partição
+| Ponto de Montagem
| Journal
|ad0s1d
@@ -146,12 +148,12 @@ Quando tiver concluído a criação das partições, sugerimos que você anote o
|ad0s1g
|===
-Continue a instalação como faria normalmente. No entanto, sugerimos que você adie a instalação de softwares de terceiros (pacotes) até que você configure completamente o journaling.
+Continue a instalação como você normalmente faria. No entanto, sugerimos que você adie a instalação de softwares de terceiros (pacotes) até ter configurado completamente o journaling.
[[first-boot]]
=== Inicializando pela primeira vez
-Seu sistema irá iniciar normalmente, mas você precisará editar o [.filename]#/etc/fstab# para remover as partições extras de swap que você criou para os journals. Normalmente, a partição swap que você irá usar é aquela com o sufixo "b" (por exemplo, ad0s1b no nosso exemplo). Remova todas as outras entradas de espaço swap e reinicialize para que o FreeBSD pare de usá-las.
+Seu sistema inicializará normalmente, mas você precisará editar o arquivo [.filename]#/etc/fstab# e remover as partições de swap extras que você criou para os journals. Normalmente, a partição de swap que você realmente usará é aquela com o sufixo "b" (por exemplo, ad0s1b em nosso exemplo). Remova todas as outras entradas de espaço de swap e reinicie para que o FreeBSD deixe de usá-las.
Quando o sistema voltar a funcionar, estaremos prontos para configurar o journaling.
@@ -159,32 +161,32 @@ Quando o sistema voltar a funcionar, estaremos prontos para configurar o journal
== Configurando o journaling
[[running-gjournal]]
-=== Executando o `gjournal`
+=== Executando o comando `gjournal`
-Tendo preparado todas as partições requeridas, é bastante fácil configurar o journaling. Nós precisaremos mudar para o modo de single user, então entre como `root` e digite:
+Depois de preparar todas as partições necessárias, é bastante fácil configurar o journaling. Será necessário mudar para o modo de usuário único (single user mode). Para isso, faça o login como `root` e digite o seguinte comando:
-[source,shell]
+[source, shell]
....
# shutdown now
....
-Pressione kbd:[Enter] para obter o shell padrão. Nós precisaremos desmontar as partições que serão registradas no diário, no nosso exemplo [.filename]#/usr# e [.filename]#/var#:
+Pressione kbd:[Enter] para obter o shell padrão. Agora, você precisará desmontar as partições que serão jornalizadas, no nosso exemplo [.filename]#/usr# e [.filename]#/var#:
-[source,shell]
+[source, shell]
....
# umount /usr /var
....
Carregue o módulo necessário para o journaling:
-[source,shell]
+[source, shell]
....
# gjournal load
....
-Agora, use suas anotações para determinar qual partição será usada para cada diário. Em nosso exemplo, [.filename]#/usr# é [.filename]#ad0s1f# e seu journal será [.filename]#ad0s1g#, enquanto [.filename]#/var# é [.filename]#ad0s1d# e será journaled para [.filename]#ad0s1h#. Os seguintes comandos são necessários:
+Agora, use suas anotações para determinar qual partição será usada para cada journal. No nosso exemplo, [.filename]#/usr# é [.filename]#ad0s1f# e seu journal será [.filename]#ad0s1g#, enquanto [.filename]#/var# é [.filename]#ad0s1d# e será jornalizada em [.filename]#ad0s1h#. Os seguintes comandos são necessários:
-[source,shell]
+[source, shell]
....
# gjournal label ad0s1f ad0s1g
GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.
@@ -197,9 +199,9 @@ GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
[NOTE]
====
-Se o último setor de qualquer partição for usado, o `gjournal` retornará um erro. Você terá que executar o comando usando o sinalizador `-f` para forçar uma substituição, ou seja:
+Se o último setor de qualquer uma das partições estiver em uso, o `gjournal` retornará um erro. Nesse caso, você precisará executar o comando usando a opção `-f` para forçar a sobrescrita. Por exemplo:
-[source,shell]
+[source, shell]
....
# gjournal label -f ad0s1d ad0s1h
....
@@ -207,9 +209,9 @@ Se o último setor de qualquer partição for usado, o `gjournal` retornará um
Como esta é uma nova instalação, é altamente improvável que qualquer coisa seja realmente sobrescrita.
====
-Neste ponto, dois novos dispositivos são criados, a saber [.filename]#ad0s1d.journal# e [.filename]#ad0s1f.journal#. Os quais representam as partições [.filename]#/var# e [.filename]#/usr# que temos que montar. Antes de montar, devemos definir o flag de Journal e limpar o flag de Soft Updates:
+Neste ponto, dois novos dispositivos são criados, chamados [.filename]#ad0s1d.journal# e [.filename]#ad0s1f.journal#. Eles representam as partições [.filename]#/var# e [.filename]#/usr# que devemos montar. No entanto, antes de montá-los, precisamos definir a flag de journaling neles e desativar a flag de Soft Updates:
-[source,shell]
+[source, shell]
....
# tunefs -J enable -n disable ad0s1d.journal
tunefs: gjournal set
@@ -220,15 +222,15 @@ tunefs: gjournal set
tunefs: soft updates cleared
....
-Agora, monte os novos dispositivos manualmente em seus respectivos locais (note que agora podemos usar a opção de montagem `async`):
+Agora, monte manualmente os novos dispositivos em seus respectivos locais (observe que agora podemos usar a opção de montagem `async`):
-[source,shell]
+[source, shell]
....
# mount -o async /dev/ad0s1d.journal /var
# mount -o async /dev/ad0s1f.journal /usr
....
-Edite o [.filename]#/etc/fstab# e atualize as entradas para [.filename]#/usr# e [.filename]#/var#:
+Edite o arquivo [.filename]#/etc/fstab# e atualize as entradas para [.filename]#/usr# e [.filename]#/var#:
[.programlisting]
....
@@ -241,16 +243,16 @@ Edite o [.filename]#/etc/fstab# e atualize as entradas para [.filename]#/usr# e
Certifique-se de que as entradas acima estão corretas ou você terá problemas para inicializar normalmente após o reboot!
====
-Finalmente, edite o [.filename]#/boot/loader.conf# e adicione a seguinte linha para que o módulo man:gjournal[8] seja carregado em cada boot:
+Por fim, edite o arquivo [.filename]#/boot/loader.conf# e adicione a seguinte linha para carregar o módulo man:gjournal[8] em cada inicialização do sistema:
[.programlisting]
....
geom_journal_load="YES"
....
-Parabéns! Seu sistema está agora configurado para journaling. Você pode digitar `exit` para retornar ao modo multiusuário ou reinicializar para testar sua configuração (recomendado). Durante a inicialização, você verá mensagens como as seguintes:
+Parabéns! Seu sistema está agora configurado para o journaling. Você pode digitar `exit` para retornar ao modo multiusuário ou reiniciar para testar sua configuração (recomendado). Durante a inicialização, você verá mensagens como as seguintes:
-[source,shell]
+[source, shell]
....
ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
@@ -263,35 +265,35 @@ GEOM_JOURNAL: Journal ad0s1f clean.
Após um encerramento não limpo, as mensagens variam ligeiramente, ou seja:
-[source,shell]
+[source, shell]
....
GEOM_JOURNAL: Journal ad0s1d consistent.
....
-Isso geralmente significa que o man:gjournal[8] usou as informações no journal provider para retornar o sistema de arquivos a um estado consistente.
+Isso geralmente significa que o man:gjournal[8] utilizou as informações no journal provider para restaurar o sistema de arquivos a um estado consistente.
[[gjournal-new]]
=== Fazendo journaling de partições recém-criadas
-Embora o procedimento acima seja necessário para partições que fazem uso de journaling e que já contêm dados, o journaling de uma partição vazia é um pouco mais fácil, uma vez que os dados e o journal provider podem ser armazenados na mesma partição. Por exemplo, suponha que um novo disco tenha sido instalado e uma nova partição [.filename]#/dev/ad1s1d# tenha sido criada. Criar o journal seria tão simples quanto:
+Enquanto o procedimento acima é necessário para jornalizar partições que já contêm dados, jornalizar uma partição vazia é um pouco mais fácil, pois tanto o provedor de dados quanto o provedor de journal podem ser armazenados na mesma partição. Por exemplo, suponha que um novo disco tenha sido instalado e uma nova partição [.filename]#/dev/ad1s1d# tenha sido criada. Criar o journal seria tão simples quanto:
-[source,shell]
+[source, shell]
....
# gjournal label ad1s1d
....
-O tamanho do journal será 1 GB por padrão. Você pode ajustá-lo usando a opção `-s`. O valor pode ser dado em bytes, ou acrescentado por `K`, `M` ou `G` para indicar Kilobytes, Megabytes ou Gigabytes, respectivamente. Note que o comando `gjournal` não permitirá que você crie journals de tamanhos pequenos e inadequados.
+O tamanho do journal será de 1 GB por padrão. Você pode ajustá-lo usando a opção `-s`. O valor pode ser dado em bytes, ou pode ser seguido por `K`, `M` ou `G` para representar Kilobytes, Megabytes ou Gigabytes, respectivamente. Note que o `gjournal` não permitirá que você crie tamanhos de journal excessivamente pequenos e inadequados.
Por exemplo, para criar um journal de 2 GB, você poderia usar o seguinte comando:
-[source,shell]
+[source, shell]
....
# gjournal label -s 2G ad1s1d
....
-Você pode criar um sistema de arquivos em sua nova partição e ativar o journaling usando a opção `-J`:
+Em seguida, você pode criar um sistema de arquivos na sua nova partição e habilitar o journaling usando a opção `-J`:
-[source,shell]
+[source, shell]
....
# newfs -J /dev/ad1s1d.journal
....
@@ -299,17 +301,18 @@ Você pode criar um sistema de arquivos em sua nova partição e ativar o journa
[[configure-kernel]]
=== Adicionando suporte ao journaling no seu kernel personalizado
-Se você não deseja carregar o `geom_journal` como um módulo, você pode construir suas funções diretamente em seu kernel. Edite seu arquivo de configuração do kernel personalizado e verifique se ele inclui estas duas linhas:
+Se você não deseja carregar `geom_journal` como um módulo, você pode incorporar suas funções diretamente no seu kernel. Edite o arquivo de configuração do seu kernel personalizado e verifique se ele inclui as seguintes linhas:
[.programlisting]
....
options UFS_GJOURNAL # Note: This is already in GENERIC
+
options GEOM_JOURNAL # You will have to add this one
....
-Recompile e reinstale seu kernel seguindo as instruções link:{handbook}#kernelconfig[relevantes no Handbook do FreeBSD].
+Recompile e reinstale o seu kernel seguindo as instruções relevantes no Handbook do FreeBSD
-Não se esqueça de remover a entrada relevante "load" do [.filename]#/boot/loader.conf# se você a usou anteriormente.
+Não se esqueça de remover a entrada relevante de "load" do arquivo [.filename]#/boot/loader.conf# se você a tiver usado anteriormente.
[[troubleshooting-gjournal]]
== Solução de problemas com journaling
@@ -318,22 +321,23 @@ A seção a seguir aborda as perguntas mais frequentes relacionadas a problemas
=== Estou recebendo um kernel panic durante períodos de alta atividade de disco. Como isso está relacionado ao journaling?
-O journal provavelmente se enche antes que ele tenha a chance de ser enviado (descarregado) para o disco. Lembre-se de que o tamanho do journal depende da carga de uso e não do tamanho do provedor de dados. Se a atividade do disco for alta, você precisará de uma partição maior para o journal. Veja a nota na seção <<understanding-journaling>>.
+O journal provavelmente fica cheio antes de ter a chance de ser confirmado (gravado) no disco. Lembre-se de que o tamanho do journal depende da carga de uso e não do tamanho do provedor de dados. Se a atividade do disco for intensa, será necessário uma partição maior para o journal. Consulte a nota na seção <<understanding-journaling,Compreendendo o Journaling>> para mais informações.
=== Eu cometi algum erro durante a configuração e não consigo inicializar normalmente agora. Isso pode ser resolvido de alguma forma?
-Você esqueceu (ou escreveu incorretamente) a entrada em [.filename]#/boot/loader.conf#, ou existem erros no seu arquivo [.filename]#/etc/fstab#. Estes erros geralmente são fáceis de corrigir. Pressione kbd:[Enter] para acessar o shell padrão do modo single user. Em seguida, localize a raiz do problema:
+Parece que você esqueceu (ou digitou incorretamente) a entrada no arquivo [.filename]#/boot/loader.conf# ou existem erros no arquivo [.filename]#/etc/fstab#. Esses erros geralmente são fáceis de corrigir. Pressione kbd:[Enter] para acessar o shell do sistema no modo de usuário unico. Em seguida, localize a raiz do problema:
-[source,shell]
+[source, shell]
....
# cat /boot/loader.conf
....
-Se a entrada `geom_journal_load` estiver ausente ou incorreta, os dispositivos registrados nunca serão criados. Carregue o módulo manualmente, monte todas as partições e continue com a inicialização do modo multi usuário:
+Se a entrada `geom_journal_load` estiver ausente ou digitada incorretamente, os dispositivos com journaling não serão criados. Carregue o módulo manualmente, monte todas as partições e continue com a inicialização em modo multiusuário:
-[source,shell]
+[source, shell]
....
# gjournal load
+
GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.
GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.
@@ -346,36 +350,36 @@ GEOM_JOURNAL: Journal ad0s1f clean.
(boot continues)
....
-Se, por outro lado, esta entrada estiver correta, dê uma olhada em [.filename]#/etc/fstab#. Você provavelmente encontrará uma entrada incorreta ou faltando. Nesse caso, monte todas as partições restantes manualmente e continue com o boot em modo multi-usuários.
+Por outro lado, se essa entrada estiver correta, verifique o arquivo [.filename]#/etc/fstab#. Provavelmente você encontrará uma entrada ausente ou digitada incorretamente. Nesse caso, monte todas as partições restantes manualmente e continue com a inicialização em modo multiusuário.
=== Posso remover o registro no journal e retornar ao meu sistema de arquivos padrão com o Soft Updates?
-Certo. Use o procedimento a seguir, que inverte as alterações. As partições que você criou para os provedores de journal podem ser usadas para outros propósitos, se você desejar.
+Claro. Use o seguinte procedimento, que reverte as alterações. As partições que você criou para os provedores de journal podem ser usadas para outros fins, se desejar.
-Faça login como `root` e alterne para o modo de usuário único:
+Faça login como `root` e altere para o modo de usuário único:
-[source,shell]
+[source, shell]
....
# shutdown now
....
Desmonte as partições journaled:
-[source,shell]
+[source, shell]
....
# umount /usr /var
....
Sincronize os journals:
-[source,shell]
+[source, shell]
....
# gjournal sync
....
Pare os provedores de journaling:
-[source,shell]
+[source, shell]
....
# gjournal stop ad0s1d.journal
# gjournal stop ad0s1f.journal
@@ -383,7 +387,7 @@ Pare os provedores de journaling:
Limpe os metadados de journaling de todos os dispositivos usados:
-[source,shell]
+[source, shell]
....
# gjournal clear ad0s1d
# gjournal clear ad0s1f
@@ -393,7 +397,7 @@ Limpe os metadados de journaling de todos os dispositivos usados:
Limpe o sinalizador de journaling do sistema de arquivos e restaure a flag do Soft Updates:
-[source,shell]
+[source, shell]
....
# tunefs -J disable -n enable ad0s1d
tunefs: gjournal cleared
@@ -406,13 +410,13 @@ tunefs: soft updates set
Remonte os dispositivos antigos à mão:
-[source,shell]
+[source, shell]
....
# mount -o rw /dev/ad0s1d /var
# mount -o rw /dev/ad0s1f /usr
....
-Edite o [.filename]#/etc/fstab# e restaure-o ao seu estado original:
+Edite o arquivo [.filename]#/etc/fstab# e restaure-o para seu estado original:
[.programlisting]
....
@@ -420,14 +424,14 @@ Edite o [.filename]#/etc/fstab# e restaure-o ao seu estado original:
/dev/ad0s1d /var ufs rw 2 2
....
-Finalmente, edite o [.filename]#/boot/loader.conf#, remova a entrada que carrega o módulo `geom_journal` e reinicie.
+Finalmente, edite o arquivo [.filename]#/boot/loader.conf#, remova a entrada que carrega o módulo `geom_journal` e reinicie o sistema.
[[further-reading]]
== Leitura Adicional
-Journaling é um recurso relativamente novo do FreeBSD e, como tal, ainda não está muito bem documentado. Você pode, no entanto, encontrar as seguintes referências adicionais úteis:
+O journaling é um recurso relativamente novo no FreeBSD e, portanto, ainda não está muito bem documentado. No entanto, você pode encontrar as seguintes referências adicionais úteis:
-* Uma link:{handbook}geom-gjournal[nova seção sobre journaling] agora faz parte do Handbook do FreeBSD.
-* https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043.html[Este post] em http://lists.FreeBSD.org/mailman/listinfo/freebsd-current[freebsd-current] pelo desenvolvedor do man:gjournal[8], Paweł Jakub Dawidek mailto:pjd@FreeBSD.org[pjd@FreeBSD.org].
-* https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html[Este post] em http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[freebsd-questions] por Ivan Voras mailto:ivoras@FreeBSD.org[ivoras@FreeBSD.org].
-* As páginas de manual do man:gjournal[8] e man:geom[8].
+* A extref:{handbook}[nova seção sobre journaling, geom-gjournal] agora faz parte do FreeBSD Handbook.
+* https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043.html[Esta mensagem] na {freebsd-current} enviada por um desenvolvedor do man:gjournal[8]'s, `{pjd}`.
+* https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html[Esta mensagem] na {freebsd-questions} enviada por `{ivoras}`.
+* As páginas de manual man:gjournal[8] e man:geom[8].
diff --git a/documentation/content/pt-br/articles/gjournal-desktop/_index.po b/documentation/content/pt-br/articles/gjournal-desktop/_index.po
new file mode 100644
index 0000000000..ce86348ed1
--- /dev/null
+++ b/documentation/content/pt-br/articles/gjournal-desktop/_index.po
@@ -0,0 +1,1348 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: 2023-05-15 19:36+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesgjournal-desktop_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Title =
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:1
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:11
+#, no-wrap
+msgid "Implementing UFS Journaling on a Desktop PC"
+msgstr "Implementando o UFS Journaling em um Desktop PC"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:50
+msgid ""
+"A journaling file system uses a log to record all transactions that take "
+"place in the file system, and preserves its integrity in the event of a "
+"system crash or power failure. Although it is still possible to lose "
+"unsaved changes to files, journaling almost completely eliminates the "
+"possibility of file system corruption caused by an unclean shutdown. It "
+"also shortens to a minimum the time required for after-failure file system "
+"checking. Although the UFS file system employed by FreeBSD does not "
+"implement journaling itself, the new journal class of the GEOM framework in "
+"FreeBSD 7._X_ can be used to provide file system independent journaling. "
+"This article explains how to implement UFS journaling on a typical desktop "
+"PC scenario."
+msgstr ""
+"Um sistema de arquivos com journaling utiliza um log para registrar todas as "
+"transações que ocorrem no sistema de arquivos e preserva sua integridade em "
+"caso de falha do sistema ou queda de energia. Embora ainda seja possível "
+"perder alterações não salvas em arquivos, o journaling quase elimina "
+"completamente a possibilidade de corrupção do sistema de arquivos causada "
+"por uma desligamento incorreto. Ele também reduz ao mínimo o tempo "
+"necessário para a verificação do sistema de arquivos após uma falha. Embora "
+"o sistema de arquivos UFS utilizado pelo FreeBSD não implemente o journaling "
+"por si só, a nova classe de journaling do framework GEOM no FreeBSD 7._X_ "
+"pode ser usada para fornecer o journaling independente do sistema de "
+"arquivos. Este artigo explica como implementar o journaling do UFS em um "
+"cenário típico de um PC desktop."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:52
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:56
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:61
+msgid ""
+"While professional servers are usually well protected from unforeseen "
+"shutdowns, the typical desktop is at the mercy of power failures, accidental "
+"resets, and other user related incidents that can lead to unclean "
+"shutdowns. Soft Updates usually protect the file system efficiently in such "
+"cases, although most of the times a lengthy background check is required. "
+"On rare occasions, file system corruption reaches a point where user "
+"intervention is required and data may be lost."
+msgstr ""
+"Enquanto servidores profissionais geralmente estão bem protegidos contra "
+"desligamentos imprevistos, os desktops típicos estão sujeitos a quedas de "
+"energia, reinicializações acidentais e outros incidentes relacionados ao "
+"usuário que podem levar a desligamentos incorretos. As Soft Updates "
+"geralmente protegem o sistema de arquivos de forma eficiente nesses casos, "
+"embora na maioria das vezes seja necessária uma verificação em segundo plano "
+"demorada. Em raras ocasiões, a corrupção do sistema de arquivos atinge um "
+"ponto em que é necessária a intervenção do usuário e dados podem ser "
+"perdidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:63
+msgid ""
+"The new journaling capability provided by GEOM can greatly assist in such "
+"scenarios, by virtually eliminating the time required for file system "
+"checking, and ensuring that the file system is quickly restored to a "
+"consistent state."
+msgstr ""
+"O novo recurso de journaling fornecido pela GEOM pode ajudar bastante nesses "
+"cenários, praticamente eliminando o tempo necessário para a verificação do "
+"sistema de arquivos e garantindo que o sistema de arquivos seja rapidamente "
+"restaurado para um estado consistente."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:67
+msgid ""
+"This article describes a procedure for implementing UFS journaling on a "
+"typical desktop PC scenario (one hard disk used for both operating system "
+"and data). It should be followed during a fresh installation of FreeBSD. "
+"The steps are simple enough and do not require overly complex interaction "
+"with the command line."
+msgstr ""
+"Este artigo descreve um procedimento para implementar o journaling do UFS em "
+"um cenário típico de um PC desktop (um disco rígido usado tanto para o "
+"sistema operacional quanto para os dados). Ele deve ser seguido durante uma "
+"nova instalação do FreeBSD. Os passos são simples o suficiente e não exigem "
+"interações excessivamente complexas com a linha de comando."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:69
+msgid "After reading this article, you will know:"
+msgstr "Depois de ler este artigo, você saberá:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:71
+msgid ""
+"How to reserve space for journaling during a new installation of FreeBSD."
+msgstr ""
+"Como reservar espaço para o journaling durante uma nova instalação do "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:72
+msgid ""
+"How to load and enable the `geom_journal` module (or build support for it in "
+"your custom kernel)."
+msgstr ""
+"Como carregar e ativar o módulo `geom_journal` (ou compilar o suporte para "
+"ele em seu kernel personalizado)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:73
+msgid ""
+"How to convert your existing file systems to utilize journaling, and what "
+"options to use in [.filename]#/etc/fstab# to mount them."
+msgstr ""
+"Como converter seus sistemas de arquivos existentes para utilizar journaling "
+"e quais opções usar no arquivo [.filename]#/etc/fstab# para montá-los."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:74
+msgid "How to implement journaling in new (empty) partitions."
+msgstr "Como implementar o journaling em novas partições (vazias)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:75
+msgid "How to troubleshoot common problems associated with journaling."
+msgstr "Como solucionar problemas comuns associados ao journaling."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:77
+msgid "Before reading this article, you should be able to:"
+msgstr "Antes de ler este artigo, você deve ser capaz de:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:79
+msgid "Understand basic UNIX(R) and FreeBSD concepts."
+msgstr "Entender os conceitos básicos do UNIX(R) e do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:80
+msgid ""
+"Be familiar with the installation procedure of FreeBSD and the sysinstall "
+"utility."
+msgstr ""
+"Estar familiarizado com o procedimento de instalação do FreeBSD e com a "
+"ferramenta sysinstall."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:86
+msgid ""
+"The procedure described here is intended for preparing a new installation "
+"where no actual user data is stored on the disk yet. While it is possible "
+"to modify and extend this procedure for systems already in production, you "
+"should _backup_ all important data before doing so. Messing around with "
+"disks and partitions at a low level can lead to fatal mistakes and data loss."
+msgstr ""
+"A procedimento descrito aqui destina-se a preparar uma nova instalação na "
+"qual ainda não existe nenhum dado do usuário armazenado no disco. Embora "
+"seja possível modificar e estender este procedimento para sistemas já em "
+"produção, você deve fazer um _backup_ de todos os dados importantes antes de "
+"fazê-lo. Mexer com discos e partições em um nível baixo pode levar a erros "
+"fatais e a perda de dados."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:89
+#, no-wrap
+msgid "Understanding Journaling in FreeBSD"
+msgstr "Compreendendo o journaling no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:93
+msgid ""
+"The journaling provided by GEOM in FreeBSD 7._X_ is not file system specific "
+"(unlike for example the ext3 file system in Linux(R)) but is functioning at "
+"the block level. Though this means it can be applied to different file "
+"systems, for FreeBSD 7.0-RELEASE, it can only be used on UFS2."
+msgstr ""
+"O journaling fornecido pelo GEOM no FreeBSD 7._X_ não é específico do "
+"sistema de arquivos (ao contrário do sistema de arquivos ext3 no Linux(R)), "
+"mas funciona no nível de bloco. Embora isso signifique que ele possa ser "
+"aplicado a diferentes sistemas de arquivos, no FreeBSD 7.0-RELEASE, ele só "
+"pode ser usado no UFS2."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:97
+msgid ""
+"This functionality is provided by loading the [.filename]#geom_journal.ko# "
+"module into the kernel (or building it into a custom kernel) and using the "
+"`gjournal` command to configure the file systems. In general, you would "
+"like to journal large file systems, like [.filename]#/usr#. You will need "
+"however (see the following section) to reserve some free disk space."
+msgstr ""
+"Essa funcionalidade é fornecida carregando o módulo [.filename]#geom_journal."
+"ko# no kernel (ou compilando-o em um kernel personalizado) e usando o "
+"comando `gjournal` para configurar os sistemas de arquivos. Em geral, você "
+"gostaria de registrar grandes sistemas de arquivos, como o [.filename]#/usr#"
+". No entanto, você precisará reservar algum espaço livre em disco (consulte "
+"a próxima seção)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:104
+msgid ""
+"When a file system is journaled, some disk space is needed to keep the "
+"journal itself. The disk space that holds the actual data is referred to as "
+"the __data provider__, while the one that holds the journal is referred to "
+"as the __journal provider__. The data and journal providers need to be on "
+"different partitions when journaling an existing (non-empty) partition. "
+"When journaling a new partition, you have the option to use a single "
+"provider for both data and journal. In any case, the `gjournal` command "
+"combines both providers to create the final journaled file system. For "
+"example:"
+msgstr ""
+"Quando um sistema de arquivos é jornalizado, é necessário um espaço em disco "
+"para armazenar o próprio journal. O espaço em disco que contém os dados "
+"reais é chamado de __provedor de dados__ (data provider), enquanto o que "
+"contém o journal é chamado de __provedor de journal__ (journal provider). Os "
+"provedores de dados e de journal precisam estar em partições diferentes ao "
+"jornalizar uma partição existente (não vazia). Ao jornalizar uma nova "
+"partição, você tem a opção de usar um único provedor para ambos os dados e o "
+"journal. Em qualquer caso, o comando `gjournal` combina ambos os provedores "
+"para criar o sistema de arquivos final com journaling. Por exemplo:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:106
+msgid ""
+"You wish to journal your [.filename]#/usr# file system, stored in [."
+"filename]#/dev/ad0s1f# (which already contains data)."
+msgstr ""
+"Você deseja fazer o journaling do sistema de arquivos [.filename]#/usr#, "
+"armazenado em [.filename]#/dev/ad0s1f# (que já contém dados)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:107
+msgid ""
+"You reserved some free disk space in a partition in [.filename]#/dev/ad0s1g#."
+msgstr ""
+"Você reservou um espaço livre em disco em uma partição em [/dev/ad0s1g]."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:108
+msgid ""
+"Using `gjournal`, a new [.filename]#/dev/ad0s1f.journal# device is created "
+"where [.filename]#/dev/ad0s1f# is the data provider, and [.filename]#/dev/"
+"ad0s1g# is the journal provider. This new device is then used for all "
+"subsequent file operations."
+msgstr ""
+"Usando `gjournal`, um novo dispositivo [.filename]#/dev/ad0s1f.journal# é "
+"criado, onde [.filename]#/dev/ad0s1f# é o provedor de dados e [.filename]#/"
+"dev/ad0s1g# é o provedor de journal. Esse novo dispositivo é então usado "
+"para todas as operações de arquivo subsequentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:112
+msgid ""
+"The amount of disk space you need to reserve for the journal provider "
+"depends on the usage load of the file system and not on the size of the data "
+"provider. For example on a typical office desktop, a 1 GB journal provider "
+"for the [.filename]#/usr# file system will suffice, while a machine that "
+"deals with heavy disk I/O (i.e. video editing) may need more. A kernel "
+"panic will occur if the journal space is exhausted before it has a chance to "
+"be committed."
+msgstr ""
+"A quantidade de espaço em disco que você precisa reservar para o provedor de "
+"journal depende da carga de uso do sistema de arquivos e não do tamanho do "
+"provedor de dados. Por exemplo, em um desktop de escritório típico, um "
+"provedor de journal de 1 GB para o sistema de arquivos [.filename]#/usr# "
+"será suficiente, enquanto uma máquina que lida com intensas operações E/S de "
+"disco (por exemplo, edição de vídeo) pode precisar de mais espaço. Ocorrerá "
+"um kernel panic se o espaço do journal for esgotado antes que ele tenha a "
+"chance de ser confirmado (committed)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:119
+msgid ""
+"The journal sizes suggested here, are highly unlikely to cause problems in "
+"typical desktop use (such as web browsing, word processing and playback of "
+"media files). If your workload includes intense disk activity, use the "
+"following rule for maximum reliability: Your RAM size should fit in 30% of "
+"the journal provider's space. For example, if your system has 1 GB RAM, "
+"create an approximately 3.3 GB journal provider. (Multiply your RAM size "
+"with 3.3 to obtain the size of the journal)."
+msgstr ""
+"Os tamanhos de journal sugeridos aqui são altamente improváveis de causar "
+"problemas em uso típico de desktop, como navegação na web, processamento de "
+"texto e reprodução de arquivos de mídia. Se a sua carga de trabalho inclui "
+"atividade intensa de disco, utilize a seguinte regra para obter máxima "
+"confiabilidade: o tamanho da sua memória RAM deve caber em 30% do espaço do "
+"provedor de journal. Por exemplo, se o seu sistema possui 1 GB de RAM, crie "
+"um provedor de journal de aproximadamente 3,3 GB (multiplique o tamanho da "
+"sua RAM por 3,3 para obter o tamanho do journal)."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:122
+msgid ""
+"For more information about journaling, please read the manual page of man:"
+"gjournal[8]."
+msgstr ""
+"Para obter mais informações sobre o journaling, por favor, leia a página do "
+"manual man:gjournal[8]."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:124
+#, no-wrap
+msgid "Steps During the Installation of FreeBSD"
+msgstr "Etapas durante a instalação do FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:126
+#, no-wrap
+msgid "Reserving Space for Journaling"
+msgstr "Reservando espaço para o journaling"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:130
+msgid ""
+"A typical desktop machine usually has one hard disk that stores both the OS "
+"and user data. Arguably, the default partitioning scheme selected by "
+"sysinstall is more or less suitable: A desktop machine does not need a large "
+"[.filename]#/var# partition, while [.filename]#/usr# is allocated the bulk "
+"of the disk space, since user data and a lot of packages are installed into "
+"its subdirectories."
+msgstr ""
+"Uma máquina desktop típica geralmente possui um único disco rígido que "
+"armazena tanto o sistema operacional quanto os dados do usuário. "
+"Argumentavelmente, o esquema de particionamento padrão selecionado pelo "
+"sysinstall é mais ou menos adequado: uma máquina desktop não precisa de uma "
+"partição [.filename]#/var# grande, enquanto a partição [.filename]#/usr# é "
+"alocada para a maior parte do espaço em disco, uma vez que os dados do "
+"usuário e muitos pacotes são instalados em seus subdiretórios."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:134
+msgid ""
+"The default partitioning (the one obtained by pressing kbd:[A] at the "
+"FreeBSD partition editor, called Disklabel) does not leave any unallocated "
+"space. Each partition that will be journaled, requires another partition "
+"for the journal. Since the [.filename]#/usr# partition is the largest, it "
+"makes sense to shrink this partition slightly, to obtain the space required "
+"for journaling."
+msgstr ""
+"A partição padrão (aquela obtida ao pressionar kbd:[A] no editor de partição "
+"do FreeBSD, chamado Disklabel) não deixa nenhum espaço não alocado. Cada "
+"partição que será jornalizada requer outra partição para o journal. Como a "
+"partição [.filename]#/usr# é a maior, faz sentido reduzir levemente essa "
+"partição para obter o espaço necessário para o journaling."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:137
+msgid ""
+"In our example, an 80 GB disk is used. The following screenshot shows the "
+"default partitions created by Disklabel during installation:"
+msgstr ""
+"No nosso exemplo, um disco de 80 GB está sendo utilizado. A captura de tela "
+"a seguir mostra as partições padrões criadas pelo Disklabel durante a "
+"instalação:"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:138
+#, no-wrap
+msgid "disklabel1.png"
+msgstr "disklabel1.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:142
+msgid ""
+"If this is more or less what you need, it is very easy to adjust for "
+"journaling. Simply use the arrow keys to move the highlight to the [."
+"filename]#/usr# partition and press kbd:[D] to delete it."
+msgstr ""
+"Se isso é mais ou menos o que você precisa, é muito fácil ajustar para o "
+"journaling. Basta usar as teclas de seta para mover o destaque para a "
+"partição [.filename]#/usr# e pressionar kbd:[D] para excluí-la."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:146
+msgid ""
+"Now, move the highlight to the disk name at the top of the screen and press "
+"kbd:[C] to create a new partition for [.filename]#/usr#. This new partition "
+"should be smaller by 1 GB (if you intend to journal [.filename]#/usr# only), "
+"or 2 GB (if you intend to journal both [.filename]#/usr# and [.filename]#/"
+"var#). From the pop-up that appears, opt to create a file system, and type "
+"[.filename]#/usr# as the mount point."
+msgstr ""
+"Agora, mova o destaque para o nome do disco no topo da tela e pressione "
+"kbd:[C] para criar uma nova partição para [.filename]#/usr#. Essa nova "
+"partição deve ser menor em 1 GB (se você pretende jornalizar apenas [."
+"filename]#/usr#) ou 2 GB (se você pretende jornalizar tanto [.filename]#/usr#"
+" quanto [.filename]#/var#). No pop-up que aparece, opte por criar um sistema "
+"de arquivos e digite [.filename]#/usr# como ponto de montagem."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:152
+msgid ""
+"Should you journal the [.filename]#/var# partition? Normally, journaling "
+"makes sense on quite large partitions. You may decide not to journal [."
+"filename]#/var#, although doing so on a typical desktop will cause no harm. "
+"If the file system is lightly used (quite probable for a desktop) you may "
+"wish to allocate less disk space for its journal."
+msgstr ""
+"Você deve jornalizar a partição [.filename]#/var#? Normalmente, o journaling "
+"faz sentido em partições bastante grandes. Você pode optar por não "
+"jornalizar [.filename]#/var#, embora fazê-lo em um desktop típico não cause "
+"problemas. Se o sistema de arquivos tiver um uso leve (o que é bastante "
+"provável para um desktop), você pode desejar alocar menos espaço em disco "
+"para o seu journal."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:155
+msgid ""
+"In our example, we journal both [.filename]#/usr# and [.filename]#/var#. "
+"You may of course adjust the procedure to your own needs."
+msgstr ""
+"No nosso exemplo, nós aplicamos o journaling nas partições [.filename]#/usr# "
+"e [.filename]#/var#. Você pode, é claro, ajustar o procedimento de acordo "
+"com suas próprias necessidades."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:161
+msgid ""
+"To keep things as easy going as possible, we are going to use sysinstall to "
+"create the partitions required for journaling. However, during "
+"installation, sysinstall insists on asking a mount point for each partition "
+"you create. At this point, you do not have any mount points for the "
+"partitions that will hold the journals, and in reality you __do not even "
+"need them__. These are not partitions that we are ever going to mount "
+"somewhere."
+msgstr ""
+"Para facilitar o processo o máximo possível, vamos usar o sysinstall para "
+"criar as partições necessárias para o journaling. No entanto, durante a "
+"instalação, o sysinstall insiste em solicitar um ponto de montagem para cada "
+"partição que você cria. Neste momento, você não possui nenhum ponto de "
+"montagem para as partições que irão armazenar os journals e, na realidade, "
+"você nem mesmo precisa deles. Essas não são partições que serão montadas em "
+"algum lugar."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:165
+msgid ""
+"To avoid these problems with sysinstall, we are going to create the journal "
+"partitions as swap space. Swap is never mounted, and sysinstall has no "
+"problem creating as many swap partitions as needed. After the first reboot, "
+"[.filename]#/etc/fstab# will have to be edited, and the extra swap space "
+"entries removed."
+msgstr ""
+"Para evitar esses problemas com o sysinstall, vamos criar as partições de "
+"journal como espaço de swap. O swap nunca é montado, e o sysinstall não tem "
+"problemas em criar quantas partições de swap forem necessárias. Após o "
+"primeiro reinício, será necessário editar o arquivo [.filename]#/etc/fstab# "
+"e remover as entradas de espaço de swap adicionais."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:171
+msgid ""
+"To create the swap, again use the arrow keys to move the highlight to the "
+"top of Disklabel screen, so that the disk name itself is highlighted. Then "
+"press kbd:[N], enter the desired size (_1024M_), and select \"swap space\" "
+"from the pop-up menu that appears. Repeat for every journal you wish to "
+"create. In our example, we create two partitions to provide for the "
+"journals of [.filename]#/usr# and [.filename]#/var#. The final result is "
+"shown in the following screenshot:"
+msgstr ""
+"Para criar a partição de swap, novamente use as teclas de seta para mover o "
+"destaque para o topo da tela do Disklabel, de modo que o próprio nome do "
+"disco seja destacado. Em seguida, pressione kbd:[N], insira o tamanho "
+"desejado (_1024M_) e selecione \"swap space\" no menu pop-up que aparece. "
+"Repita esse processo para cada journal que você deseja criar. No nosso "
+"exemplo, criaremos duas partições para fornecer os journals de [."
+"filename]#/usr# e [.filename]#/var#. O resultado final é mostrado na captura "
+"de tela a seguir:"
+
+#. type: Target for macro image
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:172
+#, no-wrap
+msgid "disklabel2.png"
+msgstr "disklabel2.png"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:177
+msgid ""
+"When you have completed creating the partitions, we suggest you write down "
+"the partition names, and mount points, so you can easily refer to this "
+"information during the configuration phase. This will help alleviate "
+"mistakes that may damage your installation. The following table shows our "
+"notes for the sample configuration:"
+msgstr ""
+"Quando você tiver concluído a criação das partições, sugerimos que anote os "
+"nomes das partições e os pontos de montagem para que você possa se referir "
+"facilmente a essas informações durante a fase de configuração. Isso ajudará "
+"a evitar erros que possam danificar sua instalação. A tabela a seguir mostra "
+"nossas anotações para a configuração de exemplo:"
+
+#. type: Block title
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:178
+#, no-wrap
+msgid "Partitions and Journals"
+msgstr "Partições e Journals"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:182
+#, no-wrap
+msgid "Partition"
+msgstr "Partição"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:183
+#, no-wrap
+msgid "Mount Point"
+msgstr "Ponto de Montagem"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:185
+#, no-wrap
+msgid "Journal"
+msgstr "Journal"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:186
+#, no-wrap
+msgid "ad0s1d"
+msgstr "ad0s1d"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:187
+#, no-wrap
+msgid "/var"
+msgstr "/var"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:189
+#, no-wrap
+msgid "ad0s1h"
+msgstr "ad0s1h"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:190
+#, no-wrap
+msgid "ad0s1f"
+msgstr "ad0s1f"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:191
+#, no-wrap
+msgid "/usr"
+msgstr "/usr"
+
+#. type: Table
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:192
+#, no-wrap
+msgid "ad0s1g"
+msgstr "ad0s1g"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:196
+msgid ""
+"Continue the installation as you would normally do. We would however "
+"suggest you postpone installation of third party software (packages) until "
+"you have completely setup journaling."
+msgstr ""
+"Continue a instalação como você normalmente faria. No entanto, sugerimos que "
+"você adie a instalação de softwares de terceiros (pacotes) até ter "
+"configurado completamente o journaling."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:198
+#, no-wrap
+msgid "Booting for the first time"
+msgstr "Inicializando pela primeira vez"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:203
+msgid ""
+"Your system will come up normally, but you will need to edit [.filename]#/"
+"etc/fstab# and remove the extra swap partitions you created for the "
+"journals. Normally, the swap partition you will actually use is the one "
+"with the \"b\" suffix (i.e. ad0s1b in our example). Remove all other swap "
+"space entries and reboot so that FreeBSD will stop using them."
+msgstr ""
+"Seu sistema inicializará normalmente, mas você precisará editar o arquivo [."
+"filename]#/etc/fstab# e remover as partições de swap extras que você criou "
+"para os journals. Normalmente, a partição de swap que você realmente usará é "
+"aquela com o sufixo \"b\" (por exemplo, ad0s1b em nosso exemplo). Remova "
+"todas as outras entradas de espaço de swap e reinicie para que o FreeBSD "
+"deixe de usá-las."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:205
+msgid ""
+"When the system comes up again, we will be ready to configure journaling."
+msgstr ""
+"Quando o sistema voltar a funcionar, estaremos prontos para configurar o "
+"journaling."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:207
+#, no-wrap
+msgid "Setting Up Journaling"
+msgstr "Configurando o journaling"
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:210
+#, no-wrap
+msgid "Executing `gjournal`"
+msgstr "Executando o comando `gjournal`"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:214
+msgid ""
+"Having prepared all the required partitions, it is quite easy to configure "
+"journaling. We will need to switch to single user mode, so login as `root` "
+"and type:"
+msgstr ""
+"Depois de preparar todas as partições necessárias, é bastante fácil "
+"configurar o journaling. Será necessário mudar para o modo de usuário único ("
+"single user mode). Para isso, faça o login como `root` e digite o seguinte "
+"comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:218
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:436
+#, no-wrap
+msgid "# shutdown now\n"
+msgstr "# shutdown now\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:222
+msgid ""
+"Press kbd:[Enter] to get the default shell. We will need to unmount the "
+"partitions that will be journaled, in our example [.filename]#/usr# and [."
+"filename]#/var#:"
+msgstr ""
+"Pressione kbd:[Enter] para obter o shell padrão. Agora, você precisará "
+"desmontar as partições que serão jornalizadas, no nosso exemplo [."
+"filename]#/usr# e [.filename]#/var#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:226
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:443
+#, no-wrap
+msgid "# umount /usr /var\n"
+msgstr "# umount /usr /var\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:229
+msgid "Load the module required for journaling:"
+msgstr "Carregue o módulo necessário para o journaling:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:233
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:408
+#, no-wrap
+msgid "# gjournal load\n"
+msgstr "# gjournal load\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:238
+msgid ""
+"Now, use your notes to determine which partition will be used for each "
+"journal. In our example, [.filename]#/usr# is [.filename]#ad0s1f# and its "
+"journal will be [.filename]#ad0s1g#, while [.filename]#/var# is [."
+"filename]#ad0s1d# and will be journaled to [.filename]#ad0s1h#. The "
+"following commands are required:"
+msgstr ""
+"Agora, use suas anotações para determinar qual partição será usada para cada "
+"journal. No nosso exemplo, [.filename]#/usr# é [.filename]#ad0s1f# e seu "
+"journal será [.filename]#ad0s1g#, enquanto [.filename]#/var# é [."
+"filename]#ad0s1d# e será jornalizada em [.filename]#ad0s1h#. Os seguintes "
+"comandos são necessários:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:244
+#, no-wrap
+msgid ""
+"# gjournal label ad0s1f ad0s1g\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+msgstr ""
+"# gjournal label ad0s1f ad0s1g\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:248
+#, no-wrap
+msgid ""
+"# gjournal label ad0s1d ad0s1h\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+msgstr ""
+"# gjournal label ad0s1d ad0s1h\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:254
+msgid ""
+"If the last sector of either partition is used, `gjournal` will return an "
+"error. You will have to run the command using the `-f` flag to force an "
+"overwrite, i.e.:"
+msgstr ""
+"Se o último setor de qualquer uma das partições estiver em uso, o `gjournal` "
+"retornará um erro. Nesse caso, você precisará executar o comando usando a "
+"opção `-f` para forçar a sobrescrita. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:258
+#, no-wrap
+msgid "# gjournal label -f ad0s1d ad0s1h\n"
+msgstr "# gjournal label -f ad0s1d ad0s1h\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:261
+msgid ""
+"Since this is a new installation, it is highly unlikely that anything will "
+"be actually overwritten."
+msgstr ""
+"Como esta é uma nova instalação, é altamente improvável que qualquer coisa "
+"seja realmente sobrescrita."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:266
+msgid ""
+"At this point, two new devices are created, namely [.filename]#ad0s1d."
+"journal# and [.filename]#ad0s1f.journal#. These represent the [.filename]#/"
+"var# and [.filename]#/usr# partitions we have to mount. Before mounting, we "
+"must however set the journal flag on them and clear the Soft Updates flag:"
+msgstr ""
+"Neste ponto, dois novos dispositivos são criados, chamados [.filename]#ad0s1d"
+".journal# e [.filename]#ad0s1f.journal#. Eles representam as partições [."
+"filename]#/var# e [.filename]#/usr# que devemos montar. No entanto, antes de "
+"montá-los, precisamos definir a flag de journaling neles e desativar a flag "
+"de Soft Updates:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:272
+#, no-wrap
+msgid ""
+"# tunefs -J enable -n disable ad0s1d.journal\n"
+"tunefs: gjournal set\n"
+"tunefs: soft updates cleared\n"
+msgstr ""
+"# tunefs -J enable -n disable ad0s1d.journal\n"
+"tunefs: gjournal set\n"
+"tunefs: soft updates cleared\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:276
+#, no-wrap
+msgid ""
+"# tunefs -J enable -n disable ad0s1f.journal\n"
+"tunefs: gjournal set\n"
+"tunefs: soft updates cleared\n"
+msgstr ""
+"# tunefs -J enable -n disable ad0s1f.journal\n"
+"tunefs: gjournal set\n"
+"tunefs: soft updates cleared\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:279
+msgid ""
+"Now, mount the new devices manually at their respective places (note that we "
+"can now use the `async` mount option):"
+msgstr ""
+"Agora, monte manualmente os novos dispositivos em seus respectivos locais ("
+"observe que agora podemos usar a opção de montagem `async`):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:284
+#, no-wrap
+msgid ""
+"# mount -o async /dev/ad0s1d.journal /var\n"
+"# mount -o async /dev/ad0s1f.journal /usr\n"
+msgstr ""
+"# mount -o async /dev/ad0s1d.journal /var\n"
+"# mount -o async /dev/ad0s1f.journal /usr\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:287
+msgid ""
+"Edit [.filename]#/etc/fstab# and update the entries for [.filename]#/usr# "
+"and [.filename]#/var#:"
+msgstr ""
+"Edite o arquivo [.filename]#/etc/fstab# e atualize as entradas para [."
+"filename]#/usr# e [.filename]#/var#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:292
+#, no-wrap
+msgid ""
+"/dev/ad0s1f.journal /usr ufs rw,async 2 2\n"
+"/dev/ad0s1d.journal /var ufs rw,async 2 2\n"
+msgstr ""
+"/dev/ad0s1f.journal /usr ufs rw,async 2 2\n"
+"/dev/ad0s1d.journal /var ufs rw,async 2 2\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:297
+msgid ""
+"Make sure the above entries are correct, or you will have trouble starting "
+"up normally after you reboot!"
+msgstr ""
+"Certifique-se de que as entradas acima estão corretas ou você terá problemas "
+"para inicializar normalmente após o reboot!"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:300
+msgid ""
+"Finally, edit [.filename]#/boot/loader.conf# and add the following line so "
+"the man:gjournal[8] module is loaded at every boot:"
+msgstr ""
+"Por fim, edite o arquivo [.filename]#/boot/loader.conf# e adicione a "
+"seguinte linha para carregar o módulo man:gjournal[8] em cada inicialização "
+"do sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:304
+#, no-wrap
+msgid "geom_journal_load=\"YES\"\n"
+msgstr "geom_journal_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:309
+msgid ""
+"Congratulations! Your system is now set for journaling. You can either type "
+"`exit` to return to multi-user mode, or reboot to test your configuration "
+"(recommended). During the boot you will see messages like the following:"
+msgstr ""
+"Parabéns! Seu sistema está agora configurado para o journaling. Você pode "
+"digitar `exit` para retornar ao modo multiusuário ou reiniciar para testar "
+"sua configuração (recomendado). Durante a inicialização, você verá mensagens "
+"como as seguintes:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:319
+#, no-wrap
+msgid ""
+"ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1d clean.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1f clean.\n"
+msgstr ""
+"ad0: 76293MB XEC XE800JD-00HBC0 08.02D08 at ata0-master SATA150\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1d clean.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1f clean.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:322
+msgid "After an unclean shutdown, the messages will vary slightly, i.e.:"
+msgstr ""
+"Após um encerramento não limpo, as mensagens variam ligeiramente, ou seja:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:326
+#, no-wrap
+msgid "GEOM_JOURNAL: Journal ad0s1d consistent.\n"
+msgstr "GEOM_JOURNAL: Journal ad0s1d consistent.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:329
+msgid ""
+"This usually means that man:gjournal[8] used the information in the journal "
+"provider to return the file system to a consistent state."
+msgstr ""
+"Isso geralmente significa que o man:gjournal[8] utilizou as informações no "
+"journal provider para restaurar o sistema de arquivos a um estado "
+"consistente."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:331
+#, no-wrap
+msgid "Journaling Newly Created Partitions"
+msgstr "Fazendo journaling de partições recém-criadas"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:336
+msgid ""
+"While the above procedure is necessary for journaling partitions that "
+"already contain data, journaling an empty partition is somewhat easier, "
+"since both the data and the journal provider can be stored in the same "
+"partition. For example, assume a new disk was installed, and a new "
+"partition [.filename]#/dev/ad1s1d# was created. Creating the journal would "
+"be as simple as:"
+msgstr ""
+"Enquanto o procedimento acima é necessário para jornalizar partições que já "
+"contêm dados, jornalizar uma partição vazia é um pouco mais fácil, pois "
+"tanto o provedor de dados quanto o provedor de journal podem ser armazenados "
+"na mesma partição. Por exemplo, suponha que um novo disco tenha sido "
+"instalado e uma nova partição [.filename]#/dev/ad1s1d# tenha sido criada. "
+"Criar o journal seria tão simples quanto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:340
+#, no-wrap
+msgid "# gjournal label ad1s1d\n"
+msgstr "# gjournal label ad1s1d\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:346
+msgid ""
+"The journal size will be 1 GB by default. You may adjust it by using the `-"
+"s` option. The value can be given in bytes, or appended by `K`, `M` or `G` "
+"to denote Kilobytes, Megabytes or Gigabytes respectively. Note that "
+"`gjournal` will not allow you to create unsuitably small journal sizes."
+msgstr ""
+"O tamanho do journal será de 1 GB por padrão. Você pode ajustá-lo usando a "
+"opção `-s`. O valor pode ser dado em bytes, ou pode ser seguido por `K`, `M` "
+"ou `G` para representar Kilobytes, Megabytes ou Gigabytes, respectivamente. "
+"Note que o `gjournal` não permitirá que você crie tamanhos de journal "
+"excessivamente pequenos e inadequados."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:348
+msgid ""
+"For example, to create a 2 GB journal, you could use the following command:"
+msgstr ""
+"Por exemplo, para criar um journal de 2 GB, você poderia usar o seguinte "
+"comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:352
+#, no-wrap
+msgid "# gjournal label -s 2G ad1s1d\n"
+msgstr "# gjournal label -s 2G ad1s1d\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:355
+msgid ""
+"You can then create a file system on your new partition, and enable "
+"journaling using the `-J` option:"
+msgstr ""
+"Em seguida, você pode criar um sistema de arquivos na sua nova partição e "
+"habilitar o journaling usando a opção `-J`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:359
+#, no-wrap
+msgid "# newfs -J /dev/ad1s1d.journal\n"
+msgstr "# newfs -J /dev/ad1s1d.journal\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:362
+#, no-wrap
+msgid "Building Journaling into Your Custom Kernel"
+msgstr "Adicionando suporte ao journaling no seu kernel personalizado"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:366
+msgid ""
+"If you do not wish to load `geom_journal` as a module, you can build its "
+"functions right into your kernel. Edit your custom kernel configuration "
+"file, and make sure it includes these two lines:"
+msgstr ""
+"Se você não deseja carregar `geom_journal` como um módulo, você pode "
+"incorporar suas funções diretamente no seu kernel. Edite o arquivo de "
+"configuração do seu kernel personalizado e verifique se ele inclui as "
+"seguintes linhas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:370
+#, no-wrap
+msgid "options UFS_GJOURNAL # Note: This is already in GENERIC\n"
+msgstr "options UFS_GJOURNAL # Note: This is already in GENERIC\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:372
+#, no-wrap
+msgid "options GEOM_JOURNAL # You will have to add this one\n"
+msgstr "options GEOM_JOURNAL # You will have to add this one\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:375
+msgid ""
+"Rebuild and reinstall your kernel following the relevant extref:{handbook}"
+"[instructions in the FreeBSD Handbook., kernelconfig]"
+msgstr ""
+"Recompile e reinstale o seu kernel seguindo as instruções relevantes no "
+"Handbook do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:377
+msgid ""
+"Do not forget to remove the relevant \"load\" entry from [.filename]#/boot/"
+"loader.conf# if you have previously used it."
+msgstr ""
+"Não se esqueça de remover a entrada relevante de \"load\" do arquivo [."
+"filename]#/boot/loader.conf# se você a tiver usado anteriormente."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:379
+#, no-wrap
+msgid "Troubleshooting Journaling"
+msgstr "Solução de problemas com journaling"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:382
+msgid ""
+"The following section covers frequently asked questions regarding problems "
+"related to journaling."
+msgstr ""
+"A seção a seguir aborda as perguntas mais frequentes relacionadas a "
+"problemas relacionados ao journaling."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:383
+#, no-wrap
+msgid "I am getting kernel panics during periods of high disk activity. How is this related to journaling?"
+msgstr "Estou recebendo um kernel panic durante períodos de alta atividade de disco. Como isso está relacionado ao journaling?"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:389
+msgid ""
+"The journal probably fills up before it has a chance to get committed "
+"(flushed) to disk. Keep in mind the size of the journal depends on the "
+"usage load, and not the size of the data provider. If your disk activity is "
+"high, you need a larger partition for the journal. See the note in the "
+"<<understanding-journaling>> section."
+msgstr ""
+"O journal provavelmente fica cheio antes de ter a chance de ser confirmado "
+"(gravado) no disco. Lembre-se de que o tamanho do journal depende da carga "
+"de uso e não do tamanho do provedor de dados. Se a atividade do disco for "
+"intensa, será necessário uma partição maior para o journal. Consulte a nota "
+"na seção <<understanding-journaling,Compreendendo o Journaling>> para mais "
+"informações."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:390
+#, no-wrap
+msgid "I made some mistake during configuration, and I cannot boot normally now. Can this be fixed some way?"
+msgstr "Eu cometi algum erro durante a configuração e não consigo inicializar normalmente agora. Isso pode ser resolvido de alguma forma?"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:396
+msgid ""
+"You either forgot (or misspelled) the entry in [.filename]#/boot/loader."
+"conf#, or there are errors in your [.filename]#/etc/fstab# file. These are "
+"usually easy to fix. Press kbd:[Enter] to get to the default single user "
+"shell. Then locate the root of the problem:"
+msgstr ""
+"Parece que você esqueceu (ou digitou incorretamente) a entrada no arquivo [."
+"filename]#/boot/loader.conf# ou existem erros no arquivo [.filename]#/etc/"
+"fstab#. Esses erros geralmente são fáceis de corrigir. Pressione kbd:[Enter] "
+"para acessar o shell do sistema no modo de usuário unico. Em seguida, "
+"localize a raiz do problema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:400
+#, no-wrap
+msgid "# cat /boot/loader.conf\n"
+msgstr "# cat /boot/loader.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:404
+msgid ""
+"If the `geom_journal_load` entry is missing or misspelled, the journaled "
+"devices are never created. Load the module manually, mount all partitions, "
+"and continue with multi-user boot:"
+msgstr ""
+"Se a entrada `geom_journal_load` estiver ausente ou digitada incorretamente, "
+"os dispositivos com journaling não serão criados. Carregue o módulo "
+"manualmente, monte todas as partições e continue com a inicialização em modo "
+"multiusuário:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:415
+#, no-wrap
+msgid ""
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1d clean.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1f clean.\n"
+msgstr ""
+"GEOM_JOURNAL: Journal 2948326772: ad0s1g contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1h contains journal.\n"
+"GEOM_JOURNAL: Journal 3193218002: ad0s1d contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1d clean.\n"
+"GEOM_JOURNAL: Journal 2948326772: ad0s1f contains data.\n"
+"GEOM_JOURNAL: Journal ad0s1f clean.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:419
+#, no-wrap
+msgid ""
+"# mount -a\n"
+"# exit\n"
+"(boot continues)\n"
+msgstr ""
+"# mount -a\n"
+"# exit\n"
+"(boot continues)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:424
+msgid ""
+"If, on the other hand, this entry is correct, have a look at [.filename]#/"
+"etc/fstab#. You will probably find a misspelled or missing entry. In this "
+"case, mount all remaining partitions by hand and continue with the multi-"
+"user boot."
+msgstr ""
+"Por outro lado, se essa entrada estiver correta, verifique o arquivo [."
+"filename]#/etc/fstab#. Provavelmente você encontrará uma entrada ausente ou "
+"digitada incorretamente. Nesse caso, monte todas as partições restantes "
+"manualmente e continue com a inicialização em modo multiusuário."
+
+#. type: Title ===
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:425
+#, no-wrap
+msgid "Can I remove journaling and return to my standard file system with Soft Updates?"
+msgstr "Posso remover o registro no journal e retornar ao meu sistema de arquivos padrão com o Soft Updates?"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:430
+msgid ""
+"Sure. Use the following procedure, which reverses the changes. The "
+"partitions you created for the journal providers can then be used for other "
+"purposes, if you so wish."
+msgstr ""
+"Claro. Use o seguinte procedimento, que reverte as alterações. As partições "
+"que você criou para os provedores de journal podem ser usadas para outros "
+"fins, se desejar."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:432
+msgid "Login as `root` and switch to single user mode:"
+msgstr "Faça login como `root` e altere para o modo de usuário único:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:439
+msgid "Unmount the journaled partitions:"
+msgstr "Desmonte as partições journaled:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:446
+msgid "Synchronize the journals:"
+msgstr "Sincronize os journals:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:450
+#, no-wrap
+msgid "# gjournal sync\n"
+msgstr "# gjournal sync\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:453
+msgid "Stop the journaling providers:"
+msgstr "Pare os provedores de journaling:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:458
+#, no-wrap
+msgid ""
+"# gjournal stop ad0s1d.journal\n"
+"# gjournal stop ad0s1f.journal\n"
+msgstr ""
+"# gjournal stop ad0s1d.journal\n"
+"# gjournal stop ad0s1f.journal\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:461
+msgid "Clear journaling metadata from all the devices used:"
+msgstr "Limpe os metadados de journaling de todos os dispositivos usados:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:468
+#, no-wrap
+msgid ""
+"# gjournal clear ad0s1d\n"
+"# gjournal clear ad0s1f\n"
+"# gjournal clear ad0s1g\n"
+"# gjournal clear ad0s1h\n"
+msgstr ""
+"# gjournal clear ad0s1d\n"
+"# gjournal clear ad0s1f\n"
+"# gjournal clear ad0s1g\n"
+"# gjournal clear ad0s1h\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:471
+msgid ""
+"Clear the file system journaling flag, and restore the Soft Updates flag:"
+msgstr ""
+"Limpe o sinalizador de journaling do sistema de arquivos e restaure a flag "
+"do Soft Updates:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:477
+#, no-wrap
+msgid ""
+"# tunefs -J disable -n enable ad0s1d\n"
+"tunefs: gjournal cleared\n"
+"tunefs: soft updates set\n"
+msgstr ""
+"# tunefs -J disable -n enable ad0s1d\n"
+"tunefs: gjournal cleared\n"
+"tunefs: soft updates set\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:481
+#, no-wrap
+msgid ""
+"# tunefs -J disable -n enable ad0s1f\n"
+"tunefs: gjournal cleared\n"
+"tunefs: soft updates set\n"
+msgstr ""
+"# tunefs -J disable -n enable ad0s1f\n"
+"tunefs: gjournal cleared\n"
+"tunefs: soft updates set\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:484
+msgid "Remount the old devices by hand:"
+msgstr "Remonte os dispositivos antigos à mão:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:489
+#, no-wrap
+msgid ""
+"# mount -o rw /dev/ad0s1d /var\n"
+"# mount -o rw /dev/ad0s1f /usr\n"
+msgstr ""
+"# mount -o rw /dev/ad0s1d /var\n"
+"# mount -o rw /dev/ad0s1f /usr\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:492
+msgid "Edit [.filename]#/etc/fstab# and restore it to its original state:"
+msgstr ""
+"Edite o arquivo [.filename]#/etc/fstab# e restaure-o para seu estado "
+"original:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:497
+#, no-wrap
+msgid ""
+"/dev/ad0s1f /usr ufs rw 2 2\n"
+"/dev/ad0s1d /var ufs rw 2 2\n"
+msgstr ""
+"/dev/ad0s1f /usr ufs rw 2 2\n"
+"/dev/ad0s1d /var ufs rw 2 2\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:500
+msgid ""
+"Finally, edit [.filename]#/boot/loader.conf#, remove the entry that loads "
+"the `geom_journal` module and reboot."
+msgstr ""
+"Finalmente, edite o arquivo [.filename]#/boot/loader.conf#, remova a entrada "
+"que carrega o módulo `geom_journal` e reinicie o sistema."
+
+#. type: Title ==
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:502
+#, no-wrap
+msgid "Further Reading"
+msgstr "Leitura Adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:506
+msgid ""
+"Journaling is a fairly new feature of FreeBSD, and as such, it is not very "
+"well documented yet. You may however find the following additional "
+"references useful:"
+msgstr ""
+"O journaling é um recurso relativamente novo no FreeBSD e, portanto, ainda "
+"não está muito bem documentado. No entanto, você pode encontrar as seguintes "
+"referências adicionais úteis:"
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:508
+msgid ""
+"A extref:{handbook}[new section on journaling, geom-gjournal] is now part of "
+"the FreeBSD Handbook."
+msgstr ""
+"A extref:{handbook}[nova seção sobre journaling, geom-gjournal] agora faz "
+"parte do FreeBSD Handbook."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:509
+msgid ""
+"https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043."
+"html[This post] in {freebsd-current} by man:gjournal[8]'s developer, `{pjd}`."
+msgstr ""
+"https://lists.freebsd.org/pipermail/freebsd-current/2006-June/064043.html["
+"Esta mensagem] na {freebsd-current} enviada por um desenvolvedor do "
+"man:gjournal[8]'s, `{pjd}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:510
+msgid ""
+"https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501."
+"html[This post] in {freebsd-questions} by `{ivoras}`."
+msgstr ""
+"https://lists.freebsd.org/pipermail/freebsd-questions/2008-April/173501.html["
+"Esta mensagem] na {freebsd-questions} enviada por `{ivoras}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/gjournal-desktop/_index.adoc:510
+msgid "The manual pages of man:gjournal[8] and man:geom[8]."
+msgstr "As páginas de manual man:gjournal[8] e man:geom[8]."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/hubs/_index.adoc b/documentation/content/pt-br/articles/hubs/_index.adoc
index c98c5209ac..14e82fd686 100644
--- a/documentation/content/pt-br/articles/hubs/_index.adoc
+++ b/documentation/content/pt-br/articles/hubs/_index.adoc
@@ -1,15 +1,20 @@
---
-title: Espelhando o FreeBSD
authors:
- - author: Jun Kuriyama
+ -
+ author: 'Jun Kuriyama'
email: kuriyama@FreeBSD.org
- - author: Valentino Vaschetto
+ -
+ author: 'Valentino Vaschetto'
email: logo@FreeBSD.org
- - author: Daniel Lang
+ -
+ author: 'Daniel Lang'
email: dl@leo.org
- - author: Ken Smith
+ -
+ author: 'Ken Smith'
email: kensmith@FreeBSD.org
-releaseinfo: "$FreeBSD$"
+description: 'O guia completo para espelhar o site do FreeBSD, servidores FTP e muito mais'
+tags: ["Mirroring", "FreeBSD", "Hub"]
+title: 'Espelhando o FreeBSD'
trademarks: ["freebsd", "general"]
---
@@ -22,15 +27,27 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/hubs/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -43,13 +60,13 @@ toc::[]
[NOTE]
====
-Nós não estamos aceitando novos sites espelho neste momento.
+Não estamos aceitando novos espelhos da comunidade neste momento.
====
[[mirror-contact]]
== Informações de contato
-Os Coordenadores do Sistema de Espelhamento podem ser contatados pelo email mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. Existe também uma http://lists.FreeBSD.org/mailman/listinfo/freebsd-hubs[lista de discussão de sites espelho do FreeBSD].
+Os coordenadores do Sistema de Espelhamento podem ser contatados por e-mail através de mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. Também existe a {freebsd-hubs}.
[[mirror-requirements]]
== Requisitos para um site espelho do FreeBSD
@@ -57,74 +74,74 @@ Os Coordenadores do Sistema de Espelhamento podem ser contatados pelo email mail
[[mirror-diskspace]]
=== Espaço em disco
-O espaço em disco é um dos requisitos mais importantes. Dependendo do conjunto de releases, arquiteturas e grau de cobertura que você deseja espelhar, uma quantidade enorme de espaço em disco pode ser consumida. Também tenha em mente que espelhos _oficiais_ provavelmente precisam ser completos. As páginas web devem ser sempre espelhadas completamente. Observe também que os números indicados aqui refletem o estado atual (para 10.4-RELEASE/11.2-RELEASE). Desenvolvimentos adicionais e novas releases só aumentarão a quantidade necessária. Também certifique-se de ter algum espaço extra (cerca de 10-20%) apenas para ter certeza de que não irá faltar espaço. Aqui estão alguns números aproximados:
+O espaço em disco é um dos requisitos mais importantes. Dependendo do conjunto de versões, arquiteturas e grau de completude que você deseja espelhar, uma enorme quantidade de espaço em disco pode ser consumida. Além disso, espelhos _oficiais_ provavelmente precisam ser completos. As páginas da web devem sempre ser espelhadas completamente. Observe também que os números aqui declarados refletem o estado atual (em {rel120-current}-RELEASE/{rel113-current}-RELEASE). O desenvolvimento e os lançamentos futuros só aumentarão a quantidade necessária. Certifique-se também de manter cerca de 10-20% de espaço extra apenas para garantir. Aqui estão alguns números aproximados:
* Distribuição FTP completa: 1.4 TB
* Deltas do CTM: 10 GB
* Páginas Web: 1GB
-O uso atual de disco da Distribuição por FTP pode ser encontrado em link:ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes].
+O uso atual de disco da distribuição FTP pode ser encontrado em link:ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir.sizes].
[[mirror-bandwidth]]
=== Conexão de Rede/Largura de Banda
Claro, você precisa estar conectado à Internet. A largura de banda necessária depende do uso pretendido do site espelho. Se você quiser espelhar apenas algumas partes do FreeBSD para uso na sua rede local/intranet, a demanda pode ser muito menor do que se você quiser disponibilizar os arquivos publicamente. Se você pretende se tornar um site espelho oficial, a largura de banda necessária será ainda maior. Podemos apenas dar estimativas aproximadas aqui:
-* Site local, sem acesso público: basicamente sem valor mínimo, mas se for menor que < 2 Mbps, pode deixar a sincronização bem lenta.
-* Site público não oficial: 34 Mbps é provavelmente um bom começo.
-* Site oficial: > 100 Mbps é recomendado, e seu host deve estar conectado o mais próximo possível do seu roteador de borda.
+* Site local, sem acesso público: basicamente não há mínimo, mas menos de 2 Mbps pode tornar a sincronização muito lenta.
+* Site público não oficial: 34 Mbps provavelmente é um bom começo.
+* Site oficial: é recomendado ter mais de 100 Mbps, e seu host deve estar conectado o mais próximo possível do seu roteador de borda.
[[mirror-system]]
=== Requisitos de Sistema, CPU, RAM
-Isto depende muito do número esperado de clientes, que é determinado pela política do servidor. O dimensionamento também é afetado pelo tipo de serviços que você deseja oferecer. Serviços FTP ou HTTP simples podem não exigir uma quantidade enorme de recursos. Tenha cuidado se você fornecer o rsync. Isso pode ter um grande impacto nos requisitos de CPU e memória, já que este serviço é considerado um devorador de memória. Os exemplos a seguir, visam lhe dar uma ideia simples deste dimensionamento.
+Uma coisa que isso depende é o número esperado de clientes, que é determinado pela política do servidor. Também é afetado pelos tipos de serviços que você deseja oferecer. Serviços FTP ou HTTP simples podem não requerer uma quantidade enorme de recursos. Tenha cuidado se você fornecer o rsync. Isso pode ter um grande impacto nos requisitos de CPU e memória, pois ele é considerado um devorador de memória. Os dados seguintes são apenas exemplos para dar uma ideia aproximada.
-Para um site com visitação moderada o qual ofereça o serviço de rsync, você pode considerar uma CPU entre 800 MHz - 1 GHz, e pelo menos 512 MB de memória RAM. Esta é provavelmente a configuração mínima para um site espelho __oficial__.
+Para um site moderadamente visitado que oferece rsync, você pode considerar uma CPU atual com cerca de 800 MHz - 1 GHz e pelo menos 512MB de RAM. Isso provavelmente é o mínimo que você deseja para um site _oficial_.
Para um site com visitação frequente, você definitivamente vai precisar de mais memória RAM (considere 2 GB como um bom ponto de partida) e possivelmente de mais poder de processamento (CPU), o que pode significar que você precisará ir para um sistema multiprocessado (SMP).
-Você também pode querer considerar um subsistema de disco rápido. As operações no repositório SVN requerem um subsistema de disco rápido (o RAID é altamente recomendado). Um controlador SCSI que possua um cache próprio também pode acelerar as coisas, já que a maioria desses serviços incorrem em um grande número de pequenas modificações no disco.
+Você também deve considerar um subsistema de disco rápido. As operações no repositório SVN requerem um subsistema de disco rápido (RAID é altamente recomendado). Um controlador SCSI que tenha seu próprio cache também pode acelerar as coisas, uma vez que a maioria desses serviços incorre em um grande número de pequenas modificações no disco.
[[mirror-services]]
=== Serviços para oferecer
-Todo site espelho é obrigado a disponibilizar um conjunto de serviços básicos. Em adição a estes serviços obrigatórios, existe um grande número de serviços opcionais aos quais o administrador do servidor pode optar por oferecer. Esta sessão irá detalhar quais serviços você pode oferecer, bem como implementá-los.
+Cada site espelho deve ter um conjunto de serviços básicos disponíveis. Além desses serviços obrigatórios, há vários serviços opcionais que os administradores de servidor podem escolher oferecer. Esta seção explica quais serviços você pode fornecer e como implementá-los.
[[mirror-serv-ftp]]
==== FTP (necessário para o conjunto de arquivos do FTP)
-Este é um dos serviços mais básicos, e ele é obrigatório em todos os sites espelhos que oferecem acesso público às distribuições via FTP. O acesso ao FTP deve ser anônimo, e não é permitido o uso de nenhum controle nas taxas de upload/download (o que seria uma coisa ridícula de qualquer maneira). Não é necessário ter o upload de arquivos habilitado (e isso _nunca_ deve ser permitido na área onde os arquivos do FreeBSD são mantidos). Os arquivos do FreeBSD devem ficar disponíveis sob o caminho [.filename]#/pub/FreeBSD#.
+Este é um dos serviços mais básicos e é necessário para cada espelho que oferece distribuições por meio de FTP publico. O acesso FTP deve ser anônimo e não são permitidas proporções de upload/download (algo ridículo de qualquer maneira). A capacidade de upload não é necessária (e _nunca_ deve ser permitida para o espaço de arquivos do FreeBSD). Além disso, os arquivos do FreeBSD devem estar disponíveis sob o caminho [.filename]#/pub/FreeBSD#.
-Existem diversos softwares disponíveis que podem ser configurados para operar como um servidor de FTP anônimo. Por exemplo (em ordem alfabética)
+Existem diversos softwares disponíveis que podem ser configurados para operar como um servidor de FTP anônimo. Por exemplo (em ordem alfabética).
-* `/usr/libexec/ftpd`: o próprio ftpd do FreeBSD pode ser usado. Não deixe de ler o manual do man:ftpd[8].
-* package:ftp/ncftpd[]: Um pacote comercial, grátis para uso educacional.
-* package:ftp/oftpd[]: Um ftpd projetado tendo a segurança como foco principal.
+* `/usr/libexec/ftpd`: O próprio ftpd do FreeBSD pode ser usado. Certifique-se de ler man:ftpd[8].
+* package:ftp/ncftpd[] Um pacote comercial, gratuito para uso educacional.
+* package:ftp/oftpd[]: Um servidor FTP projetado com segurança como foco principal.
* package:ftp/proftpd[]: Um ftpd modular e muito flexível.
-* package:ftp/pure-ftpd[]: Outro ftpd desenvolvido com segurança em mente.
-* package:ftp/twoftpd[]: Mais um ftpd desenvolvido com segurança em mente.
-* package:ftp/vsftpd[]: Um ftpd "muito seguro".
+* package:ftp/pure-ftpd[]: Outro servidor FTP desenvolvido com segurança em mente.
+* package:ftp/twoftpd[]: Como acima.
+* package:ftp/vsftpd[]: O ftpd "muito seguro".
-O ftpd nativo do FreeBSD, o proftpd, e talvez o ncftpd são alguns dos servidores de FTP mais utilizados. Os demais não possuem uma grande base de usuários entre os sites espelhos. Um item a ser considerado é que você pode precisar de flexibilidade para controlar quantas conexões simultâneas serão permitidas no servidor, limitando desta forma o consumo do seu link IP e dos demais recursos do sistema.
+O `ftpd` do FreeBSD, o `proftpd` e talvez o `ncftpd` estão entre os FTPds mais comumente usados. Os outros não têm uma grande base de usuários entre os sites espelho. Uma coisa a considerar é que você pode precisar de flexibilidade para limitar quantas conexões simultâneas são permitidas, limitando assim quanto de largura de banda de rede e recursos do sistema são consumidos.
[[mirror-serv-rsync]]
==== Rsync (opcional para o conjunto de arquivos do FTP)
-O rsync é muitas vezes oferecido para acesso ao conteúdo da área de FTP de um site espelho do FreeBSD, desta forma outros sites espelhos podem utilizar o seu sistema como fonte para se espelhar. O protocolo do rsync é diferente do FTP em muitos aspectos. Ele é muito mais amigável em relação ao consumo de banda IP, uma vez que quando um arquivo é alterado ao invés de transferí-lo por completo novamente, ele transfere apenas as diferenças entre as duas versões do arquivo. O rsync requer uma grande quantidade de memória para cada instância. A quantidade de memória alocada depende do tamanho do modulo sincronizado em termos do número de diretórios e de arquivos. O rsync pode utilizar `rsh` e o `ssh` (que agora é padrão) para transporte dos dados, ou então utilizar o seu próprio protocolo para acesso stand-alone (este é o método preferido para um servidor público de Rsync). Obrigatoriedade de autenticação, limites ao número de conexões simultâneas e outras restrições podem ser aplicadas. Há apenas um pacote de software disponível para se implementar um servidor de Rsync:
+O Rsync é frequentemente oferecido para acesso ao conteúdo da área FTP do FreeBSD, para que outros sites espelho possam usar seu sistema como fonte. O protocolo é diferente do FTP de muitas maneiras. É muito mais amigável para a largura de banda, pois apenas as diferenças entre os arquivos são transferidas em vez de arquivos inteiros quando são alterados. O Rsync requer uma quantidade significativa de memória para cada instância. O tamanho depende do tamanho do módulo sincronizado em termos do número de diretórios e arquivos. O Rsync pode usar `rsh` e `ssh` (agora padrão) como transporte ou usar seu próprio protocolo para acesso autônomo (este é o método preferido para servidores Rsync públicos). A autenticação, limites de conexão e outras restrições podem ser aplicadas. Há apenas um pacote de software disponível:
* package:net/rsync[]
[[mirror-serv-http]]
==== HTTP (necessário para as páginas web, opcional para o conjunto de arquivos do FTP)
-Se você deseja disponibilizar as páginas web do FreeBSD, você vai precisar instalar um servidor web. Opcionalmente você poderá oferecer acesso a sua árvore de FTP via HTTP. A escolha do software do servidor web é uma escolha do administrador do site espelho. As opções mais populares são:
+Se você deseja oferecer as páginas web do FreeBSD, precisará instalar um servidor web. Você pode opcionalmente oferecer o conjunto de arquivos FTP via HTTP. A escolha do software do servidor web é deixada a critério do administrador do espelho. Algumas das opções mais populares são:
-* package:www/apache24[]: O Apache é o servidor web mais amplamente utilizado na internet. Ele é usado extensivamente pelo projeto FreeBSD.
-* package:www/boa[]: O Boa é um servidor HTTP single-task. Ao contrário dos servidores Web tradicionais, o seu processo não se divide para cada conexão de entrada e nem cria muitas cópias de si mesmo para lidar com várias conexões. Entretanto, ele fornece um desempenho excelente para conteúdo puramente estático.
-* package:www/cherokee[]: O >Cherokee é um servidor web muito rápido, flexível e fácil de configurar. Ele suporta as tecnologias difundidas atualmente: FastCGI, SCGI, PHP, CGI, conexões criptografadas por SSL/TLS, vhosts, autenticação de usuários, codificação on the fly e balanceamento de carga. Ele também gera arquivos de log compatíveis com o Apache.
+* package:www/apache24[]: O Apache ainda é um dos servidores da Web mais amplamente implantados na Internet. Ele é usado extensivamente pelo Projeto FreeBSD.
+* package:www/boa[]: O Boa é um servidor HTTP de single-task. Ao contrário dos servidores web tradicionais, ele não faz um fork para cada conexão recebida, nem faz muitas cópias de si mesmo para lidar com várias conexões. contudo, ele deve fornecer um desempenho consideravelmente melhor para conteúdo puramente estático.
+* package:www/cherokee[]: O Cherokee é um servidor web muito rápido, flexível e fácil de configurar. Ele suporta as tecnologias amplamente utilizadas hoje em dia: FastCGI, SCGI, PHP, CGI, conexões criptografadas SSL/TLS, vhosts, autenticação de usuários, codificação on the fly e balanceamento de carga. Ele também gera arquivos de log compatíveis com o Apache.
* package:www/lighttpd[]: O lighttpd é um servidor web seguro, rápido, compatível com os padrões e muito flexível o qual foi otimizado para ambientes de alto desempenho. Tem um consumo de memória muito baixo em comparação com outros servidores Web, bem como um baixo consumo de CPU.
-* package:www/nginx[]: O nginx é um servidor web de alto desempenho com baixo consumo de memória e recursos-chave para construir uma infraestrutura web moderna e eficiente. Os recursos incluem um servidor HTTP, proxy reverso de HTTP e email, armazenamento em cache, balanceamento de carga, compactação, limitação de solicitações, multiplexação e reutilização de conexões, descarregamento de SSL e streaming de mídia por HTTP.
-* package:www/thttpd[]: Se você estiver servindo uma grande quantidade de conteúdo estático, você pode descobrir que usar uma aplicação como o thttpd é mais eficiente do que outros servidores web. Ele também é otimizado para ter um excelente desempenho no FreeBSD.
+* package:www/nginx[]: O nginx é um servidor web de borda de alta performance com uma pegada de memória baixa e recursos importantes para construir uma infraestrutura web moderna e eficiente. Os recursos incluem um servidor HTTP, proxy reverso HTTP e de e-mail, cache, balanceamento de carga, compressão, limitação de solicitações, multiplexação e reutilização de conexões, offload SSL e streaming de mídia HTTP.
+* package:www/thttpd[]: Se você vai servir uma grande quantidade de conteúdo estático, pode descobrir que usar um aplicativo como o thttpd é mais eficiente do que outros. Ele também é otimizado para ter um excelente desempenho no FreeBSD.
[[mirror-howto]]
== Como espelhar o FreeBSD
@@ -134,65 +151,86 @@ Ok, agora você conhece os requisitos e sabe como oferecer os serviços, mas nã
[[mirror-ftp-rsync]]
=== Espelhando o site FTP
-A área FTP possui a maior quantidade de dados a serem espelhados. Ela inclui os _conjuntos de distribuição_ necessários para a instalação em rede, os _branches_ que são snapshots das árvores de código fonte, as _Imagens ISO_ para gravar CD-ROMs com a distribuição de instalação, um sistema de arquivos ativo e um snapshot da árvore de ports. E claro, tudo isso para as várias versões do FreeBSD e diversas arquiteturas.
+A área FTP possui a maior quantidade de dados que precisa ser espelhada. Inclui os _conjuntos de distribuição_ necessários para instalação via rede, os _branches_, que são na verdade snapshots dos diretórios de código fonte, as _imagens ISO_ para gravar CD-ROMs com a distribuição de instalação, um sistema de arquivos live (ao vivo) e um snapshot da árvore de ports. Tudo, é claro, para várias versões do FreeBSD e várias arquiteturas.
-A melhor maneira de espelhar a área FTP é com o rsync. Você pode instalar o port package:net/rsync[] e então usar o rsync para sincronizar com seu host upstream. O rsync já foi mencionado em <<mirror-serv-rsync>>. Como o acesso rsync não é necessário, seu site de upstream preferido pode não permitir isso. Talvez você precise procurar um pouco mais para localizar um site que permita acesso por rsync.
+A melhor maneira de espelhar a área FTP é com o rsync. Você pode instalar o pacote pelo port: net/rsync[] e, em seguida, usar o rsync para sincronizar com seu host upstream. O rsync já foi mencionado em <<mirror-serv-rsync>>. Como o acesso rsync não é obrigatório, seu site upstream preferido pode não permiti-lo. Você pode precisar procurar um pouco para encontrar um site que permita o acesso rsync.
[NOTE]
====
-Como o número de clientes rsync terá um impacto significativo na performance do servidor, a maioria dos administradores impõe limitações em seus servidores. Para um espelho, você deve perguntar ao mantenedor do site com o qual você está sincronizando sobre sua política, e talvez pedir uma exceção para o seu host (já que você também é um site espelho).
+Como o número de clientes rsync terá um impacto significativo no processamento do servidor, a maioria dos administradores impõe limitações em seu servidor. Para um espelho, você deve perguntar ao mantenedor do site de onde está sincronizando sobre sua política e talvez pedir uma exceção para seu host (já que você é um espelho).
====
Um exemplo de linha de comando para espelhar o FreeBSD pode ser verificada abaixo:
-[source,shell]
+[source, shell]
....
% rsync -vaHz --delete rsync://ftp4.de.FreeBSD.org/FreeBSD/ /pub/FreeBSD/
....
-Consulte a documentação do rsync, que também está disponível em http://rsync.samba.org/[http://rsync.samba.org/], sobre as várias opções a serem usadas com o rsync. Se você sincronizar o módulo inteiro (diferentemente dos subdiretórios), esteja ciente de que o diretório do módulo (aqui "FreeBSD") não será criado, então você não pode omitir o diretório de destino. Além disso, você pode querer configurar um script que chame tal comando via man:cron[8].
+Consulte a documentação do rsync, que também está disponível em http://rsync.samba.org/[http://rsync.samba.org/], sobre as várias opções a serem usadas com o rsync. Se você sincronizar o módulo inteiro (ao contrário de subdiretórios), esteja ciente de que o diretório do módulo (aqui "FreeBSD") não será criado, portanto, você não pode omitir o diretório de destino. Além disso, você pode querer configurar um framework de script que chame esse comando via man:cron[8].
[[mirror-www]]
=== Espelhando as páginas WWW
-O site do FreeBSD deve ser espelhado apenas via rsync.
+[WARNING]
+====
+Desde a migração da documentação para Hugo/Asciidoctor em 25/01/2021, a sincronização do site com rsync não funciona mais.
+====
+
+Existem estudos em andamento para implementar um espelho do website com extref:{handbook}mirrors/[infraestrutura oficial].
-Uma linha de comando para espelhar o site do FreeBSD pode parecer com:
+Para os antigos espelhos do website, uma maneira de obter o espelhamento hoje em dia é construir o site localmente com o endereço correspondente em que será hospedado.
+[source, shell]
+....
+% cd website && env HUGO_baseURL="https://www.XX.freebsd.org/" make
+....
+
+Verifique mais detalhes sobre as ferramentas de construção no livro extref:{fdp-primer}overview/[Primer do Projeto de Documentação do FreeBSD para Novos Contribuidores, overview-quick-start].
+
+////
[source,shell]
....
% rsync -vaHz --delete rsync://bit0.us-west.freebsd.org/FreeBSD-www-data/ /usr/local/www/
....
+////
+
+[NOTE]
+====
+Observe que o site foi dividido em www.FreeBSD.org e docs.FreeBSD.org, e existem links entre eles; além disso, no momento, a variável `HUGO_baseURL` não cobrirá todos os links, dessa forma, o espelhamento do site não é encorajado.
+====
[[mirror-pkgs]]
=== Espelhando os Pacotes
-Devido a exigências muito altas de largura de banda, armazenamento e administração, o Projeto FreeBSD decidiu não permitir espelhos públicos de pacotes. Para sites com muitas máquinas, pode ser vantajoso executar um proxy HTTP para fazer cache do man:pkg[8]. Alternativamente, pacotes específicos e suas dependências podem ser baixados executando algo assim:
+Devido aos requisitos muito altos de largura de banda, armazenamento e administração, o Projeto FreeBSD decidiu não permitir espelhos públicos de pacotes pré compilados. Para sites com muitas máquinas, pode ser vantajoso executar um proxy HTTP com cache habilitado para o processo man:pkg[8]. Alternativamente, pacotes específicos e suas dependências podem ser baixados executando algo como o seguinte:
-[source,shell]
+[source, shell]
....
% pkg fetch -d -o /usr/local/mirror vim
....
Quando esses pacotes forem baixados, os metadados do repositório devem ser gerados executando:
-[source,shell]
+[source, shell]
....
% pkg repo /usr/local/mirror
....
-Uma vez que os pacotes tenham sido baixados e os metadados para o repositório tenham sido gerados, sirva os pacotes até as máquinas clientes via HTTP. Para obter informações adicionais, consulte as páginas de manual do man:pkg[8], mais especificamente a página man:pkg-repo[8].
+Depois que os pacotes forem baixados e os metadados do repositório forem gerados, sirva os pacotes para as máquinas clientes via HTTP. Para obter informações adicionais, consulte as páginas man do man:pkg[8], especificamente a página man:pkg-repo[8].
[[mirror-how-often]]
-=== Com que frequência eu devo atualizar o conteúdo do meu espelho?
+=== Com que frequência eu devo atualizar o conteúdo do meu site espelho?
-Todo site espelho deve ser atualizado no mínimo uma vez por dia. Certamente, um script com bloqueio para impedir que várias execuções ocorram ao mesmo tempo será necessário para executar a partir do man:cron[8]. Como quase todo administrador faz isso à sua maneira, instruções específicas não podem ser fornecidas. Mas poderia ser algo como:
+Todo espelho deve ser atualizado pelo menos uma vez por dia. Certamente, um script com bloqueio para evitar que várias execuções ocorram ao mesmo tempo será necessário para ser executado pelo man:cron[8]. Como cada administrador faz isso de sua própria maneira, instruções específicas não podem ser fornecidas. Este processo poderia funcionar , por exemplo, desta forma:
[.procedure]
-. Coloque o comando para executar seu aplicativo de espelhamento em um script. Recomenda-se o uso de um script simples `/bin/sh`.
+====
+. Coloque o comando para executar sua aplicação de espelhamento em um script. O uso de um script `/bin/sh` simples é recomendado.
. Adicione alguns redirecionamentos de saída para que as mensagens de diagnóstico sejam registradas em um arquivo.
. Teste se o seu script funciona. Verifique os logs.
-. Use o man:crontab[1] para adicionar o script ao man:crontab[5] do usuário apropriado. Este deve ser um usuário diferente daquele sob o qual o daemon FTP está sendo executado, de forma que, se as permissões de arquivo dentro de sua área FTP não forem legíveis por todos, esses arquivos não poderão ser acessados ​​por FTP anônimo. Isto é usado para fazer o "stage" de uma release - assegurando que todos os sites espelhos oficiais tenham todos os arquivos necessários da release no dia do lançamento.
+. Use o man:crontab[1] para adicionar o script ao man:crontab[5] do usuário apropriado. Este deve ser um usuário diferente do que seu daemon FTP é executado, para que, se as permissões de arquivo dentro de sua área FTP não forem legíveis por todo o mundo, esses arquivos não possam ser acessados pelo FTP anônimo. Isso é usado para "preparar" as releases - garantindo que todos os sites de espelho oficiais tenham todos os arquivos da release necessários no dia do seu lançamento.
+====
Aqui estão alguns agendamentos recomendados:
@@ -200,43 +238,45 @@ Aqui estão alguns agendamentos recomendados:
* Páginas WWW: diariamente
[[mirror-where]]
-== De onde espelhar
+== De onde fazer o espelhamento
-Esta é uma questão importante. Então, esta seção vai gastar algum esforço para explicar mais a fundo. Nós diremos isso várias vezes: sob nenhuma circunstância você deve espelhar a partir do `ftp.FreeBSD.org`.
+Esta é uma questão importante. Portanto, esta seção dedicará algum esforço para explicar o os motivos que estão por trás desta orientação. Diremos isso várias vezes: em nenhuma circunstância você deve espelhar a partir de `ftp.FreeBSD.org`.
[[mirror-where-organization]]
=== Algumas palavras sobre a organização
-Os espelhos são organizados por país. Todos os espelhos oficiais possuem uma entrada de DNS no formato `ftpN.CC.FreeBSD.org`. O _CC_ (ou seja, o código do país) é o _domínio de nível superior_ (TLD) do país onde esse espelho está localizado. _N_ é um número, dizendo que o host seria o espelho _Nth_ daquele país. (O mesmo se aplica a `wwwN.CC.FreeBSD.org`, etc.) Há espelhos sem partes __CC__. Esses são os sites espelhos que são muito bem conectados e permitem um grande número de usuários simultâneos. O `ftp.FreeBSD.org` é na verdade duas máquinas, uma atualmente localizada na Dinamarca e outra nos Estados Unidos. Este _NÃO_ é um site mestre e nunca deve ser usado para se espelhar. Muitos documentos on-line conduzem os usuários "interativos" para `ftp.FreeBSD.org`, portanto os sistemas automatizados de espelhamento devem utilizar uma máquina diferente para se espelhar.
+Os espelhos são organizados por país. Todos os espelhos oficiais têm uma entrada DNS com a forma `ftpN.CC.FreeBSD.org`. _CC_ (ou seja, código do país) é o _domínio de nível superior_ (TLD) do país onde esse espelho está localizado. _N_ é um número, indicando que o host seria o _N-ésimo_ espelho nesse país. (O mesmo se aplica a `wwwN.CC.FreeBSD.org`, etc.) Existem espelhos sem a parte _CC_. Esses são os sites de espelho que estão muito bem conectados e permitem um grande número de usuários simultâneos. O `ftp.FreeBSD.org` na verdade são duas máquinas, uma atualmente localizada na Dinamarca e outra nos Estados Unidos. Não é um site principal e nunca deve ser usado para se espelhar a partir dele. Muita documentação online direciona usuários "interativos" para `ftp.FreeBSD.org`, portanto, sistemas automatizados de espelhamento devem encontrar um servidor diferente para espelhar.
-Além disso, existe uma hierarquia de espelhos, descrita em termos de __camadas__. Os sites mestres não são referenciados, mas podem ser descritos como __Tier-0__. Espelhos que espelham desses sites podem ser considerados __Tier-1__, espelhos de __Tier-1__mirrors, são__Tier-2__, etc. Os sites oficiais são encorajados a ter um _nível_ baixo, mas quanto mais baixo o nível, maiores os requisitos em termos, conforme descrito em <<mirror-requirements>>. Também o acesso a espelhos de baixo nível pode ser restrito, e o acesso a sites mestres é definitivamente restrito. A __tier__-hierarchy não é refletida pelo DNS e geralmente não é documentada em nenhum lugar, exceto nos sites mestres. No entanto, os espelhos oficiais com números baixos como 1-4, geralmente são _Tier-1_ (isso é apenas uma dica, e não há regra).
+Além disso, existe uma hierarquia de espelhos, que é descrita em termos de __níveis__. Os sites principais não são mencionados, mas podem ser descritos como __Nível-0__. Espelhos que espelham a partir desses sites podem ser considerados __Nível-1__, espelhos de espelhos __Nível-1__ são __Nível-2__, etc. Sites oficiais são incentivados a ter um nível baixo, mas quanto mais baixo o nível, maiores os requisitos como descrito em <<mirror-requirements>>. O acesso a espelhos de baixo nível pode ser restrito e o acesso a sites principais é definitivamente restrito. A hierarquia de __nível__ não é refletida pelo DNS e geralmente não é documentada em nenhum lugar, exceto para os sites principais. No entanto, espelhos oficiais com números baixos como 1-4, geralmente são __Nível-1__ (isso é apenas uma dica aproximada e não há regra).
[[mirror-where-where]]
=== Ok, mas de onde devo baixar os arquivos agora?
-Em nenhuma circunstância você deve espelhar a partir de `ftp.FreeBSD.org`. A resposta simples é: do site que está mais próximo de você em termos de Internet ou que lhe ofereça o acesso mais rápido.
+Em nenhuma circunstância você deve espelhar a partir de `ftp.FreeBSD.org`. A resposta curta é: a partir do site que estiver mais próximo de você em termos de Internet ou que oferecer o acesso mais rápido.
[[mirror-where-simple]]
==== Eu só quero espelhar de algum lugar!
-Se você não tem nenhuma intenção ou requisito especial, a declaração em <<mirror-where-where>> se aplica. Isso significa:
+Se você não tem intenções ou requisitos especiais, a afirmação em <<mirror-where-where>> se aplica. Isso significa:
[.procedure]
-. Verifique quais fornecem acesso mais rápido (número de saltos, tempos de ida e volta) e ofereçam os serviços que você pretende usar (como rsync).
+====
+. Verifique quais sites oferecem o acesso mais rápido (número de saltos, tempos de ida e volta) e oferecem os serviços que você pretende usar (como rsync).
. Entre em contato com os administradores do site escolhido, informando sua solicitação e perguntando sobre seus termos e políticas.
-. Configure o seu espelho conforme descrito acima.
+. Configure o seu site espelho conforme descrito acima.
+====
[[mirror-where-official]]
-==== Eu sou um espelho oficial, qual é o site certo para mim?
+==== Sou um site espelho oficial, qual é o site certo para mim?
-Em geral, a descrição em <<mirror-where-simple>> ainda se aplica. É claro que você pode querer colocar algum peso no fato de que seu upstream deve ser de nível baixo. Existem algumas outras considerações sobre os espelhos _oficiais_ que são descritos em <<mirror-official>>.
+Em geral, a descrição em <<mirror-where-simple>> ainda se aplica. Claro, você pode querer dar mais importância ao fato de que o site upstream deve ter um nível baixo. Existem algumas outras considerações sobre espelhos _oficiais_ que são descritas em <<mirror-official>>.
[[mirror-where-master]]
==== Eu quero acessar os sites principais!
-Se você tiver boas razões e pré-requisitos, poderá querer e obter acesso a um dos sites mestres. O acesso a esses sites é geralmente restrito e existem políticas especiais para acesso. Se você já é um espelho __oficial__, isso certamente irá ajudar você a obter acesso. Em qualquer outro caso, certifique-se de que seu país realmente precisa de outro espelho. Se já tiver três ou mais, pergunte ao "administrador de região"(mailto:hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) ou http://lists.FreeBSD.org/mailman/listinfo/freebsd-hubs[Listas de discussão de sites espelho do FreeBSD] primeiro.
+Se você tiver bons motivos e bons pré-requisitos, poderá querer e obter acesso a um dos sites principais. O acesso a esses sites geralmente é restrito e existem políticas especiais para acesso. Se você já é um espelho _oficial_, certamente isso ajuda a obter acesso. Em qualquer outro caso, certifique-se de que seu país realmente precisa de outro espelho. Se já tiver três ou mais, pergunte ao "administrador de zona" (mailto:hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) ou na {freebsd-hubs} primeiro.
-Quem ajudou você a se tornar um espelho _oficial_ deve ajudar você a obter acesso a um host de upstream apropriado, seja um dos sites mestres ou um site Tier-1 adequado. Caso contrário, você pode enviar um email para mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org] para solicitar ajuda com isso.
+Quem o ajudou a se tornar um espelho _oficial_ deve ter lhe ajudado a obter acesso a um host upstream apropriado, seja um dos sites principais ou um site Tier-1 adequado. Se não, você pode enviar um e-mail para mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org] para solicitar ajuda com isso.
Existe um site principal para o conjunto de arquivos FTP.
@@ -245,44 +285,44 @@ Existe um site principal para o conjunto de arquivos FTP.
Este é o site principal do conjunto de arquivos FTP.
-O `ftp-master.FreeBSD.org` fornece acesso por rsync, além do acesso normal por FTP. Consulte <<mirror-ftp-rsync>>.
+O `ftp-master.FreeBSD.org` disponibiliza acesso via rsync, além do FTP. Consulte <<mirror-ftp-rsync>> para obter mais informações.
-Os espelhos também são encorajados a permitir acesso por rsync para o conteúdo FTP, já que eles são espelhos de __Tier-1__.
+Também é encorajado que os espelhos permitam o acesso ao rsync para o conteúdo FTP, já que eles são espelhos __Tier-1__.
[[mirror-official]]
== Espelhos Oficiais
Espelhos oficiais são os espelhos que
-* a) tem uma entrada de DNS `FreeBSD.org` (geralmente um CNAME).
+* a) ter uma entrada DNS `FreeBSD.org` (geralmente um CNAME).
* b) são listados como um espelho oficial na documentação do FreeBSD (como no Handbook).
-Até agora, para distinguir espelhos oficiais. Espelhos oficiais não são necessariamente espelhos __Tier-1__. No entanto, você provavelmente não encontrará um espelho _Tier-1_ que também não é oficial.
+Até agora, para distinguir espelhos oficiais. Espelhos oficiais não necessariamente são espelhos __Tier-1__. No entanto, provavelmente você não encontrará um espelho __Tier-1__ que não seja oficial.
[[mirror-official-requirements]]
=== Requisitos especiais para sites espelhos oficiais (Tier-1)
-Não é tão fácil declarar os requisitos para todos os sites espelhos oficiais, uma vez que o projeto é um pouco tolerante aqui. É mais fácil dizer o que um _site espelho oficial Tier-1_ precisa ter. Todos os outros sites espelhos oficiais podem considerar isto como um grande __deve__.
+Não é tão fácil estabelecer requisitos para todos os espelhos oficiais, já que o projeto é bastante tolerante nesse aspecto. É mais fácil dizer o que é exigido dos _espelhos oficiais de nível 1_. Todos os outros espelhos oficiais devem considerar isso uma grande __recomendação__.
Os sites espelhos Tier-1 precisam:
* ter o conjunto completo de arquivos
* permitir acesso a outros sites espelho
-* fornecer acesso por FTP e rsync
+* fornecer acesso FTP e rsync
-Além disso, os administradores devem estar inscritos nas http://lists.FreeBSD.org/mailman/listinfo/freebsd-hubs[listas de discussão de sites espelho do FreeBSD]. Consulte link:{handbook}#eresources-mail[este link] para obter detalhes em como se inscrever.
+Além disso, os administradores devem se inscrever no {freebsd-hubs}. Consulte extref:{handbook}[este link, eresources-mail] para obter detalhes sobre como se inscrever.
[IMPORTANT]
====
-É _muito_ importante para um administrador de hub, especialmente administradores de hub de Tier-1, verificar o https://www.FreeBSD.org/releng/[calendário de lançamentos] para a próxima versão do FreeBSD. Isto é importante porque lhe dirá quando o próximo lançamento está programado para sair, e assim lhe dará tempo para se preparar para o grande pico de tráfego que virá.
+É _muito_ importante para um administrador de um site espelho, especialmente administradores de espelhos Tier-1, verificar o https://www.FreeBSD.org/releng/[calendário de lançamento] para o próximo release do FreeBSD. Isso é importante porque informará quando o próximo release está programado para sair, dando tempo para se preparar para o grande aumento de tráfego que o segue.
-Também é importante que os administradores do hub tentem manter seus espelhos o mais atualizados possível (novamente, ainda mais importante para os espelhos Tier-1). Se o Mirror1 não for atualizado por um tempo, os espelhos de camada inferior começarão a espelhar os dados antigos do Mirror1 e, portanto, iniciará uma espiral descendente... Mantenha seus espelhos atualizados!
+É importante também que os administradores dos hubs tentem manter seus espelhos atualizados o máximo possível (novamente, ainda mais crucial para os espelhos Tier-1). Se o Mirror1 não atualizar por um tempo, os espelhos de nível inferior começarão a espelhar dados antigos do Mirror1 e, assim, começa uma espiral descendente... Mantenha seus espelhos atualizados!
====
[[mirror-official-become]]
=== Como se tornar um site espelho oficial?
-Não estamos aceitando novos sites espelhos neste momento.
+Por favor, entre em contato com os Administradores do Cluster conforme documentado em https://www.FreeBSD.org/administration/#t-clusteradm.
[[mirror-statpages]]
== Algumas estatísticas dos sites espelho
@@ -292,5 +332,5 @@ Aqui estão os links para as páginas de estatísticas dos seus sites espelho fa
[[mirror-statpagesftp]]
=== Estatísticas do site FTP
-* ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD.org] - http://www.rhnet.is/status/draupnir/draupnir.html[(Largura de Banda)] http://www.rhnet.is/status/ftp/ftp-notendur.html[(Processos FTP)] http://www.rhnet.is/status/ftp/http-notendur.html[(Processos HTTP)]
-* ftp2.ru.FreeBSD.org - mailto:mirror@macomnet.ru[mirror@macomnet.ru] - http://mirror.macomnet.net/mrtg/mirror.macomnet.net_195.128.64.25.html[(Largura de Banda)] http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc.html[(Usuários HTTP e FTP)]
+* ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD.org] - http://www.rhnet.is/status/draupnir/draupnir.html[ (Largura de banda)] http://www.rhnet.is/status/ftp/ftp-notendur.html[(Processos FTP)] http://www.rhnet.is/status/ftp/http-notendur.html[(Processos HTTP)]
+* ftp2.ru.FreeBSD.org - mailto:mirror@macomnet.ru[mirror@macomnet.ru] - http://mirror.macomnet.net/mrtg/mirror.macomnet.net_195.128.64.25.html[(Largura de banda)] http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc.html[(Usuários de HTTP e FTP)]
diff --git a/documentation/content/pt-br/articles/hubs/_index.po b/documentation/content/pt-br/articles/hubs/_index.po
new file mode 100644
index 0000000000..f0dd7ffa2a
--- /dev/null
+++ b/documentation/content/pt-br/articles/hubs/_index.po
@@ -0,0 +1,1219 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+# Wendell Borges <perlporter@gmail.com>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-09-09 18:13-0300\n"
+"PO-Revision-Date: 2023-09-10 13:34+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articleshubs_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/hubs/_index.adoc:1
+#, no-wrap
+msgid "The all in one guide for mirroring the FreeBSD website, FTP servers, and more"
+msgstr "O guia completo para espelhar o site do FreeBSD, servidores FTP e muito mais"
+
+#. type: Title =
+#: documentation/content/en/articles/hubs/_index.adoc:1
+#: documentation/content/en/articles/hubs/_index.adoc:17
+#, no-wrap
+msgid "Mirroring FreeBSD"
+msgstr "Espelhando o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:50
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:52
+msgid ""
+"An in-progress article on how to mirror FreeBSD, aimed at hub administrators."
+msgstr ""
+"Um artigo em andamento sobre como espelhar o FreeBSD, destinado à "
+"administradores de hubs."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:54
+msgid "'''"
+msgstr "'''"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:60
+msgid "We are not accepting new community mirrors at this time."
+msgstr "Não estamos aceitando novos espelhos da comunidade neste momento."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:63
+#, no-wrap
+msgid "Contact Information"
+msgstr "Informações de contato"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:67
+msgid ""
+"The Mirror System Coordinators can be reached through email at mailto:mirror-"
+"admin@FreeBSD.org[mirror-admin@FreeBSD.org]. There is also a {freebsd-hubs}."
+msgstr ""
+"Os coordenadores do Sistema de Espelhamento podem ser contatados por e-mail "
+"através de mailto:mirror-admin@FreeBSD.org[mirror-admin@FreeBSD.org]. Também "
+"existe a {freebsd-hubs}."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:69
+#, no-wrap
+msgid "Requirements for FreeBSD Mirrors"
+msgstr "Requisitos para um site espelho do FreeBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:72
+#, no-wrap
+msgid "Disk Space"
+msgstr "Espaço em disco"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:82
+msgid ""
+"Disk space is one of the most important requirements. Depending on the set "
+"of releases, architectures, and degree of completeness you want to mirror, a "
+"huge amount of disk space may be consumed. Also keep in mind that "
+"_official_ mirrors are probably required to be complete. The web pages "
+"should always be mirrored completely. Also note that the numbers stated "
+"here are reflecting the current state (at {rel120-current}-RELEASE/{rel113-"
+"current}-RELEASE). Further development and releases will only increase the "
+"required amount. Also make sure to keep some (ca. 10-20%) extra space "
+"around just to be sure. Here are some approximate figures:"
+msgstr ""
+"O espaço em disco é um dos requisitos mais importantes. Dependendo do "
+"conjunto de versões, arquiteturas e grau de completude que você deseja "
+"espelhar, uma enorme quantidade de espaço em disco pode ser consumida. Além "
+"disso, espelhos _oficiais_ provavelmente precisam ser completos. As páginas "
+"da web devem sempre ser espelhadas completamente. Observe também que os "
+"números aqui declarados refletem o estado atual (em {rel120-current}-RELEASE/"
+"{rel113-current}-RELEASE). O desenvolvimento e os lançamentos futuros só "
+"aumentarão a quantidade necessária. Certifique-se também de manter cerca de "
+"10-20% de espaço extra apenas para garantir. Aqui estão alguns números "
+"aproximados:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:84
+msgid "Full FTP Distribution: 1.4 TB"
+msgstr "Distribuição FTP completa: 1.4 TB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:85
+msgid "CTM deltas: 10 GB"
+msgstr "Deltas do CTM: 10 GB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:86
+msgid "Web pages: 1GB"
+msgstr "Páginas Web: 1GB"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:88
+msgid ""
+"The current disk usage of FTP Distribution can be found at link:ftp://ftp."
+"FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir."
+"sizes]."
+msgstr ""
+"O uso atual de disco da distribuição FTP pode ser encontrado em link:ftp://"
+"ftp.FreeBSD.org/pub/FreeBSD/dir.sizes[ftp://ftp.FreeBSD.org/pub/FreeBSD/dir."
+"sizes]."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:90
+#, no-wrap
+msgid "Network Connection/Bandwidth"
+msgstr "Conexão de Rede/Largura de Banda"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:97
+msgid ""
+"Of course, you need to be connected to the Internet. The required bandwidth "
+"depends on your intended use of the mirror. If you just want to mirror some "
+"parts of FreeBSD for local use at your site/intranet, the demand may be much "
+"smaller than if you want to make the files publicly available. If you "
+"intend to become an official mirror, the bandwidth required will be even "
+"higher. We can only give rough estimates here:"
+msgstr ""
+"Claro, você precisa estar conectado à Internet. A largura de banda "
+"necessária depende do uso pretendido do site espelho. Se você quiser "
+"espelhar apenas algumas partes do FreeBSD para uso na sua rede local/"
+"intranet, a demanda pode ser muito menor do que se você quiser "
+"disponibilizar os arquivos publicamente. Se você pretende se tornar um site "
+"espelho oficial, a largura de banda necessária será ainda maior. Podemos "
+"apenas dar estimativas aproximadas aqui:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:99
+msgid ""
+"Local site, no public access: basically no minimum, but < 2 Mbps could make "
+"syncing too slow."
+msgstr ""
+"Site local, sem acesso público: basicamente não há mínimo, mas menos de 2 "
+"Mbps pode tornar a sincronização muito lenta."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:100
+msgid "Unofficial public site: 34 Mbps is probably a good start."
+msgstr "Site público não oficial: 34 Mbps provavelmente é um bom começo."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:101
+msgid ""
+"Official site: > 100 Mbps is recommended, and your host should be connected "
+"as close as possible to your border router."
+msgstr ""
+"Site oficial: é recomendado ter mais de 100 Mbps, e seu host deve estar "
+"conectado o mais próximo possível do seu roteador de borda."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:103
+#, no-wrap
+msgid "System Requirements, CPU, RAM"
+msgstr "Requisitos de Sistema, CPU, RAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:111
+msgid ""
+"One thing this depends on the expected number of clients, which is "
+"determined by the server's policy. It is also affected by the types of "
+"services you want to offer. Plain FTP or HTTP services may not require a "
+"huge amount of resources. Watch out if you provide rsync. This can have a "
+"huge impact on CPU and memory requirements as it is considered a memory "
+"hog. The following are just examples to give you a very rough hint."
+msgstr ""
+"Uma coisa que isso depende é o número esperado de clientes, que é "
+"determinado pela política do servidor. Também é afetado pelos tipos de "
+"serviços que você deseja oferecer. Serviços FTP ou HTTP simples podem não "
+"requerer uma quantidade enorme de recursos. Tenha cuidado se você fornecer o "
+"rsync. Isso pode ter um grande impacto nos requisitos de CPU e memória, pois "
+"ele é considerado um devorador de memória. Os dados seguintes são apenas "
+"exemplos para dar uma ideia aproximada."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:114
+msgid ""
+"For a moderately visited site that offers rsync, you might consider a "
+"current CPU with around 800MHz - 1 GHz, and at least 512MB RAM. This is "
+"probably the minimum you want for an _official_ site."
+msgstr ""
+"Para um site moderadamente visitado que oferece rsync, você pode considerar "
+"uma CPU atual com cerca de 800 MHz - 1 GHz e pelo menos 512MB de RAM. Isso "
+"provavelmente é o mínimo que você deseja para um site _oficial_."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:116
+msgid ""
+"For a frequently used site you definitely need more RAM (consider 2GB as a "
+"good start) and possibly more CPU, which could also mean that you need to go "
+"for a SMP system."
+msgstr ""
+"Para um site com visitação frequente, você definitivamente vai precisar de "
+"mais memória RAM (considere 2 GB como um bom ponto de partida) e "
+"possivelmente de mais poder de processamento (CPU), o que pode significar "
+"que você precisará ir para um sistema multiprocessado (SMP)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:120
+msgid ""
+"You also want to consider a fast disk subsystem. Operations on the SVN "
+"repository require a fast disk subsystem (RAID is highly advised). A SCSI "
+"controller that has a cache of its own can also speed up things since most "
+"of these services incur a large number of small modifications to the disk."
+msgstr ""
+"Você também deve considerar um subsistema de disco rápido. As operações no "
+"repositório SVN requerem um subsistema de disco rápido (RAID é altamente "
+"recomendado). Um controlador SCSI que tenha seu próprio cache também pode "
+"acelerar as coisas, uma vez que a maioria desses serviços incorre em um "
+"grande número de pequenas modificações no disco."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:122
+#, no-wrap
+msgid "Services to Offer"
+msgstr "Serviços para oferecer"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:127
+msgid ""
+"Every mirror site is required to have a set of core services available. In "
+"addition to these required services, there are a number of optional services "
+"that server administrators may choose to offer. This section explains which "
+"services you can provide and how to go about implementing them."
+msgstr ""
+"Cada site espelho deve ter um conjunto de serviços básicos disponíveis. Além "
+"desses serviços obrigatórios, há vários serviços opcionais que os "
+"administradores de servidor podem escolher oferecer. Esta seção explica "
+"quais serviços você pode fornecer e como implementá-los."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:129
+#, no-wrap
+msgid "FTP (required for FTP Fileset)"
+msgstr "FTP (necessário para o conjunto de arquivos do FTP)"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:135
+msgid ""
+"This is one of the most basic services, and it is required for each mirror "
+"offering public FTP distributions. FTP access must be anonymous, and no "
+"upload/download ratios are allowed (a ridiculous thing anyway). Upload "
+"capability is not required (and _must_ never be allowed for the FreeBSD file "
+"space). Also the FreeBSD archive should be available under the path [."
+"filename]#/pub/FreeBSD#."
+msgstr ""
+"Este é um dos serviços mais básicos e é necessário para cada espelho que "
+"oferece distribuições por meio de FTP publico. O acesso FTP deve ser anônimo "
+"e não são permitidas proporções de upload/download (algo ridículo de "
+"qualquer maneira). A capacidade de upload não é necessária (e _nunca_ deve "
+"ser permitida para o espaço de arquivos do FreeBSD). Além disso, os arquivos "
+"do FreeBSD devem estar disponíveis sob o caminho [.filename]#/pub/FreeBSD#."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:137
+msgid ""
+"There is a lot of software available which can be set up to allow anonymous "
+"FTP (in alphabetical order)."
+msgstr ""
+"Existem diversos softwares disponíveis que podem ser configurados para "
+"operar como um servidor de FTP anônimo. Por exemplo (em ordem alfabética)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:139
+msgid ""
+"`/usr/libexec/ftpd`: FreeBSD's own ftpd can be used. Be sure to read man:"
+"ftpd[8]."
+msgstr ""
+"`/usr/libexec/ftpd`: O próprio ftpd do FreeBSD pode ser usado. Certifique-se "
+"de ler man:ftpd[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:140
+msgid "package:ftp/ncftpd[]: A commercial package, free for educational use."
+msgstr ""
+"package:ftp/ncftpd[] Um pacote comercial, gratuito para uso educacional."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:141
+msgid "package:ftp/oftpd[]: An ftpd designed with security as a main focus."
+msgstr ""
+"package:ftp/oftpd[]: Um servidor FTP projetado com segurança como foco "
+"principal."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:142
+msgid "package:ftp/proftpd[]: A modular and very flexible ftpd."
+msgstr "package:ftp/proftpd[]: Um ftpd modular e muito flexível."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:143
+msgid "package:ftp/pure-ftpd[]: Another ftpd developed with security in mind."
+msgstr ""
+"package:ftp/pure-ftpd[]: Outro servidor FTP desenvolvido com segurança em "
+"mente."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:144
+msgid "package:ftp/twoftpd[]: As above."
+msgstr "package:ftp/twoftpd[]: Como acima."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:145
+msgid "package:ftp/vsftpd[]: The \"very secure\" ftpd."
+msgstr "package:ftp/vsftpd[]: O ftpd \"muito seguro\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:149
+msgid ""
+"FreeBSD's `ftpd`, `proftpd` and maybe `ncftpd` are among the most commonly "
+"used FTPds. The others do not have a large userbase among mirror sites. "
+"One thing to consider is that you may need flexibility in limiting how many "
+"simultaneous connections are allowed, thus limiting how much network "
+"bandwidth and system resources are consumed."
+msgstr ""
+"O `ftpd` do FreeBSD, o `proftpd` e talvez o `ncftpd` estão entre os FTPds "
+"mais comumente usados. Os outros não têm uma grande base de usuários entre "
+"os sites espelho. Uma coisa a considerar é que você pode precisar de "
+"flexibilidade para limitar quantas conexões simultâneas são permitidas, "
+"limitando assim quanto de largura de banda de rede e recursos do sistema são "
+"consumidos."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:151
+#, no-wrap
+msgid "Rsync (optional for FTP Fileset)"
+msgstr "Rsync (opcional para o conjunto de arquivos do FTP)"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:161
+msgid ""
+"Rsync is often offered for access to the contents of the FTP area of "
+"FreeBSD, so other mirror sites can use your system as their source. The "
+"protocol is different from FTP in many ways. It is much more bandwidth "
+"friendly, as only differences between files are transferred instead of whole "
+"files when they change. Rsync does require a significant amount of memory "
+"for each instance. The size depends on the size of the synced module in "
+"terms of the number of directories and files. Rsync can use `rsh` and `ssh` "
+"(now default) as a transport, or use its own protocol for stand-alone access "
+"(this is the preferred method for public rsync servers). Authentication, "
+"connection limits, and other restrictions may be applied. There is just one "
+"software package available:"
+msgstr ""
+"O Rsync é frequentemente oferecido para acesso ao conteúdo da área FTP do "
+"FreeBSD, para que outros sites espelho possam usar seu sistema como fonte. O "
+"protocolo é diferente do FTP de muitas maneiras. É muito mais amigável para "
+"a largura de banda, pois apenas as diferenças entre os arquivos são "
+"transferidas em vez de arquivos inteiros quando são alterados. O Rsync "
+"requer uma quantidade significativa de memória para cada instância. O "
+"tamanho depende do tamanho do módulo sincronizado em termos do número de "
+"diretórios e arquivos. O Rsync pode usar `rsh` e `ssh` (agora padrão) como "
+"transporte ou usar seu próprio protocolo para acesso autônomo (este é o "
+"método preferido para servidores Rsync públicos). A autenticação, limites de "
+"conexão e outras restrições podem ser aplicadas. Há apenas um pacote de "
+"software disponível:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:163
+msgid "package:net/rsync[]"
+msgstr "package:net/rsync[]"
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:165
+#, no-wrap
+msgid "HTTP (required for Web Pages, Optional for FTP Fileset)"
+msgstr "HTTP (necessário para as páginas web, opcional para o conjunto de arquivos do FTP)"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:171
+msgid ""
+"If you want to offer the FreeBSD web pages, you will need to install a web "
+"server. You may optionally offer the FTP fileset via HTTP. The choice of "
+"web server software is left up to the mirror administrator. Some of the "
+"most popular choices are:"
+msgstr ""
+"Se você deseja oferecer as páginas web do FreeBSD, precisará instalar um "
+"servidor web. Você pode opcionalmente oferecer o conjunto de arquivos FTP "
+"via HTTP. A escolha do software do servidor web é deixada a critério do "
+"administrador do espelho. Algumas das opções mais populares são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:173
+msgid ""
+"package:www/apache24[]: Apache is still one of the most widely deployed web "
+"servers on the Internet. It is used extensively by the FreeBSD Project."
+msgstr ""
+"package:www/apache24[]: O Apache ainda é um dos servidores da Web mais "
+"amplamente implantados na Internet. Ele é usado extensivamente pelo Projeto "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:174
+msgid ""
+"package:www/boa[]: Boa is a single-tasking HTTP server. Unlike traditional "
+"web servers, it does not fork for each incoming connection, nor does it fork "
+"many copies of itself to handle multiple connections. Although, it should "
+"provide considerably great performance for purely static content."
+msgstr ""
+"package:www/boa[]: O Boa é um servidor HTTP de single-task. Ao contrário dos "
+"servidores web tradicionais, ele não faz um fork para cada conexão recebida, "
+"nem faz muitas cópias de si mesmo para lidar com várias conexões. contudo, "
+"ele deve fornecer um desempenho consideravelmente melhor para conteúdo "
+"puramente estático."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:175
+msgid ""
+"package:www/cherokee[]: Cherokee is a very fast, flexible and easy to "
+"configure web server. It supports the widespread technologies nowadays: "
+"FastCGI, SCGI, PHP, CGI, SSL/TLS encrypted connections, vhosts, users "
+"authentication, on the fly encoding and load balancing. It also generates "
+"Apache compatible log files."
+msgstr ""
+"package:www/cherokee[]: O Cherokee é um servidor web muito rápido, flexível "
+"e fácil de configurar. Ele suporta as tecnologias amplamente utilizadas hoje "
+"em dia: FastCGI, SCGI, PHP, CGI, conexões criptografadas SSL/TLS, vhosts, "
+"autenticação de usuários, codificação on the fly e balanceamento de carga. "
+"Ele também gera arquivos de log compatíveis com o Apache."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:176
+msgid ""
+"package:www/lighttpd[]: lighttpd is a secure, fast, compliant and very "
+"flexible web server which has been optimized for high-performance "
+"environments. It has a very low memory footprint compared to other web "
+"servers and takes care of cpu-load."
+msgstr ""
+"package:www/lighttpd[]: O lighttpd é um servidor web seguro, rápido, "
+"compatível com os padrões e muito flexível o qual foi otimizado para "
+"ambientes de alto desempenho. Tem um consumo de memória muito baixo em "
+"comparação com outros servidores Web, bem como um baixo consumo de CPU."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:177
+msgid ""
+"package:www/nginx[]: nginx is a high performance edge web server with a low "
+"memory footprint and key features to build a modern and efficient web "
+"infrastructure. Features include a HTTP server, HTTP and mail reverse proxy, "
+"caching, load balancing, compression, request throttling, connection "
+"multiplexing and reuse, SSL offload and HTTP media streaming."
+msgstr ""
+"package:www/nginx[]: O nginx é um servidor web de borda de alta performance "
+"com uma pegada de memória baixa e recursos importantes para construir uma "
+"infraestrutura web moderna e eficiente. Os recursos incluem um servidor "
+"HTTP, proxy reverso HTTP e de e-mail, cache, balanceamento de carga, "
+"compressão, limitação de solicitações, multiplexação e reutilização de "
+"conexões, offload SSL e streaming de mídia HTTP."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:178
+msgid ""
+"package:www/thttpd[]: If you are going to be serving a large amount of "
+"static content you may find that using an application such as thttpd is more "
+"efficient than others. It is also optimized for excellent performance on "
+"FreeBSD."
+msgstr ""
+"package:www/thttpd[]: Se você vai servir uma grande quantidade de conteúdo "
+"estático, pode descobrir que usar um aplicativo como o thttpd é mais "
+"eficiente do que outros. Ele também é otimizado para ter um excelente "
+"desempenho no FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:180
+#, no-wrap
+msgid "How to Mirror FreeBSD"
+msgstr "Como espelhar o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:184
+msgid ""
+"Ok, now you know the requirements and how to offer the services, but not how "
+"to get it. :-) This section explains how to actually mirror the various "
+"parts of FreeBSD, what tools to use, and where to mirror from."
+msgstr ""
+"Ok, agora você conhece os requisitos e sabe como oferecer os serviços, mas "
+"não sabe como obtê-los. :-) Esta seção explica como realmente espelhar as "
+"várias partes do FreeBSD, quais ferramentas utilizar e de onde espelhar."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:186
+#, no-wrap
+msgid "Mirroring the FTP Site"
+msgstr "Espelhando o site FTP"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:191
+msgid ""
+"The FTP area is the largest amount of data that needs to be mirrored. It "
+"includes the _distribution sets_ required for network installation, the "
+"_branches_ which are actually snapshots of checked-out source trees, the "
+"_ISO Images_ to write CD-ROMs with the installation distribution, a live "
+"file system, and a snapshot of the ports tree. All of course for various "
+"FreeBSD versions, and various architectures."
+msgstr ""
+"A área FTP possui a maior quantidade de dados que precisa ser espelhada. "
+"Inclui os _conjuntos de distribuição_ necessários para instalação via rede, "
+"os _branches_, que são na verdade snapshots dos diretórios de código fonte, "
+"as _imagens ISO_ para gravar CD-ROMs com a distribuição de instalação, um "
+"sistema de arquivos live (ao vivo) e um snapshot da árvore de ports. Tudo, é "
+"claro, para várias versões do FreeBSD e várias arquiteturas."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:197
+msgid ""
+"The best way to mirror the FTP area is rsync. You can install the port "
+"package:net/rsync[] and then use rsync to sync with your upstream host. "
+"rsync is already mentioned in <<mirror-serv-rsync>>. Since rsync access is "
+"not required, your preferred upstream site may not allow it. You may need "
+"to hunt around a little bit to find a site that allows rsync access."
+msgstr ""
+"A melhor maneira de espelhar a área FTP é com o rsync. Você pode instalar o "
+"pacote pelo port: net/rsync[] e, em seguida, usar o rsync para sincronizar "
+"com seu host upstream. O rsync já foi mencionado em <<mirror-serv-rsync>>. "
+"Como o acesso rsync não é obrigatório, seu site upstream preferido pode não "
+"permiti-lo. Você pode precisar procurar um pouco para encontrar um site que "
+"permita o acesso rsync."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:202
+msgid ""
+"Since the number of rsync clients will have a significant impact on the "
+"server machine, most admins impose limitations on their server. For a "
+"mirror, you should ask the site maintainer you are syncing from about their "
+"policy, and maybe an exception for your host (since you are a mirror)."
+msgstr ""
+"Como o número de clientes rsync terá um impacto significativo no "
+"processamento do servidor, a maioria dos administradores impõe limitações em "
+"seu servidor. Para um espelho, você deve perguntar ao mantenedor do site de "
+"onde está sincronizando sobre sua política e talvez pedir uma exceção para "
+"seu host (já que você é um espelho)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:205
+msgid "A command line to mirror FreeBSD might look like:"
+msgstr ""
+"Um exemplo de linha de comando para espelhar o FreeBSD pode ser verificada "
+"abaixo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:209
+#, no-wrap
+msgid "% rsync -vaHz --delete rsync://ftp4.de.FreeBSD.org/FreeBSD/ /pub/FreeBSD/\n"
+msgstr "% rsync -vaHz --delete rsync://ftp4.de.FreeBSD.org/FreeBSD/ /pub/FreeBSD/\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:213
+msgid ""
+"Consult the documentation for rsync, which is also available at http://rsync."
+"samba.org/[http://rsync.samba.org/], about the various options to be used "
+"with rsync. If you sync the whole module (unlike subdirectories), be aware "
+"that the module-directory (here \"FreeBSD\") will not be created, so you "
+"cannot omit the target directory. Also you might want to set up a script "
+"framework that calls such a command via man:cron[8]."
+msgstr ""
+"Consulte a documentação do rsync, que também está disponível em http://rsync."
+"samba.org/[http://rsync.samba.org/], sobre as várias opções a serem usadas "
+"com o rsync. Se você sincronizar o módulo inteiro (ao contrário de "
+"subdiretórios), esteja ciente de que o diretório do módulo (aqui \"FreeBSD"
+"\") não será criado, portanto, você não pode omitir o diretório de destino. "
+"Além disso, você pode querer configurar um framework de script que chame "
+"esse comando via man:cron[8]."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:215
+#, no-wrap
+msgid "Mirroring the WWW Pages"
+msgstr "Espelhando as páginas WWW"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:220
+msgid ""
+"Since doc migration to Hugo/Asciidoctor on 2021-01-25, mirroring the website "
+"with rsync no longer works."
+msgstr ""
+"Desde a migração da documentação para Hugo/Asciidoctor em 25/01/2021, a "
+"sincronização do site com rsync não funciona mais."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:223
+msgid ""
+"There are ongoing studies to implement a website mirror with the extref:"
+"{handbook}mirrors/[official infrastructure]."
+msgstr ""
+"Existem estudos em andamento para implementar um espelho do website com "
+"extref:{handbook}mirrors/[infraestrutura oficial]."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:225
+msgid ""
+"For the former website mirrors, a way to achieve mirroring the website today "
+"is building the website locally with the corresponding address it will be "
+"hosted."
+msgstr ""
+"Para os antigos espelhos do website, uma maneira de obter o espelhamento "
+"hoje em dia é construir o site localmente com o endereço correspondente em "
+"que será hospedado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:229
+#, no-wrap
+msgid "% cd website && env HUGO_baseURL=\"https://www.XX.freebsd.org/\" make\n"
+msgstr "% cd website && env HUGO_baseURL=\"https://www.XX.freebsd.org/\" make\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:232
+msgid ""
+"Check for more details about the build tools on extref:{fdp-primer}overview/"
+"[FreeBSD Documentation Project Primer for New Contributors, overview-quick-"
+"start] book."
+msgstr ""
+"Verifique mais detalhes sobre as ferramentas de construção no livro extref:"
+"{fdp-primer}overview/[Primer do Projeto de Documentação do FreeBSD para "
+"Novos Contribuidores, overview-quick-start]."
+
+#. [source,shell]
+#. ....
+#. % rsync -vaHz --delete rsync://bit0.us-west.freebsd.org/FreeBSD-www-data/ /usr/local/www/
+#. ....
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:243
+msgid ""
+"Notice the website was split into www.FreeBSD.org and docs.FreeBSD.org, and "
+"there are links between them; plus, at this moment, `HUGO_baseURL` variable "
+"won't cover all links, this way, mirroring the website is discouraged."
+msgstr ""
+"Observe que o site foi dividido em www.FreeBSD.org e docs.FreeBSD.org, e "
+"existem links entre eles; além disso, no momento, a variável `HUGO_baseURL` "
+"não cobrirá todos os links, dessa forma, o espelhamento do site não é "
+"encorajado."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:246
+#, no-wrap
+msgid "Mirroring Packages"
+msgstr "Espelhando os Pacotes"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:251
+msgid ""
+"Due to very high requirements of bandwidth, storage and adminstration the "
+"FreeBSD Project has decided not to allow public mirrors of packages. For "
+"sites with lots of machines, it might be advantagous to run a caching HTTP "
+"proxy for the man:pkg[8] process. Alternatively specific packages and their "
+"dependencies can be fetched by running something like the following:"
+msgstr ""
+"Devido aos requisitos muito altos de largura de banda, armazenamento e "
+"administração, o Projeto FreeBSD decidiu não permitir espelhos públicos de "
+"pacotes pré compilados. Para sites com muitas máquinas, pode ser vantajoso "
+"executar um proxy HTTP com cache habilitado para o processo man:pkg[8]. "
+"Alternativamente, pacotes específicos e suas dependências podem ser baixados "
+"executando algo como o seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:255
+#, no-wrap
+msgid "% pkg fetch -d -o /usr/local/mirror vim\n"
+msgstr "% pkg fetch -d -o /usr/local/mirror vim\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:258
+msgid ""
+"Once those packages have been fetched, the repository metadata must be "
+"generated by running:"
+msgstr ""
+"Quando esses pacotes forem baixados, os metadados do repositório devem ser "
+"gerados executando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/hubs/_index.adoc:262
+#, no-wrap
+msgid "% pkg repo /usr/local/mirror\n"
+msgstr "% pkg repo /usr/local/mirror\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:266
+msgid ""
+"Once the packages have been fetched and the metadata for the repository has "
+"been generated, serve the packages up to the client machines via HTTP. For "
+"additional information see the man pages for man:pkg[8], specifically the "
+"man:pkg-repo[8] page."
+msgstr ""
+"Depois que os pacotes forem baixados e os metadados do repositório forem "
+"gerados, sirva os pacotes para as máquinas clientes via HTTP. Para obter "
+"informações adicionais, consulte as páginas man do man:pkg[8], "
+"especificamente a página man:pkg-repo[8]."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:268
+#, no-wrap
+msgid "How Often Should I Mirror?"
+msgstr "Com que frequência eu devo atualizar o conteúdo do meu site espelho?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:274
+msgid ""
+"Every mirror should be updated at a minimum of once per day. Certainly a "
+"script with locking to prevent multiple runs happening at the same time will "
+"be needed to run from man:cron[8]. Since nearly every admin does this in "
+"their own way, specific instructions cannot be provided. It could work "
+"something like this:"
+msgstr ""
+"Todo espelho deve ser atualizado pelo menos uma vez por dia. Certamente, um "
+"script com bloqueio para evitar que várias execuções ocorram ao mesmo tempo "
+"será necessário para ser executado pelo man:cron[8]. Como cada administrador "
+"faz isso de sua própria maneira, instruções específicas não podem ser "
+"fornecidas. Este processo poderia funcionar , por exemplo, desta forma:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:278
+msgid ""
+"Put the command to run your mirroring application in a script. Use of a "
+"plain `/bin/sh` script is recommended."
+msgstr ""
+"Coloque o comando para executar sua aplicação de espelhamento em um script. "
+"O uso de um script `/bin/sh` simples é recomendado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:279
+msgid ""
+"Add some output redirections so diagnostic messages are logged to a file."
+msgstr ""
+"Adicione alguns redirecionamentos de saída para que as mensagens de "
+"diagnóstico sejam registradas em um arquivo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:280
+msgid "Test if your script works. Check the logs."
+msgstr "Teste se o seu script funciona. Verifique os logs."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:281
+msgid ""
+"Use man:crontab[1] to add the script to the appropriate user's man:"
+"crontab[5]. This should be a different user than what your FTP daemon runs "
+"as so that if file permissions inside your FTP area are not world-readable "
+"those files cannot be accessed by anonymous FTP. This is used to \"stage\" "
+"releases - making sure all of the official mirror sites have all of the "
+"necessary release files on release day."
+msgstr ""
+"Use o man:crontab[1] para adicionar o script ao man:crontab[5] do usuário "
+"apropriado. Este deve ser um usuário diferente do que seu daemon FTP é "
+"executado, para que, se as permissões de arquivo dentro de sua área FTP não "
+"forem legíveis por todo o mundo, esses arquivos não possam ser acessados "
+"pelo FTP anônimo. Isso é usado para \"preparar\" as releases - garantindo "
+"que todos os sites de espelho oficiais tenham todos os arquivos da release "
+"necessários no dia do seu lançamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:284
+msgid "Here are some recommended schedules:"
+msgstr "Aqui estão alguns agendamentos recomendados:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:286
+msgid "FTP fileset: daily"
+msgstr "Conjunto de arquivos FTP: diariamente"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:287
+msgid "WWW pages: daily"
+msgstr "Páginas WWW: diariamente"
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:289
+#, no-wrap
+msgid "Where to Mirror From"
+msgstr "De onde fazer o espelhamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:294
+msgid ""
+"This is an important issue. So this section will spend some effort to "
+"explain the backgrounds. We will say this several times: under no "
+"circumstances should you mirror from `ftp.FreeBSD.org`."
+msgstr ""
+"Esta é uma questão importante. Portanto, esta seção dedicará algum esforço "
+"para explicar o os motivos que estão por trás desta orientação. Diremos isso "
+"várias vezes: em nenhuma circunstância você deve espelhar a partir de `ftp."
+"FreeBSD.org`."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:296
+#, no-wrap
+msgid "A few Words About the Organization"
+msgstr "Algumas palavras sobre a organização"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:307
+msgid ""
+"Mirrors are organized by country. All official mirrors have a DNS entry of "
+"the form `ftpN.CC.FreeBSD.org`. _CC_ (i.e., country code) is the _top level "
+"domain_ (TLD) of the country where this mirror is located. _N_ is a number, "
+"telling that the host would be the _Nth_ mirror in that country. (Same "
+"applies to `wwwN.CC.FreeBSD.org`, etc.) There are mirrors with no _CC_ "
+"part. These are the mirror sites that are very well connected and allow a "
+"large number of concurrent users. `ftp.FreeBSD.org` is actually two "
+"machines, one currently located in Denmark and the other in the United "
+"States. It is _NOT_ a master site and should never be used to mirror from. "
+"Lots of online documentation leads \"interactive\"users to `ftp.FreeBSD.org` "
+"so automated mirroring systems should find a different machine to mirror "
+"from."
+msgstr ""
+"Os espelhos são organizados por país. Todos os espelhos oficiais têm uma "
+"entrada DNS com a forma `ftpN.CC.FreeBSD.org`. _CC_ (ou seja, código do "
+"país) é o _domínio de nível superior_ (TLD) do país onde esse espelho está "
+"localizado. _N_ é um número, indicando que o host seria o _N-ésimo_ espelho "
+"nesse país. (O mesmo se aplica a `wwwN.CC.FreeBSD.org`, etc.) Existem "
+"espelhos sem a parte _CC_. Esses são os sites de espelho que estão muito bem "
+"conectados e permitem um grande número de usuários simultâneos. O `ftp."
+"FreeBSD.org` na verdade são duas máquinas, uma atualmente localizada na "
+"Dinamarca e outra nos Estados Unidos. Não é um site principal e nunca deve "
+"ser usado para se espelhar a partir dele. Muita documentação online "
+"direciona usuários \"interativos\" para `ftp.FreeBSD.org`, portanto, "
+"sistemas automatizados de espelhamento devem encontrar um servidor diferente "
+"para espelhar."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:315
+msgid ""
+"Additionally there exists a hierarchy of mirrors, which is described in "
+"terms of __tiers__. The master sites are not referred to but can be "
+"described as __Tier-0__. Mirrors that mirror from these sites can be "
+"considered __Tier-1__, mirrors of __Tier-1__-mirrors, are __Tier-2__, etc. "
+"Official sites are encouraged to be of a low __tier__, but the lower the "
+"tier the higher the requirements in terms as described in <<mirror-"
+"requirements>>. Also access to low-tier-mirrors may be restricted, and "
+"access to master sites is definitely restricted. The __tier__-hierarchy is "
+"not reflected by DNS and generally not documented anywhere except for the "
+"master sites. However, official mirrors with low numbers like 1-4, are "
+"usually _Tier-1_ (this is just a rough hint, and there is no rule)."
+msgstr ""
+"Além disso, existe uma hierarquia de espelhos, que é descrita em termos de "
+"__níveis__. Os sites principais não são mencionados, mas podem ser descritos "
+"como __Nível-0__. Espelhos que espelham a partir desses sites podem ser "
+"considerados __Nível-1__, espelhos de espelhos __Nível-1__ são __Nível-2__, "
+"etc. Sites oficiais são incentivados a ter um nível baixo, mas quanto mais "
+"baixo o nível, maiores os requisitos como descrito em <<mirror-"
+"requirements>>. O acesso a espelhos de baixo nível pode ser restrito e o "
+"acesso a sites principais é definitivamente restrito. A hierarquia de "
+"__nível__ não é refletida pelo DNS e geralmente não é documentada em nenhum "
+"lugar, exceto para os sites principais. No entanto, espelhos oficiais com "
+"números baixos como 1-4, geralmente são __Nível-1__ (isso é apenas uma dica "
+"aproximada e não há regra)."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:317
+#, no-wrap
+msgid "Ok, but Where Should I get the Stuff Now?"
+msgstr "Ok, mas de onde devo baixar os arquivos agora?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:321
+msgid ""
+"Under no circumstances should you mirror from `ftp.FreeBSD.org`. The short "
+"answer is: from the site that is closest to you in Internet terms, or gives "
+"you the fastest access."
+msgstr ""
+"Em nenhuma circunstância você deve espelhar a partir de `ftp.FreeBSD.org`. A "
+"resposta curta é: a partir do site que estiver mais próximo de você em "
+"termos de Internet ou que oferecer o acesso mais rápido."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:323
+#, no-wrap
+msgid "I Just Want to Mirror from Somewhere!"
+msgstr "Eu só quero espelhar de algum lugar!"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:327
+msgid ""
+"If you have no special intentions or requirements, the statement in <<mirror-"
+"where-where>> applies. This means:"
+msgstr ""
+"Se você não tem intenções ou requisitos especiais, a afirmação em <<mirror-"
+"where-where>> se aplica. Isso significa:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:331
+msgid ""
+"Check for those which provide fastest access (number of hops, round-trip-"
+"times) and offer the services you intend to use (like rsync)."
+msgstr ""
+"Verifique quais sites oferecem o acesso mais rápido (número de saltos, "
+"tempos de ida e volta) e oferecem os serviços que você pretende usar (como "
+"rsync)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:332
+msgid ""
+"Contact the administrators of your chosen site stating your request, and "
+"asking about their terms and policies."
+msgstr ""
+"Entre em contato com os administradores do site escolhido, informando sua "
+"solicitação e perguntando sobre seus termos e políticas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:333
+msgid "Set up your mirror as described above."
+msgstr "Configure o seu site espelho conforme descrito acima."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:336
+#, no-wrap
+msgid "I am an Official Mirror, What is the Right Site for Me?"
+msgstr "Sou um site espelho oficial, qual é o site certo para mim?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:341
+msgid ""
+"In general the description in <<mirror-where-simple>> still applies. Of "
+"course you may want to put some weight on the fact that your upstream should "
+"be of a low tier. There are some other considerations about _official_ "
+"mirrors that are described in <<mirror-official>>."
+msgstr ""
+"Em geral, a descrição em <<mirror-where-simple>> ainda se aplica. Claro, "
+"você pode querer dar mais importância ao fato de que o site upstream deve "
+"ter um nível baixo. Existem algumas outras considerações sobre espelhos "
+"_oficiais_ que são descritas em <<mirror-official>>."
+
+#. type: Title ====
+#: documentation/content/en/articles/hubs/_index.adoc:343
+#, no-wrap
+msgid "I Want to Access the Master Sites!"
+msgstr "Eu quero acessar os sites principais!"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:350
+msgid ""
+"If you have good reasons and good prerequisites, you may want and get access "
+"to one of the master sites. Access to these sites is generally restricted, "
+"and there are special policies for access. If you are already an _official_ "
+"mirror, this certainly helps you getting access. In any other case make "
+"sure your country really needs another mirror. If it already has three or "
+"more, ask the \"zone administrator\" (mailto:hostmaster@CC.FreeBSD."
+"org[hostmaster@CC.FreeBSD.org]) or {freebsd-hubs} first."
+msgstr ""
+"Se você tiver bons motivos e bons pré-requisitos, poderá querer e obter "
+"acesso a um dos sites principais. O acesso a esses sites geralmente é "
+"restrito e existem políticas especiais para acesso. Se você já é um espelho "
+"_oficial_, certamente isso ajuda a obter acesso. Em qualquer outro caso, "
+"certifique-se de que seu país realmente precisa de outro espelho. Se já "
+"tiver três ou mais, pergunte ao \"administrador de zona\" (mailto:"
+"hostmaster@CC.FreeBSD.org[hostmaster@CC.FreeBSD.org]) ou na {freebsd-hubs} "
+"primeiro."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:353
+msgid ""
+"Whoever helped you become, an _official_ should have helped you gain access "
+"to an appropriate upstream host, either one of the master sites or a "
+"suitable Tier-1 site. If not, you can send email to mailto:mirror-"
+"admin@FreeBSD.org[mirror-admin@FreeBSD.org] to request help with that."
+msgstr ""
+"Quem o ajudou a se tornar um espelho _oficial_ deve ter lhe ajudado a obter "
+"acesso a um host upstream apropriado, seja um dos sites principais ou um "
+"site Tier-1 adequado. Se não, você pode enviar um e-mail para mailto:mirror-"
+"admin@FreeBSD.org[mirror-admin@FreeBSD.org] para solicitar ajuda com isso."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:355
+msgid "There is one master site for the FTP fileset."
+msgstr "Existe um site principal para o conjunto de arquivos FTP."
+
+#. type: Title =====
+#: documentation/content/en/articles/hubs/_index.adoc:357
+#, no-wrap
+msgid "ftp-master.FreeBSD.org"
+msgstr "ftp-master.FreeBSD.org"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:360
+msgid "This is the master site for the FTP fileset."
+msgstr "Este é o site principal do conjunto de arquivos FTP."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:363
+msgid ""
+"`ftp-master.FreeBSD.org` provides rsync access, in addition to FTP. Refer "
+"to <<mirror-ftp-rsync>>."
+msgstr ""
+"O `ftp-master.FreeBSD.org` disponibiliza acesso via rsync, além do FTP. "
+"Consulte <<mirror-ftp-rsync>> para obter mais informações."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:365
+msgid ""
+"Mirrors are also encouraged to allow rsync access for the FTP contents, "
+"since they are __Tier-1__-mirrors."
+msgstr ""
+"Também é encorajado que os espelhos permitam o acesso ao rsync para o "
+"conteúdo FTP, já que eles são espelhos __Tier-1__."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:367
+#, no-wrap
+msgid "Official Mirrors"
+msgstr "Espelhos Oficiais"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:370
+msgid "Official mirrors are mirrors that"
+msgstr "Espelhos oficiais são os espelhos que"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:372
+msgid "a) have a `FreeBSD.org` DNS entry (usually a CNAME)."
+msgstr "a) ter uma entrada DNS `FreeBSD.org` (geralmente um CNAME)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:373
+msgid ""
+"b) are listed as an official mirror in the FreeBSD documentation (like "
+"handbook)."
+msgstr ""
+"b) são listados como um espelho oficial na documentação do FreeBSD (como no "
+"Handbook)."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:376
+msgid ""
+"So far to distinguish official mirrors. Official mirrors are not necessarily "
+"__Tier-1__-mirrors. However you probably will not find a __Tier-1__-mirror, "
+"that is not also official."
+msgstr ""
+"Até agora, para distinguir espelhos oficiais. Espelhos oficiais não "
+"necessariamente são espelhos __Tier-1__. No entanto, provavelmente você não "
+"encontrará um espelho __Tier-1__ que não seja oficial."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:378
+#, no-wrap
+msgid "Special Requirements for Official (tier-1) Mirrors"
+msgstr "Requisitos especiais para sites espelhos oficiais (Tier-1)"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:383
+msgid ""
+"It is not so easy to state requirements for all official mirrors, since the "
+"project is sort of tolerant here. It is more easy to say, what _official "
+"tier-1 mirrors_ are required to. All other official mirrors can consider "
+"this a big __should__."
+msgstr ""
+"Não é tão fácil estabelecer requisitos para todos os espelhos oficiais, já "
+"que o projeto é bastante tolerante nesse aspecto. É mais fácil dizer o que é "
+"exigido dos _espelhos oficiais de nível 1_. Todos os outros espelhos "
+"oficiais devem considerar isso uma grande __recomendação__."
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:385
+msgid "Tier-1 mirrors are required to:"
+msgstr "Os sites espelhos Tier-1 precisam:"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:387
+msgid "carry the complete fileset"
+msgstr "ter o conjunto completo de arquivos"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:388
+msgid "allow access to other mirror sites"
+msgstr "permitir acesso a outros sites espelho"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:389
+msgid "provide FTP and rsync access"
+msgstr "fornecer acesso FTP e rsync"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:392
+msgid ""
+"Furthermore, admins should be subscribed to the {freebsd-hubs}. See extref:"
+"{handbook}[this link, eresources-mail] for details, how to subscribe."
+msgstr ""
+"Além disso, os administradores devem se inscrever no {freebsd-hubs}. "
+"Consulte extref:{handbook}[este link, eresources-mail] para obter detalhes "
+"sobre como se inscrever."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:397
+msgid ""
+"It is _very_ important for a hub administrator, especially Tier-1 hub "
+"admins, to check the https://www.FreeBSD.org/releng/[release schedule] for "
+"the next FreeBSD release. This is important because it will tell you when "
+"the next release is scheduled to come out, and thus giving you time to "
+"prepare for the big spike of traffic which follows it."
+msgstr ""
+"É _muito_ importante para um administrador de um site espelho, especialmente "
+"administradores de espelhos Tier-1, verificar o https://www.FreeBSD.org/"
+"releng/[calendário de lançamento] para o próximo release do FreeBSD. Isso é "
+"importante porque informará quando o próximo release está programado para "
+"sair, dando tempo para se preparar para o grande aumento de tráfego que o "
+"segue."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/hubs/_index.adoc:400
+msgid ""
+"It is also important that hub administrators try to keep their mirrors as up-"
+"to-date as possible (again, even more crucial for Tier-1 mirrors). If "
+"Mirror1 does not update for a while, lower tier mirrors will begin to mirror "
+"old data from Mirror1 and thus begins a downward spiral... Keep your mirrors "
+"up to date!"
+msgstr ""
+"É importante também que os administradores dos hubs tentem manter seus "
+"espelhos atualizados o máximo possível (novamente, ainda mais crucial para "
+"os espelhos Tier-1). Se o Mirror1 não atualizar por um tempo, os espelhos de "
+"nível inferior começarão a espelhar dados antigos do Mirror1 e, assim, "
+"começa uma espiral descendente... Mantenha seus espelhos atualizados!"
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:403
+#, no-wrap
+msgid "How to Become Official Then?"
+msgstr "Como se tornar um site espelho oficial?"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:406
+msgid ""
+"Please contact the Cluster Administrators as documented at https://www."
+"FreeBSD.org/administration/#t-clusteradm."
+msgstr ""
+"Por favor, entre em contato com os Administradores do Cluster conforme "
+"documentado em https://www.FreeBSD.org/administration/#t-clusteradm."
+
+#. type: Title ==
+#: documentation/content/en/articles/hubs/_index.adoc:408
+#, no-wrap
+msgid "Some Statistics from Mirror Sites"
+msgstr "Algumas estatísticas dos sites espelho"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:411
+msgid ""
+"Here are links to the stat pages of your favorite mirrors (aka the only ones "
+"who feel like providing stats)."
+msgstr ""
+"Aqui estão os links para as páginas de estatísticas dos seus sites espelho "
+"favoritos (também conhecidos como os únicos que têm a boa vontade de "
+"fornecer as estatísticas)."
+
+#. type: Title ===
+#: documentation/content/en/articles/hubs/_index.adoc:413
+#, no-wrap
+msgid "FTP Site Statistics"
+msgstr "Estatísticas do site FTP"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:416
+msgid ""
+"ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD."
+"org] - http://www.rhnet.is/status/draupnir/draupnir.html[ (Bandwidth)] "
+"http://www.rhnet.is/status/ftp/ftp-notendur.html[(FTP processes)] http://www."
+"rhnet.is/status/ftp/http-notendur.html[(HTTP processes)]"
+msgstr ""
+"ftp.is.FreeBSD.org - mailto:hostmaster@is.FreeBSD.org[hostmaster@is.FreeBSD."
+"org] - http://www.rhnet.is/status/draupnir/draupnir.html[ (Largura de "
+"banda)] http://www.rhnet.is/status/ftp/ftp-notendur.html[(Processos FTP)] "
+"http://www.rhnet.is/status/ftp/http-notendur.html[(Processos HTTP)]"
+
+#. type: Plain text
+#: documentation/content/en/articles/hubs/_index.adoc:416
+msgid ""
+"ftp2.ru.FreeBSD.org - mailto:mirror@macomnet.ru[mirror@macomnet.ru] - http://"
+"mirror.macomnet.net/mrtg/mirror.macomnet.net_195.128.64.25.html[(Bandwidth)] "
+"http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc.html[(HTTP and FTP "
+"users)]"
+msgstr ""
+"ftp2.ru.FreeBSD.org - mailto:mirror@macomnet.ru[mirror@macomnet.ru] - http://"
+"mirror.macomnet.net/mrtg/mirror.macomnet.net_195.128.64.25.html[(Largura de "
+"banda)] http://mirror.macomnet.net/mrtg/mirror.macomnet.net_proc."
+"html[(Usuários de HTTP e FTP)]"
+
+#~ msgid "We are not accepting any new mirrors at this time."
+#~ msgstr "Não estamos aceitando novos sites espelhos neste momento."
+
+#~ msgid "A command line to mirror the FreeBSD web site might look like:"
+#~ msgstr ""
+#~ "Uma linha de comando para espelhar o site do FreeBSD pode parecer com:"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/ipsec-must/_index.adoc b/documentation/content/pt-br/articles/ipsec-must/_index.adoc
index 207ba80215..5b0996171f 100644
--- a/documentation/content/pt-br/articles/ipsec-must/_index.adoc
+++ b/documentation/content/pt-br/articles/ipsec-must/_index.adoc
@@ -1,9 +1,11 @@
---
-title: Verificação Independente da Funcionalidade IPsec no FreeBSD
authors:
- - author: David Honig
+ -
+ author: 'David Honig'
email: honig@sprynet.com
-releaseinfo: "$FreeBSD$"
+description: 'Verificação Independente da Funcionalidade IPsec no FreeBSD'
+tags: ["IPsec", "verification", "FreeBSD"]
+title: 'Verificação Independente da Funcionalidade IPsec no FreeBSD'
trademarks: ["freebsd", "opengroup", "general"]
---
@@ -16,15 +18,27 @@ trademarks: ["freebsd", "opengroup", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/ipsec-must/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -38,7 +52,7 @@ toc::[]
[[problem]]
== O problema
-Primeiro, vamos assumir que você tem o <<ipsec-install>>. Como você sabe que ele está <<caveat>>? Claro, sua conexão não funcionará se ele estiver mal configurado, e funcionará quando você finalmente acertar a configuração. O man:netstat[1]irá listá-lo. Mas você pode confirmar isso de forma independente?
+Primeiramente, vamos supor que você tenha o instalado o IPsec (<<ipsec-install>>). Como você sabe se há algum problema (<<caveat>>)? É verdade que sua conexão não funcionará se estiver mal configurada, e funcionará quando você finalmente acertar. O comando man:netstat[1] listará isso. Mas você pode confirmar isso de forma independente?
[[solution]]
== A solução
@@ -48,26 +62,26 @@ Em primeiro lugar, vejamos alguma informação teórica relevante em relação
. Dados criptografados são uniformemente distribuídos, ou seja, possuem entropia máxima por símbolo;
. Os dados brutos, não comprimidos são tipicamente redundantes, isto é, possuem entropia submáxima.
-Suponha que você possa medir a entropia dos dados destinados para a sua interface de rede e também dos dados originados dela. Então você pode ver a diferença entre dados não criptografados e dados criptografados. Isso seria verdade mesmo que alguns dos dados no "modo criptografado" não estivessem criptografados --- como deve o cabeçalho IP mais externo para que o pacote seja roteável.
+Suponha que você pudesse medir a entropia dos dados que entram e saem de sua interface de rede. Então, você poderia ver a diferença entre dados não criptografados e dados criptografados. Isso seria verdade mesmo que alguns dos dados no "modo criptografado" não estivessem criptografados - como o cabeçalho IP mais externo deve estar se o pacote for roteável.
[[MUST]]
=== MUST
-O teste de "Estatística Universal para Geradores de Bits Aleatórios" de Ueli Maurer (https://web.archive.org/web/20011115002319/http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST ]) mede rapidamente a entropia de uma amostra. Ele usa um algoritmo semelhante à compressão. <<code>> para uma variante que mede partes sucessivas (aproximadamente um quarto de megabyte) de um arquivo.
+O "Universal Statistical Test for Random Bit Generators" de Ueli Maurer (https://web.archive.org/web/20011115002319/http://www.geocities.com/SiliconValley/Code/4704/universal.pdf[MUST]) mede rapidamente a entropia de uma amostra. Ele usa um algoritmo semelhante ao de compressão. O <<Código>> de uma variante que mede blocos sucessivos (de cerca de um quarto de megabyte) de um arquivo.
[[tcpdump]]
=== Tcpdump
-Também precisamos de uma maneira de capturar os dados brutos da rede. Um programa chamado man:tcpdump[1] permite que você faça isso, se você ativou a interface _Berkeley Packet Filter_ no seu <<kernel>>.
+Também precisamos de uma maneira de capturar os dados brutos da rede. Um programa chamado man:tcpdump[1] permite que você faça isso, se você habilitou a interface do _Berkeley Packet Filter_ no seu <<kernel>>.
O comando:
-[source,shell]
+[source, shell]
....
tcpdump -c 4000 -s 10000 -w dumpfile.bin
....
-irá capturar 4000 pacotes brutos no arquivo _dumpfile.bin_. Até 10.000 bytes por pacote serão capturados neste exemplo.
+serão capturados 4000 pacotes brutos e salvos em _dumpfile.bin_. Neste exemplo, serão capturados até 10.000 bytes por pacote.
[[experiment]]
== O Experimento
@@ -75,15 +89,15 @@ irá capturar 4000 pacotes brutos no arquivo _dumpfile.bin_. Até 10.000 bytes p
Aqui está o experimento:
[.procedure]
+====
. Abra uma janela para um host IPsec e outra janela para um host inseguro.
-. Agora comece a <<tcpdump>>.
-. Na janela "segura", execute o comando UNIX(R) man:yes[1], que transmitirá o caractere `y`. Depois de um tempo, pare com isso. Alterne para a janela insegura e repita. Depois de um tempo, pare.
-. Agora execute o <<code>> nos pacotes capturados. Você deve ver algo como o seguinte. O importante é notar que a conexão segura tem 93% (6,7) do valor esperado (7,18), e a conexão "normal" tem 29% (2,1) do valor esperado.
+. Agora, inicie o <<tcpdump>>.
+. Na janela "segura", execute o comando UNIX(R) man:yes[1], que transmitirá o caractere `y`. Após um tempo, pare este comando. Mude para a janela "insegura" e repita o processo. Após um tempo, pare também esse comando.
+. Agora execute o <<code>> nos pacotes capturados. Você deverá ver algo como o seguinte. O importante a ser observado é que a conexão segura tem 93% (6,7) do valor esperado (7,18), enquanto a conexão "normal" tem 29% (2,1) do valor esperado.
+
-[source,shell]
+[source, shell]
....
% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin
-
% uliscan ipsecdemo.bin
Uliscan 21 Dec 98
L=8 256 258560
@@ -97,28 +111,29 @@ Expected value for L=8 is 7.1836656
2.0838 -----------------
2.0983 -----------------
....
+====
[[caveat]]
== Embargo
-Esta experiência mostra que o IPsec _parece_ estar distribuindo os dados de carga __uniformemente__, como a criptografia deveria. No entanto, o experimento descrito aqui _não pode_ detectar muitas das falhas possíveis em um sistema (nenhum dos quais eu tenho qualquer evidência para). Estes incluem geração ou troca deficiente de chaves, dados ou chaves sendo visíveis para outros, uso de algoritmos fracos, subversão do kernel, etc. Estude a fonte; conheça o código.
+Este experimento mostra que o IPsec parece estar distribuindo os dados do payload __uniformly__, como a criptografia deveria fazer. No entanto, o experimento descrito aqui não pode detectar muitas possíveis falhas em um sistema (das quais não tenho nenhuma evidência). Estes incluem geração ou troca de chave fraca, dados ou chaves visíveis para outros, uso de algoritmos fracos, subversão do kernel, etc. Estude o código-fonte; conheça o código.
[[IPsec]]
== IPsec --- Definição
-Extensões de segurança do protocolo Internet para o IPv4; obrigatório para o IPv6. Um protocolo para negociar criptografia e autenticação no nível IP (host para host). O SSL protege apenas um soquete de aplicativo; O SSH protege apenas um login; PGP protege apenas um arquivo ou mensagem especifico. O IPsec criptografa tudo entre dois hosts.
+As extensões de segurança do Protocolo de Internet para o IPv4; obrigatório para o IPv6. Um protocolo para negociar criptografia e autenticação no nível IP (host-to-host). O SSL protege apenas um socket de aplicativo; O SSH protege apenas um login; O PGP protege apenas um arquivo ou mensagem especificada. O IPsec criptografa tudo entre dois hosts.
[[ipsec-install]]
== Instalando o IPsec
-A maioria das versões modernas do FreeBSD tem suporte a IPsec em sua fonte base. Portanto, você precisará incluir a opção `IPSEC` em sua configuração de kernel e, após a reconstrução e reinstalação do kernel, configurar as conexões IPsec usando o comando man:setkey[8].
+A maioria das versões modernas do FreeBSD possui suporte IPsec em seu código base. Portanto, você precisará incluir a opção `IPSEC` na configuração do seu kernel e, após recompilar e reinstalar o kernel, configurar as conexões IPsec usando o comando man:setkey[8].
-Um guia completo sobre como executar o IPsec no FreeBSD é fornecido no link:{handbook}#ipsec[Handbook do FreeBSD].
+Um guia abrangente sobre como executar o IPsec no FreeBSD está disponível no extref:{handbook}[Handbook do FreeBSD, ipsec].
[[kernel]]
== src/sys/i386/conf/KERNELNAME
-Isto precisa estar presente no arquivo de configuração do kernel para habilitar o suporte para captura de dados de rede com o man:tcpdump[1]. Certifique-se de executar o man:config[8] depois de adicionar a linha, de recompilar e de reinstalar.
+Isso precisa estar presente no arquivo de configuração do kernel para capturar dados de rede com o comando man:tcpdump[1]. Certifique-se de executar man:config[8] após adicionar isso e reconstruir e reinstalar o kernel.
[.programlisting]
....
@@ -126,9 +141,9 @@ device bpf
....
[[code]]
-== Teste Estatístico Universal de Maurer (para tamanho de bloco = 8 bits)
+== Teste estatístico universal de Maurer (para tamanho de bloco = 8 bits)
-Você pode encontrar o mesmo código em https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[neste link].
+Você pode encontrar o mesmo código https://web.archive.org/web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[neste link].
[.programlisting]
....
diff --git a/documentation/content/pt-br/articles/ipsec-must/_index.po b/documentation/content/pt-br/articles/ipsec-must/_index.po
new file mode 100644
index 0000000000..d4e7639071
--- /dev/null
+++ b/documentation/content/pt-br/articles/ipsec-must/_index.po
@@ -0,0 +1,741 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-29 22:23+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesipsec-must_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Title =
+#: documentation/content/en/articles/ipsec-must/_index.adoc:1
+#: documentation/content/en/articles/ipsec-must/_index.adoc:11
+#, no-wrap
+msgid "Independent Verification of IPsec Functionality in FreeBSD"
+msgstr "Verificação Independente da Funcionalidade IPsec no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:47
+msgid ""
+"You installed IPsec and it seems to be working. How do you know? I describe "
+"a method for experimentally verifying that IPsec is working."
+msgstr ""
+"Você instalou o IPsec e ele parece estar funcionando. Como você sabe? Eu "
+"descrevo um método para verificar experimentalmente se o IPsec está "
+"funcionando."
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:49
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:53
+#, no-wrap
+msgid "The Problem"
+msgstr "O problema"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:58
+msgid ""
+"First, lets assume you have <<ipsec-install>>. How do you know it is "
+"<<caveat>>? Sure, your connection will not work if it is misconfigured, and "
+"it will work when you finally get it right. man:netstat[1] will list it. "
+"But can you independently confirm it?"
+msgstr ""
+"Primeiramente, vamos supor que você tenha o instalado o IPsec (<<ipsec-"
+"install>>). Como você sabe se há algum problema (<<caveat>>)? É verdade que "
+"sua conexão não funcionará se estiver mal configurada, e funcionará quando "
+"você finalmente acertar. O comando man:netstat[1] listará isso. Mas você "
+"pode confirmar isso de forma independente?"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:60
+#, no-wrap
+msgid "The Solution"
+msgstr "A solução"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:63
+msgid "First, some crypto-relevant info theory:"
+msgstr ""
+"Em primeiro lugar, vejamos alguma informação teórica relevante em relação à "
+"criptografia:"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:65
+msgid ""
+"Encrypted data is uniformly distributed, i.e., has maximal entropy per "
+"symbol;"
+msgstr ""
+"Dados criptografados são uniformemente distribuídos, ou seja, possuem "
+"entropia máxima por símbolo;"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:66
+msgid ""
+"Raw, uncompressed data is typically redundant, i.e., has sub-maximal entropy."
+msgstr ""
+"Os dados brutos, não comprimidos são tipicamente redundantes, isto é, "
+"possuem entropia submáxima."
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:70
+msgid ""
+"Suppose you could measure the entropy of the data to- and from- your network "
+"interface. Then you could see the difference between unencrypted data and "
+"encrypted data. This would be true even if some of the data in \"encrypted "
+"mode\" was not encrypted---as the outermost IP header must be if the packet "
+"is to be routable."
+msgstr ""
+"Suponha que você pudesse medir a entropia dos dados que entram e saem de sua "
+"interface de rede. Então, você poderia ver a diferença entre dados não "
+"criptografados e dados criptografados. Isso seria verdade mesmo que alguns "
+"dos dados no \"modo criptografado\" não estivessem criptografados - como o "
+"cabeçalho IP mais externo deve estar se o pacote for roteável."
+
+#. type: Title ===
+#: documentation/content/en/articles/ipsec-must/_index.adoc:72
+#, no-wrap
+msgid "MUST"
+msgstr "MUST"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:77
+msgid ""
+"Ueli Maurer's \"Universal Statistical Test for Random Bit Generators"
+"\"(https://web.archive.org/web/20011115002319/http://www.geocities.com/"
+"SiliconValley/Code/4704/universal.pdf[MUST]) quickly measures the entropy of "
+"a sample. It uses a compression-like algorithm. <<code>> for a variant "
+"which measures successive (~quarter megabyte) chunks of a file."
+msgstr ""
+"O \"Universal Statistical Test for Random Bit Generators\" de Ueli Maurer "
+"(https://web.archive.org/web/20011115002319/http://www.geocities.com/"
+"SiliconValley/Code/4704/universal.pdf[MUST]) mede rapidamente a entropia de "
+"uma amostra. Ele usa um algoritmo semelhante ao de compressão. O <<Código>> "
+"de uma variante que mede blocos sucessivos (de cerca de um quarto de "
+"megabyte) de um arquivo."
+
+#. type: Title ===
+#: documentation/content/en/articles/ipsec-must/_index.adoc:79
+#, no-wrap
+msgid "Tcpdump"
+msgstr "Tcpdump"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:83
+msgid ""
+"We also need a way to capture the raw network data. A program called man:"
+"tcpdump[1] lets you do this, if you have enabled the _Berkeley Packet "
+"Filter_ interface in your <<kernel>>."
+msgstr ""
+"Também precisamos de uma maneira de capturar os dados brutos da rede. Um "
+"programa chamado man:tcpdump[1] permite que você faça isso, se você "
+"habilitou a interface do _Berkeley Packet Filter_ no seu <<kernel>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:85
+msgid "The command:"
+msgstr "O comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:89
+#, no-wrap
+msgid " tcpdump -c 4000 -s 10000 -w dumpfile.bin\n"
+msgstr " tcpdump -c 4000 -s 10000 -w dumpfile.bin\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:93
+msgid ""
+"will capture 4000 raw packets to _dumpfile.bin_. Up to 10,000 bytes per "
+"packet will be captured in this example."
+msgstr ""
+"serão capturados 4000 pacotes brutos e salvos em _dumpfile.bin_. Neste "
+"exemplo, serão capturados até 10.000 bytes por pacote."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:95
+#, no-wrap
+msgid "The Experiment"
+msgstr "O Experimento"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:98
+msgid "Here is the experiment:"
+msgstr "Aqui está o experimento:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:102
+msgid "Open a window to an IPsec host and another window to an insecure host."
+msgstr ""
+"Abra uma janela para um host IPsec e outra janela para um host inseguro."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:103
+msgid "Now start <<tcpdump>>."
+msgstr "Agora, inicie o <<tcpdump>>."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:104
+msgid ""
+"In the \"secure\" window, run the UNIX(R) command man:yes[1], which will "
+"stream the `y` character. After a while, stop this. Switch to the insecure "
+"window, and repeat. After a while, stop."
+msgstr ""
+"Na janela \"segura\", execute o comando UNIX(R) man:yes[1], que transmitirá "
+"o caractere `y`. Após um tempo, pare este comando. Mude para a janela "
+"\"insegura\" e repita o processo. Após um tempo, pare também esse comando."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:105
+msgid ""
+"Now run <<code>> on the captured packets. You should see something like the "
+"following. The important thing to note is that the secure connection has 93% "
+"(6.7) of the expected value (7.18), and the \"normal\" connection has 29% "
+"(2.1) of the expected value."
+msgstr ""
+"Agora execute o <<code>> nos pacotes capturados. Você deverá ver algo como o "
+"seguinte. O importante a ser observado é que a conexão segura tem 93% (6,7) "
+"do valor esperado (7,18), enquanto a conexão \"normal\" tem 29% (2,1) do "
+"valor esperado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:121
+#, no-wrap
+msgid ""
+"% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin\n"
+"% uliscan ipsecdemo.bin\n"
+"Uliscan 21 Dec 98\n"
+"L=8 256 258560\n"
+"Measuring file ipsecdemo.bin\n"
+"Init done\n"
+"Expected value for L=8 is 7.1836656\n"
+"6.9396 --------------------------------------------------------\n"
+"6.6177 -----------------------------------------------------\n"
+"6.4100 ---------------------------------------------------\n"
+"2.1101 -----------------\n"
+"2.0838 -----------------\n"
+"2.0983 -----------------\n"
+msgstr ""
+"% tcpdump -c 4000 -s 10000 -w ipsecdemo.bin\n"
+"% uliscan ipsecdemo.bin\n"
+"Uliscan 21 Dec 98\n"
+"L=8 256 258560\n"
+"Measuring file ipsecdemo.bin\n"
+"Init done\n"
+"Expected value for L=8 is 7.1836656\n"
+"6.9396 --------------------------------------------------------\n"
+"6.6177 -----------------------------------------------------\n"
+"6.4100 ---------------------------------------------------\n"
+"2.1101 -----------------\n"
+"2.0838 -----------------\n"
+"2.0983 -----------------\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:125
+#, no-wrap
+msgid "Caveat"
+msgstr "Embargo"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:131
+msgid ""
+"This experiment shows that IPsec _does_ seem to be distributing the payload "
+"data __uniformly__, as encryption should. However, the experiment described "
+"here _cannot_ detect many possible flaws in a system (none of which do I "
+"have any evidence for). These include poor key generation or exchange, data "
+"or keys being visible to others, use of weak algorithms, kernel subversion, "
+"etc. Study the source; know the code."
+msgstr ""
+"Este experimento mostra que o IPsec parece estar distribuindo os dados do "
+"payload __uniformly__, como a criptografia deveria fazer. No entanto, o "
+"experimento descrito aqui não pode detectar muitas possíveis falhas em um "
+"sistema (das quais não tenho nenhuma evidência). Estes incluem geração ou "
+"troca de chave fraca, dados ou chaves visíveis para outros, uso de "
+"algoritmos fracos, subversão do kernel, etc. Estude o código-fonte; conheça "
+"o código."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:133
+#, no-wrap
+msgid "IPsec---Definition"
+msgstr "IPsec --- Definição"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:139
+msgid ""
+"Internet Protocol security extensions to IPv4; required for IPv6. A "
+"protocol for negotiating encryption and authentication at the IP (host-to-"
+"host) level. SSL secures only one application socket; SSH secures only a "
+"login; PGP secures only a specified file or message. IPsec encrypts "
+"everything between two hosts."
+msgstr ""
+"As extensões de segurança do Protocolo de Internet para o IPv4; obrigatório "
+"para o IPv6. Um protocolo para negociar criptografia e autenticação no nível "
+"IP (host-to-host). O SSL protege apenas um socket de aplicativo; O SSH "
+"protege apenas um login; O PGP protege apenas um arquivo ou mensagem "
+"especificada. O IPsec criptografa tudo entre dois hosts."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:141
+#, no-wrap
+msgid "Installing IPsec"
+msgstr "Instalando o IPsec"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:145
+msgid ""
+"Most of the modern versions of FreeBSD have IPsec support in their base "
+"source. So you will need to include the `IPSEC` option in your kernel "
+"config and, after kernel rebuild and reinstall, configure IPsec connections "
+"using man:setkey[8] command."
+msgstr ""
+"A maioria das versões modernas do FreeBSD possui suporte IPsec em seu código "
+"base. Portanto, você precisará incluir a opção `IPSEC` na configuração do "
+"seu kernel e, após recompilar e reinstalar o kernel, configurar as conexões "
+"IPsec usando o comando man:setkey[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:147
+msgid ""
+"A comprehensive guide on running IPsec on FreeBSD is provided in extref:"
+"{handbook}[FreeBSD Handbook, ipsec]."
+msgstr ""
+"Um guia abrangente sobre como executar o IPsec no FreeBSD está disponível no "
+"extref:{handbook}[Handbook do FreeBSD, ipsec]."
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:149
+#, no-wrap
+msgid "src/sys/i386/conf/KERNELNAME"
+msgstr "src/sys/i386/conf/KERNELNAME"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:153
+msgid ""
+"This needs to be present in the kernel config file to capture network data "
+"with man:tcpdump[1]. Be sure to run man:config[8] after adding this, and "
+"rebuild and reinstall."
+msgstr ""
+"Isso precisa estar presente no arquivo de configuração do kernel para "
+"capturar dados de rede com o comando man:tcpdump[1]. Certifique-se de "
+"executar man:config[8] após adicionar isso e reconstruir e reinstalar o "
+"kernel."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:157
+#, no-wrap
+msgid "device\tbpf\n"
+msgstr "device\tbpf\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/ipsec-must/_index.adoc:160
+#, no-wrap
+msgid "Maurer's Universal Statistical Test (for block size=8 bits)"
+msgstr "Teste estatístico universal de Maurer (para tamanho de bloco = 8 bits)"
+
+#. type: Plain text
+#: documentation/content/en/articles/ipsec-must/_index.adoc:163
+msgid ""
+"You can find the same code at https://web.archive.org/web/20031204230654/"
+"http://www.geocities.com:80/SiliconValley/Code/4704/uliscanc.txt[this link]."
+msgstr ""
+"Você pode encontrar o mesmo código https://web.archive.org/"
+"web/20031204230654/http://www.geocities.com:80/SiliconValley/Code/4704/"
+"uliscanc.txt[neste link]."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:168
+#, no-wrap
+msgid ""
+"/*\n"
+" ULISCAN.c ---blocksize of 8\n"
+msgstr ""
+"/*\n"
+" ULISCAN.c ---blocksize of 8\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:172
+#, no-wrap
+msgid ""
+" 1 Oct 98\n"
+" 1 Dec 98\n"
+" 21 Dec 98 uliscan.c derived from ueli8.c\n"
+msgstr ""
+" 1 Oct 98\n"
+" 1 Dec 98\n"
+" 21 Dec 98 uliscan.c derived from ueli8.c\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:174
+#, no-wrap
+msgid " This version has // comments removed for Sun cc\n"
+msgstr " This version has // comments removed for Sun cc\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:177
+#, no-wrap
+msgid ""
+" This implements Ueli M Maurer's \"Universal Statistical Test for Random\n"
+" Bit Generators\" using L=8\n"
+msgstr ""
+" This implements Ueli M Maurer's \"Universal Statistical Test for Random\n"
+" Bit Generators\" using L=8\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:180
+#, no-wrap
+msgid ""
+" Accepts a filename on the command line; writes its results, with other\n"
+" info, to stdout.\n"
+msgstr ""
+" Accepts a filename on the command line; writes its results, with other\n"
+" info, to stdout.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:182
+#, no-wrap
+msgid " Handles input file exhaustion gracefully.\n"
+msgstr " Handles input file exhaustion gracefully.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:185
+#, no-wrap
+msgid ""
+" Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n"
+" also on the web somewhere, which is where I found it.\n"
+msgstr ""
+" Ref: J. Cryptology v 5 no 2, 1992 pp 89-105\n"
+" also on the web somewhere, which is where I found it.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:188
+#, no-wrap
+msgid ""
+" -David Honig\n"
+" honig@sprynet.com\n"
+msgstr ""
+" -David Honig\n"
+" honig@sprynet.com\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:193
+#, no-wrap
+msgid ""
+" Usage:\n"
+" ULISCAN filename\n"
+" outputs to stdout\n"
+"*/\n"
+msgstr ""
+" Usage:\n"
+" ULISCAN filename\n"
+" outputs to stdout\n"
+"*/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:199
+#, no-wrap
+msgid ""
+"#define L 8\n"
+"#define V (1<<L)\n"
+"#define Q (10*V)\n"
+"#define K (100 *Q)\n"
+"#define MAXSAMP (Q + K)\n"
+msgstr ""
+"#define L 8\n"
+"#define V (1<<L)\n"
+"#define Q (10*V)\n"
+"#define K (100 *Q)\n"
+"#define MAXSAMP (Q + K)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:202
+#, no-wrap
+msgid ""
+"#include <stdio.h>\n"
+"#include <math.h>\n"
+msgstr ""
+"#include <stdio.h>\n"
+"#include <math.h>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:214
+#, no-wrap
+msgid ""
+"int main(argc, argv)\n"
+"int argc;\n"
+"char **argv;\n"
+"{\n"
+" FILE *fptr;\n"
+" int i,j;\n"
+" int b, c;\n"
+" int table[V];\n"
+" double sum = 0.0;\n"
+" int iproduct = 1;\n"
+" int run;\n"
+msgstr ""
+"int main(argc, argv)\n"
+"int argc;\n"
+"char **argv;\n"
+"{\n"
+" FILE *fptr;\n"
+" int i,j;\n"
+" int b, c;\n"
+" int table[V];\n"
+" double sum = 0.0;\n"
+" int iproduct = 1;\n"
+" int run;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:216
+#, no-wrap
+msgid " extern double log(/* double x */);\n"
+msgstr " extern double log(/* double x */);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:218
+#, no-wrap
+msgid " printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n"
+msgstr " printf(\"Uliscan 21 Dec 98 \\nL=%d %d %d \\n\", L, V, MAXSAMP);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:225
+#, no-wrap
+msgid ""
+" if (argc < 2) {\n"
+" printf(\"Usage: Uliscan filename\\n\");\n"
+" exit(-1);\n"
+" } else {\n"
+" printf(\"Measuring file %s\\n\", argv[1]);\n"
+" }\n"
+msgstr ""
+" if (argc < 2) {\n"
+" printf(\"Usage: Uliscan filename\\n\");\n"
+" exit(-1);\n"
+" } else {\n"
+" printf(\"Measuring file %s\\n\", argv[1]);\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:227
+#, no-wrap
+msgid " fptr = fopen(argv[1],\"rb\");\n"
+msgstr " fptr = fopen(argv[1],\"rb\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:232
+#, no-wrap
+msgid ""
+" if (fptr == NULL) {\n"
+" printf(\"Can't find %s\\n\", argv[1]);\n"
+" exit(-1);\n"
+" }\n"
+msgstr ""
+" if (fptr == NULL) {\n"
+" printf(\"Can't find %s\\n\", argv[1]);\n"
+" exit(-1);\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:236
+#, no-wrap
+msgid ""
+" for (i = 0; i < V; i++) {\n"
+" table[i] = 0;\n"
+" }\n"
+msgstr ""
+" for (i = 0; i < V; i++) {\n"
+" table[i] = 0;\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:241
+#, no-wrap
+msgid ""
+" for (i = 0; i < Q; i++) {\n"
+" b = fgetc(fptr);\n"
+" table[b] = i;\n"
+" }\n"
+msgstr ""
+" for (i = 0; i < Q; i++) {\n"
+" b = fgetc(fptr);\n"
+" table[b] = i;\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:243
+#, no-wrap
+msgid " printf(\"Init done\\n\");\n"
+msgstr " printf(\"Init done\\n\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:245
+#, no-wrap
+msgid " printf(\"Expected value for L=8 is 7.1836656\\n\");\n"
+msgstr " printf(\"Expected value for L=8 is 7.1836656\\n\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:247
+#, no-wrap
+msgid " run = 1;\n"
+msgstr " run = 1;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:251
+#, no-wrap
+msgid ""
+" while (run) {\n"
+" sum = 0.0;\n"
+" iproduct = 1;\n"
+msgstr ""
+" while (run) {\n"
+" sum = 0.0;\n"
+" iproduct = 1;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:256
+#, no-wrap
+msgid ""
+" if (run)\n"
+" for (i = Q; run && i < Q + K; i++) {\n"
+" j = i;\n"
+" b = fgetc(fptr);\n"
+msgstr ""
+" if (run)\n"
+" for (i = Q; run && i < Q + K; i++) {\n"
+" j = i;\n"
+" b = fgetc(fptr);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:259
+#, no-wrap
+msgid ""
+" if (b < 0)\n"
+" run = 0;\n"
+msgstr ""
+" if (b < 0)\n"
+" run = 0;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:263
+#, no-wrap
+msgid ""
+" if (run) {\n"
+" if (table[b] > j)\n"
+" j += K;\n"
+msgstr ""
+" if (run) {\n"
+" if (table[b] > j)\n"
+" j += K;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:265
+#, no-wrap
+msgid " sum += log((double)(j-table[b]));\n"
+msgstr " sum += log((double)(j-table[b]));\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:269
+#, no-wrap
+msgid ""
+" table[b] = i;\n"
+" }\n"
+" }\n"
+msgstr ""
+" table[b] = i;\n"
+" }\n"
+" }\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:272
+#, no-wrap
+msgid ""
+" if (!run)\n"
+" printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n"
+msgstr ""
+" if (!run)\n"
+" printf(\"Premature end of file; read %d blocks.\\n\", i - Q);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:275
+#, no-wrap
+msgid ""
+" sum = (sum/((double)(i - Q))) / log(2.0);\n"
+" printf(\"%4.4f \", sum);\n"
+msgstr ""
+" sum = (sum/((double)(i - Q))) / log(2.0);\n"
+" printf(\"%4.4f \", sum);\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:278
+#, no-wrap
+msgid ""
+" for (i = 0; i < (int)(sum*8.0 + 0.50); i++)\n"
+" printf(\"-\");\n"
+msgstr ""
+" for (i = 0; i < (int)(sum*8.0 + 0.50); i++)\n"
+" printf(\"-\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:280
+#, no-wrap
+msgid " printf(\"\\n\");\n"
+msgstr " printf(\"\\n\");\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ipsec-must/_index.adoc:294
+#, no-wrap
+msgid ""
+" /* refill initial table */\n"
+" if (0) {\n"
+" for (i = 0; i < Q; i++) {\n"
+" b = fgetc(fptr);\n"
+" if (b < 0) {\n"
+" run = 0;\n"
+" } else {\n"
+" table[b] = i;\n"
+" }\n"
+" }\n"
+" }\n"
+" }\n"
+"}\n"
+msgstr ""
+" /* refill initial table */\n"
+" if (0) {\n"
+" for (i = 0; i < Q; i++) {\n"
+" b = fgetc(fptr);\n"
+" if (b < 0) {\n"
+" run = 0;\n"
+" } else {\n"
+" table[b] = i;\n"
+" }\n"
+" }\n"
+" }\n"
+" }\n"
+"}\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/ldap-auth/_index.adoc b/documentation/content/pt-br/articles/ldap-auth/_index.adoc
index a449193e4c..bafccd4ffd 100644
--- a/documentation/content/pt-br/articles/ldap-auth/_index.adoc
+++ b/documentation/content/pt-br/articles/ldap-auth/_index.adoc
@@ -1,10 +1,12 @@
---
-title: Autenticação LDAP
authors:
- - author: Toby Burress
+ -
+ author: 'Toby Burress'
email: kurin@causa-sui.net
-copyright: 2007-2008 Projeto de Documentação do FreeBSD
-releaseinfo: "$FreeBSD$"
+copyright: '2007-2008 The FreeBSD Documentation Project'
+description: 'Guia para a configuração de um servidor LDAP para autenticação no FreeBSD'
+tags: ["LDAP", "Authentication", "OpenLDAP", "configuration", "guide", "tutorial", "FreeBSD"]
+title: 'Autenticação LDAP'
trademarks: ["freebsd", "general"]
---
@@ -17,13 +19,27 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/ldap-auth/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -46,9 +62,9 @@ Este artigo não pretende ser um relato exaustivo da segurança, robustez ou con
[[ldap]]
== Configurando o LDAP
-LDAP significa "Lightweight Directory Access Protocol" e é um subconjunto do X.500 Directory Access Protocol. Suas especificações mais recentes estão na http://www.ietf.org/rfc/rfc4510.txt[RFC4510] e documentos amigaveis. Essencialmente, é um banco de dados que espera ser lido com mais frequência do que é escrito.
+LDAP significa "Lightweight Directory Access Protocol" e é um subconjunto do X.500 Directory Access Protocol. Suas especificações mais recentes estão na http://www.ietf.org/rfc/rfc4510.txt[RFC4510] e documentos amigáveis. Essencialmente, é um banco de dados que espera ser lido com mais frequência do que é escrito.
-O servidor LDAP http://www.openldap.org/[OpenLDAP] será usado nos exemplos deste documento; embora os princípios aqui devam ser geralmente aplicáveis ​​a muitos servidores diferentes, a maior parte da administração concreta é especificamente para OpenLDAP. Existem várias versões de servidor nos ports, por exemplo package:net/openldap24-server[]. Os servidores clientes precisarão das bibliotecas package:net/openldap24-client[] correspondentes.
+O servidor LDAP http://www.openldap.org/[OpenLDAP] será usado nos exemplos deste documento; embora os princípios aqui devam ser geralmente aplicáveis a muitos servidores diferentes, a maior parte da administração concreta é especificamente para OpenLDAP. Existem várias versões de servidor nos ports, por exemplo package:net/openldap24-server[]. Os servidores clientes precisarão das bibliotecas package:net/openldap24-client[] correspondentes.
Existem (basicamente) duas áreas do serviço LDAP que precisam de configuração. A primeira é a configuração de um servidor para receber as conexões corretamente, e o segundo é adicionar entradas ao diretório do servidor para que as ferramentas do FreeBSD saibam como interagir com ele.
@@ -70,7 +86,7 @@ Primeiro, instale o OpenLDAP:
[example]
====
-[source,shell]
+[source, shell]
....
# cd /usr/ports/net/openldap24-server
# make install clean
@@ -104,21 +120,21 @@ Uma vez que o OpenLDAP esteja instalado via ports, os seguintes parâmetros de c
....
security ssf=128
-TLSCertificateFile /caminho/para/seu/cert.crt
-TLSCertificateKeyFile /caminho/para/sua/cert.key
-TLSCACertificateFile /caminho/para/seu/cacert.crt
+TLSCertificateFile /path/to/your/cert.crt
+TLSCertificateKeyFile /path/to/your/cert.key
+TLSCACertificateFile /path/to/your/cacert.crt
....
Aqui, `ssf=128` diz ao OpenLDAP para exigir criptografia de 128 bits para todas as conexões, tanto de pesquisa quanto de atualização. Esse parâmetro pode ser configurado com base nas necessidades de segurança do seu site, mas raramente é necessário enfraquecê-la, pois a maioria das bibliotecas de clientes LDAP oferece suporte à criptografia forte.
-Os arquivos [.filename]#cert.crt#, [.filename]#cert.key# e [.filename]#cacert.crt# são necessários para que os clientes autentiquem _você_ como o servidor LDAP válido. Se você simplesmente quiser um servidor que seja executado, poderá criar um certificado autoassinado com o OpenSSL:
+Os arquivos [.filename]#cert.crt#, [.filename]#cert.key# e [.filename]#cacert.crt# são necessários para que os clientes autentiquem _você_ como o servidor LDAP válido. Se você simplesmente quiser um servidor que seja executado, poderá criar um certificado auto-assinado com o OpenSSL:
[[genrsa]]
.Gerando uma chave RSA
[example]
====
-[source,shell]
+[source, shell]
....
% openssl genrsa -out cert.key 1024
Generating RSA private key, 1024 bit long modulus
@@ -140,7 +156,7 @@ Por fim, a requisição de assinatura de certificado precisa ser assinada:
[example]
====
-[source,shell]
+[source, shell]
....
% openssl x509 -req -in cert.csr -days 365 -signkey cert.key -out cert.crt
Signature ok
@@ -161,7 +177,7 @@ slapd_enable="YES"
Em seguida, execute `/usr/local/etc/rc.d/slapd start`. Isso deve iniciar o OpenLDAP. Confirme que está escutando em 389 com
-[source,shell]
+[source, shell]
....
% sockstat -4 -p 389
ldap slapd 3261 7 tcp4 *:389 *:*
@@ -219,7 +235,7 @@ Alguma consideração pode ser dada à classe de objeto a que seus usuários per
Para este exemplo, usaremos a classe de objeto `person`. Se você estiver usando `inetOrgPerson`, as etapas são basicamente idênticas, exceto que o atributo `sn` é necessário.
-Para adicionar um usuário `testuser`, o ldif seria:
+Para adicionar um usuário de teste chamado `tuser`, o ldif seria:
[.programlisting]
....
@@ -238,14 +254,14 @@ cn: tuser
Eu inicio os UIDs dos meus usuários LDAP em 10000 para evitar colisões com contas do sistema; você pode configurar o número que desejar aqui, desde que seja menor que 65536.
-Também precisamos de entradas de grupo. Eles são configuráveis ​​como entradas do usuário, mas usaremos os padrões abaixo:
+Também precisamos de entradas de grupo. Eles são configuráveis como entradas do usuário, mas usaremos os padrões abaixo:
[.programlisting]
....
-dn: ou=groups,dc=example,dc=org
+dn: ou=people,dc=example,dc=org
objectClass: top
objectClass: organizationalUnit
-ou: groups
+ou: people
dn: cn=tuser,ou=groups,dc=example,dc=org
objectClass: posixGroup
@@ -295,14 +311,14 @@ Com esta definição, o package:security/pam_ldap[] pesquisará todo o diretóri
Os usuários cujo shell não está em [.filename]#/etc/shells# não poderão efetuar login. Isto é particularmente importante quando o Bash é definido como o shell do usuário no servidor LDAP. O Bash não está incluído em uma instalação padrão do FreeBSD. Quando instalado a partir de um pacote ou port, ele está localizado em [.filename]#/usr/local/bin/bash#. Verifique se o caminho para o shell no servidor está definido corretamente:
-[source,shell]
+[source, shell]
....
% getent passwd username
....
Existem duas opções quando a saída mostra `/bin/bash` na última coluna. A primeira é alterar a entrada do usuário no servidor LDAP para [.filename]#/usr/local/bin/bash#. A segunda opção é criar um link simbólico no computador cliente LDAP para que o Bash seja encontrado no local correto:
-[source,shell]
+[source, shell]
....
# ln -s /usr/local/bin/bash /bin/bash
....
@@ -320,7 +336,7 @@ Para usar o PAM para autenticação, adicione a linha
[.programlisting]
....
-auth suficiente /usr/local/lib/pam_ldap.so no_warn
+auth sufficient /usr/local/lib/pam_ldap.so no_warn
....
Exatamente onde essa linha aparece no arquivo e quais opções aparecem na quarta coluna, determine o comportamento exato do mecanismo de autenticação; veja man:pam.d[5]
@@ -342,7 +358,7 @@ Os membros desse grupo são especificados em um ou mais atributos `memberUid` e
[.programlisting]
....
-memberUid: uid=algum usuário, ou=pessoas, dc=exemplo, dc=org
+memberUid: uid=someuser,ou=people,dc=example,dc=org
....
Além disso, essa diretiva não é verificada no PAM durante a autenticação, ela é verificada durante o gerenciamento de contas, portanto, você precisará de uma segunda linha em seus arquivos PAM sob `account`. Isso exigirá, por sua vez, que _todo_ usuário seja listado no grupo, o que não é necessariamente o que queremos. Para evitar o bloqueio de usuários que não estão no LDAP, você deve ativar o atributo `ignore_unknown_user`. Finalmente, você deve definir a opção `ignore_authinfo_unavail` para que você não fique bloqueado em todos os computadores quando o servidor LDAP estiver indisponível.
@@ -435,9 +451,10 @@ ldappasswd -D uid="$USER",ou=people,dc=example,dc=org \
[CAUTION]
====
+
Esse script dificilmente faz qualquer verificação de erros, mas, o mais importante, é muito indiferente sobre como ele armazena suas senhas. Se você fizer algo assim, ajuste pelo menos o valor de sysctl `security.bsd.see_other_uids`:
-[source,shell]
+[source, shell]
....
# sysctl security.bsd.see_other_uids=0
....
@@ -636,25 +653,26 @@ O package:security/openssh-portable[] tem a capacidade de contatar um servidor L
[appendix]
[[ssl-ca]]
-== Certificados do OpenSSL para LDAP
+== Certificados OpenSSL para o LDAP
-Se você estiver hospedando dois ou mais servidores LDAP, provavelmente não desejará usar certificados autoassinados, já que cada cliente precisará ser configurado para trabalhar com cada certificado. Embora isso seja possível, não é tão simples quanto criar sua própria autoridade de certificação e assinar os certificados de seus servidores com isso.
+Se você estiver hospedando dois ou mais servidores LDAP, provavelmente não desejará usar certificados auto-assinados, já que cada cliente precisará ser configurado para trabalhar com cada certificado. Embora isso seja possível, não é tão simples quanto criar sua própria autoridade de certificação e assinar os certificados de seus servidores com isso.
Os passos aqui são apresentados como eles são, com muito pouca tentativa de explicar o que está acontecendo - mais explicações podem ser encontradas em man:openssl[1] e aplicações iguais.
-Para criar uma autoridade de certificação, simplesmente precisamos de um certificado e chave autoassinados. As etapas para isso novamente são
+Para criar uma autoridade de certificação, simplesmente precisamos de um certificado e chave auto-assinados. As etapas para isso novamente são
[[make-cert]]
.Criando um Certificado
[example]
====
-[source,shell]
+[source, shell]
....
% openssl genrsa -out root.key 1024
% openssl req -new -key root.key -out root.csr
% openssl x509 -req -days 1024 -in root.csr -signkey root.key -out root.crt
....
+
====
Estas serão sua chave e certificado de CA raiz. Você provavelmente desejará criptografar a chave e armazená-la em um local seguro; qualquer pessoa com acesso a ele pode se passar por um dos seus servidores LDAP.
@@ -673,14 +691,15 @@ Para assinar a chave, use `-CA` e `-CAkey` em vez de `-signkey`:
[example]
====
-[source,shell]
+[source, shell]
....
-% openssl x509 -req -dias 1024 \
--em servidor ldap-one.csr -CA root.crt -CAkey root.key \
+% openssl x509 -req -days 1024 \
+-in ldap-server-one.csr -CA root.crt -CAkey root.key \
-out ldap-server-one.crt
....
+
====
O arquivo resultante será o certificado que você pode usar em seus servidores LDAP.
-Finalmente, para os clientes confiarem em todos os seus servidores, distribua [.filename]#root.crt# (o _certificado_, não a chave!) Para cada cliente, e especifique-o na directiva `TLSCACertificateFile` no [.filename]#ldap.conf#.
+Finalmente, para os clientes confiarem em todos os seus servidores, distribua [.filename]#root.crt# (o _certificado_, não a chave!) para cada cliente, e especifique-o na directiva `TLSCACertificateFile` no [.filename]#ldap.conf#.
diff --git a/documentation/content/pt-br/articles/ldap-auth/_index.po b/documentation/content/pt-br/articles/ldap-auth/_index.po
new file mode 100644
index 0000000000..ed9d1c7e98
--- /dev/null
+++ b/documentation/content/pt-br/articles/ldap-auth/_index.po
@@ -0,0 +1,1906 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2022-02-07 02:21+0000\n"
+"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesldap-auth_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/ldap-auth/_index.adoc:1
+#, no-wrap
+msgid "Guide for the configuration of an LDAP server for authentication on FreeBSD"
+msgstr ""
+"Guia para a configuração de um servidor LDAP para autenticação no FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/ldap-auth/_index.adoc:1
+#: documentation/content/en/articles/ldap-auth/_index.adoc:12
+#, no-wrap
+msgid "LDAP Authentication"
+msgstr "Autenticação LDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:48
+msgid ""
+"This document is intended as a guide for the configuration of an LDAP server "
+"(principally an OpenLDAP server) for authentication on FreeBSD. This is "
+"useful for situations where many servers need the same user accounts, for "
+"example as a replacement for NIS."
+msgstr ""
+"Este documento pretende ser um guia para a configuração de um servidor LDAP ("
+"principalmente um servidor OpenLDAP) para autenticação no FreeBSD. Isso é "
+"útil para situações em que muitos servidores precisam das mesmas contas de "
+"usuário, por exemplo, como substituto do NIS."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:50
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:54
+#, no-wrap
+msgid "Preface"
+msgstr "Prefácio"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:58
+msgid ""
+"This document is intended to give the reader enough of an understanding of "
+"LDAP to configure an LDAP server. This document will attempt to provide an "
+"explanation of package:net/nss_ldap[] and package:security/pam_ldap[] for "
+"use with client machines services for use with the LDAP server."
+msgstr ""
+"Este documento destina-se a fornecer ao leitor uma compreensão suficiente do "
+"LDAP para configurar um servidor LDAP. Este documento tentará fornecer uma "
+"explicação de package:net/nss_ldap[] e package:security/pam_ldap[] para uso "
+"com serviços de máquinas cliente para uso com o servidor LDAP."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:60
+msgid ""
+"When finished, the reader should be able to configure and deploy a FreeBSD "
+"server that can host an LDAP directory, and to configure and deploy a "
+"FreeBSD server which can authenticate against an LDAP directory."
+msgstr ""
+"Quando terminar, o leitor deve ser capaz de configurar e implantar um "
+"servidor FreeBSD que possa hospedar um diretório LDAP e configurar e "
+"implantar um servidor FreeBSD que possa autenticar em um diretório LDAP."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:64
+msgid ""
+"This article is not intended to be an exhaustive account of the security, "
+"robustness, or best practice considerations for configuring LDAP or the "
+"other services discussed herein. While the author takes care to do "
+"everything correctly, they do not address security issues beyond a general "
+"scope. This article should be considered to lay the theoretical groundwork "
+"only, and any actual implementation should be accompanied by careful "
+"requirement analysis."
+msgstr ""
+"Este artigo não pretende ser um relato exaustivo da segurança, robustez ou "
+"considerações sobre práticas recomendadas para configurar o LDAP ou os "
+"outros serviços discutidos aqui. Embora o autor tenha o cuidado de fazer "
+"tudo corretamente, ele não aborda problemas de segurança além do escopo "
+"geral. Este artigo deve ser considerado para estabelecer as bases teóricas "
+"somente, e qualquer implementação real deve ser acompanhada por uma análise "
+"cuidadosa dos requisitos."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:66
+#, no-wrap
+msgid "Configuring LDAP"
+msgstr "Configurando o LDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:71
+msgid ""
+"LDAP stands for \"Lightweight Directory Access Protocol\" and is a subset of "
+"the X.500 Directory Access Protocol. Its most recent specifications are in "
+"http://www.ietf.org/rfc/rfc4510.txt[RFC4510] and friends. Essentially it is "
+"a database that expects to be read from more often than it is written to."
+msgstr ""
+"LDAP significa \"Lightweight Directory Access Protocol\" e é um subconjunto "
+"do X.500 Directory Access Protocol. Suas especificações mais recentes estão "
+"na http://www.ietf.org/rfc/rfc4510.txt[RFC4510] e documentos amigáveis. "
+"Essencialmente, é um banco de dados que espera ser lido com mais frequência "
+"do que é escrito."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:75
+msgid ""
+"The LDAP server http://www.openldap.org/[OpenLDAP] will be used in the "
+"examples in this document; while the principles here should be generally "
+"applicable to many different servers, most of the concrete administration is "
+"OpenLDAP-specific. There are several server versions in ports, for example "
+"package:net/openldap24-server[]. Client servers will need the corresponding "
+"package:net/openldap24-client[] libraries."
+msgstr ""
+"O servidor LDAP http://www.openldap.org/[OpenLDAP] será usado nos exemplos "
+"deste documento; embora os princípios aqui devam ser geralmente aplicáveis a "
+"muitos servidores diferentes, a maior parte da administração concreta é "
+"especificamente para OpenLDAP. Existem várias versões de servidor nos ports, "
+"por exemplo package:net/openldap24-server[]. Os servidores clientes "
+"precisarão das bibliotecas package:net/openldap24-client[] correspondentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:78
+msgid ""
+"There are (basically) two areas of the LDAP service which need "
+"configuration. The first is setting up a server to receive connections "
+"properly, and the second is adding entries to the server's directory so that "
+"FreeBSD tools know how to interact with it."
+msgstr ""
+"Existem (basicamente) duas áreas do serviço LDAP que precisam de "
+"configuração. A primeira é a configuração de um servidor para receber as "
+"conexões corretamente, e o segundo é adicionar entradas ao diretório do "
+"servidor para que as ferramentas do FreeBSD saibam como interagir com ele."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:80
+#, no-wrap
+msgid "Setting Up the Server for Connections"
+msgstr "Configurando o servidor para conexões"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:86
+msgid ""
+"This section is specific to OpenLDAP. If you are using another server, you "
+"will need to consult that server's documentation."
+msgstr ""
+"Esta seção é específica do OpenLDAP. Se você estiver usando outro servidor, "
+"precisará consultar a documentação desse servidor."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:89
+#: documentation/content/en/articles/ldap-auth/_index.adoc:94
+#, no-wrap
+msgid "Installing OpenLDAP"
+msgstr "Instalando o OpenLDAP"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:92
+msgid "First, install OpenLDAP:"
+msgstr "Primeiro, instale o OpenLDAP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:102
+#, no-wrap
+msgid ""
+"# cd /usr/ports/net/openldap24-server\n"
+"# make install clean\n"
+msgstr ""
+"# cd /usr/ports/net/openldap24-server\n"
+"# make install clean\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:107
+msgid ""
+"This installs the `slapd` and `slurpd` binaries, along with the required "
+"OpenLDAP libraries."
+msgstr ""
+"Isso instala os binários `slapd` e `slurpd`, juntamente com as bibliotecas "
+"OpenLDAP requeridas."
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:109
+#, no-wrap
+msgid "Configuring OpenLDAP"
+msgstr "Configurando o OpenLDAP"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:112
+msgid "Next we must configure OpenLDAP."
+msgstr "Em seguida, devemos configurar o OpenLDAP."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:115
+msgid ""
+"You will want to require encryption in your connections to the LDAP server; "
+"otherwise your users' passwords will be transferred in plain text, which is "
+"considered insecure. The tools we will be using support two very similar "
+"kinds of encryption, SSL and TLS."
+msgstr ""
+"Você desejará exigir criptografia em suas conexões com o servidor LDAP; caso "
+"contrário, as senhas de seus usuários serão transferidas em texto simples, o "
+"que é considerado inseguro. As ferramentas que usaremos suportam dois tipos "
+"muito semelhantes de criptografia, SSL e TLS."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:118
+msgid ""
+"TLS stands for \"Transportation Layer Security\". Services that employ TLS "
+"tend to connect on the _same_ ports as the same services without TLS; thus "
+"an SMTP server which supports TLS will listen for connections on port 25, "
+"and an LDAP server will listen on 389."
+msgstr ""
+"TLS significa \"Segurança da Camada de Transporte\". Serviços que empregam "
+"TLS tendem a se conectar nas _mesmas_ portas que os mesmos serviços sem TLS; "
+"assim, um servidor SMTP que suporte o TLS escutará as conexões na porta 25 e "
+"um servidor LDAP escutará no 389."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:121
+msgid ""
+"SSL stands for \"Secure Sockets Layer\", and services that implement SSL do "
+"_not_ listen on the same ports as their non-SSL counterparts. Thus SMTPS "
+"listens on port 465 (not 25), HTTPS listens on 443, and LDAPS on 636."
+msgstr ""
+"SSL significa \"Secure Sockets Layer\", e serviços que implementam SSL _não_ "
+"escutam nas mesmas portas que seus equivalentes não-SSL. Assim, o SMTPS "
+"atende na porta 465 (não 25), HTTPS escuta na 443 e LDAPS na 636."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:125
+msgid ""
+"The reason SSL uses a different port than TLS is because a TLS connection "
+"begins as plain text, and switches to encrypted traffic after the `STARTTLS` "
+"directive. SSL connections are encrypted from the beginning. Other than "
+"that there are no substantial differences between the two."
+msgstr ""
+"A razão pela qual o SSL usa uma porta diferente do TLS é porque uma conexão "
+"TLS começa como texto simples e alterna para o tráfego criptografado após a "
+"diretiva `STARTTLS`. As conexões SSL são criptografadas desde o início. Além "
+"disso, não há diferenças substanciais entre os dois."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:129
+msgid "We will adjust OpenLDAP to use TLS, as SSL is considered deprecated."
+msgstr ""
+"Ajustaremos o OpenLDAP para usar o TLS, já que o SSL é considerado obsoleto."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:132
+msgid ""
+"Once OpenLDAP is installed via ports, the following configuration parameters "
+"in [.filename]#/usr/local/etc/openldap/slapd.conf# will enable TLS:"
+msgstr ""
+"Uma vez que o OpenLDAP esteja instalado via ports, os seguintes parâmetros "
+"de configuração em [.filename]#/usr/local/etc/openldap/slapd.conf# irão "
+"ativar o TLS:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:136
+#, no-wrap
+msgid "security ssf=128\n"
+msgstr "security ssf=128\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:140
+#, no-wrap
+msgid ""
+"TLSCertificateFile /path/to/your/cert.crt\n"
+"TLSCertificateKeyFile /path/to/your/cert.key\n"
+"TLSCACertificateFile /path/to/your/cacert.crt\n"
+msgstr ""
+"TLSCertificateFile /path/to/your/cert.crt\n"
+"TLSCertificateKeyFile /path/to/your/cert.key\n"
+"TLSCACertificateFile /path/to/your/cacert.crt\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:144
+msgid ""
+"Here, `ssf=128` tells OpenLDAP to require 128-bit encryption for all "
+"connections, both search and update. This parameter may be configured based "
+"on the security needs of your site, but rarely you need to weaken it, as "
+"most LDAP client libraries support strong encryption."
+msgstr ""
+"Aqui, `ssf=128` diz ao OpenLDAP para exigir criptografia de 128 bits para "
+"todas as conexões, tanto de pesquisa quanto de atualização. Esse parâmetro "
+"pode ser configurado com base nas necessidades de segurança do seu site, mas "
+"raramente é necessário enfraquecê-la, pois a maioria das bibliotecas de "
+"clientes LDAP oferece suporte à criptografia forte."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:147
+msgid ""
+"The [.filename]#cert.crt#, [.filename]#cert.key#, and [.filename]#cacert."
+"crt# files are necessary for clients to authenticate _you_ as the valid LDAP "
+"server. If you simply want a server that runs, you can create a self-signed "
+"certificate with OpenSSL:"
+msgstr ""
+"Os arquivos [.filename]#cert.crt#, [.filename]#cert.key# e [.filename]#cacert"
+".crt# são necessários para que os clientes autentiquem _você_ como o "
+"servidor LDAP válido. Se você simplesmente quiser um servidor que seja "
+"executado, poderá criar um certificado auto-assinado com o OpenSSL:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:149
+#, no-wrap
+msgid "Generating an RSA Key"
+msgstr "Gerando uma chave RSA"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:160
+#, no-wrap
+msgid ""
+"% openssl genrsa -out cert.key 1024\n"
+"Generating RSA private key, 1024 bit long modulus\n"
+"....................++++++\n"
+"...++++++\n"
+"e is 65537 (0x10001)\n"
+msgstr ""
+"% openssl genrsa -out cert.key 1024\n"
+"Generating RSA private key, 1024 bit long modulus\n"
+"....................++++++\n"
+"...++++++\n"
+"e is 65537 (0x10001)\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:162
+#, no-wrap
+msgid "% openssl req -new -key cert.key -out cert.csr\n"
+msgstr "% openssl req -new -key cert.key -out cert.csr\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:171
+msgid ""
+"At this point you should be prompted for some values. You may enter "
+"whatever values you like; however, it is important the \"Common Name\" value "
+"be the fully qualified domain name of the OpenLDAP server. In our case, and "
+"the examples here, the server is _server.example.org_. Incorrectly setting "
+"this value will cause clients to fail when making connections. This can the "
+"cause of great frustration, so ensure that you follow these steps closely."
+msgstr ""
+"Neste ponto, você deve ser solicitado para digitar alguns valores. Você pode "
+"inserir os valores que quiser; no entanto, é importante que o valor \"Common "
+"Name\" seja o nome de domínio totalmente qualificado do servidor OpenLDAP. "
+"No nosso caso, e os exemplos aqui, o servidor é _server.example.org_. "
+"Definir incorretamente esse valor fará com que os clientes falhem ao fazer "
+"conexões. Isso pode causar uma grande frustração, portanto, certifique-se de "
+"seguir atentamente estas etapas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:173
+msgid "Finally, the certificate signing request needs to be signed:"
+msgstr ""
+"Por fim, a requisição de assinatura de certificado precisa ser assinada:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:175
+#, no-wrap
+msgid "Self-signing the Certificate"
+msgstr "Auto-assinando o certificado"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:185
+#, no-wrap
+msgid ""
+"% openssl x509 -req -in cert.csr -days 365 -signkey cert.key -out cert.crt\n"
+"Signature ok\n"
+"subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd\n"
+"Getting Private key\n"
+msgstr ""
+"% openssl x509 -req -in cert.csr -days 365 -signkey cert.key -out cert.crt\n"
+"Signature ok\n"
+"subject=/C=AU/ST=Some-State/O=Internet Widgits Pty Ltd\n"
+"Getting Private key\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:191
+msgid ""
+"This will create a self-signed certificate that can be used for the "
+"directives in [.filename]#slapd.conf#, where [.filename]#cert.crt# and [."
+"filename]#cacert.crt# are the same file. If you are going to use many "
+"OpenLDAP servers (for replication via `slurpd`) you will want to see <<ssl-"
+"ca>> to generate a CA key and use it to sign individual server certificates."
+msgstr ""
+"Isso criará um certificado auto-assinado que pode ser usado para as "
+"diretivas em [.filename]#slapd.conf#, onde [.filename]#cert.crt# e [."
+"filename]#cacert.crt# são o mesmo arquivo. Se você for usar muitos "
+"servidores OpenLDAP (para replicação via `slurpd`), você vai querer ver "
+"<<ssl-ca>> para gerar uma chave CA e usá-la para assinar certificados de "
+"servidor individuais."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:193
+msgid "Once this is done, put the following in [.filename]#/etc/rc.conf#:"
+msgstr "Feito isso, coloque o seguinte em [.filename]#/etc/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:197
+#, no-wrap
+msgid "slapd_enable=\"YES\"\n"
+msgstr "slapd_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:202
+msgid ""
+"Then run `/usr/local/etc/rc.d/slapd start`. This should start OpenLDAP. "
+"Confirm that it is listening on 389 with"
+msgstr ""
+"Em seguida, execute `/usr/local/etc/rc.d/slapd start`. Isso deve iniciar o "
+"OpenLDAP. Confirme que está escutando em 389 com"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:207
+#, no-wrap
+msgid ""
+"% sockstat -4 -p 389\n"
+"ldap slapd 3261 7 tcp4 *:389 *:*\n"
+msgstr ""
+"% sockstat -4 -p 389\n"
+"ldap slapd 3261 7 tcp4 *:389 *:*\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:210
+#, no-wrap
+msgid "Configuring the Client"
+msgstr "Configurando o Cliente"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:214
+msgid ""
+"Install the package:net/openldap24-client[] port for the OpenLDAP "
+"libraries. The client machines will always have OpenLDAP libraries since "
+"that is all package:security/pam_ldap[] and package:net/nss_ldap[] support, "
+"at least for the moment."
+msgstr ""
+"Instale o port package:net/openldap24-client[] para as bibliotecas do "
+"OpenLDAP. As máquinas cliente sempre terão bibliotecas OpenLDAP, já que é "
+"todo o suporte a package:security/pam_ldap[] e package:net/nss_ldap[], pelo "
+"menos por enquanto."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:217
+msgid ""
+"The configuration file for the OpenLDAP libraries is [.filename]#/usr/local/"
+"etc/openldap/ldap.conf#. Edit this file to contain the following values:"
+msgstr ""
+"O arquivo de configuração para as bibliotecas OpenLDAP é [.filename]#/usr/"
+"local/etc/openldap/ldap.conf#. Edite este arquivo para conter os seguintes "
+"valores:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:224
+#, no-wrap
+msgid ""
+"base dc=example,dc=org\n"
+"uri ldap://server.example.org/\n"
+"ssl start_tls\n"
+"tls_cacert /path/to/your/cacert.crt\n"
+msgstr ""
+"base dc=example,dc=org\n"
+"uri ldap://server.example.org/\n"
+"ssl start_tls\n"
+"tls_cacert /path/to/your/cacert.crt\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:229
+msgid ""
+"It is important that your clients have access to [.filename]#cacert.crt#, "
+"otherwise they will not be able to connect."
+msgstr ""
+"É importante que seus clientes tenham acesso ao [.filename]#cacert.crt#, "
+"caso contrário, eles não poderão se conectar."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:236
+msgid ""
+"There are two files called [.filename]#ldap.conf#. The first is this file, "
+"which is for the OpenLDAP libraries and defines how to talk to the server. "
+"The second is [.filename]#/usr/local/etc/ldap.conf#, and is for pam_ldap."
+msgstr ""
+"Existem dois arquivos chamados [.filename]#ldap.conf#. O primeiro é este "
+"arquivo, que é para as bibliotecas OpenLDAP e define como falar com o "
+"servidor. O segundo é [.filename]#/usr/local/etc/ldap.conf# e é para "
+"pam_ldap."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:241
+msgid ""
+"At this point you should be able to run `ldapsearch -Z` on the client "
+"machine; `-Z` means \"use TLS\". If you encounter an error, then something "
+"is configured wrong; most likely it is your certificates. Use man:"
+"openssl[1]'s `s_client` and `s_server` to ensure you have them configured "
+"and signed properly."
+msgstr ""
+"Neste ponto, você deve conseguir executar `ldapsearch -Z` na máquina cliente;"
+" `-Z` significa \"usar o TLS\". Se você encontrar um erro, então algo está "
+"configurado errado; muito provavelmente são seus certificados. Use os "
+"comandos `s_client` e `s_server` do man:openssl[1] para assegurar que você "
+"os tenha configurado e assinado corretamente."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:243
+#, no-wrap
+msgid "Entries in the Database"
+msgstr "Entradas no banco de dados"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:248
+msgid ""
+"Authentication against an LDAP directory is generally accomplished by "
+"attempting to bind to the directory as the connecting user. This is done by "
+"establishing a \"simple\" bind on the directory with the user name "
+"supplied. If there is an entry with the `uid` equal to the user name and "
+"that entry's `userPassword` attribute matches the password supplied, then "
+"the bind is successful."
+msgstr ""
+"A autenticação em um diretório LDAP geralmente é realizada pela tentativa de "
+"vincular ao diretório como o usuário de conexão. Isso é feito estabelecendo "
+"um vinculo \"simples\" no diretório com o nome de usuário fornecido. Se "
+"houver uma entrada com o `uid` igual ao nome do usuário e o atributo "
+"`userPassword` da entrada corresponder à senha fornecida, o vinculo será bem-"
+"sucedido."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:250
+msgid ""
+"The first thing we have to do is figure out is where in the directory our "
+"users will live."
+msgstr ""
+"A primeira coisa que temos que fazer é descobrir onde no diretório os nossos "
+"usuários irão estar."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:254
+msgid ""
+"The base entry for our database is `dc=example,dc=org`. The default "
+"location for users that most clients seem to expect is something like "
+"`ou=people,_base_`, so that is what will be used here. However keep in mind "
+"that this is configurable."
+msgstr ""
+"A entrada de base para nosso banco de dados é `dc=example,dc=org`. O local "
+"padrão para usuários que a maioria dos clientes parece esperar é algo como `"
+"ou=people, _base_`, então é isso que será usado aqui. No entanto, tenha em "
+"mente que isso é configurável."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:256
+msgid "So the ldif entry for the `people` organizational unit will look like:"
+msgstr ""
+"Assim, a entrada ldif para a unidade organizacional `people` será semelhante "
+"a:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:263
+#, no-wrap
+msgid ""
+"dn: ou=people,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: people\n"
+msgstr ""
+"dn: ou=people,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: people\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:266
+msgid "All users will be created as subentries of this organizational unit."
+msgstr ""
+"Todos os usuários serão criados como subentradas dessa unidade "
+"organizacional."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:271
+msgid ""
+"Some thought might be given to the object class your users will belong to. "
+"Most tools by default will use `people`, which is fine if you simply want to "
+"provide entries against which to authenticate. However, if you are going to "
+"store user information in the LDAP database as well, you will probably want "
+"to use `inetOrgPerson`, which has many useful attributes. In either case, "
+"the relevant schemas need to be loaded in [.filename]#slapd.conf#."
+msgstr ""
+"Alguma consideração pode ser dada à classe de objeto a que seus usuários "
+"pertencerão. A maioria das ferramentas, por padrão, usará `people`, o que é "
+"bom se você quiser simplesmente fornecer entradas para autenticar. No "
+"entanto, se você for armazenar informações do usuário no banco de dados "
+"LDAP, provavelmente usará `inetOrgPerson`, que possui muitos atributos "
+"úteis. Em ambos os casos, os esquemas relevantes precisam ser carregados em ["
+".filename]#slapd.conf#."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:274
+msgid ""
+"For this example we will use the `person` object class. If you are using "
+"`inetOrgPerson`, the steps are basically identical, except that the `sn` "
+"attribute is required."
+msgstr ""
+"Para este exemplo, usaremos a classe de objeto `person`. Se você estiver "
+"usando `inetOrgPerson`, as etapas são basicamente idênticas, exceto que o "
+"atributo `sn` é necessário."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:276
+msgid "To add a test-user named `tuser`, the ldif would be:"
+msgstr "Para adicionar um usuário de teste chamado `tuser`, o ldif seria:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:290
+#, no-wrap
+msgid ""
+"dn: uid=tuser,ou=people,dc=example,dc=org\n"
+"objectClass: person\n"
+"objectClass: posixAccount\n"
+"objectClass: shadowAccount\n"
+"objectClass: top\n"
+"uidNumber: 10000\n"
+"gidNumber: 10000\n"
+"homeDirectory: /home/tuser\n"
+"loginShell: /bin/csh\n"
+"uid: tuser\n"
+"cn: tuser\n"
+msgstr ""
+"dn: uid=tuser,ou=people,dc=example,dc=org\n"
+"objectClass: person\n"
+"objectClass: posixAccount\n"
+"objectClass: shadowAccount\n"
+"objectClass: top\n"
+"uidNumber: 10000\n"
+"gidNumber: 10000\n"
+"homeDirectory: /home/tuser\n"
+"loginShell: /bin/csh\n"
+"uid: tuser\n"
+"cn: tuser\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:293
+msgid ""
+"I start my LDAP users' UIDs at 10000 to avoid collisions with system "
+"accounts; you can configure whatever number you wish here, as long as it is "
+"less than 65536."
+msgstr ""
+"Eu inicio os UIDs dos meus usuários LDAP em 10000 para evitar colisões com "
+"contas do sistema; você pode configurar o número que desejar aqui, desde que "
+"seja menor que 65536."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:296
+msgid ""
+"We also need group entries. They are as configurable as user entries, but "
+"we will use the defaults below:"
+msgstr ""
+"Também precisamos de entradas de grupo. Eles são configuráveis como entradas "
+"do usuário, mas usaremos os padrões abaixo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:303
+#, no-wrap
+msgid ""
+"dn: ou=groups,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: groups\n"
+msgstr ""
+"dn: ou=people,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: organizationalUnit\n"
+"ou: people\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:309
+#, no-wrap
+msgid ""
+"dn: cn=tuser,ou=groups,dc=example,dc=org\n"
+"objectClass: posixGroup\n"
+"objectClass: top\n"
+"gidNumber: 10000\n"
+"cn: tuser\n"
+msgstr ""
+"dn: cn=tuser,ou=groups,dc=example,dc=org\n"
+"objectClass: posixGroup\n"
+"objectClass: top\n"
+"gidNumber: 10000\n"
+"cn: tuser\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:313
+msgid ""
+"To enter these into your database, you can use `slapadd` or `ldapadd` on a "
+"file containing these entries. Alternatively, you can use package:sysutils/"
+"ldapvi[]."
+msgstr ""
+"Para inseri-los em seu banco de dados, você pode usar `slapadd` ou `ldapadd` "
+"em um arquivo contendo essas entradas. Alternativamente, você pode usar o "
+"package:sysutils/ldapvi[]."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:316
+msgid ""
+"The `ldapsearch` utility on the client machine should now return these "
+"entries. If it does, your database is properly configured to be used as an "
+"LDAP authentication server."
+msgstr ""
+"O utilitário `ldapsearch` na máquina cliente deve agora retornar essas "
+"entradas. Em caso afirmativo, o banco de dados está configurado corretamente "
+"para ser usado como um servidor de autenticação LDAP."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:318
+#, no-wrap
+msgid "Client Configuration"
+msgstr "Configuração do Cliente"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:321
+msgid ""
+"The client should already have OpenLDAP libraries from <<ldap-connect-"
+"client>>, but if you are installing several client machines you will need to "
+"install package:net/openldap24-client[] on each of them."
+msgstr ""
+"O cliente já deve ter bibliotecas do OpenLDAP do <<ldap-connect-client>>, "
+"mas se você estiver instalando várias máquinas clientes, precisará instalar "
+"o package:net/openldap24-client[] em cada um deles."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:323
+msgid ""
+"FreeBSD requires two ports to be installed to authenticate against an LDAP "
+"server, package:security/pam_ldap[] and package:net/nss_ldap[]."
+msgstr ""
+"O FreeBSD requer que dois ports sejam instalados para autenticação em um "
+"servidor LDAP, package:security/pam_ldap[] e package:net/nss_ldap[]."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:325
+#, no-wrap
+msgid "Authentication"
+msgstr "Autenticação"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:328
+msgid ""
+"package:security/pam_ldap[] is configured via [.filename]#/usr/local/etc/"
+"ldap.conf#."
+msgstr ""
+"O package:security/pam_ldap[] é configurado através do [.filename]#/usr/"
+"local/etc/ldap.conf#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:333
+msgid ""
+"This is a _different file_ than the OpenLDAP library functions' "
+"configuration file, [.filename]#/usr/local/etc/openldap/ldap.conf#; however, "
+"it takes many of the same options; in fact it is a superset of that file. "
+"For the rest of this section, references to [.filename]#ldap.conf# will mean "
+"[.filename]#/usr/local/etc/ldap.conf#."
+msgstr ""
+"Este é um _arquivo diferente_ que o arquivo de configuração das funções da "
+"biblioteca OpenLDAP, [.filename]#/usr/local/etc/openldap/ldap.conf#; no "
+"entanto, são necessárias muitas das mesmas opções; na verdade, é um "
+"superconjunto desse arquivo. Para o resto desta seção, referências a [."
+"filename]#ldap.conf# irão significar o arquivo [.filename]#/usr/local/etc/"
+"ldap.conf#."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:337
+msgid ""
+"Thus, we will want to copy all of our original configuration parameters from "
+"[.filename]#openldap/ldap.conf# to the new [.filename]#ldap.conf#. Once "
+"this is done, we want to tell package:security/pam_ldap[] what to look for "
+"on the directory server."
+msgstr ""
+"Assim, vamos querer copiar todos os nossos parâmetros de configuração "
+"originais do [.filename]#openldap/ldap.conf# para o novo [.filename]#ldap."
+"conf#. Feito isso, queremos informar ao package:security/pam_ldap[] o que "
+"procurar no servidor de diretório."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:340
+msgid ""
+"We are identifying our users with the `uid` attribute. To configure this "
+"(though it is the default), set the `pam_login_attribute` directive in [."
+"filename]#ldap.conf#:"
+msgstr ""
+"Estamos identificando nossos usuários com o atributo `uid`. Para configurar "
+"isso (embora seja o padrão), defina a diretiva `pam_login_attribute` no [."
+"filename]#ldap.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:342
+#, no-wrap
+msgid "Setting `pam_login_attribute`"
+msgstr "Definindo `pam_login_attribute`"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:349
+#, no-wrap
+msgid "pam_login_attribute uid\n"
+msgstr "pam_login_attribute uid\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:357
+msgid ""
+"With this set, package:security/pam_ldap[] will search the entire LDAP "
+"directory under `base` for the value `uid=_username_`. If it finds one and "
+"only one entry, it will attempt to bind as that user with the password it "
+"was given. If it binds correctly, then it will allow access. Otherwise it "
+"will fail."
+msgstr ""
+"Com esta definição, o package:security/pam_ldap[] pesquisará todo o "
+"diretório LDAP na `base` para o valor `uid=_username_`. Se encontrar uma e "
+"apenas uma entrada, ela tentará se vincular como aquele usuário com a senha "
+"que foi fornecida. Se vincular corretamente, então permitirá o acesso. Caso "
+"contrário, falhará."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:363
+msgid ""
+"Users whose shell is not in [.filename]#/etc/shells# will not be able to log "
+"in. This is particularly important when Bash is set as the user shell on "
+"the LDAP server. Bash is not included with a default installation of "
+"FreeBSD. When installed from a package or port, it is located at [."
+"filename]#/usr/local/bin/bash#. Verify that the path to the shell on the "
+"server is set correctly:"
+msgstr ""
+"Os usuários cujo shell não está em [.filename]#/etc/shells# não poderão "
+"efetuar login. Isto é particularmente importante quando o Bash é definido "
+"como o shell do usuário no servidor LDAP. O Bash não está incluído em uma "
+"instalação padrão do FreeBSD. Quando instalado a partir de um pacote ou "
+"port, ele está localizado em [.filename]#/usr/local/bin/bash#. Verifique se "
+"o caminho para o shell no servidor está definido corretamente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:367
+#, no-wrap
+msgid "% getent passwd username\n"
+msgstr "% getent passwd username\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:372
+msgid ""
+"There are two choices when the output shows `/bin/bash` in the last column. "
+"The first is to change the user's entry on the LDAP server to [.filename]#/"
+"usr/local/bin/bash#. The second option is to create a symlink on the LDAP "
+"client computer so Bash is found at the correct location:"
+msgstr ""
+"Existem duas opções quando a saída mostra `/bin/bash` na última coluna. A "
+"primeira é alterar a entrada do usuário no servidor LDAP para [.filename]#/"
+"usr/local/bin/bash#. A segunda opção é criar um link simbólico no computador "
+"cliente LDAP para que o Bash seja encontrado no local correto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:376
+#, no-wrap
+msgid "# ln -s /usr/local/bin/bash /bin/bash\n"
+msgstr "# ln -s /usr/local/bin/bash /bin/bash\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:380
+msgid ""
+"Make sure that [.filename]#/etc/shells# contains entries for both `/usr/"
+"local/bin/bash` and `/bin/bash`. The user will then be able to log in to "
+"the system with Bash as their shell."
+msgstr ""
+"Certifique-se de que [.filename]#/etc/shells# contenha entradas para ambos `/"
+"usr/local/bin/bash` e `/bin/bash`. O usuário poderá então efetuar login no "
+"sistema com Bash como seu shell."
+
+#. type: Title ====
+#: documentation/content/en/articles/ldap-auth/_index.adoc:382
+#, no-wrap
+msgid "PAM"
+msgstr "PAM"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:386
+msgid ""
+"PAM, which stands for \"Pluggable Authentication Modules\", is the method by "
+"which FreeBSD authenticates most of its sessions. To tell FreeBSD we wish "
+"to use an LDAP server, we will have to add a line to the appropriate PAM "
+"file."
+msgstr ""
+"PAM, que significa \"Pluggable Authentication Modules\", é o método pelo "
+"qual o FreeBSD autentica a maioria de suas sessões. Para dizer ao FreeBSD "
+"que desejamos usar um servidor LDAP, teremos que adicionar uma linha ao "
+"arquivo PAM apropriado."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:388
+msgid ""
+"Most of the time the appropriate PAM file is [.filename]#/etc/pam.d/sshd#, "
+"if you want to use SSH (remember to set the relevant options in [.filename]#/"
+"etc/ssh/sshd_config#, otherwise SSH will not use PAM)."
+msgstr ""
+"Na maioria das vezes o arquivo PAM apropriado é [.filename]#/etc/pam.d/sshd#"
+", se você quiser usar SSH (lembre-se de definir as opções relevantes em [."
+"filename]#/etc/ssh/sshd_config#, caso contrário o SSH não usará o PAM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:390
+msgid "To use PAM for authentication, add the line"
+msgstr "Para usar o PAM para autenticação, adicione a linha"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:394
+#, no-wrap
+msgid "auth sufficient /usr/local/lib/pam_ldap.so no_warn\n"
+msgstr "auth sufficient /usr/local/lib/pam_ldap.so no_warn\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:397
+msgid ""
+"Exactly where this line shows up in the file and which options appear in the "
+"fourth column determine the exact behavior of the authentication mechanism; "
+"see man:pam[d]"
+msgstr ""
+"Exatamente onde essa linha aparece no arquivo e quais opções aparecem na "
+"quarta coluna, determine o comportamento exato do mecanismo de autenticação; "
+"veja man:pam.d[5]"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:400
+msgid ""
+"With this configuration you should be able to authenticate a user against an "
+"LDAP directory. PAM will perform a bind with your credentials, and if "
+"successful will tell SSH to allow access."
+msgstr ""
+"Com essa configuração, você deve conseguir autenticar um usuário em um "
+"diretório LDAP. O PAM executará uma ligação com suas credenciais e, se for "
+"bem-sucedido, informará ao SSH para permitir o acesso."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:404
+msgid ""
+"However it is not a good idea to allow _every_ user in the directory into "
+"_every_ client machine. With the current configuration, all that a user "
+"needs to log into a machine is an LDAP entry. Fortunately there are a few "
+"ways to restrict user access."
+msgstr ""
+"No entanto, não é uma boa idéia permitir que _todo_ usuário no diretório "
+"dentro de _todo_ computador cliente. Com a configuração atual, tudo o que um "
+"usuário precisa para efetuar login em uma máquina é uma entrada LDAP. "
+"Felizmente, existem algumas maneiras de restringir o acesso do usuário."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:407
+msgid ""
+"[.filename]#ldap.conf# supports a `pam_groupdn` directive; every account "
+"that connects to this machine needs to be a member of the group specified "
+"here. For example, if you have"
+msgstr ""
+"O [.filename]#ldap.conf# suporta uma diretiva `pam_groupdn`; Cada conta que "
+"se conecta a essa máquina precisa ser membro do grupo especificado aqui. Por "
+"exemplo, se você tem"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:411
+#, no-wrap
+msgid "pam_groupdn cn=servername,ou=accessgroups,dc=example,dc=org\n"
+msgstr "pam_groupdn cn=servername,ou=accessgroups,dc=example,dc=org\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:415
+msgid ""
+"in [.filename]#ldap.conf#, then only members of that group will be able to "
+"log in. There are a few things to bear in mind, however."
+msgstr ""
+"em [.filename]#ldap.conf#, somente os membros desse grupo poderão efetuar "
+"login. Entretanto, há algumas coisas a serem lembradas."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:418
+msgid ""
+"Members of this group are specified in one or more `memberUid` attributes, "
+"and each attribute must have the full distinguished name of the member. So "
+"`memberUid: someuser` will not work; it must be:"
+msgstr ""
+"Os membros desse grupo são especificados em um ou mais atributos `memberUid` "
+"e cada atributo deve ter o nome distinto completo do membro. Então "
+"`memberUid:someuser` não funcionará; deve ser:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:422
+#, no-wrap
+msgid "memberUid: uid=someuser,ou=people,dc=example,dc=org\n"
+msgstr "memberUid: uid=someuser,ou=people,dc=example,dc=org\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:428
+msgid ""
+"Additionally, this directive is not checked in PAM during authentication, it "
+"is checked during account management, so you will need a second line in your "
+"PAM files under `account`. This will require, in turn, _every_ user to be "
+"listed in the group, which is not necessarily what we want. To avoid "
+"blocking users that are not in LDAP, you should enable the "
+"`ignore_unknown_user` attribute. Finally, you should set the "
+"`ignore_authinfo_unavail` option so that you are not locked out of every "
+"computer when the LDAP server is unavailable."
+msgstr ""
+"Além disso, essa diretiva não é verificada no PAM durante a autenticação, "
+"ela é verificada durante o gerenciamento de contas, portanto, você precisará "
+"de uma segunda linha em seus arquivos PAM sob `account`. Isso exigirá, por "
+"sua vez, que _todo_ usuário seja listado no grupo, o que não é "
+"necessariamente o que queremos. Para evitar o bloqueio de usuários que não "
+"estão no LDAP, você deve ativar o atributo `ignore_unknown_user`. "
+"Finalmente, você deve definir a opção `ignore_authinfo_unavail` para que "
+"você não fique bloqueado em todos os computadores quando o servidor LDAP "
+"estiver indisponível."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:430
+msgid "Your [.filename]#pam.d/sshd# might then end up looking like this:"
+msgstr "Seu [.filename]#pam.d/sshd# pode acabar ficando assim:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:432
+#, no-wrap
+msgid "Sample [.filename]#pam.d/sshd#"
+msgstr "Exemplo [.filename]#pam.d/sshd#"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:443
+#, no-wrap
+msgid ""
+"auth required pam_nologin.so no_warn\n"
+"auth sufficient pam_opie.so no_warn no_fake_prompts\n"
+"auth requisite pam_opieaccess.so no_warn allow_local\n"
+"auth sufficient /usr/local/lib/pam_ldap.so no_warn\n"
+"auth required pam_unix.so no_warn try_first_pass\n"
+msgstr ""
+"auth required pam_nologin.so no_warn\n"
+"auth sufficient pam_opie.so no_warn "
+"no_fake_prompts\n"
+"auth requisite pam_opieaccess.so no_warn allow_local\n"
+"auth sufficient /usr/local/lib/pam_ldap.so no_warn\n"
+"auth required pam_unix.so no_warn "
+"try_first_pass\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:446
+#, no-wrap
+msgid ""
+"account required pam_login_access.so\n"
+"account required /usr/local/lib/pam_ldap.so no_warn ignore_authinfo_unavail ignore_unknown_user\n"
+msgstr ""
+"account required pam_login_access.so\n"
+"account required /usr/local/lib/pam_ldap.so no_warn "
+"ignore_authinfo_unavail ignore_unknown_user\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:455
+msgid ""
+"Since we are adding these lines specifically to [.filename]#pam.d/sshd#, "
+"this will only have an effect on SSH sessions. LDAP users will be unable to "
+"log in at the console. To change this behavior, examine the other files in "
+"[.filename]#/etc/pam.d# and modify them accordingly."
+msgstr ""
+"Como estamos adicionando essas linhas especificamente para [.filename]#pam.d/"
+"sshd#, isso só terá um efeito nas sessões SSH. Os usuários LDAP não poderão "
+"efetuar login no console. Para mudar este comportamento, examine os outros "
+"arquivos em [.filename]#/etc/pam.d# e modifique-os de acordo."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:458
+#, no-wrap
+msgid "Name Service Switch"
+msgstr "Switch de serviço de nome"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:462
+msgid ""
+"NSS is the service that maps attributes to names. So, for example, if a "
+"file is owned by user `1001`, an application will query NSS for the name of "
+"`1001`, and it might get `bob` or `ted` or whatever the user's name is."
+msgstr ""
+"NSS é o serviço que mapeia atributos para nomes. Assim, por exemplo, se um "
+"arquivo é de propriedade do usuário `1001`, um aplicativo consultará o NSS "
+"para o nome de `1001`, e ele pode obter `bob` ou `ted` ou qualquer que seja "
+"o nome do usuário."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:464
+msgid ""
+"Now that our user information is kept in LDAP, we need to tell NSS to look "
+"there when queried."
+msgstr ""
+"Agora que nossas informações sobre o usuário são mantidas no LDAP, "
+"precisamos dizer ao NSS para procurar lá quando perguntado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:469
+msgid ""
+"The package:net/nss_ldap[] port does this. It uses the same configuration "
+"file as package:security/pam_ldap[], and should not need any extra "
+"parameters once it is installed. Instead, what is left is simply to edit [."
+"filename]#/etc/nsswitch.conf# to take advantage of the directory. Simply "
+"replace the following lines:"
+msgstr ""
+"O port package:net/nss_ldap[] faz isso. Ele usa o mesmo arquivo de "
+"configuração como package:security/pam_ldap[] e não deve precisar de nenhum "
+"parâmetro extra depois de instalado. Em vez disso, o que resta é "
+"simplesmente editar é [.filename]#/etc/nsswitch.conf# para aproveitar o "
+"diretório. Simplesmente substitua as seguintes linhas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:474
+#, no-wrap
+msgid ""
+"group: compat\n"
+"passwd: compat\n"
+msgstr ""
+"group: compat\n"
+"passwd: compat\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:477
+msgid "with"
+msgstr "com"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:482
+#, no-wrap
+msgid ""
+"group: files ldap\n"
+"passwd: files ldap\n"
+msgstr ""
+"group: files ldap\n"
+"passwd: files ldap\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:485
+msgid "This will allow you to map usernames to UIDs and UIDs to usernames."
+msgstr ""
+"Isso permitirá que você mapeie nomes de usuários para UIDs e UIDs para nomes "
+"de usuários."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:487
+msgid "Congratulations! You should now have working LDAP authentication."
+msgstr "Parabéns! Agora você deve ter autenticação LDAP em funcionamento."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:489
+#, no-wrap
+msgid "Caveats"
+msgstr "Ressalvas"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:495
+msgid ""
+"Unfortunately, as of the time this was written FreeBSD did not support "
+"changing user passwords with man:passwd[1]. As a result of this, most "
+"administrators are left to implement a solution themselves. I provide some "
+"examples here. Note that if you write your own password change script, "
+"there are some security issues you should be made aware of; see <<security-"
+"passwd>>"
+msgstr ""
+"Infelizmente, a partir do momento em que isso foi escrito, o FreeBSD não "
+"suportava a mudança de senhas de usuário com man:passwd[1]. Por causa disso, "
+"a maioria dos administradores estão deixando para implementar uma solução "
+"por conta própria. Eu forneço alguns exemplos aqui. Observe que, se você "
+"escrever seu próprio script de alteração de senha, há alguns problemas de "
+"segurança dos quais você deve estar ciente; veja <<security-passwd>>"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:497
+#, no-wrap
+msgid "Shell Script for Changing Passwords"
+msgstr "Script de shell para alteração de senhas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:504
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr "#!/bin/sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:510
+#, no-wrap
+msgid ""
+"stty -echo\n"
+"read -p \"Old Password: \" oldp; echo\n"
+"read -p \"New Password: \" np1; echo\n"
+"read -p \"Retype New Password: \" np2; echo\n"
+"stty echo\n"
+msgstr ""
+"stty -echo\n"
+"read -p \"Old Password: \" oldp; echo\n"
+"read -p \"New Password: \" np1; echo\n"
+"read -p \"Retype New Password: \" np2; echo\n"
+"stty echo\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:515
+#, no-wrap
+msgid ""
+"if [ \"$np1\" != \"$np2\" ]; then\n"
+" echo \"Passwords do not match.\"\n"
+" exit 1\n"
+"fi\n"
+msgstr ""
+"if [ \"$np1\" != \"$np2\" ]; then\n"
+" echo \"Passwords do not match.\"\n"
+" exit 1\n"
+"fi\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:520
+#, no-wrap
+msgid ""
+"ldappasswd -D uid=\"$USER\",ou=people,dc=example,dc=org \\\n"
+" -w \"$oldp\" \\\n"
+" -a \"$oldp\" \\\n"
+" -s \"$np1\"\n"
+msgstr ""
+"ldappasswd -D uid=\"$USER\",ou=people,dc=example,dc=org \\\n"
+" -w \"$oldp\" \\\n"
+" -a \"$oldp\" \\\n"
+" -s \"$np1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:529
+msgid ""
+"This script does hardly any error checking, but more important it is very "
+"cavalier about how it stores your passwords. If you do anything like this, "
+"at least adjust the `security.bsd.see_other_uids` sysctl value:"
+msgstr ""
+"Esse script dificilmente faz qualquer verificação de erros, mas, o mais "
+"importante, é muito indiferente sobre como ele armazena suas senhas. Se você "
+"fizer algo assim, ajuste pelo menos o valor de sysctl `security.bsd."
+"see_other_uids`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:533
+#, no-wrap
+msgid "# sysctl security.bsd.see_other_uids=0\n"
+msgstr "# sysctl security.bsd.see_other_uids=0\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:540
+msgid ""
+"A more flexible (and probably more secure) approach can be used by writing a "
+"custom program, or even a web interface. The following is part of a Ruby "
+"library that can change LDAP passwords. It sees use both on the command "
+"line, and on the web."
+msgstr ""
+"Uma abordagem mais flexível (e provavelmente mais segura) pode ser usada "
+"escrevendo um programa personalizado, ou até mesmo uma interface web. A "
+"seguir, parte de uma biblioteca Ruby que pode alterar senhas LDAP. Ele vê o "
+"uso na linha de comando e na web."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:542
+#, no-wrap
+msgid "Ruby Script for Changing Passwords"
+msgstr "Script Ruby para Alterar Senhas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:552
+#, no-wrap
+msgid ""
+"require 'ldap'\n"
+"require 'base64'\n"
+"require 'digest'\n"
+"require 'password' # ruby-password\n"
+msgstr ""
+"require 'ldap'\n"
+"require 'base64'\n"
+"require 'digest'\n"
+"require 'password' # ruby-password\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:555
+#, no-wrap
+msgid ""
+"ldap_server = \"ldap.example.org\"\n"
+"luser = \"uid=#{ENV['USER']},ou=people,dc=example,dc=org\"\n"
+msgstr ""
+"ldap_server = \"ldap.example.org\"\n"
+"luser = \"uid=#{ENV['USER']},ou=people,dc=example,dc=org\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:560
+#, no-wrap
+msgid ""
+"# get the new password, check it, and create a salted hash from it\n"
+"def get_password\n"
+" pwd1 = Password.get(\"New Password: \")\n"
+" pwd2 = Password.get(\"Retype New Password: \")\n"
+msgstr ""
+"# get the new password, check it, and create a salted hash from it\n"
+"def get_password\n"
+" pwd1 = Password.get(\"New Password: \")\n"
+" pwd2 = Password.get(\"Retype New Password: \")\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:563
+#, no-wrap
+msgid ""
+" raise if pwd1 != pwd2\n"
+" pwd1.check # check password strength\n"
+msgstr ""
+" raise if pwd1 != pwd2\n"
+" pwd1.check # check password strength\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:569
+#, no-wrap
+msgid ""
+" salt = rand.to_s.gsub(/0\\./, '')\n"
+" pass = pwd1.to_s\n"
+" hash = \"{SSHA}\"+Base64.encode64(Digest::SHA1.digest(\"#{pass}#{salt}\")+salt).chomp!\n"
+" return hash\n"
+"end\n"
+msgstr ""
+" salt = rand.to_s.gsub(/0\\./, '')\n"
+" pass = pwd1.to_s\n"
+" hash = \"{SSHA}\"+Base64.encode64(Digest::SHA1.digest(\"#{pass}#{salt}\""
+")+salt).chomp!\n"
+" return hash\n"
+"end\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:572
+#, no-wrap
+msgid ""
+"oldp = Password.get(\"Old Password: \")\n"
+"newp = get_password\n"
+msgstr ""
+"oldp = Password.get(\"Old Password: \")\n"
+"newp = get_password\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:575
+#, no-wrap
+msgid ""
+"# We'll just replace it. That we can bind proves that we either know\n"
+"# the old password or are an admin.\n"
+msgstr ""
+"# We'll just replace it. That we can bind proves that we either know\n"
+"# the old password or are an admin.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:579
+#, no-wrap
+msgid ""
+"replace = LDAP::Mod.new(LDAP::LDAP_MOD_REPLACE | LDAP::LDAP_MOD_BVALUES,\n"
+" \"userPassword\",\n"
+" [newp])\n"
+msgstr ""
+"replace = LDAP::Mod.new(LDAP::LDAP_MOD_REPLACE | LDAP::LDAP_MOD_BVALUES,\n"
+" \"userPassword\",\n"
+" [newp])\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:584
+#, no-wrap
+msgid ""
+"conn = LDAP::SSLConn.new(ldap_server, 389, true)\n"
+"conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)\n"
+"conn.bind(luser, oldp)\n"
+"conn.modify(luser, [replace])\n"
+msgstr ""
+"conn = LDAP::SSLConn.new(ldap_server, 389, true)\n"
+"conn.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)\n"
+"conn.bind(luser, oldp)\n"
+"conn.modify(luser, [replace])\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:589
+msgid ""
+"Although not guaranteed to be free of security holes (the password is kept "
+"in memory, for example) this is cleaner and more flexible than a simple `sh` "
+"script."
+msgstr ""
+"Apesar de não ter a garantia de estar livre de falhas de segurança (a senha "
+"é mantida na memória, por exemplo), isso é mais limpo e mais flexível do que "
+"um simples script `sh`."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:591
+#, no-wrap
+msgid "Security Considerations"
+msgstr "Considerações de segurança"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:594
+msgid ""
+"Now that your machines (and possibly other services) are authenticating "
+"against your LDAP server, this server needs to be protected at least as well "
+"as [.filename]#/etc/master.passwd# would be on a regular server, and "
+"possibly even more so since a broken or cracked LDAP server would break "
+"every client service."
+msgstr ""
+"Agora que suas máquinas (e possivelmente outros serviços) estão autenticando "
+"em seu servidor LDAP, este servidor precisa ser protegido pelo menos tão bem "
+"quanto [.filename]#/etc/master.passwd# seria em um servidor regular, e "
+"possivelmente mais ainda, uma vez que um servidor LDAP corrompido quebraria "
+"todos os serviços do cliente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:597
+msgid ""
+"Remember, this section is not exhaustive. You should continually review "
+"your configuration and procedures for improvements."
+msgstr ""
+"Lembre-se, esta seção não é exaustiva. Você deve revisar continuamente sua "
+"configuração e procedimentos para melhorias."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:599
+#, no-wrap
+msgid "Setting Attributes Read-only"
+msgstr "Definindo atributos somente leitura"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:603
+msgid ""
+"Several attributes in LDAP should be read-only. If left writable by the "
+"user, for example, a user could change his `uidNumber` attribute to `0` and "
+"get `root` access!"
+msgstr ""
+"Vários atributos no LDAP devem ser somente leitura. Se deixado gravável pelo "
+"usuário, por exemplo, um usuário poderia alterar seu atributo `uidNumber` "
+"para `0` e obter acesso ao `root`!"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:607
+msgid ""
+"To begin with, the `userPassword` attribute should not be world-readable. "
+"By default, anyone who can connect to the LDAP server can read this "
+"attribute. To disable this, put the following in [.filename]#slapd.conf#:"
+msgstr ""
+"Para começar, o atributo `userPassword` não deve ser legível por todos. Por "
+"padrão, qualquer pessoa que possa se conectar ao servidor LDAP pode ler esse "
+"atributo. Para desabilitar isso, coloque o seguinte em [.filename]#slapd."
+"conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:609
+#, no-wrap
+msgid "Hide Passwords"
+msgstr "Ocultar senhas"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:620
+#: documentation/content/en/articles/ldap-auth/_index.adoc:646
+#, no-wrap
+msgid ""
+"access to dn.subtree=\"ou=people,dc=example,dc=org\"\n"
+" attrs=userPassword\n"
+" by self write\n"
+" by anonymous auth\n"
+" by * none\n"
+msgstr ""
+"access to dn.subtree=\"ou=people,dc=example,dc=org\"\n"
+" attrs=userPassword\n"
+" by self write\n"
+" by anonymous auth\n"
+" by * none\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:624
+#: documentation/content/en/articles/ldap-auth/_index.adoc:653
+#, no-wrap
+msgid ""
+"access to *\n"
+" by self write\n"
+" by * read\n"
+msgstr ""
+"access to *\n"
+" by self write\n"
+" by * read\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:629
+msgid ""
+"This will disallow reading of the `userPassword` attribute, while still "
+"allowing users to change their own passwords."
+msgstr ""
+"Isso não permitirá a leitura do atributo `userPassword`, enquanto ainda "
+"permite que os usuários alterem suas próprias senhas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:633
+msgid ""
+"Additionally, you'll want to keep users from changing some of their own "
+"attributes. By default, users can change any attribute (except for those "
+"which the LDAP schemas themselves deny changes), such as `uidNumber`. To "
+"close this hole, modify the above to"
+msgstr ""
+"Além disso, você desejará impedir que os usuários alterem alguns de seus "
+"próprios atributos. Por padrão, os usuários podem alterar qualquer atributo ("
+"exceto aqueles que os próprios esquemas LDAP negam alterações), como "
+"`uidNumber`. Para fechar este buraco, modifique o acima para"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:635
+#, no-wrap
+msgid "Read-only Attributes"
+msgstr "Atributos somente leitura"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:649
+#, no-wrap
+msgid ""
+"access to attrs=homeDirectory,uidNumber,gidNumber\n"
+" by * read\n"
+msgstr ""
+"access to attrs=homeDirectory,uidNumber,gidNumber\n"
+" by * read\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:658
+msgid "This will stop users from being able to masquerade as other users."
+msgstr "Isso impedirá que os usuários se disfarçam como outros usuários."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:660
+#, no-wrap
+msgid "`root` Account Definition"
+msgstr "Definição da conta `root`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:665
+msgid ""
+"Often the `root` or manager account for the LDAP service will be defined in "
+"the configuration file. OpenLDAP supports this, for example, and it works, "
+"but it can lead to trouble if [.filename]#slapd.conf# is compromised. It "
+"may be better to use this only to bootstrap yourself into LDAP, and then "
+"define a `root` account there."
+msgstr ""
+"Geralmente, a conta `root` ou a conta de administrador para o serviço LDAP "
+"será definida no arquivo de configuração. O OpenLDAP suporta isso, por "
+"exemplo, e funciona, mas pode causar problemas se o [.filename]#slapd.conf# "
+"estiver comprometido. Pode ser melhor usar isto apenas para se "
+"autoinicializar no LDAP, e então definir uma conta `root`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:669
+msgid ""
+"Even better is to define accounts that have limited permissions, and omit a "
+"`root` account entirely. For example, users that can add or remove user "
+"accounts are added to one group, but they cannot themselves change the "
+"membership of this group. Such a security policy would help mitigate the "
+"effects of a leaked password."
+msgstr ""
+"Melhor ainda é definir contas com permissões limitadas e omitir totalmente "
+"uma conta `root`. Por exemplo, os usuários que podem adicionar ou remover "
+"contas de usuário são adicionados a um grupo, mas não podem alterar a "
+"participação desse grupo. Essa política de segurança ajudaria a mitigar os "
+"efeitos de uma senha perdida."
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:671
+#: documentation/content/en/articles/ldap-auth/_index.adoc:677
+#, no-wrap
+msgid "Creating a Management Group"
+msgstr "Criando um grupo de gerenciamento"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:675
+msgid ""
+"Say you want your IT department to be able to change home directories for "
+"users, but you do not want all of them to be able to add or remove users. "
+"The way to do this is to add a group for these admins:"
+msgstr ""
+"Digamos que você queira que seu departamento de TI possa alterar os "
+"diretórios pessoais dos usuários, mas não deseja que todos eles possam "
+"adicionar ou remover usuários. A maneira de fazer isso é adicionar um grupo "
+"para esses administradores:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:690
+#, no-wrap
+msgid ""
+"dn: cn=homemanagement,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: posixGroup\n"
+"cn: homemanagement\n"
+"gidNumber: 121 # required for posixGroup\n"
+"memberUid: uid=tuser,ou=people,dc=example,dc=org\n"
+"memberUid: uid=user2,ou=people,dc=example,dc=org\n"
+msgstr ""
+"dn: cn=homemanagement,dc=example,dc=org\n"
+"objectClass: top\n"
+"objectClass: posixGroup\n"
+"cn: homemanagement\n"
+"gidNumber: 121 # required for posixGroup\n"
+"memberUid: uid=tuser,ou=people,dc=example,dc=org\n"
+"memberUid: uid=user2,ou=people,dc=example,dc=org\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:695
+msgid "And then change the permissions attributes in [.filename]#slapd.conf#:"
+msgstr "E então mude os atributos de permissões em [.filename]#slapd.conf#:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:697
+#, no-wrap
+msgid "ACLs for a Home Directory Management Group"
+msgstr "ACLs para um grupo de gerenciamento de diretório inicial"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:707
+#, no-wrap
+msgid ""
+"access to dn.subtree=\"ou=people,dc=example,dc=org\"\n"
+" attr=homeDirectory\n"
+" by dn=\"cn=homemanagement,dc=example,dc=org\"\n"
+" dnattr=memberUid write\n"
+msgstr ""
+"access to dn.subtree=\"ou=people,dc=example,dc=org\"\n"
+" attr=homeDirectory\n"
+" by dn=\"cn=homemanagement,dc=example,dc=org\"\n"
+" dnattr=memberUid write\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:712
+msgid "Now `tuser` and `user2` can change other users' home directories."
+msgstr ""
+"Agora `tuser` e `user2` podem alterar os diretórios home de outros usuários."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:716
+msgid ""
+"In this example we have given a subset of administrative power to certain "
+"users without giving them power in other domains. The idea is that soon no "
+"single user account has the power of a `root` account, but every power root "
+"had is had by at least one user. The `root` account then becomes "
+"unnecessary and can be removed."
+msgstr ""
+"Neste exemplo, demos um subconjunto de poder administrativo a certos "
+"usuários sem dar a eles poder em outros domínios. A idéia é que em breve "
+"nenhuma conta de usuário tenha o poder de uma conta `root`, mas todo poder "
+"que root tem seja tido por pelo menos um usuário. A conta `root` torna-se "
+"desnecessária e pode ser removida."
+
+#. type: Title ===
+#: documentation/content/en/articles/ldap-auth/_index.adoc:718
+#, no-wrap
+msgid "Password Storage"
+msgstr "Armazenamento de Senha"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:722
+msgid ""
+"By default OpenLDAP will store the value of the `userPassword` attribute as "
+"it stores any other data: in the clear. Most of the time it is base 64 "
+"encoded, which provides enough protection to keep an honest administrator "
+"from knowing your password, but little else."
+msgstr ""
+"Por padrão, OpenLDAP armazenará o valor do atributo `userPassword` conforme "
+"ele armazena quaisquer outros dados: puro texto. Na maioria das vezes, ele é "
+"codificado na base 64, o que fornece proteção suficiente para impedir que um "
+"administrador honesto conheça sua senha, mas pouco ainda."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:725
+msgid ""
+"It is a good idea, then, to store passwords in a more secure format, such as "
+"SSHA (salted SHA). This is done by whatever program you use to change "
+"users' passwords."
+msgstr ""
+"É uma boa idéia, então, armazenar senhas em um formato mais seguro, como o "
+"SSHA (salted SHA). Isso é feito por qualquer programa que você use para "
+"alterar as senhas dos usuários."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:730
+#, no-wrap
+msgid "Useful Aids"
+msgstr "Ajudas Úteis"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:733
+msgid ""
+"There are a few other programs that might be useful, particularly if you "
+"have many users and do not want to configure everything manually."
+msgstr ""
+"Existem alguns outros programas que podem ser úteis, especialmente se você "
+"tiver muitos usuários e não quiser configurar tudo manualmente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:736
+msgid ""
+"package:security/pam_mkhomedir[] is a PAM module that always succeeds; its "
+"purpose is to create home directories for users which do not have them. If "
+"you have dozens of client servers and hundreds of users, it is much easier "
+"to use this and set up skeleton directories than to prepare every home "
+"directory."
+msgstr ""
+"O package:security/pam_mkhomedir[] é um módulo PAM que sempre é bem-sucedido;"
+" Sua finalidade é criar diretórios pessoais para usuários que não os "
+"possuem. Se você tiver dezenas de servidores clientes e centenas de "
+"usuários, é muito mais fácil usar isso e configurar diretórios esqueletos do "
+"que preparar cada diretório inicial."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:740
+msgid ""
+"package:sysutils/cpu[] is a man:pw[8]-like utility that can be used to "
+"manage users in the LDAP directory. You can call it directly, or wrap "
+"scripts around it. It can handle both TLS (with the `-x` flag) and SSL "
+"(directly)."
+msgstr ""
+"O package:sysutils/cpu[] é um utilitário do tipo man:pw[8] que pode ser "
+"usado para gerenciar usuários no diretório LDAP. Você pode chamá-lo "
+"diretamente ou encapsular os scripts em torno dele. Ele pode manipular tanto "
+"o TLS (com o sinalizador `-x`) quanto o SSL (diretamente)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:744
+msgid ""
+"package:sysutils/ldapvi[] is a great utility for editing LDAP values in an "
+"LDIF-like syntax. The directory (or subsection of the directory) is "
+"presented in the editor chosen by the `EDITOR` environment variable. This "
+"makes it easy to enable large-scale changes in the directory without having "
+"to write a custom tool."
+msgstr ""
+"O package:sysutils/ldapvi[] é um ótimo utilitário para editar valores LDAP "
+"em uma sintaxe semelhante a LDIF. O diretório (ou subseção do diretório) é "
+"apresentado no editor escolhido pela variável de ambiente `EDITOR`. Isso "
+"facilita a ativação de alterações em grande escala no diretório sem a "
+"necessidade de escrever uma ferramenta personalizada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:747
+msgid ""
+"package:security/openssh-portable[] has the ability to contact an LDAP "
+"server to verify SSH keys. This is extremely nice if you have many servers "
+"and do not want to copy your public keys across all of them."
+msgstr ""
+"O package:security/openssh-portable[] tem a capacidade de contatar um "
+"servidor LDAP para verificar as chaves SSH. Isso é extremamente bom se você "
+"tiver muitos servidores e não quiser copiar suas chaves públicas em todos "
+"eles."
+
+#. type: Title ==
+#: documentation/content/en/articles/ldap-auth/_index.adoc:752
+#, no-wrap
+msgid "OpenSSL Certificates for LDAP"
+msgstr "Certificados OpenSSL para o LDAP"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:756
+msgid ""
+"If you are hosting two or more LDAP servers, you will probably not want to "
+"use self-signed certificates, since each client will have to be configured "
+"to work with each certificate. While this is possible, it is not nearly as "
+"simple as creating your own certificate authority, and signing your servers' "
+"certificates with that."
+msgstr ""
+"Se você estiver hospedando dois ou mais servidores LDAP, provavelmente não "
+"desejará usar certificados auto-assinados, já que cada cliente precisará ser "
+"configurado para trabalhar com cada certificado. Embora isso seja possível, "
+"não é tão simples quanto criar sua própria autoridade de certificação e "
+"assinar os certificados de seus servidores com isso."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:758
+msgid ""
+"The steps here are presented as they are with very little attempt at "
+"explaining what is going on-further explanation can be found in man:"
+"openssl[1] and its friends."
+msgstr ""
+"Os passos aqui são apresentados como eles são, com muito pouca tentativa de "
+"explicar o que está acontecendo - mais explicações podem ser encontradas em "
+"man:openssl[1] e aplicações iguais."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:761
+msgid ""
+"To create a certificate authority, we simply need a self-signed certificate "
+"and key. The steps for this again are"
+msgstr ""
+"Para criar uma autoridade de certificação, simplesmente precisamos de um "
+"certificado e chave auto-assinados. As etapas para isso novamente são"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:763
+#, no-wrap
+msgid "Creating a Certificate"
+msgstr "Criando um Certificado"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:772
+#, no-wrap
+msgid ""
+"% openssl genrsa -out root.key 1024\n"
+"% openssl req -new -key root.key -out root.csr\n"
+"% openssl x509 -req -days 1024 -in root.csr -signkey root.key -out root.crt\n"
+msgstr ""
+"% openssl genrsa -out root.key 1024\n"
+"% openssl req -new -key root.key -out root.csr\n"
+"% openssl x509 -req -days 1024 -in root.csr -signkey root.key -out root.crt\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:778
+msgid ""
+"These will be your root CA key and certificate. You will probably want to "
+"encrypt the key and store it in a cool, dry place; anyone with access to it "
+"can masquerade as one of your LDAP servers."
+msgstr ""
+"Estas serão sua chave e certificado de CA raiz. Você provavelmente desejará "
+"criptografar a chave e armazená-la em um local seguro; qualquer pessoa com "
+"acesso a ele pode se passar por um dos seus servidores LDAP."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:781
+msgid ""
+"Next, using the first two steps above create a key [.filename]#ldap-server-"
+"one.key# and certificate signing request [.filename]#ldap-server-one.csr#. "
+"Once you sign the signing request with [.filename]#root.key#, you will be "
+"able to use [.filename]#ldap-server-one.*# on your LDAP servers."
+msgstr ""
+"Em seguida, usando as duas primeiras etapas acima, crie uma chave [.filename"
+"]#ldap-server-one.key# e a solicitação de assinatura de certificado [."
+"filename]#ldap-server-one.csr#. Depois de assinar o pedido de assinatura com "
+"[.filename]#root.key#, você poderá usar o [.filename]#ldap-server-one.*# nos "
+"servidores LDAP."
+
+#. type: Plain text
+#: documentation/content/en/articles/ldap-auth/_index.adoc:785
+msgid ""
+"Do not forget to use the fully qualified domain name for the \"common name\" "
+"attribute when generating the certificate signing request; otherwise clients "
+"will reject a connection with you, and it can be very tricky to diagnose."
+msgstr ""
+"Não se esqueça de usar o nome de domínio totalmente qualificado para o "
+"atributo \"common name\" ao gerar a solicitação de assinatura de certificado;"
+" caso contrário, os clientes rejeitarão uma conexão com você e poderá ser "
+"muito complicado diagnosticar."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:788
+msgid "To sign the key, use `-CA` and `-CAkey` instead of `-signkey`:"
+msgstr "Para assinar a chave, use `-CA` e `-CAkey` em vez de `-signkey`:"
+
+#. type: Block title
+#: documentation/content/en/articles/ldap-auth/_index.adoc:790
+#, no-wrap
+msgid "Signing as a Certificate Authority"
+msgstr "Assinando como uma autoridade de certificação"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:799
+#, no-wrap
+msgid ""
+"% openssl x509 -req -days 1024 \\\n"
+"-in ldap-server-one.csr -CA root.crt -CAkey root.key \\\n"
+"-out ldap-server-one.crt\n"
+msgstr ""
+"% openssl x509 -req -days 1024 \\\n"
+"-in ldap-server-one.csr -CA root.crt -CAkey root.key \\\n"
+"-out ldap-server-one.crt\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:804
+msgid ""
+"The resulting file will be the certificate that you can use on your LDAP "
+"servers."
+msgstr ""
+"O arquivo resultante será o certificado que você pode usar em seus "
+"servidores LDAP."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/ldap-auth/_index.adoc:805
+msgid ""
+"Finally, for clients to trust all your servers, distribute [.filename]#root."
+"crt# (the __certificate__, not the key!) to each client, and specify it in "
+"the `TLSCACertificateFile` directive in [.filename]#ldap.conf#."
+msgstr ""
+"Finalmente, para os clientes confiarem em todos os seus servidores, "
+"distribua [.filename]#root.crt# (o _certificado_, não a chave!) para cada "
+"cliente, e especifique-o na directiva `TLSCACertificateFile` no [."
+"filename]#ldap.conf#."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/leap-seconds/_index.adoc b/documentation/content/pt-br/articles/leap-seconds/_index.adoc
index fce3b3255d..3e7ab2df60 100644
--- a/documentation/content/pt-br/articles/leap-seconds/_index.adoc
+++ b/documentation/content/pt-br/articles/leap-seconds/_index.adoc
@@ -13,24 +13,26 @@ title: Suporte do FreeBSD a Leap Seconds
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-ifeval::["{backend}" == "html5"]
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/leap-seconds/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-include::../../../../shared/pt-br/urls.adoc[]
endif::[]
-ifeval::["{backend}" == "epub3"]
-include::../../../../shared/pt-br/urls.adoc[]
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
'''
@@ -51,7 +53,7 @@ O comportamento padrão do leap Seconds é descrito na https://tools.ietf.org/ht
[[leapseconds-posix]]
== Manipulação padrão do leap seconds no FreeBSD
-A maneira mais fácil de manipular o leap seconds é com a regra de tempo POSIX que é utilizada por padrão pelo FreeBSD, combinada com o link:{handbook}#network-ntp[NTP]. Quando o man:ntpd[8] está sendo executado e o tempo é sincronizado com os servidores NTP de upstream que gerenciam o leap seconds corretamente, o leap second causará a repetição do último segundo do dia de forma automática. Nenhum outro ajuste será necessário.
+A maneira mais fácil de manipular o leap seconds é com a regra de tempo POSIX que é utilizada por padrão pelo FreeBSD, combinada com o extref:{handbook}network-servers[NTP, network-ntp]. Quando o man:ntpd[8] está sendo executado e o tempo é sincronizado com os servidores NTP de upstream que gerenciam o leap seconds corretamente, o leap second causará a repetição do último segundo do dia de forma automática. Nenhum outro ajuste será necessário.
Se os servidores de NTP upstream não gerenciarem o leap seconds corretamente, o man:ntpd[8] irá avançar em um segundo após o servidor se corrigir.
diff --git a/documentation/content/pt-br/articles/leap-seconds/_index.po b/documentation/content/pt-br/articles/leap-seconds/_index.po
index 6bb1993f9b..92d146e548 100644
--- a/documentation/content/pt-br/articles/leap-seconds/_index.po
+++ b/documentation/content/pt-br/articles/leap-seconds/_index.po
@@ -93,7 +93,7 @@ msgstr "Manipulação padrão do leap seconds no FreeBSD"
#: documentation/content/en/articles/leap-seconds/_index.adoc:53
msgid ""
"The easiest way to handle leap seconds is with the POSIX time rules FreeBSD "
-"uses by default, combined with link:{handbook}#network-ntp[NTP]. When man:"
+"uses by default, combined with extref:{handbook}network-servers[NTP]. When man:"
"ntpd[8] is running and the time is synchronized with upstream NTP servers "
"that handle leap seconds correctly, the leap second will cause the system "
"time to automatically repeat the last second of the day. No other "
diff --git a/documentation/content/pt-br/articles/license-guide/_index.adoc b/documentation/content/pt-br/articles/license-guide/_index.adoc
new file mode 100644
index 0000000000..e9f4d96af8
--- /dev/null
+++ b/documentation/content/pt-br/articles/license-guide/_index.adoc
@@ -0,0 +1,233 @@
+---
+authors:
+ -
+ author: 'Warner Losh'
+ email: imp@FreeBSD.org
+title: 'Política de Licenciamento do FreeBSD'
+trademarks: ["freebsd", "general"]
+---
+
+= Política de Licenciamento do FreeBSD
+:doctype: article
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:source-highlighter: rouge
+:experimental:
+
+'''
+
+toc::[]
+
+[[intro]]
+
+[[pref-license]]
+== Licença Preferencial para Novos Arquivos
+
+O restante desta seção tem como objetivo ajudá-lo a começar. Em caso de dúvida, pergunte. É muito mais fácil receber conselhos do que corrigir o código fonte. O Projeto FreeBSD usa tanto licenças explícitas (onde o texto literal da licença é reproduzido em cada arquivo) quanto licenças desvinculadas (onde uma etiqueta no arquivo especifica a licença, como descrito neste documento).
+
+O Projeto FreeBSD usa este texto como licença preferencial:
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+
+O projeto FreeBSD não permite o uso da "cláusula de publicidade" em novos códigos. Devido ao grande número de colaboradores do projeto FreeBSD, se tornou difícil para muitos fornecedores comerciais cumprir com esta cláusula. Se você tiver código no repositório com a cláusula de publicidade, considere mudar para uma licença sem ela. Novas contribuições ao FreeBSD devem usar a licença BSD-2-Clause.
+
+O projeto FreeBSD desencoraja completamente novas licenças e variações das licenças padrão. Novas licenças requerem a aprovação do {core-email} para residir no repositório principal. No passado, licenças não padrão geraram mais problemas do que as padrão. Uma redação inadequada de licenças não padrão muitas vezes causa mais consequências não intencionais, então elas são improváveis de serem aprovadas pelo {core-email}. O projeto FreeBSD está padronizando na licença BSD-2-Clause, como publicada pelo SPDX.
+
+Além disso, a política do projeto requer que o código licenciado sob algumas licenças não-BSD deve ser colocado em seções específicas do repositório. Para algumas licenças, a compilação deve ser condicional ou desativada por padrão. Por exemplo, o código na parte estática do kernel GENERIC deve ser licenciado sob a licença BSD ou substancialmente similar. O software licenciado sob GPL, APSL, CDDL, etc., não deve ser compilado no kernel GENERIC estático. No entanto, o código com essas licenças pode ser usado em módulos pré-compilados.
+
+Os desenvolvedores são lembrados que, em código aberto, acertar a questão do "aberto" é tão importante quanto acertar a questão do "código fonte". O manuseio inadequado de propriedade intelectual tem consequências graves. Qualquer dúvida ou preocupação deve ser imediatamente levada ao conhecimento do {core-email}.
+
+[[license-policy]]
+== Política de Licença de Software
+
+As seções seguintes detalham as Políticas de Licenciamento de Software do projeto. Em sua maior parte, esperamos que os desenvolvedores leiam, entendam e utilizem as seções acima desta para aplicar as licenças apropriadas às suas contribuições. O restante deste documento detalha o histórico filosófico das políticas, bem como as políticas em grande detalhe. Como sempre, se o texto abaixo for confuso ou se precisar de ajuda para aplicar essas políticas, entre em contato com {core-email}.
+
+=== Princípios Orientadores
+
+O Projeto FreeBSD tem como objetivo produzir um sistema operacional completo licenciado sob a licença BSD, permitindo que os usuários do sistema criem produtos derivados sem restrições ou obrigações adicionais de licença. Nós convidamos e apreciamos muito a contribuição de alterações e adições sob a licença BSD de duas cláusulas, e incentivamos a adoção desta licença por outros projetos de código aberto. O uso da licença BSD é fundamental para incentivar a adoção de tecnologia avançada de sistema operacional, e em muitas ocasiões notáveis foi decisivo para o uso generalizado de novas tecnologias.
+
+No entanto, reconhecemos que existem razões importantes para permitir que softwares com licenças diferentes sejam incluídos no FreeBSD.
+
+Nós exigimos que o software licenciado sob algumas licenças não-BSD seja cuidadosamente isolado na árvore de código fonte, de modo que não contamine os componentes BSD puros. Essa gestão cautelosa incentiva a clareza de licenciamento e facilita a criação de produtos derivados regidos exclusivamente pela licença BSD.
+
+A menos que seja feita uma exceção especial, nenhum componente licenciado sob a licença BSD pode ser substituído por software com licença mais restritiva. Incentivamos os desenvolvedores do FreeBSD e de terceiros a buscar o re-licenciamento, o licenciamento duplo ou a reimplementação de componentes críticos sob a licença BSD. Isso facilitaria sua adoção mais integral no sistema operacional FreeBSD.
+
+=== Política
+
+* A importação de novo software licenciado sob qualquer licença que não seja a BSD e licenças semelhantes à BSD (conforme definido abaixo) requer a aprovação prévia do FreeBSD Core Team. As solicitações de importação devem incluir:
+** Uma lista de recursos ou correções de bugs que a nova versão ou patches contêm, juntamente com evidências de que nossos usuários precisam desses recursos. PRs ou referências a discussões nas listas de discussão são formas ideais de evidência.
+** Este processo deve ser utilizado para todas as importações de software, não apenas aquelas que exigem revisão do Core Team. A mera existência de uma nova versão não justifica a importação do software para o repositório do src ou do ports.
+** Uma lista das branches do FreeBSD que podem ser afetadas. A expansão do escopo requer uma nova solicitação e aprovação do FreeBSD Core Team.
+
+* A Licença Apache 2.0 é aceitável para uso em alguns casos. O Core Team deve aprovar a importação de novos componentes licenciados pela Licença Apache ou a mudança de licença de componentes existentes para a Licença Apache.
+** Esta licença é aprovada para os seguintes componentes:
+*** Conjunto de ferramentas LLVM e componentes de tempo de execução (com exceções LLVM).
+
+* A Licença BSD+Patent é aceitável para uso em alguns casos. O Core Team deve aprovar a importação de novos componentes licenciados sob a Licença BSD+Patent ou a mudança da licença de componentes existentes para a Licença BSD+Patent.
+** Esta licença é aprovada para os seguintes componentes:
+*** Código derivado do EDK2 relacionado à funcionalidade UEFI
+
+* A Licença Comum de Desenvolvimento e Distribuição (CDDL) é aceitável para uso em alguns casos. O Core Team deve aprovar a importação de novos componentes licenciados com a CDDL ou a alteração da licença de componentes existentes para a CDDL.
+** Esta licença é aprovada para os seguintes componentes:
+*** DTrace
+*** Sistema de arquivos ZFS, incluindo suporte do kernel e utilitários do espaço do usuário
+
+* Historicamente, a expressão "Todos os direitos reservados" era incluída em todos os avisos de direitos autorais. Todos os releases do BSD tinham essa expressão, para cumprir a https://en.wikipedia.org/wiki/Buenos_Aires_Convention[Convenção de Buenos Aires de 1910] nas Américas. Com a ratificação da https://en.wikipedia.org/wiki/Berne_Convention[Convenção de Berna] em 2000 pela Nicarágua, a Convenção de Buenos Aires - e a expressão - se tornaram obsoletas. Como tal, o projeto FreeBSD recomenda que os novos códigos omitam a frase e incentiva os detentores de direitos autorais existentes a removê-la. Em 2018, o projeto atualizou seus modelos para removê-la.
+* Inicialmente, muitos itens no repositório do FreeBSD eram marcados com a licença BSD-2-Clause-FreeBSD. No entanto, o SPDX obsoletou a licença como uma variante; e o texto do SPDX da tag obsoleta difere o suficiente da licença padrão do FreeBSD para não ser usado. Uma revisão do uso atual está em andamento.
+
+==== Licenças aceitáveis
+
+As seguintes licenças são consideradas aceitáveis como Licenças BSD-Like para fins desta Política. Desvios ou o uso de qualquer outra licença devem ser aprovados pelo Core Team do FreeBSD:
+
+* A versão de 2 cláusulas da licença BSD
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+....
+* A versão de 3 cláusulas da licença BSD
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [your name]
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+....
+* A Licença ISC
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [copyright holder]
+ *
+ * SPDX-License-Identifier: ISC
+ */
+....
+* A licença do MIT
+
+[.programlisting]
+....
+/*-
+ * Copyright (c) [year] [copyright holders]
+ *
+ * SPDX-License-Identifier: MIT
+ */
+....
+== A Licença de Coleção de Software
+
+O Projeto FreeBSD licencia sua compilação de software conforme descrito em [.filename]#COPYRIGHT# sob a licença BSD-2-Clause. Essa licença não substitui a licença dos arquivos individuais, que é descrita abaixo. Arquivos que não possuem uma licença explícita são licenciados sob a licença BSD-2-Clause.
+
+== Localização do arquivo de licença
+
+Para cumprir com o padrão https://reuse.software/[REUSE Software] tanto quanto possível, todos os arquivos de licença serão armazenados no diretório [.filename]#LICENSES/# do repositório. Existem três subdiretórios neste diretório de nível superior. O subdiretório [.filename]#LICENSES/text/# contém, em forma destacada, o texto de todas as licenças permitidas na coleção de software do FreeBSD. Esses arquivos são armazenados usando o nome SPDX-License-Identifier seguido de .txt. O subdiretório [.filename]#LICENSES/exceptions/# contém o texto de todas as exceções permitidas em forma destacada na coleção de software do FreeBSD. Esses arquivos são armazenados usando o nome de identificador da exceção seguido de .txt. O subdiretório [.filename]#LICENSES/other/# contém, em forma destacada, os arquivos de licença referenciados em expressões SPDX-License-Identifier, mas que não são permitidos como licenças destacadas. Todos esses arquivos devem aparecer pelo menos uma vez na coleção de software do FreeBSD e devem ser removidos quando o último arquivo que os referenciar for removido. As licenças que não possuem uma correspondência adequada no SPDX devem estar em [.filename]#LICENSES/other/# e ter um nome de arquivo que comece com LicenseRef-, seguido por uma sequência de identificação exclusiva. Nenhum desses arquivos foi identificado atualmente, mas se forem, uma lista completa será apresentada aqui.
+
+O Projeto FreeBSD atualmente não utiliza os arquivos `DEP5` descritos no padrão `REUSE Software`. O Projeto FreeBSD ainda não marcou todos os arquivos da árvore de acordo com este padrão, como descrito posteriormente neste documento. O Projeto FreeBSD ainda não incluiu esses arquivos em seus repositórios, uma vez que esta política ainda está em evolução.
+
+[[individual-files]]
+== Licença de Arquivos Individuais
+
+Cada arquivo individual na coleção de software do FreeBSD possui seu próprio direito autoral e licença. A forma como eles são marcados varia e é descrita nesta seção.
+
+Uma notificação de direitos autorais identifica quem reivindica os direitos autorais legais de um arquivo. Esses são fornecidos pelo projeto com o melhor esforço possível. Como os direitos autorais podem ser transferidos legalmente, o detentor atual dos direitos autorais pode ser diferente do que está listado no arquivo.
+
+Uma licença é um documento legal entre o colaborador e os usuários do software concedendo permissão para usar as partes protegidas por direitos autorais do software, sujeito a certos termos e condições estabelecidos na licença. As licenças podem ser expressas de duas maneiras na coleção de software do FreeBSD. As licenças podem ser explícitas em um arquivo. Quando uma concessão de licença é explícita no arquivo, esse arquivo pode ser usado, copiado e modificado de acordo com essa licença. As licenças também podem ser expressas indiretamente, onde o texto da licença está em outro lugar. O projeto usa os identificadores de licença Software Package Data Exchange (SPDX) para essa finalidade, conforme descrito nas subseções a seguir. Os identificadores de licença SPDX são gerenciados pelo SPDX Workgroup da Linux Foundation e foram acordados por parceiros do setor, fornecedores de ferramentas e equipes jurídicas. Para obter mais informações, consulte https://spdx.org/ e as seções a seguir para saber como o Projeto FreeBSD os usa.
+
+Entidades que contribuem com correções e melhorias para a coleção de software sem uma licença explícita concordam em licenciar essas mudanças sob os termos que se aplicam aos arquivo(s) modificados. A política do projeto, em linha com a prática da indústria, inclui apenas um aviso de direitos autorais dos contribuintes significativos para os arquivos na coleção.
+
+Existem quatro tipos de arquivos na coleção de software do FreeBSD:
+
+. Arquivos que possuem apenas um aviso explícito de direitos autorais e de licença.
+. Arquivos que possuem tanto um aviso explícito de direitos autorais e de licença, quanto uma tag SPDX-License-Identifier.
+. Arquivos que possuem apenas um aviso de direitos autorais e uma tag SPDX-License-Identifier, mas sem uma licença explícita.
+. Arquivos que não possuem nenhum aviso de direitos autorais ou de licença.
+
+=== Apenas Direitos Autorais e Licença
+
+Muitos arquivos na coleção de software do FreeBSD possuem tanto um aviso de direitos autorais quanto uma licença explícita contida no arquivo. Nesses casos, a licença contida no arquivo é a que governa.
+
+=== Direitos autorais e licença com a expressão SPDX-License-Identifier
+
+Alguns arquivos na coleção de software do FreeBSD contêm uma declaração de direitos autorais, uma tag SPDX-License-Identifier e uma licença explícita. A licença explícita tem precedência sobre a tag SPDX-License-Identifier. A tag SPDX-License-Identifier é uma tentativa do projeto de caracterizar a licença da melhor forma possível, mas é apenas informativa para ferramentas automatizadas. Consulte <<expressions, Expressões SPDX-License-Identifier>> para saber como interpretar a expressão.
+
+=== Apenas direitos autorais e a expressão SPDX-License-Identifier.
+
+Alguns arquivos na árvore de software contêm licenças desanexadas. Esses arquivos contêm apenas um aviso de direitos autorais e uma expressão SPDX-License-Identifier, mas nenhuma licença explícita. Consulte <<expressions, Expressões SPDX-License-Identifier>> para saber como interpretar a expressão. Observação: as expressões permitidas para licenças desanexadas pelo projeto são um subconjunto das expressões usadas informativamente ou definidas pelo padrão.
+
+A licença para arquivos que contêm apenas o SPDX-License-Identifier deve ser construida da seguinte forma
+
+. Inicie a licença com o aviso de direitos autorais do arquivo, incluindo todos os detentores dos direitos autorais.
+. Para cada sub-expressão, copie o texto da licença de [.filename]#LICENSE/text/`id`.txt#. Quando exceções estiverem presentes, anexe-as de [.filename]#src/share/license/exceptions/`id`.txt#. As expressões SPDX-License-Identifier devem ser interpretadas conforme descrito no padrão SPDX.
+
+Onde o`id` é o identificador curto de licença SPDX da coluna `Identifier` de https://spdx.org/licenses/[SPDX Identifiers] ou da lista de https://spdx.org/licenses/exceptions-index.html[exceções de licença]. Se não houver um arquivo em [.filename]#LICENSE/#, então essa licença ou exceção não pode ser especificada como uma licença desanexada nesta seção.
+
+Ao ler o texto da licença que está desanexado de um arquivo, algumas considerações devem ser tomadas para que a licença desanexada faça sentido.
+
+. Qualquer referência a um aviso de direitos autorais deve se referir ao aviso de direitos autorais construído a partir do arquivo licenciado, e não de qualquer aviso de direitos autorais contido no próprio arquivo de texto da licença. Muitos arquivos SPDX têm exemplos de avisos de direitos autorais que são entendidos apenas como exemplos.
+. Quando os nomes das entidades são mencionados no texto da licença, eles devem ser interpretados como se aplicando à lista de todos os detentores de direitos autorais listados nos avisos de direitos autorais do arquivo licenciado. Por exemplo, a licença BSD-4-clause contém a frase "Este produto inclui software desenvolvido pela organização". A frase 'a organização' deve ser substituída pelos detentores de direitos autorais.
+. Quando o SPDX oferece variações da licença, entende-se que a licença no arquivo [.filename]#LICENSE/# representa a versão exata da licença selecionada. O padrão SPDX existe para corresponder a famílias de licenças e essas variações ajudam a corresponder a licenças semelhantes que a organização SPDX acredita serem legalmente idênticas.
+
+Para licenças que possuem pequenas variações no texto, o SPDX possui diretrizes para correspondê-las. Essas diretrizes não são relevantes aqui. Os colaboradores que desejam licenciar sob uma variante de uma licença SPDX que não está contida textualmente em [.filename]#LICENSE/# não podem usar a opção desanexada e devem especificar explicitamente a licença.
+
+=== Arquivos sem marcação de direitos autorais ou de licença
+
+Alguns arquivos não podem ter comentários adequados adicionados a eles. Nesses casos, uma licença pode ser encontrada em [.filename]#file.ext.license#. Por exemplo, um arquivo chamado [.filename]#foo.jpg# pode ter uma licença em [.filename]#foo.jpg.license#, seguindo as convenções de software REUSE.
+
+Arquivos criados pelo projeto que não possuem um aviso de direitos autorais são entendidos como estando sob o direito autoral e licenciamento geral em [.filename]#COPYRIGHT#. Ou o arquivo é uma mera citação de fatos, não protegíveis pela Lei de Direitos Autorais, ou o conteúdo é tão trivial que não justifica a sobrecarga de uma licença explícita.
+
+Arquivos que não possuem marcação e possuem mais do que uma quantidade trivial de material protegido por direitos autorais, ou cujo autor acredita que estejam marcados incorretamente, devem ser trazidos à atenção do Core Team do FreeBSD. É uma forte política do Projeto FreeBSD cumprir todas as licenças apropriadas.
+
+No futuro, todos esses arquivos serão marcados explicitamente ou seguirão a convenção de software REUSE [.filename]#.license#.
+
+[[expressions]]
+=== Expressões SPDX-License-Identifier
+
+A "expressão de licença SPDX" é usada em dois contextos na coleção de software do FreeBSD. Em primeiro lugar, sua forma completa é usada para arquivos que possuem declarações explícitas de licença contidas no arquivo, bem como uma expressão resumida SPDX-License-Identifier. Nesse contexto, todo o poder dessas expressões pode ser usado. Em segundo lugar, em uma forma restrita descrita acima, é usada para denotar a licença real de um determinado arquivo. Nesse segundo contexto, apenas um subconjunto dessa expressão é permitido pelo projeto.
+
+Uma "sub-expressão de licença SPDX" é um identificador de licença de forma curta SPDX da https://spdx.org/licenses/[Lista de Licenças SPDX], ou a combinação de dois identificadores de licença de forma curta SPDX separados por "WITH" quando uma https://spdx.org/licenses/exceptions-index.html[licença de exceção] se aplica. Quando várias licenças se aplicam, uma expressão consiste em palavras-chave "AND", "OR" que separam as sub-expressões e são cercadas por "(", ")". A https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/[especificação completa de expressões] explica todos os detalhes e tem precedência em caso de conflito com o tratamento simplificado desta seção.
+
+Algumas identificações de licença, como a [L]GPL, têm a opção de usar apenas aquela versão ou qualquer versão posterior. O SPDX define o sufixo "-or-later" para significar aquela versão da licença ou uma versão posterior. Define "-only" para significar apenas aquela versão específica do arquivo. Existe uma convenção antiga de não ter um sufixo (o que significa o que o novo sufixo '-only' significa, mas que as pessoas confundem com '-or-later'). Além disso, adicionar um sufixo `+` significava `-or-later`. Novos arquivos no FreeBSD não devem usar essas duas convenções. Arquivos antigos que usam essa convenção devem ser convertidos conforme apropriado.
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0-only
+ // SPDX-License-Identifier: LGPL-2.1-or-later
+....
+
+"WITH" deve ser usado quando um modificador de licença é necessário. No projeto FreeBSD, vários arquivos do LLVM possuem uma exceção à licença Apache 2.0:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+....
+
+https://spdx.org/licenses/exceptions-index.html[Tags de exceção] são gerenciadas pelo SPDX. As exceções de licença só podem ser aplicadas a determinadas licenças, conforme especificado na exceção.
+
+"OR" deve ser usado se o arquivo tiver uma escolha de licença e uma licença for selecionada. Por exemplo, alguns arquivos dtsi estão disponíveis sob licenças duplas:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
+....
+
+"AND" deve ser usado se o arquivo tiver várias licenças cujos termos se aplicam ao uso do arquivo. Por exemplo, se o código foi incorporado por vários projetos, cada um com sua própria licença:
+
+[.programlisting]
+....
+ // SPDX-License-Identifier: BSD-2-Clause AND MIT
+....
diff --git a/documentation/content/pt-br/articles/license-guide/_index.po b/documentation/content/pt-br/articles/license-guide/_index.po
new file mode 100644
index 0000000000..5dab8f16bc
--- /dev/null
+++ b/documentation/content/pt-br/articles/license-guide/_index.po
@@ -0,0 +1,1067 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2023.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 14:43-0300\n"
+"PO-Revision-Date: 2023-05-30 20:22+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articleslicense-guide_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/license-guide/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Licensing Policy"
+msgstr "Política de Licenciamento do FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/license-guide/_index.adoc:9
+#, no-wrap
+msgid "FreeBSD License Policies"
+msgstr "Política de Licenciamento do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:20
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:26
+#, no-wrap
+msgid "Preferred License for New Files"
+msgstr "Licença Preferencial para Novos Arquivos"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:32
+msgid ""
+"The rest of this section is intended to help you get started. As a rule, "
+"when in doubt, ask. It is much easier to receive advice than to fix the "
+"source tree. The FreeBSD Project makes use of both explicit licenses (where "
+"the verbatim text of the license is reproduced in each file) and detached "
+"licenses (where a tag in the file specifies the license, as described in "
+"this document)."
+msgstr ""
+"O restante desta seção tem como objetivo ajudá-lo a começar. Em caso de "
+"dúvida, pergunte. É muito mais fácil receber conselhos do que corrigir o "
+"código fonte. O Projeto FreeBSD usa tanto licenças explícitas (onde o texto "
+"literal da licença é reproduzido em cada arquivo) quanto licenças "
+"desvinculadas (onde uma etiqueta no arquivo especifica a licença, como "
+"descrito neste documento)."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:34
+msgid "The FreeBSD Project uses this text as the preferred license:"
+msgstr "O Projeto FreeBSD usa este texto como licença preferencial:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:42
+#: documentation/content/en/articles/license-guide/_index.adoc:138
+#, no-wrap
+msgid ""
+"/*-\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * SPDX-License-Identifier: BSD-2-Clause\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * SPDX-License-Identifier: BSD-2-Clause\n"
+" */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:48
+msgid ""
+"The FreeBSD project does not allow using the \"advertising clause\" in new "
+"code. Due to the large number of contributors to the FreeBSD project, "
+"complying with this clause for many commercial vendors has become "
+"difficult. If you have code in the tree with the advertising clause, please "
+"consider switching to a license without it. New contributions to FreeBSD "
+"should use the BSD-2-Clause license."
+msgstr ""
+"O projeto FreeBSD não permite o uso da \"cláusula de publicidade\" em novos "
+"códigos. Devido ao grande número de colaboradores do projeto FreeBSD, se "
+"tornou difícil para muitos fornecedores comerciais cumprir com esta "
+"cláusula. Se você tiver código no repositório com a cláusula de publicidade, "
+"considere mudar para uma licença sem ela. Novas contribuições ao FreeBSD "
+"devem usar a licença BSD-2-Clause."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:54
+msgid ""
+"The FreeBSD project discourages completely new licenses and variations on "
+"the standard licenses. New licenses require the approval of {core-email} to "
+"reside in the main repository. In the past, non-standard licenses have "
+"generated more problems than standard ones. Poor drafting of non-standard "
+"licenses often causes more unintended consequences, so they are unlikely to "
+"be approved by {core-email}. The FreeBSD project is standardizing on the "
+"BSD-2-Clause license, as published by SPDX."
+msgstr ""
+"O projeto FreeBSD desencoraja completamente novas licenças e variações das "
+"licenças padrão. Novas licenças requerem a aprovação do {core-email} para "
+"residir no repositório principal. No passado, licenças não padrão geraram "
+"mais problemas do que as padrão. Uma redação inadequada de licenças não "
+"padrão muitas vezes causa mais consequências não intencionais, então elas "
+"são improváveis de serem aprovadas pelo {core-email}. O projeto FreeBSD está "
+"padronizando na licença BSD-2-Clause, como publicada pelo SPDX."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:60
+msgid ""
+"In addition, project policy requires that code licensed under some non-BSD "
+"licenses must be placed in specific sections of the repository. For some "
+"licenses, compilation must be conditional or disabled by default. For "
+"example, code in the static part of the GENERIC kernel must be licensed "
+"under the BSD or substantially similar licenses. GPL, APSL, CDDL, etc, "
+"licensed software must not be compiled into the static GENERIC kernel. Code "
+"with these licenses may be used in pre-compiled modules, however."
+msgstr ""
+"Além disso, a política do projeto requer que o código licenciado sob algumas "
+"licenças não-BSD deve ser colocado em seções específicas do repositório. "
+"Para algumas licenças, a compilação deve ser condicional ou desativada por "
+"padrão. Por exemplo, o código na parte estática do kernel GENERIC deve ser "
+"licenciado sob a licença BSD ou substancialmente similar. O software "
+"licenciado sob GPL, APSL, CDDL, etc., não deve ser compilado no kernel "
+"GENERIC estático. No entanto, o código com essas licenças pode ser usado em "
+"módulos pré-compilados."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:64
+msgid ""
+"Developers are reminded that, in open source, getting \"open\" correct is "
+"just as important as getting \"source\" correct. Improper handling of "
+"intellectual property has serious consequences. Any questions or concerns "
+"should immediately be brought to the attention of {core-email}."
+msgstr ""
+"Os desenvolvedores são lembrados que, em código aberto, acertar a questão do "
+"\"aberto\" é tão importante quanto acertar a questão do \"código fonte\". O "
+"manuseio inadequado de propriedade intelectual tem consequências graves. "
+"Qualquer dúvida ou preocupação deve ser imediatamente levada ao conhecimento "
+"do {core-email}."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:66
+#, no-wrap
+msgid "Software License Policy"
+msgstr "Política de Licença de Software"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:72
+msgid ""
+"The following sections outline the project's Software License Policies in "
+"detail. For the most part we expect developers to read, understand and "
+"utilize the sections above this one to apply appropriate licenses to their "
+"contributions. The rest of this document details the philosophical "
+"background to the policies as well as the policies in great detail. As "
+"always, if the text below is confusing or you need help with applying these "
+"policies, please reach out to {core-email}."
+msgstr ""
+"As seções seguintes detalham as Políticas de Licenciamento de Software do "
+"projeto. Em sua maior parte, esperamos que os desenvolvedores leiam, "
+"entendam e utilizem as seções acima desta para aplicar as licenças "
+"apropriadas às suas contribuições. O restante deste documento detalha o "
+"histórico filosófico das políticas, bem como as políticas em grande detalhe. "
+"Como sempre, se o texto abaixo for confuso ou se precisar de ajuda para "
+"aplicar essas políticas, entre em contato com {core-email}."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:73
+#, no-wrap
+msgid "Guiding Principles"
+msgstr "Princípios Orientadores"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:78
+msgid ""
+"The FreeBSD Project aims to produce a complete, BSD-licensed operating "
+"system allowing consumers of the system to produce derivative products "
+"without constraint or further license obligations. We invite and greatly "
+"appreciate the contribution of both changes and additions under the two-"
+"clause BSD license, and encourage the adoption of this license by other open "
+"source projects. Use of the BSD license is key to encouraging the adoption "
+"of advanced operating system technology, and on many notable occasions has "
+"been pivotal to widespread use of new technology."
+msgstr ""
+"O Projeto FreeBSD tem como objetivo produzir um sistema operacional completo "
+"licenciado sob a licença BSD, permitindo que os usuários do sistema criem "
+"produtos derivados sem restrições ou obrigações adicionais de licença. Nós "
+"convidamos e apreciamos muito a contribuição de alterações e adições sob a "
+"licença BSD de duas cláusulas, e incentivamos a adoção desta licença por "
+"outros projetos de código aberto. O uso da licença BSD é fundamental para "
+"incentivar a adoção de tecnologia avançada de sistema operacional, e em "
+"muitas ocasiões notáveis foi decisivo para o uso generalizado de novas "
+"tecnologias."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:80
+msgid ""
+"We accept however that compelling reasons exist to allow differently-"
+"licensed software to be included in the FreeBSD source tree."
+msgstr ""
+"No entanto, reconhecemos que existem razões importantes para permitir que "
+"softwares com licenças diferentes sejam incluídos no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:83
+msgid ""
+"We require software licensed under some non-BSD licenses to be carefully "
+"isolated in the source tree so that it cannot contaminate BSD-only "
+"components. Such cautious management encourages licensing clarity and "
+"facilitates the production of BSD-only derivative products."
+msgstr ""
+"Nós exigimos que o software licenciado sob algumas licenças não-BSD seja "
+"cuidadosamente isolado na árvore de código fonte, de modo que não contamine "
+"os componentes BSD puros. Essa gestão cautelosa incentiva a clareza de "
+"licenciamento e facilita a criação de produtos derivados regidos "
+"exclusivamente pela licença BSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:87
+msgid ""
+"Unless a special exception is made, no existing BSD-licensed components may "
+"be replaced with more restrictively licensed software. We encourage FreeBSD "
+"and third party developers to seek the relicensing, dual-licensing, or "
+"reimplementing of critical components under the BSD license instead. Such "
+"would ease their more integral adoption into the FreeBSD operating system."
+msgstr ""
+"A menos que seja feita uma exceção especial, nenhum componente licenciado "
+"sob a licença BSD pode ser substituído por software com licença mais "
+"restritiva. Incentivamos os desenvolvedores do FreeBSD e de terceiros a "
+"buscar o re-licenciamento, o licenciamento duplo ou a reimplementação de "
+"componentes críticos sob a licença BSD. Isso facilitaria sua adoção mais "
+"integral no sistema operacional FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:88
+#, no-wrap
+msgid "Policy"
+msgstr "Política"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:92
+msgid ""
+"The import of new software licensed under any licenses other than the BSD "
+"license and BSD-Like Licenses (as defined below) requires the prior approval "
+"of the FreeBSD Core Team. Requests for import must include:"
+msgstr ""
+"A importação de novo software licenciado sob qualquer licença que não seja a "
+"BSD e licenças semelhantes à BSD (conforme definido abaixo) requer a "
+"aprovação prévia do FreeBSD Core Team. As solicitações de importação devem "
+"incluir:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:94
+msgid ""
+"A list of features or bug fixes that the new version or patches contain, "
+"along with evidence that our users need those features. PRs or references "
+"to mailing list discussions are ideal forms of evidence."
+msgstr ""
+"Uma lista de recursos ou correções de bugs que a nova versão ou patches "
+"contêm, juntamente com evidências de que nossos usuários precisam desses "
+"recursos. PRs ou referências a discussões nas listas de discussão são formas "
+"ideais de evidência."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:96
+msgid ""
+"This process should be used for all software imports, not just those that "
+"require Core Team review. The mere existence of a new version does not "
+"justify an import of software to source or ports."
+msgstr ""
+"Este processo deve ser utilizado para todas as importações de software, não "
+"apenas aquelas que exigem revisão do Core Team. A mera existência de uma "
+"nova versão não justifica a importação do software para o repositório do src "
+"ou do ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:98
+msgid ""
+"A list of FreeBSD branches that may be affected. Expansions of scope "
+"require a new request to and approval from the FreeBSD Core Team."
+msgstr ""
+"Uma lista das branches do FreeBSD que podem ser afetadas. A expansão do "
+"escopo requer uma nova solicitação e aprovação do FreeBSD Core Team."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:101
+msgid ""
+"The Apache License 2.0 is acceptable for use in some cases. The Core Team "
+"must approve the import of new Apache License licensed components or the "
+"change of license of existing components to the Apache License."
+msgstr ""
+"A Licença Apache 2.0 é aceitável para uso em alguns casos. O Core Team deve "
+"aprovar a importação de novos componentes licenciados pela Licença Apache ou "
+"a mudança de licença de componentes existentes para a Licença Apache."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:102
+#: documentation/content/en/articles/license-guide/_index.adoc:107
+#: documentation/content/en/articles/license-guide/_index.adoc:112
+msgid "This license is approved for the following components:"
+msgstr "Esta licença é aprovada para os seguintes componentes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:103
+msgid "LLVM toolchain and (with LLVM Exceptions) runtime components."
+msgstr ""
+"Conjunto de ferramentas LLVM e componentes de tempo de execução (com "
+"exceções LLVM)."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:106
+msgid ""
+"The BSD+Patent License is acceptable for use in some cases. The Core Team "
+"must approve the import of new BSD+Patent License licensed components or the "
+"change of license of existing components to the BSD+Patent License."
+msgstr ""
+"A Licença BSD+Patent é aceitável para uso em alguns casos. O Core Team deve "
+"aprovar a importação de novos componentes licenciados sob a Licença BSD"
+"+Patent ou a mudança da licença de componentes existentes para a Licença BSD"
+"+Patent."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:108
+msgid "EDK2 derived code related to UEFI functionality"
+msgstr "Código derivado do EDK2 relacionado à funcionalidade UEFI"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:111
+msgid ""
+"The Common Development and Distribution License (CDDL) is acceptable for use "
+"in some cases. The Core Team must approve the import of new CDDL licensed "
+"components or the change of license of existing components to the CDDL."
+msgstr ""
+"A Licença Comum de Desenvolvimento e Distribuição (CDDL) é aceitável para "
+"uso em alguns casos. O Core Team deve aprovar a importação de novos "
+"componentes licenciados com a CDDL ou a alteração da licença de componentes "
+"existentes para a CDDL."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:113
+msgid "DTrace"
+msgstr "DTrace"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:114
+msgid "ZFS filesystem, including kernel support and userland utilities"
+msgstr ""
+"Sistema de arquivos ZFS, incluindo suporte do kernel e utilitários do espaço "
+"do usuário"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:120
+msgid ""
+"Historically, the phrase 'All Rights Reserved.' was included in all "
+"copyright notices. All the BSD releases had it, to comply with the https://"
+"en.wikipedia.org/wiki/Buenos_Aires_Convention[Buenos Aires Convention of "
+"1910] in the Americas. With the ratification of the https://en.wikipedia."
+"org/wiki/Berne_Convention[Berne Convention] in 2000 by Nicaragua, the Buenos "
+"Aires Convention -- and the phrase -- became obsolete. As such, the FreeBSD "
+"project recommends that new code omit the phrase and encourages existing "
+"copyright holders to remove it. In 2018, the project updated its templates "
+"to remove it."
+msgstr ""
+"Historicamente, a expressão \"Todos os direitos reservados\" era incluída em "
+"todos os avisos de direitos autorais. Todos os releases do BSD tinham essa "
+"expressão, para cumprir a https://en.wikipedia.org/wiki/"
+"Buenos_Aires_Convention[Convenção de Buenos Aires de 1910] nas Américas. Com "
+"a ratificação da https://en.wikipedia.org/wiki/Berne_Convention[Convenção de "
+"Berna] em 2000 pela Nicarágua, a Convenção de Buenos Aires - e a expressão - "
+"se tornaram obsoletas. Como tal, o projeto FreeBSD recomenda que os novos "
+"códigos omitam a frase e incentiva os detentores de direitos autorais "
+"existentes a removê-la. Em 2018, o projeto atualizou seus modelos para "
+"removê-la."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:123
+msgid ""
+"Initially, many items in the FreeBSD tree were marked with BSD-2-Clause-"
+"FreeBSD. However, SPDX has obsoleted the license as a variant; and the SPDX "
+"text of the obsolete tag differs enough from the standard FreeBSD license "
+"that it shouldn't be used. A review of its current use is ongoing."
+msgstr ""
+"Inicialmente, muitos itens no repositório do FreeBSD eram marcados com a "
+"licença BSD-2-Clause-FreeBSD. No entanto, o SPDX obsoletou a licença como "
+"uma variante; e o texto do SPDX da tag obsoleta difere o suficiente da "
+"licença padrão do FreeBSD para não ser usado. Uma revisão do uso atual está "
+"em andamento."
+
+#. type: Title ====
+#: documentation/content/en/articles/license-guide/_index.adoc:124
+#, no-wrap
+msgid "Acceptable licenses"
+msgstr "Licenças aceitáveis"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:128
+msgid ""
+"The following licenses are considered to be acceptable BSD-Like Licenses for "
+"the purpose of this Policy. Deviations or the use of any other license must "
+"be approved by the FreeBSD Core Team:"
+msgstr ""
+"As seguintes licenças são consideradas aceitáveis como Licenças BSD-Like "
+"para fins desta Política. Desvios ou o uso de qualquer outra licença devem "
+"ser aprovados pelo Core Team do FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:130
+msgid "The 2 clause version of the BSD license"
+msgstr "A versão de 2 cláusulas da licença BSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:140
+msgid "The 3 clause version of the BSD license"
+msgstr "A versão de 3 cláusulas da licença BSD"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:148
+#, no-wrap
+msgid ""
+"/*-\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * SPDX-License-Identifier: BSD-3-Clause\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * Copyright (c) [year] [your name]\n"
+" *\n"
+" * SPDX-License-Identifier: BSD-3-Clause\n"
+" */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:150
+msgid "The ISC License"
+msgstr "A Licença ISC"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:158
+#, no-wrap
+msgid ""
+"/*-\n"
+" * Copyright (c) [year] [copyright holder]\n"
+" *\n"
+" * SPDX-License-Identifier: ISC\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * Copyright (c) [year] [copyright holder]\n"
+" *\n"
+" * SPDX-License-Identifier: ISC\n"
+" */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:160
+msgid "The MIT License"
+msgstr "A licença do MIT"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:168
+#, no-wrap
+msgid ""
+"/*-\n"
+" * Copyright (c) [year] [copyright holders]\n"
+" *\n"
+" * SPDX-License-Identifier: MIT\n"
+" */\n"
+msgstr ""
+"/*-\n"
+" * Copyright (c) [year] [copyright holders]\n"
+" *\n"
+" * SPDX-License-Identifier: MIT\n"
+" */\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:169
+#, no-wrap
+msgid "Software Collection License"
+msgstr "A Licença de Coleção de Software"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:174
+msgid ""
+"The FreeBSD Project licenses its compilation of software as described in [."
+"filename]#COPYRIGHT# under the BSD-2-Clause license. This license does not "
+"supersede the license of individual files, which is described below. Files "
+"that do not have an explicit license are licensed under the BSD-2-Clause "
+"license."
+msgstr ""
+"O Projeto FreeBSD licencia sua compilação de software conforme descrito em [."
+"filename]#COPYRIGHT# sob a licença BSD-2-Clause. Essa licença não substitui "
+"a licença dos arquivos individuais, que é descrita abaixo. Arquivos que não "
+"possuem uma licença explícita são licenciados sob a licença BSD-2-Clause."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:175
+#, no-wrap
+msgid "License File Location"
+msgstr "Localização do arquivo de licença"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:187
+msgid ""
+"To comply with the https://reuse.software/[REUSE Software] standard as much "
+"as possible, all license files will be stored in the [.filename]#LICENSES/# "
+"directory of the repository. There are three subdirectories under this top "
+"level directory. The [.filename]#LICENSES/text/# subdirectory contains, in "
+"detached form, the text of all the licenses that are allowed in the FreeBSD "
+"software collection. These files are stored using the SPDX-License-"
+"Identifier name followed by .txt. The [.filename]#LICENSES/exceptions/# "
+"subdirectory has the text of all exceptions that are allowed in detached "
+"form in the FreeBSD software collection. These files are stored using the "
+"exception identifier name followed by .txt. The [.filename]#LICENSES/other/"
+"# contains, in detached form, the license files references in SPDX-License-"
+"Identifier expressions, but aren't otherwise allowed as detached licenses. "
+"All such files must appear at least once in the FreeBSD software collection, "
+"and should be removed when the last file that references them is removed. "
+"Licenses that have no adequate SPDX matching license must be in [."
+"filename]#LICENSES/other/# and have a filename that starts with LicenseRef- "
+"followed by a unique idstring. No such files have currently been "
+"identified, but if they are, a full list will appear here."
+msgstr ""
+"Para cumprir com o padrão https://reuse.software/[REUSE Software] tanto "
+"quanto possível, todos os arquivos de licença serão armazenados no diretório "
+"[.filename]#LICENSES/# do repositório. Existem três subdiretórios neste "
+"diretório de nível superior. O subdiretório [.filename]#LICENSES/text/# "
+"contém, em forma destacada, o texto de todas as licenças permitidas na "
+"coleção de software do FreeBSD. Esses arquivos são armazenados usando o nome "
+"SPDX-License-Identifier seguido de .txt. O subdiretório [.filename]#LICENSES/"
+"exceptions/# contém o texto de todas as exceções permitidas em forma "
+"destacada na coleção de software do FreeBSD. Esses arquivos são armazenados "
+"usando o nome de identificador da exceção seguido de .txt. O subdiretório [."
+"filename]#LICENSES/other/# contém, em forma destacada, os arquivos de "
+"licença referenciados em expressões SPDX-License-Identifier, mas que não são "
+"permitidos como licenças destacadas. Todos esses arquivos devem aparecer "
+"pelo menos uma vez na coleção de software do FreeBSD e devem ser removidos "
+"quando o último arquivo que os referenciar for removido. As licenças que não "
+"possuem uma correspondência adequada no SPDX devem estar em [."
+"filename]#LICENSES/other/# e ter um nome de arquivo que comece com "
+"LicenseRef-, seguido por uma sequência de identificação exclusiva. Nenhum "
+"desses arquivos foi identificado atualmente, mas se forem, uma lista "
+"completa será apresentada aqui."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:191
+msgid ""
+"The FreeBSD Project currently does not make use of the `DEP5` files "
+"described in the `REUSE Software` standard. The FreeBSD Project has not "
+"marked all the files in the tree yet in accordance with this standard, as "
+"described later in this document. The FreeBSD Project has not yet included "
+"these files in its repositories since this policy is still evolving."
+msgstr ""
+"O Projeto FreeBSD atualmente não utiliza os arquivos `DEP5` descritos no "
+"padrão `REUSE Software`. O Projeto FreeBSD ainda não marcou todos os "
+"arquivos da árvore de acordo com este padrão, como descrito posteriormente "
+"neste documento. O Projeto FreeBSD ainda não incluiu esses arquivos em seus "
+"repositórios, uma vez que esta política ainda está em evolução."
+
+#. type: Title ==
+#: documentation/content/en/articles/license-guide/_index.adoc:193
+#, no-wrap
+msgid "Individual Files License"
+msgstr "Licença de Arquivos Individuais"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:197
+msgid ""
+"Each individual file in the FreeBSD software collection has its own "
+"copyright and license. How they are marked varies and is described in this "
+"section."
+msgstr ""
+"Cada arquivo individual na coleção de software do FreeBSD possui seu próprio "
+"direito autoral e licença. A forma como eles são marcados varia e é descrita "
+"nesta seção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:201
+msgid ""
+"A copyright notice identifies who claims the legal copyright to a file. "
+"These are provided on a best effort basis by the project. Because "
+"copyrights may be legally transferred, the current copyright holder may "
+"differ from what is listed in the file."
+msgstr ""
+"Uma notificação de direitos autorais identifica quem reivindica os direitos "
+"autorais legais de um arquivo. Esses são fornecidos pelo projeto com o "
+"melhor esforço possível. Como os direitos autorais podem ser transferidos "
+"legalmente, o detentor atual dos direitos autorais pode ser diferente do que "
+"está listado no arquivo."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:210
+msgid ""
+"A license is a legal document between the contributor and the users of the "
+"software granting permission to use the copyrighted portions of the "
+"software, subject to certain terms and conditions set forth in the license. "
+"Licenses can be expressed in one of two ways in the FreeBSD software "
+"collection. Licenses can be explicit in a file. When a license grant is "
+"explicit in the file, that file may be used, copied, and modified in "
+"accordance with that license. Licenses can also be expressed indirectly, "
+"where the text of the license is elsewhere. The project uses the Software "
+"Package Data Exchange (SPDX) license identifiers for this purpose, as "
+"described in the following subsections. SPDX license identifiers are "
+"managed by the SPDX Workgroup at the Linux Foundation, and have been agreed "
+"on by partners throughout the industry, tool vendors, and legal teams. For "
+"further information see https://spdx.org/ and the following sections for how "
+"the FreeBSD Project uses them."
+msgstr ""
+"Uma licença é um documento legal entre o colaborador e os usuários do "
+"software concedendo permissão para usar as partes protegidas por direitos "
+"autorais do software, sujeito a certos termos e condições estabelecidos na "
+"licença. As licenças podem ser expressas de duas maneiras na coleção de "
+"software do FreeBSD. As licenças podem ser explícitas em um arquivo. Quando "
+"uma concessão de licença é explícita no arquivo, esse arquivo pode ser "
+"usado, copiado e modificado de acordo com essa licença. As licenças também "
+"podem ser expressas indiretamente, onde o texto da licença está em outro "
+"lugar. O projeto usa os identificadores de licença Software Package Data "
+"Exchange (SPDX) para essa finalidade, conforme descrito nas subseções a "
+"seguir. Os identificadores de licença SPDX são gerenciados pelo SPDX "
+"Workgroup da Linux Foundation e foram acordados por parceiros do setor, "
+"fornecedores de ferramentas e equipes jurídicas. Para obter mais "
+"informações, consulte https://spdx.org/ e as seções a seguir para saber como "
+"o Projeto FreeBSD os usa."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:213
+msgid ""
+"Entities that contribute fixes and enhancements to the software collection "
+"without an explicit license agree to license those changes under the terms "
+"that apply to the modified file(s). Project policy, in line with industry "
+"practice, only includes a copyright notice from significant contributors to "
+"the files in the collection."
+msgstr ""
+"Entidades que contribuem com correções e melhorias para a coleção de "
+"software sem uma licença explícita concordam em licenciar essas mudanças sob "
+"os termos que se aplicam aos arquivo(s) modificados. A política do projeto, "
+"em linha com a prática da indústria, inclui apenas um aviso de direitos "
+"autorais dos contribuintes significativos para os arquivos na coleção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:215
+msgid "There are four types of files in the FreeBSD software collection:"
+msgstr "Existem quatro tipos de arquivos na coleção de software do FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:217
+msgid "Files that have only an explicit copyright notice and license."
+msgstr ""
+"Arquivos que possuem apenas um aviso explícito de direitos autorais e de "
+"licença."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:218
+msgid ""
+"Files that have both an explicit copyright notice and license, and a SPDX-"
+"License-Identifier tag."
+msgstr ""
+"Arquivos que possuem tanto um aviso explícito de direitos autorais e de "
+"licença, quanto uma tag SPDX-License-Identifier."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:219
+msgid ""
+"Files that have only a copyright notice and an SPDX-License-Identifier tag, "
+"but no explicit license."
+msgstr ""
+"Arquivos que possuem apenas um aviso de direitos autorais e uma tag SPDX-"
+"License-Identifier, mas sem uma licença explícita."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:220
+msgid "Files that lack any copyright or license at all."
+msgstr ""
+"Arquivos que não possuem nenhum aviso de direitos autorais ou de licença."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:221
+#, no-wrap
+msgid "Only Copyright and License"
+msgstr "Apenas Direitos Autorais e Licença"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:225
+msgid ""
+"Many files in the FreeBSD software collection have both a copyright notice "
+"and an explicit license contained in the file. In these cases, the license "
+"contained in the file governs."
+msgstr ""
+"Muitos arquivos na coleção de software do FreeBSD possuem tanto um aviso de "
+"direitos autorais quanto uma licença explícita contida no arquivo. Nesses "
+"casos, a licença contida no arquivo é a que governa."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:226
+#, no-wrap
+msgid "Copyright and License with SPDX-License-Identifier expression"
+msgstr "Direitos autorais e licença com a expressão SPDX-License-Identifier"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:232
+msgid ""
+"Some files in the FreeBSD software collection contain a copyright statement, "
+"an SPDX-License-Identifier tag and an explicit license. The explicit "
+"license takes precedence over the SPDX-License-Identifier tag. The SPDX-"
+"License-Identifier tag is the project's best effort attempt to characterize "
+"the license, but is only informative for automated tools. See <<expressions,"
+"SPDX-License-Identifier Expressions>> for how to interpret the expression."
+msgstr ""
+"Alguns arquivos na coleção de software do FreeBSD contêm uma declaração de "
+"direitos autorais, uma tag SPDX-License-Identifier e uma licença explícita. "
+"A licença explícita tem precedência sobre a tag SPDX-License-Identifier. A "
+"tag SPDX-License-Identifier é uma tentativa do projeto de caracterizar a "
+"licença da melhor forma possível, mas é apenas informativa para ferramentas "
+"automatizadas. Consulte <<expressions, Expressões SPDX-License-Identifier>> "
+"para saber como interpretar a expressão."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:233
+#, no-wrap
+msgid "Only Copyright and SPDX-License-Identifier expression."
+msgstr "Apenas direitos autorais e a expressão SPDX-License-Identifier."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:239
+msgid ""
+"Some files in the tree contain detached licenses. These files contain only "
+"a copyright notice and an SPDX-License-Identifier expression, but no "
+"explicit license. See <<expressions,SPDX-License-Identifier Expressions>> "
+"for how to interpret the expression. Note: the expressions allowed for "
+"detached licenses by the project are a subset of the expressions used "
+"informationally or that are defined by the standard."
+msgstr ""
+"Alguns arquivos na árvore de software contêm licenças desanexadas. Esses "
+"arquivos contêm apenas um aviso de direitos autorais e uma expressão SPDX-"
+"License-Identifier, mas nenhuma licença explícita. Consulte <<expressions, "
+"Expressões SPDX-License-Identifier>> para saber como interpretar a "
+"expressão. Observação: as expressões permitidas para licenças desanexadas "
+"pelo projeto são um subconjunto das expressões usadas informativamente ou "
+"definidas pelo padrão."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:241
+msgid ""
+"The license for files containing only the SPDX-License-Identifier should be "
+"construed to be"
+msgstr ""
+"A licença para arquivos que contêm apenas o SPDX-License-Identifier deve ser "
+"construida da seguinte forma"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:244
+msgid ""
+"Start the license with the copyright notice from the file. Include all the "
+"copyright holders."
+msgstr ""
+"Inicie a licença com o aviso de direitos autorais do arquivo, incluindo "
+"todos os detentores dos direitos autorais."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:247
+msgid ""
+"For each sub-expression, copy the license text from [.filename]#LICENSE/text/"
+"`id`.txt#. When exceptions are present, append them from [.filename]#src/"
+"share/license/exceptions/`id`.txt#. SPDX-License-Identifier expressions "
+"should be construed as described in the SPDX standard."
+msgstr ""
+"Para cada sub-expressão, copie o texto da licença de [.filename]#LICENSE/"
+"text/`id`.txt#. Quando exceções estiverem presentes, anexe-as de [."
+"filename]#src/share/license/exceptions/`id`.txt#. As expressões SPDX-License-"
+"Identifier devem ser interpretadas conforme descrito no padrão SPDX."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:250
+msgid ""
+"Where `id` is the SPDX short license identifier from the `Identifier` column "
+"of https://spdx.org/licenses/[SPDX Identifiers] or https://spdx.org/licenses/"
+"exceptions-index.html[license exception]. If there is no file in [."
+"filename]#LICENSE/#, then that license or exception cannot be specified as a "
+"detached license under this section."
+msgstr ""
+"Onde o`id` é o identificador curto de licença SPDX da coluna `Identifier` de "
+"https://spdx.org/licenses/[SPDX Identifiers] ou da lista de https://spdx.org/"
+"licenses/exceptions-index.html[exceções de licença]. Se não houver um "
+"arquivo em [.filename]#LICENSE/#, então essa licença ou exceção não pode ser "
+"especificada como uma licença desanexada nesta seção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:252
+msgid ""
+"When reading the license text that is detached from a file, a number of "
+"considerations must be taken to make the detached license make sense."
+msgstr ""
+"Ao ler o texto da licença que está desanexado de um arquivo, algumas "
+"considerações devem ser tomadas para que a licença desanexada faça sentido."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:255
+msgid ""
+"Any reference to a copyright notice shall refer to the copyright notice "
+"constructed from the licensed file, not from any copyright notice in the "
+"license text file itself. Many SPDX files have sample copyright notices "
+"that are understood to be examples only."
+msgstr ""
+"Qualquer referência a um aviso de direitos autorais deve se referir ao aviso "
+"de direitos autorais construído a partir do arquivo licenciado, e não de "
+"qualquer aviso de direitos autorais contido no próprio arquivo de texto da "
+"licença. Muitos arquivos SPDX têm exemplos de avisos de direitos autorais "
+"que são entendidos apenas como exemplos."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:258
+msgid ""
+"When names of entities are referred to in the license text, they shall be "
+"construed to apply to the list of all copyright holders listed in the "
+"copyright notices of the licensed file. For example, the BSD-4-clause "
+"license contains the phrase \"This product includes software developed by "
+"the organization\". The phrase 'the organization' should be replaced by the "
+"copyright holders."
+msgstr ""
+"Quando os nomes das entidades são mencionados no texto da licença, eles "
+"devem ser interpretados como se aplicando à lista de todos os detentores de "
+"direitos autorais listados nos avisos de direitos autorais do arquivo "
+"licenciado. Por exemplo, a licença BSD-4-clause contém a frase \"Este "
+"produto inclui software desenvolvido pela organização\". A frase 'a "
+"organização' deve ser substituída pelos detentores de direitos autorais."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:260
+msgid ""
+"When the SPDX offers variations of the license, it is understood the license "
+"in the [.filename]#LICENSE/# file represents the exact version of the "
+"license selected. The SPDX standard exists to match families of licenses "
+"and these variations help match similar licenses that the SPDX organization "
+"believes to be legally identical."
+msgstr ""
+"Quando o SPDX oferece variações da licença, entende-se que a licença no "
+"arquivo [.filename]#LICENSE/# representa a versão exata da licença "
+"selecionada. O padrão SPDX existe para corresponder a famílias de licenças e "
+"essas variações ajudam a corresponder a licenças semelhantes que a "
+"organização SPDX acredita serem legalmente idênticas."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:264
+msgid ""
+"For licenses that have slight variations in text, the SPDX has guidelines to "
+"match them. These guidelines are not relevant here. Contributors wishing "
+"to license under a variant of a SPDX license not contained verbatim in [."
+"filename]#LICENSE/# cannot use the detached option and must specify the "
+"license explicitly."
+msgstr ""
+"Para licenças que possuem pequenas variações no texto, o SPDX possui "
+"diretrizes para correspondê-las. Essas diretrizes não são relevantes aqui. "
+"Os colaboradores que desejam licenciar sob uma variante de uma licença SPDX "
+"que não está contida textualmente em [.filename]#LICENSE/# não podem usar a "
+"opção desanexada e devem especificar explicitamente a licença."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:265
+#, no-wrap
+msgid "Files without Copyright or any License Marking"
+msgstr "Arquivos sem marcação de direitos autorais ou de licença"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:270
+msgid ""
+"Some files cannot have suitable comments added to them. In such cases, a "
+"license may be found in [.filename]#file.ext.license#. For example, a file "
+"named [.filename]#foo.jpg# may have a license in [.filename]#foo.jpg."
+"license#, following the REUSE Software conventions."
+msgstr ""
+"Alguns arquivos não podem ter comentários adequados adicionados a eles. "
+"Nesses casos, uma licença pode ser encontrada em [.filename]#file.ext."
+"license#. Por exemplo, um arquivo chamado [.filename]#foo.jpg# pode ter uma "
+"licença em [.filename]#foo.jpg.license#, seguindo as convenções de software "
+"REUSE."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:273
+msgid ""
+"Files created by the project that lack a copyright notice are understood to "
+"fall under the blanket copyright and licensing in [.filename]#COPYRIGHT#. "
+"Either the file is a mere recitation of facts, not protectable by Copyright "
+"Law, or the content is so trivial as to not warrant the overhead of an "
+"explicit license."
+msgstr ""
+"Arquivos criados pelo projeto que não possuem um aviso de direitos autorais "
+"são entendidos como estando sob o direito autoral e licenciamento geral em [."
+"filename]#COPYRIGHT#. Ou o arquivo é uma mera citação de fatos, não "
+"protegíveis pela Lei de Direitos Autorais, ou o conteúdo é tão trivial que "
+"não justifica a sobrecarga de uma licença explícita."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:276
+msgid ""
+"Files that lack marking and have more than a trivial amount of copyrightable "
+"material, or whose author believes them to be improperly marked, should be "
+"brought to the attention of the FreeBSD core team. It is the strong policy "
+"of the FreeBSD Project to comply with all appropriate licenses."
+msgstr ""
+"Arquivos que não possuem marcação e possuem mais do que uma quantidade "
+"trivial de material protegido por direitos autorais, ou cujo autor acredita "
+"que estejam marcados incorretamente, devem ser trazidos à atenção do Core "
+"Team do FreeBSD. É uma forte política do Projeto FreeBSD cumprir todas as "
+"licenças apropriadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:278
+msgid ""
+"In the future, all such files will be marked explicitly, or follow the REUSE "
+"Software [.filename]#.license# convention."
+msgstr ""
+"No futuro, todos esses arquivos serão marcados explicitamente ou seguirão a "
+"convenção de software REUSE [.filename]#.license#."
+
+#. type: Title ===
+#: documentation/content/en/articles/license-guide/_index.adoc:280
+#, no-wrap
+msgid "SPDX-License-Identifier Expressions"
+msgstr "Expressões SPDX-License-Identifier"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:287
+msgid ""
+"An 'SPDX License expression' is used in two contexts in the FreeBSD software "
+"collection. First, its full form is used for files that have explicit "
+"license statements contained within the file as well as a summarizing SPDX-"
+"License-Identifier expression. In this context, the full power of these "
+"expressions may be used. Second, in a restricted form described above, it "
+"is used to denote the actual license for a given file. In the second "
+"context, only a subset of this expression is allowed by the project."
+msgstr ""
+"A \"expressão de licença SPDX\" é usada em dois contextos na coleção de "
+"software do FreeBSD. Em primeiro lugar, sua forma completa é usada para "
+"arquivos que possuem declarações explícitas de licença contidas no arquivo, "
+"bem como uma expressão resumida SPDX-License-Identifier. Nesse contexto, "
+"todo o poder dessas expressões pode ser usado. Em segundo lugar, em uma "
+"forma restrita descrita acima, é usada para denotar a licença real de um "
+"determinado arquivo. Nesse segundo contexto, apenas um subconjunto dessa "
+"expressão é permitido pelo projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:291
+msgid ""
+"An `SPDX License sub-expression` is either an SPDX short form license "
+"identifier from the https://spdx.org/licenses/[SPDX License List], or the "
+"combination of two SPDX short form license identifiers separated by \"WITH\" "
+"when a https://spdx.org/licenses/exceptions-index.html[license exception] "
+"applies. When multiple licenses apply, an expression consists of keywords "
+"\"AND\", \"OR\" separating sub-expressions and surrounded by \"(\", \")\" . "
+"The https://spdx.github.io/spdx-spec/appendix-IV-SPDX-license-expressions/"
+"[full specification of expressions] spells out all the details and takes "
+"precedence when it conflicts with the simplified treatment of this section."
+msgstr ""
+"Uma \"sub-expressão de licença SPDX\" é um identificador de licença de forma "
+"curta SPDX da https://spdx.org/licenses/[Lista de Licenças SPDX], ou a "
+"combinação de dois identificadores de licença de forma curta SPDX separados "
+"por \"WITH\" quando uma https://spdx.org/licenses/exceptions-index."
+"html[licença de exceção] se aplica. Quando várias licenças se aplicam, uma "
+"expressão consiste em palavras-chave \"AND\", \"OR\" que separam as sub-"
+"expressões e são cercadas por \"(\", \")\". A https://spdx.github.io/spdx-"
+"spec/appendix-IV-SPDX-license-expressions/[especificação completa de "
+"expressões] explica todos os detalhes e tem precedência em caso de conflito "
+"com o tratamento simplificado desta seção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:299
+msgid ""
+"Some license identifiers, like [L]GPL, have the option to use only that "
+"version, or any later version. SPDX defines the suffix `-or-later` to mean "
+"that version of the license or a later version. It defines `-only` to mean "
+"only that specific version of the file. There is an old convention to have "
+"no suffix (which means what the new '-only' suffix means, but which people "
+"confuse for `-or-later`). In addition, affixing a `+` suffix was meant to "
+"mean `-or-later`. New files in FreeBSD should not use these two "
+"conventions. Old files that use this convention should be converted as "
+"appropriate."
+msgstr ""
+"Algumas identificações de licença, como a [L]GPL, têm a opção de usar apenas "
+"aquela versão ou qualquer versão posterior. O SPDX define o sufixo \"-or-"
+"later\" para significar aquela versão da licença ou uma versão posterior. "
+"Define \"-only\" para significar apenas aquela versão específica do arquivo. "
+"Existe uma convenção antiga de não ter um sufixo (o que significa o que o "
+"novo sufixo '-only' significa, mas que as pessoas confundem com '-or-"
+"later'). Além disso, adicionar um sufixo `+` significava `-or-later`. Novos "
+"arquivos no FreeBSD não devem usar essas duas convenções. Arquivos antigos "
+"que usam essa convenção devem ser convertidos conforme apropriado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:304
+#, no-wrap
+msgid ""
+" // SPDX-License-Identifier: GPL-2.0-only\n"
+" // SPDX-License-Identifier: LGPL-2.1-or-later\n"
+msgstr ""
+" // SPDX-License-Identifier: GPL-2.0-only\n"
+" // SPDX-License-Identifier: LGPL-2.1-or-later\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:308
+msgid ""
+"`WITH` should be used when a license modifier is needed. In the FreeBSD "
+"project, a number of files from LLVM have an exception to the Apache 2.0 "
+"license:"
+msgstr ""
+"\"WITH\" deve ser usado quando um modificador de licença é necessário. No "
+"projeto FreeBSD, vários arquivos do LLVM possuem uma exceção à licença "
+"Apache 2.0:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:312
+#, no-wrap
+msgid " // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\n"
+msgstr " // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:316
+msgid ""
+"https://spdx.org/licenses/exceptions-index.html[Exception tags] are managed "
+"by SPDX. License exceptions can only be applied to certain licenses, as "
+"specified in the exception."
+msgstr ""
+"https://spdx.org/licenses/exceptions-index.html[Tags de exceção] são "
+"gerenciadas pelo SPDX. As exceções de licença só podem ser aplicadas a "
+"determinadas licenças, conforme especificado na exceção."
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:319
+msgid ""
+"`OR` should be used if the file has a choice of license and one license is "
+"selected. For example, some dtsi files are available under dual licenses:"
+msgstr ""
+"\"OR\" deve ser usado se o arquivo tiver uma escolha de licença e uma "
+"licença for selecionada. Por exemplo, alguns arquivos dtsi estão disponíveis "
+"sob licenças duplas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:323
+#, no-wrap
+msgid " // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause\n"
+msgstr " // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/license-guide/_index.adoc:327
+msgid ""
+"`AND` should be used if the file has multiple licenses whose terms all apply "
+"to use the file. For example, if code has been incorporated by several "
+"projects, each with their own license:"
+msgstr ""
+"\"AND\" deve ser usado se o arquivo tiver várias licenças cujos termos se "
+"aplicam ao uso do arquivo. Por exemplo, se o código foi incorporado por "
+"vários projetos, cada um com sua própria licença:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/license-guide/_index.adoc:331
+#, no-wrap
+msgid " // SPDX-License-Identifier: BSD-2-Clause AND MIT\n"
+msgstr " // SPDX-License-Identifier: BSD-2-Clause AND MIT\n"
diff --git a/documentation/content/pt-br/articles/linux-emulation/_index.adoc b/documentation/content/pt-br/articles/linux-emulation/_index.adoc
index a6a23e6d83..27ae1fe7ca 100644
--- a/documentation/content/pt-br/articles/linux-emulation/_index.adoc
+++ b/documentation/content/pt-br/articles/linux-emulation/_index.adoc
@@ -1,13 +1,15 @@
---
-title: Emulação de Linux no FreeBSD
authors:
- - author: Roman Divacky
+ -
+ author: 'Roman Divacky'
email: rdivacky@FreeBSD.org
-releaseinfo: "$FreeBSD$"
+description: 'Uma descrição técnica sobre os internals da camada de emulação do Linux no FreeBSD'
+tags: ["Emulation", "Linuxulator", "kernel", "FreeBSD"]
+title: 'Emulação do Linux® no FreeBSD'
trademarks: ["freebsd", "ibm", "adobe", "netbsd", "realnetworks", "oracle", "linux", "sun", "general"]
---
-= Emulação de Linux no FreeBSD
+= Emulação do Linux(R) no FreeBSD
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,18 +18,32 @@ trademarks: ["freebsd", "ibm", "adobe", "netbsd", "realnetworks", "oracle", "lin
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/linux-emulation/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Essa tese master lida com a atualização da camada de emulação do Linux(R) (o chamado _Linuxulator_). A tarefa foi atualizar a camada para casar com a funcionalidade do Linux(R) 2.6. Como uma referencia a implementação, o kernel Linux(R) 2.6.16 foi escolhido. O conceito é perdidamente baseado na implementação do NetBSD. Maior parte do trabalho foi feito no verão de 2006 como parte de um programa de estudante do Google Summer of Code. O foco foi trazer o suporte do _NPTL_ (nova biblioteca de threads POSIX(R)) pra dentro da camada de emulação, incluindo _TLS_ (thread local storage), _futexes_ (mutexes rapidos na camada de usuario), _PID mangling_, e algumas outras coisas menores. Muitos pequenos problemas foram identificados e corrigidos. Meu trabalho foi integrado dentro do repositório de principal do FreeBSD e vai ser ligado ao 7.0R release. Nós, o time de desenvolvimento de emulação estamos trabalhando na emulação do Linux(R) 2.6 a camada de emulação padr ão do FreeBSD.
+Esta tese de mestrado trata da atualização da camada de emulação do Linux(R) (chamada de _Linuxulator_). A tarefa consistiu em atualizar a camada para corresponder à funcionalidade do Linux(R) 2.6. Como implementação de referência, foi escolhido o kernel Linux(R) 2.6.16. O conceito é vagamente baseado na implementação do NetBSD. A maior parte do trabalho foi realizada no verão de 2006 como parte do programa de estudantes do Google Summer of Code. O foco foi trazer o suporte do _NPTL_ (nova biblioteca de threads POSIX(R)) para a camada de emulação, incluindo _TLS_ (armazenamento local de threads), _futexes_ (mutexes de espaço do usuário rápidos), _PID mangling_ e algumas outras pequenas coisas. Muitos problemas pequenos foram identificados e corrigidos durante o processo. Meu trabalho foi integrado ao repositório principal do FreeBSD e será incluído na próxima versão 7.0R. Nós, a equipe de desenvolvimento de emulação, estamos trabalhando para tornar a emulação do Linux(R) 2.6 a camada de emulação padrão no FreeBSD.
'''
@@ -36,138 +52,139 @@ toc::[]
[[intro]]
== Introdução
-Nos últimos anos, os sistemas operacionais baseados em código aberto UNIX(R) começaram a ser amplamente implantados em máquinas servidores e clientes. Entre esses sistemas operacionais eu gostaria de destacar dois: FreeBSD, por sua herança BSD, base de código comprovada pelo tempo e muitos recursos interessantes e Linux(R) por sua ampla base de usuários, entusiasta comunidade aberta de desenvolvedores e apoio de grandes empresas. O FreeBSD tende a ser usado em máquinas de classe servidor, tarefas de rede pesadas com menos uso em máquinas de classe desktop para usuários comuns. Embora o Linux(R) tenha o mesmo uso em servidores, mas é muito mais usado por usuários domésticos. Isto leva a uma situação onde existem muitos programas binários disponíveis apenas para Linux(R) que não suportam o FreeBSD.
+Nos últimos anos, os sistemas operacionais de código aberto baseados em UNIX(R) começaram a ser amplamente implantados em servidores e máquinas clientes. Entre esses sistemas operacionais, gostaria de destacar dois: o FreeBSD, por sua herança BSD, código comprovado ao longo do tempo e muitos recursos interessantes, e o Linux(R), por sua ampla base de usuários, comunidade de desenvolvedores entusiastas e apoio de grandes empresas. O FreeBSD tende a ser usado em máquinas de classe servidor que executam tarefas de rede intensivas, com menos uso em máquinas de classe desktop para usuários comuns. Enquanto o Linux(R) tem o mesmo uso em servidores, mas é usado muito mais por usuários domésticos. Isso leva a uma situação em que há muitos programas somente binários disponíveis para Linux(R) que não possuem suporte para o FreeBSD.
-Naturalmente, surge a necessidade da habilidade de executar binários Linux(R) em um sistema FreeBSD e é com isso que esta tese trata: a emulação do kernel do Linux(R) no sistema operacional FreeBSD.
+Naturalmente, surge a necessidade da capacidade de executar binários Linux(R) em um sistema FreeBSD e é isso que esta tese trata: a emulação do kernel Linux(R) no sistema operacional FreeBSD.
-Durante o verão de 2006, a Google Inc. patrocinou um projeto que se concentrava em estender a camada de emulação do Linux(R) (o chamado Linuxulator) no FreeBSD para incluir necessidades do Linux(R) 2.6. Esta tese é escrita como parte deste projeto.
+Durante o verão de 2006, a Google Inc. patrocinou um projeto que se concentrou na extensão da camada de emulação do Linux® (chamada de Linuxulator) no FreeBSD para incluir as funcionalidades do Linux® 2.6. Esta tese foi escrita como parte deste projeto.
[[inside]]
-== Um olhar para dentro...
+== Uma olhada por dentro...
-Nesta seção vamos descrever cada sistema operacional em questão. Como eles lidam com syscalls, trapframes etc., todo o material de baixo nível. Também descrevemos a maneira como eles entendem primitivas comuns UNIX(R), como o que é um PID, o que é uma thread, etc. Na terceira subseção, falamos sobre como UNIX(R) em emuladores UNIX(R) pode ser feita em geral.
+Nesta seção, vamos descrever cada sistema operacional em questão. Como eles lidam com syscalls, trapframes, etc., tudo o que é de baixo nível. Também descrevemos a maneira como eles entendem os recursos comuns do UNIX(R), como o que é um PID, o que é uma thread, etc. Na terceira subseção, falamos sobre como a emulação do UNIX(R) em cima do UNIX(R) poderia ser feita de maneira geral.
[[what-is-unix]]
-=== O que é o UNIX (R)
+=== O que é UNIX(R)
-UNIX(R) é um sistema operacional com um longo histórico que influenciou quase todos os outros sistemas operacionais atualmente em uso. Começando na década de 1960, seu desenvolvimento continua até hoje (embora em projetos diferentes). O desenvolvimento de UNIX(R) logo se bifurcou em duas formas principais: as famílias BSDs e System III/V. Eles se influenciaram mutuamente ao desenvolver um padrão UNIX(R) comum. Entre as contribuições originadas no BSD, podemos nomear memória virtual, rede TCP/IP, FFS e muitas outras. A ramificação SystemV contribuiu para as primitivas de comunicação entre processos SysV, copy-on-write, etc. UNIX(R) em si não existe mais, mas suas idéias têm sido usadas por muitos outros sistemas operacionais amplos formando assim os chamados sistemas operacionais como UNIX(R). Hoje em dia os mais influentes são Linux(R), Solaris e possivelmente (até certo ponto) FreeBSD. Existem sistemas UNIX(R) de companhias derivados como (AIX, HP-UX etc.), mas estas foram cada vez mais migrados para os sistemas acima mencionados. Vamos resumir as características típicas do UNIX(R).
+UNIX(R) é um sistema operacional com uma longa história que influenciou praticamente todos os outros sistemas operacionais atualmente em uso. Desde os anos 1960, seu desenvolvimento continua até os dias de hoje (embora em projetos diferentes). O desenvolvimento do UNIX(R) logo se dividiu em duas principais vertentes: as famílias BSDs e System III/V. Elas se influenciaram mutuamente ao adotar um padrão comum para o UNIX(R). Entre as contribuições originadas no BSD, podemos citar memória virtual, rede TCP/IP, FFS e muitas outras. O branch do System V contribuiu com primitivas de comunicação interprocesso do SysV, copy-on-write, etc. O UNIX(R) em si não existe mais, mas suas ideias foram utilizadas por muitos outros sistemas operacionais ao redor do mundo, formando o que chamamos de sistemas operacionais semelhantes ao UNIX(R). Nos dias atuais, os mais influentes são Linux(R), Solaris e possivelmente (em certa medida) o FreeBSD. Existem também derivados do UNIX(R) desenvolvidos por empresas (AIX, HP-UX etc.), mas eles têm migrado cada vez mais para os sistemas mencionados anteriormente. Vamos resumir as características típicas do UNIX(R).
[[tech-details]]
=== Detalhes técnicos
-Todo programa em execução constitui um processo que representa um estado da computação. O processo de execução é dividido entre o espaço do kernel e o espaço do usuário. Algumas operações podem ser feitas somente a partir do espaço do kernel (lidando com hardware, etc.), mas o processo deve passar a maior parte de sua vida útil no espaço do usuário. O kernel é onde o gerenciamento dos processos, hardware e detalhes de baixo nível acontecem. O kernel fornece uma API unificada padrão UNIX(R) para o espaço do usuário. Os mais importantes são abordados abaixo.
+Cada programa em execução constitui um processo que representa um estado da computação. Um processo em execução é dividido entre o espaço do kernel e o espaço do usuário. Algumas operações só podem ser realizadas a partir do espaço do kernel (lidar com hardware etc.), mas o processo deve passar a maior parte de sua vida útil no espaço do usuário. O kernel é onde ocorre o gerenciamento dos processos, hardware e detalhes de baixo nível. O kernel fornece uma API UNIX(R) padronizada e unificada para o espaço do usuário. As mais importantes estão descritas abaixo.
[[kern-proc-comm]]
==== Comunicação entre o kernel e o processo de espaço do usuário
-A API comum do UNIX(R) define uma syscall como uma forma de emitir comandos de um processo do espaço do usuário para o kernel. A implementação mais comum é usando uma instrução de interrupção ou especializada (pense em instruções `SYSENTER`/`SYSCALL` para ia32). Syscalls são definidos por um número. Por exemplo, no FreeBSD, a syscall número 85 é a syscall man:swapon[2] e a syscall número 132 é a syscall man:mkfifo[2]. Algumas syscalls precisam de parâmetros, que são passados do espaço do usuário para o espaço do kernel de várias maneiras (dependente da implementação). Syscalls são síncronas.
+A API comum do UNIX(R) define uma syscall como uma forma de emitir comandos de um processo do espaço do usuário para o kernel. A implementação mais comum é feita por meio de uma interrupção ou instrução especializada (pense nas instruções `SYSENTER`/`SYSCALL` para ia32). As syscalls são definidas por um número. Por exemplo, no FreeBSD, o número da syscall 85 é a man:swapon[2] e o número da syscall 132 é a man:mkfifo[2]. Algumas syscalls requerem parâmetros, que são passados do espaço do usuário para o espaço do kernel de várias maneiras (dependendo da implementação). As syscalls são síncronas.
-Outra maneira possível de se comunicar é usando uma _trap_. As traps ocorrem de forma assíncrona após a ocorrência de algum evento (divisão por zero, falha de página, etc.). Uma trap pode ser transparente para um processo (falha de página) ou pode resultar em uma reação como o envio de um _signal_ (divisão por zero).
+Outra forma possível de comunicação é por meio de uma _trap_. As traps ocorrem de forma assíncrona após algum evento ocorrer (divisão por zero, falta de página etc.). Uma trap pode ser transparente para um processo (falta de página) ou pode resultar em uma reação, como o envio de um _sinal_ (divisão por zero).
[[proc-proc-comm]]
==== Comunicação entre processos
-Existem outras APIs (System V IPC, memória compartilhada, etc.), mas a API mais importante é o signal. Os signals são enviados por processos ou pelo kernel e recebidos por processos. Alguns signals podem ser ignorados ou manipulados por uma rotina fornecida pelo usuário, alguns resultam em uma ação predefinida que não pode ser alterada ou ignorada.
+Existem outras APIs (System V IPC, memória compartilhada, etc.), mas a API mais importante é o sinal. Os sinais são enviados por processos ou pelo kernel e recebidos por processos. Alguns sinais podem ser ignorados ou tratados por uma rotina fornecida pelo usuário, enquanto outros resultam em uma ação predefinida que não pode ser alterada ou ignorada.
[[proc-mgmt]]
==== Gerenciamento de processos
-As instâncias do kernel são processadas primeiro no sistema (chamado init). Todo processo em execução pode criar sua cópia idêntica usando a syscall man:fork[2]. Algumas versões ligeiramente modificadas desta syscall foram introduzidas, mas a semântica básica é a mesma. Todo processo em execução pode se transformar em algum outro processo usando a syscall man:exec[3]. Algumas modificações desta syscall foram introduzidas, mas todas servem ao mesmo propósito básico. Os processos terminam suas vidas chamando a syscall man:exit[2]. Todo processo é identificado por um número único chamado PID. Todo processo tem um processo pai definido (identificado pelo seu PID).
+As instâncias do kernel são processadas primeiro no sistema (chamado de init). Todo processo em execução pode criar uma cópia idêntica de si mesmo usando a syscall man:fork[2]. Algumas versões ligeiramente modificadas dessa syscall foram introduzidas, mas a semântica básica é a mesma. Todo processo em execução pode se transformar em outro processo usando a syscall man:exec[3]. Foram introduzidas algumas modificações nessa syscall, mas todas servem ao mesmo propósito básico. Os processos encerram suas vidas chamando a syscall man:exit[2]. Cada processo é identificado por um número único chamado PID. Todo processo possui um processo pai (parent) definido (identificado pelo seu PID).
[[thread-mgmt]]
==== Gerenciamento de threads
-O UNIX(R) tradicional não define nenhuma API nem implementação para threading, enquanto POSIX(R) define sua API de threading, mas a implementação é indefinida. Tradicionalmente, havia duas maneiras de implementar threads. Manipulando-as como processos separados (threading 1:1) ou envolver todo o grupo de thread em um processo e gerenciando a threading no espaço do usuário (threading 1:N). Comparando as principais características de cada abordagem:
+No traditional UNIX(R), não é definida nenhuma API nem implementação para threads, enquanto o POSIX(R) define sua API de threads, mas a implementação é indefinida. Tradicionalmente, havia duas maneiras de implementar threads. Tratá-los como processos separados (threading 1:1) ou envolver todo o grupo de threads em um único processo e gerenciar as threads no espaço do usuário (threading 1:N). Vamos comparar as principais características de cada abordagem:
1:1 threading
-* - threads pesadas
-* - o agendamento não pode ser alterado pelo usuário (ligeiramente mitigado pela API POSIX (R))
-* + não necessita de envolvimento do syscall
-* + pode utilizar várias CPUs
+- Threads pesadas
+- O agendamento não pode ser alterado pelo usuário (ligeiramente atenuada
+ pela API POSIX(R))
++ não necessita de envolvimento do syscall
++ pode utilizar várias CPUs
1: N threading
-* + threads leves
-* + agendamento pode ser facilmente alterado pelo usuário
-* - syscalls devem ser acondicionadas
-* - não pode utilizar mais de uma CPU
++ threads leves
++ agendamento pode ser facilmente alterado pelo usuário
+- As chamadas de sistema devem ser encapsuladas
+- Não pode utilizar mais do que uma CPU
[[what-is-freebsd]]
=== O que é o FreeBSD?
-O projeto FreeBSD é um dos mais antigos sistemas operacionais de código aberto atualmente disponíveis para uso diário. É um descendente direto do verdadeiro UNIX(R), portanto, pode-se afirmar que ele é um verdadeiro UNIX(R) embora os problemas de licenciamento não permitam isso. O início do projeto remonta ao início dos anos 90, quando uma equipe de usuários BSD corrigiu o sistema operacional 386BSD. Baseado neste patchkit surgiu um novo sistema operacional, chamado FreeBSD por sua licença liberal. Outro grupo criou o sistema operacional NetBSD com diferentes objetivos em mente. Vamos nos concentrar no FreeBSD.
+O projeto FreeBSD é um dos sistemas operacionais de código aberto mais antigos atualmente disponíveis para uso diário. É um descendente direto do UNIX(R) genuíno, portanto, poderia ser considerado um verdadeiro UNIX(R), embora questões de licenciamento não permitam isso. O início do projeto remonta ao início dos anos 1990, quando um grupo de usuários do BSD modificou o sistema operacional 386BSD. Com base neste conjunto de patches, um novo sistema operacional surgiu, chamado FreeBSD por causa de sua licença liberal. Outro grupo criou o sistema operacional NetBSD com objetivos diferentes em mente. Vamos nos concentrar no FreeBSD.
-O FreeBSD é um sistema operacional baseado no UNIX(R) com todos os recursos do UNIX(R). Multitarefa preemptiva, necessidades de multiusuário, rede TCP/IP, proteção de memória, suporte a multiprocessamento simétrico, memória virtual com VM mesclada e cache de buffer, todos eles estão lá. Um dos recursos interessantes e extremamente úteis é a capacidade de emular outros sistemas operacionais UNIX(R)-like. A partir de dezembro de 2006 e do desenvolvimento do 7-CURRENT, as seguintes funcionalidades de emulação são suportadas:
+O FreeBSD é um sistema operacional baseado em UNIX(R) moderno, com todos os recursos do UNIX(R). Multitarefa preemptiva, facilidades multiusuário, rede TCP/IP, proteção de memória, suporte a multiprocessamento simétrico , memória virtual com cache de memória e buffer combinados, todos estão presentes. Uma das características interessantes e extremamente úteis é a capacidade de emular outros sistemas operacionais semelhantes ao UNIX(R). A partir de dezembro de 2006 e do desenvolvimento 7-CURRENT, as seguintes funcionalidades de emulação são suportadas:
* Emulação FreeBSD/i386 no FreeBSD/amd64
* Emulação de FreeBSD/i386 no FreeBSD/ia64
-* Emulação-Linux(R) do sistema operacional Linux (R) no FreeBSD
+* Emulação do sistema operacional Linux(R) no FreeBSD
* Emulação de NDIS da interface de drivers de rede do Windows
* Emulação de NetBSD do sistema operacional NetBSD
* Suporte PECoff para executáveis PECoff do FreeBSD
-* Emulação SVR4 do UNIX(R) System V revisão 4
+* SVR4-emulação do UNIX(R) da revisão 4 do System V
-Emulações ativamente desenvolvidas são a camada Linux(R) e várias camadas FreeBSD-on-FreeBSD. Outros não devem funcionar corretamente nem ser utilizáveis nos dias de hoje.
+As emulações desenvolvidas ativamente são a camada Linux(R) e várias camadas FreeBSD-on-FreeBSD. Outras não devem funcionar corretamente ou serem utilizáveis atualmente.
[[freebsd-tech-details]]
==== Detalhes técnicos
-O FreeBSD é o gostinho tradicional de UNIX(R) no sentido de dividir a execução dos processos em duas metades: espaço do kernel e execução do espaço do usuário. Existem dois tipos de entrada de processo no kernel: uma syscall e uma trap. Há apenas uma maneira de retornar. Nas seções subseqüentes, descreveremos as três portas de/para o kernel. Toda a descrição se aplica à arquitetura i386, pois o Linuxulator só existe lá, mas o conceito é semelhante em outras arquiteturas. A informação foi retirada de [1] e do código fonte.
+O FreeBSD é uma variante tradicional do UNIX(R) no sentido de dividir a execução dos processos em dois espaços: espaço do kernel e espaço do usuário. Existem dois tipos de entrada de processo no kernel: uma syscall e uma armadilha (trap). Existe apenas uma maneira de retornar. Nas seções subsequentes, descreveremos os três portões de/para o kernel. Toda a descrição se aplica à arquitetura i386, já que o Linuxulator existe apenas lá, mas o conceito é semelhante em outras arquiteturas. As informações foram retiradas de [1] e do código-fonte.
[[freebsd-sys-entries]]
===== Entradas do sistema
-O FreeBSD tem uma abstração chamada loader de classes de execução, que é uma entrada na syscall man:execve[2]. Isto emprega uma estrutura `sysentvec`, que descreve uma ABI executável. Ele contém coisas como tabela de tradução de errno, tabela de tradução de sinais, várias funções para atender às necessidades da syscall (correção de pilha, coredumping, etc.). Toda ABI que o kernel do FreeBSD deseja suportar deve definir essa estrutura, como é usado posteriormente no código de processamento da syscall e em alguns outros lugares. As entradas do sistema são tratadas pelos manipuladores de traps, onde podemos acessar o espaço do kernel e o espaço do usuário de uma só vez.
+O O FreeBSD tem uma abstração chamada de carregador de classe de execução, que é uma cunha no syscall man:execve[2]. Isso utiliza uma estrutura `sysentvec`, que descreve uma ABI executável. Ela contém coisas como uma tabela de tradução de errno, uma tabela de tradução de sinais, várias funções para atender às necessidades de syscall (ajuste de pilha, coredumping, etc.). Cada ABI que o kernel do FreeBSD deseja suportar deve definir essa estrutura, pois ela é usada posteriormente no código de processamento de syscall e em alguns outros lugares. As entradas do sistema são tratadas por manipuladores de interrupção, onde podemos acessar tanto o espaço do kernel quanto o espaço do usuário de uma só vez.
[[freebsd-syscalls]]
===== Syscalls
-Syscalls no FreeBSD são emitidos executando a interrupção `0x80` com o registrador `%eax` definido para um número de syscall desejado com argumentos passados na pilha.
+As chamadas de sistema (syscalls) no FreeBSD são realizadas executando a interrupção `0x80` com o registro `%eax` definido para o número desejado da syscall e os argumentos passados na pilha.
-Quando um processo emite uma interrupção `0x80`, a syscall manipuladora de trap `int0x80` é proclamada (definida em [.filename]#sys/i386/i386/exception.s#), que prepara argumentos (ou seja, copia-os para a pilha) para uma chamada para uma função C man:syscall[2] (definida em [.filename]#sys/i386/i386/trap.c#), que processa o trapframe passado. O processamento consiste em preparar a syscall (dependendo da entrada `sysvec`), determinando se a syscall é de 32 ou 64 bits (muda o tamanho dos parâmetros), então os parâmetros são copiados, incluindo a syscall. Em seguida, a função syscall real é executada com o processamento do código de retorno (casos especiais para erros `ERESTART` e `EJUSTRETURN`). Finalmente, um `userret()` é agendado, trocando o processo de volta ao ritmo do usuário. Os parâmetros para a syscall manipuladora atual são passados na forma de argumentos `struct thread \*td`, `struct syscall args*` onde o segundo parâmetro é um ponteiro para o copiado na estrutura de parâmetros.
+Quando um processo emite a interrupção `0x80`, o tratador de interrupção `int0x80` da syscall é acionado (definido em [.filename]#sys/i386/i386/exception.s#), que prepara os argumentos (ou seja, copia-os para a pilha) para uma chamada à função C man:syscall[2] (definida em [.filename]#sys/i386/i386/trap.c#), que processa o trapframe passado. O processamento consiste em preparar a syscall (dependendo da entrada `sysvec`), determinar se a syscall é de 32 bits ou 64 bits (alterando o tamanho dos parâmetros), em seguida, os parâmetros são copiados, incluindo a syscall. Em seguida, a função da syscall real é executada com o processamento do código de retorno (casos especiais para erros `ERESTART` e `EJUSTRETURN`). Por fim, é agendado um `userret()`, alternando o processo de volta para o espaço do usuário. Os parâmetros para o manipulador da syscall real são passados na forma de `struct thread *td`, `struct syscall args *`, em que o segundo parâmetro é um ponteiro para a estrutura de parâmetros copiada.
[[freebsd-traps]]
===== Armadilhas (Traps)
-O manuseio de traps no FreeBSD é similar ao manuseio de syscalls. Sempre que ocorre uma trap, um manipulador de assembler é chamado. É escolhido entre alltraps, alltraps com regs push ou calltrap, dependendo do tipo de trap. Este manipulador prepara argumentos para uma chamada para uma função C `trap()` (definida em [.filename]#sys/i386/i386/trap.c#), que então processa a trap ocorrida. Após o processamento, ele pode enviar um sinal para o processo e/ou sair para o espaço do usuário usando `userret()`.
+O tratamento de traps no FreeBSD é semelhante ao tratamento de syscalls. Sempre que ocorre uma trap, um manipulador em assembly é chamado. Ele é escolhido entre alltraps, alltraps com registradores empurrados ou calltrap, dependendo do tipo de trap. Esse manipulador prepara os argumentos para uma chamada à função em C `trap()` (definida em [.filename]#sys/i386/i386/trap.c#), que então processa a trap ocorrida. Após o processamento, pode ser enviado um sinal para o processo e/ou retornar para o espaço do usuário usando `userret()`.
[[freebsd-exits]]
===== Saídas
-As saídas do kernel para o userspace acontecem usando a rotina assembler `doreti`, independentemente de o kernel ter sido acessado por meio de uma trap ou via syscall. Isso restaura o status do programa da pilha e retorna ao espaço do usuário.
+As saídas do kernel para o espaço do usuário acontecem usando a rotina em assembly `doreti`, independentemente se o kernel foi acessado por uma interrupção (trap) ou por uma chamada de sistema. Isso restaura o status do programa da pilha e retorna para o espaço do usuário.
[[freebsd-unix-primitives]]
-===== primitivas UNIX(R)
+===== Primitivas do UNIX(R)
-O sistema operacional FreeBSD adere ao esquema tradicional UNIX(R), onde cada processo possui um número de identificação único, o chamado _PID_ (ID do processo). Números PID são alocados de forma linear ou aleatória variando de `0` para `PID_MAX`. A alocação de números PID é feita usando pesquisa linear de espaço PID. Cada thread em um processo recebe o mesmo número PID como resultado da chamada man:getpid[2].
+O sistema operacional FreeBSD adere ao esquema tradicional do UNIX(R), onde cada processo possui um número de identificação exclusivo, chamado de _PID_ (Process ID). Os números de PID são alocados linearmente ou aleatoriamente, variando de `0` a `PID_MAX`. A alocação dos números de PID é feita usando busca linear no espaço de PID. Cada thread em um processo recebe o mesmo número de PID como resultado da chamada do man:getpid[2].
-Atualmente existem duas maneiras de implementar o threading no FreeBSD. A primeira maneira é o threading M:N seguido pelo modelo de threading 1:1. A biblioteca padrão usada é o threading M:N (`libpthread`) e você pode alternar no tempo de execução para threading 1:1 (`libthr`). O plano é mudar para a biblioteca 1:1 por padrão em breve. Embora essas duas bibliotecas usem as mesmas primitivas do kernel, elas são acessadas por API(s) diferentes. A biblioteca M:N usa a família `kse_*` das syscalls enquanto a biblioteca 1:1 usa a família `thr_*` das syscalls. Por causa disso, não existe um conceito geral de ID de threading compartilhado entre o kernel e o espaço do usuário. Obviamente, as duas bibliotecas de threads implementam a API de ID de threading pthread. Todo threading do kernel (como descrito por `struct thread`) possui identificadores td tid, mas isso não é diretamente acessível a partir do espaço do usuário e serve apenas as necessidades do kernel. Ele também é usado para a biblioteca de threading 1:1 como o ID de threading do pthread, mas a manipulação desta é interna à biblioteca e não pode ser confiável.
+Atualmente, existem duas maneiras de implementar threading no FreeBSD. A primeira maneira é a modelagem de threads M:N, seguida pelo modelo de thread 1:1. A biblioteca padrão usada é a de thread M:N (`libpthread`), e você pode alternar em tempo de execução para a thread 1:1 (`libthr`). O plano é mudar em breve para a biblioteca 1:1 por padrão. Embora essas duas bibliotecas usem as mesmas primitivas do kernel, elas são acessadas por meio de APIs diferentes. A biblioteca M:N usa a família de syscalls `kse_*`, enquanto a biblioteca 1:1 usa a família de syscalls `thr_*`. Devido a isso, não há um conceito geral de ID de thread compartilhado entre o espaço do kernel e o espaço do usuário. Claro, ambas as bibliotecas de threads implementam a API de ID de thread pthread. Cada thread do kernel (conforme descrito por `struct thread`) tem um identificador `td tid`, mas isso não é acessível diretamente do espaço do usuário e serve exclusivamente às necessidades do kernel. Também é usado para a biblioteca de thread 1:1 como ID de thread pthread, mas o tratamento disso é interno à biblioteca e não se pode confiar.
-Como dito anteriormente, existem duas implementações de threads no FreeBSD. A biblioteca M:N divide o trabalho entre o espaço do kernel e o espaço do usuário. Thread é uma entidade que é agendada no kernel, mas pode representar vários números de threads do userspace. Threads M do userspace são mapeadas para threads N do kernel, economizando recursos e mantendo a capacidade de explorar o paralelismo de multiprocessadores. Mais informações sobre a implementação podem ser obtidas na página do manual ou [1]. A biblioteca 1:1 mapeia diretamente um segmento userland para uma thread do kernel, simplificando muito o esquema. Nenhum desses designs implementa um mecanismo justo (tal mecanismo foi implementado, mas foi removido recentemente porque causou séria lentidão e tornou o código mais difícil de lidar).
+Como mencionado anteriormente, existem duas implementações de threading no FreeBSD. A biblioteca M:N divide o trabalho entre o espaço do kernel e o espaço do usuário. Uma thread é uma entidade agendada no kernel, mas pode representar vários threads no espaço do usuário. M threads no espaço do usuário são mapeadas para N threads no kernel, economizando recursos e aproveitando o paralelismo de multiprocessadores. Mais informações sobre a implementação podem ser obtidas na página do manual ou [1]. A biblioteca 1:1 mapeia diretamente um thread do espaço do usuário para um thread do kernel, simplificando bastante o esquema. Nenhum desses designs implementa um mecanismo de justiça (um mecanismo desse tipo foi implementado, mas foi removido recentemente porque causava uma desaceleração significativa e tornava o código mais difícil de lidar).
[[what-is-linux]]
-=== O que é Linux(R)
+=== O que é o Linux(R)
-Linux(R) é um kernel do tipo UNIX(R) originalmente desenvolvido por Linus Torvalds, e agora está sendo contribuído por uma grande quantidade de programadores em todo o mundo. De seu simples começo até hoje, com amplo suporte de empresas como IBM ou Google, o Linux(R) está sendo associado ao seu rápido ritmo de desenvolvimento, suporte completo a hardware e seu benevolente modelo despota de organização.
+O Linux(R) é um kernel semelhante ao UNIX(R) originalmente desenvolvido por Linus Torvalds e que agora recebe contribuições de uma grande comunidade de programadores ao redor do mundo. Desde os seus humildes começos até os dias de hoje, com amplo suporte de empresas como IBM e Google, o Linux(R) é associado à sua rápida velocidade de desenvolvimento, suporte completo de hardware e modelo de organização com um ditador benevolente.
-O desenvolvimento do Linux(R) começou em 1991 como um projeto amador na Universidade de Helsinque na Finlândia. Desde então, ele obteve todos os recursos de um sistema operacional semelhante ao UNIX: multiprocessamento, suporte multiusuário, memória virtual, rede, basicamente tudo está lá. Também há recursos altamente avançados, como virtualização, etc.
+O desenvolvimento do Linux(R) começou em 1991 como um projeto de hobby na Universidade de Helsinki, na Finlândia. Desde então, ele adquiriu todas as características de um sistema operacional moderno semelhante ao UNIX(R): suporte a multiprocessamento, suporte a vários usuários, memória virtual, rede, basicamente tudo está presente. Existem também recursos altamente avançados, como virtualização, entre outros.
-A partir de 2006, o Linux parece ser o sistema operacional de código aberto mais utilizado com o apoio de fornecedores independentes de software como Oracle, RealNetworks, Adobe, etc. A maioria dos softwares comerciais distribuídos para Linux(R) só pode ser obtido de forma binária, portanto a recompilação para outros sistemas operacionais é impossível.
+A partir de 2006, o Linux(R) parece ser o sistema operacional de código aberto mais amplamente utilizado, com suporte de fornecedores independentes de software como Oracle, RealNetworks, Adobe, etc. A maioria do software comercial distribuído para Linux(R) só está disponível em forma binária, tornando impossível a recompilação para outros sistemas operacionais.
-A maior parte do desenvolvimento do Linux(R) acontece em um sistema de controle de versão Git. O Git é um sistema distribuído, de modo que não existe uma fonte central do código Linux(R), mas algumas ramificações são consideradas proeminentes e oficiais. O esquema de número de versão implementado pelo Linux(R) consiste em quatro números A.B.C.D. Atualmente, o desenvolvimento acontece em 2.6.C.D, onde C representa a versão principal, onde novos recursos são adicionados ou alterados, enquanto D é uma versão secundária somente para correções de bugs.
+A maioria do desenvolvimento do Linux(R) ocorre em um sistema de controle de versão chamado Git. O Git é um sistema distribuído, então não há uma fonte central do código do Linux(R), mas alguns branches são considerados proeminentes e oficiais. O esquema de numeração de versão implementado pelo Linux(R) consiste em quatro números A.B.C.D. Atualmente, o desenvolvimento ocorre na versão 2.6.C.D, onde C representa a versão principal, onde novos recursos são adicionados ou alterados, enquanto D é uma versão menor para correções de bugs apenas.
Mais informações podem ser obtidas em [3].
[[linux-tech-details]]
==== Detalhes técnicos
-O Linux(R) segue o esquema tradicional do UNIX(R) de dividir a execução de um processo em duas metades: o kernel e o espaço do usuário. O kernel pode ser inserido de duas maneiras: via trap ou via syscall. O retorno é tratado apenas de uma maneira. A descrição mais detalhada aplica-se ao Linux(R) 2.6 na arquitetura i386(TM). Esta informação foi retirada de [2].
+Linux(R) segue o esquema tradicional do UNIX(R) de dividir a execução de um processo em duas partes: o espaço do kernel e o espaço do usuário. O kernel pode ser acessado de duas maneiras: por meio de uma interrupção (trap) ou por meio de uma chamada de sistema (syscall). O retorno é tratado apenas de uma maneira. A descrição a seguir se aplica ao Linux(R) 2.6 na arquitetura i386(TM). Essas informações foram obtidas em [2].
[[linux-syscalls]]
===== Syscalls
-Syscalls em Linux(R) são executados (no espaço de usuário) usando macros `syscallX` onde X substitui um número que representa o número de parâmetros da syscall dada. Essa macro traduz um código que carrega o registro `% eax` com um número da syscall e executa a interrupção `0x80`. Depois disso, um retorn da syscall é chamado, o que traduz valores de retorno negativos para valores `errno` positivos e define `res` para `-1` em caso de erro. Sempre que a interrupção `0x80` é chamada, o processo entra no kernel no manipulador de trap das syscalls. Essa rotina salva todos os registros na pilha e chama a entrada syscall selecionada. Note que a convenção de chamadas Linux(R) espera que os parâmetros para o syscall sejam passados pelos registradores como mostrado aqui:
+As chamadas de sistema no Linux(R) são realizadas (no espaço do usuário) usando macros `syscallX`, em que X substitui um número representando a quantidade de parâmetros da chamada de sistema específica. Essa macro é traduzida para um código que carrega o registro `%eax` com o número da chamada de sistema e executa a interrupção `0x80`. Após o retorno da chamada de sistema, é feita a chamada para tratar o retorno, que converte valores de retorno negativos em valores `errno` positivos e define `res` como `-1` em caso de erro. Sempre que a interrupção `0x80` é chamada, o processo entra no kernel no tratador de interrupção de chamada de sistema. Essa rotina salva todos os registros na pilha e chama a entrada da chamada de sistema selecionada. Observa-se que a convenção de chamada do Linux(R) espera que os parâmetros da chamada de sistema sejam passados via registros, como mostrado aqui:
. parameter -> `%ebx`
. parameter -> `%ecx`
@@ -176,45 +193,45 @@ Syscalls em Linux(R) são executados (no espaço de usuário) usando macros `sys
. parameter -> `%edi`
. parameter -> `%ebp`
-Existem algumas exceções, onde Linux(R) usa diferentes convenções de chamada (mais notavelmente a syscall `clone`).
+Existem algumas exceções a isso, onde o Linux(R) usa convenções de chamada diferentes (a mais notável é a chamada de sistema `clone`).
[[linux-traps]]
===== Armadilhas (Traps)
-Os manipuladores de traps são apresentados em [.filename]#arch/i386/kernel/traps.c# e a maioria desses manipuladores vive em [.filename]#arch/i386/kernel/entry.S#, onde a manipulação das traps acontecem.
+Os tratadores de exceção são introduzidos em [.filename]#arch/i386/kernel/traps.c# e a maioria desses tratadores ficam localizados em [.filename]#arch/i386/kernel/entry.S#, onde o tratamento das exceções ocorre.
[[linux-exits]]
===== Saídas
-O retorno da syscall é gerenciado pela syscall man:exit[3], que verifica se o processo não está concluído e verifica se usamos seletores fornecidos pelo usuário . Se isso acontecer, a correção da pilha é aplicada e, finalmente, os registros são restaurados da pilha e o processo retorna ao espaço do usuário.
+O retorno da chamada de sistema é gerenciado pela função `exit` do sistema, que verifica se o processo possui trabalho inacabado e, em seguida, verifica se foram utilizados seletores fornecidos pelo usuário. Se isso ocorrer, é aplicada uma correção de pilha e, finalmente, os registros são restaurados da pilha e o processo retorna ao espaço do usuário.
[[linux-unix-primitives]]
-===== primitivas UNIX(R)
+===== Primitivas do UNIX(R)
-Na versão 2.6, o sistema operacional Linux(R) redefiniu algumas das primitivas tradicionais do UNIX(R), especialmente PID, TID e thread. O PID é definido para não ser exclusivo para cada processo, portanto, para alguns processos (threading) man:getppid[2] retorna o mesmo valor. A identificação exclusiva do processo é fornecida pelo TID. Isso ocorre porque o _NPTL_ (Nova Biblioteca de threading POSIX(R)) define threading para serem processos normais (assim chamado threading 1:1). Gerar um novo processo no Linux(R) 2.6 acontece usando a syscall `clone` (as variantes do fork são reimplementadas usando-o). Esta syscall clone define um conjunto de sinalizadores que afetam o comportamento do processo de clonagem em relação à implementação do threading. A semântica é um pouco confusa, pois não existe uma única bandeira dizendo a syscall para criar uma thread.
+Na versão 2.6, o sistema operacional Linux(R) redefiniu algumas das primitivas tradicionais do UNIX(R), principalmente PID, TID e thread. O PID não é mais definido como único para cada processo, portanto, para alguns processos (threads), a função man:getppid[2] retorna o mesmo valor. A identificação única de um processo é fornecida pelo TID. Isso ocorre porque o _NPTL_ (New POSIX(R) Thread Library) define threads como processos normais (chamados de 1:1 threading). A criação de um novo processo no Linux(R) 2.6 ocorre usando a chamada de sistema `clone` (as variantes de fork são reimplementadas usando essa chamada). Essa chamada clone define um conjunto de flags que afetam o comportamento do processo clonado em relação à implementação de threads. A semântica é um pouco complexa, pois não há uma única flag que indique à chamada de sistema para criar uma thread.
Flags de clone implementados são:
* `CLONE_VM` - os processos compartilham seu espaço de memória
* `CLONE_FS` - compartilha umask, cwd e namespace
-* `CLONE_FILES` - compartilham arquivos abertos
-* `CLONE_SIGHAND` - compartilha manipuladores de sinais e bloqueia sinais
-* `CLONE_PARENT` - compartilha processo pai
-* `CLONE_THREAD` - ser a thread (mais explicações abaixo)
+* `CLONE_FILES` - compartilha arquivos abertos
+* `CLONE_SIGHAND` - compartilha manipuladores de sinal e sinais bloqueados
+* `CLONE_PARENT` - compartilha o processo pai
+* `CLONE_THREAD` - ser uma thread (mais explicações abaixo)
* `CLONE_NEWNS` - novo namespace
-* `CLONE_SYSVSEM` - compartilha SysV sob estruturas
+* `CLONE_SYSVSEM` - compartilha estruturas de reversão SysV
* `CLONE_SETTLS` - configura o TLS no endereço fornecido
-* `CLONE_PARENT_SETTID` - define o TID no processo pai
-* `CLONE_CHILD_CLEARTID` - limpe o TID no processo filho
-* `CLONE_CHILD_SETTID` - define o TID no processo filho
+* `CLONE_PARENT_SETTID` - define o TID (Thread ID) no processo pai
+* `CLONE_CHILD_CLEARTID` - limpa o TID (Thread ID) no processo filho
+* `CLONE_CHILD_SETTID` - define o TID (Thread ID) no processo filho
-`CLONE_PARENT` define o processo real para o processo pai do requisitante. Isso é útil para threads porque, se a thread A criar a thread B, queremos que a thread B parenteada para o processo pai de todo o grupo de threads. `CLONE_THREAD` faz exatamente a mesma coisa que `CLONE_PARENT`, `CLONE_VM` e `CLONE_SIGHAND`, reescreve o PID para ser o mesmo que PID do requisitante, define o sinal de saída como none e entra no grupo de threads. `CLONE_SETTLS` configura entradas GDT para tratamento de TLS. O conjunto de flags `CLONE_*_*TID` define/limpa o endereço fornecido pelo usuário para TID ou 0.
+A `CLONE_PARENT` define o pai real como o pai do chamador. Isso é útil para threads, porque se a thread A cria a thread B, queremos que a thread B tenha o mesmo pai do grupo de threads inteiro. A `CLONE_THREAD` faz exatamente a mesma coisa que `CLONE_PARENT`, `CLONE_VM` e `CLONE_SIGHAND`, reescreve o PID para ser o mesmo do chamador, define o sinal de saída como nenhum (none) e entra no grupo de threads. A `CLONE_SETTLS` configura as entradas do GDT (Global Descriptor Table) para manipulação de TLS (Thread Local Storage). O conjunto de flags `CLONE_*_*TID` define ou limpa o endereço fornecido pelo usuário para o TID ou 0.
-Como você pode ver, o `CLONE_THREAD` faz a maior parte do trabalho e não parece se encaixar muito bem no esquema. A intenção original não é clara (mesmo para autores, de acordo com comentários no código), mas acho que originalmente havia uma flag de thread, que foi então dividida entre muitas outras flags, mas essa separação nunca foi totalmente concluída. Também não está claro para que serve esta partição, uma vez que a glibc não usa isso, portanto, apenas o uso do clone escrito à mão permite que um programador acesse esses recursos.
+Como você pode ver, o `CLONE_THREAD` faz a maior parte do trabalho e parece não se encaixar muito bem no esquema. A intenção original é incerta (até mesmo para os autores, de acordo com comentários no código), mas acredito que originalmente existia uma única flag de threading, que foi posteriormente dividida entre muitas outras flags, mas essa separação nunca foi totalmente concluída. Também não está claro para que serve essa partição, já que a glibc não a utiliza, então apenas o uso manual do clone permite que um programador acesse esses recursos.
-Para programas não segmentados, o PID e o TID são os mesmos. Para programas em threadings, os primeiros PID e TID da thread são os mesmos e todos os threading criados compartilham o mesmo PID e são atribuídos a um TID exclusivo (porque `CLONE_THREAD` é passado), o processo pai também é compartilhado para todos os processos que formam esse threading do programa.
+Para programas não-threaded, o PID e TID são os mesmos. Para programas threaded, o PID e TID da primeira thread são os mesmos, e cada thread criada compartilha o mesmo PID e recebe um TID único (porque `CLONE_THREAD` é passado), também o pai é compartilhado por todos os processos que formam esse programa threaded.
-O código que implementa man:pthread_create[3] no NPTL define as flags de clone como este:
+O código que implementa o man:pthread_create[3] em NPTL define as flags de clone da seguinte forma:
[.programlisting]
....
@@ -231,7 +248,7 @@ int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL
| 0);
....
-O `CLONE_SIGNAL` é definido como
+A `CLONE_SIGNAL` é definida como
[.programlisting]
....
@@ -243,44 +260,44 @@ o último 0 significa que nenhum sinal é enviado quando qualquer uma das thread
[[what-is-emu]]
=== O que é emulação
-De acordo com uma definição de dicionário, emulação é a capacidade de um programa ou dispositivo de imitar um outro programa ou dispositivo. Isto é conseguido fornecendo a mesma reação a um determinado estímulo que o objeto emulado. Na prática, o mundo do software vê três tipos de emulação - um programa usado para emular uma máquina (QEMU, vários emuladores de consoles de jogos etc.), emulação de software de uma instalação de hardware (emuladores OpenGL, emulação de unidades de ponto flutuante etc.) e emulação do sistema (no kernel do sistema operacional ou como um programa de espaço do usuário).
+De acordo com a definição de dicionário, emulação é a capacidade de um programa ou dispositivo imitar outro programa ou dispositivo. Isso é alcançado ao fornecer a mesma reação a um estímulo dado como o objeto emulado. Na prática, o mundo do software geralmente vê três tipos de emulação: um programa usado para emular uma máquina (QEMU, vários emuladores de consoles de jogos, etc.), emulação de software de uma funcionalidade de hardware (emuladores de OpenGL, emulação de unidades de ponto flutuante, etc.) e emulação de sistemas operacionais (seja no núcleo do sistema operacional ou como um programa no espaço do usuário).
-Emulação é geralmente usada em um lugar, onde o uso do componente original não é viável nem possível a todos. Por exemplo, alguém pode querer usar um programa desenvolvido para um sistema operacional diferente do que eles usam. Então a emulação vem a calhar. Por vezes, não há outra maneira senão usar emulação - por ex. Quando o dispositivo de hardware que você tenta usar não existe (ainda/mais), então não há outro caminho além da emulação. Isso acontece com frequência ao transferir um sistema operacional para uma nova plataforma (inexistente). Às vezes é mais barato emular.
+A emulação é geralmente utilizada em situações em que não é viável ou possível utilizar o componente original. Por exemplo, alguém pode querer usar um programa desenvolvido para um sistema operacional diferente do que estão usando. Nesse caso, a emulação é útil. Às vezes, não há outra opção além da emulação - por exemplo, quando o dispositivo de hardware que você está tentando usar não existe (ainda/não mais), não há outra opção além da emulação. Isso ocorre com frequência ao portar um sistema operacional para uma plataforma nova (e inexistente). Às vezes, é apenas mais econômico utilizar a emulação.
-Olhando do ponto de vista da implementação, existem duas abordagens principais para a implementação da emulação. Você pode emular a coisa toda - aceitando possíveis entradas do objeto original, mantendo o estado interno e emitindo a saída correta com base no estado e/ou na entrada. Este tipo de emulação não requer condições especiais e basicamente pode ser implementado em qualquer lugar para qualquer dispositivo/programa. A desvantagem é que a implementação de tal emulação é bastante difícil, demorada e propensa a erros. Em alguns casos, podemos usar uma abordagem mais simples. Imagine que você deseja emular uma impressora que imprime da esquerda para a direita em uma impressora que imprime da direita para a esquerda. É óbvio que não há necessidade de uma camada de emulação complexa, mas a simples reversão do texto impresso é suficiente. Às vezes, o ambiente de emulação é muito semelhante ao emulado, portanto, apenas uma camada fina de alguma tradução é necessária para fornecer uma emulação totalmente funcional! Como você pode ver, isso é muito menos exigente de implementar, portanto, menos demorado e propenso a erros do que a abordagem anterior. Mas a condição necessária é que os dois ambientes sejam semelhantes o suficiente. A terceira abordagem combina os dois anteriores. Na maioria das vezes, os objetos não fornecem os mesmos recursos, portanto, em um caso de emulação, o mais poderoso é o menos poderoso que temos para emular os recursos ausentes com a emulação completa descrita acima.
+Olhando a partir de um ponto de vista de implementação, existem duas abordagens principais para a implementação da emulação. Você pode emular o objeto inteiro - aceitando possíveis entradas do objeto original, mantendo o estado interno e emitindo a saída correta com base no estado e/ou na entrada. Esse tipo de emulação não requer condições especiais e basicamente pode ser implementado em qualquer lugar para qualquer dispositivo/programa. A desvantagem é que a implementação de tal emulação é bastante difícil, demorada e propensa a erros. Em alguns casos, podemos usar uma abordagem mais simples. Imagine que você queira emular uma impressora que imprime da esquerda para a direita em uma impressora que imprime da direita para a esquerda. É óbvio que não há necessidade de uma camada de emulação complexa, apenas reverter o texto impresso é suficiente. Às vezes, o ambiente de emulação é muito semelhante ao ambiente emulado, então apenas uma fina camada de tradução é necessária para fornecer uma emulação totalmente funcional! Como você pode ver, isso é muito menos exigente de ser implementado, portanto, menos demorado e propenso a erros em comparação com a abordagem anterior. Mas a condição necessária é que os dois ambientes sejam suficientemente semelhantes. A terceira abordagem combina as duas anteriores. Na maioria das vezes, os objetos não fornecem as mesmas capacidades, então, ao emular um objeto mais poderoso em um objeto menos poderoso, temos que emular os recursos ausentes com emulação completa descrita anteriormente.
-Esta tese de mestrado lida com a emulação de UNIX(R) em UNIX(R), que é exatamente o caso, onde apenas uma camada fina de tradução é suficiente para fornecer emulação completa. A API do UNIX(R) consiste em um conjunto de syscalls, que geralmente são autônomas e não afetam algum estado global do kernel.
+Esta tese de mestrado trata da emulação do UNIX(R) em UNIX(R), que é exatamente o caso em que apenas uma camada fina de tradução é suficiente para fornecer uma emulação completa. A API do UNIX(R) consiste em um conjunto de syscalls, que geralmente são autônomas e não afetam algum estado global do kernel.
Existem algumas syscalls que afetam o estado interno, mas isso pode ser resolvido fornecendo algumas estruturas que mantêm o estado extra.
-Nenhuma emulação é perfeita e as emulações tendem a não ter algumas partes, mas isso geralmente não causa nenhuma desvantagem séria. Imagine um emulador de console de jogos que emula tudo, menos a saída de música. Não há dúvida de que os jogos são jogáveis e pode-se usar o emulador. Pode não ser tão confortável quanto o console original, mas é um compromisso aceitável entre preço e conforto.
+Nenhuma emulação é perfeita e emulações tendem a ter algumas partes ausentes, mas isso geralmente não causa grandes inconvenientes. Imagine um emulador de console de jogos que emula tudo, exceto a saída de música. Sem dúvida, os jogos são jogáveis e é possível usar o emulador. Pode não ser tão confortável quanto o console de jogos original, mas é um compromisso aceitável entre preço e conforto.
-O mesmo acontece com a API do UNIX(R). A maioria dos programas pode viver com um conjunto muito limitado de syscalls funcionando. Essas syscalls tendem a ser as mais antigas (man:read[2]/man:write[2], man:fork[2] family, man:signal[3] handling, man:exit[3], man:socket[2] API), portanto, é fácil emular porque sua semântica é compartilhada entre todos os UNIX(R), que existem hoje.
+O mesmo acontece com a API do UNIX(R). A maioria dos programas pode funcionar com um conjunto muito limitado de syscalls. Essas syscalls tendem a ser as mais antigas (man:read[2]/man:write[2], família man:fork[2], manipulação de man:signal[3], man:exit[3], API man:socket[2]), o que torna mais fácil a emulação, pois sua semântica é compartilhada entre todos os sistemas UNIX(R) existentes hoje em dia.
[[freebsd-emulation]]
== Emulação
=== Como funciona a emulação no FreeBSD
-Como dito anteriormente, o FreeBSD suporta a execução de binários a partir de vários outros UNIX(R). Isso funciona porque o FreeBSD tem uma abstração chamada loader de classes de execução. Isso se encaixa na syscall man:execve[2], então quando man:execve[2] está prestes a executar um binário que examina seu tipo.
+Como mencionado anteriormente, o FreeBSD suporta a execução de binários de vários outros sistemas UNIX(R). Isso é possível porque o FreeBSD possui uma abstração chamada de "execução do carregador de classe" (execution class loader). Isso é inserido na chamada de sistema man:execve[2], então quando o man:execve[2] está prestes a executar um binário, ele examina o tipo do binário.
-Existem basicamente dois tipos de binários no FreeBSD. Scripts de texto semelhantes a shell que são identificados por `#!` como seus dois primeiros caracteres e binários normais (normalmente _ELF_), que são uma representação de um objeto executável compilado. A grande maioria (pode-se dizer todos eles) de binários no FreeBSD é do tipo ELF. Os arquivos ELF contêm um cabeçalho, que especifica a ABI do OS para este arquivo ELF. Ao ler essas informações, o sistema operacional pode determinar com precisão o tipo de binário do arquivo fornecido.
+Existem basicamente dois tipos de binários no FreeBSD. Scripts de texto semelhantes a shell, que são identificados pelos primeiros dois caracteres `#!`, e binários normais (geralmente ELF), que são uma representação de um objeto executável compilado. A grande maioria (pode-se dizer que todos) os binários no FreeBSD são do tipo ELF. Os arquivos ELF contêm um cabeçalho que especifica a ABI do sistema operacional para este arquivo ELF. Lendo essa informação, o sistema operacional pode determinar com precisão qual é o tipo de arquivo binário.
-Toda ABI de OS deve ser registrada no kernel do FreeBSD. Isso também se aplica ao sistema operacional nativo do FreeBSD. Então, quando man:execve[2] executa um binário, ele itera através da lista de APIs registradas e quando ele encontra a correta, ele começa a usar as informações contidas na descrição da ABI do OS (sua tabela syscall, tabela de tradução `errno`, etc.). Assim, toda vez que o processo chama uma syscall, ele usa seu próprio conjunto de syscalls em vez de uma global. Isso efetivamente fornece uma maneira muito elegante e fácil de suportar a execução de vários formatos binários.
+Cada ABI de sistema operacional deve ser registrada no kernel do FreeBSD. Isso também se aplica à ABI nativa do FreeBSD. Portanto, quando o man:execve[2] executa um binário, ele itera pela lista de APIs registradas e, quando encontra a correspondente, começa a usar as informações contidas na descrição da ABI do sistema operacional (sua tabela de syscalls, tabela de tradução de `errno`, etc.). Portanto, cada vez que o processo chama uma syscall, ele usa seu próprio conjunto de syscalls em vez de um conjunto global. Isso fornece uma maneira muito elegante e fácil de oferecer suporte à execução de vários formatos binários.
-A natureza da emulação de diferentes sistemas operacionais (e também alguns outros subsistemas) levou os desenvolvedores a invitar um mecanismo de evento manipulador. Existem vários locais no kernel, onde uma lista de manipuladores de eventos é chamada. Cada subsistema pode registrar um manipulador de eventos e eles são chamados de acordo com sua necessidade. Por exemplo, quando um processo é encerrado, há um manipulador chamado que possivelmente limpa o que o subsistema que ele precisa de limpeza.
+A natureza da emulação de diferentes sistemas operacionais (e também de outros subsistemas) levou os desenvolvedores a adotarem um mecanismo de tratamento de eventos. Existem vários pontos no kernel em que uma lista de manipuladores de eventos é chamada. Cada subsistema pode registrar um manipulador de evento e eles são chamados de acordo. Por exemplo, quando um processo é encerrado, é chamado um manipulador que possivelmente realiza a limpeza necessária no subsistema.
-Essas facilidades simples fornecem basicamente tudo o que é necessário para a infra-estrutura de emulação e, de fato, essas são basicamente as únicas coisas necessárias para implementar a camada de emulação do Linux(R).
+Essas facilidades simples fornecem basicamente tudo o que é necessário para a infraestrutura de emulação e, na verdade, são basicamente as únicas coisas necessárias para implementar a camada de emulação do Linux(R).
[[freebsd-common-primitives]]
=== Primitivas comuns no kernel do FreeBSD
-Camadas de emulação precisam de algum suporte do sistema operacional. Eu vou descrever algumas das primitivas suportadas no sistema operacional FreeBSD.
+As camadas de emulação precisam de suporte por parte do sistema operacional. Vou descrever alguns dos primitivos suportados no sistema operacional FreeBSD.
[[freebsd-locking-primitives]]
==== Primitivas de Bloqueio
-Contribuído por: Attilio Rao mailto:attilio@FreeBSD.org[attilio@FreeBSD.org]
+Contribuído por: `{attilio}`
O conjunto de primitivas de sincronização do FreeBSD é baseado na idéia de fornecer um grande número de diferentes primitivas de uma maneira que a melhor possa ser usada para cada situação específica e apropriada.
@@ -290,22 +307,22 @@ Para um ponto de vista de alto nível, você pode considerar três tipos de prim
* locks
* barreiras de agendamento
-Abaixo, há descrições para as 3 famílias. Para cada bloqueio, você deve verificar a página de manual vinculada (onde for possível) para obter explicações mais detalhadas.
+Abaixo estão as descrições das 3 famílias. Para cada trava, é recomendado verificar a página do manual vinculada (quando possível) para obter explicações mais detalhadas.
[[freebsd-atomic-op]]
===== Operações atômicas e barreiras de memória
-Operações atômicas são implementadas através de um conjunto de funções que executam aritmética simples em operandos de memória de maneira atômica com relação a eventos externos (interrupções, preempção, etc.). Operações atômicas podem garantir atomicidade apenas em pequenos tipos de dados (na ordem de magnitude do tipo de dados C da arquitetura `.long.`), portanto raramente devem ser usados diretamente no código de nível final, se não apenas para operações muito simples (como configuração de flags em um bitmap, por exemplo). De fato, é bastante simples e comum escrever uma semântica errada baseada apenas em operações atômicas (geralmente referidas como lock-less). O kernel do FreeBSD oferece uma maneira de realizar operações atômicas em conjunto com uma barreira de memória. As barreiras de memória garantirão que uma operação atômica ocorrerá seguindo alguma ordem especificas em relação a outros acessos à memória. Por exemplo, se precisarmos que uma operação atômica aconteça logo depois que todas as outras gravações pendentes (em termos de instruções reordenando atividades de buffers) forem concluídas, precisamos usar explicitamente uma barreira de memória em conjunto com essa operação atômica. Portanto, é simples entender por que as barreiras de memória desempenham um papel fundamental na construção de bloqueios de alto nível (assim como referências, exclusões mútuas, etc.). Para uma explicação detalhada sobre operações atômicas, consulte man:atomic[9]. É muito, no entanto, notar que as operações atômicas (e as barreiras de memória também) devem, idealmente, ser usadas apenas para construir bloqueios front-ending (como mutexes).
+As operações atômicas são implementadas por meio de um conjunto de funções que realizam operações aritméticas simples em operandos de memória de maneira atômica em relação a eventos externos (interrupções, preempção, etc.). As operações atômicas podem garantir atomicidade apenas em tipos de dados pequenos (da ordem de magnitude do tipo de dados C `.long.` da arquitetura), portanto, devem ser raramente usadas diretamente no código de nível final, a menos que seja apenas para operações muito simples (como definir uma bandeira em um bitmap, por exemplo). Na verdade, é bastante simples e comum escrever uma semântica errada baseada apenas em operações atômicas (geralmente referidas como "sem bloqueio"). O kernel do FreeBSD oferece uma maneira de realizar operações atômicas em conjunto com uma barreira de memória. As barreiras de memória garantem que uma operação atômica ocorra seguindo alguma ordem especificada em relação a outros acessos à memória. Por exemplo, se precisamos que uma operação atômica ocorra logo após todas as gravações pendentes (em termos de reordenação de instruções nos buffers) sejam concluídas, precisamos usar explicitamente uma barreira de memória em conjunto com essa operação atômica. Portanto, é fácil entender por que as barreiras de memória desempenham um papel fundamental na construção de travas de nível superior (como refcount, mutexes, etc.). Para uma explicação detalhada sobre as operações atômicas, consulte o man:atomic[9]. No entanto, é importante notar que as operações atômicas (assim como as barreiras de memória) idealmente devem ser usadas apenas para a construção de travas de nível superior (como mutexes).
[[freebsd-refcounts]]
===== Refcounts
-Refcounts são interfaces para manipular contadores de referência. Eles são implementados por meio de operações atômicas e destinam-se a ser usados apenas para casos em que o contador de referência é a única coisa a ser protegida, portanto, até mesmo algo como um spin-mutex é obsoleto. Usar a interface de recontagem para estruturas, onde um mutex já é usado, geralmente está errado, pois provavelmente devemos fechar o contador de referência em alguns caminhos já protegidos. Uma manpage discutindo refcount não existe atualmente, apenas verifique [.filename]#sys/refcount.h# para uma visão geral da API existente.
+Refcounts são interfaces para lidar com contadores de referência. Eles são implementados por meio de operações atômicas e destinam-se a serem usados apenas em casos em que o contador de referência é a única coisa a ser protegida, então até mesmo algo como um spin-mutex é considerado obsoleto. O uso da interface refcount para estruturas em que já é usado um mutex geralmente está incorreto, pois provavelmente devemos fechar o contador de referência em algum caminho já protegido. Atualmente, não existe uma página de manual que discuta refcount, apenas verifique [.filename]#sys/refcount.h# para obter uma visão geral da API existente.
[[freebsd-locks]]
===== Locks
-O kernel do FreeBSD tem enormes classes de bloqueios. Cada bloqueio é definido por algumas propriedades peculiares, mas provavelmente o mais importante é o evento vinculado a detentores de contestação (ou, em outros termos, o comportamento de threading incapazes de adquirir o bloqueio). O esquema de bloqueio do FreeBSD apresenta três comportamentos diferentes para contendores:
+O kernel do FreeBSD possui várias classes de locks. Cada lock é definido por algumas propriedades específicas, mas provavelmente a mais importante é o evento vinculado aos detentores em disputa (ou em outras palavras, o comportamento das threads incapazes de adquirir o lock). O esquema de locking do FreeBSD apresenta três comportamentos diferentes para os contendores:
. spinning
. blocking
@@ -319,28 +336,28 @@ números não são casuais
[[freebsd-spinlocks]]
===== Spinning locks
-Spin locks permitem que os acumuladores rotacionarem até que eles não consigam adquirir um lock. Uma questão importante é quando um segmento contesta em um spin lock se não for desmarcado. Uma vez que o kernel do FreeBSD é preventivo, isto expõe o spin lock ao risco de deadlocks que podem ser resolvidos apenas desabilitando as interrupções enquanto elas são adquiridas. Por essa e outras razões (como falta de suporte à propagação de prioridade, falta de esquemas de balanceamento de carga entre CPUs, etc.), os spin locks têm a finalidade de proteger endereçamentos muito pequenos de código ou, idealmente, não serem usados se não solicitados explicitamente ( explicado posteriormente).
+Spin locks permitem que os aguardantes fiquem girando em um loop até que não possam adquirir o lock. Uma questão importante a lidar é quando uma thread disputa um spin lock se ela não for despachada. Como o kernel do FreeBSD é preemptivo, isso expõe o spin lock ao risco de deadlocks que podem ser resolvidos desabilitando as interrupções enquanto eles são adquiridos. Por esse e outros motivos (como a falta de suporte à propagação de prioridade, deficiência em esquemas de balanceamento de carga entre CPUs, etc.), os spin locks são destinados a proteger trechos muito pequenos de código, ou idealmente não devem ser usados se não forem explicitamente solicitados (explicado posteriormente).
[[freebsd-blocking]]
===== Bloqueio
-Os locks em blocos permitem que as tarefas dos acumuladores sejam removidas e bloqueados até que o proprietário do bloqueio não os libere e ative um ou mais contendores. Para evitar problemas de fome, os locks em bloco fazem a propagação de prioridade dos acumuladores para o proprietário. Os locks em bloco devem ser implementados por meio da interface turnstile e devem ser o tipo mais usado de bloqueios no kernel, se nenhuma condição específica for atendida.
+Block locks let waiters to be descheduled and blocked until the lock owner does not drop it and wakes up one or more contenders. To avoid starvation issues, blocking locks do priority propagation from the waiters to the owner. Block locks must be implemented through the turnstile interface and are intended to be the most used kind of locks in the kernel, if no particular conditions are met.
[[freebsd-sleeping]]
===== Sleeping
-Sleep locks permitem que as tarefas dos waiters sejam removidas e eles adormecem até que o suporte do lock não os deixe cair e desperte um ou mais waiters. Como os sleep locks se destinam a proteger grandes endereçamentos de código e a atender a eventos assíncronos, eles não fazem nenhuma forma de propagação de prioridade. Eles devem ser implementados por meio da interface man:sleepqueue[9].
+As travas de suspensão (sleep locks) permitem que os processos em espera sejam despachados (descheduled ) e adormeçam até que o detentor da trava a solte e acorde um ou mais processos em espera. Como as travas de suspensão são projetadas para proteger grandes trechos de código e lidar com eventos assíncronos, elas não realizam qualquer forma de propagação de prioridade. Elas devem ser implementadas por meio da interface man:sleepqueue[9].
-A ordem usada para adquirir locks é muito importante, não apenas pela possibilidade de deadlock devido a reversões de ordem de bloqueio, mas também porque a aquisição de lock deve seguir regras específicas vinculadas a naturezas de bloqueios. Se você der uma olhada na tabela acima, a regra prática é que, se um segmento contiver um lock de nível n (onde o nível é o número listado próximo ao tipo de bloqueio), não é permitido adquirir um lock de níveis superiores , pois isso quebraria a semântica especificada para um caminho. Por exemplo, se uma thread contiver um lock em bloco (nível 2), ele poderá adquirir um spin lock (nível 1), mas não um sleep lock (nível 3), pois os locks em bloco são destinados a proteger caminhos menores que o sleep lock ( essas regras não são sobre operações atômicas ou agendamento de barreiras, no entanto).
+A ordem usada para adquirir locks é muito importante, não apenas devido à possibilidade de deadlock devido a inversões na ordem dos locks, mas também porque a aquisição de locks deve seguir regras específicas relacionadas às naturezas dos locks. Se você observar a tabela acima, a regra prática é que se um thread possui um lock de nível n (onde o nível é o número listado próximo ao tipo de lock), ele não pode adquirir um lock de níveis superiores, pois isso quebraria a semântica especificada para um determinado caminho. Por exemplo, se um thread possui um bloqueio de bloqueio (nível 2), é permitido adquirir um lock de rotação (nível 1), mas não um lock de suspensão (nível 3), pois os bloqueios de bloqueio são destinados a proteger caminhos menores do que os bloqueios de suspensão (essas regras não se aplicam a operações atômicas ou barreiras de agendamento, no entanto).
Esta é uma lista de bloqueio com seus respectivos comportamentos:
-* spin mutex - spinning - man:mutex[9]
-* sleep mutex - blocking - man:mutex[9]
-* pool mutex - blocking - man:mtx_pool[9]
-* família sleep - sleeping - man:sleep[9] pausa tsleep msleep msleep spin msleep rw msleep sx
+* spin mutex - girando - man:mutex[9]
+* Sleep mutex - bloqueio - man:mutex[9]
+* pool mutex - blocking - man:mtx[pool]
+* A família de funções de suspensão (sleep family) - sleeping - man:sleep[9] pause tsleep msleep msleep spin msleep rw msleep sx
* condvar - sleeping - man:condvar[9]
-* wlock - blocking - man:rwlock[9]
+* rwlock - blocking - man:rwlock[9]
* sxlock - sleeping - man:sx[9]
* lockmgr - sleeping - man:lockmgr[9]
* semáforos - sleeping - man:sema[9]
@@ -350,100 +367,100 @@ Entre esses bloqueios, apenas mutexes, sxlocks, rwlocks e lockmgrs são destinad
[[freebsd-scheduling]]
===== Barreiras de agendamento
-As barreiras de agendamento devem ser usadas para orientar o agendamento de threads. Eles consistem principalmente de três diferentes stubs:
+Scheduling barriers are intended to be used to drive scheduling of threading. They consist mainly of three different stubs:
* seções críticas (e preempção)
* sched_bind
* sched_pin
-Geralmente, eles devem ser usados apenas em um contexto específico e, mesmo que possam substituir bloqueios, eles devem ser evitados porque eles não permitem o diagnóstico de problemas simples com ferramentas de depuração de bloqueio (como man:witness[4]).
+Em geral, esses devem ser usados apenas em um contexto específico e, mesmo que possam substituir bloqueios em muitos casos, eles devem ser evitados porque não permitem diagnosticar problemas simples com ferramentas de depuração de bloqueio (como man:witness[4]).
[[freebsd-critical]]
===== Seções críticas
-O kernel do FreeBSD foi feito basicamente para lidar com threads de interrupção. De fato, para evitar latência de interrupção alta, os segmentos de prioridade de compartilhamento de tempo podem ser precedidos por threads de interrupção (dessa forma, eles não precisam aguardar para serem agendados como as visualizações de caminho normais). Preempção, no entanto, introduz novos pontos de corrida que precisam ser manipulados também. Muitas vezes, para lidar com a preempção, a coisa mais simples a fazer é desativá-la completamente. Uma seção crítica define um pedaço de código (delimitado pelo par de funções man:critical_enter[9] e man:critical_exit[9], onde é garantido que a preempção não aconteça (até que o código protegido seja totalmente executado) Isso pode substituir um bloqueio efetivamente, mas deve ser usado com cuidado para não perder toda a vantagem essa preempção traz.
+The FreeBSD kernel has been made preemptive basically to deal with interrupt threads. In fact, to avoid high interrupt latency, time-sharing priority threads can be preempted by interrupt threads (in this way, they do not need to wait to be scheduled as the normal path previews). Preemption, however, introduces new racing points that need to be handled, as well. Often, to deal with preemption, the simplest thing to do is to completely disable it. A critical section defines a piece of code (borderlined by the pair of functions man:critical_enter[9] and man:critical_exit[9], where preemption is guaranteed to not happen (until the protected code is fully executed). This can often replace a lock effectively but should be used carefully to not lose the whole advantage that preemption brings.
[[freebsd-schedpin]]
===== sched_pin/sched_unpin
-Outra maneira de lidar com a preempção é a interface `sched_pin()`. Se um trecho de código é fechado no par de funções `sched_pin()` e `sched_unpin()`, é garantido que a respectiva thread, mesmo que possa ser antecipada, sempre ser executada na mesma CPU. Fixar é muito eficaz no caso particular quando temos que acessar por dados do cpu e assumimos que outras threads não irão alterar esses dados. A última condição determinará uma seção crítica como uma condição muito forte para o nosso código.
+Outra forma de lidar com a preempção é a interface `sched_pin()`. Se um trecho de código é envolvido pelas funções `sched_pin()` e `sched_unpin()`, é garantido que a respectiva thread, mesmo que possa ser preemptada, será sempre executada na mesma CPU. Fixar (pinning) é muito efetivo no caso particular em que precisamos acessar dados específicos de cada CPU e assumimos que outras threads não alterarão esses dados. A última condição determinará uma seção crítica como uma condição muito rigorosa para nosso código.
[[freebsd-schedbind]]
===== sched_bind/sched_unbind
-`sched_bind` é uma API usada para vincular uma thread a uma CPU em particular durante todo o tempo em que ele executa o código, até que uma chamada de função `sched_unbind` não a desvincule. Esse recurso tem um papel importante em situações em que você não pode confiar no estado atual das CPUs (por exemplo, em estágios iniciais de inicialização), já que você deseja evitar que sua thread migre em CPUs inativas. Como `sched_bind` e `sched_unbind` manipulam as estruturas internas do agendador, elas precisam estar entre a aquisição/liberação de `sched_lock` quando usadas.
+`sched_bind` is an API used to bind a thread to a particular CPU for all the time it executes the code, until a `sched_unbind` function call does not unbind it. This feature has a key role in situations where you cannot trust the current state of CPUs (for example, at very early stages of boot), as you want to avoid your thread to migrate on inactive CPUs. Since `sched_bind` and `sched_unbind` manipulate internal scheduler structures, they need to be enclosed in `sched_lock` acquisition/releasing when used.
[[freebsd-proc]]
==== Estrutura Proc
-Várias camadas de emulação exigem alguns dados adicionais por processo. Ele pode gerenciar estruturas separadas (uma lista, uma árvore etc.) contendo esses dados para cada processo, mas isso tende a ser lento e consumir memória. Para resolver este problema, a estrutura `proc` do FreeBSD contém `p_emuldata`, que é um ponteiro vazio para alguns dados específicos da camada de emulação. Esta entrada `proc` é protegida pelo mutex proc.
+Em algumas camadas de emulação, às vezes é necessário ter dados adicionais específicos para cada processo. Pode-se gerenciar estruturas separadas (como uma lista, uma árvore etc.) que contenham esses dados para cada processo, mas isso pode ser lento e consumir muita memória. Para resolver esse problema, a estrutura `proc` do FreeBSD contém o campo `p_emuldata`, que é um ponteiro vazio para dados específicos da camada de emulação. Essa entrada `proc` é protegida pelo mutex do processo.
-A estrutura `proc` do FreeBSD contém uma entrada `p_sysent` que identifica, qual ABI este processo está executando. Na verdade, é um ponteiro para o `sysentvec` descrito acima. Portanto, comparando esse ponteiro com o endereço em que a estrutura `sysentvec` da ABI especificada está armazenada, podemos efetivamente determinar se o processo pertence à nossa camada de emulação. O código normalmente se parece com:
+A estrutura `proc` do FreeBSD contém uma entrada `p_sysent` que identifica qual ABI esse processo está executando. Na verdade, é um ponteiro para a estrutura `sysentvec` descrita anteriormente. Portanto, ao comparar esse ponteiro com o endereço onde a estrutura `sysentvec` para a ABI específica está armazenada, podemos determinar efetivamente se o processo pertence à nossa camada de emulação. O código geralmente se parece com:
[.programlisting]
....
-if (__predict_true(p->p_sysent != &elf_Linux_sysvec))
+if (__predict_true(p->p_sysent != &elf_Linux(R)_sysvec))
return;
....
-Como você pode ver, usamos efetivamente o modificador `__predict_true` para recolher o caso mais comum (processo do FreeBSD) para uma operação de retorno simples, preservando assim o alto desempenho. Este código deve ser transformado em uma macro porque atualmente não é muito flexível, ou seja, não suportamos emulação Linux(R)64 nem processa A.OUT Linux(R) em i386.
+Como você pode ver, usamos efetivamente o modificador `__predict_true` para colapsar o caso mais comum (processo FreeBSD) em uma simples operação de retorno, preservando assim o alto desempenho. Esse código deve ser transformado em uma macro porque atualmente não é muito flexível, ou seja, não suportamos emulação Linux(R)64 nem processos Linux(R) A.OUT em i386.
[[freebsd-vfs]]
==== VFS
-O subsistema FreeBSD VFS é muito complexo, mas a camada de emulação Linux(R) usa apenas um pequeno subconjunto através de uma API bem definida. Ele pode operar em vnodes ou manipuladores de arquivos. Vnode representa um vnode virtual, isto é, representação de um nó no VFS. Outra representação é um manipulador de arquivos, que representa um arquivo aberto da perspectiva de um processo. Um manipulador de arquivos pode representar um socket ou um arquivo comum. Um manipulador de arquivos contém um ponteiro para seu vnode. Mais de um manipulador de arquivos pode apontar para o mesmo vnode.
+O subsistema VFS do FreeBSD é muito complexo, mas a camada de emulação do Linux(R) utiliza apenas um pequeno subconjunto por meio de uma API bem definida. Ela pode operar em vnodes ou manipuladores de arquivo. Vnode representa um vnode virtual, ou seja, uma representação de um nó no VFS. Outra representação é um manipulador de arquivo, que representa um arquivo aberto do ponto de vista de um processo. Um manipulador de arquivo pode representar um socket ou um arquivo comum. Um manipulador de arquivo contém um ponteiro para seu vnode. Mais de um manipulador de arquivo pode apontar para o mesmo vnode.
[[freebsd-namei]]
===== namei
-A rotina man:namei[9] é um ponto de entrada central para a pesquisa e o nome do caminho. Ele percorre o caminho ponto a ponto do ponto inicial até o ponto final usando a função de pesquisa, que é interna ao VFS. A syscall man:namei[9]pode lidar com links simbólicos, absolutos e relativos. Quando um caminho é procurado usando man:namei[9] ele é inserido no cache de nomes. Esse comportamento pode ser suprimido. Essa rotina é usada em todo o kernel e seu desempenho é muito crítico.
+A rotina man:namei[9] é um ponto de entrada central para a pesquisa e tradução de caminhos de nomes. Ela percorre o caminho ponto a ponto, do ponto de partida ao ponto final, usando a função de pesquisa, que é interna ao VFS. A chamada man:namei[9] pode lidar com links simbólicos, caminhos absolutos e relativos. Quando um caminho é pesquisado usando man:namei[9], ele é inserido no cache de nomes. Esse comportamento pode ser suprimido. Essa rotina é usada em todo o kernel e seu desempenho é muito crítico.
[[freebsd-vn]]
===== vn_fullpath
-A função man:vn_fullpath[9] faz o melhor esforço para percorrer o cache de nomes do VFS e retorna um caminho para um determinado vnode (bloqueado). Esse processo não é confiável, mas funciona bem nos casos mais comuns. A falta de confiabilidade é porque ela depende do cache do VFS (ele não atravessa as estruturas intermediárias), não funciona com hardlinks, etc. Essa rotina é usada em vários locais no Linuxulator.
+A função man:vn_fullpath[9] faz o melhor esforço para percorrer o cache de nomes do VFS e retorna um caminho para um vnode específico (bloqueado). Esse processo é não confiável, mas funciona muito bem na maioria dos casos comuns. A falta de confiabilidade ocorre porque ela depende do cache do VFS (não percorre as estruturas no meio físico) e não funciona com links rígidos, entre outras limitações. Essa rotina é usada em vários lugares no Linuxulator.
[[freebsd-vnode]]
===== Operações de vnode
-* `fgetvp` - dado um encadeamento e um número de descritor de arquivo, ele retorna o vnode associado
+* `fgetvp` - dado um thread e um número de descritor de arquivo, ele retorna o vnode associado
* man:vn_lock[9] - bloqueia um vnode
* `vn_unlock` - desbloqueia um vnode
* man:VOP_READDIR[9] - lê um diretório referenciado por um vnode
* man:VOP_GETATTR[9] - obtém atributos de um arquivo ou diretório referenciado por um vnode
-* man:VOP_LOOKUP[9] - procura um caminho para um determinado diretório
+* man:VOP_LOOKUP[9] - busca um caminho para um diretório específico
* man:VOP_OPEN[9] - abre um arquivo referenciado por um vnode
* man:VOP_CLOSE[9] - fecha um arquivo referenciado por um vnode
-* man:vput[9] - decrementa a contagem de uso para um vnode e o desbloqueia
-* man:vrele[9] - diminui a contagem de uso para um vnode
-* man:vref[9] - incrementa a contagem de uso para um vnode
+* man:vput[9] - decrementa a contagem de uso de um vnode e desbloqueia
+* man:vrele[9] - diminui o contador de uso para um vnode
+* man:vref[9] - incrementa a contagem de uso de um vnode
[[freebsd-file-handler]]
===== Operações do manipulador de arquivos
-* `fget` - dado uma thread e um número de file descriptor, ele retorna o manipulador de arquivos associado e faz referência a ele
-* `fdrop` - elimina uma referência a um manipulador de arquivos
-* `fhold` - faz referência a um manipulador de arquivos
+* `fget` - dado um thread e um número de descritor de arquivo, ele retorna o file handler associado e o referencia
+* `fdrop` - remove uma referência a um file handler
+* `fhold` - referencia um file handler
[[md]]
-== Parte da camada de emulação -MD do Linux(R)
+== A camada de emulação do Linux(R) - parte MD
-Esta seção trata da implementação da camada de emulação do Linux(R) no sistema operacional FreeBSD. Ele primeiro descreve a parte dependente da máquina falando sobre como e onde a interação entre o usuário e o kernel é implementada. Ele fala sobre syscalls, signals, ptrace, traps, correção de pilha. Esta parte discute o i386, mas ele é escrito geralmente para que outras arquiteturas não sejam muito diferentes. A próxima parte é a parte independente da máquina do Linuxulator. Esta seção abrange apenas o tratamento de i386 e ELF. A.OUT está obsoleto e não foi testado.
+Esta seção trata da implementação da camada de emulação do Linux(R) no sistema operacional FreeBSD. Ela descreve primeiramente a parte dependente da máquina, abordando como e onde a interação entre o espaço do usuário e o kernel é implementada. Ela fala sobre syscalls, sinais, ptrace, traps e ajuste de pilha. Essa parte discute o i386, mas é escrita de forma geral, então outras arquiteturas não devem diferir muito. A próxima parte é a parte independente da máquina do Linuxulator. Esta seção aborda apenas o i386 e o tratamento de arquivos ELF. O formato A.OUT está obsoleto e não foi testado.
[[syscall-handling]]
=== Manipulação de Syscall
-A manipulação de Syscall é principalmente escrita em [.filename]#linux_sysvec.c#, que cobre a maioria das rotinas apontadas na estrutura `sysentvec`. Quando um processo Linux(R) executado no FreeBSD emite um syscall, a rotina syscall geral chama a rotina prepsyscall do linux para a ABI do Linux(R).
+O tratamento de syscalls é principalmente escrito em [.filename]#linux_sysvec.c#, que abrange a maioria das rotinas apontadas na estrutura `sysentvec`. Quando um processo do Linux(R) em execução no FreeBSD faz uma syscall, a rotina geral de syscall chama a rotina linux prepsyscall para a ABI do Linux(R).
[[linux-prepsyscall]]
==== Linux(R) prepsyscall
-Linux(R) passa argumentos via registradores de syscalls (isso porque ele é limitado a 6 parametros no i386) enquanto o FreeBSD usa uma pilha. A rotina prepsyscall do Linux(R) deve copiar parametros dos registradores para a pilha. A ordem dos registradores é: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`, `%ebp`. O fato é que isso é verdadeiro apenas para _a maioria_ das syscalls. Algumas (mais provavelmente `clone`) usam uma ordem diferente, mas é demasiadamente facil de arrumar inserindo um parametro dummy no prototype `linux_clone`.
+No Linux(R), os argumentos das syscalls são passados via registradores (por isso é limitado a 6 parâmetros no i386), enquanto no FreeBSD eles são passados pela pilha. A rotina linux prepsyscall deve copiar os parâmetros dos registradores para a pilha. A ordem dos registradores é: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`, `%ebp`. A questão é que isso é verdade apenas para _a maioria_ das syscalls. Algumas (mais notavelmente `clone`) usam uma ordem diferente, mas felizmente é fácil corrigir isso inserindo um parâmetro fictício no protótipo `linux_clone`.
[[syscall-writing]]
==== Escrevendo syscall
-Cada syscall implementada no Linuxulator deve ter seu protótipo com vários flags no [.filename]#syscalls.master#. A forma do arquivo é:
+Cada chamada de sistema implementada no Linuxulator deve ter seu protótipo com várias flags no arquivo `syscalls.master`. A estrutura do arquivo é a seguinte:
[.programlisting]
....
@@ -454,9 +471,9 @@ Cada syscall implementada no Linuxulator deve ter seu protótipo com vários fla
...
....
-A primeira coluna representa o número da syscall. A segunda coluna é para suporte de auditoria. A terceira coluna representa o tipo da syscall. É `STD`, `OBSOL`, `NOPROTO` e `UNIMPL`. `STD` é uma syscall padrão com protótipo e implementação completos. `OBSOL` é obsoleto e define apenas o protótipo. `NOPROTO` significa que a syscall é implementado em outro lugar, portanto, não precede o prefixo da ABI, etc. `UNIMPL` significa que a syscall será substituída pela syscall `nosys` (uma syscall apenas imprime uma mensagem sobre a syscall não sendo implementado e retornando `ENOSYS`).
+A primeira coluna representa o número da syscall. A segunda coluna é para suporte de auditoria. A terceira coluna representa o tipo de syscall. Pode ser `STD`, `OBSOL`, `NOPROTO` ou `UNIMPL`. `STD` é uma syscall padrão com protótipo e implementação completos. `OBSOL` é obsoleta e define apenas o protótipo. `NOPROTO` significa que a syscall é implementada em outro lugar, então não é necessário adicionar o prefixo ABI, etc. `UNIMPL` significa que a syscall será substituída pela syscall `nosys` (uma syscall que apenas imprime uma mensagem informando que a syscall não está implementada e retorna `ENOSYS`).
-De um script [.filename]#syscalls.master#, gera três arquivos: [.filename]#linux_syscall.h#, [.filename]#linux_proto.h# e [.filename]#linux_sysent.c#. O [.filename]#linux_syscall.h# contém definições de nomes de syscall e seus valores numéricos, por exemplo:
+Do [.filename]#syscalls.master#, um script gera três arquivos: [.filename]#linux_syscall.h#, [.filename]#linux_proto.h# e [.filename]#linux_sysent.c#. O arquivo [.filename]#linux_syscall.h# contém as definições dos nomes das syscalls e seus valores numéricos, por exemplo:
[.programlisting]
....
@@ -476,7 +493,7 @@ struct linux_fork_args {
};
....
-E finalmente, [.filename]#linux_sysent.c# contém uma estrutura descrevendo a tabela de entrada do sistema, usada para realmente enviar um syscall, por exemplo:
+E finalmente, o [.filename]#linux_sysent.c# contém uma estrutura descrevendo a tabela de entrada do sistema, usada para realmente enviar um syscall, por exemplo:
[.programlisting]
....
@@ -484,46 +501,46 @@ E finalmente, [.filename]#linux_sysent.c# contém uma estrutura descrevendo a ta
{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */
....
-Como você pode ver, `linux_fork` é implementado no próprio Linuxulator, então a definição é do tipo `STD` e não possui argumento, que é exibido pela estrutura de argumento fictícia. Por outro lado, `close` é apenas um apelido para o verdadeiro man:close[2] do FreeBSD para que ele não possua estrutura de argumentos do linux associada e na tabela de entrada do sistema ele não é prefixado com linux, pois ele chama o verdadeiro man:close[2] no kernel.
+Como você pode ver, `linux_fork` é implementado no próprio Linuxulator, então a definição é do tipo `STD` e não tem argumentos, o que é exibido pela estrutura de argumentos fictícia. Por outro lado, `close` é apenas um alias para o verdadeiro man:close[2] do FreeBSD, então não possui uma estrutura de argumentos específica do Linux associada e na tabela de entrada do sistema não é prefixado com linux, pois chama o verdadeiro man:close[2] no kernel.
[[dummy-syscalls]]
==== Dummy syscalls
-A camada de emulação do Linux(R) não está completa, pois algumas syscalls não estão implementadas corretamente e algumas não estão implementadas. A camada de emulação emprega um recurso para marcar syscalls não implementadas com a macro `DUMMY`. Estas definições fictícias residem em [.filename]#linux_dummy.c# em uma forma de `DUMMY(syscall);`, que é então traduzido para vários arquivos auxiliares de syscall e a implementação consiste em imprimir uma mensagem dizendo que esta syscall não está implementada. O protótipo `UNIMPL` não é usado porque queremos ser capazes de identificar o nome da syscall que foi chamado para saber o que é mais importante implementar na syscalls.
+The Linux(R) emulation layer is not complete, as some syscalls are not implemented properly and some are not implemented at all. The emulation layer employs a facility to mark unimplemented syscalls with the `DUMMY` macro. These dummy definitions reside in [.filename]#linux_dummy.c# in a form of `DUMMY(syscall);`, which is then translated to various syscall auxiliary files and the implementation consists of printing a message saying that this syscall is not implemented. The `UNIMPL` prototype is not used because we want to be able to identify the name of the syscall that was called to know what syscalls are more important to implement.
[[signal-handling]]
=== Manuseio de signals
-A manipulação de sinais é feita geralmente no kernel do FreeBSD para todas as compatibilidades binárias com uma chamada para uma camada dependente de compatibilidade. A camada de compatibilidade do Linux(R) define a `rotina linux_sendsig` para essa finalidade.
+O tratamento de sinais é feito geralmente no kernel do FreeBSD para todas as compatibilidades binárias com uma chamada a uma camada dependente de compatibilidade. A camada de compatibilidade do Linux(R) define a rotina `linux_sendsig` para este propósito.
[[linux-sendsig]]
==== Linux(R) sendsig
-Esta rotina primeiro verifica se o signal foi instalado com um `SA_SIGINFO`, caso em que chama a rotina `linux_rt_sendsig`. Além disso, ele aloca (ou reutiliza um contexto de identificador de sinal já existente) e cria uma lista de argumentos para o manipulador de signal. Ele traduz o número do signal baseado na tabela de tradução do signal, atribui um manipulador, traduz o sigset. Em seguida, ele salva o contexto para a rotina `sigreturn` (vários registradores, número da trap traduzida e máscara de signal). Finalmente, copia o contexto do signal para o espaço do usuário e prepara o contexto para que o manipulador de sinal real seja executado.
+Essa rotina primeiro verifica se o sinal foi instalado com `SA_SIGINFO`, caso contrário, ela chama a rotina `linux_rt_sendsig`. Além disso, aloca (ou reutiliza um já existente) o contexto do manipulador de sinal, em seguida, constrói uma lista de argumentos para o manipulador de sinal. Traduz o número do sinal com base na tabela de tradução de sinais, atribui um manipulador e traduz o conjunto de sinais. Em seguida, salva o contexto para a rotina `sigreturn` (diversos registradores, número de interrupção traduzido e máscara de sinais). Por fim, copia o contexto do sinal para o espaço do usuário e prepara o contexto para a execução real do manipulador de sinal.
[[linux-rt-sendsig]]
==== linux_rt_sendsig
-Esta rotina é similar a `linux_sendsig` apenas a preparação do contexto do sinal é diferente. Adiciona `siginfo`, `ucontext` e algumas partes do POSIX(R). Pode valer a pena considerar se essas duas funções não poderiam ser mescladas com um benefício de menos duplicação de código e, possivelmente, até mesmo execução mais rápida.
+Esta rotina é semelhante à `linux_sendsig`, mas a preparação do contexto do sinal é diferente. Ela adiciona `siginfo`, `ucontext` e algumas partes POSIX(R). Pode valer a pena considerar se essas duas funções não poderiam ser mescladas com o benefício de menos duplicação de código e possivelmente até execução mais rápida.
[[linux-sigreturn]]
==== linux_sigreturn
-Esta syscall é usada para retornar do manipulador de sinal. Ela faz algumas verificações de segurança e restaura o contexto do processo original. Também desmascara o sinal na máscara de sinal do processo.
+Essa chamada de sistema é usada para retornar do manipulador de sinal. Ela realiza algumas verificações de segurança e restaura o contexto original do processo. Além disso, desativa o sinal na máscara de sinais do processo.
[[ptrace]]
=== Ptrace
-Muitos derivados do UNIX(R) implementam a syscall man:ptrace[2] para permitir vários recursos de rastreamento e depuração . Esse recurso permite que o processo de rastreamento obtenha várias informações sobre o processo rastreado, como registros de despejos, qualquer memória do espaço de endereço do processo, etc. e também para rastrear o processo, como em uma instrução ou entre entradas do sistema (syscalls e traps). man:ptrace[2] também permite definir várias informações no processo de rastreamento (registros, etc.). man:ptrace[2] é um padrão de toda o UNIX(R) implementado na maioria dos UNIX(R)es em todo o mundo.
+Many UNIX(R) derivates implement the man:ptrace[2] syscall to allow various tracking and debugging features. This facility enables the tracing process to obtain various information about the traced process, like register dumps, any memory from the process address space, etc. and also to trace the process like in stepping an instruction or between system entries (syscalls and traps). man:ptrace[2] also lets you set various information in the traced process (registers etc.). man:ptrace[2] is a UNIX(R)-wide standard implemented in most UNIX(R)es around the world.
-Emulação do Linux(R) no FreeBSD implementa a habilidade man:ptrace[2] em [.filename]#linux_ptrace.c#. As rotinas para converter registradores entre Linux(R) and FreeBSD e a atual emulação de syscall, syscall man:ptrace[2]. A syscall é um longo bloco de trocas que implementa em contraparte no FreeBSD para todo comando man:ptrace[2]. Os comandos man:ptrace[2] são em sua maioria igual entre Linux(R) e FreeBSD então uma pequena modificação é necessária. Por exemplo, `PT_GETREGS` em Linux(R) opera diretamente dos dados enquanto o FreeBSD usa um ponteiro para o dado e depois performa a syscall man:ptrace[2] (nativa), uma cópia deve ser feita pra preservar a semantica do Linux(R).
+A emulação do Linux(R) no FreeBSD implementa a facilidade man:ptrace[2] em [.filename]#linux_ptrace.c#. As rotinas de conversão de registradores entre Linux(R) e FreeBSD e a própria syscall de emulação man:ptrace[2]. A syscall é um longo bloco switch que implementa seu equivalente no FreeBSD para cada comando man:ptrace[2]. Os comandos man:ptrace[2] são principalmente iguais entre Linux(R) e FreeBSD, então geralmente apenas uma pequena modificação é necessária. Por exemplo, `PT_GETREGS` no Linux(R) opera em dados diretos, enquanto o FreeBSD usa um ponteiro para os dados, então após a execução de uma syscall man:ptrace[2] (nativa), é necessário fazer uma cópia dos dados usando copyout para preservar a semântica do Linux(R).
-A implementação de man:ptrace[2] no Linuxulator tem algumas fraquezas conhecidas. Houve pânico ao usar o `strace` (que é um consumidor man:ptrace[2]) no ambiente Linuxulator. `PT_SYSCALL` também não está implementado.
+A implementação man:ptrace[2] no Linuxulator tem algumas fraquezas conhecidas. Houve panes vistas ao usar `strace` (que é um consumidor man:ptrace[2]) no ambiente Linuxulator. Além disso, `PT_SYSCALL` não está implementado.
[[traps]]
=== Armadilhas (Traps)
-Sempre que um processo Linux(R) executado na camada de emulação captura a própria trap, ela é tratada de forma transparente com a única exceção da tradução de trap. Linux(R) e o FreeBSD difere de opinião sobre o que é uma trap, então isso é tratado aqui. O código é realmente muito curto:
+Sempre que um processo Linux(R) executando na camada de emulação sofre uma interrupção, a própria interrupção é tratada de forma transparente com a única exceção da tradução da interrupção. O Linux(R) e o FreeBSD diferem em suas opiniões sobre o que é uma interrupção, então isso é tratado aqui. O código é realmente muito curto:
[.programlisting]
....
@@ -551,45 +568,45 @@ translate_traps(int signal, int trap_code)
[[stack-fixup]]
=== Correção de pilha
-O editor de links em tempo de execução do RTLD espera as chamadas tags AUX na pilha durante uma `execve`, portanto, uma correção deve ser feita para garantir isso. Naturalmente, cada sistema RTLD é diferente, portanto, a camada de emulação deve fornecer sua própria rotina de correção de pilha para fazer isso. O mesmo acontece com o Linuxulator. O `elf_linux_fixup` simplesmente copia tags AUX para a pilha e ajusta a pilha do processo de espaço do usuário para apontar logo após essas tags. Então, a RTLD funciona de maneira inteligente.
+O link-editor em tempo de execução RTLD espera que as chamadas AUX estejam presentes na pilha durante um `execve`, então é necessário fazer um ajuste para garantir isso. Naturalmente, cada sistema RTLD é diferente, então a camada de emulação deve fornecer sua própria rotina de ajuste da pilha para realizar isso. Isso também se aplica ao Linuxulator. A função `elf_linux_fixup` simplesmente copia as chamadas AUX para a pilha e ajusta o ponteiro da pilha do processo de espaço de usuário para apontar imediatamente após essas chamadas. Dessa forma, o RTLD funciona de maneira inteligente.
[[aout-support]]
=== Suporte para A.OUT
-A camada de emulação Linux(R) em i386 também suporta os binários Linux(R) A.OUT. Praticamente tudo o que foi descrito nas seções anteriores deve ser implementado para o suporte A.OUT (além da tradução de traps e o envio de sinais). O suporte para binários A.OUT não é mais mantido, especialmente a emulação 2.6 não funciona com ele, mas isso não causa nenhum problema, já que os ports linux-base provavelmente não suportam binários A.OUT. Esse suporte provavelmente será removido no futuro. A maioria das coisas necessárias para carregar os binários Linux(R) A.OUT está no arquivo [.filename]#imgact_linux.c#.
+A camada de emulação do Linux(R) no i386 também suporta binários A.OUT do Linux(R). Praticamente tudo o que foi descrito nas seções anteriores deve ser implementado para oferecer suporte ao formato A.OUT (exceto a tradução de traps e o envio de sinais). O suporte para binários A.OUT não é mais mantido, especialmente a emulação 2.6 não funciona com esse formato. No entanto, isso não causa nenhum problema, já que o linux-base nos ports provavelmente não suporta binários A.OUT. Esse suporte provavelmente será removido no futuro. A maior parte do necessário para carregar binários A.OUT do Linux(R) está no arquivo [.filename]#imgact_linux.c#.
[[mi]]
-== Parte da camada de emulação -MI do Linux(R)
+== Camada de emulação do Linux(R) - Parte MI
-Esta seção fala sobre parte independente de máquina do Linuxulator. Ele cobre a infra-estrutura de emulação necessária para a emulação do Linux(R) 2.6, a implementação do TLS (thread local storage) (no i386) e os futexes. Então falamos brevemente sobre algumas syscalls.
+Esta seção aborda a parte independente de máquina do Linuxulator. Ela cobre a infraestrutura de emulação necessária para a emulação do Linux(R) 2.6, a implementação do armazenamento local de threads (TLS) (em i386) e futexes. Em seguida, falamos brevemente sobre algumas syscalls.
[[nptl-desc]]
=== Descrição do NPTL
-Uma das principais áreas de progresso no desenvolvimento do Linux(R) 2.6 foi o threading. Antes do 2.6, o suporte ao threading Linux(R) era implementado na biblioteca linuxthreads. A biblioteca foi uma implementação parcial do threading POSIX(R). A segmentação foi implementada usando processos separados para cada threading usando a syscall `clone` para permitir que eles compartilhem o espaço de endereço (e outras coisas). A principal fraqueza desta abordagem era que cada thread tinha um PID diferente, o tratamento de sinal era quebrado (da perspectiva pthreads), etc. O desempenho também não era muito bom (uso de sinais `SIGUSR` para sincronização de threads) , consumo de recursos do kernel, etc.) para superar esses problemas, um novo sistema de threading foi desenvolvido e denominado NPTL.
+Um dos principais avanços no desenvolvimento do Linux(R) 2.6 foi a implementação de threads. Antes do 2.6, o suporte a threading no Linux(R) era implementado na biblioteca linuxthreads. Essa biblioteca era uma implementação parcial da threading POSIX(R). A threading era implementada usando processos separados para cada thread, usando a syscall `clone` para permitir que compartilhassem o espaço de endereçamento (e outras coisas). As principais fraquezas dessa abordagem eram que cada thread tinha um PID diferente, o tratamento de sinais era problemático (do ponto de vista do pthreads), etc. Além disso, o desempenho não era muito bom (uso de sinais `SIGUSR` para sincronização de threads, consumo de recursos do kernel, etc.), então, para superar esses problemas, um novo sistema de threading foi desenvolvido e chamado de NPTL.
-A biblioteca NPTL focou em duas coisas, mas uma terceira coisa apareceu, então é normalmente considerada parte do NPTL. Essas duas coisas eram a incorporação de threads em uma estrutura de processo e futexes. A terceira coisa adicional foi o TLS, que não é diretamente exigido pelo NPTL, mas toda a biblioteca de usuário do NPTL depende dele. Essas melhorias resultaram em muito melhor desempenho e conformidade com os padrões. O NPTL é uma biblioteca de threading padrão nos sistemas Linux(R) atualmente.
+A biblioteca NPTL concentrou-se em duas coisas, mas uma terceira acabou sendo incluída e é geralmente considerada parte do NPTL. Essas duas coisas eram a incorporação de threads em uma estrutura de processo e futexes. A terceira coisa adicional foi TLS (Thread-Local Storage), que não é diretamente exigida pelo NPTL, mas toda a biblioteca NPTL do espaço do usuário depende dela. Essas melhorias resultaram em um desempenho muito melhorado e conformidade com padrões. O NPTL é uma biblioteca padrão de threading em sistemas Linux(R) nos dias de hoje.
-A implementação do FreeBSD Linuxulator se aproxima do NPTL em três áreas principais. O TLS, futexes e PID mangling, que serve para simular as threadings Linux(R). Outras seções descrevem cada uma dessas áreas.
+A implementação do Linuxulator no FreeBSD aborda o NPTL em três áreas principais. O TLS (Thread-Local Storage), os futexes e a manipulação de PID, que tem como objetivo simular as threads do Linux(R). Seções adicionais descrevem cada uma dessas áreas em detalhes.
[[linux26-emu]]
-=== Infra-estrutura de emulação do Linux(R) 2.6
+=== Infraestrutura de emulação do Linux(R) 2.6
-Estas seções tratam da maneira como as threadings Linux(R) são gerenciadas e como nós simulamos isso no FreeBSD.
+Essas seções lidam com a forma como as threads do Linux(R) são gerenciadas e como simulamos isso no FreeBSD.
[[linux26-runtime]]
==== Determinação de tempo de execução de emulação 2.6
-A camada de emulação do Linux(R) no FreeBSD suporta a configuração de tempo de execução da versão emulada. Isso é feito via man:sysctl[8], a saber `compat.linux.osrelease`. A configuração dessa man:sysctl[8] afeta o comportamento de tempo de execução da camada de emulação. Quando definido como 2.6.x, ele configura o valor de `linux_use_linux26` enquanto a configuração para algo mais o mantém não definido. Essa variável (mais variáveis por prisão do mesmo tipo) determina se a infraestrutura 2.6 (principalmente o PID) é usada no código ou não. A configuração da versão é feita em todo o sistema e isso afeta todos os processos Linux(R). A man:sysctl[8] não deve ser alterada ao executar qualquer binário do Linux(R), pois pode causar danos .
+A camada de emulação do Linux(R) no FreeBSD suporta a configuração em tempo de execução da versão emulada. Isso é feito por meio do man:sysctl[8], mais especificamente através do parâmetro `compat.linux.osrelease`. Configurar esse man:sysctl[8] afeta o comportamento em tempo de execução da camada de emulação. Ao definir para 2.6.x, ele define o valor de `linux_use_linux26`, enquanto definir para qualquer outro valor mantém esse valor como indefinido. Essa variável (juntamente com as variáveis específicas de cada prisão) determina se a infraestrutura 2.6 (principalmente o processo de manipulação de PID) é usada no código ou não. A configuração da versão é feita em todo o sistema e isso afeta todos os processos do Linux(R). O man:sysctl[8] não deve ser alterado ao executar qualquer binário do Linux(R), pois isso pode causar problemas.
[[linux-proc-thread]]
-==== Processos e identificadores de threading Linux(R)
+==== Processos e Identificadores de Thread no Linux(R)
-A semântica de threading Linux(R) é um pouco confusa e usa uma nomenclatura inteiramente diferente do FreeBSD. Um processo em Linux(R) consiste em uma `struct task` incorporando dois campos identificadores - PID e TGID. O PID _não é_ um ID de processo, mas é um ID de thread. O TGID identifica um grupo de threads em outras palavras, um processo. Para o processo single-threaded, o PID é igual ao TGID.
+A semântica de threading no Linux(R) é um pouco confusa e utiliza uma nomenclatura completamente diferente do FreeBSD. Em um processo no Linux(R), há uma estrutura chamada `struct task` que contém dois campos de identificação - PID e TGID. O PID _não_ é um identificador de processo, mas sim um identificador de thread. O TGID identifica um grupo de threads, ou seja, um processo. Para processos com apenas uma thread, o PID é igual ao TGID.
-A thread no NPTL é apenas um processo comum que acontece de ter TGID diferente de PID e ter um líder de grupo diferente de si mesmo (e VM compartilhada, é claro). Tudo o mais acontece da mesma maneira que em um processo comum. Não há separação de um status compartilhado para alguma estrutura externa como no FreeBSD. Isso cria alguma duplicação de informações e possível inconsistência de dados. O kernel Linux(R) parece usar a tarefa -> grupo de informações em alguns lugares e informações de tarefas em outros lugares e isso não é muito consistente e parece propenso a erros.
+No NPTL, uma thread é apenas um processo comum que tem o TGID diferente do PID e tem um líder de grupo diferente de si mesmo (além de compartilhar a memória virtual, é claro). Todo o resto acontece da mesma maneira que em um processo comum. Não há separação de um status compartilhado em uma estrutura externa, como no FreeBSD. Isso cria alguma duplicação de informações e possíveis inconsistências de dados. O kernel do Linux(R) parece usar informações de tarefa -> grupo em alguns lugares e informações de tarefa em outros lugares, e isso realmente não é muito consistente e parece propenso a erros.
-Cada threading NPTL é criada por uma chamada a syscall `clone` com um conjunto específico de flags (mais na próxima subseção). O NPTL implementa segmentação rígida de 1:1.
+Cada thread NPTL é criado por meio de uma chamada ao syscall `clone` com um conjunto específico de flags (mais detalhes na próxima subseção). O NPTL implementa uma estrita relação de threading 1:1.
No FreeBSD nós emulamos threads NPTL com processos comuns do FreeBSD que compartilham espaço de VM, etc. e a ginástica PID é apenas imitada na estrutura específica de emulação anexada ao processo. A estrutura anexada ao processo se parece com:
@@ -609,7 +626,7 @@ struct linux_emuldata {
};
....
-O PID é usado para identificar o processo do FreeBSD que liga esta estrutura. `child_se_tid` e `child_clear_tid` são usadas para cópia do endereço TID quando um processo existe e é criado. O ponteiro `shared` aponta para uma estrutura compartilhada entre as threads. A variável `pdeath_signal` identifica o sinal de morte do processo pai e o ponteiro `threads` é usado para vincular essa estrutura à lista de threads. A estrutura `linux_emuldata_shared` se parece com:
+O PID é usado para identificar o processo FreeBSD que se conecta a esta estrutura. Os campos `child_se_tid` e `child_clear_tid` são usados para copiar o endereço TID quando um processo termina ou é criado. O ponteiro `shared` aponta para uma estrutura compartilhada entre as threads. A variável `pdeath_signal` identifica o sinal de término do pai e o ponteiro `threads` é usado para vincular essa estrutura à lista de threads. A estrutura `linux_emuldata_shared` se parece com:
[.programlisting]
....
@@ -623,28 +640,28 @@ struct linux_emuldata_shared {
};
....
-O `refs` é um contador de referência sendo usado para determinar quando podemos liberar a estrutura para evitar vazamentos de memória. O `group_pid` é para identificar o PID (=TGID) de todo o processo (=grupo de threads). O ponteiro `threads` é o cabeçalho da lista de threading no processo.
+O campo `refs` é um contador de referências usado para determinar quando podemos liberar a estrutura para evitar vazamentos de memória. O campo `group_pid` é usado para identificar o PID ( = TGID) do processo completo ( = grupo de threads). O ponteiro `threads` é a cabeça da lista de threads no processo.
-A estrutura `linux_emuldata` pode ser obtida a partir do processo usando `em_find`. O protótipo da função é:
+A estrutura `linux_emuldata` pode ser obtida do processo usando `em_find`. O protótipo da função é:
[.programlisting]
....
-struct linux_emuldata * em_find (struct proc *, int bloqueado);
+struct linux_emuldata *em_find(struct proc *, int locked);
....
-Aqui, `proc` é o processo em que queremos a estrutura emuldata e o parâmetro locked determina se queremos ou não bloquear. Os valores aceitos são `EMUL_DOLOCK` e `EMUL_DOUNLOCK`. Mais sobre o bloqueio mais tarde.
+Aqui, `proc` é o processo do qual queremos obter a estrutura emuldata e o parâmetro `locked` determina se queremos realizar o bloqueio ou não. Os valores aceitos são `EMUL_DOLOCK` e `EMUL_DOUNLOCK`. Mais sobre bloqueio será explicado posteriormente.
[[pid-mangling]]
==== Maqueando PID
-Por causa da visão diferente descrita sabendo o que é um ID de processo e ID de thread entre o FreeBSD e o Linux(R) nós temos que traduzir a view de alguma forma. Nós fazemos isso pelo manuseio do PID. Isto significa que nós falsificamos o que um PID (=TGID) e um TID (=PID) é entre o kernel e o userland. A regra é que no kernel (no Linuxulator) PID=PID e TGID=grupo de id -> compartilhado e para userland nós apresentamos `PID=shared -> group_pid` e `TID=proc -> p_pid`. O membro PID da estrutura `linux_emuldata` é um PID do FreeBSD.
+Devido à diferença na interpretação do conceito de PID e TID entre o FreeBSD e o Linux(R), precisamos fazer uma tradução para conciliar essas visões. Fazemos isso através da manipulação de PIDs. Isso significa que simulamos o que seria um PID (=TGID) e TID (=PID) entre o kernel e o espaço do usuário. A regra geral é que, no kernel (no Linuxulator), PID = PID e TGID = shared->group_pid, e no espaço do usuário apresentamos `PID = shared->group_pid` e `TID = proc->p_pid`. O membro PID da estrutura `linux_emuldata` é um PID do FreeBSD.
-O acima afeta principalmente syscalls getyscl, getppid, gettid. Onde usamos PID/TGID, respectivamente. Em cópia de TIDs em `child_clear_tid` e `child_set_tid` copiamos o PID FreeBSD.
+A situação acima afeta principalmente as chamadas de sistema getpid, getppid e gettid. Nelas, utilizamos o PID/TGID respectivamente. Na cópia de TIDs em `child_clear_tid` e `child_set_tid`, copiamos o PID do FreeBSD.
[[clone-syscall]]
==== syscall Clone
-A syscall `clone` é o modo como as threads são criadas no Linux(R). O protótipo syscall é assim:
+A chamada de sistema `clone` é a forma como as threads são criadas no Linux(R). O protótipo da syscall é assim:
[.programlisting]
....
@@ -652,16 +669,16 @@ int linux_clone(l_int flags, void *stack, void *parent_tidptr, int dummy,
void * child_tidptr);
....
-O parâmetro `flags` informa a syscall como exatamente os processos devem ser clonados. Como descrito acima, o Linux(R) pode criar processos compartilhando várias coisas independentemente, por exemplo, dois processos podem compartilhar file descriptors, mas não VM, etc. Ultimo byte do parametro `flags` é o sinal de saída do processo recém-criado. O parâmetro `stack` se não `NULL` diz, onde está a pilha de threading e se é `NULL` nós devemos copiar-na-escrita chamando a pilha de processos (isto é, faz a rotina normal de man:fork[2]). O parâmetro `parent_tidptr` é usado como um endereço para copiar o PID do processo (ou seja, o id do thread), uma vez que o processo esteja suficientemente instanciado, mas ainda não seja executável. O parâmetro `dummy` está aqui devido à convenção de chamada muito estranha desta syscall em i386. Ele usa os registradores diretamente e não deixa o compilador fazer o que resulta na necessidade de uma syscall falsa. O parâmetro `child_tidptr` é usado como um endereço para copiar o PID assim que o processo terminar de bifurcar e quando o processo terminar.
+O parâmetro `flags` informa à syscall como exatamente os processos devem ser clonados. Como descrito anteriormente, o Linux(R) pode criar processos que compartilham várias coisas de forma independente, por exemplo, dois processos podem compartilhar descritores de arquivo, mas não a VM, etc. O último byte do parâmetro `flags` é o sinal de saída do novo processo criado. O parâmetro `stack`, se não for `NULL`, indica onde está a pilha da thread, e se for `NULL`, devemos fazer uma cópia em escrita-compartilhada da pilha do processo chamador (ou seja, fazer o que a rotina normal do man:fork[2] faz). O parâmetro `parent_tidptr` é usado como endereço para copiar o PID do processo (ou seja, ID da thread) assim que o processo estiver suficientemente instanciado, mas ainda não estiver em execução. O parâmetro `dummy` está aqui por causa da convenção de chamada muito estranha dessa syscall no i386. Ela usa os registradores diretamente e não permite que o compilador o faça, o que resulta na necessidade de um syscall dummy. O parâmetro `child_tidptr` é usado como endereço para copiar o PID assim que o processo terminar de criar um novo processo e quando o processo terminar.
-O syscall prossegue definindo flags correspondentes dependendo dos flags passadas. Por exemplo, mapas `CLONE_VM` para RFMEM (compartilhamento de VM), etc. O único nit aqui é `CLONE_FS` e `CLONE_FILES` porque o FreeBSD não permite configurar isso separadamente, então nós o falsificamos não configurando RFFDG (copiando a tabela fd e outras informações fs) se qualquer uma delas estiver definida. Isso não causa nenhum problema, porque essas flags são sempre definidas juntas. Depois de definir as flags, o processo é bifurcado usando a rotina `fork1` interna, o processo é instrumentado para não ser colocado em uma fila de execução, ou seja, não deve ser definido como executável. Depois que a bifurcação é feita, possivelmente reparamos o processo recém-criado para emular a semântica `CLONE_PARENT`. A próxima parte está criando os dados de emulação. Threads no Linux(R) não sinalizam seus processos pais, então nós definimos o sinal de saída como 0 para desabilitar isso. Depois que a configuração de `child_set_tid` e `child_clear_tid` é executada, habilitando a funcionalidade posteriormente no código. Neste ponto, copiamos o PID para o endereço especificado por `parent_tidptr`. A configuração da pilha de processos é feita simplesmente reescrevendo o registro do quadro de linha `% esp` (`% rsp` no amd64). A próxima parte é configurar o TLS para o processo recém-criado. Depois disso, a semântica man:vfork[2] pode ser emulada e, finalmente, o processo recém-criado é colocado em uma fila de execução e copiando seu PID para o processo pai através do valor de retorno `clone` é feito.
+A syscall em si prossegue configurando as flags correspondentes com base nas flags passadas. Por exemplo, `CLONE_VM` mapeia para RFMEM (compartilhamento de VM), etc. O único detalhe aqui é `CLONE_FS` e `CLONE_FILES`, porque o FreeBSD não permite configurar isso separadamente, então simulamos não configurando RFFDG (cópia da tabela de descritores de arquivo e outras informações do sistema de arquivos) se algum desses estiver definido. Isso não causa problemas, porque essas flags são sempre configuradas juntas. Após configurar as flags, o processo é bifurcado usando a rotina interna `fork1`, e instruímos o processo a não ser colocado em uma fila de execução, ou seja, não ser definido como executável. Depois que a bifurcação é concluída, possivelmente reparentamos o processo recém-criado para emular a semântica `CLONE_PARENT`. A próxima parte é a criação dos dados de emulação. As threads no Linux(R) não sinalizam seus pais, então definimos o sinal de saída como 0 para desativar isso. Em seguida, é feita a configuração de `child_set_tid` e `child_clear_tid`, habilitando a funcionalidade posteriormente no código. Nesse ponto, copiamos o PID para o endereço especificado por `parent_tidptr`. A configuração da pilha do processo é feita simplesmente reescrevendo o registro `%esp` do quadro da thread (`%rsp` no amd64). A próxima parte é configurar o TLS para o processo recém-criado. Após isso, as semânticas de man:vfork[2] podem ser emuladas e, finalmente, o processo recém-criado é colocado em uma fila de execução e a cópia de seu PID para o processo pai é feita por meio do valor de retorno do `clone`.
-A syscall `clone` é capaz e de fato é usado para emulação de syscalls man:fork[] e man:vfork[2]. O glibc mais novo em um caso de kernel 2.6 usa o `clone` para implementar syscalls man:fork[2] e man:vfork[2].
+O syscall `clone` é capaz e, de fato, é usado para emular as chamadas de sistema clássicas man:fork[2] e man:vfork[2]. O glibc mais recente, no caso do kernel 2.6, usa `clone` para implementar as chamadas de sistema man:fork[2] e man:vfork[2].
[[locking]]
==== Bloqueio
-O bloqueio é implementado como per-subsystem porque não esperamos muita disputa sobre eles. Existem dois bloqueios: `emul_lock` usado para proteger a manipulação de `linux_emuldata` e `emul_shared_lock` usado para manipular `linux_emuldata_shared`. O `emul_lock` é um mutex bloqueador não tolerável, enquanto `emul_shared_lock` é um bloqueio travável `sx_lock`. Devido ao bloqueio por subsistema, podemos unir alguns bloqueios e é por isso que o em-find oferece o acesso sem bloqueio.
+O sistema de bloqueio é implementado por subsistema, pois não esperamos muita contenção nesses pontos. Existem dois bloqueios: `emul_lock`, usado para proteger a manipulação de `linux_emuldata`, e `emul_shared_lock`, usado para manipular `linux_emuldata_shared`. O `emul_lock` é uma mutex de bloqueio não adormecível, enquanto o `emul_shared_lock` é um bloqueio `sx_lock` de bloqueio adormecível. Devido ao bloqueio por subsistema, podemos combinar alguns bloqueios e é por isso que a função `em_find` oferece acesso sem bloqueio.
[[tls]]
=== TLS
@@ -671,24 +688,24 @@ Esta seção trata do TLS também conhecido como armazenamento local de thread.
[[trheading-intro]]
==== Introdução ao threading
-Threads na ciência da computação são entidades com um processo que podem ser agendados independentemente de qualquer outro. As threads nos processos compartilham amplos dados de processos (file descriptors, etc.) mas também tem sua prŕopria pilha para seus próprios dados. Algumas vezes é preciso para um processamento amplo de dados dado uma thread. Imagine um nome de uma thread algo assim. A tradicional API de threading do UNIX(R), pthreads prove um caminho para isso em man:pthread_key_create[3], man:pthread_setspecific[3] and man:pthread_getspecific[3] onde a thread pode criar uma chave para os dados da thread local man:pthread_getspecific[3] ou man:pthread_getspecific[3] para manipular esses dados. Você pode ver que esse não é o caminho mais confortavel que poderia ser usado. Então varios produtores de compiladores C/C++ introduziram um caminho melhor. Eles definiram uma nova chave modificadora de thread que especifica que a variavel é especifica de uma thread. Um novo método de acessar as variaveis foi desenvolvio como (ao menos no i386). O método pthreads tende a ser implementado no espaço de usuário como uma tabela de lookup trivial. A performance como uma solução não é muito boa. Então o novo método (no i386) registradores de segmentos para endereçar um segmento, onde a área do TLS é armazenada, então o atual acesso da variável de uma thread é apenas adicionada ao registrador de segmentos para o endereçamento via it. Os registradores de segmentos são usualmente `%gs` e `%fs` agindo como seletores de segmento. Toda thread tem sua própria área onde os dados da thread local são armazenados e o segmento deve ser carregado em toda troca de contexto. Esse método é muito rapido e usado em todo mundo em volta do UNIX(R) i386. Ambos FreeBSD e Linux(R) Implementam sua abordagem e seus resultados tem sido muito bons. Unico ponto negativo é ter que recarregar o segmento em toda troca de contexto que pode deixar o processo lento. FreeBSD tenta evitar essa sobrecarga usando apenas 1 descritor de segmento enquanto Linux(R) usa 3. Interessante que isso quase nunca usa mais que 1 descritor (apenas o Wine parece usar 2) então o Linux(R) paga esse preço desnecessário na troca de contexto.
+As threads na ciência da computação são entidades dentro de um processo que podem ser agendadas independentemente umas das outras. As threads no processo compartilham dados em todo o processo (descritores de arquivos, etc.), mas também possuem sua própria pilha para seus próprios dados. Às vezes, há necessidade de dados específicos de um thread em todo o processo, como o nome do thread em execução, por exemplo. A API de threads tradicional do UNIX(R), pthreads, oferece uma maneira de fazer isso usando as funções `pthread_key_create`, `pthread_setspecific` e `pthread_getspecific`, onde um thread pode criar uma chave para os dados específicos do thread local e manipular esses dados usando as funções `pthread_setspecific` e `pthread_getspecific`. É fácil perceber que essa não é a maneira mais conveniente de fazer isso. Portanto, vários fabricantes de compiladores C/C++ introduziram uma maneira melhor. Eles definiram uma nova palavra-chave de modificação, `thread`, que especifica que uma variável é específica de um thread. Também foi desenvolvido um novo método de acesso a essas variáveis, pelo menos na arquitetura i386. O método tradicional do pthreads tende a ser implementado no espaço do usuário como uma tabela de pesquisa trivial. O desempenho de tal solução não é muito bom. Portanto, o novo método usa (no i386) registradores de segmento para endereçar um segmento, onde a área TLS é armazenada, de modo que o acesso real a uma variável do thread é apenas a concatenação do registrador de segmento ao endereço, permitindo o acesso direto através do registrador de segmento. Os registradores de segmento geralmente são `%gs` e `%fs`, agindo como seletores de segmento. Cada thread tem sua própria área onde os dados locais do thread são armazenados, e o registrador de segmento precisa ser carregado em cada troca de contexto. Esse método é muito rápido e amplamente usado em todo o mundo UNIX(R) na arquitetura i386. Tanto o FreeBSD quanto o Linux(R) implementam essa abordagem e obtêm resultados muito bons. A única desvantagem é a necessidade de recarregar o segmento em cada troca de contexto, o que pode retardar as trocas de contexto. O FreeBSD tenta evitar essa sobrecarga usando apenas um descritor de segmento para isso, enquanto o Linux(R) usa 3. É interessante observar que quase nada usa mais de 1 descritor (apenas o Wine parece usar 2), então o Linux(R) paga um preço desnecessário pelas trocas de contexto.
[[i386-segs]]
==== Segmentos em i386
-A arquitetura i386 implementa os então chamados segmentos.Um segmento é uma descrição de um espaço na memória. A base de endereço (baixa) na area da memória, o fim disso (teto), tipo, proteção, etc. A memória descrita por um segmento pode ser acessada usando um seletor de segmento (`%cs`, `%ds`, `%ss`, `%es`, `%fs`, `%gs`). Por exemplo, deixe nos supor que temos um segmento com base no endereço 0x1234 e comprimento e esse codigo:
+A arquitetura i386 implementa os chamados segmentos. Um segmento é uma descrição de uma área de memória. Ele contém informações como o endereço base (início) da área de memória, o final (teto), tipo, proteção, etc. A memória descrita por um segmento pode ser acessada usando registradores de seleção de segmento (`%cs`, `%ds`, `%ss`, `%es`, `%fs`, `%gs`). Por exemplo, vamos supor que temos um segmento cujo endereço base é 0x1234 e comprimento e o seguinte código:
[.programlisting]
....
mov %edx,%gs:0x10
....
-Isso carregará o conteúdo do registro `% edx` na localização da memória 0x1244. Alguns registradores de segmento têm um uso especial, por exemplo `% cs` é usado para segmento de código e `% ss` é usado para o segmento de pilha, mas `% fs` e `% gs` geralmente não são usados. Os segmentos são armazenados em uma tabela GDT global ou em uma tabela LDT local. O LDT é acessado por meio de uma entrada no GDT. O LDT pode armazenar mais tipos de segmentos. LDT pode ser por processo. Ambas as tabelas definem até 8191 entradas.
+Isso irá carregar o conteúdo do registro `%edx` no endereço de memória 0x1244. Alguns registradores de segmento têm um uso especial, por exemplo, `%cs` é usado para o segmento de código e `%ss` é usado para o segmento de pilha, mas `%fs` e `%gs` geralmente não são usados. Os segmentos são armazenados em uma tabela global GDT ou em uma tabela local LDT. A LDT é acessada por meio de uma entrada na GDT. A LDT pode armazenar mais tipos de segmentos. A LDT pode ser por processo. Ambas as tabelas definem até 8191 entradas.
[[linux-i386]]
==== Implementação no Linux(R) i386
-Existem duas maneiras principais de configurar o TLS no Linux(R). Pode ser definido ao clonar um processo usando a syscall `clone` ou ele pode chamar `set_thread_area`. Quando um processo passa a flag `CLONE_SETTLS` para `clone`, o kernel espera que a memória apontada pelo registrador `% esi` uma representação Linux(R) do espaço do usuário de um segmento, que é traduzido para a representação da máquina de um segmento e carregado em um slot GDT. O slot GDT pode ser especificado com um número ou -1 pode ser usado, o que significa que o próprio sistema deve escolher o primeiro slot livre. Na prática, a grande maioria dos programas usa apenas uma entrada de TLS e não se importa com o número da entrada. Nós exploramos isso na emulação e dependemos disso.
+Existem duas principais maneiras de configurar o TLS no Linux(R). Pode ser definido ao clonar um processo usando a chamada de sistema `clone` ou pode chamar `set_thread_area`. Quando um processo passa a flag `CLONE_SETTLS` para `clone`, o kernel espera que a memória apontada pelo registro `%esi` seja uma representação do espaço do usuário Linux(R) de um segmento, que é traduzido para a representação do segmento da máquina e carregado em um slot GDT. O slot GDT pode ser especificado com um número ou -1 pode ser usado, o que significa que o sistema deve escolher automaticamente o primeiro slot livre. Na prática, a grande maioria dos programas usa apenas uma entrada TLS e não se preocupa com o número da entrada. Exploramos isso na emulação e, na verdade, dependemos disso.
[[tls-emu]]
==== Emulação de TLS do Linux(R)
@@ -696,12 +713,12 @@ Existem duas maneiras principais de configurar o TLS no Linux(R). Pode ser defin
[[tls-i386]]
===== i386
-O carregamento de TLS para o segmento atual acontece chamando `set_thread_area` enquanto o TLS é carregado para um segundo processo em `clone` é feito no bloco separado em `clone`. Essas duas funções são muito semelhantes. A única diferença é o carregamento real do segmento GDT, que acontece na próxima troca de contexto para o processo recém-criado, enquanto `set_thread_area` deve carregar isso diretamente. O código basicamente faz isso. Ele copia o descritor de segmento de formulário Linux(R) da área de usuário. O código verifica o número do descritor, mas como isso difere entre o FreeBSD e o Linux(R), maquiamos um pouco. Nós suportamos apenas índices de 6, 3 e -1. O número 6 é genuíno do Linux(R), 3 é genuíno do FreeBSD one e -1 significa uma auto seleção. Em seguida, definimos o número do descritor como constante 3 e copiamos isso para o espaço do usuário. Contamos com o processo em espaço de usuário usando o número do descritor, mas isso funciona na maior parte do tempo (nunca vi um caso em que isso não funcionou), como o processo em espaço de usuário normalmente passa em 1. Então, convertemos o descritor da classe do Linux(R) para um formulário dependente da máquina (isto é, independente do sistema operacional) e copie isto para o descritor de segmento definido pelo FreeBSD. Finalmente podemos carregá-lo. Atribuímos o descritor às threads PCB (bloco de controle de processo) e carregamos o segmento `% gs` usando `load_gs`. Este carregamento deve ser feito em uma seção crítica para que nada possa nos interromper. O caso `CLONE_SETTLS` funciona exatamente como este, apenas o carregamento usando `load_gs` não é executado. O segmento usado para isso (segmento número 3) é compartilhado para este uso entre os processos do FreeBSD e do Linux(R) para que a camada de emulação Linux(R) não adicione nenhuma sobrecarga sobre o FreeBSD.
+O carregamento do TLS para a thread atual é feito chamando `set_thread_area`, enquanto o carregamento do TLS para um segundo processo no `clone` é feito em um bloco separado no `clone`. Essas duas funções são muito semelhantes. A única diferença é o carregamento real do segmento GDT, que ocorre na próxima troca de contexto para o processo recém-criado, enquanto o `set_thread_area` deve carregar isso diretamente. O código basicamente faz isso. Ele copia o descritor do segmento no formato Linux(R) do espaço do usuário. O código verifica o número do descritor, mas como isso difere entre FreeBSD e Linux(R), nós fazemos uma pequena manipulação. Nós suportamos apenas os índices 6, 3 e -1. O 6 é um número genuíno do Linux(R), o 3 é um número genuíno do FreeBSD e -1 significa seleção automática. Em seguida, definimos o número do descritor como o valor constante 3 e copiamos isso de volta para o espaço do usuário. Nós confiamos no processo do espaço do usuário usando o número do descritor, e isso funciona na maioria das vezes (nunca vi um caso em que isso não funcionasse), pois o processo do espaço do usuário normalmente passa o número 1. Em seguida, convertemos o descritor do formato Linux(R) para um formato dependente da máquina (ou seja, independente do sistema operacional) e copiamos isso para o descritor de segmento definido no FreeBSD. Finalmente, podemos carregá-lo. Atribuímos o descritor ao PCB (process control block) das threads e carregamos o segmento `%gs` usando `load_gs`. Esse carregamento deve ser feito em uma seção crítica para que nada possa nos interromper. O caso `CLONE_SETTLS` funciona exatamente da mesma maneira, apenas o carregamento usando `load_gs` não é realizado. O segmento usado para isso (número do segmento 3) é compartilhado entre processos FreeBSD e processos Linux(R), portanto, a camada de emulação do Linux(R) não adiciona nenhum overhead além do FreeBSD puro.
[[tls-amd64]]
===== amd64
-A implementação do amd64 é semelhante à do i386, mas inicialmente não havia um descritor de segmento de 32 bits usado para esse propósito (por isso nem usuários nativos de TLB de 32 bits trabalhavam), então tivemos que adicionar esse segmento e implementar seu carregamento em cada troca de contexto (quando a flag sinalizando uso de 32 bits está definida). Além disso, o carregamento de TLS é exatamente o mesmo, apenas os números de segmento são diferentes e o formato do descritor e o carregamento diferem ligeiramente.
+A implementação do amd64 é semelhante à do i386, mas inicialmente não havia um descritor de segmento de 32 bits usado para esse propósito (portanto, nem mesmo os usuários nativos de TLS de 32 bits funcionavam), então tivemos que adicionar esse segmento e implementar seu carregamento em cada troca de contexto (quando uma flag sinalizando o uso de 32 bits é definida). Além disso, o carregamento de TLS é exatamente o mesmo, apenas os números de segmento são diferentes e o formato do descritor e o carregamento diferem um pouco.
[[futexes]]
=== Futexes
@@ -709,14 +726,14 @@ A implementação do amd64 é semelhante à do i386, mas inicialmente não havia
[[sync-intro]]
==== Introdução à sincronização
-Threads precisam de algum tipo de sincronização e POSIX(R) fornece alguns deles: mutexes para exclusão mútua, bloqueios de leitura/gravação para exclusão mútua com relação de polarização de leituras e gravações e variáveis de condição para sinalizar um mudança de status. É interessante observar que a API de thread POSIX(R) não tem suporte para semáforos. Essas implementações de rotinas de sincronização são altamente dependentes do tipo de suporte a threading que temos. No modelo puro 1:M (espaço de usuário), a implementação pode ser feita apenas no espaço do usuário e, portanto, ser muito rápida (as variáveis de condição provavelmente serão implementadas usando sinais, ou seja, não rápido) e simples. No modelo 1:1, a situação também é bastante clara - as threading devem ser sincronizadas usando as facilidades do kernel (o que é muito lento porque uma syscall deve ser executada). O cenário M:N misto combina apenas a primeira e a segunda abordagem ou depende apenas do kernel. A sincronização de threads é uma parte vital da programação ativada por threads e seu desempenho pode afetar muito o programa resultante. Benchmarks recentes no sistema operacional FreeBSD mostraram que uma implementação sx_lock melhorada gerou 40% de aceleração no _ZFS_ (um usuário sx pesado), isso é algo in-kernel, mas mostra claramente quão importante é o desempenho das primitivas de sincronização. .
+As threads necessitam de algum tipo de sincronização, o POSIX(R) fornece alguns mecanismos de sincronização, como mutexes para exclusão mútua, read-write locks para exclusão mútua com uma proporção enviesada de leituras e escritas, e variáveis de condição para sinalizar mudanças de status. É interessante notar que a API de threads POSIX(R) não oferece suporte para semáforos. A implementação dessas rotinas de sincronização depende fortemente do tipo de suporte a threading disponível. Em um modelo puro 1:M (userspace), a implementação pode ser feita exclusivamente no espaço de usuário, resultando em uma abordagem rápida e simples (embora as variáveis de condição possam ser implementadas usando sinais, o que pode ser mais lento). Em um modelo 1:1, as threads devem ser sincronizadas usando recursos do kernel, o que pode ser mais lento devido à necessidade de chamadas de sistema. O cenário misto M:N combina as abordagens anteriormente mencionadas ou depende exclusivamente do kernel. A sincronização de threads é uma parte vital da programação com threads, e seu desempenho pode afetar significativamente o programa resultante. Testes recentes no sistema operacional FreeBSD demonstraram um aumento de desempenho de 40% na implementação aprimorada do sx_lock no _ZFS_ (que faz uso intensivo de primitivas de sincronização). Embora esse exemplo se refira a operações no kernel, ele destaca a importância de primitivas de sincronização eficientes para o desempenho geral.
-Os programas em threading devem ser escritos com o mínimo de contenção possível em bloqueios. Caso contrário, em vez de fazer um trabalho útil, a threading apenas espera em um bloqueio. Devido a isso, os programas encadeados mais bem escritos mostram pouca contenção de bloqueios.
+Programas com threads devem ser escritos com o mínimo possível de contenção em locks. Caso contrário, em vez de realizar um trabalho útil, a thread apenas espera em um lock. Como resultado disso, os programas com threads bem escritos mostram pouca contenção em locks.
[[futex-intro]]
==== Introdução a Futexes
-O Linux(R) implementa a segmentação 1:1, ou seja, tem de utilizar primitivas de sincronização no kernel. Como afirmado anteriormente, programas encadeados bem escritos possuem pouca contenção de bloqueio. Assim, uma sequência típica poderia ser executada como dois contador de referência de mutex de aumento/redução atômico, que é muito rápido, conforme apresentado pelo exemplo a seguir:
+O Linux(R) implementa threading 1:1, ou seja, ele utiliza primitivas de sincronização no kernel. Como mencionado anteriormente, programas com threads bem escritos têm pouca contenção em locks. Assim, uma sequência típica pode ser realizada com o aumento/diminuição atômica do contador de referência do mutex, o que é muito rápido, conforme apresentado no seguinte exemplo:
[.programlisting]
....
@@ -727,7 +744,7 @@ pthread_mutex_unlock(&mutex);
O threading 1:1 nos força a executar dois syscalls para as chamadas mutex, o que é muito lento.
-A solução que o Linux(R) 2.6 implementa é chamada de futexes. Futexes implementam a verificação de contenção no espaço do usuário e chama primitivas do kernel apenas em um caso de contenção. Assim, o caso típico ocorre sem qualquer intervenção do kernel. Isso produz uma implementação de primitivas de sincronização razoavelmente rápida e flexível.
+A solução implementada pelo Linux(R) 2.6 é chamada de "futexes". Os futexes implementam a verificação de contenção no espaço do usuário e chamam as primitivas do kernel apenas em caso de contenção. Dessa forma, o caso típico ocorre sem qualquer intervenção do kernel. Isso resulta em uma implementação de primitivas de sincronização razoavelmente rápida e flexível.
[[futex-api]]
==== API do Futex
@@ -739,7 +756,7 @@ A syscall do futex é assim:
int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);
....
-Neste exemplo `uaddr` é um endereço do mutex no espaço do usuário, `op` é uma operação que estamos prestes a executar e os outros parâmetros têm significado por operação.
+Neste exemplo, `uaddr` é o endereço do mutex no espaço do usuário, `op` é a operação que estamos prestes a realizar e os outros parâmetros têm significado específico para cada operação.
Futexes implementam as seguintes operações:
@@ -753,12 +770,12 @@ Futexes implementam as seguintes operações:
[[futex-wait]]
===== FUTEX_WAIT
-Esta operação verifica que no endereço `uaddr` o valor `val` é gravado. Se não, `EWOULDBLOCK` é retornado, caso contrário, a thread é enfileirada no futex e é suspensa. Se o argumento `timeout` for diferente de zero, ele especificará o tempo máximo para a suspensão, caso contrário, a suspensão será infinita.
+Essa operação verifica se o valor `val` está escrito no endereço `uaddr`. Se não estiver, retorna `EWOULDBLOCK`. Caso contrário, a thread é colocada na fila do futex e é suspensa. Se o argumento `timeout` for diferente de zero, ele especifica o tempo máximo de suspensão. Caso contrário, a suspensão é infinita.
[[futex-wake]]
===== FUTEX_WAKE
-Esta operação tem um futex em `uaddr` e acorda os primeiros futexes `val` enfileirados neste futex.
+Essa operação pega um futex em `uaddr` e acorda os primeiros `val` futexes na fila desse futex.
[[futex-fd]]
===== FUTEX_FD
@@ -768,19 +785,19 @@ Esta operação associa um descritor de arquivo com um determinado futex.
[[futex-requeue]]
===== FUTEX_REQUEUE
-Esta operação pega threads `val` enfileirados no futex em `uaddr`, acorda-os e pega as próximas threads `val2` e enfileira-os no futex em `uaddr2`.
+Essa operação pega `val` threads na fila do futex em `uaddr`, acorda-as e pega `val2` threads seguintes e as coloca novamente na fila do futex em `uaddr2`.
[[futex-cmp-requeue]]
===== FUTEX_CMP_REQUEUE
-Essa operação faz o mesmo que `FUTEX_REQUEUE`, mas verifica se `val3` é igual a `val` primeiro.
+Essa operação faz o mesmo que `FUTEX_REQUEUE`, mas verifica primeiro se `val3` é igual a `val`.
[[futex-wake-op]]
===== FUTEX_WAKE_OP
-Esta operação executa uma operação atômica em `val3` (que contém algum outro valor codificado) e `uaddr`. Então, ele acorda threads `val` em futex em `uaddr` e se a operação atômica retornar um número positivo, ele ativa os threadings `val2` em futex em `uaddr2`.
+Essa operação realiza uma operação atômica em `val3` (que contém codificado algum outro valor) e `uaddr`. Em seguida, acorda `val` threads no futex em `uaddr` e, se a operação atômica retornar um número positivo, acorda `val2` threads no futex em `uaddr2`.
-As operações implementadas em `FUTEX_WAKE_OP`:
+As operações implementadas em FUTEX_WAKE_OP são:
* `FUTEX_OP_SET`
* `FUTEX_OP_ADD`
@@ -790,13 +807,13 @@ As operações implementadas em `FUTEX_WAKE_OP`:
[NOTE]
====
-Não existe um parâmetro `val2` no protótipo do futex. O `val2` é obtido do parâmetro `struct timespec *timeout` para as operações `FUTEX_REQUEUE`, `FUTEX_CMP_REQUEUE` e `FUTEX_WAKE_OP`.
+Não há parâmetro `val2` no protótipo do futex. O `val2` é obtido do parâmetro `struct timespec *timeout` para as operações `FUTEX_REQUEUE`, `FUTEX_CMP_REQUEUE` e `FUTEX_WAKE_OP`.
====
[[futex-emu]]
==== Emulação de Futex no FreeBSD
-A emulação de futex no FreeBSD é retirada do NetBSD e posteriormente estendida por nós. Ele é colocado nos arquivos [.filename]#linux_futex.c# e [.filename]#linux_futex.h#. A estrutura `futex` se parece com:
+A emulação de futex no FreeBSD é baseada no NetBSD e posteriormente estendida por nós. Ela é implementada nos arquivos `linux_futex.c` e [.filename]#linux_futex.h#. A estrutura `futex` se parece com:
[.programlisting]
....
@@ -827,27 +844,27 @@ struct waiting_proc {
[[futex-get]]
===== futex_get / futex_put
-Um futex é obtido usando a função `futex_get`, que busca uma lista linear de futexes e retorna o encontrado ou cria um novo futex. Ao liberar um futex do uso, chamamos a função `futex_put`, que diminui um contador de referência do futex e, se o refcount chegar a zero, ele é liberado.
+Um futex é obtido usando a função `futex_get`, que busca em uma lista linear de futexes e retorna o encontrado ou cria um novo futex. Ao liberar um futex do uso, chamamos a função `futex_put`, que diminui um contador de referência do futex e, se o contador de referência chegar a zero, ele é liberado.
[[futex-sleep]]
===== futex_sleep
-Quando um futex enfileira uma thread para dormir, ele cria uma estrutura `working_proc` e coloca essa estrutura na lista dentro da estrutura do futex, então apenas executa um man:tsleep[9] para suspender a threading. O sleep pode ser expirado. Depois de man:tsleep[9] retornar (a thread foi acordada ou expirou) a estrutura `working_proc` é removida da lista e é destruído. Tudo isso é feito na função `futex_sleep`. Se nós formos acordados de `futex_wake` nós temos `wp_new_futex` setado então nós dormimos nele. Desta forma, um novo enfileiramento é feito nesta função.
+Quando um futex coloca uma thread em espera, ele cria uma estrutura `working_proc` e a coloca na lista dentro da estrutura do futex. Em seguida, ele executa um `man:tsleep[9]` para suspender a thread. A suspensão pode ter um tempo limite. Após o retorno do `man:tsleep[9]` (quando a thread foi acordada ou quando expirou o tempo limite), a estrutura `working_proc` é removida da lista e destruída. Tudo isso é feito na função `futex_sleep`. Se acordamos de um `futex_wake`, `wp_new_futex` é definido para que durmamos nele. Dessa forma, o reenfileiramento real é feito nessa função.
[[futex-wake-2]]
===== futex_wake
-Acordar uma thread em sleep em uma futex é performado na função `futex_wake`. Primeiro nesta função nós imitamos o comportamento estranho do Linux(R), onde ele acorda N threads para todas as operações, a única exceção é que as operações REQUEUE são executadas em threads N+1. Mas isso geralmente não faz diferença, pois estamos acordando todos as threads. Em seguida na função no loop nós acordamos n threads, depois disso nós checamos se existe um novo futex para requeuering. Se assim for, nós enfileiramos novamente até n2 threads no novo futex. Isso coopera com o `futex_sleep`.
+Acordar uma thread que está dormindo em um futex é realizado na função `futex_wake`. Primeiro, nesta função, imitamos o comportamento estranho do Linux(R), onde ele acorda N threads para todas as operações, com a única exceção de que as operações REQUEUE são realizadas em N+1 threads. Mas isso geralmente não faz diferença, pois estamos acordando todas as threads. Em seguida, no loop da função, acordamos n threads e, em seguida, verificamos se há um novo futex para reenfileiramento. Se houver, reenfileiramos até n2 threads no novo futex. Isso coopera com a função `futex_sleep`.
[[futex-wake-op-2]]
===== futex_wake_op
-A operação `FUTEX_WAKE_OP` é bastante complicada. Primeiro nós obtemos dois futexes nos endereços `uaddr` e `uaddr2` e então executamos a operação atômica usando `val3` e `uaddr2`. Então os waiters `val` no primeiro futex são acordados e se a condição de operação atômica se mantém, nós acordamos o waiter `val2` (ex `timeout`) no segundo futex.
+A operação `FUTEX_WAKE_OP` é bastante complexa. Primeiro, obtemos dois futexes nos endereços `uaddr` e `uaddr2`, em seguida, realizamos a operação atômica usando `val3` e `uaddr2`. Em seguida, acordamos as threads em espera com valor `val` no primeiro futex e, se a condição da operação atômica for satisfeita, acordamos a thread em espera com valor `val2` (ou seja, `timeout`) no segundo futex.
[[futex-atomic-op]]
===== operação atômica futex
-A operação atômica usa dois parâmetros `encoded_op` e `uaddr`. A operação codificada, codifica a operação em si, comparando valor, argumento de operação e argumento de comparação. O pseudocódigo da operação é como este:
+A operação atômica recebe dois parâmetros: `encoded_op` e `uaddr`. A operação codificada codifica a própria operação, o valor de comparação, o argumento da operação e o argumento de comparação. O pseudocódigo para a operação é semelhante a este:
[.programlisting]
....
@@ -855,12 +872,12 @@ oldval = *uaddr2
*uaddr2 = oldval OP oparg
....
-E isso é feito atomicamente. Primeiro, uma cópia do número em `uaddr` é executada e a operação é concluída. O código manipula falhas de página e, se nenhuma falha de página ocorrer, `oldval` é comparado ao argumento `cmparg` com o comparador cmp.
+E isso é feito atomicamente. Primeiro, é feita uma cópia do número em `uaddr` e, em seguida, a operação é realizada. O código lida com faltas de página e, se nenhuma falta de página ocorrer, `oldval` é comparado com o argumento `cmparg` usando o comparador `cmp`.
[[futex-locking]]
===== Bloqueio Futex
-A implementação do Futex usa duas listas de lock que protegndo `sx_lock` e locks globais (Giant ou outra `sx_lock`). Cada operação é executada bloqueada desde o início até o final.
+A implementação do futex utiliza duas listas de bloqueio para proteger o `sx_lock` e os bloqueios globais (seja Giant ou outro `sx_lock`). Cada operação é realizada com bloqueio desde o início até o final.
[[syscall-impl]]
=== Implementação de várias syscalls
@@ -870,7 +887,7 @@ Nesta seção, descreverei algumas syscalls menores que merecem destaque, pois s
[[syscall-at]]
==== *na família de syscalls
-Durante o desenvolvimento do kernel 2.6.16 do Linux(R), os *at syscalls foram adicionados. Essas syscalls (`openat`, por exemplo) funcionam exatamente como suas contrapartes sem-menos, com a pequena exceção do parâmetro `dirfd`. Este parâmetro muda onde o arquivo dado, no qual a syscall deve ser executado, está. Quando o parâmetro `filename` é absoluto `dirfd` é ignorado, mas quando o caminho para o arquivo é relativo, ele é checado. O parâmetro `dirfd` é um diretório relativo ao qual o nome do caminho relativo é verificado. O parâmetro `dirfd` é um file descriptor de algum diretório ou `AT_FDCWD`. Então, por exemplo, a syscall `openat` pode ser assim:
+Durante o desenvolvimento do kernel Linux(R) 2.6.16, as chamadas de sistema *at foram adicionadas. Essas chamadas de sistema (`openat`, por exemplo) funcionam exatamente como suas contrapartes sem o "at", com a pequena exceção do parâmetro `dirfd`. Esse parâmetro altera onde o arquivo fornecido, no qual a chamada de sistema será executada, está localizado. Quando o parâmetro `filename` é absoluto, o `dirfd` é ignorado, mas quando o caminho para o arquivo é relativo, ele entra em jogo. O parâmetro `dirfd` é um diretório relativo ao qual o caminho relativo do arquivo é verificado. O `dirfd` é um descritor de arquivo de algum diretório ou `AT_FDCWD`. Portanto, por exemplo, a chamada de sistema `openat` pode ser assim:
[.programlisting]
....
@@ -882,31 +899,31 @@ openat(AT_FDWCWD, bah\, flags, mode) /* opens /tmp/bah */
openat(stdio, bah\, flags, mode) /* returns error because stdio is not a directory */
....
-Esta infra-estrutura é necessária para evitar corridas ao abrir arquivos fora do diretório de trabalho. Imagine que um processo consiste em duas threads, thread A e thread B. Thread A emite `open (./tmp/foo/bah., Flags, mode)` e antes de retornar ele se antecipa e a thread B é executada. A thread B não se preocupa com as necessidades da thread A e renomeia ou remove o [.filename]#/tmp/foo/#. Nós temos uma corrida. Para evitar isso, podemos abrir o [.filename]#/tmp/foo# e usá-lo como `dirfd` para a syscall `openat`. Isso também permite que o usuário implemente diretórios de trabalho por thread.
+Essa infraestrutura é necessária para evitar corridas ao abrir arquivos fora do diretório de trabalho. Imagine que um processo consista em dois threads, thread A e thread B. A thread A chama `open(./tmp/foo/bah., flags, mode)` e antes de retornar, ela é preemptada e a thread B é executada. A thread B não se importa com as necessidades da thread A e renomeia ou remove [.filename]#/tmp/foo/#. Temos uma corrida. Para evitar isso, podemos abrir [.filename]#/tmp/foo# e usá-lo como `dirfd` para a chamada de sistema `openat`. Isso também permite que o usuário implemente diretórios de trabalho específicos por thread.
-A família do Linux(R) de *at syscalls contém: `linux_openat`, `linux_mkdirat`, `linux_mknodat`, `linux_fchownat`, `linux_futimesat`, `linux_fstatat64`, `linux_unlinkat`, `linux_renameat`, `linux_linkat` , `linux_symlinkat`, `linux_readlinkat`, `linux_fchmodat` e `linux_faccessat`. Tudo isso é implementado usando a rotina modificada man:namei[9] e a simples camada de quebra automática.
+A família de syscalls *at do Linux(R) contém: `linux_openat`, `linux_mkdirat`, `linux_mknodat`, `linux_fchownat`, `linux_futimesat`, `linux_fstatat64`, `linux_unlinkat`, `linux_renameat`, `linux_linkat`, `linux_symlinkat`, `linux_readlinkat`, `linux_fchmodat` e `linux_faccessat`. Todas essas syscalls são implementadas usando a rotina modificada man:namei[9] e uma camada de encapsulamento simples.
[[implementation]]
===== Implementação
-A implementação é feita alterando a rotina man:namei[9] (descrita acima) para obter o parâmetro adicional `dirfd` no sua estrutura `nameidata` , que especifica o ponto inicial da pesquisa do nome do caminho, em vez de usar o diretório de trabalho atual todas as vezes. A resolução de `dirfd` do número do file descriptor para um vnode é feita em *at syscalls nativo. Quando `dirfd` é `AT_FDCWD`, a entrada `dvp` na estrutura `nameidata` é `NULL`, mas `dirfd` é um número diferente, obtemos um arquivo para este file descriptor, verificamos se este arquivo é válido e se há vnode anexado a ele, então obtemos um vnode. Então nós verificamos este vnode por ser um diretório. Na rotina real man:namei[9] simplesmente substituímos a variável `dvp` vnode pela variável `dp` na função man:namei[9], que determina o ponto de partida. O man:namei[9] não é usado diretamente, mas através de um rastreamento de diferentes funções em vários níveis. Por exemplo, o `openat` é assim:
+A implementação é feita alterando a rotina man:namei[9] (descrita anteriormente) para receber um parâmetro adicional `dirfd` em sua estrutura `nameidata`, que especifica o ponto de partida da pesquisa do caminho em vez de usar o diretório de trabalho atual todas as vezes. A resolução do `dirfd` do número de descritor de arquivo para um vnode é feita nas syscalls *at nativas. Quando `dirfd` é `AT_FDCWD`, a entrada `dvp` na estrutura `nameidata` é `NULL`, mas quando `dirfd` é um número diferente, obtemos um arquivo para esse descritor de arquivo, verificamos se esse arquivo é válido e, se houver um vnode associado a ele, obtemos um vnode. Em seguida, verificamos se esse vnode é um diretório. Na própria rotina man:namei[9], simplesmente substituímos o vnode `dvp` pela variável `dp`, que determina o ponto de partida. A rotina man:namei[9] não é usada diretamente, mas sim através de uma sequência de diferentes funções em vários níveis. Por exemplo, o `openat` funciona da seguinte maneira:
[.programlisting]
....
openat() --> kern_openat() --> vn_open() -> namei()
....
-Por esse motivo, `kern_open` e `vn_open` devem ser alterados para incorporar o parâmetro `dirfd` adicional. Nenhuma camada de compatibilidade é criada para esses, porque não há muitos usuários disso e os usuários podem ser facilmente convertidos. Esta implementação geral permite ao FreeBSD implementar suas próprias *at syscalls. Isso está sendo discutido agora.
+Por esse motivo, `kern_open` e `vn_open` devem ser alterados para incorporar o parâmetro adicional `dirfd`. Nenhuma camada de compatibilidade é criada para essas funções porque não há muitos usuários desse recurso e os usuários existentes podem ser facilmente convertidos. Essa implementação geral permite que o FreeBSD implemente seus próprios syscalls *at. Isso está sendo discutido atualmente.
[[ioctl]]
==== Ioctl
-A interface ioctl é bastante frágil devido à sua generalidade. Nós temos que ter em mente que os dispositivos diferem entre Linux(R) e FreeBSD, então alguns cuidados devem ser aplicados para fazer o trabalho de emulação de ioctl corretamente. O manuseio ioctl é implementado em [.filename]#linux_ioctl.c#, onde a função `linux_ioctl` é definida. Esta função simplesmente itera sobre conjuntos de manipuladores ioctl para encontrar um manipulador que implementa um dado comando. A syscall ioctl tem três parâmetros, o file descriptor, comando e um argumento. O comando é um número de 16 bits, que, em teoria, é dividido em alta classe determinante de 8 bits do comando ioctl e 8 bits baixos, que são o comando real dentro do conjunto dado. A emulação aproveita essa divisão. Implementamos manipuladores para cada conjunto, como `sound_handler` ou `disk_handler`. Cada manipulador tem um comando máximo e um comando mínimo definido, que é usado para determinar qual manipulador é usado. Existem pequenos problemas com esta abordagem porque Linux(R) não usa a divisão definida consistentemente, por isso as ioctls para um conjunto diferente estão dentro de um conjunto ao qual não devem pertencer (ioctls genéricos SCSI dentro do cdrom conjunto, etc.). O FreeBSD atualmente não implementa muitos ioctls do Linux(R) (comparado ao NetBSD, por exemplo), mas o plano é portar os do NetBSD. A tendência é usar o ioctls Linux(R) mesmo nos drivers nativos do FreeBSD, devido à fácil portabilidade dos aplicativos.
+A interface ioctl é bastante frágil devido à sua generalidade. Devemos ter em mente que os dispositivos diferem entre o Linux(R) e o FreeBSD, então é necessário ter cuidado para garantir que a emulação do ioctl funcione corretamente. O tratamento do ioctl é implementado em [.filename]#linux_ioctl.c#, onde a função `linux_ioctl` é definida. Essa função simplesmente itera sobre conjuntos de manipuladores de ioctl para encontrar um manipulador que implemente um determinado comando. A chamada de sistema ioctl possui três parâmetros: o descritor de arquivo, o comando e um argumento. O comando é um número de 16 bits, que teoricamente é dividido em 8 bits superiores que determinam a classe do comando ioctl e 8 bits inferiores, que são o comando real dentro do conjunto dado. A emulação aproveita essa divisão. Implementamos manipuladores para cada conjunto, como `sound_handler` ou `disk_handler`. Cada manipulador possui um comando máximo e um comando mínimo definido, que é usado para determinar qual manipulador será usado. Existem pequenos problemas com essa abordagem porque o Linux(R) não usa a divisão de conjunto de forma consistente, então às vezes os ioctl de um conjunto diferente estão dentro de um conjunto ao qual não deveriam pertencer (ioctl genéricos do SCSI dentro do conjunto de cdrom, etc.). Atualmente, o FreeBSD não implementa muitos ioctl do Linux(R) (em comparação com o NetBSD, por exemplo), mas o plano é portá-los do NetBSD. A tendência é usar os ioctl do Linux(R) mesmo nos drivers nativos do FreeBSD devido à facilidade de portar aplicativos.
[[debugging]]
==== Depuração
-Cada syscall deve ser debugável. Para isso, introduzimos uma pequena infra-estrutura. Nós temos o recurso ldebug, que informa se uma dada syscall deve ser depurada (configurável através de um sysctl). Para impressão, temos as macros LMSG e ARGS. Essas são usadas para alterar uma string imprimível para mensagens uniformes de depuração.
+Cada chamada de sistema deve ser passível de depuração. Para esse propósito, introduzimos uma pequena infraestrutura. Temos a facilidade ldebug, que indica se uma determinada chamada de sistema deve ser depurada (configurável através de um sysctl). Para impressão, temos as macros LMSG e ARGS. Essas macros são usadas para modificar uma string imprimível para mensagens de depuração uniformes.
[[conclusion]]
== Conclusão
@@ -914,37 +931,37 @@ Cada syscall deve ser debugável. Para isso, introduzimos uma pequena infra-estr
[[results]]
=== Resultados
-Em abril de 2007, a camada de emulação do Linux(R) é capaz de emular o kernel Linux(R) 2.6.16 muito bem. Os problemas remanescentes dizem respeito a futexes, inacabado na família de syscalls *at, entrega de sinais problemáticos, falta de `epoll` e `inotify` e provavelmente alguns bugs que ainda não descobrimos. Apesar disso, somos capazes de executar basicamente todos os programas Linux(R) incluídos na coleção de ports do FreeBSD com o Fedora Core 4 em 2.6.16 e há alguns relatos rudimentares de sucesso com o Fedora Core 6 em 2.6.16. O linux_base do Fedora Core 6 foi recentemente comprometido permitindo alguns testes adicionais da camada de emulação e nos dando mais algumas dicas onde devemos nos esforçar para implementar o material que está faltando.
+A partir de abril de 2007, a camada de emulação do Linux(R) é capaz de emular bem o kernel Linux(R) 2.6.16. Os problemas restantes envolvem futexes, chamadas de sistema inacabadas da família *at, entrega problemática de sinais, falta de suporte a `epoll` e `inotify`, e provavelmente alguns bugs que ainda não foram descobertos. Apesar disso, somos capazes de executar basicamente todos os programas Linux(R) incluídos na Coleção de Ports do FreeBSD com o Fedora Core 4 no kernel 2.6.16, e existem alguns relatos rudimentares de sucesso com o Fedora Core 6 no kernel 2.6.16. O linux_base do Fedora Core 6 foi recentemente adicionado, permitindo testes adicionais da camada de emulação e fornecendo mais informações sobre onde devemos concentrar nossos esforços na implementação do que está faltando.
-Nós podemos rodar os aplicativos mais usados como o package:www/linux-firefox[], package:net-im/skype[] e alguns jogos da coleção dos ports. Alguns dos programas exibem mau comportamento na emulação 2.6, mas isso está atualmente sob investigação e, espera-se, será corrigido em breve. A única grande aplicação que se sabe que não funciona é o Java(TM) Development Kit do Linux(R) e isto é devido ao requisito de `epoll` habilidade que não está diretamente relacionada ao kernel do Linux(R) 2.6.
+Somos capazes de executar os aplicativos mais usados, como o pacote `www/linux-firefox`, o pacote `net-im/skype` e alguns jogos da Coleção de Ports. Alguns desses programas apresentam comportamento inadequado sob a emulação do 2.6, mas isso está atualmente em investigação e esperamos que seja corrigido em breve. O único grande aplicativo conhecido por não funcionar é o Java(TM) Development Kit do Linux(R), devido ao requisito da facilidade `epoll`, que não está diretamente relacionada ao kernel do Linux(R) 2.6.
-Esperamos habilitar a emulação 2.6.16 por padrão algum tempo depois que o FreeBSD 7.0 for lançado pelo menos para expor as partes da emulação 2.6 para alguns testes mais amplos. Feito isso, podemos mudar para o Fedora Core 6 linux_base, que é o plano final.
+Esperamos habilitar a emulação do 2.6.16 como padrão algum tempo depois do lançamento do FreeBSD 7.0, pelo menos para expor as partes de emulação 2.6 para um teste mais amplo. Uma vez feito isso, podemos mudar para o linux_base do Fedora Core 6, que é o plano final.
[[future-work]]
=== Trabalho futuro
-O trabalho futuro deve focar na correção dos problemas remanescentes com futexes, implementar o restante da família de syscalls, corrigir a entrega de sinal e possivelmente implementar os recursos de `epoll` e `inotify`.
+O trabalho futuro deve se concentrar em corrigir os problemas restantes com futexes, implementar o restante da família de chamadas de sistema *at, corrigir a entrega de sinais e possivelmente implementar as facilidades `epoll` e `inotify`.
Esperamos poder executar os programas mais importantes com perfeição em breve, por isso poderemos alternar para a emulação 2.6 por padrão e fazer do Fedora Core 6 o linux_base padrão porque o nosso atualmente usado Fedora Core 4 não é mais suportado.
-O outro objetivo possível é compartilhar nosso código com o NetBSD e o DragonflyBSD. O NetBSD tem algum suporte para emulação 2.6, mas está longe de ser concluído e não foi realmente testado. O DragonflyBSD manifestou algum interesse em portar as melhorias do 2.6.
+Outro objetivo possível é compartilhar nosso código com o NetBSD e o DragonflyBSD. O NetBSD tem algum suporte para emulação 2.6, mas está longe de estar completo e não foi realmente testado. O DragonflyBSD mostrou interesse em portar as melhorias do 2.6.
-Geralmente, como o Linux(R) se desenvolve, gostaríamos de acompanhar seu desenvolvimento, implementando a syscalls recém-adicionado. Splice vem em mente primeiro. Algumas syscalls já implementadas também são altamente danificadas, por exemplo `mremap` e outras. Alguns aprimoramentos de desempenho também podem ser feitos, um lock mais refinado e outros.
+Em geral, à medida que o Linux(R) se desenvolve, gostaríamos de acompanhar o seu desenvolvimento, implementando as novas chamadas de sistema adicionadas. O `splice` é uma delas que vem à mente em primeiro lugar. Algumas chamadas de sistema já implementadas também podem ser aprimoradas, por exemplo, `mremap` e outras. Também podem ser feitas melhorias de desempenho, como bloqueio mais refinado e outros.
[[team]]
=== Equipe
Eu colaborei neste projeto com (em ordem alfabética):
-* John Baldwin mailto:jhb@FreeBSD.org[jhb@FreeBSD.org]
-* Konstantin Belousov mailto:kib@FreeBSD.org[kib@FreeBSD.org]
+* `{jhb}`
+* `{kib}`
* Emmanuel Dreyfus
* Scot Hetzel
-* Jung-uk Kim mailto:jkim@FreeBSD.org[jkim@FreeBSD.org]
-* Alexander Leidinger mailto:netchild@FreeBSD.org[netchild@FreeBSD.org]
-* Suleiman Souhlal mailto:ssouhlal@FreeBSD.org[ssouhlal@FreeBSD.org]
+* `{jkim}`
+* `{netchild}`
+* `{ssouhlal}`
* Li Xiao
-* David Xu mailto:davidxu@FreeBSD.org[davidxu@FreeBSD.org]
+* `{davidxu}`
Gostaria de agradecer a todas as pessoas por seus conselhos, revisões de código e apoio geral.
diff --git a/documentation/content/pt-br/articles/linux-emulation/_index.po b/documentation/content/pt-br/articles/linux-emulation/_index.po
new file mode 100644
index 0000000000..6b2b16255a
--- /dev/null
+++ b/documentation/content/pt-br/articles/linux-emulation/_index.po
@@ -0,0 +1,4509 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-05-21 16:43+0100\n"
+"PO-Revision-Date: 2023-05-21 15:24+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articleslinux-emulation_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1
+#, no-wrap
+msgid "A technical description about the internals of the Linux emulation layer in FreeBSD"
+msgstr "Uma descrição técnica sobre os internals da camada de emulação do Linux no FreeBSD"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1
+#, no-wrap
+msgid "Linux® emulation in FreeBSD"
+msgstr "Emulação do Linux® no FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/linux-emulation/_index.adoc:11
+#, no-wrap
+msgid "Linux(R) emulation in FreeBSD"
+msgstr "Emulação do Linux(R) no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:54
+msgid ""
+"This masters thesis deals with updating the Linux(R) emulation layer (the so "
+"called _Linuxulator_). The task was to update the layer to match the "
+"functionality of Linux(R) 2.6. As a reference implementation, the Linux(R) "
+"2.6.16 kernel was chosen. The concept is loosely based on the NetBSD "
+"implementation. Most of the work was done in the summer of 2006 as a part "
+"of the Google Summer of Code students program. The focus was on bringing "
+"the _NPTL_ (new POSIX(R) thread library) support into the emulation layer, "
+"including _TLS_ (thread local storage), _futexes_ (fast user space mutexes), "
+"_PID mangling_, and some other minor things. Many small problems were "
+"identified and fixed in the process. My work was integrated into the main "
+"FreeBSD source repository and will be shipped in the upcoming 7.0R release. "
+"We, the emulation development team, are working on making the Linux(R) 2.6 "
+"emulation the default emulation layer in FreeBSD."
+msgstr ""
+"Esta tese de mestrado trata da atualização da camada de emulação do Linux(R) "
+"(chamada de _Linuxulator_). A tarefa consistiu em atualizar a camada para "
+"corresponder à funcionalidade do Linux(R) 2.6. Como implementação de "
+"referência, foi escolhido o kernel Linux(R) 2.6.16. O conceito é vagamente "
+"baseado na implementação do NetBSD. A maior parte do trabalho foi realizada "
+"no verão de 2006 como parte do programa de estudantes do Google Summer of "
+"Code. O foco foi trazer o suporte do _NPTL_ (nova biblioteca de threads "
+"POSIX(R)) para a camada de emulação, incluindo _TLS_ (armazenamento local de "
+"threads), _futexes_ (mutexes de espaço do usuário rápidos), _PID mangling_ e "
+"algumas outras pequenas coisas. Muitos problemas pequenos foram "
+"identificados e corrigidos durante o processo. Meu trabalho foi integrado ao "
+"repositório principal do FreeBSD e será incluído na próxima versão 7.0R. "
+"Nós, a equipe de desenvolvimento de emulação, estamos trabalhando para "
+"tornar a emulação do Linux(R) 2.6 a camada de emulação padrão no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:56
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:60
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:67
+msgid ""
+"In the last few years the open source UNIX(R) based operating systems "
+"started to be widely deployed on server and client machines. Among these "
+"operating systems I would like to point out two: FreeBSD, for its BSD "
+"heritage, time proven code base and many interesting features and Linux(R) "
+"for its wide user base, enthusiastic open developer community and support "
+"from large companies. FreeBSD tends to be used on server class machines "
+"serving heavy duty networking tasks with less usage on desktop class "
+"machines for ordinary users. While Linux(R) has the same usage on servers, "
+"but it is used much more by home based users. This leads to a situation "
+"where there are many binary only programs available for Linux(R) that lack "
+"support for FreeBSD."
+msgstr ""
+"Nos últimos anos, os sistemas operacionais de código aberto baseados em "
+"UNIX(R) começaram a ser amplamente implantados em servidores e máquinas "
+"clientes. Entre esses sistemas operacionais, gostaria de destacar dois: o "
+"FreeBSD, por sua herança BSD, código comprovado ao longo do tempo e muitos "
+"recursos interessantes, e o Linux(R), por sua ampla base de usuários, "
+"comunidade de desenvolvedores entusiastas e apoio de grandes empresas. O "
+"FreeBSD tende a ser usado em máquinas de classe servidor que executam "
+"tarefas de rede intensivas, com menos uso em máquinas de classe desktop para "
+"usuários comuns. Enquanto o Linux(R) tem o mesmo uso em servidores, mas é "
+"usado muito mais por usuários domésticos. Isso leva a uma situação em que há "
+"muitos programas somente binários disponíveis para Linux(R) que não possuem "
+"suporte para o FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:69
+msgid ""
+"Naturally, a need for the ability to run Linux(R) binaries on a FreeBSD "
+"system arises and this is what this thesis deals with: the emulation of the "
+"Linux(R) kernel in the FreeBSD operating system."
+msgstr ""
+"Naturalmente, surge a necessidade da capacidade de executar binários "
+"Linux(R) em um sistema FreeBSD e é isso que esta tese trata: a emulação do "
+"kernel Linux(R) no sistema operacional FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:72
+msgid ""
+"During the Summer of 2006 Google Inc. sponsored a project which focused on "
+"extending the Linux(R) emulation layer (the so called Linuxulator) in "
+"FreeBSD to include Linux(R) 2.6 facilities. This thesis is written as a "
+"part of this project."
+msgstr ""
+"Durante o verão de 2006, a Google Inc. patrocinou um projeto que se "
+"concentrou na extensão da camada de emulação do Linux® (chamada de "
+"Linuxulator) no FreeBSD para incluir as funcionalidades do Linux® 2.6. Esta "
+"tese foi escrita como parte deste projeto."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:74
+#, no-wrap
+msgid "A look inside..."
+msgstr "Uma olhada por dentro..."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:80
+msgid ""
+"In this section we are going to describe every operating system in "
+"question. How they deal with syscalls, trapframes etc., all the low-level "
+"stuff. We also describe the way they understand common UNIX(R) primitives "
+"like what a PID is, what a thread is, etc. In the third subsection we talk "
+"about how UNIX(R) on UNIX(R) emulation could be done in general."
+msgstr ""
+"Nesta seção, vamos descrever cada sistema operacional em questão. Como eles "
+"lidam com syscalls, trapframes, etc., tudo o que é de baixo nível. Também "
+"descrevemos a maneira como eles entendem os recursos comuns do UNIX(R), como "
+"o que é um PID, o que é uma thread, etc. Na terceira subseção, falamos sobre "
+"como a emulação do UNIX(R) em cima do UNIX(R) poderia ser feita de maneira "
+"geral."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:82
+#, no-wrap
+msgid "What is UNIX(R)"
+msgstr "O que é UNIX(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:94
+msgid ""
+"UNIX(R) is an operating system with a long history that has influenced "
+"almost every other operating system currently in use. Starting in the "
+"1960s, its development continues to this day (although in different "
+"projects). UNIX(R) development soon forked into two main ways: the BSDs and "
+"System III/V families. They mutually influenced themselves by growing a "
+"common UNIX(R) standard. Among the contributions originated in BSD we can "
+"name virtual memory, TCP/IP networking, FFS, and many others. The System V "
+"branch contributed to SysV interprocess communication primitives, copy-on-"
+"write, etc. UNIX(R) itself does not exist any more but its ideas have been "
+"used by many other operating systems world wide thus forming the so called "
+"UNIX(R)-like operating systems. These days the most influential ones are "
+"Linux(R), Solaris, and possibly (to some extent) FreeBSD. There are in-"
+"company UNIX(R) derivatives (AIX, HP-UX etc.), but these have been more and "
+"more migrated to the aforementioned systems. Let us summarize typical "
+"UNIX(R) characteristics."
+msgstr ""
+"UNIX(R) é um sistema operacional com uma longa história que influenciou "
+"praticamente todos os outros sistemas operacionais atualmente em uso. Desde "
+"os anos 1960, seu desenvolvimento continua até os dias de hoje (embora em "
+"projetos diferentes). O desenvolvimento do UNIX(R) logo se dividiu em duas "
+"principais vertentes: as famílias BSDs e System III/V. Elas se influenciaram "
+"mutuamente ao adotar um padrão comum para o UNIX(R). Entre as contribuições "
+"originadas no BSD, podemos citar memória virtual, rede TCP/IP, FFS e muitas "
+"outras. O branch do System V contribuiu com primitivas de comunicação "
+"interprocesso do SysV, copy-on-write, etc. O UNIX(R) em si não existe mais, "
+"mas suas ideias foram utilizadas por muitos outros sistemas operacionais ao "
+"redor do mundo, formando o que chamamos de sistemas operacionais semelhantes "
+"ao UNIX(R). Nos dias atuais, os mais influentes são Linux(R), Solaris e "
+"possivelmente (em certa medida) o FreeBSD. Existem também derivados do "
+"UNIX(R) desenvolvidos por empresas (AIX, HP-UX etc.), mas eles têm migrado "
+"cada vez mais para os sistemas mencionados anteriormente. Vamos resumir as "
+"características típicas do UNIX(R)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:96
+#: documentation/content/en/articles/linux-emulation/_index.adoc:187
+#: documentation/content/en/articles/linux-emulation/_index.adoc:279
+#, no-wrap
+msgid "Technical details"
+msgstr "Detalhes técnicos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:104
+msgid ""
+"Every running program constitutes a process that represents a state of the "
+"computation. Running process is divided between kernel-space and user-"
+"space. Some operations can be done only from kernel space (dealing with "
+"hardware etc.), but the process should spend most of its lifetime in the "
+"user space. The kernel is where the management of the processes, hardware, "
+"and low-level details take place. The kernel provides a standard unified "
+"UNIX(R) API to the user space. The most important ones are covered below."
+msgstr ""
+"Cada programa em execução constitui um processo que representa um estado da "
+"computação. Um processo em execução é dividido entre o espaço do kernel e o "
+"espaço do usuário. Algumas operações só podem ser realizadas a partir do "
+"espaço do kernel (lidar com hardware etc.), mas o processo deve passar a "
+"maior parte de sua vida útil no espaço do usuário. O kernel é onde ocorre o "
+"gerenciamento dos processos, hardware e detalhes de baixo nível. O kernel "
+"fornece uma API UNIX(R) padronizada e unificada para o espaço do usuário. As "
+"mais importantes estão descritas abaixo."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:106
+#, no-wrap
+msgid "Communication between kernel and user space process"
+msgstr "Comunicação entre o kernel e o processo de espaço do usuário"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:114
+msgid ""
+"Common UNIX(R) API defines a syscall as a way to issue commands from a user "
+"space process to the kernel. The most common implementation is either by "
+"using an interrupt or specialized instruction (think of `SYSENTER`/`SYSCALL` "
+"instructions for ia32). Syscalls are defined by a number. For example in "
+"FreeBSD, the syscall number 85 is the man:swapon[2] syscall and the syscall "
+"number 132 is man:mkfifo[2]. Some syscalls need parameters, which are "
+"passed from the user-space to the kernel-space in various ways "
+"(implementation dependant). Syscalls are synchronous."
+msgstr ""
+"A API comum do UNIX(R) define uma syscall como uma forma de emitir comandos "
+"de um processo do espaço do usuário para o kernel. A implementação mais "
+"comum é feita por meio de uma interrupção ou instrução especializada (pense "
+"nas instruções `SYSENTER`/`SYSCALL` para ia32). As syscalls são definidas "
+"por um número. Por exemplo, no FreeBSD, o número da syscall 85 é a man:"
+"swapon[2] e o número da syscall 132 é a man:mkfifo[2]. Algumas syscalls "
+"requerem parâmetros, que são passados do espaço do usuário para o espaço do "
+"kernel de várias maneiras (dependendo da implementação). As syscalls são "
+"síncronas."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:118
+msgid ""
+"Another possible way to communicate is by using a _trap_. Traps occur "
+"asynchronously after some event occurs (division by zero, page fault etc.). "
+"A trap can be transparent for a process (page fault) or can result in a "
+"reaction like sending a _signal_ (division by zero)."
+msgstr ""
+"Outra forma possível de comunicação é por meio de uma _trap_. As traps "
+"ocorrem de forma assíncrona após algum evento ocorrer (divisão por zero, "
+"falta de página etc.). Uma trap pode ser transparente para um processo "
+"(falta de página) ou pode resultar em uma reação, como o envio de um _sinal_ "
+"(divisão por zero)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:120
+#, no-wrap
+msgid "Communication between processes"
+msgstr "Comunicação entre processos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:125
+msgid ""
+"There are other APIs (System V IPC, shared memory etc.) but the single most "
+"important API is signal. Signals are sent by processes or by the kernel and "
+"received by processes. Some signals can be ignored or handled by a user "
+"supplied routine, some result in a predefined action that cannot be altered "
+"or ignored."
+msgstr ""
+"Existem outras APIs (System V IPC, memória compartilhada, etc.), mas a API "
+"mais importante é o sinal. Os sinais são enviados por processos ou pelo "
+"kernel e recebidos por processos. Alguns sinais podem ser ignorados ou "
+"tratados por uma rotina fornecida pelo usuário, enquanto outros resultam em "
+"uma ação predefinida que não pode ser alterada ou ignorada."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:127
+#, no-wrap
+msgid "Process management"
+msgstr "Gerenciamento de processos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:137
+msgid ""
+"Kernel instances are processed first in the system (so called init). Every "
+"running process can create its identical copy using the man:fork[2] "
+"syscall. Some slightly modified versions of this syscall were introduced "
+"but the basic semantic is the same. Every running process can morph into "
+"some other process using the man:exec[3] syscall. Some modifications of "
+"this syscall were introduced but all serve the same basic purpose. "
+"Processes end their lives by calling the man:exit[2] syscall. Every process "
+"is identified by a unique number called PID. Every process has a defined "
+"parent (identified by its PID)."
+msgstr ""
+"As instâncias do kernel são processadas primeiro no sistema (chamado de "
+"init). Todo processo em execução pode criar uma cópia idêntica de si mesmo "
+"usando a syscall man:fork[2]. Algumas versões ligeiramente modificadas dessa "
+"syscall foram introduzidas, mas a semântica básica é a mesma. Todo processo "
+"em execução pode se transformar em outro processo usando a syscall man:"
+"exec[3]. Foram introduzidas algumas modificações nessa syscall, mas todas "
+"servem ao mesmo propósito básico. Os processos encerram suas vidas chamando "
+"a syscall man:exit[2]. Cada processo é identificado por um número único "
+"chamado PID. Todo processo possui um processo pai (parent) definido "
+"(identificado pelo seu PID)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:139
+#, no-wrap
+msgid "Thread management"
+msgstr "Gerenciamento de threads"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:145
+msgid ""
+"Traditional UNIX(R) does not define any API nor implementation for "
+"threading, while POSIX(R) defines its threading API but the implementation "
+"is undefined. Traditionally there were two ways of implementing threads. "
+"Handling them as separate processes (1:1 threading) or envelope the whole "
+"thread group in one process and managing the threading in userspace (1:N "
+"threading). Comparing main features of each approach:"
+msgstr ""
+"No traditional UNIX(R), não é definida nenhuma API nem implementação para "
+"threads, enquanto o POSIX(R) define sua API de threads, mas a implementação "
+"é indefinida. Tradicionalmente, havia duas maneiras de implementar threads. "
+"Tratá-los como processos separados (threading 1:1) ou envolver todo o grupo "
+"de threads em um único processo e gerenciar as threads no espaço do usuário "
+"(threading 1:N). Vamos comparar as principais características de cada "
+"abordagem:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:147
+msgid "1:1 threading"
+msgstr "1:1 threading"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:149
+msgid "heavyweight threads"
+msgstr "Threads pesadas"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:150
+msgid ""
+"the scheduling cannot be altered by the user (slightly mitigated by the "
+"POSIX(R) API)"
+msgstr ""
+"O agendamento não pode ser alterado pelo usuário (ligeiramente atenuada pela "
+"API POSIX(R))"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:151
+msgid "no syscall wrapping necessary"
+msgstr "não necessita de envolvimento do syscall"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:152
+msgid "can utilize multiple CPUs"
+msgstr "pode utilizar várias CPUs"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:154
+msgid "1:N threading"
+msgstr "1: N threading"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:156
+msgid "lightweight threads"
+msgstr "threads leves"
+
+#. type: Bullet: '+ '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:157
+msgid "scheduling can be easily altered by the user"
+msgstr "agendamento pode ser facilmente alterado pelo usuário"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:158
+msgid "syscalls must be wrapped"
+msgstr "As chamadas de sistema devem ser encapsuladas"
+
+#. type: Bullet: '- '
+#: documentation/content/en/articles/linux-emulation/_index.adoc:159
+msgid "cannot utilize more than one CPU"
+msgstr "Não pode utilizar mais do que uma CPU"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:161
+#, no-wrap
+msgid "What is FreeBSD?"
+msgstr "O que é o FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:169
+msgid ""
+"The FreeBSD project is one of the oldest open source operating systems "
+"currently available for daily use. It is a direct descendant of the genuine "
+"UNIX(R) so it could be claimed that it is a true UNIX(R) although licensing "
+"issues do not permit that. The start of the project dates back to the early "
+"1990's when a crew of fellow BSD users patched the 386BSD operating system. "
+"Based on this patchkit a new operating system arose named FreeBSD for its "
+"liberal license. Another group created the NetBSD operating system with "
+"different goals in mind. We will focus on FreeBSD."
+msgstr ""
+"O projeto FreeBSD é um dos sistemas operacionais de código aberto mais "
+"antigos atualmente disponíveis para uso diário. É um descendente direto do "
+"UNIX(R) genuíno, portanto, poderia ser considerado um verdadeiro UNIX(R), "
+"embora questões de licenciamento não permitam isso. O início do projeto "
+"remonta ao início dos anos 1990, quando um grupo de usuários do BSD "
+"modificou o sistema operacional 386BSD. Com base neste conjunto de patches, "
+"um novo sistema operacional surgiu, chamado FreeBSD por causa de sua licença "
+"liberal. Outro grupo criou o sistema operacional NetBSD com objetivos "
+"diferentes em mente. Vamos nos concentrar no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:174
+msgid ""
+"FreeBSD is a modern UNIX(R)-based operating system with all the features of "
+"UNIX(R). Preemptive multitasking, multiuser facilities, TCP/IP networking, "
+"memory protection, symmetric multiprocessing support, virtual memory with "
+"merged VM and buffer cache, they are all there. One of the interesting and "
+"extremely useful features is the ability to emulate other UNIX(R)-like "
+"operating systems. As of December 2006 and 7-CURRENT development, the "
+"following emulation functionalities are supported:"
+msgstr ""
+"O FreeBSD é um sistema operacional baseado em UNIX(R) moderno, com todos os "
+"recursos do UNIX(R). Multitarefa preemptiva, facilidades multiusuário, rede "
+"TCP/IP, proteção de memória, suporte a multiprocessamento simétrico , "
+"memória virtual com cache de memória e buffer combinados, todos estão "
+"presentes. Uma das características interessantes e extremamente úteis é a "
+"capacidade de emular outros sistemas operacionais semelhantes ao UNIX(R). A "
+"partir de dezembro de 2006 e do desenvolvimento 7-CURRENT, as seguintes "
+"funcionalidades de emulação são suportadas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:176
+msgid "FreeBSD/i386 emulation on FreeBSD/amd64"
+msgstr "Emulação FreeBSD/i386 no FreeBSD/amd64"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:177
+msgid "FreeBSD/i386 emulation on FreeBSD/ia64"
+msgstr "Emulação de FreeBSD/i386 no FreeBSD/ia64"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:178
+msgid "Linux(R)-emulation of Linux(R) operating system on FreeBSD"
+msgstr "Emulação do sistema operacional Linux(R) no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:179
+msgid "NDIS-emulation of Windows networking drivers interface"
+msgstr "Emulação de NDIS da interface de drivers de rede do Windows"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:180
+msgid "NetBSD-emulation of NetBSD operating system"
+msgstr "Emulação de NetBSD do sistema operacional NetBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:181
+msgid "PECoff-support for PECoff FreeBSD executables"
+msgstr "Suporte PECoff para executáveis PECoff do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:182
+msgid "SVR4-emulation of System V revision 4 UNIX(R)"
+msgstr "SVR4-emulação do UNIX(R) da revisão 4 do System V"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:185
+msgid ""
+"Actively developed emulations are the Linux(R) layer and various FreeBSD-on-"
+"FreeBSD layers. Others are not supposed to work properly nor be usable "
+"these days."
+msgstr ""
+"As emulações desenvolvidas ativamente são a camada Linux(R) e várias camadas "
+"FreeBSD-on-FreeBSD. Outras não devem funcionar corretamente ou serem "
+"utilizáveis atualmente."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:195
+msgid ""
+"FreeBSD is traditional flavor of UNIX(R) in the sense of dividing the run of "
+"processes into two halves: kernel space and user space run. There are two "
+"types of process entry to the kernel: a syscall and a trap. There is only "
+"one way to return. In the subsequent sections we will describe the three "
+"gates to/from the kernel. The whole description applies to the i386 "
+"architecture as the Linuxulator only exists there but the concept is similar "
+"on other architectures. The information was taken from [1] and the source "
+"code."
+msgstr ""
+"O FreeBSD é uma variante tradicional do UNIX(R) no sentido de dividir a "
+"execução dos processos em dois espaços: espaço do kernel e espaço do "
+"usuário. Existem dois tipos de entrada de processo no kernel: uma syscall e "
+"uma armadilha (trap). Existe apenas uma maneira de retornar. Nas seções "
+"subsequentes, descreveremos os três portões de/para o kernel. Toda a "
+"descrição se aplica à arquitetura i386, já que o Linuxulator existe apenas "
+"lá, mas o conceito é semelhante em outras arquiteturas. As informações foram "
+"retiradas de [1] e do código-fonte."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:197
+#, no-wrap
+msgid "System entries"
+msgstr "Entradas do sistema"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:204
+msgid ""
+"FreeBSD has an abstraction called an execution class loader, which is a "
+"wedge into the man:execve[2] syscall. This employs a structure `sysentvec`, "
+"which describes an executable ABI. It contains things like errno "
+"translation table, signal translation table, various functions to serve "
+"syscall needs (stack fixup, coredumping, etc.). Every ABI the FreeBSD "
+"kernel wants to support must define this structure, as it is used later in "
+"the syscall processing code and at some other places. System entries are "
+"handled by trap handlers, where we can access both the kernel-space and the "
+"user-space at once."
+msgstr ""
+"O O FreeBSD tem uma abstração chamada de carregador de classe de execução, "
+"que é uma cunha no syscall man:execve[2]. Isso utiliza uma estrutura "
+"`sysentvec`, que descreve uma ABI executável. Ela contém coisas como uma "
+"tabela de tradução de errno, uma tabela de tradução de sinais, várias "
+"funções para atender às necessidades de syscall (ajuste de pilha, "
+"coredumping, etc.). Cada ABI que o kernel do FreeBSD deseja suportar deve "
+"definir essa estrutura, pois ela é usada posteriormente no código de "
+"processamento de syscall e em alguns outros lugares. As entradas do sistema "
+"são tratadas por manipuladores de interrupção, onde podemos acessar tanto o "
+"espaço do kernel quanto o espaço do usuário de uma só vez."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:206
+#: documentation/content/en/articles/linux-emulation/_index.adoc:288
+#, no-wrap
+msgid "Syscalls"
+msgstr "Syscalls"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:209
+msgid ""
+"Syscalls on FreeBSD are issued by executing interrupt `0x80` with register "
+"`%eax` set to a desired syscall number with arguments passed on the stack."
+msgstr ""
+"As chamadas de sistema (syscalls) no FreeBSD são realizadas executando a "
+"interrupção `0x80` com o registro `%eax` definido para o número desejado da "
+"syscall e os argumentos passados na pilha."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:215
+msgid ""
+"When a process issues an interrupt `0x80`, the `int0x80` syscall trap "
+"handler is issued (defined in [.filename]#sys/i386/i386/exception.s#), which "
+"prepares arguments (i.e. copies them on to the stack) for a call to a C "
+"function man:syscall[2] (defined in [.filename]#sys/i386/i386/trap.c#), "
+"which processes the passed in trapframe. The processing consists of "
+"preparing the syscall (depending on the `sysvec` entry), determining if the "
+"syscall is 32-bit or 64-bit one (changes size of the parameters), then the "
+"parameters are copied, including the syscall. Next, the actual syscall "
+"function is executed with processing of the return code (special cases for "
+"`ERESTART` and `EJUSTRETURN` errors). Finally an `userret()` is scheduled, "
+"switching the process back to the users-pace. The parameters to the actual "
+"syscall handler are passed in the form of `struct thread *td`, `struct "
+"syscall args *` arguments where the second parameter is a pointer to the "
+"copied in structure of parameters."
+msgstr ""
+"Quando um processo emite a interrupção `0x80`, o tratador de interrupção "
+"`int0x80` da syscall é acionado (definido em [.filename]#sys/i386/i386/"
+"exception.s#), que prepara os argumentos (ou seja, copia-os para a pilha) "
+"para uma chamada à função C man:syscall[2] (definida em [.filename]#sys/i386/"
+"i386/trap.c#), que processa o trapframe passado. O processamento consiste em "
+"preparar a syscall (dependendo da entrada `sysvec`), determinar se a syscall "
+"é de 32 bits ou 64 bits (alterando o tamanho dos parâmetros), em seguida, os "
+"parâmetros são copiados, incluindo a syscall. Em seguida, a função da "
+"syscall real é executada com o processamento do código de retorno (casos "
+"especiais para erros `ERESTART` e `EJUSTRETURN`). Por fim, é agendado um "
+"`userret()`, alternando o processo de volta para o espaço do usuário. Os "
+"parâmetros para o manipulador da syscall real são passados na forma de "
+"`struct thread *td`, `struct syscall args *`, em que o segundo parâmetro é "
+"um ponteiro para a estrutura de parâmetros copiada."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:217
+#: documentation/content/en/articles/linux-emulation/_index.adoc:307
+#: documentation/content/en/articles/linux-emulation/_index.adoc:794
+#, no-wrap
+msgid "Traps"
+msgstr "Armadilhas (Traps)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:224
+msgid ""
+"Handling of traps in FreeBSD is similar to the handling of syscalls. "
+"Whenever a trap occurs, an assembler handler is called. It is chosen "
+"between alltraps, alltraps with regs pushed or calltrap depending on the "
+"type of the trap. This handler prepares arguments for a call to a C "
+"function `trap()` (defined in [.filename]#sys/i386/i386/trap.c#), which then "
+"processes the occurred trap. After the processing it might send a signal to "
+"the process and/or exit to userland using `userret()`."
+msgstr ""
+"O tratamento de traps no FreeBSD é semelhante ao tratamento de syscalls. "
+"Sempre que ocorre uma trap, um manipulador em assembly é chamado. Ele é "
+"escolhido entre alltraps, alltraps com registradores empurrados ou calltrap, "
+"dependendo do tipo de trap. Esse manipulador prepara os argumentos para uma "
+"chamada à função em C `trap()` (definida em [.filename]#sys/i386/i386/trap."
+"c#), que então processa a trap ocorrida. Após o processamento, pode ser "
+"enviado um sinal para o processo e/ou retornar para o espaço do usuário "
+"usando `userret()`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:226
+#: documentation/content/en/articles/linux-emulation/_index.adoc:312
+#, no-wrap
+msgid "Exits"
+msgstr "Saídas"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:230
+msgid ""
+"Exits from kernel to userspace happen using the assembler routine `doreti` "
+"regardless of whether the kernel was entered via a trap or via a syscall. "
+"This restores the program status from the stack and returns to the userspace."
+msgstr ""
+"As saídas do kernel para o espaço do usuário acontecem usando a rotina em "
+"assembly `doreti`, independentemente se o kernel foi acessado por uma "
+"interrupção (trap) ou por uma chamada de sistema. Isso restaura o status do "
+"programa da pilha e retorna para o espaço do usuário."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:232
+#: documentation/content/en/articles/linux-emulation/_index.adoc:318
+#, no-wrap
+msgid "UNIX(R) primitives"
+msgstr "Primitivas do UNIX(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:238
+msgid ""
+"FreeBSD operating system adheres to the traditional UNIX(R) scheme, where "
+"every process has a unique identification number, the so called _PID_ "
+"(Process ID). PID numbers are allocated either linearly or randomly ranging "
+"from `0` to `PID_MAX`. The allocation of PID numbers is done using linear "
+"searching of PID space. Every thread in a process receives the same PID "
+"number as result of the man:getpid[2] call."
+msgstr ""
+"O sistema operacional FreeBSD adere ao esquema tradicional do UNIX(R), onde "
+"cada processo possui um número de identificação exclusivo, chamado de _PID_ "
+"(Process ID). Os números de PID são alocados linearmente ou aleatoriamente, "
+"variando de `0` a `PID_MAX`. A alocação dos números de PID é feita usando "
+"busca linear no espaço de PID. Cada thread em um processo recebe o mesmo "
+"número de PID como resultado da chamada do man:getpid[2]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:249
+msgid ""
+"There are currently two ways to implement threading in FreeBSD. The first "
+"way is M:N threading followed by the 1:1 threading model. The default "
+"library used is M:N threading (`libpthread`) and you can switch at runtime "
+"to 1:1 threading (`libthr`). The plan is to switch to 1:1 library by "
+"default soon. Although those two libraries use the same kernel primitives, "
+"they are accessed through different API(es). The M:N library uses the "
+"`kse_*` family of syscalls while the 1:1 library uses the `thr_*` family of "
+"syscalls. Due to this, there is no general concept of thread ID shared "
+"between kernel and userspace. Of course, both threading libraries implement "
+"the pthread thread ID API. Every kernel thread (as described by `struct "
+"thread`) has td tid identifier but this is not directly accessible from "
+"userland and solely serves the kernel's needs. It is also used for 1:1 "
+"threading library as pthread's thread ID but handling of this is internal to "
+"the library and cannot be relied on."
+msgstr ""
+"Atualmente, existem duas maneiras de implementar threading no FreeBSD. A "
+"primeira maneira é a modelagem de threads M:N, seguida pelo modelo de thread "
+"1:1. A biblioteca padrão usada é a de thread M:N (`libpthread`), e você pode "
+"alternar em tempo de execução para a thread 1:1 (`libthr`). O plano é mudar "
+"em breve para a biblioteca 1:1 por padrão. Embora essas duas bibliotecas "
+"usem as mesmas primitivas do kernel, elas são acessadas por meio de APIs "
+"diferentes. A biblioteca M:N usa a família de syscalls `kse_*`, enquanto a "
+"biblioteca 1:1 usa a família de syscalls `thr_*`. Devido a isso, não há um "
+"conceito geral de ID de thread compartilhado entre o espaço do kernel e o "
+"espaço do usuário. Claro, ambas as bibliotecas de threads implementam a API "
+"de ID de thread pthread. Cada thread do kernel (conforme descrito por "
+"`struct thread`) tem um identificador `td tid`, mas isso não é acessível "
+"diretamente do espaço do usuário e serve exclusivamente às necessidades do "
+"kernel. Também é usado para a biblioteca de thread 1:1 como ID de thread "
+"pthread, mas o tratamento disso é interno à biblioteca e não se pode confiar."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:257
+msgid ""
+"As stated previously there are two implementations of threading in FreeBSD. "
+"The M:N library divides the work between kernel space and userspace. Thread "
+"is an entity that gets scheduled in the kernel but it can represent various "
+"number of userspace threads. M userspace threads get mapped to N kernel "
+"threads thus saving resources while keeping the ability to exploit "
+"multiprocessor parallelism. Further information about the implementation "
+"can be obtained from the man page or [1]. The 1:1 library directly maps a "
+"userland thread to a kernel thread thus greatly simplifying the scheme. "
+"None of these designs implement a fairness mechanism (such a mechanism was "
+"implemented but it was removed recently because it caused serious slowdown "
+"and made the code more difficult to deal with)."
+msgstr ""
+"Como mencionado anteriormente, existem duas implementações de threading no "
+"FreeBSD. A biblioteca M:N divide o trabalho entre o espaço do kernel e o "
+"espaço do usuário. Uma thread é uma entidade agendada no kernel, mas pode "
+"representar vários threads no espaço do usuário. M threads no espaço do "
+"usuário são mapeadas para N threads no kernel, economizando recursos e "
+"aproveitando o paralelismo de multiprocessadores. Mais informações sobre a "
+"implementação podem ser obtidas na página do manual ou [1]. A biblioteca 1:1 "
+"mapeia diretamente um thread do espaço do usuário para um thread do kernel, "
+"simplificando bastante o esquema. Nenhum desses designs implementa um "
+"mecanismo de justiça (um mecanismo desse tipo foi implementado, mas foi "
+"removido recentemente porque causava uma desaceleração significativa e "
+"tornava o código mais difícil de lidar)."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:259
+#, no-wrap
+msgid "What is Linux(R)"
+msgstr "O que é o Linux(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:263
+msgid ""
+"Linux(R) is a UNIX(R)-like kernel originally developed by Linus Torvalds, "
+"and now being contributed to by a massive crowd of programmers all around "
+"the world. From its mere beginnings to today, with wide support from "
+"companies such as IBM or Google, Linux(R) is being associated with its fast "
+"development pace, full hardware support and benevolent dictator model of "
+"organization."
+msgstr ""
+"O Linux(R) é um kernel semelhante ao UNIX(R) originalmente desenvolvido por "
+"Linus Torvalds e que agora recebe contribuições de uma grande comunidade de "
+"programadores ao redor do mundo. Desde os seus humildes começos até os dias "
+"de hoje, com amplo suporte de empresas como IBM e Google, o Linux(R) é "
+"associado à sua rápida velocidade de desenvolvimento, suporte completo de "
+"hardware e modelo de organização com um ditador benevolente."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:267
+msgid ""
+"Linux(R) development started in 1991 as a hobbyist project at University of "
+"Helsinki in Finland. Since then it has obtained all the features of a "
+"modern UNIX(R)-like OS: multiprocessing, multiuser support, virtual memory, "
+"networking, basically everything is there. There are also highly advanced "
+"features like virtualization etc."
+msgstr ""
+"O desenvolvimento do Linux(R) começou em 1991 como um projeto de hobby na "
+"Universidade de Helsinki, na Finlândia. Desde então, ele adquiriu todas as "
+"características de um sistema operacional moderno semelhante ao UNIX(R): "
+"suporte a multiprocessamento, suporte a vários usuários, memória virtual, "
+"rede, basicamente tudo está presente. Existem também recursos altamente "
+"avançados, como virtualização, entre outros."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:270
+msgid ""
+"As of 2006 Linux(R) seems to be the most widely used open source operating "
+"system with support from independent software vendors like Oracle, "
+"RealNetworks, Adobe, etc. Most of the commercial software distributed for "
+"Linux(R) can only be obtained in a binary form so recompilation for other "
+"operating systems is impossible."
+msgstr ""
+"A partir de 2006, o Linux(R) parece ser o sistema operacional de código "
+"aberto mais amplamente utilizado, com suporte de fornecedores independentes "
+"de software como Oracle, RealNetworks, Adobe, etc. A maioria do software "
+"comercial distribuído para Linux(R) só está disponível em forma binária, "
+"tornando impossível a recompilação para outros sistemas operacionais."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:275
+msgid ""
+"Most of the Linux(R) development happens in a Git version control system. "
+"Git is a distributed system so there is no central source of the Linux(R) "
+"code, but some branches are considered prominent and official. The version "
+"number scheme implemented by Linux(R) consists of four numbers A.B.C.D. "
+"Currently development happens in 2.6.C.D, where C represents major version, "
+"where new features are added or changed while D is a minor version for "
+"bugfixes only."
+msgstr ""
+"A maioria do desenvolvimento do Linux(R) ocorre em um sistema de controle de "
+"versão chamado Git. O Git é um sistema distribuído, então não há uma fonte "
+"central do código do Linux(R), mas alguns branches são considerados "
+"proeminentes e oficiais. O esquema de numeração de versão implementado pelo "
+"Linux(R) consiste em quatro números A.B.C.D. Atualmente, o desenvolvimento "
+"ocorre na versão 2.6.C.D, onde C representa a versão principal, onde novos "
+"recursos são adicionados ou alterados, enquanto D é uma versão menor para "
+"correções de bugs apenas."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:277
+msgid "More information can be obtained from [3]."
+msgstr "Mais informações podem ser obtidas em [3]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:286
+msgid ""
+"Linux(R) follows the traditional UNIX(R) scheme of dividing the run of a "
+"process in two halves: the kernel and user space. The kernel can be entered "
+"in two ways: via a trap or via a syscall. The return is handled only in one "
+"way. The further description applies to Linux(R) 2.6 on the i386(TM) "
+"architecture. This information was taken from [2]."
+msgstr ""
+"Linux(R) segue o esquema tradicional do UNIX(R) de dividir a execução de um "
+"processo em duas partes: o espaço do kernel e o espaço do usuário. O kernel "
+"pode ser acessado de duas maneiras: por meio de uma interrupção (trap) ou "
+"por meio de uma chamada de sistema (syscall). O retorno é tratado apenas de "
+"uma maneira. A descrição a seguir se aplica ao Linux(R) 2.6 na arquitetura "
+"i386(TM). Essas informações foram obtidas em [2]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:296
+msgid ""
+"Syscalls in Linux(R) are performed (in userspace) using `syscallX` macros "
+"where X substitutes a number representing the number of parameters of the "
+"given syscall. This macro translates to a code that loads `%eax` register "
+"with a number of the syscall and executes interrupt `0x80`. After this "
+"syscall return is called, which translates negative return values to "
+"positive `errno` values and sets `res` to `-1` in case of an error. "
+"Whenever the interrupt `0x80` is called the process enters the kernel in "
+"system call trap handler. This routine saves all registers on the stack and "
+"calls the selected syscall entry. Note that the Linux(R) calling convention "
+"expects parameters to the syscall to be passed via registers as shown here:"
+msgstr ""
+"As chamadas de sistema no Linux(R) são realizadas (no espaço do usuário) "
+"usando macros `syscallX`, em que X substitui um número representando a "
+"quantidade de parâmetros da chamada de sistema específica. Essa macro é "
+"traduzida para um código que carrega o registro `%eax` com o número da "
+"chamada de sistema e executa a interrupção `0x80`. Após o retorno da chamada "
+"de sistema, é feita a chamada para tratar o retorno, que converte valores de "
+"retorno negativos em valores `errno` positivos e define `res` como `-1` em "
+"caso de erro. Sempre que a interrupção `0x80` é chamada, o processo entra no "
+"kernel no tratador de interrupção de chamada de sistema. Essa rotina salva "
+"todos os registros na pilha e chama a entrada da chamada de sistema "
+"selecionada. Observa-se que a convenção de chamada do Linux(R) espera que os "
+"parâmetros da chamada de sistema sejam passados via registros, como mostrado "
+"aqui:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:298
+msgid "parameter -> `%ebx`"
+msgstr "parameter -> `%ebx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:299
+msgid "parameter -> `%ecx`"
+msgstr "parameter -> `%ecx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:300
+msgid "parameter -> `%edx`"
+msgstr "parameter -> `%edx`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:301
+msgid "parameter -> `%esi`"
+msgstr "parameter -> `%esi`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:302
+msgid "parameter -> `%edi`"
+msgstr "parameter -> `%edi`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:303
+msgid "parameter -> `%ebp`"
+msgstr "parameter -> `%ebp`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:305
+msgid ""
+"There are some exceptions to this, where Linux(R) uses different calling "
+"convention (most notably the `clone` syscall)."
+msgstr ""
+"Existem algumas exceções a isso, onde o Linux(R) usa convenções de chamada "
+"diferentes (a mais notável é a chamada de sistema `clone`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:310
+msgid ""
+"The trap handlers are introduced in [.filename]#arch/i386/kernel/traps.c# "
+"and most of these handlers live in [.filename]#arch/i386/kernel/entry.S#, "
+"where handling of the traps happens."
+msgstr ""
+"Os tratadores de exceção são introduzidos em [.filename]#arch/i386/kernel/"
+"traps.c# e a maioria desses tratadores ficam localizados em [.filename]#arch/"
+"i386/kernel/entry.S#, onde o tratamento das exceções ocorre."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:316
+msgid ""
+"Return from the syscall is managed by syscall man:exit[3], which checks for "
+"the process having unfinished work, then checks whether we used user-"
+"supplied selectors. If this happens stack fixing is applied and finally the "
+"registers are restored from the stack and the process returns to the "
+"userspace."
+msgstr ""
+"O retorno da chamada de sistema é gerenciado pela função `exit` do sistema, "
+"que verifica se o processo possui trabalho inacabado e, em seguida, verifica "
+"se foram utilizados seletores fornecidos pelo usuário. Se isso ocorrer, é "
+"aplicada uma correção de pilha e, finalmente, os registros são restaurados "
+"da pilha e o processo retorna ao espaço do usuário."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:327
+msgid ""
+"In the 2.6 version, the Linux(R) operating system redefined some of the "
+"traditional UNIX(R) primitives, notably PID, TID and thread. PID is defined "
+"not to be unique for every process, so for some processes (threads) man:"
+"getppid[2] returns the same value. Unique identification of process is "
+"provided by TID. This is because _NPTL_ (New POSIX(R) Thread Library) "
+"defines threads to be normal processes (so called 1:1 threading). Spawning "
+"a new process in Linux(R) 2.6 happens using the `clone` syscall (fork "
+"variants are reimplemented using it). This clone syscall defines a set of "
+"flags that affect behavior of the cloning process regarding thread "
+"implementation. The semantic is a bit fuzzy as there is no single flag "
+"telling the syscall to create a thread."
+msgstr ""
+"Na versão 2.6, o sistema operacional Linux(R) redefiniu algumas das "
+"primitivas tradicionais do UNIX(R), principalmente PID, TID e thread. O PID "
+"não é mais definido como único para cada processo, portanto, para alguns "
+"processos (threads), a função man:getppid[2] retorna o mesmo valor. A "
+"identificação única de um processo é fornecida pelo TID. Isso ocorre porque "
+"o _NPTL_ (New POSIX(R) Thread Library) define threads como processos normais "
+"(chamados de 1:1 threading). A criação de um novo processo no Linux(R) 2.6 "
+"ocorre usando a chamada de sistema `clone` (as variantes de fork são "
+"reimplementadas usando essa chamada). Essa chamada clone define um conjunto "
+"de flags que afetam o comportamento do processo clonado em relação à "
+"implementação de threads. A semântica é um pouco complexa, pois não há uma "
+"única flag que indique à chamada de sistema para criar uma thread."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:329
+msgid "Implemented clone flags are:"
+msgstr "Flags de clone implementados são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:331
+msgid "`CLONE_VM` - processes share their memory space"
+msgstr "`CLONE_VM` - os processos compartilham seu espaço de memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:332
+msgid "`CLONE_FS` - share umask, cwd and namespace"
+msgstr "`CLONE_FS` - compartilha umask, cwd e namespace"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:333
+msgid "`CLONE_FILES` - share open files"
+msgstr "`CLONE_FILES` - compartilha arquivos abertos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:334
+msgid "`CLONE_SIGHAND` - share signal handlers and blocked signals"
+msgstr ""
+"`CLONE_SIGHAND` - compartilha manipuladores de sinal e sinais bloqueados"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:335
+msgid "`CLONE_PARENT` - share parent"
+msgstr "`CLONE_PARENT` - compartilha o processo pai"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:336
+msgid "`CLONE_THREAD` - be thread (further explanation below)"
+msgstr "`CLONE_THREAD` - ser uma thread (mais explicações abaixo)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:337
+msgid "`CLONE_NEWNS` - new namespace"
+msgstr "`CLONE_NEWNS` - novo namespace"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:338
+msgid "`CLONE_SYSVSEM` - share SysV undo structures"
+msgstr "`CLONE_SYSVSEM` - compartilha estruturas de reversão SysV"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:339
+msgid "`CLONE_SETTLS` - setup TLS at supplied address"
+msgstr "`CLONE_SETTLS` - configura o TLS no endereço fornecido"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:340
+msgid "`CLONE_PARENT_SETTID` - set TID in the parent"
+msgstr "`CLONE_PARENT_SETTID` - define o TID (Thread ID) no processo pai"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:341
+msgid "`CLONE_CHILD_CLEARTID` - clear TID in the child"
+msgstr "`CLONE_CHILD_CLEARTID` - limpa o TID (Thread ID) no processo filho"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:342
+msgid "`CLONE_CHILD_SETTID` - set TID in the child"
+msgstr "`CLONE_CHILD_SETTID` - define o TID (Thread ID) no processo filho"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:348
+msgid ""
+"`CLONE_PARENT` sets the real parent to the parent of the caller. This is "
+"useful for threads because if thread A creates thread B we want thread B to "
+"be parented to the parent of the whole thread group. `CLONE_THREAD` does "
+"exactly the same thing as `CLONE_PARENT`, `CLONE_VM` and `CLONE_SIGHAND`, "
+"rewrites PID to be the same as PID of the caller, sets exit signal to be "
+"none and enters the thread group. `CLONE_SETTLS` sets up GDT entries for "
+"TLS handling. The `CLONE_*_*TID` set of flags sets/clears user supplied "
+"address to TID or 0."
+msgstr ""
+"A `CLONE_PARENT` define o pai real como o pai do chamador. Isso é útil para "
+"threads, porque se a thread A cria a thread B, queremos que a thread B tenha "
+"o mesmo pai do grupo de threads inteiro. A `CLONE_THREAD` faz exatamente a "
+"mesma coisa que `CLONE_PARENT`, `CLONE_VM` e `CLONE_SIGHAND`, reescreve o "
+"PID para ser o mesmo do chamador, define o sinal de saída como nenhum (none) "
+"e entra no grupo de threads. A `CLONE_SETTLS` configura as entradas do GDT "
+"(Global Descriptor Table) para manipulação de TLS (Thread Local Storage). O "
+"conjunto de flags `CLONE_*_*TID` define ou limpa o endereço fornecido pelo "
+"usuário para o TID ou 0."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:352
+msgid ""
+"As you can see the `CLONE_THREAD` does most of the work and does not seem to "
+"fit the scheme very well. The original intention is unclear (even for "
+"authors, according to comments in the code) but I think originally there was "
+"one threading flag, which was then parcelled among many other flags but this "
+"separation was never fully finished. It is also unclear what this partition "
+"is good for as glibc does not use that so only hand-written use of the clone "
+"permits a programmer to access this features."
+msgstr ""
+"Como você pode ver, o `CLONE_THREAD` faz a maior parte do trabalho e parece "
+"não se encaixar muito bem no esquema. A intenção original é incerta (até "
+"mesmo para os autores, de acordo com comentários no código), mas acredito "
+"que originalmente existia uma única flag de threading, que foi "
+"posteriormente dividida entre muitas outras flags, mas essa separação nunca "
+"foi totalmente concluída. Também não está claro para que serve essa "
+"partição, já que a glibc não a utiliza, então apenas o uso manual do clone "
+"permite que um programador acesse esses recursos."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:355
+msgid ""
+"For non-threaded programs the PID and TID are the same. For threaded "
+"programs the first thread PID and TID are the same and every created thread "
+"shares the same PID and gets assigned a unique TID (because `CLONE_THREAD` "
+"is passed in) also parent is shared for all processes forming this threaded "
+"program."
+msgstr ""
+"Para programas não-threaded, o PID e TID são os mesmos. Para programas "
+"threaded, o PID e TID da primeira thread são os mesmos, e cada thread criada "
+"compartilha o mesmo PID e recebe um TID único (porque `CLONE_THREAD` é "
+"passado), também o pai é compartilhado por todos os processos que formam "
+"esse programa threaded."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:357
+msgid ""
+"The code that implements man:pthread_create[3] in NPTL defines the clone "
+"flags like this:"
+msgstr ""
+"O código que implementa o man:pthread_create[3] em NPTL define as flags de "
+"clone da seguinte forma:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:361
+#, no-wrap
+msgid "int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL\n"
+msgstr "int clone_flags = (CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGNAL\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:363
+#, no-wrap
+msgid " | CLONE_SETTLS | CLONE_PARENT_SETTID\n"
+msgstr " | CLONE_SETTLS | CLONE_PARENT_SETTID\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:366
+#, no-wrap
+msgid ""
+"| CLONE_CHILD_CLEARTID | CLONE_SYSVSEM\n"
+"#if __ASSUME_NO_CLONE_DETACHED == 0\n"
+msgstr ""
+"| CLONE_CHILD_CLEARTID | CLONE_SYSVSEM\n"
+"#if __ASSUME_NO_CLONE_DETACHED == 0\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:369
+#, no-wrap
+msgid ""
+"| CLONE_DETACHED\n"
+"#endif\n"
+msgstr ""
+"| CLONE_DETACHED\n"
+"#endif\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:371
+#, no-wrap
+msgid "| 0);\n"
+msgstr "| 0);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:374
+msgid "The `CLONE_SIGNAL` is defined like"
+msgstr "A `CLONE_SIGNAL` é definida como"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:378
+#, no-wrap
+msgid "#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)\n"
+msgstr "#define CLONE_SIGNAL (CLONE_SIGHAND | CLONE_THREAD)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:381
+msgid "the last 0 means no signal is sent when any of the threads exits."
+msgstr ""
+"o último 0 significa que nenhum sinal é enviado quando qualquer uma das "
+"threads finaliza."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:383
+#, no-wrap
+msgid "What is emulation"
+msgstr "O que é emulação"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:388
+msgid ""
+"According to a dictionary definition, emulation is the ability of a program "
+"or device to imitate another program or device. This is achieved by "
+"providing the same reaction to a given stimulus as the emulated object. In "
+"practice, the software world mostly sees three types of emulation - a "
+"program used to emulate a machine (QEMU, various game console emulators "
+"etc.), software emulation of a hardware facility (OpenGL emulators, floating "
+"point units emulation etc.) and operating system emulation (either in kernel "
+"of the operating system or as a userspace program)."
+msgstr ""
+"De acordo com a definição de dicionário, emulação é a capacidade de um "
+"programa ou dispositivo imitar outro programa ou dispositivo. Isso é "
+"alcançado ao fornecer a mesma reação a um estímulo dado como o objeto "
+"emulado. Na prática, o mundo do software geralmente vê três tipos de "
+"emulação: um programa usado para emular uma máquina (QEMU, vários emuladores "
+"de consoles de jogos, etc.), emulação de software de uma funcionalidade de "
+"hardware (emuladores de OpenGL, emulação de unidades de ponto flutuante, "
+"etc.) e emulação de sistemas operacionais (seja no núcleo do sistema "
+"operacional ou como um programa no espaço do usuário)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:395
+msgid ""
+"Emulation is usually used in a place, where using the original component is "
+"not feasible nor possible at all. For example someone might want to use a "
+"program developed for a different operating system than they use. Then "
+"emulation comes in handy. Sometimes there is no other way but to use "
+"emulation - e.g. when the hardware device you try to use does not exist (yet/"
+"anymore) then there is no other way but emulation. This happens often when "
+"porting an operating system to a new (non-existent) platform. Sometimes it "
+"is just cheaper to emulate."
+msgstr ""
+"A emulação é geralmente utilizada em situações em que não é viável ou "
+"possível utilizar o componente original. Por exemplo, alguém pode querer "
+"usar um programa desenvolvido para um sistema operacional diferente do que "
+"estão usando. Nesse caso, a emulação é útil. Às vezes, não há outra opção "
+"além da emulação - por exemplo, quando o dispositivo de hardware que você "
+"está tentando usar não existe (ainda/não mais), não há outra opção além da "
+"emulação. Isso ocorre com frequência ao portar um sistema operacional para "
+"uma plataforma nova (e inexistente). Às vezes, é apenas mais econômico "
+"utilizar a emulação."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:407
+msgid ""
+"Looking from an implementation point of view, there are two main approaches "
+"to the implementation of emulation. You can either emulate the whole thing "
+"- accepting possible inputs of the original object, maintaining inner state "
+"and emitting correct output based on the state and/or input. This kind of "
+"emulation does not require any special conditions and basically can be "
+"implemented anywhere for any device/program. The drawback is that "
+"implementing such emulation is quite difficult, time-consuming and error-"
+"prone. In some cases we can use a simpler approach. Imagine you want to "
+"emulate a printer that prints from left to right on a printer that prints "
+"from right to left. It is obvious that there is no need for a complex "
+"emulation layer but simply reversing of the printed text is sufficient. "
+"Sometimes the emulating environment is very similar to the emulated one so "
+"just a thin layer of some translation is necessary to provide fully working "
+"emulation! As you can see this is much less demanding to implement, so less "
+"time-consuming and error-prone than the previous approach. But the "
+"necessary condition is that the two environments must be similar enough. "
+"The third approach combines the two previous. Most of the time the objects "
+"do not provide the same capabilities so in a case of emulating the more "
+"powerful one on the less powerful we have to emulate the missing features "
+"with full emulation described above."
+msgstr ""
+"Olhando a partir de um ponto de vista de implementação, existem duas "
+"abordagens principais para a implementação da emulação. Você pode emular o "
+"objeto inteiro - aceitando possíveis entradas do objeto original, mantendo o "
+"estado interno e emitindo a saída correta com base no estado e/ou na "
+"entrada. Esse tipo de emulação não requer condições especiais e basicamente "
+"pode ser implementado em qualquer lugar para qualquer dispositivo/programa. "
+"A desvantagem é que a implementação de tal emulação é bastante difícil, "
+"demorada e propensa a erros. Em alguns casos, podemos usar uma abordagem "
+"mais simples. Imagine que você queira emular uma impressora que imprime da "
+"esquerda para a direita em uma impressora que imprime da direita para a "
+"esquerda. É óbvio que não há necessidade de uma camada de emulação complexa, "
+"apenas reverter o texto impresso é suficiente. Às vezes, o ambiente de "
+"emulação é muito semelhante ao ambiente emulado, então apenas uma fina "
+"camada de tradução é necessária para fornecer uma emulação totalmente "
+"funcional! Como você pode ver, isso é muito menos exigente de ser "
+"implementado, portanto, menos demorado e propenso a erros em comparação com "
+"a abordagem anterior. Mas a condição necessária é que os dois ambientes "
+"sejam suficientemente semelhantes. A terceira abordagem combina as duas "
+"anteriores. Na maioria das vezes, os objetos não fornecem as mesmas "
+"capacidades, então, ao emular um objeto mais poderoso em um objeto menos "
+"poderoso, temos que emular os recursos ausentes com emulação completa "
+"descrita anteriormente."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:410
+msgid ""
+"This master thesis deals with emulation of UNIX(R) on UNIX(R), which is "
+"exactly the case, where only a thin layer of translation is sufficient to "
+"provide full emulation. The UNIX(R) API consists of a set of syscalls, "
+"which are usually self contained and do not affect some global kernel state."
+msgstr ""
+"Esta tese de mestrado trata da emulação do UNIX(R) em UNIX(R), que é "
+"exatamente o caso em que apenas uma camada fina de tradução é suficiente "
+"para fornecer uma emulação completa. A API do UNIX(R) consiste em um "
+"conjunto de syscalls, que geralmente são autônomas e não afetam algum estado "
+"global do kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:412
+msgid ""
+"There are a few syscalls that affect inner state but this can be dealt with "
+"by providing some structures that maintain the extra state."
+msgstr ""
+"Existem algumas syscalls que afetam o estado interno, mas isso pode ser "
+"resolvido fornecendo algumas estruturas que mantêm o estado extra."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:416
+msgid ""
+"No emulation is perfect and emulations tend to lack some parts but this "
+"usually does not cause any serious drawbacks. Imagine a game console "
+"emulator that emulates everything but music output. No doubt that the games "
+"are playable and one can use the emulator. It might not be that comfortable "
+"as the original game console but its an acceptable compromise between price "
+"and comfort."
+msgstr ""
+"Nenhuma emulação é perfeita e emulações tendem a ter algumas partes "
+"ausentes, mas isso geralmente não causa grandes inconvenientes. Imagine um "
+"emulador de console de jogos que emula tudo, exceto a saída de música. Sem "
+"dúvida, os jogos são jogáveis e é possível usar o emulador. Pode não ser tão "
+"confortável quanto o console de jogos original, mas é um compromisso "
+"aceitável entre preço e conforto."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:420
+msgid ""
+"The same goes with the UNIX(R) API. Most programs can live with a very "
+"limited set of syscalls working. Those syscalls tend to be the oldest ones "
+"(man:read[2]/man:write[2], man:fork[2] family, man:signal[3] handling, man:"
+"exit[3], man:socket[2] API) hence it is easy to emulate because their "
+"semantics is shared among all UNIX(R)es, which exist todays."
+msgstr ""
+"O mesmo acontece com a API do UNIX(R). A maioria dos programas pode "
+"funcionar com um conjunto muito limitado de syscalls. Essas syscalls tendem "
+"a ser as mais antigas (man:read[2]/man:write[2], família man:fork[2], "
+"manipulação de man:signal[3], man:exit[3], API man:socket[2]), o que torna "
+"mais fácil a emulação, pois sua semântica é compartilhada entre todos os "
+"sistemas UNIX(R) existentes hoje em dia."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:422
+#, no-wrap
+msgid "Emulation"
+msgstr "Emulação"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:424
+#, no-wrap
+msgid "How emulation works in FreeBSD"
+msgstr "Como funciona a emulação no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:429
+msgid ""
+"As stated earlier, FreeBSD supports running binaries from several other "
+"UNIX(R)es. This works because FreeBSD has an abstraction called the "
+"execution class loader. This wedges into the man:execve[2] syscall, so when "
+"man:execve[2] is about to execute a binary it examines its type."
+msgstr ""
+"Como mencionado anteriormente, o FreeBSD suporta a execução de binários de "
+"vários outros sistemas UNIX(R). Isso é possível porque o FreeBSD possui uma "
+"abstração chamada de \"execução do carregador de classe\" (execution class "
+"loader). Isso é inserido na chamada de sistema man:execve[2], então quando o "
+"man:execve[2] está prestes a executar um binário, ele examina o tipo do "
+"binário."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:435
+msgid ""
+"There are basically two types of binaries in FreeBSD. Shell-like text "
+"scripts which are identified by `#!` as their first two characters and "
+"normal (typically _ELF_) binaries, which are a representation of a compiled "
+"executable object. The vast majority (one could say all of them) of "
+"binaries in FreeBSD are from type ELF. ELF files contain a header, which "
+"specifies the OS ABI for this ELF file. By reading this information, the "
+"operating system can accurately determine what type of binary the given file "
+"is."
+msgstr ""
+"Existem basicamente dois tipos de binários no FreeBSD. Scripts de texto "
+"semelhantes a shell, que são identificados pelos primeiros dois caracteres "
+"`#!`, e binários normais (geralmente ELF), que são uma representação de um "
+"objeto executável compilado. A grande maioria (pode-se dizer que todos) os "
+"binários no FreeBSD são do tipo ELF. Os arquivos ELF contêm um cabeçalho que "
+"especifica a ABI do sistema operacional para este arquivo ELF. Lendo essa "
+"informação, o sistema operacional pode determinar com precisão qual é o tipo "
+"de arquivo binário."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:441
+msgid ""
+"Every OS ABI must be registered in the FreeBSD kernel. This applies to the "
+"FreeBSD native OS ABI, as well. So when man:execve[2] executes a binary it "
+"iterates through the list of registered APIs and when it finds the right one "
+"it starts to use the information contained in the OS ABI description (its "
+"syscall table, `errno` translation table, etc.). So every time the process "
+"calls a syscall, it uses its own set of syscalls instead of some global "
+"one. This effectively provides a very elegant and easy way of supporting "
+"execution of various binary formats."
+msgstr ""
+"Cada ABI de sistema operacional deve ser registrada no kernel do FreeBSD. "
+"Isso também se aplica à ABI nativa do FreeBSD. Portanto, quando o man:"
+"execve[2] executa um binário, ele itera pela lista de APIs registradas e, "
+"quando encontra a correspondente, começa a usar as informações contidas na "
+"descrição da ABI do sistema operacional (sua tabela de syscalls, tabela de "
+"tradução de `errno`, etc.). Portanto, cada vez que o processo chama uma "
+"syscall, ele usa seu próprio conjunto de syscalls em vez de um conjunto "
+"global. Isso fornece uma maneira muito elegante e fácil de oferecer suporte "
+"à execução de vários formatos binários."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:446
+msgid ""
+"The nature of emulation of different OSes (and also some other subsystems) "
+"led developers to invite a handler event mechanism. There are various "
+"places in the kernel, where a list of event handlers are called. Every "
+"subsystem can register an event handler and they are called accordingly. "
+"For example, when a process exits there is a handler called that possibly "
+"cleans up whatever the subsystem needs to be cleaned."
+msgstr ""
+"A natureza da emulação de diferentes sistemas operacionais (e também de "
+"outros subsistemas) levou os desenvolvedores a adotarem um mecanismo de "
+"tratamento de eventos. Existem vários pontos no kernel em que uma lista de "
+"manipuladores de eventos é chamada. Cada subsistema pode registrar um "
+"manipulador de evento e eles são chamados de acordo. Por exemplo, quando um "
+"processo é encerrado, é chamado um manipulador que possivelmente realiza a "
+"limpeza necessária no subsistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:448
+msgid ""
+"Those simple facilities provide basically everything that is needed for the "
+"emulation infrastructure and in fact these are basically the only things "
+"necessary to implement the Linux(R) emulation layer."
+msgstr ""
+"Essas facilidades simples fornecem basicamente tudo o que é necessário para "
+"a infraestrutura de emulação e, na verdade, são basicamente as únicas coisas "
+"necessárias para implementar a camada de emulação do Linux(R)."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:450
+#, no-wrap
+msgid "Common primitives in the FreeBSD kernel"
+msgstr "Primitivas comuns no kernel do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:454
+msgid ""
+"Emulation layers need some support from the operating system. I am going to "
+"describe some of the supported primitives in the FreeBSD operating system."
+msgstr ""
+"As camadas de emulação precisam de suporte por parte do sistema operacional. "
+"Vou descrever alguns dos primitivos suportados no sistema operacional "
+"FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:456
+#, no-wrap
+msgid "Locking primitives"
+msgstr "Primitivas de Bloqueio"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:459
+msgid "Contributed by: `{attilio}`"
+msgstr "Contribuído por: `{attilio}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:461
+msgid ""
+"The FreeBSD synchronization primitive set is based on the idea to supply a "
+"rather huge number of different primitives in a way that the better one can "
+"be used for every particular, appropriate situation."
+msgstr ""
+"O conjunto de primitivas de sincronização do FreeBSD é baseado na idéia de "
+"fornecer um grande número de diferentes primitivas de uma maneira que a "
+"melhor possa ser usada para cada situação específica e apropriada."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:463
+msgid ""
+"To a high level point of view you can consider three kinds of "
+"synchronization primitives in the FreeBSD kernel:"
+msgstr ""
+"Para um ponto de vista de alto nível, você pode considerar três tipos de "
+"primitivas de sincronização no kernel do FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:465
+msgid "atomic operations and memory barriers"
+msgstr "operações atômicas e barreiras de memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:466
+msgid "locks"
+msgstr "locks"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:467
+msgid "scheduling barriers"
+msgstr "barreiras de agendamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:470
+msgid ""
+"Below there are descriptions for the 3 families. For every lock, you should "
+"really check the linked manpage (where possible) for more detailed "
+"explanations."
+msgstr ""
+"Abaixo estão as descrições das 3 famílias. Para cada trava, é recomendado "
+"verificar a página do manual vinculada (quando possível) para obter "
+"explicações mais detalhadas."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:472
+#, no-wrap
+msgid "Atomic operations and memory barriers"
+msgstr "Operações atômicas e barreiras de memória"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:483
+msgid ""
+"Atomic operations are implemented through a set of functions performing "
+"simple arithmetics on memory operands in an atomic way with respect to "
+"external events (interrupts, preemption, etc.). Atomic operations can "
+"guarantee atomicity just on small data types (in the magnitude order of the "
+"`.long.` architecture C data type), so should be rarely used directly in the "
+"end-level code, if not only for very simple operations (like flag setting in "
+"a bitmap, for example). In fact, it is rather simple and common to write "
+"down a wrong semantic based on just atomic operations (usually referred as "
+"lock-less). The FreeBSD kernel offers a way to perform atomic operations in "
+"conjunction with a memory barrier. The memory barriers will guarantee that "
+"an atomic operation will happen following some specified ordering with "
+"respect to other memory accesses. For example, if we need that an atomic "
+"operation happen just after all other pending writes (in terms of "
+"instructions reordering buffers activities) are completed, we need to "
+"explicitly use a memory barrier in conjunction to this atomic operation. So "
+"it is simple to understand why memory barriers play a key role for higher-"
+"level locks building (just as refcounts, mutexes, etc.). For a detailed "
+"explanatory on atomic operations, please refer to man:atomic[9]. It is far, "
+"however, noting that atomic operations (and memory barriers as well) should "
+"ideally only be used for building front-ending locks (as mutexes)."
+msgstr ""
+"As operações atômicas são implementadas por meio de um conjunto de funções "
+"que realizam operações aritméticas simples em operandos de memória de "
+"maneira atômica em relação a eventos externos (interrupções, preempção, "
+"etc.). As operações atômicas podem garantir atomicidade apenas em tipos de "
+"dados pequenos (da ordem de magnitude do tipo de dados C `.long.` da "
+"arquitetura), portanto, devem ser raramente usadas diretamente no código de "
+"nível final, a menos que seja apenas para operações muito simples (como "
+"definir uma bandeira em um bitmap, por exemplo). Na verdade, é bastante "
+"simples e comum escrever uma semântica errada baseada apenas em operações "
+"atômicas (geralmente referidas como \"sem bloqueio\"). O kernel do FreeBSD "
+"oferece uma maneira de realizar operações atômicas em conjunto com uma "
+"barreira de memória. As barreiras de memória garantem que uma operação "
+"atômica ocorra seguindo alguma ordem especificada em relação a outros "
+"acessos à memória. Por exemplo, se precisamos que uma operação atômica "
+"ocorra logo após todas as gravações pendentes (em termos de reordenação de "
+"instruções nos buffers) sejam concluídas, precisamos usar explicitamente uma "
+"barreira de memória em conjunto com essa operação atômica. Portanto, é fácil "
+"entender por que as barreiras de memória desempenham um papel fundamental na "
+"construção de travas de nível superior (como refcount, mutexes, etc.). Para "
+"uma explicação detalhada sobre as operações atômicas, consulte o man:"
+"atomic[9]. No entanto, é importante notar que as operações atômicas (assim "
+"como as barreiras de memória) idealmente devem ser usadas apenas para a "
+"construção de travas de nível superior (como mutexes)."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:485
+#, no-wrap
+msgid "Refcounts"
+msgstr "Refcounts"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:491
+msgid ""
+"Refcounts are interfaces for handling reference counters. They are "
+"implemented through atomic operations and are intended to be used just for "
+"cases, where the reference counter is the only one thing to be protected, so "
+"even something like a spin-mutex is deprecated. Using the refcount "
+"interface for structures, where a mutex is already used is often wrong since "
+"we should probably close the reference counter in some already protected "
+"paths. A manpage discussing refcount does not exist currently, just check [."
+"filename]#sys/refcount.h# for an overview of the existing API."
+msgstr ""
+"Refcounts são interfaces para lidar com contadores de referência. Eles são "
+"implementados por meio de operações atômicas e destinam-se a serem usados "
+"apenas em casos em que o contador de referência é a única coisa a ser "
+"protegida, então até mesmo algo como um spin-mutex é considerado obsoleto. O "
+"uso da interface refcount para estruturas em que já é usado um mutex "
+"geralmente está incorreto, pois provavelmente devemos fechar o contador de "
+"referência em algum caminho já protegido. Atualmente, não existe uma página "
+"de manual que discuta refcount, apenas verifique [.filename]#sys/refcount.h# "
+"para obter uma visão geral da API existente."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:493
+#, no-wrap
+msgid "Locks"
+msgstr "Locks"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:498
+msgid ""
+"FreeBSD kernel has huge classes of locks. Every lock is defined by some "
+"peculiar properties, but probably the most important is the event linked to "
+"contesting holders (or in other terms, the behavior of threads unable to "
+"acquire the lock). FreeBSD's locking scheme presents three different "
+"behaviors for contenders:"
+msgstr ""
+"O kernel do FreeBSD possui várias classes de locks. Cada lock é definido por "
+"algumas propriedades específicas, mas provavelmente a mais importante é o "
+"evento vinculado aos detentores em disputa (ou em outras palavras, o "
+"comportamento das threads incapazes de adquirir o lock). O esquema de "
+"locking do FreeBSD apresenta três comportamentos diferentes para os "
+"contendores:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:500
+msgid "spinning"
+msgstr "spinning"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:501
+msgid "blocking"
+msgstr "blocking"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:502
+msgid "sleeping"
+msgstr "sleeping"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:506
+msgid "numbers are not casual"
+msgstr "números não são casuais"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:509
+#, no-wrap
+msgid "Spinning locks"
+msgstr "Spinning locks"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:515
+msgid ""
+"Spin locks let waiters to spin until they cannot acquire the lock. An "
+"important matter do deal with is when a thread contests on a spin lock if it "
+"is not descheduled. Since the FreeBSD kernel is preemptive, this exposes "
+"spin lock at the risk of deadlocks that can be solved just disabling "
+"interrupts while they are acquired. For this and other reasons (like lack "
+"of priority propagation support, poorness in load balancing schemes between "
+"CPUs, etc.), spin locks are intended to protect very small paths of code, or "
+"ideally not to be used at all if not explicitly requested (explained later)."
+msgstr ""
+"Spin locks permitem que os aguardantes fiquem girando em um loop até que não "
+"possam adquirir o lock. Uma questão importante a lidar é quando uma thread "
+"disputa um spin lock se ela não for despachada. Como o kernel do FreeBSD é "
+"preemptivo, isso expõe o spin lock ao risco de deadlocks que podem ser "
+"resolvidos desabilitando as interrupções enquanto eles são adquiridos. Por "
+"esse e outros motivos (como a falta de suporte à propagação de prioridade, "
+"deficiência em esquemas de balanceamento de carga entre CPUs, etc.), os spin "
+"locks são destinados a proteger trechos muito pequenos de código, ou "
+"idealmente não devem ser usados se não forem explicitamente solicitados "
+"(explicado posteriormente)."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:517
+#, no-wrap
+msgid "Blocking"
+msgstr "Bloqueio"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:522
+#, fuzzy
+#| msgid ""
+#| "Block locks let waiters to be descheduled and blocked until the lock "
+#| "owner does not drop it and wakes up one or more contenders. In order to "
+#| "avoid starvation issues, blocking locks do priority propagation from the "
+#| "waiters to the owner. Block locks must be implemented through the "
+#| "turnstile interface and are intended to be the most used kind of locks in "
+#| "the kernel, if no particular conditions are met."
+msgid ""
+"Block locks let waiters to be descheduled and blocked until the lock owner "
+"does not drop it and wakes up one or more contenders. To avoid starvation "
+"issues, blocking locks do priority propagation from the waiters to the "
+"owner. Block locks must be implemented through the turnstile interface and "
+"are intended to be the most used kind of locks in the kernel, if no "
+"particular conditions are met."
+msgstr ""
+"Os block locks permitem que os waiters sejam despachados e bloqueados até "
+"que o proprietário do lock o libere e acorde um ou mais contendores. Para "
+"evitar problemas de inanição (starvation), os blocking locks realizam a "
+"propagação de prioridade dos aguardantes para o proprietário. Os block locks "
+"devem ser implementados por meio da interface de turnstile e são destinadas "
+"a ser o tipo de lock mais utilizado no kernel, se nenhuma condição "
+"particular for atendida."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:524
+#, no-wrap
+msgid "Sleeping"
+msgstr "Sleeping"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:529
+msgid ""
+"Sleep locks let waiters to be descheduled and fall asleep until the lock "
+"holder does not drop it and wakes up one or more waiters. Since sleep locks "
+"are intended to protect large paths of code and to cater asynchronous "
+"events, they do not do any form of priority propagation. They must be "
+"implemented through the man:sleepqueue[9] interface."
+msgstr ""
+"As travas de suspensão (sleep locks) permitem que os processos em espera "
+"sejam despachados (descheduled ) e adormeçam até que o detentor da trava a "
+"solte e acorde um ou mais processos em espera. Como as travas de suspensão "
+"são projetadas para proteger grandes trechos de código e lidar com eventos "
+"assíncronos, elas não realizam qualquer forma de propagação de prioridade. "
+"Elas devem ser implementadas por meio da interface man:sleepqueue[9]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:533
+msgid ""
+"The order used to acquire locks is very important, not only for the "
+"possibility to deadlock due at lock order reversals, but even because lock "
+"acquisition should follow specific rules linked to locks natures. If you "
+"give a look at the table above, the practical rule is that if a thread holds "
+"a lock of level n (where the level is the number listed close to the kind of "
+"lock) it is not allowed to acquire a lock of superior levels, since this "
+"would break the specified semantic for a path. For example, if a thread "
+"holds a block lock (level 2), it is allowed to acquire a spin lock (level 1) "
+"but not a sleep lock (level 3), since block locks are intended to protect "
+"smaller paths than sleep lock (these rules are not about atomic operations "
+"or scheduling barriers, however)."
+msgstr ""
+"A ordem usada para adquirir locks é muito importante, não apenas devido à "
+"possibilidade de deadlock devido a inversões na ordem dos locks, mas também "
+"porque a aquisição de locks deve seguir regras específicas relacionadas às "
+"naturezas dos locks. Se você observar a tabela acima, a regra prática é que "
+"se um thread possui um lock de nível n (onde o nível é o número listado "
+"próximo ao tipo de lock), ele não pode adquirir um lock de níveis "
+"superiores, pois isso quebraria a semântica especificada para um determinado "
+"caminho. Por exemplo, se um thread possui um bloqueio de bloqueio (nível 2), "
+"é permitido adquirir um lock de rotação (nível 1), mas não um lock de "
+"suspensão (nível 3), pois os bloqueios de bloqueio são destinados a proteger "
+"caminhos menores do que os bloqueios de suspensão (essas regras não se "
+"aplicam a operações atômicas ou barreiras de agendamento, no entanto)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:535
+msgid "This is a list of lock with their respective behaviors:"
+msgstr "Esta é uma lista de bloqueio com seus respectivos comportamentos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:537
+msgid "spin mutex - spinning - man:mutex[9]"
+msgstr "spin mutex - girando - man:mutex[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:538
+msgid "sleep mutex - blocking - man:mutex[9]"
+msgstr "Sleep mutex - bloqueio - man:mutex[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:539
+msgid "pool mutex - blocking - man:mtx[pool]"
+msgstr "pool mutex - blocking - man:mtx[pool]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:540
+msgid ""
+"sleep family - sleeping - man:sleep[9] pause tsleep msleep msleep spin "
+"msleep rw msleep sx"
+msgstr ""
+"A família de funções de suspensão (sleep family) - sleeping - man:sleep[9] "
+"pause tsleep msleep msleep spin msleep rw msleep sx"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:541
+msgid "condvar - sleeping - man:condvar[9]"
+msgstr "condvar - sleeping - man:condvar[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:542
+msgid "rwlock - blocking - man:rwlock[9]"
+msgstr "rwlock - blocking - man:rwlock[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:543
+msgid "sxlock - sleeping - man:sx[9]"
+msgstr "sxlock - sleeping - man:sx[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:544
+msgid "lockmgr - sleeping - man:lockmgr[9]"
+msgstr "lockmgr - sleeping - man:lockmgr[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:545
+msgid "semaphores - sleeping - man:sema[9]"
+msgstr "semáforos - sleeping - man:sema[9]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:547
+msgid ""
+"Among these locks only mutexes, sxlocks, rwlocks and lockmgrs are intended "
+"to handle recursion, but currently recursion is only supported by mutexes "
+"and lockmgrs."
+msgstr ""
+"Entre esses bloqueios, apenas mutexes, sxlocks, rwlocks e lockmgrs são "
+"destinados a tratar recursão, mas atualmente a recursão é suportada apenas "
+"por mutexes e lockmgrs."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:549
+#, no-wrap
+msgid "Scheduling barriers"
+msgstr "Barreiras de agendamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:553
+#, fuzzy
+#| msgid ""
+#| "Scheduling barriers are intended to be used in order to drive scheduling "
+#| "of threading. They consist mainly of three different stubs:"
+msgid ""
+"Scheduling barriers are intended to be used to drive scheduling of "
+"threading. They consist mainly of three different stubs:"
+msgstr ""
+"As barreiras de agendamento são destinadas a serem usadas para controlar o "
+"agendamento de threads. Elas consistem principalmente em três tipos "
+"diferentes de stubs (trechos de código):"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:555
+msgid "critical sections (and preemption)"
+msgstr "seções críticas (e preempção)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:556
+msgid "sched_bind"
+msgstr "sched_bind"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:557
+msgid "sched_pin"
+msgstr "sched_pin"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:559
+msgid ""
+"Generally, these should be used only in a particular context and even if "
+"they can often replace locks, they should be avoided because they do not let "
+"the diagnose of simple eventual problems with locking debugging tools (as "
+"man:witness[4])."
+msgstr ""
+"Em geral, esses devem ser usados apenas em um contexto específico e, mesmo "
+"que possam substituir bloqueios em muitos casos, eles devem ser evitados "
+"porque não permitem diagnosticar problemas simples com ferramentas de "
+"depuração de bloqueio (como man:witness[4])."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:561
+#, no-wrap
+msgid "Critical sections"
+msgstr "Seções críticas"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:569
+#, fuzzy
+#| msgid ""
+#| "The FreeBSD kernel has been made preemptive basically to deal with "
+#| "interrupt threads. In fact, in order to avoid high interrupt latency, "
+#| "time-sharing priority threads can be preempted by interrupt threads (in "
+#| "this way, they do not need to wait to be scheduled as the normal path "
+#| "previews). Preemption, however, introduces new racing points that need "
+#| "to be handled, as well. Often, in order to deal with preemption, the "
+#| "simplest thing to do is to completely disable it. A critical section "
+#| "defines a piece of code (borderlined by the pair of functions man:"
+#| "critical_enter[9] and man:critical_exit[9], where preemption is "
+#| "guaranteed to not happen (until the protected code is fully executed). "
+#| "This can often replace a lock effectively but should be used carefully in "
+#| "order to not lose the whole advantage that preemption brings."
+msgid ""
+"The FreeBSD kernel has been made preemptive basically to deal with interrupt "
+"threads. In fact, to avoid high interrupt latency, time-sharing priority "
+"threads can be preempted by interrupt threads (in this way, they do not need "
+"to wait to be scheduled as the normal path previews). Preemption, however, "
+"introduces new racing points that need to be handled, as well. Often, to "
+"deal with preemption, the simplest thing to do is to completely disable it. "
+"A critical section defines a piece of code (borderlined by the pair of "
+"functions man:critical_enter[9] and man:critical_exit[9], where preemption "
+"is guaranteed to not happen (until the protected code is fully executed). "
+"This can often replace a lock effectively but should be used carefully to "
+"not lose the whole advantage that preemption brings."
+msgstr ""
+"O kernel do FreeBSD foi tornado preemptivo principalmente para lidar com "
+"threads de interrupção. Na verdade, para evitar latência alta de "
+"interrupção, threads de prioridade de tempo compartilhado podem ser "
+"preemptadas por threads de interrupção (assim, elas não precisam esperar "
+"para serem agendadas como no caminho normal). No entanto, a preempção "
+"introduz novos pontos de corrida que também precisam ser tratados. "
+"Frequentemente, para lidar com a preempção, a coisa mais simples a se fazer "
+"é desabilitá-la completamente. Uma seção crítica define um trecho de código "
+"(delimitado pelo par de funções `critical_enter` e `critical_exit`) onde a "
+"preempção é garantida de não ocorrer (até que o código protegido seja "
+"totalmente executado). Isso muitas vezes pode substituir efetivamente um "
+"bloqueio, mas deve ser usado com cuidado para não perder todas as vantagens "
+"que a preempção traz."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:571
+#, no-wrap
+msgid "sched_pin/sched_unpin"
+msgstr "sched_pin/sched_unpin"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:577
+msgid ""
+"Another way to deal with preemption is the `sched_pin()` interface. If a "
+"piece of code is closed in the `sched_pin()` and `sched_unpin()` pair of "
+"functions it is guaranteed that the respective thread, even if it can be "
+"preempted, it will always be executed on the same CPU. Pinning is very "
+"effective in the particular case when we have to access at per-cpu datas and "
+"we assume other threads will not change those data. The latter condition "
+"will determine a critical section as a too strong condition for our code."
+msgstr ""
+"Outra forma de lidar com a preempção é a interface `sched_pin()`. Se um "
+"trecho de código é envolvido pelas funções `sched_pin()` e `sched_unpin()`, "
+"é garantido que a respectiva thread, mesmo que possa ser preemptada, será "
+"sempre executada na mesma CPU. Fixar (pinning) é muito efetivo no caso "
+"particular em que precisamos acessar dados específicos de cada CPU e "
+"assumimos que outras threads não alterarão esses dados. A última condição "
+"determinará uma seção crítica como uma condição muito rigorosa para nosso "
+"código."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:579
+#, no-wrap
+msgid "sched_bind/sched_unbind"
+msgstr "sched_bind/sched_unbind"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:584
+#, fuzzy
+#| msgid ""
+#| "`sched_bind` is an API used in order to bind a thread to a particular CPU "
+#| "for all the time it executes the code, until a `sched_unbind` function "
+#| "call does not unbind it. This feature has a key role in situations where "
+#| "you cannot trust the current state of CPUs (for example, at very early "
+#| "stages of boot), as you want to avoid your thread to migrate on inactive "
+#| "CPUs. Since `sched_bind` and `sched_unbind` manipulate internal "
+#| "scheduler structures, they need to be enclosed in `sched_lock` "
+#| "acquisition/releasing when used."
+msgid ""
+"`sched_bind` is an API used to bind a thread to a particular CPU for all the "
+"time it executes the code, until a `sched_unbind` function call does not "
+"unbind it. This feature has a key role in situations where you cannot trust "
+"the current state of CPUs (for example, at very early stages of boot), as "
+"you want to avoid your thread to migrate on inactive CPUs. Since "
+"`sched_bind` and `sched_unbind` manipulate internal scheduler structures, "
+"they need to be enclosed in `sched_lock` acquisition/releasing when used."
+msgstr ""
+"O `sched_bind` é uma API usada para vincular uma thread a uma CPU específica "
+"durante todo o tempo em que ela executa o código, até que uma chamada da "
+"função `sched_unbind` a desvincule. Essa funcionalidade desempenha um papel "
+"importante em situações em que você não pode confiar no estado atual das "
+"CPUs (por exemplo, nas primeiras etapas de inicialização), pois deseja "
+"evitar que sua thread migre para CPUs inativas. Como o `sched_bind` e o "
+"`sched_unbind` manipulam estruturas internas do escalonador, eles devem ser "
+"envolvidos na aquisição/liberação do `sched_lock` ao serem usados."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:586
+#, no-wrap
+msgid "Proc structure"
+msgstr "Estrutura Proc"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:592
+msgid ""
+"Various emulation layers sometimes require some additional per-process "
+"data. It can manage separate structures (a list, a tree etc.) containing "
+"these data for every process but this tends to be slow and memory "
+"consuming. To solve this problem the FreeBSD `proc` structure contains "
+"`p_emuldata`, which is a void pointer to some emulation layer specific "
+"data. This `proc` entry is protected by the proc mutex."
+msgstr ""
+"Em algumas camadas de emulação, às vezes é necessário ter dados adicionais "
+"específicos para cada processo. Pode-se gerenciar estruturas separadas (como "
+"uma lista, uma árvore etc.) que contenham esses dados para cada processo, "
+"mas isso pode ser lento e consumir muita memória. Para resolver esse "
+"problema, a estrutura `proc` do FreeBSD contém o campo `p_emuldata`, que é "
+"um ponteiro vazio para dados específicos da camada de emulação. Essa entrada "
+"`proc` é protegida pelo mutex do processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:597
+msgid ""
+"The FreeBSD `proc` structure contains a `p_sysent` entry that identifies, "
+"which ABI this process is running. In fact, it is a pointer to the "
+"`sysentvec` described above. So by comparing this pointer to the address "
+"where the `sysentvec` structure for the given ABI is stored we can "
+"effectively determine whether the process belongs to our emulation layer. "
+"The code typically looks like:"
+msgstr ""
+"A estrutura `proc` do FreeBSD contém uma entrada `p_sysent` que identifica "
+"qual ABI esse processo está executando. Na verdade, é um ponteiro para a "
+"estrutura `sysentvec` descrita anteriormente. Portanto, ao comparar esse "
+"ponteiro com o endereço onde a estrutura `sysentvec` para a ABI específica "
+"está armazenada, podemos determinar efetivamente se o processo pertence à "
+"nossa camada de emulação. O código geralmente se parece com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:602
+#, no-wrap
+msgid ""
+"if (__predict_true(p->p_sysent != &elf_Linux(R)_sysvec))\n"
+"\t return;\n"
+msgstr ""
+"if (__predict_true(p->p_sysent != &elf_Linux(R)_sysvec))\n"
+"\t return;\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:606
+msgid ""
+"As you can see, we effectively use the `__predict_true` modifier to collapse "
+"the most common case (FreeBSD process) to a simple return operation thus "
+"preserving high performance. This code should be turned into a macro "
+"because currently it is not very flexible, i.e. we do not support Linux(R)64 "
+"emulation nor A.OUT Linux(R) processes on i386."
+msgstr ""
+"Como você pode ver, usamos efetivamente o modificador `__predict_true` para "
+"colapsar o caso mais comum (processo FreeBSD) em uma simples operação de "
+"retorno, preservando assim o alto desempenho. Esse código deve ser "
+"transformado em uma macro porque atualmente não é muito flexível, ou seja, "
+"não suportamos emulação Linux(R)64 nem processos Linux(R) A.OUT em i386."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:608
+#, no-wrap
+msgid "VFS"
+msgstr "VFS"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:617
+msgid ""
+"The FreeBSD VFS subsystem is very complex but the Linux(R) emulation layer "
+"uses just a small subset via a well defined API. It can either operate on "
+"vnodes or file handlers. Vnode represents a virtual vnode, i.e. "
+"representation of a node in VFS. Another representation is a file handler, "
+"which represents an opened file from the perspective of a process. A file "
+"handler can represent a socket or an ordinary file. A file handler contains "
+"a pointer to its vnode. More then one file handler can point to the same "
+"vnode."
+msgstr ""
+"O subsistema VFS do FreeBSD é muito complexo, mas a camada de emulação do "
+"Linux(R) utiliza apenas um pequeno subconjunto por meio de uma API bem "
+"definida. Ela pode operar em vnodes ou manipuladores de arquivo. Vnode "
+"representa um vnode virtual, ou seja, uma representação de um nó no VFS. "
+"Outra representação é um manipulador de arquivo, que representa um arquivo "
+"aberto do ponto de vista de um processo. Um manipulador de arquivo pode "
+"representar um socket ou um arquivo comum. Um manipulador de arquivo contém "
+"um ponteiro para seu vnode. Mais de um manipulador de arquivo pode apontar "
+"para o mesmo vnode."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:619
+#, no-wrap
+msgid "namei"
+msgstr "namei"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:626
+msgid ""
+"The man:namei[9] routine is a central entry point to pathname lookup and "
+"translation. It traverses the path point by point from the starting point "
+"to the end point using lookup function, which is internal to VFS. The man:"
+"namei[9] syscall can cope with symlinks, absolute and relative paths. When "
+"a path is looked up using man:namei[9] it is inputed to the name cache. This "
+"behavior can be suppressed. This routine is used all over the kernel and "
+"its performance is very critical."
+msgstr ""
+"A rotina man:namei[9] é um ponto de entrada central para a pesquisa e "
+"tradução de caminhos de nomes. Ela percorre o caminho ponto a ponto, do "
+"ponto de partida ao ponto final, usando a função de pesquisa, que é interna "
+"ao VFS. A chamada man:namei[9] pode lidar com links simbólicos, caminhos "
+"absolutos e relativos. Quando um caminho é pesquisado usando man:namei[9], "
+"ele é inserido no cache de nomes. Esse comportamento pode ser suprimido. "
+"Essa rotina é usada em todo o kernel e seu desempenho é muito crítico."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:628
+#, no-wrap
+msgid "vn_fullpath"
+msgstr "vn_fullpath"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:634
+msgid ""
+"The man:vn_fullpath[9] function takes the best effort to traverse VFS name "
+"cache and returns a path for a given (locked) vnode. This process is "
+"unreliable but works just fine for the most common cases. The unreliability "
+"is because it relies on VFS cache (it does not traverse the on medium "
+"structures), it does not work with hardlinks, etc. This routine is used in "
+"several places in the Linuxulator."
+msgstr ""
+"A função man:vn_fullpath[9] faz o melhor esforço para percorrer o cache de "
+"nomes do VFS e retorna um caminho para um vnode específico (bloqueado). Esse "
+"processo é não confiável, mas funciona muito bem na maioria dos casos "
+"comuns. A falta de confiabilidade ocorre porque ela depende do cache do VFS "
+"(não percorre as estruturas no meio físico) e não funciona com links "
+"rígidos, entre outras limitações. Essa rotina é usada em vários lugares no "
+"Linuxulator."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:636
+#, no-wrap
+msgid "Vnode operations"
+msgstr "Operações de vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:639
+msgid ""
+"`fgetvp` - given a thread and a file descriptor number it returns the "
+"associated vnode"
+msgstr ""
+"`fgetvp` - dado um thread e um número de descritor de arquivo, ele retorna o "
+"vnode associado"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:640
+msgid "man:vn_lock[9] - locks a vnode"
+msgstr "man:vn_lock[9] - bloqueia um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:641
+msgid "`vn_unlock` - unlocks a vnode"
+msgstr "`vn_unlock` - desbloqueia um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:642
+msgid "man:VOP_READDIR[9] - reads a directory referenced by a vnode"
+msgstr "man:VOP_READDIR[9] - lê um diretório referenciado por um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:643
+msgid ""
+"man:VOP_GETATTR[9] - gets attributes of a file or a directory referenced by "
+"a vnode"
+msgstr ""
+"man:VOP_GETATTR[9] - obtém atributos de um arquivo ou diretório referenciado "
+"por um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:644
+msgid "man:VOP_LOOKUP[9] - looks up a path to a given directory"
+msgstr "man:VOP_LOOKUP[9] - busca um caminho para um diretório específico"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:645
+msgid "man:VOP_OPEN[9] - opens a file referenced by a vnode"
+msgstr "man:VOP_OPEN[9] - abre um arquivo referenciado por um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:646
+msgid "man:VOP_CLOSE[9] - closes a file referenced by a vnode"
+msgstr "man:VOP_CLOSE[9] - fecha um arquivo referenciado por um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:647
+msgid "man:vput[9] - decrements the use count for a vnode and unlocks it"
+msgstr "man:vput[9] - decrementa a contagem de uso de um vnode e desbloqueia"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:648
+msgid "man:vrele[9] - decrements the use count for a vnode"
+msgstr "man:vrele[9] - diminui o contador de uso para um vnode"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:649
+msgid "man:vref[9] - increments the use count for a vnode"
+msgstr "man:vref[9] - incrementa a contagem de uso de um vnode"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:651
+#, no-wrap
+msgid "File handler operations"
+msgstr "Operações do manipulador de arquivos"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:654
+msgid ""
+"`fget` - given a thread and a file descriptor number it returns associated "
+"file handler and references it"
+msgstr ""
+"`fget` - dado um thread e um número de descritor de arquivo, ele retorna o "
+"file handler associado e o referencia"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:655
+msgid "`fdrop` - drops a reference to a file handler"
+msgstr "`fdrop` - remove uma referência a um file handler"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:656
+msgid "`fhold` - references a file handler"
+msgstr "`fhold` - referencia um file handler"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:658
+#, no-wrap
+msgid "Linux(R) emulation layer -MD part"
+msgstr "A camada de emulação do Linux(R) - parte MD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:666
+msgid ""
+"This section deals with implementation of Linux(R) emulation layer in "
+"FreeBSD operating system. It first describes the machine dependent part "
+"talking about how and where interaction between userland and kernel is "
+"implemented. It talks about syscalls, signals, ptrace, traps, stack fixup. "
+"This part discusses i386 but it is written generally so other architectures "
+"should not differ very much. The next part is the machine independent part "
+"of the Linuxulator. This section only covers i386 and ELF handling. A.OUT "
+"is obsolete and untested."
+msgstr ""
+"Esta seção trata da implementação da camada de emulação do Linux(R) no "
+"sistema operacional FreeBSD. Ela descreve primeiramente a parte dependente "
+"da máquina, abordando como e onde a interação entre o espaço do usuário e o "
+"kernel é implementada. Ela fala sobre syscalls, sinais, ptrace, traps e "
+"ajuste de pilha. Essa parte discute o i386, mas é escrita de forma geral, "
+"então outras arquiteturas não devem diferir muito. A próxima parte é a parte "
+"independente da máquina do Linuxulator. Esta seção aborda apenas o i386 e o "
+"tratamento de arquivos ELF. O formato A.OUT está obsoleto e não foi testado."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:668
+#, no-wrap
+msgid "Syscall handling"
+msgstr "Manipulação de Syscall"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:672
+msgid ""
+"Syscall handling is mostly written in [.filename]#linux_sysvec.c#, which "
+"covers most of the routines pointed out in the `sysentvec` structure. When "
+"a Linux(R) process running on FreeBSD issues a syscall, the general syscall "
+"routine calls linux prepsyscall routine for the Linux(R) ABI."
+msgstr ""
+"O tratamento de syscalls é principalmente escrito em [."
+"filename]#linux_sysvec.c#, que abrange a maioria das rotinas apontadas na "
+"estrutura `sysentvec`. Quando um processo do Linux(R) em execução no FreeBSD "
+"faz uma syscall, a rotina geral de syscall chama a rotina linux prepsyscall "
+"para a ABI do Linux(R)."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:674
+#, no-wrap
+msgid "Linux(R) prepsyscall"
+msgstr "Linux(R) prepsyscall"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:681
+msgid ""
+"Linux(R) passes arguments to syscalls via registers (that is why it is "
+"limited to 6 parameters on i386) while FreeBSD uses the stack. The Linux(R) "
+"prepsyscall routine must copy parameters from registers to the stack. The "
+"order of the registers is: `%ebx`, `%ecx`, `%edx`, `%esi`, `%edi`, `%ebp`. "
+"The catch is that this is true for only _most_ of the syscalls. Some (most "
+"notably `clone`) uses a different order but it is luckily easy to fix by "
+"inserting a dummy parameter in the `linux_clone` prototype."
+msgstr ""
+"No Linux(R), os argumentos das syscalls são passados via registradores (por "
+"isso é limitado a 6 parâmetros no i386), enquanto no FreeBSD eles são "
+"passados pela pilha. A rotina linux prepsyscall deve copiar os parâmetros "
+"dos registradores para a pilha. A ordem dos registradores é: `%ebx`, `%ecx`, "
+"`%edx`, `%esi`, `%edi`, `%ebp`. A questão é que isso é verdade apenas para "
+"_a maioria_ das syscalls. Algumas (mais notavelmente `clone`) usam uma ordem "
+"diferente, mas felizmente é fácil corrigir isso inserindo um parâmetro "
+"fictício no protótipo `linux_clone`."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:683
+#, no-wrap
+msgid "Syscall writing"
+msgstr "Escrevendo syscall"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:687
+msgid ""
+"Every syscall implemented in the Linuxulator must have its prototype with "
+"various flags in [.filename]#syscalls.master#. The form of the file is:"
+msgstr ""
+"Cada chamada de sistema implementada no Linuxulator deve ter seu protótipo "
+"com várias flags no arquivo `syscalls.master`. A estrutura do arquivo é a "
+"seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:695
+#, no-wrap
+msgid ""
+"...\n"
+"\tAUE_FORK STD\t\t{ int linux_fork(void); }\n"
+"...\n"
+"\tAUE_CLOSE NOPROTO\t{ int close(int fd); }\n"
+"...\n"
+msgstr ""
+"...\n"
+"\tAUE_FORK STD\t\t{ int linux_fork(void); }\n"
+"...\n"
+"\tAUE_CLOSE NOPROTO\t{ int close(int fd); }\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:705
+msgid ""
+"The first column represents the syscall number. The second column is for "
+"auditing support. The third column represents the syscall type. It is "
+"either `STD`, `OBSOL`, `NOPROTO` and `UNIMPL`. `STD` is a standard syscall "
+"with full prototype and implementation. `OBSOL` is obsolete and defines "
+"just the prototype. `NOPROTO` means that the syscall is implemented "
+"elsewhere so do not prepend ABI prefix, etc. `UNIMPL` means that the "
+"syscall will be substituted with the `nosys` syscall (a syscall just "
+"printing out a message about the syscall not being implemented and returning "
+"`ENOSYS`)."
+msgstr ""
+"A primeira coluna representa o número da syscall. A segunda coluna é para "
+"suporte de auditoria. A terceira coluna representa o tipo de syscall. Pode "
+"ser `STD`, `OBSOL`, `NOPROTO` ou `UNIMPL`. `STD` é uma syscall padrão com "
+"protótipo e implementação completos. `OBSOL` é obsoleta e define apenas o "
+"protótipo. `NOPROTO` significa que a syscall é implementada em outro lugar, "
+"então não é necessário adicionar o prefixo ABI, etc. `UNIMPL` significa que "
+"a syscall será substituída pela syscall `nosys` (uma syscall que apenas "
+"imprime uma mensagem informando que a syscall não está implementada e "
+"retorna `ENOSYS`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:708
+msgid ""
+"From [.filename]#syscalls.master# a script generates three files: [."
+"filename]#linux_syscall.h#, [.filename]#linux_proto.h# and [."
+"filename]#linux_sysent.c#. The [.filename]#linux_syscall.h# contains "
+"definitions of syscall names and their numerical value, e.g.:"
+msgstr ""
+"Do [.filename]#syscalls.master#, um script gera três arquivos: [."
+"filename]#linux_syscall.h#, [.filename]#linux_proto.h# e [."
+"filename]#linux_sysent.c#. O arquivo [.filename]#linux_syscall.h# contém as "
+"definições dos nomes das syscalls e seus valores numéricos, por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:716
+#, no-wrap
+msgid ""
+"...\n"
+"#define LINUX_SYS_linux_fork 2\n"
+"...\n"
+"#define LINUX_SYS_close 6\n"
+"...\n"
+msgstr ""
+"...\n"
+"#define LINUX_SYS_linux_fork 2\n"
+"...\n"
+"#define LINUX_SYS_close 6\n"
+"...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:719
+msgid ""
+"The [.filename]#linux_proto.h# contains structure definitions of arguments "
+"to every syscall, e.g.:"
+msgstr ""
+"O [.filename]#linux_proto.h# contém definições de estrutura de argumentos "
+"para cada syscall, por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:725
+#, no-wrap
+msgid ""
+"struct linux_fork_args {\n"
+" register_t dummy;\n"
+"};\n"
+msgstr ""
+"struct linux_fork_args {\n"
+" register_t dummy;\n"
+"};\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:728
+msgid ""
+"And finally, [.filename]#linux_sysent.c# contains structure describing the "
+"system entry table, used to actually dispatch a syscall, e.g.:"
+msgstr ""
+"E finalmente, o [.filename]#linux_sysent.c# contém uma estrutura descrevendo "
+"a tabela de entrada do sistema, usada para realmente enviar um syscall, por "
+"exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:733
+#, no-wrap
+msgid ""
+"{ 0, (sy_call_t *)linux_fork, AUE_FORK, NULL, 0, 0 }, /* 2 = linux_fork */\n"
+"{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */\n"
+msgstr ""
+"{ 0, (sy_call_t *)linux_fork, AUE_FORK, NULL, 0, 0 }, /* 2 = linux_fork */\n"
+"{ AS(close_args), (sy_call_t *)close, AUE_CLOSE, NULL, 0, 0 }, /* 6 = close */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:737
+msgid ""
+"As you can see `linux_fork` is implemented in Linuxulator itself so the "
+"definition is of `STD` type and has no argument, which is exhibited by the "
+"dummy argument structure. On the other hand `close` is just an alias for "
+"real FreeBSD man:close[2] so it has no linux arguments structure associated "
+"and in the system entry table it is not prefixed with linux as it calls the "
+"real man:close[2] in the kernel."
+msgstr ""
+"Como você pode ver, `linux_fork` é implementado no próprio Linuxulator, "
+"então a definição é do tipo `STD` e não tem argumentos, o que é exibido pela "
+"estrutura de argumentos fictícia. Por outro lado, `close` é apenas um alias "
+"para o verdadeiro man:close[2] do FreeBSD, então não possui uma estrutura de "
+"argumentos específica do Linux associada e na tabela de entrada do sistema "
+"não é prefixado com linux, pois chama o verdadeiro man:close[2] no kernel."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:739
+#, no-wrap
+msgid "Dummy syscalls"
+msgstr "Dummy syscalls"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:745
+#, fuzzy
+#| msgid ""
+#| "The Linux(R) emulation layer is not complete, as some syscalls are not "
+#| "implemented properly and some are not implemented at all. The emulation "
+#| "layer employs a facility to mark unimplemented syscalls with the `DUMMY` "
+#| "macro. These dummy definitions reside in [.filename]#linux_dummy.c# in a "
+#| "form of `DUMMY(syscall);`, which is then translated to various syscall "
+#| "auxiliary files and the implementation consists of printing a message "
+#| "saying that this syscall is not implemented. The `UNIMPL` prototype is "
+#| "not used because we want to be able to identify the name of the syscall "
+#| "that was called in order to know what syscalls are more important to "
+#| "implement."
+msgid ""
+"The Linux(R) emulation layer is not complete, as some syscalls are not "
+"implemented properly and some are not implemented at all. The emulation "
+"layer employs a facility to mark unimplemented syscalls with the `DUMMY` "
+"macro. These dummy definitions reside in [.filename]#linux_dummy.c# in a "
+"form of `DUMMY(syscall);`, which is then translated to various syscall "
+"auxiliary files and the implementation consists of printing a message saying "
+"that this syscall is not implemented. The `UNIMPL` prototype is not used "
+"because we want to be able to identify the name of the syscall that was "
+"called to know what syscalls are more important to implement."
+msgstr ""
+"A camada de emulação do Linux(R) não está completa, pois alguns syscalls não "
+"estão implementados corretamente e alguns não estão implementados de forma "
+"alguma. A camada de emulação utiliza uma função para marcar os syscalls não "
+"implementados com a macro `DUMMY`. Essas definições fictícias residem no "
+"arquivo [.filename]#linux_dummy.c# na forma de `DUMMY(syscall);`, que é "
+"então traduzido para vários arquivos auxiliares de syscalls. A implementação "
+"consiste em imprimir uma mensagem informando que esse syscall não está "
+"implementado. O protótipo `UNIMPL` não é usado porque queremos ser capazes "
+"de identificar o nome do syscall que foi chamado para saber quais syscalls "
+"são mais importantes de implementar."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:747
+#, no-wrap
+msgid "Signal handling"
+msgstr "Manuseio de signals"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:751
+msgid ""
+"Signal handling is done generally in the FreeBSD kernel for all binary "
+"compatibilities with a call to a compat-dependent layer. Linux(R) "
+"compatibility layer defines `linux_sendsig` routine for this purpose."
+msgstr ""
+"O tratamento de sinais é feito geralmente no kernel do FreeBSD para todas as "
+"compatibilidades binárias com uma chamada a uma camada dependente de "
+"compatibilidade. A camada de compatibilidade do Linux(R) define a rotina "
+"`linux_sendsig` para este propósito."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:753
+#, no-wrap
+msgid "Linux(R) sendsig"
+msgstr "Linux(R) sendsig"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:760
+msgid ""
+"This routine first checks whether the signal has been installed with a "
+"`SA_SIGINFO` in which case it calls `linux_rt_sendsig` routine instead. "
+"Furthermore, it allocates (or reuses an already existing) signal handle "
+"context, then it builds a list of arguments for the signal handler. It "
+"translates the signal number based on the signal translation table, assigns "
+"a handler, translates sigset. Then it saves context for the `sigreturn` "
+"routine (various registers, translated trap number and signal mask). "
+"Finally, it copies out the signal context to the userspace and prepares "
+"context for the actual signal handler to run."
+msgstr ""
+"Essa rotina primeiro verifica se o sinal foi instalado com `SA_SIGINFO`, "
+"caso contrário, ela chama a rotina `linux_rt_sendsig`. Além disso, aloca (ou "
+"reutiliza um já existente) o contexto do manipulador de sinal, em seguida, "
+"constrói uma lista de argumentos para o manipulador de sinal. Traduz o "
+"número do sinal com base na tabela de tradução de sinais, atribui um "
+"manipulador e traduz o conjunto de sinais. Em seguida, salva o contexto para "
+"a rotina `sigreturn` (diversos registradores, número de interrupção "
+"traduzido e máscara de sinais). Por fim, copia o contexto do sinal para o "
+"espaço do usuário e prepara o contexto para a execução real do manipulador "
+"de sinal."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:762
+#, no-wrap
+msgid "linux_rt_sendsig"
+msgstr "linux_rt_sendsig"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:767
+msgid ""
+"This routine is similar to `linux_sendsig` just the signal context "
+"preparation is different. It adds `siginfo`, `ucontext`, and some POSIX(R) "
+"parts. It might be worth considering whether those two functions could not "
+"be merged with a benefit of less code duplication and possibly even faster "
+"execution."
+msgstr ""
+"Esta rotina é semelhante à `linux_sendsig`, mas a preparação do contexto do "
+"sinal é diferente. Ela adiciona `siginfo`, `ucontext` e algumas partes "
+"POSIX(R). Pode valer a pena considerar se essas duas funções não poderiam "
+"ser mescladas com o benefício de menos duplicação de código e possivelmente "
+"até execução mais rápida."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:769
+#, no-wrap
+msgid "linux_sigreturn"
+msgstr "linux_sigreturn"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:774
+msgid ""
+"This syscall is used for return from the signal handler. It does some "
+"security checks and restores the original process context. It also unmasks "
+"the signal in process signal mask."
+msgstr ""
+"Essa chamada de sistema é usada para retornar do manipulador de sinal. Ela "
+"realiza algumas verificações de segurança e restaura o contexto original do "
+"processo. Além disso, desativa o sinal na máscara de sinais do processo."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:776
+#, no-wrap
+msgid "Ptrace"
+msgstr "Ptrace"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:782
+#, fuzzy
+#| msgid ""
+#| "Many UNIX(R) derivates implement the man:ptrace[2] syscall in order to "
+#| "allow various tracking and debugging features. This facility enables the "
+#| "tracing process to obtain various information about the traced process, "
+#| "like register dumps, any memory from the process address space, etc. and "
+#| "also to trace the process like in stepping an instruction or between "
+#| "system entries (syscalls and traps). man:ptrace[2] also lets you set "
+#| "various information in the traced process (registers etc.). man:"
+#| "ptrace[2] is a UNIX(R)-wide standard implemented in most UNIX(R)es around "
+#| "the world."
+msgid ""
+"Many UNIX(R) derivates implement the man:ptrace[2] syscall to allow various "
+"tracking and debugging features. This facility enables the tracing process "
+"to obtain various information about the traced process, like register dumps, "
+"any memory from the process address space, etc. and also to trace the "
+"process like in stepping an instruction or between system entries (syscalls "
+"and traps). man:ptrace[2] also lets you set various information in the "
+"traced process (registers etc.). man:ptrace[2] is a UNIX(R)-wide standard "
+"implemented in most UNIX(R)es around the world."
+msgstr ""
+"Muitos derivados do UNIX(R) implementam a syscall man:ptrace[2] para "
+"permitir várias funcionalidades de rastreamento e depuração. Essa facilidade "
+"permite que o processo de rastreamento obtenha várias informações sobre o "
+"processo rastreado, como despejos de registradores, qualquer memória do "
+"espaço de endereços do processo, etc., e também rastreie o processo, como "
+"passar instruções ou entre entradas do sistema (syscalls e traps). A man:"
+"ptrace[2] também permite definir várias informações no processo rastreado "
+"(registradores, etc.). A man:ptrace[2] é um padrão amplamente adotado no "
+"UNIX(R) e implementado na maioria dos sistemas UNIX(R) ao redor do mundo."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:788
+msgid ""
+"Linux(R) emulation in FreeBSD implements the man:ptrace[2] facility in [."
+"filename]#linux_ptrace.c#. The routines for converting registers between "
+"Linux(R) and FreeBSD and the actual man:ptrace[2] syscall emulation "
+"syscall. The syscall is a long switch block that implements its counterpart "
+"in FreeBSD for every man:ptrace[2] command. The man:ptrace[2] commands are "
+"mostly equal between Linux(R) and FreeBSD so usually just a small "
+"modification is needed. For example, `PT_GETREGS` in Linux(R) operates on "
+"direct data while FreeBSD uses a pointer to the data so after performing a "
+"(native) man:ptrace[2] syscall, a copyout must be done to preserve Linux(R) "
+"semantics."
+msgstr ""
+"A emulação do Linux(R) no FreeBSD implementa a facilidade man:ptrace[2] em [."
+"filename]#linux_ptrace.c#. As rotinas de conversão de registradores entre "
+"Linux(R) e FreeBSD e a própria syscall de emulação man:ptrace[2]. A syscall "
+"é um longo bloco switch que implementa seu equivalente no FreeBSD para cada "
+"comando man:ptrace[2]. Os comandos man:ptrace[2] são principalmente iguais "
+"entre Linux(R) e FreeBSD, então geralmente apenas uma pequena modificação é "
+"necessária. Por exemplo, `PT_GETREGS` no Linux(R) opera em dados diretos, "
+"enquanto o FreeBSD usa um ponteiro para os dados, então após a execução de "
+"uma syscall man:ptrace[2] (nativa), é necessário fazer uma cópia dos dados "
+"usando copyout para preservar a semântica do Linux(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:792
+msgid ""
+"The man:ptrace[2] implementation in Linuxulator has some known weaknesses. "
+"There have been panics seen when using `strace` (which is a man:ptrace[2] "
+"consumer) in the Linuxulator environment. Also `PT_SYSCALL` is not "
+"implemented."
+msgstr ""
+"A implementação man:ptrace[2] no Linuxulator tem algumas fraquezas "
+"conhecidas. Houve panes vistas ao usar `strace` (que é um consumidor man:"
+"ptrace[2]) no ambiente Linuxulator. Além disso, `PT_SYSCALL` não está "
+"implementado."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:799
+msgid ""
+"Whenever a Linux(R) process running in the emulation layer traps the trap "
+"itself is handled transparently with the only exception of the trap "
+"translation. Linux(R) and FreeBSD differs in opinion on what a trap is so "
+"this is dealt with here. The code is actually very short:"
+msgstr ""
+"Sempre que um processo Linux(R) executando na camada de emulação sofre uma "
+"interrupção, a própria interrupção é tratada de forma transparente com a "
+"única exceção da tradução da interrupção. O Linux(R) e o FreeBSD diferem em "
+"suas opiniões sobre o que é uma interrupção, então isso é tratado aqui. O "
+"código é realmente muito curto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:805
+#, no-wrap
+msgid ""
+"static int\n"
+"translate_traps(int signal, int trap_code)\n"
+"{\n"
+msgstr ""
+"static int\n"
+"translate_traps(int signal, int trap_code)\n"
+"{\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:808
+#, no-wrap
+msgid ""
+" if (signal != SIGBUS)\n"
+" return signal;\n"
+msgstr ""
+" if (signal != SIGBUS)\n"
+" return signal;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:810
+#, no-wrap
+msgid " switch (trap_code) {\n"
+msgstr " switch (trap_code) {\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:816
+#, no-wrap
+msgid ""
+" case T_PROTFLT:\n"
+" case T_TSSFLT:\n"
+" case T_DOUBLEFLT:\n"
+" case T_PAGEFLT:\n"
+" return SIGSEGV;\n"
+msgstr ""
+" case T_PROTFLT:\n"
+" case T_TSSFLT:\n"
+" case T_DOUBLEFLT:\n"
+" case T_PAGEFLT:\n"
+" return SIGSEGV;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:821
+#, no-wrap
+msgid ""
+" default:\n"
+" return signal;\n"
+" }\n"
+"}\n"
+msgstr ""
+" default:\n"
+" return signal;\n"
+" }\n"
+"}\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:824
+#, no-wrap
+msgid "Stack fixup"
+msgstr "Correção de pilha"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:831
+msgid ""
+"The RTLD run-time link-editor expects so called AUX tags on stack during an "
+"`execve` so a fixup must be done to ensure this. Of course, every RTLD "
+"system is different so the emulation layer must provide its own stack fixup "
+"routine to do this. So does Linuxulator. The `elf_linux_fixup` simply "
+"copies out AUX tags to the stack and adjusts the stack of the user space "
+"process to point right after those tags. So RTLD works in a smart way."
+msgstr ""
+"O link-editor em tempo de execução RTLD espera que as chamadas AUX estejam "
+"presentes na pilha durante um `execve`, então é necessário fazer um ajuste "
+"para garantir isso. Naturalmente, cada sistema RTLD é diferente, então a "
+"camada de emulação deve fornecer sua própria rotina de ajuste da pilha para "
+"realizar isso. Isso também se aplica ao Linuxulator. A função "
+"`elf_linux_fixup` simplesmente copia as chamadas AUX para a pilha e ajusta o "
+"ponteiro da pilha do processo de espaço de usuário para apontar "
+"imediatamente após essas chamadas. Dessa forma, o RTLD funciona de maneira "
+"inteligente."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:833
+#, no-wrap
+msgid "A.OUT support"
+msgstr "Suporte para A.OUT"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:840
+msgid ""
+"The Linux(R) emulation layer on i386 also supports Linux(R) A.OUT binaries. "
+"Pretty much everything described in the previous sections must be "
+"implemented for A.OUT support (beside traps translation and signals "
+"sending). The support for A.OUT binaries is no longer maintained, "
+"especially the 2.6 emulation does not work with it but this does not cause "
+"any problem, as the linux-base in ports probably do not support A.OUT "
+"binaries at all. This support will probably be removed in future. Most of "
+"the stuff necessary for loading Linux(R) A.OUT binaries is in [."
+"filename]#imgact_linux.c# file."
+msgstr ""
+"A camada de emulação do Linux(R) no i386 também suporta binários A.OUT do "
+"Linux(R). Praticamente tudo o que foi descrito nas seções anteriores deve "
+"ser implementado para oferecer suporte ao formato A.OUT (exceto a tradução "
+"de traps e o envio de sinais). O suporte para binários A.OUT não é mais "
+"mantido, especialmente a emulação 2.6 não funciona com esse formato. No "
+"entanto, isso não causa nenhum problema, já que o linux-base nos ports "
+"provavelmente não suporta binários A.OUT. Esse suporte provavelmente será "
+"removido no futuro. A maior parte do necessário para carregar binários A.OUT "
+"do Linux(R) está no arquivo [.filename]#imgact_linux.c#."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:842
+#, no-wrap
+msgid "Linux(R) emulation layer -MI part"
+msgstr "Camada de emulação do Linux(R) - Parte MI"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:847
+msgid ""
+"This section talks about machine independent part of the Linuxulator. It "
+"covers the emulation infrastructure needed for Linux(R) 2.6 emulation, the "
+"thread local storage (TLS) implementation (on i386) and futexes. Then we "
+"talk briefly about some syscalls."
+msgstr ""
+"Esta seção aborda a parte independente de máquina do Linuxulator. Ela cobre "
+"a infraestrutura de emulação necessária para a emulação do Linux(R) 2.6, a "
+"implementação do armazenamento local de threads (TLS) (em i386) e futexes. "
+"Em seguida, falamos brevemente sobre algumas syscalls."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:849
+#, no-wrap
+msgid "Description of NPTL"
+msgstr "Descrição do NPTL"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:857
+msgid ""
+"One of the major areas of progress in development of Linux(R) 2.6 was "
+"threading. Prior to 2.6, the Linux(R) threading support was implemented in "
+"the linuxthreads library. The library was a partial implementation of "
+"POSIX(R) threading. The threading was implemented using separate processes "
+"for each thread using the `clone` syscall to let them share the address "
+"space (and other things). The main weaknesses of this approach was that "
+"every thread had a different PID, signal handling was broken (from the "
+"pthreads perspective), etc. Also the performance was not very good (use of "
+"`SIGUSR` signals for threads synchronization, kernel resource consumption, "
+"etc.) so to overcome these problems a new threading system was developed and "
+"named NPTL."
+msgstr ""
+"Um dos principais avanços no desenvolvimento do Linux(R) 2.6 foi a "
+"implementação de threads. Antes do 2.6, o suporte a threading no Linux(R) "
+"era implementado na biblioteca linuxthreads. Essa biblioteca era uma "
+"implementação parcial da threading POSIX(R). A threading era implementada "
+"usando processos separados para cada thread, usando a syscall `clone` para "
+"permitir que compartilhassem o espaço de endereçamento (e outras coisas). As "
+"principais fraquezas dessa abordagem eram que cada thread tinha um PID "
+"diferente, o tratamento de sinais era problemático (do ponto de vista do "
+"pthreads), etc. Além disso, o desempenho não era muito bom (uso de sinais "
+"`SIGUSR` para sincronização de threads, consumo de recursos do kernel, "
+"etc.), então, para superar esses problemas, um novo sistema de threading foi "
+"desenvolvido e chamado de NPTL."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:863
+msgid ""
+"The NPTL library focused on two things but a third thing came along so it is "
+"usually considered a part of NPTL. Those two things were embedding of "
+"threads into a process structure and futexes. The additional third thing "
+"was TLS, which is not directly required by NPTL but the whole NPTL userland "
+"library depends on it. Those improvements yielded in much improved "
+"performance and standards conformance. NPTL is a standard threading library "
+"in Linux(R) systems these days."
+msgstr ""
+"A biblioteca NPTL concentrou-se em duas coisas, mas uma terceira acabou "
+"sendo incluída e é geralmente considerada parte do NPTL. Essas duas coisas "
+"eram a incorporação de threads em uma estrutura de processo e futexes. A "
+"terceira coisa adicional foi TLS (Thread-Local Storage), que não é "
+"diretamente exigida pelo NPTL, mas toda a biblioteca NPTL do espaço do "
+"usuário depende dela. Essas melhorias resultaram em um desempenho muito "
+"melhorado e conformidade com padrões. O NPTL é uma biblioteca padrão de "
+"threading em sistemas Linux(R) nos dias de hoje."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:867
+msgid ""
+"The FreeBSD Linuxulator implementation approaches the NPTL in three main "
+"areas. The TLS, futexes and PID mangling, which is meant to simulate the "
+"Linux(R) threads. Further sections describe each of these areas."
+msgstr ""
+"A implementação do Linuxulator no FreeBSD aborda o NPTL em três áreas "
+"principais. O TLS (Thread-Local Storage), os futexes e a manipulação de PID, "
+"que tem como objetivo simular as threads do Linux(R). Seções adicionais "
+"descrevem cada uma dessas áreas em detalhes."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:869
+#, no-wrap
+msgid "Linux(R) 2.6 emulation infrastructure"
+msgstr "Infraestrutura de emulação do Linux(R) 2.6"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:872
+msgid ""
+"These sections deal with the way Linux(R) threads are managed and how we "
+"simulate that in FreeBSD."
+msgstr ""
+"Essas seções lidam com a forma como as threads do Linux(R) são gerenciadas e "
+"como simulamos isso no FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:874
+#, no-wrap
+msgid "Runtime determining of 2.6 emulation"
+msgstr "Determinação de tempo de execução de emulação 2.6"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:883
+msgid ""
+"The Linux(R) emulation layer in FreeBSD supports runtime setting of the "
+"emulated version. This is done via man:sysctl[8], namely `compat.linux."
+"osrelease`. Setting this man:sysctl[8] affects runtime behavior of the "
+"emulation layer. When set to 2.6.x it sets the value of `linux_use_linux26` "
+"while setting to something else keeps it unset. This variable (plus per-"
+"prison variables of the very same kind) determines whether 2.6 "
+"infrastructure (mainly PID mangling) is used in the code or not. The "
+"version setting is done system-wide and this affects all Linux(R) "
+"processes. The man:sysctl[8] should not be changed when running any "
+"Linux(R) binary as it might harm things."
+msgstr ""
+"A camada de emulação do Linux(R) no FreeBSD suporta a configuração em tempo "
+"de execução da versão emulada. Isso é feito por meio do man:sysctl[8], mais "
+"especificamente através do parâmetro `compat.linux.osrelease`. Configurar "
+"esse man:sysctl[8] afeta o comportamento em tempo de execução da camada de "
+"emulação. Ao definir para 2.6.x, ele define o valor de `linux_use_linux26`, "
+"enquanto definir para qualquer outro valor mantém esse valor como "
+"indefinido. Essa variável (juntamente com as variáveis específicas de cada "
+"prisão) determina se a infraestrutura 2.6 (principalmente o processo de "
+"manipulação de PID) é usada no código ou não. A configuração da versão é "
+"feita em todo o sistema e isso afeta todos os processos do Linux(R). O man:"
+"sysctl[8] não deve ser alterado ao executar qualquer binário do Linux(R), "
+"pois isso pode causar problemas."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:885
+#, no-wrap
+msgid "Linux(R) processes and thread identifiers"
+msgstr "Processos e Identificadores de Thread no Linux(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:892
+msgid ""
+"The semantics of Linux(R) threading are a little confusing and uses entirely "
+"different nomenclature to FreeBSD. A process in Linux(R) consists of a "
+"`struct task` embedding two identifier fields - PID and TGID. PID is _not_ "
+"a process ID but it is a thread ID. The TGID identifies a thread group in "
+"other words a process. For single-threaded process the PID equals the TGID."
+msgstr ""
+"A semântica de threading no Linux(R) é um pouco confusa e utiliza uma "
+"nomenclatura completamente diferente do FreeBSD. Em um processo no Linux(R), "
+"há uma estrutura chamada `struct task` que contém dois campos de "
+"identificação - PID e TGID. O PID _não_ é um identificador de processo, mas "
+"sim um identificador de thread. O TGID identifica um grupo de threads, ou "
+"seja, um processo. Para processos com apenas uma thread, o PID é igual ao "
+"TGID."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:898
+msgid ""
+"The thread in NPTL is just an ordinary process that happens to have TGID not "
+"equal to PID and have a group leader not equal to itself (and shared VM etc. "
+"of course). Everything else happens in the same way as to an ordinary "
+"process. There is no separation of a shared status to some external "
+"structure like in FreeBSD. This creates some duplication of information and "
+"possible data inconsistency. The Linux(R) kernel seems to use task -> group "
+"information in some places and task information elsewhere and it is really "
+"not very consistent and looks error-prone."
+msgstr ""
+"No NPTL, uma thread é apenas um processo comum que tem o TGID diferente do "
+"PID e tem um líder de grupo diferente de si mesmo (além de compartilhar a "
+"memória virtual, é claro). Todo o resto acontece da mesma maneira que em um "
+"processo comum. Não há separação de um status compartilhado em uma estrutura "
+"externa, como no FreeBSD. Isso cria alguma duplicação de informações e "
+"possíveis inconsistências de dados. O kernel do Linux(R) parece usar "
+"informações de tarefa -> grupo em alguns lugares e informações de tarefa em "
+"outros lugares, e isso realmente não é muito consistente e parece propenso a "
+"erros."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:901
+msgid ""
+"Every NPTL thread is created by a call to the `clone` syscall with a "
+"specific set of flags (more in the next subsection). The NPTL implements "
+"strict 1:1 threading."
+msgstr ""
+"Cada thread NPTL é criado por meio de uma chamada ao syscall `clone` com um "
+"conjunto específico de flags (mais detalhes na próxima subseção). O NPTL "
+"implementa uma estrita relação de threading 1:1."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:903
+msgid ""
+"In FreeBSD we emulate NPTL threads with ordinary FreeBSD processes that "
+"share VM space, etc. and the PID gymnastic is just mimicked in the emulation "
+"specific structure attached to the process. The structure attached to the "
+"process looks like:"
+msgstr ""
+"No FreeBSD nós emulamos threads NPTL com processos comuns do FreeBSD que "
+"compartilham espaço de VM, etc. e a ginástica PID é apenas imitada na "
+"estrutura específica de emulação anexada ao processo. A estrutura anexada ao "
+"processo se parece com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:908
+#, no-wrap
+msgid ""
+"struct linux_emuldata {\n"
+" pid_t pid;\n"
+msgstr ""
+"struct linux_emuldata {\n"
+" pid_t pid;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:911
+#, no-wrap
+msgid ""
+" int *child_set_tid; /* in clone(): Child.s TID to set on clone */\n"
+" int *child_clear_tid;/* in clone(): Child.s TID to clear on exit */\n"
+msgstr ""
+" int *child_set_tid; /* in clone(): Child.s TID to set on clone */\n"
+" int *child_clear_tid;/* in clone(): Child.s TID to clear on exit */\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:913
+#, no-wrap
+msgid " struct linux_emuldata_shared *shared;\n"
+msgstr " struct linux_emuldata_shared *shared;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:915
+#, no-wrap
+msgid " int pdeath_signal; /* parent death signal */\n"
+msgstr " int pdeath_signal; /* parent death signal */\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:918
+#, no-wrap
+msgid ""
+" LIST_ENTRY(linux_emuldata) threads; /* list of linux threads */\n"
+"};\n"
+msgstr ""
+" LIST_ENTRY(linux_emuldata) threads; /* list of linux threads */\n"
+"};\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:925
+msgid ""
+"The PID is used to identify the FreeBSD process that attaches this "
+"structure. The `child_se_tid` and `child_clear_tid` are used for TID "
+"address copyout when a process exits and is created. The `shared` pointer "
+"points to a structure shared among threads. The `pdeath_signal` variable "
+"identifies the parent death signal and the `threads` pointer is used to link "
+"this structure to the list of threads. The `linux_emuldata_shared` "
+"structure looks like:"
+msgstr ""
+"O PID é usado para identificar o processo FreeBSD que se conecta a esta "
+"estrutura. Os campos `child_se_tid` e `child_clear_tid` são usados para "
+"copiar o endereço TID quando um processo termina ou é criado. O ponteiro "
+"`shared` aponta para uma estrutura compartilhada entre as threads. A "
+"variável `pdeath_signal` identifica o sinal de término do pai e o ponteiro "
+"`threads` é usado para vincular essa estrutura à lista de threads. A "
+"estrutura `linux_emuldata_shared` se parece com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:929
+#, no-wrap
+msgid "struct linux_emuldata_shared {\n"
+msgstr "struct linux_emuldata_shared {\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:931
+#, no-wrap
+msgid " int refs;\n"
+msgstr " int refs;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:933
+#, no-wrap
+msgid " pid_t group_pid;\n"
+msgstr " pid_t group_pid;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:936
+#, no-wrap
+msgid ""
+" LIST_HEAD(, linux_emuldata) threads; /* head of list of linux threads */\n"
+"};\n"
+msgstr ""
+" LIST_HEAD(, linux_emuldata) threads; /* head of list of linux threads */\n"
+"};\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:941
+msgid ""
+"The `refs` is a reference counter being used to determine when we can free "
+"the structure to avoid memory leaks. The `group_pid` is to identify PID ( = "
+"TGID) of the whole process ( = thread group). The `threads` pointer is the "
+"head of the list of threads in the process."
+msgstr ""
+"O campo `refs` é um contador de referências usado para determinar quando "
+"podemos liberar a estrutura para evitar vazamentos de memória. O campo "
+"`group_pid` é usado para identificar o PID ( = TGID) do processo completo "
+"( = grupo de threads). O ponteiro `threads` é a cabeça da lista de threads "
+"no processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:944
+msgid ""
+"The `linux_emuldata` structure can be obtained from the process using "
+"`em_find`. The prototype of the function is:"
+msgstr ""
+"A estrutura `linux_emuldata` pode ser obtida do processo usando `em_find`. O "
+"protótipo da função é:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:948
+#, no-wrap
+msgid "struct linux_emuldata *em_find(struct proc *, int locked);\n"
+msgstr "struct linux_emuldata *em_find(struct proc *, int locked);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:953
+msgid ""
+"Here, `proc` is the process we want the emuldata structure from and the "
+"locked parameter determines whether we want to lock or not. The accepted "
+"values are `EMUL_DOLOCK` and `EMUL_DOUNLOCK`. More about locking later."
+msgstr ""
+"Aqui, `proc` é o processo do qual queremos obter a estrutura emuldata e o "
+"parâmetro `locked` determina se queremos realizar o bloqueio ou não. Os "
+"valores aceitos são `EMUL_DOLOCK` e `EMUL_DOUNLOCK`. Mais sobre bloqueio "
+"será explicado posteriormente."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:955
+#, no-wrap
+msgid "PID mangling"
+msgstr "Maqueando PID"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:962
+msgid ""
+"As there is a difference in view as what to the idea of a process ID and "
+"thread ID is between FreeBSD and Linux(R) we have to translate the view "
+"somehow. We do it by PID mangling. This means that we fake what a PID "
+"(=TGID) and TID (=PID) is between kernel and userland. The rule of thumb is "
+"that in kernel (in Linuxulator) PID = PID and TGID = shared -> group pid and "
+"to userland we present `PID = shared -> group_pid` and `TID = proc -> "
+"p_pid`. The PID member of `linux_emuldata structure` is a FreeBSD PID."
+msgstr ""
+"Devido à diferença na interpretação do conceito de PID e TID entre o FreeBSD "
+"e o Linux(R), precisamos fazer uma tradução para conciliar essas visões. "
+"Fazemos isso através da manipulação de PIDs. Isso significa que simulamos o "
+"que seria um PID (=TGID) e TID (=PID) entre o kernel e o espaço do usuário. "
+"A regra geral é que, no kernel (no Linuxulator), PID = PID e TGID = shared-"
+">group_pid, e no espaço do usuário apresentamos `PID = shared->group_pid` e "
+"`TID = proc->p_pid`. O membro PID da estrutura `linux_emuldata` é um PID do "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:966
+msgid ""
+"The above affects mainly getpid, getppid, gettid syscalls. Where we use PID/"
+"TGID respectively. In copyout of TIDs in `child_clear_tid` and "
+"`child_set_tid` we copy out FreeBSD PID."
+msgstr ""
+"A situação acima afeta principalmente as chamadas de sistema getpid, getppid "
+"e gettid. Nelas, utilizamos o PID/TGID respectivamente. Na cópia de TIDs em "
+"`child_clear_tid` e `child_set_tid`, copiamos o PID do FreeBSD."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:968
+#, no-wrap
+msgid "Clone syscall"
+msgstr "syscall Clone"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:972
+msgid ""
+"The `clone` syscall is the way threads are created in Linux(R). The syscall "
+"prototype looks like this:"
+msgstr ""
+"A chamada de sistema `clone` é a forma como as threads são criadas no "
+"Linux(R). O protótipo da syscall é assim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:977
+#, no-wrap
+msgid ""
+"int linux_clone(l_int flags, void *stack, void *parent_tidptr, int dummy,\n"
+"void * child_tidptr);\n"
+msgstr ""
+"int linux_clone(l_int flags, void *stack, void *parent_tidptr, int dummy,\n"
+"void * child_tidptr);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:987
+msgid ""
+"The `flags` parameter tells the syscall how exactly the processes should be "
+"cloned. As described above, Linux(R) can create processes sharing various "
+"things independently, for example two processes can share file descriptors "
+"but not VM, etc. Last byte of the `flags` parameter is the exit signal of "
+"the newly created process. The `stack` parameter if non-`NULL` tells, where "
+"the thread stack is and if it is `NULL` we are supposed to copy-on-write the "
+"calling process stack (i.e. do what normal man:fork[2] routine does). The "
+"`parent_tidptr` parameter is used as an address for copying out process PID "
+"(i.e. thread id) once the process is sufficiently instantiated but is not "
+"runnable yet. The `dummy` parameter is here because of the very strange "
+"calling convention of this syscall on i386. It uses the registers directly "
+"and does not let the compiler do it what results in the need of a dummy "
+"syscall. The `child_tidptr` parameter is used as an address for copying out "
+"PID once the process has finished forking and when the process exits."
+msgstr ""
+"O parâmetro `flags` informa à syscall como exatamente os processos devem ser "
+"clonados. Como descrito anteriormente, o Linux(R) pode criar processos que "
+"compartilham várias coisas de forma independente, por exemplo, dois "
+"processos podem compartilhar descritores de arquivo, mas não a VM, etc. O "
+"último byte do parâmetro `flags` é o sinal de saída do novo processo criado. "
+"O parâmetro `stack`, se não for `NULL`, indica onde está a pilha da thread, "
+"e se for `NULL`, devemos fazer uma cópia em escrita-compartilhada da pilha "
+"do processo chamador (ou seja, fazer o que a rotina normal do man:fork[2] "
+"faz). O parâmetro `parent_tidptr` é usado como endereço para copiar o PID do "
+"processo (ou seja, ID da thread) assim que o processo estiver "
+"suficientemente instanciado, mas ainda não estiver em execução. O parâmetro "
+"`dummy` está aqui por causa da convenção de chamada muito estranha dessa "
+"syscall no i386. Ela usa os registradores diretamente e não permite que o "
+"compilador o faça, o que resulta na necessidade de um syscall dummy. O "
+"parâmetro `child_tidptr` é usado como endereço para copiar o PID assim que o "
+"processo terminar de criar um novo processo e quando o processo terminar."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1001
+msgid ""
+"The syscall itself proceeds by setting corresponding flags depending on the "
+"flags passed in. For example, `CLONE_VM` maps to RFMEM (sharing of VM), "
+"etc. The only nit here is `CLONE_FS` and `CLONE_FILES` because FreeBSD does "
+"not allow setting this separately so we fake it by not setting RFFDG "
+"(copying of fd table and other fs information) if either of these is "
+"defined. This does not cause any problems, because those flags are always "
+"set together. After setting the flags the process is forked using the "
+"internal `fork1` routine, the process is instrumented not to be put on a run "
+"queue, i.e. not to be set runnable. After the forking is done we possibly "
+"reparent the newly created process to emulate `CLONE_PARENT` semantics. "
+"Next part is creating the emulation data. Threads in Linux(R) does not "
+"signal their parents so we set exit signal to be 0 to disable this. After "
+"that setting of `child_set_tid` and `child_clear_tid` is performed enabling "
+"the functionality later in the code. At this point we copy out the PID to "
+"the address specified by `parent_tidptr`. The setting of process stack is "
+"done by simply rewriting thread frame `%esp` register (`%rsp` on amd64). "
+"Next part is setting up TLS for the newly created process. After this man:"
+"vfork[2] semantics might be emulated and finally the newly created process "
+"is put on a run queue and copying out its PID to the parent process via "
+"`clone` return value is done."
+msgstr ""
+"A syscall em si prossegue configurando as flags correspondentes com base nas "
+"flags passadas. Por exemplo, `CLONE_VM` mapeia para RFMEM (compartilhamento "
+"de VM), etc. O único detalhe aqui é `CLONE_FS` e `CLONE_FILES`, porque o "
+"FreeBSD não permite configurar isso separadamente, então simulamos não "
+"configurando RFFDG (cópia da tabela de descritores de arquivo e outras "
+"informações do sistema de arquivos) se algum desses estiver definido. Isso "
+"não causa problemas, porque essas flags são sempre configuradas juntas. Após "
+"configurar as flags, o processo é bifurcado usando a rotina interna `fork1`, "
+"e instruímos o processo a não ser colocado em uma fila de execução, ou seja, "
+"não ser definido como executável. Depois que a bifurcação é concluída, "
+"possivelmente reparentamos o processo recém-criado para emular a semântica "
+"`CLONE_PARENT`. A próxima parte é a criação dos dados de emulação. As "
+"threads no Linux(R) não sinalizam seus pais, então definimos o sinal de "
+"saída como 0 para desativar isso. Em seguida, é feita a configuração de "
+"`child_set_tid` e `child_clear_tid`, habilitando a funcionalidade "
+"posteriormente no código. Nesse ponto, copiamos o PID para o endereço "
+"especificado por `parent_tidptr`. A configuração da pilha do processo é "
+"feita simplesmente reescrevendo o registro `%esp` do quadro da thread "
+"(`%rsp` no amd64). A próxima parte é configurar o TLS para o processo recém-"
+"criado. Após isso, as semânticas de man:vfork[2] podem ser emuladas e, "
+"finalmente, o processo recém-criado é colocado em uma fila de execução e a "
+"cópia de seu PID para o processo pai é feita por meio do valor de retorno do "
+"`clone`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1004
+msgid ""
+"The `clone` syscall is able and in fact is used for emulating classic man:"
+"fork[2] and man:vfork[2] syscalls. Newer glibc in a case of 2.6 kernel uses "
+"`clone` to implement man:fork[2] and man:vfork[2] syscalls."
+msgstr ""
+"O syscall `clone` é capaz e, de fato, é usado para emular as chamadas de "
+"sistema clássicas man:fork[2] e man:vfork[2]. O glibc mais recente, no caso "
+"do kernel 2.6, usa `clone` para implementar as chamadas de sistema man:"
+"fork[2] e man:vfork[2]."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1006
+#, no-wrap
+msgid "Locking"
+msgstr "Bloqueio"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1012
+msgid ""
+"The locking is implemented to be per-subsystem because we do not expect a "
+"lot of contention on these. There are two locks: `emul_lock` used to "
+"protect manipulating of `linux_emuldata` and `emul_shared_lock` used to "
+"manipulate `linux_emuldata_shared`. The `emul_lock` is a nonsleepable "
+"blocking mutex while `emul_shared_lock` is a sleepable blocking `sx_lock`. "
+"Due to of the per-subsystem locking we can coalesce some locks and that is "
+"why the em find offers the non-locking access."
+msgstr ""
+"O sistema de bloqueio é implementado por subsistema, pois não esperamos "
+"muita contenção nesses pontos. Existem dois bloqueios: `emul_lock`, usado "
+"para proteger a manipulação de `linux_emuldata`, e `emul_shared_lock`, usado "
+"para manipular `linux_emuldata_shared`. O `emul_lock` é uma mutex de "
+"bloqueio não adormecível, enquanto o `emul_shared_lock` é um bloqueio "
+"`sx_lock` de bloqueio adormecível. Devido ao bloqueio por subsistema, "
+"podemos combinar alguns bloqueios e é por isso que a função `em_find` "
+"oferece acesso sem bloqueio."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1014
+#, no-wrap
+msgid "TLS"
+msgstr "TLS"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1017
+msgid "This section deals with TLS also known as thread local storage."
+msgstr ""
+"Esta seção trata do TLS também conhecido como armazenamento local de thread."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1019
+#, no-wrap
+msgid "Introduction to threading"
+msgstr "Introdução ao threading"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1040
+msgid ""
+"Threads in computer science are entities within a process that can be "
+"scheduled independently from each other. The threads in the process share "
+"process wide data (file descriptors, etc.) but also have their own stack for "
+"their own data. Sometimes there is a need for process-wide data specific to "
+"a given thread. Imagine a name of the thread in execution or something like "
+"that. The traditional UNIX(R) threading API, pthreads provides a way to do "
+"it via man:pthread_key_create[3], man:pthread_setspecific[3] and man:"
+"pthread_getspecific[3] where a thread can create a key to the thread local "
+"data and using man:pthread_getspecific[3] or man:pthread_getspecific[3] to "
+"manipulate those data. You can easily see that this is not the most "
+"comfortable way this could be accomplished. So various producers of C/C++ "
+"compilers introduced a better way. They defined a new modifier keyword "
+"thread that specifies that a variable is thread specific. A new method of "
+"accessing such variables was developed as well (at least on i386). The "
+"pthreads method tends to be implemented in userspace as a trivial lookup "
+"table. The performance of such a solution is not very good. So the new "
+"method uses (on i386) segment registers to address a segment, where TLS area "
+"is stored so the actual accessing of a thread variable is just appending the "
+"segment register to the address thus addressing via it. The segment "
+"registers are usually `%gs` and `%fs` acting like segment selectors. Every "
+"thread has its own area where the thread local data are stored and the "
+"segment must be loaded on every context switch. This method is very fast "
+"and used almost exclusively in the whole i386 UNIX(R) world. Both FreeBSD "
+"and Linux(R) implement this approach and it yields very good results. The "
+"only drawback is the need to reload the segment on every context switch "
+"which can slowdown context switches. FreeBSD tries to avoid this overhead "
+"by using only 1 segment descriptor for this while Linux(R) uses 3. "
+"Interesting thing is that almost nothing uses more than 1 descriptor (only "
+"Wine seems to use 2) so Linux(R) pays this unnecessary price for context "
+"switches."
+msgstr ""
+"As threads na ciência da computação são entidades dentro de um processo que "
+"podem ser agendadas independentemente umas das outras. As threads no "
+"processo compartilham dados em todo o processo (descritores de arquivos, "
+"etc.), mas também possuem sua própria pilha para seus próprios dados. Às "
+"vezes, há necessidade de dados específicos de um thread em todo o processo, "
+"como o nome do thread em execução, por exemplo. A API de threads tradicional "
+"do UNIX(R), pthreads, oferece uma maneira de fazer isso usando as funções "
+"`pthread_key_create`, `pthread_setspecific` e `pthread_getspecific`, onde um "
+"thread pode criar uma chave para os dados específicos do thread local e "
+"manipular esses dados usando as funções `pthread_setspecific` e "
+"`pthread_getspecific`. É fácil perceber que essa não é a maneira mais "
+"conveniente de fazer isso. Portanto, vários fabricantes de compiladores C/C+"
+"+ introduziram uma maneira melhor. Eles definiram uma nova palavra-chave de "
+"modificação, `thread`, que especifica que uma variável é específica de um "
+"thread. Também foi desenvolvido um novo método de acesso a essas variáveis, "
+"pelo menos na arquitetura i386. O método tradicional do pthreads tende a ser "
+"implementado no espaço do usuário como uma tabela de pesquisa trivial. O "
+"desempenho de tal solução não é muito bom. Portanto, o novo método usa (no "
+"i386) registradores de segmento para endereçar um segmento, onde a área TLS "
+"é armazenada, de modo que o acesso real a uma variável do thread é apenas a "
+"concatenação do registrador de segmento ao endereço, permitindo o acesso "
+"direto através do registrador de segmento. Os registradores de segmento "
+"geralmente são `%gs` e `%fs`, agindo como seletores de segmento. Cada thread "
+"tem sua própria área onde os dados locais do thread são armazenados, e o "
+"registrador de segmento precisa ser carregado em cada troca de contexto. "
+"Esse método é muito rápido e amplamente usado em todo o mundo UNIX(R) na "
+"arquitetura i386. Tanto o FreeBSD quanto o Linux(R) implementam essa "
+"abordagem e obtêm resultados muito bons. A única desvantagem é a necessidade "
+"de recarregar o segmento em cada troca de contexto, o que pode retardar as "
+"trocas de contexto. O FreeBSD tenta evitar essa sobrecarga usando apenas um "
+"descritor de segmento para isso, enquanto o Linux(R) usa 3. É interessante "
+"observar que quase nada usa mais de 1 descritor (apenas o Wine parece usar "
+"2), então o Linux(R) paga um preço desnecessário pelas trocas de contexto."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1042
+#, no-wrap
+msgid "Segments on i386"
+msgstr "Segmentos em i386"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1049
+msgid ""
+"The i386 architecture implements the so called segments. A segment is a "
+"description of an area of memory. The base address (bottom) of the memory "
+"area, the end of it (ceiling), type, protection, etc. The memory described "
+"by a segment can be accessed using segment selector registers (`%cs`, `%ds`, "
+"`%ss`, `%es`, `%fs`, `%gs`). For example let us suppose we have a segment "
+"which base address is 0x1234 and length and this code:"
+msgstr ""
+"A arquitetura i386 implementa os chamados segmentos. Um segmento é uma "
+"descrição de uma área de memória. Ele contém informações como o endereço "
+"base (início) da área de memória, o final (teto), tipo, proteção, etc. A "
+"memória descrita por um segmento pode ser acessada usando registradores de "
+"seleção de segmento (`%cs`, `%ds`, `%ss`, `%es`, `%fs`, `%gs`). Por exemplo, "
+"vamos supor que temos um segmento cujo endereço base é 0x1234 e comprimento "
+"e o seguinte código:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1053
+#, no-wrap
+msgid "mov %edx,%gs:0x10\n"
+msgstr "mov %edx,%gs:0x10\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1062
+msgid ""
+"This will load the content of the `%edx` register into memory location "
+"0x1244. Some segment registers have a special use, for example `%cs` is "
+"used for code segment and `%ss` is used for stack segment but `%fs` and "
+"`%gs` are generally unused. Segments are either stored in a global GDT "
+"table or in a local LDT table. LDT is accessed via an entry in the GDT. "
+"The LDT can store more types of segments. LDT can be per process. Both "
+"tables define up to 8191 entries."
+msgstr ""
+"Isso irá carregar o conteúdo do registro `%edx` no endereço de memória "
+"0x1244. Alguns registradores de segmento têm um uso especial, por exemplo, "
+"`%cs` é usado para o segmento de código e `%ss` é usado para o segmento de "
+"pilha, mas `%fs` e `%gs` geralmente não são usados. Os segmentos são "
+"armazenados em uma tabela global GDT ou em uma tabela local LDT. A LDT é "
+"acessada por meio de uma entrada na GDT. A LDT pode armazenar mais tipos de "
+"segmentos. A LDT pode ser por processo. Ambas as tabelas definem até 8191 "
+"entradas."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1064
+#, no-wrap
+msgid "Implementation on Linux(R) i386"
+msgstr "Implementação no Linux(R) i386"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1072
+msgid ""
+"There are two main ways of setting up TLS in Linux(R). It can be set when "
+"cloning a process using the `clone` syscall or it can call "
+"`set_thread_area`. When a process passes `CLONE_SETTLS` flag to `clone`, "
+"the kernel expects the memory pointed to by the `%esi` register a Linux(R) "
+"user space representation of a segment, which gets translated to the machine "
+"representation of a segment and loaded into a GDT slot. The GDT slot can be "
+"specified with a number or -1 can be used meaning that the system itself "
+"should choose the first free slot. In practice, the vast majority of "
+"programs use only one TLS entry and does not care about the number of the "
+"entry. We exploit this in the emulation and in fact depend on it."
+msgstr ""
+"Existem duas principais maneiras de configurar o TLS no Linux(R). Pode ser "
+"definido ao clonar um processo usando a chamada de sistema `clone` ou pode "
+"chamar `set_thread_area`. Quando um processo passa a flag `CLONE_SETTLS` "
+"para `clone`, o kernel espera que a memória apontada pelo registro `%esi` "
+"seja uma representação do espaço do usuário Linux(R) de um segmento, que é "
+"traduzido para a representação do segmento da máquina e carregado em um slot "
+"GDT. O slot GDT pode ser especificado com um número ou -1 pode ser usado, o "
+"que significa que o sistema deve escolher automaticamente o primeiro slot "
+"livre. Na prática, a grande maioria dos programas usa apenas uma entrada TLS "
+"e não se preocupa com o número da entrada. Exploramos isso na emulação e, na "
+"verdade, dependemos disso."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1074
+#, no-wrap
+msgid "Emulation of Linux(R) TLS"
+msgstr "Emulação de TLS do Linux(R)"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1077
+#, no-wrap
+msgid "i386"
+msgstr "i386"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1095
+msgid ""
+"Loading of TLS for the current thread happens by calling `set_thread_area` "
+"while loading TLS for a second process in `clone` is done in the separate "
+"block in `clone`. Those two functions are very similar. The only "
+"difference being the actual loading of the GDT segment, which happens on the "
+"next context switch for the newly created process while `set_thread_area` "
+"must load this directly. The code basically does this. It copies the "
+"Linux(R) form segment descriptor from the userland. The code checks for the "
+"number of the descriptor but because this differs between FreeBSD and "
+"Linux(R) we fake it a little. We only support indexes of 6, 3 and -1. The "
+"6 is genuine Linux(R) number, 3 is genuine FreeBSD one and -1 means "
+"autoselection. Then we set the descriptor number to constant 3 and copy out "
+"this to the userspace. We rely on the userspace process using the number "
+"from the descriptor but this works most of the time (have never seen a case "
+"where this did not work) as the userspace process typically passes in 1. "
+"Then we convert the descriptor from the Linux(R) form to a machine dependant "
+"form (i.e. operating system independent form) and copy this to the FreeBSD "
+"defined segment descriptor. Finally we can load it. We assign the "
+"descriptor to threads PCB (process control block) and load the `%gs` segment "
+"using `load_gs`. This loading must be done in a critical section so that "
+"nothing can interrupt us. The `CLONE_SETTLS` case works exactly like this "
+"just the loading using `load_gs` is not performed. The segment used for "
+"this (segment number 3) is shared for this use between FreeBSD processes and "
+"Linux(R) processes so the Linux(R) emulation layer does not add any overhead "
+"over plain FreeBSD."
+msgstr ""
+"O carregamento do TLS para a thread atual é feito chamando "
+"`set_thread_area`, enquanto o carregamento do TLS para um segundo processo "
+"no `clone` é feito em um bloco separado no `clone`. Essas duas funções são "
+"muito semelhantes. A única diferença é o carregamento real do segmento GDT, "
+"que ocorre na próxima troca de contexto para o processo recém-criado, "
+"enquanto o `set_thread_area` deve carregar isso diretamente. O código "
+"basicamente faz isso. Ele copia o descritor do segmento no formato Linux(R) "
+"do espaço do usuário. O código verifica o número do descritor, mas como isso "
+"difere entre FreeBSD e Linux(R), nós fazemos uma pequena manipulação. Nós "
+"suportamos apenas os índices 6, 3 e -1. O 6 é um número genuíno do Linux(R), "
+"o 3 é um número genuíno do FreeBSD e -1 significa seleção automática. Em "
+"seguida, definimos o número do descritor como o valor constante 3 e copiamos "
+"isso de volta para o espaço do usuário. Nós confiamos no processo do espaço "
+"do usuário usando o número do descritor, e isso funciona na maioria das "
+"vezes (nunca vi um caso em que isso não funcionasse), pois o processo do "
+"espaço do usuário normalmente passa o número 1. Em seguida, convertemos o "
+"descritor do formato Linux(R) para um formato dependente da máquina (ou "
+"seja, independente do sistema operacional) e copiamos isso para o descritor "
+"de segmento definido no FreeBSD. Finalmente, podemos carregá-lo. Atribuímos "
+"o descritor ao PCB (process control block) das threads e carregamos o "
+"segmento `%gs` usando `load_gs`. Esse carregamento deve ser feito em uma "
+"seção crítica para que nada possa nos interromper. O caso `CLONE_SETTLS` "
+"funciona exatamente da mesma maneira, apenas o carregamento usando `load_gs` "
+"não é realizado. O segmento usado para isso (número do segmento 3) é "
+"compartilhado entre processos FreeBSD e processos Linux(R), portanto, a "
+"camada de emulação do Linux(R) não adiciona nenhum overhead além do FreeBSD "
+"puro."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1097
+#, no-wrap
+msgid "amd64"
+msgstr "amd64"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1101
+msgid ""
+"The amd64 implementation is similar to the i386 one but there was initially "
+"no 32bit segment descriptor used for this purpose (hence not even native "
+"32bit TLS users worked) so we had to add such a segment and implement its "
+"loading on every context switch (when a flag signaling use of 32bit is "
+"set). Apart from this the TLS loading is exactly the same just the segment "
+"numbers are different and the descriptor format and the loading differs "
+"slightly."
+msgstr ""
+"A implementação do amd64 é semelhante à do i386, mas inicialmente não havia "
+"um descritor de segmento de 32 bits usado para esse propósito (portanto, nem "
+"mesmo os usuários nativos de TLS de 32 bits funcionavam), então tivemos que "
+"adicionar esse segmento e implementar seu carregamento em cada troca de "
+"contexto (quando uma flag sinalizando o uso de 32 bits é definida). Além "
+"disso, o carregamento de TLS é exatamente o mesmo, apenas os números de "
+"segmento são diferentes e o formato do descritor e o carregamento diferem um "
+"pouco."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1103
+#, no-wrap
+msgid "Futexes"
+msgstr "Futexes"
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1106
+#, no-wrap
+msgid "Introduction to synchronization"
+msgstr "Introdução à sincronização"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1116
+msgid ""
+"Threads need some kind of synchronization and POSIX(R) provides some of "
+"them: mutexes for mutual exclusion, read-write locks for mutual exclusion "
+"with biased ratio of reads and writes and condition variables for signaling "
+"a status change. It is interesting to note that POSIX(R) threading API "
+"lacks support for semaphores. Those synchronization routines "
+"implementations are heavily dependant on the type threading support we "
+"have. In pure 1:M (userspace) model the implementation can be solely done "
+"in userspace and thus be very fast (the condition variables will probably "
+"end up being implemented using signals, i.e. not fast) and simple. In 1:1 "
+"model, the situation is also quite clear - the threads must be synchronized "
+"using kernel facilities (which is very slow because a syscall must be "
+"performed). The mixed M:N scenario just combines the first and second "
+"approach or rely solely on kernel. Threads synchronization is a vital part "
+"of thread-enabled programming and its performance can affect resulting "
+"program a lot. Recent benchmarks on FreeBSD operating system showed that an "
+"improved sx_lock implementation yielded 40% speedup in _ZFS_ (a heavy sx "
+"user), this is in-kernel stuff but it shows clearly how important the "
+"performance of synchronization primitives is."
+msgstr ""
+"As threads necessitam de algum tipo de sincronização, o POSIX(R) fornece "
+"alguns mecanismos de sincronização, como mutexes para exclusão mútua, read-"
+"write locks para exclusão mútua com uma proporção enviesada de leituras e "
+"escritas, e variáveis de condição para sinalizar mudanças de status. É "
+"interessante notar que a API de threads POSIX(R) não oferece suporte para "
+"semáforos. A implementação dessas rotinas de sincronização depende "
+"fortemente do tipo de suporte a threading disponível. Em um modelo puro 1:M "
+"(userspace), a implementação pode ser feita exclusivamente no espaço de "
+"usuário, resultando em uma abordagem rápida e simples (embora as variáveis "
+"de condição possam ser implementadas usando sinais, o que pode ser mais "
+"lento). Em um modelo 1:1, as threads devem ser sincronizadas usando recursos "
+"do kernel, o que pode ser mais lento devido à necessidade de chamadas de "
+"sistema. O cenário misto M:N combina as abordagens anteriormente mencionadas "
+"ou depende exclusivamente do kernel. A sincronização de threads é uma parte "
+"vital da programação com threads, e seu desempenho pode afetar "
+"significativamente o programa resultante. Testes recentes no sistema "
+"operacional FreeBSD demonstraram um aumento de desempenho de 40% na "
+"implementação aprimorada do sx_lock no _ZFS_ (que faz uso intensivo de "
+"primitivas de sincronização). Embora esse exemplo se refira a operações no "
+"kernel, ele destaca a importância de primitivas de sincronização eficientes "
+"para o desempenho geral."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1120
+msgid ""
+"Threaded programs should be written with as little contention on locks as "
+"possible. Otherwise, instead of doing useful work the thread just waits on "
+"a lock. As a result of this, the most well written threaded programs show "
+"little locks contention."
+msgstr ""
+"Programas com threads devem ser escritos com o mínimo possível de contenção "
+"em locks. Caso contrário, em vez de realizar um trabalho útil, a thread "
+"apenas espera em um lock. Como resultado disso, os programas com threads bem "
+"escritos mostram pouca contenção em locks."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1122
+#, no-wrap
+msgid "Futexes introduction"
+msgstr "Introdução a Futexes"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1127
+msgid ""
+"Linux(R) implements 1:1 threading, i.e. it has to use in-kernel "
+"synchronization primitives. As stated earlier, well written threaded "
+"programs have little lock contention. So a typical sequence could be "
+"performed as two atomic increase/decrease mutex reference counter, which is "
+"very fast, as presented by the following example:"
+msgstr ""
+"O Linux(R) implementa threading 1:1, ou seja, ele utiliza primitivas de "
+"sincronização no kernel. Como mencionado anteriormente, programas com "
+"threads bem escritos têm pouca contenção em locks. Assim, uma sequência "
+"típica pode ser realizada com o aumento/diminuição atômica do contador de "
+"referência do mutex, o que é muito rápido, conforme apresentado no seguinte "
+"exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1133
+#, no-wrap
+msgid ""
+"pthread_mutex_lock(&mutex);\n"
+"...\n"
+"pthread_mutex_unlock(&mutex);\n"
+msgstr ""
+"pthread_mutex_lock(&mutex);\n"
+"...\n"
+"pthread_mutex_unlock(&mutex);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1136
+msgid ""
+"1:1 threading forces us to perform two syscalls for those mutex calls, which "
+"is very slow."
+msgstr ""
+"O threading 1:1 nos força a executar dois syscalls para as chamadas mutex, o "
+"que é muito lento."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1141
+msgid ""
+"The solution Linux(R) 2.6 implements is called futexes. Futexes implement "
+"the check for contention in userspace and call kernel primitives only in a "
+"case of contention. Thus the typical case takes place without any kernel "
+"intervention. This yields reasonably fast and flexible synchronization "
+"primitives implementation."
+msgstr ""
+"A solução implementada pelo Linux(R) 2.6 é chamada de \"futexes\". Os "
+"futexes implementam a verificação de contenção no espaço do usuário e chamam "
+"as primitivas do kernel apenas em caso de contenção. Dessa forma, o caso "
+"típico ocorre sem qualquer intervenção do kernel. Isso resulta em uma "
+"implementação de primitivas de sincronização razoavelmente rápida e flexível."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1143
+#, no-wrap
+msgid "Futex API"
+msgstr "API do Futex"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1146
+msgid "The futex syscall looks like this:"
+msgstr "A syscall do futex é assim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1150
+#, no-wrap
+msgid "int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);\n"
+msgstr "int futex(void *uaddr, int op, int val, struct timespec *timeout, void *uaddr2, int val3);\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1153
+msgid ""
+"In this example `uaddr` is an address of the mutex in userspace, `op` is an "
+"operation we are about to perform and the other parameters have per-"
+"operation meaning."
+msgstr ""
+"Neste exemplo, `uaddr` é o endereço do mutex no espaço do usuário, `op` é a "
+"operação que estamos prestes a realizar e os outros parâmetros têm "
+"significado específico para cada operação."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1155
+msgid "Futexes implement the following operations:"
+msgstr "Futexes implementam as seguintes operações:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1157
+msgid "`FUTEX_WAIT`"
+msgstr "`FUTEX_WAIT`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1158
+msgid "`FUTEX_WAKE`"
+msgstr "`FUTEX_WAKE`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1159
+msgid "`FUTEX_FD`"
+msgstr "`FUTEX_FD`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1160
+msgid "`FUTEX_REQUEUE`"
+msgstr "`FUTEX_REQUEUE`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1161
+msgid "`FUTEX_CMP_REQUEUE`"
+msgstr "`FUTEX_CMP_REQUEUE`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1162
+msgid "`FUTEX_WAKE_OP`"
+msgstr "`FUTEX_WAKE_OP`"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1164
+#, no-wrap
+msgid "FUTEX_WAIT"
+msgstr "FUTEX_WAIT"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1169
+msgid ""
+"This operation verifies that on address `uaddr` the value `val` is written. "
+"If not, `EWOULDBLOCK` is returned, otherwise the thread is queued on the "
+"futex and gets suspended. If the argument `timeout` is non-zero it "
+"specifies the maximum time for the sleeping, otherwise the sleeping is "
+"infinite."
+msgstr ""
+"Essa operação verifica se o valor `val` está escrito no endereço `uaddr`. Se "
+"não estiver, retorna `EWOULDBLOCK`. Caso contrário, a thread é colocada na "
+"fila do futex e é suspensa. Se o argumento `timeout` for diferente de zero, "
+"ele especifica o tempo máximo de suspensão. Caso contrário, a suspensão é "
+"infinita."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1171
+#, no-wrap
+msgid "FUTEX_WAKE"
+msgstr "FUTEX_WAKE"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1174
+msgid ""
+"This operation takes a futex at `uaddr` and wakes up `val` first futexes "
+"queued on this futex."
+msgstr ""
+"Essa operação pega um futex em `uaddr` e acorda os primeiros `val` futexes "
+"na fila desse futex."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1176
+#, no-wrap
+msgid "FUTEX_FD"
+msgstr "FUTEX_FD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1179
+msgid "This operations associates a file descriptor with a given futex."
+msgstr ""
+"Esta operação associa um descritor de arquivo com um determinado futex."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1181
+#, no-wrap
+msgid "FUTEX_REQUEUE"
+msgstr "FUTEX_REQUEUE"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1184
+msgid ""
+"This operation takes `val` threads queued on futex at `uaddr`, wakes them "
+"up, and takes `val2` next threads and requeues them on futex at `uaddr2`."
+msgstr ""
+"Essa operação pega `val` threads na fila do futex em `uaddr`, acorda-as e "
+"pega `val2` threads seguintes e as coloca novamente na fila do futex em "
+"`uaddr2`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1186
+#, no-wrap
+msgid "FUTEX_CMP_REQUEUE"
+msgstr "FUTEX_CMP_REQUEUE"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1189
+msgid ""
+"This operation does the same as `FUTEX_REQUEUE` but it checks that `val3` "
+"equals to `val` first."
+msgstr ""
+"Essa operação faz o mesmo que `FUTEX_REQUEUE`, mas verifica primeiro se "
+"`val3` é igual a `val`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1191
+#, no-wrap
+msgid "FUTEX_WAKE_OP"
+msgstr "FUTEX_WAKE_OP"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1195
+msgid ""
+"This operation performs an atomic operation on `val3` (which contains coded "
+"some other value) and `uaddr`. Then it wakes up `val` threads on futex at "
+"`uaddr` and if the atomic operation returned a positive number it wakes up "
+"`val2` threads on futex at `uaddr2`."
+msgstr ""
+"Essa operação realiza uma operação atômica em `val3` (que contém codificado "
+"algum outro valor) e `uaddr`. Em seguida, acorda `val` threads no futex em "
+"`uaddr` e, se a operação atômica retornar um número positivo, acorda `val2` "
+"threads no futex em `uaddr2`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1197
+msgid "The operations implemented in `FUTEX_WAKE_OP`:"
+msgstr "As operações implementadas em FUTEX_WAKE_OP são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1199
+msgid "`FUTEX_OP_SET`"
+msgstr "`FUTEX_OP_SET`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1200
+msgid "`FUTEX_OP_ADD`"
+msgstr "`FUTEX_OP_ADD`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1201
+msgid "`FUTEX_OP_OR`"
+msgstr "`FUTEX_OP_OR`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1202
+msgid "`FUTEX_OP_AND`"
+msgstr "`FUTEX_OP_AND`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1203
+msgid "`FUTEX_OP_XOR`"
+msgstr "`FUTEX_OP_XOR`"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1208
+msgid ""
+"There is no `val2` parameter in the futex prototype. The `val2` is taken "
+"from the `struct timespec *timeout` parameter for operations "
+"`FUTEX_REQUEUE`, `FUTEX_CMP_REQUEUE` and `FUTEX_WAKE_OP`."
+msgstr ""
+"Não há parâmetro `val2` no protótipo do futex. O `val2` é obtido do "
+"parâmetro `struct timespec *timeout` para as operações `FUTEX_REQUEUE`, "
+"`FUTEX_CMP_REQUEUE` e `FUTEX_WAKE_OP`."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1211
+#, no-wrap
+msgid "Futex emulation in FreeBSD"
+msgstr "Emulação de Futex no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1216
+msgid ""
+"The futex emulation in FreeBSD is taken from NetBSD and further extended by "
+"us. It is placed in `linux_futex.c` and [.filename]#linux_futex.h# files. "
+"The `futex` structure looks like:"
+msgstr ""
+"A emulação de futex no FreeBSD é baseada no NetBSD e posteriormente "
+"estendida por nós. Ela é implementada nos arquivos `linux_futex.c` e [."
+"filename]#linux_futex.h#. A estrutura `futex` se parece com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1222
+#, no-wrap
+msgid ""
+"struct futex {\n"
+" void *f_uaddr;\n"
+" int f_refcount;\n"
+msgstr ""
+"struct futex {\n"
+" void *f_uaddr;\n"
+" int f_refcount;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1224
+#, no-wrap
+msgid " LIST_ENTRY(futex) f_list;\n"
+msgstr " LIST_ENTRY(futex) f_list;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1227
+#, no-wrap
+msgid ""
+" TAILQ_HEAD(lf_waiting_paroc, waiting_proc) f_waiting_proc;\n"
+"};\n"
+msgstr ""
+" TAILQ_HEAD(lf_waiting_paroc, waiting_proc) f_waiting_proc;\n"
+"};\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1230
+msgid "And the structure `waiting_proc` is:"
+msgstr "E a estrutura `waiting_proc` é:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1234
+#, no-wrap
+msgid "struct waiting_proc {\n"
+msgstr "struct waiting_proc {\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1236
+#, no-wrap
+msgid " struct thread *wp_t;\n"
+msgstr " struct thread *wp_t;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1238
+#, no-wrap
+msgid " struct futex *wp_new_futex;\n"
+msgstr " struct futex *wp_new_futex;\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1241
+#, no-wrap
+msgid ""
+" TAILQ_ENTRY(waiting_proc) wp_list;\n"
+"};\n"
+msgstr ""
+" TAILQ_ENTRY(waiting_proc) wp_list;\n"
+"};\n"
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1244
+#, no-wrap
+msgid "futex_get / futex_put"
+msgstr "futex_get / futex_put"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1248
+msgid ""
+"A futex is obtained using the `futex_get` function, which searches a linear "
+"list of futexes and returns the found one or creates a new futex. When "
+"releasing a futex from the use we call the `futex_put` function, which "
+"decreases a reference counter of the futex and if the refcount reaches zero "
+"it is released."
+msgstr ""
+"Um futex é obtido usando a função `futex_get`, que busca em uma lista linear "
+"de futexes e retorna o encontrado ou cria um novo futex. Ao liberar um futex "
+"do uso, chamamos a função `futex_put`, que diminui um contador de referência "
+"do futex e, se o contador de referência chegar a zero, ele é liberado."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1250
+#, no-wrap
+msgid "futex_sleep"
+msgstr "futex_sleep"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1258
+msgid ""
+"When a futex queues a thread for sleeping it creates a `working_proc` "
+"structure and puts this structure to the list inside the futex structure "
+"then it just performs a man:tsleep[9] to suspend the thread. The sleep can "
+"be timed out. After man:tsleep[9] returns (the thread was woken up or it "
+"timed out) the `working_proc` structure is removed from the list and is "
+"destroyed. All this is done in the `futex_sleep` function. If we got woken "
+"up from `futex_wake` we have `wp_new_futex` set so we sleep on it. This way "
+"the actual requeueing is done in this function."
+msgstr ""
+"Quando um futex coloca uma thread em espera, ele cria uma estrutura "
+"`working_proc` e a coloca na lista dentro da estrutura do futex. Em seguida, "
+"ele executa um `man:tsleep[9]` para suspender a thread. A suspensão pode ter "
+"um tempo limite. Após o retorno do `man:tsleep[9]` (quando a thread foi "
+"acordada ou quando expirou o tempo limite), a estrutura `working_proc` é "
+"removida da lista e destruída. Tudo isso é feito na função `futex_sleep`. Se "
+"acordamos de um `futex_wake`, `wp_new_futex` é definido para que durmamos "
+"nele. Dessa forma, o reenfileiramento real é feito nessa função."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1260
+#, no-wrap
+msgid "futex_wake"
+msgstr "futex_wake"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1268
+msgid ""
+"Waking up a thread sleeping on a futex is performed in the `futex_wake` "
+"function. First in this function we mimic the strange Linux(R) behavior, "
+"where it wakes up N threads for all operations, the only exception is that "
+"the REQUEUE operations are performed on N+1 threads. But this usually does "
+"not make any difference as we are waking up all threads. Next in the "
+"function in the loop we wake up n threads, after this we check if there is a "
+"new futex for requeueing. If so, we requeue up to n2 threads on the new "
+"futex. This cooperates with `futex_sleep`."
+msgstr ""
+"Acordar uma thread que está dormindo em um futex é realizado na função "
+"`futex_wake`. Primeiro, nesta função, imitamos o comportamento estranho do "
+"Linux(R), onde ele acorda N threads para todas as operações, com a única "
+"exceção de que as operações REQUEUE são realizadas em N+1 threads. Mas isso "
+"geralmente não faz diferença, pois estamos acordando todas as threads. Em "
+"seguida, no loop da função, acordamos n threads e, em seguida, verificamos "
+"se há um novo futex para reenfileiramento. Se houver, reenfileiramos até n2 "
+"threads no novo futex. Isso coopera com a função `futex_sleep`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1270
+#, no-wrap
+msgid "futex_wake_op"
+msgstr "futex_wake_op"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1275
+msgid ""
+"The `FUTEX_WAKE_OP` operation is quite complicated. First we obtain two "
+"futexes at addresses `uaddr` and `uaddr2` then we perform the atomic "
+"operation using `val3` and `uaddr2`. Then `val` waiters on the first futex "
+"is woken up and if the atomic operation condition holds we wake up `val2` (i."
+"e. `timeout`) waiter on the second futex."
+msgstr ""
+"A operação `FUTEX_WAKE_OP` é bastante complexa. Primeiro, obtemos dois "
+"futexes nos endereços `uaddr` e `uaddr2`, em seguida, realizamos a operação "
+"atômica usando `val3` e `uaddr2`. Em seguida, acordamos as threads em espera "
+"com valor `val` no primeiro futex e, se a condição da operação atômica for "
+"satisfeita, acordamos a thread em espera com valor `val2` (ou seja, "
+"`timeout`) no segundo futex."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1277
+#, no-wrap
+msgid "futex atomic operation"
+msgstr "operação atômica futex"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1282
+msgid ""
+"The atomic operation takes two parameters `encoded_op` and `uaddr`. The "
+"encoded operation encodes the operation itself, comparing value, operation "
+"argument, and comparing argument. The pseudocode for the operation is like "
+"this one:"
+msgstr ""
+"A operação atômica recebe dois parâmetros: `encoded_op` e `uaddr`. A "
+"operação codificada codifica a própria operação, o valor de comparação, o "
+"argumento da operação e o argumento de comparação. O pseudocódigo para a "
+"operação é semelhante a este:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1287
+#, no-wrap
+msgid ""
+"oldval = *uaddr2\n"
+"*uaddr2 = oldval OP oparg\n"
+msgstr ""
+"oldval = *uaddr2\n"
+"*uaddr2 = oldval OP oparg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1291
+msgid ""
+"And this is done atomically. First a copying in of the number at `uaddr` is "
+"performed and the operation is done. The code handles page faults and if no "
+"page fault occurs `oldval` is compared to `cmparg` argument with cmp "
+"comparator."
+msgstr ""
+"E isso é feito atomicamente. Primeiro, é feita uma cópia do número em "
+"`uaddr` e, em seguida, a operação é realizada. O código lida com faltas de "
+"página e, se nenhuma falta de página ocorrer, `oldval` é comparado com o "
+"argumento `cmparg` usando o comparador `cmp`."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1293
+#, no-wrap
+msgid "Futex locking"
+msgstr "Bloqueio Futex"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1297
+msgid ""
+"Futex implementation uses two lock lists protecting `sx_lock` and global "
+"locks (either Giant or another `sx_lock`). Every operation is performed "
+"locked from the start to the very end."
+msgstr ""
+"A implementação do futex utiliza duas listas de bloqueio para proteger o "
+"`sx_lock` e os bloqueios globais (seja Giant ou outro `sx_lock`). Cada "
+"operação é realizada com bloqueio desde o início até o final."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1299
+#, no-wrap
+msgid "Various syscalls implementation"
+msgstr "Implementação de várias syscalls"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1302
+msgid ""
+"In this section I am going to describe some smaller syscalls that are worth "
+"mentioning because their implementation is not obvious or those syscalls are "
+"interesting from other point of view."
+msgstr ""
+"Nesta seção, descreverei algumas syscalls menores que merecem destaque, pois "
+"sua implementação não é óbvia ou as syscalls são interessantes de outro "
+"ponto de vista."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1304
+#, no-wrap
+msgid "*at family of syscalls"
+msgstr "*na família de syscalls"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1313
+msgid ""
+"During development of Linux(R) 2.6.16 kernel, the *at syscalls were added. "
+"Those syscalls (`openat` for example) work exactly like their at-less "
+"counterparts with the slight exception of the `dirfd` parameter. This "
+"parameter changes where the given file, on which the syscall is to be "
+"performed, is. When the `filename` parameter is absolute `dirfd` is ignored "
+"but when the path to the file is relative, it comes to the play. The "
+"`dirfd` parameter is a directory relative to which the relative pathname is "
+"checked. The `dirfd` parameter is a file descriptor of some directory or "
+"`AT_FDCWD`. So for example the `openat` syscall can be like this:"
+msgstr ""
+"Durante o desenvolvimento do kernel Linux(R) 2.6.16, as chamadas de sistema "
+"*at foram adicionadas. Essas chamadas de sistema (`openat`, por exemplo) "
+"funcionam exatamente como suas contrapartes sem o \"at\", com a pequena "
+"exceção do parâmetro `dirfd`. Esse parâmetro altera onde o arquivo "
+"fornecido, no qual a chamada de sistema será executada, está localizado. "
+"Quando o parâmetro `filename` é absoluto, o `dirfd` é ignorado, mas quando o "
+"caminho para o arquivo é relativo, ele entra em jogo. O parâmetro `dirfd` é "
+"um diretório relativo ao qual o caminho relativo do arquivo é verificado. O "
+"`dirfd` é um descritor de arquivo de algum diretório ou `AT_FDCWD`. "
+"Portanto, por exemplo, a chamada de sistema `openat` pode ser assim:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1317
+#, no-wrap
+msgid "file descriptor 123 = /tmp/foo/, current working directory = /tmp/\n"
+msgstr "file descriptor 123 = /tmp/foo/, current working directory = /tmp/\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1322
+#, no-wrap
+msgid ""
+"openat(123, /tmp/bah\\, flags, mode)\t/* opens /tmp/bah */\n"
+"openat(123, bah\\, flags, mode)\t\t/* opens /tmp/foo/bah */\n"
+"openat(AT_FDWCWD, bah\\, flags, mode)\t/* opens /tmp/bah */\n"
+"openat(stdio, bah\\, flags, mode)\t/* returns error because stdio is not a directory */\n"
+msgstr ""
+"openat(123, /tmp/bah\\, flags, mode)\t/* opens /tmp/bah */\n"
+"openat(123, bah\\, flags, mode)\t\t/* opens /tmp/foo/bah */\n"
+"openat(AT_FDWCWD, bah\\, flags, mode)\t/* opens /tmp/bah */\n"
+"openat(stdio, bah\\, flags, mode)\t/* returns error because stdio is not a directory */\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1331
+msgid ""
+"This infrastructure is necessary to avoid races when opening files outside "
+"the working directory. Imagine that a process consists of two threads, "
+"thread A and thread B. Thread A issues `open(./tmp/foo/bah., flags, mode)` "
+"and before returning it gets preempted and thread B runs. Thread B does not "
+"care about the needs of thread A and renames or removes [.filename]#/tmp/foo/"
+"#. We got a race. To avoid this we can open [.filename]#/tmp/foo# and use "
+"it as `dirfd` for `openat` syscall. This also enables user to implement per-"
+"thread working directories."
+msgstr ""
+"Essa infraestrutura é necessária para evitar corridas ao abrir arquivos fora "
+"do diretório de trabalho. Imagine que um processo consista em dois threads, "
+"thread A e thread B. A thread A chama `open(./tmp/foo/bah., flags, mode)` e "
+"antes de retornar, ela é preemptada e a thread B é executada. A thread B não "
+"se importa com as necessidades da thread A e renomeia ou remove [.filename]#/"
+"tmp/foo/#. Temos uma corrida. Para evitar isso, podemos abrir [.filename]#/"
+"tmp/foo# e usá-lo como `dirfd` para a chamada de sistema `openat`. Isso "
+"também permite que o usuário implemente diretórios de trabalho específicos "
+"por thread."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1334
+msgid ""
+"Linux(R) family of *at syscalls contains: `linux_openat`, `linux_mkdirat`, "
+"`linux_mknodat`, `linux_fchownat`, `linux_futimesat`, `linux_fstatat64`, "
+"`linux_unlinkat`, `linux_renameat`, `linux_linkat`, `linux_symlinkat`, "
+"`linux_readlinkat`, `linux_fchmodat` and `linux_faccessat`. All these are "
+"implemented using the modified man:namei[9] routine and simple wrapping "
+"layer."
+msgstr ""
+"A família de syscalls *at do Linux(R) contém: `linux_openat`, "
+"`linux_mkdirat`, `linux_mknodat`, `linux_fchownat`, `linux_futimesat`, "
+"`linux_fstatat64`, `linux_unlinkat`, `linux_renameat`, `linux_linkat`, "
+"`linux_symlinkat`, `linux_readlinkat`, `linux_fchmodat` e `linux_faccessat`. "
+"Todas essas syscalls são implementadas usando a rotina modificada man:"
+"namei[9] e uma camada de encapsulamento simples."
+
+#. type: Title =====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1336
+#, no-wrap
+msgid "Implementation"
+msgstr "Implementação"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1344
+msgid ""
+"The implementation is done by altering the man:namei[9] routine (described "
+"above) to take additional parameter `dirfd` in its `nameidata` structure, "
+"which specifies the starting point of the pathname lookup instead of using "
+"the current working directory every time. The resolution of `dirfd` from "
+"file descriptor number to a vnode is done in native *at syscalls. When "
+"`dirfd` is `AT_FDCWD` the `dvp` entry in `nameidata` structure is `NULL` but "
+"when `dirfd` is a different number we obtain a file for this file "
+"descriptor, check whether this file is valid and if there is vnode attached "
+"to it then we get a vnode. Then we check this vnode for being a directory. "
+"In the actual man:namei[9] routine we simply substitute the `dvp` vnode for "
+"`dp` variable in the man:namei[9] function, which determines the starting "
+"point. The man:namei[9] is not used directly but via a trace of different "
+"functions on various levels. For example the `openat` goes like this:"
+msgstr ""
+"A implementação é feita alterando a rotina man:namei[9] (descrita "
+"anteriormente) para receber um parâmetro adicional `dirfd` em sua estrutura "
+"`nameidata`, que especifica o ponto de partida da pesquisa do caminho em vez "
+"de usar o diretório de trabalho atual todas as vezes. A resolução do `dirfd` "
+"do número de descritor de arquivo para um vnode é feita nas syscalls *at "
+"nativas. Quando `dirfd` é `AT_FDCWD`, a entrada `dvp` na estrutura "
+"`nameidata` é `NULL`, mas quando `dirfd` é um número diferente, obtemos um "
+"arquivo para esse descritor de arquivo, verificamos se esse arquivo é válido "
+"e, se houver um vnode associado a ele, obtemos um vnode. Em seguida, "
+"verificamos se esse vnode é um diretório. Na própria rotina man:namei[9], "
+"simplesmente substituímos o vnode `dvp` pela variável `dp`, que determina o "
+"ponto de partida. A rotina man:namei[9] não é usada diretamente, mas sim "
+"através de uma sequência de diferentes funções em vários níveis. Por "
+"exemplo, o `openat` funciona da seguinte maneira:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1348
+#, no-wrap
+msgid "openat() --> kern_openat() --> vn_open() -> namei()\n"
+msgstr "openat() --> kern_openat() --> vn_open() -> namei()\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1354
+msgid ""
+"For this reason `kern_open` and `vn_open` must be altered to incorporate the "
+"additional `dirfd` parameter. No compat layer is created for those because "
+"there are not many users of this and the users can be easily converted. "
+"This general implementation enables FreeBSD to implement their own *at "
+"syscalls. This is being discussed right now."
+msgstr ""
+"Por esse motivo, `kern_open` e `vn_open` devem ser alterados para incorporar "
+"o parâmetro adicional `dirfd`. Nenhuma camada de compatibilidade é criada "
+"para essas funções porque não há muitos usuários desse recurso e os usuários "
+"existentes podem ser facilmente convertidos. Essa implementação geral "
+"permite que o FreeBSD implemente seus próprios syscalls *at. Isso está sendo "
+"discutido atualmente."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1356
+#, no-wrap
+msgid "Ioctl"
+msgstr "Ioctl"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1370
+msgid ""
+"The ioctl interface is quite fragile due to its generality. We have to bear "
+"in mind that devices differ between Linux(R) and FreeBSD so some care must "
+"be applied to do ioctl emulation work right. The ioctl handling is "
+"implemented in [.filename]#linux_ioctl.c#, where `linux_ioctl` function is "
+"defined. This function simply iterates over sets of ioctl handlers to find "
+"a handler that implements a given command. The ioctl syscall has three "
+"parameters, the file descriptor, command and an argument. The command is a "
+"16-bit number, which in theory is divided into high 8 bits determining class "
+"of the ioctl command and low 8 bits, which are the actual command within the "
+"given set. The emulation takes advantage of this division. We implement "
+"handlers for each set, like `sound_handler` or `disk_handler`. Each handler "
+"has a maximum command and a minimum command defined, which is used for "
+"determining what handler is used. There are slight problems with this "
+"approach because Linux(R) does not use the set division consistently so "
+"sometimes ioctls for a different set are inside a set they should not belong "
+"to (SCSI generic ioctls inside cdrom set, etc.). FreeBSD currently does not "
+"implement many Linux(R) ioctls (compared to NetBSD, for example) but the "
+"plan is to port those from NetBSD. The trend is to use Linux(R) ioctls even "
+"in the native FreeBSD drivers because of the easy porting of applications."
+msgstr ""
+"A interface ioctl é bastante frágil devido à sua generalidade. Devemos ter "
+"em mente que os dispositivos diferem entre o Linux(R) e o FreeBSD, então é "
+"necessário ter cuidado para garantir que a emulação do ioctl funcione "
+"corretamente. O tratamento do ioctl é implementado em [."
+"filename]#linux_ioctl.c#, onde a função `linux_ioctl` é definida. Essa "
+"função simplesmente itera sobre conjuntos de manipuladores de ioctl para "
+"encontrar um manipulador que implemente um determinado comando. A chamada de "
+"sistema ioctl possui três parâmetros: o descritor de arquivo, o comando e um "
+"argumento. O comando é um número de 16 bits, que teoricamente é dividido em "
+"8 bits superiores que determinam a classe do comando ioctl e 8 bits "
+"inferiores, que são o comando real dentro do conjunto dado. A emulação "
+"aproveita essa divisão. Implementamos manipuladores para cada conjunto, como "
+"`sound_handler` ou `disk_handler`. Cada manipulador possui um comando máximo "
+"e um comando mínimo definido, que é usado para determinar qual manipulador "
+"será usado. Existem pequenos problemas com essa abordagem porque o Linux(R) "
+"não usa a divisão de conjunto de forma consistente, então às vezes os ioctl "
+"de um conjunto diferente estão dentro de um conjunto ao qual não deveriam "
+"pertencer (ioctl genéricos do SCSI dentro do conjunto de cdrom, etc.). "
+"Atualmente, o FreeBSD não implementa muitos ioctl do Linux(R) (em comparação "
+"com o NetBSD, por exemplo), mas o plano é portá-los do NetBSD. A tendência é "
+"usar os ioctl do Linux(R) mesmo nos drivers nativos do FreeBSD devido à "
+"facilidade de portar aplicativos."
+
+#. type: Title ====
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1372
+#, no-wrap
+msgid "Debugging"
+msgstr "Depuração"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1379
+msgid ""
+"Every syscall should be debuggable. For this purpose we introduce a small "
+"infrastructure. We have the ldebug facility, which tells whether a given "
+"syscall should be debugged (settable via a sysctl). For printing we have "
+"LMSG and ARGS macros. Those are used for altering a printable string for "
+"uniform debugging messages."
+msgstr ""
+"Cada chamada de sistema deve ser passível de depuração. Para esse propósito, "
+"introduzimos uma pequena infraestrutura. Temos a facilidade ldebug, que "
+"indica se uma determinada chamada de sistema deve ser depurada (configurável "
+"através de um sysctl). Para impressão, temos as macros LMSG e ARGS. Essas "
+"macros são usadas para modificar uma string imprimível para mensagens de "
+"depuração uniformes."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1381
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusão"
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1384
+#, no-wrap
+msgid "Results"
+msgstr "Resultados"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1390
+msgid ""
+"As of April 2007 the Linux(R) emulation layer is capable of emulating the "
+"Linux(R) 2.6.16 kernel quite well. The remaining problems concern futexes, "
+"unfinished *at family of syscalls, problematic signals delivery, missing "
+"`epoll` and `inotify` and probably some bugs we have not discovered yet. "
+"Despite this we are capable of running basically all the Linux(R) programs "
+"included in FreeBSD Ports Collection with Fedora Core 4 at 2.6.16 and there "
+"are some rudimentary reports of success with Fedora Core 6 at 2.6.16. The "
+"Fedora Core 6 linux_base was recently committed enabling some further "
+"testing of the emulation layer and giving us some more hints where we should "
+"put our effort in implementing missing stuff."
+msgstr ""
+"A partir de abril de 2007, a camada de emulação do Linux(R) é capaz de "
+"emular bem o kernel Linux(R) 2.6.16. Os problemas restantes envolvem "
+"futexes, chamadas de sistema inacabadas da família *at, entrega problemática "
+"de sinais, falta de suporte a `epoll` e `inotify`, e provavelmente alguns "
+"bugs que ainda não foram descobertos. Apesar disso, somos capazes de "
+"executar basicamente todos os programas Linux(R) incluídos na Coleção de "
+"Ports do FreeBSD com o Fedora Core 4 no kernel 2.6.16, e existem alguns "
+"relatos rudimentares de sucesso com o Fedora Core 6 no kernel 2.6.16. O "
+"linux_base do Fedora Core 6 foi recentemente adicionado, permitindo testes "
+"adicionais da camada de emulação e fornecendo mais informações sobre onde "
+"devemos concentrar nossos esforços na implementação do que está faltando."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1394
+msgid ""
+"We are able to run the most used applications like package:www/linux-"
+"firefox[], package:net-im/skype[] and some games from the Ports Collection. "
+"Some of the programs exhibit bad behavior under 2.6 emulation but this is "
+"currently under investigation and hopefully will be fixed soon. The only "
+"big application that is known not to work is the Linux(R) Java(TM) "
+"Development Kit and this is because of the requirement of `epoll` facility "
+"which is not directly related to the Linux(R) kernel 2.6."
+msgstr ""
+"Somos capazes de executar os aplicativos mais usados, como o pacote `www/"
+"linux-firefox`, o pacote `net-im/skype` e alguns jogos da Coleção de Ports. "
+"Alguns desses programas apresentam comportamento inadequado sob a emulação "
+"do 2.6, mas isso está atualmente em investigação e esperamos que seja "
+"corrigido em breve. O único grande aplicativo conhecido por não funcionar é "
+"o Java(TM) Development Kit do Linux(R), devido ao requisito da facilidade "
+"`epoll`, que não está diretamente relacionada ao kernel do Linux(R) 2.6."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1397
+msgid ""
+"We hope to enable 2.6.16 emulation by default some time after FreeBSD 7.0 is "
+"released at least to expose the 2.6 emulation parts for some wider testing. "
+"Once this is done we can switch to Fedora Core 6 linux_base, which is the "
+"ultimate plan."
+msgstr ""
+"Esperamos habilitar a emulação do 2.6.16 como padrão algum tempo depois do "
+"lançamento do FreeBSD 7.0, pelo menos para expor as partes de emulação 2.6 "
+"para um teste mais amplo. Uma vez feito isso, podemos mudar para o "
+"linux_base do Fedora Core 6, que é o plano final."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1399
+#, no-wrap
+msgid "Future work"
+msgstr "Trabalho futuro"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1402
+msgid ""
+"Future work should focus on fixing the remaining issues with futexes, "
+"implement the rest of the *at family of syscalls, fix the signal delivery "
+"and possibly implement the `epoll` and `inotify` facilities."
+msgstr ""
+"O trabalho futuro deve se concentrar em corrigir os problemas restantes com "
+"futexes, implementar o restante da família de chamadas de sistema *at, "
+"corrigir a entrega de sinais e possivelmente implementar as facilidades "
+"`epoll` e `inotify`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1404
+msgid ""
+"We hope to be able to run the most important programs flawlessly soon, so we "
+"will be able to switch to the 2.6 emulation by default and make the Fedora "
+"Core 6 the default linux_base because our currently used Fedora Core 4 is "
+"not supported any more."
+msgstr ""
+"Esperamos poder executar os programas mais importantes com perfeição em "
+"breve, por isso poderemos alternar para a emulação 2.6 por padrão e fazer do "
+"Fedora Core 6 o linux_base padrão porque o nosso atualmente usado Fedora "
+"Core 4 não é mais suportado."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1408
+msgid ""
+"The other possible goal is to share our code with NetBSD and DragonflyBSD. "
+"NetBSD has some support for 2.6 emulation but its far from finished and not "
+"really tested. DragonflyBSD has expressed some interest in porting the 2.6 "
+"improvements."
+msgstr ""
+"Outro objetivo possível é compartilhar nosso código com o NetBSD e o "
+"DragonflyBSD. O NetBSD tem algum suporte para emulação 2.6, mas está longe "
+"de estar completo e não foi realmente testado. O DragonflyBSD mostrou "
+"interesse em portar as melhorias do 2.6."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1413
+msgid ""
+"Generally, as Linux(R) develops we would like to keep up with their "
+"development, implementing newly added syscalls. Splice comes to mind "
+"first. Some already implemented syscalls are also suboptimal, for example "
+"`mremap` and others. Some performance improvements can also be made, finer "
+"grained locking and others."
+msgstr ""
+"Em geral, à medida que o Linux(R) se desenvolve, gostaríamos de acompanhar o "
+"seu desenvolvimento, implementando as novas chamadas de sistema adicionadas. "
+"O `splice` é uma delas que vem à mente em primeiro lugar. Algumas chamadas "
+"de sistema já implementadas também podem ser aprimoradas, por exemplo, "
+"`mremap` e outras. Também podem ser feitas melhorias de desempenho, como "
+"bloqueio mais refinado e outros."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1415
+#, no-wrap
+msgid "Team"
+msgstr "Equipe"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1418
+msgid "I cooperated on this project with (in alphabetical order):"
+msgstr "Eu colaborei neste projeto com (em ordem alfabética):"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1420
+msgid "`{jhb}`"
+msgstr "`{jhb}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1421
+msgid "`{kib}`"
+msgstr "`{kib}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1422
+msgid "Emmanuel Dreyfus"
+msgstr "Emmanuel Dreyfus"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1423
+msgid "Scot Hetzel"
+msgstr "Scot Hetzel"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1424
+msgid "`{jkim}`"
+msgstr "`{jkim}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1425
+msgid "`{netchild}`"
+msgstr "`{netchild}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1426
+msgid "`{ssouhlal}`"
+msgstr "`{ssouhlal}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1427
+msgid "Li Xiao"
+msgstr "Li Xiao"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1428
+msgid "`{davidxu}`"
+msgstr "`{davidxu}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1430
+msgid ""
+"I would like to thank all those people for their advice, code reviews and "
+"general support."
+msgstr ""
+"Gostaria de agradecer a todas as pessoas por seus conselhos, revisões de "
+"código e apoio geral."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1432
+#, no-wrap
+msgid "Literatures"
+msgstr "Literaturas"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1435
+msgid ""
+"Marshall Kirk McKusick - George V. Nevile-Neil. Design and Implementation of "
+"the FreeBSD operating system. Addison-Wesley, 2005."
+msgstr ""
+"Marshall Kirk McKusick - George V. Nevile-Neil. Design and Implementation of "
+"the FreeBSD operating system. Addison-Wesley, 2005."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1436
+msgid "https://tldp.org[https://tldp.org]"
+msgstr "https://tldp.org[https://tldp.org]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-emulation/_index.adoc:1436
+msgid "https://www.kernel.org[https://www.kernel.org]"
+msgstr "https://www.kernel.org[https://www.kernel.org]"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/linux-users/_index.adoc b/documentation/content/pt-br/articles/linux-users/_index.adoc
index e68fc61748..3e7f05ea65 100644
--- a/documentation/content/pt-br/articles/linux-users/_index.adoc
+++ b/documentation/content/pt-br/articles/linux-users/_index.adoc
@@ -1,13 +1,15 @@
---
-title: Guia rápido de FreeBSD para usuários de Linux
authors:
- - author: John Ferrell
-copyright: 2008 Projeto de Documentação do FreeBSD
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'John Ferrell'
+copyright: '2008 The FreeBSD Documentation Project'
+description: 'Este documento destina-se a familiarizar rapidamente os usuários intermediários a avançados do Linux® com os conceitos básicos do FreeBSD.'
+tags: ["Quickstart", "guide", "Linux", "FreeBSD"]
+title: 'Guia de Início Rápido do FreeBSD para Usuários do Linux®'
trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
---
-= Guia rápido de FreeBSD para usuários de Linux
+= Guia de Início Rápido do FreeBSD para Usuários do Linux(R)
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,20 +18,32 @@ trademarks: ["freebsd", "intel", "redhat", "linux", "unix", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/linux-users/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Este documento tem a intenção de familiarizar rapidamente usuários intermediários ou avançados do Linux(R) com o básico do FreeBSD.
+Este documento tem como objetivo familiarizar rapidamente os usuários intermediários a avançados do Linux(R) com os conceitos básicos do FreeBSD.
'''
@@ -38,86 +52,86 @@ toc::[]
[[intro]]
== Introdução
-Esse documento destaca algumas diferenças técnicas entre o FreeBSD e o Linux(R) para que os usuários intermediários ou avançados do Linux(R) possam se familiarizar rapidamente com o básico do FreeBSD.
+Este documento destaca algumas das diferenças técnicas entre o FreeBSD e o Linux(R) para que os usuários intermediários a avançados do Linux® possam se familiarizar rapidamente com os conceitos básicos do FreeBSD.
-Este documento assume que o FreeBSD já está instalado. Acesse o link do capítulo link:{handbook}#bsdinstall[Instalando o FreeBSD] no Handbook do FreeBSD para obter ajuda no processo de instalação.
+Este documento pressupõe que o FreeBSD já está instalado. Consulte o capítulo extref:{handbook}[Instalando o FreeBSD, bsdinstall] no Handbook para obter ajuda com o processo de instalação.
[[shells]]
== Shell Padrão
-Os usuários do Linux(R) são geralmente surpreendidos quando descobrem que o Bash não é o shell padrão do FreeBSD. De fato, o Bash não é incluído na instalação padrão. Ao invés disto, o FreeBSD usa o man:tcsh[1] como shell padrão para o usuário root, e o man:sh[1], um shell compatível com o Bourne shell, como shell padrão para os demais usuários. O man:sh[1] é muito similar ao Bash mas com um conjunto de funcionalidades muito menor. Geralmente os scripts shell escritos para o man:sh[1] irão ser executados no Bash, mas o contrário não.
+Usuários de Linux(R) muitas vezes se surpreendem ao descobrir que o Bash não é a shell padrão no FreeBSD. Na verdade, o Bash não está incluído na instalação padrão. Em vez disso, a shell compatível com o shell Bourne, man:sh[1], é a shell padrão dos usuários. Por padrão a shell do usuário root é a man:tcsh[1] no FreeBSD 13 e nas versões anteriores, já no FreeBSD 14 e versões posteriores é a man:sh[1]. A man:sh[1] é muito semelhante ao Bash, mas com um conjunto de recursos muito menor. Geralmente, os scripts de shell escritos para aman:sh[1] serão executados no Bash, mas o contrário nem sempre é verdadeiro.
-Entretanto, o Bash e outros shells estão disponíveis para a instalação usando a link:{handbook}#ports[Coleção de Pacotes e a Árvore de Ports].
+No entanto, o Bash e outros shells estão disponíveis para instalação usando a extref:{handbook}[Coleção de Pacotes e Ports do FreeBSD, ports].
-Depois de instalar um novo shell, use o comando man:chsh[1] para trocar o shell padrão do usuário. É recomendado que o shell padrão do usuário `root` se mantenha inalterado uma vez que os shells que não fazem parte da base do sistema são instalados em [.filename]#/usr/local/bin#. No caso de ocorrer algum problema com o sistema de arquivos onde o diretório [.filename]#/usr/local/bin# está localizado e este não puder ser utilizado, o usuário `root` poderá não ter acesso ao shell padrão, evitando que o usuário `root` entre no sistema para corrigir o problema.
+Após instalar outro shell, use o man:chsh[1] para mudar o shell padrão do usuário. É recomendado que o shell padrão do usuário `root` permaneça inalterado, já que shells que não estão incluídas na distribuição base são instalados em [.filename]#/usr/local/bin#. Em caso de problema, o sistema de arquivos onde o [.filename]#/usr/local/bin# está localizado pode não estar montado. Nesse caso, o usuário `root` não teria acesso ao seu shell padrão, o que impediria o `root` de fazer login e corrigir o problema.
[[software]]
-== Coleção de Pacotes e Árvore de Ports: Instalando novos programas no FreeBSD
+== Pacotes e Ports: Adicionando Softwares no FreeBSD
-FreeBSD provê dois métodos para a instalação de novos aplicativos: pacotes binários e através da compilação do código fonte (Árvore de ports). Cada método tem seu benefício:
+O FreeBSD oferece dois métodos para instalar aplicativos: pacotes binários e ports compilados. Cada método tem seus próprios benefícios:
.Pacotes Binários
-* Instalação rápida quando comparada com a compilação de grandes aplicativos .
-* Não há a necessidade de compreender como compilar um software.
-* Não é necessário a instalação de um compilador.
+* Instalação mais rápida em comparação à compilação de aplicativos grandes.
+* Não requer compreensão de como compilar o software.
+* Não é necessário instalar um compilador.
.Árvore de Ports
-* Possibilidade de customizar as opções de instalação
-* Possibilidade de se aplicar patchs customizados
+* Capacidade de personalizar as opções de instalação.
+* Possibilidade de aplicar patches personalizados.
-Se a instalação da aplicação não necessitar de opções customizadas, a instalação via pacotes é suficiente. Compile o port sempre que o aplicativo exigir a personalização das opções padrão. Se você necessita de pacotes customizados, você poderá obtê-los através da compilação a partir do ports utilizando o comando `make Pacotes`.
+Se a instalação de um aplicativo não requer personalização, a instalação do pacote é suficiente. Compile o port sempre que um aplicativo exigir personalização das opções padrão. Se necessário, um pacote personalizado pode ser compilado a partir do ports usando o comando `make package`.
-A lista completa da árvore de ports e dos pacotes pode ser encontrada https://www.freebsd.org/ports/[aqui].
+Uma lista completa de todos os ports e pacotes disponíveis pode ser encontrada https://www.freebsd.org/ports/[aqui].
[[packages]]
=== Pacotes
-Pacotes são aplicações pré-compiladas, os equivalentes no FreeBSD aos arquivos [.filename]#.deb# nos sistemas baseados no Debian/Ubuntu e aos arquivos [.filename]#.rpm# nos sistemas baseados no Fedora/Red Hat. Pacotes são instalados através do comando `pkg`. Por exemplo, o comando a seguir instala o Apache 2.4:
+Pacotes são aplicativos pré-compilados, os equivalentes no FreeBSD dos arquivos [.filename]#.deb# em sistemas baseados em Debian/Ubuntu e [.filename]#.rpm# em sistemas baseados em Red Hat/Fedora. Os pacotes são instalados usando o comando `pkg`. Por exemplo, o seguinte comando instala o Apache 2.4:
-[source,shell]
+[source, shell]
....
# pkg install apache24
....
-Para mais informações sobre pacotes, veja a seção 5.4 do Handbook do FreeBSD: link:{handbook}#pkgng-intro[Usando pkgng para gerenciar pacotes binários].
+Para mais informações sobre pacotes, consulte a seção 5.4 do Handbook do FreeBSD: extref:{handbook}[Usando o pkgng para Gerenciamento de Pacotes Binários, pkgng-intro].
[[ports]]
=== Árvore de Ports
-A árvore de ports do FreeBSD é um framework de [.filename]##Makefiles##s e patches customizados especificamente para a instalação através do código fonte no FreeBSD. Quando um port é instalado, o sistema irá buscar o código fonte, aplicar qualquer patch que seja necessário, compilar o código, instalar a aplicação e qualquer outra dependência da qual ela necessite.
+A Coleção de Ports do FreeBSD é um conjunto de [.filename]#Makefiles# e patches específicos para instalar aplicativos a partir do código-fonte no FreeBSD. Ao instalar um port, o sistema buscará o código-fonte, aplicará os patches necessários, compilando o código e instalando o aplicativo e quaisquer dependências necessárias.
-A Coleção de Ports, algumas vezes referenciada como a árvore de ports, pode ser instalada em [.filename]#/usr/ports# usando o comando man:portsnap[8] (se estiver rodando FreeBSD 11.4 ou 12.1) ou Subversion (se estiver rodando FreeBSD-CURRENT). Instruções detalhadas para instalação da Coleção de Ports podem ser encontradas na link:{handbook}#ports-using[seção 5.5] do Handbook do FreeBSD.
+A Coleção de Ports, às vezes referida como árvore de ports, pode ser instalada em [.filename]#/usr/ports# usando o link:{handbook}mirrors/#git[Git]. Instruções detalhadas para a instalação da Coleção de Ports podem ser encontradas na extref:{handbook}[seção 4.5.1, ports-using-installation-methods] do Handbook do FreeBSD.
-Para compilar um port, mude para o diretório do port e inicie o processo de compilação. O exemplo abaixo instala o Apache 2.4 através da Coleção de Ports:
+Para compilar um port, mude para o diretório do port e inicie o processo de compilação. O seguinte exemplo instala o Apache 2.4 a partir da Coleção de Ports:
-[source,shell]
+[source, shell]
....
# cd /usr/ports/www/apache24
# make install clean
....
-Um dos benefícios de usar a árvore de ports para realizar a instalação de um software é a possibilidade de customizar as opções de instalação. O exemplo a seguir, especifica que o módulo mod_ldap também deve ser instalado:
+Um benefício de usar o ports para instalar software é a capacidade de personalizar as opções de instalação. Este exemplo especifica que o módulo mod_ldap também deve ser instalado:
-[source,shell]
+[source, shell]
....
# cd /usr/ports/www/apache24
# make WITH_LDAP="YES" install clean
....
-Veja link:{handbook}#ports-using[Usando a Coleção de Ports] para mais informações.
+Para mais informações, consulte extref:{handbook}[Usando a Coleção de Ports, ports-using] no Handbook do FreeBSD.
[[startup]]
== Inicialização do Sistema
-Muitas distribuições Linux(R) usam o sistema init do SysV, enquanto o FreeBSD usa o tradicional man:init[8] estilo BSD. Por utilizar este sistema man:init[8], não existe níveis diferenciados de execução e o arquivo [.filename]#/etc/inittab# não existe. Ao invés disto, a inicialização é controlada por meio de scripts man:rc[8]. Na inicialização do sistema, o [.filename]#/etc/rc# lê o arquivo [.filename]#/etc/rc.conf# e o arquivo [.filename]#/etc/defaults/rc.conf# para determinar quais são os serviços que devem ser inicializados. Os serviços especificados são inicializados pela execução de scripts de inicialização localizados em [.filename]#/etc/rc.d/# e [.filename]#/usr/local/etc/rc.d/#. Esses scripts são similares aos contidos no diretório [.filename]#/etc/init.d/# dos sistemas Linux(R).
+Muitas distribuições Linux(R) usam o sistema SysV init, enquanto o FreeBSD usa o tradicional estilo BSD de man:init[8]. Sob o estilo BSD de man:init[8], não há run-levels e o arquivo [.filename]#/etc/inittab# não existe. Em vez disso, a inicialização é controlada pelos scripts man:rc[8]. No boot do sistema, o arquivo [.filename]#/etc/rc# lê os arquivos [.filename]#/etc/rc.conf# e [.filename]#/etc/defaults/rc.conf# para determinar quais serviços devem ser iniciados. Os serviços especificados são então iniciados executando os scripts de inicialização de serviço correspondentes localizados em [.filename]#/etc/rc.d/# e [.filename]#/usr/local/etc/rc.d/#. Esses scripts são semelhantes aos scripts localizados em [.filename]#/etc/init.d/# nos sistemas Linux(R).
-Os scripts encontrados no diretório [.filename]#/etc/rc.d/# fazem parte das aplicações da "base" do sistema, tais como man:cron[8], man:sshd[8], e man:syslog[3]. Os scripts encontrados no diterório [.filename]#/usr/local/etc/rc.d/# correspondem aos aplicativos instalados pelo usuário, como por exemplo: Apache e Squid.
+Os scripts encontrados em [.filename]#/etc/rc.d/# são relacionados aos aplicativos que fazem parte do sistema "base", como man:cron[8], man:sshd[8] e man:syslog[3]. Os scripts em [.filename]#/usr/local/etc/rc.d/# são relacionados aos aplicativos instalados pelo usuário, como o Apache e o Squid.
-Uma vez que o FreeBSD é desenvolvido como um sistema completo, aplicações instaladas pelos usuários não são consideradas parte do sistema "base". As aplicações dos usuários são geralmente instaladas por meio link:{handbook}#ports-using[dos Pacotes Binários ou da Coleção de Ports]. Para mantê-los separados da base do sistema, eles são instalados sob o diretório [.filename]#/usr/local/#. Portanto, os aplicativos binários instalados pelos usuários localizam-se em [.filename]#/usr/local/bin/#, e os arquivos de configuração em [.filename]#/usr/local/etc/#.
+Como o FreeBSD é desenvolvido como um sistema operacional completo, os aplicativos instalados pelo usuário não são considerados parte do sistema "base". Os aplicativos instalados pelo usuário geralmente são instalados usando extref:{handbook}[Pacotes ou Ports, ports-using]. Para mantê-los separados do sistema base, os aplicativos instalados pelo usuário são instalados em [.filename]#/usr/local/#. Portanto, os binários instalados pelo usuário residem em [.filename]#/usr/local/bin/#, os arquivos de configuração estão em [.filename]#/usr/local/etc/# e assim por diante.
-Os serviços são habilitados pela adição de uma entrada no arquivo [.filename]#/etc/rc.conf# . As configurações padrões são encontradas no arquivo [.filename]#/etc/defaults/rc.conf# e essas configurações padrões são sobre postas pelas configurações realizadas no arquivo [.filename]#/etc/rc.conf#. Veja o manual do man:rc.conf[5] para maiores informações sobre as entradas disponíveis. Quando você instalar aplicações adicionais, leia as mensagens de instalação da aplicação para determinar como habilitar os serviços associados a essa aplicação.
+Os serviços são ativados adicionando uma entrada para o serviço em [.filename]#/etc/rc.conf#. As configurações padrão do sistema são encontradas no [.filename]#/etc/defaults/rc.conf# e essas configurações padrão são substituídas por configurações definidas no [.filename]#/etc/rc.conf#. Consulte man:rc.conf[5] para obter mais informações sobre as entradas disponíveis. Ao instalar aplicativos adicionais, revise a mensagem de instalação do aplicativo para determinar como ativar quaisquer serviços associados.
-As seguintes entradas no arquivo [.filename]#/etc/rc.conf# habilitam o man:sshd[8], o Apache 2.4, e especifica que o Apache deve ser inicializado com SSL ativado.
+As seguintes entradas em [.filename]#/etc/rc.conf# habilitam o man:sshd[8], habilitam o Apache 2.4 e especificam que o Apache deve ser iniciado com SSL.
[.programlisting]
....
@@ -128,30 +142,28 @@ apache24_enable="YES"
apache24_flags="-DSSL"
....
-Uma vez que o serviço tenha sido habilitado no arquivo [.filename]#/etc/rc.conf#, ele pode ser inicializado sem a necessidade de uma reinicialização do sistema.
+Depois que um serviço foi habilitado no [.filename]#/etc/rc.conf#, ele pode ser iniciado sem reiniciar o sistema:
-[source,shell]
+[source, shell]
....
# service sshd start
# service apache24 start
....
-Se o serviço não tiver sido habilitado, ele poderá ser inicializado a partir da linha de comando usando a opção `onestart`:
+Se um serviço não tiver sido habilitado, ele pode ser iniciado a partir da linha de comando usando o comando `onestart`:
-[source,shell]
+[source, shell]
....
-
# service sshd onestart
....
[[network]]
== Configuração de Rede
-Diferente da identificação genérica _ethX_ usada pelo Linux(R) para identificar a interface de rede, o FreeBSD usa o nome do driver seguido por um número. A seguinte saída do comando man:ifconfig[8] mostra duas interfaces de rede Intel(R) Pro 1000 ([.filename]#em0# e [.filename]#em1#):
+Em vez de um identificador genérico _ethX_ que o Linux(R) usa para identificar uma interface de rede, o FreeBSD usa o nome do driver seguido por um número. A saída a seguir do man:ifconfig[8] mostra duas interfaces de rede Intel(R) Pro 1000 ([.filename]#em0# e [.filename]#em1#):
-[source,shell]
+[source, shell]
....
-
% ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_MTU>
@@ -167,7 +179,7 @@ em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
status: active
....
-Um endereço IP pode ser designado à uma interface utilizando o comando man:ifconfig[8]. Para torna-lo definitivo e persistente entre as reinicializações, o endereço IP deve ser incluído no arquivo [.filename]#/etc/rc.conf#. A seguinte entrada no arquivo [.filename]#/etc/rc.conf# especifica o nome da máquina, o endereço IP e o gateway padrão da rede:
+Um endereço IP pode ser atribuído a uma interface usando o comando man:ifconfig[8]. Para que a configuração de IP permaneça persistente através das reinicializações, ela deve ser incluída no [.filename]#/etc/rc.conf#. As seguintes entradas no [.filename]#/etc/rc.conf# especificam o nome do host, o endereço IP e o gateway padrão:
[.programlisting]
....
@@ -176,7 +188,7 @@ ifconfig_em0="inet 10.10.10.100 netmask 255.255.255.0"
defaultrouter="10.10.10.1"
....
-Use a seguinte entrada para configurar uma interface para obter sua configuração por meio do DHCP:
+Use as seguintes entradas para configurar uma interface para utilizar DHCP:
[.programlisting]
....
@@ -187,33 +199,33 @@ ifconfig_em0="DHCP"
[[firewall]]
== Firewall
-O sistema FreeBSD não utiliza o Linux(R) IPTABLES como seu firewall, o FreeBSD oferece três tipos de firewall a nível de kernel:
+O FreeBSD não usa o IPTABLES do Linux(R) para o seu firewall. Em vez disso, o FreeBSD oferece uma escolha de três firewalls em nível de kernel:
-* link:{handbook}#firewalls-pf[PF]
-* link:{handbook}#firewalls-ipf[IPFILTER]
-* link:{handbook}#firewalls-ipfw[IPFW]
+* extref:{handbook}[PF, firewalls-pf]
+* extref:{handbook}[IPFILTER, firewalls-ipf]
+* extref:{handbook}[IPFW, firewalls-ipfw]
-O PF é desenvolvido pelo projeto OpenBSD e portado para o FreeBSD. O PF foi criado para substituir o IPFILTER e sua sintaxe é similar ao IPFILTER. O PF pode ser utilizado em conjunto com man:altq[4] para prover funcionalidade de QoS.
+O PF é desenvolvido pelo projeto OpenBSD e portado para o FreeBSD. O PF foi criado como um substituto para o IPFILTER e sua sintaxe é semelhante à do IPFILTER. O PF pode ser combinado com o man:altq[4] para fornecer recursos de QoS.
-O exemplo abaixo mostra uma regra do PF para permitir conexões de entrada do SSH:
+Este exemplo de regra do PF permite as conexões de entrada do SSH:
[.programlisting]
....
pass in on $ext_if inet proto tcp from any to ($ext_if) port 22
....
-O IPFILTER é uma aplicação de firewall desenvolvida por Darren Reed. Ela não é específica para o FreeBSD e foi portado para diversos sistemas operacionais, incluindo NetBSD, OpenBSD, SunOS, HP/UX, e Solaris.
+O IPFILTER é o aplicativo de firewall desenvolvido por Darren Reed. Não é específico do FreeBSD e foi portado para vários sistemas operacionais, incluindo NetBSD, OpenBSD, SunOS, HP/UX e Solaris.
-A sintaxe do IPFILTER para permitir conexões de entrada do SSH é:
+A sintaxe do IPFILTER para permitir o recebimento de conexões no SSH é a seguinte:
[.programlisting]
....
pass in on $ext_if proto tcp from any to any port = 22
....
-O IPFW é o firewall desenvolvido e mantido pelo FreeBSD. Ele pode ser utilizado em conjunto com o man:dummynet[4] para prover a funcionalidade de traffic shaping e simular diferentes tipos de conexões de rede.
+O IPFW é o firewall desenvolvido e mantido pelo FreeBSD. Ele pode ser combinado com o man:dummynet[4] para fornecer recursos de controle de tráfego e simular diferentes tipos de conexões de rede.
-A sintaxe do IPFW para permitir conexões de entrada do SSH é:
+A sintaxe do IPFW para permitir a entrada de conexões SSH é a seguinte:
[.programlisting]
....
@@ -223,15 +235,15 @@ ipfw add allow tcp from any to me 22 in via $ext_if
[[updates]]
== Atualizando o FreeBSD
-Existem dois métodos para realizar a atualização em um sistema FreeBSD: a partir do código fonte ou atualização binária.
+Existem dois métodos para atualizar um sistema FreeBSD: a partir do código-fonte ou a partir de atualizações binárias.
-Atualizar através do código fonte é a forma mais trabalhosa, mas ela oferece uma grande flexibilidade. O processo envolve a sincronização da cópia local do código fonte do FreeBSD com os servidores de Subversion do FreeBSD. Uma vez que o código fonte local esteja atualizado, uma nova versão do kernel e da userland poderão ser compiladas.
+Atualizar a partir do código-fonte é o método de atualização mais complexo, mas oferece a maior flexibilidade. O processo envolve sincronizar uma cópia local do código-fonte do FreeBSD com o repositório Git do FreeBSD. Assim que o código-fonte local estiver atualizado, uma nova versão do kernel e do userland pode ser compilada.
-Atualização binária é similar ao uso do comando `yum` ou `apt-get` para atualizar um sistema Linux(R). No FreeBSD, o comando man:freebsd-update[8] pode ser utilizado para buscar uma nova atualização binária e a instalá-la. Estas atualizações podem ser agendada usando o man:cron[8].
+As atualizações binárias são semelhantes ao uso do `yum` ou do `apt-get` para atualizar um sistema Linux(R). No FreeBSD, o man:freebsd-update[8] pode ser usado para buscar novas atualizações binárias e instalá-las. Essas atualizações podem ser agendadas usando o man:cron[8].
[NOTE]
====
-Quando utilizar o man:cron[8] para agendar as atualizações, use o comando `freebsd-update cron` no arquivo man:crontab[1] para reduzir a possibilidade de que um grande número de máquinas busquem a atualização ao mesmo tempo:
+Ao usar o man:cron[8] para agendar atualizações, use o `freebsd-update cron` no man:crontab[1] para reduzir a possibilidade de que um grande número de máquinas busque atualizações ao mesmo tempo:
[.programlisting]
....
@@ -240,41 +252,40 @@ Quando utilizar o man:cron[8] para agendar as atualizações, use o comando `fre
====
-Para maiores informações sobre a atualização por meio do código fonte ou dos updates binários, acesse o link:{handbook}#updating-upgrading[capítulo sobre atualização] do Handbook do FreeBSD.
+Para obter mais informações sobre as atualizações a partir do código-fonte e a partir de binários, consulte o extref:{handbook}[capítulo sobre atualizações, updating-upgrading-freebsdupdate] do Handbook do FreeBSD.
[[procfs]]
-== procfs: É passado, mas foi não esquecido
+== procfs: desaparecido, mas não esquecido
-Em algumas distribuições do Linux(R), você pode consultar o [.filename]#/proc/sys/net/ipv4/ip_forward# para verificar se o encaminhamento de IP está ou não abilitado. No FreeBSD, o comando man:sysctl[8] é utilizado para ver o status desta e também de outras variáveis do sistema.
+Em algumas distribuições Linux(R), é possível verificar se o encaminhamento de IP está habilitado verificando o arquivo [.filename]#/proc/sys/net/ipv4/ip_forward#. No FreeBSD, o comando man:sysctl[8] é utilizado para visualizar essa e outras configurações do sistema.
-Por exemplo, use o seguinte comando para determinar se o encaminhamento de IP está ou não habilitado.
+Por exemplo, use o seguinte comando para verificar se o encaminhamento de IP está habilitado em um sistema FreeBSD:
-[source,shell]
+[source, shell]
....
% sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 0
....
-Use a opção `-a` para ver todas as variáveis do sistema:
+Use a opção `-a` para listar todas as configurações do sistema:
-[source,shell]
+[source, shell]
....
-
% sysctl -a | more
....
-Se alguma aplicação necessitar do procfs, adicione a seguinte entrada no arquivo [.filename]#/etc/fstab#:
+Se um aplicativo requer o uso do procfs, adicione a seguinte entrada ao arquivo [.filename]#/etc/fstab#:
-[source,shell]
+[source, shell]
....
proc /proc procfs rw,noauto 0 0
....
-Incluindo a opção `noauto` irá previnir que o [.filename]#/proc# seja montado automaticamente durante a inicialização do sistema.
+Incluir o parâmetro `noauto` faz com que o diretório [.filename]#/proc# não seja montado automaticamente durante a inicialização do sistema.
-Para montar o sistema de arquivos sem reinicializar:
+Para montar o sistema de arquivos sem reiniciar o sistema:
-[source,shell]
+[source, shell]
....
# mount /proc
....
@@ -287,21 +298,21 @@ Alguns comandos comuns e equivalentes são os seguintes:
[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
-| Comandos do Linux (Red Hat/Debian)
-| Equivalente no FreeBSD
+| Comando Linux(R) (Red Hat/Debian)
+| Equivalente FreeBSD
| Propósito
|`yum install _package_` / `apt-get install _package_`
|`pkg install _package_`
-|Instalação de um pacote binário de um repositório remoto
+|Instala um pacote a partir de um repositório remoto
|`rpm -ivh _package_` / `dpkg -i _package_`
|`pkg add _package_`
-|Instalação de um pacote local.
+|Instala um pacote local
|`rpm -qa` / `dpkg -l`
|`pkg info`
-|Listar os pacotes instalados (Pacotes binários e através da árvore de ports)
+|Lista os pacotes instalados
|`lspci`
|`pciconf`
@@ -309,18 +320,18 @@ Alguns comandos comuns e equivalentes são os seguintes:
|`lsmod`
|`kldstat`
-|Lista os módulos do kernel que foram carregados
+|Lista os módulos do kernel carregados
|`modprobe`
|`kldload` / `kldunload`
-|Carrega/Descarrega módulos do kernel.
+|Carrega / Descarrega módulos do kernel
|`strace`
|`truss`
-|Rastreia chamadas do sistema
+|Rastrea as chamadas de sistema
|===
[[conclusion]]
== Conclusão
-EEste documento forneceu uma visão geral do FreeBSD. Veja o link:{handbook}[Handbook do FreeBSD] para uma cobertura mais profunda desses tópicos, assim como outros não cobertos por este documento.
+Este documento forneceu uma visão geral do FreeBSD. Consulte o extref:{handbook}[Handbook do FreeBSD] para obter uma cobertura mais detalhada desses tópicos, bem como de muitos outros tópicos não abordados por este documento.
diff --git a/documentation/content/pt-br/articles/linux-users/_index.po b/documentation/content/pt-br/articles/linux-users/_index.po
new file mode 100644
index 0000000000..cb174479f0
--- /dev/null
+++ b/documentation/content/pt-br/articles/linux-users/_index.po
@@ -0,0 +1,1007 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-06-19 21:08-0300\n"
+"PO-Revision-Date: 2023-06-21 21:54+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articleslinux-users_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/linux-users/_index.adoc:1
+#, no-wrap
+msgid "This document is intended to quickly familiarize intermediate to advanced Linux® users with the basics of FreeBSD."
+msgstr "Este documento destina-se a familiarizar rapidamente os usuários intermediários a avançados do Linux® com os conceitos básicos do FreeBSD."
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/linux-users/_index.adoc:1
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux® Users"
+msgstr "Guia de Início Rápido do FreeBSD para Usuários do Linux®"
+
+#. type: Title =
+#: documentation/content/en/articles/linux-users/_index.adoc:11
+#, no-wrap
+msgid "FreeBSD Quickstart Guide for Linux(R) Users"
+msgstr "Guia de Início Rápido do FreeBSD para Usuários do Linux(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:46
+msgid ""
+"This document is intended to quickly familiarize intermediate to advanced "
+"Linux(R) users with the basics of FreeBSD."
+msgstr ""
+"Este documento tem como objetivo familiarizar rapidamente os usuários "
+"intermediários a avançados do Linux(R) com os conceitos básicos do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:52
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:55
+msgid ""
+"This document highlights some of the technical differences between FreeBSD "
+"and Linux(R) so that intermediate to advanced Linux(R) users can quickly "
+"familiarize themselves with the basics of FreeBSD."
+msgstr ""
+"Este documento destaca algumas das diferenças técnicas entre o FreeBSD e o "
+"Linux(R) para que os usuários intermediários a avançados do Linux® possam se "
+"familiarizar rapidamente com os conceitos básicos do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:58
+msgid ""
+"This document assumes that FreeBSD is already installed. Refer to the "
+"extref:{handbook}[Installing FreeBSD, bsdinstall] chapter of the FreeBSD "
+"Handbook for help with the installation process."
+msgstr ""
+"Este documento pressupõe que o FreeBSD já está instalado. Consulte o "
+"capítulo extref:{handbook}[Instalando o FreeBSD, bsdinstall] no Handbook "
+"para obter ajuda com o processo de instalação."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:60
+#, no-wrap
+msgid "Default Shell"
+msgstr "Shell Padrão"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:68
+msgid ""
+"Linux(R) users are often surprised to find that Bash is not the default "
+"shell in FreeBSD. In fact, Bash is not included in the default "
+"installation. Instead, the Bourne shell-compatible man:sh[1] as the default "
+"user shell. The root shell is man:tcsh[1] by default on FreeBSD 13 and "
+"earlier and man:sh[1] on FreeBSD 14 and later. man:sh[1] is very similar to "
+"Bash but with a much smaller feature-set. Generally shell scripts written "
+"for man:sh[1] will run in Bash, but the reverse is not always true."
+msgstr ""
+"Usuários de Linux(R) muitas vezes se surpreendem ao descobrir que o Bash não "
+"é a shell padrão no FreeBSD. Na verdade, o Bash não está incluído na "
+"instalação padrão. Em vez disso, a shell compatível com o shell Bourne, man:"
+"sh[1], é a shell padrão dos usuários. Por padrão a shell do usuário root é "
+"a man:tcsh[1] no FreeBSD 13 e nas versões anteriores, já no FreeBSD 14 e "
+"versões posteriores é a man:sh[1]. A man:sh[1] é muito semelhante ao Bash, "
+"mas com um conjunto de recursos muito menor. Geralmente, os scripts de shell "
+"escritos para aman:sh[1] serão executados no Bash, mas o contrário nem "
+"sempre é verdadeiro."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:70
+msgid ""
+"However, Bash and other shells are available for installation using the "
+"FreeBSD extref:{handbook}[Packages and Ports Collection, ports]."
+msgstr ""
+"No entanto, o Bash e outros shells estão disponíveis para instalação usando "
+"a extref:{handbook}[Coleção de Pacotes e Ports do FreeBSD, ports]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:75
+msgid ""
+"After installing another shell, use man:chsh[1] to change a user's default "
+"shell. It is recommended that the `root` user's default shell remain "
+"unchanged since shells which are not included in the base distribution are "
+"installed to [.filename]#/usr/local/bin#. In the event of a problem, the "
+"file system where [.filename]#/usr/local/bin# is located may not be "
+"mounted. In this case, `root` would not have access to its default shell, "
+"preventing `root` from logging in and fixing the problem."
+msgstr ""
+"Após instalar outro shell, use o man:chsh[1] para mudar o shell padrão do "
+"usuário. É recomendado que o shell padrão do usuário `root` permaneça "
+"inalterado, já que shells que não estão incluídas na distribuição base são "
+"instalados em [.filename]#/usr/local/bin#. Em caso de problema, o sistema de "
+"arquivos onde o [.filename]#/usr/local/bin# está localizado pode não estar "
+"montado. Nesse caso, o usuário `root` não teria acesso ao seu shell padrão, "
+"o que impediria o `root` de fazer login e corrigir o problema."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:77
+#, no-wrap
+msgid "Packages and Ports: Adding Software in FreeBSD"
+msgstr "Pacotes e Ports: Adicionando Softwares no FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:81
+msgid ""
+"FreeBSD provides two methods for installing applications: binary packages "
+"and compiled ports. Each method has its own benefits:"
+msgstr ""
+"O FreeBSD oferece dois métodos para instalar aplicativos: pacotes binários e "
+"ports compilados. Cada método tem seus próprios benefícios:"
+
+#. type: Block title
+#: documentation/content/en/articles/linux-users/_index.adoc:82
+#, no-wrap
+msgid "Binary Packages"
+msgstr "Pacotes Binários"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:84
+msgid "Faster installation as compared to compiling large applications."
+msgstr ""
+"Instalação mais rápida em comparação à compilação de aplicativos grandes."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:85
+msgid "Does not require an understanding of how to compile software."
+msgstr "Não requer compreensão de como compilar o software."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:86
+msgid "No need to install a compiler."
+msgstr "Não é necessário instalar um compilador."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-users/_index.adoc:87
+#: documentation/content/en/articles/linux-users/_index.adoc:112
+#, no-wrap
+msgid "Ports"
+msgstr "Árvore de Ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:89
+msgid "Ability to customize installation options."
+msgstr "Capacidade de personalizar as opções de instalação."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:90
+msgid "Custom patches can be applied."
+msgstr "Possibilidade de aplicar patches personalizados."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:94
+msgid ""
+"If an application installation does not require any customization, "
+"installing the package is sufficient. Compile the port instead whenever an "
+"application requires customization of the default options. If needed, a "
+"custom package can be compiled from ports using `make package`."
+msgstr ""
+"Se a instalação de um aplicativo não requer personalização, a instalação do "
+"pacote é suficiente. Compile o port sempre que um aplicativo exigir "
+"personalização das opções padrão. Se necessário, um pacote personalizado "
+"pode ser compilado a partir do ports usando o comando `make package`."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:96
+msgid ""
+"A complete list of all available ports and packages can be found https://www."
+"freebsd.org/ports/[here]."
+msgstr ""
+"Uma lista completa de todos os ports e pacotes disponíveis pode ser "
+"encontrada https://www.freebsd.org/ports/[aqui]."
+
+#. type: Title ===
+#: documentation/content/en/articles/linux-users/_index.adoc:98
+#, no-wrap
+msgid "Packages"
+msgstr "Pacotes"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:103
+msgid ""
+"Packages are pre-compiled applications, the FreeBSD equivalents of [."
+"filename]#.deb# files on Debian/Ubuntu based systems and [.filename]#.rpm# "
+"files on Red Hat/Fedora based systems. Packages are installed using `pkg`. "
+"For example, the following command installs Apache 2.4:"
+msgstr ""
+"Pacotes são aplicativos pré-compilados, os equivalentes no FreeBSD dos "
+"arquivos [.filename]#.deb# em sistemas baseados em Debian/Ubuntu e [."
+"filename]#.rpm# em sistemas baseados em Red Hat/Fedora. Os pacotes são "
+"instalados usando o comando `pkg`. Por exemplo, o seguinte comando instala o "
+"Apache 2.4:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:107
+#, no-wrap
+msgid "# pkg install apache24\n"
+msgstr "# pkg install apache24\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:110
+msgid ""
+"For more information on packages refer to section 5.4 of the FreeBSD "
+"Handbook: extref:{handbook}[Using pkgng for Binary Package Management, pkgng-"
+"intro]."
+msgstr ""
+"Para mais informações sobre pacotes, consulte a seção 5.4 do Handbook do "
+"FreeBSD: extref:{handbook}[Usando o pkgng para Gerenciamento de Pacotes "
+"Binários, pkgng-intro]."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:116
+msgid ""
+"The FreeBSD Ports Collection is a framework of [.filename]#Makefiles# and "
+"patches specifically customized for installing applications from source on "
+"FreeBSD. When installing a port, the system will fetch the source code, "
+"apply any required patches, compile the code, and install the application "
+"and any required dependencies."
+msgstr ""
+"A Coleção de Ports do FreeBSD é um conjunto de [.filename]#Makefiles# e "
+"patches específicos para instalar aplicativos a partir do código-fonte no "
+"FreeBSD. Ao instalar um port, o sistema buscará o código-fonte, aplicará os "
+"patches necessários, compilando o código e instalando o aplicativo e "
+"quaisquer dependências necessárias."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:119
+msgid ""
+"The Ports Collection, sometimes referred to as the ports tree, can be "
+"installed to [.filename]#/usr/ports# using link:{handbook}mirrors/"
+"#git[Git]. Detailed instructions for installing the Ports Collection can be "
+"found in extref:{handbook}[section 4.5.1, ports-using-installation-methods] "
+"of the FreeBSD Handbook."
+msgstr ""
+"A Coleção de Ports, às vezes referida como árvore de ports, pode ser "
+"instalada em [.filename]#/usr/ports# usando o link:{handbook}mirrors/"
+"#git[Git]. Instruções detalhadas para a instalação da Coleção de Ports podem "
+"ser encontradas na extref:{handbook}[seção 4.5.1, ports-using-installation-"
+"methods] do Handbook do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:121
+msgid ""
+"To compile a port, change to the port's directory and start the build "
+"process. The following example installs Apache 2.4 from the Ports Collection:"
+msgstr ""
+"Para compilar um port, mude para o diretório do port e inicie o processo de "
+"compilação. O seguinte exemplo instala o Apache 2.4 a partir da Coleção de "
+"Ports:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:126
+#, no-wrap
+msgid ""
+"# cd /usr/ports/www/apache24\n"
+"# make install clean\n"
+msgstr ""
+"# cd /usr/ports/www/apache24\n"
+"# make install clean\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:130
+msgid ""
+"A benefit of using ports to install software is the ability to customize the "
+"installation options. This example specifies that the mod_ldap module "
+"should also be installed:"
+msgstr ""
+"Um benefício de usar o ports para instalar software é a capacidade de "
+"personalizar as opções de instalação. Este exemplo especifica que o módulo "
+"mod_ldap também deve ser instalado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:135
+#, no-wrap
+msgid ""
+"# cd /usr/ports/www/apache24\n"
+"# make WITH_LDAP=\"YES\" install clean\n"
+msgstr ""
+"# cd /usr/ports/www/apache24\n"
+"# make WITH_LDAP=\"YES\" install clean\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:138
+msgid ""
+"Refer to extref:{handbook}[Using the Ports Collection, ports-using] for more "
+"information."
+msgstr ""
+"Para mais informações, consulte extref:{handbook}[Usando a Coleção de Ports, "
+"ports-using] no Handbook do FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:140
+#, no-wrap
+msgid "System Startup"
+msgstr "Inicialização do Sistema"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:147
+msgid ""
+"Many Linux(R) distributions use the SysV init system, whereas FreeBSD uses "
+"the traditional BSD-style man:init[8]. Under the BSD-style man:init[8], "
+"there are no run-levels and [.filename]#/etc/inittab# does not exist. "
+"Instead, startup is controlled by man:rc[8] scripts. At system boot, [."
+"filename]#/etc/rc# reads [.filename]#/etc/rc.conf# and [.filename]#/etc/"
+"defaults/rc.conf# to determine which services are to be started. The "
+"specified services are then started by running the corresponding service "
+"initialization scripts located in [.filename]#/etc/rc.d/# and [.filename]#/"
+"usr/local/etc/rc.d/#. These scripts are similar to the scripts located in [."
+"filename]#/etc/init.d/# on Linux(R) systems."
+msgstr ""
+"Muitas distribuições Linux(R) usam o sistema SysV init, enquanto o FreeBSD "
+"usa o tradicional estilo BSD de man:init[8]. Sob o estilo BSD de man:"
+"init[8], não há run-levels e o arquivo [.filename]#/etc/inittab# não existe. "
+"Em vez disso, a inicialização é controlada pelos scripts man:rc[8]. No boot "
+"do sistema, o arquivo [.filename]#/etc/rc# lê os arquivos [.filename]#/etc/"
+"rc.conf# e [.filename]#/etc/defaults/rc.conf# para determinar quais serviços "
+"devem ser iniciados. Os serviços especificados são então iniciados "
+"executando os scripts de inicialização de serviço correspondentes "
+"localizados em [.filename]#/etc/rc.d/# e [.filename]#/usr/local/etc/rc.d/#. "
+"Esses scripts são semelhantes aos scripts localizados em [.filename]#/etc/"
+"init.d/# nos sistemas Linux(R)."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:150
+msgid ""
+"The scripts found in [.filename]#/etc/rc.d/# are for applications that are "
+"part of the \"base\" system, such as man:cron[8], man:sshd[8], and man:"
+"syslog[3]. The scripts in [.filename]#/usr/local/etc/rc.d/# are for user-"
+"installed applications such as Apache and Squid."
+msgstr ""
+"Os scripts encontrados em [.filename]#/etc/rc.d/# são relacionados aos "
+"aplicativos que fazem parte do sistema \"base\", como man:cron[8], man:"
+"sshd[8] e man:syslog[3]. Os scripts em [.filename]#/usr/local/etc/rc.d/# são "
+"relacionados aos aplicativos instalados pelo usuário, como o Apache e o "
+"Squid."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:155
+msgid ""
+"Since FreeBSD is developed as a complete operating system, user-installed "
+"applications are not considered to be part of the \"base\" system. User-"
+"installed applications are generally installed using extref:{handbook}"
+"[Packages or Ports, ports-using]. In order to keep them separate from the "
+"base system, user-installed applications are installed under [.filename]#/"
+"usr/local/#. Therefore, user-installed binaries reside in [.filename]#/usr/"
+"local/bin/#, configuration files are in [.filename]#/usr/local/etc/#, and so "
+"on."
+msgstr ""
+"Como o FreeBSD é desenvolvido como um sistema operacional completo, os "
+"aplicativos instalados pelo usuário não são considerados parte do sistema "
+"\"base\". Os aplicativos instalados pelo usuário geralmente são instalados "
+"usando extref:{handbook}[Pacotes ou Ports, ports-using]. Para mantê-los "
+"separados do sistema base, os aplicativos instalados pelo usuário são "
+"instalados em [.filename]#/usr/local/#. Portanto, os binários instalados "
+"pelo usuário residem em [.filename]#/usr/local/bin/#, os arquivos de "
+"configuração estão em [.filename]#/usr/local/etc/# e assim por diante."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:160
+msgid ""
+"Services are enabled by adding an entry for the service in [.filename]#/etc/"
+"rc.conf#. The system defaults are found in [.filename]#/etc/defaults/rc."
+"conf# and these default settings are overridden by settings in [.filename]#/"
+"etc/rc.conf#. Refer to man:rc.conf[5] for more information about the "
+"available entries. When installing additional applications, review the "
+"application's install message to determine how to enable any associated "
+"services."
+msgstr ""
+"Os serviços são ativados adicionando uma entrada para o serviço em [."
+"filename]#/etc/rc.conf#. As configurações padrão do sistema são encontradas "
+"no [.filename]#/etc/defaults/rc.conf# e essas configurações padrão são "
+"substituídas por configurações definidas no [.filename]#/etc/rc.conf#. "
+"Consulte man:rc.conf[5] para obter mais informações sobre as entradas "
+"disponíveis. Ao instalar aplicativos adicionais, revise a mensagem de "
+"instalação do aplicativo para determinar como ativar quaisquer serviços "
+"associados."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:162
+msgid ""
+"The following entries in [.filename]#/etc/rc.conf# enable man:sshd[8], "
+"enable Apache 2.4, and specify that Apache should be started with SSL."
+msgstr ""
+"As seguintes entradas em [.filename]#/etc/rc.conf# habilitam o man:sshd[8], "
+"habilitam o Apache 2.4 e especificam que o Apache deve ser iniciado com SSL."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:170
+#, no-wrap
+msgid ""
+"# enable SSHD\n"
+"sshd_enable=\"YES\"\n"
+"# enable Apache with SSL\n"
+"apache24_enable=\"YES\"\n"
+"apache24_flags=\"-DSSL\"\n"
+msgstr ""
+"# enable SSHD\n"
+"sshd_enable=\"YES\"\n"
+"# enable Apache with SSL\n"
+"apache24_enable=\"YES\"\n"
+"apache24_flags=\"-DSSL\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:173
+msgid ""
+"Once a service has been enabled in [.filename]#/etc/rc.conf#, it can be "
+"started without rebooting the system:"
+msgstr ""
+"Depois que um serviço foi habilitado no [.filename]#/etc/rc.conf#, ele pode "
+"ser iniciado sem reiniciar o sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:178
+#, no-wrap
+msgid ""
+"# service sshd start\n"
+"# service apache24 start\n"
+msgstr ""
+"# service sshd start\n"
+"# service apache24 start\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:181
+msgid ""
+"If a service has not been enabled, it can be started from the command line "
+"using `onestart`:"
+msgstr ""
+"Se um serviço não tiver sido habilitado, ele pode ser iniciado a partir da "
+"linha de comando usando o comando `onestart`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:185
+#, no-wrap
+msgid "# service sshd onestart\n"
+msgstr "# service sshd onestart\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:188
+#, no-wrap
+msgid "Network Configuration"
+msgstr "Configuração de Rede"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:192
+msgid ""
+"Instead of a generic _ethX_ identifier that Linux(R) uses to identify a "
+"network interface, FreeBSD uses the driver name followed by a number. The "
+"following output from man:ifconfig[8] shows two Intel(R) Pro 1000 network "
+"interfaces ([.filename]#em0# and [.filename]#em1#):"
+msgstr ""
+"Em vez de um identificador genérico _ethX_ que o Linux(R) usa para "
+"identificar uma interface de rede, o FreeBSD usa o nome do driver seguido "
+"por um número. A saída a seguir do man:ifconfig[8] mostra duas interfaces de "
+"rede Intel(R) Pro 1000 ([.filename]#em0# e [.filename]#em1#):"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:208
+#, no-wrap
+msgid ""
+"% ifconfig\n"
+"em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" options=b<RXCSUM,TXCSUM,VLAN_MTU>\n"
+" inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255\n"
+" ether 00:50:56:a7:70:b2\n"
+" media: Ethernet autoselect (1000baseTX <full-duplex>)\n"
+" status: active\n"
+"em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" options=b<RXCSUM,TXCSUM,VLAN_MTU>\n"
+" inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255\n"
+" ether 00:50:56:a7:03:2b\n"
+" media: Ethernet autoselect (1000baseTX <full-duplex>)\n"
+" status: active\n"
+msgstr ""
+"% ifconfig\n"
+"em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" options=b<RXCSUM,TXCSUM,VLAN_MTU>\n"
+" inet 10.10.10.100 netmask 0xffffff00 broadcast 10.10.10.255\n"
+" ether 00:50:56:a7:70:b2\n"
+" media: Ethernet autoselect (1000baseTX <full-duplex>)\n"
+" status: active\n"
+"em1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500\n"
+" options=b<RXCSUM,TXCSUM,VLAN_MTU>\n"
+" inet 192.168.10.222 netmask 0xffffff00 broadcast 192.168.10.255\n"
+" ether 00:50:56:a7:03:2b\n"
+" media: Ethernet autoselect (1000baseTX <full-duplex>)\n"
+" status: active\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:213
+msgid ""
+"An IP address can be assigned to an interface using man:ifconfig[8]. To "
+"remain persistent across reboots, the IP configuration must be included in [."
+"filename]#/etc/rc.conf#. The following [.filename]#/etc/rc.conf# entries "
+"specify the hostname, IP address, and default gateway:"
+msgstr ""
+"Um endereço IP pode ser atribuído a uma interface usando o comando man:"
+"ifconfig[8]. Para que a configuração de IP permaneça persistente através das "
+"reinicializações, ela deve ser incluída no [.filename]#/etc/rc.conf#. As "
+"seguintes entradas no [.filename]#/etc/rc.conf# especificam o nome do host, "
+"o endereço IP e o gateway padrão:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:219
+#, no-wrap
+msgid ""
+"hostname=\"server1.example.com\"\n"
+"ifconfig_em0=\"inet 10.10.10.100 netmask 255.255.255.0\"\n"
+"defaultrouter=\"10.10.10.1\"\n"
+msgstr ""
+"hostname=\"server1.example.com\"\n"
+"ifconfig_em0=\"inet 10.10.10.100 netmask 255.255.255.0\"\n"
+"defaultrouter=\"10.10.10.1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:222
+msgid "Use the following entries to instead configure an interface for DHCP:"
+msgstr ""
+"Use as seguintes entradas para configurar uma interface para utilizar DHCP:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:227
+#, no-wrap
+msgid ""
+"hostname=\"server1.example.com\"\n"
+"ifconfig_em0=\"DHCP\"\n"
+msgstr ""
+"hostname=\"server1.example.com\"\n"
+"ifconfig_em0=\"DHCP\"\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:230
+#, no-wrap
+msgid "Firewall"
+msgstr "Firewall"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:234
+msgid ""
+"FreeBSD does not use Linux(R) IPTABLES for its firewall. Instead, FreeBSD "
+"offers a choice of three kernel level firewalls:"
+msgstr ""
+"O FreeBSD não usa o IPTABLES do Linux(R) para o seu firewall. Em vez disso, "
+"o FreeBSD oferece uma escolha de três firewalls em nível de kernel:"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:236
+msgid "extref:{handbook}[PF, firewalls-pf]"
+msgstr "extref:{handbook}[PF, firewalls-pf]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:237
+msgid "extref:{handbook}[IPFILTER, firewalls-ipf]"
+msgstr "extref:{handbook}[IPFILTER, firewalls-ipf]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:238
+msgid "extref:{handbook}[IPFW, firewalls-ipfw]"
+msgstr "extref:{handbook}[IPFW, firewalls-ipfw]"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:242
+msgid ""
+"PF is developed by the OpenBSD project and ported to FreeBSD. PF was "
+"created as a replacement for IPFILTER and its syntax is similar to that of "
+"IPFILTER. PF can be paired with man:altq[4] to provide QoS features."
+msgstr ""
+"O PF é desenvolvido pelo projeto OpenBSD e portado para o FreeBSD. O PF foi "
+"criado como um substituto para o IPFILTER e sua sintaxe é semelhante à do "
+"IPFILTER. O PF pode ser combinado com o man:altq[4] para fornecer recursos "
+"de QoS."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:244
+msgid "This sample PF entry allows inbound SSH:"
+msgstr "Este exemplo de regra do PF permite as conexões de entrada do SSH:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:248
+#, no-wrap
+msgid "pass in on $ext_if inet proto tcp from any to ($ext_if) port 22\n"
+msgstr "pass in on $ext_if inet proto tcp from any to ($ext_if) port 22\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:252
+msgid ""
+"IPFILTER is the firewall application developed by Darren Reed. It is not "
+"specific to FreeBSD and has been ported to several operating systems "
+"including NetBSD, OpenBSD, SunOS, HP/UX, and Solaris."
+msgstr ""
+"O IPFILTER é o aplicativo de firewall desenvolvido por Darren Reed. Não é "
+"específico do FreeBSD e foi portado para vários sistemas operacionais, "
+"incluindo NetBSD, OpenBSD, SunOS, HP/UX e Solaris."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:254
+msgid "The IPFILTER syntax to allow inbound SSH is:"
+msgstr ""
+"A sintaxe do IPFILTER para permitir o recebimento de conexões no SSH é a "
+"seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:258
+#, no-wrap
+msgid "pass in on $ext_if proto tcp from any to any port = 22\n"
+msgstr "pass in on $ext_if proto tcp from any to any port = 22\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:262
+msgid ""
+"IPFW is the firewall developed and maintained by FreeBSD. It can be paired "
+"with man:dummynet[4] to provide traffic shaping capabilities and simulate "
+"different types of network connections."
+msgstr ""
+"O IPFW é o firewall desenvolvido e mantido pelo FreeBSD. Ele pode ser "
+"combinado com o man:dummynet[4] para fornecer recursos de controle de "
+"tráfego e simular diferentes tipos de conexões de rede."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:264
+msgid "The IPFW syntax to allow inbound SSH would be:"
+msgstr ""
+"A sintaxe do IPFW para permitir a entrada de conexões SSH é a seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:268
+#, no-wrap
+msgid "ipfw add allow tcp from any to me 22 in via $ext_if\n"
+msgstr "ipfw add allow tcp from any to me 22 in via $ext_if\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:271
+#, no-wrap
+msgid "Updating FreeBSD"
+msgstr "Atualizando o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:274
+msgid ""
+"There are two methods for updating a FreeBSD system: from source or binary "
+"updates."
+msgstr ""
+"Existem dois métodos para atualizar um sistema FreeBSD: a partir do código-"
+"fonte ou a partir de atualizações binárias."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:278
+msgid ""
+"Updating from source is the most involved update method, but offers the "
+"greatest amount of flexibility. The process involves synchronizing a local "
+"copy of the FreeBSD source code with the FreeBSD Git repository. Once the "
+"local source code is up-to-date, a new version of the kernel and userland "
+"can be compiled."
+msgstr ""
+"Atualizar a partir do código-fonte é o método de atualização mais complexo, "
+"mas oferece a maior flexibilidade. O processo envolve sincronizar uma cópia "
+"local do código-fonte do FreeBSD com o repositório Git do FreeBSD. Assim que "
+"o código-fonte local estiver atualizado, uma nova versão do kernel e do "
+"userland pode ser compilada."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:282
+msgid ""
+"Binary updates are similar to using `yum` or `apt-get` to update a Linux(R) "
+"system. In FreeBSD, man:freebsd-update[8] can be used fetch new binary "
+"updates and install them. These updates can be scheduled using man:cron[8]."
+msgstr ""
+"As atualizações binárias são semelhantes ao uso do `yum` ou do `apt-get` "
+"para atualizar um sistema Linux(R). No FreeBSD, o man:freebsd-update[8] pode "
+"ser usado para buscar novas atualizações binárias e instalá-las. Essas "
+"atualizações podem ser agendadas usando o man:cron[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-users/_index.adoc:286
+msgid ""
+"When using man:cron[8] to schedule updates, use `freebsd-update cron` in the "
+"man:crontab[1] to reduce the possibility of a large number of machines all "
+"pulling updates at the same time:"
+msgstr ""
+"Ao usar o man:cron[8] para agendar atualizações, use o `freebsd-update cron` "
+"no man:crontab[1] para reduzir a possibilidade de que um grande número de "
+"máquinas busque atualizações ao mesmo tempo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:290
+#, no-wrap
+msgid "0 3 * * * root /usr/sbin/freebsd-update cron\n"
+msgstr "0 3 * * * root /usr/sbin/freebsd-update cron\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-users/_index.adoc:295
+msgid ""
+"For more information on source and binary updates, refer to extref:{handbook}"
+"[the chapter on updating, updating-upgrading-freebsdupdate] in the FreeBSD "
+"Handbook."
+msgstr ""
+"Para obter mais informações sobre as atualizações a partir do código-fonte e "
+"a partir de binários, consulte o extref:{handbook}[capítulo sobre "
+"atualizações, updating-upgrading-freebsdupdate] do Handbook do FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:297
+#, no-wrap
+msgid "procfs: Gone But Not Forgotten"
+msgstr "procfs: desaparecido, mas não esquecido"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-users/_index.adoc:301
+msgid ""
+"In some Linux(R) distributions, one could look at [.filename]#/proc/sys/net/"
+"ipv4/ip_forward# to determine if IP forwarding is enabled. In FreeBSD, man:"
+"sysctl[8] is instead used to view this and other system settings."
+msgstr ""
+"Em algumas distribuições Linux(R), é possível verificar se o encaminhamento "
+"de IP está habilitado verificando o arquivo [.filename]#/proc/sys/net/ipv4/"
+"ip_forward#. No FreeBSD, o comando man:sysctl[8] é utilizado para visualizar "
+"essa e outras configurações do sistema."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/linux-users/_index.adoc:303
+msgid ""
+"For example, use the following to determine if IP forwarding is enabled on a "
+"FreeBSD system:"
+msgstr ""
+"Por exemplo, use o seguinte comando para verificar se o encaminhamento de IP "
+"está habilitado em um sistema FreeBSD:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:308
+#, no-wrap
+msgid ""
+"% sysctl net.inet.ip.forwarding\n"
+"net.inet.ip.forwarding: 0\n"
+msgstr ""
+"% sysctl net.inet.ip.forwarding\n"
+"net.inet.ip.forwarding: 0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:311
+msgid "Use `-a` to list all the system settings:"
+msgstr "Use a opção `-a` para listar todas as configurações do sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:315
+#, no-wrap
+msgid "% sysctl -a | more\n"
+msgstr "% sysctl -a | more\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:318
+msgid ""
+"If an application requires procfs, add the following entry to [.filename]#/"
+"etc/fstab#:"
+msgstr ""
+"Se um aplicativo requer o uso do procfs, adicione a seguinte entrada ao "
+"arquivo [.filename]#/etc/fstab#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:322
+#, no-wrap
+msgid "proc /proc procfs rw,noauto 0 0\n"
+msgstr "proc /proc procfs rw,noauto 0 0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:325
+msgid ""
+"Including `noauto` will prevent [.filename]#/proc# from being automatically "
+"mounted at boot."
+msgstr ""
+"Incluir o parâmetro `noauto` faz com que o diretório [.filename]#/proc# não "
+"seja montado automaticamente durante a inicialização do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:327
+msgid "To mount the file system without rebooting:"
+msgstr "Para montar o sistema de arquivos sem reiniciar o sistema:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/linux-users/_index.adoc:331
+#, no-wrap
+msgid "# mount /proc\n"
+msgstr "# mount /proc\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:334
+#, no-wrap
+msgid "Common Commands"
+msgstr "Comandos Comuns"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:337
+msgid "Some common command equivalents are as follows:"
+msgstr "Alguns comandos comuns e equivalentes são os seguintes:"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:342
+#, no-wrap
+msgid "Linux(R) command (Red Hat/Debian)"
+msgstr "Comando Linux(R) (Red Hat/Debian)"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:343
+#, no-wrap
+msgid "FreeBSD equivalent"
+msgstr "Equivalente FreeBSD"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:345
+#, no-wrap
+msgid "Purpose"
+msgstr "Propósito"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:346
+#, no-wrap
+msgid "`yum install _package_` / `apt-get install _package_`"
+msgstr "`yum install _package_` / `apt-get install _package_`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:347
+#, no-wrap
+msgid "`pkg install _package_`"
+msgstr "`pkg install _package_`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:349
+#, no-wrap
+msgid "Install package from remote repository"
+msgstr "Instala um pacote a partir de um repositório remoto"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:350
+#, no-wrap
+msgid "`rpm -ivh _package_` / `dpkg -i _package_`"
+msgstr "`rpm -ivh _package_` / `dpkg -i _package_`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:351
+#, no-wrap
+msgid "`pkg add _package_`"
+msgstr "`pkg add _package_`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:353
+#, no-wrap
+msgid "Install local package"
+msgstr "Instala um pacote local"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:354
+#, no-wrap
+msgid "`rpm -qa` / `dpkg -l`"
+msgstr "`rpm -qa` / `dpkg -l`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:355
+#, no-wrap
+msgid "`pkg info`"
+msgstr "`pkg info`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:357
+#, no-wrap
+msgid "List installed packages"
+msgstr "Lista os pacotes instalados"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:358
+#, no-wrap
+msgid "`lspci`"
+msgstr "`lspci`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:359
+#, no-wrap
+msgid "`pciconf`"
+msgstr "`pciconf`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:361
+#, no-wrap
+msgid "List PCI devices"
+msgstr "Lista os dispositivos PCI"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:362
+#, no-wrap
+msgid "`lsmod`"
+msgstr "`lsmod`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:363
+#, no-wrap
+msgid "`kldstat`"
+msgstr "`kldstat`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:365
+#, no-wrap
+msgid "List loaded kernel modules"
+msgstr "Lista os módulos do kernel carregados"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:366
+#, no-wrap
+msgid "`modprobe`"
+msgstr "`modprobe`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:367
+#, no-wrap
+msgid "`kldload` / `kldunload`"
+msgstr "`kldload` / `kldunload`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:369
+#, no-wrap
+msgid "Load/Unload kernel modules"
+msgstr "Carrega / Descarrega módulos do kernel"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:370
+#, no-wrap
+msgid "`strace`"
+msgstr "`strace`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:371
+#, no-wrap
+msgid "`truss`"
+msgstr "`truss`"
+
+#. type: Table
+#: documentation/content/en/articles/linux-users/_index.adoc:372
+#, no-wrap
+msgid "Trace system calls"
+msgstr "Rastrea as chamadas de sistema"
+
+#. type: Title ==
+#: documentation/content/en/articles/linux-users/_index.adoc:375
+#, no-wrap
+msgid "Conclusion"
+msgstr "Conclusão"
+
+#. type: Plain text
+#: documentation/content/en/articles/linux-users/_index.adoc:378
+msgid ""
+"This document has provided an overview of FreeBSD. Refer to the extref:"
+"{handbook}[FreeBSD Handbook] for more in-depth coverage of these topics as "
+"well as the many topics not covered by this document."
+msgstr ""
+"Este documento forneceu uma visão geral do FreeBSD. Consulte o extref:"
+"{handbook}[Handbook do FreeBSD] para obter uma cobertura mais detalhada "
+"desses tópicos, bem como de muitos outros tópicos não abordados por este "
+"documento."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/mailing-list-faq/_index.adoc b/documentation/content/pt-br/articles/mailing-list-faq/_index.adoc
index 9afc8f3a37..ef465efa37 100644
--- a/documentation/content/pt-br/articles/mailing-list-faq/_index.adoc
+++ b/documentation/content/pt-br/articles/mailing-list-faq/_index.adoc
@@ -1,10 +1,11 @@
---
-title: Perguntas Frequentes Sobre as Listas de Discussão do FreeBSD
authors:
- - author: Projeto de Documentação do FreeBSD
-copyright: 2004-2005 Projeto de Documentação do FreeBSD
-releaseinfo: "$FreeBSD$"
-trademarks: []
+ -
+ author: 'The FreeBSD Documentation Project'
+copyright: '2004-2021 The FreeBSD Documentation Project'
+description: 'Saiba como usar melhor as listas de discussão, por exemplo, como ajudar a evitar discussões repetidas com frequência'
+tags: ["FAQ", "Mailing Lists", "FreeBSD"]
+title: 'Perguntas Frequentes Sobre as Listas de Discussão do FreeBSD'
---
= Perguntas Frequentes Sobre as Listas de Discussão do FreeBSD
@@ -16,20 +17,32 @@ trademarks: []
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/mailing-list-faq/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Esta é a FAQ para as listas de discussão do FreeBSD. Se você está interessado em ajudar este projeto, envie um email para a http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[lista de discussão do projeto de documentação do FreeBSD]. A última versão deste documento está sempre disponível no link:.[Servidor Web do Projeto FreeBSD]. Ele também poderá ser obtido como um grande e único arquivo link:.[HTML] por meio de HTTP ou como texto puro, PostScript, PDF, etc. a partir do https://download.freebsd.org/ftp/doc/[Servidor FTP do FreeBSD]. Você também poderá querer https://www.FreeBSD.org/search/[Pesquisar na FAQ].
+Esta é a FAQ para as listas de discussão do FreeBSD. Se você está interessado em ajudar este projeto, envie um email para a {freebsd-doc}. A última versão deste documento está sempre disponível no link:.[Servidor Web do Projeto FreeBSD]. Ele também poderá ser obtido como um grande e único arquivo link:.[HTML] por meio de HTTP ou como texto puro, PostScript, PDF, etc. a partir do https://download.freebsd.org/doc/[Servidor FTP do FreeBSD]. Você também poderá querer link:https://www.FreeBSD.org/search/[Pesquisar na FAQ].
'''
@@ -40,7 +53,7 @@ toc::[]
Como é comum com as FAQs, este documento objetiva cobrir as perguntas feitas com mais frequência a respeito das listas de discussão do FreeBSD (e claro responde-las!). Embora originalmente intencionada a reduzir o tráfego e evitar que as mesmas velhas perguntas fossem enviadas várias e várias vezes, as FAQs se tornaram reconhecidamente uma fonte de informações valiosas.
-Este documento tenta representar um consenso da comunidade, e como tal nunca poderá realmente ser __oficial__. Entretanto, se você encontrar erros técnicos neste documento, ou se tiver sugestões sobre itens que devam ser adicionados, por favor submeta um PR, ou envie um email para a http://lists.FreeBSD.org/mailman/listinfo/freebsd-doc[lista de discussão de documentação do projeto FreeBSD]. Obrigado.
+Este documento tenta representar um consenso da comunidade, e como tal nunca poderá realmente ser __oficial__. Entretanto, se você encontrar erros técnicos neste documento, ou se tiver sugestões sobre itens que devam ser adicionados, por favor submeta um PR, ou envie um email para a {freebsd-doc}. Obrigado.
=== Qual é o propósito das listas de discussão do FreeBSD?
@@ -48,7 +61,9 @@ As listas de discussão do FreeBSD servem como um canal primário de comunicaç
=== Quem é o publico das listas de discussão do FreeBSD?
-Isto depende da premissa de cada lista. Algumas listas são mais orientadas a desenvolvedores; outras para a comunidade FreeBSD como um todo. Por favor veja http://lists.FreeBSD.org/mailman/listinfo[esta lista] para o resumo atual.
+Isto depende da premissa de cada lista. Algumas listas são mais orientadas a desenvolvedores; outras para a comunidade FreeBSD como um todo. Por favor veja link:https://lists.FreeBSD.org/[esta lista] para o resumo atual.
+
+As listas estão em Inglês, salvo indicação em contrário.
=== As listas de discussão do FreeBSD são abertas para a participação de qualquer pessoa?
@@ -60,7 +75,7 @@ Note também que as listas de discussão tradicionalmente tem estado abertas par
=== Como posso me inscrever?
-Você pode usar http://lists.FreeBSD.org/mailman/listinfo[a interface web do Mailman] para se inscrever em qualquer uma das listas públicas.
+Você pode usar a link:https://lists.FreeBSD.org/[interface web do Mlmmj] para se inscrever em qualquer uma das listas públicas.
=== Como cancelo minha inscrição?
@@ -70,11 +85,11 @@ Por favor não envie mensagens de cancelamento de inscrição diretamente para a
=== O histórico da listas está disponível?
-Sim. Os históricos das mensagens, agrupadas por tópicos de conversa, estão disponíveis http://docs.FreeBSD.org/mail/[aqui].
+Sim. Os históricos das mensagens, agrupadas por tópicos de conversa, estão disponíveis link:https://docs.FreeBSD.org/mail/[aqui]. Você também pode acessar o https://lists.freebsd.org/pipermail[arquivo mailman] e o link:https://lists.freebsd.org/archives[arquivo mlmmj] diretamente.
=== As listas de discussão estão disponíveis em um formato sumarizado (digest)?
-Sim. Veja a http://lists.FreeBSD.org/mailman/listinfo[interface web do Mailman].
+Sim. Veja a link:https://lists.FreeBSD.org/[interface web do Mlmmj].
[[etiquette]]
== Etiqueta em Listas de Discussão
@@ -83,7 +98,7 @@ A participação em listas de discussão, assim como a participação em qualque
=== O que devo fazer antes de postar?
-Você já deu o passo mais importante ao ler este documento. Entretanto, se você é novo no FreeBSD, você primeiro precisa se familiarizar com o software, e a história social que o envolve lendo os numerosos https://www.FreeBSD.org/docs/books/[livros e artigos] que estão disponíveis. Itens de interesse particular incluem o documento link:{faq}[Perguntas Frequentes do FreeBSD (FAQ)], o link:{handbook}[Handbook do FreeBSD], e os artigos link:{freebsd-questions-article}[Como obter melhores resultados na lista de discussão FreeBSD-questions], link:{explaining-bsd}[Explicando o BSD], e link:{new-users}[Primeiros passos no FreeBSD].
+Você já deu o passo mais importante ao ler este documento. Entretanto, se você é novo no FreeBSD, você primeiro precisa se familiarizar com o software, e a história social que o envolve lendo os numerosos link:https://www.FreeBSD.org/docs/books/[livros e artigos] que estão disponíveis. Itens de interesse particular incluem o documento extref:{faq}[Perguntas Frequentes do FreeBSD (FAQ)], o extref:{handbook}[Handbook do FreeBSD], e os artigos extref:{freebsd-questions-article}[Como obter melhores resultados na lista de discussão FreeBSD-questions], extref:{explaining-bsd}[Explicando o BSD], e extref:{new-users}[Primeiros passos no FreeBSD].
É sempre considerado errado fazer uma pergunta que já foi respondida nos documentos acima. Isto não é porque os voluntários que trabalham neste projeto são pessoas particularmente más, mas depois de um certo número de vezes respondendo às mesmas perguntas repetidas vezes, a frustração começa a surgir. Isto é particularmente verdadeiro se houver uma resposta existente para uma pergunta que já está disponível. Tenha sempre em mente que quase todo o trabalho feito no FreeBSD é feito por voluntários, e que somos apenas humanos.
@@ -98,32 +113,31 @@ Você já deu o passo mais importante ao ler este documento. Entretanto, se voc
* Por favor, use quebra de linha automática em 75 caracteres, pois nem todo mundo usa clientes de email em uma interface gráfica.
* Por favor, respeite o fato de que a largura de banda não é infinita. Nem todo mundo lê e-mails através de conexões de alta velocidade, então se sua postagem envolve algo como o conteúdo de um arquivo como o [.filename]#config.log# ou um extenso stack trace, por favor considere colocar essas informações em algum lugar e apenas fornecer uma URL para eles. Lembre-se, também, de que essas postagens serão arquivadas indefinidamente, de modo que postagens enormes simplesmente aumentarão o tamanho dos arquivos muito depois que o propósito deles tiver expirado.
* Formate a sua mensagem para que fique legível e, POR FAVOR, NÃO GRITE !!!!! Não subestime o efeito que uma mensagem de correio mal formatada tem, e não apenas nas listas de discussão do FreeBSD. Sua mensagem de e-mail é tudo o que as pessoas veem de você e, se estiver mal formatada, mal grafada, cheia de erros ou tiver muitos pontos de exclamação, isso dará às pessoas uma má impressão de você.
-* Por favor, use uma linguagem humana apropriada para uma lista de discussão específica. Muitas listas de discussão que não utilizam o idioma inglês estão https://www.FreeBSD.org/community/mailinglists/[disponíveis].
-+
+* Por favor, use uma linguagem humana apropriada para uma lista de discussão específica. Muitas listas de discussão que não utilizam o idioma inglês estão link:https://www.FreeBSD.org/community/mailinglists/[disponíveis].
++
Para os que não são, nós apreciamos que muitas pessoas não falam inglês como sua primeira língua, e tentamos fazer concessões para isso. Considera-se uma forma particularmente pobre criticar falantes não nativos por erros ortográficos ou gramaticais. O FreeBSD tem um excelente histórico neste aspecto; por favor, ajude-nos a manter essa tradição.
* Por favor, use um Mail User Agent (MUA) compatível com os padrões. Muitas mensagens mal formatadas vêm de http://www.lemis.com/grog/email/email.php[clientes de email ruins ou mal-configurados]. Os seguintes clientes de email são conhecidos por enviar mensagens mal formatadas sem que você saiba sobre elas:
** exmh
** Microsoft(R) Exchange
** Microsoft(R) Outlook(R)
-
-+
-Tente não usar MIME: muitas pessoas usam clientes de email que não se dão muito bem com MIME.
++
+Tente não usar MIME: muitas pessoas usam clientes de e-mail que não lidam bem com MIME.
* Verifique se o seu horário e fuso horário estão definidos corretamente. Isso pode parecer um pouco bobo, já que sua mensagem ainda chegará na lista, mas muitas das pessoas nestas listas recebem centenas de mensagens por dia. Eles frequentemente classificam as mensagens recebidas por assunto e por data, e se sua mensagem não vier antes da primeira resposta, eles podem assumir que eles perderam a mensagem e não se darão ao trabalho de procurar.
* Muitas das informações que você precisará fornecer referem-se a saída de programas, como man:dmesg[8], ou mensagens do console, que geralmente aparecem no [.filename]#/var/log/messages#. Não tente copiar essa informação digitando-a novamente; Isso será não só um sofrimento real, mas você é provavelmente irá cometer um erro. Para enviar o conteúdo do arquivo de log, faça uma cópia do arquivo e use um editor para reduzi-lo às informações relevantes ou copie e cole na sua mensagem. Para a saída de programas como `dmesg`, redirecione a saída para um arquivo e inclua-o. Por exemplo,
+
-[source,shell]
+[source, shell]
....
% dmesg > /tmp/dmesg.out
....
-+
-Isso redireciona as informações para o arquivo [.filename]#/tmp/dmesg.out#.
-* Ao usar o recurso de copiar e colar, lembre-se de que algumas dessas operações manipulam incorretamente suas mensagens. Isto é particularmente preocupante ao postar conteúdo de [.filename]#Makefiles#, onde o `tab` é um caractere significativo. Este é um problema muito comum, e muito chato, com envios para o https://www.FreeBSD.org/support/[banco de dados de Relatórios de Problemas]. Arquivos [.filename]#Makefiles# com tabs alterados para espaços, ou a chata sequência de escape `=3B`, cria um grande agravamento para os committers.
++
+Isto redireciona a informação para o arquivo [.filename]#/tmp/dmesg.out#.
+* Ao usar o recurso de copiar e colar, lembre-se de que algumas dessas operações manipulam incorretamente suas mensagens. Isto é particularmente preocupante ao postar conteúdo de [.filename]#Makefiles#, onde o `tab` é um caractere significativo. Este é um problema muito comum, e muito chato, com envios para o link:https://www.FreeBSD.org/support/[banco de dados de Relatórios de Problemas]. Arquivos [.filename]#Makefiles# com tabs alterados para espaços, ou a chata sequência de escape `=3B`, cria um grande problema para os committers.
=== Qual é a consideração de etiqueta especial ao responder a uma postagem existente nas listas de discussão?
* Por favor, inclua o texto relevante da mensagem original. Reduza-a ao mínimo, mas não exagere. Ela deverá permitir que alguém que não leu a mensagem original entenda do que você está falando.
-+
++
Isso é especialmente importante para postagens do tipo "sim, também vejo isso", em que a postagem inicial era de dezenas ou centenas de linhas.
* Use alguma técnica para identificar qual texto veio da mensagem original e qual texto você adicionou. Uma convenção comum é prefixar com "`>`" a mensagem original. Deixando espaço em branco após o "`>`" e deixando linhas vazias entre o seu texto e o texto original, ambos tornam o resultado mais legível.
* Por favor, certifique-se de que as atribuições do texto que você está citando estão corretas. As pessoas podem ficar ofendidas se você atribuir palavras a elas que elas mesmas não escreveram.
@@ -131,7 +145,7 @@ Isso é especialmente importante para postagens do tipo "sim, também vejo isso"
+
** R: Porque inverte o fluxo lógico da conversa.
** P: Por que a publicação superior é desaprovada?
-+
++
(Obrigado Randy Bush pela piada.)
[[recurring]]
@@ -139,7 +153,7 @@ Isso é especialmente importante para postagens do tipo "sim, também vejo isso"
A participação nas listas de discussão, como a participação em qualquer comunidade, requer uma base comum para comunicação. Muitas das listas de discussão pressupõem um conhecimento da história do Projeto. Em particular, há certos tópicos que parecem ocorrer regularmente aos recém-chegados à comunidade. É da responsabilidade de cada usuário garantir que suas mensagens não se enquadrem em uma dessas categorias. Ao fazer isso, você ajudará as listas de discussão a permanecerem no tópico e, provavelmente, e provavelmente se salve de ser queimado no processo.
-O melhor método para evitar isso é familiarizar-se com os http://docs.FreeBSD.org/mail/[arquivos da lista de discussão], para ajudar você a entender o histórico do que aconteceu antes. E para isso, a https://www.FreeBSD.org/search/#mailinglists[interface de pesquisa das listas de discussões ] é inestimável. (Se esse método não produzir resultados úteis, por favor, complemente-o com uma pesquisa no seu mecanismo de busca favorito).
+O melhor método para evitar isso é familiarizar-se com os http://docs.FreeBSD.org/mail/[arquivos da lista de discussão], para ajudar você a entender o histórico do que aconteceu antes. E para isso, a https://www.FreeBSD.org/search/#mailinglists[interface de pesquisa das listas de discussões] é inestimável. (Se esse método não produzir resultados úteis, por favor, complemente-o com uma pesquisa no seu mecanismo de busca favorito).
Ao se familiarizar com os arquivos, você não apenas aprenderá os tópicos que foram discutidos anteriormente, mas também como a discussão tende a prosseguir nessa lista, quem são os participantes e quem é o público-alvo. Estas são sempre boas coisas para saber antes de postar em qualquer lista de discussão, não apenas em uma lista de discussão do FreeBSD.
@@ -148,17 +162,17 @@ Não há dúvida de que os arquivos são bastante extensos e algumas questões r
[[bikeshed]]
== O que é um "Bikeshed" (Garagem de bicicletas)?
-Literalmente, uma `Bikeshed` é um pequeno abrigo ao ar livre no qual se pode armazenar o meio de transporte de duas rodas. No entanto, no jargão do FreeBSD, o termo refere-se a tópicos que são simples o suficiente para que (quase) qualquer um possa opinar sobre ele, e geralmente (quase) todos o fazem. A gênese desse termo é explicada com mais detalhes link:{faq}#bikeshed-painting[neste documento]. Você simplesmente deve ter um conhecimento prático deste conceito antes de postar em qualquer lista de discussão do FreeBSD.
+Literalmente, uma `bikeshed` é um pequeno abrigo ao ar livre no qual se pode armazenar o meio de transporte de duas rodas. No entanto, no jargão do FreeBSD, o termo refere-se a tópicos que são simples o suficiente para que (quase) qualquer um possa opinar sobre ele, e geralmente (quase) todos o fazem. A gênese desse termo é explicada com mais detalhes extref:{faq}[neste documento]. Você simplesmente deve ter um conhecimento prático deste conceito antes de postar em qualquer lista de discussão do FreeBSD.
Mais genericamente, um Bikeshed é um tópico que tenderá a gerar Meta-discussões imediatas e interações hostis com usuários você ainda nem conhece.
-Por favor, ajude-nos a manter as listas de discussão úteis para o maior numero possível de pessoas evitando Bikesheds sempre que puder. Obrigado.
+Por favor, ajude-nos a manter as listas de discussão úteis para o maior numero possível de pessoas evitando bikesheds sempre que puder. Obrigado.
[[acknowledgments]]
== Agradecimentos
-Greg Lehey mailto:grog@FreeBSD.org[grog@FreeBSD.org]::
-Autor original da maior parte do material sobre etiqueta nas listas de discussão, retirada do artigo sobre link:{freebsd-questions-article}[Como para obter os melhores resultados da lista de discussão FreeBSD-questions].
+`{grog}`::
+Autor original da maior parte do material sobre etiqueta nas listas de discussão, retirada do artigo sobre extref:{freebsd-questions-article}[Como para obter os melhores resultados da lista de discussão FreeBSD-questions].
-Mark Linimon mailto:linimon@FreeBSD.org[linimon@FreeBSD.org]::
+`{linimon}`::
Pela criação do rascunho deste FAQ.
diff --git a/documentation/content/pt-br/articles/mailing-list-faq/_index.po b/documentation/content/pt-br/articles/mailing-list-faq/_index.po
new file mode 100644
index 0000000000..94734cecf3
--- /dev/null
+++ b/documentation/content/pt-br/articles/mailing-list-faq/_index.po
@@ -0,0 +1,778 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-07-15 16:42-0300\n"
+"PO-Revision-Date: 2023-09-10 13:35+0000\n"
+"Last-Translator: \"Danilo G. Baio\" <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesmailing-list-faq_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:1
+#, no-wrap
+msgid "How to best use the mailing lists, such as how to help avoid frequently-repeated discussions"
+msgstr "Saiba como usar melhor as listas de discussão, por exemplo, como ajudar a evitar discussões repetidas com frequência"
+
+#. type: Title =
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:1
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:10
+#, no-wrap
+msgid "Frequently Asked Questions About The FreeBSD Mailing Lists"
+msgstr "Perguntas Frequentes Sobre as Listas de Discussão do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:43
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:49
+msgid ""
+"This is the FAQ for the FreeBSD mailing lists. If you are interested in "
+"helping with this project, send email to the {freebsd-doc}. The latest "
+"version of this document is always available from the link:.[FreeBSD World "
+"Wide Web server]. It may also be downloaded as one large link:.[HTML] file "
+"with HTTP or as plain text, PostScript, PDF, etc. from the https://download."
+"freebsd.org/doc/[FreeBSD FTP server]. You may also want to link:https://www."
+"FreeBSD.org/search/[Search the FAQ]."
+msgstr ""
+"Esta é a FAQ para as listas de discussão do FreeBSD. Se você está "
+"interessado em ajudar este projeto, envie um email para a {freebsd-doc}. A "
+"última versão deste documento está sempre disponível no link:.[Servidor Web "
+"do Projeto FreeBSD]. Ele também poderá ser obtido como um grande e único "
+"arquivo link:.[HTML] por meio de HTTP ou como texto puro, PostScript, PDF, "
+"etc. a partir do https://download.freebsd.org/doc/[Servidor FTP do FreeBSD]. "
+"Você também poderá querer link:https://www.FreeBSD.org/search/[Pesquisar na "
+"FAQ]."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:51
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:55
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:59
+msgid ""
+"As is usual with FAQs, this document aims to cover the most frequently asked "
+"questions concerning the FreeBSD mailing lists (and of course answer "
+"them!). Although originally intended to reduce bandwidth and avoid the same "
+"old questions being asked over and over again, FAQs have become recognized "
+"as valuable information resources."
+msgstr ""
+"Como é comum com as FAQs, este documento objetiva cobrir as perguntas feitas "
+"com mais frequência a respeito das listas de discussão do FreeBSD (e claro "
+"responde-las!). Embora originalmente intencionada a reduzir o tráfego e "
+"evitar que as mesmas velhas perguntas fossem enviadas várias e várias vezes, "
+"as FAQs se tornaram reconhecidamente uma fonte de informações valiosas."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:63
+msgid ""
+"This document attempts to represent a community consensus, and as such it "
+"can never really be __authoritative__. However, if you find technical "
+"errors within this document, or have suggestions about items that should be "
+"added, please either submit a PR, or email the {freebsd-doc}. Thanks."
+msgstr ""
+"Este documento tenta representar um consenso da comunidade, e como tal nunca "
+"poderá realmente ser __oficial__. Entretanto, se você encontrar erros "
+"técnicos neste documento, ou se tiver sugestões sobre itens que devam ser "
+"adicionados, por favor submeta um PR, ou envie um email para a {freebsd-"
+"doc}. Obrigado."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:64
+#, no-wrap
+msgid "What is the purpose of the FreeBSD mailing lists?"
+msgstr "Qual é o propósito das listas de discussão do FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:67
+msgid ""
+"The FreeBSD mailing lists serve as the primary communication channels for "
+"the FreeBSD community, covering many different topic areas and communities "
+"of interest."
+msgstr ""
+"As listas de discussão do FreeBSD servem como um canal primário de "
+"comunicação para a comunidade FreeBSD, cobrindo muitos tópicos diferentes e "
+"áreas de interesse da comunidade."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:68
+#, no-wrap
+msgid "Who is the audience for the FreeBSD mailing lists?"
+msgstr "Quem é o publico das listas de discussão do FreeBSD?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:73
+msgid ""
+"This depends on charter of each individual list. Some lists are more "
+"oriented to developers; some are more oriented towards the FreeBSD community "
+"as a whole. Please see link:https://lists.FreeBSD.org/[this list] for the "
+"current summary."
+msgstr ""
+"Isto depende da premissa de cada lista. Algumas listas são mais orientadas a "
+"desenvolvedores; outras para a comunidade FreeBSD como um todo. Por favor "
+"veja link:https://lists.FreeBSD.org/[esta lista] para o resumo atual."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:75
+msgid "Lists are English language, unless stated otherwise."
+msgstr "As listas estão em Inglês, salvo indicação em contrário."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:76
+#, no-wrap
+msgid "Are the FreeBSD mailing lists open for anyone to participate?"
+msgstr "As listas de discussão do FreeBSD são abertas para a participação de qualquer pessoa?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:81
+msgid ""
+"Again, this depends on charter of each individual list. Please read the "
+"charter of a mailing list before you post to it, and respect it when you "
+"post. This will help everyone to have a better experience with the lists."
+msgstr ""
+"Novamente, isto dependerá das regras de cada lista. Por favor leia o "
+"objetivo da lista antes de postar, e respeite estes objetivos quando você "
+"postar. Isto ajudará a todos os participantes a terem uma experiência melhor "
+"com as listas."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:83
+msgid ""
+"If after reading the above lists, you still do not know which mailing list "
+"to post a question to, you will probably want to post to freebsd-questions "
+"(but see below, first)."
+msgstr ""
+"Se após ler as listas acima você ainda não souber para qual delas enviar a "
+"sua pergunta, provavelmente você deverá postar na lista freebsd-questions "
+"(mas antes, veja abaixo)."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:87
+msgid ""
+"Also note that the mailing lists have traditionally been open to postings "
+"from non-subscribers. This has been a deliberate choice, to help make "
+"joining the FreeBSD community an easier process, and to encourage open "
+"sharing of ideas. However, due to past abuse by some individuals, certain "
+"lists now have a policy where postings from non-subscribers must be manually "
+"screened to ensure that they are appropriate."
+msgstr ""
+"Note também que as listas de discussão tradicionalmente tem estado abertas "
+"para postagens de não assinantes. Isto foi uma escolha deliberada, para "
+"fazer com o engajamento na comunidade FreeBSD seja um processo mais simples, "
+"e para encorajar o compartilhamento aberto de ideias. Entretanto, devido ao "
+"abuso de alguns indivíduos, algumas listas possuem agora políticas em os "
+"posts de não assinantes devem ser aprovados manualmente para ter certeza de "
+"que são apropriados."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:88
+#, no-wrap
+msgid "How can I subscribe?"
+msgstr "Como posso me inscrever?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:91
+msgid ""
+"You can use link:https://lists.FreeBSD.org/[the Mlmmj web interface] to "
+"subscribe to any of the public lists."
+msgstr ""
+"Você pode usar a link:https://lists.FreeBSD.org/[interface web do Mlmmj] "
+"para se inscrever em qualquer uma das listas públicas."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:92
+#, no-wrap
+msgid "How can I unsubscribe?"
+msgstr "Como cancelo minha inscrição?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:95
+msgid ""
+"You can use the same interface as above; or, you can follow the instructions "
+"that are at the bottom of every mailing list message that is sent."
+msgstr ""
+"Você pode usar a mesma interface acima; ou, você pode seguir as instruções "
+"no rodapé de cada mensagem enviada pela lista."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:99
+msgid ""
+"Please do not send unsubscribe messages directly to the public lists "
+"themselves. First, this will not accomplish your goal, and second, it will "
+"irritate the existing subscribers, and you will probably get flamed. This "
+"is a classical mistake when using mailing lists; please try to avoid it."
+msgstr ""
+"Por favor não envie mensagens de cancelamento de inscrição diretamente para "
+"as listas públicas. Primeiro, você não alcançará seu objetivo, e segundo, "
+"você irritará os outros assinantes da lista, e provavelmente você será "
+"retaliado. Este é um erro clássico ao usar as listas de discussão; por favor "
+"tente evitar isso."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:100
+#, no-wrap
+msgid "Are archives available?"
+msgstr "O histórico da listas está disponível?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:104
+msgid ""
+"Yes. Threaded archives are available link:https://docs.FreeBSD.org/mail/"
+"[here]. You can also access https://lists.freebsd.org/pipermail[mailman "
+"archive] and link:https://lists.freebsd.org/archives[mlmmj archive] directly."
+msgstr ""
+"Sim. Os históricos das mensagens, agrupadas por tópicos de conversa, estão "
+"disponíveis link:https://docs.FreeBSD.org/mail/[aqui]. Você também pode "
+"acessar o https://lists.freebsd.org/pipermail[arquivo mailman] e o link:"
+"https://lists.freebsd.org/archives[arquivo mlmmj] diretamente."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:105
+#, no-wrap
+msgid "Are mailing lists available in a digest format?"
+msgstr "As listas de discussão estão disponíveis em um formato sumarizado (digest)?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:108
+msgid "Yes. See link:https://lists.FreeBSD.org/[the Mlmmj web interface]."
+msgstr "Sim. Veja a link:https://lists.FreeBSD.org/[interface web do Mlmmj]."
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:110
+#, no-wrap
+msgid "Mailing List Etiquette"
+msgstr "Etiqueta em Listas de Discussão"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:114
+msgid ""
+"Participation in the mailing lists, like participation in any community, "
+"requires a common basis for communication. Please make only appropriate "
+"postings, and follow common rules of etiquette."
+msgstr ""
+"A participação em listas de discussão, assim como a participação em qualquer "
+"comunidade, requer uma base comum para comunicação. Por favor envie apenas "
+"postagens apropriadas, e siga regras comuns de etiqueta."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:115
+#, no-wrap
+msgid "What should I do before I post?"
+msgstr "O que devo fazer antes de postar?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:120
+msgid ""
+"You have already taken the most important step by reading this document. "
+"However, if you are new to FreeBSD, you may first need to familiarize "
+"yourself with the software, and all the social history around it, by reading "
+"the numerous link:https://www.FreeBSD.org/docs/books/[books and articles] "
+"that are available. Items of particular interest include the extref:{faq}"
+"[FreeBSD Frequently Asked Questions (FAQ)] document, the extref:{handbook}"
+"[FreeBSD Handbook], and the articles extref:{freebsd-questions-article}[How "
+"to get best results from the FreeBSD-questions mailing list], extref:"
+"{explaining-bsd}[Explaining BSD], and extref:{new-users}[FreeBSD First "
+"Steps]."
+msgstr ""
+"Você já deu o passo mais importante ao ler este documento. Entretanto, se "
+"você é novo no FreeBSD, você primeiro precisa se familiarizar com o "
+"software, e a história social que o envolve lendo os numerosos link:https://"
+"www.FreeBSD.org/docs/books/[livros e artigos] que estão disponíveis. Itens "
+"de interesse particular incluem o documento extref:{faq}[Perguntas "
+"Frequentes do FreeBSD (FAQ)], o extref:{handbook}[Handbook do FreeBSD], e os "
+"artigos extref:{freebsd-questions-article}[Como obter melhores resultados na "
+"lista de discussão FreeBSD-questions], extref:{explaining-bsd}[Explicando o "
+"BSD], e extref:{new-users}[Primeiros passos no FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:125
+msgid ""
+"It is always considered bad form to ask a question that is already answered "
+"in the above documents. This is not because the volunteers who work on this "
+"project are particularly mean people, but after a certain number of times "
+"answering the same questions over and over again, frustration begins to set "
+"in. This is particularly true if there is an existing answer to the "
+"question that is already available. Always keep in mind that almost all of "
+"the work done on FreeBSD is done by volunteers, and that we are only human."
+msgstr ""
+"É sempre considerado errado fazer uma pergunta que já foi respondida nos "
+"documentos acima. Isto não é porque os voluntários que trabalham neste "
+"projeto são pessoas particularmente más, mas depois de um certo número de "
+"vezes respondendo às mesmas perguntas repetidas vezes, a frustração começa a "
+"surgir. Isto é particularmente verdadeiro se houver uma resposta existente "
+"para uma pergunta que já está disponível. Tenha sempre em mente que quase "
+"todo o trabalho feito no FreeBSD é feito por voluntários, e que somos apenas "
+"humanos."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:126
+#, no-wrap
+msgid "What constitutes an inappropriate posting?"
+msgstr "O que constitui uma postagem inadequada?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:129
+msgid "Postings must be in accordance with the charter of the mailing list."
+msgstr ""
+"As mensagens devem estar de acordo com as regras da lista de discussão."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:130
+msgid ""
+"Personal attacks are discouraged. As good net-citizens, we should try to "
+"hold ourselves to high standards of behavior."
+msgstr ""
+"Ataques pessoais são desencorajados. Como bons net-cidadãos, devemos tentar "
+"nos manter com altos padrões de comportamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:131
+msgid ""
+"Spam is not allowed, ever. The mailing lists are actively processed to ban "
+"offenders to this rule."
+msgstr ""
+"Spam não é permitido, nunca. As listas de discussão são administradas "
+"ativamente para banir os infratores dessa regra."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:132
+#, no-wrap
+msgid "What is considered proper etiquette when posting to the mailing lists?"
+msgstr "O que é considerado etiqueta apropriada ao postar nas listas de discussão?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:135
+msgid ""
+"Please wrap lines at 75 characters, since not everyone uses fancy GUI mail "
+"reading programs."
+msgstr ""
+"Por favor, use quebra de linha automática em 75 caracteres, pois nem todo "
+"mundo usa clientes de email em uma interface gráfica."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:136
+msgid ""
+"Please respect the fact that bandwidth is not infinite. Not everyone reads "
+"email through high-speed connections, so if your posting involves something "
+"like the content of [.filename]#config.log# or an extensive stack trace, "
+"please consider putting that information up on a website somewhere and just "
+"provide a URL to it. Remember, too, that these postings will be archived "
+"indefinitely, so huge postings will simply inflate the size of the archives "
+"long after their purpose has expired."
+msgstr ""
+"Por favor, respeite o fato de que a largura de banda não é infinita. Nem "
+"todo mundo lê e-mails através de conexões de alta velocidade, então se sua "
+"postagem envolve algo como o conteúdo de um arquivo como o [."
+"filename]#config.log# ou um extenso stack trace, por favor considere colocar "
+"essas informações em algum lugar e apenas fornecer uma URL para eles. Lembre-"
+"se, também, de que essas postagens serão arquivadas indefinidamente, de modo "
+"que postagens enormes simplesmente aumentarão o tamanho dos arquivos muito "
+"depois que o propósito deles tiver expirado."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:137
+msgid ""
+"Format your message so that it is legible, and PLEASE DO NOT SHOUT!!!!!. Do "
+"not underestimate the effect that a poorly formatted mail message has, and "
+"not just on the FreeBSD mailing lists. Your mail message is all that people "
+"see of you, and if it is poorly formatted, badly spelled, full of errors, "
+"and/or has lots of exclamation points, it will give people a poor impression "
+"of you."
+msgstr ""
+"Formate a sua mensagem para que fique legível e, POR FAVOR, NÃO GRITE !!!!! "
+"Não subestime o efeito que uma mensagem de correio mal formatada tem, e não "
+"apenas nas listas de discussão do FreeBSD. Sua mensagem de e-mail é tudo o "
+"que as pessoas veem de você e, se estiver mal formatada, mal grafada, cheia "
+"de erros ou tiver muitos pontos de exclamação, isso dará às pessoas uma má "
+"impressão de você."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:138
+msgid ""
+"Please use an appropriate human language for a particular mailing list. Many "
+"non-English mailing lists are link:https://www.FreeBSD.org/community/"
+"mailinglists/[available]."
+msgstr ""
+"Por favor, use uma linguagem humana apropriada para uma lista de discussão "
+"específica. Muitas listas de discussão que não utilizam o idioma inglês "
+"estão link:https://www.FreeBSD.org/community/mailinglists/[disponíveis]."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:142
+msgid ""
+"For the ones that are not, we do appreciate that many people do not speak "
+"English as their first language, and we try to make allowances for that. It "
+"is considered particularly poor form to criticize non-native speakers for "
+"spelling or grammatical errors. FreeBSD has an excellent track record in "
+"this regard; please, help us to uphold that tradition."
+msgstr ""
+"Para os que não são, nós apreciamos que muitas pessoas não falam inglês como "
+"sua primeira língua, e tentamos fazer concessões para isso. Considera-se uma "
+"forma particularmente pobre criticar falantes não nativos por erros "
+"ortográficos ou gramaticais. O FreeBSD tem um excelente histórico neste "
+"aspecto; por favor, ajude-nos a manter essa tradição."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:143
+msgid ""
+"Please use a standards-compliant Mail User Agent (MUA). A lot of badly "
+"formatted messages come from http://www.lemis.com/grog/email/email.php[bad "
+"mailers or badly configured mailers]. The following mailers are known to "
+"send out badly formatted messages without you finding out about them:"
+msgstr ""
+"Por favor, use um Mail User Agent (MUA) compatível com os padrões. Muitas "
+"mensagens mal formatadas vêm de http://www.lemis.com/grog/email/email."
+"php[clientes de email ruins ou mal-configurados]. Os seguintes clientes de "
+"email são conhecidos por enviar mensagens mal formatadas sem que você saiba "
+"sobre elas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:145
+msgid "exmh"
+msgstr "exmh"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:146
+msgid "Microsoft(R) Exchange"
+msgstr "Microsoft(R) Exchange"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:147
+msgid "Microsoft(R) Outlook(R)"
+msgstr "Microsoft(R) Outlook(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:149
+msgid ""
+"Try not to use MIME: a lot of people use mailers which do not get on very "
+"well with MIME."
+msgstr ""
+"Tente não usar MIME: muitas pessoas usam clientes de e-mail que não lidam "
+"bem com MIME."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:150
+msgid ""
+"Make sure your time and time zone are set correctly. This may seem a little "
+"silly, since your message still gets there, but many of the people on these "
+"mailing lists get several hundred messages a day. They frequently sort the "
+"incoming messages by subject and by date, and if your message does not come "
+"before the first answer, they may assume that they missed it and not bother "
+"to look."
+msgstr ""
+"Verifique se o seu horário e fuso horário estão definidos corretamente. Isso "
+"pode parecer um pouco bobo, já que sua mensagem ainda chegará na lista, mas "
+"muitas das pessoas nestas listas recebem centenas de mensagens por dia. Eles "
+"frequentemente classificam as mensagens recebidas por assunto e por data, e "
+"se sua mensagem não vier antes da primeira resposta, eles podem assumir que "
+"eles perderam a mensagem e não se darão ao trabalho de procurar."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:151
+msgid ""
+"A lot of the information you need to supply is the output of programs, such "
+"as man:dmesg[8], or console messages, which usually appear in [.filename]#/"
+"var/log/messages#. Do not try to copy this information by typing it in "
+"again; not only it is a real pain, but you are bound to make a mistake. To "
+"send log file contents, either make a copy of the file and use an editor to "
+"trim the information to what is relevant, or cut and paste into your "
+"message. For the output of programs like `dmesg`, redirect the output to a "
+"file and include that. For example,"
+msgstr ""
+"Muitas das informações que você precisará fornecer referem-se a saída de "
+"programas, como man:dmesg[8], ou mensagens do console, que geralmente "
+"aparecem no [.filename]#/var/log/messages#. Não tente copiar essa informação "
+"digitando-a novamente; Isso será não só um sofrimento real, mas você é "
+"provavelmente irá cometer um erro. Para enviar o conteúdo do arquivo de log, "
+"faça uma cópia do arquivo e use um editor para reduzi-lo às informações "
+"relevantes ou copie e cole na sua mensagem. Para a saída de programas como "
+"`dmesg`, redirecione a saída para um arquivo e inclua-o. Por exemplo,"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:155
+#, no-wrap
+msgid "% dmesg > /tmp/dmesg.out\n"
+msgstr "% dmesg > /tmp/dmesg.out\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:158
+msgid "This redirects the information to the file [.filename]#/tmp/dmesg.out#."
+msgstr ""
+"Isto redireciona a informação para o arquivo [.filename]#/tmp/dmesg.out#."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:159
+msgid ""
+"When using cut-and-paste, please be aware that some such operations badly "
+"mangle their messages. This is of particular concern when posting contents "
+"of [.filename]#Makefiles#, where `tab` is a significant character. This is a "
+"very common, and very annoying, problem with submissions to the link:https://"
+"www.FreeBSD.org/support/[Problem Reports database]. [.filename]#Makefiles# "
+"with tabs changed to either spaces, or the annoying `=3B` escape sequence, "
+"create a great deal of aggravation for committers."
+msgstr ""
+"Ao usar o recurso de copiar e colar, lembre-se de que algumas dessas "
+"operações manipulam incorretamente suas mensagens. Isto é particularmente "
+"preocupante ao postar conteúdo de [.filename]#Makefiles#, onde o `tab` é um "
+"caractere significativo. Este é um problema muito comum, e muito chato, com "
+"envios para o link:https://www.FreeBSD.org/support/[banco de dados de "
+"Relatórios de Problemas]. Arquivos [.filename]#Makefiles# com tabs alterados "
+"para espaços, ou a chata sequência de escape `=3B`, cria um grande problema "
+"para os committers."
+
+#. type: Title ===
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:160
+#, no-wrap
+msgid "What are the special etiquette consideration when replying to an existing posting on the mailing lists?"
+msgstr "Qual é a consideração de etiqueta especial ao responder a uma postagem existente nas listas de discussão?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:163
+msgid ""
+"Please include relevant text from the original message. Trim it to the "
+"minimum, but do not overdo it. It should still be possible for somebody who "
+"did not read the original message to understand what you are talking about."
+msgstr ""
+"Por favor, inclua o texto relevante da mensagem original. Reduza-a ao "
+"mínimo, mas não exagere. Ela deverá permitir que alguém que não leu a "
+"mensagem original entenda do que você está falando."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:165
+msgid ""
+"This is especially important for postings of the type \"yes, I see this too"
+"\", where the initial posting was dozens or hundreds of lines."
+msgstr ""
+"Isso é especialmente importante para postagens do tipo \"sim, também vejo "
+"isso\", em que a postagem inicial era de dezenas ou centenas de linhas."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:166
+msgid ""
+"Use some technique to identify which text came from the original message, "
+"and which text you add. A common convention is to prepend \"`>`\" to the "
+"original message. Leaving white space after the \"`>`\" and leaving empty "
+"lines between your text and the original text both make the result more "
+"readable."
+msgstr ""
+"Use alguma técnica para identificar qual texto veio da mensagem original e "
+"qual texto você adicionou. Uma convenção comum é prefixar com \"`>`\" a "
+"mensagem original. Deixando espaço em branco após o \"`>`\" e deixando "
+"linhas vazias entre o seu texto e o texto original, ambos tornam o resultado "
+"mais legível."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:167
+msgid ""
+"Please ensure that the attributions of the text you are quoting is correct. "
+"People can become offended if you attribute words to them that they "
+"themselves did not write."
+msgstr ""
+"Por favor, certifique-se de que as atribuições do texto que você está "
+"citando estão corretas. As pessoas podem ficar ofendidas se você atribuir "
+"palavras a elas que elas mesmas não escreveram."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:168
+msgid ""
+"Please do not `top post`. By this, we mean that if you are replying to a "
+"message, please put your replies after the text that you copy in your reply."
+msgstr ""
+"Por favor não faça `top post`. Com isso, queremos dizer que, se você estiver "
+"respondendo a uma mensagem, coloque suas respostas após o texto copiado na "
+"sua resposta."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:170
+msgid "A: Because it reverses the logical flow of conversation."
+msgstr "R: Porque inverte o fluxo lógico da conversa."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:171
+msgid "Q: Why is top posting frowned upon?"
+msgstr "P: Por que a publicação superior é desaprovada?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:173
+msgid "(Thanks to Randy Bush for the joke.)"
+msgstr "(Obrigado Randy Bush pela piada.)"
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:175
+#, no-wrap
+msgid "Recurring Topics On The Mailing Lists"
+msgstr "Tópicos recorrentes nas listas de discussão"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:182
+msgid ""
+"Participation in the mailing lists, like participation in any community, "
+"requires a common basis for communication. Many of the mailing lists "
+"presuppose a knowledge of the Project's history. In particular, there are "
+"certain topics that seem to regularly occur to newcomers to the community. "
+"It is the responsibility of each poster to ensure that their postings do not "
+"fall into one of these categories. By doing so, you will help the mailing "
+"lists to stay on-topic, and probably save yourself being flamed in the "
+"process."
+msgstr ""
+"A participação nas listas de discussão, como a participação em qualquer "
+"comunidade, requer uma base comum para comunicação. Muitas das listas de "
+"discussão pressupõem um conhecimento da história do Projeto. Em particular, "
+"há certos tópicos que parecem ocorrer regularmente aos recém-chegados à "
+"comunidade. É da responsabilidade de cada usuário garantir que suas "
+"mensagens não se enquadrem em uma dessas categorias. Ao fazer isso, você "
+"ajudará as listas de discussão a permanecerem no tópico e, provavelmente, e "
+"provavelmente se salve de ser queimado no processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:186
+msgid ""
+"The best method to avoid this is to familiarize yourself with the http://"
+"docs.FreeBSD.org/mail/[mailing list archives], to help yourself understand "
+"the background of what has gone before. In this, the https://www.FreeBSD."
+"org/search/#mailinglists[mailing list search interface] is invaluable. (If "
+"that method does not yield useful results, please supplement it with a "
+"search with your favorite major search engine)."
+msgstr ""
+"O melhor método para evitar isso é familiarizar-se com os http://docs."
+"FreeBSD.org/mail/[arquivos da lista de discussão], para ajudar você a "
+"entender o histórico do que aconteceu antes. E para isso, a https://www."
+"FreeBSD.org/search/#mailinglists[interface de pesquisa das listas de "
+"discussões] é inestimável. (Se esse método não produzir resultados úteis, "
+"por favor, complemente-o com uma pesquisa no seu mecanismo de busca "
+"favorito)."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:189
+msgid ""
+"By familiarizing yourself with the archives, not only will you learn what "
+"topics have been discussed before, but also how discussion tends to proceed "
+"on that list, who the participants are, and who the target audience is. "
+"These are always good things to know before you post to any mailing list, "
+"not just a FreeBSD mailing list."
+msgstr ""
+"Ao se familiarizar com os arquivos, você não apenas aprenderá os tópicos que "
+"foram discutidos anteriormente, mas também como a discussão tende a "
+"prosseguir nessa lista, quem são os participantes e quem é o público-alvo. "
+"Estas são sempre boas coisas para saber antes de postar em qualquer lista de "
+"discussão, não apenas em uma lista de discussão do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:192
+msgid ""
+"There is no doubt that the archives are quite extensive, and some questions "
+"recur more often than others, sometimes as followups where the subject line "
+"no longer accurately reflects the new content. Nevertheless, the burden is "
+"on you, the poster, to do your homework to help avoid these recurring topics."
+msgstr ""
+"Não há dúvida de que os arquivos são bastante extensos e algumas questões "
+"recorrem com maior frequência do que outras, às vezes como acompanhamentos "
+"em que a linha de assunto não reflete mais precisamente o novo conteúdo. No "
+"entanto, o fardo está em você, o usuário, para fazer sua lição de casa para "
+"ajudar a evitar esses tópicos recorrentes."
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:194
+#, no-wrap
+msgid "What Is A \"Bikeshed\"?"
+msgstr "O que é um \"Bikeshed\" (Garagem de bicicletas)?"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:199
+msgid ""
+"Literally, a `bikeshed` is a small outdoor shelter into which one may store "
+"one's two-wheeled form of transportation. However, in FreeBSD parlance, the "
+"term refers to topics that are simple enough that (nearly) anyone can offer "
+"an opinion about, and often (nearly) everyone does. The genesis of this term "
+"is explained in more detail extref:{faq}[in this document, bikeshed-"
+"painting]. You simply must have a working knowledge of this concept before "
+"posting to any FreeBSD mailing list."
+msgstr ""
+"Literalmente, uma `bikeshed` é um pequeno abrigo ao ar livre no qual se pode "
+"armazenar o meio de transporte de duas rodas. No entanto, no jargão do "
+"FreeBSD, o termo refere-se a tópicos que são simples o suficiente para que "
+"(quase) qualquer um possa opinar sobre ele, e geralmente (quase) todos o "
+"fazem. A gênese desse termo é explicada com mais detalhes extref:{faq}[neste "
+"documento]. Você simplesmente deve ter um conhecimento prático deste "
+"conceito antes de postar em qualquer lista de discussão do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:201
+msgid ""
+"More generally, a bikeshed is a topic that will tend to generate immediate "
+"meta-discussions and flames if you have not read up on their past history."
+msgstr ""
+"Mais genericamente, um Bikeshed é um tópico que tenderá a gerar Meta-"
+"discussões imediatas e interações hostis com usuários você ainda nem conhece."
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:204
+msgid ""
+"Please help us to keep the mailing lists as useful for as many people as "
+"possible by avoiding bikesheds whenever you can. Thanks."
+msgstr ""
+"Por favor, ajude-nos a manter as listas de discussão úteis para o maior "
+"numero possível de pessoas evitando bikesheds sempre que puder. Obrigado."
+
+#. type: Title ==
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:206
+#, no-wrap
+msgid "Acknowledgments"
+msgstr "Agradecimentos"
+
+#. type: Labeled list
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:208
+#, no-wrap
+msgid "`{grog}`"
+msgstr "`{grog}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:210
+msgid ""
+"Original author of most of the material on mailing list etiquette, taken "
+"from the article on extref:{freebsd-questions-article}[How to get best "
+"results from the FreeBSD-questions mailing list]."
+msgstr ""
+"Autor original da maior parte do material sobre etiqueta nas listas de "
+"discussão, retirada do artigo sobre extref:{freebsd-questions-article}[Como "
+"para obter os melhores resultados da lista de discussão FreeBSD-questions]."
+
+#. type: Labeled list
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:211
+#, no-wrap
+msgid "`{linimon}`"
+msgstr "`{linimon}`"
+
+#. type: Plain text
+#: documentation/content/en/articles/mailing-list-faq/_index.adoc:212
+msgid "Creation of the rough draft of this FAQ."
+msgstr "Pela criação do rascunho deste FAQ."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/nanobsd/_index.adoc b/documentation/content/pt-br/articles/nanobsd/_index.adoc
index fc5ca09adc..1563861b50 100644
--- a/documentation/content/pt-br/articles/nanobsd/_index.adoc
+++ b/documentation/content/pt-br/articles/nanobsd/_index.adoc
@@ -1,9 +1,11 @@
---
-title: Introdução ao NanoBSD
authors:
- - author: Daniel Gerzo
-copyright: 2006 Projeto de Documentação do FreeBSD
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'Daniel Gerzo'
+copyright: '2006 The FreeBSD Documentation Project'
+description: 'Este documento fornece informações sobre as ferramentas NanoBSD, que podem ser usadas para criar imagens de sistema FreeBSD para aplicações embarcadas, adequadas para uso em uma chave USB, cartão de memória ou outro meio de armazenamento em massa.'
+tags: ["nanobsd", "guide", "embedded", "FreeBSD"]
+title: 'Introdução ao NanoBSD'
trademarks: ["freebsd", "general"]
---
@@ -16,18 +18,32 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/nanobsd/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Este documento fornece informações sobre as ferramentas NanoBSD, que podem ser usadas para criar imagens do sistema FreeBSD para aplicativos embarcados, adequadas para uso em um cartão Compact Flash (ou outro meio de armazenamento em massa).
+Este documento fornece informações sobre as ferramentas NanoBSD, que podem ser usadas para criar imagens de sistema FreeBSD para aplicações embarcadas, adequadas para uso em uma chave USB, cartão de memória ou outro meio de armazenamento em massa.
'''
@@ -36,39 +52,39 @@ toc::[]
[[intro]]
== Introdução ao NanoBSD
-O NanoBSD é uma ferramenta atualmente desenvolvida por Poul-Henning Kamp mailto:phk@FreeBSD.org[phk@FreeBSD.org]. Ele cria uma imagem do sistema FreeBSD para aplicativos embarcados, adequada para uso em um cartão Compact Flash (ou outro meio de armazenamento em massa).
+O NanoBSD é uma ferramenta desenvolvida por {phk} e agora mantida por {imp}. Ela cria uma imagem do sistema FreeBSD para aplicações embarcadas, adequada para uso em uma chave USB, cartão de memória ou outro meio de armazenamento em massa.
-Ele pode ser usado para construir imagens de instalação especializadas, projetadas para fácil instalação e manutenção de sistemas comumente chamados de "appliances". Os appliances têm seu hardware e software agrupados no produto, o que significa que todos os aplicativos são pré-instalados. O appliance é conectado a uma rede existente e pode começar a funcionar (quase) imediatamente.
+Pode ser usado para construir imagens de instalação especializadas, projetadas para facilitar a instalação e manutenção de sistemas comumente chamados de "computer appliances". Os computer appliances têm seu hardware e software empacotados no produto, o que significa que todos os aplicativos estão pré-instalados. O aparelho é conectado a uma rede existente e pode começar a funcionar (quase) imediatamente.
-Os recursos do NanoBSD incluem:
+As características do NanoBSD incluem:
-* Os Ports e os pacotes funcionam como no FreeBSD - Cada aplicativo pode ser instalado e usado em uma imagem do NanoBSD, da mesma forma que no FreeBSD.
-* Nenhuma funcionalidade ausente - Se é possível fazer algo com o FreeBSD, é possível fazer a mesma coisa com o NanoBSD, a menos que o recurso ou os recursos específicos sejam explicitamente removidos do NanoBSD quando a imagem foi criada.
-* Todo o sistema opera em modo read-only em tempo de execução - É seguro puxar o plugue de alimentação. Não há necessidade de executar man:fsck[8] após um desligamento abrupto do sistema.
-* É fácil de criar e personalizar - Usando apenas um script de shell e um arquivo de configuração, é possível criar imagens reduzidas e personalizadas, satisfazendo qualquer conjunto arbitrário de requisitos.
+* Os Ports e pacotes funcionam como no FreeBSD - Cada aplicação pode ser instalada e usada em uma imagem NanoBSD, da mesma forma que no FreeBSD.
+* Nenhuma funcionalidade faltante - Se é possível fazer algo com o FreeBSD, é possível fazer a mesma coisa com o NanoBSD, a menos que a funcionalidade específica tenha sido explicitamente removida da imagem do NanoBSD quando ela foi criada.
+* O sistema opera em modo read-only em tempo de execução - É seguro puxar o plugue de energia. Não há necessidade de executar o man:fsck[8] após um desligamento abrupto do sistema.
+* É fácil de compilar e personalizar - Usando apenas um script de shell e um arquivo de configuração, é possível criar imagens reduzidas e personalizadas, satisfazendo qualquer conjunto arbitrário de requisitos.
[[howto]]
-== NanoBSD Howto
+== Guia do NanoBSD
[[design]]
=== O Design do NanoBSD
-Quando a imagem estiver presente na midia, é possível inicializar o NanoBSD. O meio de armazenamento em massa é dividido em três partes por padrão:
+Uma vez que a imagem está presente no meio de armazenamento, é possível inicializar o NanoBSD. O meio de armazenamento em massa é dividido em três partes por padrão:
* Duas partições de imagem: `code#1` e `code#2`.
-* A partição do arquivo de configuração, que pode ser montada no diretório [.filename]#/cfg# em tempo de execução.
+* A partição do arquivo de configuração, que pode ser montada sob o diretório [.filename]#/cfg# em tempo de execução.
Essas partições são normalmente montadas em modo read-only (somente leitura).
-Os diretórios [.filename]#/etc# e [.filename]#/var# são discos criados em memória (malloc) pelo comando man:md[4].
+Os diretórios [.filename]#/etc# e [.filename]#/var# são discos man:md[4] (malloc).
-A partição do arquivo de configuração persiste no diretório [.filename]#/cfg#. Ele contém arquivos para o diretório [.filename]#/etc# e é brevemente montado como read-only logo após a inicialização do sistema, portanto é necessário copiar os arquivos modificados de [.filename]#/etc# de volta para o [.filename]#/cfg# se as alterações precisarem ser mantidas após a reinicialização do sistema.
+A partição do arquivo de configuração persiste no diretório [.filename]#/cfg#. Ele contém arquivos para o diretório [.filename]#/etc# e é montado brevemente como somente leitura logo após a inicialização do sistema. Portanto, é necessário copiar os arquivos modificados do diretório [.filename]#/etc# de volta para o diretório [.filename]#/cfg# se as alterações precisarem ser mantidas após a reinicialização do sistema.
-.Fazendo Mudanças Persistentes no [.filename]#/etc/resolv.conf#
+.Fazendo alterações persistentes no arquivo [.filename]#/etc/resolv.conf#
[example]
====
-[source,shell]
+[source, shell]
....
# vi /etc/resolv.conf
[...]
@@ -76,45 +92,93 @@ A partição do arquivo de configuração persiste no diretório [.filename]#/cf
# cp /etc/resolv.conf /cfg
# umount /cfg
....
+
====
[NOTE]
====
-A partição que contém o [.filename]#/cfg# deve ser montada somente no momento da inicialização ou quando for preciso sobrescrever os arquivos de configuração.
+A partição que contém o diretório [.filename]#/cfg# deve ser montada somente no momento da inicialização e enquanto sobrescreve os arquivos de configuração.
-Manter o [.filename]#/cfg# montado o tempo todo não é uma boa ideia, especialmente se o sistema NanoBSD for executado em um meio de armazenamento em massa que pode ser afetado negativamente por um grande número de gravações na partição (como quando o sistema de arquivos sincroniza os dados para os discos do sistema).
+Manter o [.filename]#/cfg# montado o tempo todo não é uma boa idéia, especialmente se o sistema NanoBSD rodar em um meio de armazenamento em massa que pode ser afetado adversamente por um grande número de gravações na partição (como quando o sincronizador do sistema de arquivos libera dados para os discos do sistema).
====
=== Construindo uma imagem NanoBSD
-Uma imagem NanoBSD é construída usando um simples shell script [.filename]#nanobsd.sh#, que pode ser encontrado no diretório [.filename]#/usr/src/tools/tools/nanobsd#. Este script cria uma imagem, que pode ser copiada no meio de armazenamento usando o utilitário man:dd[1].
+Uma imagem NanoBSD é compilada usando um simples shell script [.filename]#nanobsd.sh#, que pode ser encontrado no diretório [.filename]#/usr/src/tools/tools/nanobsd#. Este script cria uma imagem, que pode ser copiada no meio de armazenamento usando o utilitário man:dd[1].
Os comandos necessários para construir uma imagem NanoBSD são:
-[source,shell]
+[source, shell]
....
-
# cd /usr/src/tools/tools/nanobsd <.>
# sh nanobsd.sh <.>
# cd /usr/obj/nanobsd.full <.>
# dd if=_.disk.full of=/dev/da0 bs=64k <.>
....
-<.> Altere o diretório atual para o diretório base do script de construção do NanoBSD.
+<.> Altere o diretório atual para o diretório base do script de compilação do NanoBSD.
-<.> Comece o processo de construção.
+<.> Inicie o processo de compilação.
-<.> Altere o diretório atual para o local onde as imagens construídas estão localizadas.
+<.> Altere o diretório atual para o local onde as imagens compiladas estão localizadas.
<.> Instale o NanoBSD no meio de armazenamento.
+==== Opções ao compilar uma imagem NanoBSD
+
+Ao construir uma imagem NanoBSD, várias opções de compilação podem ser passadas para [.filename]#nanobsd.sh# na linha de comando. Essas opções podem ter um impacto significativo no processo de compilação.
+
+Algumas opções são para fins de verbosidade:
+
+* `-h`: imprime a página resumida de ajuda.
+* `-q`: torna a saída mais silenciosa.
+* `-v`: torna a saída mais detalhada (verbose)
+
+Algumas outras opções podem ser usadas para restringir o processo de compilação. Às vezes, não é necessário reconstruir tudo a partir das fontes, especialmente se uma imagem já foi compilada e apenas poucas alterações foram feitas.
+
+* `-k`: não compilar o kernel
+* `-w`: não compilar o mundo (world)
+* `-b`: não compilar nem o kernel e nem o mundo (world)
+* `-i`: não compilar uma imagem de disco. Como um arquivo não será criado, não será possível usá-lo com o comando man:dd[1] para gravá-lo em um dispositivo de armazenamento.
+* `-f`: não compilar uma imagem de disco para a primeira partição (o que é útil para fins de atualização)
+* `-n`: adiciona `-DNO_CLEAN` as etapas `buildworld` e `buildkernel`. Além disso, todos os arquivos que já foram compilados em uma execução anterior são mantidos.
+
+Um arquivo de configuração pode ser usado para ajustar quantos elementos desejar. Carregue-o com `-c`
+
+As últimas opções são:
+
+* `-K`: não instalar um kernel. Uma imagem de disco sem um kernel não poderá executar uma sequência de inicialização normal.
+
+==== O Processo Completo de Compilação de Imagens
+
+O processo completo de compilação de imagens passa por muitas etapas. As etapas exatas dependerão das opções selecionadas ao iniciar o script. Supondo que o script seja executado sem opções específicas, isso é o que acontecerá.
+
+. `run_early_customize`: comandos que são definidos em um arquivo de configuração fornecido.
+. `clean_build`: Apenas limpa o ambiente de compilação excluindo os arquivos previamente compilados.
+. `make_conf_build`: Monta o arquivo make.conf a partir das variáveis `CONF_WORLD` e `CONF_BUILD`.
+. `build_world`: Compila o mundo (world).
+. `build_kernel`: Compila os arquivos do kernel.
+. `clean_world`: Limpa o diretório de destino.
+. `make_conf_install`: Monta o arquivo make.conf a partir das variáveis `CONF_WORLD` e `CONF_INSTALL`.
+. `install_world`: Instala todos os arquivos construídos durante o `buildworld`.
+. `install_etc`: Instala os arquivos necessários no diretório [.filename]#/etc#, com base no comando `make distribution`.
+. `setup_nanobsd_etc`: a primeira configuração específica do NanoBSD ocorre nesta etapa. O diretório [.filename]#/etc/diskless# é criado e o sistema de arquivos raiz é definido como somente leitura.
+. `install_kernel`: os arquivos do kernel e dos módulos são instalados.
+. `run_customize`: todas as rotinas de personalização definidas pelo usuário serão chamadas.
+. `setup_nanobsd`: uma estrutura especial de diretórios de configuração é configurada. O diretório [.filename]#/usr/local/etc# é movido para [.filename]#/etc/local# e um link simbólico é criado de volta de [.filename]#/etc/local# para [.filename]#/usr/local/etc#.
+. `prune_usr`: os diretórios vazios de [.filename]#/usr# são removidos.
+. `run_late_customize`: os últimos scripts personalizados podem ser executados neste ponto.
+. `fixup_before_diskimage`: Lista todos os arquivos instalados em um metalog
+. `create_diskimage`: cria a imagem de disco, com base nos parâmetros de geometria de disco fornecidos.
+. `last_orders`: não faz nada por enquanto.
+
=== Personalizando uma imagem NanoBSD
-Este é provavelmente o recurso mais importante e interessante do NanoBSD. Este também é o lugar onde você passará a maior parte do tempo desenvolvendo com o NanoBSD.
+Esta é provavelmente a característica mais importante e mais interessante do NanoBSD. É também onde você passará a maior parte do tempo ao desenvolver com o NanoBSD.
-A execução do seguinte comando forçará o [.filename]#nanobsd.sh# a ler sua configuração do [.filename]#myconf.nano# localizado no diretório atual:
+A invocação do seguinte comando forçará o [.filename]#nanobsd.sh# a ler sua configuração de [.filename]#myconf.nano# localizado no diretório atual:
-[source,shell]
+[source, shell]
....
# sh nanobsd.sh -c myconf.nano
....
@@ -126,21 +190,65 @@ A personalização é feita de duas maneiras:
==== Opções de configuração
-Com as definições de configuração, é possível configurar as opções passadas tanto para o estágio `buildworld` quando para o `installworld` do processo de construção do NanoBSD, bem como opções internas passadas para o processo principal de construção do NanoBSD. Através destas opções, é possível reduzir o sistema para que ele caiba, por exemplo, em um cartão de memória de 64 MB. Você pode usar as opções de configuração para reduzir ainda mais o FreeBSD, até que ele consista apenas no kernel e em dois ou três arquivos na área de usuário.
+Com as configurações de configuração, é possível configurar as opções passadas tanto para as etapas `buildworld` quanto `installworld` do processo de compilação do NanoBSD, bem como opções internas passadas para o processo de compilação principal do NanoBSD. Através dessas opções, é possível reduzir o sistema, para que ele caiba em tão pouco quanto 64MB. Você pode usar as opções de configuração para reduzir ainda mais o FreeBSD, até que consista apenas no kernel e em dois ou três arquivos no espaço do usuário.
-O arquivo de configuração consiste em opções de configuração, que substituem os valores padrões. As diretivas mais importantes são:
+O arquivo de configuração consiste em opções de configuração, que substituem os valores padrão. As diretivas mais importantes são:
-* `NANO_NAME` - Nome da compilação (usada para construir os nomes do diretório de trabalho).
-* `NANO_SRC` - Caminho para o diretório com o código fonte que será utilizado na construção da imagem.
-* `NANO_KERNEL` - Nome do arquivo de configuração do kernel usado para construir o kernel.
+* `NANO_NAME` - Nome da compilação (usado para construir os nomes dos diretórios de trabalho).
+* `NANO_SRC` - Caminho para a árvore de código-fonte usada para compilar a imagem.
+* `NANO_KERNEL` - Nome do arquivo de configuração do kernel usado para compilar o kernel.
* `CONF_BUILD` - Opções passadas para o estágio `buildworld` da compilação.
* `CONF_INSTALL` - Opções passadas para o estágio `installworld` da compilação.
-* `CONF_WORLD` - Opções passadas para o estágio `buildworld` e o `installworld` da compilação.
-* `FlashDevice` - define o tipo de mídia a ser usado. Verifique o [.filename]#FlashDevice.sub# para mais detalhes.
+* `CONF_WORLD` - Opções passadas tanto para o estágio `buildworld` quanto para o estágio `installworld` da compilação.
+* `FlashDevice` - Define qual tipo de mídia usar. Verifique [.filename]#FlashDevice.sub# para obter mais detalhes.
+
+Existem muitas outras opções de configuração que podem ser relevantes, dependendo do tipo de NanoBSD desejado.
+
+===== Personalização Geral
+
+Existem três estágios, por design, nos quais é possível fazer alterações que afetam o processo de compilação, apenas configurando uma variável no arquivo de configuração fornecido:
+
+* `run_early_customize`: antes de qualquer outra coisa acontecer.
+* `run_customize`: depois que todos os arquivos padrões tiverem sido organizados
+* `run_late_customize`: no final do processo, antes da compilação da imagem real do NanoBSD.
+
+Para personalizar uma imagem do NanoBSD em qualquer um desses passos, é melhor adicionar um valor específico a uma das variáveis correspondentes.
+
+A variável `NANO_EARLY_CUSTOMIZE` é usada no primeiro passo do processo de construção. Neste momento, não há um exemplo específico do que pode ser feito usando essa variável, mas isso pode mudar no futuro.
+
+A variável `NANO_CUSTOMIZE` é usada depois que os arquivos de configuração do kernel, world e etc foram instalados, e os arquivos etc foram configurados como uma instalação do NanoBSD. Portanto, é o passo correto no processo de compilação para ajustar opções de configuração e adicionar pacotes, como no exemplo cust_nobeastie.
+
+A variável `NANO_LATE_CUSTOMIZE` é usada imediatamente antes da criação da imagem do disco, portanto, é o momento final para fazer qualquer alteração. Lembre-se de que a rotina `setup_nanobsd` já foi executada e que os diretórios [.filename]#etc#, [.filename]#conf# e [.filename]#cfg# e seus subdiretórios já foram modificados, então não é o momento de alterá-los neste ponto. Em vez disso, é possível adicionar ou remover arquivos específicos.
+
+===== Opções de Inicialização
+
+Também existem variáveis que podem alterar a forma como a imagem do NanoBSD é inicializada. Duas opções são passadas para o man:boot0cfg[8] para inicializar o setor de boot da imagem do disco:
+
+* `NANO_BOOT0CFG`
+* `NANO_BOOTLOADER`
+
+Com o `NANO_BOOTLOADER`, é possível escolher um arquivo de bootloader. As opções mais comuns são entre [.filename]#boot0sio# e [.filename]#boot0#, dependendo se o aparelho possui uma porta serial ou não. É melhor evitar fornecer um bootloader diferente, mas é possível fazê-lo. Para isso, é recomendável ter verificado o capítulo sobre o processo de inicialização no extref:{handbook}boot[Handbook do FreeBSD].
+
+Com o `NANO_BOOT0CFG`, é possível ajustar o processo de inicialização, como selecionar em qual partição a imagem do NanoBSD será inicializada. É melhor verificar a página man:boot0cfg[8] antes de alterar o valor padrão dessa variável. Uma opção interessante para alterar é o tempo limite do procedimento de inicialização. Para fazer isso, a variável `NANO_BOOT0CFG` pode ser alterada para `"-o packet -s 1 -m 3 -t 36"`. Dessa forma, o processo de inicialização começaria após aproximadamente 2 segundos, porque é raro que seja desejado esperar 10 segundos antes de iniciar o boot.
+
+Bom saber: a variável `NANO_BOOT2CFG` é usada apenas na rotina `cust_comconsole`, que pode ser chamada no passo `NANO_CUSTOMIZE` se o aparelho tiver uma porta serial e toda a entrada e saída do console tiver que ser feita por meio dela. Certifique-se de verificar os parâmetros relevantes da porta serial, pois definir um valor incorreto pode torná-la inútil.
+
+===== Criação da Imagem do Disco
+
+No final do processo de inicialização está a criação da imagem do disco. Com essa etapa, o script do NanoBSD fornece um arquivo que pode ser simplesmente copiado para um disco do aparelho, e isso fará com que ele seja inicializado e iniciado.
+
+Existem muitas variáveis que precisam ser configuradas corretamente para que o script produza uma imagem de disco utilizável.
+
+* A variável `NANO_DRIVE` deve ser definida como o nome da unidade de mídia em tempo de execução. Geralmente, o valor padrão `ada0`, que representa o primeiro dispositivo `IDE`/`ATA`/`SATA` no aparelho, é esperado como o correto, mas um tipo diferente de armazenamento também pode ser usado - como uma chave USB, nesse caso seria `da0`.
+* A variável `NANO_MEDIASIZE` deve ser definida como o tamanho (em setores de 512 bytes) da mídia de armazenamento que será usada. Se você definir isso incorretamente, é possível que a imagem do NanoBSD não inicialize e uma mensagem durante a inicialização avisará sobre a geometria de disco incorreta.
+
+* Os diretórios [.filename]#/etc#, [.filename]#/var# e [.filename]#/tmp# são alocados como discos man:md[4] (malloc) durante a inicialização; portanto, seus tamanhos podem ser ajustados para atender às necessidades do aparelho. A variável `NANO_RAM_ETCSIZE` define o tamanho do [.filename]#/etc# e a variável `NANO_RAM_TMPVARSIZE` define o tamanho tanto do diretório [.filename]#/var# quanto do diretório [.filename]#/tmp#, já que [.filename]#/tmp# está simbolicamente vinculado a [.filename]#/var/tmp#. Por padrão, ambos os tamanhos dos discos malloc são definidos em 20MB cada. Eles podem ser alterados, mas geralmente o [.filename]#/etc# não cresce muito em tamanho, portanto, 20MB é um bom ponto de partida, enquanto o [.filename]#/var# e especialmente o [.filename]#/tmp# podem aumentar muito de tamanho se não tiver cuidado. Para sistemas com restrição de memória, tamanhos menores de sistema de arquivos podem ser escolhidos.
+* Como o NanoBSD é projetado principalmente para criar uma imagem de sistema para um aparelho, presume-se que a mídia de armazenamento usada seja relativamente pequena. Por esse motivo, o sistema de arquivos que é organizado é configurado com um tamanho de bloco pequeno (4Kb) e um tamanho de fragmento pequeno (512b). As opções de configuração do sistema de arquivos podem ser modificadas por meio da variável `NANO_NEWFS`, mas a sintaxe deve respeitar o formato do comando man:newfs[8]. Além disso, por padrão, o sistema de arquivos tem Soft Updates ativado. O extref:{handbook}[Handbook do FreeBSD] pode ser consultado para obter mais informações sobre isso.
+* Os diferentes tamanhos das partições podem ser definidos por meio do uso de `NANO_CODESIZE`, `NANO_CONFSIZE` e `NANO_DATASIZE` como múltiplos de setores de 512 bytes. `NANO_CODESIZE` define o tamanho das duas primeiras partições da imagem: `code#1` e `code#2`. Elas devem ser grandes o suficiente para armazenar todos os arquivos que serão produzidos como resultado dos processos `buildworld` e `buildkernel`. `NANO_CONFSIZE` define o tamanho da partição do arquivo de configuração, portanto, não precisa ser muito grande, mas não a faça tão pequena que não possa armazenar todos os arquivos de configuração. Por fim, `NANO_DATASIZE` define o tamanho de uma partição opcional que pode ser usada no aparelho. A última partição pode ser usada, por exemplo, para manter arquivos criados dinamicamente no disco.
==== Funções Personalizadas
-É possível ajustar o NanoBSD usando as funções do shell no arquivo de configuração. O exemplo a seguir ilustra o modelo básico de funções personalizadas:
+É possível ajustar o NanoBSD usando funções de shell no arquivo de configuração. O exemplo a seguir ilustra o modelo básico de funções personalizadas:
[.programlisting]
....
@@ -151,7 +259,7 @@ cust_foo () (
customize_cmd cust_foo
....
-Um exemplo mais útil de uma função de customização é o seguinte, o qual altera o tamanho padrão do diretório [.filename]#/etc# de 5MB para 30MB:
+Um exemplo mais útil de uma função de personalização é o seguinte, que altera o tamanho padrão do diretório [.filename]#/etc# de 5MB para 30MB:
[.programlisting]
....
@@ -164,29 +272,25 @@ customize_cmd cust_etc_size
Existem algumas funções de customização pré-definidas por padrão e prontas para uso:
-* `cust_comconsole` -- Desabilita o man:getty[8] nos dispositivos VGA (os device nodes [.filename]#/dev/ttyv*#) e habilita o uso do console do sistema na serial COM1.
-* `cust_allow_ssh_root` -- Permite que o `root` faça o login via man:sshd[8].
-* `cust_install_files` -- Instala arquivos do diretório [.filename]#nanobsd/Files#, que contém alguns scripts úteis para administração do sistema.
+* `cust_comconsole` - Desabilita o man:getty[8] nos dispositivos VGA (os nós de dispositivo [.filename]#/dev/ttyv*#) e habilita o uso da porta serial COM1 como console do sistema.
+* `cust_allow_ssh_root` - Permite que o usuário `root` faça login via man:sshd[8].
+* `cust_install_files` - Instala arquivos do diretório [.filename]#nanobsd/Files#, que contém alguns scripts úteis para administração do sistema.
+* `cust_pkgng` - Instala pacotes do diretório [.filename]#nanobsd/Pkg#, (necessita também do pacote pkg-* para inicialização).
==== Adicionando Pacotes
-Pacotes podem ser adicionados a uma imagem NanoBSD usando uma função customizada. A seguinte função irá instalar todos os pacotes localizados em [.filename]#/usr/src/files/tools/nanobsd/packages#:
+Pacotes podem ser adicionados a uma imagem do NanoBSD para fornecer funcionalidades específicas no aparelho. Para fazer isso, você pode escolher uma das seguintes opções:
-[.programlisting]
-....
-install_packages () (
-mkdir -p ${NANO_WORLDDIR}/packages
-cp /usr/src/tools/tools/nanobsd/packages/* ${NANO_WORLDDIR}/packages
-cp $(which pkg-static) ${NANO_WORLDDIR}/
-chroot ${NANO_WORLDDIR} sh -c 'cd packages; /pkg-static add *;cd ..;'
-rm -rf ${NANO_WORLDDIR}/packages ${NANO_WORLDDIR}/pkg-static
-)
-customize_cmd install_packages
-....
+* Adicionar `cust_pkgng` à variável `NANO_CUSTOMIZE`, ou
+* Adicionar o comando `'customize_cmd cust_pkgng'` em um arquivo de configuração personalizado.
+
+Ambos os métodos alcançam o mesmo resultado: executar a rotina `cust_pkgng`. Essa rotina percorrerá o diretório `NANO_PACKAGE_DIR` para encontrar todos os pacotes ou apenas a lista de pacotes na variável `NANO_PACKAGE_LIST`.
+
+É comum, ao instalar aplicativos por meio do pkg em um ambiente FreeBSD padrão, que o processo de instalação coloque arquivos de configuração no diretório [.filename]#usr/local/etc# e scripts de inicialização no diretório [.filename]#/usr/local/etc/rc.d#. Portanto, após a instalação dos pacotes necessários, eles precisam ser configurados para iniciar imediatamente. Para fazer isso, os arquivos de configuração necessários devem ser instalados nos diretórios corretos. Isso pode ser feito escrevendo rotinas dedicadas ou utilizando a rotina genérica `cust_install_files` para organizar os arquivos corretamente a partir do diretório [.filename]#/usr/src/tools/tools/nanobsd/Files#. Geralmente, também é necessário adicionar uma ou várias declarações no arquivo [.filename]#/etc/rc.conf# para cada pacote.
==== Exemplo do arquivo de configuração
-Um exemplo completo de um arquivo de configuração para criar uma imagem NanoBSD personalizada pode ser:
+Um exemplo completo de um arquivo de configuração para construir uma imagem personalizada do NanoBSD pode ser:
[.programlisting]
....
@@ -241,61 +345,71 @@ customize_cmd cust_allow_ssh_root
customize_cmd cust_nobeastie
....
+Todas as opções de compilação e instalação podem ser encontradas na página do manual man:src.conf[5], mas nem todas as opções podem ou devem ser usadas ao construir uma imagem do NanoBSD. As opções de compilação e instalação devem ser definidas de acordo com as necessidades da imagem sendo construída.
+
+Por exemplo, o cliente e servidor FTP podem não ser necessários. Adicionar `WITHOUT_FTP=TRUE` em um arquivo de configuração na seção `CONF_BUILD` evitará que eles sejam compilados. Além disso, se o aparelho NanoBSD não será usado para compilar programas, é possível adicionar `WITHOUT_BINUTILS=TRUE` na seção `CONF_INSTALL`; mas não na seção `CONF_BUILD`, pois eles serão usados para construir a imagem do NanoBSD.
+
+Não compilar um conjunto específico de programas - por meio de uma opção de compilação - reduz o tempo total de compilação e diminui o tamanho necessário para a imagem do disco, enquanto não instalar o mesmo conjunto específico de programas não reduz o tempo total de compilação.
+
=== Atualizando o NanoBSD
O processo de atualização do NanoBSD é relativamente simples:
[.procedure]
-. Crie uma nova imagem NanoBSD, como de costume.
-. Carregue a nova imagem em uma partição não usada de um dispositivo NanoBSD em execução.
-+
-A diferença mais importante deste passo da instalação inicial do NanoBSD é que agora, em vez de usar [.filename]#_. Disk.full# (que contém uma imagem do disco todo), a imagem [.filename]#\_.disk.image# está instalada (a qual contém uma imagem de uma única partição do sistema).
+====
+. Construa uma nova imagem do NanoBSD, como de costume.
+. Faça o upload da nova imagem para uma partição não utilizada de um aparelho NanoBSD em execução.
++
+A diferença mais importante deste passo em relação à instalação inicial do NanoBSD é que, em vez de usar o arquivo [.filename]#\_.disk.full# (que contém uma imagem do disco inteiro), é instalada a imagem [.filename]#_.disk.image# (que contém uma imagem de uma única partição do sistema).
. Reinicie e inicie o sistema a partir da partição recém-instalada.
. Se tudo correr bem, a atualização está concluída.
. Se algo der errado, reinicie a partição anterior (que contém a imagem antiga que estava em funcionamento) para restaurar a funcionalidade do sistema o mais rápido possível. Corrija quaisquer problemas da nova compilação e repita o processo.
+====
-Para instalar uma nova imagem no sistema NanoBSD, é possível usar o script [.filename]#updatep1# ou [.filename]#updatep2# localizado no diretório [.filename]#/root#, dependendo de qual partição o sistema atual está executando.
+Para instalar uma nova imagem em um sistema NanoBSD em execução, é possível usar o script [.filename]#updatep1# ou [.filename]#updatep2#, localizados no diretório [.filename]#/root#, dependendo de qual partição o sistema atual está sendo executado.
-De acordo com os serviços que estiverem disponíveis no servidor que contem a nova imagem NanoBSD e o tipo de transferência preferido, é possível seguir por uma destas três maneiras:
+Dependendo dos serviços disponíveis no host que está servindo a nova imagem do NanoBSD e do tipo de transferência preferido, é possível examinar uma dessas três opções:
-==== Usando man:ftp[1]
+==== Usando o comando man:ftp[1]
Se a velocidade de transferência estiver em primeiro lugar, use este exemplo:
-[source,shell]
+[source, shell]
....
# ftp myhost
get _.disk.image "| sh updatep1"
....
-==== Usando man:ssh[1]
+==== Usando o comando man:ssh[1]
Se uma transferência segura for preferida, considere usar este exemplo:
-[source,shell]
+[source, shell]
....
# ssh myhost cat _.disk.image.gz | zcat | sh updatep1
....
-==== Usando man:nc[1]
+==== Usando o comando man:nc[1]
-Tente este exemplo se o host remoto que contem a nova imagem não estiver executando o serviço man:ftpd[8] e nem o serviço man:sshd[8]:
+Experimente este exemplo se o host remoto não estiver executando os serviços man:ftpd[8] ou man:sshd[8]:
[.procedure]
+====
. Primeiramente, abra um socket TCP em modo escuta no host que serve a imagem e envie a imagem para o cliente:
+
-[source,shell]
+[source, shell]
....
myhost# nc -l 2222 < _.disk.image
....
+
[NOTE]
-====
-Certifique-se de que a porta usada não esteja bloqueada para receber conexões de entrada do host NanoBSD pelo firewall.
-====
+======
+Verifique se a porta utilizada não está bloqueada pelo firewall para receber conexões originadas do host NanoBSD.
+======
. Conecte-se ao host que está servindo a nova imagem e execute o script [.filename]#updatep1#:
+
-[source,shell]
+[source, shell]
....
# nc myhost 2222 | sh updatep1
....
+====
diff --git a/documentation/content/pt-br/articles/nanobsd/_index.po b/documentation/content/pt-br/articles/nanobsd/_index.po
new file mode 100644
index 0000000000..634715dc8d
--- /dev/null
+++ b/documentation/content/pt-br/articles/nanobsd/_index.po
@@ -0,0 +1,1567 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2023-01-21 20:00-0300\n"
+"PO-Revision-Date: 2023-05-12 19:10+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesnanobsd_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:1
+#: documentation/content/en/articles/nanobsd/_index.adoc:46
+#, no-wrap
+msgid "This document provides information about the NanoBSD tools, which can be used to create FreeBSD system images for embedded applications, suitable for use on a USB key, memory card or other mass storage media."
+msgstr ""
+"Este documento fornece informações sobre as ferramentas NanoBSD, que podem "
+"ser usadas para criar imagens de sistema FreeBSD para aplicações embarcadas, "
+"adequadas para uso em uma chave USB, cartão de memória ou outro meio de "
+"armazenamento em massa."
+
+#. type: Title ==
+#: documentation/content/en/articles/nanobsd/_index.adoc:1
+#: documentation/content/en/articles/nanobsd/_index.adoc:11
+#: documentation/content/en/articles/nanobsd/_index.adoc:52
+#, no-wrap
+msgid "Introduction to NanoBSD"
+msgstr "Introdução ao NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:56
+msgid ""
+"NanoBSD is a tool developed by {phk} and now maintained by {imp}. It "
+"creates a FreeBSD system image for embedded applications, suitable for use "
+"on a USB key, memory card or other mass storage media."
+msgstr ""
+"O NanoBSD é uma ferramenta desenvolvida por {phk} e agora mantida por {imp}. "
+"Ela cria uma imagem do sistema FreeBSD para aplicações embarcadas, adequada "
+"para uso em uma chave USB, cartão de memória ou outro meio de armazenamento "
+"em massa."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:60
+msgid ""
+"It can be used to build specialized install images, designed for easy "
+"installation and maintenance of systems commonly called \"computer appliances"
+"\". Computer appliances have their hardware and software bundled in the "
+"product, which means all applications are pre-installed. The appliance is "
+"plugged into an existing network and can begin working (almost) immediately."
+msgstr ""
+"Pode ser usado para construir imagens de instalação especializadas, "
+"projetadas para facilitar a instalação e manutenção de sistemas comumente "
+"chamados de \"computer appliances\". Os computer appliances têm seu hardware "
+"e software empacotados no produto, o que significa que todos os aplicativos "
+"estão pré-instalados. O aparelho é conectado a uma rede existente e pode "
+"começar a funcionar (quase) imediatamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:62
+msgid "The features of NanoBSD include:"
+msgstr "As características do NanoBSD incluem:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:64
+msgid ""
+"Ports and packages work as in FreeBSD - Every single application can be "
+"installed and used in a NanoBSD image, the same way as in FreeBSD."
+msgstr ""
+"Os Ports e pacotes funcionam como no FreeBSD - Cada aplicação pode ser "
+"instalada e usada em uma imagem NanoBSD, da mesma forma que no FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:65
+msgid ""
+"No missing functionality - If it is possible to do something with FreeBSD, "
+"it is possible to do the same thing with NanoBSD, unless the specific "
+"feature or features were explicitly removed from the NanoBSD image when it "
+"was created."
+msgstr ""
+"Nenhuma funcionalidade faltante - Se é possível fazer algo com o FreeBSD, é "
+"possível fazer a mesma coisa com o NanoBSD, a menos que a funcionalidade "
+"específica tenha sido explicitamente removida da imagem do NanoBSD quando "
+"ela foi criada."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:66
+msgid ""
+"Everything is read-only at run-time - It is safe to pull the power-plug. "
+"There is no necessity to run man:fsck[8] after a non-graceful shutdown of "
+"the system."
+msgstr ""
+"O sistema opera em modo read-only em tempo de execução - É seguro puxar o "
+"plugue de energia. Não há necessidade de executar o man:fsck[8] após um "
+"desligamento abrupto do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:67
+msgid ""
+"Easy to build and customize - Making use of just one shell script and one "
+"configuration file it is possible to build reduced and customized images "
+"satisfying any arbitrary set of requirements."
+msgstr ""
+"É fácil de compilar e personalizar - Usando apenas um script de shell e um "
+"arquivo de configuração, é possível criar imagens reduzidas e "
+"personalizadas, satisfazendo qualquer conjunto arbitrário de requisitos."
+
+#. type: Title ==
+#: documentation/content/en/articles/nanobsd/_index.adoc:69
+#, no-wrap
+msgid "NanoBSD Howto"
+msgstr "Guia do NanoBSD"
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:72
+#, no-wrap
+msgid "The Design of NanoBSD"
+msgstr "O Design do NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:76
+msgid ""
+"Once the image is present on the medium, it is possible to boot NanoBSD. "
+"The mass storage medium is divided into three parts by default:"
+msgstr ""
+"Uma vez que a imagem está presente no meio de armazenamento, é possível "
+"inicializar o NanoBSD. O meio de armazenamento em massa é dividido em três "
+"partes por padrão:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:78
+msgid "Two image partitions: `code#1` and `code#2`."
+msgstr "Duas partições de imagem: `code#1` e `code#2`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:79
+msgid ""
+"The configuration file partition, which can be mounted under the [."
+"filename]#/cfg# directory at run time."
+msgstr ""
+"A partição do arquivo de configuração, que pode ser montada sob o diretório ["
+".filename]#/cfg# em tempo de execução."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:81
+msgid "These partitions are normally mounted read-only."
+msgstr ""
+"Essas partições são normalmente montadas em modo read-only (somente leitura)."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:83
+msgid ""
+"The [.filename]#/etc# and [.filename]#/var# directories are man:md[4] "
+"(malloc) disks."
+msgstr ""
+"Os diretórios [.filename]#/etc# e [.filename]#/var# são discos man:md[4] "
+"(malloc)."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:86
+msgid ""
+"The configuration file partition persists under the [.filename]#/cfg# "
+"directory. It contains files for [.filename]#/etc# directory and is briefly "
+"mounted read-only right after the system boot, therefore it is required to "
+"copy modified files from [.filename]#/etc# back to the [.filename]#/cfg# "
+"directory if changes are expected to persist after the system restarts."
+msgstr ""
+"A partição do arquivo de configuração persiste no diretório [.filename]#/cfg#"
+". Ele contém arquivos para o diretório [.filename]#/etc# e é montado "
+"brevemente como somente leitura logo após a inicialização do sistema. "
+"Portanto, é necessário copiar os arquivos modificados do diretório [."
+"filename]#/etc# de volta para o diretório [.filename]#/cfg# se as alterações "
+"precisarem ser mantidas após a reinicialização do sistema."
+
+#. type: Block title
+#: documentation/content/en/articles/nanobsd/_index.adoc:87
+#, no-wrap
+msgid "Making Persistent Changes to [.filename]#/etc/resolv.conf#"
+msgstr ""
+"Fazendo alterações persistentes no arquivo [.filename]#/etc/resolv.conf#"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:98
+#, no-wrap
+msgid ""
+"# vi /etc/resolv.conf\n"
+"[...]\n"
+"# mount /cfg\n"
+"# cp /etc/resolv.conf /cfg\n"
+"# umount /cfg\n"
+msgstr ""
+"# vi /etc/resolv.conf\n"
+"[...]\n"
+"# mount /cfg\n"
+"# cp /etc/resolv.conf /cfg\n"
+"# umount /cfg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:105
+msgid ""
+"The partition containing [.filename]#/cfg# should be mounted only at boot "
+"time and while overriding the configuration files."
+msgstr ""
+"A partição que contém o diretório [.filename]#/cfg# deve ser montada somente "
+"no momento da inicialização e enquanto sobrescreve os arquivos de "
+"configuração."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:107
+msgid ""
+"Keeping [.filename]#/cfg# mounted at all times is not a good idea, "
+"especially if the NanoBSD system runs off a mass storage medium that may be "
+"adversely affected by a large number of writes to the partition (like when "
+"the filesystem syncer flushes data to the system disks)."
+msgstr ""
+"Manter o [.filename]#/cfg# montado o tempo todo não é uma boa idéia, "
+"especialmente se o sistema NanoBSD rodar em um meio de armazenamento em "
+"massa que pode ser afetado adversamente por um grande número de gravações na "
+"partição (como quando o sincronizador do sistema de arquivos libera dados "
+"para os discos do sistema)."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:109
+#, no-wrap
+msgid "Building a NanoBSD Image"
+msgstr "Construindo uma imagem NanoBSD"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:113
+msgid ""
+"A NanoBSD image is built using a simple [.filename]#nanobsd.sh# shell "
+"script, which can be found in the [.filename]#/usr/src/tools/tools/nanobsd# "
+"directory. This script creates an image, which can be copied on the storage "
+"medium using the man:dd[1] utility."
+msgstr ""
+"Uma imagem NanoBSD é compilada usando um simples shell script [."
+"filename]#nanobsd.sh#, que pode ser encontrado no diretório [.filename]#/usr/"
+"src/tools/tools/nanobsd#. Este script cria uma imagem, que pode ser copiada "
+"no meio de armazenamento usando o utilitário man:dd[1]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:115
+msgid "The necessary commands to build a NanoBSD image are:"
+msgstr "Os comandos necessários para construir uma imagem NanoBSD são:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:122
+#, no-wrap
+msgid ""
+"# cd /usr/src/tools/tools/nanobsd <.>\n"
+"# sh nanobsd.sh <.>\n"
+"# cd /usr/obj/nanobsd.full <.>\n"
+"# dd if=_.disk.full of=/dev/da0 bs=64k <.>\n"
+msgstr ""
+"# cd /usr/src/tools/tools/nanobsd <.>\n"
+"# sh nanobsd.sh <.>\n"
+"# cd /usr/obj/nanobsd.full <.>\n"
+"# dd if=_.disk.full of=/dev/da0 bs=64k <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:125
+msgid ""
+"Change the current directory to the base directory of the NanoBSD build "
+"script."
+msgstr ""
+"Altere o diretório atual para o diretório base do script de compilação do "
+"NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:127
+msgid "Start the build process."
+msgstr "Inicie o processo de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:129
+msgid ""
+"Change the current directory to the place where the built images are located."
+msgstr ""
+"Altere o diretório atual para o local onde as imagens compiladas estão "
+"localizadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:131
+msgid "Install NanoBSD onto the storage medium."
+msgstr "Instale o NanoBSD no meio de armazenamento."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:132
+#, no-wrap
+msgid "Options When Building a NanoBSD Image"
+msgstr "Opções ao compilar uma imagem NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:136
+msgid ""
+"When building a NanoBSD image, several build options can be passed to [."
+"filename]#nanobsd.sh# on the command line. These options can have a "
+"significant impact on the build process."
+msgstr ""
+"Ao construir uma imagem NanoBSD, várias opções de compilação podem ser "
+"passadas para [.filename]#nanobsd.sh# na linha de comando. Essas opções "
+"podem ter um impacto significativo no processo de compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:138
+msgid "Some options are for verbosity purposes:"
+msgstr "Algumas opções são para fins de verbosidade:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:140
+msgid "`-h`: prints the help summary page."
+msgstr "`-h`: imprime a página resumida de ajuda."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:141
+msgid "`-q`: makes output quieter."
+msgstr "`-q`: torna a saída mais silenciosa."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:142
+msgid "`-v`: makes output more verbose"
+msgstr "`-v`: torna a saída mais detalhada (verbose)"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:145
+msgid ""
+"Some other options can be used to restrict the building process. Sometimes "
+"it is not necessary to rebuild everything from sources, especially if an "
+"image has already been built, and only little change is made."
+msgstr ""
+"Algumas outras opções podem ser usadas para restringir o processo de "
+"compilação. Às vezes, não é necessário reconstruir tudo a partir das fontes, "
+"especialmente se uma imagem já foi compilada e apenas poucas alterações "
+"foram feitas."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:147
+msgid "`-k`: do not build the kernel"
+msgstr "`-k`: não compilar o kernel"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:148
+msgid "`-w`: do not build world"
+msgstr "`-w`: não compilar o mundo (world)"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:149
+msgid "`-b`: do not build either kernel and world"
+msgstr "`-b`: não compilar nem o kernel e nem o mundo (world)"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:150
+msgid ""
+"`-i`: do not build a disk image at all. As a file will not be created, it "
+"will not be possible to man:dd[1] it to a storage media."
+msgstr ""
+"`-i`: não compilar uma imagem de disco. Como um arquivo não será criado, não "
+"será possível usá-lo com o comando man:dd[1] para gravá-lo em um dispositivo "
+"de armazenamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:151
+msgid ""
+"`-f`: do not build a disk image of the first partition (which is useful for "
+"upgrade purposes)"
+msgstr ""
+"`-f`: não compilar uma imagem de disco para a primeira partição (o que é "
+"útil para fins de atualização)"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:152
+msgid ""
+"`-n`: add `-DNO_CLEAN` to `buildworld`, `buildkernel`. Also, all the files "
+"that have already been built in a previous run are kept."
+msgstr ""
+"`-n`: adiciona `-DNO_CLEAN` as etapas `buildworld` e `buildkernel`. Além "
+"disso, todos os arquivos que já foram compilados em uma execução anterior "
+"são mantidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:155
+msgid ""
+"A configuration file can be used to tweak as many elements as desired. Load "
+"it with `-c`"
+msgstr ""
+"Um arquivo de configuração pode ser usado para ajustar quantos elementos "
+"desejar. Carregue-o com `-c`"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:157
+msgid "The last options are:"
+msgstr "As últimas opções são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:159
+msgid ""
+"`-K`: do not install a kernel. A disk image without a kernel will not be "
+"able to achieve a normal boot sequence."
+msgstr ""
+"`-K`: não instalar um kernel. Uma imagem de disco sem um kernel não poderá "
+"executar uma sequência de inicialização normal."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:160
+#, no-wrap
+msgid "The Complete Image Building Process"
+msgstr "O Processo Completo de Compilação de Imagens"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:165
+msgid ""
+"The complete image building process is going through a lot of steps. The "
+"exact steps taken will depend on the chosen options when starting the "
+"script. Assuming the script is run with no particular options, this is what "
+"will happen."
+msgstr ""
+"O processo completo de compilação de imagens passa por muitas etapas. As "
+"etapas exatas dependerão das opções selecionadas ao iniciar o script. "
+"Supondo que o script seja executado sem opções específicas, isso é o que "
+"acontecerá."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:167
+msgid ""
+"`run_early_customize`: commands that are defined in a supplied configuration "
+"file."
+msgstr ""
+"`run_early_customize`: comandos que são definidos em um arquivo de "
+"configuração fornecido."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:168
+msgid ""
+"`clean_build`: Just cleans the build environment by deleting the previously "
+"built files."
+msgstr ""
+"`clean_build`: Apenas limpa o ambiente de compilação excluindo os arquivos "
+"previamente compilados."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:169
+msgid ""
+"`make_conf_build`: Assemble make.conffrom the `CONF_WORLD` and `CONF_BUILD` "
+"variables."
+msgstr ""
+"`make_conf_build`: Monta o arquivo make.conf a partir das variáveis "
+"`CONF_WORLD` e `CONF_BUILD`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:170
+msgid "`build_world`: Build world."
+msgstr "`build_world`: Compila o mundo (world)."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:171
+msgid "`build_kernel`: Build the kernel files."
+msgstr "`build_kernel`: Compila os arquivos do kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:172
+msgid "`clean_world`: Clean the destination directory."
+msgstr "`clean_world`: Limpa o diretório de destino."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:173
+msgid ""
+"`make_conf_install`: Assemble make.conf from the `CONF_WORLD` and "
+"`CONF_INSTALL` variables."
+msgstr ""
+"`make_conf_install`: Monta o arquivo make.conf a partir das variáveis "
+"`CONF_WORLD` e `CONF_INSTALL`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:174
+msgid "`install_world`: Install all files built during `buildworld`."
+msgstr ""
+"`install_world`: Instala todos os arquivos construídos durante o "
+"`buildworld`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:175
+msgid ""
+"`install_etc`: Install the necessary files in the [.filename]#/etc# "
+"directory, based on the `make distribution` command."
+msgstr ""
+"`install_etc`: Instala os arquivos necessários no diretório [.filename]#/etc#"
+", com base no comando `make distribution`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:176
+msgid ""
+"`setup_nanobsd_etc`: the first configuration specific to NanoBSD takes place "
+"at this stage. The [.filename]#/etc/diskless# is created and the root "
+"filesystem is defined as read-only."
+msgstr ""
+"`setup_nanobsd_etc`: a primeira configuração específica do NanoBSD ocorre "
+"nesta etapa. O diretório [.filename]#/etc/diskless# é criado e o sistema de "
+"arquivos raiz é definido como somente leitura."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:177
+msgid "`install_kernel`: the kernel and modules files are installed."
+msgstr "`install_kernel`: os arquivos do kernel e dos módulos são instalados."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:178
+msgid ""
+"`run_customize`: all the customizing routines defined by the user will be "
+"called."
+msgstr ""
+"`run_customize`: todas as rotinas de personalização definidas pelo usuário "
+"serão chamadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:179
+msgid ""
+"`setup_nanobsd`: a special configuration directory layout is setup. The [."
+"filename]#/usr/local/etc# gets moved to [.filename]#/etc/local# and a "
+"symbolic link is created back from [.filename]#/etc/local# to [.filename]#/"
+"usr/local/etc#."
+msgstr ""
+"`setup_nanobsd`: uma estrutura especial de diretórios de configuração é "
+"configurada. O diretório [.filename]#/usr/local/etc# é movido para [."
+"filename]#/etc/local# e um link simbólico é criado de volta de [.filename]#/"
+"etc/local# para [.filename]#/usr/local/etc#."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:180
+msgid "`prune_usr`: the empty directories from [.filename]#/usr# are removed."
+msgstr "`prune_usr`: os diretórios vazios de [.filename]#/usr# são removidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:181
+msgid ""
+"`run_late_customize`: the very last custom scripts can be run at this point."
+msgstr ""
+"`run_late_customize`: os últimos scripts personalizados podem ser executados "
+"neste ponto."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:182
+msgid "`fixup_before_diskimage`: List all installed files in a metalog"
+msgstr ""
+"`fixup_before_diskimage`: Lista todos os arquivos instalados em um metalog"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:183
+msgid ""
+"`create_diskimage`: creates the actual disk image, based on the disk "
+"geometries provides parameters."
+msgstr ""
+"`create_diskimage`: cria a imagem de disco, com base nos parâmetros de "
+"geometria de disco fornecidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:184
+msgid "`last_orders`: does nothing for now."
+msgstr "`last_orders`: não faz nada por enquanto."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:185
+#, no-wrap
+msgid "Customizing a NanoBSD Image"
+msgstr "Personalizando uma imagem NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:189
+msgid ""
+"This is probably the most important and most interesting feature of "
+"NanoBSD. This is also where you will be spending most of the time when "
+"developing with NanoBSD."
+msgstr ""
+"Esta é provavelmente a característica mais importante e mais interessante do "
+"NanoBSD. É também onde você passará a maior parte do tempo ao desenvolver "
+"com o NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:191
+msgid ""
+"Invocation of the following command will force the [.filename]#nanobsd.sh# "
+"to read its configuration from [.filename]#myconf.nano# located in the "
+"current directory:"
+msgstr ""
+"A invocação do seguinte comando forçará o [.filename]#nanobsd.sh# a ler sua "
+"configuração de [.filename]#myconf.nano# localizado no diretório atual:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:195
+#, no-wrap
+msgid "# sh nanobsd.sh -c myconf.nano\n"
+msgstr "# sh nanobsd.sh -c myconf.nano\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:198
+msgid "Customization is done in two ways:"
+msgstr "A personalização é feita de duas maneiras:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:200
+msgid "Configuration options"
+msgstr "Opções de configuração"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:201
+msgid "Custom functions"
+msgstr "Funções personalizadas"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:202
+#, no-wrap
+msgid "Configuration Options"
+msgstr "Opções de configuração"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:207
+msgid ""
+"With configuration settings, it is possible to configure options passed to "
+"both the `buildworld` and `installworld` stages of the NanoBSD build "
+"process, as well as internal options passed to the main build process of "
+"NanoBSD. Through these options it is possible to cut the system down, so it "
+"will fit on as little as 64MB. You can use the configuration options to "
+"trim down FreeBSD even more, until it will consists of just the kernel and "
+"two or three files in the userland."
+msgstr ""
+"Com as configurações de configuração, é possível configurar as opções "
+"passadas tanto para as etapas `buildworld` quanto `installworld` do processo "
+"de compilação do NanoBSD, bem como opções internas passadas para o processo "
+"de compilação principal do NanoBSD. Através dessas opções, é possível "
+"reduzir o sistema, para que ele caiba em tão pouco quanto 64MB. Você pode "
+"usar as opções de configuração para reduzir ainda mais o FreeBSD, até que "
+"consista apenas no kernel e em dois ou três arquivos no espaço do usuário."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:210
+msgid ""
+"The configuration file consists of configuration options, which override the "
+"default values. The most important directives are:"
+msgstr ""
+"O arquivo de configuração consiste em opções de configuração, que substituem "
+"os valores padrão. As diretivas mais importantes são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:212
+msgid "`NANO_NAME` - Name of build (used to construct the workdir names)."
+msgstr ""
+"`NANO_NAME` - Nome da compilação (usado para construir os nomes dos "
+"diretórios de trabalho)."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:213
+msgid "`NANO_SRC` - Path to the source tree used to build the image."
+msgstr ""
+"`NANO_SRC` - Caminho para a árvore de código-fonte usada para compilar a "
+"imagem."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:214
+msgid "`NANO_KERNEL` - Name of kernel configuration file used to build kernel."
+msgstr ""
+"`NANO_KERNEL` - Nome do arquivo de configuração do kernel usado para "
+"compilar o kernel."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:215
+msgid "`CONF_BUILD` - Options passed to the `buildworld` stage of the build."
+msgstr ""
+"`CONF_BUILD` - Opções passadas para o estágio `buildworld` da compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:216
+msgid ""
+"`CONF_INSTALL` - Options passed to the `installworld` stage of the build."
+msgstr ""
+"`CONF_INSTALL` - Opções passadas para o estágio `installworld` da compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:217
+msgid ""
+"`CONF_WORLD` - Options passed to both the `buildworld` and the "
+"`installworld` stage of the build."
+msgstr ""
+"`CONF_WORLD` - Opções passadas tanto para o estágio `buildworld` quanto para "
+"o estágio `installworld` da compilação."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:218
+msgid ""
+"`FlashDevice` - Defines what type of media to use. Check [."
+"filename]#FlashDevice.sub# for more details."
+msgstr ""
+"`FlashDevice` - Define qual tipo de mídia usar. Verifique [."
+"filename]#FlashDevice.sub# para obter mais detalhes."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:220
+msgid ""
+"There are many more configuration options that could be relevant depending "
+"upon the kind of NanoBSD that is desired."
+msgstr ""
+"Existem muitas outras opções de configuração que podem ser relevantes, "
+"dependendo do tipo de NanoBSD desejado."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:221
+#, no-wrap
+msgid "General Customization"
+msgstr "Personalização Geral"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:224
+msgid ""
+"There are three stages, by design, at which it is possible to make changes "
+"that affect the building process, just by setting up a variable in the "
+"provided configuration file:"
+msgstr ""
+"Existem três estágios, por design, nos quais é possível fazer alterações que "
+"afetam o processo de compilação, apenas configurando uma variável no arquivo "
+"de configuração fornecido:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:226
+msgid "`run_early_customize`: before anything else happens."
+msgstr "`run_early_customize`: antes de qualquer outra coisa acontecer."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:227
+msgid "`run_customize`: after all the standard files have been laid out"
+msgstr ""
+"`run_customize`: depois que todos os arquivos padrões tiverem sido "
+"organizados"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:228
+msgid ""
+"`run_late_customize`: at the very end of the process, just before the actual "
+"NanoBSD image is built."
+msgstr ""
+"`run_late_customize`: no final do processo, antes da compilação da imagem "
+"real do NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:230
+msgid ""
+"To customize a NanoBSD image, at any of these steps, it is best to add a "
+"specific value to one of the corresponding variables."
+msgstr ""
+"Para personalizar uma imagem do NanoBSD em qualquer um desses passos, é "
+"melhor adicionar um valor específico a uma das variáveis correspondentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:233
+msgid ""
+"The `NANO_EARLY_CUSTOMIZE` variable is used at the first step of the "
+"building process. At this point, there is no example as to what can be done "
+"using that variable, but it may change in the future."
+msgstr ""
+"A variável `NANO_EARLY_CUSTOMIZE` é usada no primeiro passo do processo de "
+"construção. Neste momento, não há um exemplo específico do que pode ser "
+"feito usando essa variável, mas isso pode mudar no futuro."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:236
+msgid ""
+"The `NANO_CUSTOMIZE` variable is used after the kernel, world and etc "
+"configuration files have been installed, and the etc files have been setup "
+"as to be a NanoBSD installation. So it is the correct step in the building "
+"process to tweak configuration options and add packages, like in the "
+"cust_nobeastie example."
+msgstr ""
+"A variável `NANO_CUSTOMIZE` é usada depois que os arquivos de configuração "
+"do kernel, world e etc foram instalados, e os arquivos etc foram "
+"configurados como uma instalação do NanoBSD. Portanto, é o passo correto no "
+"processo de compilação para ajustar opções de configuração e adicionar "
+"pacotes, como no exemplo cust_nobeastie."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:240
+msgid ""
+"The `NANO_LATE_CUSTOMIZE` variable is used just before the disk image is "
+"created, so it is the very last moment to change anything. Remember that "
+"the `setup_nanobsd` routine already executed and that the [.filename]#etc#, "
+"[.filename]#conf# and [.filename]#cfg# directories and subdirectories are "
+"already modified, so it is not time to change them at this point. Rather, "
+"it is possible to add or remove specific files."
+msgstr ""
+"A variável `NANO_LATE_CUSTOMIZE` é usada imediatamente antes da criação da "
+"imagem do disco, portanto, é o momento final para fazer qualquer alteração. "
+"Lembre-se de que a rotina `setup_nanobsd` já foi executada e que os "
+"diretórios [.filename]#etc#, [.filename]#conf# e [.filename]#cfg# e seus "
+"subdiretórios já foram modificados, então não é o momento de alterá-los "
+"neste ponto. Em vez disso, é possível adicionar ou remover arquivos "
+"específicos."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:241
+#, no-wrap
+msgid "Booting Options"
+msgstr "Opções de Inicialização"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:245
+msgid ""
+"There are also variables that can change the way the NanoBSD image boots. "
+"Two options are passed to man:boot0cfg[8] to initialize the boot sector of "
+"the disk image:"
+msgstr ""
+"Também existem variáveis que podem alterar a forma como a imagem do NanoBSD "
+"é inicializada. Duas opções são passadas para o man:boot0cfg[8] para "
+"inicializar o setor de boot da imagem do disco:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:247
+msgid "`NANO_BOOT0CFG`"
+msgstr "`NANO_BOOT0CFG`"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:248
+msgid "`NANO_BOOTLOADER`"
+msgstr "`NANO_BOOTLOADER`"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:253
+msgid ""
+"With `NANO_BOOTLOADER` a bootloader file can be chosen. The most common "
+"possible options are between [.filename]#boot0sio# and [.filename]#boot0# "
+"depending on whether the appliance has a serial port or not. It is best to "
+"avoid supplying a different bootloader, but it is possible. To do so, it is "
+"best to have checked the extref:{handbook}boot[FreeBSD Handbook] chapter on "
+"the boot process."
+msgstr ""
+"Com o `NANO_BOOTLOADER`, é possível escolher um arquivo de bootloader. As "
+"opções mais comuns são entre [.filename]#boot0sio# e [.filename]#boot0#, "
+"dependendo se o aparelho possui uma porta serial ou não. É melhor evitar "
+"fornecer um bootloader diferente, mas é possível fazê-lo. Para isso, é "
+"recomendável ter verificado o capítulo sobre o processo de inicialização no "
+"extref:{handbook}boot[Handbook do FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:260
+msgid ""
+"With `NANO_BOOT0CFG`, the booting process can be tweaked, like selecting on "
+"which partition the NanoBSD image will actually boot. It is best to check "
+"the man:boot0cfg[8] page before changing the default value of this "
+"variable. One option that could be interesting to change is the timeout of "
+"the booting procedure. To do so, the `NANO_BOOT0CFG` variable can be "
+"changed to `\"-o packet -s 1 -m 3 -t 36\"`. That way the booting process "
+"would start after approximately 2 seconds; because it is rare that waiting "
+"10 seconds before actually booting is desired."
+msgstr ""
+"Com o `NANO_BOOT0CFG`, é possível ajustar o processo de inicialização, como "
+"selecionar em qual partição a imagem do NanoBSD será inicializada. É melhor "
+"verificar a página man:boot0cfg[8] antes de alterar o valor padrão dessa "
+"variável. Uma opção interessante para alterar é o tempo limite do "
+"procedimento de inicialização. Para fazer isso, a variável `NANO_BOOT0CFG` "
+"pode ser alterada para `\"-o packet -s 1 -m 3 -t 36\"`. Dessa forma, o "
+"processo de inicialização começaria após aproximadamente 2 segundos, porque "
+"é raro que seja desejado esperar 10 segundos antes de iniciar o boot."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:263
+msgid ""
+"Good to know: the `NANO_BOOT2CFG` variable is only used in the "
+"`cust_comconsole` routine that can be called at the `NANO_CUSTOMIZE` step if "
+"the appliance has a serial port and all console input and output has to take "
+"place through it. Be sure to check the relevant parameters of the serial "
+"port, as setting a bad parameter value can make it useless."
+msgstr ""
+"Bom saber: a variável `NANO_BOOT2CFG` é usada apenas na rotina "
+"`cust_comconsole`, que pode ser chamada no passo `NANO_CUSTOMIZE` se o "
+"aparelho tiver uma porta serial e toda a entrada e saída do console tiver "
+"que ser feita por meio dela. Certifique-se de verificar os parâmetros "
+"relevantes da porta serial, pois definir um valor incorreto pode torná-la "
+"inútil."
+
+#. type: Title =====
+#: documentation/content/en/articles/nanobsd/_index.adoc:264
+#, no-wrap
+msgid "Disk Image Creation"
+msgstr "Criação da Imagem do Disco"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:268
+msgid ""
+"In the end of the boot process is the disk image creation. With this step, "
+"the NanoBSD script provides a file that can simply be copied onto a disk for "
+"the appliance, and that will make it boot and start."
+msgstr ""
+"No final do processo de inicialização está a criação da imagem do disco. Com "
+"essa etapa, o script do NanoBSD fornece um arquivo que pode ser simplesmente "
+"copiado para um disco do aparelho, e isso fará com que ele seja inicializado "
+"e iniciado."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:270
+msgid ""
+"There are many variable that need to be set just right for the script to "
+"produce a usable disk image."
+msgstr ""
+"Existem muitas variáveis que precisam ser configuradas corretamente para que "
+"o script produza uma imagem de disco utilizável."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:272
+msgid ""
+"The `NANO_DRIVE` variable must be set to the drive name of the media at "
+"runtime. Usually, the default value `ada0`, which represents the first `IDE`/"
+"`ATA`/`SATA` device on the appliance is expected to be the correct one, but "
+"a different type of storage could also be used - like a USB key, in which "
+"case, it would rather be da0."
+msgstr ""
+"A variável `NANO_DRIVE` deve ser definida como o nome da unidade de mídia em "
+"tempo de execução. Geralmente, o valor padrão `ada0`, que representa o "
+"primeiro dispositivo `IDE`/`ATA`/`SATA` no aparelho, é esperado como o "
+"correto, mas um tipo diferente de armazenamento também pode ser usado - como "
+"uma chave USB, nesse caso seria `da0`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:273
+msgid ""
+"The `NANO_MEDIASIZE` variable must be set to the size (in 512 bytes sectors) "
+"of the storage media that will be used. If you set it wrong, it is possible "
+"that the NanoBSD image will not boot at all, and a message at boot time will "
+"be warning about incorrect disk geometry."
+msgstr ""
+"A variável `NANO_MEDIASIZE` deve ser definida como o tamanho (em setores de "
+"512 bytes) da mídia de armazenamento que será usada. Se você definir isso "
+"incorretamente, é possível que a imagem do NanoBSD não inicialize e uma "
+"mensagem durante a inicialização avisará sobre a geometria de disco "
+"incorreta."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:275
+msgid ""
+"The [.filename]#/etc#, [.filename]#/var#, and [.filename]#/tmp# directories "
+"are allocated as man:md[4] (malloc) disks at boot time; so their sizes can "
+"be tailored to suit the appliance needs. The `NANO_RAM_ETCSIZE` variable "
+"sets the size of the [.filename]#/etc#; and the `NANO_RAM_TMPVARSIZE` "
+"variable sets the size of both the [.filename]#/var# and [.filename]#/tmp# "
+"directory, as [.filename]#/tmp# is symbolically linked to [.filename]#/var/"
+"tmp#. By default, both malloc disks sizes are set at 20MB each. They can "
+"always be changed, but usually the [.filename]#/etc# does not grow too much "
+"in size, so 20MB is a good starting point, whereas the [.filename]#/var# and "
+"especially [.filename]#/tmp# can grow much larger if not careful about it. "
+"For memory constrained systems, smaller filesystem sizes may be chosen."
+msgstr ""
+"Os diretórios [.filename]#/etc#, [.filename]#/var# e [.filename]#/tmp# são "
+"alocados como discos man:md[4] (malloc) durante a inicialização; portanto, "
+"seus tamanhos podem ser ajustados para atender às necessidades do aparelho. "
+"A variável `NANO_RAM_ETCSIZE` define o tamanho do [.filename]#/etc# e a "
+"variável `NANO_RAM_TMPVARSIZE` define o tamanho tanto do diretório [."
+"filename]#/var# quanto do diretório [.filename]#/tmp#, já que [."
+"filename]#/tmp# está simbolicamente vinculado a [.filename]#/var/tmp#. Por "
+"padrão, ambos os tamanhos dos discos malloc são definidos em 20MB cada. Eles "
+"podem ser alterados, mas geralmente o [.filename]#/etc# não cresce muito em "
+"tamanho, portanto, 20MB é um bom ponto de partida, enquanto o [."
+"filename]#/var# e especialmente o [.filename]#/tmp# podem aumentar muito de "
+"tamanho se não tiver cuidado. Para sistemas com restrição de memória, "
+"tamanhos menores de sistema de arquivos podem ser escolhidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:276
+msgid ""
+"As NanoBSD is mainly designed to build a system image for an appliance, it "
+"is assumed that the storage media used will be relatively small. For that "
+"reason, the filesystem that is laid out is configured to have a small block "
+"size (4Kb) and a small fragment size (512b). The configuration options of "
+"the filesystem can be modified through the `NANO_NEWFS` variable, but the "
+"syntax must respect the man:newfs[8] command format. Also, by default, the "
+"filesystem has Soft Updates enabled. The extref:{handbook}[FreeBSD Handbook] "
+"can be checked about this."
+msgstr ""
+"Como o NanoBSD é projetado principalmente para criar uma imagem de sistema "
+"para um aparelho, presume-se que a mídia de armazenamento usada seja "
+"relativamente pequena. Por esse motivo, o sistema de arquivos que é "
+"organizado é configurado com um tamanho de bloco pequeno (4Kb) e um tamanho "
+"de fragmento pequeno (512b). As opções de configuração do sistema de "
+"arquivos podem ser modificadas por meio da variável `NANO_NEWFS`, mas a "
+"sintaxe deve respeitar o formato do comando man:newfs[8]. Além disso, por "
+"padrão, o sistema de arquivos tem Soft Updates ativado. O extref:{handbook}["
+"Handbook do FreeBSD] pode ser consultado para obter mais informações sobre "
+"isso."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:277
+msgid ""
+"The different partition sizes can be set through the use of `NANO_CODESIZE`, "
+"`NANO_CONFSIZE`, and `NANO_DATASIZE` as a multiple of 512 bytes sectors. "
+"`NANO_CODESIZE` defines the size of the first two image partitions: `code#1` "
+"and `code#2`. They have to be big enough to hold all the files that will be "
+"produced as a result of the `buildworld` and `buildkernel` processes. "
+"`NANO_CONFSIZE` defines the size of the configuration file partition, so it "
+"does not need to be very big; but do not make it so small that it will not "
+"hold all configuration files. Finally, `NANO_DATASIZE` defines the size of "
+"an optional partition, that can be used on the appliance. The last partition "
+"can be used, for example, to keep files created on the fly on disk."
+msgstr ""
+"Os diferentes tamanhos das partições podem ser definidos por meio do uso de "
+"`NANO_CODESIZE`, `NANO_CONFSIZE` e `NANO_DATASIZE` como múltiplos de setores "
+"de 512 bytes. `NANO_CODESIZE` define o tamanho das duas primeiras partições "
+"da imagem: `code#1` e `code#2`. Elas devem ser grandes o suficiente para "
+"armazenar todos os arquivos que serão produzidos como resultado dos "
+"processos `buildworld` e `buildkernel`. `NANO_CONFSIZE` define o tamanho da "
+"partição do arquivo de configuração, portanto, não precisa ser muito grande, "
+"mas não a faça tão pequena que não possa armazenar todos os arquivos de "
+"configuração. Por fim, `NANO_DATASIZE` define o tamanho de uma partição "
+"opcional que pode ser usada no aparelho. A última partição pode ser usada, "
+"por exemplo, para manter arquivos criados dinamicamente no disco."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:278
+#, no-wrap
+msgid "Custom Functions"
+msgstr "Funções Personalizadas"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:282
+msgid ""
+"It is possible to fine-tune NanoBSD using shell functions in the "
+"configuration file. The following example illustrates the basic model of "
+"custom functions:"
+msgstr ""
+"É possível ajustar o NanoBSD usando funções de shell no arquivo de "
+"configuração. O exemplo a seguir ilustra o modelo básico de funções "
+"personalizadas:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:290
+#, no-wrap
+msgid ""
+"cust_foo () (\n"
+"\techo \"bar=baz\" > \\\n"
+"\t\t${NANO_WORLDDIR}/etc/foo\n"
+")\n"
+"customize_cmd cust_foo\n"
+msgstr ""
+"cust_foo () (\n"
+"\techo \"bar=baz\" > \\\n"
+"\t\t${NANO_WORLDDIR}/etc/foo\n"
+")\n"
+"customize_cmd cust_foo\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:293
+msgid ""
+"A more useful example of a customization function is the following, which "
+"changes the default size of the [.filename]#/etc# directory from 5MB to 30MB:"
+msgstr ""
+"Um exemplo mais útil de uma função de personalização é o seguinte, que "
+"altera o tamanho padrão do diretório [.filename]#/etc# de 5MB para 30MB:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:301
+#, no-wrap
+msgid ""
+"cust_etc_size () (\n"
+"\tcd ${NANO_WORLDDIR}/conf\n"
+"\techo 30000 > default/etc/md_size\n"
+")\n"
+"customize_cmd cust_etc_size\n"
+msgstr ""
+"cust_etc_size () (\n"
+"\tcd ${NANO_WORLDDIR}/conf\n"
+"\techo 30000 > default/etc/md_size\n"
+")\n"
+"customize_cmd cust_etc_size\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:304
+msgid ""
+"There are a few default pre-defined customization functions ready for use:"
+msgstr ""
+"Existem algumas funções de customização pré-definidas por padrão e prontas "
+"para uso:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:306
+msgid ""
+"`cust_comconsole` - Disables man:getty[8] on the VGA devices (the [."
+"filename]#/dev/ttyv*# device nodes) and enables the use of the COM1 serial "
+"port as the system console."
+msgstr ""
+"`cust_comconsole` - Desabilita o man:getty[8] nos dispositivos VGA (os nós "
+"de dispositivo [.filename]#/dev/ttyv*#) e habilita o uso da porta serial "
+"COM1 como console do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:307
+msgid "`cust_allow_ssh_root` - Allow `root` to login via man:sshd[8]."
+msgstr ""
+"`cust_allow_ssh_root` - Permite que o usuário `root` faça login via "
+"man:sshd[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:308
+msgid ""
+"`cust_install_files` - Installs files from the [.filename]#nanobsd/Files# "
+"directory, which contains some useful scripts for system administration."
+msgstr ""
+"`cust_install_files` - Instala arquivos do diretório [.filename]#nanobsd/"
+"Files#, que contém alguns scripts úteis para administração do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:309
+msgid ""
+"`cust_pkgng` - Installs packages from the [.filename]#nanobsd/Pkg# directory "
+"(needs also pkg-* package to bootstrap)."
+msgstr ""
+"`cust_pkgng` - Instala pacotes do diretório [.filename]#nanobsd/Pkg#, ("
+"necessita também do pacote pkg-* para inicialização)."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:310
+#, no-wrap
+msgid "Adding Packages"
+msgstr "Adicionando Pacotes"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:313
+msgid ""
+"Packages can be added to a NanoBSD image, to provide specific "
+"functionalities on the appliance. To do so, either:"
+msgstr ""
+"Pacotes podem ser adicionados a uma imagem do NanoBSD para fornecer "
+"funcionalidades específicas no aparelho. Para fazer isso, você pode escolher "
+"uma das seguintes opções:"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:315
+msgid "Add the `cust_pkgng` to the `NANO_CUSTOMIZE` variable, or"
+msgstr "Adicionar `cust_pkgng` à variável `NANO_CUSTOMIZE`, ou"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:316
+msgid ""
+"Add a `'customize_cmd cust_pkgng'` command in a customized configuration "
+"file."
+msgstr ""
+"Adicionar o comando `'customize_cmd cust_pkgng'` em um arquivo de "
+"configuração personalizado."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:319
+msgid ""
+"Both methods achieve the same result: launching the `cust_pkgng` routine. "
+"This routine will go through `NANO_PACKAGE_DIR` directory to find either all "
+"packages or just the list of packages in the `NANO_PACKAGE_LIST` variable."
+msgstr ""
+"Ambos os métodos alcançam o mesmo resultado: executar a rotina `cust_pkgng`. "
+"Essa rotina percorrerá o diretório `NANO_PACKAGE_DIR` para encontrar todos "
+"os pacotes ou apenas a lista de pacotes na variável `NANO_PACKAGE_LIST`."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:325
+msgid ""
+"It is common, when installing applications through pkg on a standard FreeBSD "
+"environment, that the install process puts configuration files, in the [."
+"filename]#usr/local/etc# directory, and startup scripts in the [.filename]#/"
+"usr/local/etc/rc.d# directory. So, after the required packages have been "
+"installed, they need to be configured in order for them to start right out "
+"of the box. To do so, the necessary configuration files have to be "
+"installed in the correct directories. This can be achieved by writing "
+"dedicated routines or the generic `cust_install_files` routine can be used "
+"to lay out files properly from the [.filename]#/usr/src/tools/tools/nanobsd/"
+"Files# directory. Usually a statement, sometimes multiple statements, in "
+"the [.filename]#/etc/rc.conf# also needs to be added for each package."
+msgstr ""
+"É comum, ao instalar aplicativos por meio do pkg em um ambiente FreeBSD "
+"padrão, que o processo de instalação coloque arquivos de configuração no "
+"diretório [.filename]#usr/local/etc# e scripts de inicialização no diretório "
+"[.filename]#/usr/local/etc/rc.d#. Portanto, após a instalação dos pacotes "
+"necessários, eles precisam ser configurados para iniciar imediatamente. Para "
+"fazer isso, os arquivos de configuração necessários devem ser instalados nos "
+"diretórios corretos. Isso pode ser feito escrevendo rotinas dedicadas ou "
+"utilizando a rotina genérica `cust_install_files` para organizar os arquivos "
+"corretamente a partir do diretório [.filename]#/usr/src/tools/tools/nanobsd/"
+"Files#. Geralmente, também é necessário adicionar uma ou várias declarações "
+"no arquivo [.filename]#/etc/rc.conf# para cada pacote."
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:326
+#, no-wrap
+msgid "Configuration File Example"
+msgstr "Exemplo do arquivo de configuração"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:329
+msgid ""
+"A complete example of a configuration file for building a custom NanoBSD "
+"image can be:"
+msgstr ""
+"Um exemplo completo de um arquivo de configuração para construir uma imagem "
+"personalizada do NanoBSD pode ser:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:336
+#, no-wrap
+msgid ""
+"NANO_NAME=custom\n"
+"NANO_SRC=/usr/src\n"
+"NANO_KERNEL=MYKERNEL\n"
+"NANO_IMAGES=2\n"
+msgstr ""
+"NANO_NAME=custom\n"
+"NANO_SRC=/usr/src\n"
+"NANO_KERNEL=MYKERNEL\n"
+"NANO_IMAGES=2\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:342
+#, no-wrap
+msgid ""
+"CONF_BUILD='\n"
+"WITHOUT_KLDLOAD=YES\n"
+"WITHOUT_NETGRAPH=YES\n"
+"WITHOUT_PAM=YES\n"
+"'\n"
+msgstr ""
+"CONF_BUILD='\n"
+"WITHOUT_KLDLOAD=YES\n"
+"WITHOUT_NETGRAPH=YES\n"
+"WITHOUT_PAM=YES\n"
+"'\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:358
+#, no-wrap
+msgid ""
+"CONF_INSTALL='\n"
+"WITHOUT_ACPI=YES\n"
+"WITHOUT_BLUETOOTH=YES\n"
+"WITHOUT_FORTRAN=YES\n"
+"WITHOUT_HTML=YES\n"
+"WITHOUT_LPR=YES\n"
+"WITHOUT_MAN=YES\n"
+"WITHOUT_SENDMAIL=YES\n"
+"WITHOUT_SHAREDOCS=YES\n"
+"WITHOUT_EXAMPLES=YES\n"
+"WITHOUT_INSTALLLIB=YES\n"
+"WITHOUT_CALENDAR=YES\n"
+"WITHOUT_MISC=YES\n"
+"WITHOUT_SHARE=YES\n"
+"'\n"
+msgstr ""
+"CONF_INSTALL='\n"
+"WITHOUT_ACPI=YES\n"
+"WITHOUT_BLUETOOTH=YES\n"
+"WITHOUT_FORTRAN=YES\n"
+"WITHOUT_HTML=YES\n"
+"WITHOUT_LPR=YES\n"
+"WITHOUT_MAN=YES\n"
+"WITHOUT_SENDMAIL=YES\n"
+"WITHOUT_SHAREDOCS=YES\n"
+"WITHOUT_EXAMPLES=YES\n"
+"WITHOUT_INSTALLLIB=YES\n"
+"WITHOUT_CALENDAR=YES\n"
+"WITHOUT_MISC=YES\n"
+"WITHOUT_SHARE=YES\n"
+"'\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:369
+#, no-wrap
+msgid ""
+"CONF_WORLD='\n"
+"WITHOUT_BIND=YES\n"
+"WITHOUT_MODULES=YES\n"
+"WITHOUT_KERBEROS=YES\n"
+"WITHOUT_GAMES=YES\n"
+"WITHOUT_RESCUE=YES\n"
+"WITHOUT_LOCALES=YES\n"
+"WITHOUT_SYSCONS=YES\n"
+"WITHOUT_INFO=YES\n"
+"'\n"
+msgstr ""
+"CONF_WORLD='\n"
+"WITHOUT_BIND=YES\n"
+"WITHOUT_MODULES=YES\n"
+"WITHOUT_KERBEROS=YES\n"
+"WITHOUT_GAMES=YES\n"
+"WITHOUT_RESCUE=YES\n"
+"WITHOUT_LOCALES=YES\n"
+"WITHOUT_SYSCONS=YES\n"
+"WITHOUT_INFO=YES\n"
+"'\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:371
+#, no-wrap
+msgid "FlashDevice SanDisk 1G\n"
+msgstr "FlashDevice SanDisk 1G\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:376
+#, no-wrap
+msgid ""
+"cust_nobeastie() (\n"
+"\ttouch ${NANO_WORLDDIR}/boot/loader.conf\n"
+"\techo \"beastie_disable=\\\"YES\\\"\" >> ${NANO_WORLDDIR}/boot/loader.conf\n"
+")\n"
+msgstr ""
+"cust_nobeastie() (\n"
+"\ttouch ${NANO_WORLDDIR}/boot/loader.conf\n"
+"\techo \"beastie_disable=\\\"YES\\\"\" >> ${NANO_WORLDDIR}/boot/loader.conf\n"
+")\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:381
+#, no-wrap
+msgid ""
+"customize_cmd cust_comconsole\n"
+"customize_cmd cust_install_files\n"
+"customize_cmd cust_allow_ssh_root\n"
+"customize_cmd cust_nobeastie\n"
+msgstr ""
+"customize_cmd cust_comconsole\n"
+"customize_cmd cust_install_files\n"
+"customize_cmd cust_allow_ssh_root\n"
+"customize_cmd cust_nobeastie\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:385
+msgid ""
+"All the build and install compilation options can be found in the man:src."
+"conf[5] man page, but not all options can or should be used when building a "
+"NanoBSD image. The build and install options should be defined according to "
+"the needs of the image being built."
+msgstr ""
+"Todas as opções de compilação e instalação podem ser encontradas na página "
+"do manual man:src.conf[5], mas nem todas as opções podem ou devem ser usadas "
+"ao construir uma imagem do NanoBSD. As opções de compilação e instalação "
+"devem ser definidas de acordo com as necessidades da imagem sendo construída."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:389
+msgid ""
+"For example, the ftp client and server might not be needed. Adding "
+"`WITHOUT_FTP=TRUE` to a configuration file in the `CONF_BUILD` section will "
+"avoid having them built. Also, if the NanoBSD appliance will not be used to "
+"build programs then it is possible to add the `WITHOUT_BINUTILS=TRUE` in the "
+"`CONF_INSTALL` section; but not in the `CONF_BUILD` section as they will be "
+"used to build the NanoBSD image."
+msgstr ""
+"Por exemplo, o cliente e servidor FTP podem não ser necessários. Adicionar "
+"`WITHOUT_FTP=TRUE` em um arquivo de configuração na seção `CONF_BUILD` "
+"evitará que eles sejam compilados. Além disso, se o aparelho NanoBSD não "
+"será usado para compilar programas, é possível adicionar "
+"`WITHOUT_BINUTILS=TRUE` na seção `CONF_INSTALL`; mas não na seção "
+"`CONF_BUILD`, pois eles serão usados para construir a imagem do NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:391
+msgid ""
+"Not building a particular set of programs - through a compilation option - "
+"shortens the overall building time and lowers the required size for the disk "
+"image, whereas not installing the same specific set of programs does not "
+"lower the overall building time."
+msgstr ""
+"Não compilar um conjunto específico de programas - por meio de uma opção de "
+"compilação - reduz o tempo total de compilação e diminui o tamanho "
+"necessário para a imagem do disco, enquanto não instalar o mesmo conjunto "
+"específico de programas não reduz o tempo total de compilação."
+
+#. type: Title ===
+#: documentation/content/en/articles/nanobsd/_index.adoc:392
+#, no-wrap
+msgid "Updating NanoBSD"
+msgstr "Atualizando o NanoBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:395
+msgid "The update process of NanoBSD is relatively simple:"
+msgstr "O processo de atualização do NanoBSD é relativamente simples:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:399
+msgid "Build a new NanoBSD image, as usual."
+msgstr "Construa uma nova imagem do NanoBSD, como de costume."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:400
+msgid ""
+"Upload the new image into an unused partition of a running NanoBSD appliance."
+msgstr ""
+"Faça o upload da nova imagem para uma partição não utilizada de um aparelho "
+"NanoBSD em execução."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:402
+msgid ""
+"The most important difference of this step from the initial NanoBSD "
+"installation is that now instead of using [.filename]#\\_.disk.full# (which "
+"contains an image of the entire disk), the [.filename]#_.disk.image# image "
+"is installed (which contains an image of a single system partition)."
+msgstr ""
+"A diferença mais importante deste passo em relação à instalação inicial do "
+"NanoBSD é que, em vez de usar o arquivo [.filename]#\\_.disk.full# (que "
+"contém uma imagem do disco inteiro), é instalada a imagem [.filename]#_.disk."
+"image# (que contém uma imagem de uma única partição do sistema)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:403
+msgid "Reboot, and start the system from the newly installed partition."
+msgstr "Reinicie e inicie o sistema a partir da partição recém-instalada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:404
+msgid "If all goes well, the upgrade is finished."
+msgstr "Se tudo correr bem, a atualização está concluída."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:405
+msgid ""
+"If anything goes wrong, reboot back into the previous partition (which "
+"contains the old, working image), to restore system functionality as fast as "
+"possible. Fix any problems of the new build, and repeat the process."
+msgstr ""
+"Se algo der errado, reinicie a partição anterior (que contém a imagem antiga "
+"que estava em funcionamento) para restaurar a funcionalidade do sistema o "
+"mais rápido possível. Corrija quaisquer problemas da nova compilação e "
+"repita o processo."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:408
+msgid ""
+"To install new image onto the running NanoBSD system, it is possible to use "
+"either the [.filename]#updatep1# or [.filename]#updatep2# script located in "
+"the [.filename]#/root# directory, depending from which partition is running "
+"the current system."
+msgstr ""
+"Para instalar uma nova imagem em um sistema NanoBSD em execução, é possível "
+"usar o script [.filename]#updatep1# ou [.filename]#updatep2#, localizados no "
+"diretório [.filename]#/root#, dependendo de qual partição o sistema atual "
+"está sendo executado."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:410
+msgid ""
+"According to which services are available on host serving new NanoBSD image "
+"and what type of transfer is preferred, it is possible to examine one of "
+"these three ways:"
+msgstr ""
+"Dependendo dos serviços disponíveis no host que está servindo a nova imagem "
+"do NanoBSD e do tipo de transferência preferido, é possível examinar uma "
+"dessas três opções:"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:411
+#, no-wrap
+msgid "Using man:ftp[1]"
+msgstr "Usando o comando man:ftp[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:414
+msgid "If the transfer speed is in first place, use this example:"
+msgstr ""
+"Se a velocidade de transferência estiver em primeiro lugar, use este exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:419
+#, no-wrap
+msgid ""
+"# ftp myhost\n"
+"get _.disk.image \"| sh updatep1\"\n"
+msgstr ""
+"# ftp myhost\n"
+"get _.disk.image \"| sh updatep1\"\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:421
+#, no-wrap
+msgid "Using man:ssh[1]"
+msgstr "Usando o comando man:ssh[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:424
+msgid "If a secure transfer is preferred, consider using this example:"
+msgstr ""
+"Se uma transferência segura for preferida, considere usar este exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:428
+#, no-wrap
+msgid "# ssh myhost cat _.disk.image.gz | zcat | sh updatep1\n"
+msgstr "# ssh myhost cat _.disk.image.gz | zcat | sh updatep1\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/nanobsd/_index.adoc:430
+#, no-wrap
+msgid "Using man:nc[1]"
+msgstr "Usando o comando man:nc[1]"
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:433
+msgid ""
+"Try this example if the remote host is not running neither man:ftpd[8] or "
+"man:sshd[8] service:"
+msgstr ""
+"Experimente este exemplo se o host remoto não estiver executando os serviços "
+"man:ftpd[8] ou man:sshd[8]:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:437
+msgid ""
+"At first, open a TCP listener on host serving the image and make it send the "
+"image to client:"
+msgstr ""
+"Primeiramente, abra um socket TCP em modo escuta no host que serve a imagem "
+"e envie a imagem para o cliente:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:441
+#, no-wrap
+msgid "myhost# nc -l 2222 < _.disk.image\n"
+msgstr "myhost# nc -l 2222 < _.disk.image\n"
+
+#. type: delimited block = 6
+#: documentation/content/en/articles/nanobsd/_index.adoc:446
+msgid ""
+"Make sure that the used port is not blocked to receive incoming connections "
+"from NanoBSD host by firewall."
+msgstr ""
+"Verifique se a porta utilizada não está bloqueada pelo firewall para receber "
+"conexões originadas do host NanoBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/nanobsd/_index.adoc:448
+msgid ""
+"Connect to the host serving new image and execute [.filename]#updatep1# "
+"script:"
+msgstr ""
+"Conecte-se ao host que está servindo a nova imagem e execute o script [."
+"filename]#updatep1#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/nanobsd/_index.adoc:452
+#, no-wrap
+msgid "# nc myhost 2222 | sh updatep1\n"
+msgstr "# nc myhost 2222 | sh updatep1\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/new-users/_index.adoc b/documentation/content/pt-br/articles/new-users/_index.adoc
index faf0391c84..7c43238448 100644
--- a/documentation/content/pt-br/articles/new-users/_index.adoc
+++ b/documentation/content/pt-br/articles/new-users/_index.adoc
@@ -1,13 +1,15 @@
---
-title: Aos iniciantes em FreeBSD e UNIX
authors:
- - author: Annelise Anderson
+ -
+ author: 'Annelise Anderson'
email: andrsn@andrsn.stanford.edu
-releaseinfo: "$FreeBSD$"
+description: 'Introdução para iniciantes tanto no FreeBSD quanto no UNIX®'
+tags: ["Introduction", "basics", "FreeBSD", "UNIX"]
+title: 'Para iniciantes tanto no FreeBSD quanto no UNIX®'
trademarks: ["freebsd", "ibm", "microsoft", "opengroup", "general"]
---
-= Aos iniciantes em FreeBSD e UNIX
+= Para iniciantes tanto no FreeBSD quanto no UNIX®
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,18 +18,32 @@ trademarks: ["freebsd", "ibm", "microsoft", "opengroup", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/new-users/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Parabéns por instalar o FreeBSD! Esta introdução é para iniciantes em FreeBSD _e_ UNIX(R)-então vamos começar do básico.
+Parabéns por instalar o FreeBSD! Esta introdução é destinada a usuários iniciantes tanto no FreeBSD quanto no UNIX(R) - então ela começa com o básico.
'''
@@ -36,169 +52,169 @@ toc::[]
[[in-and-out]]
== Logando e Deslogando
-Entre com o usuário que você criou na instalação (quando você visualizar o prompt `login:`) ou como `root`. (Sua instalação do FreeBSD já terá uma conta para o `root`; esse usuário pode ir a qualquer lugar e fazer qualquer coisa, incluindo deletar arquivos essenciais do sistema, então tenha cuidado!) Os símbolos `%` e `#` no prompt (o seu pode ser diferente) indicam o tipo do usuário logado, o símbolo `%` indica um usuário comum e `#` indica que o usuário é `root`.
+Faça login (quando você ver `login:`) com o usuário que você criou durante a instalação ou como `root`. (Sua instalação do FreeBSD já terá uma conta para o usuário `root`, o qual pode ir a qualquer lugar e fazer qualquer coisa, incluindo excluir arquivos essenciais, então tenha cuidado!) Os símbolos % e # abaixo representam o prompt (o seu pode ser diferente), sendo que o % indica um usuário comum e o # indica o usuário `root`.
-Para se sair (e obter um novo `login:`), digite
+Para sair (e obter um novo prompt `login:`), digite
-[source,shell]
+[source, shell]
....
# exit
....
-quantas vezes forem necessárias. Pressione kbd:[enter] após digitar os comandos, e lembre-se que o UNIX(R) diferencia letras maiúsculas de minúsculas, então, digite `exit`, e não `EXIT`.
+quantas vezes for necessário. Sim, pressione kbd:[enter] após os comandos e lembre-se de que o UNIX(R) é sensível a maiúsculas e minúsculas - use ``exit``, não EXIT.
Para desligar o computador, digite
-[source,shell]
+[source, shell]
....
# /sbin/shutdown -h now
....
Ou para reiniciar, digite
-[source,shell]
+[source, shell]
....
# /sbin/shutdown -r now
....
ou
-[source,shell]
+[source, shell]
....
# /sbin/reboot
....
-Você também pode reiniciar com kbd:[Ctrl+Alt+Delete]. Aguarde um instante para a conclusão do processo. Esta sequência de teclas é equivalente ao `/sbin/reboot` nas versões recentes do FreeBSD, e claro, este procedimento é muito, mas muito melhor do que simplesmente pressionar o botão reset do seu computador. Você não quer ter que reinstalar o sistema, não é mesmo?
+Você também pode reiniciar o sistema com kbd:[Ctrl+Alt+Delete]. Dê um pouco de tempo para que o sistema execute suas tarefas. Isso é equivalente a `/sbin/reboot` nas versões recentes do FreeBSD e é muito, muito melhor do que pressionar o botão de reset. Você não quer ter que reinstalar tudo, certo?
[[adding-a-user]]
-== Adicionando um usuário com privilégios de Root
+== Adicionando um Usuário com Privilégios de Root
-Se você não criou um usuário quando instalou o sistema operacional e está logado como `root`, você provavelmente deve criar um usuário com
+Se você não criou nenhum usuário durante a instalação do sistema e, portanto, está conectado como `root`, é provável que você queira criar um usuário agora com o seguinte comando
-[source,shell]
+[source, shell]
....
# adduser
....
-A primeira vez que você usar o comando `adduser`, ele poderá solicitar alguns padrões para salvar. Você pode querer tornar o man:csh[1] no shell padrão ao invés do man:sh[1], se for sugerido o `sh` como padrão. Caso contrário, basta pressionar enter para aceitar cada padrão. Esses padrões são salvos em [.filename]#/etc/adduser.conf#, um arquivo editável.
+A primeira vez que você usa o comando `adduser`, ele pode solicitar algumas opções padrão para salvar. Você pode querer definir o shell padrão como man:csh[1] em vez de man:sh[1], se ele sugerir `sh` como padrão. Caso contrário, basta pressionar Enter para aceitar cada opção padrão. Essas opções padrão são salvas em [.filename]#/etc/adduser.conf#, um arquivo que pode ser editado.
-Suponha que você crie um usuário `jack`, o qual possui _Jack Benimble_ como nome completo. Dê a `jack` uma senha se a segurança (até mesmo crianças ao redor que podem esbarrar no teclado) for um problema. Quando perguntarem se você deseja convidar `jack` para outros grupos, digite `wheel`
+Suponha que você crie um usuário chamado `jack` com o nome completo _Jack Benimble_. Defina uma senha para `jack` se a segurança for uma preocupação (mesmo que sejam apenas crianças por perto que possam bater no teclado). Quando o comando `adduser` perguntar se você deseja convidar `jack` para outros grupos, digite `wheel`
-[source,shell]
+[source, shell]
....
-O grupo de login é "jack". Convide o jack para outros grupos: wheel
+Login group is "jack". Invite jack into other groups: wheel
....
-Isso tornará possível efetuar login como `jack` e usar o comando man:su[1] para tornar-se `root`. Dessa forma, você não será mais repreendido por fazer login como `root`.
+Isso tornará possível fazer login como `jack` e usar o comando man:su[1] para se tornar `root`. Então, você não receberá mais repreensões por fazer login como `root`.
-Você pode sair do `adduser` a qualquer momento digitando kbd:[Ctrl+C], e no final você terá a chance de aprovar seu novo usuário ou simplesmente digitar kbd:[n] para não criá-lo. Você pode querer criar um segundo novo usuário para que ao editar os arquivos de login do `jack`, você tenha um login de reserva caso algo dê errado.
+Você pode interromper o comando `adduser` a qualquer momento digitando kbd:[Ctrl+C], e no final você terá a chance de aprovar o novo usuário ou simplesmente digitar kbd:[n] para não aprovar. Você pode querer criar um segundo usuário para que, ao editar os arquivos de login de `jack`, você tenha um usuário reserva caso algo dê errado.
-Depois de fazer isso, use `exit` para voltar a um prompt de login e efetuar login como `jack`. Em geral, é uma boa ideia fazer o máximo possível de trabalho como um usuário comum que não tenha o poder --e o risco-- do usuário `root`.
+Depois de ter feito isso, use o comando `exit` para voltar ao prompt de login e faça login como `jack`. Em geral, é uma boa ideia fazer o máximo de trabalho possível como um usuário comum que não possui o poder - e o risco - de `root`.
-Se você já criou um usuário e deseja que o usuário seja capaz de executar o comando `su` para logar-se como `root`, é possível efetuar login como `root` e editar o arquivo [.filename]#/etc/group#, adicionando `jack` à primeira linha (no grupo `wheel`). Mas primeiro você precisa praticar com o man:vi[1], o editor de texto - ou usar um editor de texto mais simples, como por exemplo, o man:ee[1], instalado em versões recentes do FreeBSD.
+Se você já criou um usuário e deseja que o usuário possa fazer `su` para `root`, faça login como `root` e edite o arquivo [.filename]#/etc/group#, adicionando `jack` à primeira linha (o grupo `wheel`). Mas primeiro, você precisa praticar o uso do editor de texto man:vi[1], ou usar um editor de texto mais simples, o man:ee[1], instalado em versões recentes do FreeBSD.
Para excluir um usuário, use o comando `rmuser`.
[[looking-around]]
-== Explorando
+== Explorando o Sistema
-Logado como um usuário comum, explore e experimente alguns comandos que acessarão as fontes de ajuda e informações dentro do FreeBSD.
+Conectado como um usuário comum, explore e experimente alguns comandos que acessarão as fontes de ajuda e informações dentro do FreeBSD.
-Aqui estão descritos alguns comandos e o que eles fazem:
+Aqui estão alguns comandos e o que eles fazem:
`id`::
-Diz a você quem você é!
+Diz quem você é!
`pwd`::
-Mostra onde você está--quanto ao diretório atual de trabalho.
+Exibe o diretório de trabalho atual.
`ls`::
Lista os arquivos presentes no diretório atual.
`ls -F`::
-Lista os arquivos do diretório atual com um `*` depois dos executáveis, um `/` depois dos diretórios, e um `@` depois de links simbólicos.
+Lista os arquivos no diretório atual com um * após os arquivos executáveis, uma `/` após os diretórios e um `@` após os links simbólicos.
`ls -l`::
-Lista os arquivos em formatos estendidos--tamanho, data, permissões.
+Lista os arquivos no diretório atual em formato longo, mostrando informações como tamanho, data e hora de modificação, permissões de arquivo e proprietário/grupo.
`ls -a`::
-Lista arquivos "dot" junto com os outros. Se você é `root`, os arquivos com nome iniciando por um "ponto" serão mostradas sem a opção `-a`.
+Lista todos os arquivos no diretório atual, incluindo arquivos ocultos (com ponto no início do nome). Se você estiver logado como `root`, os arquivos ocultos serão listados sem a necessidade do uso do parâmetro `-a`.
`cd`::
-Altera o diretório atual de trabalho. `cd ..` te leva ao diretório antecessor do atual; note o espaço depois de `cd`. `cd /usr/local` te leva a esse mesmo diretório. `cd ~` te leva ao diretório home do usuário que você está logado--exemplo: [.filename]#/usr/home/jack#. Tente `cd /cdrom`, e depois `ls`, para saber se o CDROM está montado e funcionando.
+O comando `cd` é usado para mudar de diretório. `cd ..` volta um nível; observe o espaço após o `cd`. `cd /usr/local` navega até esse diretório. `cd ~` navega até o diretório home do usuário logado, por exemplo, [.filename]#/usr/home/jack#. Experimente o comando `cd /cdrom`, e em seguida `ls`, para descobrir se o seu CDROM está montado e funcionando.
`less _filename_`::
-Te permite ver um arquivo (chamado _filename_) sem alterá-lo. Tente `less /etc/fstab`. Digite `q` para sair.
+Permite visualizar o conteúdo de um arquivo (chamado _filename_) sem modificá-lo. Experimente o comando `less /etc/fstab`. Digite `q` para sair do modo de visualização.
`cat _filename_`::
-Exibe o conteúdo do arquivo _filename_ na tela. Se o conteúdo for longo a ponto de que você consiga ler apenas o final, pressione kbd:[ScrollLock] e use kbd:[up-arrow] para retroceder; você pode usar kbd:[ScrollLock] em páginas de manual também. Pressione kbd:[ScrollLock] novamente para parar de rolar. Você também pode querer experimentar `cat` em alguns arquivos com nomes iniciados por ponto em seu diretório home -- `cat .cshrc`, `cat .login`, `cat .profile`.
+Exibe o conteúdo do arquivo _filename_ na tela. Se o arquivo for muito longo e você conseguir visualizar apenas o final, pressione kbd:[ScrollLock] e use a tecla de seta para cima (kbd:[up-arrow]) para rolar para trás. Você também pode usar kbd:[ScrollLock] com páginas de manual (man pages). Pressione kbd:[ScrollLock] novamente para sair do modo de rolagem. Você pode experimentar o comando `cat` em alguns dos arquivos ocultos em seu diretório home, por exemplo: `cat .cshrc`, `cat .login`, `cat .profile`.
-Você notará os aliases em [.filename]#.cshrc# para alguns dos comandos `ls`. (Eles são muito convenientes). Você pode criar aliases ao editar [.filename]#.cshrc#. Você pode disponibilizar esses aliases para todos os usuários do sistema, colocando-os no arquivo de configuração global do `csh` localizado em [.filename]#/etc/csh.cshrc#.
+Você notará que existem aliases no arquivo [.filename]#.cshrc# para alguns dos comandos `ls` (eles são muito convenientes). Você pode criar outros aliases editando o arquivo [.filename]#.cshrc#. Você pode tornar esses aliases disponíveis para todos os usuários do sistema colocando-os no arquivo de configuração global do `csh`, o [.filename]#/etc/csh.cshrc#.
[[getting-help]]
== Obtendo ajuda e informações
-Aqui estão algumas fontes úteis de ajuda. A palavra _Texto_ deve ser substituída por algo de sua escolha--geralmente um comando ou nome de arquivo.
+Aqui estão algumas fontes úteis de ajuda. O termo _Text_ significa algo de sua escolha que você digita, geralmente um comando ou nome de arquivo.
-`apropos _texto_`::
-Tudo que contém a palavra _texto_ no `whatis database`.
+`apropos _text_`::
+Irá retornar todos os comandos e arquivos que contenham a palavra-chave especificada _text_ no `banco de dados whatis`.
-`man _texto_`::
-Exibe a página de manual referente ao _texto_. A principal fonte de documentação para os sistemas UNIX(R). O comando `man ls` lhe dirá todas as maneiras de usar o comando `ls`. Pressione kbd:[Enter] para percorrer o texo, kbd:[Ctrl+B] para voltar a página anterior, kbd:[Ctrl+F] para avançar, kbd:[q] ou kbd:[Ctrl+C] para sair.
+`man _text_`::
+A página de manual para _text_. A principal fonte de documentação para sistemas UNIX(R). `man ls` lhe dirá todas as maneiras de usar o comando`ls`. Pressione kbd:[Enter] para mover pelo texto, kbd:[Ctrl+B] para voltar uma página, kbd:[Ctrl+F] para avançar, kbd:[q] ou kbd:[Ctrl+C] para sair .
-`which _texto_`::
-Te informa em qual local no path do usuário o comando _texto_ é encontrado.
+`which _text_`::
+Mostra o caminho completo para o executável do comando _text_ especificado.
-`locate _texto_`::
-Todos os paths nos quais a string _texto_ é encontrada.
+`locate _text_`::
+Todos os caminhos onde a string _text_ é encontrada.
-`whatis _texto_`::
-Te informa o que o comando _texto_ faz e sua página de manual. Digitando `whatis *` a saída do comando te informará sobre todos os binários no diretório atual.
+`whatis _text_`::
+Informa o que o comando _text_ faz e sua página de manual. Digitando `whatis *` irá falar sobre todos os binários no diretório atual.
-`whereis _texto_`::
-Encontra o arquivo _texto_, te informando seu path completo.
+`whereis _text_`::
+Localiza o arquivo _text_, fornecendo seu caminho completo.
-Você pode experimentar usar `whatis` em alguns comandos utéis e comuns como `cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date`, e `script`. `more` te permite ler uma página por vez como no DOS, exemplo: `ls -l | more` ou `more _filename_`. O símbolo * funciona como um caractere curinga--exemplo: `ls w*` mostrará os arquivos que começam com `w`.
+Você pode tentar usar `whatis` em alguns comandos úteis comuns como `cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date` , e `script`. `more` permite que você leia uma página por vez como no DOS, por exemplo, `ls -l | more` ou `more _filename_`. O * funciona como um curinga, por exemplo, `ls w*` mostrará os arquivos que começam com `w`.
-Alguns deles não estão funcionado muito bem? Ambos man:locate[1] e man:whatis[1] dependem de um banco de dados que é reconstruído semanalmente. Se a sua máquina não for ficar ligada nos fins de semana (e rodando FreeBSD), você pode executar os comandos a seguir para que ela execute manutenções diárias, semanais, mensais ou apenas de vez em quando. Execute-os como `root` e dê a cada comando o tempo necessário para ser finalizado antes de executar o próximo.
+Alguns deles não estão funcionando muito bem? Ambos man:locate[1] e man:whatis[1] dependem de um banco de dados que é reconstruído semanalmente. Se sua máquina não vai ficar ligada no fim de semana (e rodando o FreeBSD), você pode querer executar os comandos para manutenção diária, semanal e mensal de vez em quando. Execute-os como `root` e, por enquanto, dê a cada um tempo para terminar antes de iniciar o próximo.
-[source,shell]
+[source, shell]
....
# periodic daily
-output omitted
+saída omitida
# periodic weekly
-output omitted
+saída omitida
# periodic monthly
-output omitted
+saída omitida
....
-Se você se cansar de esperar, pressione kbd:[Alt+F2] para obter outro _console virtual_, e efetue seu login novamente. Afinal, é um sistema multi-usuário e multitarefa. No entanto, esses comandos provavelmente irão piscar mensagens na tela enquanto eles estiverem em execução; você pode digitar `clear` no prompt para limpar a tela. Uma vez executados, você pode querer olhar o conteúdo do [.filename]#/var/mail/root# e do [.filename]#/var/log/messages#.
+Se você cansar de esperar, pressione kbd:[Alt+F2] para obter outro _virtual console_ e faça login novamente. Afinal, é um sistema multiusuário e multitarefa. No entanto, esses comandos provavelmente exibirão mensagens em sua tela enquanto estiverem sendo executados; você pode digitar `clear` no prompt para limpar a tela. Uma vez executados, você pode querer olhar para [.filename]#/var/mail/root# e [.filename]#/var/log/messages#.
-A execução de tais comandos faz parte da administração do sistema--e como usuário único de um sistema UNIX(R), você é seu próprio administrador de rede. Praticamente tudo o que você precisa para ser `root` é administrar o sistema. Tais responsabilidades não são abordadas nem mesmo naqueles livros gigantescos de UNIX(R), os quais parecem dedicar muito espaço para menus e gerenciadores de janelas. Você pode querer obter um dos dois principais livros sobre administração de sistemas, pode ser o Evi Nemeth et.al.'s UNIX System Administration Handbook (Prentice-Hall, 1995, ISBN 0-13-15051-7)--a segunda edição com a capa vermelha; ou o livro Æleen Frisch's Essential System Administration (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). Eu usei Nemeth.
+Executar esses comandos faz parte da administração do sistema - e como único usuário de um sistema UNIX(R), você é seu próprio administrador de sistema. Praticamente tudo o que você precisa fazer como `root` é administração do sistema. Essas responsabilidades não são bem cobertas, mesmo nos grandes e grossos livros sobre UNIX(R), que parecem dedicar muito espaço a abrir menus em gerenciadores de janelas. Se você deseja aprofundar seus conhecimentos em administração de sistemas, pode ser útil obter um dos dois principais livros sobre o assunto. Os dois livros recomendados são "UNIX System Administration Handbook" de Evi Nemeth et al. (Prentice-Hall, 1995, ISBN 0-13-15051-7) - a segunda edição com a capa vermelha; ou "Essential System Administration" de Æleen Frisch (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). Ambos os livros são excelentes recursos para administradores de sistemas e fornecem informações detalhadas sobre administração de sistemas UNIX(R). Eu usei o livro da Nemeth.
[[editing-text]]
== Editando textos
-Para configurar o seu sistema, você precisará editar arquivos de texto. A maioria deles estará no diretório [.filename]#/etc#; e você precisará utilizar o comando `su` para acessar o usuário `root` do sistema e assim poder alterá-los. Você pode utilizar um editor de texto simples, como o `ee`, mas a longo prazo, é recomendado aprender a utilizar o editor de texto `vi`. Existe um excelente tutorial do editor de texto vi disponível em [.filename]#/usr/src/contrib/nvi/docs/tutorial#, se você tiver o código fonte do sistema instalado.
+Para configurar o sistema, você precisa editar arquivos de texto. A maioria deles estará no diretório [.filename]#/etc#, e você precisará usar o comando `su` para se tornar `root` e poder alterá-los. Você pode usar o editor de texto `ee` para edição mais simples, mas a longo prazo, vale a pena aprender o editor de texto `vi`. Há um excelente tutorial sobre o vi em [.filename]#/usr/src/contrib/nvi/docs/tutorial#, se você tiver as fontes do sistema instaladas.
-Antes de editar um arquivo, é recomendado criar um backup do mesmo. Suponha que você queira editar o [.filename]#/etc/rc.conf#. Você poderia usar apenas `cd /etc` para acessar o diretório [.filename]#/etc# e usar o seguinte comando:
+Antes de editar um arquivo, é recomendável fazer backup dele. Suponha que você deseje editar o arquivo [.filename]#/etc/rc.conf#. Você pode simplesmente usar o comando `cd /etc` para ir para o diretório [.filename]#/etc# e executar o seguinte comando:
-[source,shell]
+[source, shell]
....
# cp rc.conf rc.conf.orig
....
-Isso iria copiar [.filename]#rc.conf# para [.filename]#rc.conf.orig#, e após isso você poderia copiar [.filename]#rc.conf.orig# para [.filename]#rc.conf# para recuperar o original. Mas melhor ainda seria mover (renomear) e depois copiar de volta:
+Isso copiaria o arquivo [.filename]#rc.conf# para [.filename]#rc.conf.orig#, e posteriormente você poderia copiar [.filename]#rc.conf.orig# de volta para [.filename]#rc.conf# para recuperar o original. Mas uma opção ainda melhor seria mover (renomear) e depois copiar de volta:
-[source,shell]
+[source, shell]
....
# mv rc.conf rc.conf.orig
# cp rc.conf.orig rc.conf
....
-porque o comando `mv` preserva a data original e o proprietário do arquivo. Agora você pode editar o [.filename]#rc.conf#. Se você quiser o original de volta, você deve então executar `mv rc.conf rc.conf.myedit` (considerando que você quer preservar sua versão editada) e então
+porque o comando `mv` preserva a data e o proprietário original do arquivo. Agora você pode editar o arquivo [.filename]#rc.conf#. Se quiser recuperar o original, você pode executar o comando `mv rc.conf rc.conf.myedit` (assumindo que você deseja preservar a versão editada) e depois executar o seguinte comando
-[source,shell]
+[source, shell]
....
# mv rc.conf.orig rc.conf
....
@@ -207,18 +223,18 @@ para colocar as coisas de volta da maneira que estavam.
Para editar um arquivo, digite
-[source,shell]
+[source, shell]
....
# vi filename
....
-Movimente-se através do texto com as teclas direcionais. kbd:[Esc] (a tecla de escape) coloca o editor `vi` em modo de comando. Aqui estão alguns comandos:
+Para mover-se pelo texto, use as teclas de seta. Pressione kbd:[Esc] (a tecla de escape) para entrar no modo de comando do `vi`. Aqui estão alguns comandos:
`x`::
deleta a letra localizada onde o cursor está
`dd`::
-Apaga a linha inteira (mesmo se ela não estiver por inteiro aparecendo na tela)
+Apaga a linha inteira (mesmo se ela estiver aparecendo quebrada na tela em varias linhas)
`i`::
Insere um texto na posição do cursor
@@ -226,10 +242,10 @@ Insere um texto na posição do cursor
`a`::
Insere um texto após a posição do cursor
-Uma vez que você digitou `i` ou `a`, você pode entrar com o texto. Se você pressionar `Esc` você colocará novamente o editor em modo de comando, e lá será onde você irá digitar
+Depois de digitar `i` ou `a`, você pode inserir texto. `Esc` coloca você de volta no modo de comando onde você pode digitar
`:w`::
-para escrever suas alterações no disco e continuar editando
+para gravar suas alterações no disco e continuar editando
`:wq`::
para gravar e sair
@@ -237,24 +253,24 @@ para gravar e sair
`:q!`::
para sair do arquivo sem salvar as alterações
-`/_texto_`::
-para mover o cursor para a primeira ocorrência da palavra _texto_; `/` kbd:[Enter] (a tecla Enter) para encontrar a próxima ocorrência da palavra _texto_.
+`/_text_`::
+para mover o cursor para _text_; `/` kbd:[Enter] (a tecla enter) para encontrar a próxima ocorrência de _text_.
`G`::
para ir para o final do arquivo
`nG`::
-para ir para a linha _n_ dentro do arquivo em edição, onde _n_ é um número
+para ir para a linha _n_ no arquivo, onde _n_ é um número
kbd:[Ctrl+L]::
-para recarregar a tela
+para redesenhar a tela
kbd:[Ctrl+b] and kbd:[Ctrl+f]::
-retrocede e avança uma tela, como fazem com `more` e `view`.
+para voltar e avançar uma tela, como fazem o `more` e o `view`.
-Pratique com o `vi` em seu diretório home criando um novo arquivo com `vi _filename_` e adicionando e excluindo texto, salvando o arquivo, e o chamando novamente. O `vi` oferece algumas surpresas porque ele realmente é muito complexo e, às vezes, você irá executar um comando que fará algo que você não espera. (Algumas pessoas realmente gostam do `vi`-- é mais poderoso que o DOS EDIT -- saiba mais sobre o comando `:r`). Use kbd:[Esc] uma ou mais vezes para ter certeza de que você está no modo de comando e prossiga dali quando ele lhe der problema, salve frequentemente com `:w`, e use `:q!` para sair e começar novamente (do seu último `:w`) quando você precisar.
+Pratique com `vi` no seu diretório pessoal, criando um novo arquivo com o comando `vi _nome_do_arquivo_ , adicionando e excluindo texto, salvando o arquivo e chamando-o novamente. O `vi` oferece algumas surpresas porque é realmente bastante complexo e às vezes você inadvertidamente emite um comando que fará algo que você não espera. (Algumas pessoas realmente gostam do `vi` - é mais poderoso que o EDIT do DOS - descubra sobre o `:r`.) Use kbd:[Esc] uma ou mais vezes para ter certeza de que está no modo de comando e prossiga a partir daí quando ele lhe der problemas, salve frequentemente com `:w` e use `:q!` para sair e começar de novo (a partir do último `:w`) quando precisar.
-Agora você pode usar o comando `cd` para ir para o [.filename]#/etc#, use o comando `su` para logar como `root`, use o `vi` para editar o arquivo [.filename]#/etc/group#, e adicione um usuário ao grupo `wheel`, assim, o usuário terá privilégios de root. Basta adicionar uma vírgula e o nome do login do usuário ao final da primeira linha do arquivo, pressione kbd:[Esc], e use `:wq` para salvar as alterações no disco e sair. Instantaneamente eficaz. (Você não colocou um espaço após a vírgula, colocou?)
+Agora você pode fazer `cd` para [.filename]#/etc#, `su` para `root`, usar `vi` para editar o arquivo [.filename]#/etc/group# e adicionar um usuário ao grupo `wheel ` para que ele tenha privilégios de root. Basta adicionar uma vírgula e o nome de login do usuário ao final da primeira linha do arquivo, pressionar kbd:[Esc] e usar `:wq` para gravar o arquivo no disco e sair. Instantaneamente eficaz. (Você não colocou um espaço após a vírgula, colocou?)
[[other-useful-commands]]
== Outros comandos úteis
@@ -263,79 +279,81 @@ Agora você pode usar o comando `cd` para ir para o [.filename]#/etc#, use o com
mostra o espaço dos sistemas de arquivos que estão montados.
`ps aux`::
-mostra os processos em execução. O `ps ax` é uma forma mais básica do comando.
+Mostra os processos em execução. ps ax é uma forma mais simplificada.
`rm _filename_`::
-deleta o arquivo _filename_.
+remove o arquivo _filename_.
`rm -R _dir_`::
-remove o diretório _dir_ e todos os subdiretórios -- use com cuidado!
+remove um diretório _dir_ e todos os subdiretórios - use com cuidado!
`ls -R`::
-lista os arquivos no diretório atual e em todos os subdiretórios; Eu usei uma variante, `ls -AFR > where.txt`, para obter uma lista de todos os arquivos no diretório [.filename]#/# e [.filename]#/usr# (separadamente) antes de encontrar melhores maneiras de encontrar arquivos.
+lista arquivos no diretório atual e todos os subdiretórios; Usei uma variante, `ls -AFR > where.txt`, para obter uma lista de todos os arquivos em [.filename]#/# e (separadamente) [.filename]#/usr# antes de encontrar maneiras melhores de encontrar arquivos.
`passwd`::
-para mudar a senha do usuário (ou a senha do usuário `root`).
+para alterar a senha do usuário (ou a senha do ``root``)
`man hier`::
-exibe as páginas do manual para o sistema de arquivos UNIX(R) e sua estrutura hierárquica.
+página de manual no sistema de arquivos UNIX(R)
-Use o comando `find` para localizar [.filename]#filename# no diretório [.filename]#/usr# e nos seus subdiretórios:
+Use o `find` para localizar o arquivo [.filename]#filename# em [.filename]#/usr# ou qualquer um de seus subdiretórios com
-[source,shell]
+[source, shell]
....
% find /usr -name "filename"
....
-Você pode usar `*` como um caractere curinga em `"_filename_"` (que deve estar entre aspas). Se você utilizar o comando `find` para procurar no [.filename]#/# em vez de [.filename]#/usr# ele procurará o(s) arquivo(s) em todos os sistemas de arquivos montados, incluindo o CDROM e a partição DOS.
+Você pode usar * como curinga em `"_filename_"` (que deve estar entre aspas). Se você disser ao `find` para procurar em [.filename]#/# ao invés de [.filename]#/usr# ele irá procurar o(s) arquivo(s) em todos os sistemas de arquivos montados, incluindo o CD-ROM e a partição DOS.
-Um excelente livro que explica os comandos e demais utilitários do UNIX(R) é o Abrahams & Larson, Unix for the Impatient (Addison-Wesley, 1996, segunda edição). Há também toneladas de informações na internet sobre o UNIX(R).
+Um livro excelente que explica os comandos e utilitários do UNIX(R) é Abrahams & Larson, Unix for the Impacient (2ª ed., Addison-Wesley, 1996). Também há muitas informações sobre o UNIX(R) na Internet.
[[next-steps]]
== Próximos Passos
-Agora você deve ter as ferramentas necessárias para explorar e editar arquivos, para que você possa colocar tudo em funcionamento. Há uma grande quantidade de informações no Handbook do FreeBSD (que provavelmente está no seu disco rígido) e no https://www.FreeBSD.org/[site oficial do FreeBSD]. Uma grande variedade de pacotes e ports estão no CD-ROM e no site. O Handbook traz mais informações sobre como usá-los (obtenha o pacote, se existir, com o comando `pkg_add /cdrom/packages/All/_packagename_`, onde _packagename_ é o nome do pacote). O CDROM possui listas de pacotes e ports com descrições breves em [.filename]#cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, e [.filename]#cdrom/ports/index#, e descrições completas em [.filename]#/cdrom/ports/\*/*/pkg/DESCR#, onde os *s representam subdiretórios de tipos de programas e nomes de programas, respectivamente.
+Você agora deve ter as ferramentas necessárias para navegar e editar arquivos, para que possa colocar tudo em funcionamento. Existe uma grande quantidade de informações no Handbook do FreeBSD (que provavelmente está no seu disco rígido) e no site do link:https://www.FreeBSD.org/[FreeBSD]. Uma ampla variedade de pacotes e ports estão no CDROM, bem como no site. O Handbook explica mais sobre como usá-los (obtenha o pacote se existir, com `pkg add _nomedopacote_`, onde nomedopacote é o nome do arquivo do pacote). O CDROM contém listas dos pacotes e ports com breves descrições em [.filename]#cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, e [.filename]#cdrom/ports/index#, e com descrições mais detalhadas em [.filename]#/cdrom/ports/\*/*/pkg/DESCR#, onde os *s representam subdiretórios de tipos de programas e nomes de programas, respectivamente.
Se você achar o handbook muito sofisticado (com isso do `lndir` e tudo mais) ao instalar os ports do CDROM, veja a seguir o que geralmente funciona:
-Encontre o port que você deseja, digamos o `kermit`. Haverá um diretório para ele no CDROM. Copie o subdiretório para [.filename]#/usr/local# (este é um bom lugar para softwares que você adicione no sistema e que devem estar disponíveis para todos os usuários) com:
+Encontre o port que você deseja, digamos o `kermit`. Haverá um diretório para ele no CDROM. Copie o subdiretório para [.filename]#/usr/local# (este é um bom lugar para softwares que você adiciona no sistema e que devem estar disponíveis para todos os usuários) com:
-[source,shell]
+[source, shell]
....
# cp -R /cdrom/ports/comm/kermit /usr/local
....
-Isto deve resultar em um subdiretório [.filename]#/usr/local/kermit# que possui todos os arquivos que o subdiretório `kermit` no CDROM possui.
+Isso deve resultar em um subdiretório [.filename]#/usr/local/kermit# que contém todos os arquivos que o subdiretório `kermit` no CD-ROM possui.
-Em seguida, crie o diretório [.filename]#/usr/ports/distfiles# se ele ainda não existir usando o comando `mkdir`. Agora verifique em [.filename]#/cdrom/ports/distfiles# um arquivo com um nome que indique o port que você deseja. Copie esse arquivo para [.filename]#/usr/ports/distfiles#; você pode pular esse passo em versões recentes, pois o FreeBSD fará isso para você. No caso do `kermit`, não existe um distfile.
+Em seguida, crie o diretório [.filename]#/usr/ports/distfiles# se ele ainda não existir usando o comando `mkdir`. Agora verifique o [.filename]#/cdrom/ports/distfiles# para localizar um arquivo com um nome que indique que é o port que você deseja. Copie esse arquivo para [.filename]#/usr/ports/distfiles#; nas versões recentes, você pode pular esta etapa, pois o FreeBSD fará isso por você. No caso de `kermit`, não há distfile.
-Em seguida, use o comando `cd` para ir para o subdiretório [.filename]#/usr/local/kermit# que contém o arquivo [.filename]#Makefile#. Digite
+Então utilize o `cd` para ir para o subdiretório [.filename]#/usr/local/kermit# que contém o arquivo [.filename]#Makefile#. E execute
-[source,shell]
+[source, shell]
....
# make all install
....
-Durante este processo, o port irá usar o FTP para obter os arquivos compactados de que precisa e que ele não encontrou no CDROM ou no [.filename]#/usr/ports/distfiles#. Se a sua rede ainda não está configurada e não havia nenhum arquivo para o port em [.filename]#/cdrom/ports/distfiles#, você terá que pegar o distfile usando outra máquina e copiá-lo manualmente para [.filename]#/usr/ports/distfiles#. Leia o [.filename]#Makefile# (com `cat` ou `more` ou `view`) para descobrir onde ir (o principal site de distribuição) para obter o arquivo e o nome dele. (Use transferências binárias de arquivos!) Em seguida volte para o diretório [.filename]#/usr/local/kermit#, encontre o diretório com [.filename]#Makefile#, e digite `make all install`.
+Durante esse processo, o port fará o download via FTP de quaisquer arquivos compactados que precise e que não foram encontrados no CDROM ou no diretório [.filename]#/usr/ports/distfiles#. Se você não tiver a rede funcionando ainda e não houver um arquivo para o port em [.filename]#/cdrom/ports/distfiles#, você precisará obter o distfile usando outra máquina e copiá-lo para [.filename]#/usr/ports/distfiles#. Leia o [.filename]#Makefile# (com `cat` ou `more` ou `view`) para descobrir onde obter o arquivo (o site de distribuição principal) e qual é o nome dele. (Use transferências de arquivo binário!) Em seguida, volte para [.filename]#/usr/local/kermit#, encontre o diretório com o [.filename]#Makefile# e execute o `make all install`.
[[your-working-environment]]
== Seu ambiente de trabalho
Seu shell é a parte mais importante do seu ambiente de trabalho. O shell é o que interpreta os comandos que você digita na linha de comando e, assim, se comunica com o restante do sistema operacional. Você também pode escrever scripts de shell, que consiste em uma série de comandos para serem executados sem intervenção.
-Dois shells vem instalados com o FreeBSD: `csh` e `sh`. `csh` é bom para trabalhos na linha de comando, mas scripts devem ser escritos com o `sh` (ou `bash`). Você pode descobrir qual shell você utiliza executando o comando `echo $SHELL`.
+Dois shells vêm instalados com o FreeBSD: `csh` e `sh`. O `csh` é bom para trabalho na linha de comando, mas os scripts devem ser escritos com `sh` (ou `bash`). Você pode descobrir qual shell você tem digitando `echo $SHELL`.
-O `csh` é bom, mas o `tcsh` faz tudo que o `csh` faz e ainda mais. Ele permite recuperar comandos com as teclas de seta e editá-los. Ele permite usar a tecla tab para completar o nome dos arquivos (o `csh` usa a tecla kbd:[Esc]), e permite alternar o diretório em que você estava por último com o comando `cd -`. E também é muito mais fácil alterar o seu prompt com o `tcsh`. Ele tornará sua vida muito mais fácil.
+O shell `csh` é bom, mas o `tcsh` faz tudo o que o `csh` faz e muito mais. Ele permite que você recupere comandos com as teclas de seta e edite-os. Ele completa os nomes dos arquivos com a tecla de tabulação (o `csh` usa kbd:[Esc]) e permite alternar para o último diretório em que você estava com `cd -`. Também é muito mais fácil alterar seu prompt com `tcsh`. Ele torna a vida muito mais fácil.
-Aqui estão os dois passos para instalar um novo shell:
+Aqui estão os três passos para instalar um novo shell:
[.procedure]
+====
. Instale o shell como um port ou um pacote, como faria com qualquer outro port ou pacote.
-. Use o comando `chsh` para alterar permanentemente seu shell para `tcsh`, ou digite `tcsh` no prompt para alterar seu shell sem precisar efetuar login novamente.
+. Use `chsh` para alterar seu shell para `tcsh` permanentemente, ou digite `tcsh` no prompt para alterar seu shell sem fazer login novamente.
+====
[NOTE]
====
-Pode ser perigoso alterar o shell do usuário `root` para outro diferente do `sh` ou `csh` nas primeiras versões do FreeBSD e também em muitas outras versões do UNIX(R); talvez você não tenha um shell funcional quando o sistema entrar em modo de single user. A solução é usar `su -m` para se tornar `root`, o que lhe dará o `tcsh` como `root`, por que o shell faz parte do ambiente. Você pode tornar isso permanente adicionando-o ao seu arquivo [.filename]#.tcshrc# como um alias, para isso, execute:
+Pode ser perigoso mudar o shell `root` para algo diferente de `sh` ou `csh` nas primeiras versões do FreeBSD e muitas outras versões do UNIX(R); você pode não ter um shell funcionando quando o sistema o coloca no modo de usuário único. A solução é usar `su -m` para se tornar `root`, o que lhe dará o `tcsh` como `root`, porque o shell faz parte do ambiente. Você pode torná-lo permanente adicionando-o ao seu arquivo [.filename]#.tcshrc# como um alias com:
[.programlisting]
....
@@ -344,26 +362,26 @@ alias su su -m
====
-Quando o `tcsh` é iniciado, ele lê os arquivos [.filename]#/etc/csh.cshrc# e [.filename]#/etc/csh.login#, assim como o `csh`. Ele também lerá o arquivo [.filename]#.login# no seu diretório home e também o arquivo [.filename]#.cshrc#, a menos que você forneça um arquivo [.filename]#.tcshrc#. Você pode fazer isso simplesmente copiando o [.filename]#.cshrc# para [.filename]#.tcshrc#.
+Quando o `tcsh` iniciar, ele lerá os arquivos [.filename]#/etc/csh.cshrc# e [.filename]#/etc/csh.login#, assim como o `csh`. Ele também lerá [.filename]#.login# em seu diretório inicial e bem como o [.filename]#.cshrc#, a menos que você forneça um [.filename]#.tcshrc#. Isso pode ser feito simplesmente copiando [.filename]#.cshrc# para [.filename]#.tcshrc#.
-Agora que você instalou o `tcsh`, você pode ajustar o seu prompt. Você pode encontrar os detalhes na página de manual do `tcsh`, mas aqui está uma linha para colocar em seu [.filename]#.tcshrc# que informará quantos comandos você digitou, qual o horário atual, e em qual diretório você está. Ele também produz um `>` se você for um usuário comum e # se você for `root`,mas o tcsh fará isso em qualquer caso:
+Agora que você instalou o `tcsh`, você pode ajustar seu prompt. Você pode encontrar os detalhes na página de manual do `tcsh`, mas aqui está uma linha para colocar no seu [.filename]#.tcshrc# que lhe dirá quantos comandos você digitou, que horas são e em qual diretório você está. Ele também produz um `>` se você for um usuário comum e um # se você for `root`, mas o tsch fará isso em qualquer caso:
set prompt = "%h %t %~ %# "
-Isso deve ir no mesmo lugar em que está a linha de prompt atual caso exista uma, ou logo abaixo de "if($?prompt) then" caso ela não exista. Comente a linha antiga; você sempre pode voltar a ela se preferir. Não esqueça os espaços e as aspas. Você pode forçar a releitura do [.filename]#.tcshrc# digitando `source .tcshrc`.
+Isso deve ir no mesmo lugar que a linha de configuração do prompt existente, se houver, ou sob "if($?prompt) then" se não. Comente a linha antiga; você sempre pode voltar para ele, se preferir. Não se esqueça dos espaços e aspas. Você pode reaplicar as opções do [.filename]#.tcshrc# digitando `source .tcshrc`.
-Você pode obter uma listagem de outras variáveis de ambiente que estão configuradas digitando `env` no prompt. O resultado mostrará seu editor padrão, pager e tipo de terminal, entre possivelmente muitas outras variáveis. Um comando útil se você efetuar o seu login a partir de um local remoto e não puder executar um programa porque o terminal não é capaz de fazê-lo é o `setenv TERM vt100`.
+Você pode obter uma lista das outras variáveis de ambiente que foram definidas digitando `env` no prompt. O resultado mostrará seu editor, pager e tipo de terminal padrão, entre possivelmente muitos outros. Um comando útil se você efetuar login de um local remoto e não puder executar um programa porque o terminal não é capaz é `setenv TERM vt100`.
[[other]]
== Outros
-Como `root`, você pode desmontar o CDROM com o comando `/sbin/umount /cdrom`, retire-o da unidade, insira outro e monte-o com `/sbin/mount_cd9660 /dev/cd0a /cdrom` considerando que `cd0a` é o nome do dispositivo da sua unidade de CDROM. As versões mais recentes do FreeBSD permitem montar o CDROM apenas com o comando `/sbin/mount /cdrom`.
+Como `root`, você pode desmontar o CDROM com `/sbin/umount /cdrom`, retirá-lo da unidade, inserir outro e montá-lo com `/sbin/mount_cd9660 /dev/cd0a /cdrom` assumindo que cd0a é o nome do dispositivo para sua unidade de CD-ROM. As versões mais recentes do FreeBSD permitem que você monte o CDROM apenas com `/sbin/mount /cdrom`.
-Usar o live filesystem -- o segundo dos discos de CDROM do FreeBSD -- é útil se você tiver espaço limitado. O que está no live filesystem varia de release para release. Você pode tentar jogar jogos a partir do CDROM. Isso envolve o uso do `lndir`, que é instalado com o X Window System, para informar ao(s) programa(s) onde encontrar os arquivos necessários, porque eles estão no sistema de arquivos do [.filename]#/cdrom# em vez do [.filename]#/usr# e seus subdiretórios, que é onde eles devem estar. Leia o manual deste utilitário executando `man lndir`.
+Usar o sistema de arquivos ao vivo (live filesystem), o segundo dos discos do CDROM do FreeBSD, é útil se você tem espaço limitado. O que está no sistema de arquivos ao vivo varia de versão para versão. Você pode tentar jogar jogos do CDROM. Isso envolve o uso do `lndir`, que é instalado com o X Window System, para informar ao(s) programa(s) onde encontrar os arquivos necessários, pois eles estão em [.filename]#/cdrom# em vez de em [.filename]#/usr# e seus subdiretórios, onde são esperados. Leia `man lndir`.
[[comments-welcome]]
== Comentários são bem-vindos
-Caso você venha a usar este guia, eu estaria interessada em saber onde ele pode não ter ficado claro e o que foi deixado de fora que você acha que deveria ser incluído, e se ele foi útil para você. Meus agradecimentos a Eugene W. Stark, professor de ciência da computação na SUNY-Stony Brook, e também ao John Fieber pelos comentários úteis.
+Se você usou este guia, ficaria interessado em saber onde não ficou claro e o que foi deixado de fora que você acha que deveria ser incluído, e se foi útil. Meus agradecimentos a Eugene W. Stark, professor de ciência da computação da SUNY-Stony Brook, e John Fieber por seus comentários úteis.
Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford.edu]
diff --git a/documentation/content/pt-br/articles/new-users/_index.po b/documentation/content/pt-br/articles/new-users/_index.po
new file mode 100644
index 0000000000..02b254a0c0
--- /dev/null
+++ b/documentation/content/pt-br/articles/new-users/_index.po
@@ -0,0 +1,1425 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-20 00:00+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesnew-users_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.15.1\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/new-users/_index.adoc:1
+#, no-wrap
+msgid "Introduction for people new to both FreeBSD and UNIX®"
+msgstr "Introdução para iniciantes tanto no FreeBSD quanto no UNIX®"
+
+#. type: YAML Front Matter: title
+#: documentation/content/en/articles/new-users/_index.adoc:1
+#, no-wrap
+msgid "For People New to Both FreeBSD and UNIX®"
+msgstr "Para iniciantes tanto no FreeBSD quanto no UNIX®"
+
+#. type: Title =
+#: documentation/content/en/articles/new-users/_index.adoc:11
+#, no-wrap
+msgid "For People New to Both FreeBSD and UNIX(R)"
+msgstr "Para iniciantes tanto no FreeBSD quanto no UNIX®"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:46
+msgid ""
+"Congratulations on installing FreeBSD! This introduction is for people new "
+"to both FreeBSD _and_ UNIX(R)-so it starts with basics."
+msgstr ""
+"Parabéns por instalar o FreeBSD! Esta introdução é destinada a usuários "
+"iniciantes tanto no FreeBSD quanto no UNIX(R) - então ela começa com o "
+"básico."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:52
+#, no-wrap
+msgid "Logging in and Getting Out"
+msgstr "Logando e Deslogando"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:58
+msgid ""
+"Log in (when you see `login:`) as a user you created during installation or "
+"as `root`. (Your FreeBSD installation will already have an account for "
+"`root`; who can go anywhere and do anything, including deleting essential "
+"files, so be careful!) The symbols % and # in the following stand for the "
+"prompt (yours may be different), with % indicating an ordinary user and # "
+"indicating `root`."
+msgstr ""
+"Faça login (quando você ver `login:`) com o usuário que você criou durante a "
+"instalação ou como `root`. (Sua instalação do FreeBSD já terá uma conta para "
+"o usuário `root`, o qual pode ir a qualquer lugar e fazer qualquer coisa, "
+"incluindo excluir arquivos essenciais, então tenha cuidado!) Os símbolos % e "
+"# abaixo representam o prompt (o seu pode ser diferente), sendo que o % "
+"indica um usuário comum e o # indica o usuário `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:60
+msgid "To log out (and get a new `login:` prompt) type"
+msgstr "Para sair (e obter um novo prompt `login:`), digite"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:64
+#, no-wrap
+msgid "# exit\n"
+msgstr "# exit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:68
+msgid ""
+"as often as necessary. Yes, press kbd:[enter] after commands, and remember "
+"that UNIX(R) is case-sensitive-``exit``, not `EXIT`."
+msgstr ""
+"quantas vezes for necessário. Sim, pressione kbd:[enter] após os comandos e "
+"lembre-se de que o UNIX(R) é sensível a maiúsculas e minúsculas - use "
+"``exit``, não EXIT."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:70
+msgid "To shut down the machine type"
+msgstr "Para desligar o computador, digite"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:74
+#, no-wrap
+msgid "# /sbin/shutdown -h now\n"
+msgstr "# /sbin/shutdown -h now\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:77
+msgid "Or to reboot type"
+msgstr "Ou para reiniciar, digite"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:81
+#, no-wrap
+msgid "# /sbin/shutdown -r now\n"
+msgstr "# /sbin/shutdown -r now\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:84
+msgid "or"
+msgstr "ou"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:88
+#, no-wrap
+msgid "# /sbin/reboot\n"
+msgstr "# /sbin/reboot\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:94
+msgid ""
+"You can also reboot with kbd:[Ctrl+Alt+Delete]. Give it a little time to do "
+"its work. This is equivalent to `/sbin/reboot` in recent releases of "
+"FreeBSD and is much, much better than hitting the reset button. You do not "
+"want to have to reinstall this thing, do you?"
+msgstr ""
+"Você também pode reiniciar o sistema com kbd:[Ctrl+Alt+Delete]. Dê um pouco "
+"de tempo para que o sistema execute suas tarefas. Isso é equivalente a `/"
+"sbin/reboot` nas versões recentes do FreeBSD e é muito, muito melhor do que "
+"pressionar o botão de reset. Você não quer ter que reinstalar tudo, certo?"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:96
+#, no-wrap
+msgid "Adding a User with Root Privileges"
+msgstr "Adicionando um Usuário com Privilégios de Root"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:99
+msgid ""
+"If you did not create any users when you installed the system and are thus "
+"logged in as `root`, you should probably create a user now with"
+msgstr ""
+"Se você não criou nenhum usuário durante a instalação do sistema e, "
+"portanto, está conectado como `root`, é provável que você queira criar um "
+"usuário agora com o seguinte comando"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:103
+#, no-wrap
+msgid "# adduser\n"
+msgstr "# adduser\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:109
+msgid ""
+"The first time you use `adduser`, it might ask for some defaults to save. "
+"You might want to make the default shell man:csh[1] instead of man:sh[1], if "
+"it suggests `sh` as the default. Otherwise just press enter to accept each "
+"default. These defaults are saved in [.filename]#/etc/adduser.conf#, an "
+"editable file."
+msgstr ""
+"A primeira vez que você usa o comando `adduser`, ele pode solicitar algumas "
+"opções padrão para salvar. Você pode querer definir o shell padrão como "
+"man:csh[1] em vez de man:sh[1], se ele sugerir `sh` como padrão. Caso "
+"contrário, basta pressionar Enter para aceitar cada opção padrão. Essas "
+"opções padrão são salvas em [.filename]#/etc/adduser.conf#, um arquivo que "
+"pode ser editado."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:113
+msgid ""
+"Suppose you create a user `jack` with full name _Jack Benimble_. Give "
+"`jack` a password if security (even kids around who might pound on the "
+"keyboard) is an issue. When it asks you if you want to invite `jack` into "
+"other groups, type `wheel`"
+msgstr ""
+"Suponha que você crie um usuário chamado `jack` com o nome completo _Jack "
+"Benimble_. Defina uma senha para `jack` se a segurança for uma preocupação ("
+"mesmo que sejam apenas crianças por perto que possam bater no teclado). "
+"Quando o comando `adduser` perguntar se você deseja convidar `jack` para "
+"outros grupos, digite `wheel`"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:117
+#, no-wrap
+msgid "Login group is \"jack\". Invite jack into other groups: wheel\n"
+msgstr "Login group is \"jack\". Invite jack into other groups: wheel\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:121
+msgid ""
+"This will make it possible to log in as `jack` and use the man:su[1] command "
+"to become `root`. Then you will not get scolded any more for logging in as "
+"`root`."
+msgstr ""
+"Isso tornará possível fazer login como `jack` e usar o comando man:su[1] "
+"para se tornar `root`. Então, você não receberá mais repreensões por fazer "
+"login como `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:124
+msgid ""
+"You can quit `adduser` any time by typing kbd:[Ctrl+C], and at the end you "
+"will have a chance to approve your new user or simply type kbd:[n] for no. "
+"You might want to create a second new user so that when you edit `jack`'s "
+"login files, you will have a hot spare in case something goes wrong."
+msgstr ""
+"Você pode interromper o comando `adduser` a qualquer momento digitando "
+"kbd:[Ctrl+C], e no final você terá a chance de aprovar o novo usuário ou "
+"simplesmente digitar kbd:[n] para não aprovar. Você pode querer criar um "
+"segundo usuário para que, ao editar os arquivos de login de `jack`, você "
+"tenha um usuário reserva caso algo dê errado."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:127
+msgid ""
+"Once you have done this, use `exit` to get back to a login prompt and log in "
+"as `jack`. In general, it is a good idea to do as much work as possible as "
+"an ordinary user who does not have the power-and risk-of `root`."
+msgstr ""
+"Depois de ter feito isso, use o comando `exit` para voltar ao prompt de "
+"login e faça login como `jack`. Em geral, é uma boa ideia fazer o máximo de "
+"trabalho possível como um usuário comum que não possui o poder - e o risco - "
+"de `root`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:130
+msgid ""
+"If you already created a user and you want the user to be able to `su` to "
+"`root`, you can log in as `root` and edit the file [.filename]#/etc/group#, "
+"adding `jack` to the first line (the group `wheel`). But first you need to "
+"practice man:vi[1], the text editor-or use the simpler text editor, man:"
+"ee[1], installed on recent versions of FreeBSD."
+msgstr ""
+"Se você já criou um usuário e deseja que o usuário possa fazer `su` para "
+"`root`, faça login como `root` e edite o arquivo [.filename]#/etc/group#, "
+"adicionando `jack` à primeira linha (o grupo `wheel`). Mas primeiro, você "
+"precisa praticar o uso do editor de texto man:vi[1], ou usar um editor de "
+"texto mais simples, o man:ee[1], instalado em versões recentes do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:132
+msgid "To delete a user, use `rmuser`."
+msgstr "Para excluir um usuário, use o comando `rmuser`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:134
+#, no-wrap
+msgid "Looking Around"
+msgstr "Explorando o Sistema"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:137
+msgid ""
+"Logged in as an ordinary user, look around and try out some commands that "
+"will access the sources of help and information within FreeBSD."
+msgstr ""
+"Conectado como um usuário comum, explore e experimente alguns comandos que "
+"acessarão as fontes de ajuda e informações dentro do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:139
+msgid "Here are some commands and what they do:"
+msgstr "Aqui estão alguns comandos e o que eles fazem:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:140
+#, no-wrap
+msgid "`id`"
+msgstr "`id`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:142
+msgid "Tells you who you are!"
+msgstr "Diz quem você é!"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:143
+#, no-wrap
+msgid "`pwd`"
+msgstr "`pwd`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:145
+msgid "Shows you where you are-the current working directory."
+msgstr "Exibe o diretório de trabalho atual."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:146
+#, no-wrap
+msgid "`ls`"
+msgstr "`ls`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:148
+msgid "Lists the files in the current directory."
+msgstr "Lista os arquivos presentes no diretório atual."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:149
+#, no-wrap
+msgid "`ls -F`"
+msgstr "`ls -F`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:151
+msgid ""
+"Lists the files in the current directory with a * after executables, a `/` "
+"after directories, and an `@` after symbolic links."
+msgstr ""
+"Lista os arquivos no diretório atual com um * após os arquivos executáveis, "
+"uma `/` após os diretórios e um `@` após os links simbólicos."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:152
+#, no-wrap
+msgid "`ls -l`"
+msgstr "`ls -l`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:154
+msgid "Lists the files in long format-size, date, permissions."
+msgstr ""
+"Lista os arquivos no diretório atual em formato longo, mostrando informações "
+"como tamanho, data e hora de modificação, permissões de arquivo e proprietá"
+"rio/grupo."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:155
+#, no-wrap
+msgid "`ls -a`"
+msgstr "`ls -a`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:158
+msgid ""
+"Lists hidden \"dot\" files with the others. If you are `root`, the \"dot\" "
+"files show up without the `-a` switch."
+msgstr ""
+"Lista todos os arquivos no diretório atual, incluindo arquivos ocultos (com "
+"ponto no início do nome). Se você estiver logado como `root`, os arquivos "
+"ocultos serão listados sem a necessidade do uso do parâmetro `-a`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:159
+#, no-wrap
+msgid "`cd`"
+msgstr "`cd`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:163
+msgid ""
+"Changes directories. `cd ..` backs up one level; note the space after `cd`. "
+"`cd /usr/local` goes there. `cd ~` goes to the home directory of the person "
+"logged in-e.g., [.filename]#/usr/home/jack#. Try `cd /cdrom`, and then "
+"`ls`, to find out if your CDROM is mounted and working."
+msgstr ""
+"O comando `cd` é usado para mudar de diretório. `cd ..` volta um nível; "
+"observe o espaço após o `cd`. `cd /usr/local` navega até esse diretório. `"
+"cd ~` navega até o diretório home do usuário logado, por exemplo, [."
+"filename]#/usr/home/jack#. Experimente o comando `cd /cdrom`, e em seguida "
+"`ls`, para descobrir se o seu CDROM está montado e funcionando."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:164
+#, no-wrap
+msgid "`less _filename_`"
+msgstr "`less _filename_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:168
+msgid ""
+"Lets you look at a file (named _filename_) without changing it. Try `less /"
+"etc/fstab`. Type `q` to quit."
+msgstr ""
+"Permite visualizar o conteúdo de um arquivo (chamado _filename_) sem "
+"modificá-lo. Experimente o comando `less /etc/fstab`. Digite `q` para sair "
+"do modo de visualização."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:169
+#, no-wrap
+msgid "`cat _filename_`"
+msgstr "`cat _filename_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:174
+msgid ""
+"Displays _filename_ on screen. If it is too long and you can see only the "
+"end of it, press kbd:[ScrollLock] and use the kbd:[up-arrow] to move "
+"backward; you can use kbd:[ScrollLock] with manual pages too. Press kbd:"
+"[ScrollLock] again to quit scrolling. You might want to try `cat` on some "
+"of the dot files in your home directory-`cat .cshrc`, `cat .login`, `cat ."
+"profile`."
+msgstr ""
+"Exibe o conteúdo do arquivo _filename_ na tela. Se o arquivo for muito longo "
+"e você conseguir visualizar apenas o final, pressione kbd:[ScrollLock] e use "
+"a tecla de seta para cima (kbd:[up-arrow]) para rolar para trás. Você também "
+"pode usar kbd:[ScrollLock] com páginas de manual (man pages). Pressione "
+"kbd:[ScrollLock] novamente para sair do modo de rolagem. Você pode "
+"experimentar o comando `cat` em alguns dos arquivos ocultos em seu diretório "
+"home, por exemplo: `cat .cshrc`, `cat .login`, `cat .profile`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:178
+msgid ""
+"You will notice aliases in [.filename]#.cshrc# for some of the `ls` commands "
+"(they are very convenient). You can create other aliases by editing [."
+"filename]#.cshrc#. You can make these aliases available to all users on the "
+"system by putting them in the system-wide `csh` configuration file, [."
+"filename]#/etc/csh.cshrc#."
+msgstr ""
+"Você notará que existem aliases no arquivo [.filename]#.cshrc# para alguns "
+"dos comandos `ls` (eles são muito convenientes). Você pode criar outros "
+"aliases editando o arquivo [.filename]#.cshrc#. Você pode tornar esses "
+"aliases disponíveis para todos os usuários do sistema colocando-os no "
+"arquivo de configuração global do `csh`, o [.filename]#/etc/csh.cshrc#."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:180
+#, no-wrap
+msgid "Getting Help and Information"
+msgstr "Obtendo ajuda e informações"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:184
+msgid ""
+"Here are some useful sources of help. _Text_ stands for something of your "
+"choice that you type in-usually a command or filename."
+msgstr ""
+"Aqui estão algumas fontes úteis de ajuda. O termo _Text_ significa algo de "
+"sua escolha que você digita, geralmente um comando ou nome de arquivo."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:185
+#, no-wrap
+msgid "`apropos _text_`"
+msgstr "`apropos _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:187
+msgid "Everything containing string _text_ in the `whatis database`."
+msgstr ""
+"Irá retornar todos os comandos e arquivos que contenham a palavra-chave "
+"especificada _text_ no `banco de dados whatis`."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:188
+#, no-wrap
+msgid "`man _text_`"
+msgstr "`man _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:193
+msgid ""
+"The manual page for _text_. The major source of documentation for UNIX(R) "
+"systems. `man ls` will tell you all the ways to use `ls`. Press kbd:"
+"[Enter] to move through text, kbd:[Ctrl+B] to go back a page, kbd:[Ctrl+F] "
+"to go forward, kbd:[q] or kbd:[Ctrl+C] to quit."
+msgstr ""
+"A página de manual para _text_. A principal fonte de documentação para "
+"sistemas UNIX(R). `man ls` lhe dirá todas as maneiras de usar o comando`ls`. "
+"Pressione kbd:[Enter] para mover pelo texto, kbd:[Ctrl+B] para voltar uma "
+"página, kbd:[Ctrl+F] para avançar, kbd:[q] ou kbd:[Ctrl+C] para sair ."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:194
+#, no-wrap
+msgid "`which _text_`"
+msgstr "`which _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:196
+msgid "Tells you where in the user's path the command _text_ is found."
+msgstr ""
+"Mostra o caminho completo para o executável do comando _text_ especificado."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:197
+#, no-wrap
+msgid "`locate _text_`"
+msgstr "`locate _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:199
+msgid "All the paths where the string _text_ is found."
+msgstr "Todos os caminhos onde a string _text_ é encontrada."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:200
+#, no-wrap
+msgid "`whatis _text_`"
+msgstr "`whatis _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:203
+msgid ""
+"Tells you what the command _text_ does and its manual page. Typing `whatis "
+"*` will tell you about all the binaries in the current directory."
+msgstr ""
+"Informa o que o comando _text_ faz e sua página de manual. Digitando `whatis "
+"*` irá falar sobre todos os binários no diretório atual."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:204
+#, no-wrap
+msgid "`whereis _text_`"
+msgstr "`whereis _text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:206
+msgid "Finds the file _text_, giving its full path."
+msgstr "Localiza o arquivo _text_, fornecendo seu caminho completo."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:210
+msgid ""
+"You might want to try using `whatis` on some common useful commands like "
+"`cat`, `more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date`, and "
+"`script`. `more` lets you read a page at a time as it does in DOS, e.g., "
+"`ls -l | more` or `more _filename_`. The * works as a wildcard-e.g., `ls "
+"w*` will show you files beginning with `w`."
+msgstr ""
+"Você pode tentar usar `whatis` em alguns comandos úteis comuns como `cat`, "
+"`more`, `grep`, `mv`, `find`, `tar`, `chmod`, `chown`, `date` , e `script`. "
+"`more` permite que você leia uma página por vez como no DOS, por exemplo, `"
+"ls -l | more` ou `more _filename_`. O * funciona como um curinga, por "
+"exemplo, `ls w*` mostrará os arquivos que começam com `w`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:214
+msgid ""
+"Are some of these not working very well? Both man:locate[1] and man:"
+"whatis[1] depend on a database that is rebuilt weekly. If your machine is "
+"not going to be left on over the weekend (and running FreeBSD), you might "
+"want to run the commands for daily, weekly, and monthly maintenance now and "
+"then. Run them as `root` and, for now, give each one time to finish before "
+"you start the next one."
+msgstr ""
+"Alguns deles não estão funcionando muito bem? Ambos man:locate[1] e "
+"man:whatis[1] dependem de um banco de dados que é reconstruído semanalmente. "
+"Se sua máquina não vai ficar ligada no fim de semana (e rodando o FreeBSD), "
+"você pode querer executar os comandos para manutenção diária, semanal e "
+"mensal de vez em quando. Execute-os como `root` e, por enquanto, dê a cada "
+"um tempo para terminar antes de iniciar o próximo."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:223
+#, no-wrap
+msgid ""
+"# periodic daily\n"
+"output omitted\n"
+"# periodic weekly\n"
+"output omitted\n"
+"# periodic monthly\n"
+"output omitted\n"
+msgstr ""
+"# periodic daily\n"
+"saída omitida\n"
+"# periodic weekly\n"
+"saída omitida\n"
+"# periodic monthly\n"
+"saída omitida\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:229
+msgid ""
+"If you get tired of waiting, press kbd:[Alt+F2] to get another _virtual "
+"console_, and log in again. After all, it is a multi-user, multi-tasking "
+"system. Nevertheless these commands will probably flash messages on your "
+"screen while they are running; you can type `clear` at the prompt to clear "
+"the screen. Once they have run, you might want to look at [.filename]#/var/"
+"mail/root# and [.filename]#/var/log/messages#."
+msgstr ""
+"Se você cansar de esperar, pressione kbd:[Alt+F2] para obter outro _virtual "
+"console_ e faça login novamente. Afinal, é um sistema multiusuário e "
+"multitarefa. No entanto, esses comandos provavelmente exibirão mensagens em "
+"sua tela enquanto estiverem sendo executados; você pode digitar `clear` no "
+"prompt para limpar a tela. Uma vez executados, você pode querer olhar para [."
+"filename]#/var/mail/root# e [.filename]#/var/log/messages#."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:235
+msgid ""
+"Running such commands is part of system administration-and as a single user "
+"of a UNIX(R) system, you are your own system administrator. Virtually "
+"everything you need to be `root` to do is system administration. Such "
+"responsibilities are not covered very well even in those big fat books on "
+"UNIX(R), which seem to devote a lot of space to pulling down menus in "
+"windows managers. You might want to get one of the two leading books on "
+"systems administration, either Evi Nemeth et.al.'s UNIX System "
+"Administration Handbook (Prentice-Hall, 1995, ISBN 0-13-15051-7)-the second "
+"edition with the red cover; or Æleen Frisch's Essential System "
+"Administration (O'Reilly & Associates, 2002, ISBN 0-596-00343-9). I used "
+"Nemeth."
+msgstr ""
+"Executar esses comandos faz parte da administração do sistema - e como único "
+"usuário de um sistema UNIX(R), você é seu próprio administrador de sistema. "
+"Praticamente tudo o que você precisa fazer como `root` é administração do "
+"sistema. Essas responsabilidades não são bem cobertas, mesmo nos grandes e "
+"grossos livros sobre UNIX(R), que parecem dedicar muito espaço a abrir menus "
+"em gerenciadores de janelas. Se você deseja aprofundar seus conhecimentos em "
+"administração de sistemas, pode ser útil obter um dos dois principais livros "
+"sobre o assunto. Os dois livros recomendados são \"UNIX System "
+"Administration Handbook\" de Evi Nemeth et al. (Prentice-Hall, 1995, ISBN "
+"0-13-15051-7) - a segunda edição com a capa vermelha; ou \"Essential System "
+"Administration\" de Æleen Frisch (O'Reilly & Associates, 2002, ISBN "
+"0-596-00343-9). Ambos os livros são excelentes recursos para administradores "
+"de sistemas e fornecem informações detalhadas sobre administração de "
+"sistemas UNIX(R). Eu usei o livro da Nemeth."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:237
+#, no-wrap
+msgid "Editing Text"
+msgstr "Editando textos"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:243
+msgid ""
+"To configure your system, you need to edit text files. Most of them will be "
+"in the [.filename]#/etc# directory; and you will need to `su` to `root` to "
+"be able to change them. You can use the easy `ee`, but in the long run the "
+"text editor `vi` is worth learning. There is an excellent tutorial on vi in "
+"[.filename]#/usr/src/contrib/nvi/docs/tutorial#, if you have the system "
+"sources installed."
+msgstr ""
+"Para configurar o sistema, você precisa editar arquivos de texto. A maioria "
+"deles estará no diretório [.filename]#/etc#, e você precisará usar o comando "
+"`su` para se tornar `root` e poder alterá-los. Você pode usar o editor de "
+"texto `ee` para edição mais simples, mas a longo prazo, vale a pena aprender "
+"o editor de texto `vi`. Há um excelente tutorial sobre o vi em [.filename]#/"
+"usr/src/contrib/nvi/docs/tutorial#, se você tiver as fontes do sistema "
+"instaladas."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:247
+msgid ""
+"Before you edit a file, you should probably back it up. Suppose you want to "
+"edit [.filename]#/etc/rc.conf#. You could just use `cd /etc` to get to the "
+"[.filename]#/etc# directory and do:"
+msgstr ""
+"Antes de editar um arquivo, é recomendável fazer backup dele. Suponha que "
+"você deseje editar o arquivo [.filename]#/etc/rc.conf#. Você pode "
+"simplesmente usar o comando `cd /etc` para ir para o diretório [."
+"filename]#/etc# e executar o seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:251
+#, no-wrap
+msgid "# cp rc.conf rc.conf.orig\n"
+msgstr "# cp rc.conf rc.conf.orig\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:255
+msgid ""
+"This would copy [.filename]#rc.conf# to [.filename]#rc.conf.orig#, and you "
+"could later copy [.filename]#rc.conf.orig# to [.filename]#rc.conf# to "
+"recover the original. But even better would be moving (renaming) and then "
+"copying back:"
+msgstr ""
+"Isso copiaria o arquivo [.filename]#rc.conf# para [.filename]#rc.conf.orig#, "
+"e posteriormente você poderia copiar [.filename]#rc.conf.orig# de volta para "
+"[.filename]#rc.conf# para recuperar o original. Mas uma opção ainda melhor "
+"seria mover (renomear) e depois copiar de volta:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:260
+#, no-wrap
+msgid ""
+"# mv rc.conf rc.conf.orig\n"
+"# cp rc.conf.orig rc.conf\n"
+msgstr ""
+"# mv rc.conf rc.conf.orig\n"
+"# cp rc.conf.orig rc.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:265
+msgid ""
+"because `mv` preserves the original date and owner of the file. You can now "
+"edit [.filename]#rc.conf#. If you want the original back, you would then "
+"`mv rc.conf rc.conf.myedit` (assuming you want to preserve your edited "
+"version) and then"
+msgstr ""
+"porque o comando `mv` preserva a data e o proprietário original do arquivo. "
+"Agora você pode editar o arquivo [.filename]#rc.conf#. Se quiser recuperar o "
+"original, você pode executar o comando `mv rc.conf rc.conf.myedit` ("
+"assumindo que você deseja preservar a versão editada) e depois executar o "
+"seguinte comando"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:269
+#, no-wrap
+msgid "# mv rc.conf.orig rc.conf\n"
+msgstr "# mv rc.conf.orig rc.conf\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:272
+msgid "to put things back the way they were."
+msgstr "para colocar as coisas de volta da maneira que estavam."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:274
+msgid "To edit a file, type"
+msgstr "Para editar um arquivo, digite"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:278
+#, no-wrap
+msgid "# vi filename\n"
+msgstr "# vi filename\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:283
+msgid ""
+"Move through the text with the arrow keys. kbd:[Esc] (the escape key) puts "
+"`vi` in command mode. Here are some commands:"
+msgstr ""
+"Para mover-se pelo texto, use as teclas de seta. Pressione kbd:[Esc] (a "
+"tecla de escape) para entrar no modo de comando do `vi`. Aqui estão alguns "
+"comandos:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:284
+#, no-wrap
+msgid "`x`"
+msgstr "`x`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:286
+msgid "delete letter the cursor is on"
+msgstr "deleta a letra localizada onde o cursor está"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:287
+#, no-wrap
+msgid "`dd`"
+msgstr "`dd`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:289
+msgid "delete the entire line (even if it wraps on the screen)"
+msgstr ""
+"Apaga a linha inteira (mesmo se ela estiver aparecendo quebrada na tela em "
+"varias linhas)"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:290
+#, no-wrap
+msgid "`i`"
+msgstr "`i`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:292
+msgid "insert text at the cursor"
+msgstr "Insere um texto na posição do cursor"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:293
+#, no-wrap
+msgid "`a`"
+msgstr "`a`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:295
+msgid "insert text after the cursor"
+msgstr "Insere um texto após a posição do cursor"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:298
+msgid ""
+"Once you type `i` or `a`, you can enter text. `Esc` puts you back in "
+"command mode where you can type"
+msgstr ""
+"Depois de digitar `i` ou `a`, você pode inserir texto. `Esc` coloca você de "
+"volta no modo de comando onde você pode digitar"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:299
+#, no-wrap
+msgid "`:w`"
+msgstr "`:w`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:301
+msgid "to write your changes to disk and continue editing"
+msgstr "para gravar suas alterações no disco e continuar editando"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:302
+#, no-wrap
+msgid "`:wq`"
+msgstr "`:wq`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:304
+msgid "to write and quit"
+msgstr "para gravar e sair"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:305
+#, no-wrap
+msgid "`:q!`"
+msgstr "`:q!`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:307
+msgid "to quit without saving changes"
+msgstr "para sair do arquivo sem salvar as alterações"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:308
+#, no-wrap
+msgid "`/_text_`"
+msgstr "`/_text_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:310
+msgid ""
+"to move the cursor to _text_; `/` kbd:[Enter] (the enter key) to find the "
+"next instance of _text_."
+msgstr ""
+"para mover o cursor para _text_; `/` kbd:[Enter] (a tecla enter) para "
+"encontrar a próxima ocorrência de _text_."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:311
+#, no-wrap
+msgid "`G`"
+msgstr "`G`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:313
+msgid "to go to the end of the file"
+msgstr "para ir para o final do arquivo"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:314
+#, no-wrap
+msgid "`nG`"
+msgstr "`nG`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:316
+msgid "to go to line _n_ in the file, where _n_ is a number"
+msgstr "para ir para a linha _n_ no arquivo, onde _n_ é um número"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:317
+#, no-wrap
+msgid "kbd:[Ctrl+L]"
+msgstr "kbd:[Ctrl+L]"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:319
+msgid "to redraw the screen"
+msgstr "para redesenhar a tela"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:320
+#, no-wrap
+msgid "kbd:[Ctrl+b] and kbd:[Ctrl+f]"
+msgstr "kbd:[Ctrl+b] and kbd:[Ctrl+f]"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:322
+msgid "go back and forward a screen, as they do with `more` and `view`."
+msgstr "para voltar e avançar uma tela, como fazem o `more` e o `view`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:327
+msgid ""
+"Practice with `vi` in your home directory by creating a new file with `vi "
+"_filename_` and adding and deleting text, saving the file, and calling it up "
+"again. `vi` delivers some surprises because it is really quite complex, and "
+"sometimes you will inadvertently issue a command that will do something you "
+"do not expect. (Some people actually like `vi`-it is more powerful than DOS "
+"EDIT-find out about `:r`.) Use kbd:[Esc] one or more times to be sure you "
+"are in command mode and proceed from there when it gives you trouble, save "
+"often with `:w`, and use `:q!` to get out and start over (from your last `:"
+"w`) when you need to."
+msgstr ""
+"Pratique com `vi` no seu diretório pessoal, criando um novo arquivo com o "
+"comando `vi _nome_do_arquivo_ , adicionando e excluindo texto, salvando o "
+"arquivo e chamando-o novamente. O `vi` oferece algumas surpresas porque é "
+"realmente bastante complexo e às vezes você inadvertidamente emite um "
+"comando que fará algo que você não espera. (Algumas pessoas realmente gostam "
+"do `vi` - é mais poderoso que o EDIT do DOS - descubra sobre o `:r`.) Use "
+"kbd:[Esc] uma ou mais vezes para ter certeza de que está no modo de comando "
+"e prossiga a partir daí quando ele lhe der problemas, salve frequentemente "
+"com `:w` e use `:q!` para sair e começar de novo (a partir do último `:w`) "
+"quando precisar."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:331
+msgid ""
+"Now you can `cd` to [.filename]#/etc#, `su` to `root`, use `vi` to edit the "
+"file [.filename]#/etc/group#, and add a user to `wheel` so the user has root "
+"privileges. Just add a comma and the user's login name to the end of the "
+"first line in the file, press kbd:[Esc], and use `:wq` to write the file to "
+"disk and quit. Instantly effective. (You did not put a space after the "
+"comma, did you?)"
+msgstr ""
+"Agora você pode fazer `cd` para [.filename]#/etc#, `su` para `root`, usar "
+"`vi` para editar o arquivo [.filename]#/etc/group# e adicionar um usuário ao "
+"grupo `wheel ` para que ele tenha privilégios de root. Basta adicionar uma "
+"vírgula e o nome de login do usuário ao final da primeira linha do arquivo, "
+"pressionar kbd:[Esc] e usar `:wq` para gravar o arquivo no disco e sair. "
+"Instantaneamente eficaz. (Você não colocou um espaço após a vírgula, "
+"colocou?)"
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:333
+#, no-wrap
+msgid "Other Useful Commands"
+msgstr "Outros comandos úteis"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:335
+#, no-wrap
+msgid "`df`"
+msgstr "`df`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:337
+msgid "shows file space and mounted systems."
+msgstr "mostra o espaço dos sistemas de arquivos que estão montados."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:338
+#, no-wrap
+msgid "`ps aux`"
+msgstr "`ps aux`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:340
+msgid "shows processes running. `ps ax` is a narrower form."
+msgstr "Mostra os processos em execução. ps ax é uma forma mais simplificada."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:341
+#, no-wrap
+msgid "`rm _filename_`"
+msgstr "`rm _filename_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:343
+msgid "remove _filename_."
+msgstr "remove o arquivo _filename_."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:344
+#, no-wrap
+msgid "`rm -R _dir_`"
+msgstr "`rm -R _dir_`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:346
+msgid "removes a directory _dir_ and all subdirectories-careful!"
+msgstr "remove um diretório _dir_ e todos os subdiretórios - use com cuidado!"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:347
+#, no-wrap
+msgid "`ls -R`"
+msgstr "`ls -R`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:349
+msgid ""
+"lists files in the current directory and all subdirectories; I used a "
+"variant, `ls -AFR > where.txt`, to get a list of all the files in [."
+"filename]#/# and (separately) [.filename]#/usr# before I found better ways "
+"to find files."
+msgstr ""
+"lista arquivos no diretório atual e todos os subdiretórios; Usei uma "
+"variante, `ls -AFR > where.txt`, para obter uma lista de todos os arquivos "
+"em [.filename]#/# e (separadamente) [.filename]#/usr# antes de encontrar "
+"maneiras melhores de encontrar arquivos."
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:350
+#, no-wrap
+msgid "`passwd`"
+msgstr "`passwd`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:352
+msgid "to change user's password (or ``root``'s password)"
+msgstr "para alterar a senha do usuário (ou a senha do ``root``)"
+
+#. type: Labeled list
+#: documentation/content/en/articles/new-users/_index.adoc:353
+#, no-wrap
+msgid "`man hier`"
+msgstr "`man hier`"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:355
+msgid "manual page on the UNIX(R) filesystem"
+msgstr "página de manual no sistema de arquivos UNIX(R)"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:357
+msgid ""
+"Use `find` to locate [.filename]#filename# in [.filename]#/usr# or any of "
+"its subdirectories with"
+msgstr ""
+"Use o `find` para localizar o arquivo [.filename]#filename# em [."
+"filename]#/usr# ou qualquer um de seus subdiretórios com"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:361
+#, no-wrap
+msgid "% find /usr -name \"filename\"\n"
+msgstr "% find /usr -name \"filename\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:365
+msgid ""
+"You can use * as a wildcard in `\"_filename_\"` (which should be in "
+"quotes). If you tell `find` to search in [.filename]#/# instead of [."
+"filename]#/usr# it will look for the file(s) on all mounted filesystems, "
+"including the CDROM and the DOS partition."
+msgstr ""
+"Você pode usar * como curinga em `\"_filename_\"` (que deve estar entre "
+"aspas). Se você disser ao `find` para procurar em [.filename]#/# ao invés de "
+"[.filename]#/usr# ele irá procurar o(s) arquivo(s) em todos os sistemas de "
+"arquivos montados, incluindo o CD-ROM e a partição DOS."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:367
+msgid ""
+"An excellent book that explains UNIX(R) commands and utilities is Abrahams & "
+"Larson, Unix for the Impatient (2nd ed., Addison-Wesley, 1996). There is "
+"also a lot of UNIX(R) information on the Internet."
+msgstr ""
+"Um livro excelente que explica os comandos e utilitários do UNIX(R) é "
+"Abrahams & Larson, Unix for the Impacient (2ª ed., Addison-Wesley, 1996). "
+"Também há muitas informações sobre o UNIX(R) na Internet."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:369
+#, no-wrap
+msgid "Next Steps"
+msgstr "Próximos Passos"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:376
+msgid ""
+"You should now have the tools you need to get around and edit files, so you "
+"can get everything up and running. There is a great deal of information in "
+"the FreeBSD handbook (which is probably on your hard drive) and link:https://"
+"www.FreeBSD.org/[FreeBSD's web site]. A wide variety of packages and ports "
+"are on the CDROM as well as the web site. The handbook tells you more about "
+"how to use them (get the package if it exists, with `pkg add _packagename_`, "
+"where _packagename_ is the filename of the package). The CDROM has lists of "
+"the packages and ports with brief descriptions in [.filename]#cdrom/packages/"
+"index#, [.filename]#cdrom/packages/index.txt#, and [.filename]#cdrom/ports/"
+"index#, with fuller descriptions in [.filename]#/cdrom/ports/\\*/*/pkg/"
+"DESCR#, where the *s represent subdirectories of kinds of programs and "
+"program names respectively."
+msgstr ""
+"Você agora deve ter as ferramentas necessárias para navegar e editar "
+"arquivos, para que possa colocar tudo em funcionamento. Existe uma grande "
+"quantidade de informações no Handbook do FreeBSD (que provavelmente está no "
+"seu disco rígido) e no site do link:https://www.FreeBSD.org/[FreeBSD]. Uma "
+"ampla variedade de pacotes e ports estão no CDROM, bem como no site. O "
+"Handbook explica mais sobre como usá-los (obtenha o pacote se existir, com `"
+"pkg add _nomedopacote_`, onde nomedopacote é o nome do arquivo do pacote). O "
+"CDROM contém listas dos pacotes e ports com breves descrições em [.filename]#"
+"cdrom/packages/index#, [.filename]#cdrom/packages/index.txt#, e [.filename]#"
+"cdrom/ports/index#, e com descrições mais detalhadas em [.filename]#/cdrom/"
+"ports/\\*/*/pkg/DESCR#, onde os *s representam subdiretórios de tipos de "
+"programas e nomes de programas, respectivamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:378
+msgid ""
+"If you find the handbook too sophisticated (what with `lndir` and all) on "
+"installing ports from the CDROM, here is what usually works:"
+msgstr ""
+"Se você achar o handbook muito sofisticado (com isso do `lndir` e tudo mais) "
+"ao instalar os ports do CDROM, veja a seguir o que geralmente funciona:"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:381
+msgid ""
+"Find the port you want, say `kermit`. There will be a directory for it on "
+"the CDROM. Copy the subdirectory to [.filename]#/usr/local# (a good place "
+"for software you add that should be available to all users) with:"
+msgstr ""
+"Encontre o port que você deseja, digamos o `kermit`. Haverá um diretório "
+"para ele no CDROM. Copie o subdiretório para [.filename]#/usr/local# (este é "
+"um bom lugar para softwares que você adiciona no sistema e que devem estar "
+"disponíveis para todos os usuários) com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:385
+#, no-wrap
+msgid "# cp -R /cdrom/ports/comm/kermit /usr/local\n"
+msgstr "# cp -R /cdrom/ports/comm/kermit /usr/local\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:388
+msgid ""
+"This should result in a [.filename]#/usr/local/kermit# subdirectory that has "
+"all the files that the `kermit` subdirectory on the CDROM has."
+msgstr ""
+"Isso deve resultar em um subdiretório [.filename]#/usr/local/kermit# que "
+"contém todos os arquivos que o subdiretório `kermit` no CD-ROM possui."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:393
+msgid ""
+"Next, create the directory [.filename]#/usr/ports/distfiles# if it does not "
+"already exist using `mkdir`. Now check [.filename]#/cdrom/ports/distfiles# "
+"for a file with a name that indicates it is the port you want. Copy that "
+"file to [.filename]#/usr/ports/distfiles#; in recent versions you can skip "
+"this step, as FreeBSD will do it for you. In the case of `kermit`, there is "
+"no distfile."
+msgstr ""
+"Em seguida, crie o diretório [.filename]#/usr/ports/distfiles# se ele ainda "
+"não existir usando o comando `mkdir`. Agora verifique o [.filename]#/cdrom/"
+"ports/distfiles# para localizar um arquivo com um nome que indique que é o "
+"port que você deseja. Copie esse arquivo para [.filename]#/usr/ports/"
+"distfiles#; nas versões recentes, você pode pular esta etapa, pois o FreeBSD "
+"fará isso por você. No caso de `kermit`, não há distfile."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:396
+msgid ""
+"Then `cd` to the subdirectory of [.filename]#/usr/local/kermit# that has the "
+"file [.filename]#Makefile#. Type"
+msgstr ""
+"Então utilize o `cd` para ir para o subdiretório [.filename]#/usr/local/"
+"kermit# que contém o arquivo [.filename]#Makefile#. E execute"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:400
+#, no-wrap
+msgid "# make all install\n"
+msgstr "# make all install\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:406
+msgid ""
+"During this process the port will FTP to get any compressed files it needs "
+"that it did not find on the CDROM or in [.filename]#/usr/ports/distfiles#. "
+"If you do not have your network running yet and there was no file for the "
+"port in [.filename]#/cdrom/ports/distfiles#, you will have to get the "
+"distfile using another machine and copy it to [.filename]#/usr/ports/"
+"distfiles#. Read [.filename]#Makefile# (with `cat` or `more` or `view`) to "
+"find out where to go (the master distribution site) to get the file and what "
+"its name is. (Use binary file transfers!) Then go back to [.filename]#/usr/"
+"local/kermit#, find the directory with [.filename]#Makefile#, and type `make "
+"all install`."
+msgstr ""
+"Durante esse processo, o port fará o download via FTP de quaisquer arquivos "
+"compactados que precise e que não foram encontrados no CDROM ou no diretório "
+"[.filename]#/usr/ports/distfiles#. Se você não tiver a rede funcionando "
+"ainda e não houver um arquivo para o port em [.filename]#/cdrom/ports/"
+"distfiles#, você precisará obter o distfile usando outra máquina e copiá-lo "
+"para [.filename]#/usr/ports/distfiles#. Leia o [.filename]#Makefile# (com "
+"`cat` ou `more` ou `view`) para descobrir onde obter o arquivo (o site de "
+"distribuição principal) e qual é o nome dele. (Use transferências de arquivo "
+"binário!) Em seguida, volte para [.filename]#/usr/local/kermit#, encontre o "
+"diretório com o [.filename]#Makefile# e execute o `make all install`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:408
+#, no-wrap
+msgid "Your Working Environment"
+msgstr "Seu ambiente de trabalho"
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:413
+msgid ""
+"Your shell is the most important part of your working environment. The "
+"shell is what interprets the commands you type on the command line, and thus "
+"communicates with the rest of the operating system. You can also write "
+"shell scripts a series of commands to be run without intervention."
+msgstr ""
+"Seu shell é a parte mais importante do seu ambiente de trabalho. O shell é o "
+"que interpreta os comandos que você digita na linha de comando e, assim, se "
+"comunica com o restante do sistema operacional. Você também pode escrever "
+"scripts de shell, que consiste em uma série de comandos para serem "
+"executados sem intervenção."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:417
+msgid ""
+"Two shells come installed with FreeBSD: `csh` and `sh`. `csh` is good for "
+"command-line work, but scripts should be written with `sh` (or `bash`). You "
+"can find out what shell you have by typing `echo $SHELL`."
+msgstr ""
+"Dois shells vêm instalados com o FreeBSD: `csh` e `sh`. O `csh` é bom para "
+"trabalho na linha de comando, mas os scripts devem ser escritos com `sh` (ou "
+"`bash`). Você pode descobrir qual shell você tem digitando `echo $SHELL`."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:423
+msgid ""
+"The `csh` shell is okay, but `tcsh` does everything `csh` does and more. It "
+"allows you to recall commands with the arrow keys and edit them. It has tab-"
+"key completion of filenames (`csh` uses kbd:[Esc]), and it lets you switch "
+"to the directory you were last in with `cd -`. It is also much easier to "
+"alter your prompt with `tcsh`. It makes life a lot easier."
+msgstr ""
+"O shell `csh` é bom, mas o `tcsh` faz tudo o que o `csh` faz e muito mais. "
+"Ele permite que você recupere comandos com as teclas de seta e edite-os. Ele "
+"completa os nomes dos arquivos com a tecla de tabulação (o `csh` usa "
+"kbd:[Esc]) e permite alternar para o último diretório em que você estava com "
+"`cd -`. Também é muito mais fácil alterar seu prompt com `tcsh`. Ele torna a "
+"vida muito mais fácil."
+
+#. type: Plain text
+#: documentation/content/en/articles/new-users/_index.adoc:425
+msgid "Here are the three steps for installing a new shell:"
+msgstr "Aqui estão os três passos para instalar um novo shell:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:429
+msgid ""
+"Install the shell as a port or a package, just as you would any other port "
+"or package."
+msgstr ""
+"Instale o shell como um port ou um pacote, como faria com qualquer outro "
+"port ou pacote."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:430
+msgid ""
+"Use `chsh` to change your shell to `tcsh` permanently, or type `tcsh` at the "
+"prompt to change your shell without logging in again."
+msgstr ""
+"Use `chsh` para alterar seu shell para `tcsh` permanentemente, ou digite "
+"`tcsh` no prompt para alterar seu shell sem fazer login novamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:438
+msgid ""
+"It can be dangerous to change `root`'s shell to something other than `sh` or "
+"`csh` on early versions of FreeBSD and many other versions of UNIX(R); you "
+"may not have a working shell when the system puts you into single user "
+"mode. The solution is to use `su -m` to become `root`, which will give you "
+"the `tcsh` as `root`, because the shell is part of the environment. You can "
+"make this permanent by adding it to your [.filename]#.tcshrc# as an alias "
+"with:"
+msgstr ""
+"Pode ser perigoso mudar o shell `root` para algo diferente de `sh` ou `csh` "
+"nas primeiras versões do FreeBSD e muitas outras versões do UNIX(R); você "
+"pode não ter um shell funcionando quando o sistema o coloca no modo de "
+"usuário único. A solução é usar `su -m` para se tornar `root`, o que lhe "
+"dará o `tcsh` como `root`, porque o shell faz parte do ambiente. Você pode "
+"torná-lo permanente adicionando-o ao seu arquivo [.filename]#.tcshrc# como "
+"um alias com:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/new-users/_index.adoc:442
+#, no-wrap
+msgid "alias su su -m\n"
+msgstr "alias su su -m\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:449
+msgid ""
+"When `tcsh` starts up, it will read the [.filename]#/etc/csh.cshrc# and [."
+"filename]#/etc/csh.login# files, as does `csh`. It will also read [."
+"filename]#.login# in your home directory and [.filename]#.cshrc# as well, "
+"unless you provide a [.filename]#.tcshrc#. This you can do by simply "
+"copying [.filename]#.cshrc# to [.filename]#.tcshrc#."
+msgstr ""
+"Quando o `tcsh` iniciar, ele lerá os arquivos [.filename]#/etc/csh.cshrc# e ["
+".filename]#/etc/csh.login#, assim como o `csh`. Ele também lerá [.filename]#."
+"login# em seu diretório inicial e bem como o [.filename]#.cshrc#, a menos "
+"que você forneça um [.filename]#.tcshrc#. Isso pode ser feito simplesmente "
+"copiando [.filename]#.cshrc# para [.filename]#.tcshrc#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:453
+msgid ""
+"Now that you have installed `tcsh`, you can adjust your prompt. You can "
+"find the details in the manual page for `tcsh`, but here is a line to put in "
+"your [.filename]#.tcshrc# that will tell you how many commands you have "
+"typed, what time it is, and what directory you are in. It also produces a "
+"`>` if you are an ordinary user and a # if you are `root`, but tsch will do "
+"that in any case:"
+msgstr ""
+"Agora que você instalou o `tcsh`, você pode ajustar seu prompt. Você pode "
+"encontrar os detalhes na página de manual do `tcsh`, mas aqui está uma linha "
+"para colocar no seu [.filename]#.tcshrc# que lhe dirá quantos comandos você "
+"digitou, que horas são e em qual diretório você está. Ele também produz um "
+"`>` se você for um usuário comum e um # se você for `root`, mas o tsch fará "
+"isso em qualquer caso:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:455
+msgid "set prompt = \"%h %t %~ %# \""
+msgstr "set prompt = \"%h %t %~ %# \""
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:460
+msgid ""
+"This should go in the same place as the existing set prompt line if there is "
+"one, or under \"if($?prompt) then\" if not. Comment out the old line; you "
+"can always switch back to it if you prefer it. Do not forget the spaces and "
+"quotes. You can get the [.filename]#.tcshrc# reread by typing `source ."
+"tcshrc`."
+msgstr ""
+"Isso deve ir no mesmo lugar que a linha de configuração do prompt existente, "
+"se houver, ou sob \"if($?prompt) then\" se não. Comente a linha antiga; você "
+"sempre pode voltar para ele, se preferir. Não se esqueça dos espaços e "
+"aspas. Você pode reaplicar as opções do [.filename]#.tcshrc# digitando `"
+"source .tcshrc`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:464
+msgid ""
+"You can get a listing of other environmental variables that have been set by "
+"typing `env` at the prompt. The result will show you your default editor, "
+"pager, and terminal type, among possibly many others. A useful command if "
+"you log in from a remote location and cannot run a program because the "
+"terminal is not capable is `setenv TERM vt100`."
+msgstr ""
+"Você pode obter uma lista das outras variáveis de ambiente que foram "
+"definidas digitando `env` no prompt. O resultado mostrará seu editor, pager "
+"e tipo de terminal padrão, entre possivelmente muitos outros. Um comando "
+"útil se você efetuar login de um local remoto e não puder executar um "
+"programa porque o terminal não é capaz é `setenv TERM vt100`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:466
+#, no-wrap
+msgid "Other"
+msgstr "Outros"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:470
+msgid ""
+"As `root`, you can unmount the CDROM with `/sbin/umount /cdrom`, take it out "
+"of the drive, insert another one, and mount it with `/sbin/mount_cd9660 /dev/"
+"cd0a /cdrom` assuming cd0a is the device name for your CDROM drive. The "
+"most recent versions of FreeBSD let you mount the CDROM with just `/sbin/"
+"mount /cdrom`."
+msgstr ""
+"Como `root`, você pode desmontar o CDROM com `/sbin/umount /cdrom`, retirá-"
+"lo da unidade, inserir outro e montá-lo com `/sbin/mount_cd9660 /dev/cd0a "
+"/cdrom` assumindo que cd0a é o nome do dispositivo para sua unidade de CD-"
+"ROM. As versões mais recentes do FreeBSD permitem que você monte o CDROM "
+"apenas com `/sbin/mount /cdrom`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:476
+msgid ""
+"Using the live filesystem-the second of FreeBSD's CDROM disks-is useful if "
+"you have got limited space. What is on the live filesystem varies from "
+"release to release. You might try playing games from the CDROM. This "
+"involves using `lndir`, which gets installed with the X Window System, to "
+"tell the program(s) where to find the necessary files, because they are in [."
+"filename]#/cdrom# instead of in [.filename]#/usr# and its subdirectories, "
+"which is where they are expected to be. Read `man lndir`."
+msgstr ""
+"Usar o sistema de arquivos ao vivo (live filesystem), o segundo dos discos "
+"do CDROM do FreeBSD, é útil se você tem espaço limitado. O que está no "
+"sistema de arquivos ao vivo varia de versão para versão. Você pode tentar "
+"jogar jogos do CDROM. Isso envolve o uso do `lndir`, que é instalado com o X "
+"Window System, para informar ao(s) programa(s) onde encontrar os arquivos "
+"necessários, pois eles estão em [.filename]#/cdrom# em vez de em [."
+"filename]#/usr# e seus subdiretórios, onde são esperados. Leia `man lndir`."
+
+#. type: Title ==
+#: documentation/content/en/articles/new-users/_index.adoc:478
+#, no-wrap
+msgid "Comments Welcome"
+msgstr "Comentários são bem-vindos"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:482
+msgid ""
+"If you use this guide I would be interested in knowing where it was unclear "
+"and what was left out that you think should be included, and if it was "
+"helpful. My thanks to Eugene W. Stark, professor of computer science at "
+"SUNY-Stony Brook, and John Fieber for helpful comments."
+msgstr ""
+"Se você usou este guia, ficaria interessado em saber onde não ficou claro e "
+"o que foi deixado de fora que você acha que deveria ser incluído, e se foi "
+"útil. Meus agradecimentos a Eugene W. Stark, professor de ciência da "
+"computação da SUNY-Stony Brook, e John Fieber por seus comentários úteis."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/new-users/_index.adoc:483
+msgid ""
+"Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford."
+"edu]"
+msgstr ""
+"Annelise Anderson, mailto:andrsn@andrsn.stanford.edu[andrsn@andrsn.stanford."
+"edu]"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/pam/_index.adoc b/documentation/content/pt-br/articles/pam/_index.adoc
index cc5c9a1f8f..59f4a3a459 100644
--- a/documentation/content/pt-br/articles/pam/_index.adoc
+++ b/documentation/content/pt-br/articles/pam/_index.adoc
@@ -3,7 +3,6 @@ title: Módulos de Autenticação Plugáveis
authors:
- author: Dag-Erling Smørgrav
copyright: 2001-2003 Networks Associates Technology, Inc.
-releaseinfo: "$FreeBSD$"
trademarks: ["pam", "freebsd", "linux", "opengroup", "sun", "general"]
---
@@ -16,13 +15,30 @@ trademarks: ["pam", "freebsd", "linux", "opengroup", "sun", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/pam/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+:include-path: static/source/articles/pam/
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+:include-path: ../../../../static/source/articles/pam/
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+:include-path: ../../../../static/source/articles/pam/
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
diff --git a/documentation/content/pt-br/articles/pgpkeys/_index.adoc b/documentation/content/pt-br/articles/pgpkeys/_index.adoc
index 091ddb2130..2b09008f1e 100644
--- a/documentation/content/pt-br/articles/pgpkeys/_index.adoc
+++ b/documentation/content/pt-br/articles/pgpkeys/_index.adoc
@@ -1,6 +1,7 @@
---
-title: Chaves OpenPGP
-releaseinfo: "$FreeBSD$"
+description: 'Lista de chaves OpenPGP que podem ser usadas para verificar uma assinatura ou enviar e-mail criptografado para oficiais ou desenvolvedores do FreeBSD.org.'
+tags: ["OpenPGP", "Developers", "Officers", "FreeBSD"]
+title: 'Chaves OpenPGP'
---
= Chaves OpenPGP
@@ -12,1765 +13,1440 @@ releaseinfo: "$FreeBSD$"
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/pgpkeys/
+ifdef::env-beastie[]
+ifdef::backend-html5[]
include::shared/authors.adoc[]
-include::shared/pt-br/teams.adoc[lines=21..-1]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+:include-path: static/pgpkeys/
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+// PGP keys are not included during the build
+// See 29e47423be969b7fcc7125977c1b22ddd33fc671 revision
+// (a wrong path is used as a workaround)
+:include-path: ../../../static/pgpkeys/
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+:include-path: ../../../static/pgpkeys/
+endif::[]
'''
toc::[]
-Estas chaves OpenPGP podem ser usadas para verificar uma assinatura ou enviar um email criptografado para officers ou desenvolvedores do `FreeBSD.org`. Todas as chaves podem ser baixadas em link:https://www.FreeBSD.org/doc/pgpkeyring.txt[https://www.FreeBSD.org/doc/pgpkeyring.txt].
+Estas chaves OpenPGP podem ser usadas para verificar uma assinatura ou enviar um email criptografado para oficiais ou desenvolvedores do `FreeBSD.org`. Todas as chaves podem ser baixadas em link:https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[pgpkeyring.txt].
+
+////
+Do not edit this file except as instructed by the addkey.sh script.
+
+See the README file in /data/pgpkeys for instructions.
+
+This article contains all the keys. The officer keys are also
+shown in the Handbook PGP keys chapter.
+////
[[pgpkeys-officers]]
-== Officers
+== Oficiais
=== {security-officer-name} `<{security-officer-email}>`
-include::static/pgpkeys/security-officer.key[]
-
-=== {secteam-secretary-name} `<{secteam-secretary-email}>`
-include::static/pgpkeys/secteam-secretary.key[]
+include::{include-path}security-officer.key[]
=== {core-secretary-name} `<{core-secretary-email}>`
-include::static/pgpkeys/core-secretary.key[]
+include::{include-path}core-secretary.key[]
=== {portmgr-secretary-name} `<{portmgr-secretary-email}>`
-include::static/pgpkeys/portmgr-secretary.key[]
+include::{include-path}portmgr-secretary.key[]
-=== `{doceng-secretary-email}`
-include::static/pgpkeys/doceng-secretary.key[]
+=== {doceng-secretary-name} `<{doceng-secretary-email}>`
+include::{include-path}doceng-secretary.key[]
[[pgpkeys-core]]
== Membros do Core Team
=== `{bapt}`
-include::static/pgpkeys/bapt.key[]
-
-=== `{emaste}`
-include::static/pgpkeys/emaste.key[]
+include::{include-path}bapt.key[]
-=== `{gnn}`
-include::static/pgpkeys/gnn.key[]
+=== `{bcr}`
+include::{include-path}bcr.key[]
-=== `{hrs}`
-include::static/pgpkeys/hrs.key[]
+=== `{grog}`
+include::{include-path}grog.key[]
-=== `{imp}`
-include::static/pgpkeys/imp.key[]
+=== `{jhb}`
+include::{include-path}jhb.key[]
-=== `{kevans}`
-include::static/pgpkeys/kevans.key[]
+=== `{lwhsu}`
+include::{include-path}lwhsu.key[]
-=== `{markj}`
-include::static/pgpkeys/markj.key[]
+=== `{manu}`
+include::{include-path}manu.key[]
-=== `{scottl}`
-include::static/pgpkeys/scottl.key[]
+=== `{tcberner}`
+include::{include-path}tcberner.key[]
-=== `{seanc}`
-include::static/pgpkeys/seanc.key[]
+=== `{0mp}`
+include::{include-path}0mp.key[]
[[pgpkeys-developers]]
== Desenvolvedores
+=== `{jgh}`
+include::{include-path}jgh.key[]
+
=== `{ariff}`
-include::static/pgpkeys/ariff.key[]
+include::{include-path}ariff.key[]
=== `{tabthorpe}`
-include::static/pgpkeys/tabthorpe.key[]
+include::{include-path}tabthorpe.key[]
=== `{eadler}`
-include::static/pgpkeys/eadler.key[]
+include::{include-path}eadler.key[]
-=== `{mahrens}`
-include::static/pgpkeys/mahrens.key[]
+=== `{pauamma}`
+include::{include-path}pauamma.key[]
=== `{shaun}`
-include::static/pgpkeys/shaun.key[]
+include::{include-path}shaun.key[]
=== `{brix}`
-include::static/pgpkeys/brix.key[]
+include::{include-path}brix.key[]
=== `{mandree}`
-include::static/pgpkeys/mandree.key[]
+include::{include-path}mandree.key[]
=== `{will}`
-include::static/pgpkeys/will.key[]
+include::{include-path}will.key[]
=== `{dim}`
-include::static/pgpkeys/dim.key[]
+include::{include-path}dim.key[]
=== `{anholt}`
-include::static/pgpkeys/anholt.key[]
+include::{include-path}anholt.key[]
=== `{fernape}`
-include::static/pgpkeys/fernape.key[]
+include::{include-path}fernape.key[]
=== `{mva}`
-include::static/pgpkeys/mva.key[]
+include::{include-path}mva.key[]
=== `{araujo}`
-include::static/pgpkeys/araujo.key[]
+include::{include-path}araujo.key[]
=== `{mat}`
-include::static/pgpkeys/mat.key[]
+include::{include-path}mat.key[]
=== `{syuu}`
-include::static/pgpkeys/syuu.key[]
+include::{include-path}syuu.key[]
=== `{asami}`
-include::static/pgpkeys/asami.key[]
-
-=== `{gavin}`
-include::static/pgpkeys/gavin.key[]
+include::{include-path}asami.key[]
=== `{jsa}`
-include::static/pgpkeys/jsa.key[]
+include::{include-path}jsa.key[]
=== `{jadawin}`
-include::static/pgpkeys/jadawin.key[]
+include::{include-path}jadawin.key[]
=== `{jwb}`
-include::static/pgpkeys/jwb.key[]
-
-=== `{badger}`
-include::static/pgpkeys/badger.key[]
+include::{include-path}jwb.key[]
=== `{dbaio}`
-include::static/pgpkeys/dbaio.key[]
+include::{include-path}dbaio.key[]
=== `{timur}`
-include::static/pgpkeys/timur.key[]
+include::{include-path}timur.key[]
=== `{jhb}`
-include::static/pgpkeys/jhb.key[]
+include::{include-path}jhb.key[]
=== `{gjb}`
-include::static/pgpkeys/gjb.key[]
+include::{include-path}gjb.key[]
=== `{snb}`
-include::static/pgpkeys/snb.key[]
+include::{include-path}snb.key[]
=== `{barner}`
-include::static/pgpkeys/barner.key[]
+include::{include-path}barner.key[]
=== `{lbartoletti}`
-include::static/pgpkeys/lbartoletti.key[]
-
-=== `{jbeich}`
-include::static/pgpkeys/jbeich.key[]
+include::{include-path}lbartoletti.key[]
=== `{art}`
-include::static/pgpkeys/art.key[]
+include::{include-path}art.key[]
=== `{tobez}`
-include::static/pgpkeys/tobez.key[]
+include::{include-path}tobez.key[]
=== `{damien}`
-include::static/pgpkeys/damien.key[]
+include::{include-path}damien.key[]
=== `{bdragon}`
-include::static/pgpkeys/bdragon.key[]
+include::{include-path}bdragon.key[]
=== `{tcberner}`
-include::static/pgpkeys/tcberner.key[]
+include::{include-path}tcberner.key[]
=== `{tdb}`
-include::static/pgpkeys/tdb.key[]
-
-=== `{gblach}`
-include::static/pgpkeys/gblach.key[]
+include::{include-path}tdb.key[]
=== `{mbr}`
-include::static/pgpkeys/mbr.key[]
-
-=== `{wblock}`
-include::static/pgpkeys/wblock.key[]
+include::{include-path}mbr.key[]
=== `{bvs}`
-include::static/pgpkeys/bvs.key[]
-
-=== `{zbb}`
-include::static/pgpkeys/zbb.key[]
+include::{include-path}bvs.key[]
=== `{novel}`
-include::static/pgpkeys/novel.key[]
+include::{include-path}novel.key[]
=== `{garga}`
-include::static/pgpkeys/garga.key[]
+include::{include-path}garga.key[]
=== `{kbowling}`
-include::static/pgpkeys/kbowling.key[]
+include::{include-path}kbowling.key[]
=== `{alexbl}`
-include::static/pgpkeys/alexbl.key[]
-
-=== `{sbz}`
-include::static/pgpkeys/sbz.key[]
+include::{include-path}alexbl.key[]
=== `{ebrandi}`
-include::static/pgpkeys/ebrandi.key[]
-
-=== `{dab}`
-include::static/pgpkeys/dab.key[]
+include::{include-path}ebrandi.key[]
=== `{harti}`
-include::static/pgpkeys/harti.key[]
+include::{include-path}harti.key[]
=== `{obraun}`
-include::static/pgpkeys/obraun.key[]
+include::{include-path}obraun.key[]
=== `{makc}`
-include::static/pgpkeys/makc.key[]
+include::{include-path}makc.key[]
=== `{jmb}`
-include::static/pgpkeys/jmb.key[]
+include::{include-path}jmb.key[]
=== `{antoine}`
-include::static/pgpkeys/antoine.key[]
+include::{include-path}antoine.key[]
=== `{db}`
-include::static/pgpkeys/db.key[]
+include::{include-path}db.key[]
=== `{brueffer}`
-include::static/pgpkeys/brueffer.key[]
+include::{include-path}brueffer.key[]
=== `{markus}`
-include::static/pgpkeys/markus.key[]
-
-=== `{sbruno}`
-include::static/pgpkeys/sbruno.key[]
+include::{include-path}markus.key[]
=== `{br}`
-include::static/pgpkeys/br.key[]
-
-=== `{oleg}`
-include::static/pgpkeys/oleg.key[]
-
-=== `{bushman}`
-include::static/pgpkeys/bushman.key[]
-
-=== `{adrian}`
-include::static/pgpkeys/adrian.key[]
+include::{include-path}br.key[]
=== `{jch}`
-include::static/pgpkeys/jch.key[]
+include::{include-path}jch.key[]
=== `{jchandra}`
-include::static/pgpkeys/jchandra.key[]
+include::{include-path}jchandra.key[]
=== `{jcamou}`
-include::static/pgpkeys/jcamou.key[]
+include::{include-path}jcamou.key[]
=== `{acm}`
-include::static/pgpkeys/acm.key[]
+include::{include-path}acm.key[]
=== `{gahr}`
-include::static/pgpkeys/gahr.key[]
+include::{include-path}gahr.key[]
=== `{dchagin}`
-include::static/pgpkeys/dchagin.key[]
+include::{include-path}dchagin.key[]
=== `{perky}`
-include::static/pgpkeys/perky.key[]
+include::{include-path}perky.key[]
=== `{jon}`
-include::static/pgpkeys/jon.key[]
+include::{include-path}jon.key[]
=== `{jonathan}`
-include::static/pgpkeys/jonathan.key[]
+include::{include-path}jonathan.key[]
=== `{loader}`
-include::static/pgpkeys/loader.key[]
+include::{include-path}loader.key[]
=== `{luoqi}`
-include::static/pgpkeys/luoqi.key[]
+include::{include-path}luoqi.key[]
=== `{ache}`
-include::static/pgpkeys/ache.key[]
+include::{include-path}ache.key[]
=== `{melifaro}`
-include::static/pgpkeys/melifaro.key[]
-
-=== `{seanc}`
-include::static/pgpkeys/seanc.key[]
+include::{include-path}melifaro.key[]
=== `{cjh}`
-include::static/pgpkeys/cjh.key[]
+include::{include-path}cjh.key[]
=== `{davidch}`
-include::static/pgpkeys/davidch.key[]
+include::{include-path}davidch.key[]
=== `{milki}`
-include::static/pgpkeys/milki.key[]
+include::{include-path}milki.key[]
=== `{cjc}`
-include::static/pgpkeys/cjc.key[]
+include::{include-path}cjc.key[]
=== `{marcus}`
-include::static/pgpkeys/marcus.key[]
+include::{include-path}marcus.key[]
=== `{nik}`
-include::static/pgpkeys/nik.key[]
+include::{include-path}nik.key[]
=== `{benjsc}`
-include::static/pgpkeys/benjsc.key[]
+include::{include-path}benjsc.key[]
-=== `{ngie}`
-include::static/pgpkeys/ngie.key[]
+=== `{lcook}`
+include::{include-path}lcook.key[]
-=== `{tijl}`
-include::static/pgpkeys/tijl.key[]
+=== `{ngie}`
+include::{include-path}ngie.key[]
=== `{rakuco}`
-include::static/pgpkeys/rakuco.key[]
-
-=== `{dch}`
-include::static/pgpkeys/dch.key[]
+include::{include-path}rakuco.key[]
=== `{alc}`
-include::static/pgpkeys/alc.key[]
+include::{include-path}alc.key[]
=== `{olivier}`
-include::static/pgpkeys/olivier.key[]
-
-=== `{jeb}`
-include::static/pgpkeys/jeb.key[]
+include::{include-path}olivier.key[]
=== `{bcran}`
-include::static/pgpkeys/bcran.key[]
+include::{include-path}bcran.key[]
=== `{culot}`
-include::static/pgpkeys/culot.key[]
-
-=== `{aaron}`
-include::static/pgpkeys/aaron.key[]
+include::{include-path}culot.key[]
=== `{alfredo}`
-include::static/pgpkeys/alfredo.key[]
+include::{include-path}alfredo.key[]
=== `{bapt}`
-include::static/pgpkeys/bapt.key[]
+include::{include-path}bapt.key[]
=== `{ceri}`
-include::static/pgpkeys/ceri.key[]
-
-=== `{brd}`
-include::static/pgpkeys/brd.key[]
+include::{include-path}ceri.key[]
=== `{edavis}`
-include::static/pgpkeys/edavis.key[]
-
-=== `{pjd}`
-include::static/pgpkeys/pjd.key[]
+include::{include-path}edavis.key[]
=== `{alexey}`
-include::static/pgpkeys/alexey.key[]
+include::{include-path}alexey.key[]
=== `{bsd}`
-include::static/pgpkeys/bsd.key[]
+include::{include-path}bsd.key[]
=== `{carl}`
-include::static/pgpkeys/carl.key[]
+include::{include-path}carl.key[]
=== `{carlavilla}`
-include::static/pgpkeys/carlavilla.key[]
-
-=== `{jmd}`
-include::static/pgpkeys/jmd.key[]
+include::{include-path}carlavilla.key[]
=== `{vd}`
-include::static/pgpkeys/vd.key[]
+include::{include-path}vd.key[]
=== `{rdivacky}`
-include::static/pgpkeys/rdivacky.key[]
+include::{include-path}rdivacky.key[]
=== `{danfe}`
-include::static/pgpkeys/danfe.key[]
+include::{include-path}danfe.key[]
=== `{dd}`
-include::static/pgpkeys/dd.key[]
+include::{include-path}dd.key[]
=== `{bdrewery}`
-include::static/pgpkeys/bdrewery.key[]
+include::{include-path}bdrewery.key[]
=== `{gad}`
-include::static/pgpkeys/gad.key[]
+include::{include-path}gad.key[]
+
+=== `{kd}`
+include::{include-path}kd.key[]
=== `{olivierd}`
-include::static/pgpkeys/olivierd.key[]
+include::{include-path}olivierd.key[]
=== `{bruno}`
-include::static/pgpkeys/bruno.key[]
+include::{include-path}bruno.key[]
=== `{ale}`
-include::static/pgpkeys/ale.key[]
+include::{include-path}ale.key[]
=== `{nemysis}`
-include::static/pgpkeys/nemysis.key[]
+include::{include-path}nemysis.key[]
=== `{peadar}`
-include::static/pgpkeys/peadar.key[]
+include::{include-path}peadar.key[]
=== `{deischen}`
-include::static/pgpkeys/deischen.key[]
-
-=== `{josef}`
-include::static/pgpkeys/josef.key[]
+include::{include-path}deischen.key[]
-=== `{lme}`
-include::static/pgpkeys/lme.key[]
+=== `{diizzy}`
+include::{include-path}diizzy.key[]
=== `{ue}`
-include::static/pgpkeys/ue.key[]
-
-=== `{ru}`
-include::static/pgpkeys/ru.key[]
-
-=== `{le}`
-include::static/pgpkeys/le.key[]
-
-=== `{se}`
-include::static/pgpkeys/se.key[]
-
-=== `{kevans}`
-include::static/pgpkeys/kevans.key[]
-
-=== `{bf}`
-include::static/pgpkeys/bf.key[]
-
-=== `{sef}`
-include::static/pgpkeys/sef.key[]
+include::{include-path}ue.key[]
=== `{madpilot}`
-include::static/pgpkeys/madpilot.key[]
+include::{include-path}madpilot.key[]
=== `{rafan}`
-include::static/pgpkeys/rafan.key[]
+include::{include-path}rafan.key[]
=== `{kami}`
-include::static/pgpkeys/kami.key[]
-
-=== `{stefanf}`
-include::static/pgpkeys/stefanf.key[]
+include::{include-path}kami.key[]
=== `{farrokhi}`
-include::static/pgpkeys/farrokhi.key[]
+include::{include-path}farrokhi.key[]
=== `{jedgar}`
-include::static/pgpkeys/jedgar.key[]
+include::{include-path}jedgar.key[]
=== `{mfechner}`
-include::static/pgpkeys/mfechner.key[]
+include::{include-path}mfechner.key[]
=== `{feld}`
-include::static/pgpkeys/feld.key[]
+include::{include-path}feld.key[]
=== `{green}`
-include::static/pgpkeys/green.key[]
-
-=== `{lioux}`
-include::static/pgpkeys/lioux.key[]
-
-=== `{mdf}`
-include::static/pgpkeys/mdf.key[]
+include::{include-path}green.key[]
=== `{fanf}`
-include::static/pgpkeys/fanf.key[]
+include::{include-path}fanf.key[]
=== `{blackend}`
-include::static/pgpkeys/blackend.key[]
+include::{include-path}blackend.key[]
=== `{petef}`
-include::static/pgpkeys/petef.key[]
+include::{include-path}petef.key[]
=== `{decke}`
-include::static/pgpkeys/decke.key[]
+include::{include-path}decke.key[]
=== `{landonf}`
-include::static/pgpkeys/landonf.key[]
+include::{include-path}landonf.key[]
=== `{billf}`
-include::static/pgpkeys/billf.key[]
+include::{include-path}billf.key[]
-=== `{sg}`
-include::static/pgpkeys/sg.key[]
+=== `{grembo}`
+include::{include-path}grembo.key[]
=== `{sgalabov}`
-include::static/pgpkeys/sgalabov.key[]
-
-=== `{ultima}`
-include::static/pgpkeys/ultima.key[]
+include::{include-path}sgalabov.key[]
=== `{avg}`
-include::static/pgpkeys/avg.key[]
+include::{include-path}avg.key[]
=== `{beat}`
-include::static/pgpkeys/beat.key[]
-
-=== `{danger}`
-include::static/pgpkeys/danger.key[]
+include::{include-path}beat.key[]
=== `{sjg}`
-include::static/pgpkeys/sjg.key[]
+include::{include-path}sjg.key[]
=== `{gibbs}`
-include::static/pgpkeys/gibbs.key[]
+include::{include-path}gibbs.key[]
=== `{pfg}`
-include::static/pgpkeys/pfg.key[]
+include::{include-path}pfg.key[]
=== `{girgen}`
-include::static/pgpkeys/girgen.key[]
+include::{include-path}girgen.key[]
=== `{eugen}`
-include::static/pgpkeys/eugen.key[]
+include::{include-path}eugen.key[]
=== `{pgollucci}`
-include::static/pgpkeys/pgollucci.key[]
+include::{include-path}pgollucci.key[]
=== `{trociny}`
-include::static/pgpkeys/trociny.key[]
-
-=== `{danilo}`
-include::static/pgpkeys/danilo.key[]
+include::{include-path}trociny.key[]
=== `{dmgk}`
-include::static/pgpkeys/dmgk.key[]
+include::{include-path}dmgk.key[]
=== `{daichi}`
-include::static/pgpkeys/daichi.key[]
-
-=== `{mnag}`
-include::static/pgpkeys/mnag.key[]
+include::{include-path}daichi.key[]
=== `{grehan}`
-include::static/pgpkeys/grehan.key[]
+include::{include-path}grehan.key[]
=== `{jamie}`
-include::static/pgpkeys/jamie.key[]
+include::{include-path}jamie.key[]
=== `{adridg}`
-include::static/pgpkeys/adridg.key[]
-
-=== `{edwin}`
-include::static/pgpkeys/edwin.key[]
+include::{include-path}adridg.key[]
=== `{wg}`
-include::static/pgpkeys/wg.key[]
+include::{include-path}wg.key[]
=== `{bar}`
-include::static/pgpkeys/bar.key[]
-
-=== `{anish}`
-include::static/pgpkeys/anish.key[]
+include::{include-path}bar.key[]
=== `{jmg}`
-include::static/pgpkeys/jmg.key[]
+include::{include-path}jmg.key[]
=== `{mjg}`
-include::static/pgpkeys/mjg.key[]
+include::{include-path}mjg.key[]
=== `{jhale}`
-include::static/pgpkeys/jhale.key[]
-
-=== `{jah}`
-include::static/pgpkeys/jah.key[]
+include::{include-path}jhale.key[]
=== `{dannyboy}`
-include::static/pgpkeys/dannyboy.key[]
+include::{include-path}dannyboy.key[]
=== `{dhartmei}`
-include::static/pgpkeys/dhartmei.key[]
+include::{include-path}dhartmei.key[]
=== `{ohauer}`
-include::static/pgpkeys/ohauer.key[]
+include::{include-path}ohauer.key[]
=== `{ehaupt}`
-include::static/pgpkeys/ehaupt.key[]
+include::{include-path}ehaupt.key[]
=== `{jhay}`
-include::static/pgpkeys/jhay.key[]
+include::{include-path}jhay.key[]
=== `{bhd}`
-include::static/pgpkeys/bhd.key[]
+include::{include-path}bhd.key[]
=== `{sheldonh}`
-include::static/pgpkeys/sheldonh.key[]
+include::{include-path}sheldonh.key[]
=== `{mikeh}`
-include::static/pgpkeys/mikeh.key[]
+include::{include-path}mikeh.key[]
=== `{mheinen}`
-include::static/pgpkeys/mheinen.key[]
+include::{include-path}mheinen.key[]
=== `{niels}`
-include::static/pgpkeys/niels.key[]
-
-=== `{jh}`
-include::static/pgpkeys/jh.key[]
-
-=== `{jgh}`
-include::static/pgpkeys/jgh.key[]
+include::{include-path}niels.key[]
=== `{ghelmer}`
-include::static/pgpkeys/ghelmer.key[]
+include::{include-path}ghelmer.key[]
=== `{mux}`
-include::static/pgpkeys/mux.key[]
+include::{include-path}mux.key[]
=== `{wen}`
-include::static/pgpkeys/wen.key[]
+include::{include-path}wen.key[]
=== `{dhn}`
-include::static/pgpkeys/dhn.key[]
+include::{include-path}dhn.key[]
=== `{jhibbits}`
-include::static/pgpkeys/jhibbits.key[]
+include::{include-path}jhibbits.key[]
=== `{jhixson}`
-include::static/pgpkeys/jhixson.key[]
+include::{include-path}jhixson.key[]
=== `{pho}`
-include::static/pgpkeys/pho.key[]
+include::{include-path}pho.key[]
+
+=== `{oh}`
+include::{include-path}oh.key[]
=== `{mhorne}`
-include::static/pgpkeys/mhorne.key[]
+include::{include-path}mhorne.key[]
=== `{bhughes}`
-include::static/pgpkeys/bhughes.key[]
-
-=== `{mich}`
-include::static/pgpkeys/mich.key[]
+include::{include-path}bhughes.key[]
=== `{sunpoet}`
-include::static/pgpkeys/sunpoet.key[]
+include::{include-path}sunpoet.key[]
=== `{lwhsu}`
-include::static/pgpkeys/lwhsu.key[]
+include::{include-path}lwhsu.key[]
=== `{foxfair}`
-include::static/pgpkeys/foxfair.key[]
+include::{include-path}foxfair.key[]
=== `{whu}`
-include::static/pgpkeys/whu.key[]
+include::{include-path}whu.key[]
=== `{chinsan}`
-include::static/pgpkeys/chinsan.key[]
-
-=== `{shurd}`
-include::static/pgpkeys/shurd.key[]
-
-=== `{kibab}`
-include::static/pgpkeys/kibab.key[]
+include::{include-path}chinsan.key[]
=== `{davide}`
-include::static/pgpkeys/davide.key[]
+include::{include-path}davide.key[]
=== `{jkh}`
-include::static/pgpkeys/jkh.key[]
-
-=== `{sevan}`
-include::static/pgpkeys/sevan.key[]
+include::{include-path}jkh.key[]
=== `{versus}`
-include::static/pgpkeys/versus.key[]
+include::{include-path}versus.key[]
=== `{pi}`
-include::static/pgpkeys/pi.key[]
+include::{include-path}pi.key[]
=== `{weongyo}`
-include::static/pgpkeys/weongyo.key[]
+include::{include-path}weongyo.key[]
=== `{peterj}`
-include::static/pgpkeys/peterj.key[]
+include::{include-path}peterj.key[]
=== `{jinmei}`
-include::static/pgpkeys/jinmei.key[]
+include::{include-path}jinmei.key[]
=== `{ahze}`
-include::static/pgpkeys/ahze.key[]
+include::{include-path}ahze.key[]
=== `{markj}`
-include::static/pgpkeys/markj.key[]
+include::{include-path}markj.key[]
=== `{trevor}`
-include::static/pgpkeys/trevor.key[]
-
-=== `{thj}`
-include::static/pgpkeys/thj.key[]
-
-=== `{mjoras}`
-include::static/pgpkeys/mjoras.key[]
+include::{include-path}trevor.key[]
=== `{erj}`
-include::static/pgpkeys/erj.key[]
+include::{include-path}erj.key[]
=== `{allanjude}`
-include::static/pgpkeys/allanjude.key[]
-
-=== `{tj}`
-include::static/pgpkeys/tj.key[]
-
-=== `{kan}`
-include::static/pgpkeys/kan.key[]
+include::{include-path}allanjude.key[]
=== `{bjk}`
-include::static/pgpkeys/bjk.key[]
+include::{include-path}bjk.key[]
=== `{phk}`
-include::static/pgpkeys/phk.key[]
+include::{include-path}phk.key[]
=== `{pluknet}`
-include::static/pgpkeys/pluknet.key[]
+include::{include-path}pluknet.key[]
=== `{cokane}`
-include::static/pgpkeys/cokane.key[]
+include::{include-path}cokane.key[]
=== `{karels}`
-include::static/pgpkeys/karels.key[]
+include::{include-path}karels.key[]
=== `{kato}`
-include::static/pgpkeys/kato.key[]
-
-=== `{joe}`
-include::static/pgpkeys/joe.key[]
+include::{include-path}kato.key[]
=== `{vkashyap}`
-include::static/pgpkeys/vkashyap.key[]
-
-=== `{pkelsey}`
-include::static/pgpkeys/pkelsey.key[]
+include::{include-path}vkashyap.key[]
=== `{pkubaj}`
-include::static/pgpkeys/pkubaj.key[]
+include::{include-path}pkubaj.key[]
=== `{kris}`
-include::static/pgpkeys/kris.key[]
+include::{include-path}kris.key[]
=== `{keramida}`
-include::static/pgpkeys/keramida.key[]
+include::{include-path}keramida.key[]
=== `{fjoe}`
-include::static/pgpkeys/fjoe.key[]
+include::{include-path}fjoe.key[]
=== `{manolis}`
-include::static/pgpkeys/manolis.key[]
+include::{include-path}manolis.key[]
=== `{stevek}`
-include::static/pgpkeys/stevek.key[]
+include::{include-path}stevek.key[]
=== `{jkim}`
-include::static/pgpkeys/jkim.key[]
+include::{include-path}jkim.key[]
=== `{zack}`
-include::static/pgpkeys/zack.key[]
+include::{include-path}zack.key[]
=== `{jceel}`
-include::static/pgpkeys/jceel.key[]
+include::{include-path}jceel.key[]
=== `{andreas}`
-include::static/pgpkeys/andreas.key[]
+include::{include-path}andreas.key[]
=== `{kai}`
-include::static/pgpkeys/kai.key[]
+include::{include-path}kai.key[]
=== `{jkois}`
-include::static/pgpkeys/jkois.key[]
+include::{include-path}jkois.key[]
=== `{sergei}`
-include::static/pgpkeys/sergei.key[]
-
-=== `{wulf}`
-include::static/pgpkeys/wulf.key[]
+include::{include-path}sergei.key[]
=== `{maxim}`
-include::static/pgpkeys/maxim.key[]
+include::{include-path}maxim.key[]
=== `{taras}`
-include::static/pgpkeys/taras.key[]
+include::{include-path}taras.key[]
=== `{tobik}`
-include::static/pgpkeys/tobik.key[]
+include::{include-path}tobik.key[]
=== `{jkoshy}`
-include::static/pgpkeys/jkoshy.key[]
+include::{include-path}jkoshy.key[]
=== `{wkoszek}`
-include::static/pgpkeys/wkoszek.key[]
+include::{include-path}wkoszek.key[]
=== `{ak}`
-include::static/pgpkeys/ak.key[]
-
-=== `{skra}`
-include::static/pgpkeys/skra.key[]
-
-=== `{skreuzer}`
-include::static/pgpkeys/skreuzer.key[]
+include::{include-path}ak.key[]
=== `{gabor}`
-include::static/pgpkeys/gabor.key[]
+include::{include-path}gabor.key[]
=== `{anchie}`
-include::static/pgpkeys/anchie.key[]
-
-=== `{rik}`
-include::static/pgpkeys/rik.key[]
+include::{include-path}anchie.key[]
=== `{rushani}`
-include::static/pgpkeys/rushani.key[]
+include::{include-path}rushani.key[]
=== `{kuriyama}`
-include::static/pgpkeys/kuriyama.key[]
-
-=== `{gleb}`
-include::static/pgpkeys/gleb.key[]
+include::{include-path}kuriyama.key[]
=== `{rene}`
-include::static/pgpkeys/rene.key[]
+include::{include-path}rene.key[]
=== `{jlaffaye}`
-include::static/pgpkeys/jlaffaye.key[]
+include::{include-path}jlaffaye.key[]
=== `{clement}`
-include::static/pgpkeys/clement.key[]
+include::{include-path}clement.key[]
=== `{mlaier}`
-include::static/pgpkeys/mlaier.key[]
-
-=== `{dvl}`
-include::static/pgpkeys/dvl.key[]
-
-=== `{erwin}`
-include::static/pgpkeys/erwin.key[]
+include::{include-path}mlaier.key[]
=== `{martymac}`
-include::static/pgpkeys/martymac.key[]
+include::{include-path}martymac.key[]
=== `{glarkin}`
-include::static/pgpkeys/glarkin.key[]
-
-=== `{laszlof}`
-include::static/pgpkeys/laszlof.key[]
+include::{include-path}glarkin.key[]
=== `{dru}`
-include::static/pgpkeys/dru.key[]
+include::{include-path}dru.key[]
=== `{lawrance}`
-include::static/pgpkeys/lawrance.key[]
+include::{include-path}lawrance.key[]
=== `{njl}`
-include::static/pgpkeys/njl.key[]
+include::{include-path}njl.key[]
=== `{jlh}`
-include::static/pgpkeys/jlh.key[]
+include::{include-path}jlh.key[]
=== `{leeym}`
-include::static/pgpkeys/leeym.key[]
+include::{include-path}leeym.key[]
=== `{sam}`
-include::static/pgpkeys/sam.key[]
+include::{include-path}sam.key[]
=== `{jylefort}`
-include::static/pgpkeys/jylefort.key[]
+include::{include-path}jylefort.key[]
=== `{grog}`
-include::static/pgpkeys/grog.key[]
+include::{include-path}grog.key[]
=== `{oliver}`
-include::static/pgpkeys/oliver.key[]
+include::{include-path}oliver.key[]
=== `{netchild}`
-include::static/pgpkeys/netchild.key[]
+include::{include-path}netchild.key[]
=== `{leitao}`
-include::static/pgpkeys/leitao.key[]
+include::{include-path}leitao.key[]
=== `{ae}`
-include::static/pgpkeys/ae.key[]
+include::{include-path}ae.key[]
=== `{lesi}`
-include::static/pgpkeys/lesi.key[]
+include::{include-path}lesi.key[]
=== `{achim}`
-include::static/pgpkeys/achim.key[]
+include::{include-path}achim.key[]
=== `{cel}`
-include::static/pgpkeys/cel.key[]
-
-=== `{truckman}`
-include::static/pgpkeys/truckman.key[]
+include::{include-path}cel.key[]
=== `{glewis}`
-include::static/pgpkeys/glewis.key[]
+include::{include-path}glewis.key[]
-=== `{qingli}`
-include::static/pgpkeys/qingli.key[]
+=== `{vishwin}`
+include::{include-path}vishwin.key[]
=== `{delphij}`
-include::static/pgpkeys/delphij.key[]
+include::{include-path}delphij.key[]
=== `{avatar}`
-include::static/pgpkeys/avatar.key[]
+include::{include-path}avatar.key[]
=== `{ijliao}`
-include::static/pgpkeys/ijliao.key[]
+include::{include-path}ijliao.key[]
=== `{rlibby}`
-include::static/pgpkeys/rlibby.key[]
-
-=== `{lidl}`
-include::static/pgpkeys/lidl.key[]
-
-=== `{lifanov}`
-include::static/pgpkeys/lifanov.key[]
-
-=== `{lulf}`
-include::static/pgpkeys/lulf.key[]
-
-=== `{clive}`
-include::static/pgpkeys/clive.key[]
+include::{include-path}rlibby.key[]
=== `{pclin}`
-include::static/pgpkeys/pclin.key[]
+include::{include-path}pclin.key[]
=== `{yzlin}`
-include::static/pgpkeys/yzlin.key[]
+include::{include-path}yzlin.key[]
=== `{linimon}`
-include::static/pgpkeys/linimon.key[]
+include::{include-path}linimon.key[]
=== `{arved}`
-include::static/pgpkeys/arved.key[]
+include::{include-path}arved.key[]
=== `{dryice}`
-include::static/pgpkeys/dryice.key[]
+include::{include-path}dryice.key[]
=== `{nemoliu}`
-include::static/pgpkeys/nemoliu.key[]
+include::{include-path}nemoliu.key[]
=== `{kevlo}`
-include::static/pgpkeys/kevlo.key[]
+include::{include-path}kevlo.key[]
=== `{zml}`
-include::static/pgpkeys/zml.key[]
+include::{include-path}zml.key[]
=== `{nox}`
-include::static/pgpkeys/nox.key[]
-
-=== `{remko}`
-include::static/pgpkeys/remko.key[]
+include::{include-path}nox.key[]
=== `{avl}`
-include::static/pgpkeys/avl.key[]
-
-=== `{issyl0}`
-include::static/pgpkeys/issyl0.key[]
+include::{include-path}avl.key[]
=== `{scottl}`
-include::static/pgpkeys/scottl.key[]
-
-=== `{jtl}`
-include::static/pgpkeys/jtl.key[]
-
-=== `{luporl}`
-include::static/pgpkeys/luporl.key[]
-
-=== `{wma}`
-include::static/pgpkeys/wma.key[]
+include::{include-path}scottl.key[]
=== `{rmacklem}`
-include::static/pgpkeys/rmacklem.key[]
+include::{include-path}rmacklem.key[]
=== `{vmaffione}`
-include::static/pgpkeys/vmaffione.key[]
+include::{include-path}vmaffione.key[]
=== `{bmah}`
-include::static/pgpkeys/bmah.key[]
+include::{include-path}bmah.key[]
=== `{rm}`
-include::static/pgpkeys/rm.key[]
+include::{include-path}rm.key[]
=== `{mtm}`
-include::static/pgpkeys/mtm.key[]
+include::{include-path}mtm.key[]
=== `{dwmalone}`
-include::static/pgpkeys/dwmalone.key[]
-
-=== `{amdmi3}`
-include::static/pgpkeys/amdmi3.key[]
+include::{include-path}dwmalone.key[]
=== `{marino}`
-include::static/pgpkeys/marino.key[]
-
-=== `{kwm}`
-include::static/pgpkeys/kwm.key[]
-
-=== `{emaste}`
-include::static/pgpkeys/emaste.key[]
+include::{include-path}marino.key[]
=== `{cherry}`
-include::static/pgpkeys/cherry.key[]
+include::{include-path}cherry.key[]
=== `{matusita}`
-include::static/pgpkeys/matusita.key[]
+include::{include-path}matusita.key[]
=== `{mm}`
-include::static/pgpkeys/mm.key[]
+include::{include-path}mm.key[]
=== `{sem}`
-include::static/pgpkeys/sem.key[]
-
-=== `{slm}`
-include::static/pgpkeys/slm.key[]
-
-=== `{mckay}`
-include::static/pgpkeys/mckay.key[]
+include::{include-path}sem.key[]
=== `{mckusick}`
-include::static/pgpkeys/mckusick.key[]
+include::{include-path}mckusick.key[]
=== `{tmclaugh}`
-include::static/pgpkeys/tmclaugh.key[]
-
-=== `{jmcneill}`
-include::static/pgpkeys/jmcneill.key[]
-
-=== `{xmj}`
-include::static/pgpkeys/xmj.key[]
+include::{include-path}tmclaugh.key[]
=== `{jmelo}`
-include::static/pgpkeys/jmelo.key[]
+include::{include-path}jmelo.key[]
=== `{mmel}`
-include::static/pgpkeys/mmel.key[]
+include::{include-path}mmel.key[]
=== `{jmmv}`
-include::static/pgpkeys/jmmv.key[]
+include::{include-path}jmmv.key[]
=== `{kadesai}`
-include::static/pgpkeys/kadesai.key[]
+include::{include-path}kadesai.key[]
=== `{ken}`
-include::static/pgpkeys/ken.key[]
+include::{include-path}ken.key[]
=== `{markm}`
-include::static/pgpkeys/markm.key[]
+include::{include-path}markm.key[]
=== `{dinoex}`
-include::static/pgpkeys/dinoex.key[]
+include::{include-path}dinoex.key[]
=== `{sanpei}`
-include::static/pgpkeys/sanpei.key[]
+include::{include-path}sanpei.key[]
=== `{rmh}`
-include::static/pgpkeys/rmh.key[]
+include::{include-path}rmh.key[]
+
+=== `{driesm}`
+include::{include-path}driesm.key[]
=== `{jrm}`
-include::static/pgpkeys/jrm.key[]
+include::{include-path}jrm.key[]
=== `{freqlabs}`
-include::static/pgpkeys/freqlabs.key[]
-
-=== `{mmokhi}`
-include::static/pgpkeys/mmokhi.key[]
+include::{include-path}freqlabs.key[]
=== `{mmoll}`
-include::static/pgpkeys/mmoll.key[]
+include::{include-path}mmoll.key[]
=== `{cmt}`
-include::static/pgpkeys/cmt.key[]
+include::{include-path}cmt.key[]
=== `{stephen}`
-include::static/pgpkeys/stephen.key[]
+include::{include-path}stephen.key[]
=== `{marcel}`
-include::static/pgpkeys/marcel.key[]
+include::{include-path}marcel.key[]
=== `{dougm}`
-include::static/pgpkeys/dougm.key[]
+include::{include-path}dougm.key[]
=== `{kmoore}`
-include::static/pgpkeys/kmoore.key[]
+include::{include-path}kmoore.key[]
=== `{marck}`
-include::static/pgpkeys/marck.key[]
+include::{include-path}marck.key[]
=== `{mav}`
-include::static/pgpkeys/mav.key[]
-
-=== `{lippe}`
-include::static/pgpkeys/lippe.key[]
+include::{include-path}mav.key[]
=== `{rich}`
-include::static/pgpkeys/rich.key[]
+include::{include-path}rich.key[]
=== `{knu}`
-include::static/pgpkeys/knu.key[]
+include::{include-path}knu.key[]
=== `{tmm}`
-include::static/pgpkeys/tmm.key[]
-
-=== `{jsm}`
-include::static/pgpkeys/jsm.key[]
+include::{include-path}tmm.key[]
=== `{max}`
-include::static/pgpkeys/max.key[]
+include::{include-path}max.key[]
=== `{maho}`
-include::static/pgpkeys/maho.key[]
+include::{include-path}maho.key[]
=== `{yoichi}`
-include::static/pgpkeys/yoichi.key[]
-
-=== `{trasz}`
-include::static/pgpkeys/trasz.key[]
-
-=== `{neel}`
-include::static/pgpkeys/neel.key[]
-
-=== `{dbn}`
-include::static/pgpkeys/dbn.key[]
+include::{include-path}yoichi.key[]
=== `{bland}`
-include::static/pgpkeys/bland.key[]
-
-=== `{joneum}`
-include::static/pgpkeys/joneum.key[]
+include::{include-path}bland.key[]
=== `{gnn}`
-include::static/pgpkeys/gnn.key[]
+include::{include-path}gnn.key[]
+
+=== `{khng}`
+include::{include-path}khng.key[]
=== `{simon}`
-include::static/pgpkeys/simon.key[]
+include::{include-path}simon.key[]
=== `{rnoland}`
-include::static/pgpkeys/rnoland.key[]
+include::{include-path}rnoland.key[]
=== `{anders}`
-include::static/pgpkeys/anders.key[]
+include::{include-path}anders.key[]
=== `{lofi}`
-include::static/pgpkeys/lofi.key[]
+include::{include-path}lofi.key[]
=== `{obrien}`
-include::static/pgpkeys/obrien.key[]
+include::{include-path}obrien.key[]
=== `{olgeni}`
-include::static/pgpkeys/olgeni.key[]
-
-=== `{phil}`
-include::static/pgpkeys/phil.key[]
+include::{include-path}olgeni.key[]
=== `{philip}`
-include::static/pgpkeys/philip.key[]
+include::{include-path}philip.key[]
=== `{jpaetzel}`
-include::static/pgpkeys/jpaetzel.key[]
+include::{include-path}jpaetzel.key[]
-=== `{pgj}`
-include::static/pgpkeys/pgj.key[]
+=== `{zirias}`
+include::{include-path}zirias.key[]
=== `{hiren}`
-include::static/pgpkeys/hiren.key[]
+include::{include-path}hiren.key[]
=== `{hmp}`
-include::static/pgpkeys/hmp.key[]
-
-=== `{yuripv}`
-include::static/pgpkeys/yuripv.key[]
+include::{include-path}hmp.key[]
=== `{fluffy}`
-include::static/pgpkeys/fluffy.key[]
+include::{include-path}fluffy.key[]
=== `{sat}`
-include::static/pgpkeys/sat.key[]
+include::{include-path}sat.key[]
=== `{np}`
-include::static/pgpkeys/np.key[]
+include::{include-path}np.key[]
=== `{royger}`
-include::static/pgpkeys/royger.key[]
+include::{include-path}royger.key[]
=== `{rpaulo}`
-include::static/pgpkeys/rpaulo.key[]
-
-=== `{misha}`
-include::static/pgpkeys/misha.key[]
+include::{include-path}rpaulo.key[]
-=== `{dumbbell}`
-include::static/pgpkeys/dumbbell.key[]
+=== `{rpokala}`
+include::{include-path}rpokala.key[]
=== `{mp}`
-include::static/pgpkeys/mp.key[]
+include::{include-path}mp.key[]
=== `{roam}`
-include::static/pgpkeys/roam.key[]
+include::{include-path}roam.key[]
=== `{den}`
-include::static/pgpkeys/den.key[]
+include::{include-path}den.key[]
=== `{csjp}`
-include::static/pgpkeys/csjp.key[]
+include::{include-path}csjp.key[]
+
+=== `{grahamperrin}`
+include::{include-path}grahamperrin.key[]
=== `{gerald}`
-include::static/pgpkeys/gerald.key[]
+include::{include-path}gerald.key[]
=== `{scottph}`
-include::static/pgpkeys/scottph.key[]
+include::{include-path}scottph.key[]
=== `{jacula}`
-include::static/pgpkeys/jacula.key[]
+include::{include-path}jacula.key[]
=== `{0mp}`
-include::static/pgpkeys/0mp.key[]
-
-=== `{pizzamig}`
-include::static/pgpkeys/pizzamig.key[]
-
-=== `{rpokala}`
-include::static/pgpkeys/rpokala.key[]
+include::{include-path}0mp.key[]
=== `{jdp}`
-include::static/pgpkeys/jdp.key[]
+include::{include-path}jdp.key[]
=== `{krion}`
-include::static/pgpkeys/krion.key[]
+include::{include-path}krion.key[]
=== `{sepotvin}`
-include::static/pgpkeys/sepotvin.key[]
+include::{include-path}sepotvin.key[]
=== `{cpm}`
-include::static/pgpkeys/cpm.key[]
+include::{include-path}cpm.key[]
=== `{markp}`
-include::static/pgpkeys/markp.key[]
+include::{include-path}markp.key[]
=== `{alepulver}`
-include::static/pgpkeys/alepulver.key[]
+include::{include-path}alepulver.key[]
=== `{kp}`
-include::static/pgpkeys/kp.key[]
+include::{include-path}kp.key[]
=== `{thomas}`
-include::static/pgpkeys/thomas.key[]
+include::{include-path}thomas.key[]
=== `{hq}`
-include::static/pgpkeys/hq.key[]
-
-=== `{dfr}`
-include::static/pgpkeys/dfr.key[]
+include::{include-path}hq.key[]
=== `{bofh}`
-include::static/pgpkeys/bofh.key[]
+include::{include-path}bofh.key[]
=== `{fox}`
-include::static/pgpkeys/fox.key[]
+include::{include-path}fox.key[]
=== `{lbr}`
-include::static/pgpkeys/lbr.key[]
+include::{include-path}lbr.key[]
=== `{crees}`
-include::static/pgpkeys/crees.key[]
+include::{include-path}crees.key[]
=== `{rees}`
-include::static/pgpkeys/rees.key[]
+include::{include-path}rees.key[]
=== `{mr}`
-include::static/pgpkeys/mr.key[]
+include::{include-path}mr.key[]
=== `{bcr}`
-include::static/pgpkeys/bcr.key[]
-
-=== `{rezny}`
-include::static/pgpkeys/rezny.key[]
+include::{include-path}bcr.key[]
=== `{trhodes}`
-include::static/pgpkeys/trhodes.key[]
+include::{include-path}trhodes.key[]
=== `{benno}`
-include::static/pgpkeys/benno.key[]
-
-=== `{arichardson}`
-include::static/pgpkeys/arichardson.key[]
+include::{include-path}benno.key[]
=== `{beech}`
-include::static/pgpkeys/beech.key[]
-
-=== `{matteo}`
-include::static/pgpkeys/matteo.key[]
+include::{include-path}beech.key[]
=== `{roberto}`
-include::static/pgpkeys/roberto.key[]
+include::{include-path}roberto.key[]
=== `{rodrigc}`
-include::static/pgpkeys/rodrigc.key[]
+include::{include-path}rodrigc.key[]
=== `{ler}`
-include::static/pgpkeys/ler.key[]
+include::{include-path}ler.key[]
=== `{leres}`
-include::static/pgpkeys/leres.key[]
+include::{include-path}leres.key[]
=== `{robak}`
-include::static/pgpkeys/robak.key[]
+include::{include-path}robak.key[]
=== `{guido}`
-include::static/pgpkeys/guido.key[]
+include::{include-path}guido.key[]
=== `{rea}`
-include::static/pgpkeys/rea.key[]
+include::{include-path}rea.key[]
=== `{ray}`
-include::static/pgpkeys/ray.key[]
-
-=== `{arybchik}`
-include::static/pgpkeys/arybchik.key[]
+include::{include-path}ray.key[]
=== `{niklas}`
-include::static/pgpkeys/niklas.key[]
+include::{include-path}niklas.key[]
=== `{salvadore}`
-include::static/pgpkeys/salvadore.key[]
+include::{include-path}salvadore.key[]
=== `{bsam}`
-include::static/pgpkeys/bsam.key[]
+include::{include-path}bsam.key[]
=== `{marks}`
-include::static/pgpkeys/marks.key[]
-
-=== `{alonso}`
-include::static/pgpkeys/alonso.key[]
+include::{include-path}marks.key[]
=== `{bschmidt}`
-include::static/pgpkeys/bschmidt.key[]
+include::{include-path}bschmidt.key[]
=== `{wosch}`
-include::static/pgpkeys/wosch.key[]
-
-=== `{ed}`
-include::static/pgpkeys/ed.key[]
+include::{include-path}wosch.key[]
=== `{cy}`
-include::static/pgpkeys/cy.key[]
+include::{include-path}cy.key[]
=== `{das}`
-include::static/pgpkeys/das.key[]
+include::{include-path}das.key[]
=== `{scheidell}`
-include::static/pgpkeys/scheidell.key[]
-
-=== `{schweikh}`
-include::static/pgpkeys/schweikh.key[]
+include::{include-path}scheidell.key[]
=== `{matthew}`
-include::static/pgpkeys/matthew.key[]
+include::{include-path}matthew.key[]
=== `{tmseck}`
-include::static/pgpkeys/tmseck.key[]
-
-=== `{stas}`
-include::static/pgpkeys/stas.key[]
-
-=== `{johalun}`
-include::static/pgpkeys/johalun.key[]
+include::{include-path}tmseck.key[]
=== `{johans}`
-include::static/pgpkeys/johans.key[]
-
-=== `{lev}`
-include::static/pgpkeys/lev.key[]
+include::{include-path}johans.key[]
=== `{bakul}`
-include::static/pgpkeys/bakul.key[]
+include::{include-path}bakul.key[]
=== `{gshapiro}`
-include::static/pgpkeys/gshapiro.key[]
-
-=== `{arun}`
-include::static/pgpkeys/arun.key[]
+include::{include-path}gshapiro.key[]
=== `{wxs}`
-include::static/pgpkeys/wxs.key[]
+include::{include-path}wxs.key[]
=== `{nork}`
-include::static/pgpkeys/nork.key[]
+include::{include-path}nork.key[]
=== `{syrinx}`
-include::static/pgpkeys/syrinx.key[]
+include::{include-path}syrinx.key[]
=== `{vanilla}`
-include::static/pgpkeys/vanilla.key[]
+include::{include-path}vanilla.key[]
=== `{ashish}`
-include::static/pgpkeys/ashish.key[]
+include::{include-path}ashish.key[]
+
+=== `{asiciliano}`
+include::{include-path}asiciliano.key[]
=== `{chs}`
-include::static/pgpkeys/chs.key[]
+include::{include-path}chs.key[]
=== `{bms}`
-include::static/pgpkeys/bms.key[]
+include::{include-path}bms.key[]
=== `{demon}`
-include::static/pgpkeys/demon.key[]
+include::{include-path}demon.key[]
=== `{jesper}`
-include::static/pgpkeys/jesper.key[]
+include::{include-path}jesper.key[]
=== `{scop}`
-include::static/pgpkeys/scop.key[]
+include::{include-path}scop.key[]
=== `{anray}`
-include::static/pgpkeys/anray.key[]
+include::{include-path}anray.key[]
=== `{flo}`
-include::static/pgpkeys/flo.key[]
+include::{include-path}flo.key[]
=== `{glebius}`
-include::static/pgpkeys/glebius.key[]
+include::{include-path}glebius.key[]
=== `{kensmith}`
-include::static/pgpkeys/kensmith.key[]
+include::{include-path}kensmith.key[]
=== `{ben}`
-include::static/pgpkeys/ben.key[]
+include::{include-path}ben.key[]
=== `{des}`
-include::static/pgpkeys/des.key[]
+include::{include-path}des.key[]
=== `{sobomax}`
-include::static/pgpkeys/sobomax.key[]
+include::{include-path}sobomax.key[]
=== `{asomers}`
-include::static/pgpkeys/asomers.key[]
+include::{include-path}asomers.key[]
=== `{brian}`
-include::static/pgpkeys/brian.key[]
+include::{include-path}brian.key[]
=== `{sson}`
-include::static/pgpkeys/sson.key[]
+include::{include-path}sson.key[]
=== `{nsouch}`
-include::static/pgpkeys/nsouch.key[]
+include::{include-path}nsouch.key[]
=== `{ssouhlal}`
-include::static/pgpkeys/ssouhlal.key[]
-
-=== `{tsoome}`
-include::static/pgpkeys/tsoome.key[]
+include::{include-path}ssouhlal.key[]
=== `{loos}`
-include::static/pgpkeys/loos.key[]
+include::{include-path}loos.key[]
=== `{brnrd}`
-include::static/pgpkeys/brnrd.key[]
-
-=== `{uqs}`
-include::static/pgpkeys/uqs.key[]
+include::{include-path}brnrd.key[]
=== `{rink}`
-include::static/pgpkeys/rink.key[]
+include::{include-path}rink.key[]
=== `{vsevolod}`
-include::static/pgpkeys/vsevolod.key[]
+include::{include-path}vsevolod.key[]
=== `{pstef}`
-include::static/pgpkeys/pstef.key[]
+include::{include-path}pstef.key[]
=== `{zi}`
-include::static/pgpkeys/zi.key[]
+include::{include-path}zi.key[]
=== `{lstewart}`
-include::static/pgpkeys/lstewart.key[]
-
-=== `{rrs}`
-include::static/pgpkeys/rrs.key[]
+include::{include-path}lstewart.key[]
=== `{murray}`
-include::static/pgpkeys/murray.key[]
+include::{include-path}murray.key[]
=== `{vs}`
-include::static/pgpkeys/vs.key[]
-
-=== `{rstone}`
-include::static/pgpkeys/rstone.key[]
+include::{include-path}vs.key[]
=== `{xride}`
-include::static/pgpkeys/xride.key[]
+include::{include-path}xride.key[]
=== `{marius}`
-include::static/pgpkeys/marius.key[]
+include::{include-path}marius.key[]
=== `{cs}`
-include::static/pgpkeys/cs.key[]
+include::{include-path}cs.key[]
=== `{clsung}`
-include::static/pgpkeys/clsung.key[]
+include::{include-path}clsung.key[]
=== `{gsutter}`
-include::static/pgpkeys/gsutter.key[]
+include::{include-path}gsutter.key[]
=== `{metal}`
-include::static/pgpkeys/metal.key[]
+include::{include-path}metal.key[]
=== `{ryusuke}`
-include::static/pgpkeys/ryusuke.key[]
-
-=== `{garys}`
-include::static/pgpkeys/garys.key[]
+include::{include-path}ryusuke.key[]
=== `{nyan}`
-include::static/pgpkeys/nyan.key[]
+include::{include-path}nyan.key[]
=== `{sahil}`
-include::static/pgpkeys/sahil.key[]
+include::{include-path}sahil.key[]
=== `{tota}`
-include::static/pgpkeys/tota.key[]
+include::{include-path}tota.key[]
=== `{romain}`
-include::static/pgpkeys/romain.key[]
+include::{include-path}romain.key[]
-=== `{sylvio}`
-include::static/pgpkeys/sylvio.key[]
+=== `{eduardo}`
+include::{include-path}eduardo.key[]
-=== `{dteske}`
-include::static/pgpkeys/dteske.key[]
+=== `{sylvio}`
+include::{include-path}sylvio.key[]
=== `{itetcu}`
-include::static/pgpkeys/itetcu.key[]
+include::{include-path}itetcu.key[]
=== `{mi}`
-include::static/pgpkeys/mi.key[]
+include::{include-path}mi.key[]
=== `{gordon}`
-include::static/pgpkeys/gordon.key[]
+include::{include-path}gordon.key[]
=== `{lth}`
-include::static/pgpkeys/lth.key[]
-
-=== `{jase}`
-include::static/pgpkeys/jase.key[]
-
-=== `{lx}`
-include::static/pgpkeys/lx.key[]
+include::{include-path}lth.key[]
=== `{fabient}`
-include::static/pgpkeys/fabient.key[]
+include::{include-path}fabient.key[]
=== `{thierry}`
-include::static/pgpkeys/thierry.key[]
+include::{include-path}thierry.key[]
=== `{thompsa}`
-include::static/pgpkeys/thompsa.key[]
+include::{include-path}thompsa.key[]
=== `{flz}`
-include::static/pgpkeys/flz.key[]
+include::{include-path}flz.key[]
=== `{jilles}`
-include::static/pgpkeys/jilles.key[]
+include::{include-path}jilles.key[]
=== `{ganbold}`
-include::static/pgpkeys/ganbold.key[]
+include::{include-path}ganbold.key[]
=== `{tuexen}`
-include::static/pgpkeys/tuexen.key[]
-
-=== `{andrew}`
-include::static/pgpkeys/andrew.key[]
+include::{include-path}tuexen.key[]
=== `{gonzo}`
-include::static/pgpkeys/gonzo.key[]
+include::{include-path}gonzo.key[]
=== `{ume}`
-include::static/pgpkeys/ume.key[]
-
-=== `{junovitch}`
-include::static/pgpkeys/junovitch.key[]
+include::{include-path}ume.key[]
=== `{ups}`
-include::static/pgpkeys/ups.key[]
+include::{include-path}ups.key[]
=== `{fsu}`
-include::static/pgpkeys/fsu.key[]
+include::{include-path}fsu.key[]
=== `{mikael}`
-include::static/pgpkeys/mikael.key[]
-
-=== `{ivadasz}`
-include::static/pgpkeys/ivadasz.key[]
+include::{include-path}mikael.key[]
=== `{manu}`
-include::static/pgpkeys/manu.key[]
-
-=== `{vangyzen}`
-include::static/pgpkeys/vangyzen.key[]
+include::{include-path}manu.key[]
=== `{ram}`
-include::static/pgpkeys/ram.key[]
+include::{include-path}ram.key[]
=== `{bryanv}`
-include::static/pgpkeys/bryanv.key[]
+include::{include-path}bryanv.key[]
=== `{nectar}`
-include::static/pgpkeys/nectar.key[]
+include::{include-path}nectar.key[]
=== `{avilla}`
-include::static/pgpkeys/avilla.key[]
+include::{include-path}avilla.key[]
=== `{nivit}`
-include::static/pgpkeys/nivit.key[]
+include::{include-path}nivit.key[]
=== `{ivoras}`
-include::static/pgpkeys/ivoras.key[]
-
-=== `{avos}`
-include::static/pgpkeys/avos.key[]
+include::{include-path}ivoras.key[]
=== `{stefan}`
-include::static/pgpkeys/stefan.key[]
+include::{include-path}stefan.key[]
=== `{kaiw}`
-include::static/pgpkeys/kaiw.key[]
+include::{include-path}kaiw.key[]
=== `{adamw}`
-include::static/pgpkeys/adamw.key[]
+include::{include-path}adamw.key[]
=== `{naddy}`
-include::static/pgpkeys/naddy.key[]
+include::{include-path}naddy.key[]
=== `{peter}`
-include::static/pgpkeys/peter.key[]
+include::{include-path}peter.key[]
=== `{nwhitehorn}`
-include::static/pgpkeys/nwhitehorn.key[]
+include::{include-path}nwhitehorn.key[]
=== `{miwi}`
-include::static/pgpkeys/miwi.key[]
+include::{include-path}miwi.key[]
=== `{nate}`
-include::static/pgpkeys/nate.key[]
-
-=== `{swills}`
-include::static/pgpkeys/swills.key[]
+include::{include-path}nate.key[]
=== `{twinterg}`
-include::static/pgpkeys/twinterg.key[]
+include::{include-path}twinterg.key[]
=== `{def}`
-include::static/pgpkeys/def.key[]
-
-=== `{mw}`
-include::static/pgpkeys/mw.key[]
+include::{include-path}def.key[]
=== `{wollman}`
-include::static/pgpkeys/wollman.key[]
-
-=== `{woodsb02}`
-include::static/pgpkeys/woodsb02.key[]
+include::{include-path}wollman.key[]
=== `{joerg}`
-include::static/pgpkeys/joerg.key[]
-
-=== `{davidxu}`
-include::static/pgpkeys/davidxu.key[]
+include::{include-path}joerg.key[]
=== `{ygy}`
-include::static/pgpkeys/ygy.key[]
+include::{include-path}ygy.key[]
=== `{emax}`
-include::static/pgpkeys/emax.key[]
-
-=== `{yongari}`
-include::static/pgpkeys/yongari.key[]
-
-=== `{rcyu}`
-include::static/pgpkeys/rcyu.key[]
+include::{include-path}emax.key[]
=== `{oshogbo}`
-include::static/pgpkeys/oshogbo.key[]
+include::{include-path}oshogbo.key[]
=== `{riggs}`
-include::static/pgpkeys/riggs.key[]
+include::{include-path}riggs.key[]
=== `{egypcio}`
-include::static/pgpkeys/egypcio.key[]
+include::{include-path}egypcio.key[]
=== `{bz}`
-include::static/pgpkeys/bz.key[]
+include::{include-path}bz.key[]
+
+=== `{dsl}`
+include::{include-path}dsl.key[]
=== `{zeising}`
-include::static/pgpkeys/zeising.key[]
+include::{include-path}zeising.key[]
=== `{phantom}`
-include::static/pgpkeys/phantom.key[]
-
-=== `{sephe}`
-include::static/pgpkeys/sephe.key[]
-
-=== `{mizhka}`
-include::static/pgpkeys/mizhka.key[]
-
-=== `{zont}`
-include::static/pgpkeys/zont.key[]
+include::{include-path}phantom.key[]
=== `{tz}`
-include::static/pgpkeys/tz.key[]
-
-=== `{yuri}`
-include::static/pgpkeys/yuri.key[]
-
-=== `{slavash}`
-include::static/pgpkeys/slavash.key[]
-
-=== `{arrowd}`
-include::static/pgpkeys/arrowd.key[]
+include::{include-path}tz.key[]
=== `{rigoletto}`
-include::static/pgpkeys/rigoletto.key[]
+include::{include-path}rigoletto.key[]
=== `{kaktus}`
-include::static/pgpkeys/kaktus.key[]
+include::{include-path}kaktus.key[]
=== `{samm}`
-include::static/pgpkeys/samm.key[]
+include::{include-path}samm.key[]
+
+=== `{arrowd}`
+include::{include-path}arrowd.key[]
[[pgpkeys-other]]
== Outros Detentores de Contas no Cluster
-=== `{arundel}`
-include::static/pgpkeys/arundel.key[]
-
-=== `{bhaga}`
-include::static/pgpkeys/bhaga.key[]
-
=== `{bk}`
-include::static/pgpkeys/bk.key[]
+include::{include-path}bk.key[]
=== `{deb}`
-include::static/pgpkeys/deb.key[]
+include::{include-path}deb.key[]
=== `{debdrup}`
-include::static/pgpkeys/debdrup.key[]
+include::{include-path}debdrup.key[]
=== `{dutchdaemon}`
-include::static/pgpkeys/dutchdaemon.key[]
+include::{include-path}dutchdaemon.key[]
=== `{keymaster}`
-include::static/pgpkeys/keymaster.key[]
-
-=== `{plosher}`
-include::static/pgpkeys/plosher.key[]
+include::{include-path}keymaster.key[]
=== `{mwlucas}`
-include::static/pgpkeys/mwlucas.key[]
+include::{include-path}mwlucas.key[]
=== `{dhw}`
-include::static/pgpkeys/dhw.key[]
+include::{include-path}dhw.key[]
diff --git a/documentation/content/pt-br/articles/pgpkeys/_index.po b/documentation/content/pt-br/articles/pgpkeys/_index.po
new file mode 100644
index 0000000000..04e20cfe61
--- /dev/null
+++ b/documentation/content/pt-br/articles/pgpkeys/_index.po
@@ -0,0 +1,2824 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-10-07 13:52+0200\n"
+"PO-Revision-Date: 2022-10-09 19:16+0000\n"
+"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlespgpkeys_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1
+#, no-wrap
+msgid "List of OpenPGP keys that can be used to verify a signature or send encrypted email to FreeBSD.org officers or developers."
+msgstr ""
+"Lista de chaves OpenPGP que podem ser usadas para verificar uma assinatura "
+"ou enviar e-mail criptografado para oficiais ou desenvolvedores do FreeBSD."
+"org."
+
+#. type: Title =
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1
+#: documentation/content/en/articles/pgpkeys/_index.adoc:7
+#, no-wrap
+msgid "OpenPGP Keys"
+msgstr "Chaves OpenPGP"
+
+#. type: Plain text
+#: documentation/content/en/articles/pgpkeys/_index.adoc:45
+msgid "'''"
+msgstr "'''"
+
+#. type: Plain text
+#: documentation/content/en/articles/pgpkeys/_index.adoc:50
+msgid ""
+"These OpenPGP keys can be used to verify a signature or send encrypted email "
+"to `FreeBSD.org` officers or developers. The complete keyring can be "
+"downloaded at link:https://docs.FreeBSD.org/pgpkeys/pgpkeys.txt[pgpkeyring."
+"txt]."
+msgstr ""
+"Estas chaves OpenPGP podem ser usadas para verificar uma assinatura ou "
+"enviar um email criptografado para oficiais ou desenvolvedores do `FreeBSD."
+"org`. Todas as chaves podem ser baixadas em link:https://docs.FreeBSD.org/"
+"pgpkeys/pgpkeys.txt[pgpkeyring.txt]."
+
+#
+#
+#. Do not edit this file except as instructed by the addkey.sh script.
+#. See the README file in /data/pgpkeys for instructions.
+#. This article contains all the keys. The officer keys are also
+#. shown in the Handbook PGP keys chapter.
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:61
+#, no-wrap
+msgid "Officers"
+msgstr "Oficiais"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:63
+#, no-wrap
+msgid "{security-officer-name} `<{security-officer-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:66
+#, no-wrap
+msgid "{secteam-secretary-name} `<{secteam-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:69
+#, no-wrap
+msgid "{core-secretary-name} `<{core-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:72
+#, no-wrap
+msgid "{portmgr-secretary-name} `<{portmgr-secretary-email}>`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:75
+#, no-wrap
+msgid "{doceng-secretary-name} `<{doceng-secretary-email}>`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:79
+#, no-wrap
+msgid "Core Team Members"
+msgstr "Membros do Core Team"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:81
+#: documentation/content/en/articles/pgpkeys/_index.adoc:339
+#, no-wrap
+msgid "`{bapt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:84
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1074
+#, no-wrap
+msgid "`{bcr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:87
+#: documentation/content/en/articles/pgpkeys/_index.adoc:750
+#, no-wrap
+msgid "`{grog}`"
+msgstr "`{grog}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:90
+#: documentation/content/en/articles/pgpkeys/_index.adoc:174
+#, no-wrap
+msgid "`{jhb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:93
+#: documentation/content/en/articles/pgpkeys/_index.adoc:573
+#, no-wrap
+msgid "`{lwhsu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:96
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1335
+#, no-wrap
+msgid "`{manu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:99
+#: documentation/content/en/articles/pgpkeys/_index.adoc:201
+#, no-wrap
+msgid "`{tcberner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:102
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1026
+#, no-wrap
+msgid "`{0mp}`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:106
+#, no-wrap
+msgid "Developers"
+msgstr "Desenvolvedores"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:108
+#, no-wrap
+msgid "`{jgh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:111
+#, no-wrap
+msgid "`{ariff}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:114
+#, no-wrap
+msgid "`{tabthorpe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:117
+#, no-wrap
+msgid "`{eadler}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:120
+#, no-wrap
+msgid "`{pauamma}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:123
+#, no-wrap
+msgid "`{shaun}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:126
+#, no-wrap
+msgid "`{brix}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:129
+#, no-wrap
+msgid "`{mandree}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:132
+#, no-wrap
+msgid "`{will}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:135
+#, no-wrap
+msgid "`{dim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:138
+#, no-wrap
+msgid "`{anholt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:141
+#, no-wrap
+msgid "`{fernape}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:144
+#, no-wrap
+msgid "`{mva}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:147
+#, no-wrap
+msgid "`{araujo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:150
+#, no-wrap
+msgid "`{mat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:153
+#, no-wrap
+msgid "`{syuu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:156
+#, no-wrap
+msgid "`{asami}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:159
+#, no-wrap
+msgid "`{jsa}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:162
+#, no-wrap
+msgid "`{jadawin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:165
+#, no-wrap
+msgid "`{jwb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:168
+#, no-wrap
+msgid "`{dbaio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:171
+#, no-wrap
+msgid "`{timur}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:177
+#, no-wrap
+msgid "`{gjb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:180
+#, no-wrap
+msgid "`{snb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:183
+#, no-wrap
+msgid "`{barner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:186
+#, no-wrap
+msgid "`{lbartoletti}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:189
+#, no-wrap
+msgid "`{art}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:192
+#, no-wrap
+msgid "`{tobez}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:195
+#, no-wrap
+msgid "`{damien}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:198
+#, no-wrap
+msgid "`{bdragon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:204
+#, no-wrap
+msgid "`{tdb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:207
+#, no-wrap
+msgid "`{mbr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:210
+#, no-wrap
+msgid "`{bvs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:213
+#, no-wrap
+msgid "`{novel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:216
+#, no-wrap
+msgid "`{garga}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:219
+#, no-wrap
+msgid "`{kbowling}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:222
+#, no-wrap
+msgid "`{alexbl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:225
+#, no-wrap
+msgid "`{ebrandi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:228
+#, no-wrap
+msgid "`{harti}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:231
+#, no-wrap
+msgid "`{obraun}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:234
+#, no-wrap
+msgid "`{makc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:237
+#, no-wrap
+msgid "`{jmb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:240
+#, no-wrap
+msgid "`{antoine}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:243
+#, no-wrap
+msgid "`{db}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:246
+#, no-wrap
+msgid "`{brueffer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:249
+#, no-wrap
+msgid "`{markus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:252
+#, no-wrap
+msgid "`{br}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:255
+#, no-wrap
+msgid "`{jch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:258
+#, no-wrap
+msgid "`{jchandra}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:261
+#, no-wrap
+msgid "`{jcamou}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:264
+#, no-wrap
+msgid "`{acm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:267
+#, no-wrap
+msgid "`{gahr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:270
+#, no-wrap
+msgid "`{dchagin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:273
+#, no-wrap
+msgid "`{perky}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:276
+#, no-wrap
+msgid "`{jon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:279
+#, no-wrap
+msgid "`{jonathan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:282
+#, no-wrap
+msgid "`{loader}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:285
+#, no-wrap
+msgid "`{luoqi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:288
+#, no-wrap
+msgid "`{ache}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:291
+#, no-wrap
+msgid "`{melifaro}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:294
+#, no-wrap
+msgid "`{cjh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:297
+#, no-wrap
+msgid "`{davidch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:300
+#, no-wrap
+msgid "`{milki}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:303
+#, no-wrap
+msgid "`{cjc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:306
+#, no-wrap
+msgid "`{marcus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:309
+#, no-wrap
+msgid "`{nik}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:312
+#, no-wrap
+msgid "`{benjsc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:315
+#, no-wrap
+msgid "`{lcook}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:318
+#, no-wrap
+msgid "`{ngie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:321
+#, no-wrap
+msgid "`{rakuco}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:324
+#, no-wrap
+msgid "`{alc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:327
+#, no-wrap
+msgid "`{olivier}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:330
+#, no-wrap
+msgid "`{bcran}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:333
+#, no-wrap
+msgid "`{culot}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:336
+#, no-wrap
+msgid "`{alfredo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:342
+#, no-wrap
+msgid "`{ceri}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:345
+#, no-wrap
+msgid "`{edavis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:348
+#, no-wrap
+msgid "`{alexey}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:351
+#, no-wrap
+msgid "`{bsd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:354
+#, no-wrap
+msgid "`{carl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:357
+#, no-wrap
+msgid "`{carlavilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:360
+#, no-wrap
+msgid "`{vd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:363
+#, no-wrap
+msgid "`{rdivacky}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:366
+#, no-wrap
+msgid "`{danfe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:369
+#, no-wrap
+msgid "`{dd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:372
+#, no-wrap
+msgid "`{bdrewery}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:375
+#, no-wrap
+msgid "`{gad}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:378
+#, no-wrap
+msgid "`{kd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:381
+#, no-wrap
+msgid "`{olivierd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:384
+#, no-wrap
+msgid "`{bruno}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:387
+#, no-wrap
+msgid "`{ale}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:390
+#, no-wrap
+msgid "`{nemysis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:393
+#, no-wrap
+msgid "`{peadar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:396
+#, no-wrap
+msgid "`{deischen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:399
+#, no-wrap
+msgid "`{diizzy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:402
+#, no-wrap
+msgid "`{ue}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:405
+#, no-wrap
+msgid "`{madpilot}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:408
+#, no-wrap
+msgid "`{rafan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:411
+#, no-wrap
+msgid "`{kami}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:414
+#, no-wrap
+msgid "`{farrokhi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:417
+#, no-wrap
+msgid "`{jedgar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:420
+#, no-wrap
+msgid "`{mfechner}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:423
+#, no-wrap
+msgid "`{feld}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:426
+#, no-wrap
+msgid "`{green}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:429
+#, no-wrap
+msgid "`{fanf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:432
+#, no-wrap
+msgid "`{blackend}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:435
+#, no-wrap
+msgid "`{petef}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:438
+#, no-wrap
+msgid "`{decke}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:441
+#, no-wrap
+msgid "`{landonf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:444
+#, no-wrap
+msgid "`{billf}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:447
+#, fuzzy, no-wrap
+#| msgid "`{grog}`"
+msgid "`{grembo}`"
+msgstr "`{grog}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:450
+#, no-wrap
+msgid "`{sgalabov}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:453
+#, no-wrap
+msgid "`{avg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:456
+#, no-wrap
+msgid "`{beat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:459
+#, no-wrap
+msgid "`{sjg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:462
+#, no-wrap
+msgid "`{gibbs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:465
+#, no-wrap
+msgid "`{pfg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:468
+#, no-wrap
+msgid "`{girgen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:471
+#, no-wrap
+msgid "`{eugen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:474
+#, no-wrap
+msgid "`{pgollucci}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:477
+#, no-wrap
+msgid "`{trociny}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:480
+#, no-wrap
+msgid "`{dmgk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:483
+#, no-wrap
+msgid "`{daichi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:486
+#, no-wrap
+msgid "`{grehan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:489
+#, no-wrap
+msgid "`{jamie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:492
+#, no-wrap
+msgid "`{adridg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:495
+#, no-wrap
+msgid "`{wg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:498
+#, no-wrap
+msgid "`{bar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:501
+#, no-wrap
+msgid "`{jmg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:504
+#, no-wrap
+msgid "`{mjg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:507
+#, no-wrap
+msgid "`{jhale}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:510
+#, no-wrap
+msgid "`{dannyboy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:513
+#, no-wrap
+msgid "`{dhartmei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:516
+#, no-wrap
+msgid "`{ohauer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:519
+#, no-wrap
+msgid "`{ehaupt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:522
+#, no-wrap
+msgid "`{jhay}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:525
+#, no-wrap
+msgid "`{bhd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:528
+#, no-wrap
+msgid "`{sheldonh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:531
+#, no-wrap
+msgid "`{mikeh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:534
+#, no-wrap
+msgid "`{mheinen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:537
+#, no-wrap
+msgid "`{niels}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:540
+#, no-wrap
+msgid "`{ghelmer}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:543
+#, no-wrap
+msgid "`{mux}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:546
+#, no-wrap
+msgid "`{wen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:549
+#, no-wrap
+msgid "`{dhn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:552
+#, no-wrap
+msgid "`{jhibbits}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:555
+#, no-wrap
+msgid "`{jhixson}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:558
+#, no-wrap
+msgid "`{pho}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:561
+#, no-wrap
+msgid "`{oh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:564
+#, no-wrap
+msgid "`{mhorne}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:567
+#, no-wrap
+msgid "`{bhughes}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:570
+#, no-wrap
+msgid "`{sunpoet}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:576
+#, no-wrap
+msgid "`{foxfair}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:579
+#, no-wrap
+msgid "`{whu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:582
+#, no-wrap
+msgid "`{chinsan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:585
+#, no-wrap
+msgid "`{davide}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:588
+#, no-wrap
+msgid "`{jkh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:591
+#, no-wrap
+msgid "`{versus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:594
+#, no-wrap
+msgid "`{pi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:597
+#, no-wrap
+msgid "`{weongyo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:600
+#, no-wrap
+msgid "`{peterj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:603
+#, no-wrap
+msgid "`{jinmei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:606
+#, no-wrap
+msgid "`{ahze}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:609
+#, no-wrap
+msgid "`{markj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:612
+#, no-wrap
+msgid "`{trevor}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:615
+#, no-wrap
+msgid "`{erj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:618
+#, no-wrap
+msgid "`{allanjude}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:621
+#, no-wrap
+msgid "`{bjk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:624
+#, no-wrap
+msgid "`{phk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:627
+#, no-wrap
+msgid "`{pluknet}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:630
+#, no-wrap
+msgid "`{cokane}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:633
+#, no-wrap
+msgid "`{karels}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:636
+#, no-wrap
+msgid "`{kato}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:639
+#, no-wrap
+msgid "`{vkashyap}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:642
+#, no-wrap
+msgid "`{pkubaj}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:645
+#, no-wrap
+msgid "`{kris}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:648
+#, no-wrap
+msgid "`{keramida}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:651
+#, no-wrap
+msgid "`{fjoe}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:654
+#, no-wrap
+msgid "`{manolis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:657
+#, no-wrap
+msgid "`{stevek}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:660
+#, no-wrap
+msgid "`{jkim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:663
+#, no-wrap
+msgid "`{zack}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:666
+#, no-wrap
+msgid "`{jceel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:669
+#, no-wrap
+msgid "`{andreas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:672
+#, no-wrap
+msgid "`{kai}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:675
+#, no-wrap
+msgid "`{jkois}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:678
+#, no-wrap
+msgid "`{sergei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:681
+#, no-wrap
+msgid "`{maxim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:684
+#, no-wrap
+msgid "`{taras}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:687
+#, no-wrap
+msgid "`{tobik}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:690
+#, no-wrap
+msgid "`{jkoshy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:693
+#, no-wrap
+msgid "`{wkoszek}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:696
+#, no-wrap
+msgid "`{ak}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:699
+#, no-wrap
+msgid "`{gabor}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:702
+#, no-wrap
+msgid "`{anchie}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:705
+#, no-wrap
+msgid "`{rushani}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:708
+#, no-wrap
+msgid "`{kuriyama}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:711
+#, no-wrap
+msgid "`{rene}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:714
+#, no-wrap
+msgid "`{jlaffaye}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:717
+#, no-wrap
+msgid "`{clement}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:720
+#, no-wrap
+msgid "`{mlaier}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:723
+#, no-wrap
+msgid "`{martymac}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:726
+#, no-wrap
+msgid "`{glarkin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:729
+#, no-wrap
+msgid "`{dru}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:732
+#, no-wrap
+msgid "`{lawrance}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:735
+#, no-wrap
+msgid "`{njl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:738
+#, no-wrap
+msgid "`{jlh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:741
+#, no-wrap
+msgid "`{leeym}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:744
+#, no-wrap
+msgid "`{sam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:747
+#, no-wrap
+msgid "`{jylefort}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:753
+#, no-wrap
+msgid "`{oliver}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:756
+#, no-wrap
+msgid "`{netchild}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:759
+#, no-wrap
+msgid "`{leitao}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:762
+#, no-wrap
+msgid "`{ae}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:765
+#, no-wrap
+msgid "`{lesi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:768
+#, no-wrap
+msgid "`{achim}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:771
+#, no-wrap
+msgid "`{cel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:774
+#, no-wrap
+msgid "`{glewis}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:777
+#, no-wrap
+msgid "`{vishwin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:780
+#, no-wrap
+msgid "`{delphij}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:783
+#, no-wrap
+msgid "`{avatar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:786
+#, no-wrap
+msgid "`{ijliao}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:789
+#, no-wrap
+msgid "`{rlibby}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:792
+#, no-wrap
+msgid "`{pclin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:795
+#, no-wrap
+msgid "`{yzlin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:798
+#, no-wrap
+msgid "`{linimon}`"
+msgstr "`{linimon}`"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:801
+#, no-wrap
+msgid "`{arved}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:804
+#, no-wrap
+msgid "`{dryice}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:807
+#, no-wrap
+msgid "`{nemoliu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:810
+#, no-wrap
+msgid "`{kevlo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:813
+#, no-wrap
+msgid "`{zml}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:816
+#, no-wrap
+msgid "`{nox}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:819
+#, no-wrap
+msgid "`{avl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:822
+#, no-wrap
+msgid "`{scottl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:825
+#, no-wrap
+msgid "`{rmacklem}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:828
+#, no-wrap
+msgid "`{vmaffione}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:831
+#, no-wrap
+msgid "`{bmah}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:834
+#, no-wrap
+msgid "`{rm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:837
+#, no-wrap
+msgid "`{mtm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:840
+#, no-wrap
+msgid "`{dwmalone}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:843
+#, no-wrap
+msgid "`{marino}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:846
+#, no-wrap
+msgid "`{cherry}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:849
+#, no-wrap
+msgid "`{matusita}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:852
+#, no-wrap
+msgid "`{mm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:855
+#, no-wrap
+msgid "`{sem}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:858
+#, no-wrap
+msgid "`{mckusick}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:861
+#, no-wrap
+msgid "`{tmclaugh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:864
+#, no-wrap
+msgid "`{jmelo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:867
+#, no-wrap
+msgid "`{mmel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:870
+#, no-wrap
+msgid "`{jmmv}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:873
+#, no-wrap
+msgid "`{kadesai}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:876
+#, no-wrap
+msgid "`{ken}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:879
+#, no-wrap
+msgid "`{markm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:882
+#, no-wrap
+msgid "`{dinoex}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:885
+#, no-wrap
+msgid "`{sanpei}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:888
+#, no-wrap
+msgid "`{rmh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:891
+#, no-wrap
+msgid "`{driesm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:894
+#, no-wrap
+msgid "`{jrm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:897
+#, no-wrap
+msgid "`{freqlabs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:900
+#, no-wrap
+msgid "`{mmoll}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:903
+#, no-wrap
+msgid "`{cmt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:906
+#, no-wrap
+msgid "`{stephen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:909
+#, no-wrap
+msgid "`{marcel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:912
+#, no-wrap
+msgid "`{dougm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:915
+#, no-wrap
+msgid "`{kmoore}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:918
+#, no-wrap
+msgid "`{marck}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:921
+#, no-wrap
+msgid "`{mav}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:924
+#, no-wrap
+msgid "`{rich}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:927
+#, no-wrap
+msgid "`{knu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:930
+#, no-wrap
+msgid "`{tmm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:933
+#, no-wrap
+msgid "`{max}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:936
+#, no-wrap
+msgid "`{maho}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:939
+#, no-wrap
+msgid "`{yoichi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:942
+#, no-wrap
+msgid "`{bland}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:945
+#, no-wrap
+msgid "`{gnn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:948
+#, no-wrap
+msgid "`{khng}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:951
+#, no-wrap
+msgid "`{simon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:954
+#, no-wrap
+msgid "`{rnoland}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:957
+#, no-wrap
+msgid "`{anders}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:960
+#, no-wrap
+msgid "`{lofi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:963
+#, no-wrap
+msgid "`{obrien}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:966
+#, no-wrap
+msgid "`{olgeni}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:969
+#, no-wrap
+msgid "`{philip}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:972
+#, no-wrap
+msgid "`{jpaetzel}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:975
+#, no-wrap
+msgid "`{zirias}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:978
+#, no-wrap
+msgid "`{hiren}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:981
+#, no-wrap
+msgid "`{hmp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:984
+#, no-wrap
+msgid "`{fluffy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:987
+#, no-wrap
+msgid "`{sat}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:990
+#, no-wrap
+msgid "`{np}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:993
+#, no-wrap
+msgid "`{royger}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:996
+#, no-wrap
+msgid "`{rpaulo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:999
+#, no-wrap
+msgid "`{rpokala}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1002
+#, no-wrap
+msgid "`{mp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1005
+#, no-wrap
+msgid "`{roam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1008
+#, no-wrap
+msgid "`{den}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1011
+#, no-wrap
+msgid "`{csjp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1014
+#, no-wrap
+msgid "`{grahamperrin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1017
+#, no-wrap
+msgid "`{gerald}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1020
+#, no-wrap
+msgid "`{scottph}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1023
+#, no-wrap
+msgid "`{jacula}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1029
+#, no-wrap
+msgid "`{jdp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1032
+#, no-wrap
+msgid "`{krion}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1035
+#, no-wrap
+msgid "`{sepotvin}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1038
+#, no-wrap
+msgid "`{cpm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1041
+#, no-wrap
+msgid "`{markp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1044
+#, no-wrap
+msgid "`{alepulver}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1047
+#, no-wrap
+msgid "`{kp}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1050
+#, no-wrap
+msgid "`{thomas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1053
+#, no-wrap
+msgid "`{hq}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1056
+#, no-wrap
+msgid "`{bofh}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1059
+#, no-wrap
+msgid "`{fox}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1062
+#, no-wrap
+msgid "`{lbr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1065
+#, no-wrap
+msgid "`{crees}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1068
+#, no-wrap
+msgid "`{rees}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1071
+#, no-wrap
+msgid "`{mr}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1077
+#, no-wrap
+msgid "`{trhodes}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1080
+#, no-wrap
+msgid "`{benno}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1083
+#, no-wrap
+msgid "`{beech}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1086
+#, no-wrap
+msgid "`{roberto}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1089
+#, no-wrap
+msgid "`{rodrigc}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1092
+#, no-wrap
+msgid "`{ler}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1095
+#, no-wrap
+msgid "`{leres}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1098
+#, no-wrap
+msgid "`{robak}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1101
+#, no-wrap
+msgid "`{guido}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1104
+#, no-wrap
+msgid "`{rea}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1107
+#, no-wrap
+msgid "`{ray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1110
+#, no-wrap
+msgid "`{niklas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1113
+#, no-wrap
+msgid "`{salvadore}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1116
+#, no-wrap
+msgid "`{bsam}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1119
+#, no-wrap
+msgid "`{marks}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1122
+#, no-wrap
+msgid "`{bschmidt}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1125
+#, no-wrap
+msgid "`{wosch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1128
+#, no-wrap
+msgid "`{cy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1131
+#, no-wrap
+msgid "`{das}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1134
+#, no-wrap
+msgid "`{scheidell}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1137
+#, no-wrap
+msgid "`{matthew}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1140
+#, no-wrap
+msgid "`{tmseck}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1143
+#, no-wrap
+msgid "`{johans}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1146
+#, no-wrap
+msgid "`{bakul}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1149
+#, no-wrap
+msgid "`{gshapiro}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1152
+#, no-wrap
+msgid "`{wxs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1155
+#, no-wrap
+msgid "`{nork}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1158
+#, no-wrap
+msgid "`{syrinx}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1161
+#, no-wrap
+msgid "`{vanilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1164
+#, no-wrap
+msgid "`{ashish}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1167
+#, no-wrap
+msgid "`{asiciliano}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1170
+#, no-wrap
+msgid "`{chs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1173
+#, no-wrap
+msgid "`{bms}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1176
+#, no-wrap
+msgid "`{demon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1179
+#, no-wrap
+msgid "`{jesper}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1182
+#, no-wrap
+msgid "`{scop}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1185
+#, no-wrap
+msgid "`{anray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1188
+#, no-wrap
+msgid "`{flo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1191
+#, no-wrap
+msgid "`{glebius}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1194
+#, no-wrap
+msgid "`{kensmith}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1197
+#, no-wrap
+msgid "`{ben}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1200
+#, no-wrap
+msgid "`{des}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1203
+#, no-wrap
+msgid "`{sobomax}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1206
+#, no-wrap
+msgid "`{asomers}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1209
+#, no-wrap
+msgid "`{brian}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1212
+#, no-wrap
+msgid "`{sson}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1215
+#, no-wrap
+msgid "`{nsouch}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1218
+#, no-wrap
+msgid "`{ssouhlal}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1221
+#, no-wrap
+msgid "`{loos}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1224
+#, no-wrap
+msgid "`{brnrd}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1227
+#, no-wrap
+msgid "`{rink}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1230
+#, no-wrap
+msgid "`{vsevolod}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1233
+#, no-wrap
+msgid "`{pstef}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1236
+#, no-wrap
+msgid "`{zi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1239
+#, no-wrap
+msgid "`{lstewart}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1242
+#, no-wrap
+msgid "`{murray}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1245
+#, no-wrap
+msgid "`{vs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1248
+#, no-wrap
+msgid "`{xride}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1251
+#, no-wrap
+msgid "`{marius}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1254
+#, no-wrap
+msgid "`{cs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1257
+#, no-wrap
+msgid "`{clsung}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1260
+#, no-wrap
+msgid "`{gsutter}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1263
+#, no-wrap
+msgid "`{metal}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1266
+#, no-wrap
+msgid "`{ryusuke}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1269
+#, no-wrap
+msgid "`{nyan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1272
+#, no-wrap
+msgid "`{sahil}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1275
+#, no-wrap
+msgid "`{tota}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1278
+#, no-wrap
+msgid "`{romain}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1281
+#, no-wrap
+msgid "`{eduardo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1284
+#, no-wrap
+msgid "`{sylvio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1287
+#, no-wrap
+msgid "`{itetcu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1290
+#, no-wrap
+msgid "`{mi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1293
+#, no-wrap
+msgid "`{gordon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1296
+#, no-wrap
+msgid "`{lth}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1299
+#, no-wrap
+msgid "`{fabient}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1302
+#, no-wrap
+msgid "`{thierry}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1305
+#, no-wrap
+msgid "`{thompsa}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1308
+#, no-wrap
+msgid "`{flz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1311
+#, no-wrap
+msgid "`{jilles}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1314
+#, no-wrap
+msgid "`{ganbold}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1317
+#, no-wrap
+msgid "`{tuexen}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1320
+#, no-wrap
+msgid "`{gonzo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1323
+#, no-wrap
+msgid "`{ume}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1326
+#, no-wrap
+msgid "`{ups}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1329
+#, no-wrap
+msgid "`{fsu}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1332
+#, no-wrap
+msgid "`{mikael}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1338
+#, no-wrap
+msgid "`{ram}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1341
+#, no-wrap
+msgid "`{bryanv}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1344
+#, no-wrap
+msgid "`{nectar}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1347
+#, no-wrap
+msgid "`{avilla}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1350
+#, no-wrap
+msgid "`{nivit}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1353
+#, no-wrap
+msgid "`{ivoras}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1356
+#, no-wrap
+msgid "`{stefan}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1359
+#, no-wrap
+msgid "`{kaiw}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1362
+#, no-wrap
+msgid "`{adamw}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1365
+#, no-wrap
+msgid "`{naddy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1368
+#, no-wrap
+msgid "`{peter}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1371
+#, no-wrap
+msgid "`{nwhitehorn}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1374
+#, no-wrap
+msgid "`{miwi}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1377
+#, no-wrap
+msgid "`{nate}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1380
+#, no-wrap
+msgid "`{twinterg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1383
+#, no-wrap
+msgid "`{def}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1386
+#, no-wrap
+msgid "`{wollman}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1389
+#, no-wrap
+msgid "`{joerg}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1392
+#, no-wrap
+msgid "`{ygy}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1395
+#, no-wrap
+msgid "`{emax}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1398
+#, no-wrap
+msgid "`{oshogbo}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1401
+#, no-wrap
+msgid "`{riggs}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1404
+#, no-wrap
+msgid "`{egypcio}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1407
+#, no-wrap
+msgid "`{bz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1410
+#, no-wrap
+msgid "`{dsl}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1413
+#, no-wrap
+msgid "`{zeising}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1416
+#, no-wrap
+msgid "`{phantom}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1419
+#, no-wrap
+msgid "`{tz}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1422
+#, no-wrap
+msgid "`{rigoletto}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1425
+#, no-wrap
+msgid "`{kaktus}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1428
+#, no-wrap
+msgid "`{samm}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1431
+#, no-wrap
+msgid "`{arrowd}`"
+msgstr ""
+
+#. type: Title ==
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1435
+#, no-wrap
+msgid "Other Cluster Account Holders"
+msgstr "Outros Detentores de Contas no Cluster"
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1437
+#, no-wrap
+msgid "`{bk}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1440
+#, no-wrap
+msgid "`{deb}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1443
+#, no-wrap
+msgid "`{debdrup}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1446
+#, no-wrap
+msgid "`{dutchdaemon}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1449
+#, no-wrap
+msgid "`{keymaster}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1452
+#, no-wrap
+msgid "`{mwlucas}`"
+msgstr ""
+
+#. type: Title ===
+#: documentation/content/en/articles/pgpkeys/_index.adoc:1455
+#, no-wrap
+msgid "`{dhw}`"
+msgstr ""
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/port-mentor-guidelines/_index.adoc b/documentation/content/pt-br/articles/port-mentor-guidelines/_index.adoc
index 43747a133b..2bfa30a22e 100644
--- a/documentation/content/pt-br/articles/port-mentor-guidelines/_index.adoc
+++ b/documentation/content/pt-br/articles/port-mentor-guidelines/_index.adoc
@@ -3,7 +3,6 @@ title: Instruções para Mentores do Ports
organizations:
- organization: A Equipe de Gerenciamento do Ports do FreeBSD
copyright: 2011 Thomas Abthorpe, Chris Rees
-releaseinfo: "$FreeBSD$"
---
= Instruções para Mentores do Ports
@@ -15,15 +14,27 @@ releaseinfo: "$FreeBSD$"
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/port-mentor-guidelines/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
'''
@@ -65,7 +76,7 @@ Esperamos que os mentores revisem e testem todos os patches propostos, pelo meno
Esperamos que os mentores assumam a responsabilidade pelas ações de seus mentees. Um mentor deve acompanhar todos os commits que o mentee faz, tanto os aprovados quanto os implícitos.
-Esperamos que os mentores se certifiquem de que seus mentees leiam o link:{porters-handbook}[Porter's Handbook], o link:{pr-guidelines}[Diretrizes para manuseio de relatórios de problemas], e o link:{committers-guide}[Guia do Committer].Embora não seja necessário memorizar todos os detalhes, todo committer precisa ter uma visão geral dessas coisas para ser uma parte efetiva da comunidade (e evitar o maior número possível de erros de novato).
+Esperamos que os mentores se certifiquem de que seus mentees leiam o extref:{porters-handbook}[Porter's Handbook], o extref:{pr-guidelines}[Diretrizes para manuseio de relatórios de problemas], e o extref:{committers-guide}[Guia do Committer].Embora não seja necessário memorizar todos os detalhes, todo committer precisa ter uma visão geral dessas coisas para ser uma parte efetiva da comunidade (e evitar o maior número possível de erros de novato).
[[mentees]]
=== Selecionando um Mentee
diff --git a/documentation/content/pt-br/articles/pr-guidelines/_index.adoc b/documentation/content/pt-br/articles/pr-guidelines/_index.adoc
index 77a4e00e5f..3264d9376e 100644
--- a/documentation/content/pt-br/articles/pr-guidelines/_index.adoc
+++ b/documentation/content/pt-br/articles/pr-guidelines/_index.adoc
@@ -1,13 +1,16 @@
---
-title: Diretrizes para manuseio de relatórios de problemas
authors:
- - author: Dag-Erling Smørgrav
- - author: Hiten Pandya
-releaseinfo: "$FreeBSD$"
+ -
+ author: 'Dag-Erling Smørgrav'
+ -
+ author: 'Hiten Pandya'
+description: 'Essas diretrizes descrevem as práticas recomendadas de tratamento para Relatórios de Problemas (PRs) do FreeBSD.'
+tags: ["PR", "guideline", "bugs", "maintenance", "BugZilla", "FreeBSD"]
+title: 'Diretrizes de Tratamento de Relatórios de Problemas'
trademarks: ["freebsd", "general"]
---
-= Diretrizes para manuseio de relatórios de problemas
+= Diretrizes de Tratamento de Relatórios de Problemas
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,20 +19,32 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/pr-guidelines/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Estas diretrizes descrevem as práticas de manuseio recomendadas para os Relatórios de Problemas do FreeBSD (PRs). Embora desenvolvido para a equipe de manutenção de banco de dados do FreeBSD PR mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org], essas diretrizes devem ser seguidas por qualquer pessoa que trabalhe com os Relatórios de Problemas do FreeBSD.
+Essas diretrizes descrevem práticas recomendadas de tratamento para Relatórios de Problemas (PRs) do FreeBSD. Embora desenvolvidas para a equipe de manutenção do Banco de Dados de PRs do FreeBSD (mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org]), essas diretrizes devem ser seguidas por qualquer pessoa que trabalhe com PRs do FreeBSD.
'''
@@ -38,68 +53,66 @@ toc::[]
[[intro]]
== Introdução
-O Bugzilla é um sistema de gerenciamento de problemas usado pelo Projeto FreeBSD. Como o rastreamento preciso de defeitos de software pendentes é importante para a qualidade do FreeBSD, o uso correto do software é essencial para o avanço do projeto.
+O Bugzilla é um sistema de gerenciamento de problemas usado pelo Projeto FreeBSD. Como o rastreamento preciso de defeitos de software pendentes é importante para a qualidade do FreeBSD, o uso correto do software é essencial para o progresso contínuo do Projeto.
-O acesso ao Bugzilla está disponível para toda a comunidade do FreeBSD. Para manter a consistência dentro do banco de dados e fornecer uma experiência de usuário consistente, diretrizes foram estabelecidas cobrindo aspectos comuns do gerenciamento de erros, como apresentação de acompanhamento, tratamento de solicitações de fechamento e assim por diante.
+O acesso ao Bugzilla está disponível para toda a comunidade FreeBSD. Para manter a consistência no banco de dados e fornecer uma experiência de usuário consistente, foram estabelecidas diretrizes que abrangem aspectos comuns de gerenciamento de bugs, como apresentação de acompanhamentos, tratamento de solicitações de encerramento, entre outros.
[[pr-lifecycle]]
-== Ciclo de vida de um relatório de problemas
+== Ciclo de vida do Relatório de Problemas
-* O usuário envia um relatório de bug no site. O bug está no estado `Needs Triage`.
-* Jane Random BugBuster confirma que o relatório de erros tem informação suficiente para ser reproduzível. Se não, ela irá interagir repetidamente com o usuário para obter as informações necessárias. Neste ponto, o bug é definido para o estado `Open`.
-* Joe Random Committer se interessa pelo PR e o atribui a si mesmo, ou Jane Random BugBuster decide que Joe é a pessoa mais adequada para lidar com o problema e atribui o bug a ele. O bug deve ser definido para o estado `In Discussion`.
-* Joe tem uma breve troca com o usuário que originou o relatório de problema (certificando-se de que toda a comunicação ficou registrada na trilha de auditoria) e determina a causa do problema.
-* Joe vira a noite trabalhando e produz um patch que ele acha que corrige o problema, e o envia em um follow-up para o originador, pedindo que ele teste a solução. Em seguida, ele configura o estado do PR para `Patch Ready`.
-* Algumas iterações depois, Joe e o originador estão satisfeitos com o patch, e Joe faz o commit para o branch `-CURRENT` (ou diretamente para o branch `-STABLE` se o problema não existir no `-CURRENT`), certificando-se de fazer referencia ao Relatório de Problemas no seu log de commit (e dando o crédito ao originador caso ele tenha enviado o patch todo ou parte dele) e, se apropriado, iniciará uma contagem regressiva de MFC. O bug é então alterado para o estado `Needs MFC`.
-* Se o patch não precisar de passar por um MFC, Joe então fecha o PR com o status `Issue Resolved`.
+* O autor do relatório envia um relatório de bug no site. O bug está no estado `Precisa ser Triado` (Needs Triage).
+* Jane Random BugBuster confirma que o relatório de bug possui informações suficientes para ser reproduzido. Caso contrário, ela vai e volta com o autor do relatório para obter as informações necessárias. Neste ponto, o bug é definido como estado `Aberto` (Open).
+* Joe Random Committer se interessa pelo PR e o atribui a si mesmo, ou Jane Random BugBuster decide que Joe é o mais adequado para lidar com ele e o atribui a ele. O bug deve ser definido para o estado `Em Discussão` (In Discussion).
+* Joe tem uma breve troca com o autor do relatório (certificando-se de que tudo é registrado no histórico de auditoria) e determina a causa do problema.
+* Joe trabalha a noite toda e desenvolve um patch que ele acha que corrige o problema e o envia em um acompanhamento, pedindo ao autor do relatório que o teste. Em seguida, ele define o estado do PR como `Patch Pronto` (Patch Ready).
+* Algumas iterações depois, tanto Joe quanto o autor do relatório estão satisfeitos com o patch e Joe o faz commit no `-CURRENT` (ou diretamente no `-STABLE` se o problema não existir no `-CURRENT`), certificando-se de fazer referência ao Relatório de Problemas em seu log de commit (e de creditar o autores se eles enviaram todo ou parte do patch) e, se apropriado, iniciar uma contagem regressiva de MFC. O bug é definido como estado `Precisa de MFC` (Needs MFC).
+* Se o patch não precisar de MFCing, Joe então encerra o PR como `Problema Resolvido` (Issue Resolved).
[NOTE]
====
-Muitos PRs são submetidos contendo muito pouca informação sobre o problema, e alguns são muito complexos para resolver, ou apenas arranham a superfície de um problema maior; Nestes casos, é muito importante obter todas as informações necessárias para resolver o problema. Se o problema reportado não puder ser resolvido ou caso ele ocorra novamente, é necessário reabrir o PR.
+Muitos PRs são enviados com muito pouca informação sobre o problema e alguns são muito complexos para resolver ou apenas arranham a superfície de um problema maior; nesses casos, é muito importante obter todas as informações necessárias para resolver o problema. Se o problema não puder ser resolvido ou ocorrer novamente, é necessário reabrir o PR.
====
[[pr-states]]
-== Estado do relatório de problemas
+== Estado do Relatório de Problemas
-É importante atualizar o status de um PR quando determinadas ações são tomadas. O status deve refletir com precisão o estado atual do trabalho no PR.
+É importante atualizar o estado de um PR quando certas ações são tomadas. O estado deve refletir com precisão o estado atual do trabalho no PR.
-.Um pequeno exemplo sobre quando alterar o estado de PR
+.Um pequeno exemplo de quando mudar o estado do PR
[example]
====
-
-Quando um PR tiver sido tratado e o desenvolvedor responsável se sente confortável com a correção, ele enviará um follow up para o PR e mudará o seu estado para "feedback". Neste ponto, o originador deve avaliar a correção em seu contexto e responder indicando se o defeito foi de fato remediado.
+Quando um PR foi trabalhado e o(s) desenvolvedor(es) responsáveis se sentem confortáveis com a correção, eles enviarão um acompanhamento para o PR e alterarão seu estado para "feedback". Neste ponto, o originador deve avaliar a correção em seu contexto e responder indicando se o defeito foi realmente corrigido.
====
-Um Relatório de Problemas pode estar em um dos seguintes estados:
+Um Relatório de Problema pode estar em um dos seguintes estados:
-[.glosslist]
-open::
-Estado inicial; o problema foi apontado e precisa ser revisto.
+open (aberto)::
+Estado inicial; o problema foi relatado, mas ainda não foi avaliado.
-analyzed::
-O problema foi revisto e uma solução está sendo procurada.
+analyzed (analisado)::
+O problema foi avaliado, mas ainda não foi corrigido.
-feedback::
+feedback (retroalimentação)::
Trabalhos adicionais requerem informações adicionais do originador ou da comunidade; possivelmente informações sobre a solução proposta.
-patched::
+patched (corrigido)::
Foi realizado o commit de um patch, mas algo (MFC, ou talvez confirmação do originador) ainda está pendente.
-suspended::
-O problema não está sendo trabalhado, devido à falta de informações ou recursos. Este é um excelente candidato para alguém que está procurando um projeto para assumir. Se o problema não puder ser resolvido, ele será fechado, e não suspenso. O projeto de documentação usa suspended para itens da lista de desejos que envolvem uma quantidade significativa de trabalho para a qual ninguém tem tempo no momento.
+suspended (suspenso)::
+O problema não está sendo trabalhado, devido à falta de informações ou recursos. Este é um candidato ideal para alguém que procura um projeto para assumir. Se o problema não puder ser resolvido de forma alguma, ele será fechado, em vez de suspenso. O projeto de documentação usa "suspenso" para itens de lista de desejos que exigem uma quantidade significativa de trabalho para o qual ninguém tem tempo no momento.
-closed::
+closed (fechado)::
Um relatório de problemas é fechado quando as alterações referentes a ele tiverem sido integradas, documentadas e testadas ou, quando a correção do problema tiver sido abandonada.
[NOTE]
====
-O estado "patched" está diretamente relacionado ao feedback, então você pode passar direto para o estado de "closed" se o originador não puder testar o patch, e ele tiver funcionado no seu próprio teste.
+O estado "corrigido" (patched) está diretamente relacionado ao estado "retroalimentação" (feedback), então você pode ir diretamente para o estado "fechado" (closed) se o originador não puder testar o patch e ele funcionar em seus próprios testes.
====
[[pr-types]]
-== Tipos de relatórios de problemas
+== Tipos de Relatórios de Problema
-Ao lidar com relatórios de problemas, seja como um desenvolvedor que tenha acesso direto ao banco de dados de relatórios de problemas ou como colaborador que navega no banco de dados e envia followups com patches, comentários, sugestões ou solicitações de alteração, você vai encontrar vários tipos diferentes de PRs.
+Ao lidar com relatórios de problemas, seja como um desenvolvedor que tem acesso direto ao banco de dados de relatórios de problemas ou como um colaborador que navega no banco de dados e envia feedbacks com patches, comentários, sugestões ou solicitações de mudança, você se deparará com vários tipos diferentes de PRs.
* <<pr-unassigned>>
* <<pr-assigned>>
@@ -110,115 +123,116 @@ Ao lidar com relatórios de problemas, seja como um desenvolvedor que tenha aces
As seções a seguir descrevem para que cada tipo diferente de PRs é usado, quando um PR pertence a um desses tipos e qual tratamento cada tipo diferente recebe.
[[pr-unassigned]]
-== PRs não atribuídos
+== PRs Não Atribuídos
+
+Quando os Relatórios de Problemas chegam, eles são inicialmente atribuídos a um responsável genérico (placeholder). Esses responsáveis sempre começam com `freebsd-`. O valor exato desse responsável padrão depende da categoria do PR; na maioria dos casos, corresponde a uma lista de discussão específica do FreeBSD. Aqui está a lista atual, com os mais comuns listados primeiro:
-Quando os PRs chegam, eles são inicialmente atribuídos a um responsável genérico (placeholder). Estes são sempre prefixados com `freebsd-`. O valor exato para esse padrão depende da categoria; na maioria dos casos, corresponde a uma lista de discussão específica do FreeBSD. Aqui está a lista atual, com os mais comuns listados primeiro:
[[default-assignees-common]]
-.Responsáveis ​​Padrões - mais comuns
+.Atribuidores Padrões - os mais comuns
[cols="1,1,1", options="header"]
|===
| Tipo
| Categorias
-| Responsável Padrão
+| Responsável padrão (Default Assignee)
-|sistema base
+|Sistema base (Base System)
|bin, conf, gnu, kern, misc
|freebsd-bugs
-|arquitetura específica
+|architecture-specific
|alpha, amd64, arm, i386, ia64, powerpc, sparc64
|freebsd-_arch_
-|Coleção de Ports
+|coleção de ports
|ports
|freebsd-ports-bugs
-|documentação enviada com o sistema
+|Documentação incluída no sistema
|docs
|freebsd-doc
-|Páginas web do FreeBSD (não incluindo docs)
+|páginas web do FreeBSD (excluindo a documentação)
|Website
|freebsd-www
|===
[[default-assignees-other]]
-.Responsável Padrão - outros
+.Atribuidores Padrão - outros
[cols="1,1,1", options="header"]
|===
| Tipo
| Categorias
-| Responsável Padrão
+| Responsável padrão (Default Assignee)
|esforços de advocacia
-|advocacia
+|advocacy
|freebsd-advocacy
-|Problemas com Java Virtual Machine(TM)
-|Java
+|problema com a Java Virtual Machine(TM)
+|java
|freebsd-java
|conformidade com padrões
-|padrões
+|standards
|freebsd-standards
|bibliotecas de threading
|threads
|freebsd-threads
-|Subsistema man:usb[4]
-|USB
+|subsistema man:usb[4]
+|usb
|freebsd-usb
|===
-Não se surpreenda ao descobrir que o usuário responsável pelo PR atribuiu a categoria errada. Se você corrigir a categoria, não se esqueça de corrigir a atribuição também. (Em particular, nossos usuários parecem ter dificuldade em entender que apenas porque seu problema se manifesta em um sistema i386, que ele pode ser genérico para todo o FreeBSD, e assim ser mais apropriado para o `kern`. O oposto também é verdade, claro.)
+Não se surpreenda ao descobrir que o autor do PR atribuiu-o à categoria errada. Se você corrigir a categoria, não se esqueça de corrigir também a atribuição. (Em particular, nossos autores têm dificuldade em entender que só porque seu problema se manifestou em um sistema i386, ele pode ser genérico para todo o FreeBSD e, portanto, ser mais apropriado para `kern`. O inverso também é verdadeiro, é claro.)
-Certos PRs podem ser reatribuídos para longe destes responsáveis genéricos por qualquer pessoa. Existem vários tipos de responsáveis: listas de discussão especializadas; aliases de correio (usados ​​para determinados itens de interesse limitado); e indivíduos.
+Alguns PRs podem ser reatribuídos para longe desses atribuidores genéricos por qualquer pessoa. Existem vários tipos de atribuidores: listas de discussão especializadas; aliases de e-mail (usados para determinados itens de interesse limitado); e indivíduos.
-Para os responsáveis ​​que são listas de discussão, use o formulário longo ao fazer a atribuição (por exemplo, `freebsd-foo` em vez de `foo`); isso evitará emails duplicados enviados para a lista de discussão.
+Para atribuidores que são listas de discussão, por favor, use a forma longa ao fazer a atribuição (por exemplo, `freebsd-foo` em vez de `foo`); isso evitará o envio de e-mails duplicados para a lista de discussão.
[NOTE]
====
-Como a lista de indivíduos que se voluntariaram para ser o responsável padrão para certos tipos de PRs muda com bastante frequência, ela é muito mais adequada para o https://wiki.freebsd.org/AssigningPRs[the FreeBSD wiki].
+Uma vez que a lista de pessoas que se ofereceram para ser o atribuidor padrão para determinados tipos de PRs muda com tanta frequência, é muito mais apropriado consultar https://wiki.freebsd.org/AssigningPRs[a wiki do FreeBSD].
====
-Aqui está uma lista de exemplo de tais entidades; provavelmente não está completa.
+Aqui está uma lista de exemplo dessas entidades; ela provavelmente não está completa.
[[common-assignees-base]]
-.Responsáveis ​​Comuns - sistema base
+.Atribuidores Comuns - Sistema Base
[cols="1,1,1,1", options="header"]
|===
| Tipo
| Categoria Sugerida
-| Responsável Sugerido
-| Tipo de Responsável
+| Atribuidor sugerido
+| Tipo de Atribuidor
-|problema específico da arquitetura ARM(R)
+|problema específico para a arquitetura ARM(R)
|arm
|freebsd-arm
|lista de discussão
-|problema específico da arquitetura MIPS(R)
+|problema específico para a arquitetura MIPS(R)
|kern
|freebsd-mips
|lista de discussão
-|problema específico da arquitetura PowerPC(R)
+|problema específico para a arquitetura PowerPC(R)
|kern
|freebsd-ppc
|lista de discussão
-|problema com Configuração Avançada e Gerenciamento de Energia (man:acpi[4])
+|problema com o Gerenciamento Avançado de Energia e Configuração (man:acpi[4])
|kern
|freebsd-acpi
|lista de discussão
-|problema com os drivers de modo de transferência assíncrona (ATM)
+|problema com os drivers de Modo de Transferência Assíncrona (ATM)
|kern
|freebsd-atm
|lista de discussão
-|problema com sistemas FreeBSD embarcados ou de small-footprint (por exemplo, NanoBSD/PicoBSD/FreeBSD-arm)
+|problema com sistemas FreeBSD incorporados ou small-footprint (por exemplo, NanoBSD/PicoBSD/FreeBSD-arm)
|kern
|freebsd-embedded
|lista de discussão
@@ -243,17 +257,17 @@ Aqui está uma lista de exemplo de tais entidades; provavelmente não está comp
|freebsd-ipfw
|lista de discussão
-|problema com os drivers de rede digital de serviços integrados (ISDN)
+|problema com drivers de Rede Digital de Serviços Integrados (ISDN)
|kern
|freebsd-isdn
|lista de discussão
-|subsistema man:jail[8]
+|problema com o subsistema man:jail[8]
|kern
|freebsd-jail
|lista de discussão
-|problema com a emulação Linux(R) ou SVR4
+|problema com emulação do Linux(R) ou do SVR4
|kern
|freebsd-emulation
|lista de discussão
@@ -278,12 +292,12 @@ Aqui está uma lista de exemplo de tais entidades; provavelmente não está comp
|freebsd-multimedia
|lista de discussão
-|problemas com o subsistema man:wlan[4] e drivers sem fio
+|problema com o subsistema man:wlan[4] e drivers wireless
|kern
|freebsd-wireless
|lista de discussão
-|problema com o man:sysinstall[8] ou man:bsdinstall[8]
+|problema com o man:sysinstall[8] ou o man:bsdinstall[8]
|bin
|freebsd-sysinstall
|lista de discussão
@@ -293,140 +307,141 @@ Aqui está uma lista de exemplo de tais entidades; provavelmente não está comp
|freebsd-rc
|lista de discussão
-|problema com funcionalidade VIMAGE ou VNET e código relacionado
+|problema com a funcionalidade VIMAGE ou VNET e código relacionado
|kern
|freebsd-virtualization
|lista de discussão
-|problema com a emulação de Xen
+|problema com a emulação do Xen
|kern
|freebsd-xen
|lista de discussão
|===
[[common-assignees-ports]]
-.Responsáveis Comuns - Ports Collection
+.Atribuidores Comuns - Coleção de Ports
[cols="1,1,1,1", options="header"]
|===
| Tipo
| Categoria Sugerida
-| Responsável Sugerido
-| Tipo de Responsável
+| Atribuidor sugerido
+| Tipo de Atribuidor
-|problema com o framework da coleção de ports (__não__ com um port individual!)
+|problema com o framework de ports (__não__ com um port individual!)
|ports
|portmgr
|alias
-|port que é mantido por apache@FreeBSD.org
+|port mantido por apache@FreeBSD.org
|ports
|apache
|lista de discussão
-|port que é mantido por autotools@FreeBSD.org
+|port mantido por autotools@FreeBSD.org
|ports
|autotools
|alias
-|port que é mantido por doceng@FreeBSD.org
+|port mantido por doceng@FreeBSD.org
|ports
|doceng
|alias
-|port que é mantido por eclipse@FreeBSD.org
+|port mantido por eclipse@FreeBSD.org
|ports
|freebsd-eclipse
|lista de discussão
-|port que é mantido por gecko@FreeBSD.org
+|port mantido por gecko@FreeBSD.org
|ports
|gecko
|lista de discussão
-|port que é mantido por gnome@FreeBSD.org
+|port mantido por gnome@FreeBSD.org
|ports
|gnome
|lista de discussão
-|port que é mantido por hamradio@FreeBSD.org
+|port mantido por hamradio@FreeBSD.org
|ports
|hamradio
|alias
-|port que é mantido por haskell@FreeBSD.org
+|port mantido por haskell@FreeBSD.org
|ports
|haskell
|alias
-|port que é mantido por java@FreeBSD.org
+|port mantido por java@FreeBSD.org
|ports
|freebsd-java
|lista de discussão
-|port que é mantido por kde@FreeBSD.org
+|port mantido por kde@FreeBSD.org
|ports
|kde
|lista de discussão
-|port que é mantido por mono@FreeBSD.org
+|port mantido por mono@FreeBSD.org
|ports
|mono
|lista de discussão
-|port que é mantido por office@FreeBSD.org
+|port mantido por office@FreeBSD.org
|ports
|freebsd-office
|lista de discussão
-|port que é mantido por perl@FreeBSD.org
+|por mantido por perl@FreeBSD.org
|ports
|perl
|lista de discussão
-|port que é mantido por python@FreeBSD.org
+|port mantido por python@FreeBSD.org
|ports
|freebsd-python
|lista de discussão
-|port que é mantido por ruby@FreeBSD.org
+|port mantido por ruby@FreeBSD.org
|ports
|freebsd-ruby
|lista de discussão
-|port que é mantido por secteam@FreeBSD.org
+|port mantido por secteam@FreeBSD.org
|ports
|secteam
|alias
-|port que é mantido por vbox@FreeBSD.org
+|port mantido por vbox@FreeBSD.org
|ports
|vbox
|alias
-|port que é mantido por x11@FreeBSD.org
+|por mantido por x11@FreeBSD.org
|ports
|freebsd-x11
|lista de discussão
|===
-Os PRs relacionados aos ports que têm um mantenedor que é um committer de ports podem ser reatribuídas por qualquer um (mas note que nem todo committer do FreeBSD é necessariamente um committer de ports, então você não pode simplesmente ir sozinho pelo endereço de email).
+Os relatórios de problemas dos ports que têm um mantenedor que é um colaborador do ports podem ser reatribuídos por qualquer pessoa (mas observe que nem todo committer do FreeBSD é necessariamente um committer do ports, então você não pode simplesmente ir apenas pelo endereço de e-mail.)
+
+Para outros PRs, por favor, não reatribua-os para indivíduos (além de si mesmo) a menos que você esteja certo de que o assignee realmente queira acompanhar o PR. Isso ajudará a evitar situações nas quais em que ninguém olha para corrigir um problema específico porque todo mundo assume que o assignee já está trabalhando no mesmo.
-Para outros PRs, por favor, não os reatribua para outros indivíduos (outros que não sejam você), a menos que tenha certeza de que o responsável realmente deseja acompanhar o PR. Isso ajudará a evitar situações em que ninguém se dedica para consertar um problema em particular, porque todos assumem que o responsável já está trabalhando nele.
[[common-assignees-other]]
-.Responsáveis ​​Comuns - Outros
+.Atribuidores Comuns - Outros
[cols="1,1,1,1", options="header"]
|===
| Tipo
| Categoria Sugerida
-| Responsável Sugerido
-| Tipo de Responsável
+| Atribuidor sugerido
+| Tipo de Atribuidor
-|problema com o banco de dados de PR
+|problema com o banco de dados de PRs
|bin
|bugmeister
|alias
-|problema com o https://bugs.freebsd.org/submit/[formulário web] do Bugzilla.
+|problema com o https://bugs.freebsd.org/submit/[formulario web] do Bugzilla.
|doc
|bugmeister
|alias
@@ -435,44 +450,44 @@ Para outros PRs, por favor, não os reatribua para outros indivíduos (outros qu
[[pr-assigned]]
== PRs Atribuídos
-Se um PR tiver o campo `responsible` configurado para o nome de usuário de um desenvolvedor do FreeBSD, isso significa que o PR foi entregue a essa pessoa em particular para trabalho adicional.
+Se um PR tem o campo `responsável` configurado com o nome de usuário de um desenvolvedor do FreeBSD, isso significa que o PR foi entregue para aquela pessoa específica para trabalhos posteriores.
-PRs designados não devem ser tocados por ninguém além do responsável ou do bugmeister. Se você tiver comentários, envie um followup. Se, por algum motivo, você achar que o PR deve mudar de estado ou ser reatribuído, envie uma mensagem ao responsável. Se o responsável não responder dentro de duas semanas, cancele a atribuição do PR e faça o que quiser.
+Os PRs atribuídos não devem ser alterados por ninguém além do assignee ou do bugmeister. Se você tiver comentários, envie um acompanhamento. Se, por algum motivo, você achar que o PR deve mudar de estado ou ser reatribuído, envie uma mensagem para o assignee. Se o assignee não responder dentro de duas semanas, desfaça a atribuição do PR e faça o que desejar.
[[pr-dups]]
== PRs Duplicados
-Se você encontrar mais de um PR que descreva o mesmo problema, escolha aquele que contém a maior quantidade de informações úteis e feche os outros, indicando claramente o número do PR substituto. Se vários PRs contiverem informações úteis que não se sobrepõem, envie todas as informações ausentes para um para um deles por meio de um followup, incluindo referências aos outros; em seguida, feche os outros PRs (que agora estão completamente substituídos).
+Se você encontrar mais de um PR que descreva o mesmo problema, escolha aquele que contém a maior quantidade de informações úteis e feche os outros, declarando claramente o número do PR substituto. Se vários PRs contêm informações úteis que não se sobrepõem, envie todas as informações ausentes em um acompanhamento para um PR, incluindo referências aos outros; em seguida, feche os outros PRs (que agora foram completamente substituídos).
[[pr-stale]]
== PRs Obsoletos
-Um PR é considerado obsoleto se não tiver sido modificado em mais de seis meses. Aplique o seguinte procedimento para lidar com PRs obsoletos:
+Um PR é considerado obsoleto se não foi modificado há mais de seis meses. Aplique o seguinte procedimento para lidar com PRs obsoletos:
-* Se o PR contiver detalhes suficientes, tente reproduzir o problema no `-CURRENT` e no `-STABLE`. Se você tiver sucesso, envie um followup detalhando suas descobertas e tente encontrar alguém para atribuí-lo. Defina o estado para "analyzed", se apropriado.
-* Se o PR descrever um problema que você sabe ser o resultado de um erro de uso (configuração incorreta ou outra coisa do tipo), envie um followup explicando o que o originador fez de errado e feche o PR com o motivo "User error" ou "Configuration error".
-* Se o PR descreve um erro que você sabe ter sido corrigido no `-CURRENT` e `-STABLE`, feche-o com uma mensagem informando quando ele foi corrigido em cada branch.
-* Se o PR descreve um erro que você sabe ter sido corrigido no `-CURRENT`, mas não no `-STABLE`, tente descobrir quando a pessoa que o corrigiu está planejando o MFC ou tente encontrar alguém (talvez você?) para fazê-lo. Defina o estado para "patched" e atribua-o a quem quer que tenha ficado responsável por fazer o MFC.
-* Em outros casos, peça ao originador para confirmar se o problema ainda existe em versões mais recentes. Se o originador não responder dentro de um mês, feche o PR com a notação "Feedback timeout".
+* Se o PR contém detalhes suficientes, tente reproduzir o problema em `-CURRENT` e `-STABLE`. Se você conseguir reproduzir o problema, envie um acompanhamento detalhando suas descobertas e tente encontrar alguém para atribuí-lo. Defina o estado como "analisado" se for apropriado.
+* Se o PR descreve um problema que você sabe que é o resultado de um erro de uso (configuração incorreta ou de outra forma), envie um acompanhamento explicando o que o originador fez de errado e, em seguida, feche o PR com a razão "Erro do usuário" ou "Erro de configuração".
+* Se o PR descreve um erro que você sabe que foi corrigido tanto em `-CURRENT` quanto em `-STABLE`, feche-o com uma mensagem indicando quando foi corrigido em cada branch.
+* Se o PR descreve um erro que você sabe que foi corrigido em `-CURRENT`, mas não em `-STABLE`, tente descobrir quando a pessoa que corrigiu planeja fazer o MFC (merge from current) para o `-STABLE`, ou tente encontrar outra pessoa (talvez você mesmo?) para fazer isso. Defina o estado como "corrigido" e atribua-o à pessoa que fará o MFC.
+* Em outros casos, peça ao originador para confirmar se o problema ainda existe em versões mais recentes. Se o originador não responder dentro de um mês, feche o PR com a anotação "Tempo limite de feedback".
[[pr-misfiled-notpr]]
-== PRs Sem Erros
+== PRs não relacionados a bugs
-Desenvolvedores que se deparem com PRs que na verdade deveriam ter sido postados na http://lists.FreeBSD.org/mailman/listinfo/freebsd-bugs[freebsd-bugs] ou em alguma outra lista deve fechar o PR, e informar o originador em um comentário do porque o problema reportado não é realmente um PR e orientá-lo sobre onde a mensagem deve ser postada.
+Desenvolvedores que encontram PRs que parecem ter sido postados em {freebsd-bugs} ou em outra lista devem fechar o PR, informando ao remetente em um comentário por que isso não é realmente um PR e onde a mensagem deve ser postada.
-Os endereços de e-mail que o Bugzilla utiliza para receber os PRs foram publicados como parte da documentação do FreeBSD, e também foram anunciados e listados no website. Isso significa que os spammers os encontraram.
+Os endereços de e-mail que o Bugzilla utiliza para receber PRs foram publicados como parte da documentação do FreeBSD, foram anunciados e listados no site. Isso significa que spammers os encontraram.
-Sempre que você fechar um desses PRs, faça o seguinte:
+Sempre que você fechar um desses PRs, por favor, faça o seguinte:
* Defina o componente como `junk` (em `Supporting Services`).
-* Defina o responsável para `nobody@FreeBSD.org`.
-* Defina o estado como `Issue Resolved`.
+* Defina o responsável como `nobody@FreeBSD.org`.
+* Defina o estado como `Problema Resolvido` (ou "Issue Resolved" em inglês).
Definir a categoria como `junk` torna óbvio que não há conteúdo útil dentro do PR e ajuda a reduzir a desordem nas categorias principais.
[[references]]
== Leitura Adicional
-Esta é uma lista de recursos relevantes para a escrita e processamento adequado de um relatório de problema. De forma alguma deve ser considerada completa.
+Esta é uma lista de recursos relevantes para a escrita adequada e o processamento dos relatórios de problemas. De forma alguma é uma lista completa.
-* link:{problem-reports}[Como escrever relatórios de problemas para o FreeBSD] - diretrizes para usuários que enviam um PR.
+* extref:{problem-reports}[Como Escrever Relatórios de Problemas do FreeBSD] - diretrizes para os autores de PRs.
diff --git a/documentation/content/pt-br/articles/pr-guidelines/_index.po b/documentation/content/pt-br/articles/pr-guidelines/_index.po
new file mode 100644
index 0000000000..f3aabcbc90
--- /dev/null
+++ b/documentation/content/pt-br/articles/pr-guidelines/_index.po
@@ -0,0 +1,1616 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 10:28-0300\n"
+"PO-Revision-Date: 2023-04-24 20:39+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlespr-guidelines_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:1
+#, no-wrap
+msgid "These guidelines describe recommended handling practices for FreeBSD Problem Reports (PRs)."
+msgstr ""
+"Essas diretrizes descrevem as práticas recomendadas de tratamento para "
+"Relatórios de Problemas (PRs) do FreeBSD."
+
+#. type: Title =
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:1
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:11
+#, no-wrap
+msgid "Problem Report Handling Guidelines"
+msgstr "Diretrizes de Tratamento de Relatórios de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:47
+msgid ""
+"These guidelines describe recommended handling practices for FreeBSD Problem "
+"Reports (PRs). Whilst developed for the FreeBSD PR Database Maintenance "
+"Team mailto:freebsd-bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org], "
+"these guidelines should be followed by anyone working with FreeBSD PRs."
+msgstr ""
+"Essas diretrizes descrevem práticas recomendadas de tratamento para "
+"Relatórios de Problemas (PRs) do FreeBSD. Embora desenvolvidas para a equipe "
+"de manutenção do Banco de Dados de PRs do FreeBSD (mailto:freebsd-"
+"bugbusters@FreeBSD.org[freebsd-bugbusters@FreeBSD.org]), essas diretrizes "
+"devem ser seguidas por qualquer pessoa que trabalhe com PRs do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:49
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:53
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:57
+msgid ""
+"Bugzilla is an issue management system used by the FreeBSD Project. As "
+"accurate tracking of outstanding software defects is important to FreeBSD's "
+"quality, the correct use of the software is essential to the forward "
+"progress of the Project."
+msgstr ""
+"O Bugzilla é um sistema de gerenciamento de problemas usado pelo Projeto "
+"FreeBSD. Como o rastreamento preciso de defeitos de software pendentes é "
+"importante para a qualidade do FreeBSD, o uso correto do software é "
+"essencial para o progresso contínuo do Projeto."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:60
+msgid ""
+"Access to Bugzilla is available to the entire FreeBSD community. In order "
+"to maintain consistency within the database and provide a consistent user "
+"experience, guidelines have been established covering common aspects of bug "
+"management such as presenting followup, handling close requests, and so "
+"forth."
+msgstr ""
+"O acesso ao Bugzilla está disponível para toda a comunidade FreeBSD. Para "
+"manter a consistência no banco de dados e fornecer uma experiência de "
+"usuário consistente, foram estabelecidas diretrizes que abrangem aspectos "
+"comuns de gerenciamento de bugs, como apresentação de acompanhamentos, "
+"tratamento de solicitações de encerramento, entre outros."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:62
+#, no-wrap
+msgid "Problem Report Life-cycle"
+msgstr "Ciclo de vida do Relatório de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:65
+msgid ""
+"The Reporter submits a bug report on the website. The bug is in the `Needs "
+"Triage` state."
+msgstr ""
+"O autor do relatório envia um relatório de bug no site. O bug está no estado "
+"`Precisa ser Triado` (Needs Triage)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:66
+msgid ""
+"Jane Random BugBuster confirms that the bug report has sufficient "
+"information to be reproducible. If not, she goes back and forth with the "
+"reporter to obtain the needed information. At this point the bug is set to "
+"the `Open` state."
+msgstr ""
+"Jane Random BugBuster confirma que o relatório de bug possui informações "
+"suficientes para ser reproduzido. Caso contrário, ela vai e volta com o "
+"autor do relatório para obter as informações necessárias. Neste ponto, o bug "
+"é definido como estado `Aberto` (Open)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:67
+msgid ""
+"Joe Random Committer takes interest in the PR and assigns it to himself, or "
+"Jane Random BugBuster decides that Joe is best suited to handle it and "
+"assigns it to him. The bug should be set to the `In Discussion` state."
+msgstr ""
+"Joe Random Committer se interessa pelo PR e o atribui a si mesmo, ou Jane "
+"Random BugBuster decide que Joe é o mais adequado para lidar com ele e o "
+"atribui a ele. O bug deve ser definido para o estado `Em Discussão` (In "
+"Discussion)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:68
+msgid ""
+"Joe has a brief exchange with the originator (making sure it all goes into "
+"the audit trail) and determines the cause of the problem."
+msgstr ""
+"Joe tem uma breve troca com o autor do relatório (certificando-se de que "
+"tudo é registrado no histórico de auditoria) e determina a causa do problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:69
+msgid ""
+"Joe pulls an all-nighter and whips up a patch that he thinks fixes the "
+"problem, and submits it in a follow-up, asking the originator to test it. He "
+"then sets the PRs state to `Patch Ready`."
+msgstr ""
+"Joe trabalha a noite toda e desenvolve um patch que ele acha que corrige o "
+"problema e o envia em um acompanhamento, pedindo ao autor do relatório que o "
+"teste. Em seguida, ele define o estado do PR como `Patch Pronto` (Patch "
+"Ready)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:70
+msgid ""
+"A couple of iterations later, both Joe and the originator are satisfied with "
+"the patch, and Joe commits it to `-CURRENT` (or directly to `-STABLE` if the "
+"problem does not exist in `-CURRENT`), making sure to reference the Problem "
+"Report in his commit log (and credit the originator if they submitted all or "
+"part of the patch) and, if appropriate, start an MFC countdown. The bug is "
+"set to the `Needs MFC` state."
+msgstr ""
+"Algumas iterações depois, tanto Joe quanto o autor do relatório estão "
+"satisfeitos com o patch e Joe o faz commit no `-CURRENT` (ou diretamente no "
+"`-STABLE` se o problema não existir no `-CURRENT`), certificando-se de fazer "
+"referência ao Relatório de Problemas em seu log de commit (e de creditar o "
+"autores se eles enviaram todo ou parte do patch) e, se apropriado, iniciar "
+"uma contagem regressiva de MFC. O bug é definido como estado `Precisa de MFC`"
+" (Needs MFC)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:71
+msgid ""
+"If the patch does not need MFCing, Joe then closes the PR as `Issue "
+"Resolved`."
+msgstr ""
+"Se o patch não precisar de MFCing, Joe então encerra o PR como `Problema "
+"Resolvido` (Issue Resolved)."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:76
+msgid ""
+"Many PRs are submitted with very little information about the problem, and "
+"some are either very complex to solve, or just scratch the surface of a "
+"larger problem; in these cases, it is very important to obtain all the "
+"necessary information needed to solve the problem. If the problem contained "
+"within cannot be solved, or has occurred again, it is necessary to re-open "
+"the PR."
+msgstr ""
+"Muitos PRs são enviados com muito pouca informação sobre o problema e alguns "
+"são muito complexos para resolver ou apenas arranham a superfície de um "
+"problema maior; nesses casos, é muito importante obter todas as informações "
+"necessárias para resolver o problema. Se o problema não puder ser resolvido "
+"ou ocorrer novamente, é necessário reabrir o PR."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:79
+#, no-wrap
+msgid "Problem Report State"
+msgstr "Estado do Relatório de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:83
+msgid ""
+"It is important to update the state of a PR when certain actions are taken. "
+"The state should accurately reflect the current state of work on the PR."
+msgstr ""
+"É importante atualizar o estado de um PR quando certas ações são tomadas. O "
+"estado deve refletir com precisão o estado atual do trabalho no PR."
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:84
+#, no-wrap
+msgid "A small example on when to change PR state"
+msgstr "Um pequeno exemplo de quando mudar o estado do PR"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:89
+msgid ""
+"When a PR has been worked on and the developer(s) responsible feel "
+"comfortable about the fix, they will submit a followup to the PR and change "
+"its state to \"feedback\". At this point, the originator should evaluate "
+"the fix in their context and respond indicating whether the defect has "
+"indeed been remedied."
+msgstr ""
+"Quando um PR foi trabalhado e o(s) desenvolvedor(es) responsáveis se sentem "
+"confortáveis com a correção, eles enviarão um acompanhamento para o PR e "
+"alterarão seu estado para \"feedback\". Neste ponto, o originador deve "
+"avaliar a correção em seu contexto e responder indicando se o defeito foi "
+"realmente corrigido."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:92
+msgid "A Problem Report may be in one of the following states:"
+msgstr "Um Relatório de Problema pode estar em um dos seguintes estados:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:93
+#, no-wrap
+msgid "open"
+msgstr "open (aberto)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:95
+msgid "Initial state; the problem has been pointed out and it needs reviewing."
+msgstr "Estado inicial; o problema foi relatado, mas ainda não foi avaliado."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:96
+#, no-wrap
+msgid "analyzed"
+msgstr "analyzed (analisado)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:98
+msgid "The problem has been reviewed and a solution is being sought."
+msgstr "O problema foi avaliado, mas ainda não foi corrigido."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:99
+#, no-wrap
+msgid "feedback"
+msgstr "feedback (retroalimentação)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:101
+msgid ""
+"Further work requires additional information from the originator or the "
+"community; possibly information regarding the proposed solution."
+msgstr ""
+"Trabalhos adicionais requerem informações adicionais do originador ou da "
+"comunidade; possivelmente informações sobre a solução proposta."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:102
+#, no-wrap
+msgid "patched"
+msgstr "patched (corrigido)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:104
+msgid ""
+"A patch has been committed, but something (MFC, or maybe confirmation from "
+"originator) is still pending."
+msgstr ""
+"Foi realizado o commit de um patch, mas algo (MFC, ou talvez confirmação do "
+"originador) ainda está pendente."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:105
+#, no-wrap
+msgid "suspended"
+msgstr "suspended (suspenso)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:110
+msgid ""
+"The problem is not being worked on, due to lack of information or "
+"resources. This is a prime candidate for somebody who is looking for a "
+"project to take on. If the problem cannot be solved at all, it will be "
+"closed, rather than suspended. The documentation project uses suspended for "
+"wish-list items that entail a significant amount of work which no one "
+"currently has time for."
+msgstr ""
+"O problema não está sendo trabalhado, devido à falta de informações ou "
+"recursos. Este é um candidato ideal para alguém que procura um projeto para "
+"assumir. Se o problema não puder ser resolvido de forma alguma, ele será "
+"fechado, em vez de suspenso. O projeto de documentação usa \"suspenso\" para "
+"itens de lista de desejos que exigem uma quantidade significativa de "
+"trabalho para o qual ninguém tem tempo no momento."
+
+#. type: Labeled list
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:111
+#, no-wrap
+msgid "closed"
+msgstr "closed (fechado)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:113
+msgid ""
+"A problem report is closed when any changes have been integrated, "
+"documented, and tested, or when fixing the problem is abandoned."
+msgstr ""
+"Um relatório de problemas é fechado quando as alterações referentes a ele "
+"tiverem sido integradas, documentadas e testadas ou, quando a correção do "
+"problema tiver sido abandonada."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:117
+msgid ""
+"The \"patched\" state is directly related to feedback, so you may go "
+"directly to \"closed\" state if the originator cannot test the patch, and it "
+"works in your own testing."
+msgstr ""
+"O estado \"corrigido\" (patched) está diretamente relacionado ao estado "
+"\"retroalimentação\" (feedback), então você pode ir diretamente para o "
+"estado \"fechado\" (closed) se o originador não puder testar o patch e ele "
+"funcionar em seus próprios testes."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:120
+#, no-wrap
+msgid "Types of Problem Reports"
+msgstr "Tipos de Relatórios de Problema"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:123
+msgid ""
+"While handling problem reports, either as a developer who has direct access "
+"to the Problem Reports database or as a contributor who browses the database "
+"and submits followups with patches, comments, suggestions or change "
+"requests, you will come across several different types of PRs."
+msgstr ""
+"Ao lidar com relatórios de problemas, seja como um desenvolvedor que tem "
+"acesso direto ao banco de dados de relatórios de problemas ou como um "
+"colaborador que navega no banco de dados e envia feedbacks com patches, "
+"comentários, sugestões ou solicitações de mudança, você se deparará com "
+"vários tipos diferentes de PRs."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:125
+msgid "<<pr-unassigned>>"
+msgstr "<<pr-unassigned>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:126
+msgid "<<pr-assigned>>"
+msgstr "<<pr-assigned>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:127
+msgid "<<pr-dups>>"
+msgstr "<<pr-dups>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:128
+msgid "<<pr-stale>>"
+msgstr "<<pr-stale>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:129
+msgid "<<pr-misfiled-notpr>>"
+msgstr "<<pr-misfiled-notpr>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:131
+msgid ""
+"The following sections describe what each different type of PRs is used for, "
+"when a PR belongs to one of these types, and what treatment each different "
+"type receives."
+msgstr ""
+"As seções a seguir descrevem para que cada tipo diferente de PRs é usado, "
+"quando um PR pertence a um desses tipos e qual tratamento cada tipo "
+"diferente recebe."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:133
+#, no-wrap
+msgid "Unassigned PRs"
+msgstr "PRs Não Atribuídos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:139
+msgid ""
+"When PRs arrive, they are initially assigned to a generic (placeholder) "
+"assignee. These are always prepended with `freebsd-`. The exact value for "
+"this default depends on the category; in most cases, it corresponds to a "
+"specific FreeBSD mailing list. Here is the current list, with the most "
+"common ones listed first:"
+msgstr ""
+"Quando os Relatórios de Problemas chegam, eles são inicialmente atribuídos a "
+"um responsável genérico (placeholder). Esses responsáveis sempre começam com "
+"`freebsd-`. O valor exato desse responsável padrão depende da categoria do "
+"PR; na maioria dos casos, corresponde a uma lista de discussão específica do "
+"FreeBSD. Aqui está a lista atual, com os mais comuns listados primeiro:"
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:141
+#, no-wrap
+msgid "Default Assignees - most common"
+msgstr "Atribuidores Padrões - os mais comuns"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:145
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:174
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:221
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:341
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:451
+#, no-wrap
+msgid "Type"
+msgstr "Tipo"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:146
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:175
+#, no-wrap
+msgid "Categories"
+msgstr "Categorias"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:148
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:177
+#, no-wrap
+msgid "Default Assignee"
+msgstr "Responsável padrão (Default Assignee)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:149
+#, no-wrap
+msgid "base system"
+msgstr "Sistema base (Base System)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:150
+#, no-wrap
+msgid "bin, conf, gnu, kern, misc"
+msgstr "bin, conf, gnu, kern, misc"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:152
+#, no-wrap
+msgid "freebsd-bugs"
+msgstr "freebsd-bugs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:153
+#, no-wrap
+msgid "architecture-specific"
+msgstr "architecture-specific"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:154
+#, no-wrap
+msgid "alpha, amd64, arm, i386, ia64, powerpc, sparc64"
+msgstr "alpha, amd64, arm, i386, ia64, powerpc, sparc64"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:156
+#, no-wrap
+msgid "freebsd-_arch_"
+msgstr "freebsd-_arch_"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:157
+#, no-wrap
+msgid "ports collection"
+msgstr "coleção de ports"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:158
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:347
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:352
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:357
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:362
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:367
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:372
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:377
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:382
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:387
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:392
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:397
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:402
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:407
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:412
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:417
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:422
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:427
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:432
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:437
+#, no-wrap
+msgid "ports"
+msgstr "ports"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:160
+#, no-wrap
+msgid "freebsd-ports-bugs"
+msgstr "freebsd-ports-bugs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:161
+#, no-wrap
+msgid "documentation shipped with the system"
+msgstr "Documentação incluída no sistema"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:162
+#, no-wrap
+msgid "docs"
+msgstr "docs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:164
+#, no-wrap
+msgid "freebsd-doc"
+msgstr "freebsd-doc"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:165
+#, no-wrap
+msgid "FreeBSD web pages (not including docs)"
+msgstr "páginas web do FreeBSD (excluindo a documentação)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:166
+#, no-wrap
+msgid "Website"
+msgstr "Website"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:167
+#, no-wrap
+msgid "freebsd-www"
+msgstr "freebsd-www"
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:170
+#, no-wrap
+msgid "Default Assignees - other"
+msgstr "Atribuidores Padrão - outros"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:178
+#, no-wrap
+msgid "advocacy efforts"
+msgstr "esforços de advocacia"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:179
+#, no-wrap
+msgid "advocacy"
+msgstr "advocacy"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:181
+#, no-wrap
+msgid "freebsd-advocacy"
+msgstr "freebsd-advocacy"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:182
+#, no-wrap
+msgid "Java Virtual Machine(TM) problems"
+msgstr "problema com a Java Virtual Machine(TM)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:183
+#, no-wrap
+msgid "java"
+msgstr "java"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:185
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:393
+#, no-wrap
+msgid "freebsd-java"
+msgstr "freebsd-java"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:186
+#, no-wrap
+msgid "standards compliance"
+msgstr "conformidade com padrões"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:187
+#, no-wrap
+msgid "standards"
+msgstr "standards"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:189
+#, no-wrap
+msgid "freebsd-standards"
+msgstr "freebsd-standards"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:190
+#, no-wrap
+msgid "threading libraries"
+msgstr "bibliotecas de threading"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:191
+#, no-wrap
+msgid "threads"
+msgstr "threads"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:193
+#, no-wrap
+msgid "freebsd-threads"
+msgstr "freebsd-threads"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:194
+#, no-wrap
+msgid "man:usb[4] subsystem"
+msgstr "subsistema man:usb[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:195
+#, no-wrap
+msgid "usb"
+msgstr "usb"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:196
+#, no-wrap
+msgid "freebsd-usb"
+msgstr "freebsd-usb"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:202
+msgid ""
+"Do not be surprised to find that the submitter of the PR has assigned it to "
+"the wrong category. If you fix the category, do not forget to fix the "
+"assignment as well. (In particular, our submitters seem to have a hard time "
+"understanding that just because their problem manifested on an i386 system, "
+"that it might be generic to all of FreeBSD, and thus be more appropriate for "
+"`kern`. The converse is also true, of course.)"
+msgstr ""
+"Não se surpreenda ao descobrir que o autor do PR atribuiu-o à categoria "
+"errada. Se você corrigir a categoria, não se esqueça de corrigir também a "
+"atribuição. (Em particular, nossos autores têm dificuldade em entender que "
+"só porque seu problema se manifestou em um sistema i386, ele pode ser "
+"genérico para todo o FreeBSD e, portanto, ser mais apropriado para `kern`. O "
+"inverso também é verdadeiro, é claro.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:205
+msgid ""
+"Certain PRs may be reassigned away from these generic assignees by anyone. "
+"There are several types of assignees: specialized mailing lists; mail "
+"aliases (used for certain limited-interest items); and individuals."
+msgstr ""
+"Alguns PRs podem ser reatribuídos para longe desses atribuidores genéricos "
+"por qualquer pessoa. Existem vários tipos de atribuidores: listas de "
+"discussão especializadas; aliases de e-mail (usados para determinados itens "
+"de interesse limitado); e indivíduos."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:208
+msgid ""
+"For assignees which are mailing lists, please use the long form when making "
+"the assignment (e.g., `freebsd-foo` instead of `foo`); this will avoid "
+"duplicate emails sent to the mailing list."
+msgstr ""
+"Para atribuidores que são listas de discussão, por favor, use a forma longa "
+"ao fazer a atribuição (por exemplo, `freebsd-foo` em vez de `foo`); isso "
+"evitará o envio de e-mails duplicados para a lista de discussão."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:212
+msgid ""
+"Since the list of individuals who have volunteered to be the default "
+"assignee for certain types of PRs changes so often, it is much more suitable "
+"for https://wiki.freebsd.org/AssigningPRs[the FreeBSD wiki]."
+msgstr ""
+"Uma vez que a lista de pessoas que se ofereceram para ser o atribuidor "
+"padrão para determinados tipos de PRs muda com tanta frequência, é muito "
+"mais apropriado consultar https://wiki.freebsd.org/AssigningPRs[a wiki do "
+"FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:215
+msgid "Here is a sample list of such entities; it is probably not complete."
+msgstr ""
+"Aqui está uma lista de exemplo dessas entidades; ela provavelmente não está "
+"completa."
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:217
+#, no-wrap
+msgid "Common Assignees - base system"
+msgstr "Atribuidores Comuns - Sistema Base"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:222
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:342
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:452
+#, no-wrap
+msgid "Suggested Category"
+msgstr "Categoria Sugerida"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:223
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:343
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:453
+#, no-wrap
+msgid "Suggested Assignee"
+msgstr "Atribuidor sugerido"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:225
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:345
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:455
+#, no-wrap
+msgid "Assignee Type"
+msgstr "Tipo de Atribuidor"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:226
+#, no-wrap
+msgid "problem specific to the ARM(R) architecture"
+msgstr "problema específico para a arquitetura ARM(R)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:227
+#, no-wrap
+msgid "arm"
+msgstr "arm"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:228
+#, no-wrap
+msgid "freebsd-arm"
+msgstr "freebsd-arm"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:230
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:235
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:240
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:245
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:250
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:255
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:260
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:265
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:270
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:275
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:280
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:285
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:290
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:295
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:300
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:305
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:310
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:315
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:320
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:325
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:330
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:334
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:355
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:370
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:375
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:380
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:395
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:400
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:405
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:410
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:415
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:420
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:425
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:439
+#, no-wrap
+msgid "mailing list"
+msgstr "lista de discussão"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:231
+#, no-wrap
+msgid "problem specific to the MIPS(R) architecture"
+msgstr "problema específico para a arquitetura MIPS(R)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:232
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:237
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:242
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:247
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:252
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:257
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:262
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:267
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:272
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:277
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:282
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:287
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:292
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:297
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:302
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:307
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:312
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:322
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:327
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:332
+#, no-wrap
+msgid "kern"
+msgstr "kern"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:233
+#, no-wrap
+msgid "freebsd-mips"
+msgstr "freebsd-mips"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:236
+#, no-wrap
+msgid "problem specific to the PowerPC(R) architecture"
+msgstr "problema específico para a arquitetura PowerPC(R)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:238
+#, no-wrap
+msgid "freebsd-ppc"
+msgstr "freebsd-ppc"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:241
+#, no-wrap
+msgid "problem with Advanced Configuration and Power Management (man:acpi[4])"
+msgstr ""
+"problema com o Gerenciamento Avançado de Energia e Configuração (man:acpi[4])"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:243
+#, no-wrap
+msgid "freebsd-acpi"
+msgstr "freebsd-acpi"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:246
+#, no-wrap
+msgid "problem with Asynchronous Transfer Mode (ATM) drivers"
+msgstr "problema com os drivers de Modo de Transferência Assíncrona (ATM)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:248
+#, no-wrap
+msgid "freebsd-atm"
+msgstr "freebsd-atm"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:251
+#, no-wrap
+msgid "problem with embedded or small-footprint FreeBSD systems (e.g., NanoBSD/PicoBSD/FreeBSD-arm)"
+msgstr ""
+"problema com sistemas FreeBSD incorporados ou small-footprint (por exemplo, "
+"NanoBSD/PicoBSD/FreeBSD-arm)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:253
+#, no-wrap
+msgid "freebsd-embedded"
+msgstr "freebsd-embedded"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:256
+#, no-wrap
+msgid "problem with FireWire(R) drivers"
+msgstr "problema com os drivers FireWire(R)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:258
+#, no-wrap
+msgid "freebsd-firewire"
+msgstr "freebsd-firewire"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:261
+#, no-wrap
+msgid "problem with the filesystem code"
+msgstr "problema com o código do sistema de arquivos"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:263
+#, no-wrap
+msgid "freebsd-fs"
+msgstr "freebsd-fs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:266
+#, no-wrap
+msgid "problem with the man:geom[4] subsystem"
+msgstr "problema com o subsistema man:geom[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:268
+#, no-wrap
+msgid "freebsd-geom"
+msgstr "freebsd-geom"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:271
+#, no-wrap
+msgid "problem with the man:ipfw[4] subsystem"
+msgstr "problema com o subsistema man:ipfw[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:273
+#, no-wrap
+msgid "freebsd-ipfw"
+msgstr "freebsd-ipfw"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:276
+#, no-wrap
+msgid "problem with Integrated Services Digital Network (ISDN) drivers"
+msgstr "problema com drivers de Rede Digital de Serviços Integrados (ISDN)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:278
+#, no-wrap
+msgid "freebsd-isdn"
+msgstr "freebsd-isdn"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:281
+#, no-wrap
+msgid "man:jail[8] subsystem"
+msgstr "problema com o subsistema man:jail[8]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:283
+#, no-wrap
+msgid "freebsd-jail"
+msgstr "freebsd-jail"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:286
+#, no-wrap
+msgid "problem with Linux(R) or SVR4 emulation"
+msgstr "problema com emulação do Linux(R) ou do SVR4"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:288
+#, no-wrap
+msgid "freebsd-emulation"
+msgstr "freebsd-emulation"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:291
+#, no-wrap
+msgid "problem with the networking stack"
+msgstr "problema com a pilha de rede"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:293
+#, no-wrap
+msgid "freebsd-net"
+msgstr "freebsd-net"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:296
+#, no-wrap
+msgid "problem with the man:pf[4] subsystem"
+msgstr "problema com o subsistema man:pf[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:298
+#, no-wrap
+msgid "freebsd-pf"
+msgstr "freebsd-pf"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:301
+#, no-wrap
+msgid "problem with the man:scsi[4] subsystem"
+msgstr "problema com o subsistema man:scsi[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:303
+#, no-wrap
+msgid "freebsd-scsi"
+msgstr "freebsd-scsi"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:306
+#, no-wrap
+msgid "problem with the man:sound[4] subsystem"
+msgstr "problema com o subsistema man:sound[4]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:308
+#, no-wrap
+msgid "freebsd-multimedia"
+msgstr "freebsd-multimedia"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:311
+#, no-wrap
+msgid "problems with the man:wlan[4] subsystem and wireless drivers"
+msgstr "problema com o subsistema man:wlan[4] e drivers wireless"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:313
+#, no-wrap
+msgid "freebsd-wireless"
+msgstr "freebsd-wireless"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:316
+#, no-wrap
+msgid "problem with man:sysinstall[8] or man:bsdinstall[8]"
+msgstr "problema com o man:sysinstall[8] ou o man:bsdinstall[8]"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:317
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:457
+#, no-wrap
+msgid "bin"
+msgstr "bin"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:318
+#, no-wrap
+msgid "freebsd-sysinstall"
+msgstr "freebsd-sysinstall"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:321
+#, no-wrap
+msgid "problem with the system startup scripts (man:rc[8])"
+msgstr "problema com os scripts de inicialização do sistema (man:rc[8])"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:323
+#, no-wrap
+msgid "freebsd-rc"
+msgstr "freebsd-rc"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:326
+#, no-wrap
+msgid "problem with VIMAGE or VNET functionality and related code"
+msgstr "problema com a funcionalidade VIMAGE ou VNET e código relacionado"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:328
+#, no-wrap
+msgid "freebsd-virtualization"
+msgstr "freebsd-virtualization"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:331
+#, no-wrap
+msgid "problem with Xen emulation"
+msgstr "problema com a emulação do Xen"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:333
+#, no-wrap
+msgid "freebsd-xen"
+msgstr "freebsd-xen"
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:337
+#, no-wrap
+msgid "Common Assignees - Ports Collection"
+msgstr "Atribuidores Comuns - Coleção de Ports"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:346
+#, no-wrap
+msgid "problem with the ports framework (__not__ with an individual port!)"
+msgstr "problema com o framework de ports (__não__ com um port individual!)"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:348
+#, no-wrap
+msgid "portmgr"
+msgstr "portmgr"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:350
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:360
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:365
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:385
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:390
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:430
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:435
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:460
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:464
+#, no-wrap
+msgid "alias"
+msgstr "alias"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:351
+#, no-wrap
+msgid "port which is maintained by apache@FreeBSD.org"
+msgstr "port mantido por apache@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:353
+#, no-wrap
+msgid "apache"
+msgstr "apache"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:356
+#, no-wrap
+msgid "port which is maintained by autotools@FreeBSD.org"
+msgstr "port mantido por autotools@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:358
+#, no-wrap
+msgid "autotools"
+msgstr "autotools"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:361
+#, no-wrap
+msgid "port which is maintained by doceng@FreeBSD.org"
+msgstr "port mantido por doceng@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:363
+#, no-wrap
+msgid "doceng"
+msgstr "doceng"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:366
+#, no-wrap
+msgid "port which is maintained by eclipse@FreeBSD.org"
+msgstr "port mantido por eclipse@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:368
+#, no-wrap
+msgid "freebsd-eclipse"
+msgstr "freebsd-eclipse"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:371
+#, no-wrap
+msgid "port which is maintained by gecko@FreeBSD.org"
+msgstr "port mantido por gecko@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:373
+#, no-wrap
+msgid "gecko"
+msgstr "gecko"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:376
+#, no-wrap
+msgid "port which is maintained by gnome@FreeBSD.org"
+msgstr "port mantido por gnome@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:378
+#, no-wrap
+msgid "gnome"
+msgstr "gnome"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:381
+#, no-wrap
+msgid "port which is maintained by hamradio@FreeBSD.org"
+msgstr "port mantido por hamradio@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:383
+#, no-wrap
+msgid "hamradio"
+msgstr "hamradio"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:386
+#, no-wrap
+msgid "port which is maintained by haskell@FreeBSD.org"
+msgstr "port mantido por haskell@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:388
+#, no-wrap
+msgid "haskell"
+msgstr "haskell"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:391
+#, no-wrap
+msgid "port which is maintained by java@FreeBSD.org"
+msgstr "port mantido por java@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:396
+#, no-wrap
+msgid "port which is maintained by kde@FreeBSD.org"
+msgstr "port mantido por kde@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:398
+#, no-wrap
+msgid "kde"
+msgstr "kde"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:401
+#, no-wrap
+msgid "port which is maintained by mono@FreeBSD.org"
+msgstr "port mantido por mono@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:403
+#, no-wrap
+msgid "mono"
+msgstr "mono"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:406
+#, no-wrap
+msgid "port which is maintained by office@FreeBSD.org"
+msgstr "port mantido por office@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:408
+#, no-wrap
+msgid "freebsd-office"
+msgstr "freebsd-office"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:411
+#, no-wrap
+msgid "port which is maintained by perl@FreeBSD.org"
+msgstr "por mantido por perl@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:413
+#, no-wrap
+msgid "perl"
+msgstr "perl"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:416
+#, no-wrap
+msgid "port which is maintained by python@FreeBSD.org"
+msgstr "port mantido por python@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:418
+#, no-wrap
+msgid "freebsd-python"
+msgstr "freebsd-python"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:421
+#, no-wrap
+msgid "port which is maintained by ruby@FreeBSD.org"
+msgstr "port mantido por ruby@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:423
+#, no-wrap
+msgid "freebsd-ruby"
+msgstr "freebsd-ruby"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:426
+#, no-wrap
+msgid "port which is maintained by secteam@FreeBSD.org"
+msgstr "port mantido por secteam@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:428
+#, no-wrap
+msgid "secteam"
+msgstr "secteam"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:431
+#, no-wrap
+msgid "port which is maintained by vbox@FreeBSD.org"
+msgstr "port mantido por vbox@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:433
+#, no-wrap
+msgid "vbox"
+msgstr "vbox"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:436
+#, no-wrap
+msgid "port which is maintained by x11@FreeBSD.org"
+msgstr "por mantido por x11@FreeBSD.org"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:438
+#, no-wrap
+msgid "freebsd-x11"
+msgstr "freebsd-x11"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:442
+msgid ""
+"Ports PRs which have a maintainer who is a ports committer may be reassigned "
+"by anyone (but note that not every FreeBSD committer is necessarily a ports "
+"committer, so you cannot simply go by the email address alone.)"
+msgstr ""
+"Os relatórios de problemas dos ports que têm um mantenedor que é um "
+"colaborador do ports podem ser reatribuídos por qualquer pessoa (mas observe "
+"que nem todo committer do FreeBSD é necessariamente um committer do ports, "
+"então você não pode simplesmente ir apenas pelo endereço de e-mail.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:445
+msgid ""
+"For other PRs, please do not reassign them to individuals (other than "
+"yourself) unless you are certain that the assignee really wants to track the "
+"PR. This will help to avoid the case where no one looks at fixing a "
+"particular problem because everyone assumes that the assignee is already "
+"working on it."
+msgstr ""
+"Para outros PRs, por favor, não reatribua-os para indivíduos (além de si "
+"mesmo) a menos que você esteja certo de que o assignee realmente queira "
+"acompanhar o PR. Isso ajudará a evitar situações nas quais em que ninguém "
+"olha para corrigir um problema específico porque todo mundo assume que o "
+"assignee já está trabalhando no mesmo."
+
+#. type: Block title
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:447
+#, no-wrap
+msgid "Common Assignees - Other"
+msgstr "Atribuidores Comuns - Outros"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:456
+#, no-wrap
+msgid "problem with PR database"
+msgstr "problema com o banco de dados de PRs"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:458
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:463
+#, no-wrap
+msgid "bugmeister"
+msgstr "bugmeister"
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:461
+#, no-wrap
+msgid "problem with Bugzilla https://bugs.freebsd.org/submit/[web form]."
+msgstr ""
+"problema com o https://bugs.freebsd.org/submit/[formulario web] do Bugzilla."
+
+#. type: Table
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:462
+#, no-wrap
+msgid "doc"
+msgstr "doc"
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:467
+#, no-wrap
+msgid "Assigned PRs"
+msgstr "PRs Atribuídos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:470
+msgid ""
+"If a PR has the `responsible` field set to the username of a FreeBSD "
+"developer, it means that the PR has been handed over to that particular "
+"person for further work."
+msgstr ""
+"Se um PR tem o campo `responsável` configurado com o nome de usuário de um "
+"desenvolvedor do FreeBSD, isso significa que o PR foi entregue para aquela "
+"pessoa específica para trabalhos posteriores."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:475
+msgid ""
+"Assigned PRs should not be touched by anyone but the assignee or "
+"bugmeister. If you have comments, submit a followup. If for some reason "
+"you think the PR should change state or be reassigned, send a message to the "
+"assignee. If the assignee does not respond within two weeks, unassign the "
+"PR and do as you please."
+msgstr ""
+"Os PRs atribuídos não devem ser alterados por ninguém além do assignee ou do "
+"bugmeister. Se você tiver comentários, envie um acompanhamento. Se, por "
+"algum motivo, você achar que o PR deve mudar de estado ou ser reatribuído, "
+"envie uma mensagem para o assignee. Se o assignee não responder dentro de "
+"duas semanas, desfaça a atribuição do PR e faça o que desejar."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:477
+#, no-wrap
+msgid "Duplicate PRs"
+msgstr "PRs Duplicados"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:481
+msgid ""
+"If you find more than one PR that describe the same issue, choose the one "
+"that contains the largest amount of useful information and close the others, "
+"stating clearly the number of the superseding PR. If several PRs contain "
+"non-overlapping useful information, submit all the missing information to "
+"one in a followup, including references to the others; then close the other "
+"PRs (which are now completely superseded)."
+msgstr ""
+"Se você encontrar mais de um PR que descreva o mesmo problema, escolha "
+"aquele que contém a maior quantidade de informações úteis e feche os outros, "
+"declarando claramente o número do PR substituto. Se vários PRs contêm "
+"informações úteis que não se sobrepõem, envie todas as informações ausentes "
+"em um acompanhamento para um PR, incluindo referências aos outros; em "
+"seguida, feche os outros PRs (que agora foram completamente substituídos)."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:483
+#, no-wrap
+msgid "Stale PRs"
+msgstr "PRs Obsoletos"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:486
+msgid ""
+"A PR is considered stale if it has not been modified in more than six "
+"months. Apply the following procedure to deal with stale PRs:"
+msgstr ""
+"Um PR é considerado obsoleto se não foi modificado há mais de seis meses. "
+"Aplique o seguinte procedimento para lidar com PRs obsoletos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:488
+msgid ""
+"If the PR contains sufficient detail, try to reproduce the problem in `-"
+"CURRENT` and `-STABLE`. If you succeed, submit a followup detailing your "
+"findings and try to find someone to assign it to. Set the state to \"analyzed"
+"\" if appropriate."
+msgstr ""
+"Se o PR contém detalhes suficientes, tente reproduzir o problema em "
+"`-CURRENT` e `-STABLE`. Se você conseguir reproduzir o problema, envie um "
+"acompanhamento detalhando suas descobertas e tente encontrar alguém para "
+"atribuí-lo. Defina o estado como \"analisado\" se for apropriado."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:489
+msgid ""
+"If the PR describes an issue which you know is the result of a usage error "
+"(incorrect configuration or otherwise), submit a followup explaining what "
+"the originator did wrong, then close the PR with the reason \"User error\" "
+"or \"Configuration error\"."
+msgstr ""
+"Se o PR descreve um problema que você sabe que é o resultado de um erro de "
+"uso (configuração incorreta ou de outra forma), envie um acompanhamento "
+"explicando o que o originador fez de errado e, em seguida, feche o PR com a "
+"razão \"Erro do usuário\" ou \"Erro de configuração\"."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:490
+msgid ""
+"If the PR describes an error which you know has been corrected in both `-"
+"CURRENT` and `-STABLE`, close it with a message stating when it was fixed in "
+"each branch."
+msgstr ""
+"Se o PR descreve um erro que você sabe que foi corrigido tanto em `-CURRENT` "
+"quanto em `-STABLE`, feche-o com uma mensagem indicando quando foi corrigido "
+"em cada branch."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:491
+msgid ""
+"If the PR describes an error which you know has been corrected in `-"
+"CURRENT`, but not in `-STABLE`, try to find out when the person who "
+"corrected it is planning to MFC it, or try to find someone else (maybe "
+"yourself?) to do it. Set the state to \"patched\" and assign it to whomever "
+"will do the MFC."
+msgstr ""
+"Se o PR descreve um erro que você sabe que foi corrigido em `-CURRENT`, mas "
+"não em `-STABLE`, tente descobrir quando a pessoa que corrigiu planeja fazer "
+"o MFC (merge from current) para o `-STABLE`, ou tente encontrar outra pessoa "
+"(talvez você mesmo?) para fazer isso. Defina o estado como \"corrigido\" e "
+"atribua-o à pessoa que fará o MFC."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:492
+msgid ""
+"In other cases, ask the originator to confirm if the problem still exists in "
+"newer versions. If the originator does not reply within a month, close the "
+"PR with the notation \"Feedback timeout\"."
+msgstr ""
+"Em outros casos, peça ao originador para confirmar se o problema ainda "
+"existe em versões mais recentes. Se o originador não responder dentro de um "
+"mês, feche o PR com a anotação \"Tempo limite de feedback\"."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:494
+#, no-wrap
+msgid "Non-Bug PRs"
+msgstr "PRs não relacionados a bugs"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:497
+msgid ""
+"Developers that come across PRs that look like they should have been posted "
+"to {freebsd-bugs} or some other list should close the PR, informing the "
+"submitter in a comment why this is not really a PR and where the message "
+"should be posted."
+msgstr ""
+"Desenvolvedores que encontram PRs que parecem ter sido postados em {freebsd-"
+"bugs} ou em outra lista devem fechar o PR, informando ao remetente em um "
+"comentário por que isso não é realmente um PR e onde a mensagem deve ser "
+"postada."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:500
+msgid ""
+"The email addresses that Bugzilla listens to for incoming PRs have been "
+"published as part of the FreeBSD documentation, have been announced and "
+"listed on the web-site. This means that spammers found them."
+msgstr ""
+"Os endereços de e-mail que o Bugzilla utiliza para receber PRs foram "
+"publicados como parte da documentação do FreeBSD, foram anunciados e "
+"listados no site. Isso significa que spammers os encontraram."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:502
+msgid "Whenever you close one of these PRs, please do the following:"
+msgstr "Sempre que você fechar um desses PRs, por favor, faça o seguinte:"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:504
+msgid "Set the component to `junk` (under `Supporting Services`."
+msgstr "Defina o componente como `junk` (em `Supporting Services`)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:505
+msgid "Set Responsible to `nobody@FreeBSD.org`."
+msgstr "Defina o responsável como `nobody@FreeBSD.org`."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:506
+msgid "Set State to `Issue Resolved`."
+msgstr ""
+"Defina o estado como `Problema Resolvido` (ou \"Issue Resolved\" em inglês)."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:508
+msgid ""
+"Setting the category to `junk` makes it obvious that there is no useful "
+"content within the PR, and helps to reduce the clutter within the main "
+"categories."
+msgstr ""
+"Definir a categoria como `junk` torna óbvio que não há conteúdo útil dentro "
+"do PR e ajuda a reduzir a desordem nas categorias principais."
+
+#. type: Title ==
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:510
+#, no-wrap
+msgid "Further Reading"
+msgstr "Leitura Adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:514
+msgid ""
+"This is a list of resources relevant to the proper writing and processing of "
+"problem reports. It is by no means complete."
+msgstr ""
+"Esta é uma lista de recursos relevantes para a escrita adequada e o "
+"processamento dos relatórios de problemas. De forma alguma é uma lista "
+"completa."
+
+#. type: Plain text
+#: documentation/content/en/articles/pr-guidelines/_index.adoc:515
+msgid ""
+"extref:{problem-reports}[How to Write FreeBSD Problem Reports]-guidelines "
+"for PR originators."
+msgstr ""
+"extref:{problem-reports}[Como Escrever Relatórios de Problemas do FreeBSD] - "
+"diretrizes para os autores de PRs."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/problem-reports/_index.adoc b/documentation/content/pt-br/articles/problem-reports/_index.adoc
index ff9aa2bd04..4bc7bf5e5b 100644
--- a/documentation/content/pt-br/articles/problem-reports/_index.adoc
+++ b/documentation/content/pt-br/articles/problem-reports/_index.adoc
@@ -1,10 +1,13 @@
---
-title: Escrevendo Relatórios de Problemas para o FreeBSD
authors:
- - author: Dag-Erling Smørgrav
- - author: Mark Linimon
-releaseinfo: "$FreeBSD$"
-trademarks: ["freebsd", "ibm", "intel", "sun", "general"]
+ -
+ author: 'Dag-Erling Smørgrav'
+ -
+ author: 'Mark Linimon'
+description: 'Como melhor formular e enviar um relatório de problema para o Projeto FreeBSD'
+tags: ["formulate", "submit", "FreeBSD", "PR"]
+title: 'Escrevendo Relatórios de Problemas para o FreeBSD'
+trademarks: ["freebsd", "ibm", "intel", "sun", "general"]
---
= Escrevendo Relatórios de Problemas para o FreeBSD
@@ -16,13 +19,27 @@ trademarks: ["freebsd", "ibm", "intel", "sun", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/problem-reports/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -49,25 +66,25 @@ Observe que este artigo é organizado por temas, não de uma forma cronológica.
Existem muitos tipos de problemas, e nem todos devem gerar um relatório de problemas. Naturalmente, ninguém é perfeito, e haverá momentos em que o que parece ser um bug em um programa é, na verdade, um equívoco na sintaxe de um comando ou um erro tipográfico em um arquivo de configuração (embora isto por si só possa ser um indicativo de uma documentação deficiente ou de deficiências no manuseio de erros pelo aplicativo). Existem ainda muitos casos em que submeter um relatório de problema claramente _não_ é o curso de ação correto, e só servirá para frustrar tanto o usuário e quanto o desenvolvedor. Por outro lado, existem casos em que pode ser apropriado enviar um relatório de problema sobre algo diferente de um bug - tal como um aprimoramento ou um novo recurso, por exemplo.
-Então, como se determina o que é um bug e o que não é? Como uma regra simples, o problema _não_ é um bug se ele puder ser expresso como uma pergunta (geralmente na forma "Como faço X?" ou "Onde posso encontrar Y?"). Nem sempre é tão preto e branco, mas a regra da pergunta cobre a grande maioria dos casos. Ao procurar por uma resposta, considere colocar a questão na http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[lista de discussão de perguntas gerais sobre o FreeBSD].
+Então, como se determina o que é um bug e o que não é? Como uma regra simples, o problema _não_ é um bug se ele puder ser expresso como uma pergunta (geralmente na forma "Como faço X?" ou "Onde posso encontrar Y?"). Nem sempre é tão preto e branco, mas a regra da pergunta cobre a grande maioria dos casos. Ao procurar por uma resposta, considere colocar a questão na {freebsd-questions}.
Considere estes fatores ao enviar PRs sobre ports ou outros softwares que não fazem parte do próprio FreeBSD:
* Por favor, não envie relatórios de problemas que simplesmente afirmam que uma versão mais nova de um aplicativo está disponível. Os mantenedores de ports são notificados automaticamente pelo portscout quando uma nova versão de um aplicativo fica disponível. Patches para atualizar um port para uma versão mais recente do software são sempre bem-vindos.
* Para ports não mantidos (O seu `MAINTAINER` é `ports@FreeBSD.org`), é improvável que um PR que não tenha um patch incluído seja escolhido para ser trabalhado por um committer. Para se tornar o mantenedor de um port não mantido, envie um PR com o pedido (será ótimo se o pedido vier com um patch, mas isso não é obrigatório).
-* Em ambos os casos, seguir o processo descrito no https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/porters-handbook/port-upgrading.html[Porter's Handbook] produzirá os melhores resultados. (Você também pode desejar ler a seção https://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/contributing/ports-contributing.html[Contribuindo para a Coleção de Ports do FreeBSD].)
+* Em ambos os casos, seguir o processo descrito no extref:{porters-handbook}upgrading/[Porter's Handbook] produzirá os melhores resultados. (Você também pode desejar ler a seção extref:{contributing}[Contribuindo para a Coleção de Ports do FreeBSD, ports-contributing].)
-Um bug que não pode ser reproduzido raramente pode ser corrigido. Se o bug ocorreu apenas uma vez e você não pode reproduzi-lo, e não parece acontecer com mais ninguém, é muito provável que nenhum dos desenvolvedores consiga reproduzi-lo ou descobrir o que está errado. Isso não significa que isso não tenha acontecido, mas significa que as chances do seu relatório de problema levar à correção do bug são muito pequenas. Para piorar, muitas vezes esses tipos de bugs são causados ​​por discos rígidos com defeito ou por processadores superaquecidos - sempre que possível você deve tentar descartar essas causas antes de enviar um PR.
+Um bug que não pode ser reproduzido raramente pode ser corrigido. Se o bug ocorreu apenas uma vez e você não pode reproduzi-lo, e não parece acontecer com mais ninguém, é muito provável que nenhum dos desenvolvedores consiga reproduzi-lo ou descobrir o que está errado. Isso não significa que isso não tenha acontecido, mas significa que as chances do seu relatório de problema levar à correção do bug são muito pequenas. Para piorar, muitas vezes esses tipos de bugs são causados por discos rígidos com defeito ou por processadores superaquecidos - sempre que possível você deve tentar descartar essas causas antes de enviar um PR.
Em seguida, para decidir para quem você deve enviar seu relatório de problema, você precisa entender que o software que compõe o FreeBSD é composto por vários elementos diferentes:
* Código no sistema base que é escrito e mantido por contribuidores do FreeBSD, como o kernel, a biblioteca C e os drivers de dispositivo (categorizados como `kern`); os utilitários binários (`bin`); as páginas de manual e documentação (`docs`); e as páginas web (`www`). Todos os erros nestas áreas devem ser reportados aos desenvolvedores do FreeBSD.
-* Código no sistema base que é escrito e mantido por outras pessoas, o qual é importado e adaptado para o FreeBSD. Exemplos incluem o man:clang[1] e o man:sendmail[8]. A maioria dos bugs nessas áreas deve ser reportada aos desenvolvedores do FreeBSD; mas em alguns casos eles podem precisar ser relatados aos autores originais se os problemas não forem específicos do FreeBSD.
+* Código no sistema base que é escrito e mantido por outras pessoas, o qual é importado e adaptado para o FreeBSD. Exemplos incluem o man:clang[1] e o man:sendmail[8]. A maioria dos bugs nessas áreas deve ser reportada aos desenvolvedores do FreeBSD; mas em alguns casos eles podem precisar ser relatados aos autores originais se os problemas não forem específicos do FreeBSD.
* Aplicativos individuais que não estão no sistema base, mas que são parte da coleção de ports do FreeBSD (categoria `ports`). A maioria desses aplicativos não são escritos por desenvolvedores do FreeBSD; o que o FreeBSD fornece é meramente um framework para instalar o aplicativo. Portanto, apenas relate um problema para os desenvolvedores do FreeBSD quando o problema for considerado específico do FreeBSD; caso contrário, informe aos autores do software.
Em seguida, verifique se o problema é oportuno. Há poucas coisas que incomodarão mais um desenvolvedor do que receber um relatório de problemas sobre um bug que ele já corrigiu.
-Se o problema estiver no sistema base, primeiro leia a seção https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/faq/introduction.html#LATEST-VERSION[ Versões do FreeBSD] do FAQ, se você ainda não estiver familiarizado com o tópico. Não é possível para o FreeBSD consertar problemas em nada além de certas branchs recentes do sistema base, de forma que enviar um relatório de bug sobre uma versão mais antiga provavelmente resultará em um desenvolvedor aconselhando você a atualizar para uma versão suportada para ver se o problema ainda continua ocorrendo. A equipe do Security Officer mantém a https://www.FreeBSD.org/security/[lista das versões suportadas ].
+Se o problema estiver no sistema base, primeiro leia a seção extref:{faq}[Versões do FreeBSD, latest-version] do FAQ, se você ainda não estiver familiarizado com o tópico. Não é possível para o FreeBSD consertar problemas em nada além de certas branches recentes do sistema base, de forma que enviar um relatório de bug sobre uma versão mais antiga provavelmente resultará em um desenvolvedor aconselhando você a atualizar para uma versão suportada para ver se o problema ainda continua ocorrendo. A equipe Security Officer mantém a link:https://www.FreeBSD.org/security/[lista das versões suportadas].
Se o problema estiver em um port, considere submeter o bug para o upstream. O Projeto FreeBSD não pode corrigir todos os erros em todos os softwares.
@@ -76,15 +93,15 @@ Se o problema estiver em um port, considere submeter o bug para o upstream. O Pr
Uma boa regra a seguir é sempre fazer uma pesquisa sobre o tema antes de enviar um relatório de problemas. Talvez o problema já tenha sido relatado anteriormente; talvez esteja sendo discutido nas listas de discussão, ou foi discutido recentemente; pode até mesmo já estar corrigido em uma versão mais recente da que você está executando. Portanto, você deve verificar todos os lugares óbvios antes de enviar seu relatório de problemas. Para o FreeBSD, isso significa:
-* A lista das https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/faq/index.html[Perguntas Mais Freqüentes] (FAQ) sobre o FreeBSD. A FAQ tenta fornecer respostas para uma ampla variedade de perguntas, como aquelas relacionadas à https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/faq/hardware.html[compatibilidade de hardware ], https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/faq/applications.html[ aplicativos de usuário] e https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/faq/kernelconfig.html[ configuração do kernel].
-* As https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/eresources.html#eresources-mail[listas de discussão] - se você não está inscrito, faça uma pesquisa nos arquivos https://www.FreeBSD.org/search/search.html#mailinglists[históricos​​ das listas] no site do FreeBSD. Se o problema não tiver sido discutido nas listas, você pode tentar postar uma mensagem sobre ele e aguardar alguns dias para ver se alguém consegue detectar algo que foi esquecido.
+* A lista das extref:{faq}[Perguntas Mais Frequentes] (FAQ) sobre o FreeBSD. A FAQ tenta fornecer respostas para uma ampla variedade de perguntas, como aquelas relacionadas à extref:{faq}[compatibilidade de hardware, hardware], extref:{faq}[aplicativos de usuário, applications], e extref:{faq}[configuração do kernel, kernelconfig].
+* As extref:{handbook}[listas de discussões, eresources-mail] - se você não está inscrito, faça uma pesquisa nos arquivos https://www.FreeBSD.org/search/#mailinglists[históricos das listas] no site do FreeBSD. Se o problema não tiver sido discutido nas listas, você pode tentar postar uma mensagem sobre ele e aguardar alguns dias para ver se alguém consegue detectar algo que foi esquecido.
* Opcionalmente, na web toda - use seu mecanismo de pesquisa favorito para localizar qualquer referência ao problema. Você pode até receber hits de listas de discussão arquivadas ou grupos de notícias que você não conhecia ou que não pensou em pesquisar.
* Em seguida, faça uma pesquisa no https://bugs.freebsd.org/bugzilla/query.cgi[banco de dados de Relatórios de Problemas do FreeBSD] (Bugzilla). A menos que o problema seja recente ou obscuro, há uma boa chance de que ele já tenha sido relatado.
* Mais importante ainda, tente verificar se a documentação existente não endereça o seu problema.
-+
-Para o código fonte do FreeBSD, você deve estudar cuidadosamente o conteúdo do [.filename]#/usr/src/UPDATING# em seu sistema ou a última versão disponível em https://svnweb.freebsd.org/base/head/UPDATING?view=log[ https://svnweb.freebsd.org/base/head/UPDATING?view=log]. (Esta é uma informação vital se você estiver atualizando de uma versão para outra - especialmente se você estiver atualizando para a Branch FreeBSD-CURRENT).
-+
-No entanto, se o problema estiver em algo que foi instalado como parte da coleção de ports do FreeBSD, você deve consultar [.filename]#/usr/ports/UPDATING# (para ports individuais) ou [.filename]#/usr/ports/CHANGES# (para alterações que afetam toda a coleção de ports). O https://svnweb.freebsd.org/ports/head/UPDATING?view=log[https://svnweb.freebsd.org/ports/head/UPDATING?view=log] e o https://svnweb.freebsd.org/ports/head/CHANGES?view=log[https://svnweb.freebsd.org/ports/head/CHANGES?view=log] também estão disponíveis via svnweb.
++
+Para o código fonte do FreeBSD, você deve estudar cuidadosamente o conteúdo do [.filename]#/usr/src/UPDATING# em seu sistema ou a última versão disponível em https://cgit.freebsd.org/src/tree/UPDATING[https://cgit.freebsd.org/src/tree/UPDATING]. (Esta é uma informação vital se você estiver atualizando de uma versão para outra - especialmente se você estiver atualizando para a branch FreeBSD-CURRENT).
++
+No entanto, se o problema estiver em algo que foi instalado como parte da coleção de ports do FreeBSD, você deve consultar [.filename]#/usr/ports/UPDATING# (para ports individuais) ou [.filename]#/usr/ports/CHANGES# (para alterações que afetam toda a Coleção de Ports).O https://cgit.freebsd.org/ports/tree/UPDATING[https://cgit.freebsd.org/ports/tree/UPDATING] e o https://cgit.freebsd.org/ports/tree/CHANGES[https://cgit.freebsd.org/ports/tree/CHANGES] também estão disponíveis via cgit.
[[pr-writing]]
== Escrevendo o Relatório do Problema
@@ -97,10 +114,10 @@ Agora que você decidiu que seu problema merece um relatório de problema e que
* _Não deixe a linha "Summary" vazia._ Os PRs são enviados para listas de discussão no mundo todo (onde o "Summary" é usado para a linha de `Subject:`), além de serem armazenadas em um banco de dados. Qualquer pessoa que vier a navegar no banco de dados pelas sinopses, e encontrar um PR com a linha de assunto em branco, tende a pulá-lo. Lembre-se que os PRs permanecem na base de dados até que sejam fechados por alguém; os anônimos normalmente irão desaparecer em meio ao ruído.
* _Evite usar um "Summary" (Sumário) fraco._ Você não deve presumir que alguém que esteja lendo seu PR conheça o contexto que motivou o seu envio, desta forma, quanto mais informação você fornecer, melhor. Por exemplo, em qual parte do sistema o problema se aplica? O problema ocorre durante a instalação ou durante a execução do sistema? Para ilustrar, em vez de usar `Summary: o portupgrade está quebrado`, veja o quanto mais informativo isso parece: ` Summary: port ports-mgmt/portupgrade gerando coredumps no -current`. (No caso de um port, é especialmente útil ter tanto o nome da categoria quanto o nome do port na linha "Summary".)
* _Se você tem um patch, mencione-o._ Um PR com um patch incluído é muito mais provável de ser analisado do que um sem. Por favor, inclua a palavra-chave `patch` no Bugzilla.
-* _Se você é um mantenedor, informe._ Se você está mantendo uma parte do código fonte (por exemplo, um port existente), você deve definir o campo "Class" do seu PR para `maintainer-update`. Desta forma, qualquer committer que lide com seu PR não terá que verificar.
+* _Se você é um mantenedor, informe._ Se você está mantendo uma parte do código fonte (por exemplo, um port existente), você deve definir o campo "Class" do seu PR para `maintainer-update`. Desta forma, qualquer committer que veja o seu PR não terá que verificar.
* _Seja específico._ Quanto mais informações você fornecer sobre o problema que está tendo, maiores serão suas chances de obter uma resposta.
-** Inclua a versão do FreeBSD que você está utilizando (há um lugar para colocar essa informação, veja abaixo) e em qual arquitetura. Você deve incluir se você está executando a partir de uma release (por exemplo, de um CD-ROM ou feito um download), ou de um sistema mantido pelo Subversion (e, caso seja afirmativo, em qual número de revisão você está). Se você estiver utilizando a branch FreeBSD-CURRENT, essa é a primeira coisa que alguém vai perguntar, porque as correções (especialmente para problemas de alto nível) tendem a ser realizadas muito rapidamente, e é esperado que usuários do FreeBSD-CURRENT se mantenham atualizados.
+** Inclua a versão do FreeBSD que você está utilizando (há um lugar para colocar essa informação, veja abaixo) e em qual arquitetura. Você deve incluir se você está executando a partir de uma release (por exemplo, de um CD-ROM ou feito um download), ou de um sistema mantido pelo Git (e, caso seja afirmativo, em que hash e branch você está). Se você estiver utilizando a branch FreeBSD-CURRENT, essa é a primeira coisa que alguém vai perguntar, porque as correções (especialmente para problemas de alto nível) tendem a ser realizadas muito rapidamente, e é esperado que usuários do FreeBSD-CURRENT se mantenham atualizados.
** Inclua quais opções globais você especificou em seu [.filename]#make.conf#, [.filename]#src.conf# e [.filename]#src-env.conf#. Dado o número infinito de opções, nem todas as combinações podem ser totalmente suportadas.
** Se o problema puder ser reproduzido facilmente, inclua informações que irão ajudar um desenvolvedor a reproduzi-lo. Se um problema puder ser demonstrado com uma entrada específica, então inclua um exemplo desta entrada se possível, e inclua tanto a saída real quanto a esperada. Se esses dados forem grandes ou não puderem ser tornados públicos, então tente criar um arquivo pequeno que exiba o mesmo problema e que possa ser incluído no PR.
** Se este for um problema do kernel, esteja preparado para fornecer as seguintes informações. (Você não precisa incluí-las por padrão, o que apenas tende a preencher o banco de dados, mas você deve incluir os trechos que considera ser relevantes):
@@ -115,30 +132,32 @@ Agora que você decidiu que seu problema merece um relatório de problema e que
** Se este for um problema de algum port, esteja preparado para fornecer as seguintes informações. (Você não precisa incluí-las por padrão, o que apenas tende a preencher o banco de dados, mas você deve incluir trechos que você considera relevantes):
*** quais ports você instalou
-*** quaisquer variáveis ​​de ambiente que sobreescrevem as variáveis padrões em [.filename]#bsd.port.mk#, assim como `PORTSDIR`
+*** quaisquer variáveis de ambiente que sobreescrevem as variáveis padrões em [.filename]#bsd.port.mk#, assim como `PORTSDIR`
*** o fato de você ter lido [.filename]#ports/UPDATING# e o seu problema não estar listado lá (é garantido que alguém irá perguntar)
* _Evite requisições vagas de novas funcionalidades._ Os PRs no formato "alguém realmente deve implementar algo que faz isso e aquilo" têm menor probabilidade de obter resultados do que requisições muito específicas. Lembre-se, o código fonte está disponível para todos, então se você quiser uma nova funcionalidade, a melhor maneira de garantir que ela seja incluída é começar a trabalhar! Considere também o fato de que muitas coisas como essa seriam um tópico melhor para a discussão sobre `freebsd-questions` do que uma entrada no banco de dados de PR, como discutido acima.
* _Certifique-se de que ninguém mais tenha submetido um PR similar._ Embora isso já tenha sido mencionado acima, vale a pena repetir aqui. Leva apenas um ou dois minutos para usar o mecanismo de busca baseado na Web em https://bugs.freebsd.org/bugzilla/query.cgi[https://bugs.freebsd.org/bugzilla/query.cgi]. (Claro, todo mundo é culpado de esquecer de fazer isso de vez em quando.)
-* _ Relate um problema apenas através do Relatório de Problemas._ Evite incluir dois ou mais problemas dentro do mesmo relatório, a menos que estejam relacionados. Ao enviar patches, evite adicionar várias funcionalidades ou corrigir multiplos bugs no mesmo PR, a menos que eles estejam intimamente relacionados - esses PRs geralmente levam mais tempo para serem resolvidos.
-* _Evite requisições controversas._ Se o seu PR aborda uma área que já foi controversa no passado, você provavelmente deverá estar preparado para não apenas oferecer patches, mas também justificar por que os patches são "A Coisa Certa A Se Fazer ". Como observado acima, uma busca cuidadosa nas listas de discussão usando os arquivos em https://www.FreeBSD.org/search/search.html#mailinglists[ https://www.FreeBSD.org /search/search.html#mailinglists ] é sempre uma boa preparação.
+* _ Relate um problema apenas através do Relatório de Problemas._ Evite incluir dois ou mais problemas dentro do mesmo relatório, a menos que estejam relacionados. Ao enviar patches, evite adicionar várias funcionalidades ou corrigir múltiplos bugs no mesmo PR, a menos que eles estejam intimamente relacionados - esses PRs geralmente levam mais tempo para serem resolvidos.
+* _Evite requisições controversas._ Se o seu PR aborda uma área que já foi controversa no passado, você provavelmente deverá estar preparado para não apenas oferecer patches, mas também justificar por que os patches são "A Coisa Certa A Se Fazer ". Como observado acima, uma busca cuidadosa nas listas de discussão usando os arquivos em https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD.org/search/#mailinglists] é sempre uma boa preparação.
* _Seja educado._ Quase todo mundo que potencialmente irá trabalhar em seu PR é um voluntário. Ninguém gosta que digam o que eles tem que fazer quando já estão fazendo por alguma motivação que não seja o ganho monetário. É sempre bom ter isso em mente em projetos de código aberto.
[[pr-writing-before-beginning]]
== Antes de Começar
-Considerações semelhantes se aplicam ao uso do https://bugs.freebsd.org/bugzilla/enter_bug.cgi[formulário de envio de PR web-based (com base em web)]. Cuidado com as operações de recortar e colar que podem alterar o espaços em branco ou outras formatações de texto.
+Considerações semelhantes se aplicam ao uso do https://bugs.freebsd.org/bugzilla/enter_bug.cgi[formulário web de envio de PR]. Cuidado com as operações de recortar e colar que podem alterar o espaços em branco ou outras formatações de texto.
Finalmente, se o envio for demorado, prepare o trabalho off-line para que nada seja perdido se houver um problema ao enviá-lo.
[[pr-writing-attaching-patches]]
== Anexando Patches ou Arquivos
-Ao anexar um patch, certifique-se de usar `svn diff` ou man:diff[1] com o argumento `-u` para criar ou unificar o diff e certificar-se de especificar os números de revisão exatos do SVN dos arquivos que você modificou para que os desenvolvedores que lerem seu relatório possam aplicá-los facilmente. Para problemas com o kernel ou com os utilitários de base, um patch para o FreeBSD-CURRENT (a branch HEAD do Subversion) é o preferido, já que todo código novo deve ser aplicado e testado lá primeiro. Após testes apropriados ou substanciais terem sido feitos, o código será mesclado/migrado para a branch FreeBSD-STABLE.
+Em geral, recomendamos usar `git format-patch` para gerar um ou uma série de diffs unificados em relação ao branch base (por exemplo, `origin/main`). Os patches gerados dessa forma incluirão os hashes do Git e incluirão seu nome e endereço de e-mail, tornando mais fácil para os committers aplicarem seu patch e creditarem você como autor (usando `git am`). Para pequenas alterações em que você prefere não usar o git, certifique-se de usar man:diff[1] com a opção `-u` para criar um diff unificado, pois isso daria aos desenvolvedores mais contexto e seria mais legível do que outros formatos de diff.
+
+Para problemas com o kernel ou com os utilitários da base, um patch para o FreeBSD-CURRENT (o principal branch do Git) é o preferido, já que todo código novo deve ser aplicado e testado lá primeiro. Após testes apropriados ou substanciais terem sido feitos, o código será mesclado/migrado para a branch FreeBSD-STABLE.
Se você anexar um patch inline, em vez de um anexo, observe que o problema mais comum, de longe, é a tendência de alguns programas de email renderizar tabs como espaços, o que ira arruinar completamente qualquer coisa destinada a fazer parte de um Makefile.
-Não envie correções como anexos usando `Content-Transfer-Encoding: quoted-printable`. Isso irá escapar os caracteres e todo o patch se tornará inútil.
+Não envie patches como anexos usando `Content-Transfer-Encoding: quoted-printable`. Isso irá escapar os caracteres e todo o patch se tornará inútil.
Observe também que, embora a inclusão de pequenos patches em um PR geralmente esteja correto - particularmente quando eles corrigem o problema descrito no PR - patches grandes e especialmente códigos novos que podem exigir uma revisão substancial antes do commit, deveriam ser colocados em um servidor web ou FTP, e a URL deveria ser incluída no PR em vez do patch. Patches por e-mail tendem a ficar embaralhados, e quanto maior o patch, mais difícil será para as partes interessadas recuperá-lo. Além disso, postar um patch na web permite modificá-lo sem ter que reenviar todo o patch em um followup do PR original. Finalmente, os patches grandes simplesmente aumentam o tamanho do banco de dados, uma vez que os PRs fechados não são realmente excluídos, mas sim mantidos e simplesmente marcados como completos.
@@ -157,9 +176,9 @@ Quando você for reportar um bug, você encontrará os seguintes campos:
* _Summary (Sumário):_ Preencha com uma descrição breve e precisa do problema. A sinopse é usada como assunto do email do relatório de problemas. A sinopse é usada em listagens e resumos de relatórios de problemas; relatórios de problemas com sinopses obscuras tendem a ser ignoradas.
* _Severity (Gravidade):_ Um dos `Affects only me (Afeta somente eu)`, `Affects some people (Afeta algumas pessoas)` ou `Affects many people (Afeta muitas pessoas)`. Não exagere; abstenha-se de rotular seu problema como `Afeta muitas pessoas` a menos que ele realmente afete. Os desenvolvedores do FreeBSD não irão necessariamente trabalhar no seu problema mais rápido se você inflar sua importância, uma vez que existem muitas outras pessoas que fizeram exatamente isso.
* _Category (Categoria):_ Escolha uma categoria apropriada.
-+
++
A primeira coisa que você precisa fazer é decidir em que parte do sistema está seu problema. Lembre-se, o FreeBSD é um sistema operacional completo, que instala tanto um kernel, bibliotecas padrão, muitos drivers de periféricos e um grande número de utilitários (o "sistema básico"). No entanto, existem milhares de aplicativos adicionais na coleção de portes. Você primeiro precisa decidir se o problema está no sistema básico ou algo instalado via a Coleção de Ports.
-+
++
Aqui está uma descrição das categorias principais:
** Se um problema for com o kernel, as bibliotecas (como a biblioteca C padrão `libc`), ou o driver de algum periférico no sistema base, em geral você irá usar a categoria `kern`. (Existem algumas exceções; veja abaixo). Em geral, são coisas descritas nas seções 2, 3 ou 4 das páginas de manual.
@@ -169,14 +188,14 @@ Aqui está uma descrição das categorias principais:
+
[NOTE]
====
-Se você estiver tendo um problema com algum port chamado `www/_algum nome de port_`, mesmo assim, isso vai na categoria `ports`.
+Se você estiver tendo um problema com algum port chamado `www/_algum-nome-de-port_`, mesmo assim, isso vai na categoria `ports`.
====
-+
++
Existem algumas categorias mais especializadas.
** Se o problema, por outro lado, estar colocado em `kern`, mas tem a ver com o subsistema USB, a escolha correta é `usb`.
** Se o problema, por outro lado, estiver colocado em `kern`, mas tem a ver com as bibliotecas de threads, a escolha correta é `threads`.
-** Se o problema, por outro lado, estiver no sistema base, mas tem a ver com nossa fidelidade a padrões como POSIX(TM), a escolha correta é `standards`.
+** Se o problema, por outro lado, estiver no sistema base, mas tem a ver com nossa fidelidade a padrões como POSIX(R), a escolha correta é `standards`.
** Se estiver convencido de que o problema ocorrerá apenas sob a arquitetura do processador que você está usando, selecione uma das categorias específicas da arquitetura: geralmente `i386` para máquinas compatíveis com Intel 32 bits; `amd64` para máquinas AMD rodando em 64 bits (isto também inclui máquinas compatíveis com Intel rodando em modo EMT64); e menos comumente, as arquiteturas `arm` ou `powerpc`.
+
[NOTE]
@@ -187,19 +206,15 @@ Estas categorias são muitas vezes mal utilizadas para problemas definidos como
.Uso Correto da Categoria Específica de Arquitetura
[example]
====
-
Você tem uma máquina comum baseada em PC e acha que encontrou um problema específico para um determinado chipset ou uma placa-mãe em particular: `i386` é a categoria correta.
====
+
.Uso Incorreto da Categoria Específica de Arquitetura
[example]
====
-
Você está tendo um problema com uma placa periférica adicional em um barramento comum, ou um problema com um tipo específico de unidade de disco rígido: neste caso, provavelmente se aplica a mais de uma arquitetura, e `kern` é a categoria correta.
====
-
-** Se você realmente não sabe onde o problema se encaixa (ou a explicação não parece se encaixar nos itens acima), use a categoria `misc`. Antes de fazer isso, você pode pedir ajuda primeiro na http://lists.FreeBSD.org/mailman/listinfo/freebsd-questions[lista de discussão de perguntas gerais do FreeBSD]. Você pode ser avisado que com certeza uma das categorias existentes é uma escolha melhor.
-
+** Se você realmente não sabe onde o problema se encaixa (ou a explicação não parece se encaixar nos itens acima), use a categoria `misc`. Antes de fazer isso, você pode pedir ajuda primeiro na {freebsd-questions}. Você pode ser avisado que com certeza uma das categorias existentes é uma escolha melhor.
* _Environment:_ Isto deve descrever, com a maior precisão possível, o ambiente em que o problema foi observado. Isto inclui a versão do sistema operacional, a versão do programa ou arquivo específico que contém o problema e quaisquer outros itens relevantes, como configuração do sistema, outro software instalado que influencia no problema, etc. - simplesmente tudo o que um desenvolvedor precisa saber para reconstruir o ambiente em que ocorra o problema.
* _Description:_ Uma descrição completa e precisa do problema que você está enfrentando. Tente evitar especular sobre as causas do problema, a menos que tenha certeza de que você está no caminho certo, pois isso pode induzir o desenvolvedor a fazer suposições incorretas sobre o problema. Ela deve incluir as ações que você precisa executar para reproduzir o problema. Se você conhece alguma solução alternativa, inclua-a. Ela não apenas ajuda outras pessoas com o mesmo problema a contorná-lo, mas também pode ajudar um desenvolvedor a entender a causa do problema.
@@ -216,9 +231,9 @@ As vezes, há um atraso de uma semana ou duas em que o relatório do problema pe
Existem algumas maneiras de se fazer isso, idealmente na seguinte ordem, com alguns dias entre a tentativa em cada canal de comunicação:
-* Encontre a lista de discussão relevante do FreeBSD para o relatório de problemas https://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/eresources.html#eresources-mail[listadas no Handbook] e envie uma mensagem para essa lista perguntando sobre assistência ou comentários sobre o relatório do problema.
+* Envie uma mensagem para extref:{handbook}eresources/[a lista em questão, eresources-summary] solicitando comentários sobre o relatório.
* Junte-se aos canais relevantes do IRC. Uma lista parcial está aqui: https://wiki.freebsd.org/IrcChannels[]. Informe as pessoas nesse canal sobre o relatório de problemas e peça ajuda. Seja paciente e fique no canal depois de postar, para que as pessoas de diferentes fusos horários ao redor do mundo tenham a chance de responder.
-* Encontre committers interessados ​​no problema que foi relatado. Se o problema estiver em uma ferramenta, binário, porta, documento ou arquivo fonte específico, verifique o http://svnweb.FreeBSD.org[Repositório SVN]. Localize os últimos committers que fizeram alterações substanciais no arquivo e tente falar com eles pelo IRC ou por email. Uma lista de committers e seus e-mails podem ser encontrados no artigo https://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/contributors[Contributors do FreeBSD].
+* Encontre committers interessados no problema que foi relatado. Se o problema estiver em uma ferramenta, binário, porta, documento ou arquivo fonte específico, verifique o https://cgit.FreeBSD.org[Repositório Git]. Localize os últimos committers que fizeram alterações substanciais no arquivo e tente falar com eles pelo IRC ou por email. Uma lista de committers e seus e-mails podem ser encontrados no artigo extref:{contributors}[Contribuidores do FreeBSD].
Lembre-se de que essas pessoas são voluntárias, assim como mantenedores e usuários, portanto, podem não estar disponíveis imediatamente para ajudar no relatório de problemas. Paciência e consistência nos acompanhamentos são altamente recomendados e apreciados. Com cuidado e esforço suficientemente dedicados a esse processo de acompanhamento, encontrar um committer para cuidar do relatório do problema é apenas uma questão de tempo.
@@ -233,4 +248,4 @@ Se você encontrou um problema com o sistema de bugs, registre um bug! Existe um
Esta é uma lista de recursos relevantes para a escrita adequada e processamento de relatórios de problemas. Não está de modo algum completo.
* https://github.com/smileytechguy/reporting-bugs-effectively/blob/master/ENGLISH.md[Como reportar bugs efetivamente] -um excelente ensaio de Simon G. Tatham sobre como compor de forma útil relatórios de problemas (não específicos do FreeBSD).
-* https://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/pr-guidelines/article.html[Orientações para o tratamento dos relatórios de problemas] --informações valiosas sobre como os relatórios de problemas são tratados pelos desenvolvedores do FreeBSD.
+* extref:{pr-guidelines}[Diretrizes para manuseio de relatórios de problemas] --informações valiosas sobre como os relatórios de problemas são tratados pelos desenvolvedores do FreeBSD.
diff --git a/documentation/content/pt-br/articles/problem-reports/_index.po b/documentation/content/pt-br/articles/problem-reports/_index.po
new file mode 100644
index 0000000000..0f14f4c7b1
--- /dev/null
+++ b/documentation/content/pt-br/articles/problem-reports/_index.po
@@ -0,0 +1,1437 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: 2022-08-07 17:18+0000\n"
+"Last-Translator: Danilo G. Baio <dbaio@FreeBSD.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesproblem-reports_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.10.1\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/problem-reports/_index.adoc:1
+#, no-wrap
+msgid "How to best formulate and submit a problem report to the FreeBSD Project"
+msgstr "Como melhor formular e enviar um relatório de problema para o Projeto FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/problem-reports/_index.adoc:1
+#: documentation/content/en/articles/problem-reports/_index.adoc:11
+#, no-wrap
+msgid "Writing FreeBSD Problem Reports"
+msgstr "Escrevendo Relatórios de Problemas para o FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:44
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:46
+msgid ""
+"This article describes how to best formulate and submit a problem report to "
+"the FreeBSD Project."
+msgstr ""
+"Este artigo descreve como redigir e submeter um bom relatório de problemas "
+"ao Projeto FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:48
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:52
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:56
+msgid ""
+"One of the most frustrating experiences one can have as a software user is "
+"to submit a problem report only to have it summarily closed with a terse and "
+"unhelpful explanation like \"not a bug\" or \"bogus PR\". Similarly, one of "
+"the most frustrating experiences as a software developer is to be flooded "
+"with problem reports that are not really problem reports but requests for "
+"support, or that contain little or no information about what the problem is "
+"and how to reproduce it."
+msgstr ""
+"Uma das experiências mais frustrantes que alguém pode ter como usuário de um "
+"software é submeter um relatório de problema apenas para vê-lo ser encerrado "
+"sumariamente com uma explicação curta e inútil tal como \"não é um bug\" ou "
+"\"PR Falso\". Da mesma forma, uma das experiências mais frustrantes como "
+"desenvolvedor de software é ser inundado com relatórios de problemas que não "
+"são realmente relatórios de problemas mas sim pedidos de suporte, ou então "
+"por relatórios que contêm pouca ou nenhuma informação sobre o que é o "
+"problema e sobre como reproduzi-lo."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:59
+msgid ""
+"This document attempts to describe how to write good problem reports. What, "
+"one asks, is a good problem report? Well, to go straight to the bottom line, "
+"a good problem report is one that can be analyzed and dealt with swiftly, to "
+"the mutual satisfaction of both user and developer."
+msgstr ""
+"Este documento tenta descrever como escrever bons relatórios de problemas. O "
+"que, alguém pergunta, é um bom relatório de problemas? Bem, para ir "
+"diretamente para ao ponto, um bom relatório de problema é aquele que pode "
+"ser analisado e tratado rapidamente, para a satisfação mútua do usuário e do "
+"desenvolvedor."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:61
+msgid ""
+"Although the primary focus of this article is on FreeBSD problem reports, "
+"most of it should apply quite well to other software projects."
+msgstr ""
+"Embora o foco principal deste artigo esteja nos relatórios de problemas do "
+"FreeBSD, a maioria das recomendações deve se aplicar muito bem a outros "
+"projetos de software."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:64
+msgid ""
+"Note that this article is organized thematically, not chronologically. Read "
+"the entire document before submitting a problem report, rather than treating "
+"it as a step-by-step tutorial."
+msgstr ""
+"Observe que este artigo é organizado por temas, não de uma forma "
+"cronológica. Leia todo o documento antes de enviar um relatório de "
+"problemas, em vez de tratá-lo como um tutorial passo a passo."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:66
+#, no-wrap
+msgid "When to Submit a Problem Report"
+msgstr "Quando Enviar um Relatório de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:72
+msgid ""
+"There are many types of problems, and not all of them should engender a "
+"problem report. Of course, nobody is perfect, and there will be times when "
+"what seems to be a bug in a program is, in fact, a misunderstanding of the "
+"syntax for a command or a typographical error in a configuration file "
+"(though that in itself may sometimes be indicative of poor documentation or "
+"poor error handling in the application). There are still many cases where "
+"submitting a problem report is clearly _not_ the right course of action, and "
+"will only serve to frustrate both the submitter and the developers. "
+"Conversely, there are cases where it might be appropriate to submit a "
+"problem report about something else than a bug-an enhancement or a new "
+"feature, for instance."
+msgstr ""
+"Existem muitos tipos de problemas, e nem todos devem gerar um relatório de "
+"problemas. Naturalmente, ninguém é perfeito, e haverá momentos em que o que "
+"parece ser um bug em um programa é, na verdade, um equívoco na sintaxe de um "
+"comando ou um erro tipográfico em um arquivo de configuração (embora isto "
+"por si só possa ser um indicativo de uma documentação deficiente ou de "
+"deficiências no manuseio de erros pelo aplicativo). Existem ainda muitos "
+"casos em que submeter um relatório de problema claramente _não_ é o curso de "
+"ação correto, e só servirá para frustrar tanto o usuário e quanto o "
+"desenvolvedor. Por outro lado, existem casos em que pode ser apropriado "
+"enviar um relatório de problema sobre algo diferente de um bug - tal como um "
+"aprimoramento ou um novo recurso, por exemplo."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:76
+msgid ""
+"So how does one determine what is a bug and what is not? As a simple rule of "
+"thumb, the problem is _not_ a bug if it can be expressed as a question "
+"(usually of the form \"How do I do X?\" or \"Where can I find Y?\"). It is "
+"not always quite so black and white, but the question rule covers a large "
+"majority of cases. When looking for an answer, consider posing the question "
+"to the {freebsd-questions}."
+msgstr ""
+"Então, como se determina o que é um bug e o que não é? Como uma regra "
+"simples, o problema _não_ é um bug se ele puder ser expresso como uma "
+"pergunta (geralmente na forma \"Como faço X?\" ou \"Onde posso encontrar Y?"
+"\"). Nem sempre é tão preto e branco, mas a regra da pergunta cobre a grande "
+"maioria dos casos. Ao procurar por uma resposta, considere colocar a questão "
+"na {freebsd-questions}."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:78
+msgid ""
+"Consider these factors when submitting PRs about ports or other software "
+"that is not part of FreeBSD itself:"
+msgstr ""
+"Considere estes fatores ao enviar PRs sobre ports ou outros softwares que "
+"não fazem parte do próprio FreeBSD:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:80
+msgid ""
+"Please do not submit problem reports that simply state that a newer version "
+"of an application is available. Ports maintainers are automatically notified "
+"by portscout when a new version of an application becomes available. Actual "
+"patches to update a port to the latest version are welcome."
+msgstr ""
+"Por favor, não envie relatórios de problemas que simplesmente afirmam que "
+"uma versão mais nova de um aplicativo está disponível. Os mantenedores de "
+"ports são notificados automaticamente pelo portscout quando uma nova versão "
+"de um aplicativo fica disponível. Patches para atualizar um port para uma "
+"versão mais recente do software são sempre bem-vindos."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:81
+msgid ""
+"For unmaintained ports (`MAINTAINER` is `ports@FreeBSD.org`), a PR without "
+"an included patch is unlikely to get picked up by a committer. To become the "
+"maintainer of an unmaintained port, submit a PR with the request (patch "
+"preferred but not required)."
+msgstr ""
+"Para ports não mantidos (O seu `MAINTAINER` é `ports@FreeBSD.org`), é "
+"improvável que um PR que não tenha um patch incluído seja escolhido para ser "
+"trabalhado por um committer. Para se tornar o mantenedor de um port não "
+"mantido, envie um PR com o pedido (será ótimo se o pedido vier com um patch, "
+"mas isso não é obrigatório)."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:82
+msgid ""
+"In either case, following the process described in extref:{porters-handbook}"
+"upgrading/[Porter's Handbook] will yield the best results. (You might also "
+"wish to read extref:{contributing}[Contributing to the FreeBSD Ports "
+"Collection, ports-contributing].)"
+msgstr ""
+"Em ambos os casos, seguir o processo descrito no extref:{porters-handbook}"
+"upgrading/[Porter's Handbook] produzirá os melhores resultados. (Você também "
+"pode desejar ler a seção extref:{contributing}[Contribuindo para a Coleção "
+"de Ports do FreeBSD, ports-contributing].)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:87
+msgid ""
+"A bug that cannot be reproduced can rarely be fixed. If the bug only "
+"occurred once and you cannot reproduce it, and it does not seem to happen to "
+"anybody else, chances are none of the developers will be able to reproduce "
+"it or figure out what is wrong. That does not mean it did not happen, but "
+"it does mean that the chances of your problem report ever leading to a bug "
+"fix are very slim. To make matters worse, often these kinds of bugs are "
+"actually caused by failing hard drives or overheating processors - you "
+"should always try to rule out these causes, whenever possible, before "
+"submitting a PR."
+msgstr ""
+"Um bug que não pode ser reproduzido raramente pode ser corrigido. Se o bug "
+"ocorreu apenas uma vez e você não pode reproduzi-lo, e não parece acontecer "
+"com mais ninguém, é muito provável que nenhum dos desenvolvedores consiga "
+"reproduzi-lo ou descobrir o que está errado. Isso não significa que isso não "
+"tenha acontecido, mas significa que as chances do seu relatório de problema "
+"levar à correção do bug são muito pequenas. Para piorar, muitas vezes esses "
+"tipos de bugs são causados por discos rígidos com defeito ou por "
+"processadores superaquecidos - sempre que possível você deve tentar "
+"descartar essas causas antes de enviar um PR."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:89
+msgid ""
+"Next, to decide to whom you should file your problem report, you need to "
+"understand that the software that makes up FreeBSD is composed of several "
+"different elements:"
+msgstr ""
+"Em seguida, para decidir para quem você deve enviar seu relatório de "
+"problema, você precisa entender que o software que compõe o FreeBSD é "
+"composto por vários elementos diferentes:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:91
+msgid ""
+"Code in the base system that is written and maintained by FreeBSD "
+"contributors, such as the kernel, the C library, and the device drivers "
+"(categorized as `kern`); the binary utilities (`bin`); the manual pages and "
+"documentation (`docs`); and the web pages (`www`). All bugs in these areas "
+"should be reported to the FreeBSD developers."
+msgstr ""
+"Código no sistema base que é escrito e mantido por contribuidores do "
+"FreeBSD, como o kernel, a biblioteca C e os drivers de dispositivo "
+"(categorizados como `kern`); os utilitários binários (`bin`); as páginas de "
+"manual e documentação (`docs`); e as páginas web (`www`). Todos os erros "
+"nestas áreas devem ser reportados aos desenvolvedores do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:92
+msgid ""
+"Code in the base system that is written and maintained by others, and "
+"imported into FreeBSD and adapted. Examples include man:clang[1], and man:"
+"sendmail[8]. Most bugs in these areas should be reported to the FreeBSD "
+"developers; but in some cases they may need to be reported to the original "
+"authors instead if the problems are not FreeBSD-specific."
+msgstr ""
+"Código no sistema base que é escrito e mantido por outras pessoas, o qual é "
+"importado e adaptado para o FreeBSD. Exemplos incluem o man:clang[1] e o man:"
+"sendmail[8]. A maioria dos bugs nessas áreas deve ser reportada aos "
+"desenvolvedores do FreeBSD; mas em alguns casos eles podem precisar ser "
+"relatados aos autores originais se os problemas não forem específicos do "
+"FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:93
+msgid ""
+"Individual applications that are not in the base system but are instead part "
+"of the FreeBSD Ports Collection (category `ports`). Most of these "
+"applications are not written by FreeBSD developers; what FreeBSD provides is "
+"merely a framework for installing the application. Therefore, only report a "
+"problem to the FreeBSD developers when the problem is believed to be FreeBSD-"
+"specific; otherwise, report it to the authors of the software."
+msgstr ""
+"Aplicativos individuais que não estão no sistema base, mas que são parte da "
+"coleção de ports do FreeBSD (categoria `ports`). A maioria desses "
+"aplicativos não são escritos por desenvolvedores do FreeBSD; o que o FreeBSD "
+"fornece é meramente um framework para instalar o aplicativo. Portanto, "
+"apenas relate um problema para os desenvolvedores do FreeBSD quando o "
+"problema for considerado específico do FreeBSD; caso contrário, informe aos "
+"autores do software."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:96
+msgid ""
+"Then, ascertain whether the problem is timely. There are few things that "
+"will annoy a developer more than receiving a problem report about a bug she "
+"has already fixed."
+msgstr ""
+"Em seguida, verifique se o problema é oportuno. Há poucas coisas que "
+"incomodarão mais um desenvolvedor do que receber um relatório de problemas "
+"sobre um bug que ele já corrigiu."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:100
+msgid ""
+"If the problem is in the base system, first read the FAQ section on extref:"
+"{faq}[FreeBSD versions, latest-version], if you are not already familiar "
+"with the topic. It is not possible for FreeBSD to fix problems in anything "
+"other than certain recent branches of the base system, so filing a bug "
+"report about an older version will probably only result in a developer "
+"advising you to upgrade to a supported version to see if the problem still "
+"recurs. The Security Officer team maintains the link:https://www.FreeBSD."
+"org/security/[list of supported versions]."
+msgstr ""
+"Se o problema estiver no sistema base, primeiro leia a seção extref:{faq}["
+"Versões do FreeBSD, latest-version] do FAQ, se você ainda não estiver "
+"familiarizado com o tópico. Não é possível para o FreeBSD consertar "
+"problemas em nada além de certas branches recentes do sistema base, de forma "
+"que enviar um relatório de bug sobre uma versão mais antiga provavelmente "
+"resultará em um desenvolvedor aconselhando você a atualizar para uma versão "
+"suportada para ver se o problema ainda continua ocorrendo. A equipe Security "
+"Officer mantém a link:https://www.FreeBSD.org/security/[lista das versões "
+"suportadas]."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:103
+msgid ""
+"If the problem is in a port, consider filing a bug with the upstream. The "
+"FreeBSD Project can not fix all bugs in all software."
+msgstr ""
+"Se o problema estiver em um port, considere submeter o bug para o upstream. "
+"O Projeto FreeBSD não pode corrigir todos os erros em todos os softwares."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:105
+#, no-wrap
+msgid "Preparations"
+msgstr "Preparativos"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:111
+msgid ""
+"A good rule to follow is to always do a background search before submitting "
+"a problem report. Maybe the problem has already been reported; maybe it is "
+"being discussed on the mailing lists, or recently was; it may even already "
+"be fixed in a newer version than what you are running. You should therefore "
+"check all the obvious places before submitting your problem report. For "
+"FreeBSD, this means:"
+msgstr ""
+"Uma boa regra a seguir é sempre fazer uma pesquisa sobre o tema antes de "
+"enviar um relatório de problemas. Talvez o problema já tenha sido relatado "
+"anteriormente; talvez esteja sendo discutido nas listas de discussão, ou foi "
+"discutido recentemente; pode até mesmo já estar corrigido em uma versão mais "
+"recente da que você está executando. Portanto, você deve verificar todos os "
+"lugares óbvios antes de enviar seu relatório de problemas. Para o FreeBSD, "
+"isso significa:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:113
+msgid ""
+"The FreeBSD extref:{faq}[Frequently Asked Questions] (FAQ) list. The FAQ "
+"attempts to provide answers for a wide range of questions, such as those "
+"concerning extref:{faq}[hardware compatibility, hardware], extref:{faq}[user "
+"applications, applications], and extref:{faq}[kernel configuration, "
+"kernelconfig]."
+msgstr ""
+"A lista das extref:{faq}[Perguntas Mais Frequentes] (FAQ) sobre o FreeBSD. A "
+"FAQ tenta fornecer respostas para uma ampla variedade de perguntas, como "
+"aquelas relacionadas à extref:{faq}[compatibilidade de hardware, hardware], "
+"extref:{faq}[aplicativos de usuário, applications], e extref:{faq}"
+"[configuração do kernel, kernelconfig]."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:114
+msgid ""
+"The extref:{handbook}eresources/[mailing lists, eresources-mail]-if you are "
+"not subscribed, use https://www.FreeBSD.org/search/#mailinglists[the "
+"searchable archives] on the FreeBSD web site. If the problem has not been "
+"discussed on the lists, you might try posting a message about it and waiting "
+"a few days to see if someone can spot something that has been overlooked."
+msgstr ""
+"As extref:{handbook}eresources/[listas de discussões, eresources-mail] - se "
+"você não está inscrito, faça uma pesquisa nos arquivos https://www.FreeBSD."
+"org/search/#mailinglists[históricos das listas] no site do FreeBSD. Se o "
+"problema não tiver sido discutido nas listas, você pode tentar postar uma "
+"mensagem sobre ele e aguardar alguns dias para ver se alguém consegue "
+"detectar algo que foi esquecido."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:115
+msgid ""
+"Optionally, the entire web-use your favorite search engine to locate any "
+"references to the problem. You may even get hits from archived mailing lists "
+"or newsgroups you did not know of or had not thought to search through."
+msgstr ""
+"Opcionalmente, na web toda - use seu mecanismo de pesquisa favorito para "
+"localizar qualquer referência ao problema. Você pode até receber hits de "
+"listas de discussão arquivadas ou grupos de notícias que você não conhecia "
+"ou que não pensou em pesquisar."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:116
+msgid ""
+"Next, the searchable https://bugs.freebsd.org/bugzilla/query.cgi[FreeBSD PR "
+"database] (Bugzilla). Unless the problem is recent or obscure, there is a "
+"fair chance it has already been reported."
+msgstr ""
+"Em seguida, faça uma pesquisa no https://bugs.freebsd.org/bugzilla/query."
+"cgi[banco de dados de Relatórios de Problemas do FreeBSD] (Bugzilla). A "
+"menos que o problema seja recente ou obscuro, há uma boa chance de que ele "
+"já tenha sido relatado."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:117
+msgid ""
+"Most importantly, attempt to see if existing documentation in the source "
+"base addresses your problem."
+msgstr ""
+"Mais importante ainda, tente verificar se a documentação existente não "
+"endereça o seu problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:120
+msgid ""
+"For the base FreeBSD code, you should carefully study the contents of [."
+"filename]#/usr/src/UPDATING# on your system or the latest version at https://"
+"cgit.freebsd.org/src/tree/UPDATING[https://cgit.freebsd.org/src/tree/"
+"UPDATING]. (This is vital information if you are upgrading from one version "
+"to another-especially if you are upgrading to the FreeBSD-CURRENT branch)."
+msgstr ""
+"Para o código fonte do FreeBSD, você deve estudar cuidadosamente o conteúdo "
+"do [.filename]#/usr/src/UPDATING# em seu sistema ou a última versão "
+"disponível em https://cgit.freebsd.org/src/tree/UPDATING[https://cgit."
+"freebsd.org/src/tree/UPDATING]. (Esta é uma informação vital se você estiver "
+"atualizando de uma versão para outra - especialmente se você estiver "
+"atualizando para a branch FreeBSD-CURRENT)."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:123
+msgid ""
+"However, if the problem is in something that was installed as a part of the "
+"FreeBSD Ports Collection, you should refer to [.filename]#/usr/ports/"
+"UPDATING# (for individual ports) or [.filename]#/usr/ports/CHANGES# (for "
+"changes that affect the entire Ports Collection). https://cgit.freebsd.org/"
+"ports/tree/UPDATING[https://cgit.freebsd.org/ports/tree/UPDATING] and "
+"https://cgit.freebsd.org/ports/tree/CHANGES[https://cgit.freebsd.org/ports/"
+"tree/CHANGES] are also available via cgit."
+msgstr ""
+"No entanto, se o problema estiver em algo que foi instalado como parte da "
+"coleção de ports do FreeBSD, você deve consultar [.filename]#/usr/ports/"
+"UPDATING# (para ports individuais) ou [.filename]#/usr/ports/CHANGES# (para "
+"alterações que afetam toda a Coleção de Ports).O https://cgit.freebsd.org/"
+"ports/tree/UPDATING[https://cgit.freebsd.org/ports/tree/UPDATING] e o "
+"https://cgit.freebsd.org/ports/tree/CHANGES[https://cgit.freebsd.org/ports/"
+"tree/CHANGES] também estão disponíveis via cgit."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:125
+#, no-wrap
+msgid "Writing the Problem Report"
+msgstr "Escrevendo o Relatório do Problema"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:129
+msgid ""
+"Now that you have decided that your issue merits a problem report, and that "
+"it is a FreeBSD problem, it is time to write the actual problem report. "
+"Before we get into the mechanics of the program used to generate and submit "
+"PRs, here are some tips and tricks to help make sure that your PR will be "
+"most effective."
+msgstr ""
+"Agora que você decidiu que seu problema merece um relatório de problema e "
+"que ele é um problema especifico do FreeBSD, é hora de escrever o relatório "
+"de problema. Antes de entrarmos na mecânica do sistema utilizado para gerar "
+"e enviar os PRs, aqui estão algumas dicas e truques para ajudar a garantir "
+"que seu o PR seja mais eficaz."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:131
+#, no-wrap
+msgid "Tips and Tricks for Writing a Good Problem Report"
+msgstr "Dicas e Truques para Escrever um Bom Relatório de Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:134
+msgid ""
+"_Do not leave the \"Summary\" line empty._ The PRs go both onto a mailing "
+"list that goes all over the world (where the \"Summary\" is used for the "
+"`Subject:` line), but also into a database. Anyone who comes along later and "
+"browses the database by synopsis, and finds a PR with a blank subject line, "
+"tends just to skip over it. Remember that PRs stay in this database until "
+"they are closed by someone; an anonymous one will usually just disappear in "
+"the noise."
+msgstr ""
+"_Não deixe a linha \"Summary\" vazia._ Os PRs são enviados para listas de "
+"discussão no mundo todo (onde o \"Summary\" é usado para a linha de `Subject:"
+"`), além de serem armazenadas em um banco de dados. Qualquer pessoa que vier "
+"a navegar no banco de dados pelas sinopses, e encontrar um PR com a linha de "
+"assunto em branco, tende a pulá-lo. Lembre-se que os PRs permanecem na base "
+"de dados até que sejam fechados por alguém; os anônimos normalmente irão "
+"desaparecer em meio ao ruído."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:135
+msgid ""
+"_Avoid using a weak \"Summary\" line._ You should not assume that anyone "
+"reading your PR has any context for your submission, so the more you "
+"provide, the better. For instance, what part of the system does the problem "
+"apply to? Do you only see the problem while installing, or while running? To "
+"illustrate, instead of `Summary: portupgrade is broken`, see how much more "
+"informative this seems: `Summary: port ports-mgmt/portupgrade coredumps on -"
+"current`. (In the case of ports, it is especially helpful to have both the "
+"category and portname in the \"Summary\" line.)"
+msgstr ""
+"_Evite usar um \"Summary\" (Sumário) fraco._ Você não deve presumir que "
+"alguém que esteja lendo seu PR conheça o contexto que motivou o seu envio, "
+"desta forma, quanto mais informação você fornecer, melhor. Por exemplo, em "
+"qual parte do sistema o problema se aplica? O problema ocorre durante a "
+"instalação ou durante a execução do sistema? Para ilustrar, em vez de usar "
+"`Summary: o portupgrade está quebrado`, veja o quanto mais informativo isso "
+"parece: ` Summary: port ports-mgmt/portupgrade gerando coredumps no -"
+"current`. (No caso de um port, é especialmente útil ter tanto o nome da "
+"categoria quanto o nome do port na linha \"Summary\".)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:136
+msgid ""
+"_If you have a patch, say so._ A PR with a patch included is much more "
+"likely to be looked at than one without. Please set the `patch` Keyword in "
+"Bugzilla."
+msgstr ""
+"_Se você tem um patch, mencione-o._ Um PR com um patch incluído é muito mais "
+"provável de ser analisado do que um sem. Por favor, inclua a palavra-chave "
+"`patch` no Bugzilla."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:137
+msgid ""
+"_If you are a maintainer, say so._ If you are maintaining a part of the "
+"source code (for instance, an existing port), you definitely should set the "
+"\"Class\" of your PR to `maintainer-update`. This way any committer that "
+"handles your PR will not have to check."
+msgstr ""
+"_Se você é um mantenedor, informe._ Se você está mantendo uma parte do "
+"código fonte (por exemplo, um port existente), você deve definir o campo "
+"\"Class\" do seu PR para `maintainer-update`. Desta forma, qualquer "
+"committer que veja o seu PR não terá que verificar."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:138
+msgid ""
+"_Be specific._ The more information you supply about what problem you are "
+"having, the better your chance of getting a response."
+msgstr ""
+"_Seja específico._ Quanto mais informações você fornecer sobre o problema "
+"que está tendo, maiores serão suas chances de obter uma resposta."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:140
+msgid ""
+"Include the version of FreeBSD you are running (there is a place to put "
+"that, see below) and on which architecture. You should include whether you "
+"are running from a release (e.g., from a CD-ROM or download), or from a "
+"system maintained by Git (and, if so, what hash and branch you are at). If "
+"you are tracking the FreeBSD-CURRENT branch, that is the very first thing "
+"someone will ask, because fixes (especially for high-profile problems) tend "
+"to get committed very quickly, and FreeBSD-CURRENT users are expected to "
+"keep up."
+msgstr ""
+"Inclua a versão do FreeBSD que você está utilizando (há um lugar para "
+"colocar essa informação, veja abaixo) e em qual arquitetura. Você deve "
+"incluir se você está executando a partir de uma release (por exemplo, de um "
+"CD-ROM ou feito um download), ou de um sistema mantido pelo Git (e, caso "
+"seja afirmativo, em que hash e branch você está). Se você estiver utilizando "
+"a branch FreeBSD-CURRENT, essa é a primeira coisa que alguém vai perguntar, "
+"porque as correções (especialmente para problemas de alto nível) tendem a "
+"ser realizadas muito rapidamente, e é esperado que usuários do FreeBSD-"
+"CURRENT se mantenham atualizados."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:141
+msgid ""
+"Include which global options you have specified in your [.filename]#make."
+"conf#, [.filename]#src.conf#, and [.filename]#src-env.conf#. Given the "
+"infinite number of options, not every combination may be fully supported."
+msgstr ""
+"Inclua quais opções globais você especificou em seu [.filename]#make.conf#, "
+"[.filename]#src.conf# e [.filename]#src-env.conf#. Dado o número infinito de "
+"opções, nem todas as combinações podem ser totalmente suportadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:142
+msgid ""
+"If the problem can be reproduced easily, include information that will help "
+"a developer to reproduce it themselves. If a problem can be demonstrated "
+"with specific input then include an example of that input if possible, and "
+"include both the actual and the expected output. If this data is large or "
+"cannot be made public, then do try to create a minimal file that exhibits "
+"the same issue and that can be included within the PR."
+msgstr ""
+"Se o problema puder ser reproduzido facilmente, inclua informações que irão "
+"ajudar um desenvolvedor a reproduzi-lo. Se um problema puder ser demonstrado "
+"com uma entrada específica, então inclua um exemplo desta entrada se "
+"possível, e inclua tanto a saída real quanto a esperada. Se esses dados "
+"forem grandes ou não puderem ser tornados públicos, então tente criar um "
+"arquivo pequeno que exiba o mesmo problema e que possa ser incluído no PR."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:143
+msgid ""
+"If this is a kernel problem, then be prepared to supply the following "
+"information. (You do not have to include these by default, which only tends "
+"to fill up the database, but you should include excerpts that you think "
+"might be relevant):"
+msgstr ""
+"Se este for um problema do kernel, esteja preparado para fornecer as "
+"seguintes informações. (Você não precisa incluí-las por padrão, o que apenas "
+"tende a preencher o banco de dados, mas você deve incluir os trechos que "
+"considera ser relevantes):"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:145
+msgid ""
+"your kernel configuration (including which hardware devices you have "
+"installed)"
+msgstr ""
+"sua configuração do kernel (incluindo quais dispositivos de hardware você "
+"tem instalado)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:146
+msgid ""
+"whether or not you have debugging options enabled (such as `WITNESS`), and "
+"if so, whether the problem persists when you change the sense of that option"
+msgstr ""
+"independente de você ter ou não opções de debug habilitadas (como "
+"`WITNESS`), e se tiver, se o problema persiste quando você muda o sentido da "
+"opção"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:147
+msgid ""
+"the full text of any backtrace, panic or other console output, or entries in "
+"[.filename]#/var/log/messages#, if any were generated"
+msgstr ""
+"o texto completo de qualquer backtrace, panic ou outra mensagens de console, "
+"ou registros em [.filename]#/var/log/messages#, se houver sido gerado"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:148
+msgid ""
+"the output of `pciconf -l` and relevant parts of your `dmesg` output if your "
+"problem relates to a specific piece of hardware"
+msgstr ""
+"a saída de `pciconf -l` e partes relevantes da saída do comando `dmesg` se o "
+"seu problema estiver relacionado a uma peça específica de hardware"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:149
+msgid ""
+"the fact that you have read [.filename]#src/UPDATING# and that your problem "
+"is not listed there (someone is guaranteed to ask)"
+msgstr ""
+"o fato de você ter lido [.filename]#src/UPDATING# e o seu problema não estar "
+"listado lá (alguém pode perguntar)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:150
+msgid ""
+"whether or not you can run any other kernel as a fallback (this is to rule "
+"out hardware-related issues such as failing disks and overheating CPUs, "
+"which can masquerade as kernel problems)"
+msgstr ""
+"independente de você poder executar qualquer outro kernel como um fallback "
+"(isso é para descartar problemas relacionados a hardware, como discos com "
+"falhas e CPUs superaquecidas, que podem se passar por problemas de kernel)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:152
+msgid ""
+"If this is a ports problem, then be prepared to supply the following "
+"information. (You do not have to include these by default, which only tends "
+"to fill up the database, but you should include excerpts that you think "
+"might be relevant):"
+msgstr ""
+"Se este for um problema de algum port, esteja preparado para fornecer as "
+"seguintes informações. (Você não precisa incluí-las por padrão, o que apenas "
+"tende a preencher o banco de dados, mas você deve incluir trechos que você "
+"considera relevantes):"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:154
+msgid "which ports you have installed"
+msgstr "quais ports você instalou"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:155
+msgid ""
+"any environment variables that override the defaults in [.filename]#bsd.port."
+"mk#, such as `PORTSDIR`"
+msgstr ""
+"quaisquer variáveis de ambiente que sobreescrevem as variáveis padrões em [."
+"filename]#bsd.port.mk#, assim como `PORTSDIR`"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:156
+msgid ""
+"the fact that you have read [.filename]#ports/UPDATING# and that your "
+"problem is not listed there (someone is guaranteed to ask)"
+msgstr ""
+"o fato de você ter lido [.filename]#ports/UPDATING# e o seu problema não "
+"estar listado lá (é garantido que alguém irá perguntar)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:158
+msgid ""
+"_Avoid vague requests for features._ PRs of the form \"someone should really "
+"implement something that does so-and-so\" are less likely to get results "
+"than very specific requests. Remember, the source is available to everyone, "
+"so if you want a feature, the best way to ensure it being included is to get "
+"to work! Also consider the fact that many things like this would make a "
+"better topic for discussion on `freebsd-questions` than an entry in the PR "
+"database, as discussed above."
+msgstr ""
+"_Evite requisições vagas de novas funcionalidades._ Os PRs no formato "
+"\"alguém realmente deve implementar algo que faz isso e aquilo\" têm menor "
+"probabilidade de obter resultados do que requisições muito específicas. "
+"Lembre-se, o código fonte está disponível para todos, então se você quiser "
+"uma nova funcionalidade, a melhor maneira de garantir que ela seja incluída "
+"é começar a trabalhar! Considere também o fato de que muitas coisas como "
+"essa seriam um tópico melhor para a discussão sobre `freebsd-questions` do "
+"que uma entrada no banco de dados de PR, como discutido acima."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:159
+msgid ""
+"_Make sure no one else has already submitted a similar PR._ Although this "
+"has already been mentioned above, it bears repeating here. It only take a "
+"minute or two to use the web-based search engine at https://bugs.freebsd.org/"
+"bugzilla/query.cgi[https://bugs.freebsd.org/bugzilla/query.cgi]. (Of course, "
+"everyone is guilty of forgetting to do this now and then.)"
+msgstr ""
+"_Certifique-se de que ninguém mais tenha submetido um PR similar._ Embora "
+"isso já tenha sido mencionado acima, vale a pena repetir aqui. Leva apenas "
+"um ou dois minutos para usar o mecanismo de busca baseado na Web em https://"
+"bugs.freebsd.org/bugzilla/query.cgi[https://bugs.freebsd.org/bugzilla/query."
+"cgi]. (Claro, todo mundo é culpado de esquecer de fazer isso de vez em "
+"quando.)"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:160
+msgid ""
+"_Report only one issue per Problem Report._ Avoid including two or more "
+"problems within the same report unless they are related. When submitting "
+"patches, avoid adding multiple features or fixing multiple bugs in the same "
+"PR unless they are closely related-such PRs often take longer to resolve."
+msgstr ""
+"_ Relate um problema apenas através do Relatório de Problemas._ Evite "
+"incluir dois ou mais problemas dentro do mesmo relatório, a menos que "
+"estejam relacionados. Ao enviar patches, evite adicionar várias "
+"funcionalidades ou corrigir múltiplos bugs no mesmo PR, a menos que eles "
+"estejam intimamente relacionados - esses PRs geralmente levam mais tempo "
+"para serem resolvidos."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:161
+msgid ""
+"_Avoid controversial requests._ If your PR addresses an area that has been "
+"controversial in the past, you should probably be prepared to not only offer "
+"patches, but also justification for why the patches are \"The Right Thing To "
+"Do\". As noted above, a careful search of the mailing lists using the "
+"archives at https://www.FreeBSD.org/search/#mailinglists[https://www.FreeBSD."
+"org/search/#mailinglists] is always good preparation."
+msgstr ""
+"_Evite requisições controversas._ Se o seu PR aborda uma área que já foi "
+"controversa no passado, você provavelmente deverá estar preparado para não "
+"apenas oferecer patches, mas também justificar por que os patches são \"A "
+"Coisa Certa A Se Fazer \". Como observado acima, uma busca cuidadosa nas "
+"listas de discussão usando os arquivos em https://www.FreeBSD.org/search/"
+"#mailinglists[https://www.FreeBSD.org/search/#mailinglists] é sempre uma boa "
+"preparação."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:162
+msgid ""
+"_Be polite._ Almost anyone who would potentially work on your PR is a "
+"volunteer. No one likes to be told that they have to do something when they "
+"are already doing it for some motivation other than monetary gain. This is a "
+"good thing to keep in mind at all times on Open Source projects."
+msgstr ""
+"_Seja educado._ Quase todo mundo que potencialmente irá trabalhar em seu PR "
+"é um voluntário. Ninguém gosta que digam o que eles tem que fazer quando já "
+"estão fazendo por alguma motivação que não seja o ganho monetário. É sempre "
+"bom ter isso em mente em projetos de código aberto."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:164
+#, no-wrap
+msgid "Before Beginning"
+msgstr "Antes de Começar"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:168
+msgid ""
+"Similar considerations apply to use of the https://bugs.freebsd.org/bugzilla/"
+"enter_bug.cgi[web-based PR submission form]. Be careful of cut-and-paste "
+"operations that might change whitespace or other text formatting."
+msgstr ""
+"Considerações semelhantes se aplicam ao uso do https://bugs.freebsd.org/"
+"bugzilla/enter_bug.cgi[formulário web de envio de PR]. Cuidado com as "
+"operações de recortar e colar que podem alterar o espaços em branco ou "
+"outras formatações de texto."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:170
+msgid ""
+"Finally, if the submission is lengthy, prepare the work offline so that "
+"nothing will be lost if there is a problem submitting it."
+msgstr ""
+"Finalmente, se o envio for demorado, prepare o trabalho off-line para que "
+"nada seja perdido se houver um problema ao enviá-lo."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:172
+#, no-wrap
+msgid "Attaching Patches or Files"
+msgstr "Anexando Patches ou Arquivos"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:180
+msgid ""
+"In general, we recommend using `git format-patch` to generate one or a "
+"series of unified diff against the base branch (e.g. `origin/main`). "
+"Patches generated this way would include the Git hashes and will include "
+"your name and email address, making it easier for committers to apply your "
+"patch and properly credit you as the author (using `git am`). For minor "
+"changes where you prefer not to use git, please be sure to use man:diff[1] "
+"with the `-u` option to create a unified diff, as this would give developers "
+"more context and are more readable than other diff formats."
+msgstr ""
+"Em geral, recomendamos usar `git format-patch` para gerar um ou uma série de "
+"diffs unificados em relação ao branch base (por exemplo, `origin/main`). Os "
+"patches gerados dessa forma incluirão os hashes do Git e incluirão seu nome "
+"e endereço de e-mail, tornando mais fácil para os committers aplicarem seu "
+"patch e creditarem você como autor (usando `git am`). Para pequenas "
+"alterações em que você prefere não usar o git, certifique-se de usar man:"
+"diff[1] com a opção `-u` para criar um diff unificado, pois isso daria aos "
+"desenvolvedores mais contexto e seria mais legível do que outros formatos de "
+"diff."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:183
+msgid ""
+"For problems with the kernel or the base utilities, a patch against FreeBSD-"
+"CURRENT (the main Git branch) is preferred since all new code should be "
+"applied and tested there first. After appropriate or substantial testing "
+"has been done, the code will be merged/migrated to the FreeBSD-STABLE branch."
+msgstr ""
+"Para problemas com o kernel ou com os utilitários da base, um patch para o "
+"FreeBSD-CURRENT (o principal branch do Git) é o preferido, já que todo "
+"código novo deve ser aplicado e testado lá primeiro. Após testes apropriados "
+"ou substanciais terem sido feitos, o código será mesclado/migrado para a "
+"branch FreeBSD-STABLE."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:185
+msgid ""
+"If you attach a patch inline, instead of as an attachment, note that the "
+"most common problem by far is the tendency of some email programs to render "
+"tabs as spaces, which will completely ruin anything intended to be part of a "
+"Makefile."
+msgstr ""
+"Se você anexar um patch inline, em vez de um anexo, observe que o problema "
+"mais comum, de longe, é a tendência de alguns programas de email renderizar "
+"tabs como espaços, o que ira arruinar completamente qualquer coisa destinada "
+"a fazer parte de um Makefile."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:188
+msgid ""
+"Do not send patches as attachments using `Content-Transfer-Encoding: quoted-"
+"printable`. These will perform character escaping and the entire patch will "
+"be useless."
+msgstr ""
+"Não envie patches como anexos usando `Content-Transfer-Encoding: quoted-"
+"printable`. Isso irá escapar os caracteres e todo o patch se tornará inútil."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:193
+msgid ""
+"Also note that while including small patches in a PR is generally all right-"
+"particularly when they fix the problem described in the PR-large patches and "
+"especially new code which may require substantial review before committing "
+"should be placed on a web or ftp server, and the URL should be included in "
+"the PR instead of the patch. Patches in email tend to get mangled, and the "
+"larger the patch, the harder it will be for interested parties to unmangle "
+"it. Also, posting a patch on the web allows you to modify it without having "
+"to resubmit the entire patch in a followup to the original PR. Finally, "
+"large patches simply increase the size of the database, since closed PRs are "
+"not actually deleted but instead kept and simply marked as complete."
+msgstr ""
+"Observe também que, embora a inclusão de pequenos patches em um PR "
+"geralmente esteja correto - particularmente quando eles corrigem o problema "
+"descrito no PR - patches grandes e especialmente códigos novos que podem "
+"exigir uma revisão substancial antes do commit, deveriam ser colocados em um "
+"servidor web ou FTP, e a URL deveria ser incluída no PR em vez do patch. "
+"Patches por e-mail tendem a ficar embaralhados, e quanto maior o patch, mais "
+"difícil será para as partes interessadas recuperá-lo. Além disso, postar um "
+"patch na web permite modificá-lo sem ter que reenviar todo o patch em um "
+"followup do PR original. Finalmente, os patches grandes simplesmente "
+"aumentam o tamanho do banco de dados, uma vez que os PRs fechados não são "
+"realmente excluídos, mas sim mantidos e simplesmente marcados como completos."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:195
+msgid ""
+"You should also take note that unless you explicitly specify otherwise in "
+"your PR or in the patch itself, any patches you submit will be assumed to be "
+"licensed under the same terms as the original file you modified."
+msgstr ""
+"Você também deve observar que, a menos que você especifique explicitamente o "
+"contrário em seu PR ou no próprio patch, quaisquer patches enviados por você "
+"serão considerados licenciados sob os mesmos termos do arquivo original que "
+"você modificou."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:197
+#, no-wrap
+msgid "Filling out the Form"
+msgstr "Preenchendo o formulário"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:204
+msgid ""
+"The email address you use will become public information and may become "
+"available to spammers. You should either have spam handling procedures in "
+"place, or use a temporary email account. However, please note that if you "
+"do not use a valid email account at all, we will not be able to ask you "
+"questions about your PR."
+msgstr ""
+"O endereço de e-mail que você usa se tornará publico e poderá se tornar "
+"disponível para spammers. Você deve ter procedimentos de tratamento de spam "
+"ou usar uma conta de email temporária. No entanto, observe que, se você não "
+"usar uma conta de e-mail válida, não poderemos fazer perguntas sobre seu PR."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:207
+msgid "When you file a bug, you will find the following fields:"
+msgstr "Quando você for reportar um bug, você encontrará os seguintes campos:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:209
+msgid ""
+"_Summary:_ Fill this out with a short and accurate description of the "
+"problem. The synopsis is used as the subject of the problem report email, "
+"and is used in problem report listings and summaries; problem reports with "
+"obscure synopses tend to get ignored."
+msgstr ""
+"_Summary (Sumário):_ Preencha com uma descrição breve e precisa do problema. "
+"A sinopse é usada como assunto do email do relatório de problemas. A sinopse "
+"é usada em listagens e resumos de relatórios de problemas; relatórios de "
+"problemas com sinopses obscuras tendem a ser ignoradas."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:210
+msgid ""
+"_Severity:_ One of `Affects only me`, `Affects some people` or `Affects many "
+"people`. Do not overreact; refrain from labeling your problem `Affects many "
+"people` unless it really does. FreeBSD developers will not necessarily work "
+"on your problem faster if you inflate its importance since there are so many "
+"other people who have done exactly that."
+msgstr ""
+"_Severity (Gravidade):_ Um dos `Affects only me (Afeta somente eu)`, "
+"`Affects some people (Afeta algumas pessoas)` ou `Affects many people (Afeta "
+"muitas pessoas)`. Não exagere; abstenha-se de rotular seu problema como "
+"`Afeta muitas pessoas` a menos que ele realmente afete. Os desenvolvedores "
+"do FreeBSD não irão necessariamente trabalhar no seu problema mais rápido se "
+"você inflar sua importância, uma vez que existem muitas outras pessoas que "
+"fizeram exatamente isso."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:211
+msgid "_Category:_ Choose an appropriate category."
+msgstr "_Category (Categoria):_ Escolha uma categoria apropriada."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:216
+msgid ""
+"The first thing you need to do is to decide what part of the system your "
+"problem lies in. Remember, FreeBSD is a complete operating system, which "
+"installs both a kernel, the standard libraries, many peripheral drivers, and "
+"a large number of utilities (the \"base system\"). However, there are "
+"thousands of additional applications in the Ports Collection. You'll first "
+"need to decide if the problem is in the base system or something installed "
+"via the Ports Collection."
+msgstr ""
+"A primeira coisa que você precisa fazer é decidir em que parte do sistema "
+"está seu problema. Lembre-se, o FreeBSD é um sistema operacional completo, "
+"que instala tanto um kernel, bibliotecas padrão, muitos drivers de "
+"periféricos e um grande número de utilitários (o \"sistema básico\"). No "
+"entanto, existem milhares de aplicativos adicionais na coleção de portes. "
+"Você primeiro precisa decidir se o problema está no sistema básico ou algo "
+"instalado via a Coleção de Ports."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:218
+msgid "Here is a description of the major categories:"
+msgstr "Aqui está uma descrição das categorias principais:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:220
+msgid ""
+"If a problem is with the kernel, the libraries (such as standard C library "
+"`libc`), or a peripheral driver in the base system, in general you will use "
+"the `kern` category. (There are a few exceptions; see below). In general "
+"these are things that are described in section 2, 3, or 4 of the manual "
+"pages."
+msgstr ""
+"Se um problema for com o kernel, as bibliotecas (como a biblioteca C padrão "
+"`libc`), ou o driver de algum periférico no sistema base, em geral você irá "
+"usar a categoria `kern`. (Existem algumas exceções; veja abaixo). Em geral, "
+"são coisas descritas nas seções 2, 3 ou 4 das páginas de manual."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:221
+msgid ""
+"If a problem is with a binary program such as man:sh[1] or man:mount[8], you "
+"will first need to determine whether these programs are in the base system "
+"or were added via the Ports Collection. If you are unsure, you can do "
+"`whereis _programname_`. FreeBSD's convention for the Ports Collection is to "
+"install everything underneath [.filename]#/usr/local#, although this can be "
+"overridden by a system administrator. For these, you will use the `ports` "
+"category (yes, even if the port's category is `www`; see below). If the "
+"location is [.filename]#/bin#, [.filename]#/usr/bin#, [.filename]#/sbin#, or "
+"[.filename]#/usr/sbin#, it is part of the base system, and you should use "
+"the `bin` category. These are all things that are described in section 1 or "
+"8 of the manual pages."
+msgstr ""
+"Se o problema for com um programa binário, como man:sh[1] ou man:mount[8], "
+"primeiro você precisará determinar se esses programas estão no sistema "
+"básico ou se foram adicionados por meio da Coleção de Ports. Se não tiver "
+"certeza, você pode executar `whereis _nome_do_programa_`. A convenção do "
+"FreeBSD para a Coleção de Ports é instalar tudo abaixo do [.filename]#/usr/"
+"local#, embora esse comportamento possa ser alterado por um administrador do "
+"sistema. Para estes, você usará a categoria `ports` (sim, mesmo se a "
+"categoria do port for `www`; veja abaixo). Se a localização for [.filename]#/"
+"bin#, [.filename]#/usr/bin#, [.filename]#/sbin# , ou [.filename]#/usr/sbin#, "
+"ele faz parte do sistema base, e você deve usar a categoria `bin`. Essas são "
+"todas as coisas descritas na seção 1 ou 8 das páginas de manual."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:222
+msgid ""
+"If you believe that the error is in the startup `(rc)` scripts, or in some "
+"kind of other non-executable configuration file, then the right category is "
+"`conf` (configuration). These are things that are described in section 5 of "
+"the manual pages."
+msgstr ""
+"Se você acredita que o erro está nos scripts de inicialização `(rc)`, ou em "
+"algum outro tipo de arquivo de configuração não-executável, então a "
+"categoria correta é `conf` (configuração) . Estas são as coisas descritas na "
+"seção 5 das páginas de manual."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:223
+msgid ""
+"If you have found a problem in the documentation set (articles, books, man "
+"pages) or website the correct choice is `docs`."
+msgstr ""
+"Se você encontrou um problema no conjunto de documentação (artigos, livros, "
+"man pages) ou no website, a escolha correta é `docs`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:227
+msgid ""
+"if you are having a problem with something from a port named `www/"
+"_someportname_`, this nevertheless goes in the `ports` category."
+msgstr ""
+"Se você estiver tendo um problema com algum port chamado `www/_algum-nome-de-"
+"port_`, mesmo assim, isso vai na categoria `ports`."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:230
+msgid "There are a few more specialized categories."
+msgstr "Existem algumas categorias mais especializadas."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:232
+msgid ""
+"If the problem would otherwise be filed in `kern` but has to do with the USB "
+"subsystem, the correct choice is `usb`."
+msgstr ""
+"Se o problema, por outro lado, estar colocado em `kern`, mas tem a ver com o "
+"subsistema USB, a escolha correta é `usb`."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:233
+msgid ""
+"If the problem would otherwise be filed in `kern` but has to do with the "
+"threading libraries, the correct choice is `threads`."
+msgstr ""
+"Se o problema, por outro lado, estiver colocado em `kern`, mas tem a ver com "
+"as bibliotecas de threads, a escolha correta é `threads`."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:234
+msgid ""
+"If the problem would otherwise be in the base system, but has to do with our "
+"adherence to standards such as POSIX(R), the correct choice is `standards`."
+msgstr ""
+"Se o problema, por outro lado, estiver no sistema base, mas tem a ver com "
+"nossa fidelidade a padrões como POSIX(R), a escolha correta é `standards`."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:235
+msgid ""
+"If you are convinced that the problem will only occur under the processor "
+"architecture you are using, select one of the architecture-specific "
+"categories: commonly `i386` for Intel-compatible machines in 32-bit mode; "
+"`amd64` for AMD machines running in 64-bit mode (this also includes Intel-"
+"compatible machines running in EMT64 mode); and less commonly `arm` or "
+"`powerpc`."
+msgstr ""
+"Se estiver convencido de que o problema ocorrerá apenas sob a arquitetura do "
+"processador que você está usando, selecione uma das categorias específicas "
+"da arquitetura: geralmente `i386` para máquinas compatíveis com Intel 32 "
+"bits; `amd64` para máquinas AMD rodando em 64 bits (isto também inclui "
+"máquinas compatíveis com Intel rodando em modo EMT64); e menos comumente, as "
+"arquiteturas `arm` ou `powerpc`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:239
+msgid ""
+"These categories are quite often misused for \"I do not know\" problems. "
+"Rather than guessing, please just use `misc`."
+msgstr ""
+"Estas categorias são muitas vezes mal utilizadas para problemas definidos "
+"como \"Eu não sei\". Em vez de adivinhar, por favor apenas use a categoria "
+"`misc`."
+
+#. type: Block title
+#: documentation/content/en/articles/problem-reports/_index.adoc:241
+#, no-wrap
+msgid "Correct Use of Arch-Specific Category"
+msgstr "Uso Correto da Categoria Específica de Arquitetura"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:245
+msgid ""
+"You have a common PC-based machine, and think you have encountered a problem "
+"specific to a particular chipset or a particular motherboard: `i386` is the "
+"right category."
+msgstr ""
+"Você tem uma máquina comum baseada em PC e acha que encontrou um problema "
+"específico para um determinado chipset ou uma placa-mãe em particular: "
+"`i386` é a categoria correta."
+
+#. type: Block title
+#: documentation/content/en/articles/problem-reports/_index.adoc:247
+#, no-wrap
+msgid "Incorrect Use of Arch-Specific Category"
+msgstr "Uso Incorreto da Categoria Específica de Arquitetura"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/problem-reports/_index.adoc:251
+msgid ""
+"You are having a problem with an add-in peripheral card on a commonly seen "
+"bus, or a problem with a particular type of hard disk drive: in this case, "
+"it probably applies to more than one architecture, and `kern` is the right "
+"category."
+msgstr ""
+"Você está tendo um problema com uma placa periférica adicional em um "
+"barramento comum, ou um problema com um tipo específico de unidade de disco "
+"rígido: neste caso, provavelmente se aplica a mais de uma arquitetura, e "
+"`kern` é a categoria correta."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:253
+msgid ""
+"If you really do not know where the problem lies (or the explanation does "
+"not seem to fit into the ones above), use the `misc` category. Before you do "
+"so, you may wish to ask for help on the {freebsd-questions} first. You may "
+"be advised that one of the existing categories really is a better choice."
+msgstr ""
+"Se você realmente não sabe onde o problema se encaixa (ou a explicação não "
+"parece se encaixar nos itens acima), use a categoria `misc`. Antes de fazer "
+"isso, você pode pedir ajuda primeiro na {freebsd-questions}. Você pode ser "
+"avisado que com certeza uma das categorias existentes é uma escolha melhor."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:254
+msgid ""
+"_Environment:_ This should describe, as accurately as possible, the "
+"environment in which the problem has been observed. This includes the "
+"operating system version, the version of the specific program or file that "
+"contains the problem, and any other relevant items such as system "
+"configuration, other installed software that influences the problem, etc.-"
+"quite simply everything a developer needs to know to reconstruct the "
+"environment in which the problem occurs."
+msgstr ""
+"_Environment:_ Isto deve descrever, com a maior precisão possível, o "
+"ambiente em que o problema foi observado. Isto inclui a versão do sistema "
+"operacional, a versão do programa ou arquivo específico que contém o "
+"problema e quaisquer outros itens relevantes, como configuração do sistema, "
+"outro software instalado que influencia no problema, etc. - simplesmente "
+"tudo o que um desenvolvedor precisa saber para reconstruir o ambiente em que "
+"ocorra o problema."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:255
+msgid ""
+"__Description:__A complete and accurate description of the problem you are "
+"experiencing. Try to avoid speculating about the causes of the problem "
+"unless you are certain that you are on the right track, as it may mislead a "
+"developer into making incorrect assumptions about the problem. It should "
+"include the actions you need to take to reproduce the problem. If you know "
+"any workaround, include it. It not only helps other people with the same "
+"problem work around it, but may also help a developer understand the cause "
+"for the problem."
+msgstr ""
+"_Description:_ Uma descrição completa e precisa do problema que você está "
+"enfrentando. Tente evitar especular sobre as causas do problema, a menos que "
+"tenha certeza de que você está no caminho certo, pois isso pode induzir o "
+"desenvolvedor a fazer suposições incorretas sobre o problema. Ela deve "
+"incluir as ações que você precisa executar para reproduzir o problema. Se "
+"você conhece alguma solução alternativa, inclua-a. Ela não apenas ajuda "
+"outras pessoas com o mesmo problema a contorná-lo, mas também pode ajudar um "
+"desenvolvedor a entender a causa do problema."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:257
+#, no-wrap
+msgid "Follow-up"
+msgstr "Acompanhamento"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:262
+msgid ""
+"Once the problem report has been filed, you will receive a confirmation by "
+"email which will include the tracking number that was assigned to your "
+"problem report and a URL you can use to check its status. With a little "
+"luck, someone will take an interest in your problem and try to address it, "
+"or, as the case may be, explain why it is not a problem. You will be "
+"automatically notified of any change of status, and you will receive copies "
+"of any comments or patches someone may attach to your problem report's audit "
+"trail."
+msgstr ""
+"Uma vez que o relatório de problema foi colocado na fila, você receberá uma "
+"confirmação por e-mail que incluirá o número de rastreamento que foi "
+"atribuído ao seu relatório de problema e uma URL que você pode usar para "
+"verificar seu status. Com um pouco de sorte, alguém se interessará por seu "
+"problema e tentará resolvê-lo, ou, conforme o caso, explicar por que isso "
+"não é um problema. Você será automaticamente notificado de qualquer "
+"alteração de status e receberá cópias de quaisquer comentários ou correções "
+"que alguém possa anexar à trilha de auditoria do seu relatório de problemas."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:266
+msgid ""
+"If someone requests additional information from you, or you remember or "
+"discover something you did not mention in the initial report, please submit "
+"a follow up. The number one reason for a bug not getting fixed is lack of "
+"communication with the originator. The easiest way is to use the comment "
+"option on the individual PR's web page, which you can reach from the https://"
+"bugs.freebsd.org/bugzilla/query.cgi[PR search page]."
+msgstr ""
+"Se alguém solicitar informações adicionais de você, lembrar ou descobrir "
+"algo que você não mencionou no relatório inicial, por favor, adicione um "
+"novo comentário de acompanhamento. O motivo número um para um bug não ser "
+"corrigido é a falta de comunicação com o criador do relatório. A maneira "
+"mais fácil de fazer isso é usar a opção de comentário na página da Web "
+"individual do PR, que você pode acessar a partir da https://bugs.freebsd.org/"
+"bugzilla/query.cgi[página de pesquisa de PRs]."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:268
+msgid ""
+"If the problem report remains open after the problem has gone away, just add "
+"a comment saying that the problem report can be closed, and, if possible, "
+"explaining how or when the problem was fixed."
+msgstr ""
+"Se o relatório de problemas permanecer aberto após o desaparecimento do "
+"problema, basta adicionar um comentário dizendo que o relatório de problemas "
+"pode ser fechado e, se possível, explicar como ou quando o problema foi "
+"corrigido."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:272
+msgid ""
+"Sometimes there is a delay of a week or two where the problem report remains "
+"untouched, not assigned or commented on by anyone. This can happen when "
+"there is an increased problem report backlog or during a holiday season. "
+"When a problem report has not received attention after several weeks, it is "
+"worth finding a committer particularly interested in working on it."
+msgstr ""
+"As vezes, há um atraso de uma semana ou duas em que o relatório do problema "
+"permanece intocado, não atribuído ou comentado por alguém. Isto pode "
+"acontecer quando há um aumento na lista de pendências de relatórios de "
+"problemas ou durante uma temporada de feriados. Quando um relatório de "
+"problema não recebe atenção após várias semanas, vale a pena encontrar um "
+"committer particularmente interessado em trabalhar nele."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:274
+msgid ""
+"There are a few ways to do so, ideally in the following order, with a few "
+"days between attempting each communication channel:"
+msgstr ""
+"Existem algumas maneiras de se fazer isso, idealmente na seguinte ordem, com "
+"alguns dias entre a tentativa em cada canal de comunicação:"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:276
+msgid ""
+"Send an e-mail to extref:{handbook}eresources/[the relevant list, eresources-"
+"summary] seeking comments on the report."
+msgstr ""
+"Envie uma mensagem para extref:{handbook}eresources/[a lista em questão, "
+"eresources-summary] solicitando comentários sobre o relatório."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:277
+msgid ""
+"Join the relevant IRC channels. A partial listing is here: https://wiki."
+"freebsd.org/IrcChannels[]. Inform the people in that channel about the "
+"problem report and ask for assistance. Be patient and stay in the channel "
+"after posting, so that the people from different time zones around the world "
+"have a chance to catch up."
+msgstr ""
+"Junte-se aos canais relevantes do IRC. Uma lista parcial está aqui: https://"
+"wiki.freebsd.org/IrcChannels[]. Informe as pessoas nesse canal sobre o "
+"relatório de problemas e peça ajuda. Seja paciente e fique no canal depois "
+"de postar, para que as pessoas de diferentes fusos horários ao redor do "
+"mundo tenham a chance de responder."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:278
+msgid ""
+"Find committers interested in the problem that was reported. If the problem "
+"was in a particular tool, binary, port, document, or source file, check the "
+"https://cgit.FreeBSD.org[Git Repository]. Locate the last few committers who "
+"made substantive changes to the file, and try to reach them via IRC or "
+"email. A list of committers and their emails can be found in the extref:"
+"{contributors}[Contributors to FreeBSD] article."
+msgstr ""
+"Encontre committers interessados no problema que foi relatado. Se o problema "
+"estiver em uma ferramenta, binário, porta, documento ou arquivo fonte "
+"específico, verifique o https://cgit.FreeBSD.org[Repositório Git]. Localize "
+"os últimos committers que fizeram alterações substanciais no arquivo e tente "
+"falar com eles pelo IRC ou por email. Uma lista de committers e seus e-mails "
+"podem ser encontrados no artigo extref:{contributors}[Contribuidores do "
+"FreeBSD]."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:282
+msgid ""
+"Remember that these people are volunteers, just like maintainers and users, "
+"so they might not be immediately available to assist with the problem "
+"report. Patience and consistency in the follow-ups is highly advised and "
+"appreciated. With enough care and effort dedicated to that follow-up "
+"process, finding a committer to take care of the problem report is just a "
+"matter of time."
+msgstr ""
+"Lembre-se de que essas pessoas são voluntárias, assim como mantenedores e "
+"usuários, portanto, podem não estar disponíveis imediatamente para ajudar no "
+"relatório de problemas. Paciência e consistência nos acompanhamentos são "
+"altamente recomendados e apreciados. Com cuidado e esforço suficientemente "
+"dedicados a esse processo de acompanhamento, encontrar um committer para "
+"cuidar do relatório do problema é apenas uma questão de tempo."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:284
+#, no-wrap
+msgid "If There Are Problems"
+msgstr "Se Existir Problemas"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:288
+msgid ""
+"If you found an issue with the bug system, file a bug! There is a category "
+"for exactly this purpose. If you are unable to do so, contact the bug "
+"wranglers at mailto:bugmeister@FreeBSD.org[bugmeister@FreeBSD.org]."
+msgstr ""
+"Se você encontrou um problema com o sistema de bugs, registre um bug! Existe "
+"uma categoria exatamente para esse propósito. Se você não conseguir, entre "
+"em contato com os organizadores do bug em mailto:bugmeister@FreeBSD."
+"org[bugmeister@FreeBSD.org]."
+
+#. type: Title ==
+#: documentation/content/en/articles/problem-reports/_index.adoc:290
+#, no-wrap
+msgid "Further Reading"
+msgstr "Leitura Adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:294
+msgid ""
+"This is a list of resources relevant to the proper writing and processing of "
+"problem reports. It is by no means complete."
+msgstr ""
+"Esta é uma lista de recursos relevantes para a escrita adequada e "
+"processamento de relatórios de problemas. Não está de modo algum completo."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:296
+msgid ""
+"https://github.com/smileytechguy/reporting-bugs-effectively/blob/master/"
+"ENGLISH.md[How to Report Bugs Effectively]-an excellent essay by Simon G. "
+"Tatham on composing useful (non-FreeBSD-specific) problem reports."
+msgstr ""
+"https://github.com/smileytechguy/reporting-bugs-effectively/blob/master/"
+"ENGLISH.md[Como reportar bugs efetivamente] -um excelente ensaio de Simon G. "
+"Tatham sobre como compor de forma útil relatórios de problemas (não "
+"específicos do FreeBSD)."
+
+#. type: Plain text
+#: documentation/content/en/articles/problem-reports/_index.adoc:296
+msgid ""
+"extref:{pr-guidelines}[Problem Report Handling Guidelines]-valuable insight "
+"into how problem reports are handled by the FreeBSD developers."
+msgstr ""
+"extref:{pr-guidelines}[Diretrizes para manuseio de relatórios de problemas] "
+"--informações valiosas sobre como os relatórios de problemas são tratados "
+"pelos desenvolvedores do FreeBSD."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/rc-scripting/_index.adoc b/documentation/content/pt-br/articles/rc-scripting/_index.adoc
index 37dff7e0dd..786fc7b14d 100644
--- a/documentation/content/pt-br/articles/rc-scripting/_index.adoc
+++ b/documentation/content/pt-br/articles/rc-scripting/_index.adoc
@@ -1,14 +1,16 @@
---
-title: Scripts rc.d práticos no BSD
authors:
- - author: Yar Tikhiy
+ -
+ author: 'Yar Tikhiy'
email: yar@FreeBSD.org
-copyright: 2005-2006, 2012 The FreeBSD Project
-releaseinfo: "$FreeBSD$"
+copyright: '2005-2006, 2012 The FreeBSD Project'
+description: 'Um guia para escrever novos scripts rc.d e entender aqueles que já existem'
+tags: ["rc.d", "scripting", "guide", "tutorial", "FreeBSD"]
+title: 'Scripting rc.d na prática no BSD'
trademarks: ["freebsd", "netbsd", "general"]
---
-= Scripts rc.d práticos no BSD
+= Scripting rc.d na prática no BSD
:doctype: article
:toc: macro
:toclevels: 1
@@ -17,20 +19,32 @@ trademarks: ["freebsd", "netbsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/rc-scripting/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Os iniciantes podem achar difícil relacionar os fatos da documentação formal do framework [.filename]#rc.d# do BSD com as tarefas práticas do script [.filename]#rc.d#. Neste artigo, consideramos alguns casos típicos de complexidade crescente, vamos mostrar os recursos do [.filename]#rc.d# adequados para cada caso e vamos discutir como eles funcionam. Esse exame deve fornecer pontos de referência para um estudo mais aprofundado do design e da aplicação eficiente do [.filename]#rc.d#.
+Os iniciantes podem achar difícil relacionar os fatos da documentação formal sobre o framework [.filename]#rc.d# do BSD com as tarefas práticas de escrever scripts [.filename]#rc.d#. Neste artigo, consideramos alguns casos típicos de crescente complexidade, mostramos recursos do [.filename]#rc.d# adequados para cada caso e discutimos como eles funcionam. Essa análise deve fornecer pontos de referência para estudos posteriores do design e aplicação eficiente do [.filename]#rc.d#.
'''
@@ -39,26 +53,26 @@ toc::[]
[[rcng-intro]]
== Introdução
-Historicamente o BSD tinha um script de inicialização monolítico, o [.filename]#/etc/rc#. Ele era chamado pelo man:init[8] no momento da inicialização do sistema e executava todas as tarefas necessárias para a operação multi-usuário: verificação e montagem do sistemas de arquivos, configuração de rede, iniciava daemons e assim por diante. A lista precisa de tarefas não era a mesma em todos os sistemas; os administradores precisavam personalizá-lo. Com poucas exceções, o [.filename]#/etc/rc# teve que ser modificado, e os verdadeiros hackers gostaram disso.
+No histórico BSD, havia um script de inicialização monolítico, [.filename]#/etc/rc#. Ele era invocado pelo man:init[8] no momento da inicialização do sistema e realizava todas as tarefas de usuário necessárias para a operação multiusuário: verificação e montagem de sistemas de arquivos, configuração da rede, inicialização de daemons e assim por diante. A lista precisa de tarefas não era a mesma em todos os sistemas; os administradores precisavam personalizá-la. Com poucas exceções, o [.filename]#/etc/rc# tinha que ser modificado, e os verdadeiros hackers gostavam disso.
-O problema real com a abordagem monolítica era que ela não fornecia nenhum controle sobre os componentes individuais iniciados a partir do [.filename]#/etc/rc#. Por exemplo, o [.filename]#/etc/rc# não podia reiniciar um único daemon. O administrador do sistema tinha que encontrar o processo daemon manualmente, matá-lo, esperar até que ele realmente finalizasse, então procurar pelas flags no [.filename]#/etc/rc#, e finalmente digitar a linha de comando completa para iniciar o daemon novamente. A tarefa se tornaria ainda mais difícil e propensa a erros se o serviço de reinicialização consistisse em mais de um daemon ou exigisse ações adicionais. Em poucas palavras, o único script não cumpriu o objetivo dos scripts: tornar a vida do administrador do sistema mais fácil.
+O problema real com a abordagem monolítica era que ela não fornecia controle sobre os componentes individuais iniciados a partir do [.filename]#/etc/rc#. Por exemplo, o [.filename]#/etc/rc# não podia reiniciar um único daemon. O administrador do sistema tinha que encontrar o processo do daemon manualmente, matá-lo, aguardar até que ele realmente finalizasse, navegar por [.filename]#/etc/rc# em busca das flags e, finalmente, digitar a linha de comando completa para iniciar o daemon novamente. A tarefa se tornaria ainda mais difícil e propensa a erros se o serviço a ser reiniciado consistisse em mais de um daemon ou exigisse ações adicionais. Em poucas palavras, o script único falhou em cumprir o objetivo pelo qual um script é criado: tornar a vida do administrador do sistema mais fácil.
-Mais tarde, houve uma tentativa de dividir algumas partes do [.filename]#/etc/rc# para iniciar os subsistemas mais importantes separadamente. O exemplo notório foi o [.filename]#/etc/netstart# para configurar a rede. Ele permitia acessar a rede a partir do modo single-user, mas não se integrou bem ao processo de inicialização automática porque partes de seu código precisavam intercalar com ações essencialmente não relacionadas à rede. Foi por isso que o [.filename]#/etc/netstart# mudou para [.filename]#/etc/rc.network#. Este último não era mais um script comum; ele era composto por um emaranhado de funções man:sh[1] chamadas pelo [.filename]#/etc/rc# em diferentes estágios da inicialização do sistema. No entanto, a medida que as tarefas de inicialização cresciam variadas e sofisticadas, a abordagem "quase modular" tornou-se ainda mais engessada do que o monolítico [.filename]#/etc/rc#.
+Mais tarde, houve uma tentativa de dividir algumas partes do [.filename]#/etc/rc# para iniciar os subsistemas mais importantes separadamente. O exemplo notório foi o [.filename]#/etc/netstart# para iniciar a rede. Isso permitiu o acesso à rede no modo de usuário único, mas não se integrou bem ao processo de inicialização automática porque partes de seu código precisavam intercalar com ações essencialmente não relacionadas à rede. Foi por isso que o [.filename]#/etc/netstart# se transformou em [.filename]#/etc/rc.network#. Este último não era mais um script comum; era composto de grandes funções man:sh[1] complexas chamadas pelo [.filename]#/etc/rc# em diferentes estágios da inicialização do sistema. No entanto, à medida que as tarefas de inicialização ficaram mais diversas e sofisticadas, a abordagem "quase modular" tornou-se ainda mais pesada do que o monolítico [.filename]#/etc/rc# tinha sido.
-Sem um framework limpo e bem projetado, os scripts de inicialização tiveram que se curvar para satisfazer as necessidades de desenvolvimento rápido dos sistemas operacionais baseados no BSD. Tornou-se óbvio, finalmente, que mais passos eram necessários no caminho para construção de um sistema [.filename]#rc# extensível e customizável. Assim nasceu o BSD [.filename]#rc.d#. Seus pais reconhecidos foram o Luke Mewburn e a comunidade do NetBSD. Mais tarde ele foi importado para o FreeBSD. Seu nome se refere à localização dos scripts do sistema para serviços individuais, que é o [.filename]#/etc/rc.d#. Em breve, vamos aprender sobre mais componentes do sistema [.filename]#rc.d# e vamos ver como os scripts individuais são invocados.
+Sem um framework limpo e bem projetado, os scripts de inicialização tiveram que se dobrar para atender às necessidades dos sistemas operacionais baseados em BSD que estavam em rápida evolução. Tornou-se evidente, finalmente, que mais etapas eram necessárias para se chegar a um sistema [.filename]#rc# refinado, granular e extensível. Assim nasceu o [.filename]#rc.d# do BSD. Seus pais reconhecidos foram Luke Mewburn e a comunidade NetBSD. Mais tarde, foi importado para o FreeBSD. Seu nome se refere ao local dos scripts do sistema para serviços individuais, que está em [.filename]#/etc/rc.d#. Em breve, aprenderemos mais sobre os componentes do sistema [.filename]#rc.d# e veremos como os scripts individuais são invocados.
-As idéias básicas por trás do BSD [.filename]#rc.d# são _modularidade fina_ e __reutilização de código__. _Modularidade fina_ significa que cada "serviço básico", como um daemon do sistema ou uma tarefa de inicialização primitiva, obtém seu próprio script man:sh[] capaz de iniciar o serviço, pará-lo, recarregá-lo e verificar seu status. Uma ação específica é escolhida pelo argumento da linha de comando para o script. O script [.filename]#/etc/rc# ainda comanda a inicialização do sistema, mas agora ele simplesmente invoca os scripts menores um por um com o argumento `start`. É fácil executar tarefas de desligamento executando o mesmo conjunto de scripts com o argumento `stop`, o que é feito pelo [.filename]#/etc/rc.shutdown#. Observe como isso segue de perto o modo Unix de ter um conjunto de pequenas ferramentas especializadas, cada uma cumprindo sua tarefa da melhor forma possível. _Reutilização de código_ significa que operações comuns são implementadas como funções man:sh[1] e coletadas em [.filename]#/etc/rc.subr#. Agora, um script típico pode conter apenas algumas linhas de código man:sh[1]. Finalmente, uma parte importante do framework do [.filename]#rc.d# é man:rcorder[8], o qual ajuda o [.filename]#/etc/rc# a executar os pequenos scripts ordenadamente em relação às dependências entre eles. Ele também pode ajudar o [.filename]#/etc/rc.shutdown#, porque a ordem apropriada para a sequência de encerramento é oposta à da inicialização.
+As ideias básicas por trás do [.filename]#rc.d# do BSD são _modularidade fina_ e __reutilização de código__. _Modularidade fina_ significa que cada "serviço" básico, como um daemon do sistema ou uma tarefa de inicialização primitiva, possui seu próprio script man:sh[1] capaz de iniciar o serviço, pará-lo, recarregá-lo e verificar seu status. Uma ação específica é escolhida pelo argumento da linha de comando do script. O script [.filename]#/etc/rc# ainda conduz a inicialização do sistema, mas agora ele apenas invoca os scripts menores um por um com o argumento `start`. Também é fácil realizar tarefas de desligamento executando o mesmo conjunto de scripts com o argumento `stop`, que é feito por [.filename]#/etc/rc.shutdown#. Observe como isso segue de perto a maneira Unix de ter um conjunto de ferramentas especializadas pequenas, cada uma cumprindo sua tarefa da melhor maneira possível. _Reutilização de código_ significa que operações comuns são implementadas como funções man:sh[1] e coletadas em [.filename]#/etc/rc.subr#. Agora, um script típico pode ser composto apenas de algumas linhas de código man:sh[1]. Finalmente, uma parte importante do framework [.filename]#rc.d# é o man:rcorder[8], que ajuda o [.filename]#/etc/rc# a executar os pequenos scripts de maneira ordenada com respeito às dependências entre eles. Isso também pode ajudar o [.filename]#/etc/rc.shutdown#, porque a ordem apropriada para a sequência de desligamento é oposta à de inicialização.
-O design do BSD [.filename]#rc.d# é descrito no <<lukem, the original article by Luke Mewburn>>, e os componentes do [.filename]#rc.d# são documentados em grande detalhe nas <<manpages, the respective manual pages>>. No entanto, pode não parecer óbvio para um novato em [.filename]#rc.d# como amarrar os inúmeros pedaços juntos para criar um script bem estilizado para uma tarefa específica. Portanto, este artigo tentará uma abordagem diferente para descrever o [.filename]#rc.d#. Ele mostrará quais recursos devem ser usados em vários casos típicos e por quê. Note que este não é um documento explicativo porque nosso objetivo não é fornecer receitas prontas, mas mostrar algumas entradas fáceis no domínio do [.filename]#rc.d#. Nem este artigo é um substituto para as páginas de manual relevantes. Não hesite em consultá-los para obter uma documentação mais formal e completa ao ler este artigo.
+O design do BSD [.filename]#rc.d# é descrito no <<lukem, artigo original de Luke Mewburn>>, e os componentes do [.filename]#rc.d# são documentados em grande detalhe nas <<manpages, respectivas páginas do manual>>. No entanto, pode não ser óbvio para um iniciante no [.filename]#rc.d# como ele deve unir as numerosas partes para criar um script bem estruturado para uma tarefa específica. Portanto, este artigo tentará abordar o [.filename]#rc.d# de forma diferente. Mostrará quais recursos devem ser usados em vários casos típicos e por que. Observe que este não é um documento de "como fazer", porque nosso objetivo não é fornecer receitas prontas, mas mostrar algumas entradas fáceis no mundo do [.filename]#rc.d#. Este artigo também não substitui as páginas do manual relevantes. Não hesite em consultá-las para obter documentação mais formal e completa enquanto lê este artigo.
-Existem pré-requisitos para entender este artigo. Primeiro de tudo, você deve estar familiarizado com a linguagem de script man:sh[1] para poder dominar o [.filename]#rc.d#. Além disso, você deve saber como o sistema executa as tarefas de inicialização e encerramento do userland, o que está descrito em man:rc[8].
+Existem pré-requisitos para entender este artigo. Em primeiro lugar, você deve estar familiarizado com a linguagem de script man:sh[1] para dominar o [.filename]#rc.d#. Além disso, você deve saber como o sistema realiza tarefas de inicialização e desligamento do espaço do usuário, o que é descrito em man:rc[8].
-Este artigo foca no branch [.filename]#rc.d# do FreeBSD. No entanto, ele também pode ser útil para os desenvolvedores do NetBSD, porque os dois branchs [.filename]#rc.d# do BSD não apenas compartilham o mesmo design, mas também permanecem similares em seus aspectos visíveis aos autores do script.
+Este artigo foca no ramo do FreeBSD do [.filename]#rc.d#. No entanto, ele pode ser útil também para desenvolvedores do NetBSD, pois os dois ramos do [.filename]#rc.d# não apenas compartilham o mesmo design, mas também permanecem similares em seus aspectos visíveis aos autores de scripts.
[[rcng-task]]
== Esboçando a tarefa
-Um pouco de consideração antes de iniciar o `$EDITOR` não irá prejudicar. Para escrever um script [.filename]#rc.d# corretamente customizado para um serviço do sistema, devemos poder responder as seguintes questões primeiro:
+Uma pequena reflexão antes de iniciar o `$EDITOR` não fará mal. Para escrever um script [.filename]#rc.d# bem elaborado para um serviço do sistema, devemos ser capazes de responder às seguintes perguntas primeiro:
* O serviço é obrigatório ou opcional?
* O script servirá um único programa, por exemplo, um daemon, ou realizará ações mais complexas?
@@ -90,67 +104,67 @@ load_rc_config $name <.>
run_rc_command "$1" <.>
....
-Os pontos a serem observadas são:
+Os pontos a serem observados são:
-&#10122; Um script interpretado deve começar com a linha mágica "shebang". Essa linha especifica o programa interpretador para o script. Devido a linha shebang, o script pode ser invocado exatamente como um programa binário, desde que tenha o bit de execução definido. (Veja man:chmod[1].) Por exemplo, um administrador do sistema pode executar nosso script manualmente, a partir da linha de comando:
+&#10122; Um script interpretado deve começar com a linha mágica "shebang". Essa linha especifica o programa interpretador para o script. Devido à linha shebang, o script pode ser invocado exatamente como um programa binário, desde que tenha o bit de execução definido. (Veja man:chmod[1].) Por exemplo, um administrador do sistema pode executar nosso script manualmente, a partir da linha de comando:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/dummy start
....
[NOTE]
====
-Para ser adequadamente gerenciado pelo framework do [.filename]#rc.d#, seus scripts precisam ser escritos na linguagem man:sh[1]. Se você tiver um serviço ou port que use um utilitário de controle binário ou uma rotina de inicialização escrita em outra linguagem, instale este elemento em [.filename]#/usr/sbin# (para o sistema) ou em [.filename]#/usr/local/sbin# (para um port) e invoque-o por meio de um script man:sh[1] no diretório apropriado do [.filename]#rc.d#.
+Para ser gerenciado corretamente pelo framework [.filename]#rc.d#, os scripts devem ser escritos na linguagem man:sh[1]. Se você tiver um serviço ou port que usa um utilitário de controle binário ou uma rotina de inicialização escrita em outra linguagem, instale esse elemento em [.filename]#/usr/sbin# (para o sistema) ou [.filename]#/usr/local/sbin# (para ports) e chame-o a partir de um script man:sh[1] no diretório [.filename]#rc.d# apropriado.
====
[TIP]
====
-Caso você queira aprender os detalhes do porque os scripts [.filename]#rc.d# devem ser escritos na linguagem man:sh[1], veja como o [.filename]#/etc/rc# invoca-os por meio de `run_rc_script`, e então estude a implementação de `run_rc_script` em [.filename]#/etc/rc. subr#.
+Se você gostaria de aprender os detalhes de por que os scripts [.filename]#rc.d# devem ser escritos na linguagem man:sh[1], veja como o [.filename]#/etc/rc# os invoca por meio de `run_rc_script` e, em seguida, estude a implementação de `run_rc_script` em [.filename]#/etc/rc.subr#.
====
-&#10123; Em [.filename]#/etc/rc.subr#, várias funções man:sh[1] estão definidas para serem utilizadas por um script [.filename]#rc.d#. As funções estão documentadas em man:rc.subr[8]. Embora seja teoricamente possível escrever um script [.filename]#rc.d# sem usar o man:rc.subr[8], as suas funções são extremamente úteis e tornam o trabalho mais fácil. Portanto, não é de surpreender que todos recorram a scripts man:rc.subr[8] em [.filename]#rc.d#. Nós não vamos ser uma exceção.
+&#10123; Em [.filename]#/etc/rc.subr#, uma série de funções man:sh[1] estão definidas para serem utilizadas por um script [.filename]#rc.d#. As funções estão documentadas em man:rc.subr[8]. Embora seja teoricamente possível escrever um script [.filename]#rc.d# sem nunca usar o man:rc.subr[8], suas funções provam ser extremamente úteis e tornam o trabalho uma ordem de magnitude mais fácil. Portanto, não é surpresa que todo mundo recorra ao man:rc.subr[8] em scripts [.filename]#rc.d#. Não seremos uma exceção.
-Um script [.filename]#rc.d# deve "incluir" o [.filename]#/etc/rc.subr# (isto por ser feito usando o comando "`.`") _antes_ que ele chame as funções do man:rc.subr[8] para que o man:sh[1] tenha a oportunidade para aprender as funções. O estilo preferido é incluir o [.filename]#/etc/rc.subr# antes de tudo.
+Um script [.filename]#rc.d# deve fazer o "source" do [.filename]#/etc/rc.subr# (inclua-o usando "`.`") _antes_ de chamar as funções man:rc.subr[8] para que o man:sh[1] tenha a oportunidade de aprender as funções. O estilo preferido é incluir o [.filename]#/etc/rc.subr# antes de tudo.
[NOTE]
====
-Algumas funções úteis relacionadas a rede são fornecidas por outro arquivo include, o [.filename]#/etc/network.subr#.
+Algumas funções úteis relacionadas à rede são fornecidas por outro arquivo de inclusão, o [.filename]#/etc/network.subr#.
====
-&#10124; [[name-var]]A variável obrigatória `name` especifica o nome do nosso script. Ela é exigida pelo man:rc.subr[8]. Ou seja, cada script [.filename]#rc.d# __deve__ definir a variável `name` antes de chamar funções do man:rc.subr[8].
+&#10124; A variável obrigatória `name` especifica o nome do nosso script. Ela é exigida pelo man:rc.subr[8]. Isso significa que cada script [.filename]#rc.d# _deve_ definir `name` antes de chamar funções do man:rc.subr[8].
Agora é o momento certo para escolher um nome exclusivo para o nosso script de uma vez por todas. Vamos usá-lo em vários lugares enquanto desenvolvemos o script. Para começar, também vamos dar o mesmo nome ao arquivo de script.
[NOTE]
====
-O estilo atual do script [.filename]#rc.d# é incluir valores atribuídos as variáveis entre aspas duplas. Tenha em mente que é apenas um problema de estilo que nem sempre pode ser aplicável. Você pode omitir com segurança as aspas das palavras simples sem os metacaracteres do man:sh[1] nelas, enquanto em certos casos você precisará de aspas simples para evitar qualquer interpretação do valor pelo man:sh[1]. Um programador deve ser capaz de dizer a sintaxe da linguagem a partir das convenções de estilo e bem como de usá-las sabiamente.
+O estilo atual de escrita de scripts [.filename]#rc.d# é envolver os valores atribuídos às variáveis em aspas duplas. Tenha em mente que isso é apenas uma questão de estilo que nem sempre é aplicável. Você pode seguramente omitir as aspas ao redor de palavras simples sem metacaracteres man:sh[1], enquanto em certos casos você precisará de aspas simples para evitar qualquer interpretação do valor por man:sh[1]. Um programador deve ser capaz de distinguir a sintaxe da linguagem das convenções de estilo e usá-las sabiamente.
====
-&#10125; A idéia principal por trás do man:rc.subr[8] é que um script [.filename]#rc.d# fornece manipuladores, ou métodos, para o man:rc.subr[8] invocar. Em particular, `start`, `stop` e outros argumentos para um script [.filename]#rc.d# são tratados desta maneira. Um método é uma expressão man:sh[1] armazenada em uma variável denominada `argument_cmd`, no qual _argument_ corresponde ao que pode ser especificado na linha de comando do script. Vamos ver mais adiante como o man:rc.subr[8] fornece métodos default para os argumentos padrão.
+&#10125; Cada script [.filename]#rc.d# fornece manipuladores, ou métodos, para o man:rc.subr[8] invocar. Em particular, `start`, `stop`, e outros argumentos para um script [.filename]#rc.d# são manipulados desta forma. Um método é uma expressão man:sh[1] armazenada em uma variável chamada `argument_cmd`, onde _argument_ corresponde ao que pode ser especificado na linha de comando do script. Veremos mais tarde como o man:rc.subr[8] fornece métodos padrão para os argumentos padrão.
[NOTE]
====
-Para tornar o código em [.filename]#rc.d# mais uniforme, é comum usar `${name}` onde for apropriado. Assim, várias linhas podem ser copiadas de um script para outro.
+Para tornar o código em [.filename]#rc.d# mais uniforme, é comum usar `${name}` sempre que apropriado. Assim, várias linhas podem ser simplesmente copiadas de um script para outro.
====
-&#10126; Devemos ter em mente que o man:rc.subr[8] fornece métodos default para os argumentos padrões. Consequentemente, devemos sobrescrever um método default com uma expressão no-op man:sh[] se desejarmos que ele não faça nada.
+&#10126; Devemos ter em mente que o man:rc.subr[8] fornece métodos padrões para os argumentos padrões. Consequentemente, devemos substituir um método padrão por uma expressão man:sh[1] sem efeito se quisermos que ele não faça nada.
-&#10127; O corpo de um método sofisticado pode ser implementado como uma função. É uma boa ideia tornar o nome da função significativo.
+&#10127; O corpo de um método sofisticado pode ser implementado como uma função. É uma boa ideia dar um nome significativo à função.
[IMPORTANT]
====
-É altamente recomendado adicionar o prefixo `${name}` aos nomes de todas as funções definidas em nosso script, para que eles nunca entrem em conflito com as funções do man:rc.subr[8] ou outro arquivo de inclusão comum.
+Recomenda-se fortemente adicionar o prefixo `${name}` aos nomes de todas as funções definidas no nosso script para que nunca entrem em conflito com as funções de man:rc.subr[8] ou outro arquivo de inclusão comum.
====
-&#10128; Essa chamada ao man:rc.subr[8] carrega as variáveis do man:rc.conf[5]. Nosso script não faz uso delas ainda, mas ainda assim é recomendado carregar o man:rc.conf[5] pois podem haver variáveis man:rc.conf[5] controlando o man:rc.subr[8] propriamente dito.
+&#10128; Essa chamada para o man:rc.subr[8] carrega as variáveis do man:rc.conf[5]. Nosso script ainda não as usa, mas ainda é recomendável carregar o man:rc.conf[5] porque pode haver variáveis do man:rc.conf[5] controlando o man:rc.subr[8] em si.
-&#10129; Geralmente este é o último comando em um script [.filename]#rc.d#. Ele invoca o maquinário man:rc.subr[8] para executar a ação solicitada usando as variáveis e métodos que nosso script forneceu.
+&#10129; Geralmente, esse é o último comando em um script [.filename]#rc.d#. Ele invoca a maquinaria do man:rc.subr[8] para realizar a ação solicitada usando as variáveis e métodos que o nosso script forneceu.
[[rcng-confdummy]]
== Um script fictício configurável
-Agora vamos adicionar alguns controles ao nosso script fictício. Como você deve saber, os scripts [.filename]#rc.d# são controlados pelo man:rc.conf[5]. Felizmente, o man:rc.subr[8] esconde todas as complicações de nós. O script a seguir usa o man:rc.conf[5] via man:rc.subr[8] para ver se ele está habilitado em primeiro lugar, e buscar uma mensagem para mostrar no momento da inicialização. Estas duas tarefas são de fato independentes. Por um lado, um script [.filename]#rc.d# pode apenas suportar a ativação e desativação de seu serviço. Por outro lado, um script [.filename]#rc.d# obrigatório pode ter variáveis de configuração. Nós vamos fazer as duas coisas no mesmo script:
+Agora vamos adicionar alguns controles ao nosso script fictício. Como você deve saber, scripts [.filename]#rc.d# são controlados com o man:rc.conf[5]. Felizmente, o man:rc.subr[8] oculta todas as complicações para nós. O script a seguir usa o man:rc.conf[5] por meio do man:rc.subr[8] para verificar se está habilitado em primeiro lugar e para buscar uma mensagem para ser exibida na inicialização. Essas duas tarefas, na verdade, são independentes. Por um lado, um script [.filename]#rc.d# pode apenas suportar a habilitação e desabilitação do seu serviço. Por outro lado, um script [.filename]#rc.d# obrigatório pode ter variáveis de configuração. No entanto, faremos as duas coisas no mesmo script:
[.programlisting]
....
@@ -178,43 +192,43 @@ run_rc_command "$1"
O que mudou neste exemplo?
-&#10122; A variável `rcvar` especifica o nome da variável do botão ON/OFF.
+&#10122; A variável `rcvar` especifica o nome da variável do botão LIGA/DESLIGA.
-&#10123; Agora o `load_rc_config` é invocado anteriormente no script, antes que qualquer variável do man:rc.conf[5] seja acessada.
+&#10123; Agora, o `load_rc_config` é invocado mais cedo no script, antes que quaisquer variáveis do man:rc.conf[5] sejam acessadas.
[NOTE]
====
-Ao examinar os scripts [.filename]#rc.d#, tenha em mente que o man:sh[1] adia a avaliação de expressões em uma função até que a função seja chamada. Portanto, não é um erro invocar `load_rc_config` tão tarde quanto antes do `run_rc_comman` e ainda acessar as variáveis do man:rc.conf[5] a partir do método das funções exportadas para o `run_rc_command`. Isto ocorre porque as funções do método devem ser chamadas por `run_rc_command`, que é chamado _após_ o `load_rc_config`.
+Enquanto examina os scripts [.filename]#rc.d#, tenha em mente que o man:sh[1] adia a avaliação de expressões em uma função até que esta seja chamada. Portanto, não é um erro invocar `load_rc_config` tão tarde quanto logo antes de `run_rc_command` e ainda assim acessar as variáveis man:rc.conf[5] das funções de método exportadas para `run_rc_command`. Isso ocorre porque as funções de método devem ser chamadas por `run_rc_command`, que é invocado _após_ `load_rc_config`.
====
-&#10124; Um aviso será emitido pelo `run_rc_command` se o próprio `rcvar` estiver definido, mas a variável de knob indicada não estiver definida. Se o seu script [.filename]#rc.d# for para o sistema base, você deve adicionar uma configuração padrão para o knob no [.filename]#/etc/defaults/rc.conf# e documentá-lo em man:rc.conf[5]. Caso contrário, será o seu script que deverá fornecer uma configuração padrão para o knob. A abordagem canônica para o último caso é mostrada no exemplo.
+&#10124; Aviso será emitido pelo `run_rc_command` se o `rcvar` em si estiver configurado, mas a variável de controle indicada estiver desativada. Se o seu script [.filename]#rc.d# é para o sistema base, você deve adicionar uma configuração padrão para o knob em [.filename]#/etc/defaults/rc.conf# e documentá-lo em man:rc.conf[5]. Caso contrário, é seu script que deve fornecer uma configuração padrão para o knob. A abordagem canônica para o último caso é mostrada no exemplo.
[NOTE]
====
-Você pode fazer o man:rc.subr[8] agir como se o knob fosse definido como `ON`, independentemente da sua configuração atual, prefixando o argumento para o script com `one` ou `force`, como em `onestart` ou `forcestop`. Tenha em mente que o `force` tem outros efeitos perigosos que mencionaremos abaixo, enquanto `one` apenas sobrescreve o knob ON/OFF. Por exemplo, suponha que `dummy_enable` seja `OFF`. O comando a seguir executará o método `start` apesar da configuração:
+Você pode fazer o man:rc.subr[8] agir como se o botão estivesse definido como `ON`, independentemente de sua configuração atual, prefixando o argumento do script com `one` ou `force`, como em `onestart` ou `forcestop`. No entanto, tenha em mente que `force` tem outros efeitos perigosos que abordaremos abaixo, enquanto `one` apenas substitui o botão ON/OFF. Por exemplo, suponha que `dummy_enable` esteja definido como `OFF`. O seguinte comando executará o método `start` apesar da configuração:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/dummy onestart
....
====
-&#10125; Agora, a mensagem a ser mostrada no momento da inicialização não é mais codificada no script. Ela é especificada por uma variável do man:rc.conf[5] chamada `dummy_msg`. Este é um exemplo trivial de como as variáveis do man:rc.conf[5] podem controlar um script [.filename]#rc.d#.
+&#10125; Agora a mensagem a ser exibida na inicialização não é mais codificada no script. É especificada por uma variável man:rc.conf[5] chamada `dummy_msg`. Este é um exemplo trivial de como as variáveis man:rc.conf[5] podem controlar um script [.filename]#rc.d#.
[IMPORTANT]
====
-Os nomes de todas as variáveis do man:rc.conf[5] usadas exclusivamente pelo nosso script _devem_ possuir o mesmo prefixo: `${name}_`. Por exemplo: `dummy_mode`, `dummy_state_file`, e assim por diante.
+Os nomes de todas as variáveis man:rc.conf[5] usadas exclusivamente pelo nosso script _devem_ ter o mesmo prefixo: `${name}_`. Por exemplo: `dummy_mode`, `dummy_state_file`, e assim por diante.
====
[NOTE]
====
-Embora seja possível usar um nome mais curto internamente, por exemplo, apenas `msg`, adicionar o prefixo exclusivo `${name}_` a todos os nomes globais introduzidos pelo nosso script nos salvará de possíveis colisões com o nome das funções existentes no man:rc.subr[8].
+Embora seja possível usar um nome mais curto internamente, por exemplo, apenas `msg`, adicionar o prefixo único `${name}_` a todos os nomes globais introduzidos pelo nosso script nos salvará de possíveis colisões com o namespace do man:rc.subr[8].
-Como regra, os scripts [.filename]#rc.d# do sistema base não precisam fornecer valores padrões para as suas variáveis man:rc.conf[5] porque os padrões devem ser definidos em [.filename]#/etc/defaults/rc.conf#. Por outro lado, os scripts [.filename]#rc.d# para os ports devem fornecer os valores padrões, conforme mostrado no exemplo.
+Como regra geral, os scripts [.filename]#rc.d# do sistema base não precisam fornecer valores padrão para suas variáveis man:rc.conf[5], pois os valores padrão devem ser definidos em [.filename]#/etc/defaults/rc.conf#. Por outro lado, os scripts [.filename]#rc.d# para ports devem fornecer os valores padrão conforme mostrado no exemplo.
====
-&#10126; Aqui usamos `dummy_msg` para realmente controlar nosso script, ou seja, para emitir uma mensagem variável. O uso de uma função de shell é um exagero aqui, já que ele só executa um único comando; uma alternativa igualmente válida seria:
+&#10126; Aqui usamos `dummy_msg` para controlar nosso script, ou seja, para emitir uma mensagem variável. O uso de uma função shell é excessivo aqui, uma vez que ela executa apenas um único comando; uma alternativa igualmente válida é:
[.programlisting]
....
@@ -224,7 +238,7 @@ start_cmd="echo \"$dummy_msg\""
[[rcng-daemon]]
== Inicialização e desligamento de um daemon simples
-Dissemos anteriormente que o man:rc.subr[8] poderia fornecer métodos padrão. Obviamente, estes padrões não podem ser muito gerais. Eles são adequados para o caso comum de iniciar e encerrar um programa daemon simples. Vamos supor agora que precisamos escrever um script [.filename]#rc.d# para um daemon chamado `mumbled`. Aqui está:
+Dissemos anteriormente que o man:rc.subr[8] pode fornecer métodos padrões. Obviamente, tais padrões não podem ser muito gerais. Eles são adequados para o caso comum de iniciar e desligar um programa de daemon simples. Vamos supor agora que precisamos escrever um script [.filename]#rc.d# para um daemon chamado `mumbled`. Aqui está:
[.programlisting]
....
@@ -243,20 +257,20 @@ run_rc_command "$1"
Agradavelmente simples, não é? Vamos examinar nosso pequeno script. A única coisa nova a observar é o seguinte:
-&#10122; A variável `command` é significativa para o man:rc.subr[8]. Se estiver definido, o man:rc.subr[8] agirá de acordo com o cenário de servir um daemon convencional. Em particular, os métodos padrão serão fornecidos para tais argumentos: `start`, `stop`, `restart`, `poll`, e `status`.
+&#10122; A variável `command` é significativa para man:rc.subr[8]. Se ela estiver definida, man:rc.subr[8] agirá de acordo com o cenário de servir a um daemon convencional. Em particular, os métodos padrão serão fornecidos para esses argumentos: `start`, `stop`, `restart`, `poll` e `status`.
-O daemon será iniciado executando `$command` com os sinalizadores de linha de comando especificados por `$mumbled_flags`. Assim, todos os dados de entrada para o método padrão `start` estão disponíveis nas variáveis configuradas pelo nosso script. Ao contrário do `start`, outros métodos podem requerer informações adicionais sobre o processo iniciado. Por exemplo, `stop` deve conhecer o PID do processo para terminá-lo. No presente caso, man:rc.subr[8]varrerá a lista de todos os processos, procurando por um processo com seu nome igual a `$procname`. Esta última é outra variável de significado para man:rc.subr[8], e seu valor é padronizado para `command`. Em outras palavras, quando definimos o `command`, `procname` é efetivamente definido para o mesmo valor. Isso permite que nosso script mate o daemon e verifique se ele está sendo executado em primeiro lugar.
+O daemon será iniciado executando `$command` com as flags de linha de comando especificadas por `$mumbled_flags`. Assim, todos os dados de entrada para o método `start` padrão estão disponíveis nas variáveis definidas pelo nosso script. Ao contrário de `start`, outros métodos podem exigir informações adicionais sobre o processo iniciado. Por exemplo, `stop` deve saber o PID do processo para terminá-lo. No caso presente, man:rc.subr[8] irá pesquisar a lista de todos os processos, procurando por um processo com o nome igual a `procname`. Este último é outra variável com significado para man:rc.subr[8], e seu valor padrão é o de `command`. Em outras palavras, quando definimos `command`, `procname` é efetivamente definido para o mesmo valor. Isso permite que nosso script mate o daemon e verifique se ele está em execução.
[NOTE]
====
-Alguns programas são, na verdade, scripts executáveis. O sistema executa esse script iniciando seu interpretador e passando o nome do script para ele como um argumento de linha de comando. Isso é refletido na lista de processos, que podem confundir o man:rc.subr[8]. Você também deve definir o `command_interpreter` para permitir que o man:rc.subr[8] saiba o nome real do processo se o `$command` é um script.
+Algumas vezes, programas são de fato scripts executáveis. O sistema executa esse script iniciando o seu interpretador e passando o nome do script como um argumento na linha de comando. Isso é refletido na lista de processos, o que pode confundir man:rc.subr[8]. Você deve adicionalmente definir `command_interpreter` para que man:rc.subr[8] saiba o nome real do processo se `$command` for um script.
-Para cada script [.filename]#rc.d#, existe uma variável man:rc.conf[] que tem precedência sobre `command`. Seu nome é construído da seguinte forma: `${name}_program`, onde `name` é a variável obrigatória que discutimos <<name-var, earlier>>. Por exemplo, neste caso, será `mumbled_program`. É man:rc.subr[8] que organiza `${name}_program` para substituir o comando.
+A cada script [.filename]#rc.d#, há uma variável opcional do man:rc.conf[5] que tem precedência sobre `command`. Seu nome é construído da seguinte forma: `${name}_program`, onde `name` é a variável obrigatória discutida anteriormente. Por exemplo, neste caso, será `mumbled_program`. É o man:rc.subr[8] que arruma `${name}_program` para substituir `command`.
-Obviamente, o man:sh[1] permitirá que você defina `${name}_program` a partir do man:rc.conf[5] ou o próprio script, mesmo que o `command` esteja indefinido. Nesse caso, as propriedades especiais de `${name}_program` são perdidas e se tornam uma variável comum que seu script pode usar para seus próprios propósitos. No entanto, o uso exclusivo de `${name}_program` é desencorajado porque usá-lo junto com o `command` tornou-se um idioma na escrita de scripts [.filename]#rc.d#.
+Claro que o man:sh[1] permite definir `${name}_program` a partir do man:rc.conf[5] ou do próprio script, mesmo se `command` não estiver definido. Nesse caso, as propriedades especiais de `${name}_program` são perdidas, e ela se torna uma variável comum que o script pode usar para seus próprios fins. No entanto, o uso exclusivo de `${name}_program` é desencorajado, pois usá-la em conjunto com `command` se tornou idiomático em [.filename]#rc.d# scripting.
====
-Para obter informações mais detalhadas sobre métodos padrões, consulte man:rc.subr[8].
+Para obter informações mais detalhadas sobre os métodos padrões, consulte man:rc.subr[8].
[[rcng-daemon-adv]]
== Inicialização e desligamento de um daemon avançado
@@ -277,7 +291,7 @@ command_args="mock arguments > /dev/null 2>&1" <.>
pidfile="/var/run/${name}.pid" <.>
-required_files="/etc/${name}.conf /usr/shared/misc/${name}.rules" <.>
+required_files="/etc/${name}.conf /usr/share/misc/${name}.rules" <.>
sig_reload="USR1" <.>
@@ -319,75 +333,75 @@ load_rc_config $name
run_rc_command "$1"
....
-&#10122; Argumentos adicionais para `$command` podem ser passados em `command_args`. Eles serão adicionados a linha de comando após `$mumbled_flags`. Como a linha de comando final é passada para `eval` para sua execução real, os redirecionamentos de entrada e saída podem ser especificados em `command_args`.
+&#10122; Argumentos adicionais para `$command` podem ser passados em `command_args`. Eles serão adicionados à linha de comando após `$mumbled_flags`. Como a linha de comando final é passada para `eval` para sua execução real, redirecionamentos de entrada e saída podem ser especificados em `command_args`.
[NOTE]
====
-_Nunca_ inclua opções tracejadas, como `-X` ou `--foo`, em `command_args`. O conteúdo de `command_args` aparecerá no final da linha de comando final, portanto é provável que eles sigam os argumentos presentes em `${name}_flags`; mas a maioria dos comandos não reconhecerá opções tracejadas após argumentos comuns. Uma maneira melhor de passar opções adicionais para `$command` é adicioná-las ao início de `${name}_flags`. Outra maneira é modificar `rc_flags` <<rc-flags, as shown later>>.
+_Nunca_ inclua opções com hífen, como `-X` ou `--foo`, em `command_args`. O conteúdo de `command_args` aparecerá no final da linha de comando final, portanto, é provável que sigam argumentos presentes em `${name}_flags`; mas a maioria dos comandos não reconhecerá opções com hífen após argumentos comuns. Uma maneira melhor de passar opções adicionais para `$command` é adicioná-las no início de `${name}_flags`. Outra maneira é modificar `rc_flags` <<rc-flags, conforme mostrado posteriormente>>.
====
-&#10123; Um daemon de boas maneiras deve criar um _pidfile_ para que seu processo possa ser encontrado com mais facilidade e confiabilidade. A variável `pidfile`, se configurada, informa ao man:rc.subr[8] onde pode encontrar o pidfile para seus métodos padrão possam usar.
+&#10123; Um daemon bem comportado deve criar um _pidfile_ para que seu processo possa ser encontrado de forma mais fácil e confiável. A variável `pidfile`, se definida, informa ao man:rc.subr[8] onde ele pode encontrar o pidfile para ser utilizado em seus métodos padrões.
[NOTE]
====
-De fato, o man:rc.subr[8] também usará o pidfile para ver se o daemon já está em execução antes de iniciá-lo. Esta verificação pode ser ignorada usando o argumento `faststart`.
+De fato, o man:rc.subr[8] também usa o pidfile para ver se o daemon já está em execução antes de iniciá-lo. Essa verificação pode ser ignorada usando o argumento `faststart`.
====
-&#10124; Se o daemon não puder ser executado a menos que existam certos arquivos, apenas liste-os em `required_files`, e man:rc.subr[8] irá verificar se esses arquivos existem antes de iniciar o daemon. Também existem `required_dirs` e `required_vars` para diretórios e variáveis de ambiente, respectivamente. Todos eles são descritos em detalhes em man:rc.subr[8].
+&#10124; Se o daemon não puder ser executado a menos que certos arquivos existam, basta listá-los em `required_files`, e o man:rc.subr[8] verificará se esses arquivos existem antes de iniciar o daemon. Existem também `required_dirs` e `required_vars` para diretórios e variáveis de ambiente, respectivamente. Todos eles são descritos em detalhes no man:rc.subr[8].
[NOTE]
====
-O método padrão de man:rc.subr[8] pode ser forçado a ignorar as verificações de pré-requisitos usando `forcestart` como o argumento para o script.
+O método padrão do man:rc.subr[8] pode ser forçado a pular as verificações de pré-requisito usando `forcestart` como argumento para o script.
====
-&#10125; Podemos personalizar sinais para enviar para o daemon caso eles sejam diferentes dos mais conhecidos. Em particular, `sig_reload` especifica o sinal que faz o daemon recarregar sua configuração; é `SIGHUP` por padrão. Outro sinal é enviado para parar o processo do daemon; o padrão é `SIGTERM`, mas isso pode ser alterado definindo `sig_stop` apropriadamente.
+&#10125; Podemos personalizar sinais a serem enviados ao daemon caso eles difiram dos sinais conhecidos. Em particular, `sig_reload` especifica o sinal que faz com que o daemon recarregue sua configuração; por padrão, é o SIGHUP. Outro sinal é enviado para interromper o processo do daemon; o padrão é o SIGTERM, mas isso pode ser alterado configurando `sig_stop` adequadamente.
[NOTE]
====
-Os nomes dos sinais devem ser especificados para o man:rc.subr[8] sem o prefixo `SIG`, como é mostrado no exemplo. A versão do FreeBSD do man:kill[1] pode reconhecer o prefixo `SIG`, mas as versões de outros tipos de sistema operacional não.
+As sinalizações devem ser especificadas para o man:rc.subr[8] sem o prefixo `SIG`, como é mostrado no exemplo. A versão do FreeBSD do man:kill[1] pode reconhecer o prefixo `SIG`, mas as versões de outros sistemas operacionais podem não reconhecer.
====
-&#10126;&#10127; Realizar tarefas adicionais antes ou depois dos métodos padrão é fácil. Para cada argumento de comando suportado pelo nosso script, podemos definir o argumento `_precmd` e `_postcmd`. Esses comandos no man:sh[1] são invocados antes e depois do respectivo método, como é evidente em seus nomes.
+&#10126;&#10127; Realizar tarefas adicionais antes ou depois dos métodos padrões é fácil. Para cada argumento de comando suportado por nosso script, podemos definir `argument_precmd` e `argument_postcmd`. Esses comandos man:sh[1] são invocados antes e depois do respectivo método, como é evidente pelos seus nomes.
[NOTE]
====
-Sobrescrever um método padrão com um `argumento _cmd` personalizado ainda não nos impede de fazer uso do `argumento _precmd` ou `argumento _postcmd` se precisarmos. Em particular, o primeiro é bom para verificar condições personalizadas e sofisticadas que devem ser atendidas antes de executar o comando em si. Usar o `argumento _precmd` junto com o `argumento _cmd` nos permite separar logicamente as verificações da ação.
+Sobrescrever um método padrão com um `argument_cmd` personalizado ainda não nos impede de usar `argument_precmd` ou `argument_postcmd` se precisarmos. Em particular, o primeiro é bom para verificar condições personalizadas e sofisticadas que devem ser atendidas antes de executar o próprio comando. Usar `argument_precmd` juntamente com `argument_cmd` nos permite separar logicamente as verificações da ação.
-Não se esqueça de que você pode amontoar qualquer expressão válida do man:sh[1] nos métodos, pré e pós-comandos definidos por você. Apenas invocar uma função que faz com que o trabalho real seja um bom estilo na maioria dos casos, mas nunca deixe o estilo limitar sua compreensão do que está acontecendo por trás da cortina.
+Não se esqueça de que você pode colocar qualquer expressão válida do man:sh[1] nos métodos, pre e pós comandos que você define. Invocar uma função que realiza o trabalho real é um bom estilo na maioria dos casos, mas nunca deixe o estilo limitar sua compreensão do que está acontecendo nos bastidores.
====
-&#10128; Se quisermos implementar argumentos customizados, que também podem ser considerados como _comandos_ para o nosso script, precisamos listá-los em `extra_commands` e fornecer métodos para manipulá-los.
+&#10128; Se quisermos implementar argumentos personalizados, que também podem ser considerados como _comandos_ para o nosso script, precisamos listá-los em `extra_commands` e fornecer métodos para lidar com eles.
[NOTE]
====
-O comando `reload` é especial. Por um lado, tem um método predefinido em man:rc.subr[8]. Por outro lado, `reload` não é oferecido por padrão. A razão é que nem todos os daemons usam o mesmo mecanismo de recarga e alguns não têm nada para recarregar. Portanto, precisamos solicitar explicitamente que a funcionalidade incorporada seja fornecida. Podemos fazer isso via `extra_commands`.
+O comando `reload` é especial. Por um lado, ele possui um método predefinido em man:rc.subr[8]. Por outro lado, `reload` não é oferecido por padrão. A razão é que nem todos os daemons usam o mesmo mecanismo de recarga e alguns não têm nada para recarregar. Portanto, precisamos pedir explicitamente que a funcionalidade integrada seja fornecida. Podemos fazer isso por meio de `extra_commands`.
-O que obtemos do método padrão para `reload`? Muitas vezes, os daemons recarregam sua configuração na recepção de um sinal - normalmente, `SIGHUP`. Portanto, o man:rc.subr[8] tenta recarregar o daemon enviando um sinal para ele. O sinal é predefinido para `SIGHUP`, mas pode ser personalizado via `sig_reload`, caso necessário.
+O que recebemos do método padrão para `reload`? Muitas vezes, os daemons recarregam sua configuração após receber um sinal - geralmente, SIGHUP. Portanto, o man:rc.subr[8] tenta recarregar o daemon enviando um sinal para ele. O sinal é pré-definido como SIGHUP, mas pode ser personalizado via `sig_reload`, se necessário.
====
-&#10129;&#9454; Nosso script suporta dois comandos não padrão, `plugh` e `xyzzy`. Nós os vimos listados em `extra_commands`, e agora é hora de fornecer métodos para eles. O método para `xyzzy` é apenas embutido, enquanto que para `plugh` é implementado como a função `mumbled_plugh`.
+&#10129;&#9454; O nosso script suporta dois comandos não padrão, `plugh` e `xyzzy`. Nós os vimos listados em `extra_commands`, e agora é hora de fornecer métodos para eles. O método para `xyzzy` é apenas inserido em linha enquanto que para `plugh` é implementado como a função `mumbled_plugh`.
-Comandos não padrão não são chamados durante a inicialização ou o desligamento. Geralmente eles são para a conveniência do administrador do sistema. Eles também podem ser usados de outros subsistemas, por exemplo, man:devd[8] se especificado em man:devd.conf[5].
+Comandos não padrão não são invocados durante a inicialização ou desligamento. Geralmente, eles são para a conveniência do administrador do sistema. Eles também podem ser usados em outros subsistemas, por exemplo, o man:devd[8] se especificados em man:devd.conf[5].
-A lista completa de comandos disponíveis pode ser encontrada na linha de uso impressa por man:rc.subr[8] quando o script é invocado sem argumentos. Por exemplo, aqui está a linha de uso do script em estudo:
+A lista completa de comandos disponíveis pode ser encontrada na linha de uso impressa pelo man:rc.subr[8] quando o script é invocado sem argumentos. Por exemplo, aqui está a linha de uso do script em estudo:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/mumbled
-Uso: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)
+Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)
....
-&#9453; Um script pode invocar seus próprios comandos padrão ou não padrão, se necessário. Isto pode parecer semelhante as funções de chamada, mas sabemos que comandos e funções de shell nem sempre são a mesma coisa. Por exemplo, `xyzzy` não é implementado como uma função aqui. Além disso, pode haver um pré-comando e um pós-comando, que devem ser chamados ordenadamente. Portanto, a maneira correta de um script executar seu próprio comando é por meio de man:rc.subr[8], conforme mostrado no exemplo.
+&#9453; Um script pode invocar seus próprios comandos padrão ou não-padrão, se necessário. Isso pode parecer semelhante a chamar funções, mas sabemos que comandos e funções do shell nem sempre são a mesma coisa. Por exemplo, `xyzzy` não é implementado como uma função aqui. Além disso, pode haver um pré-comando e um pós-comando, que devem ser invocados ordenadamente. Portanto, a maneira adequada para um script executar seu próprio comando é por meio do man:rc.subr[8], como mostrado no exemplo.
-&#10130; Uma função útil chamada `checkyesno` é fornecida por man:rc.subr[8]. Ele usa um nome de variável como argumento e retorna um código de saída zero se, e somente se, a variável estiver configurada como `YES`, ou `TRUE`, ou `ON`, ou `1`, sem distinção entre maiúsculas e minúsculas; um código de saída diferente de zero é retornado de outra forma. No último caso, a função testa a variável como sendo definida como `NO`,`FALSE`,`OFF` ou `0` insensível a maiúsculas e minúsculas; imprime uma mensagem de aviso se a variável contiver qualquer outra coisa, ou seja, lixo.
+&#10130; Uma função útil chamada `checkyesno` é fornecida pelo man:rc.subr[8]. Ela recebe um nome de variável como argumento e retorna um código de saída zero se e somente se a variável estiver definida como `YES`, ou `TRUE`, ou `ON`, ou `1`, insensível a maiúsculas e minúsculas; um código de saída não-zero é retornado caso contrário. Neste último caso, a função testa se a variável está definida como `NO`, `FALSE`, `OFF` ou `0`, insensível a maiúsculas e minúsculas; ela imprime uma mensagem de aviso se a variável contiver qualquer outra coisa, ou seja, lixo.
-Tenha em mente que para o man:sh[1] um código de saída zero significa verdadeiro e um código de saída diferente de zero significa falso.
+Tenha em mente que para o man:sh[1], um código de saída zero significa verdadeiro e um código de saída não-zero significa falso.
[IMPORTANT]
====
-A função `checkyesno` recebe um __nome da variável__. Não passe o _valor_ expandido de uma variável para ele; não funcionará como esperado.
+A função `checkyesno` recebe um __nome de variável__. Não passe o _valor expandido_ de uma variável para ela; isso não funcionará como esperado.
-O uso correto de `checkyesno` é:
+Aqui está o uso correto de `checkyesno`:
[.programlisting]
....
@@ -396,7 +410,7 @@ if checkyesno mumbled_enable; then
fi
....
-Pelo contrário, chamar `checkyesno` como mostrado abaixo não funcionará - pelo menos não como esperado:
+Ao contrário, chamar `checkyesno` como mostrado abaixo não funcionará - pelo menos não como esperado:
[.programlisting]
....
@@ -407,34 +421,34 @@ fi
====
-&#10131; [[rc-flags]] Podemos afetar os sinalizadores a serem passados para `$command` modificando `rc_flags` em `$start_precmd`.
+&#10131; [[rc-flags]]Podemos afetar as flags que serão passadas para `$command` modificando `rc_flags` em `$start_precmd`.
-&#9451; Em certos casos, podemos precisar emitir uma mensagem importante que também deve ser enviada para o `syslog`. Isto pode ser feito facilmente com as seguintes funções man:rc.subr[8]: `debug`, `info`, `warn` e `err`. A última função, em seguida, sai do script com o código especificado.
+&#9451; Em certos casos, podemos precisar emitir uma mensagem importante que também deve ser registrada no `syslog`. Isso pode ser feito facilmente com as seguintes funções do man:rc.subr[8]: `debug`, `info`, `warn` e `err`. Esta última função finaliza o script com o código especificado.
-&#9452; Os códigos de saída dos métodos e seus pré-comandos não são apenas ignorados por padrão. Se o argumento `_precmd` retornar um código de saída diferente de zero, o método principal não será executado. Por sua vez, o `argumento_postcmd` não será invocado a menos que o método principal retorne um código de saída zero.
+&#9452; Os códigos de saída dos métodos e seus pre-comandos não são apenas ignorados por padrão. Se `argument_precmd` retornar um código de saída diferente de zero, o método principal não será executado. Por sua vez, `argument_postcmd` não será chamado, a menos que o método principal retorne um código de saída igual a zero.
[NOTE]
====
-No entanto, o man:rc.subr[8] pode ser instruído a partir da linha de comando para ignorar esses códigos de saída e invocar todos os comandos, prefixando um argumento com `force`, como em `forcestart`.
+Entretanto, é possível instruir o man:rc.subr[8] a ignorar esses códigos de saída e executar todos os comandos mesmo assim, adicionando um argumento com o prefixo `force`, como em `forcestart`.
====
[[rcng-hookup]]
== Conectando um script ao framework rc.d
-Depois que um script foi escrito, ele precisa ser integrado em [.filename]#rc.d>#. O passo crucial é instalar o script em [.filename]#/etc/rc.d# (para o sistema base) ou [.filename]#/usr/local/etc/rc.d# (para ports). Ambos [.filename]#bsd.prog.mk# e [.filename]#bsd.port.mk# fornecer ganchos convenientes para isso, e geralmente você não precisa se preocupar com a propriedade e o modo adequado. Os scripts do sistema devem ser instalados a partir do [.filename]#src /etc/rc.d# através do [.filename]#Makefile# encontrado lá. Os scripts de porta podem ser instalados usando `USE_RC_SUBR` conforme descrito em link:{porters-handbook}#rc-scripts[no Manual do Porter].
+Depois que um script é escrito, ele precisa ser integrado ao [.filename]#rc.d#. O passo crucial é instalar o script em [.filename]#/etc/rc.d# (para o sistema base) ou [.filename]#/usr/local/etc/rc.d# (para o ports). Tanto o [.filename]#bsd.prog.mk# quanto o [.filename]#bsd.port.mk# fornecem ganchos convenientes para isso, e geralmente você não precisa se preocupar com a propriedade e o modo adequados. Os scripts do sistema devem ser instalados a partir de [.filename]#src/libexec/rc/rc.d# através do [.filename]#Makefile# encontrado lá. Scripts de ports podem ser instalados usando `USE_RC_SUBR` como descrito no extref:{porters-handbook}[Porter's Handbook, rc-scripts].
No entanto, devemos considerar antecipadamente o local do nosso script na sequência de inicialização do sistema. O serviço manipulado pelo nosso script provavelmente depende de outros serviços. Por exemplo, um daemon de rede não pode funcionar sem as interfaces de rede e o roteamento em funcionamento. Mesmo que um serviço pareça não exigir nada, dificilmente pode ser iniciado antes que os sistemas de arquivos básicos tenham sido verificados e montados.
-Nós já mencionamos o man:rcorder[8]. Agora é hora de dar uma olhada de perto. Em poucas palavras, o man:rcorder[8] pega um conjunto de arquivos, examina seu conteúdo e imprime uma lista ordenada por dependência de arquivos do conjunto para `stdout`. O objetivo é manter as informações de dependência _dentro_ dos arquivos para que cada arquivo possa falar por si só. Um arquivo pode especificar as seguintes informações:
+Nós já mencionamos o man:rcorder[8]. Agora é hora de dar uma olhada mais de perto nele. Em poucas palavras, o man:rcorder[8] pega um conjunto de arquivos, examina seus conteúdos e imprime uma lista ordenada por dependência dos arquivos do conjunto no `stdout`. O objetivo é manter as informações de dependência _dentro_ dos arquivos, de modo que cada arquivo possa falar apenas por si mesmo. Um arquivo pode especificar as seguintes informações:
-* os nomes das "condições" (o que significa serviços para nós) que ele __fornece__;
+* os nomes das "condições" (ou seja, serviços para nós) que ele __fornece__;
* os nomes das "condições" que ele __requer__;
-* os nomes das "condições" deste arquivo devem ser executados __antes__;
-* _palavras-chave adicionais_ que podem ser usadas para selecionar um subconjunto de todo o conjunto de arquivos (man:rcorder[8] podem ser instruídos através de opções para incluir ou omitir os arquivos com determinadas palavras-chave listadas.)
+* os nomes das "condições" que este arquivo deve ser executado __antes__;
+* palavras-chave adicionais que podem ser usadas para selecionar um subconjunto do conjunto completo de arquivos (man:rcorder[8] pode ser instruído via opções para incluir ou omitir os arquivos que possuem determinadas palavras-chave listadas.)
-Não é surpresa que man:rcorder[8] possa manipular apenas arquivos de texto com uma sintaxe próxima a de man:sh[1]. Ou seja, linhas especiais compreendidas por man:rcorder[8] se parecem com comentários man:sh[1]. A sintaxe de tais linhas especiais é bastante rígida para simplificar seu processamento. Veja man:rcorder[8] para detalhes.
+Não é surpresa que o man:rcorder[8] possa lidar apenas com arquivos de texto com uma sintaxe próxima à do man:sh[1]. Ou seja, as linhas especiais entendidas pelo man:rcorder[8] se parecem com comentários do man:sh[1]. A sintaxe dessas linhas especiais é bastante rígida para simplificar seu processamento. Consulte man:rcorder[8] para obter detalhes.
-Além de usar linhas especiais do man:rcorder[8], um script pode insistir em sua dependência de outro serviço apenas iniciando-o forçadamente. Isso pode ser necessário quando o outro serviço é opcional e não será iniciado automaticamente porque o administrador do sistema o desativou por engano no man:rc.conf[5].
+Além de usar as linhas especiais entendidas pelo man:rcorder[8], um script pode exigir sua dependência de outro serviço simplesmente iniciando-o forçadamente. Isso pode ser necessário quando o outro serviço é opcional e não iniciará por si só porque o administrador do sistema o desativou por engano em man:rc.conf[5].
Com este conhecimento geral em mente, vamos considerar o simples script daemon aprimorado com coisas de dependência:
@@ -470,44 +484,55 @@ run_rc_command "$1"
Como antes, a análise detalhada segue:
-&#10122; Esta linha declara os nomes das "condições" que nosso script fornece. Agora, outros scripts podem registrar uma dependência em nosso script por estes nomes.
+&#10122; Essa linha declara os nomes das "condições" que nosso script fornece. Agora, outros scripts podem registrar uma dependência em nosso script por esses nomes.
[NOTE]
====
Geralmente, um script especifica uma única condição fornecida. No entanto, nada nos impede de listar várias condições, por exemplo, por razões de compatibilidade.
-Em qualquer caso, o nome da condição principal, ou a única, `PROVIDE:` deve ser o mesmo que `${name}`.
+Em qualquer caso, o nome da condição principal, ou única, `PROVIDE:` deve ser o mesmo que `${name}`.
====
-&#10123;&#10124; Portanto, nosso script indica quais condições "" são fornecidas por outros scripts dos quais depende. De acordo com as linhas, nosso script pede ao man:rcorder[8] para colocá-lo após o(s) script(s) fornecendo [.filename]#DAEMON# e [.filename]#cleanvar#, mas antes disso prover [.filename]#LOGIN#.
+&#10123;&#10124; Então, nosso script indica em quais "condições" fornecidas por outros scripts ele depende. De acordo com as linhas, nosso script pede para o man:rcorder[8] colocá-lo após o(s) script(s) fornecendo o [.filename]#DAEMON# e o [.filename]#cleanvar#, mas antes daquele que fornece [.filename]#LOGIN#.
[NOTE]
====
-A linha `BEFORE:` não deve ser abusada para contornar uma lista de dependências incompleta no outro script. O caso apropriado para usar o `BEFORE:` é quando o outro script não se importa com o nosso, mas nosso script pode fazer sua tarefa melhor se for executado antes do outro. Um típico exemplo da vida real são as interfaces de rede versus o firewall: embora as interfaces não dependam do firewall em realizar seu trabalho, a segurança do sistema se beneficiará do firewall estar pronto antes que haja qualquer tráfego de rede.
+A linha `BEFORE:` não deve ser usada para contornar uma lista de dependências incompleta em outro script. O caso apropriado para usar `BEFORE:` é quando o outro script não se importa com o nosso, mas nosso script pode executar sua tarefa melhor se for executado antes do outro. Um exemplo típico da vida real é a relação entre as interfaces de rede e o firewall: embora as interfaces não dependam do firewall para fazer o trabalho delas, a segurança do sistema se beneficiará se o firewall estiver pronto antes de haver qualquer tráfego de rede.
-Além das condições correspondentes a um único serviço, existem meta-condições e seus scripts "placeholder" usados para garantir que determinados grupos de operações sejam executados antes dos outros. Estes são denotados pelos nomes [.filename]#UPPERCASE#. Sua lista e finalidades podem ser encontradas em man:rc[8].
+Além das condições correspondentes a um único serviço, existem meta-condições e seus scripts "placeholder" usados para garantir que certos grupos de operações sejam executados antes de outros. Estes são denotados por nomes em [.filename]#UPPERCASE#. Sua lista e propósitos podem ser encontrados no manual man:rc[8].
-Tenha em mente que colocar um nome de serviço na linha `REQUIRE:` não garante que o serviço estará realmente em execução no momento em que nosso script for iniciado. O serviço necessário pode falhar ao iniciar ou simplesmente ser desativado em man:rc.conf[5]. Obviamente, o man:rcorder[8] não pode controlar tais detalhes, e o man:rc[8] também não fará isso. Consequentemente, o aplicativo iniciado por nosso script deve ser capaz de lidar com quaisquer serviços necessários indisponíveis. Em certos casos, podemos ajudá-lo conforme discutido <<forcedep, below>>
+Lembre-se de que colocar o nome de um serviço na linha `REQUIRE:` não garante que o serviço realmente estará em execução no momento em que o script começar. O serviço necessário pode falhar ao iniciar ou simplesmente ser desativado em man:rc.conf[5]. Obviamente, o man:rcorder[8] não pode controlar esses detalhes e o man:rc[8] também não fará isso. Consequentemente, a aplicação iniciada pelo nosso script deve ser capaz de lidar com qualquer serviço necessário que esteja indisponível. Em certos casos, podemos ajudá-lo conforme discutido <<forcedep, abaixo>>
====
-&#10125; [[keywords]] Como lembramos do texto acima, as palavras-chave do man:rcorder[8] podem ser usadas para selecionar ou deixar alguns scripts. Ou seja, qualquer consumidor man:rcorder[8] pode especificar através das opções `-k` e `-s` que as palavras-chave estão na "keep list" e na "skip list", respectivamente. De todos os arquivos a serem classificados, o man:rcorder[8] selecionará apenas aqueles que tiverem uma palavra-chave da lista de manutenção (a menos que vazia) e não uma palavra-chave da lista de itens ignorados.
+[[keywords]]&#10125; Como lembramos do texto acima, as palavras-chave do man:rcorder[8] podem ser usadas para selecionar ou deixar de fora alguns scripts. Qualquer consumidor do man:rcorder[8] pode especificar, através das opções `-k` e `-s`, quais palavras-chave estarão na "lista de manutenção" e na "lista de exclusão", respectivamente. De todos os arquivos a serem ordenados por dependência, man:rcorder[8] escolherá apenas aqueles que tiverem uma palavra-chave da lista de manutenção (a menos que esteja vazia) e que não tiverem uma palavra-chave da lista de exclusão.
+
+No FreeBSD, o man:rcorder[8] é usado por [.filename]#/etc/rc# e [.filename]#/etc/rc.shutdown#. Esses dois scripts definem a lista padrão de palavras-chaves do FreeBSD [.filename]#rc.d# e seus significados da seguinte forma:
+
+nojail:: O serviço não é para ambiente man:jail[8]. Os procedimentos automáticos de inicialização e desligamento ignorarão o script se estiver dentro de uma jail.
+
+nostart:: O serviço deve ser iniciado manualmente ou não iniciado de forma alguma. O procedimento de inicialização automático ignorará o script. Em conjunto com a palavra-chave [.filename]#shutdown#, isso pode ser usado para escrever scripts que fazem algo apenas no desligamento do sistema.
+
+shutdown:: Este palavra-chave deve ser listada de forma __explícita__ se o serviço precisa ser parado antes do desligamento do sistema.
-No FreeBSD, o man:rcorder[8] é usado por [.filename]#/etc/rc# e [.filename]#/etc/rc.shutdown#. Esses dois scripts definem a lista padrão de palavras-chave do [.filename]#rc.d# do FreeBSD e seus significados da seguinte forma:
+[NOTE]
+====
+Quando o sistema está prestes a desligar, o arquivo [.filename]#/etc/rc.shutdown# é executado. Ele assume que a maioria dos scripts [.filename]#rc.d# não tem nada a fazer nesse momento. Portanto, o [.filename]#/etc/rc.shutdown# invoca seletivamente scripts [.filename]#rc.d# com a palavra-chave [.filename]#shutdown#, ignorando efetivamente o restante dos scripts. Para desligamento ainda mais rápido, o [.filename]#/etc/rc.shutdown# passa o comando [.filename]#faststop# para os scripts que executa para que eles pulem verificações preliminares, como a verificação do pidfile. Como os serviços dependentes devem ser interrompidos antes de suas dependências, o [.filename]#/etc/rc.shutdown# executa os scripts em ordem de dependência reversa. Se você está escrevendo um script [.filename]#rc.d# real, deve considerar se ele é relevante no momento do desligamento do sistema. Por exemplo, se o seu script faz seu trabalho apenas em resposta ao comando [.filename]#start#, então você não precisa incluir essa palavra-chave. No entanto, se o seu script gerencia um serviço, é provavelmente uma boa ideia pará-lo antes que o sistema prossiga para o estágio final de sua sequência de desligamento descrita em man:halt[8]. Em particular, um serviço deve ser interrompido explicitamente se precisar de tempo considerável ou ações especiais para ser desligado corretamente. Um exemplo típico desse tipo de serviço é um mecanismo de banco de dados.
+====
-&#10126; [[forcedep]] Para começar, `force_depend` deve ser usado com muito cuidado. Geralmente é melhor revisar a hierarquia de variáveis de configuração para seus scripts [.filename]#rc.# se eles forem interdependentes.
+[[forcedep]] &#10126; Em primeiro lugar, `force_depend` deve ser usado com muito cuidado. Geralmente, é melhor revisar a hierarquia das variáveis de configuração para seus scripts [.filename]#rc.d# se eles são interdependentes.
-Se você ainda não pode fazer sem `force_depend`, o exemplo oferece uma expressão de como invocá-lo condicionalmente. No exemplo, nosso daemon `mumbled` requer que outro, `frotz`, seja iniciado antecipadamente. No entanto, `frotz` é opcional também; e man:rcorder[8] não sabe nada sobre esses detalhes. Felizmente, nosso script tem acesso a todas as variáveis man:rc.conf[5]. Se `frotz_enable` estiver como true, esperamos pelo melhor e dependemos de [.filename]#rc.d# para iniciar `frotz`. Caso contrário, nós forçadamente verificaremos o status de `frotz`. Finalmente, impomos nossa dependência ao `frotz` se ele não estiver sendo executado. Uma mensagem de aviso será emitida por `force_depend` porque ele deve ser chamado apenas se um erro de configuração for detectado.
+Se ainda assim você não puder abrir mão do `force_depend`, o exemplo oferece um exemplo de como invocá-lo condicionalmente. No exemplo, nosso daemon `mumbled` requer que outro daemon, `frotz`, seja iniciado antecipadamente. No entanto, `frotz` também é opcional; e o man:rcorder[8] não conhece esses detalhes. Felizmente, nosso script tem acesso a todas as variáveis de man:rc.conf[5]. Se `frotz_enable` for verdadeiro, esperamos o melhor e confiamos no [.filename]#rc.d# para ter iniciado `frotz`. Caso contrário, verificamos forçadamente o status de `frotz`. Finalmente, impomos nossa dependência em `frotz` se ele não estiver em execução. Uma mensagem de aviso será emitida por `force_depend`, pois ele só deve ser invocado se uma configuração incorreta for detectada.
[[rcng-args]]
== Dando mais flexibilidade a um script rc.d
-Quando chamado durante a inicialização ou desligamento, um script [.filename]#rc.d# deve agir em todo o subsistema pelo qual é responsável. Por exemplo, [.filename]#/etc/rc.d/netif# deve iniciar ou parar todas as interfaces de rede descritas por man:rc.conf[5]. Qualquer tarefa pode ser indicada exclusivamente por um único argumento de comando, como `start` ou `stop`. Entre a inicialização e o desligamento, os scripts [.filename]#rc.d# ajudam o administrador a controlar o sistema em execução, e é quando surge a necessidade de mais flexibilidade e precisão. Por exemplo, o administrador pode querer adicionar as configurações de uma nova interface de rede ao man:rc.conf[5] e então iniciá-lo sem interferir o funcionamento das interfaces existentes. Da próxima vez, o administrador pode precisar desligar uma única interface de rede. No espírito da linha de comando, o respectivo script [.filename]#rc.d# solicita um argumento extra, o nome da interface.
+Quando invocado durante a inicialização ou desligamento, um script [.filename]#rc.d# deve agir em todo o subsistema pelo qual é responsável. Por exemplo, o [.filename]#/etc/rc.d/netif# deve iniciar ou parar todas as interfaces de rede descritas em man:rc.conf[5]. Cada tarefa pode ser indicada por um único argumento de comando, como `start` ou `stop`. Entre a inicialização e o desligamento, os scripts [.filename]#rc.d# ajudam o administrador a controlar o sistema em execução e é quando surge a necessidade de mais flexibilidade e precisão. Por exemplo, o administrador pode querer adicionar as configurações de uma nova interface de rede em man:rc.conf[5] e, em seguida, iniciá-la sem interferir na operação das interfaces existentes. Na próxima vez, o administrador pode precisar desligar uma única interface de rede. Para facilitar o uso na linha de comando, o respectivo script [.filename]#rc.d# pede um argumento extra, o nome da interface.
-Felizmente, man:rc.subr[8] permite passar qualquer número de argumentos para os métodos do script (dentro dos limites do sistema). Devido a isso, as alterações no próprio script podem ser mínimas.
+Felizmente, o man:rc.subr[8] permite passar qualquer número de argumentos para os métodos do script (dentro dos limites do sistema). Devido a isso, as mudanças no próprio script podem ser mínimas.
-Como o man:rc.subr[8] pode obter acesso aos argumentos de linha de comando extra. Deveria pegá-los diretamente? Não por qualquer meio. Primeiro, uma função man:sh[1] não tem acesso aos parâmetros posicionais de seu chamador, mas o man:rc.subr[8] é apenas uma despedida de tais funções. Em segundo lugar, a boa maneira de [.filename]#rc.d# determina que é para o script principal decidir quais argumentos devem ser passados para seus métodos.
+Como o man:rc.subr[8] pode ter acesso aos argumentos adicionais da linha de comando? Ele deve simplesmente pegá-los diretamente? De maneira alguma! Em primeiro lugar, uma função do man:sh[1] não tem acesso aos parâmetros posicionais de quem a chamou, mas o man:rc.subr[8] é apenas um conjunto dessas funções. Em segundo lugar, a boa prática do [.filename]#rc.d# dita que é responsabilidade do script principal decidir quais argumentos devem ser passados para seus métodos.
-Portanto, a abordagem adotada por man:rc.subr[8] é a seguinte: `run_rc_command` transmite todos os seus argumentos, mas o primeiro um para o respectivo método na íntegra. O primeiro, omitido, argumento é o nome do próprio método: `start`,`stop`, etc. Ele será deslocado por `run_rc_command`, então o que é `$2` na linha de comando original será apresentado como `$1` ao método, e assim por diante.
+Portanto, a abordagem adotada pelo man:rc.subr[8] é a seguinte: `run_rc_command` passa todos os seus argumentos, exceto o primeiro, ao respectivo método sem alterações. O primeiro argumento omitido é o nome do método em si: `start`, `stop`, etc. Ele será removido por `run_rc_command`, então o que é `$2` na linha de comando original será apresentado como `$1` para o método, e assim por diante.
Para ilustrar essa oportunidade, vamos modificar o script fictício primitivo para que suas mensagens dependam dos argumentos adicionais fornecidos. Aqui vamos nós:
@@ -554,43 +579,45 @@ run_rc_command "$@" <.>
Quais mudanças essenciais podemos notar no script?
-&#10122; Todos os argumentos digitados após `start` podem terminar como parâmetros posicionais para o respectivo método. Podemos usá-los de qualquer maneira de acordo com nossa tarefa, habilidades e fantasia. No exemplo atual, apenas passamos todos eles para man:echo[1] como uma cadeia na linha seguinte - note `$*` entre aspas duplas. Aqui está como o script pode ser chamado agora:
+&#10122; Todos os argumentos que você digita após `start` podem acabar como parâmetros posicionais para o respectivo método. Podemos usá-los de qualquer maneira de acordo com nossa tarefa, habilidades e gosto. No exemplo atual, simplesmente passamos todos eles para o man:echo[1] como uma única string na próxima linha - observe o `$*` dentro das aspas duplas. Aqui está como o script pode ser invocado agora:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/dummy start
Nothing started.
+
# /etc/rc.d/dummy start Hello world!
Greeting message: Hello world!
....
-&#10123; O mesmo se aplica a qualquer método que nosso script forneça, não apenas a um método padrão. Nós adicionamos um método customizado chamado `kiss`, e ele pode tirar proveito dos argumentos extras da mesma forma que o `start` tira. Por exemplo:
+&#10123; O mesmo se aplica a qualquer método que nosso script ofereça, não apenas a um padrão. Adicionamos um método personalizado chamado `kiss`, e ele pode tirar proveito dos argumentos extras da mesma forma que o `start` pode. Por exemplo:
-[source,shell]
+[source, shell]
....
# /etc/rc.d/dummy kiss
A ghost gives you a kiss.
+
# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...
A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...
....
-&#10124; Se quisermos apenas passar todos os argumentos extras para qualquer método, podemos simplesmente substituir `"$@"` por `"$ 1"` na última linha do nosso script, onde invocamos o `run_rc_command`.
+&#10124; Se quisermos apenas passar todos os argumentos extras para qualquer método, podemos simplesmente substituir `"$1"` por `"$@"` na última linha do nosso script, onde invocamos `run_rc_command`.
[IMPORTANT]
====
-Um programador man:sh[1] deve entender a diferença sutil entre `$*` e `$@` como as formas de designar todos os parâmetros posicionais. Para sua discussão aprofundada, consulte um bom manual sobre programação de scripts man:sh[1]. _Não_ use estas expressões até que você as compreenda completamente, porque o uso incorreto delas resultará em scripts inseguros e contendo bugs.
+Um programador em man:sh[1] deve entender a diferença sutil entre `$*` e `$@` como formas de designar todos os parâmetros posicionais. Para uma discussão aprofundada, consulte um bom manual de man:sh[1]. Não use essas expressões até entender completamente o seu uso, pois o uso incorreto pode resultar em scripts com bugs e inseguros.
====
[NOTE]
====
-Atualmente, o `run_rc_command` pode ter um bug que o impede de manter os limites originais entre os argumentos. Ou seja, argumentos com espaços em branco incorporados podem não ser processados corretamente. O bug deriva do uso inadequado de `$*`.
+Atualmente, o `run_rc_command` pode ter um bug que o impede de manter as fronteiras originais entre os argumentos. Ou seja, argumentos com espaços em branco embutidos podem não ser processados corretamente. O bug decorre do uso inadequado de `$*`.
====
[[rcng-furthur]]
== Leitura adicional
-[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[O artigo original de Luke Mewburn] oferece uma visão geral do [.filename]#rc.d# e o raciocínio detalhado que o levou a suas decisões de design. Ele fornece informações sobre toda o framework do [.filename]#rc.d# e o seu lugar em um moderno sistema operacional BSD.
+[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[O artigo original de Luke Mewburn] oferece uma visão geral do [.filename]#rc.d# e uma justificativa detalhada para suas decisões de design. Ele fornece uma compreensão do quadro geral do [.filename]#rc.d# e seu lugar em um sistema operacional BSD moderno.
-[[manpages]]As páginas de manual man:rc[8], man:rc.subr[8] e man:rcorder[8] documentam os componentes do [.filename]#rc.d# com grande detalhe. Você não pode usar totalmente o poder do [.filename]#rc.d# sem estudar as páginas de manual e se referir a elas enquanto escreve seus próprios scripts.
+[[manpages]]As páginas do manual para man:rc[8], man:rc.subr[8] e man:rcorder[8] documentam em detalhes os componentes do sistema [.filename]#rc.d#. Você não pode aproveitar completamente o poder do [.filename]#rc.d# sem estudar as páginas do manual e consultá-las ao escrever seus próprios scripts.
-A sua principal fonte de inspiração são os exemplos da vida real, existentes em no [.filename]#/etc/rc.d# de um sistema vivo. Seu conteúdo é fácil e agradável de ler, porque a maioria dos cantos ásperos estão escondidos fundo no man:rc.subr[8]. Tenha em mente que os scripts [.filename]#/etc/rc.d# não foram escritos por anjos, então eles podem sofrer de bugs e decisões sub-ótimas de design. Agora você pode melhorá-los!
+A principal fonte de exemplos práticos e funcionais é o diretório [.filename]#/etc/rc.d# em um sistema em operação. O seu conteúdo é fácil e agradável de ler, pois a maioria das partes difíceis está escondida profundamente em man:rc.subr[8]. No entanto, tenha em mente que os scripts em [.filename]#/etc/rc.d# não foram escritos por anjos, então eles podem conter bugs e decisões de design subótimas. Agora você pode melhorá-los!
diff --git a/documentation/content/pt-br/articles/rc-scripting/_index.po b/documentation/content/pt-br/articles/rc-scripting/_index.po
new file mode 100644
index 0000000000..eaee8ffb75
--- /dev/null
+++ b/documentation/content/pt-br/articles/rc-scripting/_index.po
@@ -0,0 +1,2337 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021, 2022.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-07-07 23:23-0300\n"
+"PO-Revision-Date: 2023-04-30 08:49+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesrc-scripting_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/rc-scripting/_index.adoc:1
+#, no-wrap
+msgid "A guide to writing new rc.d scripts and understanding those already written"
+msgstr ""
+"Um guia para escrever novos scripts rc.d e entender aqueles que já existem"
+
+#. type: Title =
+#: documentation/content/en/articles/rc-scripting/_index.adoc:1
+#: documentation/content/en/articles/rc-scripting/_index.adoc:12
+#, no-wrap
+msgid "Practical rc.d scripting in BSD"
+msgstr "Scripting rc.d na prática no BSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:49
+msgid ""
+"Beginners may find it difficult to relate the facts from the formal "
+"documentation on the BSD [.filename]#rc.d# framework with the practical "
+"tasks of [.filename]#rc.d# scripting. In this article, we consider a few "
+"typical cases of increasing complexity, show [.filename]#rc.d# features "
+"suited for each case, and discuss how they work. Such an examination should "
+"provide reference points for further study of the design and efficient "
+"application of [.filename]#rc.d#."
+msgstr ""
+"Os iniciantes podem achar difícil relacionar os fatos da documentação formal "
+"sobre o framework [.filename]#rc.d# do BSD com as tarefas práticas de "
+"escrever scripts [.filename]#rc.d#. Neste artigo, consideramos alguns casos "
+"típicos de crescente complexidade, mostramos recursos do [.filename]#rc.d# "
+"adequados para cada caso e discutimos como eles funcionam. Essa análise deve "
+"fornecer pontos de referência para estudos posteriores do design e aplicação "
+"eficiente do [.filename]#rc.d#."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:51
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:55
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:61
+msgid ""
+"The historical BSD had a monolithic startup script, [.filename]#/etc/rc#. "
+"It was invoked by man:init[8] at system boot time and performed all userland "
+"tasks required for multi-user operation: checking and mounting file systems, "
+"setting up the network, starting daemons, and so on. The precise list of "
+"tasks was not the same in every system; admins needed to customize it. With "
+"few exceptions, [.filename]#/etc/rc# had to be modified, and true hackers "
+"liked it."
+msgstr ""
+"No histórico BSD, havia um script de inicialização monolítico, [.filename]#/"
+"etc/rc#. Ele era invocado pelo man:init[8] no momento da inicialização do "
+"sistema e realizava todas as tarefas de usuário necessárias para a operação "
+"multiusuário: verificação e montagem de sistemas de arquivos, configuração "
+"da rede, inicialização de daemons e assim por diante. A lista precisa de "
+"tarefas não era a mesma em todos os sistemas; os administradores precisavam "
+"personalizá-la. Com poucas exceções, o [.filename]#/etc/rc# tinha que ser "
+"modificado, e os verdadeiros hackers gostavam disso."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:67
+msgid ""
+"The real problem with the monolithic approach was that it provided no "
+"control over the individual components started from [.filename]#/etc/rc#. "
+"For instance, [.filename]#/etc/rc# could not restart a single daemon. The "
+"system admin had to find the daemon process by hand, kill it, wait until it "
+"actually exited, then browse through [.filename]#/etc/rc# for the flags, and "
+"finally type the full command line to start the daemon again. The task "
+"would become even more difficult and prone to errors if the service to "
+"restart consisted of more than one daemon or demanded additional actions. "
+"In a few words, the single script failed to fulfil what scripts are for: to "
+"make the system admin's life easier."
+msgstr ""
+"O problema real com a abordagem monolítica era que ela não fornecia controle "
+"sobre os componentes individuais iniciados a partir do [.filename]#/etc/rc#. "
+"Por exemplo, o [.filename]#/etc/rc# não podia reiniciar um único daemon. O "
+"administrador do sistema tinha que encontrar o processo do daemon "
+"manualmente, matá-lo, aguardar até que ele realmente finalizasse, navegar "
+"por [.filename]#/etc/rc# em busca das flags e, finalmente, digitar a linha "
+"de comando completa para iniciar o daemon novamente. A tarefa se tornaria "
+"ainda mais difícil e propensa a erros se o serviço a ser reiniciado "
+"consistisse em mais de um daemon ou exigisse ações adicionais. Em poucas "
+"palavras, o script único falhou em cumprir o objetivo pelo qual um script é "
+"criado: tornar a vida do administrador do sistema mais fácil."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:74
+msgid ""
+"Later there was an attempt to split out some parts of [.filename]#/etc/rc# "
+"for the sake of starting the most important subsystems separately. The "
+"notorious example was [.filename]#/etc/netstart# to bring up networking. It "
+"did allow for accessing the network from single-user mode, but it did not "
+"integrate well into the automatic startup process because parts of its code "
+"needed to interleave with actions essentially unrelated to networking. That "
+"was why [.filename]#/etc/netstart# mutated into [.filename]#/etc/rc."
+"network#. The latter was no longer an ordinary script; it comprised of "
+"large, tangled man:sh[1] functions called from [.filename]#/etc/rc# at "
+"different stages of system startup. However, as the startup tasks grew "
+"diverse and sophisticated, the \"quasi-modular\" approach became even more "
+"of a drag than the monolithic [.filename]#/etc/rc# had been."
+msgstr ""
+"Mais tarde, houve uma tentativa de dividir algumas partes do [.filename]#/"
+"etc/rc# para iniciar os subsistemas mais importantes separadamente. O "
+"exemplo notório foi o [.filename]#/etc/netstart# para iniciar a rede. Isso "
+"permitiu o acesso à rede no modo de usuário único, mas não se integrou bem "
+"ao processo de inicialização automática porque partes de seu código "
+"precisavam intercalar com ações essencialmente não relacionadas à rede. Foi "
+"por isso que o [.filename]#/etc/netstart# se transformou em [.filename]#/etc/"
+"rc.network#. Este último não era mais um script comum; era composto de "
+"grandes funções man:sh[1] complexas chamadas pelo [.filename]#/etc/rc# em "
+"diferentes estágios da inicialização do sistema. No entanto, à medida que as "
+"tarefas de inicialização ficaram mais diversas e sofisticadas, a abordagem "
+"\"quase modular\" tornou-se ainda mais pesada do que o monolítico [."
+"filename]#/etc/rc# tinha sido."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:82
+msgid ""
+"Without a clean and well-designed framework, the startup scripts had to bend "
+"over backwards to satisfy the needs of rapidly developing BSD-based "
+"operating systems. It became obvious at last that more steps are necessary "
+"on the way to a fine-grained and extensible [.filename]#rc# system. Thus "
+"BSD [.filename]#rc.d# was born. Its acknowledged fathers were Luke Mewburn "
+"and the NetBSD community. Later it was imported into FreeBSD. Its name "
+"refers to the location of system scripts for individual services, which is "
+"in [.filename]#/etc/rc.d#. Soon we will learn about more components of the "
+"[.filename]#rc.d# system and see how the individual scripts are invoked."
+msgstr ""
+"Sem um framework limpo e bem projetado, os scripts de inicialização tiveram "
+"que se dobrar para atender às necessidades dos sistemas operacionais "
+"baseados em BSD que estavam em rápida evolução. Tornou-se evidente, "
+"finalmente, que mais etapas eram necessárias para se chegar a um sistema [."
+"filename]#rc# refinado, granular e extensível. Assim nasceu o [.filename]#rc."
+"d# do BSD. Seus pais reconhecidos foram Luke Mewburn e a comunidade NetBSD. "
+"Mais tarde, foi importado para o FreeBSD. Seu nome se refere ao local dos "
+"scripts do sistema para serviços individuais, que está em [.filename]#/etc/rc"
+".d#. Em breve, aprenderemos mais sobre os componentes do sistema [."
+"filename]#rc.d# e veremos como os scripts individuais são invocados."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:93
+msgid ""
+"The basic ideas behind BSD [.filename]#rc.d# are _fine modularity_ and "
+"__code reuse__. _Fine modularity_ means that each basic \"service\" such as "
+"a system daemon or primitive startup task gets its own man:sh[1] script able "
+"to start the service, stop it, reload it, check its status. A particular "
+"action is chosen by the command-line argument to the script. The [."
+"filename]#/etc/rc# script still drives system startup, but now it merely "
+"invokes the smaller scripts one by one with the `start` argument. It is "
+"easy to perform shutdown tasks as well by running the same set of scripts "
+"with the `stop` argument, which is done by [.filename]#/etc/rc.shutdown#. "
+"Note how closely this follows the Unix way of having a set of small "
+"specialized tools, each fulfilling its task as well as possible. _Code "
+"reuse_ means that common operations are implemented as man:sh[1] functions "
+"and collected in [.filename]#/etc/rc.subr#. Now a typical script can be "
+"just a few lines' worth of man:sh[1] code. Finally, an important part of "
+"the [.filename]#rc.d# framework is man:rcorder[8], which helps [.filename]#/"
+"etc/rc# to run the small scripts orderly with respect to dependencies "
+"between them. It can help [.filename]#/etc/rc.shutdown#, too, because the "
+"proper order for the shutdown sequence is opposite to that of startup."
+msgstr ""
+"As ideias básicas por trás do [.filename]#rc.d# do BSD são _modularidade "
+"fina_ e __reutilização de código__. _Modularidade fina_ significa que cada "
+"\"serviço\" básico, como um daemon do sistema ou uma tarefa de inicialização "
+"primitiva, possui seu próprio script man:sh[1] capaz de iniciar o serviço, "
+"pará-lo, recarregá-lo e verificar seu status. Uma ação específica é "
+"escolhida pelo argumento da linha de comando do script. O script [."
+"filename]#/etc/rc# ainda conduz a inicialização do sistema, mas agora ele "
+"apenas invoca os scripts menores um por um com o argumento `start`. Também é "
+"fácil realizar tarefas de desligamento executando o mesmo conjunto de "
+"scripts com o argumento `stop`, que é feito por [.filename]#/etc/rc.shutdown#"
+". Observe como isso segue de perto a maneira Unix de ter um conjunto de "
+"ferramentas especializadas pequenas, cada uma cumprindo sua tarefa da melhor "
+"maneira possível. _Reutilização de código_ significa que operações comuns "
+"são implementadas como funções man:sh[1] e coletadas em [.filename]#/etc/rc."
+"subr#. Agora, um script típico pode ser composto apenas de algumas linhas de "
+"código man:sh[1]. Finalmente, uma parte importante do framework [."
+"filename]#rc.d# é o man:rcorder[8], que ajuda o [.filename]#/etc/rc# a "
+"executar os pequenos scripts de maneira ordenada com respeito às "
+"dependências entre eles. Isso também pode ajudar o [.filename]#/etc/rc."
+"shutdown#, porque a ordem apropriada para a sequência de desligamento é "
+"oposta à de inicialização."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:101
+msgid ""
+"The BSD [.filename]#rc.d# design is described in <<lukem, the original "
+"article by Luke Mewburn>>, and the [.filename]#rc.d# components are "
+"documented in great detail in <<manpages, the respective manual pages>>. "
+"However, it might not appear obvious to an [.filename]#rc.d# newbie how to "
+"tie the numerous bits and pieces together in order to create a well-styled "
+"script for a particular task. Therefore this article will try a different "
+"approach to describe [.filename]#rc.d#. It will show which features should "
+"be used in a number of typical cases, and why. Note that this is not a how-"
+"to document because our aim is not at giving ready-made recipes, but at "
+"showing a few easy entrances into the [.filename]#rc.d# realm. Neither is "
+"this article a replacement for the relevant manual pages. Do not hesitate "
+"to refer to them for more formal and complete documentation while reading "
+"this article."
+msgstr ""
+"O design do BSD [.filename]#rc.d# é descrito no <<lukem, artigo original de "
+"Luke Mewburn>>, e os componentes do [.filename]#rc.d# são documentados em "
+"grande detalhe nas <<manpages, respectivas páginas do manual>>. No entanto, "
+"pode não ser óbvio para um iniciante no [.filename]#rc.d# como ele deve unir "
+"as numerosas partes para criar um script bem estruturado para uma tarefa "
+"específica. Portanto, este artigo tentará abordar o [.filename]#rc.d# de "
+"forma diferente. Mostrará quais recursos devem ser usados em vários casos "
+"típicos e por que. Observe que este não é um documento de \"como fazer\", "
+"porque nosso objetivo não é fornecer receitas prontas, mas mostrar algumas "
+"entradas fáceis no mundo do [.filename]#rc.d#. Este artigo também não "
+"substitui as páginas do manual relevantes. Não hesite em consultá-las para "
+"obter documentação mais formal e completa enquanto lê este artigo."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:105
+msgid ""
+"There are prerequisites to understanding this article. First of all, you "
+"should be familiar with the man:sh[1] scripting language in order to master "
+"[.filename]#rc.d#. In addition, you should know how the system performs "
+"userland startup and shutdown tasks, which is described in man:rc[8]."
+msgstr ""
+"Existem pré-requisitos para entender este artigo. Em primeiro lugar, você "
+"deve estar familiarizado com a linguagem de script man:sh[1] para dominar o ["
+".filename]#rc.d#. Além disso, você deve saber como o sistema realiza tarefas "
+"de inicialização e desligamento do espaço do usuário, o que é descrito em "
+"man:rc[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:108
+msgid ""
+"This article focuses on the FreeBSD branch of [.filename]#rc.d#. "
+"Nevertheless, it may be useful to NetBSD developers, too, because the two "
+"branches of BSD [.filename]#rc.d# not only share the same design but also "
+"stay similar in their aspects visible to script authors."
+msgstr ""
+"Este artigo foca no ramo do FreeBSD do [.filename]#rc.d#. No entanto, ele "
+"pode ser útil também para desenvolvedores do NetBSD, pois os dois ramos do [."
+"filename]#rc.d# não apenas compartilham o mesmo design, mas também "
+"permanecem similares em seus aspectos visíveis aos autores de scripts."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:110
+#, no-wrap
+msgid "Outlining the task"
+msgstr "Esboçando a tarefa"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:114
+msgid ""
+"A little consideration before starting `$EDITOR` will not hurt. In order to "
+"write a well-tempered [.filename]#rc.d# script for a system service, we "
+"should be able to answer the following questions first:"
+msgstr ""
+"Uma pequena reflexão antes de iniciar o `$EDITOR` não fará mal. Para "
+"escrever um script [.filename]#rc.d# bem elaborado para um serviço do "
+"sistema, devemos ser capazes de responder às seguintes perguntas primeiro:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:116
+msgid "Is the service mandatory or optional?"
+msgstr "O serviço é obrigatório ou opcional?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:117
+msgid ""
+"Will the script serve a single program, e.g., a daemon, or perform more "
+"complex actions?"
+msgstr ""
+"O script servirá um único programa, por exemplo, um daemon, ou realizará "
+"ações mais complexas?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:118
+msgid "Which other services will our service depend on, and vice versa?"
+msgstr "De quais outros serviços nosso serviço dependerá e vice-versa?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:120
+msgid ""
+"From the examples that follow we will see why it is important to know the "
+"answers to these questions."
+msgstr ""
+"A partir dos exemplos que se seguem, veremos o porque é importante conhecer "
+"as respostas a essas perguntas."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:122
+#, no-wrap
+msgid "A dummy script"
+msgstr "Um script fictício"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:125
+msgid ""
+"The following script just emits a message each time the system boots up:"
+msgstr ""
+"O script a seguir apenas emite uma mensagem toda vez que o sistema é "
+"inicializado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:129
+#, no-wrap
+msgid "#!/bin/sh <.>\n"
+msgstr "#!/bin/sh <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:131
+#, no-wrap
+msgid ". /etc/rc.subr <.>\n"
+msgstr ". /etc/rc.subr <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:135
+#, no-wrap
+msgid ""
+"name=\"dummy\" <.>\n"
+"start_cmd=\"${name}_start\" <.>\n"
+"stop_cmd=\":\" <.>\n"
+msgstr ""
+"name=\"dummy\" <.>\n"
+"start_cmd=\"${name}_start\" <.>\n"
+"stop_cmd=\":\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:140
+#, no-wrap
+msgid ""
+"dummy_start() <.>\n"
+"{\n"
+"\techo \"Nothing started.\"\n"
+"}\n"
+msgstr ""
+"dummy_start() <.>\n"
+"{\n"
+"\techo \"Nothing started.\"\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:143
+#, no-wrap
+msgid ""
+"load_rc_config $name <.>\n"
+"run_rc_command \"$1\" <.>\n"
+msgstr ""
+"load_rc_config $name <.>\n"
+"run_rc_command \"$1\" <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:146
+msgid "Things to note are:"
+msgstr "Os pontos a serem observados são:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:152
+msgid ""
+"&#10122; An interpreted script should begin with the magic \"shebang\" "
+"line. That line specifies the interpreter program for the script. Due to "
+"the shebang line, the script can be invoked exactly like a binary program "
+"provided that it has the execute bit set. (See man:chmod[1].) For example, "
+"a system admin can run our script manually, from the command line:"
+msgstr ""
+"&#10122; Um script interpretado deve começar com a linha mágica \"shebang\". "
+"Essa linha especifica o programa interpretador para o script. Devido à linha "
+"shebang, o script pode ser invocado exatamente como um programa binário, "
+"desde que tenha o bit de execução definido. (Veja man:chmod[1].) Por "
+"exemplo, um administrador do sistema pode executar nosso script manualmente, "
+"a partir da linha de comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:156
+#, no-wrap
+msgid "# /etc/rc.d/dummy start\n"
+msgstr "# /etc/rc.d/dummy start\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:162
+msgid ""
+"In order to be properly managed by the [.filename]#rc.d# framework, its "
+"scripts need to be written in the man:sh[1] language. If you have a service "
+"or port that uses a binary control utility or a startup routine written in "
+"another language, install that element in [.filename]#/usr/sbin# (for the "
+"system) or [.filename]#/usr/local/sbin# (for ports) and call it from a man:"
+"sh[1] script in the appropriate [.filename]#rc.d# directory."
+msgstr ""
+"Para ser gerenciado corretamente pelo framework [.filename]#rc.d#, os "
+"scripts devem ser escritos na linguagem man:sh[1]. Se você tiver um serviço "
+"ou port que usa um utilitário de controle binário ou uma rotina de "
+"inicialização escrita em outra linguagem, instale esse elemento em [."
+"filename]#/usr/sbin# (para o sistema) ou [.filename]#/usr/local/sbin# (para "
+"ports) e chame-o a partir de um script man:sh[1] no diretório [.filename]#rc."
+"d# apropriado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:167
+msgid ""
+"If you would like to learn the details of why [.filename]#rc.d# scripts must "
+"be written in the man:sh[1] language, see how [.filename]#/etc/rc# invokes "
+"them by means of `run_rc_script`, then study the implementation of "
+"`run_rc_script` in [.filename]#/etc/rc.subr#."
+msgstr ""
+"Se você gostaria de aprender os detalhes de por que os scripts [.filename]#rc"
+".d# devem ser escritos na linguagem man:sh[1], veja como o [.filename]#/etc/"
+"rc# os invoca por meio de `run_rc_script` e, em seguida, estude a "
+"implementação de `run_rc_script` em [.filename]#/etc/rc.subr#."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:173
+msgid ""
+"&#10123; In [.filename]#/etc/rc.subr#, a number of man:sh[1] functions are "
+"defined for an [.filename]#rc.d# script to use. The functions are "
+"documented in man:rc.subr[8]. While it is theoretically possible to write "
+"an [.filename]#rc.d# script without ever using man:rc.subr[8], its functions "
+"prove extremely handy and make the job an order of magnitude easier. So it "
+"is no surprise that everybody resorts to man:rc.subr[8] in [.filename]#rc.d# "
+"scripts. We are not going to be an exception."
+msgstr ""
+"&#10123; Em [.filename]#/etc/rc.subr#, uma série de funções man:sh[1] estão "
+"definidas para serem utilizadas por um script [.filename]#rc.d#. As funções "
+"estão documentadas em man:rc.subr[8]. Embora seja teoricamente possível "
+"escrever um script [.filename]#rc.d# sem nunca usar o man:rc.subr[8], suas "
+"funções provam ser extremamente úteis e tornam o trabalho uma ordem de "
+"magnitude mais fácil. Portanto, não é surpresa que todo mundo recorra ao "
+"man:rc.subr[8] em scripts [.filename]#rc.d#. Não seremos uma exceção."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:176
+msgid ""
+"An [.filename]#rc.d# script must \"source\"[.filename]#/etc/rc.subr# "
+"(include it using \"`.`\") _before_ it calls man:rc.subr[8] functions so "
+"that man:sh[1] has an opportunity to learn the functions. The preferred "
+"style is to source [.filename]#/etc/rc.subr# first of all."
+msgstr ""
+"Um script [.filename]#rc.d# deve fazer o \"source\" do [.filename]#/etc/rc."
+"subr# (inclua-o usando \"`.`\") _antes_ de chamar as funções man:rc.subr[8] "
+"para que o man:sh[1] tenha a oportunidade de aprender as funções. O estilo "
+"preferido é incluir o [.filename]#/etc/rc.subr# antes de tudo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:180
+msgid ""
+"Some useful functions related to networking are provided by another include "
+"file, [.filename]#/etc/network.subr#."
+msgstr ""
+"Algumas funções úteis relacionadas à rede são fornecidas por outro arquivo "
+"de inclusão, o [.filename]#/etc/network.subr#."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:185
+msgid ""
+"&#10124; [[name-var]]The mandatory variable `name` specifies the name of our "
+"script. It is required by man:rc.subr[8]. That is, each [.filename]#rc.d# "
+"script _must_ set `name` before it calls man:rc.subr[8] functions."
+msgstr ""
+"&#10124; A variável obrigatória `name` especifica o nome do nosso script. "
+"Ela é exigida pelo man:rc.subr[8]. Isso significa que cada script [."
+"filename]#rc.d# _deve_ definir `name` antes de chamar funções do man:rc."
+"subr[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:189
+msgid ""
+"Now it is the right time to choose a unique name for our script once and for "
+"all. We will use it in a number of places while developing the script. For "
+"a start, let us give the same name to the script file, too."
+msgstr ""
+"Agora é o momento certo para escolher um nome exclusivo para o nosso script "
+"de uma vez por todas. Vamos usá-lo em vários lugares enquanto desenvolvemos "
+"o script. Para começar, também vamos dar o mesmo nome ao arquivo de script."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:196
+msgid ""
+"The current style of [.filename]#rc.d# scripting is to enclose values "
+"assigned to variables in double quotes. Keep in mind that it is just a "
+"style issue that may not always be applicable. You can safely omit quotes "
+"from around simple words without man:sh[1] metacharacters in them, while in "
+"certain cases you will need single quotes to prevent any interpretation of "
+"the value by man:sh[1]. A programmer should be able to tell the language "
+"syntax from style conventions and use both of them wisely."
+msgstr ""
+"O estilo atual de escrita de scripts [.filename]#rc.d# é envolver os valores "
+"atribuídos às variáveis em aspas duplas. Tenha em mente que isso é apenas "
+"uma questão de estilo que nem sempre é aplicável. Você pode seguramente "
+"omitir as aspas ao redor de palavras simples sem metacaracteres man:sh[1], "
+"enquanto em certos casos você precisará de aspas simples para evitar "
+"qualquer interpretação do valor por man:sh[1]. Um programador deve ser capaz "
+"de distinguir a sintaxe da linguagem das convenções de estilo e usá-las "
+"sabiamente."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:202
+msgid ""
+"&#10125; The main idea behind man:rc.subr[8] is that an [.filename]#rc.d# "
+"script provides handlers, or methods, for man:rc.subr[8] to invoke. In "
+"particular, `start`, `stop`, and other arguments to an [.filename]#rc.d# "
+"script are handled this way. A method is a man:sh[1] expression stored in a "
+"variable named `argument_cmd`, where _argument_ corresponds to what can be "
+"specified on the script's command line. We will see later how man:rc."
+"subr[8] provides default methods for the standard arguments."
+msgstr ""
+"&#10125; Cada script [.filename]#rc.d# fornece manipuladores, ou métodos, "
+"para o man:rc.subr[8] invocar. Em particular, `start`, `stop`, e outros "
+"argumentos para um script [.filename]#rc.d# são manipulados desta forma. Um "
+"método é uma expressão man:sh[1] armazenada em uma variável chamada "
+"`argument_cmd`, onde _argument_ corresponde ao que pode ser especificado na "
+"linha de comando do script. Veremos mais tarde como o man:rc.subr[8] fornece "
+"métodos padrão para os argumentos padrão."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:207
+msgid ""
+"To make the code in [.filename]#rc.d# more uniform, it is common to use `"
+"${name}` wherever appropriate. Thus a number of lines can be just copied "
+"from one script to another."
+msgstr ""
+"Para tornar o código em [.filename]#rc.d# mais uniforme, é comum usar "
+"`${name}` sempre que apropriado. Assim, várias linhas podem ser simplesmente "
+"copiadas de um script para outro."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:211
+msgid ""
+"&#10126; We should keep in mind that man:rc.subr[8] provides default methods "
+"for the standard arguments. Consequently, we must override a standard "
+"method with a no-op man:sh[1] expression if we want it to do nothing."
+msgstr ""
+"&#10126; Devemos ter em mente que o man:rc.subr[8] fornece métodos padrões "
+"para os argumentos padrões. Consequentemente, devemos substituir um método "
+"padrão por uma expressão man:sh[1] sem efeito se quisermos que ele não faça "
+"nada."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:214
+msgid ""
+"&#10127; The body of a sophisticated method can be implemented as a "
+"function. It is a good idea to make the function name meaningful."
+msgstr ""
+"&#10127; O corpo de um método sofisticado pode ser implementado como uma "
+"função. É uma boa ideia dar um nome significativo à função."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:218
+msgid ""
+"It is strongly recommended to add the prefix `${name}` to the names of all "
+"functions defined in our script so they never clash with the functions from "
+"man:rc.subr[8] or another common include file."
+msgstr ""
+"Recomenda-se fortemente adicionar o prefixo `${name}` aos nomes de todas as "
+"funções definidas no nosso script para que nunca entrem em conflito com as "
+"funções de man:rc.subr[8] ou outro arquivo de inclusão comum."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:222
+msgid ""
+"&#10128; This call to man:rc.subr[8] loads man:rc.conf[5] variables. Our "
+"script makes no use of them yet, but it still is recommended to load man:rc."
+"conf[5] because there can be man:rc.conf[5] variables controlling man:rc."
+"subr[8] itself."
+msgstr ""
+"&#10128; Essa chamada para o man:rc.subr[8] carrega as variáveis do man:rc."
+"conf[5]. Nosso script ainda não as usa, mas ainda é recomendável carregar o "
+"man:rc.conf[5] porque pode haver variáveis do man:rc.conf[5] controlando o "
+"man:rc.subr[8] em si."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:225
+msgid ""
+"&#10129; Usually this is the last command in an [.filename]#rc.d# script. "
+"It invokes the man:rc.subr[8] machinery to perform the requested action "
+"using the variables and methods our script has provided."
+msgstr ""
+"&#10129; Geralmente, esse é o último comando em um script [.filename]#rc.d#. "
+"Ele invoca a maquinaria do man:rc.subr[8] para realizar a ação solicitada "
+"usando as variáveis e métodos que o nosso script forneceu."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:227
+#, no-wrap
+msgid "A configurable dummy script"
+msgstr "Um script fictício configurável"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:237
+msgid ""
+"Now let us add some controls to our dummy script. As you may know, [."
+"filename]#rc.d# scripts are controlled with man:rc.conf[5]. Fortunately, "
+"man:rc.subr[8] hides all the complications from us. The following script "
+"uses man:rc.conf[5] via man:rc.subr[8] to see whether it is enabled in the "
+"first place, and to fetch a message to show at boot time. These two tasks "
+"in fact are independent. On the one hand, an [.filename]#rc.d# script can "
+"just support enabling and disabling its service. On the other hand, a "
+"mandatory [.filename]#rc.d# script can have configuration variables. We "
+"will do both things in the same script though:"
+msgstr ""
+"Agora vamos adicionar alguns controles ao nosso script fictício. Como você "
+"deve saber, scripts [.filename]#rc.d# são controlados com o man:rc.conf[5]. "
+"Felizmente, o man:rc.subr[8] oculta todas as complicações para nós. O script "
+"a seguir usa o man:rc.conf[5] por meio do man:rc.subr[8] para verificar se "
+"está habilitado em primeiro lugar e para buscar uma mensagem para ser "
+"exibida na inicialização. Essas duas tarefas, na verdade, são independentes. "
+"Por um lado, um script [.filename]#rc.d# pode apenas suportar a habilitação "
+"e desabilitação do seu serviço. Por outro lado, um script [.filename]#rc.d# "
+"obrigatório pode ter variáveis de configuração. No entanto, faremos as duas "
+"coisas no mesmo script:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:241
+#: documentation/content/en/articles/rc-scripting/_index.adoc:332
+#: documentation/content/en/articles/rc-scripting/_index.adoc:389
+#: documentation/content/en/articles/rc-scripting/_index.adoc:621
+#: documentation/content/en/articles/rc-scripting/_index.adoc:752
+#, no-wrap
+msgid "#!/bin/sh\n"
+msgstr "#!/bin/sh\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:243
+#: documentation/content/en/articles/rc-scripting/_index.adoc:334
+#: documentation/content/en/articles/rc-scripting/_index.adoc:391
+#: documentation/content/en/articles/rc-scripting/_index.adoc:628
+#: documentation/content/en/articles/rc-scripting/_index.adoc:754
+#, no-wrap
+msgid ". /etc/rc.subr\n"
+msgstr ". /etc/rc.subr\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:246
+#, no-wrap
+msgid ""
+"name=dummy\n"
+"rcvar=dummy_enable <.>\n"
+msgstr ""
+"name=dummy\n"
+"rcvar=dummy_enable <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:249
+#, no-wrap
+msgid ""
+"start_cmd=\"${name}_start\"\n"
+"stop_cmd=\":\"\n"
+msgstr ""
+"start_cmd=\"${name}_start\"\n"
+"stop_cmd=\":\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:253
+#, no-wrap
+msgid ""
+"load_rc_config $name <.>\n"
+": ${dummy_enable:=no} <.>\n"
+": ${dummy_msg=\"Nothing started.\"} <.>\n"
+msgstr ""
+"load_rc_config $name <.>\n"
+": ${dummy_enable:=no} <.>\n"
+": ${dummy_msg=\"Nothing started.\"} <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:258
+#, no-wrap
+msgid ""
+"dummy_start()\n"
+"{\n"
+"\techo \"$dummy_msg\" <.>\n"
+"}\n"
+msgstr ""
+"dummy_start()\n"
+"{\n"
+"\techo \"$dummy_msg\" <.>\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:260
+#, no-wrap
+msgid "run_rc_command \"$1\"\n"
+msgstr "run_rc_command \"$1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:263
+msgid "What changed in this example?"
+msgstr "O que mudou neste exemplo?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:265
+msgid ""
+"&#10122; The variable `rcvar` specifies the name of the ON/OFF knob variable."
+msgstr ""
+"&#10122; A variável `rcvar` especifica o nome da variável do botão LIGA/"
+"DESLIGA."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:267
+msgid ""
+"&#10123; Now `load_rc_config` is invoked earlier in the script, before any "
+"man:rc.conf[5] variables are accessed."
+msgstr ""
+"&#10123; Agora, o `load_rc_config` é invocado mais cedo no script, antes que "
+"quaisquer variáveis do man:rc.conf[5] sejam acessadas."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:273
+msgid ""
+"While examining [.filename]#rc.d# scripts, keep in mind that man:sh[1] "
+"defers the evaluation of expressions in a function until the latter is "
+"called. Therefore it is not an error to invoke `load_rc_config` as late as "
+"just before `run_rc_command` and still access man:rc.conf[5] variables from "
+"the method functions exported to `run_rc_command`. This is because the "
+"method functions are to be called by `run_rc_command`, which is invoked "
+"_after_ `load_rc_config`."
+msgstr ""
+"Enquanto examina os scripts [.filename]#rc.d#, tenha em mente que o man:sh[1]"
+" adia a avaliação de expressões em uma função até que esta seja chamada. "
+"Portanto, não é um erro invocar `load_rc_config` tão tarde quanto logo antes "
+"de `run_rc_command` e ainda assim acessar as variáveis man:rc.conf[5] das "
+"funções de método exportadas para `run_rc_command`. Isso ocorre porque as "
+"funções de método devem ser chamadas por `run_rc_command`, que é invocado "
+"_após_ `load_rc_config`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:279
+msgid ""
+"&#10124; A warning will be emitted by `run_rc_command` if `rcvar` itself is "
+"set, but the indicated knob variable is unset. If your [.filename]#rc.d# "
+"script is for the base system, you should add a default setting for the knob "
+"to [.filename]#/etc/defaults/rc.conf# and document it in man:rc.conf[5]. "
+"Otherwise it is your script that should provide a default setting for the "
+"knob. The canonical approach to the latter case is shown in the example."
+msgstr ""
+"&#10124; Aviso será emitido pelo `run_rc_command` se o `rcvar` em si estiver "
+"configurado, mas a variável de controle indicada estiver desativada. Se o "
+"seu script [.filename]#rc.d# é para o sistema base, você deve adicionar uma "
+"configuração padrão para o knob em [.filename]#/etc/defaults/rc.conf# e "
+"documentá-lo em man:rc.conf[5]. Caso contrário, é seu script que deve "
+"fornecer uma configuração padrão para o knob. A abordagem canônica para o "
+"último caso é mostrada no exemplo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:286
+msgid ""
+"You can make man:rc.subr[8] act as though the knob is set to `ON`, "
+"irrespective of its current setting, by prefixing the argument to the script "
+"with `one` or `force`, as in `onestart` or `forcestop`. Keep in mind though "
+"that `force` has other dangerous effects we will touch upon below, while "
+"`one` just overrides the ON/OFF knob. E.g., assume that `dummy_enable` is "
+"`OFF`. The following command will run the `start` method in spite of the "
+"setting:"
+msgstr ""
+"Você pode fazer o man:rc.subr[8] agir como se o botão estivesse definido "
+"como `ON`, independentemente de sua configuração atual, prefixando o "
+"argumento do script com `one` ou `force`, como em `onestart` ou `forcestop`. "
+"No entanto, tenha em mente que `force` tem outros efeitos perigosos que "
+"abordaremos abaixo, enquanto `one` apenas substitui o botão ON/OFF. Por "
+"exemplo, suponha que `dummy_enable` esteja definido como `OFF`. O seguinte "
+"comando executará o método `start` apesar da configuração:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:290
+#, no-wrap
+msgid "# /etc/rc.d/dummy onestart\n"
+msgstr "# /etc/rc.d/dummy onestart\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:297
+msgid ""
+"&#10125; Now the message to be shown at boot time is no longer hard-coded in "
+"the script. It is specified by an man:rc.conf[5] variable named "
+"`dummy_msg`. This is a trivial example of how man:rc.conf[5] variables can "
+"control an [.filename]#rc.d# script."
+msgstr ""
+"&#10125; Agora a mensagem a ser exibida na inicialização não é mais "
+"codificada no script. É especificada por uma variável man:rc.conf[5] chamada "
+"`dummy_msg`. Este é um exemplo trivial de como as variáveis man:rc.conf[5] "
+"podem controlar um script [.filename]#rc.d#."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:302
+msgid ""
+"The names of all man:rc.conf[5] variables used exclusively by our script "
+"_must_ have the same prefix: `${name}_`. For example: `dummy_mode`, "
+"`dummy_state_file`, and so on."
+msgstr ""
+"Os nomes de todas as variáveis man:rc.conf[5] usadas exclusivamente pelo "
+"nosso script _devem_ ter o mesmo prefixo: `${name}_`. Por exemplo: "
+"`dummy_mode`, `dummy_state_file`, e assim por diante."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:307
+msgid ""
+"While it is possible to use a shorter name internally, e.g., just `msg`, "
+"adding the unique prefix `${name}_` to all global names introduced by our "
+"script will save us from possible collisions with the man:rc.subr[8] "
+"namespace."
+msgstr ""
+"Embora seja possível usar um nome mais curto internamente, por exemplo, "
+"apenas `msg`, adicionar o prefixo único `${name}_` a todos os nomes globais "
+"introduzidos pelo nosso script nos salvará de possíveis colisões com o "
+"namespace do man:rc.subr[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:310
+msgid ""
+"As a rule, [.filename]#rc.d# scripts of the base system need not provide "
+"defaults for their man:rc.conf[5] variables because the defaults should be "
+"set in [.filename]#/etc/defaults/rc.conf# instead. On the other hand, [."
+"filename]#rc.d# scripts for ports should provide the defaults as shown in "
+"the example."
+msgstr ""
+"Como regra geral, os scripts [.filename]#rc.d# do sistema base não precisam "
+"fornecer valores padrão para suas variáveis man:rc.conf[5], pois os valores "
+"padrão devem ser definidos em [.filename]#/etc/defaults/rc.conf#. Por outro "
+"lado, os scripts [.filename]#rc.d# para ports devem fornecer os valores "
+"padrão conforme mostrado no exemplo."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:314
+msgid ""
+"&#10126; Here we use `dummy_msg` to actually control our script, i.e., to "
+"emit a variable message. Use of a shell function is overkill here, since it "
+"only runs a single command; an equally valid alternative is:"
+msgstr ""
+"&#10126; Aqui usamos `dummy_msg` para controlar nosso script, ou seja, para "
+"emitir uma mensagem variável. O uso de uma função shell é excessivo aqui, "
+"uma vez que ela executa apenas um único comando; uma alternativa igualmente "
+"válida é:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:318
+#, no-wrap
+msgid "start_cmd=\"echo \\\"$dummy_msg\\\"\"\n"
+msgstr "start_cmd=\"echo \\\"$dummy_msg\\\"\"\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:321
+#, no-wrap
+msgid "Startup and shutdown of a simple daemon"
+msgstr "Inicialização e desligamento de um daemon simples"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:328
+msgid ""
+"We said earlier that man:rc.subr[8] could provide default methods. "
+"Obviously, such defaults cannot be too general. They are suited for the "
+"common case of starting and shutting down a simple daemon program. Let us "
+"assume now that we need to write an [.filename]#rc.d# script for such a "
+"daemon called `mumbled`. Here it is:"
+msgstr ""
+"Dissemos anteriormente que o man:rc.subr[8] pode fornecer métodos padrões. "
+"Obviamente, tais padrões não podem ser muito gerais. Eles são adequados para "
+"o caso comum de iniciar e desligar um programa de daemon simples. Vamos "
+"supor agora que precisamos escrever um script [.filename]#rc.d# para um "
+"daemon chamado `mumbled`. Aqui está:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:337
+#: documentation/content/en/articles/rc-scripting/_index.adoc:394
+#: documentation/content/en/articles/rc-scripting/_index.adoc:631
+#, no-wrap
+msgid ""
+"name=mumbled\n"
+"rcvar=mumbled_enable\n"
+msgstr ""
+"name=mumbled\n"
+"rcvar=mumbled_enable\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:339
+#, no-wrap
+msgid "command=\"/usr/sbin/${name}\" <.>\n"
+msgstr "command=\"/usr/sbin/${name}\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:342
+#: documentation/content/en/articles/rc-scripting/_index.adoc:440
+#: documentation/content/en/articles/rc-scripting/_index.adoc:646
+#, no-wrap
+msgid ""
+"load_rc_config $name\n"
+"run_rc_command \"$1\"\n"
+msgstr ""
+"load_rc_config $name\n"
+"run_rc_command \"$1\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:346
+msgid ""
+"Pleasingly simple, isn't it? Let us examine our little script. The only new "
+"thing to note is as follows:"
+msgstr ""
+"Agradavelmente simples, não é? Vamos examinar nosso pequeno script. A única "
+"coisa nova a observar é o seguinte:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:350
+msgid ""
+"&#10122; The `command` variable is meaningful to man:rc.subr[8]. If it is "
+"set, man:rc.subr[8] will act according to the scenario of serving a "
+"conventional daemon. In particular, the default methods will be provided "
+"for such arguments: `start`, `stop`, `restart`, `poll`, and `status`."
+msgstr ""
+"&#10122; A variável `command` é significativa para man:rc.subr[8]. Se ela "
+"estiver definida, man:rc.subr[8] agirá de acordo com o cenário de servir a "
+"um daemon convencional. Em particular, os métodos padrão serão fornecidos "
+"para esses argumentos: `start`, `stop`, `restart`, `poll` e `status`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:359
+msgid ""
+"The daemon will be started by running `$command` with command-line flags "
+"specified by `$mumbled_flags`. Thus all the input data for the default "
+"`start` method are available in the variables set by our script. Unlike "
+"`start`, other methods may require additional information about the process "
+"started. For instance, `stop` must know the PID of the process to terminate "
+"it. In the present case, man:rc.subr[8] will scan through the list of all "
+"processes, looking for a process with its name equal to `procname`. The "
+"latter is another variable of meaning to man:rc.subr[8], and its value "
+"defaults to that of `command`. In other words, when we set `command`, "
+"`procname` is effectively set to the same value. This enables our script to "
+"kill the daemon and to check if it is running in the first place."
+msgstr ""
+"O daemon será iniciado executando `$command` com as flags de linha de "
+"comando especificadas por `$mumbled_flags`. Assim, todos os dados de entrada "
+"para o método `start` padrão estão disponíveis nas variáveis definidas pelo "
+"nosso script. Ao contrário de `start`, outros métodos podem exigir "
+"informações adicionais sobre o processo iniciado. Por exemplo, `stop` deve "
+"saber o PID do processo para terminá-lo. No caso presente, man:rc.subr[8] "
+"irá pesquisar a lista de todos os processos, procurando por um processo com "
+"o nome igual a `procname`. Este último é outra variável com significado para "
+"man:rc.subr[8], e seu valor padrão é o de `command`. Em outras palavras, "
+"quando definimos `command`, `procname` é efetivamente definido para o mesmo "
+"valor. Isso permite que nosso script mate o daemon e verifique se ele está "
+"em execução."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:366
+msgid ""
+"Some programs are in fact executable scripts. The system runs such a script "
+"by starting its interpreter and passing the name of the script to it as a "
+"command-line argument. This is reflected in the list of processes, which "
+"can confuse man:rc.subr[8]. You should additionally set "
+"`command_interpreter` to let man:rc.subr[8] know the actual name of the "
+"process if `$command` is a script."
+msgstr ""
+"Algumas vezes, programas são de fato scripts executáveis. O sistema executa "
+"esse script iniciando o seu interpretador e passando o nome do script como "
+"um argumento na linha de comando. Isso é refletido na lista de processos, o "
+"que pode confundir man:rc.subr[8]. Você deve adicionalmente definir "
+"`command_interpreter` para que man:rc.subr[8] saiba o nome real do processo "
+"se `$command` for um script."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:371
+msgid ""
+"For each [.filename]#rc.d# script, there is an optional man:rc.conf[5] "
+"variable that takes precedence over `command`. Its name is constructed as "
+"follows: `${name}_program`, where `name` is the mandatory variable we "
+"discussed <<name-var, earlier>>. E.g., in this case it will be "
+"`mumbled_program`. It is man:rc.subr[8] that arranges `${name}_program` to "
+"override `command`."
+msgstr ""
+"A cada script [.filename]#rc.d#, há uma variável opcional do man:rc.conf[5] "
+"que tem precedência sobre `command`. Seu nome é construído da seguinte forma:"
+" `${name}_program`, onde `name` é a variável obrigatória discutida "
+"anteriormente. Por exemplo, neste caso, será `mumbled_program`. É o man:rc."
+"subr[8] que arruma `${name}_program` para substituir `command`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:375
+msgid ""
+"Of course, man:sh[1] will permit you to set `${name}_program` from man:rc."
+"conf[5] or the script itself even if `command` is unset. In that case, the "
+"special properties of `${name}_program` are lost, and it becomes an ordinary "
+"variable your script can use for its own purposes. However, the sole use of "
+"`${name}_program` is discouraged because using it together with `command` "
+"became an idiom of [.filename]#rc.d# scripting."
+msgstr ""
+"Claro que o man:sh[1] permite definir `${name}_program` a partir do man:rc."
+"conf[5] ou do próprio script, mesmo se `command` não estiver definido. Nesse "
+"caso, as propriedades especiais de `${name}_program` são perdidas, e ela se "
+"torna uma variável comum que o script pode usar para seus próprios fins. No "
+"entanto, o uso exclusivo de `${name}_program` é desencorajado, pois usá-la "
+"em conjunto com `command` se tornou idiomático em [.filename]#rc.d# "
+"scripting."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:378
+msgid ""
+"For more detailed information on default methods, refer to man:rc.subr[8]."
+msgstr ""
+"Para obter informações mais detalhadas sobre os métodos padrões, consulte "
+"man:rc.subr[8]."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:380
+#, no-wrap
+msgid "Startup and shutdown of an advanced daemon"
+msgstr "Inicialização e desligamento de um daemon avançado"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:385
+msgid ""
+"Let us add some meat onto the bones of the previous script and make it more "
+"complex and featureful. The default methods can do a good job for us, but "
+"we may need some of their aspects tweaked. Now we will learn how to tune "
+"the default methods to our needs."
+msgstr ""
+"Vamos adicionar um pouco de carne aos ossos do script anterior e torná-lo "
+"mais complexo e cheio de funcionalidades. Os métodos padrões podem fazer um "
+"bom trabalho para nós, mas podemos precisar ajustar alguns dos seus "
+"aspectos. Agora vamos aprender como ajustar os métodos padrões para as "
+"nossas necessidades."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:397
+#, no-wrap
+msgid ""
+"command=\"/usr/sbin/${name}\"\n"
+"command_args=\"mock arguments > /dev/null 2>&1\" <.>\n"
+msgstr ""
+"command=\"/usr/sbin/${name}\"\n"
+"command_args=\"mock arguments > /dev/null 2>&1\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:399
+#, no-wrap
+msgid "pidfile=\"/var/run/${name}.pid\" <.>\n"
+msgstr "pidfile=\"/var/run/${name}.pid\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:401
+#, no-wrap
+msgid "required_files=\"/etc/${name}.conf /usr/share/misc/${name}.rules\" <.>\n"
+msgstr ""
+"required_files=\"/etc/${name}.conf /usr/share/misc/${name}.rules\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:403
+#, no-wrap
+msgid "sig_reload=\"USR1\" <.>\n"
+msgstr "sig_reload=\"USR1\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:406
+#, no-wrap
+msgid ""
+"start_precmd=\"${name}_prestart\" <.>\n"
+"stop_postcmd=\"echo Bye-bye\" <.>\n"
+msgstr ""
+"start_precmd=\"${name}_prestart\" <.>\n"
+"stop_postcmd=\"echo Bye-bye\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:408
+#, no-wrap
+msgid "extra_commands=\"reload plugh xyzzy\" <.>\n"
+msgstr "extra_commands=\"reload plugh xyzzy\" <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:411
+#, no-wrap
+msgid ""
+"plugh_cmd=\"mumbled_plugh\" <.>\n"
+"xyzzy_cmd=\"echo 'Nothing happens.'\"\n"
+msgstr ""
+"plugh_cmd=\"mumbled_plugh\" <.>\n"
+"xyzzy_cmd=\"echo 'Nothing happens.'\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:432
+#, no-wrap
+msgid ""
+"mumbled_prestart()\n"
+"{\n"
+"\tif checkyesno mumbled_smart; then <.>\n"
+"\t\trc_flags=\"-o smart ${rc_flags}\" <.>\n"
+"\tfi\n"
+"\tcase \"$mumbled_mode\" in\n"
+"\tfoo)\n"
+"\t\trc_flags=\"-frotz ${rc_flags}\"\n"
+"\t\t;;\n"
+"\tbar)\n"
+"\t\trc_flags=\"-baz ${rc_flags}\"\n"
+"\t\t;;\n"
+"\t*)\n"
+"\t\twarn \"Invalid value for mumbled_mode\" <.>\n"
+"\t\treturn 1 <.>\n"
+"\t\t;;\n"
+"\tesac\n"
+"\trun_rc_command xyzzy <.>\n"
+"\treturn 0\n"
+"}\n"
+msgstr ""
+"mumbled_prestart()\n"
+"{\n"
+"\tif checkyesno mumbled_smart; then <.>\n"
+"\t\trc_flags=\"-o smart ${rc_flags}\" <.>\n"
+"\tfi\n"
+"\tcase \"$mumbled_mode\" in\n"
+"\tfoo)\n"
+"\t\trc_flags=\"-frotz ${rc_flags}\"\n"
+"\t\t;;\n"
+"\tbar)\n"
+"\t\trc_flags=\"-baz ${rc_flags}\"\n"
+"\t\t;;\n"
+"\t*)\n"
+"\t\twarn \"Invalid value for mumbled_mode\" <.>\n"
+"\t\treturn 1 <.>\n"
+"\t\t;;\n"
+"\tesac\n"
+"\trun_rc_command xyzzy <.>\n"
+"\treturn 0\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:437
+#, no-wrap
+msgid ""
+"mumbled_plugh() <.>\n"
+"{\n"
+"\techo 'A hollow voice says \"plugh\".'\n"
+"}\n"
+msgstr ""
+"mumbled_plugh() <.>\n"
+"{\n"
+"\techo 'A hollow voice says \"plugh\".'\n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:445
+msgid ""
+"&#10122; Additional arguments to `$command` can be passed in "
+"`command_args`. They will be added to the command line after `"
+"$mumbled_flags`. Since the final command line is passed to `eval` for its "
+"actual execution, input and output redirections can be specified in "
+"`command_args`."
+msgstr ""
+"&#10122; Argumentos adicionais para `$command` podem ser passados em "
+"`command_args`. Eles serão adicionados à linha de comando após "
+"`$mumbled_flags`. Como a linha de comando final é passada para `eval` para "
+"sua execução real, redirecionamentos de entrada e saída podem ser "
+"especificados em `command_args`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:452
+msgid ""
+"_Never_ include dashed options, like `-X` or `--foo`, in `command_args`. "
+"The contents of `command_args` will appear at the end of the final command "
+"line, hence they are likely to follow arguments present in `${name}_flags`; "
+"but most commands will not recognize dashed options after ordinary "
+"arguments. A better way of passing additional options to `$command` is to "
+"add them to the beginning of `${name}_flags`. Another way is to modify "
+"`rc_flags` <<rc-flags, as shown later>>."
+msgstr ""
+"_Nunca_ inclua opções com hífen, como `-X` ou `--foo`, em `command_args`. O "
+"conteúdo de `command_args` aparecerá no final da linha de comando final, "
+"portanto, é provável que sigam argumentos presentes em `${name}_flags`; mas "
+"a maioria dos comandos não reconhecerá opções com hífen após argumentos "
+"comuns. Uma maneira melhor de passar opções adicionais para `$command` é "
+"adicioná-las no início de `${name}_flags`. Outra maneira é modificar "
+"`rc_flags` <<rc-flags, conforme mostrado posteriormente>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:456
+msgid ""
+"&#10123; A good-mannered daemon should create a _pidfile_ so that its "
+"process can be found more easily and reliably. The variable `pidfile`, if "
+"set, tells man:rc.subr[8] where it can find the pidfile for its default "
+"methods to use."
+msgstr ""
+"&#10123; Um daemon bem comportado deve criar um _pidfile_ para que seu "
+"processo possa ser encontrado de forma mais fácil e confiável. A variável "
+"`pidfile`, se definida, informa ao man:rc.subr[8] onde ele pode encontrar o "
+"pidfile para ser utilizado em seus métodos padrões."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:461
+msgid ""
+"In fact, man:rc.subr[8] will also use the pidfile to see if the daemon is "
+"already running before starting it. This check can be skipped by using the "
+"`faststart` argument."
+msgstr ""
+"De fato, o man:rc.subr[8] também usa o pidfile para ver se o daemon já está "
+"em execução antes de iniciá-lo. Essa verificação pode ser ignorada usando o "
+"argumento `faststart`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:466
+msgid ""
+"&#10124; If the daemon cannot run unless certain files exist, just list them "
+"in `required_files`, and man:rc.subr[8] will check that those files do exist "
+"before starting the daemon. There also are `required_dirs` and "
+"`required_vars` for directories and environment variables, respectively. "
+"They all are described in detail in man:rc.subr[8]."
+msgstr ""
+"&#10124; Se o daemon não puder ser executado a menos que certos arquivos "
+"existam, basta listá-los em `required_files`, e o man:rc.subr[8] verificará "
+"se esses arquivos existem antes de iniciar o daemon. Existem também "
+"`required_dirs` e `required_vars` para diretórios e variáveis de ambiente, "
+"respectivamente. Todos eles são descritos em detalhes no man:rc.subr[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:470
+msgid ""
+"The default method from man:rc.subr[8] can be forced to skip the "
+"prerequisite checks by using `forcestart` as the argument to the script."
+msgstr ""
+"O método padrão do man:rc.subr[8] pode ser forçado a pular as verificações "
+"de pré-requisito usando `forcestart` como argumento para o script."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:476
+msgid ""
+"&#10125; We can customize signals to send to the daemon in case they differ "
+"from the well-known ones. In particular, `sig_reload` specifies the signal "
+"that makes the daemon reload its configuration; it is SIGHUP by default. "
+"Another signal is sent to stop the daemon process; the default is SIGTERM, "
+"but this can be changed by setting `sig_stop` appropriately."
+msgstr ""
+"&#10125; Podemos personalizar sinais a serem enviados ao daemon caso eles "
+"difiram dos sinais conhecidos. Em particular, `sig_reload` especifica o "
+"sinal que faz com que o daemon recarregue sua configuração; por padrão, é o "
+"SIGHUP. Outro sinal é enviado para interromper o processo do daemon; o "
+"padrão é o SIGTERM, mas isso pode ser alterado configurando `sig_stop` "
+"adequadamente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:481
+msgid ""
+"The signal names should be specified to man:rc.subr[8] without the `SIG` "
+"prefix, as it is shown in the example. The FreeBSD version of man:kill[1] "
+"can recognize the `SIG` prefix, but the versions from other OS types may not."
+msgstr ""
+"As sinalizações devem ser especificadas para o man:rc.subr[8] sem o prefixo "
+"`SIG`, como é mostrado no exemplo. A versão do FreeBSD do man:kill[1] pode "
+"reconhecer o prefixo `SIG`, mas as versões de outros sistemas operacionais "
+"podem não reconhecer."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:486
+msgid ""
+"&#10126;&#10127; Performing additional tasks before or after the default "
+"methods is easy. For each command-argument supported by our script, we can "
+"define `argument_precmd` and `argument_postcmd`. These man:sh[1] commands "
+"are invoked before and after the respective method, as it is evident from "
+"their names."
+msgstr ""
+"&#10126;&#10127; Realizar tarefas adicionais antes ou depois dos métodos "
+"padrões é fácil. Para cada argumento de comando suportado por nosso script, "
+"podemos definir `argument_precmd` e `argument_postcmd`. Esses comandos "
+"man:sh[1] são invocados antes e depois do respectivo método, como é evidente "
+"pelos seus nomes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:492
+msgid ""
+"Overriding a default method with a custom `argument_cmd` still does not "
+"prevent us from making use of `argument_precmd` or `argument_postcmd` if we "
+"need to. In particular, the former is good for checking custom, "
+"sophisticated conditions that should be met before performing the command "
+"itself. Using `argument_precmd` along with `argument_cmd` lets us logically "
+"separate the checks from the action."
+msgstr ""
+"Sobrescrever um método padrão com um `argument_cmd` personalizado ainda não "
+"nos impede de usar `argument_precmd` ou `argument_postcmd` se precisarmos. "
+"Em particular, o primeiro é bom para verificar condições personalizadas e "
+"sofisticadas que devem ser atendidas antes de executar o próprio comando. "
+"Usar `argument_precmd` juntamente com `argument_cmd` nos permite separar "
+"logicamente as verificações da ação."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:495
+msgid ""
+"Do not forget that you can cram any valid man:sh[1] expressions into the "
+"methods, pre-, and post-commands you define. Just invoking a function that "
+"makes the real job is a good style in most cases, but never let style limit "
+"your understanding of what is going on behind the curtain."
+msgstr ""
+"Não se esqueça de que você pode colocar qualquer expressão válida do "
+"man:sh[1] nos métodos, pre e pós comandos que você define. Invocar uma "
+"função que realiza o trabalho real é um bom estilo na maioria dos casos, mas "
+"nunca deixe o estilo limitar sua compreensão do que está acontecendo nos "
+"bastidores."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:498
+msgid ""
+"&#10128; If we would like to implement custom arguments, which can also be "
+"thought of as _commands_ to our script, we need to list them in "
+"`extra_commands` and provide methods to handle them."
+msgstr ""
+"&#10128; Se quisermos implementar argumentos personalizados, que também "
+"podem ser considerados como _comandos_ para o nosso script, precisamos listá-"
+"los em `extra_commands` e fornecer métodos para lidar com eles."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:506
+msgid ""
+"The `reload` command is special. On the one hand, it has a preset method in "
+"man:rc.subr[8]. On the other hand, `reload` is not offered by default. The "
+"reason is that not all daemons use the same reload mechanism and some have "
+"nothing to reload at all. So we need to ask explicitly that the builtin "
+"functionality be provided. We can do so via `extra_commands`."
+msgstr ""
+"O comando `reload` é especial. Por um lado, ele possui um método predefinido "
+"em man:rc.subr[8]. Por outro lado, `reload` não é oferecido por padrão. A "
+"razão é que nem todos os daemons usam o mesmo mecanismo de recarga e alguns "
+"não têm nada para recarregar. Portanto, precisamos pedir explicitamente que "
+"a funcionalidade integrada seja fornecida. Podemos fazer isso por meio de "
+"`extra_commands`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:510
+msgid ""
+"What do we get from the default method for `reload`? Quite often daemons "
+"reload their configuration upon reception of a signal - typically, SIGHUP. "
+"Therefore man:rc.subr[8] attempts to reload the daemon by sending a signal "
+"to it. The signal is preset to SIGHUP but can be customized via "
+"`sig_reload` if necessary."
+msgstr ""
+"O que recebemos do método padrão para `reload`? Muitas vezes, os daemons "
+"recarregam sua configuração após receber um sinal - geralmente, SIGHUP. "
+"Portanto, o man:rc.subr[8] tenta recarregar o daemon enviando um sinal para "
+"ele. O sinal é pré-definido como SIGHUP, mas pode ser personalizado via "
+"`sig_reload`, se necessário."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:515
+msgid ""
+"&#10129;&#9454; Our script supports two non-standard commands, `plugh` and "
+"`xyzzy`. We saw them listed in `extra_commands`, and now it is time to "
+"provide methods for them. The method for `xyzzy` is just inlined while that "
+"for `plugh` is implemented as the `mumbled_plugh` function."
+msgstr ""
+"&#10129;&#9454; O nosso script suporta dois comandos não padrão, `plugh` e "
+"`xyzzy`. Nós os vimos listados em `extra_commands`, e agora é hora de "
+"fornecer métodos para eles. O método para `xyzzy` é apenas inserido em linha "
+"enquanto que para `plugh` é implementado como a função `mumbled_plugh`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:519
+msgid ""
+"Non-standard commands are not invoked during startup or shutdown. Usually "
+"they are for the system admin's convenience. They can also be used from "
+"other subsystems, e.g., man:devd[8] if specified in man:devd.conf[5]."
+msgstr ""
+"Comandos não padrão não são invocados durante a inicialização ou "
+"desligamento. Geralmente, eles são para a conveniência do administrador do "
+"sistema. Eles também podem ser usados em outros subsistemas, por exemplo, o "
+"man:devd[8] se especificados em man:devd.conf[5]."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:522
+msgid ""
+"The full list of available commands can be found in the usage line printed "
+"by man:rc.subr[8] when the script is invoked without arguments. For "
+"example, here is the usage line from the script under study:"
+msgstr ""
+"A lista completa de comandos disponíveis pode ser encontrada na linha de uso "
+"impressa pelo man:rc.subr[8] quando o script é invocado sem argumentos. Por "
+"exemplo, aqui está a linha de uso do script em estudo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:527
+#, no-wrap
+msgid ""
+"# /etc/rc.d/mumbled\n"
+"Usage: /etc/rc.d/mumbled [fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)\n"
+msgstr ""
+"# /etc/rc.d/mumbled\n"
+"Usage: /etc/rc.d/mumbled "
+"[fast|force|one](start|stop|restart|rcvar|reload|plugh|xyzzy|status|poll)\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:534
+msgid ""
+"&#9453; A script can invoke its own standard or non-standard commands if "
+"needed. This may look similar to calling functions, but we know that "
+"commands and shell functions are not always the same thing. For instance, "
+"`xyzzy` is not implemented as a function here. In addition, there can be a "
+"pre-command and post-command, which should be invoked orderly. So the "
+"proper way for a script to run its own command is by means of man:rc."
+"subr[8], as shown in the example."
+msgstr ""
+"&#9453; Um script pode invocar seus próprios comandos padrão ou não-padrão, "
+"se necessário. Isso pode parecer semelhante a chamar funções, mas sabemos "
+"que comandos e funções do shell nem sempre são a mesma coisa. Por exemplo, "
+"`xyzzy` não é implementado como uma função aqui. Além disso, pode haver um "
+"pré-comando e um pós-comando, que devem ser invocados ordenadamente. "
+"Portanto, a maneira adequada para um script executar seu próprio comando é "
+"por meio do man:rc.subr[8], como mostrado no exemplo."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:540
+msgid ""
+"&#10130; A handy function named `checkyesno` is provided by man:rc.subr[8]. "
+"It takes a variable name as its argument and returns a zero exit code if and "
+"only if the variable is set to `YES`, or `TRUE`, or `ON`, or `1`, case "
+"insensitive; a non-zero exit code is returned otherwise. In the latter "
+"case, the function tests the variable for being set to `NO`, `FALSE`, `OFF`, "
+"or `0`, case insensitive; it prints a warning message if the variable "
+"contains anything else, i.e., junk."
+msgstr ""
+"&#10130; Uma função útil chamada `checkyesno` é fornecida pelo man:rc.subr[8]"
+". Ela recebe um nome de variável como argumento e retorna um código de saída "
+"zero se e somente se a variável estiver definida como `YES`, ou `TRUE`, ou "
+"`ON`, ou `1`, insensível a maiúsculas e minúsculas; um código de saída não-"
+"zero é retornado caso contrário. Neste último caso, a função testa se a "
+"variável está definida como `NO`, `FALSE`, `OFF` ou `0`, insensível a "
+"maiúsculas e minúsculas; ela imprime uma mensagem de aviso se a variável "
+"contiver qualquer outra coisa, ou seja, lixo."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:542
+msgid ""
+"Keep in mind that for man:sh[1] a zero exit code means true and a non-zero "
+"exit code means false."
+msgstr ""
+"Tenha em mente que para o man:sh[1], um código de saída zero significa "
+"verdadeiro e um código de saída não-zero significa falso."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:547
+msgid ""
+"The `checkyesno` function takes a __variable name__. Do not pass the "
+"expanded _value_ of a variable to it; it will not work as expected."
+msgstr ""
+"A função `checkyesno` recebe um __nome de variável__. Não passe o _valor "
+"expandido_ de uma variável para ela; isso não funcionará como esperado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:549
+msgid "The following is the correct usage of `checkyesno`:"
+msgstr "Aqui está o uso correto de `checkyesno`:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:555
+#, no-wrap
+msgid ""
+"if checkyesno mumbled_enable; then\n"
+" foo\n"
+"fi\n"
+msgstr ""
+"if checkyesno mumbled_enable; then\n"
+" foo\n"
+"fi\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:558
+msgid ""
+"On the contrary, calling `checkyesno` as shown below will not work - at "
+"least not as expected:"
+msgstr ""
+"Ao contrário, chamar `checkyesno` como mostrado abaixo não funcionará - pelo "
+"menos não como esperado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:564
+#, no-wrap
+msgid ""
+"if checkyesno \"${mumbled_enable}\"; then\n"
+" foo\n"
+"fi\n"
+msgstr ""
+"if checkyesno \"${mumbled_enable}\"; then\n"
+" foo\n"
+"fi\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:569
+msgid ""
+"&#10131; [[rc-flags]]We can affect the flags to be passed to `$command` by "
+"modifying `rc_flags` in `$start_precmd`."
+msgstr ""
+"&#10131; [[rc-flags]]Podemos afetar as flags que serão passadas para "
+"`$command` modificando `rc_flags` em `$start_precmd`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:573
+msgid ""
+"&#9451; In certain cases we may need to emit an important message that "
+"should go to `syslog` as well. This can be done easily with the following "
+"man:rc.subr[8] functions: `debug`, `info`, `warn`, and `err`. The latter "
+"function then exits the script with the code specified."
+msgstr ""
+"&#9451; Em certos casos, podemos precisar emitir uma mensagem importante que "
+"também deve ser registrada no `syslog`. Isso pode ser feito facilmente com "
+"as seguintes funções do man:rc.subr[8]: `debug`, `info`, `warn` e `err`. "
+"Esta última função finaliza o script com o código especificado."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:577
+msgid ""
+"&#9452; The exit codes from methods and their pre-commands are not just "
+"ignored by default. If `argument_precmd` returns a non-zero exit code, the "
+"main method will not be performed. In turn, `argument_postcmd` will not be "
+"invoked unless the main method returns a zero exit code."
+msgstr ""
+"&#9452; Os códigos de saída dos métodos e seus pre-comandos não são apenas "
+"ignorados por padrão. Se `argument_precmd` retornar um código de saída "
+"diferente de zero, o método principal não será executado. Por sua vez, "
+"`argument_postcmd` não será chamado, a menos que o método principal retorne "
+"um código de saída igual a zero."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:581
+msgid ""
+"However, man:rc.subr[8] can be instructed from the command line to ignore "
+"those exit codes and invoke all commands anyway by prefixing an argument "
+"with `force`, as in `forcestart`."
+msgstr ""
+"Entretanto, é possível instruir o man:rc.subr[8] a ignorar esses códigos de "
+"saída e executar todos os comandos mesmo assim, adicionando um argumento com "
+"o prefixo `force`, como em `forcestart`."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:584
+#, no-wrap
+msgid "Connecting a script to the rc.d framework"
+msgstr "Conectando um script ao framework rc.d"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:591
+msgid ""
+"After a script has been written, it needs to be integrated into [."
+"filename]#rc.d#. The crucial step is to install the script in [.filename]#/"
+"etc/rc.d# (for the base system) or [.filename]#/usr/local/etc/rc.d# (for "
+"ports). Both [.filename]#bsd.prog.mk# and [.filename]#bsd.port.mk# provide "
+"convenient hooks for that, and usually you do not have to worry about the "
+"proper ownership and mode. System scripts should be installed from [."
+"filename]#src/libexec/rc/rc.d# through the [.filename]#Makefile# found "
+"there. Port scripts can be installed using `USE_RC_SUBR` as described "
+"extref:{porters-handbook}[in the Porter's Handbook, rc-scripts]."
+msgstr ""
+"Depois que um script é escrito, ele precisa ser integrado ao [.filename]#rc."
+"d#. O passo crucial é instalar o script em [.filename]#/etc/rc.d# (para o "
+"sistema base) ou [.filename]#/usr/local/etc/rc.d# (para o ports). Tanto o [."
+"filename]#bsd.prog.mk# quanto o [.filename]#bsd.port.mk# fornecem ganchos "
+"convenientes para isso, e geralmente você não precisa se preocupar com a "
+"propriedade e o modo adequados. Os scripts do sistema devem ser instalados a "
+"partir de [.filename]#src/libexec/rc/rc.d# através do [.filename]#Makefile# "
+"encontrado lá. Scripts de ports podem ser instalados usando `USE_RC_SUBR` "
+"como descrito no extref:{porters-handbook}[Porter's Handbook, rc-scripts]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:596
+msgid ""
+"However, we should consider beforehand the place of our script in the system "
+"startup sequence. The service handled by our script is likely to depend on "
+"other services. For instance, a network daemon cannot function without the "
+"network interfaces and routing up and running. Even if a service seems to "
+"demand nothing, it can hardly start before the basic filesystems have been "
+"checked and mounted."
+msgstr ""
+"No entanto, devemos considerar antecipadamente o local do nosso script na "
+"sequência de inicialização do sistema. O serviço manipulado pelo nosso "
+"script provavelmente depende de outros serviços. Por exemplo, um daemon de "
+"rede não pode funcionar sem as interfaces de rede e o roteamento em "
+"funcionamento. Mesmo que um serviço pareça não exigir nada, dificilmente "
+"pode ser iniciado antes que os sistemas de arquivos básicos tenham sido "
+"verificados e montados."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:602
+msgid ""
+"We mentioned man:rcorder[8] already. Now it is time to have a close look at "
+"it. In a nutshell, man:rcorder[8] takes a set of files, examines their "
+"contents, and prints a dependency-ordered list of files from the set to "
+"`stdout`. The point is to keep dependency information _inside_ the files so "
+"that each file can speak for itself only. A file can specify the following "
+"information:"
+msgstr ""
+"Nós já mencionamos o man:rcorder[8]. Agora é hora de dar uma olhada mais de "
+"perto nele. Em poucas palavras, o man:rcorder[8] pega um conjunto de "
+"arquivos, examina seus conteúdos e imprime uma lista ordenada por "
+"dependência dos arquivos do conjunto no `stdout`. O objetivo é manter as "
+"informações de dependência _dentro_ dos arquivos, de modo que cada arquivo "
+"possa falar apenas por si mesmo. Um arquivo pode especificar as seguintes "
+"informações:"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:604
+msgid ""
+"the names of the \"conditions\" (which means services to us) it __provides__;"
+msgstr ""
+"os nomes das \"condições\" (ou seja, serviços para nós) que ele __fornece__;"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:605
+msgid "the names of the \"conditions\" it __requires__;"
+msgstr "os nomes das \"condições\" que ele __requer__;"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:606
+msgid "the names of the \"conditions\" this file should run __before__;"
+msgstr ""
+"os nomes das \"condições\" que este arquivo deve ser executado __antes__;"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:607
+msgid ""
+"additional _keywords_ that can be used to select a subset from the whole set "
+"of files (man:rcorder[8] can be instructed via options to include or omit "
+"the files having particular keywords listed.)"
+msgstr ""
+"palavras-chave adicionais que podem ser usadas para selecionar um "
+"subconjunto do conjunto completo de arquivos (man:rcorder[8] pode ser "
+"instruído via opções para incluir ou omitir os arquivos que possuem "
+"determinadas palavras-chave listadas.)"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:612
+msgid ""
+"It is no surprise that man:rcorder[8] can handle only text files with a "
+"syntax close to that of man:sh[1]. That is, special lines understood by man:"
+"rcorder[8] look like man:sh[1] comments. The syntax of such special lines "
+"is rather rigid to simplify their processing. See man:rcorder[8] for "
+"details."
+msgstr ""
+"Não é surpresa que o man:rcorder[8] possa lidar apenas com arquivos de texto "
+"com uma sintaxe próxima à do man:sh[1]. Ou seja, as linhas especiais "
+"entendidas pelo man:rcorder[8] se parecem com comentários do man:sh[1]. A "
+"sintaxe dessas linhas especiais é bastante rígida para simplificar seu "
+"processamento. Consulte man:rcorder[8] para obter detalhes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:615
+msgid ""
+"Besides using man:rcorder[8] special lines, a script can insist on its "
+"dependency upon another service by just starting it forcibly. This can be "
+"needed when the other service is optional and will not start by itself "
+"because the system admin has disabled it mistakenly in man:rc.conf[5]."
+msgstr ""
+"Além de usar as linhas especiais entendidas pelo man:rcorder[8], um script "
+"pode exigir sua dependência de outro serviço simplesmente iniciando-o "
+"forçadamente. Isso pode ser necessário quando o outro serviço é opcional e "
+"não iniciará por si só porque o administrador do sistema o desativou por "
+"engano em man:rc.conf[5]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:617
+msgid ""
+"With this general knowledge in mind, let us consider the simple daemon "
+"script enhanced with dependency stuff:"
+msgstr ""
+"Com este conhecimento geral em mente, vamos considerar o simples script "
+"daemon aprimorado com coisas de dependência:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:626
+#, no-wrap
+msgid ""
+"# PROVIDE: mumbled oldmumble <.>\n"
+"# REQUIRE: DAEMON cleanvar frotz <.>\n"
+"# BEFORE: LOGIN <.>\n"
+"# KEYWORD: nojail shutdown <.>\n"
+msgstr ""
+"# PROVIDE: mumbled oldmumble <.>\n"
+"# REQUIRE: DAEMON cleanvar frotz <.>\n"
+"# BEFORE: LOGIN <.>\n"
+"# KEYWORD: nojail shutdown <.>\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:634
+#, no-wrap
+msgid ""
+"command=\"/usr/sbin/${name}\"\n"
+"start_precmd=\"${name}_prestart\"\n"
+msgstr ""
+"command=\"/usr/sbin/${name}\"\n"
+"start_precmd=\"${name}_prestart\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:643
+#, no-wrap
+msgid ""
+"mumbled_prestart()\n"
+"{\n"
+"\tif ! checkyesno frotz_enable && \\\n"
+"\t ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then\n"
+"\t\tforce_depend frotz || return 1 <.>\n"
+"\tfi\n"
+"\treturn 0\n"
+"}\n"
+msgstr ""
+"mumbled_prestart()\n"
+"{\n"
+"\tif ! checkyesno frotz_enable && \\\n"
+"\t ! /etc/rc.d/frotz forcestatus 1>/dev/null 2>&1; then\n"
+"\t\tforce_depend frotz || return 1 <.>\n"
+"\tfi\n"
+"\treturn 0\n"
+"}\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:649
+msgid "As before, detailed analysis follows:"
+msgstr "Como antes, a análise detalhada segue:"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:652
+msgid ""
+"&#10122; That line declares the names of \"conditions\" our script "
+"provides. Now other scripts can record a dependency on our script by those "
+"names."
+msgstr ""
+"&#10122; Essa linha declara os nomes das \"condições\" que nosso script "
+"fornece. Agora, outros scripts podem registrar uma dependência em nosso "
+"script por esses nomes."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:657
+msgid ""
+"Usually a script specifies a single condition provided. However, nothing "
+"prevents us from listing several conditions there, e.g., for compatibility "
+"reasons."
+msgstr ""
+"Geralmente, um script especifica uma única condição fornecida. No entanto, "
+"nada nos impede de listar várias condições, por exemplo, por razões de "
+"compatibilidade."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:659
+msgid ""
+"In any case, the name of the main, or the only, `PROVIDE:` condition should "
+"be the same as `${name}`."
+msgstr ""
+"Em qualquer caso, o nome da condição principal, ou única, `PROVIDE:` deve "
+"ser o mesmo que `${name}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:663
+msgid ""
+"&#10123;&#10124; So our script indicates which \"conditions\" provided by "
+"other scripts it depends on. According to the lines, our script asks man:"
+"rcorder[8] to put it after the script(s) providing [.filename]#DAEMON# and [."
+"filename]#cleanvar#, but before that providing [.filename]#LOGIN#."
+msgstr ""
+"&#10123;&#10124; Então, nosso script indica em quais \"condições\" "
+"fornecidas por outros scripts ele depende. De acordo com as linhas, nosso "
+"script pede para o man:rcorder[8] colocá-lo após o(s) script(s) fornecendo o "
+"[.filename]#DAEMON# e o [.filename]#cleanvar#, mas antes daquele que fornece "
+"[.filename]#LOGIN#."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:669
+msgid ""
+"The `BEFORE:` line should not be abused to work around an incomplete "
+"dependency list in the other script. The appropriate case for using `BEFORE:"
+"` is when the other script does not care about ours, but our script can do "
+"its task better if run before the other one. A typical real-life example is "
+"the network interfaces vs. the firewall: While the interfaces do not depend "
+"on the firewall in doing their job, the system security will benefit from "
+"the firewall being ready before there is any network traffic."
+msgstr ""
+"A linha `BEFORE:` não deve ser usada para contornar uma lista de "
+"dependências incompleta em outro script. O caso apropriado para usar "
+"`BEFORE:` é quando o outro script não se importa com o nosso, mas nosso "
+"script pode executar sua tarefa melhor se for executado antes do outro. Um "
+"exemplo típico da vida real é a relação entre as interfaces de rede e o "
+"firewall: embora as interfaces não dependam do firewall para fazer o "
+"trabalho delas, a segurança do sistema se beneficiará se o firewall estiver "
+"pronto antes de haver qualquer tráfego de rede."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:673
+msgid ""
+"Besides conditions corresponding to a single service each, there are meta-"
+"conditions and their \"placeholder\" scripts used to ensure that certain "
+"groups of operations are performed before others. These are denoted by [."
+"filename]#UPPERCASE# names. Their list and purposes can be found in man:"
+"rc[8]."
+msgstr ""
+"Além das condições correspondentes a um único serviço, existem meta-"
+"condições e seus scripts \"placeholder\" usados para garantir que certos "
+"grupos de operações sejam executados antes de outros. Estes são denotados "
+"por nomes em [.filename]#UPPERCASE#. Sua lista e propósitos podem ser "
+"encontrados no manual man:rc[8]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:679
+msgid ""
+"Keep in mind that putting a service name in the `REQUIRE:` line does not "
+"guarantee that the service will actually be running by the time our script "
+"starts. The required service may fail to start or just be disabled in man:"
+"rc.conf[5]. Obviously, man:rcorder[8] cannot track such details, and man:"
+"rc[8] will not do that either. Consequently, the application started by our "
+"script should be able to cope with any required services being unavailable. "
+"In certain cases, we can help it as discussed <<forcedep, below>>"
+msgstr ""
+"Lembre-se de que colocar o nome de um serviço na linha `REQUIRE:` não "
+"garante que o serviço realmente estará em execução no momento em que o "
+"script começar. O serviço necessário pode falhar ao iniciar ou simplesmente "
+"ser desativado em man:rc.conf[5]. Obviamente, o man:rcorder[8] não pode "
+"controlar esses detalhes e o man:rc[8] também não fará isso. "
+"Consequentemente, a aplicação iniciada pelo nosso script deve ser capaz de "
+"lidar com qualquer serviço necessário que esteja indisponível. Em certos "
+"casos, podemos ajudá-lo conforme discutido <<forcedep, abaixo>>"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:684
+msgid ""
+"[[keywords]]&#10125; As we remember from the above text, man:rcorder[8] "
+"keywords can be used to select or leave out some scripts. Namely any man:"
+"rcorder[8] consumer can specify through `-k` and `-s` options which keywords "
+"are on the \"keep list\" and \"skip list\", respectively. From all the "
+"files to be dependency sorted, man:rcorder[8] will pick only those having a "
+"keyword from the keep list (unless empty) and not having a keyword from the "
+"skip list."
+msgstr ""
+"[[keywords]]&#10125; Como lembramos do texto acima, as palavras-chave do "
+"man:rcorder[8] podem ser usadas para selecionar ou deixar de fora alguns "
+"scripts. Qualquer consumidor do man:rcorder[8] pode especificar, através das "
+"opções `-k` e `-s`, quais palavras-chave estarão na \"lista de manutenção\" "
+"e na \"lista de exclusão\", respectivamente. De todos os arquivos a serem "
+"ordenados por dependência, man:rcorder[8] escolherá apenas aqueles que "
+"tiverem uma palavra-chave da lista de manutenção (a menos que esteja vazia) "
+"e que não tiverem uma palavra-chave da lista de exclusão."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:687
+msgid ""
+"In FreeBSD, man:rcorder[8] is used by [.filename]#/etc/rc# and [.filename]#/"
+"etc/rc.shutdown#. These two scripts define the standard list of FreeBSD [."
+"filename]#rc.d# keywords and their meanings as follows:"
+msgstr ""
+"No FreeBSD, o man:rcorder[8] é usado por [.filename]#/etc/rc# e [.filename]#/"
+"etc/rc.shutdown#. Esses dois scripts definem a lista padrão de palavras-"
+"chaves do FreeBSD [.filename]#rc.d# e seus significados da seguinte forma:"
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:688
+#, no-wrap
+msgid "nojail"
+msgstr "nojail"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:690
+msgid ""
+"The service is not for man:jail[8] environment. The automatic startup and "
+"shutdown procedures will ignore the script if inside a jail."
+msgstr ""
+"O serviço não é para ambiente man:jail[8]. Os procedimentos automáticos de "
+"inicialização e desligamento ignorarão o script se estiver dentro de uma "
+"jail."
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:691
+#, no-wrap
+msgid "nostart"
+msgstr "nostart"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:694
+msgid ""
+"The service is to be started manually or not started at all. The automatic "
+"startup procedure will ignore the script. In conjunction with the [."
+"filename]#shutdown# keyword, this can be used to write scripts that do "
+"something only at system shutdown."
+msgstr ""
+"O serviço deve ser iniciado manualmente ou não iniciado de forma alguma. O "
+"procedimento de inicialização automático ignorará o script. Em conjunto com "
+"a palavra-chave [.filename]#shutdown#, isso pode ser usado para escrever "
+"scripts que fazem algo apenas no desligamento do sistema."
+
+#. type: Labeled list
+#: documentation/content/en/articles/rc-scripting/_index.adoc:695
+#, no-wrap
+msgid "shutdown"
+msgstr "shutdown"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:696
+msgid ""
+"This keyword is to be listed __explicitly__ if the service needs to be "
+"stopped before system shutdown."
+msgstr ""
+"Este palavra-chave deve ser listada de forma __explícita__ se o serviço "
+"precisa ser parado antes do desligamento do sistema."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:709
+msgid ""
+"When the system is going to shut down, [.filename]#/etc/rc.shutdown# runs. "
+"It assumes that most [.filename]#rc.d# scripts have nothing to do at that "
+"time. Therefore [.filename]#/etc/rc.shutdown# selectively invokes [."
+"filename]#rc.d# scripts with the [.filename]#shutdown# keyword, effectively "
+"ignoring the rest of the scripts. For even faster shutdown, [.filename]#/"
+"etc/rc.shutdown# passes the [.filename]#faststop# command to the scripts it "
+"runs so that they skip preliminary checks, e.g., the pidfile check. As "
+"dependent services should be stopped before their prerequisites, [."
+"filename]#/etc/rc.shutdown# runs the scripts in reverse dependency order. "
+"If writing a real [.filename]#rc.d# script, you should consider whether it "
+"is relevant at system shutdown time. E.g., if your script does its work in "
+"response to the [.filename]#start# command only, then you need not to "
+"include this keyword. However, if your script manages a service, it is "
+"probably a good idea to stop it before the system proceeds to the final "
+"stage of its shutdown sequence described in man:halt[8]. In particular, a "
+"service should be stopped explicitly if it needs considerable time or "
+"special actions to shut down cleanly. A typical example of such a service "
+"is a database engine."
+msgstr ""
+"Quando o sistema está prestes a desligar, o arquivo [.filename]#/etc/rc."
+"shutdown# é executado. Ele assume que a maioria dos scripts [.filename]#rc.d#"
+" não tem nada a fazer nesse momento. Portanto, o [.filename]#/etc/rc."
+"shutdown# invoca seletivamente scripts [.filename]#rc.d# com a palavra-chave "
+"[.filename]#shutdown#, ignorando efetivamente o restante dos scripts. Para "
+"desligamento ainda mais rápido, o [.filename]#/etc/rc.shutdown# passa o "
+"comando [.filename]#faststop# para os scripts que executa para que eles "
+"pulem verificações preliminares, como a verificação do pidfile. Como os "
+"serviços dependentes devem ser interrompidos antes de suas dependências, o [."
+"filename]#/etc/rc.shutdown# executa os scripts em ordem de dependência "
+"reversa. Se você está escrevendo um script [.filename]#rc.d# real, deve "
+"considerar se ele é relevante no momento do desligamento do sistema. Por "
+"exemplo, se o seu script faz seu trabalho apenas em resposta ao comando [."
+"filename]#start#, então você não precisa incluir essa palavra-chave. No "
+"entanto, se o seu script gerencia um serviço, é provavelmente uma boa ideia "
+"pará-lo antes que o sistema prossiga para o estágio final de sua sequência "
+"de desligamento descrita em man:halt[8]. Em particular, um serviço deve ser "
+"interrompido explicitamente se precisar de tempo considerável ou ações "
+"especiais para ser desligado corretamente. Um exemplo típico desse tipo de "
+"serviço é um mecanismo de banco de dados."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:713
+msgid ""
+"[[forcedep]]&#10126; To begin with, `force_depend` should be used with much "
+"care. It is generally better to revise the hierarchy of configuration "
+"variables for your [.filename]#rc.d# scripts if they are interdependent."
+msgstr ""
+"[[forcedep]] &#10126; Em primeiro lugar, `force_depend` deve ser usado com "
+"muito cuidado. Geralmente, é melhor revisar a hierarquia das variáveis de "
+"configuração para seus scripts [.filename]#rc.d# se eles são "
+"interdependentes."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:722
+msgid ""
+"If you still cannot do without `force_depend`, the example offers an idiom "
+"of how to invoke it conditionally. In the example, our `mumbled` daemon "
+"requires that another one, `frotz`, be started in advance. However, `frotz` "
+"is optional, too; and man:rcorder[8] knows nothing about such details. "
+"Fortunately, our script has access to all man:rc.conf[5] variables. If "
+"`frotz_enable` is true, we hope for the best and rely on [.filename]#rc.d# "
+"to have started `frotz`. Otherwise we forcibly check the status of "
+"`frotz`. Finally, we enforce our dependency on `frotz` if it is found to be "
+"not running. A warning message will be emitted by `force_depend` because it "
+"should be invoked only if a misconfiguration has been detected."
+msgstr ""
+"Se ainda assim você não puder abrir mão do `force_depend`, o exemplo oferece "
+"um exemplo de como invocá-lo condicionalmente. No exemplo, nosso daemon "
+"`mumbled` requer que outro daemon, `frotz`, seja iniciado antecipadamente. "
+"No entanto, `frotz` também é opcional; e o man:rcorder[8] não conhece esses "
+"detalhes. Felizmente, nosso script tem acesso a todas as variáveis de man:rc."
+"conf[5]. Se `frotz_enable` for verdadeiro, esperamos o melhor e confiamos no "
+"[.filename]#rc.d# para ter iniciado `frotz`. Caso contrário, verificamos "
+"forçadamente o status de `frotz`. Finalmente, impomos nossa dependência em "
+"`frotz` se ele não estiver em execução. Uma mensagem de aviso será emitida "
+"por `force_depend`, pois ele só deve ser invocado se uma configuração "
+"incorreta for detectada."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:724
+#, no-wrap
+msgid "Giving more flexibility to an rc.d script"
+msgstr "Dando mais flexibilidade a um script rc.d"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:733
+msgid ""
+"When invoked during startup or shutdown, an [.filename]#rc.d# script is "
+"supposed to act on the entire subsystem it is responsible for. E.g., [."
+"filename]#/etc/rc.d/netif# should start or stop all network interfaces "
+"described by man:rc.conf[5]. Either task can be uniquely indicated by a "
+"single command argument such as `start` or `stop`. Between startup and "
+"shutdown, [.filename]#rc.d# scripts help the admin to control the running "
+"system, and it is when the need for more flexibility and precision arises. "
+"For instance, the admin may want to add the settings of a new network "
+"interface to man:rc.conf[5] and then to start it without interfering with "
+"the operation of the existing interfaces. Next time the admin may need to "
+"shut down a single network interface. In the spirit of the command line, "
+"the respective [.filename]#rc.d# script calls for an extra argument, the "
+"interface name."
+msgstr ""
+"Quando invocado durante a inicialização ou desligamento, um script [."
+"filename]#rc.d# deve agir em todo o subsistema pelo qual é responsável. Por "
+"exemplo, o [.filename]#/etc/rc.d/netif# deve iniciar ou parar todas as "
+"interfaces de rede descritas em man:rc.conf[5]. Cada tarefa pode ser "
+"indicada por um único argumento de comando, como `start` ou `stop`. Entre a "
+"inicialização e o desligamento, os scripts [.filename]#rc.d# ajudam o "
+"administrador a controlar o sistema em execução e é quando surge a "
+"necessidade de mais flexibilidade e precisão. Por exemplo, o administrador "
+"pode querer adicionar as configurações de uma nova interface de rede em "
+"man:rc.conf[5] e, em seguida, iniciá-la sem interferir na operação das "
+"interfaces existentes. Na próxima vez, o administrador pode precisar "
+"desligar uma única interface de rede. Para facilitar o uso na linha de "
+"comando, o respectivo script [.filename]#rc.d# pede um argumento extra, o "
+"nome da interface."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:736
+msgid ""
+"Fortunately, man:rc.subr[8] allows for passing any number of arguments to "
+"script's methods (within the system limits). Due to that, the changes in "
+"the script itself can be minimal."
+msgstr ""
+"Felizmente, o man:rc.subr[8] permite passar qualquer número de argumentos "
+"para os métodos do script (dentro dos limites do sistema). Devido a isso, as "
+"mudanças no próprio script podem ser mínimas."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:741
+msgid ""
+"How can man:rc.subr[8] gain access to the extra command-line arguments. "
+"Should it just grab them directly? Not by any means. Firstly, an man:sh[1] "
+"function has no access to the positional parameters of its caller, but man:"
+"rc.subr[8] is just a sack of such functions. Secondly, the good manner of [."
+"filename]#rc.d# dictates that it is for the main script to decide which "
+"arguments are to be passed to its methods."
+msgstr ""
+"Como o man:rc.subr[8] pode ter acesso aos argumentos adicionais da linha de "
+"comando? Ele deve simplesmente pegá-los diretamente? De maneira alguma! Em "
+"primeiro lugar, uma função do man:sh[1] não tem acesso aos parâmetros "
+"posicionais de quem a chamou, mas o man:rc.subr[8] é apenas um conjunto "
+"dessas funções. Em segundo lugar, a boa prática do [.filename]#rc.d# dita "
+"que é responsabilidade do script principal decidir quais argumentos devem "
+"ser passados para seus métodos."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:745
+msgid ""
+"So the approach adopted by man:rc.subr[8] is as follows: `run_rc_command` "
+"passes on all its arguments but the first one to the respective method "
+"verbatim. The first, omitted, argument is the name of the method itself: "
+"`start`, `stop`, etc. It will be shifted out by `run_rc_command`, so what "
+"is `$2` in the original command line will be presented as `$1` to the "
+"method, and so on."
+msgstr ""
+"Portanto, a abordagem adotada pelo man:rc.subr[8] é a seguinte: "
+"`run_rc_command` passa todos os seus argumentos, exceto o primeiro, ao "
+"respectivo método sem alterações. O primeiro argumento omitido é o nome do "
+"método em si: `start`, `stop`, etc. Ele será removido por `run_rc_command`, "
+"então o que é `$2` na linha de comando original será apresentado como `$1` "
+"para o método, e assim por diante."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:748
+msgid ""
+"To illustrate this opportunity, let us modify the primitive dummy script so "
+"that its messages depend on the additional arguments supplied. Here we go:"
+msgstr ""
+"Para ilustrar essa oportunidade, vamos modificar o script fictício primitivo "
+"para que suas mensagens dependam dos argumentos adicionais fornecidos. Aqui "
+"vamos nós:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:760
+#, no-wrap
+msgid ""
+"name=\"dummy\"\n"
+"start_cmd=\"${name}_start\"\n"
+"stop_cmd=\":\"\n"
+"kiss_cmd=\"${name}_kiss\"\n"
+"extra_commands=\"kiss\"\n"
+msgstr ""
+"name=\"dummy\"\n"
+"start_cmd=\"${name}_start\"\n"
+"stop_cmd=\":\"\n"
+"kiss_cmd=\"${name}_kiss\"\n"
+"extra_commands=\"kiss\"\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:769
+#, no-wrap
+msgid ""
+"dummy_start()\n"
+"{\n"
+" if [ $# -gt 0 ]; then <.>\n"
+" echo \"Greeting message: $*\"\n"
+" else\n"
+" echo \"Nothing started.\"\n"
+" fi\n"
+"}\n"
+msgstr ""
+"dummy_start()\n"
+"{\n"
+" if [ $# -gt 0 ]; then <.>\n"
+" echo \"Greeting message: $*\"\n"
+" else\n"
+" echo \"Nothing started.\"\n"
+" fi\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:785
+#, no-wrap
+msgid ""
+"dummy_kiss()\n"
+"{\n"
+" echo -n \"A ghost gives you a kiss\"\n"
+" if [ $# -gt 0 ]; then <.>\n"
+" echo -n \" and whispers: $*\"\n"
+" fi\n"
+" case \"$*\" in\n"
+" *[.!?])\n"
+" echo\n"
+" ;;\n"
+" *)\n"
+" echo .\n"
+" ;;\n"
+" esac\n"
+"}\n"
+msgstr ""
+"dummy_kiss()\n"
+"{\n"
+" echo -n \"A ghost gives you a kiss\"\n"
+" if [ $# -gt 0 ]; then <.>\n"
+" echo -n \" and whispers: $*\"\n"
+" fi\n"
+" case \"$*\" in\n"
+" *[.!?])\n"
+" echo\n"
+" ;;\n"
+" *)\n"
+" echo .\n"
+" ;;\n"
+" esac\n"
+"}\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:788
+#, no-wrap
+msgid ""
+"load_rc_config $name\n"
+"run_rc_command \"$@\" <.>\n"
+msgstr ""
+"load_rc_config $name\n"
+"run_rc_command \"$@\" <.>\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:791
+msgid "What essential changes can we notice in the script?"
+msgstr "Quais mudanças essenciais podemos notar no script?"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:796
+msgid ""
+"&#10122; All arguments you type after `start` can end up as positional "
+"parameters to the respective method. We can use them in any way according "
+"to our task, skills, and fancy. In the current example, we just pass all of "
+"them to man:echo[1] as one string in the next line - note `$*` within the "
+"double quotes. Here is how the script can be invoked now:"
+msgstr ""
+"&#10122; Todos os argumentos que você digita após `start` podem acabar como "
+"parâmetros posicionais para o respectivo método. Podemos usá-los de qualquer "
+"maneira de acordo com nossa tarefa, habilidades e gosto. No exemplo atual, "
+"simplesmente passamos todos eles para o man:echo[1] como uma única string na "
+"próxima linha - observe o `$*` dentro das aspas duplas. Aqui está como o "
+"script pode ser invocado agora:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:801
+#, no-wrap
+msgid ""
+"# /etc/rc.d/dummy start\n"
+"Nothing started.\n"
+msgstr ""
+"# /etc/rc.d/dummy start\n"
+"Nothing started.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:804
+#, no-wrap
+msgid ""
+"# /etc/rc.d/dummy start Hello world!\n"
+"Greeting message: Hello world!\n"
+msgstr ""
+"# /etc/rc.d/dummy start Hello world!\n"
+"Greeting message: Hello world!\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:808
+msgid ""
+"&#10123; The same applies to any method our script provides, not only to a "
+"standard one. We have added a custom method named `kiss`, and it can take "
+"advantage of the extra arguments not less than `start` does. E.g.:"
+msgstr ""
+"&#10123; O mesmo se aplica a qualquer método que nosso script ofereça, não "
+"apenas a um padrão. Adicionamos um método personalizado chamado `kiss`, e "
+"ele pode tirar proveito dos argumentos extras da mesma forma que o `start` "
+"pode. Por exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:813
+#, no-wrap
+msgid ""
+"# /etc/rc.d/dummy kiss\n"
+"A ghost gives you a kiss.\n"
+msgstr ""
+"# /etc/rc.d/dummy kiss\n"
+"A ghost gives you a kiss.\n"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:816
+#, no-wrap
+msgid ""
+"# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...\n"
+"A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...\n"
+msgstr ""
+"# /etc/rc.d/dummy kiss Once I was Etaoin Shrdlu...\n"
+"A ghost gives you a kiss and whispers: Once I was Etaoin Shrdlu...\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:819
+msgid ""
+"&#10124; If we want just to pass all extra arguments to any method, we can "
+"merely substitute `\"$@\"` for `\"$1\"` in the last line of our script, "
+"where we invoke `run_rc_command`."
+msgstr ""
+"&#10124; Se quisermos apenas passar todos os argumentos extras para qualquer "
+"método, podemos simplesmente substituir `\"$1\"` por `\"$@\"` na última "
+"linha do nosso script, onde invocamos `run_rc_command`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:825
+msgid ""
+"An man:sh[1] programmer ought to understand the subtle difference between `"
+"$*` and `$@` as the ways to designate all positional parameters. For its in-"
+"depth discussion, refer to a good handbook on man:sh[1] scripting. _Do not_ "
+"use the expressions until you fully understand them because their misuse "
+"will result in buggy and insecure scripts."
+msgstr ""
+"Um programador em man:sh[1] deve entender a diferença sutil entre `$*` e `$@`"
+" como formas de designar todos os parâmetros posicionais. Para uma discussão "
+"aprofundada, consulte um bom manual de man:sh[1]. Não use essas expressões "
+"até entender completamente o seu uso, pois o uso incorreto pode resultar em "
+"scripts com bugs e inseguros."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/rc-scripting/_index.adoc:832
+msgid ""
+"Currently `run_rc_command` may have a bug that prevents it from keeping the "
+"original boundaries between arguments. That is, arguments with embedded "
+"whitespace may not be processed correctly. The bug stems from `$*` misuse."
+msgstr ""
+"Atualmente, o `run_rc_command` pode ter um bug que o impede de manter as "
+"fronteiras originais entre os argumentos. Ou seja, argumentos com espaços em "
+"branco embutidos podem não ser processados corretamente. O bug decorre do "
+"uso inadequado de `$*`."
+
+#. type: Title ==
+#: documentation/content/en/articles/rc-scripting/_index.adoc:835
+#, no-wrap
+msgid "Further reading"
+msgstr "Leitura adicional"
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:839
+msgid ""
+"[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[The original article by "
+"Luke Mewburn] offers a general overview of [.filename]#rc.d# and detailed "
+"rationale for its design decisions. It provides insight on the whole [."
+"filename]#rc.d# framework and its place in a modern BSD operating system."
+msgstr ""
+"[[lukem]]http://www.mewburn.net/luke/papers/rc.d.pdf[O artigo original de "
+"Luke Mewburn] oferece uma visão geral do [.filename]#rc.d# e uma "
+"justificativa detalhada para suas decisões de design. Ele fornece uma "
+"compreensão do quadro geral do [.filename]#rc.d# e seu lugar em um sistema "
+"operacional BSD moderno."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:842
+msgid ""
+"[[manpages]]The manual pages man:rc[8], man:rc.subr[8], and man:rcorder[8] "
+"document the [.filename]#rc.d# components in great detail. You cannot fully "
+"use the [.filename]#rc.d# power without studying the manual pages and "
+"referring to them while writing your own scripts."
+msgstr ""
+"[[manpages]]As páginas do manual para man:rc[8], man:rc.subr[8] e "
+"man:rcorder[8] documentam em detalhes os componentes do sistema [."
+"filename]#rc.d#. Você não pode aproveitar completamente o poder do [."
+"filename]#rc.d# sem estudar as páginas do manual e consultá-las ao escrever "
+"seus próprios scripts."
+
+#. type: Plain text
+#: documentation/content/en/articles/rc-scripting/_index.adoc:846
+msgid ""
+"The major source of working, real-life examples is [.filename]#/etc/rc.d# in "
+"a live system. Its contents are easy and pleasant to read because most "
+"rough corners are hidden deep in man:rc.subr[8]. Keep in mind though that "
+"the [.filename]#/etc/rc.d# scripts were not written by angels, so they might "
+"suffer from bugs and suboptimal design decisions. Now you can improve them!"
+msgstr ""
+"A principal fonte de exemplos práticos e funcionais é o diretório [."
+"filename]#/etc/rc.d# em um sistema em operação. O seu conteúdo é fácil e "
+"agradável de ler, pois a maioria das partes difíceis está escondida "
+"profundamente em man:rc.subr[8]. No entanto, tenha em mente que os scripts "
+"em [.filename]#/etc/rc.d# não foram escritos por anjos, então eles podem "
+"conter bugs e decisões de design subótimas. Agora você pode melhorá-los!"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/releng/_index.adoc b/documentation/content/pt-br/articles/releng/_index.adoc
index fccbb25c68..3f7396b6d8 100644
--- a/documentation/content/pt-br/articles/releng/_index.adoc
+++ b/documentation/content/pt-br/articles/releng/_index.adoc
@@ -1,5 +1,5 @@
---
-title: Engenharia de Release do FreeBSD
+title: Engenharia de Release do FreeBSD (Legado)
authors:
- author: Murray Stokely
email: murray@FreeBSD.org
@@ -7,7 +7,7 @@ authors:
trademarks: ["freebsd", "intel", "general"]
---
-= Engenharia de Release do FreeBSD
+= Engenharia de Release do FreeBSD (Legado)
:doctype: article
:toc: macro
:toclevels: 1
@@ -16,27 +16,26 @@ trademarks: ["freebsd", "intel", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:xrefstyle: full
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/articles/releng/
+:images-path: articles/releng/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/articles/releng/
endif::[]
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/articles/releng/
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]
@@ -44,7 +43,7 @@ Resumo
[NOTE]
====
-Este documento está desatualizado e não descreve com precisão os procedimentos atuais de lançamentos da equipe de Engenharia de Release (Versão) do FreeBSD. É retido para fins históricos. Os procedimentos atuais usados pela equipe de Engenharia de Release do FreeBSD estão disponíveis no artigo link:{freebsd-releng}[Engenharia de Release do FreeBSD].
+Este documento está desatualizado e não descreve com precisão os procedimentos atuais de lançamentos da equipe de Engenharia de Release (Versão) do FreeBSD. É retido para fins históricos. Os procedimentos atuais usados pela equipe de Engenharia de Release do FreeBSD estão disponíveis no artigo extref:{freebsd-releng}[Engenharia de Release do FreeBSD].
====
Este artigo descreve a abordagem usada pela equipe de engenharia de release do FreeBSD para produzir versões do Sistema Operacional FreeBSD com qualidade de produção. Ele detalha a metodologia utilizada para as versões oficiais do FreeBSD e descreve as ferramentas disponíveis para aqueles interessados em produzir versões customizadas do FreeBSD para uso corporativo ou para uso em produtos comerciais.
@@ -56,7 +55,7 @@ toc::[]
[[introduction]]
== Introdução
-O desenvolvimento do FreeBSD é um processo muito aberto. O FreeBSD é composto por contribuições de milhares de pessoas em todo o mundo. O Projeto FreeBSD fornece acesso ao Subversion footnote:[Subversion, http://subversion.apache.org] para o público em geral para que outros possam ter acesso a mensagens de log, diffs (patches) entre branches (ramificações) de desenvolvimento e outros aprimoramentos de produtividade que o gerenciamento formal de código-fonte proporciona. Isso tem sido uma grande ajuda na atração de desenvolvedores talentosos para o FreeBSD. No entanto, acho que todos concordariam que o caos logo se manifestaria se o acesso para modificar o repositório principal fosse aberto a todos na Internet. Dessa forma, apenas um grupo "seleto" de quase 300 pessoas recebe acesso de escrita ao repositório do Subversion. Estes link:{contributors}#staff-committers[committers] footnote:[link:{contributors}#staff-committers[committers]] são normalmente as pessoas que fazem a maior parte do desenvolvimento do FreeBSD. Um https://www.FreeBSD.org/administration/#t-core[Core team]footnote:[https://www.FreeBSD.org/administration/#t-core[Core Team do FreeBSD]] eleito fornece algum nível de orientação sobre o projeto.
+O desenvolvimento do FreeBSD é um processo muito aberto. O FreeBSD é composto por contribuições de milhares de pessoas em todo o mundo. O Projeto FreeBSD fornece acesso ao Subversion footnote:[Subversion, http://subversion.apache.org] para o público em geral para que outros possam ter acesso a mensagens de log, diffs (patches) entre branches (ramificações) de desenvolvimento e outros aprimoramentos de produtividade que o gerenciamento formal de código-fonte proporciona. Isso tem sido uma grande ajuda na atração de desenvolvedores talentosos para o FreeBSD. No entanto, acho que todos concordariam que o caos logo se manifestaria se o acesso para modificar o repositório principal fosse aberto a todos na Internet. Dessa forma, apenas um grupo "seleto" de quase 300 pessoas recebe acesso de escrita ao repositório do Subversion. Estes extref:{contributors}[committers, staff-committers] footnote:[extref:{contributors}[committers, staff-committers]] são normalmente as pessoas que fazem a maior parte do desenvolvimento do FreeBSD. Um https://www.FreeBSD.org/administration/#t-core[Core team]footnote:[https://www.FreeBSD.org/administration/#t-core[Core Team do FreeBSD]] eleito fornece algum nível de orientação sobre o projeto.
O ritmo acelerado de desenvolvimento do `FreeBSD` torna a principal branch de desenvolvimento inadequada para o uso diário pelo público em geral. Em particular, são necessários esforços de estabilização para polir o sistema de desenvolvimento em uma release de qualidade apropriada para uso em ambiente produtivo. Para resolver este conflito, o desenvolvimento continua em várias trilhas paralelas. A principal branch de desenvolvimento é a _HEAD_ ou _trunk_ da nossa árvore do Subversion, conhecida como "FreeBSD-CURRENT" ou "-CURRENT" quando abreviado.
@@ -64,7 +63,7 @@ Um conjunto de branches mais estáveis é mantido, e é conhecido como "FreeBSD-
O termo _stable_ no nome da branch refere-se à estabilidade presumida da Interface Binária da Aplicação (ABI), que é prometida pelo projeto. Isso significa que um aplicativo de usuário compilado em uma versão mais antiga do sistema da mesma branch funciona em um sistema mais novo da mesma branch. A estabilidade do ABI melhorou muito em relação às versões anteriores. Na maioria dos casos, os binários dos sistemas _STABLE_ mais antigos são executados sem modificações em sistemas mais recentes, incluindo o __HEAD__, assumindo que as interfaces de gerenciamento do sistema não são usadas.
-No período intermediário entre as versões, snapshots semanais são construídos automaticamente pelas máquinas de build do Projeto FreeBSD e disponibilizados para download em `ftp://ftp.FreeBSD.org/pub/FreeBSD/snapshots/`. A ampla disponibilidade de snapshots binários e a tendência da nossa comunidade de usuários para acompanhar o desenvolvimento do -STABLE com o Subversion e `"make buildworld"` footnote:[link:{handbook}#makeworld[Re-construindo o 'mundo']] ajuda a manter o FreeBSD-STABLE em uma condição muito confiável, mesmo antes que as atividades de garantia de qualidade aumentem na proximidade de um grande lançamento.
+No período intermediário entre as versões, snapshots semanais são construídos automaticamente pelas máquinas de build do Projeto FreeBSD e disponibilizados para download em `ftp://ftp.FreeBSD.org/pub/FreeBSD/snapshots/`. A ampla disponibilidade de snapshots binários e a tendência da nossa comunidade de usuários para acompanhar o desenvolvimento do -STABLE com o Subversion e `"make buildworld"` footnote:[extref:{handbook}updating-upgrading[Re-construindo o 'mundo', makeworld]] ajuda a manter o FreeBSD-STABLE em uma condição muito confiável, mesmo antes que as atividades de garantia de qualidade aumentem na proximidade de um grande lançamento.
Além dos snapshots de instalação no formato ISO, imagens semanais de máquinas virtuais também são fornecidas para uso com o VirtualBox, o qemu ou outros softwares populares de emulação. As imagens de máquinas virtuais podem ser baixadas em `ftp://ftp.FreeBSD.org/pub/FreeBSD/snapshots/VM-IMAGES/`.
@@ -127,7 +126,7 @@ Quando várias imagens BETA já tiverem sido disponibilizadas para testes genera
Em todos os exemplos abaixo, `$FSVN` refere-se ao local do repositório Subversion do FreeBSD, `svn+ssh://svn.FreeBSD.org/base/`.
====
-O layout das branchs do FreeBSD no Subversion é descrito no link:{committers-guide}#subversion-primer-base-layout[Guia do Commiter]. O primeiro passo na criação de uma branch é identificar a revisão do código fonte do `stable/_X_`, a partir do qual você deseja criar a nova _branch_.
+O layout das branchs do FreeBSD no Subversion é descrito no extref:{committers-guide}[Guia do Commiter, subversion-primer-base-layout]. O primeiro passo na criação de uma branch é identificar a revisão do código fonte do `stable/_X_`, a partir do qual você deseja criar a nova _branch_.
[source,shell]
....
@@ -226,7 +225,7 @@ Quando o comando `svn cp` do Subversion é usado para criar uma __tag de versão
[[release-build]]
== Construção da Release (Versão)
-As "releases" do FreeBSD podem ser construídas por qualquer pessoa com uma máquina rápida e acesso a um repositório de código-fonte. (Isso deveria ser todo mundo, já que oferecemos acesso ao Subversion! Veja a seção sobre link:{handbook}#svn[Subversion] no Handbook para detalhes.) O _único_ requisito especial é que o dispositivo man:md[4] esteja disponível. Se o dispositivo não estiver carregado em seu kernel, então o módulo do kernel deve ser carregado automaticamente quando o man:mdconfig[8] for executado durante a fase de criação da mídia de boot. Todas as ferramentas necessárias para construir uma release estão disponíveis no repositório Subversion em [.filename]#src/release#. Essas ferramentas visam fornecer uma maneira consistente de construir versões do FreeBSD. Uma release completa pode ser construída com apenas um único comando, incluindo a criação de imagens ISO adequadas para gravação em CD-ROM ou DVD e um diretório para instalação por FTP. A pagina de manual man:release[7] documenta completamente o script `src/release/generate-release.sh` que é usado para construir uma release. O `generate-release.sh` é um invólucro em torno do target do Makefile: `make release`.
+As "releases" do FreeBSD podem ser construídas por qualquer pessoa com uma máquina rápida e acesso a um repositório de código-fonte. (Isso deveria ser todo mundo, já que oferecemos acesso ao Subversion! Veja a seção sobre extref:{handbook}mirrors[Subversion, svn] no Handbook para detalhes.) O _único_ requisito especial é que o dispositivo man:md[4] esteja disponível. Se o dispositivo não estiver carregado em seu kernel, então o módulo do kernel deve ser carregado automaticamente quando o man:mdconfig[8] for executado durante a fase de criação da mídia de boot. Todas as ferramentas necessárias para construir uma release estão disponíveis no repositório Subversion em [.filename]#src/release#. Essas ferramentas visam fornecer uma maneira consistente de construir versões do FreeBSD. Uma release completa pode ser construída com apenas um único comando, incluindo a criação de imagens ISO adequadas para gravação em CD-ROM ou DVD e um diretório para instalação por FTP. A pagina de manual man:release[7] documenta completamente o script `src/release/generate-release.sh` que é usado para construir uma release. O `generate-release.sh` é um invólucro em torno do target do Makefile: `make release`.
=== Construindo uma Release (Versão)
@@ -315,7 +314,7 @@ Um link simbólico para [.filename]#../../../ports/arch/packages-X.Y-release#.
[.filename]#/pub/FreeBSD/releases/arch/ISO-IMAGES/X.Y/X.Y-RELEASE-arch-*.iso#::
As imagens ISO. O "*" é o [.filename]#disc1#, [.filename]#disc2#, etc. Somente se houver um [.filename]#disc1# e houver um CD alternativo para o primeiro disco de instalação (por exemplo, uma instalação simplificada sem sistema de janelas) também pode haver um [.filename]#mini#.
-Para mais informações sobre a arquitetura do sistema de espelhamento dos sites de FTP para distribuição do FreeBSD, por favor veja o artigo link:{hubs}[Espelhando o FreeBSD].
+Para mais informações sobre a arquitetura do sistema de espelhamento dos sites de FTP para distribuição do FreeBSD, por favor veja o artigo extref:{hubs}[Espelhando o FreeBSD].
Pode levar de muitas horas a dois dias após a atualização do `ftp-master` antes que a maioria dos sites de FTP da camada 1 tenham o novo software, dependendo se um conjunto de pacotes foi ou não carregado ao mesmo tempo. É imperativo que os engenheiros de release coordenem com os http://lists.FreeBSD.org/mailman/listinfo/mirror-announce[administradores dos sites espelho do FreeBSD] antes de anunciar a disponibilidade geral de novo software nos sites FTP. Idealmente, o pacote da release deve ser carregado pelo menos quatro dias antes do dia de lançamento. Os bits da release devem ser carregados entre 24 e 48 horas antes do horário de lançamento planejado com as permissões de arquivo "other" desativadas. Isso permitirá que os sites espelho façam o download, mas o público em geral não poderá baixá-los dos sites espelho. Um e-mail deve ser enviado para a lista dos http://lists.FreeBSD.org/mailman/listinfo/mirror-announce[administradores do site espelho do FreeBSD] no momento em que os bits da release forem publicados, informando que a release foi preparada e informando o horário em que os sites espelho devem começar a permitir o acesso. Certifique-se de incluir um fuso horário com a hora, por exemplo, torná-lo relativo ao GMT.
@@ -331,7 +330,7 @@ Embora o FreeBSD forme um sistema operacional completo, não há nada que force
=== Usando o script `bsdinstall`
-A ferramenta de instalação e configuração do sistema FreeBSD, man:bsdinstall[8], pode ser programada para fornecer instalações automatizadas para sites grandes. Essa funcionalidade pode ser usada em conjunto com Intel(R) PXE footnote:[link:{handbook}#network-pxe-nfs[Network PXE NFS]] para inicializar sistemas da rede.
+A ferramenta de instalação e configuração do sistema FreeBSD, man:bsdinstall[8], pode ser programada para fornecer instalações automatizadas para sites grandes. Essa funcionalidade pode ser usada em conjunto com Intel(R) PXE footnote:[extref:{handbook}advanced-networking[Network PXE NFS, network-pxe-nfs]] para inicializar sistemas da rede.
[[lessons-learned]]
== Lições Aprendidas do FreeBSD 4.4
diff --git a/documentation/content/pt-br/articles/remote-install/_index.adoc b/documentation/content/pt-br/articles/remote-install/_index.adoc
index 683e94912c..ceb3e1762e 100644
--- a/documentation/content/pt-br/articles/remote-install/_index.adoc
+++ b/documentation/content/pt-br/articles/remote-install/_index.adoc
@@ -1,14 +1,16 @@
---
-title: Instalação Remota do Sistema Operacional FreeBSD Sem um Console Remoto
authors:
- - author: Daniel Gerzo
+ -
+ author: 'Daniel Gerzo'
email: danger@FreeBSD.org
-copyright: 2008 Projeto de Documentação do FreeBSD
-releaseinfo: "$FreeBSD$"
+copyright: '2008-2021 The FreeBSD Documentation Project'
+description: 'Este documento descreve a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível'
+tags: ["Remote", "Installation", "FreeBSD"]
+title: 'Instalação Remota do Sistema Operacional FreeBSD sem um Console Remoto'
trademarks: ["freebsd", "general"]
---
-= Instalação Remota do Sistema Operacional FreeBSD Sem um Console Remoto
+= Instalação Remota do Sistema Operacional FreeBSD sem um Console Remoto
:doctype: article
:toc: macro
:toclevels: 1
@@ -17,20 +19,32 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/remote-install/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
-Este artigo documenta a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível. A idéia principal por trás deste artigo é o resultado de uma colaboração com Martin Matuska mailto:mm@FreeBSD.org[mm@FreeBSD.org] com informações valiosas fornecidas por Paweł Jakub Dawidek mailto:pjd@FreeBSD.org[pjd@FreeBSD.org].
+Este artigo documenta a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível. A ideia principal por trás deste artigo é o resultado de uma colaboração com `{mm}`, com valiosa contribuição fornecida por `{pjd}`.
'''
@@ -39,22 +53,24 @@ toc::[]
[[background]]
== Background
-Existem muitos provedores de hospedagem de servidores no mundo, mas poucos deles oferecem suporte oficial ao FreeBSD. Eles geralmente fornecem suporte para uma distribuição Linux(R) para ser instalada nos servidores que eles oferecem.
+Existem muitos provedores de hospedagem de servidores no mundo, mas muito poucos deles oferecem suporte oficial para o FreeBSD. Geralmente, eles fornecem suporte para uma distribuição Linux(R) a ser instalada nos servidores que oferecem.
-Em alguns casos, estas empresas instalarão sua distribuição Linux(R) preferida se você solicitá-la. Usando esta opção, tentaremos instalar o FreeBSD. Em outros casos, eles podem oferecer um sistema de recuperação para ser usado em uma emergência. É possível usá-la para os nossos propósitos também.
+Em alguns casos, essas empresas podem instalar a distribuição FreeBSD se você solicitar, mesmo que normalmente só ofereçam suporte para distribuições Linux(R). Em outros casos, elas podem oferecer um sistema de resgate que seria usado em uma emergência. É possível usar isso para nossos fins também.
-Este artigo aborda as etapas básicas de instalação e configuração necessárias para inicializar uma instalação remota do FreeBSD com suporte para RAID-1 e ZFS.
+Este artigo cobre os passos básicos de instalação e configuração necessários para inicializar uma instalação remota do FreeBSD com capacidades RAID-1 e ZFS.
[[intro]]
== Introdução
-Esta seção resumirá o objetivo deste artigo e explicará melhor o que é tratado aqui. As instruções incluídas neste artigo beneficiarão aqueles usuários que usam serviços fornecidos por provedores de colocation que não suportam o FreeBSD.
+Esta seção resumirá o objetivo deste artigo e explicará melhor o que é abordado aqui. As instruções incluídas neste artigo beneficiarão aqueles que utilizam serviços fornecidos por provedores de colocation que não suportam o FreeBSD.
[.procedure]
-. Como mencionamos na seção <<background>>, muitas das empresas de hospedagem de servidores renomadas fornecem algum tipo de sistema de recuperação, que é inicializado a partir de sua LAN e acessível por SSH. Eles normalmente fornecem esse suporte para ajudar seus clientes a consertar sistemas operacionais quebrados. Como este artigo explicará, é possível instalar o FreeBSD com a ajuda destes sistemas de recuperação.
+====
+. Como mencionamos na seção <<background>>, muitas das empresas de hospedagem de servidores respeitáveis fornecem algum tipo de sistema de resgate, que é iniciado a partir de sua LAN e acessível por SSH. Geralmente, eles fornecem esse suporte para ajudar seus clientes a corrigir sistemas operacionais com problemas. Como este artigo explicará, é possível instalar o FreeBSD com a ajuda desses sistemas de resgate.
+
-. A próxima seção deste artigo descreverá como configurar e compilar uma versão mínima do FreeBSD na máquina local. Essa versão eventualmente será executada na máquina remota a partir de um ramdisk, o que nos permitirá instalar um sistema operacional completo do FreeBSD a partir de um espelho FTP usando o utilitárioSysinstall.
+. A próxima seção deste artigo descreverá como configurar e compilar um FreeBSD minimalista na máquina local. Essa versão será executada eventualmente na máquina remota a partir de um ramdisk, o que nos permitirá instalar um sistema operacional FreeBSD completo a partir de um espelho FTP usando a ferramenta sysinstall.
. O restante deste artigo descreverá o procedimento de instalação em si, bem como a configuração do sistema de arquivos ZFS.
+====
[[requirements]]
=== Requisitos
@@ -63,21 +79,21 @@ Para continuar com sucesso, você deve:
* Ter um sistema operacional acessível pela rede com acesso SSH
* Entender o processo de instalação do FreeBSD
-* Familiarizar-se com o utilitário man:sysinstall[8]
-* Ter a imagem ISO de instalação do FreeBSD ou o CD de instalação à mão
+* Esteja familiarizado com o utilitário man:sysinstall[8]
+* Tenha a imagem do sistema operacional de instalação do FreeBSD ou o CD em mãos
[[preparation]]
== Preparação - mfsBSD
Antes que o FreeBSD possa ser instalado no sistema de destino, é necessário construir a imagem mínima do sistema operacional FreeBSD que será inicializada a partir do disco rígido. Dessa forma, o novo sistema pode ser acessado a partir da rede e o restante da instalação pode ser feito sem acesso remoto ao console do sistema.
-O conjunto de ferramentas mfsBSD pode ser usado para construir uma pequena imagem do FreeBSD. Como o nome mfsBSD sugere ("mfs" significa "sistema de arquivos em memória"), a imagem resultante é executada inteiramente de um ramdisk. Graças a este recurso, a manipulação de discos rígidos não será limitada, portanto, será possível instalar um sistema operacional completo do FreeBSD. A http://mfsbsd.vx.sk/[página inicial] do mfsBSD inclui links para a versão mais recente do conjunto de ferramentas.
+A ferramenta mfsBSD pode ser utilizada para construir uma imagem mínima do FreeBSD. Como sugere o nome "mfsBSD" ("mfs" significa "sistema de arquivos de memória"), a imagem resultante é executada totalmente de um ramdisk. Graças a essa característica, a manipulação de discos rígidos não será limitada, tornando possível a instalação de um sistema operacional FreeBSD completo. A http://mfsbsd.vx.sk/[página inicial] do mfsBSD inclui referências para a última versão do conjunto de ferramentas.
-Por favor, note que os detalhes de como o mfsBSD funciona internamente e como tudo se encaixa está além do escopo deste artigo. O leitor interessado deve consultar a documentação original do mfsBSD para mais detalhes.
+Por favor, note que os detalhes internos do mfsBSD e como tudo se encaixa estão além do escopo deste artigo. O leitor interessado deve consultar a documentação original do mfsBSD para mais detalhes.
-Faça o download e extraia a versão mais recente do mfsBSD e altere seu diretório de trabalho para o diretório em que os scripts mfsBSD residirão:
+Faça o download e extraia a última versão do mfsBSD e altere seu diretório de trabalho para o diretório onde os scripts do mfsBSD serão armazenados:
-[source,shell]
+[source, shell]
....
# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz
# tar xvzf mfsbsd-2.1.tar.gz
@@ -87,13 +103,13 @@ Faça o download e extraia a versão mais recente do mfsBSD e altere seu diretó
[[mfsbsd-config]]
=== Configuração do mfsBSD
-Antes de inicializar o mfsBSD, algumas opções importantes de configuração precisam ser definidas. O mais importante que temos que acertar é, naturalmente, a configuração da rede. O método mais adequado para configurar opções de rede depende se sabemos de antemão o tipo de interface de rede que usaremos e o driver da interface de rede a ser carregado para o nosso hardware. Vamos ver como o mfsBSD pode ser configurado em ambos os casos.
+Antes de iniciar o mfsBSD, algumas opções de configuração importantes devem ser definidas. A mais importante que devemos acertar é, naturalmente, a configuração de rede. O método mais adequado para configurar as opções de rede depende se sabemos de antemão o tipo de interface de rede que usaremos e o driver de interface de rede a ser carregado para nosso hardware. Veremos como o mfsBSD pode ser configurado em ambos os casos.
-Outra coisa importante para definir é a senha do usuário `root`. Isto pode ser feito editando o [.filename]#conf/loader.conf#. Por favor, veja os comentários incluídos no arquivo.
+Outro ponto importante a ser definido é a senha do `root`. Isso pode ser feito editando o arquivo [.filename]#conf/loader.conf#. Por favor, consulte os comentários incluídos.
==== O método [.filename]#conf/interfaces.conf#
-Quando a placa de rede instalada é desconhecida, é possível usar os recursos de detecção automática do mfsBSD. Os scripts de inicialização do mfsBSD podem detectar o driver correto a ser usado, com base no endereço MAC da interface, se configurarmos as seguintes opções em [.filename]#conf/interfaces.conf#:
+Quando a placa de rede instalada é desconhecida, é possível usar os recursos de detecção automática do mfsBSD. Os scripts de inicialização do mfsBSD podem detectar o driver correto a ser usado, com base no endereço MAC da interface, se definirmos as seguintes opções em [.filename]#conf/interfaces.conf#:
[.programlisting]
....
@@ -102,18 +118,18 @@ ifconfig_ext1_mac="00:00:00:00:00:00"
ifconfig_ext1="inet 192.168.0.2/24"
....
-Não esqueça de adicionar a informação `defaultrouter` ao [.filename]#conf/rc.conf#:
+Não se esqueça de adicionar as informações do `defaultrouter` no [.filename]#conf/rc.conf#:
[.programlisting]
....
defaultrouter="192.168.0.1"
....
-==== O método [.filename]#conf/rc.conf#
+==== O Método [.filename]#conf/rc.conf#
-Quando o driver da interface de rede é conhecido, é mais conveniente usar [.filename]#conf/rc.conf# para opções de rede. A sintaxe deste arquivo é a mesma usada no arquivo padrão man:rc.conf[5] do FreeBSD.
+Quando o driver da interface de rede é conhecido, é mais conveniente usar o arquivo [.filename]#conf/rc.conf# para as opções de rede. A sintaxe deste arquivo é a mesma usada no arquivo padrão man:rc.conf[5] do FreeBSD.
-Por exemplo, se você souber que uma interface de rede man:re[4] estará disponível, você pode definir as seguintes opções em [.filename]#conf/rc.conf#:
+Por exemplo, se você sabe que uma interface de rede man:re[4] estará disponível, você pode definir as seguintes opções no [.filename]#conf/rc.conf#:
[.programlisting]
....
@@ -122,13 +138,13 @@ ifconfig_re0="inet 192.168.0.2/24"
....
[[mfsbsd-build]]
-=== Construindo uma imagem do mfsBSD
+=== Construindo uma imagem mfsBSD
-O processo de construção de uma imagem mfsBSD é bastante simples.
+O processo de construir uma imagem mfsBSD é bastante simples.
-O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de instalação em [.filename]#/cdrom#. Por exemplo, neste artigo vamos supor que você tenha baixado o ISO do FreeBSD 10.1-RELEASE. Montar esta imagem ISO no diretório [.filename]#/cdrom# é fácil de se fazer com o utilitário man:mdconfig[8]:
+O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de instalação, no diretório [.filename]#/cdrom#. Para fins de exemplo, neste artigo vamos supor que você tenha baixado a imagem ISO do FreeBSD 10.1-RELEASE. Montar esta imagem ISO no diretório [.filename]#/cdrom# é fácil com o utilitário man:mdconfig[8]:
-[source,shell]
+[source, shell]
....
# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso
# mount_cd9660 /dev/md10 /cdrom
@@ -136,64 +152,64 @@ O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de i
Como as versões recentes do FreeBSD não contêm conjuntos de distribuição regulares, é necessário extrair os arquivos de distribuição do FreeBSD dos arquivos de distribuição localizados na imagem ISO:
-[source,shell]
+[source, shell]
....
# mkdir DIST
# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST
# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST
....
-Em seguida, construa a imagem mfsBSD inicializável:
+Em seguida, crie a imagem de inicialização do mfsBSD:
-[source,shell]
+[source, shell]
....
# make BASE=DIST
....
[NOTE]
====
-O make acima deve ser executado a partir do nível superior da árvore de diretórios do mfsBSD, por exemplo, [.filename]#~/mfsbsd-2.1/#.
+A instrução `make` acima deve ser executada a partir do nível superior da árvore de diretórios do mfsBSD, por exemplo, [.filename]#~/mfsbsd-2.1/#.
====
=== Inicializando o mfsBSD
-Agora que a imagem mfsBSD está pronta, ela deve ser carregada para o sistema remoto executando o sistema de recuperação ou uma distribuição Linux(R) pré-instalada. A ferramenta mais adequada para essa tarefa é o scp:
+Agora que a imagem mfsBSD está pronta, ela deve ser enviada para o sistema remoto que está executando um sistema de resgate ou a distribuição Linux(R) pré-instalada. A ferramenta mais adequada para essa tarefa é o scp:
-[source,shell]
+[source, shell]
....
# scp disk.img root@192.168.0.2:.
....
-Para inicializar corretamente a imagem mfsBSD, ela deve ser colocada no primeiro dispositivo (inicializável) da máquina em questão. Isso pode ser feito usando este exemplo, desde que o [.filename]#sda# seja o primeiro dispositivo de disco inicializável:
+Para inicializar a imagem do mfsBSD corretamente, ela deve ser colocada no primeiro dispositivo (inicializável) da máquina em questão. Isso pode ser feito usando o seguinte exemplo, supondo que o [.filename]#sda# seja o primeiro dispositivo de disco inicializável:
-[source,shell]
+[source, shell]
....
# dd if=/root/disk.img of=/dev/sda bs=1m
....
-Se tudo correu bem, a imagem deve estar agora no MBR do primeiro dispositivo e a máquina pode ser reinicializada. Observe a máquina inicializar corretamente com a ferramenta man:ping[8]. Uma vez que tenha retornado on-line, deve ser possível acessá-la com o man:ssh[1] como o usuário `root` usando a senha configurada.
+Se tudo correu bem, a imagem agora deve estar no MBR do primeiro dispositivo e a máquina pode ser reiniciada. Verifique se a máquina está iniciando corretamente com a ferramenta man:ping[8]. Depois que a máquina voltar on-line, deve ser possível acessá-la via man:ssh[1] como usuário `root` com a senha configurada.
[[installation]]
-== Instalação do sistema operacional do FreeBSD
+== Instalação do Sistema Operacional FreeBSD
-O mfsBSD foi inicializado com sucesso e deve ser possível efetuar login através do man:ssh[1]. Esta seção descreverá como criar e rotular os slices, configurar o gmirror para o RAID-1 e como usar o Sysinstall para instalar uma distribuição mínima do sistema operacional FreeBSD.
+O mfsBSD foi iniciado com sucesso e deve ser possível fazer login por meio do man:ssh[1]. Esta seção descreverá como criar e rotular slices, configurar o `gmirror` para RAID-1 e como usar o `sysinstall` para instalar uma distribuição mínima do sistema operacional FreeBSD.
-=== Preparação de Discos Rígidos
+=== Preparação dos Discos Rígidos
-A primeira tarefa é alocar espaço em disco para o FreeBSD, ou seja: criar slices e partições. Obviamente, o sistema atualmente em execução é totalmente carregado na memória do sistema e, portanto, não haverá problemas com a manipulação dos discos rígidos. Para completar esta tarefa, é possível usar Sysinstall ou man:fdisk[8] em conjunto com o man:bsdlabel[8].
+A primeira tarefa é alocar espaço em disco para o FreeBSD, ou seja, criar slices e partições. Obviamente, o sistema atualmente em execução está totalmente carregado na memória do sistema e, portanto, não haverá problemas com a manipulação de discos rígidos. Para concluir esta tarefa, é possível usar o `sysinstall` ou o man:fdisk[8] em conjunto com o man:bsdlabel[8].
No início, marque todos os discos do sistema como vazios. Repita o seguinte comando para cada disco rígido:
-[source,shell]
+[source, shell]
....
# dd if=/dev/zero of=/dev/ad0 count=2
....
-Em seguida, crie as slices e atribua um label usando sua ferramenta preferida. Embora seja considerado mais fácil usar o Sysinstall, um método poderoso e provavelmente com menos bugs será usar as ferramentas padrões de console UNIX(R), como o man:fdisk[8] e o man:bsdlabel[8], o qual também será abordado nesta seção. A primeira opção está bem documentada no capítulo link:{handbook}#install-steps[Instalando o FreeBSD] do Handbook do FreeBSD. Como foi mencionado na introdução, este artigo apresentará como configurar um sistema com recursos RAID-1 e ZFS. Nossa configuração consistirá de uma pequena partição [.filename]#/# (root) , de um dataset composto por um [.filename]#/usr# e um [.filename]#/var# , todos espelhados com o man:gmirror[8], e o restante do espaço em disco alocado para um sistema de arquivos man:zpool[8] espelhado do ZFS. Por favor, observe que o sistema de arquivos ZFS será configurado depois que o sistema operacional FreeBSD for instalado e inicializado com sucesso.
+O próximo passo é criar slices e rotulá-las com a ferramenta de sua preferência. Embora seja considerado mais fácil usar o `sysinstall`, um método poderoso e provavelmente com menos bugs é usar as ferramentas UNIX(R) padrão baseadas em texto, como o man:fdisk[8] e o man:bsdlabel[8], que também serão abordados nesta seção. A primeira opção está bem documentada no capítulo extref:{handbook}[Instalando o FreeBSD, install-steps] do Handbook do FreeBSD. Como mencionado na introdução, este artigo apresentará como configurar um sistema com capacidades RAID-1 e ZFS. A nossa configuração consistirá em um pequeno man:gmirror[8] para o [.filename]#/# (root), [.filename]#/usr# e [.filename]#/var#, e o restante do espaço em disco será alocado para um sistema de arquivos ZFS espelhado por meio do man:zpool[8]. Por favor, note que o sistema de arquivos ZFS será configurado após a instalação e inicialização bem-sucedidas do sistema operacional FreeBSD.
-O exemplo a seguir descreverá como criar slices e labels, inicializar o man:gmirror[8] em cada partição e como criar um sistema de arquivos UFS2 em cada partição espelhada:
+O seguinte exemplo descreverá como criar slices e rótulos, inicializar o man:gmirror[8] em cada partição e como criar um sistema de arquivos UFS2 em cada partição espelhada:
-[source,shell]
+[source, shell]
....
# fdisk -BI /dev/ad0 <.>
# fdisk -BI /dev/ad1
@@ -214,21 +230,21 @@ O exemplo a seguir descreverá como criar slices e labels, inicializar o man:gmi
<.> Escreva um label padrão para cada disco, incluindo o código de bootstrap.
-<.> Agora, edite manualmente o label do disco fornecido. Consulte a página de manual do man:bsdlabel[8] para descobrir como criar partições. Crie as partições `a` para o sistema de arquivos [.filename]#/# (root), `b` para swap, `d` para [.filename]#/var#, `e` para [.filename]#/usr# e finalmente `f`, que será usado posteriormente para o ZFS.
+<.> Agora, edite manualmente o label do disco. Consulte a página do manual man:bsdlabel[8] para descobrir como criar partições. Crie partições `a` para o sistema de arquivos [.filename]#/# (raiz), `b` para swap, `d` para [.filename]#/var#, `e` para [.filename]#/usr# e, finalmente, `f` que será usado posteriormente para o ZFS.
<.> Importe o label recém-criado para o segundo disco rígido, para que ambos os discos sejam rotulados da mesma maneira.
<.> Inicialize o man:gmirror[8] em cada partição.
-<.> Note que `-F` é usado para a partição de swap. Isso instrui o man:gmirror[8] a assumir que o dispositivo está no estado consistente após a falha de energia/sistema.
+<.> Note que `-F` é usado para a partição swap. Isso instrui o man:gmirror[8] a assumir que o dispositivo está em um estado consistente após uma falha de energia/sistema.
<.> Crie um sistema de arquivos UFS2 em cada partição espelhada.
=== Instalação do sistema
-Esta é a parte mais importante. Esta seção irá descrever como instalar a distribuição mínima do FreeBSD nos discos rígidos que preparamos na seção anterior. Para atingir este objetivo, todos os sistemas de arquivos precisam ser montados para que o Sysinstall possa gravar o conteúdo do FreeBSD nos discos rígidos:
+Esta é a parte mais importante. Esta seção irá descrever como instalar a distribuição mínima do FreeBSD nos discos rígidos que preparamos na seção anterior. Para atingir este objetivo, todos os sistemas de arquivos precisam ser montados para que o `sysinstall` possa gravar o conteúdo do FreeBSD nos discos rígidos:
-[source,shell]
+[source, shell]
....
# mount /dev/mirror/root /mnt
# mkdir /mnt/var /mnt/usr
@@ -236,31 +252,31 @@ Esta é a parte mais importante. Esta seção irá descrever como instalar a dis
# mount /dev/mirror/usr /mnt/usr
....
-Quando terminar, inicie o man:sysinstall[8]. Selecione a instalação [.guimenuitem]#Personalizada# no menu principal. Selecione [.guimenuitem]#Opções# e pressione kbd:[Enter]. Com a ajuda das teclas direcionais, mova o cursor para o item `Install Root`, pressione kbd:[Espaço] e altere-o para [.filename]#/mnt#. Pressione kbd:[Enter] para enviar suas alterações e sair do menu [.guimenuitem]#Opções# pressionando kbd:[q].
+Quando terminar, inicie o man:sysinstall[8]. Selecione a instalação [.guimenuitem]#Custom# no menu principal. Selecione [.guimenuitem]#Opções# e pressione kbd:[Enter]. Com a ajuda das teclas de seta, mova o cursor no item `Install Root`, pressione kbd:[Espaço] e altere-o para [.filename]#/mnt#. Pressione kbd:[Enter] para enviar suas alterações e sair do menu [.guimenuitem]#Opções# pressionando kbd:[q].
[WARNING]
====
-Note que este passo é muito importante e se for ignorado, o Sysinstall não poderá instalar o FreeBSD.
+Observe que este passo é muito importante e, se ignorado, o `sysinstall` será incapaz de instalar o FreeBSD.
====
-Vá para o menu [.guimenuitem]#Distributions#, mova o cursor com as teclas de seta para `Minimal` e selecione-o pressionando kbd:[Space]. Este artigo usa a distribuição mínima para salvar o tráfego de rede, porque o próprio sistema será instalado por ftp. Saia deste menu escolhendo `Exit`.
+Vá para o menu [.guimenuitem]#Distributions#, mova o cursor com as teclas de seta para `Minimal` e marque-a pressionando kbd:[Espaço]. Este artigo utiliza a distribuição Minimal para economizar tráfego de rede, pois o próprio sistema será instalado via ftp. Saia deste menu escolhendo `Exit`.
[NOTE]
====
-Os menus [.guimenuitem]#Partition# e [.guimenuitem]#Label# serão ignorados, pois são inúteis agora.
+Os menus [.guimenuitem]#Partition# e [.guimenuitem]#Label# serão ignorados, pois são inúteis neste momento.
====
-No menu [.guimenuitem]#Media#, selecione `FTP`. Selecione o espelho mais próximo e deixe o Sysinstall assumir que a rede já está configurada. Você retornará ao menu [.guimenuitem]#Personalizar#.
+Na tela do menu [.guimenuitem]#Media#[/guimenuitem], selecione a opção "FTP". Escolha o espelho mais próximo e deixe que o `sysinstall` assuma que a rede já está configurada. Você será levado de volta ao menu [.guimenuitem]#Custom#.
-Finalmente, realize a instalação do sistema selecionando a última opção, [.guimenuitem]#Commit#. Saia do sysinstall quando terminar a instalação.
+Por fim, execute a instalação do sistema selecionando a última opção, [.guimenuitem]#Commit#. Saia do `sysinstall` quando a instalação for concluída.
=== Etapas pós-instalação
-O sistema operacional do FreeBSD deve estar instalado agora; no entanto, o processo ainda não está concluído. É necessário executar algumas etapas pós-instalação para permitir que o FreeBSD inicialize no futuro e consiga efetuar o login no sistema.
+O sistema operacional FreeBSD deve estar instalado agora; no entanto, o processo ainda não está concluído. É necessário realizar algumas etapas pós-instalação para permitir que o FreeBSD seja inicializado no futuro e para poder fazer login no sistema.
-Você deve agora executar man:chroot[8] para o sistema recém-instalado para concluir a instalação. Use o seguinte comando:
+Agora você deve executar o comando `man:chroot[8]` no sistema recém-instalado para concluir a instalação. Use o seguinte comando:
-[source,shell]
+[source, shell]
....
# chroot /mnt
....
@@ -269,12 +285,12 @@ Para completar nosso objetivo, execute estas etapas:
* Copie o kernel `GENERIC` para o diretório [.filename]#/boot/kernel#:
+
-[source,shell]
+[source, shell]
....
# cp -Rp /boot/GENERIC/* /boot/kernel
....
-* Crie os arquivos [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# e [.filename]#/etc/fstab#. Não se esqueça de configurar corretamente as informações de rede e ativar o sshd em [.filename]#/etc/rc.conf#. O conteúdo do [.filename]#/etc/fstab# será semelhante ao seguinte:
+* Crie os arquivos [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# e [.filename]#/etc/fstab#. Não esqueça de definir corretamente as informações de rede e habilitar o sshd em [.filename]#/etc/rc.conf#. O conteúdo do [.filename]#/etc/fstab# será semelhante ao seguinte:
+
[.programlisting]
....
@@ -285,40 +301,40 @@ Para completar nosso objetivo, execute estas etapas:
/dev/mirror/var /var ufs rw 2 2
/dev/cd0 /cdrom cd9660 ro,noauto 0 0
....
-* Crie o [.filename]#/boot/loader.conf# com o seguinte conteúdo:
+* Crie o arquivo [.filename]#/boot/loader.conf# com o seguinte conteúdo:
+
[.programlisting]
....
geom_mirror_load="YES"
zfs_load="YES"
....
-* Execute o seguinte comando, que disponibilizará o ZFS na próxima inicialização:
+* Execute o seguinte comando, que permitirá o ZFS ser utilizado no próximo boot:
+
-[source,shell]
+[source, shell]
....
-# echo 'zfs_enable="YES"' >> /etc/rc.conf
+# sysrc zfs_enable="YES"
....
-* Adicione usuários adicionais ao sistema usando a ferramenta man:adduser[8]. Não se esqueça de adicionar um usuário ao grupo `wheel` para que você possa obter acesso root após a reinicialização.
+* Adicione usuários adicionais ao sistema usando a ferramenta man:adduser[8]. Não se esqueça de adicionar um usuário ao grupo `wheel` para que possa obter acesso de root após a reinicialização.
* Verifique todas as suas configurações.
-O sistema deve estar pronto para a próxima inicialização. Use o comando man:reboot[8] para reinicializar seu sistema.
+O sistema deve estar pronto para a próxima inicialização. Use o comando man:reboot[8] para reiniciar o sistema.
[[zfs]]
== ZFS
-Se o seu sistema sobreviveu à reinicialização, agora deve ser possível efetuar login. Bem-vindo à nova instalação do FreeBSD, executada remotamente sem o uso de um console remoto!
+Se o seu sistema sobreviveu ao reboot, agora deve ser possível fazer login. Bem-vindo à nova instalação do FreeBSD, realizada remotamente sem o uso de um console remoto!
-O único passo restante é configurar o man:zpool[8] e criar algum sistemas de arquivos man:zfs[8]. Criar e administrar o ZFS é muito simples. Primeiro, crie um pool espelhado:
+O único passo restante é configurar o man:zpool[8] e criar alguns sistemas de arquivos man:zfs[8]. Criar e administrar ZFS é muito simples. Primeiro, crie um pool espelhado:
-[source,shell]
+[source, shell]
....
# zpool create tank mirror /dev/ad[01]s1f
....
Em seguida, crie alguns sistemas de arquivos:
-[source,shell]
+[source, shell]
....
# zfs create tank/ports
# zfs create tank/src
@@ -328,4 +344,4 @@ Em seguida, crie alguns sistemas de arquivos:
# zfs set mountpoint=/usr/src tank/src
....
-Isso é tudo. Se você está interessado em mais detalhes sobre o ZFSno FreeBSD, por favor consulte a seção https://wiki.freebsd.org/ZFS[ZFS] do o Wiki do FreeBSD.
+Isso é tudo. Se você estiver interessado em mais detalhes sobre o ZFS no FreeBSD, consulte a seção https://wiki.freebsd.org/ZFS[ZFS] do Wiki do FreeBSD.
diff --git a/documentation/content/pt-br/articles/remote-install/_index.po b/documentation/content/pt-br/articles/remote-install/_index.po
new file mode 100644
index 0000000000..ac8736e7df
--- /dev/null
+++ b/documentation/content/pt-br/articles/remote-install/_index.po
@@ -0,0 +1,1027 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-29 18:15+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlesremote-install_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/remote-install/_index.adoc:1
+#, no-wrap
+msgid "Describes the remote installation of the FreeBSD operating system when the console of the remote system is unavailable"
+msgstr ""
+"Este documento descreve a instalação remota do sistema operacional FreeBSD "
+"quando o console do sistema remoto não está disponível"
+
+#. type: Title =
+#: documentation/content/en/articles/remote-install/_index.adoc:1
+#: documentation/content/en/articles/remote-install/_index.adoc:12
+#, no-wrap
+msgid "Remote Installation of the FreeBSD Operating System Without a Remote Console"
+msgstr "Instalação Remota do Sistema Operacional FreeBSD sem um Console Remoto"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:48
+msgid ""
+"This article documents the remote installation of the FreeBSD operating "
+"system when the console of the remote system is unavailable. The main idea "
+"behind this article is the result of a collaboration with `{mm}` with "
+"valuable input provided by `{pjd}`."
+msgstr ""
+"Este artigo documenta a instalação remota do sistema operacional FreeBSD "
+"quando o console do sistema remoto não está disponível. A ideia principal "
+"por trás deste artigo é o resultado de uma colaboração com `{mm}`, com "
+"valiosa contribuição fornecida por `{pjd}`."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:50
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:54
+#, no-wrap
+msgid "Background"
+msgstr "Background"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:58
+msgid ""
+"There are many server hosting providers in the world, but very few of them "
+"are officially supporting FreeBSD. They usually provide support for a "
+"Linux(R) distribution to be installed on the servers they offer."
+msgstr ""
+"Existem muitos provedores de hospedagem de servidores no mundo, mas muito "
+"poucos deles oferecem suporte oficial para o FreeBSD. Geralmente, eles "
+"fornecem suporte para uma distribuição Linux(R) a ser instalada nos "
+"servidores que oferecem."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:62
+msgid ""
+"In some cases, these companies will install your preferred Linux(R) "
+"distribution if you request it. Using this option, we will attempt to "
+"install FreeBSD. In other cases, they may offer a rescue system which would "
+"be used in an emergency. It is possible to use this for our purposes as "
+"well."
+msgstr ""
+"Em alguns casos, essas empresas podem instalar a distribuição FreeBSD se "
+"você solicitar, mesmo que normalmente só ofereçam suporte para distribuições "
+"Linux(R). Em outros casos, elas podem oferecer um sistema de resgate que "
+"seria usado em uma emergência. É possível usar isso para nossos fins também."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:64
+msgid ""
+"This article covers the basic installation and configuration steps required "
+"to bootstrap a remote installation of FreeBSD with RAID-1 and ZFS "
+"capabilities."
+msgstr ""
+"Este artigo cobre os passos básicos de instalação e configuração necessários "
+"para inicializar uma instalação remota do FreeBSD com capacidades RAID-1 e "
+"ZFS."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:66
+#, no-wrap
+msgid "Introduction"
+msgstr "Introdução"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:70
+msgid ""
+"This section will summarize the purpose of this article and better explain "
+"what is covered herein. The instructions included in this article will "
+"benefit those using services provided by colocation facilities not "
+"supporting FreeBSD."
+msgstr ""
+"Esta seção resumirá o objetivo deste artigo e explicará melhor o que é "
+"abordado aqui. As instruções incluídas neste artigo beneficiarão aqueles que "
+"utilizam serviços fornecidos por provedores de colocation que não suportam o "
+"FreeBSD."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:74
+msgid ""
+"As we have mentioned in the <<background>> section, many of the reputable "
+"server hosting companies provide some kind of rescue system, which is booted "
+"from their LAN and accessible over SSH. They usually provide this support in "
+"order to help their customers fix broken operating systems. As this article "
+"will explain, it is possible to install FreeBSD with the help of these "
+"rescue systems."
+msgstr ""
+"Como mencionamos na seção <<background>>, muitas das empresas de hospedagem "
+"de servidores respeitáveis fornecem algum tipo de sistema de resgate, que é "
+"iniciado a partir de sua LAN e acessível por SSH. Geralmente, eles fornecem "
+"esse suporte para ajudar seus clientes a corrigir sistemas operacionais com "
+"problemas. Como este artigo explicará, é possível instalar o FreeBSD com a "
+"ajuda desses sistemas de resgate."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:76
+msgid ""
+"The next section of this article will describe how to configure, and build "
+"minimalistic FreeBSD on the local machine. That version will eventually be "
+"running on the remote machine from a ramdisk, which will allow us to install "
+"a complete FreeBSD operating system from an FTP mirror using the sysinstall "
+"utility."
+msgstr ""
+"A próxima seção deste artigo descreverá como configurar e compilar um "
+"FreeBSD minimalista na máquina local. Essa versão será executada "
+"eventualmente na máquina remota a partir de um ramdisk, o que nos permitirá "
+"instalar um sistema operacional FreeBSD completo a partir de um espelho FTP "
+"usando a ferramenta sysinstall."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:77
+msgid ""
+"The rest of this article will describe the installation procedure itself, as "
+"well as the configuration of the ZFS file system."
+msgstr ""
+"O restante deste artigo descreverá o procedimento de instalação em si, bem "
+"como a configuração do sistema de arquivos ZFS."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:80
+#, no-wrap
+msgid "Requirements"
+msgstr "Requisitos"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:83
+msgid "To continue successfully, you must:"
+msgstr "Para continuar com sucesso, você deve:"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:85
+msgid "Have a network accessible operating system with SSH access"
+msgstr "Ter um sistema operacional acessível pela rede com acesso SSH"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:86
+msgid "Understand the FreeBSD installation process"
+msgstr "Entender o processo de instalação do FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:87
+msgid "Be familiar with the man:sysinstall[8] utility"
+msgstr "Esteja familiarizado com o utilitário man:sysinstall[8]"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:88
+msgid "Have the FreeBSD installation SO image or CD handy"
+msgstr ""
+"Tenha a imagem do sistema operacional de instalação do FreeBSD ou o CD em "
+"mãos"
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:90
+#, no-wrap
+msgid "Preparation - mfsBSD"
+msgstr "Preparação - mfsBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:94
+msgid ""
+"Before FreeBSD may be installed on the target system, it is necessary to "
+"build the minimal FreeBSD operating system image which will boot from the "
+"hard drive. This way the new system can be accessed from the network, and "
+"the rest of the installation can be done without remote access to the system "
+"console."
+msgstr ""
+"Antes que o FreeBSD possa ser instalado no sistema de destino, é necessário "
+"construir a imagem mínima do sistema operacional FreeBSD que será "
+"inicializada a partir do disco rígido. Dessa forma, o novo sistema pode ser "
+"acessado a partir da rede e o restante da instalação pode ser feito sem "
+"acesso remoto ao console do sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:99
+msgid ""
+"The mfsBSD tool-set can be used to build a tiny FreeBSD image. As the name "
+"of mfsBSD suggests (\"mfs\" means \"memory file system\"), the resulting "
+"image runs entirely from a ramdisk. Thanks to this feature, the "
+"manipulation of hard drives will not be limited, therefore it will be "
+"possible to install a complete FreeBSD operating system. The mfsBSD http://"
+"mfsbsd.vx.sk/[home page] includes pointers to the latest release of the "
+"toolset."
+msgstr ""
+"A ferramenta mfsBSD pode ser utilizada para construir uma imagem mínima do "
+"FreeBSD. Como sugere o nome \"mfsBSD\" (\"mfs\" significa \"sistema de "
+"arquivos de memória\"), a imagem resultante é executada totalmente de um "
+"ramdisk. Graças a essa característica, a manipulação de discos rígidos não "
+"será limitada, tornando possível a instalação de um sistema operacional "
+"FreeBSD completo. A http://mfsbsd.vx.sk/[página inicial] do mfsBSD inclui "
+"referências para a última versão do conjunto de ferramentas."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:102
+msgid ""
+"Please note that the internals of mfsBSD and how it all fits together is "
+"beyond the scope of this article. The interested reader should consult the "
+"original documentation of mfsBSD for more details."
+msgstr ""
+"Por favor, note que os detalhes internos do mfsBSD e como tudo se encaixa "
+"estão além do escopo deste artigo. O leitor interessado deve consultar a "
+"documentação original do mfsBSD para mais detalhes."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:104
+msgid ""
+"Download and extract the latest mfsBSD release and change your working "
+"directory to the directory where the mfsBSD scripts will reside:"
+msgstr ""
+"Faça o download e extraia a última versão do mfsBSD e altere seu diretório "
+"de trabalho para o diretório onde os scripts do mfsBSD serão armazenados:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:110
+#, no-wrap
+msgid ""
+"# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz\n"
+"# tar xvzf mfsbsd-2.1.tar.gz\n"
+"# cd mfsbsd-2.1/\n"
+msgstr ""
+"# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz\n"
+"# tar xvzf mfsbsd-2.1.tar.gz\n"
+"# cd mfsbsd-2.1/\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:113
+#, no-wrap
+msgid "Configuration of mfsBSD"
+msgstr "Configuração do mfsBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:119
+msgid ""
+"Before booting mfsBSD, a few important configuration options have to be "
+"set. The most important that we have to get right is, naturally, the "
+"network setup. The most suitable method to configure networking options "
+"depends on whether we know beforehand the type of the network interface we "
+"will use, and the network interface driver to be loaded for our hardware. "
+"We will see how mfsBSD can be configured in either case."
+msgstr ""
+"Antes de iniciar o mfsBSD, algumas opções de configuração importantes devem "
+"ser definidas. A mais importante que devemos acertar é, naturalmente, a "
+"configuração de rede. O método mais adequado para configurar as opções de "
+"rede depende se sabemos de antemão o tipo de interface de rede que usaremos "
+"e o driver de interface de rede a ser carregado para nosso hardware. Veremos "
+"como o mfsBSD pode ser configurado em ambos os casos."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:123
+msgid ""
+"Another important thing to set is the `root` password. This can be done by "
+"editing [.filename]#conf/loader.conf#. Please see the included comments."
+msgstr ""
+"Outro ponto importante a ser definido é a senha do `root`. Isso pode ser "
+"feito editando o arquivo [.filename]#conf/loader.conf#. Por favor, consulte "
+"os comentários incluídos."
+
+#. type: Title ====
+#: documentation/content/en/articles/remote-install/_index.adoc:124
+#, no-wrap
+msgid "The [.filename]#conf/interfaces.conf# method"
+msgstr "O método [.filename]#conf/interfaces.conf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:128
+msgid ""
+"When the installed network interface card is unknown, it is possible to use "
+"the auto-detection features of mfsBSD. The startup scripts of mfsBSD can "
+"detect the correct driver to use, based on the MAC address of the interface, "
+"if we set the following options in [.filename]#conf/interfaces.conf#:"
+msgstr ""
+"Quando a placa de rede instalada é desconhecida, é possível usar os recursos "
+"de detecção automática do mfsBSD. Os scripts de inicialização do mfsBSD "
+"podem detectar o driver correto a ser usado, com base no endereço MAC da "
+"interface, se definirmos as seguintes opções em [.filename]#conf/interfaces."
+"conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:134
+#, no-wrap
+msgid ""
+"mac_interfaces=\"ext1\"\n"
+"ifconfig_ext1_mac=\"00:00:00:00:00:00\"\n"
+"ifconfig_ext1=\"inet 192.168.0.2/24\"\n"
+msgstr ""
+"mac_interfaces=\"ext1\"\n"
+"ifconfig_ext1_mac=\"00:00:00:00:00:00\"\n"
+"ifconfig_ext1=\"inet 192.168.0.2/24\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:137
+msgid ""
+"Do not forget to add the `defaultrouter` information to [.filename]#conf/rc."
+"conf#:"
+msgstr ""
+"Não se esqueça de adicionar as informações do `defaultrouter` no [.filename]#"
+"conf/rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:141
+#, no-wrap
+msgid "defaultrouter=\"192.168.0.1\"\n"
+msgstr "defaultrouter=\"192.168.0.1\"\n"
+
+#. type: Title ====
+#: documentation/content/en/articles/remote-install/_index.adoc:143
+#, no-wrap
+msgid "The [.filename]#conf/rc.conf# Method"
+msgstr "O Método [.filename]#conf/rc.conf#"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:147
+msgid ""
+"When the network interface driver is known, it is more convenient to use [."
+"filename]#conf/rc.conf# for networking options. The syntax of this file is "
+"the same as the one used in the standard man:rc.conf[5] file of FreeBSD."
+msgstr ""
+"Quando o driver da interface de rede é conhecido, é mais conveniente usar o "
+"arquivo [.filename]#conf/rc.conf# para as opções de rede. A sintaxe deste "
+"arquivo é a mesma usada no arquivo padrão man:rc.conf[5] do FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:149
+msgid ""
+"For example, if you know that a man:re[4] network interface is going to be "
+"available, you can set the following options in [.filename]#conf/rc.conf#:"
+msgstr ""
+"Por exemplo, se você sabe que uma interface de rede man:re[4] estará "
+"disponível, você pode definir as seguintes opções no [.filename]#conf/rc."
+"conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:154
+#, no-wrap
+msgid ""
+"defaultrouter=\"192.168.0.1\"\n"
+"ifconfig_re0=\"inet 192.168.0.2/24\"\n"
+msgstr ""
+"defaultrouter=\"192.168.0.1\"\n"
+"ifconfig_re0=\"inet 192.168.0.2/24\"\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:157
+#, no-wrap
+msgid "Building an mfsBSD Image"
+msgstr "Construindo uma imagem mfsBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:160
+msgid "The process of building an mfsBSD image is pretty straightforward."
+msgstr "O processo de construir uma imagem mfsBSD é bastante simples."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:164
+msgid ""
+"The first step is to mount the FreeBSD installation CD, or the installation "
+"ISO image to [.filename]#/cdrom#. For the sake of example, in this article "
+"we will assume that you have downloaded the FreeBSD 10.1-RELEASE ISO. "
+"Mounting this ISO image to the [.filename]#/cdrom# directory is easy with "
+"the man:mdconfig[8] utility:"
+msgstr ""
+"O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de "
+"instalação, no diretório [.filename]#/cdrom#. Para fins de exemplo, neste "
+"artigo vamos supor que você tenha baixado a imagem ISO do FreeBSD 10.1-"
+"RELEASE. Montar esta imagem ISO no diretório [.filename]#/cdrom# é fácil com "
+"o utilitário man:mdconfig[8]:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:169
+#, no-wrap
+msgid ""
+"# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso\n"
+"# mount_cd9660 /dev/md10 /cdrom\n"
+msgstr ""
+"# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso\n"
+"# mount_cd9660 /dev/md10 /cdrom\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:172
+msgid ""
+"Since the recent FreeBSD releases do not contain regular distribution sets, "
+"it is required to extract the FreeBSD distribution files from the "
+"distribution archives located on the ISO image:"
+msgstr ""
+"Como as versões recentes do FreeBSD não contêm conjuntos de distribuição "
+"regulares, é necessário extrair os arquivos de distribuição do FreeBSD dos "
+"arquivos de distribuição localizados na imagem ISO:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:178
+#, no-wrap
+msgid ""
+"# mkdir DIST\n"
+"# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST\n"
+"# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST\n"
+msgstr ""
+"# mkdir DIST\n"
+"# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST\n"
+"# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:181
+msgid "Next, build the bootable mfsBSD image:"
+msgstr "Em seguida, crie a imagem de inicialização do mfsBSD:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:185
+#, no-wrap
+msgid "# make BASE=DIST\n"
+msgstr "# make BASE=DIST\n"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:190
+msgid ""
+"The above `make` has to be run from the top level of the mfsBSD directory "
+"tree, for example [.filename]#~/mfsbsd-2.1/#."
+msgstr ""
+"A instrução `make` acima deve ser executada a partir do nível superior da "
+"árvore de diretórios do mfsBSD, por exemplo, [.filename]#~/mfsbsd-2.1/#."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:192
+#, no-wrap
+msgid "Booting mfsBSD"
+msgstr "Inicializando o mfsBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:196
+msgid ""
+"Now that the mfsBSD image is ready, it must be uploaded to the remote system "
+"running a live rescue system or pre-installed Linux(R) distribution. The "
+"most suitable tool for this task is scp:"
+msgstr ""
+"Agora que a imagem mfsBSD está pronta, ela deve ser enviada para o sistema "
+"remoto que está executando um sistema de resgate ou a distribuição Linux(R) "
+"pré-instalada. A ferramenta mais adequada para essa tarefa é o scp:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:200
+#, no-wrap
+msgid "# scp disk.img root@192.168.0.2:.\n"
+msgstr "# scp disk.img root@192.168.0.2:.\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:204
+msgid ""
+"To boot mfsBSD image properly, it must be placed on the first (bootable) "
+"device of the given machine. This may be accomplished using this example "
+"providing that [.filename]#sda# is the first bootable disk device:"
+msgstr ""
+"Para inicializar a imagem do mfsBSD corretamente, ela deve ser colocada no "
+"primeiro dispositivo (inicializável) da máquina em questão. Isso pode ser "
+"feito usando o seguinte exemplo, supondo que o [.filename]#sda# seja o "
+"primeiro dispositivo de disco inicializável:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:208
+#, no-wrap
+msgid "# dd if=/root/disk.img of=/dev/sda bs=1m\n"
+msgstr "# dd if=/root/disk.img of=/dev/sda bs=1m\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:213
+msgid ""
+"If all went well, the image should now be in the MBR of the first device and "
+"the machine can be rebooted. Watch for the machine to boot up properly with "
+"the man:ping[8] tool. Once it has came back on-line, it should be possible "
+"to access it over man:ssh[1] as user `root` with the configured password."
+msgstr ""
+"Se tudo correu bem, a imagem agora deve estar no MBR do primeiro dispositivo "
+"e a máquina pode ser reiniciada. Verifique se a máquina está iniciando "
+"corretamente com a ferramenta man:ping[8]. Depois que a máquina voltar on-"
+"line, deve ser possível acessá-la via man:ssh[1] como usuário `root` com a "
+"senha configurada."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:215
+#, no-wrap
+msgid "Installation of the FreeBSD Operating System"
+msgstr "Instalação do Sistema Operacional FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:219
+msgid ""
+"The mfsBSD has been successfully booted and it should be possible to log in "
+"through man:ssh[1]. This section will describe how to create and label "
+"slices, set up `gmirror` for RAID-1, and how to use `sysinstall` to install "
+"a minimal distribution of the FreeBSD operating system."
+msgstr ""
+"O mfsBSD foi iniciado com sucesso e deve ser possível fazer login por meio "
+"do man:ssh[1]. Esta seção descreverá como criar e rotular slices, configurar "
+"o `gmirror` para RAID-1 e como usar o `sysinstall` para instalar uma "
+"distribuição mínima do sistema operacional FreeBSD."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:220
+#, no-wrap
+msgid "Preparation of Hard Drives"
+msgstr "Preparação dos Discos Rígidos"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:225
+msgid ""
+"The first task is to allocate disk space for FreeBSD, i.e.: to create slices "
+"and partitions. Obviously, the currently running system is fully loaded in "
+"system memory and therefore there will be no problems with manipulating hard "
+"drives. To complete this task, it is possible to use either `sysinstall` or "
+"man:fdisk[8] in conjunction to man:bsdlabel[8]."
+msgstr ""
+"A primeira tarefa é alocar espaço em disco para o FreeBSD, ou seja, criar "
+"slices e partições. Obviamente, o sistema atualmente em execução está "
+"totalmente carregado na memória do sistema e, portanto, não haverá problemas "
+"com a manipulação de discos rígidos. Para concluir esta tarefa, é possível "
+"usar o `sysinstall` ou o man:fdisk[8] em conjunto com o man:bsdlabel[8]."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:228
+msgid ""
+"At the start, mark all system disks as empty. Repeat the following command "
+"for each hard drive:"
+msgstr ""
+"No início, marque todos os discos do sistema como vazios. Repita o seguinte "
+"comando para cada disco rígido:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:232
+#, no-wrap
+msgid "# dd if=/dev/zero of=/dev/ad0 count=2\n"
+msgstr "# dd if=/dev/zero of=/dev/ad0 count=2\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:240
+msgid ""
+"Next, create slices and label them with your preferred tool. While it is "
+"considered easier to use `sysinstall`, a powerful and also probably less "
+"buggy method will be to use standard text-based UNIX(R) tools, such as man:"
+"fdisk[8] and man:bsdlabel[8], which will also be covered in this section. "
+"The former option is well documented in the extref:{handbook}[Installing "
+"FreeBSD, install-steps] chapter of the FreeBSD Handbook. As it was "
+"mentioned in the introduction, this article will present how to set up a "
+"system with RAID-1 and ZFS capabilities. Our set up will consist of a small "
+"man:gmirror[8] mirrored [.filename]#/# (root), [.filename]#/usr# and [."
+"filename]#/var# dataset, and the rest of the disk space will be allocated "
+"for a man:zpool[8] mirrored ZFS file system. Please note, that the ZFS file "
+"system will be configured after the FreeBSD operating system is successfully "
+"installed and booted."
+msgstr ""
+"O próximo passo é criar slices e rotulá-las com a ferramenta de sua "
+"preferência. Embora seja considerado mais fácil usar o `sysinstall`, um "
+"método poderoso e provavelmente com menos bugs é usar as ferramentas UNIX(R) "
+"padrão baseadas em texto, como o man:fdisk[8] e o man:bsdlabel[8], que "
+"também serão abordados nesta seção. A primeira opção está bem documentada no "
+"capítulo extref:{handbook}[Instalando o FreeBSD, install-steps] do Handbook "
+"do FreeBSD. Como mencionado na introdução, este artigo apresentará como "
+"configurar um sistema com capacidades RAID-1 e ZFS. A nossa configuração "
+"consistirá em um pequeno man:gmirror[8] para o [.filename]#/# (root), [."
+"filename]#/usr# e [.filename]#/var#, e o restante do espaço em disco será "
+"alocado para um sistema de arquivos ZFS espelhado por meio do man:zpool[8]. "
+"Por favor, note que o sistema de arquivos ZFS será configurado após a "
+"instalação e inicialização bem-sucedidas do sistema operacional FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:242
+msgid ""
+"The following example will describe how to create slices and labels, "
+"initialize man:gmirror[8] on each partition and how to create a UFS2 file "
+"system in each mirrored partition:"
+msgstr ""
+"O seguinte exemplo descreverá como criar slices e rótulos, inicializar o "
+"man:gmirror[8] em cada partição e como criar um sistema de arquivos UFS2 em "
+"cada partição espelhada:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:258
+#, no-wrap
+msgid ""
+"# fdisk -BI /dev/ad0 <.>\n"
+"# fdisk -BI /dev/ad1\n"
+"# bsdlabel -wB /dev/ad0s1 <.>\n"
+"# bsdlabel -wB /dev/ad1s1\n"
+"# bsdlabel -e /dev/ad0s1 <.>\n"
+"# bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt <.>\n"
+"# gmirror label root /dev/ad[01]s1a <.>\n"
+"# gmirror label var /dev/ad[01]s1d\n"
+"# gmirror label usr /dev/ad[01]s1e\n"
+"# gmirror label -F swap /dev/ad[01]s1b <.>\n"
+"# newfs /dev/mirror/root <.>\n"
+"# newfs /dev/mirror/var\n"
+"# newfs /dev/mirror/usr\n"
+msgstr ""
+"# fdisk -BI /dev/ad0 <.>\n"
+"# fdisk -BI /dev/ad1\n"
+"# bsdlabel -wB /dev/ad0s1 <.>\n"
+"# bsdlabel -wB /dev/ad1s1\n"
+"# bsdlabel -e /dev/ad0s1 <.>\n"
+"# bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/"
+"bsdlabel.txt <.>\n"
+"# gmirror label root /dev/ad[01]s1a <.>\n"
+"# gmirror label var /dev/ad[01]s1d\n"
+"# gmirror label usr /dev/ad[01]s1e\n"
+"# gmirror label -F swap /dev/ad[01]s1b <.>\n"
+"# newfs /dev/mirror/root <.>\n"
+"# newfs /dev/mirror/var\n"
+"# newfs /dev/mirror/usr\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:261
+msgid ""
+"Create a slice covering the entire disk and initialize the boot code "
+"contained in sector 0 of the given disk. Repeat this command for all hard "
+"drives in the system."
+msgstr ""
+"Crie uma slice cobrindo todo o disco e inicialize o código de inicialização "
+"contido no setor 0 do disco fornecido. Repita este comando para todos os "
+"discos rígidos no sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:263
+msgid "Write a standard label for each disk including the bootstrap code."
+msgstr ""
+"Escreva um label padrão para cada disco, incluindo o código de bootstrap."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:265
+msgid ""
+"Now, manually edit the label of the given disk. Refer to the man:bsdlabel[8] "
+"manual page in order to find out how to create partitions. Create partitions "
+"`a` for [.filename]#/# (root) file system, `b` for swap, `d` for [."
+"filename]#/var#, `e` for [.filename]#/usr# and finally `f` which will later "
+"be used for ZFS."
+msgstr ""
+"Agora, edite manualmente o label do disco. Consulte a página do manual "
+"man:bsdlabel[8] para descobrir como criar partições. Crie partições `a` para "
+"o sistema de arquivos [.filename]#/# (raiz), `b` para swap, `d` para [."
+"filename]#/var#, `e` para [.filename]#/usr# e, finalmente, `f` que será "
+"usado posteriormente para o ZFS."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:267
+msgid ""
+"Import the recently created label for the second hard drive, so both hard "
+"drives will be labeled in the same way."
+msgstr ""
+"Importe o label recém-criado para o segundo disco rígido, para que ambos os "
+"discos sejam rotulados da mesma maneira."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:269
+msgid "Initialize man:gmirror[8] on each partition."
+msgstr "Inicialize o man:gmirror[8] em cada partição."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:271
+msgid ""
+"Note that `-F` is used for the swap partition. This instructs man:gmirror[8] "
+"to assume that the device is in the consistent state after the power/system "
+"failure."
+msgstr ""
+"Note que `-F` é usado para a partição swap. Isso instrui o man:gmirror[8] a "
+"assumir que o dispositivo está em um estado consistente após uma falha de "
+"energia/sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:273
+msgid "Create a UFS2 file system on each mirrored partition."
+msgstr "Crie um sistema de arquivos UFS2 em cada partição espelhada."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:274
+#, no-wrap
+msgid "System Installation"
+msgstr "Instalação do sistema"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:279
+msgid ""
+"This is the most important part. This section will describe how to actually "
+"install the minimal distribution of FreeBSD on the hard drives that we have "
+"prepared in the previous section. To accomplish this goal, all file systems "
+"need to be mounted so `sysinstall` may write the contents of FreeBSD to the "
+"hard drives:"
+msgstr ""
+"Esta é a parte mais importante. Esta seção irá descrever como instalar a "
+"distribuição mínima do FreeBSD nos discos rígidos que preparamos na seção "
+"anterior. Para atingir este objetivo, todos os sistemas de arquivos precisam "
+"ser montados para que o `sysinstall` possa gravar o conteúdo do FreeBSD nos "
+"discos rígidos:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:286
+#, no-wrap
+msgid ""
+"# mount /dev/mirror/root /mnt\n"
+"# mkdir /mnt/var /mnt/usr\n"
+"# mount /dev/mirror/var /mnt/var\n"
+"# mount /dev/mirror/usr /mnt/usr\n"
+msgstr ""
+"# mount /dev/mirror/root /mnt\n"
+"# mkdir /mnt/var /mnt/usr\n"
+"# mount /dev/mirror/var /mnt/var\n"
+"# mount /dev/mirror/usr /mnt/usr\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:293
+msgid ""
+"When you are done, start man:sysinstall[8]. Select the [."
+"guimenuitem]#Custom# installation from the main menu. Select [."
+"guimenuitem]#Options# and press kbd:[Enter]. With the help of arrow keys, "
+"move the cursor on the `Install Root` item, press kbd:[Space] and change it "
+"to [.filename]#/mnt#. Press kbd:[Enter] to submit your changes and exit the "
+"[.guimenuitem]#Options# menu by pressing kbd:[q]."
+msgstr ""
+"Quando terminar, inicie o man:sysinstall[8]. Selecione a instalação [."
+"guimenuitem]#Custom# no menu principal. Selecione [.guimenuitem]#Opções# e "
+"pressione kbd:[Enter]. Com a ajuda das teclas de seta, mova o cursor no item "
+"`Install Root`, pressione kbd:[Espaço] e altere-o para [.filename]#/mnt#. "
+"Pressione kbd:[Enter] para enviar suas alterações e sair do menu [."
+"guimenuitem]#Opções# pressionando kbd:[q]."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:297
+msgid ""
+"Note that this step is very important and if skipped, `sysinstall` will be "
+"unable to install FreeBSD."
+msgstr ""
+"Observe que este passo é muito importante e, se ignorado, o `sysinstall` "
+"será incapaz de instalar o FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:302
+msgid ""
+"Go to the [.guimenuitem]#Distributions# menu, move the cursor with the arrow "
+"keys to `Minimal`, and check it by pressing kbd:[Space]. This article uses "
+"the Minimal distribution in order to save network traffic, because the "
+"system itself will be installed over ftp. Exit this menu by choosing `Exit`."
+msgstr ""
+"Vá para o menu [.guimenuitem]#Distributions#, mova o cursor com as teclas de "
+"seta para `Minimal` e marque-a pressionando kbd:[Espaço]. Este artigo "
+"utiliza a distribuição Minimal para economizar tráfego de rede, pois o "
+"próprio sistema será instalado via ftp. Saia deste menu escolhendo `Exit`."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/remote-install/_index.adoc:306
+msgid ""
+"The [.guimenuitem]#Partition# and [.guimenuitem]#Label# menus will be "
+"skipped, as these are useless now."
+msgstr ""
+"Os menus [.guimenuitem]#Partition# e [.guimenuitem]#Label# serão ignorados, "
+"pois são inúteis neste momento."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:311
+msgid ""
+"In the [.guimenuitem]#Media# menu, select `FTP`. Select the nearest mirror "
+"and let `sysinstall` assume that the network is already configured. You "
+"will be returned back to the [.guimenuitem]#Custom# menu."
+msgstr ""
+"Na tela do menu [.guimenuitem]#Media#[/guimenuitem], selecione a opção \"FTP"
+"\". Escolha o espelho mais próximo e deixe que o `sysinstall` assuma que a "
+"rede já está configurada. Você será levado de volta ao menu [."
+"guimenuitem]#Custom#."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:314
+msgid ""
+"Finally, perform the system installation by selecting the last option, [."
+"guimenuitem]#Commit#. Exit `sysinstall` when it finishes the installation."
+msgstr ""
+"Por fim, execute a instalação do sistema selecionando a última opção, [."
+"guimenuitem]#Commit#. Saia do `sysinstall` quando a instalação for concluída."
+
+#. type: Title ===
+#: documentation/content/en/articles/remote-install/_index.adoc:315
+#, no-wrap
+msgid "Post Installation Steps"
+msgstr "Etapas pós-instalação"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:319
+msgid ""
+"The FreeBSD operating system should be installed now; however, the process "
+"is not finished yet. It is necessary to perform some post installation "
+"steps in order to allow FreeBSD to boot in the future and to be able to log "
+"in to the system."
+msgstr ""
+"O sistema operacional FreeBSD deve estar instalado agora; no entanto, o "
+"processo ainda não está concluído. É necessário realizar algumas etapas pós-"
+"instalação para permitir que o FreeBSD seja inicializado no futuro e para "
+"poder fazer login no sistema."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:322
+msgid ""
+"You must now man:chroot[8] into the freshly installed system in order to "
+"finish the installation. Use the following command:"
+msgstr ""
+"Agora você deve executar o comando `man:chroot[8]` no sistema recém-"
+"instalado para concluir a instalação. Use o seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:326
+#, no-wrap
+msgid "# chroot /mnt\n"
+msgstr "# chroot /mnt\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:329
+msgid "To complete our goal, perform these steps:"
+msgstr "Para completar nosso objetivo, execute estas etapas:"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:331
+msgid "Copy the `GENERIC` kernel to the [.filename]#/boot/kernel# directory:"
+msgstr "Copie o kernel `GENERIC` para o diretório [.filename]#/boot/kernel#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:335
+#, no-wrap
+msgid "# cp -Rp /boot/GENERIC/* /boot/kernel\n"
+msgstr "# cp -Rp /boot/GENERIC/* /boot/kernel\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:338
+msgid ""
+"Create the [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# and [."
+"filename]#/etc/fstab# files. Do not forget to properly set the network "
+"information and to enable sshd in [.filename]#/etc/rc.conf#. The contents of "
+"[.filename]#/etc/fstab# will be similar to the following:"
+msgstr ""
+"Crie os arquivos [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# e ["
+".filename]#/etc/fstab#. Não esqueça de definir corretamente as informações "
+"de rede e habilitar o sshd em [.filename]#/etc/rc.conf#. O conteúdo do [."
+"filename]#/etc/fstab# será semelhante ao seguinte:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:347
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"/dev/mirror/swap none swap sw 0 0\n"
+"/dev/mirror/root / ufs rw 1 1\n"
+"/dev/mirror/usr /usr ufs rw 2 2\n"
+"/dev/mirror/var /var ufs rw 2 2\n"
+"/dev/cd0 /cdrom cd9660 ro,noauto 0 0\n"
+msgstr ""
+"# Device Mountpoint FStype Options Dump Pass#"
+"\n"
+"/dev/mirror/swap none swap sw 0 0\n"
+"/dev/mirror/root / ufs rw 1 1\n"
+"/dev/mirror/usr /usr ufs rw 2 2\n"
+"/dev/mirror/var /var ufs rw 2 2\n"
+"/dev/cd0 /cdrom cd9660 ro,noauto 0 0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:349
+msgid "Create [.filename]#/boot/loader.conf# with the following contents:"
+msgstr "Crie o arquivo [.filename]#/boot/loader.conf# com o seguinte conteúdo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:354
+#, no-wrap
+msgid ""
+"geom_mirror_load=\"YES\"\n"
+"zfs_load=\"YES\"\n"
+msgstr ""
+"geom_mirror_load=\"YES\"\n"
+"zfs_load=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:356
+msgid ""
+"Perform the following command, which will make ZFS available on the next "
+"boot:"
+msgstr ""
+"Execute o seguinte comando, que permitirá o ZFS ser utilizado no próximo "
+"boot:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:360
+#, no-wrap
+msgid "# sysrc zfs_enable=\"YES\"\n"
+msgstr "# sysrc zfs_enable=\"YES\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:363
+msgid ""
+"Add additional users to the system using the man:adduser[8] tool. Do not "
+"forget to add a user to the `wheel` group so you may obtain root access "
+"after the reboot."
+msgstr ""
+"Adicione usuários adicionais ao sistema usando a ferramenta man:adduser[8]. "
+"Não se esqueça de adicionar um usuário ao grupo `wheel` para que possa obter "
+"acesso de root após a reinicialização."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:364
+msgid "Double-check all your settings."
+msgstr "Verifique todas as suas configurações."
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:367
+msgid ""
+"The system should now be ready for the next boot. Use the man:reboot[8] "
+"command to reboot your system."
+msgstr ""
+"O sistema deve estar pronto para a próxima inicialização. Use o comando "
+"man:reboot[8] para reiniciar o sistema."
+
+#. type: Title ==
+#: documentation/content/en/articles/remote-install/_index.adoc:369
+#, no-wrap
+msgid "ZFS"
+msgstr "ZFS"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:373
+msgid ""
+"If your system survived the reboot, it should now be possible to log in. "
+"Welcome to the fresh FreeBSD installation, performed remotely without the "
+"use of a remote console!"
+msgstr ""
+"Se o seu sistema sobreviveu ao reboot, agora deve ser possível fazer login. "
+"Bem-vindo à nova instalação do FreeBSD, realizada remotamente sem o uso de "
+"um console remoto!"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:376
+msgid ""
+"The only remaining step is to configure man:zpool[8] and create some man:"
+"zfs[8] file systems. Creating and administering ZFS is very "
+"straightforward. First, create a mirrored pool:"
+msgstr ""
+"O único passo restante é configurar o man:zpool[8] e criar alguns sistemas "
+"de arquivos man:zfs[8]. Criar e administrar ZFS é muito simples. Primeiro, "
+"crie um pool espelhado:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:380
+#, no-wrap
+msgid "# zpool create tank mirror /dev/ad[01]s1f\n"
+msgstr "# zpool create tank mirror /dev/ad[01]s1f\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:383
+msgid "Next, create some file systems:"
+msgstr "Em seguida, crie alguns sistemas de arquivos:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/remote-install/_index.adoc:392
+#, no-wrap
+msgid ""
+"# zfs create tank/ports\n"
+"# zfs create tank/src\n"
+"# zfs set compression=gzip tank/ports\n"
+"# zfs set compression=on tank/src\n"
+"# zfs set mountpoint=/usr/ports tank/ports\n"
+"# zfs set mountpoint=/usr/src tank/src\n"
+msgstr ""
+"# zfs create tank/ports\n"
+"# zfs create tank/src\n"
+"# zfs set compression=gzip tank/ports\n"
+"# zfs set compression=on tank/src\n"
+"# zfs set mountpoint=/usr/ports tank/ports\n"
+"# zfs set mountpoint=/usr/src tank/src\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/remote-install/_index.adoc:395
+msgid ""
+"That is all. If you are interested in more details about ZFS on FreeBSD, "
+"please refer to the https://wiki.freebsd.org/ZFS[ZFS] section of the FreeBSD "
+"Wiki."
+msgstr ""
+"Isso é tudo. Se você estiver interessado em mais detalhes sobre o ZFS no "
+"FreeBSD, consulte a seção https://wiki.freebsd.org/ZFS[ZFS] do Wiki do "
+"FreeBSD."
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/serial-uart/_index.adoc b/documentation/content/pt-br/articles/serial-uart/_index.adoc
index ea57e431f7..eb5e569bef 100644
--- a/documentation/content/pt-br/articles/serial-uart/_index.adoc
+++ b/documentation/content/pt-br/articles/serial-uart/_index.adoc
@@ -3,7 +3,6 @@ title: Tutorial sobre Comunicações Seriais e UART
authors:
- author: Frank Durda
email: uhclem@FreeBSD.org
-releaseinfo: "$FreeBSD$"
trademarks: ["freebsd", "microsoft", "general"]
---
@@ -16,15 +15,27 @@ trademarks: ["freebsd", "microsoft", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
+:images-path: articles/serial-uart/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
@@ -748,7 +759,7 @@ Os procedimentos para fazer uma placa multiporta Boca 16 funcionar com o FreeBSD
Uma nota importante - os chips UART reais para a Boca 16 estão nos conectores, não na própria placa interna. Então, se você os tiver desconectado, os probes destas portas falharão. Eu nunca testei a inicialização com a caixa desconectada e conectando-a novamente, e sugiro que você também não o faça.
-Se você ainda não tiver um arquivo de configuração de kernel personalizado, consulte o capitulo link:{handbook}kernelconfig/[Configuração do Kernel] no Handbook do FreeBSD para os procedimentos gerais. A seguir estão as especificações para a placa Boca 16 e supõe-se que você esteja usando o nome do kernel MYKERNEL e editando com o vi.
+Se você ainda não tiver um arquivo de configuração de kernel personalizado, consulte o capitulo extref:{handbook}/[Configuração do Kernel, kernelconfig] no Handbook do FreeBSD para os procedimentos gerais. A seguir estão as especificações para a placa Boca 16 e supõe-se que você esteja usando o nome do kernel MYKERNEL e editando com o vi.
[.procedure]
. Adicione a linha
diff --git a/documentation/content/pt-br/articles/solid-state/_index.adoc b/documentation/content/pt-br/articles/solid-state/_index.adoc
index 3ed1debea0..1fa708c6e3 100644
--- a/documentation/content/pt-br/articles/solid-state/_index.adoc
+++ b/documentation/content/pt-br/articles/solid-state/_index.adoc
@@ -1,10 +1,12 @@
---
-title: FreeBSD e Dispositivos de Estado Sólido
authors:
- - author: John Kozubik
+ -
+ author: 'John Kozubik'
email: john@kozubik.com
-copyright: 2001, 2009 Projeto de Documentação do FreeBSD
-releaseinfo: "$FreeBSD$"
+copyright: '2001 - 2021 The FreeBSD Documentation Project'
+description: 'O uso de dispositivos de disco de estado sólido no FreeBSD'
+tags: ["Solid State", "embedded", "FreeBSD"]
+title: 'FreeBSD e Dispositivos de Estado Sólido'
trademarks: ["freebsd", "general"]
---
@@ -17,20 +19,34 @@ trademarks: ["freebsd", "general"]
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
+:images-path: articles/solid-state/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
[.abstract-title]
Resumo
Este artigo aborda o uso de dispositivos de disco de estado sólido no FreeBSD para criar sistemas embarcados.
-Os sistemas embarcados têm a vantagem de uma maior estabilidade devido à ausência de partes móveis (discos rígidos). No entanto, é preciso ter em conta que o espaço disponível em disco é geralmente baixo no sistema e a durabilidade do meio de armazenamento.
+Os sistemas embarcados têm a vantagem de maior estabilidade devido à falta de partes móveis integradas (discos rígidos). No entanto, é preciso levar em conta o espaço disponível no sistema que geralmente é baixo e a durabilidade do meio de armazenamento.
Tópicos específicos a serem abordados incluem os tipos e atributos das mídia de estado sólido adequadas para uso como disco no FreeBSD, opções de kernel que são de interesse em tal ambiente, os mecanismos [.filename]#rc.initdiskless# que automatizam a inicialização de tais sistemas e a necessidade de sistemas de arquivos read-only e a construção de sistemas de arquivos a partir do zero. O artigo será concluído com algumas estratégias gerais para ambientes FreeBSD pequenos e read-only .
@@ -52,7 +68,7 @@ Outras soluções de disco de estado sólido existem, mas seu custo, obscuridade
Algumas opções do kernel são de interesse específico para aqueles que criam sistemas FreeBSD embarcados.
-Todos os sistemas embarcados FreeBSD que usam memória flash como disco para o sistema estarão interessados ​​em usar discos em memória e sistemas de arquivos em memória. Devido ao número limitado de gravações que podem ser feitas na memória flash, o disco e os sistemas de arquivos no disco provavelmente serão montados como read-only. Nesse ambiente, sistemas de arquivos tais como [.filename]#/tmp# e [.filename]#/var# são montados como sistemas de arquivos em memória para permitir que o sistema crie logs e atualize contadores e arquivos temporários. Os sistemas de arquivos em memória são um componente crítico para uma implementação bem-sucedida do FreeBSD em dispositivos de estado sólido.
+Todos os sistemas FreeBSD embarcados que utilizam memória flash como disco do sistema terão interesse em discos em memória e sistemas de arquivos em memória. Devido ao número limitado de gravações que podem ser feitas na memória flash, o disco e os sistemas de arquivos no disco provavelmente serão montados como read-only. Nesse ambiente, sistemas de arquivos como [.filename]#/tmp# e [.filename]#/var# são montados como sistemas de arquivos em memória para permitir que o sistema crie logs e atualize contadores e arquivos temporários. Sistemas de arquivos em memória são um componente crítico para uma implementação bem-sucedida do FreeBSD usandp discos de estado sólido.
Você deve ter certeza de que as seguintes linhas existem no seu arquivo de configuração do kernel:
@@ -64,11 +80,11 @@ pseudo-device md # memory disk
....
[[ro-fs]]
-== O Subsistema `rc` e os Sistemas de Arquivos Read-Only
+== O Subsistema `rc` e Sistemas de ArquivosRead-Only
A inicialização pós-boot de um sistema FreeBSD embarcado é controlada por [.filename]#/etc/rc.initdiskless#.
-O [.filename]#/etc/rc.d/var# monta o [.filename]#/var# como um sistema de arquivos em memória, cria uma lista configurável de diretórios em [.filename]#/var# com o comando man:mkdir[1] e altera os modos em alguns desses diretórios. Na execução do [.filename]#/etc/rc.d/var#, uma outra variável [.filename]#rc.conf# entra em jogo – `varsize`. Uma partição [.filename]#/var# é criada por [.filename]#/etc/rc.d/var# baseado no valor desta variável em [.filename]#rc.conf#:
+O [.filename]#/etc/rc.d/var# monta o [.filename]#/var# como um sistema de arquivos em memória, cria uma lista configurável de diretórios em [.filename]#/var# com o comando man:mkdir[1] e altera modos em alguns desses diretórios. Na execução do [.filename]#/etc/rc.d/var#, outra variável [.filename]#rc.conf# entra em ação - `varsize`. Uma partição [.filename]#/var# é criada por [.filename]#/etc/rc.d/var# com base no valor dessa variável em [.filename]#rc.conf#:
[.programlisting]
....
@@ -89,104 +105,106 @@ Alguns aplicativos no sistema começarão a falhar imediatamente como resultado
Uma coisa importante para lembrar é que um sistema de arquivos que foi montado como read-only com o [.filename]#/etc/fstab# pode ser colocado em modo read-write a qualquer momento, executando o comando:
-[source,shell]
+[source, shell]
....
# /sbin/mount -uw partition
....
-e pode ser alternado de volta para somente leitura com o comando:
+e pode ser alternado de volta para read-only com o comando:
-[source,shell]
+[source, shell]
....
# /sbin/mount -ur partition
....
== Construindo um sistema de arquivos a partir do zero
-Como os cartões Compact Flash compatíveis com ATA são vistos pelo FreeBSD como discos rígidos IDE normais, você poderia teoricamente instalar o FreeBSD a partir da rede usando o os disquetes do kern e mfsroot ou de um CD.
+Como os cartões compact-flash compatíveis com ATA são vistos pelo FreeBSD como discos rígidos IDE normais, você poderia teoricamente instalar o FreeBSD a partir da rede usando os disquetes kern e mfsroot ou a partir de um CD.
-No entanto, mesmo uma pequena instalação do FreeBSD utilizando procedimentos normais de instalação pode produzir um sistema com tamanho maior que 200 megabytes. Como a maioria das pessoas usará dispositivos de memória flash menores (128 megabytes são considerados razoavelmente grandes - 32 ou até mesmo 16 megabytes são comuns), uma instalação usando mecanismos normais não será possível - simplesmente não há espaço em disco suficiente nem para as menores instalações convencionais.
+No entanto, mesmo uma pequena instalação do FreeBSD usando procedimentos normais de instalação pode resultar em um sistema de tamanho superior a 200 megabytes. A maioria das pessoas estará usando dispositivos de memória flash menores (128 megabytes é considerado bastante grande - 32 ou até 16 megabytes são comuns), então uma instalação usando mecanismos normais não é possível - simplesmente não há espaço em disco suficiente nem mesmo para a menor das instalações convencionais.
A maneira mais fácil de superar essa limitação de espaço é instalar o FreeBSD usando meios convencionais em um disco rígido normal. Após a conclusão da instalação, reduza o sistema operacional para um tamanho que caiba na mídia flash e compacte o sistema de arquivos inteiro com o tar. Os passos seguintes irão guiá-lo através do processo de preparação de uma parte da memória flash para o seu sistema de arquivos compactado com o tar. Lembre-se de que não estamos executando uma instalação normal, logo as operações como particionamento, criação dos labels, criação do sistema de arquivos, etc. precisam ser executadas manualmente. Além dos disquetes do kern e mfsroot, você também precisará usar o disquete do fixit.
[.procedure]
+====
. Particionando seu Dispositivo de Mídia Flash
-+
-Após inicializar com os disquetes do kern e mfsroot, escolha `custom` no menu de instalação. No menu de instalação personalizada, escolha `partition`. No menu de partições, você deve apagar todas as partições existentes usando a tecla kbd:[d]. Depois de excluir todas as partições existentes, crie uma partição usando a tecla kbd:[c] e aceite o valor padrão para o tamanho da partição. Quando perguntado sobre o tipo da partição, certifique-se de que o valor esteja configurado para `165`. Agora escreva esta tabela de partições no disco pressionando kbd:[w] (esta é uma opção oculta nesta tela). Se você estiver usando um cartão compact flash compatível com ATA, deverá escolher o FreeBSD Boot Manager. Agora pressione kbd:[q] para sair do menu de partições. Você verá novamente o menu do gerenciador de inicialização - repita a escolha feita anteriormente.
++
+Após inicializar com os disquetes kern e mfsroot, escolha `custom` no menu de instalação. No menu de instalação personalizada, escolha `partition`. No menu de partição, você deve excluir todas as partições existentes usando kbd:[d]. Após excluir todas as partições existentes, crie uma partição usando kbd:[c] e aceite o valor padrão para o tamanho da partição. Quando questionado sobre o tipo da partição, certifique-se de que o valor esteja definido como `165`. Agora, escreva essa tabela de partição no disco pressionando kbd:[w] (esta é uma opção oculta nesta tela). Se você estiver usando um cartão compact flash compatível com ATA, escolha o Gerenciador de Inicialização do FreeBSD. Agora pressione kbd:[q] para sair do menu de partição. O menu do gerenciador de inicialização será exibido novamente - repita a escolha que fez anteriormente.
. Criando Sistemas de Arquivos em seu Dispositivo de Memória Flash
-+
-Saia do menu de instalação personalizada e, no menu de instalação principal, escolha a opção `fixit`. Depois de entrar no ambiente do fixit, digite o seguinte comando:
+
-[source,shell]
+Saia do menu de instalação personalizada e, no menu principal de instalação, escolha a opção `fixit`. Depois de entrar no ambiente fixit, insira o seguinte comando:
++
+[source, shell]
....
# disklabel -e /dev/ad0c
....
-+
++
Neste ponto, você terá entrado no editor vi sob os auspícios do comando disklabel. Em seguida, você precisa adicionar uma linha `a:` no final do arquivo. Esta linha `a:` deve ser semelhante a linha abaixo:
+
[.programlisting]
....
a: 123456 0 4.2BSD 0 0
....
-+
-Onde _123456_ é um número o qual é exatamente o mesmo que o número existente na entrada `c:` para o tamanho. Basicamente, você está duplicando a linha `c:` existente como uma linha `a:`, certifique-se de que o fstype seja `4.2BSD`. Salve o arquivo e saia.
+
-[source,shell]
+Onde _123456_ é um número exatamente igual ao número na entrada `c:` existente para o tamanho. Basicamente, você está duplicando a linha `c:` existente como uma linha `a:`, certificando-se de que o fstype seja `4.2BSD`. Salve o arquivo e saia.
++
+[source, shell]
....
# disklabel -B -r /dev/ad0c
# newfs /dev/ad0a
....
. Colocando seu Sistema de Arquivos na Mídia Flash
-+
++
Monte a mídia flash recém-preparada:
+
-[source,shell]
+[source, shell]
....
# mount /dev/ad0a /flash
....
-+
++
Coloque esta máquina na rede para que possamos transferir nosso arquivo tar e extrai-lo em nosso sistema de arquivos de mídia flash. Um exemplo de como fazer isso é:
+
-[source,shell]
+[source, shell]
....
# ifconfig xl0 192.168.0.10 netmask 255.255.255.0
# route add default 192.168.0.1
....
-+
++
Agora que a máquina está na rede, transfira seu arquivo tar. Você pode se deparar com um pequeno dilema neste ponto - se a sua memória flash tiver por exemplo 128 megabytes, e seu arquivo tar for maior que 64 megabytes, você não poderá ter o seu arquivo tar na mídia flash ao mesmo tempo em que realiza a descompressão - você ficará sem espaço. Uma solução para esse problema, se você estiver usando FTP, é descompactar o arquivo enquanto ele é transferido por FTP. Se você realizar sua transferência desta maneira, você nunca terá o arquivo tar e o conteúdo do tar em seu disco ao mesmo tempo:
+
-[source,shell]
+[source, shell]
....
ftp> get tarfile.tar "| tar xvf -"
....
-+
++
Se o seu arquivo tar estiver gzipado, você pode fazer isso também:
+
-[source,shell]
+[source, shell]
....
ftp> get tarfile.tar "| zcat | tar xvf -"
....
-+
++
Depois que o conteúdo do seu sistema de arquivos compactado pelo tar estiver no sistema de arquivos da sua memória flash, você poderá desmontar a memória flash e reinicializar:
+
-[source,shell]
+[source, shell]
....
# cd /
# umount /flash
# exit
....
-+
++
Assumindo que você configurou seu sistema de arquivos corretamente quando ele foi construído no disco rígido normal (com seus sistemas de arquivos montado como read-only, e com as opções necessárias compiladas no kernel) você agora deve inicializar com sucesso seu sistema embarcado FreeBSD.
+====
[[strategies]]
-== Estratégias do Sistema para Ambientes Pequenos e Somente Leitura
+== Estratégias do Sistema para Ambientes Pequenos e Read-Only
-Em <<ro-fs>>, foi apontado que o sistema de arquivos [.filename]#/var# construído pelo [.filename]#/etc/rc.d/var# e a presença de um sistema de arquivos raiz read-only causa problemas com muitos pacotes de software comuns usados ​​com o FreeBSD. Neste artigo, serão fornecidas sugestões para a execução bem-sucedida do cron, do syslog, instalações de ports e do servidor Web Apache.
+Em <<ro-fs>>, foi apontado que o sistema de arquivos [.filename]#/var# construído pelo [.filename]#/etc/rc.d/var# e a presença de um sistema de arquivos raiz read-only causa problemas com muitos pacotes de software comuns usados com o FreeBSD. Neste artigo, serão fornecidas sugestões para a execução bem-sucedida do cron, do syslog, instalações de ports e do servidor Web Apache.
=== Cron
-Na inicialização, o [.filename]#/var# é preenchido pelo [.filename]#/etc/rc.d/var# usando a lista disponível em [.filename]#/etc/mtree/BSD.var.dist#, então o [.filename]#cron#, o [.filename]#cron/tabs#, [.filename]#at#, e alguns outros diretórios padrões são criados.
+Ao inicializar, o [.filename]#/var# é preenchido por [.filename]#/etc/rc.d/var# usando a lista de [.filename]#/etc/mtree/BSD.var.dist#, então os diretórios [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at# e alguns outros diretórios padrões são criados.
No entanto, isso não resolve o problema de manter as crontabs entre nas reinicializações. Quando o sistema for reinicializado, o sistema de arquivos [.filename]#/var# que está na memória desaparecerá e todas as crontabs que você tenha nele também desaparecerão. Portanto, uma solução seria criar crontabs para os usuários que precisam delas, montar seu sistema de arquivos [.filename]#/# como read-write e copiar estas crontabs para algum lugar seguro, como [.filename]#/etc/tabs#, em seguida, adicione uma linha ao final do [.filename]#/etc/rc.initdiskless# que copie estes crontabs para [.filename]#/var/cron/tabs# depois que o diretório for criado durante inicialização do sistema. Você também pode precisar adicionar uma linha que altere modos e permissões nos diretórios criados e nos arquivos copiados com [.filename]#/etc/rc.initdiskless#.
@@ -194,7 +212,7 @@ No entanto, isso não resolve o problema de manter as crontabs entre nas reinici
O [.filename]#syslog.conf# especifica os locais de certos arquivos de log que existem em [.filename]#/var/log#. Esses arquivos não são criados pelo [.filename]#/etc/rc.d/var# na inicialização do sistema. Portanto, em algum lugar do [.filename]#/etc/rc.d/var#, logo após a seção que cria os diretórios em [.filename]#/var#, você precisará adicionar algo como isto:
-[source,shell]
+[source, shell]
....
# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages
# chmod 0644 /var/log/*
@@ -204,23 +222,23 @@ O [.filename]#syslog.conf# especifica os locais de certos arquivos de log que ex
Antes de discutir as alterações necessárias para usar com êxito a árvore de ports, é necessário um lembrete sobre a natureza read-only dos seus sistemas de arquivos na mídia flash. Como eles são read-only, você precisará montá-los temporariamente para read-write usando a sintaxe de montagem mostrada em <<ro-fs>>. Você sempre deve remontar esses sistemas de arquivos no modo read-only quando tiver terminado qualquer manutenção - gravações desnecessárias na mídia flash podem reduzir consideravelmente sua vida útil.
-Para tornar possível entrar em um diretório do ports e executar com sucesso o comando make `install`, devemos criar um diretório de pacotes em um sistema de arquivos que não esteja localizado na memória o qual manterá o controle dos nossos pacotes entre as reinicializações . Como é necessário montar seus sistemas de arquivos como read-write para a instalação de um pacote, é sensato supor que uma área na mídia flash também possa ser usada para que as informações do pacote sejam gravadas.
+Para tornar possível entrar em um diretório do ports e executar com sucesso o comando `make install`, devemos criar um diretório de pacotes em um sistema de arquivos que não seja de memória e que acompanhe nossos pacotes entre as reinicializações. Como é necessário montar seus sistemas de arquivos como leitura-gravação para a instalação de um pacote de qualquer maneira, é sensato supor que uma área na mídia flash também possa ser usada para gravar informações do pacote.
Primeiro, crie o diretório do banco de dados de pacotes. Ele fica normalmente em [.filename]#/var/db/pkg#, mas não podemos colocá-lo lá, pois ele irá desaparecer toda vez que o sistema for inicializado.
-[source,shell]
+[source, shell]
....
# mkdir /etc/pkg
....
-Agora, adicione uma linha ao arquivo [.filename]#/etc/rc.d/var# que vincule o [.filename]#/etc/pkg# ao [.filename]#/var/db/pkg#. Um exemplo:
+Agora, adicione uma linha em [.filename]#/etc/rc.d/var# que vincule o diretório [.filename]#/etc/pkg# a [.filename]#/var/db/pkg#. Um exemplo:
-[source,shell]
+[source, shell]
....
# ln -s /etc/pkg /var/db/pkg
....
-Agora, sempre que montar seus sistemas de arquivos como read-write e instalar um pacote, o make `install` funcionará e as informações do pacote serão gravadas com êxito em [.filename]#/etc/pkg# (porque o sistema de arquivos será, naquele momento, montado como read-write) que estará sempre disponível para o sistema operacional como [.filename]#/var/db/pkg#.
+Agora, sempre que você montar seus sistemas de arquivos como leitura-gravação e instalar um pacote, o `make install` funcionará, e as informações do pacote serão gravadas com sucesso em [.filename]#/etc/pkg# (porque o sistema de arquivos estará, naquele momento, montado como leitura-gravação), que sempre estará disponível para o sistema operacional como [.filename]#/var/db/pkg#.
=== Servidor Web Apache
@@ -229,21 +247,21 @@ Agora, sempre que montar seus sistemas de arquivos como read-write e instalar um
As etapas nesta seção são necessárias apenas se o Apache estiver configurado para gravar suas informações de pid ou log fora do [.filename]#/var#. Por padrão, o Apache mantém seu arquivo pid em [.filename]#/var/run/httpd.pid# e seus arquivos de log em [.filename]#/var/log#.
====
-Agora é assumido que o Apache mantém seus arquivos de log em um diretório [.filename]#apache_log_dir# fora do [.filename]#/var#. Quando esse diretório reside em um sistema de arquivos read-only, o Apache não poderá salvar nenhum arquivo de log e pode ter problemas para funcionar. Se assim for, é necessário adicionar um novo diretório à lista de diretórios em [.filename]#/etc/rc.d/var# para criar no [.filename]#/var# e vincular [.filename]#apache_log_dir# ao [.filename]#/var/log/apache#. Também é necessário definir permissões e propriedade neste novo diretório.
+Agora, supõe-se que o Apache mantém seus arquivos de log em um diretório [.filename]#apache_log_dir# fora do [.filename]#/var#. Quando esse diretório está em um sistema de arquivos somente leitura, o Apache não poderá salvar nenhum arquivo de log e pode ter problemas para funcionar. Se for o caso, é necessário adicionar um novo diretório à lista de diretórios em [.filename]#/etc/rc.d/var# para criar em [.filename]#/var# e vincular o [.filename]#apache_log_dir# ao [.filename]#/var/log/apache#. Também é necessário definir as permissões e o proprietário deste novo diretório.
Primeiro, adicione o diretório `log/apache` à lista de diretórios a serem criados em [.filename]#/etc/rc.d/var#.
Segundo, adicione estes comandos ao [.filename]#/etc/rc.d/var# após a seção de criação do diretório:
-[source,shell]
+[source, shell]
....
# chmod 0774 /var/log/apache
# chown nobody:nobody /var/log/apache
....
-Por fim, remova o diretório [.filename]#apache_log_dir# existente e substitua-o por um link:
+Por fim, remova o diretório existente [.filename]#apache_log_dir# e substitua-o por um link:
-[source,shell]
+[source, shell]
....
# rm -rf apache_log_dir
# ln -s /var/log/apache apache_log_dir
diff --git a/documentation/content/pt-br/articles/solid-state/_index.po b/documentation/content/pt-br/articles/solid-state/_index.po
new file mode 100644
index 0000000000..43ff1a682c
--- /dev/null
+++ b/documentation/content/pt-br/articles/solid-state/_index.po
@@ -0,0 +1,907 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Danilo G. Baio <dbaio@FreeBSD.org>, 2021.
+# Edson Brandi <ebrandi@freebsd.org>, 2023.
+# "Danilo G. Baio" <dbaio@FreeBSD.org>, 2023.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2022-02-01 09:21-0300\n"
+"PO-Revision-Date: 2023-04-29 13:34+0000\n"
+"Last-Translator: Edson Brandi <ebrandi@freebsd.org>\n"
+"Language-Team: Portuguese (Brazil) <https://translate-dev.freebsd.org/"
+"projects/documentation/articlessolid-state_index/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
+
+#. type: YAML Front Matter: description
+#: documentation/content/en/articles/solid-state/_index.adoc:1
+#, no-wrap
+msgid "The use of solid state disk devices in FreeBSD"
+msgstr "O uso de dispositivos de disco de estado sólido no FreeBSD"
+
+#. type: Title =
+#: documentation/content/en/articles/solid-state/_index.adoc:1
+#: documentation/content/en/articles/solid-state/_index.adoc:12
+#, no-wrap
+msgid "FreeBSD and Solid State Devices"
+msgstr "FreeBSD e Dispositivos de Estado Sólido"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:45
+msgid "Abstract"
+msgstr "Resumo"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:47
+msgid ""
+"This article covers the use of solid state disk devices in FreeBSD to create "
+"embedded systems."
+msgstr ""
+"Este artigo aborda o uso de dispositivos de disco de estado sólido no "
+"FreeBSD para criar sistemas embarcados."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:50
+msgid ""
+"Embedded systems have the advantage of increased stability due to the lack "
+"of integral moving parts (hard drives). Account must be taken, however, for "
+"the generally low disk space available in the system and the durability of "
+"the storage medium."
+msgstr ""
+"Os sistemas embarcados têm a vantagem de maior estabilidade devido à falta "
+"de partes móveis integradas (discos rígidos). No entanto, é preciso levar em "
+"conta o espaço disponível no sistema que geralmente é baixo e a durabilidade "
+"do meio de armazenamento."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:53
+msgid ""
+"Specific topics to be covered include the types and attributes of solid "
+"state media suitable for disk use in FreeBSD, kernel options that are of "
+"interest in such an environment, the [.filename]#rc.initdiskless# mechanisms "
+"that automate the initialization of such systems and the need for read-only "
+"filesystems, and building filesystems from scratch. The article will "
+"conclude with some general strategies for small and read-only FreeBSD "
+"environments."
+msgstr ""
+"Tópicos específicos a serem abordados incluem os tipos e atributos das mídia "
+"de estado sólido adequadas para uso como disco no FreeBSD, opções de kernel "
+"que são de interesse em tal ambiente, os mecanismos [.filename]#rc."
+"initdiskless# que automatizam a inicialização de tais sistemas e a "
+"necessidade de sistemas de arquivos read-only e a construção de sistemas de "
+"arquivos a partir do zero. O artigo será concluído com algumas estratégias "
+"gerais para ambientes FreeBSD pequenos e read-only ."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:55
+msgid "'''"
+msgstr "'''"
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:59
+#, no-wrap
+msgid "Solid State Disk Devices"
+msgstr "Dispositivos de Disco de Estado Sólido"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:69
+msgid ""
+"The scope of this article will be limited to solid state disk devices made "
+"from flash memory. Flash memory is a solid state memory (no moving parts) "
+"that is non-volatile (the memory maintains data even after all power sources "
+"have been disconnected). Flash memory can withstand tremendous physical "
+"shock and is reasonably fast (the flash memory solutions covered in this "
+"article are slightly slower than a EIDE hard disk for write operations, and "
+"much faster for read operations). One very important aspect of flash "
+"memory, the ramifications of which will be discussed later in this article, "
+"is that each sector has a limited rewrite capacity. You can only write, "
+"erase, and write again to a sector of flash memory a certain number of times "
+"before the sector becomes permanently unusable. Although many flash memory "
+"products automatically map bad blocks, and although some even distribute "
+"write operations evenly throughout the unit, the fact remains that there "
+"exists a limit to the amount of writing that can be done to the device. "
+"Competitive units have between 1,000,000 and 10,000,000 writes per sector in "
+"their specification. This figure varies due to the temperature of the "
+"environment."
+msgstr ""
+"O escopo deste artigo será limitado a dispositivos de disco de estado sólido "
+"feitos de memória flash. A memória flash é uma memória de estado sólido (sem "
+"partes móveis) que é não volátil (a memória mantém os dados mesmo depois de "
+"todas as fontes de energia terem sido desconectadas). A memória flash pode "
+"suportar um enorme choque físico e é razoavelmente rápida (as soluções de "
+"memória flash abordadas neste artigo são um pouco mais lentas que um disco "
+"rígido EIDE para operações de gravação e muito mais rápidas para operações "
+"de leitura). Um aspecto muito importante da memória flash, cujas "
+"ramificações serão discutidas mais adiante neste artigo, é que cada setor "
+"tem uma capacidade limitada de reescrita. Você só pode gravar, apagar e "
+"gravar novamente em um setor de memória flash um certo número de vezes antes "
+"que o setor fique permanentemente inutilizável. Embora muitos produtos de "
+"memória flash mapeiam automaticamente os blocos defeituosos, e embora alguns "
+"até distribuam operações de gravação uniformemente por toda a unidade, a "
+"verdade é que existe um limite para a quantidade de escrita que pode ser "
+"feita no dispositivo. Unidades competitivas possuem entre 1.000.000 e "
+"10.000.000 gravações por setor em suas especificações. Este valor varia com "
+"à temperatura do ambiente."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:74
+msgid ""
+"Specifically, we will be discussing ATA compatible compact-flash units, "
+"which are quite popular as storage media for digital cameras. Of particular "
+"interest is the fact that they pin out directly to the IDE bus and are "
+"compatible with the ATA command set. Therefore, with a very simple and low-"
+"cost adaptor, these devices can be attached directly to an IDE bus in a "
+"computer. Once implemented in this manner, operating systems such as "
+"FreeBSD see the device as a normal hard disk (albeit small)."
+msgstr ""
+"Especificamente, estaremos discutindo unidades compact-flash compatíveis com "
+"ATA, as quais são bastante populares como mídia de armazenamento para "
+"câmeras digitais. De particular interesse é o fato de que eles são fixados "
+"diretamente no barramento IDE e são compatíveis com o conjunto de comandos "
+"ATA. Portanto, com um adaptador muito simples e de baixo custo, esses "
+"dispositivos podem ser conectados diretamente a um barramento IDE em um "
+"computador. Uma vez implementado desta maneira, sistemas operacionais como o "
+"FreeBSD vêem o dispositivo como um disco rígido normal (embora pequeno)."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:76
+msgid ""
+"Other solid state disk solutions do exist, but their expense, obscurity, and "
+"relative unease of use places them beyond the scope of this article."
+msgstr ""
+"Outras soluções de disco de estado sólido existem, mas seu custo, "
+"obscuridade e relativa dificuldade de uso os colocam além do escopo deste "
+"artigo."
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:78
+#, no-wrap
+msgid "Kernel Options"
+msgstr "Opções do Kernel"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:81
+msgid ""
+"A few kernel options are of specific interest to those creating an embedded "
+"FreeBSD system."
+msgstr ""
+"Algumas opções do kernel são de interesse específico para aqueles que criam "
+"sistemas FreeBSD embarcados."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:86
+msgid ""
+"All embedded FreeBSD systems that use flash memory as system disk will be "
+"interested in memory disks and memory filesystems. As a result of the "
+"limited number of writes that can be done to flash memory, the disk and the "
+"filesystems on the disk will most likely be mounted read-only. In this "
+"environment, filesystems such as [.filename]#/tmp# and [.filename]#/var# are "
+"mounted as memory filesystems to allow the system to create logs and update "
+"counters and temporary files. Memory filesystems are a critical component "
+"to a successful solid state FreeBSD implementation."
+msgstr ""
+"Todos os sistemas FreeBSD embarcados que utilizam memória flash como disco "
+"do sistema terão interesse em discos em memória e sistemas de arquivos em "
+"memória. Devido ao número limitado de gravações que podem ser feitas na "
+"memória flash, o disco e os sistemas de arquivos no disco provavelmente "
+"serão montados como read-only. Nesse ambiente, sistemas de arquivos como [."
+"filename]#/tmp# e [.filename]#/var# são montados como sistemas de arquivos "
+"em memória para permitir que o sistema crie logs e atualize contadores e "
+"arquivos temporários. Sistemas de arquivos em memória são um componente "
+"crítico para uma implementação bem-sucedida do FreeBSD usandp discos de "
+"estado sólido."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:88
+msgid ""
+"You should make sure the following lines exist in your kernel configuration "
+"file:"
+msgstr ""
+"Você deve ter certeza de que as seguintes linhas existem no seu arquivo de "
+"configuração do kernel:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:94
+#, no-wrap
+msgid ""
+"options MFS # Memory Filesystem\n"
+"options MD_ROOT # md device usable as a potential root device\n"
+"pseudo-device md # memory disk\n"
+msgstr ""
+"options MFS # Memory Filesystem\n"
+"options MD_ROOT # md device usable as a potential root "
+"device\n"
+"pseudo-device md # memory disk\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:97
+#, no-wrap
+msgid "The `rc` Subsystem and Read-Only Filesystems"
+msgstr "O Subsistema `rc` e Sistemas de ArquivosRead-Only"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:100
+msgid ""
+"The post-boot initialization of an embedded FreeBSD system is controlled by "
+"[.filename]#/etc/rc.initdiskless#."
+msgstr ""
+"A inicialização pós-boot de um sistema FreeBSD embarcado é controlada por [."
+"filename]#/etc/rc.initdiskless#."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:104
+msgid ""
+"[.filename]#/etc/rc.d/var# mounts [.filename]#/var# as a memory filesystem, "
+"makes a configurable list of directories in [.filename]#/var# with the man:"
+"mkdir[1] command, and changes modes on some of those directories. In the "
+"execution of [.filename]#/etc/rc.d/var#, one other [.filename]#rc.conf# "
+"variable comes into play - `varsize`. A [.filename]#/var# partition is "
+"created by [.filename]#/etc/rc.d/var# based on the value of this variable in "
+"[.filename]#rc.conf#:"
+msgstr ""
+"O [.filename]#/etc/rc.d/var# monta o [.filename]#/var# como um sistema de "
+"arquivos em memória, cria uma lista configurável de diretórios em [."
+"filename]#/var# com o comando man:mkdir[1] e altera modos em alguns desses "
+"diretórios. Na execução do [.filename]#/etc/rc.d/var#, outra variável [."
+"filename]#rc.conf# entra em ação - `varsize`. Uma partição [.filename]#/var# "
+"é criada por [.filename]#/etc/rc.d/var# com base no valor dessa variável em ["
+".filename]#rc.conf#:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:108
+#, no-wrap
+msgid "varsize=8192\n"
+msgstr "varsize=8192\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:111
+msgid "Remember that this value is in sectors by default."
+msgstr "Lembre-se de que esse valor é informado em setores, por padrão."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:118
+msgid ""
+"The fact that [.filename]#/var# is a read-write filesystem is an important "
+"distinction, as the [.filename]#/# partition (and any other partitions you "
+"may have on your flash media) should be mounted read-only. Remember that in "
+"<<intro>> we detailed the limitations of flash memory - specifically the "
+"limited write capability. The importance of not mounting filesystems on "
+"flash media read-write, and the importance of not using a swap file, cannot "
+"be overstated. A swap file on a busy system can burn through a piece of "
+"flash media in less than one year. Heavy logging or temporary file creation "
+"and destruction can do the same. Therefore, in addition to removing the "
+"`swap` entry from your [.filename]#/etc/fstab#, you should also change the "
+"Options field for each filesystem to `ro` as follows:"
+msgstr ""
+"O fato do [.filename]#/var# ser um sistema de arquivos read-write é uma "
+"distinção importante, pois a partição [.filename]#/# (e quaisquer outras "
+"partições que você possa ter em sua mídia flash) deve ser montada como read-"
+"only. Lembre-se que em <<intro>> detalhamos as limitações da memória flash - "
+"especificamente a capacidade de gravação limitada. A importância de não "
+"montar sistemas de arquivos em mídia flash em modo read-write, e a "
+"importância de não usar um arquivo de swap, não pode ser exagerado. Um "
+"arquivo de swap em um sistema ocupado pode inutilizar uma mídia flash em "
+"menos de um ano. Criação de log pesado ou criação e destruição de arquivos "
+"temporários podem fazer o mesmo. Portanto, além de remover a entrada `swap` "
+"do seu [.filename]#/etc/fstab#, você também deve alterar o campo Options "
+"para cada sistema de arquivos para `ro` como segue:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:123
+#, no-wrap
+msgid ""
+"# Device Mountpoint FStype Options Dump Pass#\n"
+"/dev/ad0s1a / ufs ro 1 1\n"
+msgstr ""
+"# Device Mountpoint FStype Options Dump Pass#"
+"\n"
+"/dev/ad0s1a / ufs ro 1 1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:128
+msgid ""
+"A few applications in the average system will immediately begin to fail as a "
+"result of this change. For instance, cron will not run properly as a result "
+"of missing cron tabs in the [.filename]#/var# created by [.filename]#/etc/rc."
+"d/var#, and syslog and dhcp will encounter problems as well as a result of "
+"the read-only filesystem and missing items in the [.filename]#/var# that [."
+"filename]#/etc/rc.d/var# has created. These are only temporary problems "
+"though, and are addressed, along with solutions to the execution of other "
+"common software packages in <<strategies>>."
+msgstr ""
+"Alguns aplicativos no sistema começarão a falhar imediatamente como "
+"resultado desta alteração. Por exemplo, o cron não será executado "
+"corretamente como resultado da falta de crontabs no [.filename]#/var# criado "
+"pelo [.filename]#/etc/rc.d/var#, o syslog e o dhcp também irão encontrar "
+"problemas como resultado do sistema de arquivos estar em modo read-only e "
+"dos itens ausentes no [.filename]#/var# que o [.filename]#/etc/rc.d/var# "
+"criou. Estes são apenas problemas temporários, embora sejam abordados, "
+"juntamente com soluções para a execução de outros pacotes de software comuns "
+"em <<strategies>>."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:130
+msgid ""
+"An important thing to remember is that a filesystem that was mounted read-"
+"only with [.filename]#/etc/fstab# can be made read-write at any time by "
+"issuing the command:"
+msgstr ""
+"Uma coisa importante para lembrar é que um sistema de arquivos que foi "
+"montado como read-only com o [.filename]#/etc/fstab# pode ser colocado em "
+"modo read-write a qualquer momento, executando o comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:134
+#, no-wrap
+msgid "# /sbin/mount -uw partition\n"
+msgstr "# /sbin/mount -uw partition\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:137
+msgid "and can be toggled back to read-only with the command:"
+msgstr "e pode ser alternado de volta para read-only com o comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:141
+#, no-wrap
+msgid "# /sbin/mount -ur partition\n"
+msgstr "# /sbin/mount -ur partition\n"
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:143
+#, no-wrap
+msgid "Building a File System from Scratch"
+msgstr "Construindo um sistema de arquivos a partir do zero"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:146
+msgid ""
+"Since ATA compatible compact-flash cards are seen by FreeBSD as normal IDE "
+"hard drives, you could theoretically install FreeBSD from the network using "
+"the kern and mfsroot floppies or from a CD."
+msgstr ""
+"Como os cartões compact-flash compatíveis com ATA são vistos pelo FreeBSD "
+"como discos rígidos IDE normais, você poderia teoricamente instalar o "
+"FreeBSD a partir da rede usando os disquetes kern e mfsroot ou a partir de "
+"um CD."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:149
+msgid ""
+"However, even a small installation of FreeBSD using normal installation "
+"procedures can produce a system in size of greater than 200 megabytes. Most "
+"people will be using smaller flash memory devices (128 megabytes is "
+"considered fairly large - 32 or even 16 megabytes is common), so an "
+"installation using normal mechanisms is not possible-there is simply not "
+"enough disk space for even the smallest of conventional installations."
+msgstr ""
+"No entanto, mesmo uma pequena instalação do FreeBSD usando procedimentos "
+"normais de instalação pode resultar em um sistema de tamanho superior a 200 "
+"megabytes. A maioria das pessoas estará usando dispositivos de memória flash "
+"menores (128 megabytes é considerado bastante grande - 32 ou até 16 "
+"megabytes são comuns), então uma instalação usando mecanismos normais não é "
+"possível - simplesmente não há espaço em disco suficiente nem mesmo para a "
+"menor das instalações convencionais."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:155
+msgid ""
+"The easiest way to overcome this space limitation is to install FreeBSD "
+"using conventional means to a normal hard disk. After the installation is "
+"complete, pare down the operating system to a size that will fit onto your "
+"flash media, then tar the entire filesystem. The following steps will guide "
+"you through the process of preparing a piece of flash memory for your tarred "
+"filesystem. Remember, because a normal installation is not being performed, "
+"operations such as partitioning, labeling, file-system creation, etc. need "
+"to be performed by hand. In addition to the kern and mfsroot floppy disks, "
+"you will also need to use the fixit floppy."
+msgstr ""
+"A maneira mais fácil de superar essa limitação de espaço é instalar o "
+"FreeBSD usando meios convencionais em um disco rígido normal. Após a "
+"conclusão da instalação, reduza o sistema operacional para um tamanho que "
+"caiba na mídia flash e compacte o sistema de arquivos inteiro com o tar. Os "
+"passos seguintes irão guiá-lo através do processo de preparação de uma parte "
+"da memória flash para o seu sistema de arquivos compactado com o tar. Lembre-"
+"se de que não estamos executando uma instalação normal, logo as operações "
+"como particionamento, criação dos labels, criação do sistema de arquivos, "
+"etc. precisam ser executadas manualmente. Além dos disquetes do kern e "
+"mfsroot, você também precisará usar o disquete do fixit."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:159
+msgid "Partitioning Your Flash Media Device"
+msgstr "Particionando seu Dispositivo de Mídia Flash"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:169
+msgid ""
+"After booting with the kern and mfsroot floppies, choose `custom` from the "
+"installation menu. In the custom installation menu, choose `partition`. In "
+"the partition menu, you should delete all existing partitions using kbd:"
+"[d]. After deleting all existing partitions, create a partition using kbd:"
+"[c] and accept the default value for the size of the partition. When asked "
+"for the type of the partition, make sure the value is set to `165`. Now "
+"write this partition table to the disk by pressing kbd:[w] (this is a hidden "
+"option on this screen). If you are using an ATA compatible compact flash "
+"card, you should choose the FreeBSD Boot Manager. Now press kbd:[q] to quit "
+"the partition menu. You will be shown the boot manager menu once more - "
+"repeat the choice you made earlier."
+msgstr ""
+"Após inicializar com os disquetes kern e mfsroot, escolha `custom` no menu "
+"de instalação. No menu de instalação personalizada, escolha `partition`. No "
+"menu de partição, você deve excluir todas as partições existentes usando "
+"kbd:[d]. Após excluir todas as partições existentes, crie uma partição "
+"usando kbd:[c] e aceite o valor padrão para o tamanho da partição. Quando "
+"questionado sobre o tipo da partição, certifique-se de que o valor esteja "
+"definido como `165`. Agora, escreva essa tabela de partição no disco "
+"pressionando kbd:[w] (esta é uma opção oculta nesta tela). Se você estiver "
+"usando um cartão compact flash compatível com ATA, escolha o Gerenciador de "
+"Inicialização do FreeBSD. Agora pressione kbd:[q] para sair do menu de "
+"partição. O menu do gerenciador de inicialização será exibido novamente - "
+"repita a escolha que fez anteriormente."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:170
+msgid "Creating Filesystems on Your Flash Memory Device"
+msgstr "Criando Sistemas de Arquivos em seu Dispositivo de Memória Flash"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:173
+msgid ""
+"Exit the custom installation menu, and from the main installation menu "
+"choose the `fixit` option. After entering the fixit environment, enter the "
+"following command:"
+msgstr ""
+"Saia do menu de instalação personalizada e, no menu principal de instalação, "
+"escolha a opção `fixit`. Depois de entrar no ambiente fixit, insira o "
+"seguinte comando:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:177
+#, no-wrap
+msgid "# disklabel -e /dev/ad0c\n"
+msgstr "# disklabel -e /dev/ad0c\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:181
+msgid ""
+"At this point you will have entered the vi editor under the auspices of the "
+"disklabel command. Next, you need to add an `a:` line at the end of the "
+"file. This `a:` line should look like:"
+msgstr ""
+"Neste ponto, você terá entrado no editor vi sob os auspícios do comando "
+"disklabel. Em seguida, você precisa adicionar uma linha `a:` no final do "
+"arquivo. Esta linha `a:` deve ser semelhante a linha abaixo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:185
+#, no-wrap
+msgid "a: 123456 0 4.2BSD 0 0\n"
+msgstr "a: 123456 0 4.2BSD 0 0\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:190
+msgid ""
+"Where _123456_ is a number that is exactly the same as the number in the "
+"existing `c:` entry for size. Basically you are duplicating the existing `c:"
+"` line as an `a:` line, making sure that fstype is `4.2BSD`. Save the file "
+"and exit."
+msgstr ""
+"Onde _123456_ é um número exatamente igual ao número na entrada `c:` "
+"existente para o tamanho. Basicamente, você está duplicando a linha `c:` "
+"existente como uma linha `a:`, certificando-se de que o fstype seja `4.2BSD`"
+". Salve o arquivo e saia."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:195
+#, no-wrap
+msgid ""
+"# disklabel -B -r /dev/ad0c\n"
+"# newfs /dev/ad0a\n"
+msgstr ""
+"# disklabel -B -r /dev/ad0c\n"
+"# newfs /dev/ad0a\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:198
+msgid "Placing Your Filesystem on the Flash Media"
+msgstr "Colocando seu Sistema de Arquivos na Mídia Flash"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:200
+msgid "Mount the newly prepared flash media:"
+msgstr "Monte a mídia flash recém-preparada:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:204
+#, no-wrap
+msgid "# mount /dev/ad0a /flash\n"
+msgstr "# mount /dev/ad0a /flash\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:208
+msgid ""
+"Bring this machine up on the network so we may transfer our tar file and "
+"explode it onto our flash media filesystem. One example of how to do this "
+"is:"
+msgstr ""
+"Coloque esta máquina na rede para que possamos transferir nosso arquivo tar "
+"e extrai-lo em nosso sistema de arquivos de mídia flash. Um exemplo de como "
+"fazer isso é:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:213
+#, no-wrap
+msgid ""
+"# ifconfig xl0 192.168.0.10 netmask 255.255.255.0\n"
+"# route add default 192.168.0.1\n"
+msgstr ""
+"# ifconfig xl0 192.168.0.10 netmask 255.255.255.0\n"
+"# route add default 192.168.0.1\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:219
+msgid ""
+"Now that the machine is on the network, transfer your tar file. You may be "
+"faced with a bit of a dilemma at this point - if your flash memory part is "
+"128 megabytes, for instance, and your tar file is larger than 64 megabytes, "
+"you cannot have your tar file on the flash media at the same time as you "
+"explode it - you will run out of space. One solution to this problem, if "
+"you are using FTP, is to untar the file while it is transferred over FTP. "
+"If you perform your transfer in this manner, you will never have the tar "
+"file and the tar contents on your disk at the same time:"
+msgstr ""
+"Agora que a máquina está na rede, transfira seu arquivo tar. Você pode se "
+"deparar com um pequeno dilema neste ponto - se a sua memória flash tiver por "
+"exemplo 128 megabytes, e seu arquivo tar for maior que 64 megabytes, você "
+"não poderá ter o seu arquivo tar na mídia flash ao mesmo tempo em que "
+"realiza a descompressão - você ficará sem espaço. Uma solução para esse "
+"problema, se você estiver usando FTP, é descompactar o arquivo enquanto ele "
+"é transferido por FTP. Se você realizar sua transferência desta maneira, "
+"você nunca terá o arquivo tar e o conteúdo do tar em seu disco ao mesmo "
+"tempo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:223
+#, no-wrap
+msgid "ftp> get tarfile.tar \"| tar xvf -\"\n"
+msgstr "ftp> get tarfile.tar \"| tar xvf -\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:226
+msgid "If your tarfile is gzipped, you can accomplish this as well:"
+msgstr "Se o seu arquivo tar estiver gzipado, você pode fazer isso também:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:230
+#, no-wrap
+msgid "ftp> get tarfile.tar \"| zcat | tar xvf -\"\n"
+msgstr "ftp> get tarfile.tar \"| zcat | tar xvf -\"\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:233
+msgid ""
+"After the contents of your tarred filesystem are on your flash memory "
+"filesystem, you can unmount the flash memory and reboot:"
+msgstr ""
+"Depois que o conteúdo do seu sistema de arquivos compactado pelo tar estiver "
+"no sistema de arquivos da sua memória flash, você poderá desmontar a memória "
+"flash e reinicializar:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:239
+#, no-wrap
+msgid ""
+"# cd /\n"
+"# umount /flash\n"
+"# exit\n"
+msgstr ""
+"# cd /\n"
+"# umount /flash\n"
+"# exit\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:242
+msgid ""
+"Assuming that you configured your filesystem correctly when it was built on "
+"the normal hard disk (with your filesystems mounted read-only, and with the "
+"necessary options compiled into the kernel) you should now be successfully "
+"booting your FreeBSD embedded system."
+msgstr ""
+"Assumindo que você configurou seu sistema de arquivos corretamente quando "
+"ele foi construído no disco rígido normal (com seus sistemas de arquivos "
+"montado como read-only, e com as opções necessárias compiladas no kernel) "
+"você agora deve inicializar com sucesso seu sistema embarcado FreeBSD."
+
+#. type: Title ==
+#: documentation/content/en/articles/solid-state/_index.adoc:245
+#, no-wrap
+msgid "System Strategies for Small and Read Only Environments"
+msgstr "Estratégias do Sistema para Ambientes Pequenos e Read-Only"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:249
+msgid ""
+"In <<ro-fs>>, it was pointed out that the [.filename]#/var# filesystem "
+"constructed by [.filename]#/etc/rc.d/var# and the presence of a read-only "
+"root filesystem causes problems with many common software packages used with "
+"FreeBSD. In this article, suggestions for successfully running cron, "
+"syslog, ports installations, and the Apache web server will be provided."
+msgstr ""
+"Em <<ro-fs>>, foi apontado que o sistema de arquivos [.filename]#/var# "
+"construído pelo [.filename]#/etc/rc.d/var# e a presença de um sistema de "
+"arquivos raiz read-only causa problemas com muitos pacotes de software "
+"comuns usados com o FreeBSD. Neste artigo, serão fornecidas sugestões para a "
+"execução bem-sucedida do cron, do syslog, instalações de ports e do servidor "
+"Web Apache."
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:250
+#, no-wrap
+msgid "Cron"
+msgstr "Cron"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:253
+msgid ""
+"Upon boot, [.filename]#/var# gets populated by [.filename]#/etc/rc.d/var# "
+"using the list from [.filename]#/etc/mtree/BSD.var.dist#, so the [."
+"filename]#cron#, [.filename]#cron/tabs#, [.filename]#at#, and a few other "
+"standard directories get created."
+msgstr ""
+"Ao inicializar, o [.filename]#/var# é preenchido por [.filename]#/etc/rc.d/"
+"var# usando a lista de [.filename]#/etc/mtree/BSD.var.dist#, então os "
+"diretórios [.filename]#cron#, [.filename]#cron/tabs#, [.filename]#at# e "
+"alguns outros diretórios padrões são criados."
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:258
+msgid ""
+"However, this does not solve the problem of maintaining cron tabs across "
+"reboots. When the system reboots, the [.filename]#/var# filesystem that is "
+"in memory will disappear and any cron tabs you may have had in it will also "
+"disappear. Therefore, one solution would be to create cron tabs for the "
+"users that need them, mount your [.filename]#/# filesystem as read-write and "
+"copy those cron tabs to somewhere safe, like [.filename]#/etc/tabs#, then "
+"add a line to the end of [.filename]#/etc/rc.initdiskless# that copies those "
+"crontabs into [.filename]#/var/cron/tabs# after that directory has been "
+"created during system initialization. You may also need to add a line that "
+"changes modes and permissions on the directories you create and the files "
+"you copy with [.filename]#/etc/rc.initdiskless#."
+msgstr ""
+"No entanto, isso não resolve o problema de manter as crontabs entre nas "
+"reinicializações. Quando o sistema for reinicializado, o sistema de arquivos "
+"[.filename]#/var# que está na memória desaparecerá e todas as crontabs que "
+"você tenha nele também desaparecerão. Portanto, uma solução seria criar "
+"crontabs para os usuários que precisam delas, montar seu sistema de arquivos "
+"[.filename]#/# como read-write e copiar estas crontabs para algum lugar "
+"seguro, como [.filename]#/etc/tabs#, em seguida, adicione uma linha ao final "
+"do [.filename]#/etc/rc.initdiskless# que copie estes crontabs para [."
+"filename]#/var/cron/tabs# depois que o diretório for criado durante "
+"inicialização do sistema. Você também pode precisar adicionar uma linha que "
+"altere modos e permissões nos diretórios criados e nos arquivos copiados com "
+"[.filename]#/etc/rc.initdiskless#."
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:259
+#, no-wrap
+msgid "Syslog"
+msgstr "Syslog"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:264
+msgid ""
+"[.filename]#syslog.conf# specifies the locations of certain log files that "
+"exist in [.filename]#/var/log#. These files are not created by [.filename]#/"
+"etc/rc.d/var# upon system initialization. Therefore, somewhere in [."
+"filename]#/etc/rc.d/var#, after the section that creates the directories in "
+"[.filename]#/var#, you will need to add something like this:"
+msgstr ""
+"O [.filename]#syslog.conf# especifica os locais de certos arquivos de log "
+"que existem em [.filename]#/var/log#. Esses arquivos não são criados pelo [."
+"filename]#/etc/rc.d/var# na inicialização do sistema. Portanto, em algum "
+"lugar do [.filename]#/etc/rc.d/var#, logo após a seção que cria os "
+"diretórios em [.filename]#/var#, você precisará adicionar algo como isto:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:269
+#, no-wrap
+msgid ""
+"# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages\n"
+"# chmod 0644 /var/log/*\n"
+msgstr ""
+"# touch /var/log/security /var/log/maillog /var/log/cron /var/log/messages\n"
+"# chmod 0644 /var/log/*\n"
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:271
+#, no-wrap
+msgid "Ports Installation"
+msgstr "Instalação de Ports"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:276
+msgid ""
+"Before discussing the changes necessary to successfully use the ports tree, "
+"a reminder is necessary regarding the read-only nature of your filesystems "
+"on the flash media. Since they are read-only, you will need to temporarily "
+"mount them read-write using the mount syntax shown in <<ro-fs>>. You should "
+"always remount those filesystems read-only when you are done with any "
+"maintenance - unnecessary writes to the flash media could considerably "
+"shorten its lifespan."
+msgstr ""
+"Antes de discutir as alterações necessárias para usar com êxito a árvore de "
+"ports, é necessário um lembrete sobre a natureza read-only dos seus sistemas "
+"de arquivos na mídia flash. Como eles são read-only, você precisará montá-"
+"los temporariamente para read-write usando a sintaxe de montagem mostrada em "
+"<<ro-fs>>. Você sempre deve remontar esses sistemas de arquivos no modo read-"
+"only quando tiver terminado qualquer manutenção - gravações desnecessárias "
+"na mídia flash podem reduzir consideravelmente sua vida útil."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:279
+msgid ""
+"To make it possible to enter a ports directory and successfully run `make "
+"install`, we must create a packages directory on a non-memory filesystem "
+"that will keep track of our packages across reboots. As it is necessary to "
+"mount your filesystems as read-write for the installation of a package "
+"anyway, it is sensible to assume that an area on the flash media can also be "
+"used for package information to be written to."
+msgstr ""
+"Para tornar possível entrar em um diretório do ports e executar com sucesso "
+"o comando `make install`, devemos criar um diretório de pacotes em um "
+"sistema de arquivos que não seja de memória e que acompanhe nossos pacotes "
+"entre as reinicializações. Como é necessário montar seus sistemas de "
+"arquivos como leitura-gravação para a instalação de um pacote de qualquer "
+"maneira, é sensato supor que uma área na mídia flash também possa ser usada "
+"para gravar informações do pacote."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:282
+msgid ""
+"First, create a package database directory. This is normally in [."
+"filename]#/var/db/pkg#, but we cannot place it there as it will disappear "
+"every time the system is booted."
+msgstr ""
+"Primeiro, crie o diretório do banco de dados de pacotes. Ele fica "
+"normalmente em [.filename]#/var/db/pkg#, mas não podemos colocá-lo lá, pois "
+"ele irá desaparecer toda vez que o sistema for inicializado."
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:286
+#, no-wrap
+msgid "# mkdir /etc/pkg\n"
+msgstr "# mkdir /etc/pkg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:289
+msgid ""
+"Now, add a line to [.filename]#/etc/rc.d/var# that links the [.filename]#/"
+"etc/pkg# directory to [.filename]#/var/db/pkg#. An example:"
+msgstr ""
+"Agora, adicione uma linha em [.filename]#/etc/rc.d/var# que vincule o "
+"diretório [.filename]#/etc/pkg# a [.filename]#/var/db/pkg#. Um exemplo:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:293
+#, no-wrap
+msgid "# ln -s /etc/pkg /var/db/pkg\n"
+msgstr "# ln -s /etc/pkg /var/db/pkg\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:296
+msgid ""
+"Now, any time that you mount your filesystems as read-write and install a "
+"package, the `make install` will work, and package information will be "
+"written successfully to [.filename]#/etc/pkg# (because the filesystem will, "
+"at that time, be mounted read-write) which will always be available to the "
+"operating system as [.filename]#/var/db/pkg#."
+msgstr ""
+"Agora, sempre que você montar seus sistemas de arquivos como leitura-"
+"gravação e instalar um pacote, o `make install` funcionará, e as informações "
+"do pacote serão gravadas com sucesso em [.filename]#/etc/pkg# (porque o "
+"sistema de arquivos estará, naquele momento, montado como leitura-gravação), "
+"que sempre estará disponível para o sistema operacional como [.filename]#/"
+"var/db/pkg#."
+
+#. type: Title ===
+#: documentation/content/en/articles/solid-state/_index.adoc:297
+#, no-wrap
+msgid "Apache Web Server"
+msgstr "Servidor Web Apache"
+
+#. type: delimited block = 4
+#: documentation/content/en/articles/solid-state/_index.adoc:303
+msgid ""
+"The steps in this section are only necessary if Apache is set up to write "
+"its pid or log information outside of [.filename]#/var#. By default, Apache "
+"keeps its pid file in [.filename]#/var/run/httpd.pid# and its log files in [."
+"filename]#/var/log#."
+msgstr ""
+"As etapas nesta seção são necessárias apenas se o Apache estiver configurado "
+"para gravar suas informações de pid ou log fora do [.filename]#/var#. Por "
+"padrão, o Apache mantém seu arquivo pid em [.filename]#/var/run/httpd.pid# e "
+"seus arquivos de log em [.filename]#/var/log#."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:309
+msgid ""
+"It is now assumed that Apache keeps its log files in a directory [."
+"filename]#apache_log_dir# outside of [.filename]#/var#. When this directory "
+"lives on a read-only filesystem, Apache will not be able to save any log "
+"files, and may have problems working. If so, it is necessary to add a new "
+"directory to the list of directories in [.filename]#/etc/rc.d/var# to create "
+"in [.filename]#/var#, and to link [.filename]#apache_log_dir# to [."
+"filename]#/var/log/apache#. It is also necessary to set permissions and "
+"ownership on this new directory."
+msgstr ""
+"Agora, supõe-se que o Apache mantém seus arquivos de log em um diretório [."
+"filename]#apache_log_dir# fora do [.filename]#/var#. Quando esse diretório "
+"está em um sistema de arquivos somente leitura, o Apache não poderá salvar "
+"nenhum arquivo de log e pode ter problemas para funcionar. Se for o caso, é "
+"necessário adicionar um novo diretório à lista de diretórios em [.filename]#/"
+"etc/rc.d/var# para criar em [.filename]#/var# e vincular o [."
+"filename]#apache_log_dir# ao [.filename]#/var/log/apache#. Também é "
+"necessário definir as permissões e o proprietário deste novo diretório."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:311
+msgid ""
+"First, add the directory `log/apache` to the list of directories to be "
+"created in [.filename]#/etc/rc.d/var#."
+msgstr ""
+"Primeiro, adicione o diretório `log/apache` à lista de diretórios a serem "
+"criados em [.filename]#/etc/rc.d/var#."
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:313
+msgid ""
+"Second, add these commands to [.filename]#/etc/rc.d/var# after the directory "
+"creation section:"
+msgstr ""
+"Segundo, adicione estes comandos ao [.filename]#/etc/rc.d/var# após a seção "
+"de criação do diretório:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:318
+#, no-wrap
+msgid ""
+"# chmod 0774 /var/log/apache\n"
+"# chown nobody:nobody /var/log/apache\n"
+msgstr ""
+"# chmod 0774 /var/log/apache\n"
+"# chown nobody:nobody /var/log/apache\n"
+
+#. type: Plain text
+#: documentation/content/en/articles/solid-state/_index.adoc:321
+msgid ""
+"Finally, remove the existing [.filename]#apache_log_dir# directory, and "
+"replace it with a link:"
+msgstr ""
+"Por fim, remova o diretório existente [.filename]#apache_log_dir# e "
+"substitua-o por um link:"
+
+#. type: delimited block . 4
+#: documentation/content/en/articles/solid-state/_index.adoc:326
+#, no-wrap
+msgid ""
+"# rm -rf apache_log_dir\n"
+"# ln -s /var/log/apache apache_log_dir\n"
+msgstr ""
+"# rm -rf apache_log_dir\n"
+"# ln -s /var/log/apache apache_log_dir\n"
+
+#~ msgid ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
+#~ msgstr ""
+#~ "include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/"
+#~ "{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists."
+#~ "adoc[] include::shared/{{% lang %}}/urls.adoc[]"
diff --git a/documentation/content/pt-br/articles/vinum/_index.adoc b/documentation/content/pt-br/articles/vinum/_index.adoc
index 40d20eaacf..cdd219191c 100644
--- a/documentation/content/pt-br/articles/vinum/_index.adoc
+++ b/documentation/content/pt-br/articles/vinum/_index.adoc
@@ -13,26 +13,26 @@ authors:
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-include::shared/pt-br/urls.adoc[]
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/articles/vinum/
+:images-path: articles/vinum/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/articles/vinum/
endif::[]
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/articles/vinum/
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
'''
@@ -50,7 +50,7 @@ Este capítulo fornece uma visão geral dos possíveis problemas com o armazenam
[NOTE]
====
-Começando com o FreeBSD 5, o [.filename]#vinum# foi reescrito para se encaixar na link:{handbook}#geom[Arquitetura GEOM], mantendo as idéias originais, a terminologia e os metadados no disco. Esta reescrita é chamada _gvinum_ (para _GEOM vinum_). Enquanto este capítulo usa o termo [.filename]#vinum#, qualquer invocação de comandos deve ser executada com o `gvinum`. O nome do módulo do kernel mudou do original [.filename]#vinum.ko# para [.filename]#geom_vinum.ko#, e todos os device nodes residem em [.filename]#/dev/gvinum# em vez de [.filename]#/dev/vinum#. A partir do FreeBSD 6, a implementação original do [.filename]#vinum# não está mais disponível no código base.
+Começando com o FreeBSD 5, o [.filename]#vinum# foi reescrito para se encaixar na extref:{handbook}geom[Arquitetura GEOM, geom], mantendo as idéias originais, a terminologia e os metadados no disco. Esta reescrita é chamada _gvinum_ (para _GEOM vinum_). Enquanto este capítulo usa o termo [.filename]#vinum#, qualquer invocação de comandos deve ser executada com o `gvinum`. O nome do módulo do kernel mudou do original [.filename]#vinum.ko# para [.filename]#geom_vinum.ko#, e todos os device nodes residem em [.filename]#/dev/gvinum# em vez de [.filename]#/dev/vinum#. A partir do FreeBSD 6, a implementação original do [.filename]#vinum# não está mais disponível no código base.
====
[[vinum-access-bottlenecks]]
@@ -568,11 +568,11 @@ No prompt solicitando que um sistema de arquivos raiz seja montado, qualquer dis
==== Apenas o bootstrap primário carrega
-Se o [.filename]#/boot/loader# falhar ao carregar, mas o bootstrap primário ainda carregar (visível por um único traço na coluna esquerda da tela logo após o processo de boot ser iniciado), uma tentativa pode ser feita para interromper o bootstrap primário pressionando kbd:[espaço]. Isso fará com que o bootstrap pare no link:{handbook}#boot-boot1[estágio dois]. Uma tentativa pode ser feita aqui para inicializar uma partição alternativa, como a partição que contém o sistema de arquivos raiz anterior que foi movido de `a`.
+Se o [.filename]#/boot/loader# falhar ao carregar, mas o bootstrap primário ainda carregar (visível por um único traço na coluna esquerda da tela logo após o processo de boot ser iniciado), uma tentativa pode ser feita para interromper o bootstrap primário pressionando kbd:[espaço]. Isso fará com que o bootstrap pare no extref:{handbook}boot[estágio dois, boot-boot1]. Uma tentativa pode ser feita aqui para inicializar uma partição alternativa, como a partição que contém o sistema de arquivos raiz anterior que foi movido de `a`.
[[vinum-root-panic]]
==== Nada carrega e o Bootstrap entra em panic
Esta situação acontecerá se o bootstrap tiver sido destruído pela instalação do [.filename]#vinum#. Infelizmente, o [.filename]#vinum# acidentalmente deixa apenas 4 KB no início de sua partição livre antes de começar a escrever suas informações de cabeçalho [.filename]#vinum#. No entanto, o estágio um e dois bootstraps mais o bsdlabel exigem 8 KB. Portanto, se uma partição [.filename]#vinum# tiver sido iniciada no offset 0 dentro de uma slice ou disco que deveria ser inicializável, a configuração do [.filename]#vinum# irá estragar o bootstrap.
-Da mesma forma, se a situação acima foi recuperada, inicializando de uma mídia "Fixit", e o bootstrap foi reinstalado usando `bsdlabel -B` como descrito em link:{handbook}#boot-boot1[Estágio Um e Estágio Dois], o bootstrap irá estragar o cabeçalho [.filename]#vinum# e o [.filename]#vinum# não encontrará mais seu(s) disco(s). Entretando nenhum dado de configuração real do [.filename]#vinum# e nenhum volume [.filename]#vinum# de dados foi descartado, sendo possível recuperá-los digitando de novo exatamente as mesmas configurações do [.filename]#vinum#, a situação é difícil de corrigir de forma definitiva. Pois será necessário mover toda a partição [.filename]#vinum# em pelo menos 4 KB, para que o cabeçalho [.filename]#vinum# e o bootstrap do sistema não colidam mais.
+Da mesma forma, se a situação acima foi recuperada, inicializando de uma mídia "Fixit", e o bootstrap foi reinstalado usando `bsdlabel -B` como descrito em extref:{handbook}boot[Estágio Um e Estágio Dois, boot-boot1], o bootstrap irá estragar o cabeçalho [.filename]#vinum# e o [.filename]#vinum# não encontrará mais seu(s) disco(s). Entretando nenhum dado de configuração real do [.filename]#vinum# e nenhum volume [.filename]#vinum# de dados foi descartado, sendo possível recuperá-los digitando de novo exatamente as mesmas configurações do [.filename]#vinum#, a situação é difícil de corrigir de forma definitiva. Pois será necessário mover toda a partição [.filename]#vinum# em pelo menos 4 KB, para que o cabeçalho [.filename]#vinum# e o bootstrap do sistema não colidam mais.
diff --git a/documentation/content/pt-br/articles/vm-design/_index.adoc b/documentation/content/pt-br/articles/vm-design/_index.adoc
index 5187c09688..a5be48d465 100644
--- a/documentation/content/pt-br/articles/vm-design/_index.adoc
+++ b/documentation/content/pt-br/articles/vm-design/_index.adoc
@@ -3,7 +3,6 @@ title: Elementos de design do sistema de VM do FreeBSD
authors:
- author: Matthew Dillon
email: dillon@apollo.backplane.com
-releaseinfo: "$FreeBSD$"
trademarks: ["freebsd", "linux", "microsoft", "opengroup", "daemon-news", "general"]
---
@@ -16,24 +15,26 @@ trademarks: ["freebsd", "linux", "microsoft", "opengroup", "daemon-news", "gener
:sectnumlevels: 6
:source-highlighter: rouge
:experimental:
-:toc-title: Índice
-:part-signifier: Parte
-:chapter-signifier: Capítulo
-:appendix-caption: Apêndice
-:table-caption: Tabela
-:figure-caption: Figura
-:example-caption: Exemplo
-
-ifeval::["{backend}" == "html5"]
-:imagesdir: ../../../images/articles/vm-design/
+:images-path: articles/vm-design/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+:imagesdir: ../../../images/{images-path}
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../shared/asciidoctor.adoc[]
endif::[]
-
-ifeval::["{backend}" == "pdf"]
-:imagesdir: ../../../../static/images/articles/vm-design/
endif::[]
-ifeval::["{backend}" == "epub3"]
-:imagesdir: ../../../../static/images/articles/vm-design/
+ifndef::env-beastie[]
+include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[.abstract-title]